PageSourceSearch

https://www.zamnesia.es/modules/newseedfinder/js/front.js?_=560f8f09da050aa5b6497d2740097f16

js zamnesia.es collected 2026-09-25 19:16:05 UTC 16,278 bytes, 502 lines download raw bytes

1const state = {
2    layersQuantity: null,
3    layersPosition: null,
4    currentLayerId: null,
5    previousIds: [],
6    selectedOptions: {}, //[layer_id]: optin_id || [...optoin_id]
7    preSelectedOptions: {},
8    multiple: false,
9    questionNumber: null,
10    debug: false
11};
12
13let swiperTopPagination = null;
14let swiperNewseedFinderProducts = null;
15let lazyInstanceNsf = null;
16
17function initSeedfinder() {
18    swiperTopPagination = new Swiper('.newSeedfinder-navigation', {
19        slidesPerView: 'auto',
20        loop: false,
21        speed: 400
22    });
23
24    state.layersQuantity = $('.seedfinder-swiper-slide').data('layers-quantity');
25    state.layersPosition = $('.seedfinder-swiper-slide').data('layers-position');
26    state.currentLayerId = $('.seedfinder-swiper-slide').data('layerid');
27    state.multiple = $('.seedfinder-swiper-slide').data('multiple');
28    state.questionNumber = $('.seedfinder-swiper-slide').data('question-number');
29    if (typeof $('.seedfinder-swiper-slide').data('selected-options') == 'object') {
30        state.selectedOptions = $('.seedfinder-swiper-slide').data('selected-options');
31        for (let i in state.selectedOptions) {
32            state.previousIds.push(i);
33        }
34    }
35
36    if (typeof preselectedOptionsJson !== 'undefined' && preselectedOptionsJson) {
37        state.preSelectedOptions = JSON.parse(preselectedOptionsJson);
38    }
39
40    if (state.debug) {
41        console.log('state on init')
42        console.log(state)
43    }
44
45    if ($('.seedfinder-products__wrap#product_list').length) {
46       decorateRenderedProductsView();
47    }
48
49    if ($('#noProducts-wrap').length) {
50        decorateRenderedNoProductsView();
51    }
52
53    assignPaginationClickEvent();
54    assignOptionClickEvent();
55    updateNavigationButtonsAvailability();
56
57    assignResetButtonClickEvent();
58
59    $('.seedfinder-next').click(function () {
60        if ($('.seedfinder-next button').hasClass('disabled')) {
61            return false;
62        }
63        changeLayer('next');
64    });
65    assignBackButtonClickEvent();
66}
67
68function changeLayer(direction, numberQuestion = 0, idLayer = 0, reset = false) {
69    $('.seedfinder-body').addClass('loading');
70    let data = {};
71    if (direction === 'next') {
72        data = state;
73    } else if (direction == 'back' || direction == 'number') {
74        state.questionNumber = numberQuestion;
75        state.layersPosition = numberQuestion;
76        if (reset) {
77            state.selectedOptions = {};
78            state.previousIds = [];
79        }
80        data = { ...state, back: idLayer}
81        if (reset) {
82            data = { ...data, actionRestart: 1}
83        }
84    }
85    $.ajax({
86        type: 'post',
87        data,
88        url: baseDir + 'modules/newseedfinder/ajax.php',
89        success: (data) => {
90            var data_result = JSON.parse(data);
91
92            if (data_result.products) {
93                updateProgressBar('last')
94                renderProducts(data_result.products)
95                return;
96            }
97
98            if (data_result.noProducts) {
99                updateProgressBar('last')
100                renderNoProducts(data_result.noProducts)
101                return;
102            }
103
104            if (direction === 'next') {
105                const previousIds = state.previousIds;
106                let index =  previousIds.findIndex(($id) => $id == state.currentLayerId);
107                if (index === -1) {
108                    state.previousIds.push(state.currentLayerId);
109                }
110                if (data_result.position) {
111                    state.questionNumber = data_result.position;
112                } else {
113                    state.questionNumber++;
114                }
115            } else if (direction == 'back' || direction == 'number') {
116                state.layersPosition = data_result.position;
117            }
118
119            state.currentLayerId = data_result.id;
120            state.multiple       = Boolean(data_result.multiple === '1');
121            state.layersPosition = Number(data_result.position);
122            $('#nsf-wrapper').removeClass('showProducts')
123            $('#nsf-wrapper').removeClass('noProducts')
124            $('.seedfinder-wrap').removeClass('showProducts')
125            $('.seedfinder-wrap').removeClass('noProducts')
126            $('.seedfinder-pagination').show()
127
128            updateProgressBar(data_result.position, data_result.id, reset);
129            updateNavigationButtonsAvailability();
130            assignBackButtonClickEvent();
131            assignResetButtonClickEvent();
132
133            $('.seedfinder-swiper-slide').html(data_result.optionsHTML).fadeIn(250);
134
135            updateOptionSelectedStatus();
136            assignOptionClickEvent();
137
138        },
139        error: () => {
140            console.log('Technical error');
141        }
142    });
143    $('.seedfinder-body').removeClass('loading');
144
145    if (state.debug) {
146        console.log('state after change layer')
147        console.log(state)
148    }
149}
150
151function updateOptionSelectedStatus() {
152    if (typeof state.selectedOptions[state.currentLayerId] !== 'undefined' && state.selectedOptions[state.currentLayerId].length) {
153        state.selectedOptions[state.currentLayerId].forEach(function (e) {
154            $('.seedfinder-layer-element[data-optionid='+e+']').addClass('selected')
155        })
156    }
157}
158
159function updateNavigationButtonsAvailability() {
160    if (typeof state.selectedOptions[state.currentLayerId] !== 'undefined' && state.selectedOptions[state.currentLayerId].length) {
161        $('.seedfinder-next button').removeClass('disabled');
162    } else {
163        $('.seedfinder-next button').addClass('disabled');
164    }
165    if (state.layersPosition > 1) {
166        $('.seedfinder-reset').removeClass('deactivated');
167        $('.seedfinder-back button').removeClass('disabled');
168    } else {
169        $('.seedfinder-reset').addClass('deactivated');
170        $('.seedfinder-back button').addClass('disabled');
171    }
172    if (state.layersPosition == state.layersQuantity) {
173        $('.seedfinder-next button').hide();
174        $('.seedfinder-next button#show_results').show();
175    } else {
176        $('.seedfinder-next button').hide();
177        if (window.innerWidth > 767) {
178            $('.seedfinder-next button#desktop_next').show();
179        } else {
180            $('.seedfinder-next button#mobile_next').show();
181        }
182    }
183}
184
185function getDoneElements()
186{
187    let doneElements = Array();
188    $('.element-done').each(function (e) {
189        doneElements.push($(this).attr('data-number'))
190    })
191    return doneElements;
192}
193
194function assignResetButtonClickEvent()
195{
196    $('.seedfinder-reset').unbind('click');
197    const doneElements = getDoneElements();
198    let realFirstStep = null;
199
200    doneElements.every(v => {
201        if (state.selectedOptions[v]) {
202            realFirstStep = v;
203            return false;
204        }
205        return true;
206    });
207    if (realFirstStep) {
208        $('.seedfinder-reset').click(function () {
209            if ($('.seedfinder-reset').hasClass('deactivated')) {
210                return;
211            }
212            changeLayer('number', parseInt($('.bar-element[data-number='+realFirstStep+']').attr('data-quest')), realFirstStep, true);
213        });
214    } else {
215        $('.seedfinder-reset').addClass('deactivated');
216    }
217
218}
219
220function assignBackButtonClickEvent()
221{
222    $('.seedfinder-back').unbind('click');
223    $('.seedfinder-back').click(function () {
224
225        const reversedDoneElements = getDoneElements().reverse();
226        let backTo = null;
227        reversedDoneElements.every(v => {
228            if (state.selectedOptions[v]) {
229                backTo = v;
230                return false;
231            }
232            return true;
233        });
234
235        if (backTo) {
236            changeLayer('back', $('.bar-element[data-number='+backTo+']').attr('data-quest'), backTo);
237        }
238
239    });
240}
241
242function assignPaginationClickEvent()
243{
244    $('.bar-element').unbind('click');
245    $('.element-done').click(function () {
246        changeLayer('number', parseInt($(this).attr('data-quest')), parseInt($(this).attr('data-number')));
247    });
248}
249
250function assignBackRestartButtonClickEvent()
251{
252    const doneElements = getDoneElements();
253    const reversedDoneElements = getDoneElements().reverse();
254    let realFirstStep = null;
255    let realLastStep = null;
256
257    reversedDoneElements.every(v => {
258        if (state.selectedOptions[v]) {
259            realLastStep = v;
260            return false;
261        }
262        return true;
263    });
264    doneElements.every(v => {
265        if (state.selectedOptions[v]) {
266            realFirstStep = v;
267            return false;
268        }
269        return true;
270    });
271
272    $('#back-to-first-step').click(function () {
273        changeLayer('number', parseInt($('.bar-element[data-number='+realFirstStep+']').attr('data-quest')), realFirstStep, true);
274    });
275
276    $('#back-to-last-step').click(function () {
277        changeLayer('number', parseInt($('.bar-element[data-number='+realLastStep+']').attr('data-quest')), realLastStep);
278    });
279}
280
281function assignOptionClickEvent()
282{
283    $('.seedfinder-layer-element').click(function () {
284        const selectedOptionId = String($(this).data('optionid'));
285        const noPreferenceOption = Boolean($(this).data('nochoice'));
286        const noPreferenceId = $(document).find('.seedfinder-layer-element[data-nochoice=1]').attr('data-optionid');
287
288        if (!state.selectedOptions[state.currentLayerId]) {
289            state.selectedOptions[state.currentLayerId] = [];
290        }
291
292        const stateOptions = state.selectedOptions[state.currentLayerId];
293
294        let index =  stateOptions.findIndex(($id) =>
294 $id == selectedOptionId);
295
296        if (index === -1) {
297            if (state.multiple == 0) {
298                state.selectedOptions[state.currentLayerId] = [];
299            }
300            if (state.multiple == 1) {
301                state.selectedOptions[state.currentLayerId] = stateOptions.filter(($id) => $id != noPreferenceId);
302            }
303            state.selectedOptions[state.currentLayerId].push(selectedOptionId)
304        } else {
305            state.selectedOptions[state.currentLayerId] = stateOptions.filter(($id) => $id != selectedOptionId);
306        }
307
308        if (state.multiple == 0) {
309            $(document).find('.seedfinder-layer-element').removeClass('selected');
310            if (index !== -1) {
311                updateNavigationButtonsAvailability();
312                return;
313            }
314            $(this).addClass('selected');
315        } else {
316
317            if (noPreferenceOption) {
318                $(document).find('.seedfinder-layer-element').removeClass('selected');
319                state.selectedOptions[state.currentLayerId] = [selectedOptionId];
320            } else {
321                $(document).find('.seedfinder-layer-element[data-nochoice=1]').removeClass('selected');
322            }
323
324            if (index === -1) {
325                $(this).addClass('selected');
326            } else {
327                $(this).removeClass('selected');
328            }
329        }
330
331        updateNavigationButtonsAvailability();
332        if (state.debug) {
333            console.log('state after option click')
334            console.log(state)
335        }
336    });
337}
338
339function updateProgressBar(pos, id = null) {
340
341    if (pos === 'last') {
342        $('.element-current').addClass('element-done')
343        return;
344    }
345
346    $('.steps-counter-current-step').html(pos)
347
348    for (i = 1; i <= state.layersQuantity; i++) {
349        if (i < state.questionNumber) {
350            classAdd = 'element-done';
351            classRemove = 'element-not-done';
352            if ($('.main-progress #bar-element' + (i)).hasClass('element-current')) {
353                classRemove = 'element-current';
354            }
355        }
356        else if (i == state.questionNumber) {
357            classAdd = 'element-current';
358            if (id) {
359                $('.main-progress #bar-element' + (i)).attr('data-number', id);
360            }
361            if ($('.main-progress #bar-element' + (i)).hasClass('element-not-done')) {
362                classRemove = 'element-not-done';
363            } else {
364                classRemove = 'element-done';
365            }
366        }
367        else {
368            classAdd = 'element-not-done';
369            classRemove = 'element-done';
370            if ($('.main-progress #bar-element' + (i)).hasClass('element-current')) {
371                classRemove = 'element-current';
372            }
373        }
374        $('.main-progress #bar-element' + (i)).addClass(classAdd);
375        $('.main-progress #bar-element' + (i)).removeClass(classRemove);
376        if ($('.main-progress #bar-element' + (i)).hasClass('element-not-done')) {
377            $('.main-progress #bar-element' + (i)).removeClass('element-done');
378        }
379    }
380
381    assignPaginationClickEvent();
382
383    if (typeof swiperTopPagination !== 'undefined') {
384        if (state.questionNumber > 2) {
385            swiperTopPagination.slideTo(state.questionNumber - 2);
386        }
387        if (state.questionNumber <= 2) {
388            swiperTopPagination.slideTo(0);
389        }
390    }
391}
392
393function renderNoProducts(noProducts) {
394    $('.seedfinder-swiper-slide').html(noProducts);
395    decorateRenderedNoProductsView();
396}
397
398function renderProducts(products) {
399    $('.seedfinder-swiper-slide').fadeOut(250, () => {
400        $('.seedfinder-swiper-slide').html(products).fadeIn(250, function () {
401            decorateRenderedProductsView();
402        });
403    });
404}
405
406function decorateRenderedNoProductsView()
407{
408    $('#nsf-wrapper').addClass('noProducts');
409    $('.seedfinder-wrap').addClass('noProducts')
410    assignBackRestartButtonClickEvent();
411}
412
413function decorateRenderedProductsView()
414{
415    $('#nsf-wrapper').addClass('showProducts')
416    $('.seedfinder-wrap').addClass('showProducts')
417
418    let defaultNumberPerView = 5.2;
419    let numberPerView767 = 2.2;
420    let numberPerView1199 = 3.2;
421    let numberPerView1599 = 4.2;
422    if (!$('#nsf-wrapper').length) {
423        defaultNumberPerView = 4.2;
424    }
425
426    if ($('#newseedfinder.newseedfinderPage').length) {
427        defaultNumberPerView = 5.5;
428        numberPerView1199 = 4.5;
429        numberPerView1599 = 5.5;
430    }
431
432    swiperNewseedFinderProducts = new Swiper('.newSeedfinder-productList', {
433        slidesPerView: defaultNumberPerView,
434        loop: false,
435        spaceBetween: 20,
436        speed: 400,
437        nextButton: '.seedfinder-products__list-head .swiper-button-next',
438        prevButton: '.seedfinder-products__list-head .swiper-button-prev',
439        breakpoints: {
440            767: {
441                slidesPerView: numberPerView767
442            },
443            1199: {
444                slidesPerView: numberPerView1199
445            },
446            1599: {
447                slidesPerView: numberPerView1599
448            }
449        },
450        onTransitionStart: function () {
451            if (typeof(lazyInstanceNsf) != 'undefined' && typeof lazyInstanceNsf.update === 'function') {
452                lazyInstanceNsf.update();
453            }
454        }
455    });
456
457    if ($('.productCardWrap img.lazy').length) {
458        lazyInstanceNsf = $('.productCardWrap img.lazy').Lazy({
459            chainable: false,
460            afterLoad: function (element) {
461                let productCardWrap = $('.productCardWrap');
462                if (productCardWrap) {
463                    productCardWrap.equalHeights();
464                }
465            }
466        });
467    }
468
469    ajaxCart.overrideButtonsInThePage();
470    equalHeightsProductCardBottom();
471    assignBackRestartButtonClickEvent();
472    displayProductsRating();
473    initNiceCombinationsSelect();
474
475    $('.show_more').click(function () {
476        $(this).hide();
477        $(this).parent().find('.hidden-features').show();
478        $(this).parent().find('.show_less').show();
479    })
480    $('.show_less').click(function () {
481        $(this).hide();
482        $(this).parent().find('.hidden-features').hide();
483        $(this).parent().find('.always_show').show();
484        $(this).parent().find('.show_more').show();
485    })
486}
487
488function resetSeedfinder() {
489    $('#nsf-wrapper').removeClass('showProducts')
490    state.layersQuantity = null
491    state.layersPosition = null
492    state.currentLayerId = null
493    state.previousIds = []
494    state.selectedOptions = {}
495    state.preSelectedOptions = {}
496    state.multiple = false
497    state.questionNumber = null
498}
499
500$(document).ready(function() {
501    initSeedfinder();
502});

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.