PageSourceSearch

https://minimelts.pl/skins/store_user/store_9397e0e6322287803d7f1c3f5adc1227_30/js/user.js?sci=684

js minimelts.pl collected 2026-10-04 21:09:49 UTC 29,770 bytes, 668 lines download raw bytes

1/* pływające menu*/
2
3function update() {
4  if ($(window).scrollTop() > 100) {
5    $('.one').addClass('active');
6    $('.top-bar').addClass('noactive');
7  } else {
8    $('.one').removeClass('active');
9    $('.top-bar').removeClass('noactive');
10  }
11}
12setInterval(update, 100);
13
14
15
16/* MAMEZI - box config*/
17
18let configureProduct = {
19  'groupVariantIDs': [13],
20  'stockFlavours': ['Wiśnia z ciasteczkiem', 'Caffè Latte', 'Malina', 'Czekolada Biała Karmelowa E.Wedel', 'Czekolada Mleczna E.Wedel', 'Ice Tea BIG', 'Banan w polewie kakaowej BIG', 'Kokos w polewie kakaowej BIG', 'Kiwi BIG', 'Wiśnia BIG', 'Tutti Frutti', 'Brzoskwinia-Marakuja', 'Oranżada', 'Pina Colada', 'BIG Mango', 'BIG Wiśnia', 'BIG Kiwi', 'BIG Truskawka', 'BIG Banan w czekoladzie', 'BIG Kokos w czekoladzie', 'Wata cukrowa', 'Wanilia', 'Truskawka', 'Śmietanka z ciasteczkiem', 'Pianki', 'Mango', 'Jagoda', 'Guma balonowa', 'Mięta z czekoladą', 'Czekolada', 'Cytryna - limonka', 'Banana Split'],
21  'stockAccesories': ['Kolorowe czapeczki', 'Czapeczki EKO', 'Kolorowe kubeczki'],
22  'stockSpoons': ['Łyżeczki w zestawie'],
23  'stockPortion': ['Wybierz ilość porcji'],
24  'stockPortionExeptions': {
25    'MINIBOX: 15 porcji': 15,
26    'MIDIBOX: 20 +2 porcje gratis': 22,
27    'MEGABOX: 25 +6 porcji gratis': 31,
28    'GIGABOX: 30 +10 porcji gratis': 40,
29  },
30  'text': {
31    'error': 'Błąd',
32    'too_much_spoons': 'Ilość łyżeczek nie może przekroczyć ilości porcji',
33    'choose_portion_first': 'Najpierw wybierz ilość porcji',
34    'config_error': 'Błąd w konfiguracji sklepu.<br>W celu zamówienia innej ilości skontaktuj się z administratorem sklepu.',
35  },
36}
37
38if (!String.prototype.replaceAll) {
39  String.prototype.replaceAll = function(str, newStr){
40  	if (Object.prototype.toString.call(str).toLowerCase() === '[object regexp]') {
41  		return this.replace(str, newStr);
42  	}
43  	return this.replace(new RegExp(str, 'g'), newStr);
44  };
45}
46
47/* MAMEZI - box config*/
48/* more links effect in menu */
49
50var collapseMenu = function(arrSelectors) {
51
52    var mobileViewport = window.matchMedia("screen and (max-width: 767px)");
53    var menu = document.querySelector(".menu");
54
55    if (mobileViewport.matches || !menu) {
56        return;
57    }
58
59    var htmlLang = document.getElementsByTagName('html')[0].getAttribute('lang');
60    var moreText = {
61        'pl': 'więcej',
62        'en': 'more',
63        'de': 'mehr',
64        'fr': 'plus',
65        'ru': 'более'
66    };
67
68    moreTextLang = moreText[htmlLang] || 'more';
69
70    var arrSelectors = arrSelectors || [];
71
72
73    var innerMenu = document.querySelector(".menu .innermenu");
74    var innerMenuChildren = Array.prototype.slice.call(innerMenu.children);
75
76    var menuContainer = document.querySelector(".menu-list");
77    var menuItems = document.querySelectorAll(".menu-list > li:not(.showMore)");
78
79    menuContainer.insertAdjacentHTML("beforeend", '<li class="showMore parent"><h3><a href="#" title="' + moreTextLang + '" class="spanhover mainlevel"><span>' + moreTextLang + '</span></a></h3><div class="submenu level1"><ul class="secondMenu level1">' + menuContainer.innerHTML + '</ul></div></li>');
80
81    var secondMenuItems = menuContainer.querySelectorAll(".secondMenu > li");
82
83    var allItems = menuContainer.querySelectorAll("li");
84    var moreLi = menuContainer.querySelector(".showMore");
85    var moreBtn = moreLi.querySelector("h3");
86
87    function reCount() {
88
89        var selectedMenuPositionWidth = 0;
90
91        innerMenuChildren.forEach(function(item) {
92
93            var flag = false;
94
95            for (var i = 0; i < arrSelectors.length; i++) {
96                if (item.classList.contains(arrSelectors[i])) {
97                    flag = true;
98                }
99            }
100
101            if (!flag) {
102                var itemStyle = item.currentStyle || window.getComputedStyle(item);
103                var itemMargin = parseFloat(itemStyle.marginLeft) + parseFloat(itemStyle.marginRight);
104
105                selectedMenuPositionWidth += item.offsetWidth + itemMargin;
106            }
107
108        });
109
110        if (innerMenu.offsetWidth - selectedMenuPositionWidth < menuContainer.offsetWidth) {
111            menuContainer.style.width = innerMenu.offsetWidth - selectedMenuPositionWidth - moreBtn.offsetWidth + "px";
112        }
113    }
114
115    var doAdapt = function() {
116
117        allItems.forEach(function(item) {
118            item.classList.remove("none");
119        });
120
121        var stopWidth = moreBtn.offsetWidth;
122        var onlyMenuItemsWidth = 0;
123        var hiddenItems = [];
124        var primaryWidth = menuContainer.offsetWidth;
125
126        menuItems.forEach(function(item, i) {
127            if (primaryWidth >= stopWidth + item.offsetWidth) {
128                onlyMenuItemsWidth += item.offsetWidth;
129                stopWidth += item.offsetWidth;
130            } else {
131                item.classList.add("none");
132                hiddenItems.push(i);
133            }
134        });
135
136        if (!hiddenItems.length) {
137            moreLi.classList.add("none");
138            menuContainer.classList.remove("showSecond");
139        } else {
140            secondMenuItems.forEach(function(item, i) {
141                if (!hiddenItems.includes(i)) {
142                    item.classList.add("none");
143                    item.parentNode.removeChild(item);
144                } else {
145                    item.classList.remove("none");
146                }
147            });
148        }
149
150        menuContainer.style.opacity = "1";
151        menuContainer.style.position = "relative";
152    };
153
154    reCount();
155    doAdapt();
156
157};
158
159$(document).ready(function() {
160    var fxLogo = $("header .logo-bar .link-logo").clone();
161    var fxBasket = $("header .logo-bar .basket").detach();
162    var fxLogin = $("header .login-bar .links").detach();
163  var fxCustom = $('<div class="ue"><a href="/pl_PL/i/Unia-Europejska/52" class="fx-custom-icon"><img src="/userdata/public/assets/2026/icons/eu-center-pl.svg" alt="" width="131" height="80" /></a></div>')
164    if ($(".menu .innermenu").length) {
165        $(".menu .innermenu").prepend(fxLogo, fxBasket, fxLogin, fxCustom);
166    };
167
168    // search button
169
170    $('.menu .innermenu').prepend('<p id="fx-search" class="fx-searchBtn"></p>');
171
172    if ($(".logo-bar .search-form").hasClass('none') || $(".search__container").hasClass('none')) {
173        $("#fx-search").addClass('none');
174    }
175
176    $("#fx-search").click(function() {
177        $(this).toggleClass('fx-active');
178        $('.logo-bar .search-form').toggleClass('fx-active');
179    });
180
181    // user panel button
182
183    $('.menu .innermenu').prepend('<p id="fx-panel" class="fx-panelBtn"></p>');
184
185    if ($(".menu .basket").length) {
186        console.log("basket on");
187    }else{
188        $("#fx-panel").addClass('none');
189    }
190
191    $("#fx-panel").click(function() {
192        $(this).toggleClass('fx-active');
193        $('.menu .links').toggleClass('fx-active');
194    });
195
196    // menu fix init
197
198  	window.setTimeout(function(){
199         collapseMenu(['menu-mobile', 'links', 'menu-list']);
200    }, 0);
201
202});
203Shop.include({
204    selectorFunctions: {
205        imgReplace: {
206            selector: '[data-src][data-src-alt]',
207            domready: function($img) {
208                $img.on('mouseenter', function() {
209                    $(this).attr('src', $(this).data('srcAlt'));
210                }).on('mouseleave', function() {
211                    $(this).attr('src', $(this).data('src'));
212                });
213            }
214        }
215    }
216});
217
218//Polyfill
219if ('NodeList' in window && !NodeList.prototype.forEach) {
220	NodeList.prototype.forEach = function (callback, thisArg) {
221      		thisArg = thisArg || window;
222      		for (var i = 0; i < this.length; i++) {
223        	callback.call(thisArg, this[i], i, this);
224    	}
225	};
226}
227
228if (!Array.prototype.includes) {
229  Array.prototype.includes = function(searchElement /*, fromIndex*/ ) {
230    'use strict';
231    var O = Object(this);
232    var len = parseInt(O.length) || 0;
233    if (len === 0) {
234      return false;
235    }
236    var n = parseInt(arguments[1]) || 0;
237    var k;
238    if (n >= 0) {
239      k = n;
240    } else {
241      k = len + n;
242      if (k < 0) {k = 0;}
243    }
244    var currentElement;
245    while (k < len) {
246      currentElement = O[k];
247      if (searchElement === currentElement ||
248         (searchElement !== searchElement && currentElement !== currentElement)) { // NaN !== NaN
249        return true;
250      }
251      k++;
252    }
253    return false;
254  };
255}
256
257$(document).ready(function() {
258  let targets = $('.box .product .shaded_inputwrap, #box_productfull .basket .form-basket .quantity_wrap .number-wrap, .products.viewphot .product .buttons form .shaded_inputwrap, .productlist tbody tr td.quantity .shaded_inputwrap');
259  targets.each(function (i, e) {
260    let inputs = $('<div/>', {
261      class: 'fancy-inputs',
262      html: '<span class="fancy-inputs-bttn fancy-inputs-minus">-</span><span class="fancy-inputs-bttn fancy-inputs-plus">+</span>',
263    });
264    let input = $(e).find('input');
265    $(e).addClass('fancy-inputs-wrap').append(inputs);
266    inputs.find('span').click(function () {
267      if( input.val() && Number(input.val()) ){
268        if( $(this).hasClass('fancy-inputs-minus') ){
269          if( Number(input.val()) > 1 ){
270            input.val(Number(input.val())-1);
271          }
272        }else{
273          input.val(Number(input.val())+1);
274        }
275      }else{
276        input.val(1);
277      }
278      input.change();
279    });
280  });
281});
282
283function configureProductScript () {
284  let self = this;
285  this.nodes = {};
286  this.stockFlavours = {};
287  this.stockAccesories = {};
288  this.stockSpoons = false;
289  this.stockPortion = false;
290  this.options = {
291    portionChoosen: false,
292    flavoursChoosen: 0,
293    flavoursTotal: 0,
294    accesoriesChoosen: 0,
295    accesoriesTotal: 0,
296  }
297  this.init = function (data) {
298    self.data = data;
299    this.pll = data.text;
300    self.nodes.stock = $('#box_productfull .basket .form-basket .stocks');
301    let groupVariantID = Number( self.nodes.stock.attr('data-stock') );
302    if( !(self.data.groupVariantIDs.indexOf(groupVariantID) > -1) ){
303      return true;
304    }else{
305      self.nodes.stock.removeClass('configure-stock configure-stock-loading');
306    }
307    self.nodes.stock.addClass('configure-stock configure-stock-loading');
308    self.nodes.stockHead = $('<div/>', {
309      class: 'f-row configure-stock-head',
310      html: '<strong>Zbuduj swój box</strong>',
311    });
312    self.nodes.stock.prepend(self.nodes.stockHead);
313    let nodeSpoon = false;
314    self.nodes.popupFlavours = $('<div/>', {
315      class: 'configure-popup configure-popup-flavours',
316      html: '<div class="configure-popup-inner"><div class="configure-popup-head"><strong>Wybierz swoje smaki</strong><span class="configure-popup-close"></span></div>'+
317      '<div class="configure-popup-body"></div>'+
318      '<div class="configure-popup-footer"><span class="configure-popup-close">WYJDŹ</span>'+
319      '<div class="configure-popup-sum">Wybrano: <strong><span class="configure-popup-choosen">0</span>/<span class="configure-popup-total">0</span></strong></div>'+
320      '<span class="configure-popup-apply">+ DODAJ SMAKI</span></div></div>',
321    });
322    self.nodes.popupAccesories = $('<div/>', {
323      class: 'configure-popup configure-popup-accesories',
324      html: '<div class="configure-popup-inner"><div class="configure-popup-head"><strong>Wybierz swoje akcesoria (0,50zł/szt.)</strong><span class="configure-popup-close"></span></div>'+
325      '<div class="configure-popup-body"></div>'+
326      '<div class="configure-popup-footer"><span class="configure-popup-close">WYJDŹ</span>'+
327      '<div class="configure-popup-sum">Wybrano: <strong><span class="configure-popup-choosen">0</span>/<span class="configure-popup-total">0</span></strong></div>'+
328      '<span class="configure-popup-apply">+ DODAJ AKCESORIA</span></div></div>',
329    });
330    self.nodes.stock.append(self.nodes.popupFlavours);
331    self.nodes.stock.append(self.nodes.popupAccesories);
332    self.nodes.popupFlavoursInner = self.nodes.popupFlavours.find('.configure-popup-body');
333    self.nodes.popupAccesoriesInner = self.nodes.popupAccesories.find('.configure-popup-body');
334    self.nodes.stock.find('.stock-item-data').each(function (i, e) {
335      let itemName = $(e).attr('data-name');
336      let itemId = $(e).attr('data-id');
337      let itemType = $(e).attr('data-type');
338      let frow = $(e).closest('.f-row');
339      let elem = {
340        'frow': frow,
341        'itemType': itemType,
342        'itemId': itemId,
343        'itemName': itemName,
344      };
345      if( self.data.stockFlavours.indexOf(itemName) > -1 ){
346        self.stockFlavours[itemId] = elem;
347        frow.addClass('soft-hide');
348        //frow.find('select').val( frow.find('select option[value]:not([value=""])').attr('value') );
349        let div = $('<div/>', {
350          'data-itemId': itemId,
351          'class': 'configure-popup-item',
352          'html': '<div class="configure-popup-item-img"><img src="' + window.location.origin + '/userdata/public/assets/configImages/' + itemName.replaceAll(' ', '_') + '.jpg"></div>'+
353          '<div class="configure-popup-item-name"><strong>' + itemName + '</strong></div>'+
354          '<div class="configure-popup-item-basket"><span class="input-btn input-btn-minus">-</span>
354<input type="number" data-last="0" value="0"><span class="input-btn input-btn-plus">+</span></div>',
355        });
356        self.nodes.popupFlavoursInner.append(div);
357      }else if( self.data.stockAccesories.indexOf(itemName) > -1 ){
358        self.stockAccesories[itemId] = elem;
359        frow.addClass('soft-hide');
360        frow.find('select').val( frow.find('select option[value]:not([value=""])').attr('value') );
361        let div = $('<div/>', {
362          'data-itemId': itemId,
363          'class': 'configure-popup-item',
364          'html': '<div class="configure-popup-item-img"><img src="' + window.location.origin + '/userdata/public/assets/configImages/' + itemName.replaceAll(' ', '_') + '.jpg"></div>'+
365          '<div class="configure-popup-item-name"><strong>' + itemName + '</strong></div>'+
366          '<div class="configure-popup-item-basket"><span class="input-btn input-btn-minus">-</span><input type="number" data-last="0" value="0"><span class="input-btn input-btn-plus">+</span></div>',
367        });
368        self.nodes.popupAccesoriesInner.append(div);
369      }else if( self.data.stockSpoons.indexOf(itemName) > -1 ){
370        self.stockSpoons = elem;
371        frow.addClass('configure-stock-spoon configure-stock-last');
372        nodeSpoon = frow;
373      }else if( self.data.stockPortion.indexOf(itemName) > -1 ){
374        self.stockPortion = elem;
375        frow.addClass('configure-stock-portion');
376      }
377    });
378    self.nodes.stockFlavours = $('<div/>', {
379      class: 'f-row configure-stock-flavours',
380      html: '<div class="label f-grid-6"><label class="label">Smaki:</label></div>'+
381      '<div class="stock-options f-grid-6"><div class="configure-stock-choose configure-stock-empty">Wybierz</div>'+
382      '<div class="configure-stock-full">'+
383      '<strong class="configure-stock-doneshort"></strong><strong class="configure-stock-donesum"></strong><div class="configure-stock-choose">Zmień</div>'+
384      '<div class="configure-stock-info"><div class="configure-stock-infoonner"><strong>WYBRANE SMAKI</strong><strong class="configure-stock-doneshort"></strong></div></div>'+
385      '</div></div>',
386    });
387    self.nodes.stockAccesories = $('<div/>', {
388      class: 'f-row configure-stock-accesories',
389      html: '<div class="label f-grid-6"><label class="label">Akcesoria:</label></div>'+
390      '<div class="stock-options f-grid-6"><div class="configure-stock-choose configure-stock-empty">Wybierz</div>'+
391      '<div class="configure-stock-full">'+
392      '<strong class="configure-stock-doneshort"></strong><strong class="configure-stock-donesum"></strong><div class="configure-stock-choose">Zmień</div>'+
393      '<div class="configure-stock-info"><div class="configure-stock-infoonner"><strong>WYBRANE AKCESORIA</strong><strong class="configure-stock-doneshort"></strong></div></div>'+
394      '</div></div>',
395    });
396    if(nodeSpoon){
397      nodeSpoon.before(self.nodes.stockFlavours);
398      nodeSpoon.before(self.nodes.stockAccesories);
399    }else{
400      self.nodes.stock.append(self.nodes.stockFlavours);
401      self.nodes.stock.append(self.nodes.stockAccesories);
402    }
403    self.addEvents();
404    self.nodes.stock.removeClass('configure-stock-loading');
405  }
406  this.addEvents = function () {
407    self.nodes.stockFlavours.on('click', '.configure-stock-choose', function (event) {
408      if( !self.options.portionChoosen ){
409        shoper.alert(self.pll.choose_portion_first, self.pll.error);
410        return true;
411      }
412      event.preventDefault();
413      self.nodes.popupFlavours.addClass('configure-popup-open');
414      self.nodes.popupFlavours.find('.configure-popup-total').text(self.options.flavoursTotal);
415      $('body').addClass('popup-fixed');
416      $('html').addClass('popup-fixed');
417    });
418    self.nodes.stockAccesories.on('click', '.configure-stock-choose', function (event) {
419      if( !self.options.portionChoosen ){
420        shoper.alert(self.pll.choose_portion_first, self.pll.error);
421        return true;
422      }
423      event.preventDefault();
424      self.nodes.popupAccesories.addClass('configure-popup-open');
425      self.nodes.popupAccesories.find('.configure-popup-total').text(self.options.accesoriesTotal);
426      $('body').addClass('popup-fixed');
427      $('html').addClass('popup-fixed');
428    });
429    self.nodes.stock.on('click', '.configure-popup-close', function (event) {
430      event.preventDefault();
431      $(this).closest('.configure-popup').removeClass('configure-popup-open');
432      $('body').removeClass('popup-fixed');
433      $('html').removeClass('popup-fixed');
434      $([document.documentElement, document.body]).animate({
435        scrollTop: self.nodes.stock.offset().top
436      }, 0);
437    });
438    self.nodes.stock.on('click', '.input-btn', function (event) {
439      event.preventDefault();
440      let input = $(this).siblings('input');
441      let v = Number( input.val() );
442      if( $(this).hasClass('input-btn-minus') ){
443        if(v && v > 1){
444          input.val(v-1);
445        }else{
446          input.val(0);
447        }
448      }else{
449        if(v){
450          input.val(v+1);
451        }else{
452          input.val(1);
453        }
454      }
455      input.change();
456    });
457    self.stockPortion.frow.find('select').change(function () {
458      if( $(this).val() ){
459        let number = $(this).find('option:selected').text();
460        if( self.data.stockPortionExeptions[ number ] ){
461          number = self.data.stockPortionExeptions[ number ];
462        }else{
463          number = parseFloat( number );
464        }
465        self.options.portionChoosen = number;
466        self.options.flavoursTotal = number;
467        self.options.accesoriesTotal = number;
468
469        $.each(self.stockFlavours, function (i, e) {
470          e.frow.find('select').val('').change();
471        });
472        $.each(self.stockAccesories, function (i, e) {
473          let val = $(e.frow.find('select').children('[value]:not([value=""])').eq(0)).attr('value');
474          e.frow.find('select').val(val).change();
475        });
476        self.stockSpoons.frow.find('select').val('').change();
477        $('.configure-popup-footer .configure-popup-sum strong .configure-popup-choosen').text('0');
478        $('.configure-popup-footer .configure-popup-sum strong.popup-choosen-all').removeClass('popup-choosen-all');
479        $('.configure-popup-footer .configure-popup-apply.popup-choosen-all').removeClass('popup-choosen-all');
480        $('.configure-popup-item .configure-popup-item-basket input').val(0).attr('data-last', 0);
481        $('.configure-popup-item.configure-popup-item-active').removeClass('configure-popup-item-active');
482        self.options.flavoursChoosen = 0;
483        self.options.accesoriesChoosen = 0;
484        self.nodes.stockAccesories.find('.configure-stock-empty').removeClass('off');
485        self.nodes.stockAccesories.find('.configure-stock-full').removeClass('on');
486        self.nodes.stockFlavours.find('.configure-stock-empty').removeClass('off');
487        self.nodes.stockFlavours.find('.configure-stock-full').removeClass('on');
488      }else{
489        self.options.portionChoosen = false;
490      }
491    });
492    self.nodes.popupFlavours.find('input').change(function () {
493      let input = $(this);
494      let lastValue = Number( input.attr('data-last') );
495      let currentValue = Math.round( Number( input.val() ) );
496      if(currentValue<0){
497        currentValue = 0;
498        input.val(0);
499      }
500      let change = currentValue - lastValue;
501      self.options.flavoursChoosen += change;
502      if( self.options.flavoursChoosen > self.options.flavoursTotal ){
503        let howMuch = self.options.flavoursChoosen - self.options.flavoursTotal;
504        self.options.flavoursChoosen = self.options.flavoursTotal;
505        currentValue = currentValue - howMuch;
506        input.val(currentValue);
507        self.nodes.popupFlavours.find('.configure-popup-sum strong').addClass('popup-choosen-all');
508        self.nodes.popupFlavours.find('.configure-popup-footer .configure-popup-apply').addClass('popup-choosen-all');
509      }else if( self.options.flavoursChoosen == self.options.flavoursTotal ){
510        self.nodes.popupFlavours.find('.configure-popup-sum strong').addClass('popup-choosen-all');
511        self.nodes.popupFlavours.find('.configure-popup-footer .configure-popup-apply').addClass('popup-choosen-all');
512      }else{
513        self.nodes.popupFlavours.find('.configure-popup-sum strong').removeClass('popup-choosen-all');
514        self.nodes.popupFlavours.find('.configure-popup-footer .configure-popup-apply').removeClass('popup-choosen-all');
515      }
516      let selectId = Number( input.closest('.configure-popup-item').attr('data-itemid') );
517      let allGood = self.chceckSelect( self.stockFlavours[selectId], currentValue );
518      if( !allGood ){
519        shoper.alert(self.pll.config_error, self.pll.error);
520        let last = Number( input.attr('data-last') );
521        self.options.flavoursChoosen = self.options.flavoursChoosen - (currentValue - last);
522        currentValue = last;
523        input.val( last );
524        self.nodes.popupFlavours.find('.configure-popup-sum strong').removeClass('popup-choosen-all');
525        self.nodes.popupFlavours.find('.configure-popup-footer .configure-popup-apply').removeClass('popup-choosen-all');
526      }
527      self.nodes.popupFlavours.find('.configure-popup-choosen').text(self.options.flavoursChoosen);
528      input.attr('data-last', currentValue);
529      if(currentValue>0){
530        input.closest('.configure-popup-item').addClass('configure-popup-item-active');
531      }else{
532        input.closest('.configure-popup-item').removeClass('configure-popup-item-active');
533      }
534    });
535    self.nodes.popupAccesories.find('input').change(function () {
536      let input = $(this);
537      let lastValue = Number( input.attr('data-last') );
538      let currentValue = Math.round( Number( input.val() ) );
539      if(currentValue<0){
540        currentValue = 0;
541        input.val(0);
542      }
543      let change = currentValue - lastValue;
544      self.options.accesoriesChoosen += change;
545      if( self.options.accesoriesChoosen > self.options.accesoriesTotal ){
546        let howMuch = self.options.accesoriesChoosen - self.options.accesoriesTotal;
547        self.options.accesoriesChoosen = self.options.accesoriesTotal;
548        currentValue = currentValue - howMuch;
549        input.val(currentValue);
550        self.nodes.popupAccesories.find('.configure-popup-sum strong').addClass('popup-choosen-all');
551        self.nodes.popupAccesories.find('.configure-popup-footer .configure-popup-apply').addClass('popup-choosen-all');
552      }else if( self.options.accesoriesChoosen > 0 ){
553        self.nodes.popupAccesories.find('.configure-popup-sum strong').addClass('popup-choosen-all');
554        self.nodes.popupAccesories.find('.configure-popup-footer .configure-popup-apply').addClass('popup-choosen-all');
555      }else if( self.options.accesoriesChoosen == 0 ){
556        self.nodes.popupAccesories.find('.configure-popup-sum strong').removeClass('popup-choosen-all');
557      }
558      let selectId = Number( input.closest('.configure-popup-item').attr('data-itemid') );
559      let allGood = self.chceckSelect( self.stockAccesories[selectId], currentValue );
560      if( !allGood ){
561        shoper.alert(self.pll.config_error, self.pll.error);
562        let last = Number( input.attr('data-last') );
563        self.options.accesoriesChoosen = self.options.accesoriesChoosen - (currentValue - last);
564        currentValue = last;
565        input.val( last );
566      }
567      self.nodes.popupAccesories.find('.configure-popup-choosen').text(self.options.accesoriesChoosen);
568      input.attr('data-last', currentValue);
569      if(currentValue>0){
570        input.closest('.configure-popup-item').addClass('configure-popup-item-active');
571      }else{
572        input.closest('.configure-popup-item').removeClass('configure-popup-item-active');
573      }
574    });
575    self.nodes.popupFlavours.on('click', '.configure-popup-apply.popup-choosen-all', function (event) {
576      event.preventDefault();
577      $(this).closest('.configure-popup').removeClass('configure-popup-open');
578      $('body').removeClass('popup-fixed');
579      $('html').removeClass('popup-fixed');
580      $([document.documentElement, document.body]).animate({
581        scrollTop: self.nodes.stock.offset().top
582      }, 0);
583      let resultString = '';
584      $.each(self.stockFlavours, function (i, e) {
585        let v = Number( self.nodes.popupFlavours.find('.configure-popup-item[data-itemid="' + e.itemId + '"] .configure-popup-item-basket input').val() );
586        if(v){
587          e.frow.find('select option').each(function (x, y) {
588            if( Number($(y).text()) == v ){
589              let val = $(y).attr('value');
590              e.frow.find('select').val(val).change();
591            }
592          });
593        }else{
594          let val = $(e.frow.find('select').children('[value]:not([value=""])').eq(0)).attr('value');
595          e.frow.find('select').val(val).change();
596        }
597        if(v){
598          resultString = resultString + v + 'x ' + e.itemName + ' <br>';
599        }
600      });
601      // console.log(resultString);
602      self.nodes.stockFlavours.find('.configure-stock-doneshort').html(resultString);
603      self.nodes.stockFlavours.find('.configure-stock-donesum').text('Wybrano: ' + self.options.flavoursChoosen);
604      self.nodes.stockFlavours.find('.configure-stock-empty').addClass('off');
605      self.nodes.stockFlavours.find('.configure-stock-full').addClass('on');
606    });
607    self.nodes.popupAccesories.on('click', '.configure-popup-apply.popup-choosen-all', function (event) {
608      event.preventDefault();
609      $(this).closest('.configure-popup').removeClass('configure-popup-open');
610      $('body').removeClass('popup-fixed');
611      $('html').removeClass('popup-fixed');
612      $([document.documentElement, document.body]).animate({
613        scrollTop: self.nodes.stock.offset().top
614      }, 0);
615      let resultString = '';
616      $.each(self.stockAccesories, function (i, e) {
617        let v = Number( self.nodes.popupAccesories.find('.configure-popup-item[data-itemid="' + e.itemId + '"] .configure-popup-item-basket input').val() );
618        if(v){
619          e.frow.find('select option').each(function (x, y) {
620            if( Number($(y).text()) == v ){
621              let val = $(y).attr('value');
622              e.frow.find('select').val(val).change();
623            }
624          });
625        }else{
626          let val = $(e.frow.find('select').children('[value]:not([value=""])').eq(0)).attr('value');
627          e.frow.find('select').val(val).change();
628        }
629        if(v){
630          resultString = resultString + v + 'x ' + e.itemName + ' <br>';
631        }
632      });
633      // console.log(resultString);
634      self.nodes.stockAccesories.find('.configure-stock-doneshort').html(resultString);
635      self.nodes.stockAccesories.find('.configure-stock-donesum').text('Wybrano: ' + self.options.accesoriesChoosen);
636      self.nodes.stockAccesories.find('.configure-stock-empty').addClass('off');
637      self.nodes.stockAccesories.find('.configure-stock-full').addClass('on');
638    });
639    self.stockSpoons.frow.find('select').change(function () {
640      let number = Number( $(this).find( "option:selected" ).text() );
641      if(!self.options.portionChoosen){
642        shoper.alert(self.pll.choose_portion_first, self.pll.error);
643        $(this).val('');
644        return true;
645      }
646      if(number > self.options.portionChoosen){
647        shoper.alert(self.pll.too_much_spoons, self.pll.error);
648        $(this).val('');
649        return true;
650      }
651    });
652  }
653  this.chceckSelect = function (data, value) {
654    let isOk = false;
655    data.frow.find('select option').each(function (i, e) {
656      if( Number($(e).text()) == value ){
657        isOk = true;
658      }
659    });
660    return isOk;
661  }
662}
663$(document).ready(function() {
664  if( typeof configureProduct === 'object' && configureProduct !== null && $('#box_productfull .basket .form-basket .stocks').length ){
665    let newconfigureProduct = new configureProductScript;
666    newconfigureProduct.init(configureProduct);
667  }
668});

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.