{"version":3,"file":"248_07c630c221af9fcb21dd.bundle.js","mappings":"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","sources":["webpack://tumarket/./js/global/readmore.js","webpack://tumarket/./js/global/util.js","webpack://tumarket/./js/search/OtherCitiesSearch.js","webpack://tumarket/./js/catalog/catalog.js","webpack://tumarket/./js/pages/catalog.js","webpack://tumarket/./node_modules/readmore-js/readmore.js"],"sourcesContent":["import * as $ from \"jquery\";\nimport { initTuPopover } from \"./popover\";\n\nlet tumarket = window.tumarket;\n\n/** @type {Object.} */\nlet readmoreState = tumarket.readmoreState;\n\n/** @type {Object.) => void>} */\nlet callbacks = tumarket.callbacks;\n\n/**\n * \n * @param {JQuery} el \n * @param {boolean} [value]\n * @param {boolean} [skipCallback]\n */\nfunction toggleReadmore(el, value = null, skipCallback = null){\n let $wrap = $(el).closest(\".tum-readmore-wrap\");\n let $toggle = $(el);\n let $target = $(el).attr(\"data-target\");\n let scroll = $(el).attr('data-scroll') == '';\n let scrollContainer = $(el).attr('data-scroll-container') || window;\n let $texts = null;\n let $otherToggles = null;\n let id = $wrap.attr('data-readmoreid');\n let groupContainer = $(el)[0].dataset.groupContainer;\n\n if (groupContainer && !skipCallback) {\n [...document.querySelector(groupContainer).querySelectorAll(\".tum-readmore-toggle\")]\n .filter(e => e != this)\n .forEach(e => toggleReadmore(e, false, true));\n }\n\n if ($target) {\n $texts = $($target);\n $otherToggles = $('.tum-readmore-toggle[data-target=\"' + $target + '\"]').not($(el));\n } else {\n $texts = $(\".tum-readmore-0, .tum-readmore-1, .tum-readmore-2, .tum-readmore-inline, .tum-readmore-custom\", $wrap);\n $otherToggles = $(\".tum-readmore-toggle\", $wrap).not($(el));\n }\n\n function swapToggleHtml($toggle, show){\n let showHtml = $toggle.attr('data-showhtmltarget') ? $($toggle.attr('data-showhtmltarget')).html() : $toggle.attr('data-showhtml');\n let hideHtml = $toggle.attr('data-hidehtmltarget') ? $($toggle.attr('data-hidehtmltarget')).html() : $toggle.attr('data-hidehtml');\n\n let html = show ? hideHtml : showHtml;\n if (html != \"_\") {\n $toggle.html(html);\n }\n }\n\n $texts.each(function(){\n let $text = $(this);\n let _wrap = $(this).closest(\".tum-readmore-wrap\");\n\n if (_wrap.length && !_wrap.is($wrap)) {\n return;\n }\n\n $text.toggleClass(\"show\", value);\n let show = $text.hasClass(\"show\");\n\n setTimeout(() => {\n swapToggleHtml($toggle, show);\n }, 100);\n \n $otherToggles.each(function(){\n let _toggleWrap = $(this).closest(\".tum-readmore-wrap\");\n\n if (_toggleWrap.is($wrap) || !_toggleWrap.length) {\n setTimeout(() => {\n swapToggleHtml($(this), show);\n }, 100);\n }\n });\n\n let ajaxCode = $text.attr('data-ajaxcode');\n let ajaxOptions = $text.attr('data-ajaxoptions');\n let ajaxLoaded = $text.data('ajaxloaded') == 1;\n if (ajaxCode && !ajaxLoaded) {\n import(\"./ajaxComponent\").then(({ renderComponent }) => {\n renderComponent(ajaxCode, ajaxOptions)\n .then(html => { \n $text.html(html)\n $text.data('ajaxloaded', 1);\n initTuPopover($text);\n document.body.dispatchEvent(new Event(\"tum.component.loaded\"));\n });\n });\n }\n\n if (id) {\n readmoreState[id] = show;\n }\n\n if (show && scroll) {\n scrollContainer.scrollTo({\n top: $text[0].getBoundingClientRect().top - 150,\n\t\t\t\tbehavior: 'smooth'\n });\n }\n });\n\n let callback = $(el).attr('data-callback');\n if (!skipCallback && callback && callbacks && callbacks[callback]) {\n callbacks[callback](el);\n }\n}\n\nfunction initReadmore(){\n $(document).on(\"click\", \".tum-readmore-toggle\", function (e) {\n //если кликнуть на toggle, который находится внутри другого toggle, будет двойной вызов и в итоге ничего не отработает\n //но stopPropagation может вызвать проблемы в другом функционале, например сборе статистики при кликах\n //поэтому вместо этого явно проверяем, что ридмор уже обработан\n if (e.result?.readmore_processed) return;\n\n if (!this.matches('[data-dont-prevent-default]')) {\n e.preventDefault();\n }\n \n let readmoreState = null;\n if (this.dataset.readmoreState) {\n readmoreState = this.dataset.readmoreState == 'show';\n }\n\n toggleReadmore($(this), readmoreState);\n \n return { readmore_processed: true };\n });\n\n $(document).on('shown.bs.collapse', function(e){\n let id = $(e.target).attr('data-readmoreid');\n readmoreState[id] = true;\n });\n\n $(document).on('hidden.bs.collapse', function(e){\n let id = $(e.target).attr('data-readmoreid');\n readmoreState[id] = false;\n });\n}\n\n/**\n * простой ручной toggle для collapse без анимации. Можно использовать для сохранения состояния коллапсов при ререндере\n * @param {JQuery} element \n * @param {boolean} [value] \n * @param {JQuery} [container] \n */\nfunction toggleCollapse(element, value = null, container = null){\n let $collapseToggle = $(container || document).find(element);\n let $collapse = $($collapseToggle.attr('data-target'), container || document);\n\n let showIcons = [ '.fa-arrow-down', '.fa-chevron-down' ];\n let hideIcons = [ '.fa-arrow-up', '.fa-chevron-up' ];\n let $icon = $([showIcons, hideIcons].flatMap(e => e).join(', '), $collapseToggle);\n $icon.toggleClass(showIcons.join(', '), !value).toggleClass(hideIcons.join(', '), value);\n\n $collapseToggle.toggleClass('collapsed', !value);\n $collapse.toggleClass('show', value);\n\n let id = $collapse.attr('data-readmoreid');\n if (id && value !== null) readmoreState[id] = value;\n}\n\n/**\n * \n * @param {JQuery} container \n */\nfunction restoreReadmoreState(container) {\n for (let id in readmoreState){\n let $readmoreToggle = $(`.tum-readmore-wrap[data-readmoreid=${id}] .tum-readmore-toggle`, container).first();\n if ($readmoreToggle.length)\ttoggleReadmore($readmoreToggle, readmoreState[id]);\n\n let $collapse = $(`[data-toggle=\"collapse\"][data-readmoreid=\"${id}\"]`, container);\n if ($collapse.length) toggleCollapse($collapse, readmoreState[id], container);\n }\n}\n\n/**\n * \n * @param {string} id \n * @param {boolean} [value] \n * @returns \n */\nfunction toggleReadmoreById(id, value = null) {\n let $element = $(`[data-readmoreid=\"${id}\"]`);\n if ($element.hasClass('tum-readmore-wrap')) {\n let $toggle = $('.tum-readmore-toggle', $element).first();\n toggleReadmore($toggle, value);\n \n return;\n }\n\n if ($element.is('[data-toggle=collapse]')) {\n toggleCollapse($element, value);\n }\n}\n\nwindow.toggleReadmore = toggleReadmore;\n\nexport { initReadmore, toggleReadmore, restoreReadmoreState, toggleReadmoreById };","/* global tumarket */\n\nimport dateFormat from \"../lib/dateformat/dateformat\";\n\nfunction isMob() {\n return window.innerWidth < 768;\n}\n\n/**\n * \n * @param {string} rawStr \n * @returns \n */\nfunction encodeHtml(rawStr) {\n return rawStr.replace(/[\\u00A0-\\u9999<>&]/g, i => '&#'+i.charCodeAt(0)+';')\n}\n\n/**\n * \n * @param {string} string \n * @returns \n */\nfunction capitalize(string)\n{\n if (!string) return string;\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\n/**\n * \n * @param {string} string \n * @returns \n */\nfunction decapitalize(string)\n{\n if (!string) return string;\n return string.charAt(0).toLowerCase() + string.slice(1);\n}\n\n/**\n * \n * @param {string} str \n * @returns \n */\nfunction toCamelCase(str) {\n return str.toLowerCase().replace(/[-_][a-z]/g, (group) => group.slice(-1).toUpperCase());\n}\n\n/**\n * \n * @param {string} str \n * @returns \n */\nfunction toSnakeCase(str) {\n return str.replace(/[A-Z]/g, letter => `_${letter.toLowerCase()}`);\n}\n\n/**\n * \n * @param {any[]} array \n * @param {string | (e: any) => string} key \n * @returns {Object.}\n */\nfunction groupBy(array, key) {\n let useFunction = typeof key == 'function';\n\n return array.reduce((acc, currentValue) => {\n let groupKey = useFunction ? key(currentValue).toString() : currentValue[key].toString();\n if (!acc[groupKey]) {\n acc[groupKey] = [];\n }\n acc[groupKey].push(currentValue);\n return acc;\n }, {});\n}\n\nfunction sort(array, desc, mapper){\n if (!array.length) return array;\n if (!mapper) mapper = e => e;\n let copy = [...array];\n copy.sort((a, b) => {\n if (mapper(a) > mapper(b)) return 1;\n if (mapper(a) < mapper(b)) return -1;\n return 0;\n });\n\n if (desc) copy.reverse();\n return copy;\n}\n\n/**\n * convert string to bool\n * @param {*} value \n * @param {*} isAttr treat as html attribute, so empty string is true\n * @returns \n */\nfunction toBool(value, isAttr){\n if (isAttr && value == '') return true;\n if (value == 'false' || value == '0') return false;\n return !!value;\n}\n\nfunction renderSimpleTemplate(template, data, requireFields, encodeUrl) {\n if (!template || !data) return '';\n\n let result = template;\n let templateRegex = /{{([a-zA-Z0-9_]+)}}/g;\n let iifRegex = /{{iif ([a-zA-Z0-9_]+) ('[a-zA-Z0-9_а-яА-Я,.:'\" ]*'|[a-zA-Z0-9_]+) ('[a-zA-Z0-9_а-яА-Я,.:'\" ]*'|[a-zA-Z0-9_]+)}}/g;\n let literalRegex = /'(.*)'/;\n\n for (let field of template.matchAll(templateRegex)) {\n let value = getValueByPath(data, field[1]) || '';\n \n if (requireFields && !value) {\n return null;\n }\n\n if (encodeUrl) value = encodeURIComponent(value);\n result = result.replace(field[0], value);\n }\n\n for (let field of template.matchAll(iifRegex)) {\n let condition = getValueByPath(data, field[1]);\n let literalA = field[2].match(literalRegex);\n let literalB = field[3].match(literalRegex);\n let a = literalA ? literalA[1] : getValueByPath(data, field[2]);\n let b = literalB ? literalB[1] : getValueByPath(data, field[3]);\n\n let value = condition ? a : b;\n \n if (requireFields && !value) {\n return null;\n }\n\n if (encodeUrl) value = encodeURIComponent(value);\n result = result.replace(field[0], value);\n }\n\n return result.trim();\n}\n\n/**\n * \n * @param {any[]} array \n * @returns \n */\nfunction distinct(array) {\n if (!array) return [];\n function distinctFilter(value, index, self) { \n return self.indexOf(value) === index;\n }\n\n return array.filter(distinctFilter);\n}\n\n/**\n * \n * @param {string} date \n * @returns {Date}\n */\nfunction parseDate(date) {\n if (!date.includes(' ') && !date.includes('T')) date = date + ' 00:00';\n if (date.includes('+')) return new Date(date);\n return new Date(`${date}+09:00`);\n}\n\nfunction isDateInThisWeek(date, offset) {\n if (!offset) offset = 0;\n let today = new Date();\n const todayObj = new Date(today.setDate(today.getDate() + offset * 7));\n const todayDate = todayObj.getDate();\n const todayDay = todayObj.getDay();\n\n // get first date of week\n const firstDayOfWeek = new Date(todayObj.setDate(todayDate - todayDay));\n\n // get last date of week\n const lastDayOfWeek = new Date(firstDayOfWeek);\n lastDayOfWeek.setDate(lastDayOfWeek.getDate() + 6);\n\n // if date is equal or within the first and last dates of the week\n return date >= firstDayOfWeek && date <= lastDayOfWeek;\n}\n\n\n/**\n * позволяет получить из сложного объекта вложенное поле по строке типа 'products[0].info.name'\n * @param {object} object \n * @param {string} path \n * @returns \n */\nfunction getValueByPath(object, path) {\n let result = object;\n let sections = path.split('.');\n for (let section of sections) {\n if (!result) return result;\n let arrayRegex = /^([a-zA-Z0-9_]+)\\[(\\d+)\\]$/;\n let match = section.match(arrayRegex);\n let index = match ? match[2] : null;\n if (index) section = match[1];\n\n if (index) {\n result = result[section][index] || null;\n } else {\n result = result[section] || null;\n }\n }\n\n return result;\n}\n\n/**\n устанавливает значение вложенного поля по строке типа 'products.info.name'\n * @param {*} object \n * @param {*} path \n * @param {*} value \n */\nfunction setValueByPath(object, path, value) {\n let schema = object; // a moving reference to internal objects within obj\n let pList = path.split('.');\n let len = pList.length;\n for (let i = 0; i < len-1; i++) {\n let elem = pList[i];\n if (!schema[elem]) schema[elem] = {};\n schema = schema[elem];\n }\n\n schema[pList[len-1]] = value;\n}\n\nfunction isIos(){\n if ((/iPad|iPhone|iPod/.test(navigator.userAgent)) || (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1))\t{\n return true;\n }\n\n return false;\n}\n\nfunction swapAltHtml(element, attributeName) {\n if (!attributeName) attributeName = 'data-althtml';\n let oldhtml = element.innerHTML;\n let newhtml = element.getAttribute(attributeName);\n element.setAttribute(attributeName, oldhtml);\n element.innerHTML = newhtml;\n}\n\nfunction goBack() {\n let hasUrlReferrer = !!tumarket.urlReferrer;\n let tumarketUrlReferrer = hasUrlReferrer && new URL(tumarket.urlReferrer).hostname.includes('tu.market');\n let hasHistory = history.length > 2;\n\n if (hasHistory && tumarketUrlReferrer) {\n history.back();\n return;\n }\n\n if (!hasHistory && tumarketUrlReferrer) {\n window.close();\n }\n\n location.href = '/';\n}\n\nfunction getCurrentTimeForInput(){\n let date = new Date();\n return `${dateFormat(date, 'yyyy-MM-dd')}T${dateFormat(date, 'HH:mm')}`;\n}\n\nexport { \n isMob, encodeHtml, capitalize, decapitalize, toCamelCase, groupBy, sort, \n toBool, renderSimpleTemplate, distinct, toSnakeCase, parseDate, getValueByPath, setValueByPath, isDateInThisWeek,\n isIos, swapAltHtml, goBack, getCurrentTimeForInput\n};","/* global tumarket */\n\nimport * as $ from \"jquery\";\nimport tu_slider from \"../slider.js\";\nimport { ajaxSend } from \"../global/fetch\";\nimport { setCookie } from \"../global/cookie\";\nimport \"../../css/modules/tu.m/catalog/otherCities.css\";\nimport \"readmore-js\";\nimport { getPrecompiledTemplate, loadPrecompiledTemplates } from \"../global/templates\";\nimport { initTuPopover } from \"../global/popover\";\nimport { addEventDelegate, hide, insertHtmlAfter, insertHtmlBefore, prependHtml, show, toggleClass } from \"../global/dom\";\nimport tumGlobal from \"../global.js\";\nimport { isMob } from \"../global/util\";\n\nvar otherCitiesSearch = {\n\toptions: {\n\t\turl: {\n\t\t\tgetProductMiniatures: \"/search/getproductminiatures\"\n\t\t},\n\t\tfirstCity: {},\n\t\totherCities: []\n\t},\n\tinit: function (options) {\n\t\tObject.assign(this.options, options);\n\n\t\tif (!document.querySelector('.tum-search-otherCitiesCont')) return;\n\n\t\taddEventDelegate(document, 'click', '.tum-search-showOtherCitySlider', (element, event) => {\n\t\t\tevent.preventDefault();\n\t\t\ttoggleClass(\".tum-search-otherCity\", \"d-none\", false);\n\n\t\t\tvar city = element.closest(\".tum-search-otherCity\");\n\t\t\tvar productIds = city.getAttribute(\"data-productids\").split(\",\").map(e => Number(e));\n\t\t\tvar linksAfter = city.getAttribute(\"data-linksafter\");\n\t\t\tvar name = city.getAttribute(\"data-name\");\n\t\t\ttoggleClass(city, 'd-none', true);\n\t\t\tthis.getOtherCitySlider(productIds, linksAfter, name);\n\t\t});\n\n\t\taddEventDelegate(document, 'click', \".tum-search-hideOtherCitySlider\", () => {\n\t\t\ttumGlobal.highlight($('.tum-search-otherCities'), 1000);\n\t\t});\n\n\t\taddEventDelegate(document, \"click\", \".tum-search-changeRegion a, a.tum-search-changeRegion\", (element, e) => {\n\t\t\te.preventDefault();\n\t\t\tvar url = element.getAttribute(\"href\");\n\t\t\tif (url == \"#\" || url == \"javascript:void(0)\") return;\n\n\t\t\tsetCookie(\"geo_resetLocation\", \"1\", 1);\n\t\t\tlocation.href = url;\n\t\t});\n\n\t\tif (this.options.otherCities) {\n\t\t\tthis.renderOtherCities().then(() => {\n\t\t\t\tif (this.options.firstCity) {\n\t\t\t\t\tthis.initSliderProducts(this.options.firstCity.slider, this.options.firstCity.linksAfter, this.options.firstCity.hrefToMarketCity);\n\t\t\t\t\tthis.renderProductSlider().then(() => {\n\t\t\t\t\t\tprependHtml(\n\t\t\t\t\t\t\t\".tum-search-otherCitySlider .visibility-sliders\", \n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t${this.options.firstCity.anyCityName}:\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t);\n\t\t\t\n\t\t\t\t\t\tinsertHtmlAfter(\".tum-search-otherCitySlider .visibility-sliders\", this.options.firstCity.linksAfter);\n\t\t\t\t\t\tthis.initProductSlider();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t},\n\tgetOtherCitySlider: function (productIds, linksAfter, name) {\n\t\tif (!productIds) {\n\t\t\treturn;\n\t\t}\n\n\t\tajaxSend({ url: this.options.url.getProductMiniatures, data: { productIDs: productIds, disableShowCity: true } }).then(data => {\n\t\t\tif (data.result) {\n\t\t\t\tthis.initSliderProducts(data.Items, linksAfter);\n\t\t\t\tthis.renderProductSlider().then(() => {\n\t\t\t\t\tlet container = document.querySelector(\".tum-search-otherCitySlider .visibility-sliders\");\n\t\t\t\t\tprependHtml(container, `${name}:`)\n\t\t\t\t\tcontainer.nextElementSibling.remove();\n\t\t\t\t\tinsertHtmlAfter(container, linksAfter);\n\t\t\t\t\tthis.initProductSlider();\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t},\n\tinitSliderProducts: function (miniatures, linksAfter) {\n\t\tif (miniatures) {\n\t\t\tfor (let item of miniatures) {\n\t\t\t\titem.contextType = 'otherCities';\n\t\t\t}\n\t\t}\n\n\t\tvar products = {\n\t\t\tItems: miniatures,\n\t\t\tMoreItemsLink: linksAfter\n\t\t};\n\t\t\n\t\tthis.options.sliderProducts = products;\n\t},\n\trenderProductSlider: function () {\n\t\treturn loadPrecompiledTemplates(['product-slider']).then(() => {\n\t\t\tvar template = getPrecompiledTemplate('product-slider');\n\t\t\tthis.options.sliderProducts.isSlider = true;\n\t\t\tthis.options.sliderProducts.isMob = isMob();\n\t\t\tthis.options.sliderProducts.mobGrid = false;\n\t\t\tvar htmlOut = template(this.options.sliderProducts);\n\t\t\t\n\t\t\tdocument.querySelector(\".tum-search-otherCitySlider .visibility-sliders\").innerHTML = htmlOut;\n\t\t\ttoggleClass(\".tum-search-otherCitySlider\", 'd-none', false);\n\t\t\t\n\t\t\tinitTuPopover();\n\t\t});\n\t},\n\tinitProductSlider: function () {\n\t\tlet sliderContainer = document.querySelector('.tum-search-otherCitySlider .tu-slider');\n\t\tlet totalProductIds = sliderContainer.previousElementSibling.getAttribute('data-productids').split(',');\n\t\tlet additionalSlide = sliderContainer.querySelector('.slider-list .slider-additional-slide');\n\t\thide(additionalSlide)\n\n\t\tthis.slider = tu_slider.create({ \n\t\t\tcontainer: sliderContainer,\n\t\t\tgetItems: (callback) => {\n\t\t\t\tlet productIDs = totalProductIds.slice(tumarket.defaultSliderSize);\n\t\t\t\tloadPrecompiledTemplates(['product-mini-wrapper']).then(() => {\n\t\t\t\t\treturn ajaxSend({ url: '/search/GetProductMiniatures', data: { productIDs: productIDs, isNeedLinkUnder: true, disableShowCity: true } });\n\t\t\t\t}).then(data => {\n\t\t\t\t\tif (data.result) {\n\t\t\t\t\t\tlet template = getPrecompiledTemplate('product-mini-wrapper');\n\t\t\t\t\t\tfor (let item of data.Items) {\n\t\t\t\t\t\t\titem.isSlider = true;\n\t\t\t\t\t\t\titem.isMob = isMob();\n\t\t\t\t\t\t\titem.contextType = \"otherCities\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet newItems = data.Items.map(e => template(e)).join(\"\");\n\n\t\t\t\t\t\tinsertHtmlBefore(additionalSlide, newItems);\n\t\t\t\t\t\tshow(additionalSlide);\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t\tinitTuPopover();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t\ttotalCount: totalProductIds.length + 1,\n\t\t\tcontrolsPosition: 'bottom'\n\t\t});\n\t},\n\trenderOtherCities: function() {\n\t\treturn loadPrecompiledTemplates(['other-cities']).then(() => {\n\t\t\tvar template = getPrecompiledTemplate('other-cities');\n\t\t\tvar htmlOut = template({ OtherCities: this.options.otherCities});\n\t\t\tdocument.querySelector(\".tum-search-otherCitiesCont\").innerHTML = htmlOut;\n\t\t});\n\t}\n};\n\nwindow.otherCitiesSearch = otherCitiesSearch;\nexport default otherCitiesSearch;","/* global tumarket */\n\nimport * as $ from \"jquery\";\n\nimport \"bootstrap/js/dist/popover\";\nimport tumGlobal from \"../global.js\";\nimport tu_slider from \"../slider.js\";\nimport otherCitiesSearch from \"../search/OtherCitiesSearch.js\";\nimport { bootstrapAlert } from \"../global/alert\";\nimport { ajaxSend } from \"../global/fetch\";\nimport { showAdultWarning } from \"../product/restrictAdult.js\";\nimport { initTuPopover } from \"../global/popover\";\nimport { addEventDelegate, setHtml } from \"../global/dom\";\nimport { getPrecompiledTemplate, loadPrecompiledTemplates } from \"../global/templates.js\";\nimport { isMob } from \"../global/util.js\";\n\nvar cat = {\n\toptions: {\n\t\tparentID: 0,\n\t\tshowBtn: '',\n\t\thideBtn: '',\n\t\tpictureStyle:''\n\t},\n\tinit: function (options) {\n\t\tcat.options = $.extend(cat.options, options);\n\n\t\t$(document).on('click', '.tum-show-all-cats', this.showAllCats);\n\n\t\taddEventDelegate(document, 'click', '.show-categories', () => {\n\t\t\tvar offset = $(\".catalog-container\").offset();\n\t\t\toffset.top = 100;\n\t\t\t\n\t\t\t$('html, body').animate({\n\t\t\t\tscrollTop: offset.top\n\t\t\t});\n\n\t\t\ttumGlobal.highlight($('.catalog-container'), 1500);\n\t\t});\n\t\t\n\t\taddEventDelegate(document, 'click', '.show-catalog-more', (element, e) => {\n\t\t\te.preventDefault();\n\n\t\t\tif ($(element).find('i').hasClass('fa-chevron-down')) {\n\t\t\t\tvar hideElements = $(element).closest('.row').find('>div.hide');\n\t\t\t\t$.each(hideElements, function (i, el) {\n\t\t\t\t\t$(el).toggleClass('hide show');\n\t\t\t\t});\n\t\t\t\t$('.catalog-collapse-btn').html(cat.options.hideBtn);\n\t\t\t} else {\n\t\t\t\tvar showElements = $(element).closest('.row').find('>div.show');\n\t\t\t\t$.each(showElements, function (i, el) {\n\t\t\t\t\t$(el).toggleClass('hide show');\n\t\t\t\t});\n\t\t\t\t$('.catalog-collapse-btn').html(cat.options.showBtn);\n\t\t\t}\n\t\t});\n\t\t\n\t\taddEventDelegate(document, \"click\", \"[data-load-catalog-sliders]\", element => {\n\t\t\tsetHtml('#catalog-sliders-container', '
');\n\t\t\tlet id = Number(element.dataset.loadCatalogSliders);\n\t\t\tthis.getCatalogSliders(id);\n\t\t});\n\t},\n\tshowAllCats: function () {\n\t\t$('.tum-show-all-cats').hide();\n\t},\n\tgetCatalogSliders: function (parentId) {\n\t\treturn loadPrecompiledTemplates(['catalog-sliders'])\n\t\t.then(() => ajaxSend({ url: \"/catalog/getCatalogSliders\", data: { parentId } }))\n\t\t.then(data => {\n\t\t\tdata.sliders.isSlider = true;\n\t\t\tdata.sliders.isMob = isMob();\n\t\t\tlet template = getPrecompiledTemplate(\"catalog-sliders\");\n\t\t\tsetHtml('#catalog-sliders-container', template(data.sliders));\n\t\t})\n\t\t.then(() => {\n\t\t\tthis.sliders = [...document.querySelectorAll('.tu-slider')].map(e => tu_slider.create({ container: e, controlsPosition: 'bottom' }));\n\n\t\t\tinitTuPopover();\n\n\t\t\tlet otherCities = tumarket.catalog.otherCities;\n\t\t\tif (otherCities?.length > 0) {\n\t\t\t\totherCitiesSearch.init({\n\t\t\t\t\tfirstCity: otherCities ? otherCities[0] : {},\n\t\t\t\t\totherCities: otherCities || []\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tshowAdultWarning();\n\t\t});\n\t}\n}\n\nvar catUpload = {\n\toptions: {\n\t\tcontainer: {},\n\t\turl: '',\n\t\tsave: '/firmRequests/saveCatalogField',\n\t\tcurrInputFileID: '',\n\t},\n\tinit: function () {\n\t\taddEventDelegate(document, 'change', '.isMainList', element => {\n\t\t\tvar id = $(element).attr('data-id') || 0;\n\t\t\tvar name = $(element).attr('data-name');\n\t\t\tlet val = $(element).prop('checked') ? '1' : '0';\n\t\t\tcatUpload.saveCalalogfield(id, name, val);\n\t\t});\n\n\t\taddEventDelegate(document, 'change', '.inputFile', (element, e) => {\n\t\t\te.preventDefault();\n\t\t\tcatUpload.options.url = $(element).attr('data-url');\n\t\t\tcatUpload.uploadFile($(element));\n\n\t\t\tcatUpload.options.container = $(element).closest('a');\n\t\t})\n\t},\n\tsaveCalalogfield: function (id, name, value) {\n\t\tvar params = { id: id, name: name, value: value };\n\t\tajaxSend({ url: catUpload.options.save, data: params }).then(data => {\n\t\t\tif (data.result) {\n\t\t\t\tbootstrapAlert('Успешно сохранено', { type: 'success' });\n\t\t\t} else {\n\t\t\t\tbootstrapAlert(data.msg || 'Ошибка сохранения', { type: 'danger' });\n\t\t\t}\n\t\t});\n\t},\n\tcheckUploadFile: function (file) {\n\t\tvar res = true;\n\t\tif (file.length) {\n\t\t\tvar fileExt = file[0].name.split(\".\")[file[0].name.split(\".\").length - 1].toLowerCase();\n\t\t\tvar types = ['png', 'jpeg', 'jpg'];\n\t\t\tif (fileExt == \"\" || $.inArray(fileExt, types) === -1) {\n\t\t\t\t$('.underFieldMsg', catUpload.options.container).text(\"Вы можете загружать только изображения формата PNG, JPG, JPEG\");\n\t\t\t\tres = false;\n\t\t\t} else {\n\t\t\t\tvar size = file[0].size;\n\t\t\t\tif (size > 6000000) {\n\t\t\t\t\t$('.underFieldMsg', catUpload.options.container).text(\"Размер файла не может превышать 6 мб\");\n\t\t\t\t\tres = false;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tres = false;\n\t\t}\n\t\treturn res;\n\t},\n\tuploadFile: function (el) {\n\t\tvar id = $(el).attr('id');\n\t\tcatUpload.options.currInputFileID = id;\n\t\tvar fd = new FormData();\n\t\tvar upl = document.getElementById(id);\n\t\tvar count = upl.files.length;\n\t\tvar isChecked = catUpload.checkUploadFile(upl.files);\n\t\tif (!isChecked) {\n\t\t\treturn;\n\t\t}\n\t\tif (count != 0) {\n\t\t\tfor (var i = 0; i < count; i++) {\n\t\t\t\tfd.append(\"fileToUpload\" + i, upl.files[i]);\n\t\t\t}\n\t\t\tfd.append(\"id\", $(el).attr('data-id'));\n\t\t\tfd.append(\"name\", \"image\");\n\n\t\t\tvar xhr = new XMLHttpRequest();\n\t\t\txhr.upload.addEventListener(\"progress\", catUpload.uploadProgress, false);\n\t\t\txhr.addEventListener(\"load\", catUpload.uploadComplete, false);\n\t\t\txhr.addEventListener(\"error\", catUpload.uploadFailed, false);\n\t\t\txhr.addEventListener(\"abort\", catUpload.uploadCanceled, false);\n\t\t\txhr.open(\"POST\", catUpload.options.url);\n\t\t\txhr.send(fd);\n\t\t}\n\t},\n\tuploadComplete: function uploadComplete(evt) {\n\t\ttry {\n\t\t\tvar data = JSON.parse(evt.target.responseText);\n\t\t\t\n\t\t\tif (!data.result) {\n\t\t\t\t$('.underFieldMsg', catUpload.options.container).text(data.msg || \"Ошибка загрузки файла\");\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\t$('.underFieldMsg', catUpload.options.container).text('');\n\t\t\t}\n\t\t\tif ($('.uploaded', catUpload.options.container).length > 0) {\n\t\t\t\t$('.img-container img', catUpload.options.container).attr('src', data.url);\n\t\t\t} else {\n\t\t\t\t$('.img-container', catUpload.options.container).html('');\n\t\t\t}\n\n\t\t\tdocument.getElementById(catUpload.options.currInputFileID).value = \"\";\n\t\t} catch {\n\t\t\t$('.underFieldMsg', catUpload.options.container).text(\"При попытке загрузки файла произошла ошибка\");\n\t\t\tdocument.getElementById(catUpload.options.currInputFileID).value = \"\";\n\t\t}\n\t},\n\tuploadFailed: function () {\n\t\tconsole.log(\"При попытке загрузки файла произошла ошибка\");\n\t},\n\tuploadCanceled: function uploadCanceled() {\n\t},\n\tuploadProgress: function (evt) {\n\t\tif (evt.lengthComputable) {\n\t\t\t$('.underFieldMsg', catUpload.options.container).html('Загрузка: ' + Math.round(evt.loaded * 100 / evt.total) + '%');\n\t\t}\n\t},\n}\n\nexport { cat, catUpload };","/* global tumarket */\n\nimport \"./layout.js\";\nimport min from \"../search/miniature.js\";\nimport { cat, catUpload } from \"../catalog/catalog.js\";\n\n//css\nimport \"../../css/modules/tu.m/catalog/catalog.css\";\n\nwindow.addEventListener('load', () => {\n min.init({ IsAuth: tumarket.isAuthenticated });\n\n cat.init(tumarket.catalog);\n catUpload.init();\n});\n\n","/*!\n * @preserve\n *\n * Readmore.js jQuery plugin\n * Author: @jed_foster\n * Project home: http://jedfoster.github.io/Readmore.js\n * Licensed under the MIT license\n *\n * Debounce function from http://davidwalsh.name/javascript-debounce-function\n */\n\n/* global jQuery */\n\n(function(factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD\n define(['jquery'], factory);\n } else if (typeof exports === 'object') {\n // CommonJS\n module.exports = factory(require('jquery'));\n } else {\n // Browser globals\n factory(jQuery);\n }\n}(function($) {\n 'use strict';\n\n var readmore = 'readmore',\n defaults = {\n speed: 100,\n collapsedHeight: 200,\n heightMargin: 16,\n moreLink: 'Read More',\n lessLink: 'Close',\n embedCSS: true,\n blockCSS: 'display: block; width: 100%;',\n startOpen: false,\n\n // callbacks\n blockProcessed: function() {},\n beforeToggle: function() {},\n afterToggle: function() {}\n },\n cssEmbedded = {},\n uniqueIdCounter = 0;\n\n function debounce(func, wait, immediate) {\n var timeout;\n\n return function() {\n var context = this, args = arguments;\n var later = function() {\n timeout = null;\n if (! immediate) {\n func.apply(context, args);\n }\n };\n var callNow = immediate && !timeout;\n\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n\n if (callNow) {\n func.apply(context, args);\n }\n };\n }\n\n function uniqueId(prefix) {\n var id = ++uniqueIdCounter;\n\n return String(prefix === null ? 'rmjs-' : prefix) + id;\n }\n\n function setBoxHeights(element) {\n var el = element.clone().css({\n height: 'auto',\n width: element.width(),\n maxHeight: 'none',\n overflow: 'hidden'\n }).insertAfter(element),\n expandedHeight = el.outerHeight(),\n cssMaxHeight = parseInt(el.css({maxHeight: ''}).css('max-height').replace(/[^-\\d\\.]/g, ''), 10),\n defaultHeight = element.data('defaultHeight');\n\n el.remove();\n\n var collapsedHeight = cssMaxHeight || element.data('collapsedHeight') || defaultHeight;\n\n // Store our measurements.\n element.data({\n expandedHeight: expandedHeight,\n maxHeight: cssMaxHeight,\n collapsedHeight: collapsedHeight\n })\n // and disable any `max-height` property set in CSS\n .css({\n maxHeight: 'none'\n });\n }\n\n var resizeBoxes = debounce(function() {\n $('[data-readmore]').each(function() {\n var current = $(this),\n isExpanded = (current.attr('aria-expanded') === 'true');\n\n setBoxHeights(current);\n\n current.css({\n height: current.data( (isExpanded ? 'expandedHeight' : 'collapsedHeight') )\n });\n });\n }, 100);\n\n function embedCSS(options) {\n if (! cssEmbedded[options.selector]) {\n var styles = ' ';\n\n if (options.embedCSS && options.blockCSS !== '') {\n styles += options.selector + ' + [data-readmore-toggle], ' +\n options.selector + '[data-readmore]{' +\n options.blockCSS +\n '}';\n }\n\n // Include the transition CSS even if embedCSS is false\n styles += options.selector + '[data-readmore]{' +\n 'transition: height ' + options.speed + 'ms;' +\n 'overflow: hidden;' +\n '}';\n\n (function(d, u) {\n var css = d.createElement('style');\n css.type = 'text/css';\n\n if (css.styleSheet) {\n css.styleSheet.cssText = u;\n }\n else {\n css.appendChild(d.createTextNode(u));\n }\n\n d.getElementsByTagName('head')[0].appendChild(css);\n }(document, styles));\n\n cssEmbedded[options.selector] = true;\n }\n }\n\n function Readmore(element, options) {\n this.element = element;\n\n this.options = $.extend({}, defaults, options);\n\n embedCSS(this.options);\n\n this._defaults = defaults;\n this._name = readmore;\n\n this.init();\n\n // IE8 chokes on `window.addEventListener`, so need to test for support.\n if (window.addEventListener) {\n // Need to resize boxes when the page has fully loaded.\n window.addEventListener('load', resizeBoxes);\n window.addEventListener('resize', resizeBoxes);\n }\n else {\n window.attachEvent('load', resizeBoxes);\n window.attachEvent('resize', resizeBoxes);\n }\n }\n\n\n Readmore.prototype = {\n init: function() {\n var current = $(this.element);\n\n current.data({\n defaultHeight: this.options.collapsedHeight,\n heightMargin: this.options.heightMargin\n });\n\n setBoxHeights(current);\n\n var collapsedHeight = current.data('collapsedHeight'),\n heightMargin = current.data('heightMargin');\n\n if (current.outerHeight(true) <= collapsedHeight + heightMargin) {\n // The block is shorter than the limit, so there's no need to truncate it.\n if (this.options.blockProcessed && typeof this.options.blockProcessed === 'function') {\n this.options.blockProcessed(current, false);\n }\n return true;\n }\n else {\n var id = current.attr('id') || uniqueId(),\n useLink = this.options.startOpen ? this.options.lessLink : this.options.moreLink;\n\n current.attr({\n 'data-readmore': '',\n 'aria-expanded': this.options.startOpen,\n 'id': id\n });\n\n current.after($(useLink)\n .on('click', (function(_this) {\n return function(event) {\n _this.toggle(this, current[0], event);\n };\n })(this))\n .attr({\n 'data-readmore-toggle': id,\n 'aria-controls': id\n }));\n\n if (! this.options.startOpen) {\n current.css({\n height: collapsedHeight\n });\n }\n\n if (this.options.blockProcessed && typeof this.options.blockProcessed === 'function') {\n this.options.blockProcessed(current, true);\n }\n }\n },\n\n toggle: function(trigger, element, event) {\n if (event) {\n event.preventDefault();\n }\n\n if (! trigger) {\n trigger = $('[aria-controls=\"' + this.element.id + '\"]')[0];\n }\n\n if (! element) {\n element = this.element;\n }\n\n var $element = $(element),\n newHeight = '',\n newLink = '',\n expanded = false,\n collapsedHeight = $element.data('collapsedHeight');\n\n if ($element.height() <= collapsedHeight) {\n newHeight = $element.data('expandedHeight') + 'px';\n newLink = 'lessLink';\n expanded = true;\n }\n else {\n newHeight = collapsedHeight;\n newLink = 'moreLink';\n }\n\n // Fire beforeToggle callback\n // Since we determined the new \"expanded\" state above we're now out of sync\n // with our true current state, so we need to flip the value of `expanded`\n if (this.options.beforeToggle && typeof this.options.beforeToggle === 'function') {\n this.options.beforeToggle(trigger, $element, ! expanded);\n }\n\n $element.css({'height': newHeight});\n\n // Fire afterToggle callback\n $element.on('transitionend', (function(_this) {\n return function() {\n if (_this.options.afterToggle && typeof _this.options.afterToggle === 'function') {\n _this.options.afterToggle(trigger, $element, expanded);\n }\n\n $(this).attr({\n 'aria-expanded': expanded\n }).off('transitionend');\n };\n })(this));\n\n $(trigger).replaceWith($(this.options[newLink])\n .on('click', (function(_this) {\n return function(event) {\n _this.toggle(this, element, event);\n };\n })(this))\n .attr({\n 'data-readmore-toggle': $element.attr('id'),\n 'aria-controls': $element.attr('id')\n }));\n },\n\n destroy: function() {\n $(this.element).each(function() {\n var current = $(this);\n\n current.attr({\n 'data-readmore': null,\n 'aria-expanded': null\n })\n .css({\n maxHeight: '',\n height: ''\n })\n .next('[data-readmore-toggle]')\n .remove();\n\n current.removeData();\n });\n }\n };\n\n\n $.fn.readmore = function(options) {\n var args = arguments,\n selector = this.selector;\n\n options = options || {};\n\n if (typeof options === 'object') {\n return this.each(function() {\n if ($.data(this, 'plugin_' + readmore)) {\n var instance = $.data(this, 'plugin_' + readmore);\n instance.destroy.apply(instance);\n }\n\n options.selector = selector;\n\n $.data(this, 'plugin_' + readmore, new Readmore(this, options));\n });\n }\n else if (typeof options === 'string' && options[0] !== '_' && options !== 'init') {\n return this.each(function () {\n var instance = $.data(this, 'plugin_' + readmore);\n if (instance instanceof Readmore && typeof instance[options] === 'function') {\n instance[options].apply(instance, Array.prototype.slice.call(args, 1));\n }\n });\n }\n };\n\n}));\n\n"],"names":["tumarket","window","readmoreState","callbacks","toggleReadmore","el","value","skipCallback","$wrap","closest","$toggle","$target","attr","scroll","scrollContainer","$texts","$otherToggles","id","groupContainer","dataset","swapToggleHtml","show","showHtml","html","hideHtml","document","querySelector","querySelectorAll","filter","e","this","forEach","not","each","$text","_wrap","length","is","toggleClass","hasClass","setTimeout","_toggleWrap","ajaxCode","ajaxOptions","ajaxLoaded","data","then","renderComponent","body","dispatchEvent","Event","scrollTo","top","getBoundingClientRect","behavior","callback","initReadmore","on","result","readmore_processed","matches","preventDefault","target","isMob","innerWidth","encodeHtml","rawStr","replace","i","charCodeAt","capitalize","string","charAt","toUpperCase","slice","decapitalize","toLowerCase","toCamelCase","str","group","toSnakeCase","letter","groupBy","array","key","useFunction","reduce","acc","currentValue","groupKey","toString","push","sort","desc","mapper","copy","a","b","reverse","toBool","isAttr","renderSimpleTemplate","template","requireFields","encodeUrl","templateRegex","iifRegex","literalRegex","field","matchAll","getValueByPath","encodeURIComponent","condition","literalA","match","literalB","trim","distinct","index","self","indexOf","parseDate","date","includes","Date","isDateInThisWeek","offset","today","todayObj","setDate","getDate","todayDate","todayDay","getDay","firstDayOfWeek","lastDayOfWeek","object","path","sections","split","section","arrayRegex","setValueByPath","schema","pList","len","elem","isIos","test","navigator","userAgent","platform","maxTouchPoints","swapAltHtml","element","attributeName","oldhtml","innerHTML","newhtml","getAttribute","setAttribute","goBack","tumarketUrlReferrer","urlReferrer","URL","hostname","hasHistory","history","back","close","location","href","getCurrentTimeForInput","otherCitiesSearch","options","url","getProductMiniatures","firstCity","otherCities","init","Object","assign","event","city","productIds","map","Number","linksAfter","name","getOtherCitySlider","highlight","renderOtherCities","initSliderProducts","slider","hrefToMarketCity","renderProductSlider","anyCityName","initProductSlider","productIDs","disableShowCity","Items","container","join","nextElementSibling","remove","miniatures","item","contextType","products","MoreItemsLink","sliderProducts","isSlider","mobGrid","htmlOut","sliderContainer","totalProductIds","previousElementSibling","additionalSlide","create","getItems","defaultSliderSize","isNeedLinkUnder","newItems","totalCount","controlsPosition","OtherCities","cat","parentID","showBtn","hideBtn","pictureStyle","showAllCats","animate","scrollTop","find","hideElements","showElements","loadCatalogSliders","getCatalogSliders","hide","parentId","sliders","catalog","catUpload","save","currInputFileID","val","prop","saveCalalogfield","uploadFile","params","type","msg","checkUploadFile","file","res","fileExt","text","size","fd","FormData","upl","getElementById","count","files","append","xhr","XMLHttpRequest","upload","addEventListener","uploadProgress","uploadComplete","uploadFailed","uploadCanceled","open","send","evt","JSON","parse","responseText","console","log","lengthComputable","Math","round","loaded","total","IsAuth","isAuthenticated","$","readmore","defaults","speed","collapsedHeight","heightMargin","moreLink","lessLink","embedCSS","blockCSS","startOpen","blockProcessed","beforeToggle","afterToggle","cssEmbedded","uniqueIdCounter","debounce","func","wait","immediate","timeout","context","args","arguments","later","apply","callNow","clearTimeout","uniqueId","prefix","String","setBoxHeights","clone","css","height","width","maxHeight","overflow","insertAfter","expandedHeight","outerHeight","cssMaxHeight","parseInt","defaultHeight","resizeBoxes","current","isExpanded","selector","styles","d","u","createElement","styleSheet","cssText","appendChild","createTextNode","getElementsByTagName","Readmore","extend","_defaults","_name","attachEvent","prototype","_this","useLink","after","toggle","trigger","$element","newHeight","newLink","expanded","off","replaceWith","destroy","next","removeData","fn","instance","Array","call"],"sourceRoot":""}