PageSourceSearch

https://sure-trac.com/wp-content/themes/suretrac-elementor-theme/assets/js/choose-model.js?ver=7.0.6

js sure-trac.com collected 2026-09-30 18:58:32 UTC 8,635 bytes, 237 lines download raw bytes

1document.addEventListener('DOMContentLoaded', () => {
2
3    function chooseModelWidget() {
4        const trailerForm = document.querySelector('#choose-trailer')
5        const trailerTypes = document.querySelector('#trailer-types')
6        const trailerModels = document.querySelector('#trailer-models')
7
8        // Populate trailer types on page load
9        let payloadTypes = new URLSearchParams();
10        payloadTypes.append('action', 'populate_dropdown_types')
11
12        fetch('/wp-admin/admin-ajax.php', {
13            method: 'POST',
14            body: payloadTypes
15        })
16            .then(response => {
17                if (!response.ok) {
18                    throw new Error('Network response error!')
19                }
20                return response.json()
21            })
22            .then(data => {
23                trailerTypes.innerHTML = data
24            })
25            .catch(error => {
26                console.error(error);
27            })
28
29        // Populate trailer models dropdown when trailer types is changed
30        trailerTypes.addEventListener('change', () => {
31            let seriesId = trailerTypes.value
32            let payloadModels = new URLSearchParams();
33            payloadModels.append('action', 'populate_dropdown_models')
34            payloadModels.append('seriesId', seriesId)
35
36            fetch('/wp-admin/admin-ajax.php', {
37                method: 'POST',
38                body: payloadModels
39            })
40                .then(response => {
41                    if (!response.ok) {
42                        throw new Error('Network response error!')
43                    }
44                    return response.json()
45                })
46                .then(data => {
47                    trailerModels.innerHTML = data
48                })
49                .catch(error => {
50                    console.error(error);
51                })
52        })
53
54        // Update form action when trailer model is changed
55        trailerModels.addEventListener('change', () => {
56            let productSlug = trailerModels.value
57            trailerForm.action = `/trailers/${productSlug}`
58        })
59
60        // Handle submission
61        trailerForm.addEventListener('submit', (e) => {
62            if (trailerModels.value == '' || trailerModels.value == null) {
63                e.preventDefault()
64                trailerModels.style.outline = '2px solid red'
65            }
66        })
67    }
68
69    function populateVariantCard() {
70        let variantModalWrapper = document.querySelector('#variant-modal-wrapper')
71        let variantModal = document.querySelector('#variant-modal')
72        let viewDetails = document.querySelectorAll('.card-view-details')
73        const variantLoading = variantModal.querySelector('.variant-modal-loading')
74
75        variantModalWrapper.addEventListener('click', (e) => {
76            if (e.target == variantModalWrapper) {
77                variantModalWrapper.classList.toggle('modal-hide')
78            }
79        })
80
81        for (let viewDetail of viewDetails) {
82            viewDetail.addEventListener('click', (e) => {
83                e.preventDefault()
84                let variantId = viewDetail.dataset.variantId
85                let payload = new URLSearchParams();
86                payload.append('action', 'populate_variant_modal')
87                payload.append('variantId', variantId)
88                variantModal.innerHTML = variantLoading.outerHTML
89                variantModalWrapper.classList.toggle('modal-hide')
90                document.querySelector('body').style.overflow = 'hidden'
91
92                fetch('/wp-admin/admin-ajax.php', {
93                    method: 'POST',
94                    body: payload
95                })
96                    .then(response => {
97                        if (!response.ok) {
98                            throw new Error('Network response error!')
99                        }
100                        return response.json()
101                    })
102                    .then(data => {
103                        variantModal.innerHTML = data
104                        variantModal.querySelector('.variant-modal-close').addEventListener('click', () => {
105                            variantModalWrapper.classList.toggle('modal-hide')
106                            document.querySelector('body').style.overflow = 'auto'
107                        })
108                    })
109                    .catch(error => {
110                        console.error(error);
111                    })
112            })
113        }
114    }
115
116    function addSubnavListeners() {
117        const subnavOpen = document.querySelector('.subnav-mobile-open')
118        const subnavClose = document.querySelector('.subnav-mobile-close')
119        const subnavLinks = document.querySelector('.subnav-links-mobile')
120        const subnavLinkItems = subnavLinks.querySelectorAll('.subnav-link-mobile')
121
122        subnavOpen.addEventListener('click', () => {
123            subnavLinks.classList.toggle('subnav-mobile-show')
124            subnavOpen.classList.toggle('hide-toggle')
125            subnavClose.classList.toggle('hide-toggle')
126        })
127
128        subnavClose.addEventListener('click', () => {
129            subnavLinks.classList.toggle('subnav-mobile-show')
130            subnavOpen.classList.toggle('hide-toggle')
131            subnavClose.classList.toggle('hide-toggle')
132        })
133
134        for (let subnavLinkItem of subnavLinkItems) {
135            subnavLinkItem.addEventListener('click', () => {
136                subnavLinks.classList.toggle('subnav-mobile-show')
137                subnavOpen.classList.toggle('hide-toggle')
138                subnavClose.classList.toggle('hide-toggle')
139            })
140        }
141    }
142
143    // function addConfiguratorListeners() {
144    //     const loadedDimInputs = document.querySelectorAll('.loaded-dims input')
145    //     const loadedGvwrInputs = document.querySelector('.loaded-gvwr')
146    //     const gvwrInputs = loadedGvwrInputs.querySelectorAll('input')
147
148    //     for (let loadedDimInput of loadedDimInputs) {
149    //         loadedDimInput.addEventListener('click', () => {
150    //             for (let gvwrInput of gvwrInputs) {
151    //                 gvwrInput.parentElement.style.display = 'flex'
152    //                 if (!gvwrInput.value.includes(loadedDimInput.value)) {
153    //                     gvwrInput.parentElement.style.display = 'none'
154    //                 }
155    //             }
156    //             loadedGvwrInputs.classList.remove('loaded-gvwr')
157    //         })
158    //     }
159    // }
160
161    
162
163    const loadedDims = document.querySelector('.loaded-dims')
164    if (loadedDims) {
165        addConfiguratorListeners()
166    }
167
168    const trailerForm = document.querySelector('#choose-trailer')
169    if (trailerForm) {
170        chooseModelWidget()
171    }
172
173    const variantModal = document.querySelector('#variant-modal-wrapper')
174    if (variantModal) {
175        populateVariantCard()
176    }
177
178    const subNav = document.querySelector('#subnav')
179    if (subNav) {
180        addSubnavListeners()
181    }
182})
183
184function addConfiguratorListeners() {
185        const loadedDimInputs = document.querySelectorAll('.loaded-dims input');
186        const gvwrWrapper = document.querySelector('.loaded-gvwr');
187
188        if (!gvwrWrapper) return;
189
190        const gvwrInputs = gvwrWrapper.querySelectorAll('input');
191
192        function filterGvwrOptions(selectedValue) {
193            gvwrInputs.forEach(gvwrInput => {
194                gvwrInput.checked = false;
195            });
196
197            gvwrInputs.forEach(gvwrInput => {
198                const wrapper = gvwrInput.closest('label') || gvwrInput.parentElement;
199
200                // Reset display to ensure it's not stuck hidden
201                wrapper.style.display = 'flex';
202
203                if (!gvwrInput.value.includes(selectedValue)) {
204                    wrapper.style.display = 'none';
205                }
206            });
207
208            if (gvwrWrapper) {
209                gvwrWrapper.classList.remove('gvwr-hidden');
210            }
211        }
212
213        loadedDimInputs.forEach(input => {
214            input.addEventListener('change', () => {
215                filterGvwrOptions(input.value);
216            });
217
218            // Also re-trigger if already selected (e.g. after submit)
219            if (input.checked) {
220                filterGvwrOptions(input.value);
221            }
222        });
223    }
224
225document.addEventListener('DOMContentLoaded', () => {
226    if (document.querySelector('.loaded-dims')) {
227        addConfiguratorListeners();
228    }
229});
230
231jQuery(document).on('gform_post_render', function () {
232    setTimeout(() => {
233        if (document.querySelector('.loaded-dims')) {
234            addConfiguratorListeners();
235        }
236    }, 100);
237});

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.