{"version":3,"file":"bundle.js","sources":["../../js/ui-elements/decimal-number.js","../../js/ui-elements/input-action.js","../../js/ui-elements/select.js","../../js/ui-elements/tooltip.js","../../js/ui-elements/input-mask.js","../../js/ui-elements/rating.js","../../js/ui-elements/tags.js","../../js/ui-elements/tab-panel.js","../../js/ui-elements/custom-select.js","../../js/ui-elements/accordion.js","../../js/ui-elements/file-upload.js","../../js/ui-elements/pagination.js","../../node_modules/jquery-viewport-checker/src/jquery.viewportchecker.js","../../node_modules/current-device/es/index.js","../../js/utils.js","../../js/popup.js","../../js/animations.js","../../js/form.js","../../js/headercatalog.js","../../js/header-search.js","../../js/cart.js","../../js/mediator.js","../../js/product.js","../../js/header.js","../../js/catalog-top-filter.js","../../js/filter.js","../../js/main.js"],"sourcesContent":["const numberWithCommas = function (x) {\r\n\treturn x.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \" \");\r\n};\r\nwindow.numberWithCommas = numberWithCommas;\r\n","$(function () {\r\n\tconst $input = $('.js-input');\r\n\r\n\t$input.focus(function(){\r\n\t\t$(this).parent('.form-field').addClass('form-field--focused');\r\n\t\t$(this).parent('.form-field').removeClass('form-field--error');\r\n\t});\r\n\r\n\t$input.blur(function(){\r\n\t\tif ($(this).val() === ''){\r\n\t\t\t$(this).parent('.form-field').removeClass('form-field--focused');\r\n\t\t}\r\n\t});\r\n\r\n\t// Set focused class if have value\r\n\tfunction setInputFocused() {\r\n\t\t$input.each(function () {\r\n\t\t\tif ($(this).val() === ''){\r\n\t\t\t\t$(this).parent('.form-field').removeClass('form-field--focused');\r\n\t\t\t} else {\r\n\t\t\t\t$(this).parent('.form-field').addClass('form-field--focused');\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tsetInputFocused();\r\n});\r\n","window.initSelect = function () {\r\n let $select = $('.js-select');\r\n window.$select = $select;\r\n $select.select2({\r\n dropdownAutoWidth: true,\r\n containerCssClass: 'select',\r\n dropdownCssClass: 'no-input'\r\n }).on('change', function (e) {\r\n const labelTxt = $(e.target).attr('data-label');\r\n if (!labelTxt) return;\r\n const $selectionBox = $(e.target).siblings('.select2').find('.select2-selection__rendered');\r\n const labelTemplate = `${labelTxt}: `;\r\n $selectionBox.prepend(labelTemplate);\r\n }).trigger('change');\r\n\r\n $('.js-select-default')\r\n .select2({\r\n dropdownAutoWidth: true,\r\n containerCssClass: 'select',\r\n dropdownCssClass: 'no-input'\r\n })\r\n\r\n $('.js-select-search')\r\n .select2({\r\n dropdownAutoWidth: false,\r\n containerCssClass: 'select',\r\n })\r\n .on('change', function (e) {\r\n const labelTxt = $(e.target).attr('data-label');\r\n if (!labelTxt) return;\r\n const $selectionBox = $(e.target).siblings('.select2').find('.select2-selection__rendered');\r\n const labelTemplate = `${labelTxt}: `;\r\n $selectionBox.prepend(labelTemplate);\r\n })\r\n .trigger('change');\r\n}\r\n\r\n$(function () {\r\n initSelect();\r\n});\r\n","$(function () {\r\n\t$('.js-tooltip').tooltipster({\r\n\t\tside: 'bottom',\r\n\t\ttheme: ['tooltipster-shadow', 'tooltipster-shadow-customized'],\r\n\t\tmaxWidth: 300,\r\n\t\tdistance: 5,\r\n\t\tdebug: true\r\n\t});\r\n});\r\n","window.inputMask = function () {\r\n $('.js-input-mask').each(function () {\r\n const mask = $(this).data('mask');\r\n\r\n new Inputmask(\r\n {\r\n mask: mask,\r\n placeholder: '_',\r\n definitions: {\r\n \"F\": {\r\n validator: \"[9]\"\r\n },\r\n \"G\": {\r\n validator: \"[7]\"\r\n }\r\n },\r\n }\r\n ).mask(this);\r\n });\r\n\r\n $('.js-input-mask__inn').each(function () {\r\n const mask = $(this).data('mask');\r\n\r\n new Inputmask(\r\n {\r\n mask: mask,\r\n placeholder: '',\r\n }\r\n ).mask(this);\r\n });\r\n}\r\n\r\ninputMask();\r\n","$(function () {\r\n $('.js-rating-selectable').each(function () {\r\n const $stars = $(this).find('.rating__item');\r\n const $input = $(this).find('.js-rating-input');\r\n let $parent = $(this);\r\n\r\n $stars.on('mouseover', function () {\r\n const rateValue = $stars.index(this) + 1;\r\n $stars.removeClass('rating__item--active');\r\n $stars.filter((idx) => idx < rateValue).addClass('rating__item--active');\r\n $stars.filter((idx) => idx >= rateValue).removeClass('rating__item--active');\r\n $input.val(rateValue);\r\n });\r\n\r\n $stars.on('mouseout', function () {\r\n if (!$parent.hasClass('rating__clicked')) {\r\n $stars.removeClass('rating__item--active');\r\n }\r\n });\r\n\r\n $stars.on('click', function () {\r\n const rateValue = $stars.index(this) + 1;\r\n $stars.removeClass('rating__item--active');\r\n $stars.filter((idx) => idx < rateValue).addClass('rating__item--active');\r\n $stars.filter((idx) => idx >= rateValue).removeClass('rating__item--active');\r\n $input.val(rateValue);\r\n if ($parent.hasClass('rating__clicked')) {\r\n return;\r\n }\r\n $parent.addClass('rating__clicked');\r\n let type = $parent.data('type');\r\n let id = $parent.data('id');\r\n if (type === 'News' && +id > 0) {\r\n abp.services.app.jsProxy.setNewsVote(id, rateValue).done(function () {\r\n console.log('rating was sent:', rateValue);\r\n });\r\n }\r\n });\r\n });\r\n});","const tagsSelector = '.js-tags';\r\n\r\nwindow.initSliderTags = function () {\r\n $(function () {\r\n $(tagsSelector).each(function () {\r\n const listEl = $(this).find('.tags__list')[0];\r\n const hasScrollbar = listEl.scrollWidth > listEl.clientWidth;\r\n if (hasScrollbar) {\r\n $(this).addClass('tags--toggleable');\r\n }\r\n });\r\n\r\n $B.on('click', '.js-tags-showall', function (e) {\r\n e.preventDefault();\r\n $(this).parents(tagsSelector).addClass('tags--opened')\r\n });\r\n });\r\n}\r\ninitSliderTags();\r\n","$(function(){\r\n // tabs\r\n const activeClass = 'is-active';\r\n const tabLinkSelector = '.js-tabpanel-link';\r\n\r\n window.initTabBar = function () {\r\n $(tabLinkSelector).on('click', function (e) {\r\n e.preventDefault();\r\n var id = $(this).attr('href');\r\n var $tabRoot = $(this).parents('.js-tabpanel');\r\n $tabRoot.find(tabLinkSelector).removeClass(activeClass);\r\n $(this).addClass(activeClass);\r\n $tabRoot.find('.js-tabpanel-block').removeClass(activeClass);\r\n $tabRoot.find(id).addClass(activeClass);\r\n });\r\n\r\n $('.js-tobacco-tab-select').on('change', function(){\r\n const id = $(this).find(\":selected\").attr('data-tab-id');\r\n const $tabRoot = $(this).parents('.js-tabpanel');\r\n $tabRoot.find('.js-tabpanel-block').removeClass(activeClass);\r\n $tabRoot.find(id).addClass(activeClass);\r\n }); \r\n }\r\n \r\n initTabBar();\r\n})","window.initCustomSelect = function () {\r\n let $selectOpen = $('.js-custom-select__name');\r\n let $selectOption = $('.js-custom-select__option');\r\n $('.js-custom-select__option:first-child').addClass('is-active');\r\n $selectOpen.on('click', function (e) {\r\n e.preventDefault();\r\n let $unit = $(this).closest('.js-custom-select');\r\n\r\n $unit.find('.js-custom-select__list').slideToggle();\r\n $(this).toggleClass('is-active');\r\n });\r\n\r\n $selectOption.on('click', function () {\r\n let $unit = $(this).closest('.js-custom-select'),\r\n $name = $unit.find('.js-custom-select__name'),\r\n valSelect = $(this).text();\r\n $name.text(valSelect);\r\n $unit.find('.js-custom-select__list').slideUp();\r\n });\r\n}\r\n\r\nwindow.initCustomSelect();","$(function(){\r\n $('.js-accordion').find('.accordion__head').on('click', function(e){\r\n e.preventDefault();\r\n $(this).parents('.js-accordion').toggleClass('is-expanded');\r\n $(this).next().slideToggle();\r\n })\r\n})","window.initUploadFile = function () {\r\n // file upload\r\n $('.js-file-upload-input').off('change').change(function () {\r\n const value = $(this).val();\r\n\r\n const printFilename = (filename) => {\r\n const template = `\r\n\t\t\t\t
\r\n\t\t\t\t\t
${filename}
\r\n\t\t\t\t\t
х
\r\n\t\t\t\t
\r\n\t\t\t`;\r\n $(this).parents('.js-file-upload').find('.js-file-upload-result').html(template);\r\n }\r\n\r\n if (value) {\r\n const filename = value.match(/[^\\\\/]*$/)[0];\r\n printFilename(filename);\r\n }\r\n });\r\n\r\n $('.js-file-upload-result').on('click', '.js-file-upload-delete', function () {\r\n $(this).parents('.js-file-upload-item').remove();\r\n $('input[type=\"file\"]').val(null);\r\n });\r\n}\r\n\r\ninitUploadFile();\r\n ","$(function () {\r\n $('body').on('click', '.pagination__showmore', function (e) {\r\n let curPage = +$(this).attr('data-current-page');\r\n/* SB.DotNet.invokeMethodAsync(\"LoadMore\", curPage)\r\n .then((result) => {\r\n let nextPage = curPage + 1;\r\n $(this).attr('data-current-page', nextPage);\r\n });*/\r\n });\r\n})","/*\r\n The MIT License (MIT)\r\n\r\n Copyright (c) 2014 Dirk Groenen\r\n\r\n Permission is hereby granted, free of charge, to any person obtaining a copy of\r\n this software and associated documentation files (the \"Software\"), to deal in\r\n the Software without restriction, including without limitation the rights to\r\n use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r\n the Software, and to permit persons to whom the Software is furnished to do so,\r\n subject to the following conditions:\r\n\r\n The above copyright notice and this permission notice shall be included in all\r\n copies or substantial portions of the Software.\r\n*/\r\n\r\n(function($){\r\n $.fn.viewportChecker = function(useroptions){\r\n // Define options and extend with user\r\n var options = {\r\n classToAdd: 'visible',\r\n classToRemove : 'invisible',\r\n classToAddForFullView : 'full-visible',\r\n removeClassAfterAnimation: false,\r\n offset: 100,\r\n repeat: false,\r\n invertBottomOffset: true,\r\n callbackFunction: function(elem, action){},\r\n scrollHorizontal: false,\r\n scrollBox: window\r\n };\r\n $.extend(options, useroptions);\r\n\r\n // Cache the given element and height of the browser\r\n var $elem = this,\r\n boxSize = {height: $(options.scrollBox).height(), width: $(options.scrollBox).width()};\r\n\r\n /*\r\n * Main method that checks the elements and adds or removes the class(es)\r\n */\r\n this.checkElements = function(){\r\n var viewportStart, viewportEnd;\r\n\r\n // Set some vars to check with\r\n if (!options.scrollHorizontal){\r\n viewportStart = Math.max(\r\n $('html').scrollTop(),\r\n $('body').scrollTop(),\r\n $(window).scrollTop()\r\n );\r\n viewportEnd = (viewportStart + boxSize.height);\r\n }\r\n else{\r\n viewportStart = Math.max(\r\n $('html').scrollLeft(),\r\n $('body').scrollLeft(),\r\n $(window).scrollLeft()\r\n );\r\n viewportEnd = (viewportStart + boxSize.width);\r\n }\r\n\r\n // Loop through all given dom elements\r\n $elem.each(function(){\r\n var $obj = $(this),\r\n objOptions = {},\r\n attrOptions = {};\r\n\r\n // Get any individual attribution data\r\n if ($obj.data('vp-add-class'))\r\n attrOptions.classToAdd = $obj.data('vp-add-class');\r\n if ($obj.data('vp-remove-class'))\r\n attrOptions.classToRemove = $obj.data('vp-remove-class');\r\n if ($obj.data('vp-add-class-full-view'))\r\n attrOptions.classToAddForFullView = $obj.data('vp-add-class-full-view');\r\n if ($obj.data('vp-keep-add-class'))\r\n attrOptions.removeClassAfterAnimation = $obj.data('vp-remove-after-animation');\r\n if ($obj.data('vp-offset'))\r\n attrOptions.offset = $obj.data('vp-offset');\r\n if ($obj.data('vp-repeat'))\r\n attrOptions.repeat = $obj.data('vp-repeat');\r\n if ($obj.data('vp-scrollHorizontal'))\r\n attrOptions.scrollHorizontal = $obj.data('vp-scrollHorizontal');\r\n if ($obj.data('vp-invertBottomOffset'))\r\n attrOptions.scrollHorizontal = $obj.data('vp-invertBottomOffset');\r\n\r\n // Extend objOptions with data attributes and default options\r\n $.extend(objOptions, options);\r\n $.extend(objOptions, attrOptions);\r\n\r\n // If class already exists; quit\r\n if ($obj.data('vp-animated') && !objOptions.repeat){\r\n return;\r\n }\r\n\r\n // Check if the offset is percentage based\r\n if (String(objOptions.offset).indexOf(\"%\") > 0)\r\n objOptions.offset = (parseInt(objOptions.offset) / 100) * boxSize.height;\r\n\r\n // Get the raw start and end positions\r\n var rawStart = (!objOptions.scrollHorizontal) ? $obj.offset().top : $obj.offset().left,\r\n rawEnd = (!objOptions.scrollHorizontal) ? rawStart + $obj.height() : rawStart + $obj.width();\r\n\r\n // Add the defined offset\r\n var elemStart = Math.round( rawStart ) + objOptions.offset,\r\n elemEnd = (!objOptions.scrollHorizontal) ? elemStart + $obj.height() : elemStart + $obj.width();\r\n\r\n if (objOptions.invertBottomOffset)\r\n elemEnd -= (objOptions.offset * 2);\r\n\r\n // Add class if in viewport\r\n if ((elemStart < viewportEnd) && (elemEnd > viewportStart)){\r\n\r\n // Remove class\r\n $obj.removeClass(objOptions.classToRemove);\r\n $obj.addClass(objOptions.classToAdd);\r\n\r\n // Do the callback function. Callback wil send the jQuery object as parameter\r\n objOptions.callbackFunction($obj, \"add\");\r\n\r\n // Check if full element is in view\r\n if (rawEnd <= viewportEnd && rawStart >= viewportStart)\r\n $obj.addClass(objOptions.classToAddForFullView);\r\n else\r\n $obj.removeClass(objOptions.classToAddForFullView);\r\n\r\n // Set element as already animated\r\n $obj.data('vp-animated', true);\r\n\r\n if (objOptions.removeClassAfterAnimation) {\r\n $obj.one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', function(){\r\n $obj.removeClass(objOptions.classToAdd);\r\n });\r\n }\r\n\r\n // Remove class if not in viewport and repeat is true\r\n } else if ($obj.hasClass(objOptions.classToAdd) && (objOptions.repeat)){\r\n $obj.removeClass(objOptions.classToAdd + \" \" + objOptions.classToAddForFullView);\r\n\r\n // Do the callback function.\r\n objOptions.callbackFunction($obj, \"remove\");\r\n\r\n // Remove already-animated-flag\r\n $obj.data('vp-animated', false);\r\n }\r\n });\r\n\r\n };\r\n\r\n /**\r\n * Binding the correct event listener is still a tricky thing.\r\n * People have expierenced sloppy scrolling when both scroll and touch\r\n * events are added, but to make sure devices with both scroll and touch\r\n * are handles too we always have to add the window.scroll event\r\n *\r\n * @see https://github.com/dirkgroenen/jQuery-viewport-checker/issues/25\r\n * @see https://github.com/dirkgroenen/jQuery-viewport-checker/issues/27\r\n */\r\n\r\n // Select the correct events\r\n if( 'ontouchstart' in window || 'onmsgesturechange' in window ){\r\n // Device with touchscreen\r\n $(document).bind(\"touchmove MSPointerMove pointermove\", this.checkElements);\r\n }\r\n\r\n // Always load on window load\r\n $(options.scrollBox).bind(\"load scroll\", this.checkElements);\r\n\r\n // On resize change the height var\r\n $(window).resize(function(e){\r\n boxSize = {height: $(options.scrollBox).height(), width: $(options.scrollBox).width()};\r\n $elem.checkElements();\r\n });\r\n\r\n // trigger inital check if elements already visible\r\n this.checkElements();\r\n\r\n // Default jquery plugin behaviour\r\n return this;\r\n };\r\n})(jQuery);\r\n","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n// Save the previous value of the device variable.\nvar previousDevice = window.device;\n\nvar device = {};\n\nvar changeOrientationList = [];\n\n// Add device as a global object.\nwindow.device = device;\n\n// The element.\nvar documentElement = window.document.documentElement;\n\n// The client user agent string.\n// Lowercase, so we can use the more efficient indexOf(), instead of Regex\nvar userAgent = window.navigator.userAgent.toLowerCase();\n\n// Detectable television devices.\nvar television = ['googletv', 'viera', 'smarttv', 'internet.tv', 'netcast', 'nettv', 'appletv', 'boxee', 'kylo', 'roku', 'dlnadoc', 'pov_tv', 'hbbtv', 'ce-html'];\n\n// Main functions\n// --------------\n\ndevice.macos = function () {\n return find('mac');\n};\n\ndevice.ios = function () {\n return device.iphone() || device.ipod() || device.ipad();\n};\n\ndevice.iphone = function () {\n return !device.windows() && find('iphone');\n};\n\ndevice.ipod = function () {\n return find('ipod');\n};\n\ndevice.ipad = function () {\n var iPadOS13Up = navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1;\n return find('ipad') || iPadOS13Up;\n};\n\ndevice.android = function () {\n return !device.windows() && find('android');\n};\n\ndevice.androidPhone = function () {\n return device.android() && find('mobile');\n};\n\ndevice.androidTablet = function () {\n return device.android() && !find('mobile');\n};\n\ndevice.blackberry = function () {\n return find('blackberry') || find('bb10');\n};\n\ndevice.blackberryPhone = function () {\n return device.blackberry() && !find('tablet');\n};\n\ndevice.blackberryTablet = function () {\n return device.blackberry() && find('tablet');\n};\n\ndevice.windows = function () {\n return find('windows');\n};\n\ndevice.windowsPhone = function () {\n return device.windows() && find('phone');\n};\n\ndevice.windowsTablet = function () {\n return device.windows() && find('touch') && !device.windowsPhone();\n};\n\ndevice.fxos = function () {\n return (find('(mobile') || find('(tablet')) && find(' rv:');\n};\n\ndevice.fxosPhone = function () {\n return device.fxos() && find('mobile');\n};\n\ndevice.fxosTablet = function () {\n return device.fxos() && find('tablet');\n};\n\ndevice.meego = function () {\n return find('meego');\n};\n\ndevice.cordova = function () {\n return window.cordova && location.protocol === 'file:';\n};\n\ndevice.nodeWebkit = function () {\n return _typeof(window.process) === 'object';\n};\n\ndevice.mobile = function () {\n return device.androidPhone() || device.iphone() || device.ipod() || device.windowsPhone() || device.blackberryPhone() || device.fxosPhone() || device.meego();\n};\n\ndevice.tablet = function () {\n return device.ipad() || device.androidTablet() || device.blackberryTablet() || device.windowsTablet() || device.fxosTablet();\n};\n\ndevice.desktop = function () {\n return !device.tablet() && !device.mobile();\n};\n\ndevice.television = function () {\n var i = 0;\n while (i < television.length) {\n if (find(television[i])) {\n return true;\n }\n i++;\n }\n return false;\n};\n\ndevice.portrait = function () {\n if (screen.orientation && Object.prototype.hasOwnProperty.call(window, 'onorientationchange')) {\n return includes(screen.orientation.type, 'portrait');\n }\n if (device.ios() && Object.prototype.hasOwnProperty.call(window, 'orientation')) {\n return Math.abs(window.orientation) !== 90;\n }\n return window.innerHeight / window.innerWidth > 1;\n};\n\ndevice.landscape = function () {\n if (screen.orientation && Object.prototype.hasOwnProperty.call(window, 'onorientationchange')) {\n return includes(screen.orientation.type, 'landscape');\n }\n if (device.ios() && Object.prototype.hasOwnProperty.call(window, 'orientation')) {\n return Math.abs(window.orientation) === 90;\n }\n return window.innerHeight / window.innerWidth < 1;\n};\n\n// Public Utility Functions\n// ------------------------\n\n// Run device.js in noConflict mode,\n// returning the device variable to its previous owner.\ndevice.noConflict = function () {\n window.device = previousDevice;\n return this;\n};\n\n// Private Utility Functions\n// -------------------------\n\n// Check if element exists\nfunction includes(haystack, needle) {\n return haystack.indexOf(needle) !== -1;\n}\n\n// Simple UA string search\nfunction find(needle) {\n return includes(userAgent, needle);\n}\n\n// Check if documentElement already has a given class.\nfunction hasClass(className) {\n return documentElement.className.match(new RegExp(className, 'i'));\n}\n\n// Add one or more CSS classes to the element.\nfunction addClass(className) {\n var currentClassNames = null;\n if (!hasClass(className)) {\n currentClassNames = documentElement.className.replace(/^\\s+|\\s+$/g, '');\n documentElement.className = currentClassNames + ' ' + className;\n }\n}\n\n// Remove single CSS class from the element.\nfunction removeClass(className) {\n if (hasClass(className)) {\n documentElement.className = documentElement.className.replace(' ' + className, '');\n }\n}\n\n// HTML Element Handling\n// ---------------------\n\n// Insert the appropriate CSS class based on the _user_agent.\n\nif (device.ios()) {\n if (device.ipad()) {\n addClass('ios ipad tablet');\n } else if (device.iphone()) {\n addClass('ios iphone mobile');\n } else if (device.ipod()) {\n addClass('ios ipod mobile');\n }\n} else if (device.macos()) {\n addClass('macos desktop');\n} else if (device.android()) {\n if (device.androidTablet()) {\n addClass('android tablet');\n } else {\n addClass('android mobile');\n }\n} else if (device.blackberry()) {\n if (device.blackberryTablet()) {\n addClass('blackberry tablet');\n } else {\n addClass('blackberry mobile');\n }\n} else if (device.windows()) {\n if (device.windowsTablet()) {\n addClass('windows tablet');\n } else if (device.windowsPhone()) {\n addClass('windows mobile');\n } else {\n addClass('windows desktop');\n }\n} else if (device.fxos()) {\n if (device.fxosTablet()) {\n addClass('fxos tablet');\n } else {\n addClass('fxos mobile');\n }\n} else if (device.meego()) {\n addClass('meego mobile');\n} else if (device.nodeWebkit()) {\n addClass('node-webkit');\n} else if (device.television()) {\n addClass('television');\n} else if (device.desktop()) {\n addClass('desktop');\n}\n\nif (device.cordova()) {\n addClass('cordova');\n}\n\n// Orientation Handling\n// --------------------\n\n// Handle device orientation changes.\nfunction handleOrientation() {\n if (device.landscape()) {\n removeClass('portrait');\n addClass('landscape');\n walkOnChangeOrientationList('landscape');\n } else {\n removeClass('landscape');\n addClass('portrait');\n walkOnChangeOrientationList('portrait');\n }\n setOrientationCache();\n}\n\nfunction walkOnChangeOrientationList(newOrientation) {\n for (var index = 0; index < changeOrientationList.length; index++) {\n changeOrientationList[index](newOrientation);\n }\n}\n\ndevice.onChangeOrientation = function (cb) {\n if (typeof cb == 'function') {\n changeOrientationList.push(cb);\n }\n};\n\n// Detect whether device supports orientationchange event,\n// otherwise fall back to the resize event.\nvar orientationEvent = 'resize';\nif (Object.prototype.hasOwnProperty.call(window, 'onorientationchange')) {\n orientationEvent = 'orientationchange';\n}\n\n// Listen for changes in orientation.\nif (window.addEventListener) {\n window.addEventListener(orientationEvent, handleOrientation, false);\n} else if (window.attachEvent) {\n window.attachEvent(orientationEvent, handleOrientation);\n} else {\n window[orientationEvent] = handleOrientation;\n}\n\nhandleOrientation();\n\n// Public functions to get the current value of type, os, or orientation\n// ---------------------------------------------------------------------\n\nfunction findMatch(arr) {\n for (var i = 0; i < arr.length; i++) {\n if (device[arr[i]]()) {\n return arr[i];\n }\n }\n return 'unknown';\n}\n\ndevice.type = findMatch(['mobile', 'tablet', 'desktop']);\ndevice.os = findMatch(['ios', 'iphone', 'ipad', 'ipod', 'android', 'blackberry', 'macos', 'windows', 'fxos', 'meego', 'television']);\n\nfunction setOrientationCache() {\n device.orientation = findMatch(['portrait', 'landscape']);\n}\n\nsetOrientationCache();\n\nexport default device;","import device from \"current-device\";\r\n\r\n// Отключает глобальный скролл\r\nexport function disablePageScroll() {\r\n $H.addClass('_disable-page-scroll');\r\n}\r\n\r\n// Включает глобальный скролл\r\nexport function enablePageScroll() {\r\n $H.removeClass('_disable-page-scroll');\r\n}\r\n\r\nexport function isMobile() {\r\n return device.mobile();\r\n}\r\n\r\nexport function isSmallTablet() {\r\n return window.matchMedia(\"(max-width: 650px)\").matches;\r\n}\r\n\r\nexport function isTablet() {\r\n return device.tablet();\r\n}\r\n\r\nexport function isDesktop() {\r\n return device.desktop();\r\n}\r\n\r\nexport function isWidth(width, flag) {\r\n if (flag) {\r\n return $W.width() < width;\r\n } else {\r\n return $W.width() > width;\r\n }\r\n}\r\n\r\nexport function isObject(variable) {\r\n return variable !== null && typeof variable === 'object' && !Array.isArray(variable);\r\n}\r\n\r\nexport async function postData(url = \"\", data = {}) {\r\n // Default options are marked with *\r\n const response = await fetch(url, {\r\n method: \"POST\", // *GET, POST, PUT, DELETE, etc.\r\n mode: \"cors\", // no-cors, *cors, same-origin\r\n cache: \"no-cache\", // *default, no-cache, reload, force-cache, only-if-cached\r\n credentials: \"same-origin\", // include, *same-origin, omit\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n 'RequestVerificationToken': document.querySelector('input[name=\"__RequestVerificationToken\"]').value\r\n // 'Content-Type': 'application/x-www-form-urlencoded',\r\n },\r\n redirect: \"follow\", // manual, *follow, error\r\n referrerPolicy: \"no-referrer\", // no-referrer, *no-referrer-when-downgrade, origin, origin-when-cross-origin, same-origin, strict-origin, strict-origin-when-cross-origin, unsafe-url\r\n body: JSON.stringify(data), // body data type must match \"Content-Type\" header\r\n });\r\n return response.text(); // parses JSON response into native JavaScript objects\r\n}\r\n\r\nexport async function postDataForm(url = \"\", data = {}) {\r\n const formData = new FormData();\r\n\r\n // Append each key-value pair to the formData object\r\n for (const key in data) {\r\n formData.append(key, data[key]);\r\n }\r\n\r\n // Default options are marked with *\r\n const response = await fetch(url, {\r\n method: \"POST\", // *GET, POST, PUT, DELETE, etc.\r\n mode: \"cors\", // no-cors, *cors, same-origin\r\n cache: \"no-cache\", // *default, no-cache, reload, force-cache, only-if-cached\r\n credentials: \"same-origin\", // include, *same-origin, omit\r\n headers: {\r\n // Remove 'Content-Type': 'application/json' since FormData needs its own content type\r\n 'RequestVerificationToken': document.querySelector('input[name=\"__RequestVerificationToken\"]').value\r\n },\r\n redirect: \"follow\", // manual, *follow, error\r\n referrerPolicy: \"no-referrer\", // no-referrer, *no-referrer-when-downgrade, origin, origin-when-cross-origin, same-origin, strict-origin, strict-origin-when-cross-origin, unsafe-url\r\n body: formData // Set the body to the formData object\r\n });\r\n return response.text(); // parses JSON response into native JavaScript objects\r\n}\r\n\r\nexport function isTouchScreen() {\r\n return ('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch;\r\n}\r\n\r\nexport function updateCatalogDropdownHeight() {\r\n $('.js-header-catalog-main').css('max-height', `calc(100vh - ${$('.js-header').outerHeight()}px)`)\r\n}\r\n\r\n// equalHeights\r\nexport function equalHeights(selector) {\r\n let maxHeight = 0;\r\n if (!$(selector).length) return\r\n\r\n $(selector).each(function () {\r\n maxHeight = Math.max($(this).outerHeight(true), maxHeight);\r\n });\r\n $(selector).each(function () {\r\n $(this).css('min-height', maxHeight);\r\n });\r\n}\r\n\r\n// detect is IOS\r\nexport function isIOS() {\r\n return /iPad|iPhone|iPod/.test(navigator.platform) || (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1)\r\n}\r\n\r\nexport function readUploadedFileAsText(inputFile) {\r\n const temporaryFileReader = new FileReader();\r\n return new Promise((resolve, reject) => {\r\n temporaryFileReader.onerror = () => {\r\n temporaryFileReader.abort();\r\n reject(new DOMException(\"Problem parsing input file.\"));\r\n };\r\n temporaryFileReader.addEventListener(\"load\", function () {\r\n resolve(temporaryFileReader.result.split(',')[1]);\r\n }, false);\r\n temporaryFileReader.readAsDataURL(inputFile.files[0]);\r\n });\r\n}\r\n\r\n\r\nexport function updateURL(params, navigate = false) {\r\n let url = new URL(window.location.href);\r\n let searchParams = new URLSearchParams(url.search);\r\n\r\n for (const key in params) {\r\n if (params.hasOwnProperty(key)) {\r\n if (params[key] === null) {\r\n searchParams.delete(key);\r\n } else {\r\n searchParams.set(key, params[key]);\r\n }\r\n }\r\n }\r\n url.search = searchParams.toString();\r\n\r\n if (navigate) {\r\n window.location.href = url.toString();\r\n } else {\r\n history.pushState(null, '', url.toString());\r\n }\r\n}\r\n\r\nexport function debounce(func, wait) {\r\n let timeout;\r\n return function executedFunction(...args) {\r\n const later = () => {\r\n clearTimeout(timeout);\r\n func.apply(this, args);\r\n };\r\n clearTimeout(timeout);\r\n timeout = setTimeout(later, wait);\r\n };\r\n}\r\n","import * as utils from './utils';\r\nlet scrollPosition;\r\nlet lastOpenedPopup = null;\r\n\r\n$(function () {\r\n if (location.hash !== '') {\r\n $(`.js-popup[data-block='${location.hash.substr(1)}']`).addClass('is-show');\r\n scrollPosition = $(window).scrollTop();\r\n }\r\n\r\n $('body').on('click', '.js-popup-link', function (e) {\r\n e.preventDefault();\r\n let $this = $(this);\r\n let target = $this.attr('data-link');\r\n let href = $this.attr('data-href');\r\n let videoSrc = $this.attr('data-src');\r\n openPopup(target, href, videoSrc);\r\n if (typeof $this.data('scrollto') !== 'undefined') {\r\n setTimeout(function () {\r\n let form = $('.js-ajax-wrapper').find('form');\r\n if (form.length) {\r\n form.find('input:not([type=\"hidden\"])').first().focus();\r\n }\r\n }, 1500);\r\n }\r\n\r\n return false;\r\n });\r\n\r\n /*fetch(\"/viewcomponent/citypicker\")\r\n .then(response => response.text())\r\n .then(data => {\r\n document.querySelector(\".citypicker__container\").innerHTML = data; \r\n SB.initHeaderCityPicker();\r\n });*/\r\n});\r\n\r\nwindow.openPopup = function (target, href, videoSrc) {\r\n let $popup = $('.js-popup');\r\n const $elem = $('.js-popup[data-block=\"' + target + '\"]');\r\n if ($elem.length === 0) {\r\n return;\r\n }\r\n $popup.removeClass('is-show');\r\n $elem.addClass('is-show');\r\n addBlur();\r\n\r\n if (utils.isMobile()) {\r\n utils.disablePageScroll()\r\n }\r\n\r\n scrollPosition = $(window).scrollTop();\r\n\r\n if (videoSrc) {\r\n let video = $elem.find('.js-iframe');\r\n video.attr('src', videoSrc);\r\n }\r\n\r\n scrollPosition = $(window).scrollTop();\r\n\r\n if (href) {\r\n let $jsPopup = $('.js-popup[data-block=\"' + target + '\"]');\r\n history.pushState({}, '', href);\r\n $jsPopup.find('.js-ajax-wrapper').empty();\r\n getEventItem(href, $jsPopup);\r\n lastOpenedPopup = 'href';\r\n }\r\n}\r\n\r\nwindow.getEventItem = function (item, elem) {\r\n $.ajax({\r\n url: item,\r\n type: \"GET\",\r\n success: function (data) {\r\n if ($(data).length !== 0) {\r\n elem.find('.js-ajax-wrapper').html($(data).hide().fadeIn(1000));\r\n\r\n setTimeout(function () {\r\n formValidate();\r\n initSelect();\r\n inputMask();\r\n initSlider();\r\n // initSelectInput();\r\n // initSelectSearch();\r\n }, 1000);\r\n\r\n }\r\n }\r\n });\r\n}\r\n\r\n$('body').on('click', '.js-popup-close', function () {\r\n let $this = $(this);\r\n let $popup = $this.closest('.js-popup');\r\n utils.enablePageScroll();\r\n removeBlur();\r\n removeMainBlur();\r\n $popup.removeClass('is-show');\r\n $popup.find('.js-iframe').attr('src', '');\r\n if (scrollPosition !== \"undefined\") {\r\n $(window).scrollTop(scrollPosition);\r\n scrollPosition = undefined;\r\n }\r\n\r\n if (lastOpenedPopup === 'href') {\r\n history.back();\r\n $(window).scrollTop();\r\n lastOpenedPopup = null;\r\n }\r\n});\r\n\r\n//close modal-city \r\n$('.js-close-modal-city').on('click', function (e) {\r\n e.preventDefault();\r\n $('.js-modal-city').hide();\r\n})","import 'jquery-viewport-checker';\r\nimport {isMobile} from \"./utils\";\r\n\r\nif ($('.js-anim').length > 0) {\r\n $('.js-anim').viewportChecker();\r\n}\r\n\r\nwindow.addBlur = function () {\r\n if (!isMobile()) {\r\n $('.b-catalog').addClass('blur-back');\r\n }\r\n}\r\nwindow.removeBlur = function () {\r\n $('.b-catalog').removeClass('blur-back');\r\n}\r\nwindow.addMainBlur = function () {\r\n if (!isMobile()) {\r\n $('#main').addClass('blur-back');\r\n }\r\n}\r\nwindow.removeMainBlur = function () {\r\n $('#main').removeClass('blur-back');\r\n}","// Валидация формы\r\nimport {postDataForm} from \"./utils\";\r\n\r\nwindow.formValidate = function () {\r\n let form = $('.js-form');\r\n\r\n form.each(function () {\r\n let thisForm = $(this);\r\n let url = thisForm.attr('action');\r\n let callBackName = thisForm.attr('data-callback');\r\n let abpServiceName = thisForm.attr('data-service');\r\n\r\n thisForm.validate({\r\n focusInvalid: false,\r\n rules: {\r\n email: {\r\n checkEmailFormat: true\r\n },\r\n phone: {\r\n checkPhoneFormat: true\r\n }\r\n },\r\n messages: {\r\n email: {\r\n checkEmailFormat: \"Неверный формат email\"\r\n },\r\n phone: {\r\n checkPhoneFormat: \"Неверный номер\"\r\n }\r\n },\r\n ignore: ':not(:visible)',\r\n highlight: function (element) {\r\n $(element).closest(\".form-field\").addClass('form-field--error');\r\n },\r\n unhighlight: function (element) {\r\n $(element).closest(\".form-field\").removeClass('form-field--error');\r\n },\r\n submitHandler: function (form, event) {\r\n event.preventDefault();\r\n let formParams = thisForm.serializeArray();\r\n\r\n $.each(thisForm.find('.js-input-file'), function (i, tag) {\r\n $.each($(tag)[0].files, function (i, file) {\r\n if (file !== undefined) {\r\n formParams[formParams.length] = {name: tag.name, value: file};\r\n formParams[formParams.length + 1] = {name: 'fileName', value: file.name};\r\n }\r\n });\r\n });\r\n \r\n let formData = {};\r\n $.each(formParams, function (i, field) {\r\n let arr = []\r\n if (field !== undefined && typeof field.value !== \"object\" && field.value.trim() !== \"\") {\r\n if (formData[field.name] !== undefined) {\r\n let val = formData[field.name];\r\n if (!Array.isArray(val)) {\r\n arr = [val];\r\n }\r\n arr.push(field.value.trim());\r\n formData[field.name] = arr;\r\n } else {\r\n formData[field.name] = field.value;\r\n }\r\n }\r\n });\r\n\r\n if (abpServiceName !== undefined) {\r\n let button = thisForm.find('button');\r\n let lastButtonText = button.text(); \r\n button.prop('disabled', true);\r\n button.text('Подождите...');\r\n \r\n if(abpServiceName === \"CallbackForm\"){\r\n postDataForm(\"/callback/submit\", formData).then(function (result) {\r\n // window.location = `/order/thankyou/?id=${result.guidId}`;\r\n $('.popup').removeClass('is-show');\r\n removeBlur();\r\n });\r\n } else {\r\n postDataForm(\"/cart/submit\", formData).then(function (result) {\r\n if(result !== null) {\r\n const resp = JSON.parse(result);\r\n window.location = `/order/thankyou/?id=${resp.guidId}`; \r\n }\r\n });\r\n }\r\n \r\n /* postDataForm(\"/cart/submit\", formData).then(function (result) {\r\n window.location = `/order/thankyou/?id=${result.guidId}`;\r\n });*/\r\n \r\n /*abp.services.app.jsProxy.postForm(abpServiceName, formData).done(function (result) {\r\n switch (abpServiceName) {\r\n case 'CartSubmit':\r\n // window.shop.ymBuy(result.numberId, result.currency, result.items);\r\n window.location = `/order/thankyou/?id=${result.guidId}`;\r\n break;\r\n case 'CallbackForm':\r\n // window.shop.ymCallback();\r\n break;\r\n case 'CommercialOfferForm':\r\n // window.shop.ymOffer();\r\n break;\r\n }\r\n button.prop('disabled', false);\r\n button.text(lastButtonText);\r\n if (result !== false) {\r\n if (callBackName) {\r\n SB[callBackName]();\r\n }\r\n let idThank = thisForm.data('thank');\r\n $(idThank).addClass('is-show');\r\n thisForm[0].reset();\r\n }\r\n });*/\r\n }\r\n \r\n // if (typeof thisForm.data('thank') !== 'undefined') {\r\n // let idThank = thisForm.data('thank');\r\n // $(idThank).addClass('is-show');\r\n // }\r\n //\r\n // thisForm[0].reset();\r\n //\r\n // let $select2 = $('.js-select');\r\n // if ($select2.length) {\r\n // $select2.each(function () {\r\n // $(this).val('').trigger('change');\r\n // })\r\n // }\r\n //окно благодарности\r\n return false;\r\n }\r\n });\r\n\r\n });\r\n\r\n // Ввод только цифр\r\n $('.js-number, .js-counter-input').on('keypress', function (e) {\r\n let charCode = (e.which) ? e.which : e.keyCode;\r\n if (charCode > 31 && (charCode < 48 || charCode > 57)) {\r\n return false;\r\n }\r\n });\r\n\r\n // Деактивация кнопки отправки формы при снятии галочки с чекбокса согласия\r\n $('body').on('change', '.js-agree', function () {\r\n let $this = $(this);\r\n let btn = $this.closest('form').find('button[type=\"submit\"]');\r\n if ($this.is(':checked')) {\r\n btn.prop('disabled', false);\r\n } else {\r\n btn.prop('disabled', true);\r\n }\r\n });\r\n\r\n // add custom email format checker method\r\n jQuery.validator.addMethod(\"checkEmailFormat\", function (value, element) {\r\n let m = value.match(/^[a-zA-Z0-9_\\.%\\+\\-]+@[a-zA-Z0-9\\.\\-]+\\.[a-zA-Z]{2,}$/);\r\n return m;\r\n });\r\n\r\n jQuery.validator.addMethod(\"checkPhoneFormat\", function (value, element) {\r\n let m = value.match(/^[0-9\\+\\-\\(\\)]+$/);\r\n return m;\r\n });\r\n\r\n $B.on('click', 'label.error', function () {\r\n $(this).hide().siblings('input,textarea').focus();\r\n\r\n });\r\n\r\n $B.on('keyup', 'input', function () {\r\n $(this).siblings('label.error').hide();\r\n });\r\n\r\n $B.on('change', '.js-select', function () {\r\n $(this).closest('.form-field').removeClass('form-field--error');\r\n })\r\n\r\n $('.popup-thank').on('click', function () {\r\n $(this).removeClass('is-show');\r\n });\r\n\r\n $('.js-input-questions').change(function () {\r\n $('.callback-popup__form textarea').text($(this).val());\r\n });\r\n};\r\n\r\nformValidate();\r\n\r\n\r\n\r\n","import * as utils from \"./utils\";\r\n\r\n$(function () {\r\n\r\n const selectedCategoryClass = \"header-catalog__item--active\";\r\n const catalogItemSelector = \"js-header-catalog-item\";\r\n const mobileDevices = utils.isTablet() || utils.isMobile() || utils.isSmallTablet();\r\n\r\n if (!mobileDevices) {\r\n $('.sidebar-list__root').hover(function () {\r\n $(this).find('.sidebar-list__child').css('visibility', 'visible').css('opacity', '1');\r\n }, function () {\r\n $(this).find('.sidebar-list__child').css('visibility', 'hidden').css('opacity', '0');\r\n });\r\n }\r\n\r\n $(\".sidebar-a\").on(\"click\", function (e) {\r\n if (mobileDevices) {\r\n e.preventDefault();\r\n const $wrapEl = $(this).closest(\".js-header-catalog-item\");\r\n const childFrame = $wrapEl.find(\".sidebar-list__child\");\r\n if(childFrame.length === 0) {\r\n window.location.href = $(this).attr('data-url');\r\n } else {\r\n $(catalogItemSelector).removeClass(selectedCategoryClass);\r\n const categoryName = $(this).find('.header-catalog__name').text();\r\n childFrame.addClass('visible').css('visibility', 'visible').css('opacity', '1');\r\n $wrapEl\r\n .addClass(selectedCategoryClass)\r\n .find('.js-catalog-subtitle')\r\n .text(categoryName);\r\n }\r\n } else {\r\n window.location.href = $(this).attr('data-url');\r\n }\r\n });\r\n\r\n $(\".sidebar-a-name\").on(\"click\", function (e) {\r\n window.location.href = $(this).attr('data-url');\r\n });\r\n\r\n // hide sublist and go back\r\n $('.js-catalog-backlink').on('click', function () {\r\n const $visibleSublist = $('.sidebar-list__child.visible');\r\n if ($visibleSublist.length) {\r\n $visibleSublist.removeClass('visible').css('visibility', 'hidden').css('opacity', '0');\r\n }\r\n });\r\n // hide catalog popup\r\n $('.js-catalog-close').on('click', function () {\r\n const $visibleSublist = $('.sidebar-list__child.visible');\r\n if ($visibleSublist.length) {\r\n $visibleSublist.removeClass('visible').css('visibility', 'hidden').css('opacity', '0');\r\n }\r\n });\r\n\r\n $('.js-catalog-subtitle').on('click', function (e) {\r\n e.preventDefault();\r\n });\r\n});\r\n","import {postData, debounce} from \"./utils\";\r\n\r\n\r\n$(function () {\r\n $.HeaderSearch = {\r\n // Configuration\r\n config: {\r\n debounceWait: 300,\r\n minSearchLength: 3,\r\n searchEndpoint: \"/search/predict\",\r\n },\r\n\r\n // Selectors\r\n selectors: {\r\n input: '.js-header-search-input',\r\n contextSelect: '.js-search-context-select',\r\n contextItem: '.js-search-context-item',\r\n contextClear: '.search-context__name',\r\n clearButton: '.header-search__clear-icon',\r\n results: '.js-search-results',\r\n headerSearch: '.js-header-search',\r\n overlay: '.js-header-search-overlay',\r\n searchSubmit: '.js-submit-search',\r\n },\r\n\r\n // CSS Classes\r\n classes: {\r\n expanded: 'header-search--expanded',\r\n contextActive: 'search-context__item--active',\r\n resultsActive: 'header-search--results-showed',\r\n contextShowed: 'header-search--context-showed',\r\n },\r\n\r\n // State\r\n state: {\r\n searchContext: null,\r\n currentSearchTerm: '',\r\n isSearching: false,\r\n searchAbortController: null,\r\n },\r\n\r\n init() {\r\n this.initializeState();\r\n this.setEvents();\r\n this.debouncedSearch = debounce(this.performSearch.bind(this), this.config.debounceWait);\r\n },\r\n\r\n initializeState() {\r\n const url = new URL(window.location.href);\r\n const id = url.searchParams.get('mode');\r\n const query = url.searchParams.get('q');\r\n\r\n this.setSearchContext(id);\r\n this.setSearchQuery(query);\r\n },\r\n\r\n async performSearch(term) {\r\n if (this.state.isSearching) {\r\n // Cancel previous search if it's still in progress\r\n this.state.searchAbortController?.abort();\r\n }\r\n\r\n // Create new abort controller for this search\r\n this.state.searchAbortController = new AbortController();\r\n this.state.isSearching = true;\r\n\r\n try {\r\n if (!term || term.length < this.config.minSearchLength) {\r\n this.clearResults(false);\r\n return;\r\n }\r\n\r\n const data = await postData(\r\n this.config.searchEndpoint,\r\n {\r\n term: term,\r\n searchContext: this.state.searchContext\r\n },\r\n {\r\n signal: this.state.searchAbortController.signal\r\n }\r\n );\r\n\r\n // Verify the search term hasn't changed during the request\r\n if (term === $(this.selectors.input).val().trim()) {\r\n \r\n }\r\n\r\n $(this.selectors.results).html(data);\r\n this.showSearchResults();\r\n \r\n } catch (error) {\r\n if (error.name === 'AbortError') {\r\n console.log('Search aborted');\r\n } else {\r\n console.error('Search error:', error);\r\n }\r\n } finally {\r\n this.state.isSearching = false;\r\n }\r\n },\r\n\r\n setSearchContext(id) {\r\n this.state.searchContext = id || null;\r\n\r\n if (!id) {\r\n this.clearSearchContext();\r\n return;\r\n }\r\n\r\n const contextItem = $(`${this.selectors.contextItem}[data-search-context-id=${id}]`);\r\n if (contextItem.length) {\r\n const name = contextItem.data('searchContextName');\r\n $(this.selectors.contextSelect).text(name);\r\n } else {\r\n this.clearSearchContext();\r\n }\r\n },\r\n\r\n setSearchQuery(query) {\r\n if (query) {\r\n $(this.selectors.input).val(query);\r\n }\r\n },\r\n\r\n clearSearchContext() {\r\n this.state.searchContext = null;\r\n $(this.selectors.contextSelect).text('Искать везде');\r\n },\r\n\r\n showSearchResults() {\r\n $(this.selectors.headerSearch).addClass(this.classes.resultsActive);\r\n addBlur();\r\n },\r\n\r\n clearResults(clearInputField = true) {\r\n if (clearInputField) {\r\n $(this.selectors.input).val('');\r\n }\r\n\r\n $(this.selectors.headerSearch)\r\n .removeClass(`${this.classes.resultsActive} ${this.classes.contextShowed}`);\r\n\r\n this.resetExpandedSearch();\r\n },\r\n\r\n resetExpandedSearch() {\r\n $(this.selectors.headerSearch).removeClass(this.classes.expanded);\r\n removeBlur();\r\n },\r\n\r\n toggleSearchContextDropdown() {\r\n addBlur();\r\n $(this.selectors.headerSearch)\r\n .removeClass(this.classes.resultsActive)\r\n .toggleClass(this.classes.contextShowed);\r\n },\r\n\r\n handleSearchSubmit(term) {\r\n const url = new URL('/catalog/search/', window.location.origin);\r\n url.searchParams.set('q', term);\r\n url.searchParams.set('r_0', \"0-2147483647\");\r\n\r\n if (this.state.searchContext != null) {\r\n url.searchParams.set('mode', this.state.searchContext);\r\n }\r\n\r\n window.location.href = url;\r\n },\r\n\r\n setEvents() {\r\n const self = this;\r\n\r\n // Search input handler with sanitization\r\n $B.on('keyup change', this.selectors.input, function (e) {\r\n const term = $(this).val().trim();\r\n\r\n // Handle enter key\r\n if (e.keyCode === 13 || e.which === 13 || e.key === 'Enter') {\r\n self.handleSearchSubmit(term);\r\n return;\r\n }\r\n\r\n // Trigger debounced search\r\n self.debouncedSearch(term);\r\n });\r\n\r\n // Clear results\r\n $B.on('click', this.selectors.clearButton, () => {\r\n this.clearResults();\r\n });\r\n\r\n // Close on overlay click\r\n $B.on('click', this.selectors.overlay, () => {\r\n this.clearResults(false);\r\n });\r\n\r\n // Context select\r\n $B.on('click', this.selectors.contextSelect, () => {\r\n this.toggleSearchContextDropdown();\r\n });\r\n\r\n // Context item selection\r\n $B.on('click', this.selectors.contextItem, function () {\r\n self.clearResults(false);\r\n const id = $(this).data('searchContextId');\r\n self.setSearchContext(id);\r\n $(self.selectors.input).first().change();\r\n });\r\n\r\n // Clear context\r\n $B.on('click', this.selectors.contextClear, () => {\r\n this.clearResults(false);\r\n this.setSearchContext(null);\r\n });\r\n }\r\n };\r\n\r\n $.HeaderSearch.init();\r\n});","import {isObject, postData, postDataForm} from \"./utils\";\r\n\r\n$(function () {\r\n $.Cart = {\r\n cart: {},\r\n currentItem: {},\r\n currentProductId: {},\r\n types: {Dialog: \"dialog\", CartButton: \"cartButton\"},\r\n init: function () {\r\n this.getCartData();\r\n },\r\n setQuantity: function (root, input, button, operation, type = null) {\r\n let context = this;\r\n let inputQuantity = input != null ? root.parent().find(input) : null;\r\n let buttonQuantity = button != null ? root.parent().next(button) : null;\r\n if (inputQuantity !== null) {\r\n let value = inputQuantity.val() || 1;\r\n switch (operation) {\r\n case 'minus':\r\n --value;\r\n break;\r\n case 'plus':\r\n ++value;\r\n break;\r\n }\r\n value = value < 1 ? 1 : value;\r\n inputQuantity.val(value);\r\n if (type === context.types.Dialog) {\r\n context.set(context.currentProductId, value, context.currentItem);\r\n } else if (type === context.types.CartButton) {\r\n context.set(context.currentProductId, value, context.currentItem, false);\r\n } else if (buttonQuantity !== null) {\r\n buttonQuantity.attr('data-quantity', value);\r\n }\r\n }\r\n },\r\n checkInitProduct: function (item, forceUpdate = false) {\r\n if (Object.keys(this.currentItem).length === 0 || forceUpdate) {\r\n this.currentItem = item;\r\n this.currentProductId = item.data('productid') || null;\r\n }\r\n },\r\n setEvents: function () {\r\n let context = this;\r\n let $body = $('body');\r\n\r\n $body.off('click', '.add-to-cart, .product-order__addcart');\r\n $body.on('click', '.add-to-cart, .product-order__addcart', function (e) {\r\n let item = $(this);\r\n if (item.attr('href') === '/cart/') {\r\n return true;\r\n }\r\n if (item.text().trim() === 'Аналог' || item.text().trim() === 'На заказ') {\r\n return true;\r\n }\r\n e.preventDefault();\r\n context.add(item.attr('data-productid'), item);\r\n });\r\n \r\n // очистка всей корзины\r\n $body.on('click', '.cart-items__deleteall', function () {\r\n context.clear();\r\n });\r\n\r\n // удаление товара из корзины\r\n $body.on('click', '.js-cart-item-delete', function () {\r\n let productId = $(this).data('productid');\r\n if (productId) {\r\n context.del(productId);\r\n }\r\n $(this).parents('.js-cart-item').remove();\r\n });\r\n \r\n $body.on('click', '.added-to-cart__counter .js-counter-sub', function () {\r\n context.checkInitProduct($(this).parent().find('.js-counter-input'));\r\n context.setQuantity($(this), '.js-counter-input', null, 'minus', context.types.Dialog);\r\n });\r\n\r\n $body.on('click', '.added-to-cart__counter .js-counter-add', function () {\r\n context.checkInitProduct($(this).parent().find('.js-counter-input'));\r\n context.setQuantity($(this), '.js-counter-input', null, 'plus', context.types.Dialog);\r\n });\r\n\r\n $body.on('click', '.added-to-cart__cart-counter .js-counter-sub', function () {\r\n context.checkInitProduct($(this).parent().find('.js-counter-input'), true);\r\n context.setQuantity($(this), '.js-counter-input', null, 'minus', context.types.CartButton);\r\n });\r\n\r\n $body.on('click', '.added-to-cart__cart-counter .js-counter-add', function () {\r\n context.checkInitProduct($(this).parent().find('.js-counter-input'), true);\r\n context.setQuantity($(this), '.js-counter-input', null, 'plus', context.types.CartButton);\r\n });\r\n\r\n $body.on('click', '.added-to-cart__modification-counter .js-counter-sub', function () {\r\n context.checkInitProduct($(this).parent().find('.js-counter-input'));\r\n context.setQuantity($(this), '.js-counter-input', '.add-to-cart', 'minus');\r\n });\r\n\r\n $body.on('click', '.added-to-cart__modification-counter .js-counter-add', function () {\r\n context.checkInitProduct($(this).parent().find('.js-counter-input'));\r\n context.setQuantity($(this), '.js-counter-input', '.add-to-cart', 'plus');\r\n });\r\n\r\n $body.on('click', '.b-consumable__buy .js-counter-sub', function () {\r\n context.setQuantity($(this), '.js-counter-input', '.add-to-cart', 'minus');\r\n });\r\n\r\n $body.on('click', '.b-consumable__buy .js-counter-add', function () {\r\n context.setQuantity($(this), '.js-counter-input', '.add-to-cart', 'plus');\r\n });\r\n\r\n $body.on('click', '.js-counter--product .js-counter-sub', function () {\r\n context.setQuantity($(this), '.js-counter-input', '.product-order__addcart', 'minus');\r\n });\r\n\r\n $body.on('click', '.js-counter--product .js-counter-add', function () {\r\n context.setQuantity($(this), '.js-counter-input', '.product-order__addcart', 'plus'); \r\n });\r\n },\r\n getCartData: function () {\r\n let context = this;\r\n fetch(\"/viewcomponent/cart\")\r\n .then(response => response.text())\r\n .then(result => {\r\n context.cart = JSON.parse(result);\r\n /*if (context.cart != null) {\r\n window.shop.WriteCookie(\"CartId\", context.cart.id, 15, \".mx-zapchasti.ru\");\r\n }*/\r\n context.setEvents();\r\n context.refreshCart();\r\n context.refreshCounters();\r\n });\r\n },\r\n set: function (productId, quantity, item, showPopup = true) {\r\n let context = this;\r\n postDataForm(\"/cart/set\", {\r\n cartId :context.cart.id,\r\n productId: productId,\r\n quantity: quantity\r\n }).then(result => {\r\n context.cart = result;\r\n context.changeCount(item, productId);\r\n if (showPopup) {\r\n context.showPopup(productId);\r\n }\r\n context.refreshCart();\r\n });\r\n },\r\n add: function (productId, item) {\r\n let context = this;\r\n let quantity = item.attr('data-quantity');\r\n let mode = item.data('mode') || null;\r\n const cart = context.cart;\r\n \r\n const data = {\r\n cartId: cart.id,\r\n productId: productId,\r\n quantity: quantity\r\n };\r\n \r\n postData(\"/cart/cart-add\", data).then((result) => {\r\n if(result != null) {\r\n context.cart = JSON.parse(result);\r\n let items = context.cart.items.filter(function (item) {\r\n return item.productId === productId;\r\n });\r\n if (items.length > 0) {\r\n let addedItem = items[0];\r\n let eventModel = {\r\n id: addedItem.product.id,\r\n name: addedItem.product.name,\r\n category: addedItem.product.categories[0].name,\r\n quantity: addedItem.quantity,\r\n price: Math.ceil(addedItem.current)\r\n };\r\n // SB.ymAddToCart(addedItem.currency.stringCode, eventModel);\r\n }\r\n context.currentItem = item;\r\n context.currentProductId = productId;\r\n context.changeCount(item, productId);\r\n // if (mode !== \"Consumable\" && mode !== \"ProductCard\") {\r\n context.showPopup(productId);\r\n context.updateCartProducts();\r\n // }\r\n context.refreshCart();\r\n }\r\n }).catch((e) => {\r\n /* ignored */ \r\n });\r\n },\r\n del: function (productId) {\r\n let context = this;\r\n postDataForm(\"/cart/del-product\", {\r\n cartId: context.cart.id,\r\n productId: productId,\r\n }).then(result => {\r\n context.cart = JSON.parse(result);\r\n if (context.cart === null || context.cart.items === undefined || context.cart.items.length === 0) {\r\n context.clear();\r\n }\r\n context.refreshCart();\r\n context.refreshCounters();\r\n context.updateCartAmount();\r\n // context.updateRelatedSlider();\r\n });\r\n },\r\n clear: function () {\r\n let context = this;\r\n postDataForm(\"/cart/clear\", {\r\n cartId: context.cart.id\r\n }).then(result => {\r\n context.cart = JSON.parse(result);\r\n window.location.reload();\r\n });\r\n },\r\n refreshCart: function () {\r\n let context = this;\r\n let container = document.querySelector(\".header__cart-wrapper\");\r\n fetch(\"/viewcomponent/shortcart\")\r\n .then(response => response.text())\r\n .then(data => {\r\n container.innerHTML = data;\r\n context.refreshCounters();\r\n });\r\n },\r\n changeCount: function (item, productId) {\r\n if (item.data('mode') === 'InCart') {\r\n //item.attr('href', '/cart/');\r\n }\r\n item.addClass('add-to-cart--added');\r\n let count = this.getCount(productId);\r\n item.find('.add-to-cart__count').each(function () {\r\n $(this).text(count);\r\n });\r\n this.updateCartAmount();\r\n },\r\n initRelatedSlider: function (ids) {\r\n let context = this;\r\n fetch(\"/viewcomponent/cartrelatedslider?ids=\" + ids)\r\n .then(response => response.text())\r\n .then(data => {\r\n document.querySelector(\".cart__related-slider\").innerHTML = data;\r\n initSectionSlider();\r\n context.refreshCounters();\r\n });\r\n },\r\n updateRelatedSlider: function () {\r\n if (this.cart == null || this.cart.items === undefined || this.cart.items.length === 0) return;\r\n let container = document.querySelector(\".cart__related-slider\");\r\n if (container) {\r\n let ids = '';\r\n this.cart.items.forEach(function (item) {\r\n ids += ids === '' ? item.productId : \",\" + item.productId; \r\n });\r\n fetch(\"/viewcomponent/cartrelatedslider?ids=\" + ids)\r\n .then(response => response.text())\r\n .then(data => {\r\n container.innerHTML = data;\r\n initSectionSlider();\r\n $.Cart.refreshCounters();\r\n });\r\n }\r\n },\r\n updateCartAmount: function () {\r\n let container = $('.cart-items__total-price');\r\n if (container) {\r\n if(!isObject(this.cart)) {\r\n this.cart = JSON.parse(this.cart);\r\n }\r\n let formattedPrice = `${(this.cart.currentAmount).toLocaleString()} ${container.data('symbol')}`;\r\n container.text(formattedPrice);\r\n } \r\n },\r\n showPopup: function (productId) {\r\n let container = document.querySelector(\".added-to-cart__wrapper\");\r\n if (container) {\r\n addMainBlur();\r\n fetch(\"/cart/cart-popup?productId=\" + productId)\r\n .then(response => response.text())\r\n .then(data => container.innerHTML = data)\r\n .then(_ => document.querySelector(\".added-to-cart\").classList.add('is-show'));\r\n }\r\n },\r\n updateCartProducts: function () {\r\n let container = document.querySelector(\".cart__main-wrapper\");\r\n if (container) {\r\n fetch(\"/viewcomponent/cartproducts\")\r\n .then(response => response.text())\r\n .then(data => container.innerHTML = data);\r\n }\r\n this.updateRelatedSlider();\r\n },\r\n refreshCounters: function () {\r\n let context = this;\r\n $('.add-to-cart').each(function () {\r\n let item = $(this);\r\n let count = context.getCount(item.data('productid'));\r\n if (count > 0) {\r\n context.changeCount(item, item.data('productid'));\r\n } else {\r\n item.removeClass('add-to-cart--added');\r\n }\r\n });\r\n $('.js-counter-input').each(function () {\r\n let item = $(this);\r\n let count = context.getCount(item.data('productid'));\r\n if (count > 0) {\r\n item.val(count);\r\n }\r\n });\r\n\r\n },\r\n isExists: function (productId) {\r\n if (this.cart == null) {\r\n return false;\r\n }\r\n return this.cart.items.some(function (item) {\r\n return item.productId === productId;\r\n });\r\n },\r\n getCount: function (productId) {\r\n if (this.cart == null || this.cart.items === undefined) {\r\n return 0;\r\n }\r\n let items = this.cart.items.filter(function (item) {\r\n return +item.productId === +productId;\r\n });\r\n if (items.length > 0) {\r\n return items[0].quantity;\r\n }\r\n return 0;\r\n }\r\n };\r\n\r\n $.Cart.init();\r\n});","$(function () {\r\n $.Mediator = {\r\n init: function () {\r\n },\r\n initDeliveryPage: function () {\r\n initDeliveryMap();\r\n },\r\n initCartPage: function (ids) {\r\n // window.shop.initOrderDelivery();\r\n if (ids) {\r\n // $.Cart.initRelatedSlider(ids);\r\n }\r\n window.shop.initCartCheckout();\r\n }\r\n };\r\n\r\n $.Mediator.init();\r\n});","$(function () {\r\n $.Product = {\r\n init: function (id) {\r\n $.Cart.refreshCounters();\r\n }\r\n }\r\n});","import {isMobile, updateCatalogDropdownHeight} from \"./utils\";\r\n\r\n$(function(){\r\n const $header = $('.js-header');\r\n const $page = $('.js-page');\r\n const fixedActiveClass = 'header--fixed';\r\n const headerHeight = $header.outerHeight(true);\r\n const $productCardHeader = $('.js-product-card-header');\r\n \r\n const detectVisibleProductHeader = () => {\r\n if(isMobile()) return;\r\n updateCatalogDropdownHeight();\r\n if($(window).scrollTop() > 200){\r\n $page.css('margin-top', headerHeight);\r\n $header.addClass(fixedActiveClass);\r\n $productCardHeader.addClass('is-showed')\r\n } else {\r\n $page.css('margin-top', 0);\r\n $header.removeClass(fixedActiveClass)\r\n $productCardHeader.removeClass('is-showed')\r\n }\r\n }\r\n detectVisibleProductHeader();\r\n $(window).on('scroll', detectVisibleProductHeader)\r\n});","$(function () {\r\n $.CatalogTopFilter = {\r\n sort: 1,\r\n viewMode: 1,\r\n init: function () {\r\n // initSelect();\r\n // initCustomSelect();\r\n this.setEvents();\r\n },\r\n setEvents: function () {\r\n let context = this;\r\n $('body').on('change', '.category-sort', function (e) {\r\n context.sort = $(this).val();\r\n context.changeUrl();\r\n });\r\n\r\n $('body').on('click', '.viewtype-switch__item', function (e) {\r\n e.preventDefault();\r\n let viewType = $(this).data('viewtype');\r\n context.viewMode = viewType;\r\n SB.WriteCookie(\"VIEW_MODE\", viewType, 9999);\r\n context.changeUrl();\r\n });\r\n\r\n $('body').on('change', '.b-catalog__filter-by-price > input[type=checkbox]', function () {\r\n context.changeUrl();\r\n });\r\n\r\n $('body').on('change', '.b-catalog__filter-by-sale > input[type=checkbox]', function () {\r\n context.changeUrl();\r\n });\r\n\r\n $('body').on('change', '.b-catalog__filter-by-sale-mobile > input[type=checkbox]', function () {\r\n context.changeUrl(true);\r\n });\r\n\r\n $('body').on('click', '.js-filter-toggle-btn', function (e) {\r\n e.preventDefault();\r\n $H.toggleClass('is-filters-opened');\r\n });\r\n\r\n $('body').on('change', '.sort-mobile-select__input', function () {\r\n const text = $(this).find('option:selected').text();\r\n $(this).parents('.js-sort-mobile-select')\r\n .find('.sort-mobile-select__value')\r\n .text(text);\r\n context.sort = $(this).val();\r\n context.changeUrl();\r\n });\r\n\r\n $('body').on('click', '.js-filter-params-popup-link', function () {\r\n $(this).parents('.js-filter-params')\r\n .toggleClass('filter-params--popup')\r\n $(this).parents('.js-filter-params')\r\n .find('.filter-params__list label.filter-params__item:gt(5)')\r\n .toggleClass('filter-params__item--hidden');\r\n });\r\n\r\n $('body').on('click', '.js-filter-params-tag', function (e) {\r\n e.preventDefault();\r\n $(this).toggleClass('tag--active');\r\n });\r\n \r\n \r\n $(\"body\").on('click', '.js-head-catalogbtn', function (e) {\r\n e.preventDefault();\r\n $(\".sidebar-nav\").toggleClass(\"is-shown\");\r\n });\r\n \r\n $(\"body\").on('click', '.js-catalog-close', function (e) {\r\n e.preventDefault();\r\n $(\".sidebar-nav\").toggleClass(\"is-shown\");\r\n });\r\n },\r\n changeUrl: function (isMobile = false) {\r\n let url = new URL(window.location.href);\r\n url.searchParams.set('sort', this.sort);\r\n url.searchParams.set('view_mode', this.viewMode);\r\n let withPrice = document.querySelector('.b-catalog__filter-by-price > input[type=checkbox]').checked;\r\n let salePrice = isMobile \r\n ? document.querySelector('.b-catalog__filter-by-sale-mobile > input[type=checkbox]').checked \r\n : document.querySelector('.b-catalog__filter-by-sale > input[type=checkbox]').checked;\r\n // console.log(withPrice, salePrice);\r\n url.searchParams.set('r_0', withPrice ? '1-2147483647' : '0-2147483647');\r\n if (salePrice) {\r\n url.searchParams.set('sale', '1');\r\n } else {\r\n url.searchParams.delete('sale');\r\n }\r\n window.location = url;\r\n }\r\n };\r\n});","import {updateURL} from \"./utils\";\r\n\r\n$(function () {\r\n let currentFilter = getUrlParamsFromCookies();\r\n\r\n function setSelectedValue(selectElement, value) {\r\n if (value) {\r\n selectElement.val(value).trigger('change');\r\n }\r\n }\r\n\r\n function populateSelectWithFetch(url, selectElement, defaultText, selectedValue, callback) {\r\n fetch(url)\r\n .then(response => response.json())\r\n .then(data => {\r\n // selectElement.empty().append(new Option(defaultText, defaultText));\r\n\r\n const dataLabel = selectElement.attr('data-label');\r\n selectElement.find('option').not(`:contains(${defaultText})`).remove();\r\n\r\n data.forEach(datum => {\r\n if (!selectElement.find(`option[value='${datum}']`).length) {\r\n const option = new Option(datum, datum);\r\n selectElement.append(option);\r\n }\r\n });\r\n\r\n selectElement.attr('data-label', dataLabel);\r\n\r\n setSelectedValue(selectElement, selectedValue);\r\n\r\n if (callback) {\r\n callback();\r\n }\r\n });\r\n }\r\n\r\n function getUrlParamsFromCookies() {\r\n return {\r\n brand: window.shop.ReadCookie('filterBrand') || '',\r\n model: window.shop.ReadCookie('filterModel') || '',\r\n year: window.shop.ReadCookie('filterYear') || '',\r\n inStock: window.shop.ReadCookie('filterInStock') || ''\r\n };\r\n }\r\n\r\n function updateFiltersInCookies() {\r\n window.shop.WriteCookie('filterBrand', currentFilter.brand, 7);\r\n window.shop.WriteCookie('filterModel', currentFilter.model, 7);\r\n window.shop.WriteCookie('filterYear', currentFilter.year, 7);\r\n window.shop.WriteCookie('filterInStock', currentFilter.inStock, 7);\r\n }\r\n\r\n function resetFilters() {\r\n window.shop.WriteCookie('filterBrand', '', -1);\r\n window.shop.WriteCookie('filterModel', '', -1);\r\n window.shop.WriteCookie('filterYear', '', -1);\r\n window.shop.WriteCookie('filterInStock', '', -1);\r\n location.reload(); // Reload to apply the reset filters\r\n }\r\n\r\n if (currentFilter.brand) {\r\n populateSelectWithFetch(\"/filter/brands\", $('.bike-model'), 'Не выбрана', currentFilter.brand);\r\n } else {\r\n populateSelectWithFetch(\"/filter/brands\", $('.bike-model'), 'Не выбрана', '');\r\n }\r\n\r\n if (currentFilter.model) {\r\n fetch(`/filter/brand/${currentFilter.brand}/`)\r\n .then(response => response.json())\r\n .then(data => {\r\n const bikeOptionSelect = $('.bike-option');\r\n bikeOptionSelect.empty().append(new Option('Не выбрана', ''));\r\n\r\n data.forEach(datum => {\r\n const option = new Option(datum, datum);\r\n bikeOptionSelect.append(option);\r\n });\r\n setSelectedValue(bikeOptionSelect, currentFilter.model);\r\n });\r\n }\r\n\r\n if (currentFilter.year) {\r\n fetch(`/filter/brand/${currentFilter.brand}/${currentFilter.model}/years`)\r\n .then(response => response.json())\r\n .then(data => {\r\n const bikeYearSelect = $('.bike-year');\r\n bikeYearSelect.empty().append(new Option('Не выбран', ''));\r\n\r\n data.forEach(datum => {\r\n const option = new Option(datum, datum);\r\n bikeYearSelect.append(option);\r\n });\r\n setSelectedValue(bikeYearSelect, currentFilter.year);\r\n });\r\n }\r\n\r\n $('.bike-model').on('change', function () {\r\n let selectedBrand = $(this).val();\r\n if (selectedBrand && currentFilter.brand !== selectedBrand) {\r\n currentFilter.brand = selectedBrand;\r\n currentFilter.model = '';\r\n currentFilter.year = '';\r\n updateFiltersInCookies();\r\n populateSelectWithFetch(`/filter/brand/${selectedBrand}/`, $('.bike-option'), 'Не выбрана', '');\r\n }\r\n });\r\n\r\n $('.bike-option').on('change', function () {\r\n let selectedBrand = $('.bike-model:visible').val();\r\n let selectedModel = $(this).val();\r\n if (selectedModel && currentFilter.model !== selectedModel) {\r\n currentFilter.model = selectedModel;\r\n currentFilter.year = '';\r\n updateFiltersInCookies();\r\n populateSelectWithFetch(`/filter/brand/${selectedBrand}/${selectedModel}/years`, $('.bike-year'), 'Не выбран', '');\r\n }\r\n });\r\n\r\n $('.bike-year').on('change', function () {\r\n let selectedBrand = $('.bike-model:visible').val();\r\n let selectedModel = $('.bike-option:visible').val();\r\n let selectedYear = $(this).val();\r\n if (selectedYear && currentFilter.year !== selectedYear) {\r\n currentFilter.year = selectedYear;\r\n updateFiltersInCookies();\r\n }\r\n });\r\n\r\n $('.reset-filters').on('click', function () {\r\n updateURL({brand: null, model: null, year: null}, false);\r\n resetFilters();\r\n });\r\n\r\n $('.apply-filters').on('click', function () {\r\n let selectedBrand = $('.bike-model:visible').val();\r\n let selectedModel = $('.bike-option:visible').val();\r\n let selectedYear = $('.bike-year:visible').val();\r\n\r\n let filter = {};\r\n if (selectedBrand !== 'Не выбрана') {\r\n filter.brand = selectedBrand;\r\n }\r\n\r\n if (selectedModel !== 'Не выбрана') {\r\n filter.model = selectedModel;\r\n }\r\n\r\n if (selectedYear !== 'Не выбран') {\r\n filter.year = selectedYear;\r\n }\r\n\r\n updateURL(filter, true);\r\n });\r\n\r\n $('.header__logo').on('click', function () {\r\n\r\n resetFilters();\r\n window.location.href = '/';\r\n });\r\n\r\n $(\".b-catalog__instock > input[type=checkbox]\").on(\"change\", function () {\r\n let isChecked = $(this).is(\":checked\");\r\n currentFilter.inStock = isChecked ? \"true\" : \"\";\r\n updateFiltersInCookies();\r\n\r\n // Update URL and reload page with new filter\r\n let filter = {\r\n brand: currentFilter.brand,\r\n model: currentFilter.model,\r\n year: currentFilter.year,\r\n inStock: currentFilter.inStock\r\n };\r\n updateURL(filter, true);\r\n });\r\n\r\n // Initialize filters on page load\r\n $(document).ready(function () {\r\n let inStockCheckbox = $(\".b-catalog__instock > input[type=checkbox]\");\r\n inStockCheckbox.prop('checked', currentFilter.inStock === 'true');\r\n \r\n populateSelectWithFetch(\"/filter/brands\", $('.bike-model'), 'Не выбрана', currentFilter.brand, function () {\r\n if (currentFilter.brand && currentFilter.brand !== 'Не выбрана') {\r\n populateSelectWithFetch(`/filter/brand/${currentFilter.brand}/`, $('.bike-option'), 'Не выбрана', currentFilter.model, function () {\r\n if (currentFilter.model && currentFilter.model !== 'Не выбрана') {\r\n populateSelectWithFetch(`/filter/brand/${currentFilter.brand}/${currentFilter.model}/years`, $('.bike-year'), 'Не выбран', currentFilter.year);\r\n }\r\n });\r\n }\r\n });\r\n });\r\n});\r\n","import './ui-elements'\r\nimport './animations'\r\nimport './form'\r\nimport './popup'\r\nimport './headercatalog'\r\nimport './header-search'\r\nimport './cart'\r\nimport './mediator'\r\nimport './product'\r\nimport './header'\r\nimport './catalog-top-filter'\r\nimport './filter'\r\nimport {isMobile} from \"./utils\";\r\n\r\n\r\nconst MxShop = {};\r\n\r\nMxShop.initCallBack = function () {\r\n /*MxShop.initDatalayer();\r\n $.Filter.init();\r\n MxShop.initHeaderSocialButtons();\r\n MxShop.initSuggestCityPopup();\r\n */\r\n}\r\n\r\nMxShop.initSuggestCityPopup = function () {\r\n let isShowing = MxShop.ReadCookie(\"ShowPopupCity\");\r\n if (isShowing) {\r\n $(\".js-modal-city\").removeClass(\"hidden\");\r\n MxShop.RemoveCookie(\"ShowPopupCity\");\r\n }\r\n}\r\nMxShop.WriteCookie = function (name, value, days, domain = \"\") {\r\n let expires;\r\n let suffixCookie = \"\";\r\n if (days) {\r\n let date = new Date();\r\n date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\r\n expires = \"; expires=\" + date.toGMTString();\r\n } else {\r\n expires = \"\";\r\n }\r\n if (domain !== \"\") {\r\n suffixCookie = location.hostname !== \"localhost\" ? \"; domain=\" + domain : \"\";\r\n }\r\n document.cookie = name + \"=\" + value + expires + \"; path=/\" + suffixCookie;\r\n}\r\nMxShop.ReadCookie = function (cname) {\r\n let name = cname + \"=\";\r\n let decodedCookie = decodeURIComponent(document.cookie);\r\n let ca = decodedCookie.split(';');\r\n for (let i = 0; i < ca.length; i++) {\r\n let c = ca[i];\r\n while (c.charAt(0) === ' ') {\r\n c = c.substring(1);\r\n }\r\n if (c.indexOf(name) == 0) {\r\n return c.substring(name.length, c.length);\r\n }\r\n }\r\n return \"\";\r\n}\r\nMxShop.RemoveCookie = function (name, path, domain) {\r\n path = path ? path : \"/\";\r\n domain = location.hostname !== \"localhost\" ? \".mx-zapchasti.ru\" : domain;\r\n console.log('cookies', path, domain);\r\n document.cookie = name + \"=\" +\r\n ((path) ? \";path=\" + path : \"\") +\r\n ((domain) ? \";domain=\" + domain : \"\") +\r\n \";expires=Thu, 01 Jan 1970 00:00:01 GMT\";\r\n}\r\nMxShop.ToggleTag = function (tagName) {\r\n let tags = $('.js-consumable-slider .tags__list .tags__item');\r\n tags.each(function () {\r\n let tag = $(this);\r\n if (tag.text() === tagName) {\r\n tag.toggleClass('tag--active');\r\n }\r\n });\r\n $(tags[0]).removeClass('tag--active');\r\n}\r\nMxShop.ExpandProducts = function () {\r\n $('.product-modifications__showall').click();\r\n}\r\nMxShop.ClearTags = function () {\r\n let tags = $('.js-consumable-slider .tags__list .tags__item');\r\n tags.removeClass('tag--active');\r\n $(tags[0]).addClass('tag--active');\r\n}\r\nMxShop.GetCallbackMessageFromPage = function () {\r\n return $('.js-input-questions').val();\r\n}\r\nMxShop.showPopup = function (target) {\r\n openPopup(target, undefined, undefined);\r\n}\r\nMxShop.getCheckoutForm = function () {\r\n let $form = $('.order-checkout__form').find('form');\r\n let data = $form.serializeArray();\r\n return JSON.stringify(data);\r\n}\r\nMxShop.getFile = function (containerClass, resultClass = null, callback = null) {\r\n $('.order-checkout__form').find('button[type=\"submit\"]').attr(\"disabled\", true);\r\n let container = $(containerClass)[0];\r\n let result = readUploadedFileAsText(container);\r\n if (resultClass !== null) {\r\n result.then(data => {\r\n $(resultClass).val(data);\r\n if (callback !== null) {\r\n callback();\r\n }\r\n })\r\n } else {\r\n return result;\r\n }\r\n}\r\nMxShop.GetValue = function (containerClass) {\r\n return $(containerClass).val();\r\n}\r\nMxShop.GetText = function (containerClass) {\r\n return $(containerClass).text();\r\n}\r\nMxShop.afterCheckoutFileUploaded = function () {\r\n let formWrapper = $('.order-checkout__form');\r\n formWrapper.find('button[type=\"submit\"]').removeAttr(\"disabled\");\r\n formWrapper.find('input[name=\"inn\"]').removeAttr('required');\r\n}\r\nMxShop.initCartCheckout = function () {\r\n let block = $('div.order-checkout');\r\n block.block({message: null});\r\n initUploadFile();\r\n formValidate();\r\n block.unblock();\r\n}\r\nMxShop.initOrderDelivery = function () {\r\n //window.initTabBar();\r\n window.initSelect();\r\n window.initDeliveryPopup();\r\n $B.on('change', '.js-order-delivery input[type=radio]', function () {\r\n $('.order-checkout__form').find('input[name=\"address\"]').val('');\r\n $('.js-order-delivery').removeClass('is-active');\r\n $(this).parents('.js-order-delivery').addClass('is-active');\r\n });\r\n}\r\nMxShop.initHeaderCityPicker = function () {\r\n $('.js-select-citypicker')\r\n .select2({\r\n dropdownAutoWidth: false,\r\n containerCssClass: 'select',\r\n }).on('select2:select', function (e) {\r\n let value = $('.js-select-citypicker').val() || \"1|Москва|1\";\r\n let [id, cityId, groupId] = value.split(\"|\");\r\n let cityBass64 = window.btoa(unescape(encodeURIComponent(cityId)));\r\n MxShop.WriteCookie(\"CurrentCity\", cityBass64, 365, \".mx-zapchasti.ru\");\r\n MxShop.WriteCookie(\"CurrentDomain\", id, 365, \".mx-zapchasti.ru\");\r\n MxShop.WriteCookie(\"CurrentGroup\", groupId, 365, \".mx-zapchasti.ru\");\r\n location.reload();\r\n });\r\n\r\n $(\".citypicker-popup__item\").on(\"click\", function () {\r\n let $item = $(this);\r\n MxShop.WriteCookie(\"CurrentCity\", $item.data(\"city\"), 365, \".mx-zapchasti.ru\");\r\n MxShop.WriteCookie(\"CurrentDomain\", $item.data(\"id\"), 365, \".mx-zapchasti.ru\");\r\n MxShop.WriteCookie(\"CurrentGroup\", $item.data(\"group\"), 365, \".mx-zapchasti.ru\");\r\n location.reload();\r\n });\r\n}\r\nMxShop.onSoftFilterChange = function () {\r\n initSelect();\r\n $('select').on('select2:select', function (e) {\r\n let filter = {};\r\n $('.js-select').each(function (i, $select) {\r\n let select = $($select);\r\n filter[select.attr('name')] = select.val();\r\n });\r\n let url = new URL(window.location.href);\r\n for (let key in filter) {\r\n url.searchParams.set(key, filter[key]);\r\n }\r\n window.location.href = url;\r\n });\r\n}\r\nMxShop.setSelect2Value = function (selector, val) {\r\n $(selector).val(val);\r\n $(selector).trigger('change');\r\n}\r\nMxShop.IsMobile = function () {\r\n return isMobile();\r\n}\r\nwindow.shop = MxShop;\r\n$(function () {\r\n MxShop.initCallBack();\r\n});\r\n\r\n"],"names":["window","numberWithCommas","x","toString","replace","$","$input","focus","this","parent","addClass","removeClass","blur","val","each","initSelect","$select","select2","dropdownAutoWidth","containerCssClass","dropdownCssClass","on","e","labelTxt","target","attr","labelTemplate","siblings","find","prepend","trigger","tooltipster","side","theme","maxWidth","distance","debug","inputMask","mask","data","Inputmask","placeholder","definitions","F","validator","G","$stars","$parent","rateValue","index","filter","idx","hasClass","type","id","abp","services","app","jsProxy","setNewsVote","done","console","log","tagsSelector","initSliderTags","listEl","scrollWidth","clientWidth","$B","preventDefault","parents","activeClass","tabLinkSelector","initTabBar","$tabRoot","initCustomSelect","$selectOpen","$selectOption","closest","slideToggle","toggleClass","$unit","$name","valSelect","text","slideUp","next","initUploadFile","off","change","value","printFilename","filename","template","html","match","remove","fn","viewportChecker","useroptions","options","classToAdd","classToRemove","classToAddForFullView","removeClassAfterAnimation","offset","repeat","invertBottomOffset","callbackFunction","elem","action","scrollHorizontal","scrollBox","extend","$elem","boxSize","height","width","checkElements","viewportStart","viewportEnd","Math","max","scrollLeft","scrollTop","$obj","objOptions","attrOptions","String","indexOf","parseInt","rawStart","left","top","rawEnd","elemStart","round","elemEnd","one","document","bind","resize","jQuery","_typeof","Symbol","iterator","obj","constructor","prototype","previousDevice","device","changeOrientationList","documentElement","userAgent","navigator","toLowerCase","television","includes","haystack","needle","className","RegExp","currentClassNames","handleOrientation","landscape","walkOnChangeOrientationList","setOrientationCache","newOrientation","length","macos","ios","iphone","ipod","ipad","windows","iPadOS13Up","platform","maxTouchPoints","android","androidPhone","androidTablet","blackberry","blackberryPhone","blackberryTablet","windowsPhone","windowsTablet","fxos","fxosPhone","fxosTablet","meego","cordova","location","protocol","nodeWebkit","process","mobile","tablet","desktop","i","portrait","screen","orientation","Object","hasOwnProperty","call","abs","innerHeight","innerWidth","noConflict","onChangeOrientation","cb","push","orientationEvent","findMatch","arr","isMobile","async","postData","url","fetch","method","mode","cache","credentials","headers","RequestVerificationToken","querySelector","redirect","referrerPolicy","body","JSON","stringify","postDataForm","formData","FormData","key","append","updateURL","params","navigate","URL","href","searchParams","URLSearchParams","search","delete","set","history","pushState","scrollPosition","addEventListener","attachEvent","os","addBlur","removeBlur","addMainBlur","removeMainBlur","formValidate","thisForm","abpServiceName","validate","focusInvalid","rules","email","checkEmailFormat","phone","checkPhoneFormat","messages","ignore","highlight","element","unhighlight","submitHandler","form","event","formParams","serializeArray","tag","files","file","undefined","name","field","trim","Array","isArray","button","prop","then","result","resp","parse","guidId","charCode","which","keyCode","$this","btn","is","addMethod","hide","lastOpenedPopup","hash","substr","videoSrc","openPopup","setTimeout","first","$popup","utils.isMobile","$H","$jsPopup","empty","getEventItem","item","ajax","success","fadeIn","initSlider","back","selectedCategoryClass","mobileDevices","matchMedia","matches","hover","css","$wrapEl","childFrame","categoryName","$visibleSublist","HeaderSearch","config","debounceWait","minSearchLength","searchEndpoint","selectors","input","contextSelect","contextItem","contextClear","clearButton","results","headerSearch","overlay","searchSubmit","classes","expanded","contextActive","resultsActive","contextShowed","state","searchContext","currentSearchTerm","isSearching","searchAbortController","init","initializeState","setEvents","debouncedSearch","func","wait","timeout","args","clearTimeout","apply","debounce","performSearch","get","query","setSearchContext","setSearchQuery","term","abort","AbortController","clearResults","signal","showSearchResults","error","clearSearchContext","clearInputField","resetExpandedSearch","toggleSearchContextDropdown","handleSearchSubmit","origin","self","Cart","cart","currentItem","currentProductId","types","Dialog","CartButton","getCartData","setQuantity","root","operation","context","inputQuantity","buttonQuantity","checkInitProduct","forceUpdate","keys","$body","add","clear","productId","del","response","refreshCart","refreshCounters","quantity","showPopup","cartId","changeCount","items","addedItem","product","categories","ceil","current","updateCartProducts","catch","updateCartAmount","reload","container","innerHTML","count","getCount","initRelatedSlider","ids","initSectionSlider","updateRelatedSlider","forEach","variable","formattedPrice","toLocaleString","_","classList","isExists","some","Mediator","initDeliveryPage","initDeliveryMap","initCartPage","shop","initCartCheckout","Product","$header","$page","fixedActiveClass","headerHeight","outerHeight","$productCardHeader","detectVisibleProductHeader","CatalogTopFilter","sort","viewMode","changeUrl","viewType","SB","WriteCookie","withPrice","checked","salePrice","currentFilter","brand","ReadCookie","model","year","inStock","setSelectedValue","selectElement","populateSelectWithFetch","defaultText","selectedValue","callback","json","dataLabel","not","datum","option","Option","updateFiltersInCookies","resetFilters","bikeOptionSelect","bikeYearSelect","selectedBrand","selectedModel","selectedYear","isChecked","ready","MxShop","RemoveCookie","days","domain","expires","suffixCookie","date","Date","setTime","getTime","toGMTString","hostname","cookie","cname","ca","decodeURIComponent","split","c","charAt","substring","path","tagName","tags","click","containerClass","resultClass","readUploadedFileAsText","formWrapper","removeAttr","block","message","unblock","initDeliveryPopup","cityId","groupId","cityBass64","btoa","unescape","encodeURIComponent","$item","select","selector","initCallBack"],"mappings":"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"}