{"version":3,"file":"8997_b74111a62f348906eabd.bundle.js","mappings":"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","sources":["webpack://tumarket/./js/common.js","webpack://tumarket/./js/global/toggle.js","webpack://tumarket/./js/global/cookie.js","webpack://tumarket/./js/global/loadlib.js","webpack://tumarket/./js/global/progressbar.js","webpack://tumarket/./js/global/templates.js","webpack://tumarket/./js/global/uuid.js"],"sourcesContent":["/* global tumarket, LiveTex */\n\nimport * as $ from \"jquery\";\n\nimport tumGlobal from \"./global.js\";\nimport { showDialog, closeDialog, showAlert } from \"./global/dialog\";\nimport { ajaxSend, request } from \"./global/fetch\";\nimport { bootstrapAlert } from \"./global/alert\";\nimport { getUrlParameter, removeUrlParam } from \"./global/url\";\nimport { getCookie, setCookie } from \"./global/cookie\";\nimport { loadLib } from \"./global/loadlib\";\nimport { getPrecompiledTemplate, loadPrecompiledTemplates } from \"./global/templates\";\nimport { initPopovers } from \"./global/popover\";\nimport { addEventDelegate, documentHeight, setValue, toggleClass } from \"./global/dom\";\nimport { isMob } from \"./global/util\";\nimport { searchWidgets } from \"./navbar/searchSelect.js\";\nimport { setToggle } from \"./global/toggle.js\";\n\nfunction _setTimeout(ms) {\n\treturn new Promise(resolve => {\n\t\tsetTimeout(resolve, ms);\n\t});\n}\n\nfunction showAdminOnlyStuff(){\n\tif (tumarket.isAdmin) {\n\t\tfor (let el of document.querySelectorAll('[data-admin-only]')){\n\t\t\ttoggleClass(el, 'd-none', false);\n\t\t}\n\t}\n}\n\nfunction toggleExtendedView(code) {\n\tif (code == \"enable\") {\n\t\ttoggleClass(\".tum-enableExtendedView i\", \"fa-toggle-on\", true);\n\t\ttoggleClass(\".tum-enableExtendedView i\", \"fa-toggle-off\", false);\n\t}\n\telse if (code == \"disable\") {\n\t\ttoggleClass(\".tum-enableExtendedView i\", \"fa-toggle-on\", false);\n\t\ttoggleClass(\".tum-enableExtendedView i\", \"fa-toggle-off\", true);\n\t}\n\telse {\n\t\ttoggleClass(\".tum-enableExtendedView i\", \"fa-toggle-off fa-toggle-on\");\n\t}\n\n\tif (document.querySelector(\".tum-enableExtendedView .fa-toggle-on\")) {\n\t\tsetCookie(\"extended_view\", \"1\", 30);\n\t}\n\telse {\n\t\tsetCookie(\"extended_view\", \"\", 30);\n\t}\n}\n\nlet searchIconBlinked = false;\n\nvar tumCommon = {\n\toptions: {\n\t\thideFloatingHeader: false\n\t},\n\tinit: function (options) {\n\t\tObject.assign(this.options, options);\n\t\tthis.initCallbacks();\n\n\t\tthis.checkAuthorization();\n\t\tthis.updateCartInfo();\n\t\tthis.checkCookies();\n\t\tthis.initHeader();\n\t\tthis.initFloatingHeader();\n\t\tthis.initCtuCloud();\n\t\tthis.initFloatingWindows();\n\t\tthis.initCacheControls();\n\t\tthis.initOperatorControls();\n\t\tthis.initMobSearchBar();\n\n\t\tinitPopovers();\n\n\t\taddEventDelegate('click', '.nobubble', (element, event) => {\n\t\t\tevent.stopPropagation();\n\t\t});\n\t\n\t\taddEventDelegate(document, 'click', '.copyToClipboard', element => {\n\t\t\tlet content = element.dataset.content;\n\t\t\ttumGlobal.copyToClipboard(content);\n\t\t\tbootstrapAlert('Скопировано в буфер обмена', { type: 'success' });\n\t\t});\n\n\t\tdocument.querySelector('[data-telegram-connect-suggestion-hide]')?.addEventListener('click', () => {\n\t\t\tsetCookie('hideTelegramMsg', '1', 1/24);\n\t\t\tdocument.querySelector('[data-telegram-connect-suggestion]').remove();\n\t\t});\n\n\t\taddEventDelegate(document, 'click', '[data-dismiss=\"dropdown\"]', element => {\n\t\t\t$(element.closest('.dropdown')).dropdown('hide');\n\t\t});\n\n\t\tshowAdminOnlyStuff();\n\n\t\taddEventDelegate(document, 'click', '[data-clear-cache]', element => {\n\t\t\tajaxSend({\n\t\t\t\turl: '/requests/clearcache',\n\t\t\t\tdata: {\n\t\t\t\t\tprefix: element.dataset.prefix,\n\t\t\t\t\tfirmId: element.dataset.firmId\n\t\t\t\t}\n\t\t\t}).then(data => {\n\t\t\t\tif (data.result) bootstrapAlert('Кеш сброшен', { type: 'success' });\n\t\t\t\telse bootstrapAlert('Ошибка', { type: 'danger' });\n\t\t\t});\n\t\t});\n\n\t\taddEventDelegate(document, 'click', 'a.disabled', (element, event) => {\n\t\t\tevent.preventDefault();\n\t\t});\n\n\t\taddEventDelegate(document, 'click', '.tu-toggle-disabled, .tu-toggle.disabled', (element, event) => {\n\t\t\tevent.preventDefault();\n\t\t});\n\t},\n\tinitMobSearchBar: function(){\n\t\tlet lastScrollTop = 0;\n\t\tlet lastState = false;\n\t\tlet mobSearchBar = document.querySelector('.mob-search-bar');\n\t\tif (!mobSearchBar) return;\n\n\t\twindow.addEventListener(\"scroll\", () => {\n\t\t\tlet st = window.scrollY || document.documentElement.scrollTop;\n\n\t\t\tlet show = lastState;\n\t\t\tlet canBeShown = this.showFloatingHeader_desktop('.mob-search-bar');\n\n\t\t\tif (st > lastScrollTop) {\n\t\t\t\tshow = false;\n\t\t\t} else if (st < lastScrollTop) {\n\t\t\t\tshow = canBeShown;\n\t\t\t}\n\n\t\t\tlastScrollTop = st <= 0 ? 0 : st; // For Mobile or negative scrolling\n\t\t\tlastState = show;\n\n\t\t\ttoggleClass(mobSearchBar, 'show', show);\n\t\t\ttoggleClass('body', 'mob-search-bar-shown', show);\n\t\t}, { passive: true });\n\t},\n\tinitFloatingHeader: function(){\n\t\tvar self = this;\n\t\tif (!tumGlobal.isMob()) {\n\t\t\twindow.addEventListener('scroll', () => {\n\t\t\t\tlet showFloatingHeader = self.showFloatingHeader_desktop();\n\t\t\t\ttoggleClass('.header-floating', 'show', showFloatingHeader);\n\t\t\t\ttoggleClass('body', 'floating-header-shown', showFloatingHeader);\n\n\t\t\t\tif (document.querySelector('.header-floating.top')) {\n\t\t\t\t\ttoggleClass('body', 'floating-header-shown-top', showFloatingHeader);\n\t\t\t\t}\n\t\t\t}, { passive: true });\n\n\t\t\treturn;\n\t\t}\n\n\t\twindow.addEventListener('scroll', () => this.updateFloatingHeader(), { passive: true });\n\t\twindow.dispatchEvent(new Event('scroll'));\n\t},\n\tupdateFloatingHeader: function(){\n\t\tlet showFloatingHeader = this.showFloatingHeader_desktop();\n\t\ttoggleClass('.header-floating.bottom', 'show', showFloatingHeader && this.showFloatingHeader_mob() && !this.options.hideFloatingHeader);\n\t\ttoggleClass('.header-floating.top', 'show', showFloatingHeader);\n\n\t\ttoggleClass('body', 'floating-header-shown', showFloatingHeader);\n\t\tif (document.querySelector('.header-floating.top')) {\n\t\t\ttoggleClass('body', 'floating-header-shown-top', showFloatingHeader);\n\t\t}\n\t},\n\ttoggleTopBar: function(){\n\t\ttoggleClass('.topbar.main', 'd-none');\n\t},\n\ttoggleFloatingHeader: function(){\n\t\tthis.options.hideFloatingHeader = !this.options.hideFloatingHeader;\n\t},\n\tshowFloatingHeader_desktop: function(selector){\n\t\tlet header = document.querySelector(selector || '.header-floating');\n\t\tif (!header) return false;\n\t\treturn window.scrollY > header.clientHeight;\n\t},\n\tshowFloatingHeader_mob: function(){\n\t\tlet header = document.querySelector('.header-floating');\n\t\tif (!header) return false;\n\t\treturn window.scrollY < (documentHeight() - window.innerHeight - header.clientHeight * 3);\n\t},\n\tinitCtuCloud: function(){\n\t\tlet containers = document.querySelectorAll('.ctuCloud');\n\t\tfor (let cloud of containers) {\n\t\t\tif (cloud.scrollWidth <= cloud.offsetWidth) return;\n\t\t\t\n\t\t\tlet $back = cloud.querySelector('.ctuCloud-back');\n\t\t\tlet $forward = cloud.querySelector('.ctuCloud-forward');\n\t\t\t$forward?.classList.remove('d-md-none');\n\t\t\t$forward?.classList.add.addClass('d-md-block');\n\n\t\t\tlet maxScrollLeft = () => cloud.scrollWidth - cloud.offsetWidth;\n\t\t\tlet updateButtons = () => {\n\t\t\t\tlet showBack = cloud.scrollLeft > 0;\n\t\t\t\tlet showForward = cloud.scrollLeft < maxScrollLeft();\n\t\t\t\ttoggleClass($back, 'd-md-none', !showBack);\n\t\t\t\ttoggleClass($back, 'd-md-block', showBack);\n\t\t\t\ttoggleClass($forward, 'd-md-none', !showForward);\n\t\t\t\ttoggleClass($forward, 'd-md-block', showForward);\n\t\t\t};\n\t\t\t\n\t\t\t$back?.on('click', () => {\n\t\t\t\t$(cloud).animate({ scrollLeft: Math.max(0, cloud.scrollLeft - cloud.offsetWidth)}, 200, null, updateButtons);\n\t\t\t});\n\t\t\t\n\t\t\t$forward?.on('click', () => {\n\t\t\t\t$(cloud).animate({ scrollLeft: Math.min(maxScrollLeft(), cloud.scrollLeft + cloud.offsetWidth)}, 200, null, updateButtons);\n\t\t\t});\n\t\t}\n\t},\n\tinitCacheControls: function(){\n\t\taddEventDelegate(document, 'click', '.tum-toggleCache', () => {\n\t\t\tvar disableCache = getCookie(\"disableCache\");\n\t\t\tif (disableCache == \"1\") {\n\t\t\t\tsetCookie(\"disableCache\", \"0\", 1/24/2);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tsetCookie(\"disableCache\", \"1\", 1/24/2);\n\t\t\t}\n\t\t\tthis.updateCacheToggle();\n\t\t\tlocation.reload();\n\t\t});\n\n\t\taddEventDelegate(document, 'click', '.tum-toggleCache-long', () => {\n\t\t\tvar disableCache_long = getCookie(\"disableCache_long\");\n\t\t\tif (disableCache_long == \"1\") {\n\t\t\t\tsetCookie(\"disableCache_long\", \"0\", 1);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tsetCookie(\"disableCache_long\", \"1\", 1);\n\t\t\t}\n\t\t\tthis.updateCacheToggle();\n\t\t\tlocation.reload();\n\t\t});\n\t},\n\tinitOperatorControls: function(){\n\t\taddEventDelegate(document, 'click', '.tum-operatorAddonToggle', () => {\n\t\t\tvar enable = getCookie(\"enableOperatorAddon\");\n\t\t\tif (enable == \"1\") {\n\t\t\t\tsetCookie(\"enableOperatorAddon\", \"0\", 1);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tsetCookie(\"enableOperatorAddon\", \"1\", 1);\n\t\t\t}\n\t\t\tthis.updateOperatorAddonToggle();\n\t\t\tlocation.reload();\n\t\t});\n\t},\n\tloadLivetex: function(callback) {\n\t\tif (window.LiveTex) {\n\t\t\tcallback();\n\t\t\treturn;\n\t\t}\n\n\t\twindow.liveTex = true;\n\t\twindow.liveTexID = 170736;\n\t\twindow.liveTex_object = true;\n\t\twindow.LiveTex = {\n\t\t\tonLiveTexReady: function () {\n\t\t\t\tLiveTex.hideLabel();\n\t\t\t\tcallback();\n\t\t\t}\n\t\t};\n\n\t\tloadLib({\n\t\t\tjsLink: \"https://cs15.livetex.ru/js/client.js\",\n\t\t\tconditionObject: window._LiveTex\n\t\t});\n\t},\n\tinitCallbacks: function () {\n\t\tvar self = this;\n\n\t\taddEventDelegate(document, 'click', '[data-set-cookie]', element => {\n\t\t\tsetCookie(element.dataset.name, element.dataset.value, element.dataset.duration / 24);\n\t\t});\n\t\n\t\taddEventDelegate(document, 'change', '[data-set-input-value]', element => {\n\t\t\tsetValue(element.dataset.target, element.value);\n\t\t});\n\n\t\taddEventDelegate(document, 'click', '[data-tum-toggle]', element => {\n\t\t\tsetToggle(element);\n\t\t});\n\n\t\taddEventDelegate(document, 'click', '[data-scrollup]', () => {\n\t\t\ttumGlobal.scrollUp();\n\t\t});\n\n\t\taddEventDelegate(document, 'click', '.tum-collapse-link', element => { this.collapseLinkClick($(element)) });\n\t\taddEventDelegate(document, 'click', '.tum-collapse-link2', element => { this.collapseLinkClick2($(element)) });\n\t\t\n\t\taddEventDelegate(document, 'click', '.tum-collapse-link-info', element => { this.collapseLinkInfoClick($(element)) });\n\t\taddEventDelegate(document, 'resize', 'body', () => { this.checkPageHeight() });\n\n\t\taddEventDelegate(document, 'click', '.tu-getShortUrl', element => { \n\t\t\tlet url = $(element).attr('data-url');\n\t\t\tthis.getShortUrl(url);\n\t\t});\n\n\t\tself.checkPageHeight();\n\n\t\taddEventDelegate(document, 'click', \".tum-seofooter-hide\", () => {\n\t\t\ttoggleClass(\".tum-seofooter\", 'd-none');\n\n\t\t\tlet shown = !$('.tum-seofooter-content').hasClass('d-none');\n\t\t\tthis.setSeoFooterCookie(shown ? 0 : 1);\n\t\t});\n\n\t\taddEventDelegate(document, 'click', '.show-search-menu', () => {\n\t\t\timport(\"./searchMenu\").then(({tum_searchMenu}) => {\n\t\t\t\ttum_searchMenu.toggleMenu('show').then(() => {\n\t\t\t\t\ttum_searchMenu.focusSearch();\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\taddEventDelegate(document, 'click', '.tum-focusSearch, .tu-show-searh, .show-search-menu-focus, .b-catalog-find', element => {\n\t\t\tif (!isMob()) {\n\t\t\t\ttumGlobal.scrollUp();\n\t\t\t}\n\n\t\t\tthis.showSearchTypes(element.dataset.code, element.dataset.startSearch == '');\n\t\t});\n\n\t\t//клик по ридмору или меню в миниатуюре ТУ или КА подсвечивает краточку\n\t\taddEventDelegate(document, 'click', \".product-card, .firm-miniature\", element => {\n\t\t\t$(element).addClass(\"important-border\");\n\t\t});\n\n\t\t//подсказки для доставки по миниатюрам ТУ\n\t\taddEventDelegate(document, 'click', '.tum-isFix-hint-deliv', element => {\n\t\t\tvar text = $(element).attr(\"data-content\");\n\t\t\tvar elem = $(element).closest(\".hasHint_deliv\");\n\t\t\tif ($(element).hasClass(\"d-none\")) {\n\t\t\t\tthis.showHintDeliv(text, elem, true);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.showHintDeliv(text, elem);\n\t\t});\n\t\t\n\t\taddEventDelegate(document, 'click', \".hideHintDeliv\", (element, e) => {\n\t\t\te.preventDefault();\n\t\t\t$(element).closest(\".tum-hint-block-deliv\").addClass(\"d-none\");\n\t\t});\n\n\t\tself.defineSearchType();\n\t\tself.defineSearchOpen();\n\n\t\taddEventDelegate(document, 'click', '.operatorChat', () => {\n\t\t\tthis.loadLivetex(() => LiveTex.showWelcomeWindow());\n\t\t});\n\n\t\taddEventDelegate(document, 'click', '.tu-showFirmOnMap', (element, e) => {\n\t\t\te.stopPropagation();\n\t\t\tself.showFirmOnMap({\n\t\t\t\tlat: $(element).attr('data-lat'),\n\t\t\t\tlong: $(element).attr('data-long'),\n\t\t\t\tfirmID: $(element).attr('data-firmid')\n\t\t\t});\n\t\t});\n\t\t\n\t\taddEventDelegate(document, 'click', '.tu-editUpdateFailureNotificationContacts', element => {\n\t\t\tthis.editFailureNotificationContacts($(element).attr('data-firmid'));\n\t\t});\n\n\t\taddEventDelegate(document, 'click', '.tu-scrollUp', () => tumGlobal.scrollUp());\n\n\t\taddEventDelegate(document, 'click', '[data-wt-update]', element => {\n\t\t\tlet firmID = $(element).attr('data-firmid');\n\n\t\t\tajaxSend({ url: '/firmRequests/UpdateProductWeights', data: { firmID }}).then(data => {\n\t\t\t\tif (data.result) {\n\t\t\t\t\tlet msg = $('[data-wt-update-success-msg]').html();\n\t\t\t\t\tshowAlert(msg, { type: 'success2' });\n\t\t\t\t\t$('[data-wt-update-container]').remove();\n\t\t\t\t} else {\n\t\t\t\t\tlet msg = $('[data-wt-update-failure-msg]').html();\n\t\t\t\t\tshowAlert(msg, { type: 'danger2' });\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\taddEventDelegate(document, 'click', \".tum-enableExtendedView\", () => {\n\t\t\ttoggleExtendedView();\n\t\t});\n\t},\n\tshowSearchTypes: function(code, startSearch){\n\t\tif (!tumGlobal.isMob()){\n\t\t\tsearchWidgets.main.focus();\n\t\t\tsearchWidgets.main.toggleSearchTypes('show');\n\n\t\t\tif (code) searchWidgets.main.setSearchType(code);\n\t\t\tif (code && startSearch && searchWidgets.main.getQuery()) {\n\t\t\t\tsearchWidgets.main.search(searchWidgets.main.getSearchType().type, searchWidgets.main.getQuery());\n\t\t\t}\n\t\t} else {\n\t\t\timport(\"./searchMenu\").then(({tum_searchMenu}) => {\n\t\t\t\ttum_searchMenu.toggleMenu('show')\n\t\t\t\t.then(() => {\n\t\t\t\t\ttum_searchMenu.focusSearch();\n\t\t\t\t\ttum_searchMenu.toggleSearchTypes('show');\n\n\t\t\t\t\tif (code) tum_searchMenu.setSearchType(code);\n\t\t\t\t\tif (code && startSearch && tum_searchMenu.getSearchQuery()) {\n\t\t\t\t\t\ttum_searchMenu.search();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t},\n\tcheckCookies: function(){\n\t\tfunction showNoCookiesWarning(){\n\t\t\t$('.tum-noCookies-warning').removeClass('d-none');\n\t\t}\n\n\t\tvar cookieEnabled = navigator.cookieEnabled;\n\t\tif (!cookieEnabled){ \n\t\t\tsetCookie('testcookie', \"123\", 1);\n\t\t\tcookieEnabled = getCookie(\"testcookie\") == \"123\";\n\t\t\tif (cookieEnabled) {\n\t\t\t\tsetCookie('testcookie', '0', -1);\n\t\t\t}\n\t\t}\n\t\treturn cookieEnabled || showNoCookiesWarning();\n\t},\n\tupdateCartInfo: function(){\n\t\tif (location.pathname.startsWith(\"/signup\")) {\n\t\t\timport(\"./login.js\").then(({ reg }) => {\n\t\t\t\t$(`input[name=saveCartItems][value=\"${(reg.options.saveCartItems ? \"1\" : \"0\")}\"]`).prop(\"checked\", true);\n\t\t\t});\n\t\t}\n\t},\n\tupdateCacheToggle: function(){\n\t\tvar disableCache = getCookie(\"disableCache\");\n\t\tif (disableCache == \"1\") {\n\t\t\t$(\".tum-toggleCache i\").removeClass(\"fa-toggle-off\").addClass(\"fa-toggle-on\");\n\t\t}\n\t\telse {\n\t\t\t$(\".tum-toggleCache i\").removeClass(\"fa-toggle-on\").addClass(\"fa-toggle-off\");\n\t\t}\n\n\t\tvar disableCache_long = getCookie(\"disableCache_long\");\n\t\tif (disableCache_long == \"1\") {\n\t\t\t$(\".tum-toggleCache-long i\").removeClass(\"fa-toggle-off\").addClass(\"fa-toggle-on\");\n\t\t}\n\t\telse {\n\t\t\t$(\".tum-toggleCache-long i\").removeClass(\"fa-toggle-on\").addClass(\"fa-toggle-off\");\n\t\t}\n\t},\n\tupdateOperatorAddonToggle: function(){\n\t\tvar enable = getCookie(\"enableOperatorAddon\");\n\t\tif (enable == \"1\") {\n\t\t\t$(\".tum-operatorAddonToggle i\").removeClass(\"fa-toggle-off\").addClass(\"fa-toggle-on\");\n\t\t}\n\t\telse {\n\t\t\t$(\".tum-operatorAddonToggle i\").removeClass(\"fa-toggle-on\").addClass(\"fa-toggle-off\");\n\t\t}\n\t},\n\tcollapseLinkClick: function (elm) {\t\t\n\t\telm.toggleClass('d-none');\n\t},\n\tcollapseLinkInfoClick: function (elm) {\n\t\tvar selector = $(elm).attr('data-main-link');\n\t\t$(selector).removeClass('d-none');\n\t},\n\tcollapseLinkClick2: function (elm) {\n\t\tvar id = elm.closest('div').attr('id');\n\t\tsetTimeout(function () {$('a.tum-collapse-link[href=\"#' + id + '\"]').removeClass('d-none'); }, 100);\n\t\t\n\t},\n\tcheckPageHeight: function () {\n\t\tif ($('body')[0].scrollHeight < window.innerHeight) {\n\t\t\t$('body').addClass('stuck-bottom');\n\t\t\t$('.b-footer').addClass('stuck-bottom');\n\t\t} else {\n\t\t\t$('body').removeClass('stuck-bottom');\n\t\t\t$('.b-footer').removeClass('stuck-bottom');\n\t\t}\n\t},\n\t//устанавливает тип поиска если таковой был передан\n\tdefineSearchType: function () {\n\t\tif (getUrlParameter(\"search-type\")) {\n\t\t\tvar searchType = getUrlParameter(\"search-type\");\n\t\t\t$(\"[data-search-type='\" + searchType + \"']\").first()[0]?.click();\n\t\t}\n\t},\n\t//открываем поиски если был передан параметр\n\tdefineSearchOpen: function () {\n\t\tif (getUrlParameter(\"search-open\") == \"1\") {\n\t\t\tthis.showSearchTypes();\n\t\t\tremoveUrlParam(\"search-open\");\n\t\t}\n\t},\n\tshowHintDeliv: function (txt, elem, close) {\n\t\tvar hintBlock = $(elem).find(\".tum-hint-block-deliv\");\n\t\tif (close) {\n\t\t\thintBlock.addClass(\"d-none\");\n\t\t\treturn;\n\t\t}\n\t\thintBlock.removeClass(\"d-none\");\n\t\thintBlock.html('
Закрыть
' + txt);\n\t\thintBlock.addClass('hintBorder');\n\t},\n\tcheckAuthorization: function(){\n\t\tlet isAuthorized = document.querySelector(\".t-authorized\")?.innerHTML == \"True\";\n\n\t\tif (isAuthorized) {\n\t\t\tajaxSend({ url: \"/home/checkAuthorization\" }).then(data => {\n\t\t\t\tif (!data.result) {\n\t\t\t\t\tlocation.reload();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t},\n\tgetShortUrl: function (url) {\n\t\tajaxSend({ url: '/shortLink/getShortUrl', data: { url: url || location.href } }).then(data => {\n\t\t\tvar title = 'Ссылка для товаров и услуг';\n\t\t\tvar html = `Скопировано в буфер обмена
\n\t\t\t\t\t\t${data.result}`;\n\n\t\t\ttumGlobal.copyToClipboard(data.result);\n\n\t\t\tshowDialog({\n\t\t\t\ttitle: title,\n\t\t\t\tcontent: html,\n\t\t\t\tonShown: () => $('#asModal .btn-primary').remove()\n\t\t\t});\n\t\t});\n\t},\n\tshowFirmOnMap: function(options){\n\t\tlet self = this;\n\n\t\timport(\"./map.js\").then(({ tu_maps }) => {\n\t\t\tshowDialog({\n\t\t\t\ttitle: 'На карте',\n\t\t\t\tcontent: '
',\n\t\t\t\tonShown: () => {\n\t\t\t\t\t$('.btn-primary', '#asModal').addClass('d-none');\n\t\n\t\t\t\t\tself.currentMap = tu_maps.create({\n\t\t\t\t\t\tcontainerId: 'menu-map-cont',\n\t\t\t\t\t\tcenter: {\n\t\t\t\t\t\t\tlat: options.lat,\n\t\t\t\t\t\t\tlong: options.long\n\t\t\t\t\t\t},\n\t\t\t\t\t\theight: null,\n\t\t\t\t\t\tzoom: 16,\n\t\t\t\t\t\tonLoad: (ymap, modules, map) => {\n\t\t\t\t\t\t\tlet placemark = new modules.Placemark([options.lat, options.long]);\n\t\n\t\t\t\t\t\t\tfunction showBalloon() {\n\t\t\t\t\t\t\t\tmap.getBalloonContent(options.firmID, 0, true)\n\t\t\t\t\t\t\t\t\t.then(e => map.showCustomBalloon(e, true));\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tplacemark.events.add('click', function () {\n\t\t\t\t\t\t\t\tshowBalloon();\n\n\t\t\t\t\t\t\t\timport(\"./statistics.js\").then(({ tumStats }) => {\n\t\t\t\t\t\t\t\t\ttumStats.logEvent({\n\t\t\t\t\t\t\t\t\t\tfirmID: options.firmID,\n\t\t\t\t\t\t\t\t\t\tobjectType: 'map',\n\t\t\t\t\t\t\t\t\t\teventType: 'click_showContacts'\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\n\t\t\t\t\t\t\tymap.geoObjects.add(placemark);\n\t\t\t\t\t\t\tshowBalloon();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tonClosed: () => {\n\t\t\t\t\t$('#asModal .btn-primary').removeClass('d-none');\n\t\t\t\t\ttu_maps.dropSettingsModal();\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t},\n\t_getSearchBarTop: function(){\n\t\tlet searchbar = document.querySelector('.searchWidget');\n\t\treturn searchbar.getBoundingClientRect().top + window.scrollY;\n\t},\n\tupdateSearchMenuButton: function(){\n\t\tlet searchBarTop = this._getSearchBarTop();\n\t\tlet searchMenuButton = document.querySelector('.topbar .toggleSearchMenu');\n\n\t\tlet show = window.scrollY >= searchBarTop - 20;\n\n\t\tif (!searchIconBlinked) {\n\t\t\t_setTimeout(333).then(() => this.blinkSearchIcon());\n\t\t}\n\n\t\tlet active = searchMenuButton.matches('.active');\n\t\tlet shown = searchMenuButton.matches('.show');\n\n\t\t//если иконка сейчас мигает, то ее можно скрыть, но нельзя \"показать\", иначе ломается анимация\n\t\tif (active && !shown) {\n\t\t\tif (!show) {\n\t\t\t\ttoggleClass(searchMenuButton, 'show active', show);\t\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\ttoggleClass(searchMenuButton, 'show active', show);\n\t},\n\tinitHeader: function(){\n\t\tsetInterval(() => this.blinkSearchIcon(), 10000);\n\t\tif (!tumGlobal.isMob() || !searchWidgets.main.exists()) {\n\t\t\tlet $searchMenuButton = $('.topbar .toggleSearchMenu');\n\t\t\t$searchMenuButton.addClass('show active');\n\t\t\treturn;\n\t\t} \n\t\t\n\t\t//кнопка меню поиска появляется, только когда поле поиска на странице скрывается с экрана\n\t\tthis.updateSearchMenuButton();\n\t\t$(document).on('scroll', () => this.updateSearchMenuButton());\n\t},\n\tblinkSearchIcon: function(){\n\t\tlet searchMenuButton = document.querySelector('.topbar .toggleSearchMenu');\n\t\tif (!searchMenuButton?.matches('.active')) return;\n\n\t\tlet delay = 333;\n\t\t\n\t\ttoggleClass(searchMenuButton, 'show', false);\n\t\t_setTimeout(delay)\n\t\t.then(() => toggleClass(searchMenuButton, 'show', true))\n\t\t.then(() => _setTimeout(delay))\n\t\t.then(() => toggleClass(searchMenuButton, 'show', false))\n\t\t.then(() => _setTimeout(delay))\n\t\t.then(() => {\n\t\t\tsearchIconBlinked = true\n\t\t\t\n\t\t\t//проверка на случай, если за время анимации иконка скрылась\n\t\t\tif (searchMenuButton.matches('.active')) {\n\t\t\t\ttoggleClass(searchMenuButton, 'show', true);\n\t\t\t}\n\t\t});\n\t},\n\tgetCartCount: function(){\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tajaxSend({ url: '/home/getCartCount' }).then(data => {\n\t\t\t\tif (data.result) resolve(data.count);\n\t\t\t\telse reject('getCartCount error');\n\t\t\t});\n\t\t});\n\t},\n\tgetCartSum: function(){\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tajaxSend({ url: '/home/getCartSum' }).then(data => {\n\t\t\t\tif (data.result) resolve(data.sum);\n\t\t\t\telse reject('getCartSum error');\n\t\t\t});\n\t\t});\n\t},\n\tgetFavoritesCount: function(){\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tajaxSend({ url: '/home/getFavoritesCount' }).then(data => {\n\t\t\t\tif (data.result) resolve(data.count);\n\t\t\t\telse reject('getFavoritesCount error');\n\t\t\t});\n\t\t});\n\t},\n\tgetNotificationsCount: function(){\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tajaxSend({ url: '/home/getNotificationsCount' }).then(data => {\n\t\t\t\tif (data.result) resolve(data.count);\n\t\t\t\telse reject('getNotificationsCount error');\n\t\t\t});\n\t\t});\n\t},\n\t_updateCartCount: function(){\n\t\tlet $count = $('.topbar .cart-count');\n\t\t$count.html(tumarket.general.cartCount);\n\t\t$count.toggleClass('d-none', tumarket.general.cartCount == 0);\n\t},\n\t_updateCartSum: function(){\n\t\tlet $cart = $('.topbar .topbar-cart');\n\t\t$cart.attr('title', tumarket.general.cartSum > 0 ? `Сумма: ${tumarket.general.cartSum.toFixed(2)}р` : null)\n\t\t$cart.toggleClass('d-none', tumarket.general.cartSum == 0);\n\t},\n\t_updateFavoritesCount: function(){\n\t\tlet $count = $('.topbar .favorites-count');\n\t\t$count.html(tumarket.general.favoritesCount);\n\t\t$count.toggleClass('d-none', tumarket.general.favoritesCount == 0);\n\t},\n\t_updateNotificationsCount: function(){\n\t\tlet $count = $('.topbar .notifications-count');\n\t\t$count.html(tumarket.general.notificationsCount);\n\t\t$count.toggleClass('d-none', tumarket.general.notificationsCount == 0);\n\t},\n\tupdateCartCount: function(){\n\t\tthis.getCartCount()\n\t\t.then(count => {\n\t\t\ttumarket.general.cartCount = count;\n\t\t\tthis._updateCartCount();\n\t\t});\n\t},\n\tupdateCartSum: function(){\n\t\tthis.getCartSum()\n\t\t.then(sum => {\n\t\t\ttumarket.general.cartSum = sum;\n\t\t\tthis._updateCartSum();\n\t\t});\n\t},\n\tupdateFavoritesCount: function(){\n\t\tthis.getFavoritesCount()\n\t\t.then(count => {\n\t\t\ttumarket.general.favoritesCount = count;\n\t\t\tthis._updateFavoritesCount();\n\t\t});\n\t},\n\tupdateNotificationsCount: function(){\n\t\tthis.getNotificationsCount()\n\t\t.then(count => {\n\t\t\ttumarket.general.notificationsCount = count;\n\t\t\tthis._updateNotificationsCount();\n\t\t});\n\t},\n\tisHeaderFloating: function(){\n\t\treturn $('.header-floating').hasClass('show');\n\t},\n\tgetFirmSettings: function(firmId) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tajaxSend({ url: '/firmRequests/getFirmSettings', data: { firmId } }).then(data => {\n\t\t\t\tif (data.result) resolve(data.value);\n\t\t\t\telse reject(data.msg);\n\t\t\t});\n\t\t});\n\t},\n\teditFailureNotificationContacts: function(firmId) {\n\t\tPromise.all([\n\t\t\tthis.getFirmSettings(firmId),\n\t\t\tthis.getUserRole(firmId),\n\t\t\tloadPrecompiledTemplates(['updateFailureNotificationContacts-form'])\n\t\t])\n\t\t.then(results => {\n\t\t\tlet form = null;\n\t\t\tlet formJson = getPrecompiledTemplate('updateFailureNotificationContacts-form')();\n\t\t\tlet formFields = JSON.parse(formJson);\n\t\t\tlet formData = JSON.parse(results[0].updateFailureNotificationContacts || '{}');\n\n\t\t\tshowDialog({\n\t\t\t\ttitle: 'Контакты при сбоях в обновлении',\n\t\t\t\tcontent: '
',\n\t\t\t\tbuttonText: 'Сохранить',\n\t\t\t\tonShown: () => {\n\t\t\t\t\timport(\"./form/form.js\").then(({ tu_form }) => {\n\t\t\t\t\t\ttu_form.create({\n\t\t\t\t\t\t\tcontainer: '.contacts-form',\n\t\t\t\t\t\t\tfields: formFields,\n\t\t\t\t\t\t\tdata: formData,\n\t\t\t\t\t\t\tuserRoles: [results[1]]\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.then(f => form = f);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tonSubmit: () => {\n\t\t\t\t\tif (!form) return;\n\n\t\t\t\t\tif (!form.validate()) {\n\t\t\t\t\t\tbootstrapAlert('Не все поля заполнены корректно', { type: 'danger' });\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet data = form.getData();\n\n\t\t\t\t\tfunction alert(){\n\t\t\t\t\t\tbootstrapAlert('Контакт с выбранным приоритетом должен быть заполнен', { type: 'danger' });\n\t\t\t\t\t}\n\n\t\t\t\t\tif (data.tech.priority == 'phone' && !data.tech.phone) {\n\t\t\t\t\t\talert();\n\t\t\t\t\t\tform.addHighlight({ name: 'tech', field: 'phone' });\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (data.tech.priority == 'email' && !data.tech.email) {\n\t\t\t\t\t\talert();\n\t\t\t\t\t\tform.addHighlight({ name: 'tech', field: 'email' });\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (data.org.priority == 'phone' && !data.org.phone) {\n\t\t\t\t\t\talert();\n\t\t\t\t\t\tform.addHighlight({ name: 'org', field: 'phone' });\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (data.org.priority == 'email' && !data.org.email) {\n\t\t\t\t\t\talert();\n\t\t\t\t\t\tform.addHighlight({ name: 'org', field: 'email' });\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.updateFirmSettings(firmId, { updateFailureNotificationContacts: JSON.stringify(data) })\n\t\t\t\t\t.then(() => {\n\t\t\t\t\t\tbootstrapAlert('Сохранено', { type: 'success' });\n\t\t\t\t\t\tcloseDialog();\n\t\t\t\t\t})\n\t\t\t\t\t.catch(msg => bootstrapAlert(msg || 'Ошибка', { type: 'danger' }));\n\t\t\t\t}\n\t\t\t});\n\t\t})\n\t\t.catch(msg => showAlert(msg || 'Ошибка', { type: 'danger2' }))\n\t},\n\tupdateFirmSettings: function(firmId, settings) {\n\t\tsettings.firmId = firmId;\n\t\treturn new Promise((resolve, reject) => {\n\t\t\trequest('firm-settings-update', settings).then(data => {\n\t\t\t\tif (data.result) resolve();\n\t\t\t\telse reject(data.msg);\n\t\t\t});\n\t\t});\n\t},\n\tcheckPermissions: function(firmID){\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tajaxSend({ url: '/firmRequests/checkPermissions', data: { firmID } }).then(data => {\n\t\t\t\tif (data.result) resolve(data.value);\n\t\t\t\telse reject(data.msg);\n\t\t\t});\n\t\t});\n\t},\n\tgetUserRole: function(firmID){\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tajaxSend({ url: '/firmRequests/getUserRole', data: { firmID } }).then(data => {\n\t\t\t\tif (data.result) resolve(data.value);\n\t\t\t\telse reject(data.msg);\n\t\t\t});\n\t\t});\n\t},\n\t/**\n\t * Создает плавающее окно\n\t * По умолчанию у него display: none. Чтобы показать, $('.floating-window', $wrapper).removeClass('d-none'),\n\t * где $wrapper - то, что возвращает эта функция\n\t * @name уникальный идентификатор. Если уже существует, берется существующее окно.\n\t * @html\n\t * @top\n\t * @bottom\n\t * @left\n\t * @right\n\t * @returns {object} Обертка над окном\n\t */\n\tgetFloatingWindow: function(options){\n\t\tlet $wrapper = $('.floating-window-wrapper[data-name=\"' + options.name + '\"]');\n\n\t\tif (!$wrapper.length) {\n\t\t\t$wrapper = $(`\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t${options.html}\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t`);\n\n\t\t\tlet $window = $('.floating-window', $wrapper);\n\t\t\tif (options.top) $window.css('top', options.top);\n\t\t\tif (options.bottom) $window.css('bottom', options.bottom);\n\t\t\tif (options.left) $window.css('left', options.left);\n\t\t\tif (options.right) $window.css('right', options.right);\n\t\t\t$('body').append($wrapper);\n\n\t\t\ttumGlobal.onClickOutside($window.add(options.button), () => $window.addClass('d-none'));\n\t\t}\n\t\t\n\t\treturn $wrapper;\n\t},\n\tinitFloatingWindows: function(){\n\t\taddEventDelegate(document, 'click', '[data-toggle=\"floatingwindow\"]', element => {\n\t\t\tif (isMob()) {\n\t\t\t\tshowDialog({\n content: `
${document.querySelector(element.dataset.contenttarget).innerHTML}
`,\n pinToBottom: true,\n\t\t\t\t\tclasses: \"opened-as-floating\",\n\t\t\t\t\ttitle: element.dataset.title\n });\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet options = {\n\t\t\t\tname: element.dataset.name,\n\t\t\t\thtml: document.querySelector(element.dataset.contenttarget).innerHTML,\n\t\t\t\ttop: element.dataset.top,\n\t\t\t\tbottom: element.dataset.bottom,\n\t\t\t\tleft: element.dataset.left,\n\t\t\t\tright: element.dataset.right,\n\t\t\t\tbutton: $(element)\n\t\t\t};\n\n\t\t\tlet $windowWrapper = this.getFloatingWindow(options);\n\t\t\t$('.floating-window', $windowWrapper).toggleClass('d-none');\n\t\t});\n\n\t\taddEventDelegate(document, 'click', '.floating-window-close', element => {\n\t\t\tlet $window = $(element).closest('.floating-window');\n\t\t\t$window.toggleClass('d-none');\n\n\t\t\t$('.modal.show.opened-as-floating').modal('hide');\n\t\t});\n\t},\n\tsetSeoFooterCookie: function(value){\n\t\treturn new Promise(resolve => ajaxSend({ url: '/home/setSeoFooterCookie', data: { value } }).then(resolve));\n\t},\n\tgetFirmSchedule: function(firmID, depID){\n\t\treturn new Promise(resolve => ajaxSend({ url: '/FirmRequests/GetFirmSchedule', data: { firmID: firmID, depID: depID } }).then(resolve));\n\t}\n}\n\nArray.prototype.diff = function (a) {\n\treturn this.filter(function (i) {\n\t\treturn a.indexOf(i) === -1;\n\t});\n};\n\nexport default tumCommon;","import { toggleClass } from \"./dom\";\n\n/**\n * \n * @param {HTMLElement} element \n * @param {boolean} value\n */\nfunction setToggle(element, value) {\n toggleClass(element, 'fa-toggle-on', value);\n toggleClass(element, 'fa-toggle-off', value == undefined ? undefined : !value);\n element.dispatchEvent(new Event(\"tum.toggle.change\", { bubbles: true }));\n}\n\nexport { setToggle };\n","let _version = \"\";\nlet _domain = \"\";\n\n/**\n * @typedef {object} CookieOptions\n * @property {string} version\n * @property {string} domain\n */\n\n/**\n * \n * @param {CookieOptions} param0 \n */\nfunction initCookies({ version, domain }) {\n _version = version;\n _domain = domain;\n}\n\n/**\n * \n * @param {string} name \n * @param {string} value \n * @param {number} [days] \n */\nfunction setCookie(name, value, days = 30) {\n if (_version) {\n name = name + \"_\" + _version;\n }\n\n var expires;\n if (days) {\n var date = new Date();\n date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\n expires = \"; expires=\" + date.toUTCString();\n } else {\n expires = \"\";\n }\n\n var domain = \"\";\n if (_domain) {\n var domainName = _domain.startsWith(\".\") ? _domain.substring(1) : _domain;\n\n if (!location.hostname.includes(domainName)) {\n _domain = location.hostname;\n }\n\n if (location.href.toLowerCase().indexOf(domainName.toLowerCase()) > -1) {\n domain = \"; domain=\" + _domain;\n }\n }\n\n document.cookie = name + \"=\" + encodeURIComponent(value) + expires + domain + \"; path=/\";\n}\n\n/**\n * \n * @param {string} c_name \n * @returns {string}\n */\nfunction getCookie(c_name) {\n if (_version) {\n c_name = c_name + \"_\" + _version;\n }\n\n if (document.cookie.length > 0) {\n var c_start = document.cookie.indexOf(c_name + \"=\");\n if (c_start != -1) {\n c_start = c_start + c_name.length + 1;\n var c_end = document.cookie.indexOf(\";\", c_start);\n if (c_end == -1) {\n c_end = document.cookie.length;\n }\n return decodeURIComponent(document.cookie.substring(c_start, c_end));\n }\n }\n\n return \"\";\n}\n\nwindow.getCookie = getCookie;\nwindow.setCookie = setCookie;\n\nexport { getCookie, setCookie, initCookies };","/* global tumarket */\n\nimport * as $ from \"jquery\";\nimport { openProgressbar, closeProgressbar } from \"./progressbar\";\n\n/**\n * @typedef {object} Lib\n * @property {any} [conditionObject]\n * @property {string} [cssLink]\n * @property {string} [jsLink]\n * @property {boolean} [showProgressbar=true]\n */\n\n/**\n * \n * @param {Lib} param0 \n * @returns \n */\nfunction loadLib({ jsLink, cssLink, conditionObject, showProgressbar = true, useVersion = true }) {\n if (cssLink) {\n if (useVersion) {\n cssLink = `${cssLink}?v=${tumarket.cacheDate || ''}`;\n }\n\n if (!document.querySelector(`link[rel=\"stylesheet\"][href=\"${cssLink}\"]`)) {\n $('head').append(``);\n }\n\n return Promise.resolve();\n }\n\n if (!conditionObject) {\n if (showProgressbar) openProgressbar();\n \n return new Promise((resolve, reject) => {\n const script = document.createElement('script');\n document.body.appendChild(script);\n script.onload = resolve;\n script.onerror = reject;\n script.async = true;\n script.src = jsLink;\n }).then(() => {\n if (showProgressbar) closeProgressbar();\n });\n }\n\n return Promise.resolve();\n}\n\nexport { loadLib };\n","import * as $ from \"jquery\";\n\nfunction openProgressbar() {\n if (!$('.as-progCont').length){\n $('body').append(\"
\");\n }\n\n $('.as-progCont').html('
Подождите...
');\n}\n\nfunction closeProgressbar() {\n $('.as-overlay').fadeOut('slow', function () {\n $(this).remove();\n });\n}\n\nexport { openProgressbar, closeProgressbar };\n","/* global tumarket */\n\nimport * as Handlebars from \"handlebars\";\nimport dateFormat from \"../lib/dateformat/dateformat\";\nimport { appendHtml } from \"./dom\";\nimport { capitalize, encodeHtml, groupBy, isDateInThisWeek, parseDate, sort } from \"./util\";\nimport { getCookie } from \"./cookie\";\n\nlet cacheDate = window.tumarket.cacheDate;\nwindow.Handlebars = Handlebars;\n\nlet aliases = [\n];\n\nfunction chunk(array, size) {\n let result = [];\n for (let i = 0; i < array.length / size; i++) {\n result.push(array.slice(i * size, (i+1) * size));\n }\n\n return result;\n}\n\nlet loadedTemplates = [];\nlet loadingTemplates = [];\n\n/** @type {Object.} */\nlet templateDependencies = {};\n\n/** @type {Object.} */\nlet helpers = {\n equals: (a,b) => a == b,\n or: function() { return [...arguments].slice(0, -1).some(e => e) },\n and: function() { return [...arguments].slice(0, -1).every(e => e) },\n coalesce: function() { return [...arguments].slice(0, -1).find(e => e) },\n not: a => !a,\n isNull: a => a == null,\n len: a => (a || '').length,\n gt: (a,b) => (a || 0) > (b || 0),\n lt: (a,b) => (a || 0) < (b || 0),\n slice: (a,b,c) => (a || []).slice((b || 0), (c || 0)),\n skip: (a,b) => (a || []).slice((b || 0)),\n truncate: (val, len) => {\n if (!val) return '';\n return val.length > len ? val.substring(0, len) + '…' : val;\n },\n truncateMiddle: (val, len) => {\n if (!val) return '';\n return val.substring(0, len) + '…' + val.substring(val.length - len, val.length);\n },\n lowercase: a => a.toLowerCase(),\n toJson: a => JSON.stringify(a || {}),\n toFormattedJson: a => JSON.stringify(a, null, 2),\n getDate: () => new Date(),\n parseDate: a => parseDate(a),\n formatDate: (a,b) => a ? dateFormat(new Date(a), b) : '',\n formatNumber: a => new Intl.NumberFormat('ru-RU', { minimumFractionDigits: a % 1 ? 2 : 0, maximumFractionDigits: 2 }).format(a),\n formatNumber2: a => new Intl.NumberFormat('ru-RU', { minimumFractionDigits: 0, maximumFractionDigits: 2 }).format(a),\n formatNumber3: a => a?.toFixed(3).replace(/\\.?0+$/, '').replace('.', ','),\n formatKop: a => new Intl.NumberFormat('ru-RU', { minimumIntegerDigits: 2 }).format(a),\n formatPrice: a => {\n var price = a.toFixed(2).replace(',', '.');\n var arr = price.split('.');\n if (arr.length > 1)\n {\n let res = `${new Intl.NumberFormat('ru-RU').format(Number(arr[0]))}${new Intl.NumberFormat('ru-RU', { minimumIntegerDigits: 2 }).format(arr[1])}`;\n return res;\n }\n else\n {\n let res = `${new Intl.NumberFormat('ru-RU').format(Number(arr[0]))}`;\n return res;\n }\n },\n add: function() { return [...arguments].slice(0, -1).reduce((previous, current) => previous + current, 0)},\n subtract: function() { return [...arguments].slice(0, -1).reduce((previous, current) => previous - current, ([...arguments][0] || 0)*2)},\n contains: (a,b) => (a || '').toString().toLowerCase().indexOf((b || '').toString().toLowerCase()) > -1,\n startsWith: (a,b) => (a || '').toString().toLowerCase().startsWith((b || '').toString().toLowerCase()),\n urlEncode: a => encodeURIComponent(a),\n urlEscape: a => a?.replace(\"%\", \"%25\").replace(\" \", \"%20\"),\n urlDecode: a => { \n let res = '';\n try {\n res = decodeURIComponent(a);\n } catch {}\n return res;\n },\n parseJson: a => { \n let res = {};\n try {\n res = JSON.parse(a);\n } catch {}\n return res;\n },\n printif: (cond, a) => {\n if (cond) return a;\n return \"\";\n },\n iif: (cond, a, b) => {\n if (cond) return a;\n return b;\n },\n in: (item, array) => array.includes(item),\n split: (string, separator) => string?.split(separator),\n join: (array, separator) => array?.join(separator),\n substring: (string, index, length) => string?.substring(index, index + length),\n get: (array, index) => {\n if (!array) return null;\n if (index >= array.length) return null;\n return array[index];\n },\n getValue: (object, key) => object[key]?.toString(),\n getObject: (object, key) => object[key],\n replace: (string, pattern, replacement) => string?.replace(pattern, replacement),\n replaceRegex: (string, pattern, replacement) => string?.replace(new RegExp(pattern), replacement),\n testRegex: (string, pattern) => new RegExp(pattern).test(string),\n whereEquals: (array, field, value) => array?.filter(e => e[field] == value) || [],\n whereNotEquals: (array, field, value) => array?.filter(e => e[field] != value) || [],\n mapField: function(array, field) {\n if (!array?.length) return [];\n\n let args = [...arguments].slice(0, -1);\n let helper = args[2];\n let mapper;\n if (!helper) {\n mapper = e => e;\n } else {\n mapper = e => helpers[helper](...[e, ...args.slice(3)])\n }\n\n return array.map(e => mapper(e[field]));\n },\n map: function(array, helper) { \n return array?.map(e => helpers[helper](...[e, ...[...arguments].slice(0, -1).slice(2)]));\n },\n /**\n * \n * @param {object[]} array \n * @returns \n */\n flatMap: function(array) {\n if (!array?.length) return [];\n\n let args = [...arguments].slice(0, -1);\n let field = null;\n if (args.length == 2) field = args[1];\n\n if (field) array = array.filter(e => e[field]).map(e => e[field]);\n\n return array.flatMap(e => e);\n },\n getRandom: (array) => array[Math.floor(Math.random() * array.length)],\n random: (min, max) => min + Math.floor(Math.random() * (max - min + 1)),\n concat: function() { return [...arguments].slice(0, -1).join('') },\n nconcat: function() { \n let args = [...arguments].slice(0, -1);\n if (args.some(e => !e)) return '';\n return args.join('');\n },\n array: function() { return [...arguments].slice(0, -1) },\n filter: function(a) {\n let args = [...arguments].slice(0, -1);\n let field = args[1];\n\n let helper = args[2];\n let mapper;\n if (!helper) {\n mapper = e => e;\n } else {\n mapper = e => helpers[helper](...[e, ...args.slice(3)])\n }\n\n if (field) {\n return a.filter(e => mapper(e[field]));\n }\n\n return a.filter(e => e)\n },\n reverseFilter: function(a) {\n let args = [...arguments].slice(0, -1);\n let field = args[1];\n\n let helper = args[2];\n let mapper;\n if (!helper) {\n mapper = e => e;\n } else {\n mapper = e => helpers[helper](...[e, ...args.slice(3)])\n }\n\n if (field) {\n return a.filter(e => !mapper(e[field]));\n }\n\n return a.filter(e => !e)\n },\n capitalize: a => capitalize(a),\n htmlAttributes: options => {\n let attributes = Object.entries(options.hash).filter(e => e[1]);\n if (!attributes.length) return '';\n\n return attributes.map(e => `${e[0]}=\"${encodeHtml(e[1].toString())}\"`).join(' ');\n },\n htmlStyle: options => {\n let styles = Object.entries(options.hash).filter(e => e[1]);\n if (!styles.length) return '';\n \n return `style=\"${styles.map(e => `${e[0]}: ${e[1]}`).join('; ')}\"`;\n },\n getCookie: name => getCookie(name),\n getUrl: () => location.href,\n getUrlReferrer: () => tumarket.urlReferrer,\n getUrlParameters: () => Object.fromEntries(new URL(location.href).searchParams),\n case: function() {\n let args = [...arguments].slice(0, -1);\n let defaultValue = args.slice(-1)[0];\n let rest = args.slice(0, -1);\n for (let [condition, value] of chunk(rest, 2)) {\n if (condition) return value;\n }\n return defaultValue;\n },\n switch: function() {\n let args = [...arguments].slice(0, -1);\n let value = args[0];\n let defaultResult = args.slice(-1)[0];\n let rest = args.slice(1, -1);\n for (let [option, result] of chunk(rest, 2)) {\n if (value == option) return result;\n }\n return defaultResult;\n },\n groupBy: function(array, field) {\n let args = [...arguments].slice(0, -1);\n\n if (args.length > 2) {\n let helper = args[2];\n let mapper = e => helpers[helper](...[e, ...args.slice(3)]);\n array = array.map(mapper);\n }\n\n return groupBy(array, field);\n },\n min: array => sort(array)[0] || null,\n max: array => sort(array, true)[0] || null,\n sort: function(array, desc) {\n let args = [...arguments].slice(0, -1);\n let helper = args[2];\n let mapper;\n if (!helper) {\n mapper = e => e;\n } else {\n mapper = e => helpers[helper](...[e, ...args.slice(3)])\n }\n\n return sort(array, desc, mapper);\n },\n sortBy: function(array, field, desc) {\n let args = [...arguments].slice(0, -1);\n let helper = args[3];\n let mapper;\n if (!helper) {\n mapper = e => e;\n } else {\n mapper = e => helpers[helper](...[e, ...args.slice(4)])\n }\n\n let copy = [...array];\n copy.sort((a, b) => {\n if (mapper(a[field]) > mapper(b[field])) return 1;\n if (mapper(a[field]) < mapper(b[field])) return -1;\n return 0;\n });\n\n if (desc) copy.reverse();\n return copy;\n },\n sort2: function(array, options) {\n let items = JSON.parse(options);\n\n let copy = [...array];\n\n let compare = (a, b, options) => {\n if (options.field) {\n a = a[options.field] || a[capitalize(options.field)];\n b = b[options.field] || b[capitalize(options.field)];\n }\n\n if (options.map) {\n a = options.map[a] || options.map['_default_'] || a;\n b = options.map[b] || options.map['_default_'] || b;\n }\n\n if (typeof a === 'number') return options.desc ? b - a : a - b;\n if (typeof a === 'string') return options.desc ? b.localeCompare(a) : a.localeCompare(b);\n if (typeof a === 'boolean') return options.desc ? b || a : a || b;\n };\n\n let compare_total = (a, b, sort_items) => {\n let result = 0;\n for (let item of sort_items) {\n result = result || compare(a, b, item);\n }\n return result;\n };\n\n copy.sort((a, b) => compare_total(a, b, items));\n\n return copy;\n },\n first: array => {\n if (!array?.length) return null;\n return array[0];\n },\n last: array => {\n if (!array?.length) return null;\n return array.slice(-1)[0];\n },\n dateToTimestamp: a => new Date(a).getTime(),\n timestampToDate: a => new Date(a),\n isToday: function(a) {\n let args = [...arguments].slice(0, -1);\n\n let offset = 0;\n if (args.length == 2) offset = args[1];\n\n let today = new Date();\n today = new Date(today.setDate(today.getDate() + offset));\n let day = new Date(a);\n \n\n return today.setHours(0,0,0,0) === day.setHours(0,0,0,0);\n },\n isThisWeek: function(a) {\n let args = [...arguments].slice(0, -1);\n\n let offset = 0;\n if (args.length == 2) offset = args[1];\n\n let day = new Date(a);\n return isDateInThisWeek(day, offset);\n },\n isThisMonth: function(a) {\n let args = [...arguments].slice(0, -1);\n\n let offset = 0;\n if (args.length == 2) offset = args[1];\n\n let day = new Date(a);\n let today = new Date();\n return day.getFullYear() == today.getFullYear() && day.getMonth() == today.getMonth() + offset;\n },\n toString: a => a?.toString(),\n entries: a => {\n if (!a) return null;\n return Object.entries(a).map(e => ({ key: e[0], value: e[1] }));\n },\n isArray: a => {\n return Array.isArray(a);\n },\n isObject: a => {\n return typeof a === 'object';\n },\n multiply: function() { return [...arguments].slice(0, -1).reduce((previous, current) => previous * current, 1)},\n divide: function() { return [...arguments].slice(0, -1).reduce((previous, current) => previous / current, ([...arguments][0] || 0)**2)},\n floor: a => Math.floor(a),\n round: a => Math.round(a),\n mod: (a, b) => a % b,\n object: options => options.hash,\n apply: (helper, args_array) => helpers[helper](...args_array, null),\n trim: a => a.trim(),\n expandContext: function(options) {\n let newContext = Object.assign({}, this, options.hash);\n return newContext;\n }\n};\n\n/**\n * \n * @param {string} url \n * @param {boolean} [fetchDependencies=true]\n * @returns {Promise}\n */\nfunction loadTemplate(url, fetchDependencies = true) {\n if (loadedTemplates.indexOf(url) > -1) {\n return Promise.resolve();\n }\n \n let dependencies = [];\n let nameMatch = url.match(/\\/template\\/([a-zA-Z0-9_-]+)\\/?(wrap)?/);\n let name = nameMatch ? nameMatch[1] : null;\n\n return fetch(url, { headers: { \"tuajax\": \"true\" } }).then(response => {\n dependencies = response.headers.get('template-dependencies')?.split(',').map(e => e.trim());\n return response.text();\n }).then(template => {\n if (document.querySelector(`#template-${name}`)) return Promise.resolve();\n appendHtml(\"body\", template);\n loadedTemplates.push(url);\n return Promise.resolve();\n }).then(() => {\n if (fetchDependencies && dependencies?.length) {\n templateDependencies[name] = dependencies;\n\n return Promise.all(dependencies.map(e => { \n return loadTemplate(`/template/${e}/wrap?v=${cacheDate}`, false);\n })).then(() => Promise.resolve());\n }\n return Promise.resolve();\n });\n}\n\n/**\n * \n * @param {string} name \n * @param {boolean} [fetchDependencies=true] \n * @param {boolean} [partial=false] \n * @returns {Promise}\n */\nfunction loadPrecompiledTemplate(name, fetchDependencies = true, partial = false) {\n let originalName = name;\n let alias = aliases.find(e => e.at(0) == name)?.at(1);\n name = alias || name;\n\n let cacheKey = `${name}${partial ? \"_partial\" : \"\"}`;\n if (loadedTemplates.includes(cacheKey)) {\n return Promise.resolve();\n }\n\n if (loadingTemplates.includes(cacheKey)) {\n return new Promise(resolve => {\n document.addEventListener('tu.template.loaded', e => {\n if (e.detail.template == cacheKey) {\n resolve()\n }\n });\n });\n }\n \n loadingTemplates.push(cacheKey);\n\n let dependencies = [];\n let url = `/template/${name}/precompiled?v=${cacheDate}${partial ? \"&partial=true\" : \"\"}`;\n\n return fetch(url, { headers: { \"tuajax\": \"true\" } }).then(response => {\n dependencies = response.headers.get('template-dependencies')?.split(',').map(e => e.trim()).filter(e => e);\n return response.text();\n }).then(template => {\n if (document.getElementById(`precompiled-${name}`)) return Promise.resolve();\n let script = document.createElement('script');\n script.id = `precompiled-${name}`;\n script.innerHTML = template;\n document.body.appendChild(script);\n\n //partial alias\n Handlebars.partials[name] = Handlebars.templates[name]; \n Handlebars.partials[`template-${name}`] = Handlebars.templates[name];\n\n if (alias) {\n Handlebars.templates[originalName] = Handlebars.templates[name];\n Handlebars.partials[originalName] = Handlebars.templates[name]; \n Handlebars.partials[`template-${originalName}`] = Handlebars.templates[name];\n }\n\n return Promise.resolve();\n }).then(() => {\n if (fetchDependencies && dependencies?.length) {\n templateDependencies[name] = dependencies;\n\n return Promise.all(dependencies.map(e => { \n return loadPrecompiledTemplate(e, true);\n }))\n .then(() => {\n loadingTemplates = loadingTemplates.filter(e => e != cacheKey);\n loadedTemplates.push(cacheKey);\n document.dispatchEvent(new CustomEvent('tu.template.loaded', { detail: { template: cacheKey } }));\n return Promise.resolve();\n });\n }\n\n loadingTemplates = loadingTemplates.filter(e => e != cacheKey);\n loadedTemplates.push(cacheKey);\n document.dispatchEvent(new CustomEvent('tu.template.loaded', { detail: { template: cacheKey } }));\n return Promise.resolve();\n });\n}\n\n/**\n * \n * @param {string[]} urls \n * @returns \n */\nfunction loadTemplates(urls) {\n return Promise.all(urls.map(e => loadTemplate(e + \"?v=\" + cacheDate)));\n}\n\n/**\n * \n * @param {string[]} names \n * @returns \n */\nfunction loadPrecompiledTemplates(names) {\n return Promise.all(names.map(e => loadPrecompiledTemplate(e)));\n}\n\nfunction initHelpers() {\n for (let helper in helpers) {\n Handlebars.registerHelper(helper, helpers[helper]);\n }\n}\n\nfunction initUaParserHelper(){\n return import('ua-parser-js').then(modules => {\n Handlebars.registerHelper('uaparser', (a, b) => {\n let data = modules.default(a);\n if (b == 'os') return data.os.name;\n if (b == 'browser') return data.browser.name;\n if (b == 'device') return data.device.model;\n if (b == 'type') return data.device.type;\n return '';\n });\n });\n}\n\n/**\n * \n * @param {string} template \n * @returns \n */\nfunction getPrecompiledTemplate(template){\n return Handlebars.templates[template];\n}\n\ninitHelpers();\n\nexport { loadPrecompiledTemplates, getPrecompiledTemplate, loadTemplates, helpers, initUaParserHelper };","function newUuid() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n}\n\nexport { newUuid };"],"names":["_setTimeout","ms","Promise","resolve","setTimeout","searchIconBlinked","tumCommon","options","hideFloatingHeader","init","Object","assign","this","initCallbacks","checkAuthorization","updateCartInfo","checkCookies","initHeader","initFloatingHeader","initCtuCloud","initFloatingWindows","initCacheControls","initOperatorControls","initMobSearchBar","element","event","stopPropagation","document","content","dataset","copyToClipboard","type","querySelector","addEventListener","remove","closest","dropdown","tumarket","isAdmin","el","querySelectorAll","showAdminOnlyStuff","url","data","prefix","firmId","then","result","preventDefault","lastScrollTop","lastState","mobSearchBar","window","st","scrollY","documentElement","scrollTop","show","canBeShown","showFloatingHeader_desktop","passive","self","isMob","updateFloatingHeader","dispatchEvent","Event","showFloatingHeader","showFloatingHeader_mob","toggleTopBar","toggleFloatingHeader","selector","header","clientHeight","innerHeight","containers","cloud","scrollWidth","offsetWidth","$back","$forward","classList","add","addClass","maxScrollLeft","updateButtons","showBack","scrollLeft","showForward","on","animate","Math","max","min","updateCacheToggle","location","reload","updateOperatorAddonToggle","loadLivetex","callback","LiveTex","liveTex","liveTexID","liveTex_object","onLiveTexReady","hideLabel","jsLink","conditionObject","_LiveTex","name","value","duration","target","undefined","bubbles","setToggle","scrollUp","collapseLinkClick","collapseLinkClick2","collapseLinkInfoClick","checkPageHeight","attr","getShortUrl","shown","hasClass","setSeoFooterCookie","tum_searchMenu","toggleMenu","focusSearch","showSearchTypes","code","startSearch","text","elem","showHintDeliv","e","defineSearchType","defineSearchOpen","showWelcomeWindow","showFirmOnMap","lat","long","firmID","editFailureNotificationContacts","msg","html","toggleSearchTypes","setSearchType","getSearchQuery","search","main","focus","getQuery","getSearchType","cookieEnabled","navigator","removeClass","pathname","startsWith","reg","saveCartItems","prop","elm","toggleClass","id","scrollHeight","searchType","first","click","txt","close","hintBlock","find","innerHTML","href","title","onShown","tu_maps","currentMap","create","containerId","center","height","zoom","onLoad","ymap","modules","map","placemark","Placemark","showBalloon","getBalloonContent","showCustomBalloon","events","tumStats","logEvent","objectType","eventType","geoObjects","onClosed","dropSettingsModal","_getSearchBarTop","getBoundingClientRect","top","updateSearchMenuButton","searchBarTop","searchMenuButton","blinkSearchIcon","active","matches","setInterval","exists","getCartCount","reject","count","getCartSum","sum","getFavoritesCount","getNotificationsCount","_updateCartCount","$count","general","cartCount","_updateCartSum","$cart","cartSum","toFixed","_updateFavoritesCount","favoritesCount","_updateNotificationsCount","notificationsCount","updateCartCount","updateCartSum","updateFavoritesCount","updateNotificationsCount","isHeaderFloating","getFirmSettings","all","getUserRole","results","form","formJson","formFields","JSON","parse","formData","updateFailureNotificationContacts","buttonText","tu_form","container","fields","userRoles","f","onSubmit","validate","getData","alert","tech","priority","phone","email","org","updateFirmSettings","stringify","catch","addHighlight","field","settings","checkPermissions","getFloatingWindow","$wrapper","length","$window","css","bottom","left","right","append","onClickOutside","button","contenttarget","pinToBottom","classes","$windowWrapper","modal","getFirmSchedule","depID","Array","prototype","diff","a","filter","i","indexOf","_version","_domain","initCookies","version","domain","setCookie","days","expires","date","Date","setTime","getTime","toUTCString","domainName","substring","hostname","includes","toLowerCase","cookie","encodeURIComponent","getCookie","c_name","c_start","c_end","decodeURIComponent","loadLib","cssLink","showProgressbar","useVersion","cacheDate","script","createElement","body","appendChild","onload","onerror","async","src","openProgressbar","closeProgressbar","fadeOut","Handlebars","aliases","chunk","array","size","push","slice","loadedTemplates","loadingTemplates","templateDependencies","helpers","equals","b","or","arguments","some","and","every","coalesce","not","isNull","len","gt","lt","c","skip","truncate","val","truncateMiddle","lowercase","toJson","toFormattedJson","getDate","parseDate","formatDate","formatNumber","Intl","NumberFormat","minimumFractionDigits","maximumFractionDigits","format","formatNumber2","formatNumber3","replace","formatKop","minimumIntegerDigits","formatPrice","price","arr","split","Number","reduce","previous","current","subtract","contains","toString","urlEncode","urlEscape","urlDecode","res","parseJson","printif","cond","iif","in","item","string","separator","join","index","get","getValue","object","key","getObject","pattern","replacement","replaceRegex","RegExp","testRegex","test","whereEquals","whereNotEquals","mapField","mapper","args","helper","flatMap","getRandom","floor","random","concat","nconcat","reverseFilter","capitalize","htmlAttributes","attributes","entries","hash","htmlStyle","styles","getUrl","getUrlReferrer","urlReferrer","getUrlParameters","fromEntries","URL","searchParams","case","defaultValue","rest","condition","switch","defaultResult","option","groupBy","sort","desc","sortBy","copy","reverse","sort2","items","compare","localeCompare","sort_items","compare_total","last","dateToTimestamp","timestampToDate","isToday","offset","today","setDate","day","setHours","isThisWeek","isThisMonth","getFullYear","getMonth","isArray","isObject","multiply","divide","round","mod","apply","args_array","trim","expandContext","loadTemplate","fetchDependencies","dependencies","nameMatch","match","fetch","headers","response","template","loadPrecompiledTemplate","partial","originalName","alias","at","cacheKey","detail","getElementById","CustomEvent","loadTemplates","urls","loadPrecompiledTemplates","names","initUaParserHelper","default","os","browser","device","model","getPrecompiledTemplate","initHelpers","newUuid","r"],"sourceRoot":""}