/******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); /******/ } /******/ }; /******/ /******/ // define __esModule on exports /******/ __webpack_require__.r = function(exports) { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ /******/ // create a fake namespace object /******/ // mode & 1: value is a module id, require it /******/ // mode & 2: merge all properties of value into the ns /******/ // mode & 4: return value when already ns object /******/ // mode & 8|1: behave like require /******/ __webpack_require__.t = function(value, mode) { /******/ if(mode & 1) value = __webpack_require__(value); /******/ if(mode & 8) return value; /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; /******/ var ns = Object.create(null); /******/ __webpack_require__.r(ns); /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); /******/ return ns; /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = "./src/01_js/main.js"); /******/ }) /************************************************************************/ /******/ ({ /***/ "./src/01_js/eslider.js": /*!******************************!*\ !*** ./src/01_js/eslider.js ***! \******************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _st_loop__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./st/loop */ \"./src/01_js/st/loop.js\");\n/* harmony import */ var _st_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./st/utils */ \"./src/01_js/st/utils.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils */ \"./src/01_js/utils.js\");\n\r\n\r\n\r\n\r\nfunction updateSlider(slider) {\r\n Object(_st_utils__WEBPACK_IMPORTED_MODULE_1__[\"simpleEasing\"])(slider.value, 0.2, 4)\r\n Object(_utils__WEBPACK_IMPORTED_MODULE_2__[\"setProp\"])(slider.storage, 'eslider-value', slider.value[1] + 'px')\r\n const v = Object(_st_utils__WEBPACK_IMPORTED_MODULE_1__[\"round\"])(1 / slider.max * slider.value[1], 4)\r\n Object(_utils__WEBPACK_IMPORTED_MODULE_2__[\"setProp\"])(slider.storage, 'eslider-percent', v)\r\n}\r\n\r\nfunction grab(e, slider) {\r\n if (slider.active_state === 'none') return\r\n clearTimeout(slider.timeout)\r\n\r\n let start_point, start_value\r\n\r\n if (slider.active_state === 'horisontal') {\r\n start_point = e.type === 'touchstart' ? e.touches[0].clientX : e.clientX\r\n start_value = start_point + (slider.container.getBoundingClientRect().left - slider.list.getBoundingClientRect().left) / slider.speed\r\n } else if (slider.active_state === 'vertical') {\r\n start_point = e.type === 'touchstart' ? e.touches[0].clientY : e.clientY\r\n start_value = start_point + (slider.container.getBoundingClientRect().top - slider.list.getBoundingClientRect().top) / slider.speed\r\n }\r\n\r\n const move_listener = Object(_utils__WEBPACK_IMPORTED_MODULE_2__[\"on\"])([window], 'mousemove touchmove', move)\r\n const stop_listener = Object(_utils__WEBPACK_IMPORTED_MODULE_2__[\"on\"])([window], 'mouseup touchend', stop)\r\n\r\n _st_loop__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add('slider' + slider.id, () => updateSlider(slider))\r\n\r\n Object(_utils__WEBPACK_IMPORTED_MODULE_2__[\"setProp\"])(slider.storage, 'eslider-dragged', 1)\r\n\r\n\r\n function move(e) {\r\n if (slider.active_state === 'horisontal') {\r\n const x = e.type === 'touchmove' ? e.touches[0].clientX : e.clientX\r\n slider.value[0] = Object(_st_utils__WEBPACK_IMPORTED_MODULE_1__[\"maxmin\"])((start_value - x) * slider.speed, slider.max)\r\n } else if (slider.active_state === 'vertical') {\r\n const y = e.type === 'touchmove' ? e.touches[0].clientY : e.clientY\r\n slider.value[0] = Object(_st_utils__WEBPACK_IMPORTED_MODULE_1__[\"maxmin\"])((start_value - y) * slider.speed, slider.max)\r\n }\r\n\r\n\r\n if (slider.max === slider.value[0]) {\r\n Object(_utils__WEBPACK_IMPORTED_MODULE_2__[\"setProp\"])(slider.storage, 'eslider-max', 1)\r\n } else {\r\n Object(_utils__WEBPACK_IMPORTED_MODULE_2__[\"setProp\"])(slider.storage, 'eslider-max', 0)\r\n }\r\n\r\n if (slider.value[0] === 0) {\r\n Object(_utils__WEBPACK_IMPORTED_MODULE_2__[\"setProp\"])(slider.storage, 'eslider-min', 1)\r\n } else {\r\n Object(_utils__WEBPACK_IMPORTED_MODULE_2__[\"setProp\"])(slider.storage, 'eslider-min', 0)\r\n }\r\n }\r\n\r\n function stop() {\r\n slider.timeout = setTimeout(() => _st_loop__WEBPACK_IMPORTED_MODULE_0__[\"default\"].remove('slider' + slider.id), 5000)\r\n move_listener()\r\n stop_listener()\r\n\r\n }\r\n}\r\n\r\nfunction initialize() {\r\n let counter = 0\r\n const sliders = [...document.querySelectorAll('[data-eslider]')].map(slider => {\r\n const container = slider.querySelector('[data-eslider-container]')\r\n if (!container) return console.error('no container found in: ', slider, '\\nyou need to create container class for list with attribute \"data-eslider-container\"')\r\n const list = slider.querySelector('[data-eslider-list]')\r\n if (!list) return console.error('no list found in: ', slider, '\\nyou need to create list of items with attribute \"data-eslider-list\"')\r\n const items = slider.querySelectorAll('[data-eslider-list-item]')\r\n if (!items.length) return console.error('no items found in: ', slider, list, '\\nyou need to create items with attribute \"data-eslider-list-item\" in your list')\r\n\r\n const options = slider.dataset.eslider.split(';').map(opt => opt.trim()).filter(opt => !!opt)\r\n let horisontal_check\r\n let vertical_check\r\n let disabled_check\r\n let speed = 1\r\n let storage = slider\r\n\r\n options.forEach(opt => {\r\n const splitted_option = opt.split('=>').map(part => part.trim())\r\n if (splitted_option[0] === 'horisontal') horisontal_check = `(${splitted_option[1]})`\r\n if (splitted_option[0] === 'vertical') vertical_check = `(${splitted_option[1]})`\r\n if (splitted_option[0] === 'disabled') disabled_check = `(${splitted_option[1]})`\r\n if (splitted_option[0] === 'speed') speed = +splitted_option[1]\r\n if (splitted_option[0] === 'storage') storage = document.querySelector(splitted_option[1])\r\n })\r\n\r\n\r\n return {\r\n id: ++counter,\r\n node: slider,\r\n container: container,\r\n list: list,\r\n items: items,\r\n value: [0, 0],\r\n max: 0,\r\n active_state: 'horisontal',\r\n prev_state: '??',\r\n horisontal_check,\r\n vertical_check,\r\n disabled_check,\r\n speed,\r\n storage,\r\n\r\n resize() {\r\n const w = this.list.offsetWidth - this.container.offsetWidth\r\n const h = this.list.offsetHeight - this.container.offsetHeight\r\n if (this.disabled_check && matchMedia(this.disabled_check).matches) {\r\n Object(_utils__WEBPACK_IMPORTED_MODULE_2__[\"setProp\"])(this.storage, 'list-width', w)\r\n Object(_utils__WEBPACK_IMPORTED_MODULE_2__[\"setProp\"])(this.storage, 'list-height', h)\r\n this.active_state = 'none'\r\n } else {\r\n if (this.horisontal_check && matchMedia(this.horisontal_check).matches) {\r\n this.active_state = 'horisontal'\r\n this.max = w\r\n }\r\n\r\n if (this.vertical_check && matchMedia(this.vertical_check).matches) {\r\n this.active_state = 'vertical'\r\n this.max = h\r\n }\r\n }\r\n\r\n if (this.prev_state !== this.active_state) {\r\n clearTimeout(this.timeout)\r\n _st_loop__WEBPACK_IMPORTED_MODULE_0__[\"default\"].remove('slider' + this.id)\r\n Object(_utils__WEBPACK_IMPORTED_MODULE_2__[\"setProp\"])(this.storage, 'eslider-value', 0)\r\n Object(_utils__WEBPACK_IMPORTED_MODULE_2__[\"setProp\"])(this.storage, 'eslider-percent', 0)\r\n this.value = [0, 0]\r\n }\r\n\r\n this.prev_state = this.active_state\r\n Object(_utils__WEBPACK_IMPORTED_MODULE_2__[\"setProp\"])(this.storage, 'eslider-list-length', this.max + 'px')\r\n }\r\n }\r\n })\r\n\r\n sliders.forEach(slider => slider.resize())\r\n addEventListener('resize', () => sliders.forEach(slider => slider.resize()))\r\n sliders.forEach(slider => Object(_utils__WEBPACK_IMPORTED_MODULE_2__[\"on\"])([slider.list], 'mousedown touchstart', (e) => grab(e, slider)))\r\n}\r\n\r\n/* harmony default export */ __webpack_exports__[\"default\"] = ({ initialize });\n\n//# sourceURL=webpack:///./src/01_js/eslider.js?"); /***/ }), /***/ "./src/01_js/gslider.js": /*!******************************!*\ !*** ./src/01_js/gslider.js ***! \******************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _st_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./st/utils */ \"./src/01_js/st/utils.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ \"./src/01_js/utils.js\");\n\r\n\r\n\r\nfunction grab(e, slider) {\r\n if (slider.disabled) return\r\n let start_point, step\r\n\r\n start_point = e.type === 'touchstart' ? e.touches[0].clientX : e.clientX\r\n step = innerWidth * 0.35\r\n\r\n const move_listener = Object(_utils__WEBPACK_IMPORTED_MODULE_1__[\"on\"])([window], 'mousemove touchmove', move, false)\r\n const stop_listener = Object(_utils__WEBPACK_IMPORTED_MODULE_1__[\"on\"])([window], 'mouseup touchend', stop)\r\n\r\n\r\n let prev_sps\r\n let disable_scrolling = false\r\n\r\n function move(e) {\r\n if (disable_scrolling) e.preventDefault()\r\n\r\n let mv = e.type === 'touchmove' ? e.touches[0].clientX : e.clientX\r\n\r\n if (Math.abs(mv - start_point) < 50) return\r\n\r\n const sps = Math.ceil((mv - start_point) / step)\r\n\r\n if (prev_sps !== sps) {\r\n disable_scrolling = true\r\n const sign = sps > 0 ? -1 : 1\r\n slider.value = Object(_st_utils__WEBPACK_IMPORTED_MODULE_0__[\"maxmin\"])(slider.value + sign, slider.max)\r\n Object(_utils__WEBPACK_IMPORTED_MODULE_1__[\"setProp\"])(slider.storage, 'gslider-value', slider.value)\r\n\r\n if (slider.limit) Object(_utils__WEBPACK_IMPORTED_MODULE_1__[\"setProp\"])(slider.storage, 'gslider-limit-value', Math.min(slider.value, slider.limit))\r\n prev_sps = sps\r\n }\r\n\r\n\r\n if (slider.max === slider.value) {\r\n Object(_utils__WEBPACK_IMPORTED_MODULE_1__[\"setProp\"])(slider.storage, 'gslider-max', 1)\r\n } else {\r\n Object(_utils__WEBPACK_IMPORTED_MODULE_1__[\"setProp\"])(slider.storage, 'gslider-max', 0)\r\n }\r\n\r\n if (slider.value === 0) {\r\n Object(_utils__WEBPACK_IMPORTED_MODULE_1__[\"setProp\"])(slider.storage, 'gslider-min', 1)\r\n } else {\r\n Object(_utils__WEBPACK_IMPORTED_MODULE_1__[\"setProp\"])(slider.storage, 'gslider-min', 0)\r\n }\r\n }\r\n\r\n function stop() {\r\n move_listener()\r\n stop_listener()\r\n }\r\n}\r\n\r\nfunction initialize() {\r\n let counter = 0\r\n const sliders = [...document.querySelectorAll('[data-gslider]')].map(slider => {\r\n const container = slider.querySelector('[data-gslider-container]')\r\n if (!container) return console.error('no container found in: ', slider, '\\nyou need to create container class for list with attribute \"data-gslider-container\"')\r\n const list = slider.querySelector('[data-gslider-list]')\r\n if (!list) return console.error('no list found in: ', slider, '\\nyou need to create list of items with attribute \"data-gslider-list\"')\r\n const items = slider.querySelectorAll('[data-gslider-list-item]')\r\n if (!items.length) return console.error('no items found in: ', slider, list, '\\nyou need to create items with attribute \"data-gslider-list-item\" in your list')\r\n\r\n const options = slider.dataset.gslider.split(';').map(opt => opt.trim()).filter(opt => !!opt)\r\n let disabled_check\r\n let storage = slider\r\n let limit = 0\r\n\r\n options.forEach(opt => {\r\n const splitted_option = opt.split('=>').map(part => part.trim())\r\n if (splitted_option[0] === 'disabled') disabled_check = `(${splitted_option[1]})`\r\n if (splitted_option[0] === 'storage') storage = document.querySelector(splitted_option[1])\r\n if (splitted_option[0] === 'limit') limit = +splitted_option[1]\r\n })\r\n\r\n const length = items.length\r\n Object(_utils__WEBPACK_IMPORTED_MODULE_1__[\"setProp\"])(storage, 'gslider-length', length - 1)\r\n\r\n return {\r\n id: ++counter,\r\n node: slider,\r\n container: container,\r\n list: list,\r\n limit,\r\n value: 0,\r\n prev_value: 0,\r\n max: length - 1,\r\n active_state: 'horisontal',\r\n prev_state: '??',\r\n disabled_check,\r\n storage,\r\n\r\n resize() {\r\n const w = this.list.offsetWidth - this.container.offsetWidth\r\n const h = this.list.offsetHeight - this.container.offsetHeight\r\n\r\n if (this.disabled_check && matchMedia(this.disabled_check).matches) {\r\n this.disabled = true\r\n } else {\r\n this.disabled = false\r\n }\r\n }\r\n }\r\n })\r\n\r\n\r\n sliders.forEach(slider => slider.resize())\r\n addEventListener('resize', () => sliders.forEach(slider => slider.resize()))\r\n sliders.forEach(slider => {\r\n Object(_utils__WEBPACK_IMPORTED_MODULE_1__[\"on\"])([slider.list], 'touchstart mousedown', (e) => grab(e, slider))\r\n })\r\n}\r\n\r\n/* harmony default export */ __webpack_exports__[\"default\"] = ({ initialize });\n\n//# sourceURL=webpack:///./src/01_js/gslider.js?"); /***/ }), /***/ "./src/01_js/lazy_launcher.js": /*!************************************!*\ !*** ./src/01_js/lazy_launcher.js ***! \************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _st_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./st/utils */ \"./src/01_js/st/utils.js\");\n\r\n\r\nfunction initialize() {\r\n const webp_supported = Object(_st_utils__WEBPACK_IMPORTED_MODULE_0__[\"checkWebpSupport\"])()\r\n document.querySelectorAll('[data-lazy-launcher]').forEach(launcher => {\r\n let container = launcher.dataset.lazyLauncher\r\n\r\n let elements = [...document.querySelectorAll(`[data-lazy-element=\"${container}\"]`)].map(element => {\r\n const images = element.dataset.lazyImage.split(',').map(image => image.trim()).filter(image => !!image)\r\n const image = webp_supported && images[1] ? images[1] : images[0]\r\n\r\n return {\r\n node: element,\r\n image: image,\r\n load() {\r\n this.node.src = this.image\r\n }\r\n }\r\n })\r\n\r\n function load() {\r\n elements.forEach(element => element.load())\r\n launcher.removeEventListener('click', load)\r\n elements = null\r\n container = null\r\n }\r\n\r\n launcher.addEventListener('click', load)\r\n })\r\n}\r\n\r\n/* harmony default export */ __webpack_exports__[\"default\"] = ({ initialize });\n\n//# sourceURL=webpack:///./src/01_js/lazy_launcher.js?"); /***/ }), /***/ "./src/01_js/main.js": /*!***************************!*\ !*** ./src/01_js/main.js ***! \***************************/ /*! no exports provided */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _st__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./st */ \"./src/01_js/st/index.js\");\n/* harmony import */ var _eslider__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./eslider */ \"./src/01_js/eslider.js\");\n/* harmony import */ var _sslider__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sslider */ \"./src/01_js/sslider.js\");\n/* harmony import */ var _gslider__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./gslider */ \"./src/01_js/gslider.js\");\n/* harmony import */ var _shooter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./shooter */ \"./src/01_js/shooter.js\");\n/* harmony import */ var _toggle__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./toggle */ \"./src/01_js/toggle.js\");\n/* harmony import */ var _wh__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./wh */ \"./src/01_js/wh.js\");\n/* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./map */ \"./src/01_js/map.js\");\n/* harmony import */ var _scroll_iv__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./scroll_iv */ \"./src/01_js/scroll_iv.js\");\n/* harmony import */ var _lazy_launcher__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./lazy_launcher */ \"./src/01_js/lazy_launcher.js\");\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nlet scrollResize\r\n\r\nwindow.addEventListener('DOMContentLoaded', () => {\r\n const layout_footer = document.querySelector('footer.footer')\r\n const partner_header = document.querySelector('header.header').offsetHeight + document.querySelector('.menu').offsetHeight;\r\n\r\n const app_menu = document.querySelector('.__menu');\r\n app_menu.style.zIndex = 10001;\r\n document.body.prepend(app_menu);\r\n\r\n document.querySelector('.h-app').setAttribute('style', '--header-height: ' + partner_header + 'px;');\r\n\r\n layout_footer.setAttribute('style', 'z-index:10000!important');\r\n\r\n let footer_shown = false\r\n\r\n if (layout_footer) {\r\n layout_footer.classList.add('h-footer')\r\n\r\n addEventListener('scroll', () => {\r\n const end = document.documentElement.scrollHeight - innerHeight/* - layout_footer.offsetHeight - partner_header - curtain.offsetHeight;*/;\r\n\r\n if (!footer_shown && window.scrollY >= end) {\r\n footer_shown = true\r\n layout_footer.classList.add('h-footer_shown')\r\n } else if (footer_shown && window.scrollY <= end) {\r\n footer_shown = false\r\n layout_footer.classList.remove('h-footer_shown')\r\n }\r\n })\r\n }\r\n\r\n const curtain = document.getElementById('h-curtain')\r\n curtain.classList.add('h-curtain_removed')\r\n\r\n _wh__WEBPACK_IMPORTED_MODULE_6__[\"default\"].initialize(layout_footer ? [layout_footer, 'footer'] : [])\r\n\r\n scrollResize = Object(_st__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\r\n app: '.h-app',\r\n scrollable: '.scrollable',\r\n disable_media: 'max-width: 1100px',\r\n ease: 0.06,\r\n lazy_offset: -1.5,\r\n })\r\n\r\n _eslider__WEBPACK_IMPORTED_MODULE_1__[\"default\"].initialize()\r\n _sslider__WEBPACK_IMPORTED_MODULE_2__[\"default\"].initialize()\r\n _gslider__WEBPACK_IMPORTED_MODULE_3__[\"default\"].initialize()\r\n _shooter__WEBPACK_IMPORTED_MODULE_4__[\"default\"].initialize()\r\n _toggle__WEBPACK_IMPORTED_MODULE_5__[\"default\"].initialize()\r\n _map__WEBPACK_IMPORTED_MODULE_7__[\"default\"].initialize()\r\n _scroll_iv__WEBPACK_IMPORTED_MODULE_8__[\"default\"].initialize()\r\n _lazy_launcher__WEBPACK_IMPORTED_MODULE_9__[\"default\"].initialize()\r\n})\r\n\r\nwindow.addEventListener('load', () => scrollResize(true))\n\n//# sourceURL=webpack:///./src/01_js/main.js?"); /***/ }), /***/ "./src/01_js/map.js": /*!**************************!*\ !*** ./src/01_js/map.js ***! \**************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ \"./src/01_js/utils.js\");\n/* harmony import */ var _st_loop__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./st/loop */ \"./src/01_js/st/loop.js\");\n/* harmony import */ var _st_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./st/utils */ \"./src/01_js/st/utils.js\");\n\r\n\r\n\r\n\r\nlet SCALE = 1.5, INITIAL_SCALE = 1\r\n\r\nlet container, scale_buttons, country_buttons, map, pins, info, close_button, country_name, country_flag, links, device = 'desktop'\r\n\r\nlet scaled, first_scale = false, timeout, values = { x: [0, 0], y: [0, 0], s: [1, 1] }, easings = { x: 0.1, y: 0.1, s: 0.06 }, edges = { xmin: 0, ymin: 0, xmax: 0, ymax: 0 }\r\n\r\nfunction update() {\r\n Object(_st_utils__WEBPACK_IMPORTED_MODULE_2__[\"simpleEasing\"])(values.x, easings.x)\r\n Object(_st_utils__WEBPACK_IMPORTED_MODULE_2__[\"simpleEasing\"])(values.y, easings.y)\r\n Object(_st_utils__WEBPACK_IMPORTED_MODULE_2__[\"simpleEasing\"])(values.s, easings.s)\r\n Object(_utils__WEBPACK_IMPORTED_MODULE_0__[\"setProp\"])(container, 'tx', values.x[1] + 'px')\r\n Object(_utils__WEBPACK_IMPORTED_MODULE_0__[\"setProp\"])(container, 'ty', values.y[1] + 'px')\r\n Object(_utils__WEBPACK_IMPORTED_MODULE_0__[\"setProp\"])(container, 's', values.s[1])\r\n}\r\n\r\nfunction grab(e) {\r\n if (!scaled || info.contains(e.target)) return\r\n clearTimeout(timeout)\r\n\r\n easings.x = 0.15\r\n easings.y = 0.15\r\n\r\n const is_touch = e.type === 'touchstart'\r\n\r\n const start_x = is_touch ? e.touches[0].clientX - values.x[1] : e.clientX - values.x[1]\r\n const start_y = is_touch ? e.touches[0].clientY - values.y[1] : e.clientY - values.y[1]\r\n\r\n const move_listener = Object(_utils__WEBPACK_IMPORTED_MODULE_0__[\"on\"])([container], 'mousemove touchmove', move)\r\n const stop_listener = Object(_utils__WEBPACK_IMPORTED_MODULE_0__[\"on\"])([container], 'mouseup touchend', stop)\r\n\r\n _st_loop__WEBPACK_IMPORTED_MODULE_1__[\"default\"].add('map', update)\r\n\r\n function move(e) {\r\n e.preventDefault()\r\n const move_x = is_touch ? e.touches[0].clientX : e.clientX\r\n const move_y = is_touch ? e.touches[0].clientY : e.clientY\r\n\r\n values.x[0] = Object(_st_utils__WEBPACK_IMPORTED_MODULE_2__[\"maxmin\"])(move_x - start_x, edges.xmax, edges.xmin)\r\n values.y[0] = Object(_st_utils__WEBPACK_IMPORTED_MODULE_2__[\"maxmin\"])(move_y - start_y, edges.ymax, edges.ymin)\r\n }\r\n\r\n function stop() {\r\n move_listener()\r\n stop_listener()\r\n timeout = setTimeout(() => _st_loop__WEBPACK_IMPORTED_MODULE_1__[\"default\"].remove('map'), 4000)\r\n }\r\n}\r\n\r\nfunction pick(e) {\r\n const target = e.currentTarget\r\n const target_country_name = target.dataset.hMapPinCountryName\r\n const target_country_flag = target.dataset.hMapPinCountryFlag\r\n\r\n const target_country_links = target.dataset.hMapPinCountryLinks.split(',').map(link => link.trim()).filter(link => !!link).map(link => {\r\n const spl = link.split(' ').map(part => part.trim())\r\n return { name: spl[0], link: spl[1] }\r\n })\r\n\r\n\r\n country_name.innerText = target_country_name\r\n country_flag.src = target_country_flag\r\n\r\n links.forEach(link => link.classList.remove('h-spread__country__button_active'))\r\n\r\n let counter = 0\r\n target_country_links.forEach(target_link => {\r\n const match = links.find(link => link.dataset.hMapCountryLink == target_link.name)\r\n if (match) {\r\n counter++\r\n match.href = target_link.link\r\n match.classList.add('h-spread__country__button_active')\r\n }\r\n })\r\n\r\n if (counter > 3) {\r\n country_buttons.classList.add('h-spread__country__buttons_2-columns')\r\n } else {\r\n country_buttons.classList.remove('h-spread__country__buttons_2-columns')\r\n }\r\n\r\n container.dataset.activeCountry = target_country_name\r\n container.classList.add('h-spread__map-container_country-shown')\r\n\r\n pins.forEach(pin => pin.classList.remove('h-map__pin_active'))\r\n target.classList.add('h-map__pin_active')\r\n\r\n\r\n if (!scaled) {\r\n scaled = true\r\n\r\n clearTimeout(timeout)\r\n timeout = setTimeout(() => _st_loop__WEBPACK_IMPORTED_MODULE_1__[\"default\"].remove('map'), 4000)\r\n\r\n _st_loop__WEBPACK_IMPORTED_MODULE_1__[\"default\"].add('map', update)\r\n\r\n resize()\r\n scaleToPin(e, true)\r\n values.s[0] = SCALE\r\n\r\n if (device === 'mobile') {\r\n const dy = (container.getBoundingClientRect().bottom + scrollY) - (scrollY + innerHeight)\r\n setTimeout(() => {\r\n scrollTo({ top: dy + scrollY, behavior: 'smooth' })\r\n }, 500)\r\n }\r\n } else {\r\n scaleToPin(e)\r\n }\r\n}\r\n\r\nfunction scaleToPin(e, first_scale) {\r\n const { left, top } = container.getBoundingClientRect()\r\n let ox, oy\r\n\r\n const mult = first_scale ? SCALE : 1\r\n\r\n if (device == 'desktop') {\r\n ox = (map.offsetWidth / 3 - (e.x - left))\r\n oy = (map.offsetHeight / 4 - (e.y - top))\r\n } else if (device === 'tablet') {\r\n ox = (map.offsetWidth / 2 - (e.x - left)) * mult\r\n oy = (map.offsetHeight / 4.5 - (e.y - top)) * mult\r\n } else if (device === 'mobile') {\r\n const mx = first_scale ? 2 : 1\r\n const my = first_scale ? 1.3 : 1\r\n ox = (map.offsetWidth / 2 - (e.x - left)) * mx\r\n oy = (map.offsetHeight / 5.2 * my - (e.y - top))\r\n }\r\n\r\n if (!first_scale) {\r\n easings.x = 0.06\r\n easings.y = 0.06\r\n first_scale = true\r\n } else {\r\n easings.x = 0.08\r\n easings.y = 0.08\r\n }\r\n\r\n values.x[0] = Object(_st_utils__WEBPACK_IMPORTED_MODULE_2__[\"maxmin\"])(values.x[0] + ox, edges.xmax, edges.xmin)\r\n values.y[0] = Object(_st_utils__WEBPACK_IMPORTED_MODULE_2__[\"maxmin\"])(values.y[0] + oy, edges.ymax, edges.ymin)\r\n}\r\n\r\nfunction unpick() {\r\n container.dataset.activePin = false\r\n\r\n clearTimeout(timeout)\r\n timeout = setTimeout(() => _st_loop__WEBPACK_IMPORTED_MODULE_1__[\"default\"].remove('map'), 4000)\r\n scaled = false\r\n\r\n _st_loop__WEBPACK_IMPORTED_MODULE_1__[\"default\"].add('map', update)\r\n\r\n easings.x = 0.06\r\n easings.y = 0.06\r\n first_scale = false\r\n\r\n if (device !== 'mobile') {\r\n values.s[0] = 1\r\n } else {\r\n values.s[0] = INITIAL_SCALE\r\n }\r\n values.x[0] = 0\r\n values.y[0] = 0\r\n\r\n container.classList.remove('h-spread__map-container_country-shown')\r\n pins.forEach(pin => pin.classList.remove('h-map__pin_active'))\r\n}\r\n\r\nfunction resize() {\r\n const set = (s, is) => {\r\n INITIAL_SCALE = is\r\n SCALE = s\r\n values.s[0] = values.s[1] = INITIAL_SCALE\r\n Object(_utils__WEBPACK_IMPORTED_MODULE_0__[\"setProp\"])(container, 's', INITIAL_SCALE)\r\n }\r\n\r\n if (matchMedia('(max-width: 500px)').matches) {\r\n device = 'mobile'\r\n easings.s = 0.1\r\n set(3, 2)\r\n } else if (matchMedia('(max-width: 768px)').matches) {\r\n device = 'tablet'\r\n set(2.5, 1)\r\n easings.s = 0.06\r\n } else {\r\n device = 'desktop'\r\n set(1.5, 1)\r\n easings.s = 0.06\r\n }\r\n\r\n if (scaled) {\r\n const dx = Math.abs(container.offsetWidth - map.offsetWidth * 2 * SCALE) / 2\r\n const dy = Math.abs(container.offsetHeight - map.offsetHeight * 2 * SCALE) / 2\r\n\r\n edges.xmin = -dx\r\n edges.ymin = -dy\r\n edges.xmax = dx\r\n edges.ymax = dy\r\n }\r\n}\r\n\r\nfunction initialize() {\r\n container = document.querySelector('[data-h-map-container]')\r\n if (!container) return\r\n map = document.querySelector('[data-h-map]')\r\n info = document.querySelector('[data-h-map-info]')\r\n pins = document.querySelectorAll('[data-h-map-pin]')\r\n close_button = document.querySelector('[data-h-map-close-button]')\r\n country_buttons = document.querySelector('.h-spread__country__buttons')\r\n country_name = document.querySelector('[data-h-map-country-name]')\r\n country_flag = document.querySelector('[data-h-map-country-flag]')\r\n links = [...document.querySelectorAll('[data-h-map-country-link]')]\r\n scale_buttons = [...document.querySelectorAll('[data-h-map-scale-button]')].map(b => {\r\n const v = +b.dataset.hMapScaleButton\r\n b.addEventListener('click', () => {\r\n values.s[0] = Object(_st_utils__WEBPACK_IMPORTED_MODULE_2__[\"maxmin\"])(values.s[0] + v, SCALE + 6, 1)\r\n })\r\n })\r\n\r\n scaled = false\r\n Object(_utils__WEBPACK_IMPORTED_MODULE_0__[\"on\"])(pins, 'click', pick)\r\n Object(_utils__WEBPACK_IMPORTED_MODULE_0__[\"on\"])([container], 'mousedown touchstart', grab)\r\n\r\n close_button.addEventListener('click', unpick)\r\n\r\n r()\r\n function r() {\r\n resize()\r\n\r\n if (Object(_st_utils__WEBPACK_IMPORTED_MODULE_2__[\"isMobile\"])()) {\r\n Object(_utils__WEBPACK_IMPORTED_MODULE_0__[\"setProp\"])(map, 'scrollbar-offset', '0em')\r\n } else {\r\n if (matchMedia('(max-width: 1100px)').matches) {\r\n Object(_utils__WEBPACK_IMPORTED_MODULE_0__[\"setProp\"])(map, 'scrollbar-offset', (document.documentElement.offsetWidth - innerWidth) / 1.8 + 'px')\r\n }\r\n }\r\n }\r\n\r\n addEventListener('resize', r)\r\n}\r\n\r\n/* harmony default export */ __webpack_exports__[\"default\"] = ({ initialize });\n\n//# sourceURL=webpack:///./src/01_js/map.js?"); /***/ }), /***/ "./src/01_js/scroll_iv.js": /*!********************************!*\ !*** ./src/01_js/scroll_iv.js ***! \********************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\nfunction initialize() {\r\n document.querySelectorAll('[data-scroll-into-view]').forEach(el => {\r\n const scroll_to = !!el.dataset.scrollIntoView ? document.querySelector(el.dataset.scrollIntoView) : el\r\n const media = !!el.dataset.scrollIntoViewMedia ? `(${el.dataset.scrollIntoViewMedia})` : `(min-width: 0px)`\r\n let ready = false\r\n let counter = 0\r\n let prev_positon = 0\r\n\r\n resize()\r\n el.addEventListener('click', () => {\r\n if (!ready) return\r\n if (counter > 0) {\r\n counter = 0\r\n\r\n scrollTo({\r\n top: prev_positon,\r\n })\r\n\r\n } else {\r\n counter += 1\r\n prev_positon = scrollY\r\n scrollTo({\r\n top: scroll_to.getBoundingClientRect().top - innerHeight * 0.1 + scrollY,\r\n })\r\n }\r\n })\r\n\r\n function resize() {\r\n ready = matchMedia(media).matches\r\n }\r\n\r\n addEventListener('resize', resize)\r\n })\r\n}\r\n\r\n/* harmony default export */ __webpack_exports__[\"default\"] = ({ initialize });\r\n\n\n//# sourceURL=webpack:///./src/01_js/scroll_iv.js?"); /***/ }), /***/ "./src/01_js/shooter.js": /*!******************************!*\ !*** ./src/01_js/shooter.js ***! \******************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ \"./src/01_js/utils.js\");\n/* harmony import */ var _st_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./st/utils */ \"./src/01_js/st/utils.js\");\n\r\n\r\n\r\nfunction initialize() {\r\n document.querySelectorAll('[data-shooter]').forEach(shooter => {\r\n let active_bullet, counter = 1, wait = false\r\n\r\n const options = {\r\n toggle: shooter.hasAttribute('data-shooter-enable-toggle') ? !!shooter.dataset.shooterEnableToggle ? { ready: false, media: `(${shooter.dataset.shooterEnableToggle})` } : { ready: false, media: '(min-width: 0px)' } : { ready: false, media: '(max-width: 0px)' },\r\n loud: shooter.hasAttribute('data-shooter-enable-loud'),\r\n delay_shot: shooter.hasAttribute('data-shooter-enable-delay-shot'),\r\n counter: shooter.hasAttribute('data-shooter-enable-counter'),\r\n weapons: shooter.hasAttribute('data-shooter-weapons') ? shooter.dataset.shooterWeapons : 'click',\r\n reload: shooter.hasAttribute('data-shooter-reload') ? +shooter.dataset.shooterReload : 0,\r\n death: shooter.hasAttribute('data-shooter-enable-death') ? !!shooter.dataset.shooterEnableDeath ? +shooter.dataset.shooterEnableDeath : 1 : false,\r\n }\r\n\r\n const bullets = [...shooter.querySelectorAll('[data-shooter-bullet]')].map((bullet, i) => {\r\n const targets_names = Object(_st_utils__WEBPACK_IMPORTED_MODULE_1__[\"splitMapTrimFilter\"])(bullet.dataset.shooterBullet, ' ')\r\n const data_holder = bullet.hasAttribute('data-shooter-bullet-data-holder') ? bullet.closest(bullet.dataset.shooterBulletDataHolder) : bullet\r\n const first = bullet.hasAttribute('data-shooter-bullet-first') ? !!bullet.dataset.shooterBulletFirst ? `(${bullet.dataset.shooterBulletFirst})` : '(min-width: 0px)' : false\r\n const targets = []\r\n targets_names.forEach(name => shooter.querySelectorAll(`[data-shooter-target=\"${name}\"]`).forEach(t => targets.push(t)))\r\n\r\n return {\r\n node: bullet,\r\n first,\r\n targets,\r\n data_holder,\r\n number: i\r\n }\r\n })\r\n\r\n const counter_buttons = [...shooter.querySelectorAll('[data-shooter-counter-button]')].map(button => {\r\n const value = +button.dataset.shooterCounterButton\r\n\r\n return {\r\n node: button,\r\n value\r\n }\r\n })\r\n\r\n function shot(bullet) {\r\n bullet.data_holder.classList.add('shot')\r\n bullet.targets.forEach(target => {\r\n target.classList.add('injured')\r\n\r\n if (options.delay_shot) {\r\n setTimeout(() => {\r\n target.classList.add('delay_injured')\r\n }, 0)\r\n }\r\n })\r\n\r\n if (options.loud) {\r\n bullets.forEach((b, i) => {\r\n if (b.number !== bullet.number) {\r\n b.targets.forEach(target => {\r\n if (i > bullet.number) {\r\n target.classList.add('next')\r\n } else if (i < bullet.number) {\r\n target.classList.add('prev')\r\n }\r\n })\r\n } else {\r\n b.targets.forEach(target => {\r\n target.classList.remove('next')\r\n target.classList.remove('prev')\r\n })\r\n }\r\n })\r\n }\r\n\r\n death()\r\n }\r\n\r\n function death() {\r\n if (options.death && active_bullet) {\r\n active_bullet.targets.forEach(target => target.classList.add('death'))\r\n const _active_bullet = active_bullet\r\n active_bullet.timeout = setTimeout(() => {\r\n _active_bullet.targets.forEach(target => target.classList.remove('death'))\r\n }, options.death * 1000)\r\n }\r\n }\r\n\r\n function clear(enable_clear_counter) {\r\n bullets.forEach(bullet => {\r\n bullet.data_holder.classList.remove('shot')\r\n bullet.targets.forEach(target => {\r\n target.classList.remove('injured')\r\n\r\n if (options.delay_shot) {\r\n target.classList.remove('delay_injured')\r\n }\r\n })\r\n })\r\n\r\n if (options.toggle && enable_clear_counter) {\r\n shooter.dataset.shooterCounter = -1\r\n shooter.style.setProperty('--shooter-counter', -1)\r\n }\r\n\r\n if (options.loud) {\r\n bullets.forEach((b) => {\r\n b.targets.forEach(target => {\r\n target.classList.remove('prev')\r\n target.classList.remove('next')\r\n })\r\n })\r\n }\r\n\r\n if (enable_clear_counter) death()\r\n }\r\n\r\n function next(cb, bullet) {\r\n if (options.reload) {\r\n if (wait) return\r\n wait = true\r\n\r\n setTimeout(() => {\r\n wait = false\r\n }, options.reload * 1000)\r\n }\r\n\r\n if (options.death) {\r\n if (active_bullet) {\r\n clearTimeout(active_bullet.timeout)\r\n active_bullet.targets.forEach(target => target.classList.remove('death'))\r\n }\r\n }\r\n\r\n cb()\r\n\r\n if (bullet() === active_bullet) {\r\n if (options.toggle.ready) {\r\n clear(true)\r\n active_bullet = null\r\n return\r\n } else {\r\n return\r\n }\r\n }\r\n\r\n\r\n clear()\r\n shot(bullet())\r\n\r\n if (options.death) {\r\n active_bullet = bullet()\r\n }\r\n\r\n if (options.counter) {\r\n if (counter === 1) {\r\n shooter.style.setProperty('--shooter-counter-min', 1)\r\n shooter.dataset.shooterCounterMin = true\r\n } else {\r\n shooter.style.setProperty('--shooter-counter-min', 0)\r\n shooter.dataset.shooterCounterMin = false\r\n }\r\n\r\n if (counter === bullets.length) {\r\n shooter.style.setProperty('--shooter-counter-max', 1)\r\n shooter.dataset.shooterCounterMax = true\r\n } else {\r\n shooter.style.setProperty('--shooter-counter-max', 0)\r\n shooter.dataset.shooterCounterMax = false\r\n }\r\n }\r\n }\r\n\r\n function resize() {\r\n if (matchMedia(options.toggle.media).matches) {\r\n options.toggle.ready = true\r\n } else {\r\n options.toggle.ready = false\r\n }\r\n\r\n const first_bullet = bullets.find(bullet => bullet.first)\r\n if (first_bullet && matchMedia(first_bullet.first).matches) {\r\n next(() => {\r\n if (options.counter) {\r\n shooter.dataset.shooterCounter = counter = first_bullet.number + 1\r\n shooter.style.setProperty('--shooter-counter', first_bullet.number + 1)\r\n }\r\n }, () => first_bullet)\r\n }\r\n }\r\n\r\n resize()\r\n\r\n bullets.forEach((bullet, bullet_number) => {\r\n bullet_number += 1\r\n\r\n bullet.node.addEventListener(options.weapons, () => {\r\n next(() => {\r\n if (options.counter) {\r\n shooter.dataset.shooterCounter = counter = bullet_number\r\n shooter.style.setProperty('--shooter-counter', bullet_number)\r\n }\r\n }, () => bullet)\r\n })\r\n })\r\n\r\n counter_buttons.forEach(cb => {\r\n cb.node.addEventListener('click', () => {\r\n next(() => {\r\n counter = Object(_st_utils__WEBPACK_IMPORTED_MODULE_1__[\"maxmin\"])(counter + cb.value, bullets.length, 1)\r\n shooter.dataset.shooterCounter = counter\r\n shooter.style.setProperty('--shooter-counter', counter)\r\n }, () => bullets[counter - 1])\r\n })\r\n })\r\n\r\n\r\n addEventListener('resize', resize)\r\n })\r\n}\r\n\r\n/* harmony default export */ __webpack_exports__[\"default\"] = ({ initialize });\n\n//# sourceURL=webpack:///./src/01_js/shooter.js?"); /***/ }), /***/ "./src/01_js/sslider.js": /*!******************************!*\ !*** ./src/01_js/sslider.js ***! \******************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _st_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./st/utils */ \"./src/01_js/st/utils.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ \"./src/01_js/utils.js\");\n\r\n\r\n\r\nfunction initialize() {\r\n [...document.querySelectorAll('[data-sslider]')].map(slider => {\r\n const medias = slider.dataset.sslider.split(';').map(m => m.trim()).filter(m => !!m).map(m => {\r\n const splited = m.split('=>').map(s => s.trim())\r\n const check = `(${splited[0]})`\r\n const limiter = +splited[1]\r\n\r\n return { check, limiter }\r\n })\r\n\r\n const list = slider.querySelector('[data-sslider-list]')\r\n const minus_button = slider.querySelector('[data-sslider-minus-button]')\r\n const plus_button = slider.querySelector('[data-sslider-plus-button]')\r\n const number_buttons = slider.querySelectorAll('[data-sslider-number-button]')\r\n let data_holder = !!slider.dataset.ssliderDataHolder ? document.querySelector(slider.dataset.ssliderDataHolder) : null\r\n data_holder = data_holder ? data_holder : slider\r\n let disable = !!slider.dataset.ssliderDisable ? { media: `(${slider.dataset.ssliderDisable})`, status: true } : { media: `(max-width: 0px)`, status: true }\r\n\r\n const length = slider.querySelectorAll('[data-sslider-item]').length\r\n let limiter = 1\r\n let counter = 0\r\n let prev_counter = -1\r\n\r\n let minus_button_listener, plus_button_listener, number_buttons_listener, list_listener\r\n\r\n resize()\r\n addEventListener('resize', resize)\r\n\r\n function resize() {\r\n if (matchMedia(disable.media).matches) {\r\n if (!disable.status) unlisten()\r\n disable.status = true\r\n } else {\r\n medias.forEach(m => matchMedia(m.check).matches && (limiter = m.limiter))\r\n Object(_utils__WEBPACK_IMPORTED_MODULE_1__[\"setProp\"])(data_holder, 'sslider-length', length)\r\n Object(_utils__WEBPACK_IMPORTED_MODULE_1__[\"setProp\"])(data_holder, 'sslider-length-limit', length - limiter)\r\n\r\n if (disable.status) {\r\n listen()\r\n disable.status = false\r\n }\r\n }\r\n }\r\n\r\n swipe(0)\r\n\r\n function listen() {\r\n if (minus_button && plus_button) {\r\n minus_button_listener = minus_button.addEventListener('click', (event) => {\r\n if(event.currentTarget.classList.contains('h-assortment__four-step-button')) {\r\n swipe(-4)\r\n } else {\r\n swipe(-1)\r\n } \r\n })\r\n plus_button_listener = plus_button.addEventListener('click', (event) => {\r\n if(event.currentTarget.classList.contains('h-assortment__four-step-button')) {\r\n swipe(4)\r\n } else {\r\n swipe(1)\r\n } \r\n })\r\n }\r\n\r\n if (number_buttons.length) {\r\n number_buttons_listener = Object(_utils__WEBPACK_IMPORTED_MODULE_1__[\"on\"])(number_buttons, 'click', (e) => {\r\n const number = +e.currentTarget.dataset.ssliderNumberButton - 1\r\n swipe(number, true)\r\n })\r\n }\r\n\r\n list_listener = Object(_utils__WEBPACK_IMPORTED_MODULE_1__[\"on\"])([list], 'mousedown touchstart', grab)\r\n }\r\n\r\n function unlisten() {\r\n minus_button_listener && minus_button_listener()\r\n plus_button_listener && plus_button_listener()\r\n number_buttons_listener && number_buttons_listener()\r\n list_listener && list_listener()\r\n }\r\n\r\n function swipe(v, t2) {\r\n if (t2) {\r\n counter = Object(_st_utils__WEBPACK_IMPORTED_MODULE_0__[\"maxmin\"])(v, length - limiter, 0)\r\n } else {\r\n counter = Object(_st_utils__WEBPACK_IMPORTED_MODULE_0__[\"maxmin\"])(counter + v, length - limiter, 0)\r\n }\r\n\r\n if (prev_counter === counter) return\r\n prev_counter = counter\r\n\r\n data_holder.dataset.ssliderCounter = counter + 1\r\n\r\n Object(_utils__WEBPACK_IMPORTED_MODULE_1__[\"setProp\"])(data_holder, 'sslider-counter', counter)\r\n\r\n if (counter == length - limiter) {\r\n slider.classList.add('sslider-max')\r\n Object(_utils__WEBPACK_IMPORTED_MODULE_1__[\"setProp\"])(data_holder, 'sslider-max', 1)\r\n }\r\n else {\r\n slider.classList.remove('sslider-max')\r\n Object(_utils__WEBPACK_IMPORTED_MODULE_1__[\"setProp\"])(data_holder, 'sslider-max', 0)\r\n }\r\n\r\n if (counter == 0) {\r\n slider.classList.add('sslider-min')\r\n Object(_utils__WEBPACK_IMPORTED_MODULE_1__[\"setProp\"])(data_holder, 'sslider-min', 1)\r\n }\r\n else {\r\n slider.classList.remove('sslider-min')\r\n Object(_utils__WEBPACK_IMPORTED_MODULE_1__[\"setProp\"])(data_holder, 'sslider-min', 0)\r\n }\r\n }\r\n\r\n function grab(e) {\r\n\r\n const start_point = e.type === 'touchstart' ? e.touches[0].clientX : e.clientX\r\n let end_point = 0\r\n\r\n const move_listener = Object(_utils__WEBPACK_IMPORTED_MODULE_1__[\"on\"])([window], 'mousemove touchmove', move)\r\n const stop_listener = Object(_utils__WEBPACK_IMPORTED_MODULE_1__[\"on\"])([window], 'mouseup touchend', stop)\r\n\r\n function move(e) {\r\n end_point = e.type === 'touchmove' ? e.touches[0].clientX : e.clientX\r\n }\r\n\r\n function stop() {\r\n move_listener()\r\n stop_listener()\r\n\r\n if (end_point === 0) return\r\n\r\n if (end_point > start_point && Math.abs(start_point - end_point) > 50) {\r\n swipe(-1)\r\n }\r\n\r\n if (end_point < start_point && Math.abs(start_point - end_point) > 50) {\r\n swipe(1)\r\n }\r\n }\r\n }\r\n })\r\n}\r\n\r\n/* harmony default export */ __webpack_exports__[\"default\"] = ({ initialize });\n\n//# sourceURL=webpack:///./src/01_js/sslider.js?"); /***/ }), /***/ "./src/01_js/st/_lazy-elements.js": /*!****************************************!*\ !*** ./src/01_js/st/_lazy-elements.js ***! \****************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_utils.js */ \"./src/01_js/st/_utils.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils.js */ \"./src/01_js/st/utils.js\");\n\r\n\r\n\r\n/* harmony default export */ __webpack_exports__[\"default\"] = (function (lazy_offset, webp_supported) {\r\n const elements = [...document.querySelectorAll('[data-st-lazy]')].map((element, i) => {\r\n const from = Object(_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"getElementSettingValueOrNode\"])(element, 'data-st-lazy-from', element)\r\n let medias = Object(_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"splitMapTrimFilter\"])(element.dataset.stLazy, ';')\r\n medias = medias.map(line => {\r\n const splitted_line = Object(_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"splitMapTrimFilter\"])(line, '=>')\r\n const media_check = `(${splitted_line[0]})`\r\n\r\n const image_types = Object(_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"splitMapTrimFilter\"])(splitted_line[1], ',')\r\n const common_image_path = image_types[0]\r\n const webp_image_path = image_types[1]\r\n\r\n const image_path = webp_supported && !!webp_image_path ? webp_image_path : common_image_path\r\n if (!!!image_path) console.error('no paths for media: ' + media_check + ' found')\r\n\r\n return {\r\n check: media_check,\r\n path: image_path,\r\n }\r\n })\r\n\r\n return {\r\n node: element,\r\n from,\r\n medias,\r\n loaded: false,\r\n prev_check: '',\r\n\r\n load() {\r\n const image = this.medias.find(media => matchMedia(media.check).matches)\r\n if (!image || this.prev_check == image.check) return\r\n if (this.node.tagName == 'IMG') this.node.src = image.path\r\n else this.node.style.backgroundImage = `url(${image.path})`\r\n\r\n this.loaded = true\r\n this.prev_check = image.check\r\n },\r\n\r\n check(lazy_offset) {\r\n let { top, bottom } = this.from.getBoundingClientRect()\r\n const extra = lazy_offset * innerHeight\r\n top += scrollY - innerHeight + extra\r\n return scrollY >= top && scrollY <= bottom + scrollY + innerHeight * 2 + extra\r\n }\r\n }\r\n })\r\n\r\n return {\r\n _elements: [...elements],\r\n elements,\r\n lazy_offset,\r\n\r\n check(s) {\r\n if (this.elements.length) {\r\n for (let i = this.elements.length - 1; i >= 0; i--) {\r\n const element = this.elements[i]\r\n element.check(this.lazy_offset)\r\n\r\n if (element.check(this.lazy_offset)) {\r\n element.loaded = true\r\n element.load()\r\n this.elements.splice(i, 1)\r\n }\r\n }\r\n }\r\n },\r\n\r\n resize() {\r\n this._elements.forEach(element => {\r\n if (element.loaded) {\r\n element.load()\r\n }\r\n })\r\n\r\n this.check()\r\n }\r\n }\r\n});\n\n//# sourceURL=webpack:///./src/01_js/st/_lazy-elements.js?"); /***/ }), /***/ "./src/01_js/st/_parallax-elements.js": /*!********************************************!*\ !*** ./src/01_js/st/_parallax-elements.js ***! \********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils.js */ \"./src/01_js/st/utils.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_utils.js */ \"./src/01_js/st/_utils.js\");\n\r\n\r\n\r\n/* harmony default export */ __webpack_exports__[\"default\"] = (function (common_ease, stop_elements) {\r\n const elements = [...document.querySelectorAll('[data-st-plx-element]')].map((element, i) => {\r\n\r\n const _length = Object(_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"getElementSettingValueOrNode\"])(element, 'data-st-length', 1)\r\n const length_reverse = element.hasAttribute('data-st-length-reverse') ? -1 : 1\r\n const length_multiply = Object(_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"getStandartElementSetting\"])(element, 'data-st-length-multiply', 1)\r\n const _offset = Object(_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"getElementSettingValueOrNode\"])(element, 'data-st-offset', 0)\r\n const offset_reverse = element.hasAttribute('data-st-offset-reverse') ? -1 : 1\r\n\r\n const effect = Object(_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"getStandartElementSetting\"])(element, 'data-st-effect', null)\r\n const effect_target = Object(_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"getElementSettingValueOrNode\"])(element, 'data-st-effect-target', element)\r\n const no_var = element.hasAttribute('data-st-no-var')\r\n\r\n const ease = Object(_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"getStandartElementSetting\"])(element, 'data-st-ease', 0.1)\r\n const name = Object(_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"getStandartElementSetting\"])(element, 'data-st-plx-element', `st-plx-element-${i}`)\r\n const var_name = '--' + name\r\n const data_holder = Object(_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"getElementSettingValueOrNode\"])(element, 'data-st-data-holder', element)\r\n let dependencies = element.hasAttribute('data-st-dependencies') ? [...document.querySelectorAll(element.dataset.stDependencies)] : null\r\n if (dependencies) dependencies = dependencies.map(dep => ({ node: dep, passed: false }))\r\n const dependency_offset = Object(_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"getStandartElementSetting\"])(element, 'data-st-dependency-offset', 0.5)\r\n\r\n const stop_before_name = Object(_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"getStandartElementSetting\"])(element, 'data-st-stop-before', null)\r\n const stop_before = stop_elements.elements.find(stop => stop.name == stop_before_name)\r\n\r\n return {\r\n node: element,\r\n\r\n start: 0,\r\n end: 0,\r\n\r\n length: 0,\r\n offset: 0,\r\n _length,\r\n _offset,\r\n length_reverse,\r\n length_multiply,\r\n offset_reverse,\r\n stop_before,\r\n\r\n ease: ease ? ease : common_ease,\r\n\r\n name,\r\n var_name,\r\n data_holder,\r\n\r\n dependencies,\r\n dependency_offset,\r\n active_dependence: 0,\r\n\r\n effect,\r\n effect_target,\r\n no_var,\r\n\r\n in_view_1: false,\r\n in_view_2: false,\r\n end_timeout: null,\r\n\r\n active_value: [0, 0],\r\n\r\n resize() {\r\n const cumulative_top = Object(_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"cumulativeTop\"])(element)\r\n const stop_before = this.stop_before ? this.stop_before.length + this.stop_before.length_before : 0\r\n\r\n this.length = _length instanceof Element ? _length.offsetHeight : _length * innerHeight\r\n this.length *= this.length_reverse\r\n this.length += this.node.offsetHeight\r\n this.length *= this.length_multiply\r\n\r\n this.offset = _offset instanceof Element ? _offset.offsetHeight : _offset * innerHeight\r\n this.offset *= this.offset_reverse\r\n\r\n this.start = cumulative_top + this.offset - innerHeight + stop_before\r\n this.end = this.start + this.length\r\n },\r\n\r\n setActiveValue(scroll_value) {\r\n this.active_value[0] = scroll_value - this.start\r\n },\r\n\r\n update() {\r\n if (!this.no_var) {\r\n Object(_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"simpleEasing\"])(this.active_value, this.ease)\r\n let value = 1 / this.length * this.active_value[1]\r\n value = Object(_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"round\"])(value, 5)\r\n this.data_holder.style.setProperty(this.var_name, value)\r\n }\r\n\r\n if (this.dependencies) {\r\n this.dependencies.forEach((dep, i) => {\r\n i += 1\r\n\r\n const dep_rect = dep.node.getBoundingClientRect()\r\n const this_rect = this.node.getBoundingClientRect()\r\n\r\n let height = -this_rect.height * this.dependency_offset\r\n\r\n if (!dep.passed && this_rect.bottom + height > dep_rect.top) {\r\n dep.passed = true\r\n this.active_dependence = i\r\n this.data_holder.setAttribute('data-' + this.name, this.active_dependence)\r\n } else if (dep.passed && this_rect.bottom + height < dep_rect.bottom) {\r\n dep.passed = false\r\n this.active_dependence = i\r\n this.data_holder.setAttribute('data-' + this.name, this.active_dependence)\r\n }\r\n })\r\n }\r\n },\r\n\r\n check(scroll_value, inViewCallback, outOfViewCallback) {\r\n // В поле зрения\r\n if (!this.in_view_1 && scroll_value > this.start && scroll_value < this.end) {\r\n if (this.effect) this.effect_target.classList.add(this.effect)\r\n clearTimeout(this.end_timeout)\r\n this.in_view_1 = true\r\n this.in_view_2 = true\r\n inViewCallback(this)\r\n\r\n // Вне поля зрения\r\n } else if (this.in_view_1 && (scroll_value < this.start || scroll_value > this.end)) {\r\n if (this.effect) this.effect_target.classList.remove(this.effect)\r\n\r\n this.in_view_1 = false\r\n outOfViewCallback(this)\r\n }\r\n\r\n\r\n if (!this.no_var) {\r\n // В поле зрения\r\n if (this.in_view_1) {\r\n this.setActiveValue(scroll_value)\r\n\r\n // Вне поле зрения но ещё тикает таймер\r\n } else if (!this.in_view_1 && this.in_view_2) {\r\n if (scroll_value > this.end) this.setActiveValue(this.end)\r\n else if (scroll_value < this.start) this.setActiveValue(this.start)\r\n }\r\n }\r\n }\r\n }\r\n })\r\n\r\n return {\r\n elements,\r\n resize() {\r\n this.elements.forEach(el => el.resize())\r\n },\r\n\r\n resetVars() {\r\n this.elements.forEach(el => {\r\n if (el.no_var) return\r\n\r\n el.active_value[0] = el.active_value[1] = 0\r\n el.data_holder.style.setProperty(el.var_name, 0)\r\n })\r\n },\r\n\r\n checkVars(scroll_value) {\r\n this.elements.forEach(el => {\r\n if (scroll_value > el.start) {\r\n el.effect_target.classList.add(el.effect)\r\n\r\n if (!el.no_var) {\r\n el.active_value[0] = el.active_value[1] = el.end - el.start\r\n el.data_holder.style.setProperty(el.var_name, 1)\r\n }\r\n }\r\n })\r\n },\r\n\r\n check(scroll_value, inViewCallback, outOfViewCallback) {\r\n this.elements.forEach(el => el.check(scroll_value, inViewCallback, outOfViewCallback))\r\n }\r\n }\r\n});\n\n//# sourceURL=webpack:///./src/01_js/st/_parallax-elements.js?"); /***/ }), /***/ "./src/01_js/st/_stop-elements.js": /*!****************************************!*\ !*** ./src/01_js/st/_stop-elements.js ***! \****************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils.js */ \"./src/01_js/st/utils.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_utils.js */ \"./src/01_js/st/_utils.js\");\n\r\n\r\n\r\n/* harmony default export */ __webpack_exports__[\"default\"] = (function (common_ease) {\r\n const elements = [...document.querySelectorAll('[data-st-stop-element]')].map((element, i) => {\r\n\r\n const _length = Object(_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"getElementSettingValueOrNode\"])(element, 'data-st-length', 1)\r\n const length_reverse = element.hasAttribute('data-st-length-reverse') ? -1 : 1\r\n\r\n const _offset = Object(_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"getElementSettingValueOrNode\"])(element, 'data-st-offset', 0)\r\n const offset_reverse = element.hasAttribute('data-st-offset-reverse') ? -1 : 1\r\n\r\n const ease = Object(_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"getStandartElementSetting\"])(element, 'data-st-ease', null)\r\n\r\n const name = Object(_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"getStandartElementSetting\"])(element, 'data-st-stop-element', `st-stop-element-${i}`)\r\n const var_name = '--' + name\r\n const data_holder = Object(_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"getElementSettingValueOrNode\"])(element, 'data-st-data-holder', element)\r\n\r\n const no_var = element.hasAttribute('data-st-no-var')\r\n\r\n return {\r\n node: element,\r\n\r\n start: 0,\r\n end: 0,\r\n\r\n length: 0,\r\n offset: 0,\r\n _length,\r\n _offset,\r\n length_reverse,\r\n offset_reverse,\r\n length_before: 0,\r\n ease: ease ? ease : common_ease,\r\n\r\n name,\r\n var_name,\r\n data_holder,\r\n no_var,\r\n\r\n in_view_1: false,\r\n in_view_2: false,\r\n end_timeout: null,\r\n\r\n active_value: [0, 0],\r\n\r\n preresize() {\r\n this.length = _length instanceof Element ? _length.offsetHeight : _length * innerHeight\r\n this.length *= this.length_reverse\r\n\r\n this.offset = _offset instanceof Element ? _offset.offsetHeight : _offset * innerHeight\r\n this.offset *= this.offset_reverse\r\n\r\n return this.length\r\n },\r\n\r\n resize(length_before) {\r\n const cumulative_top = Object(_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"cumulativeTop\"])(element)\r\n this.length_before = length_before - this.length\r\n this.start = cumulative_top + this.length_before + this.offset\r\n this.end = this.start + this.length\r\n },\r\n\r\n setActiveValue(scroll_value) {\r\n this.active_value[0] = scroll_value - this.start\r\n },\r\n\r\n update() {\r\n Object(_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"simpleEasing\"])(this.active_value, this.ease, 6)\r\n let value = 1 / this.length * this.active_value[1]\r\n value = Object(_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"round\"])(value, 6)\r\n this.data_holder.style.setProperty(this.var_name, value)\r\n },\r\n\r\n check(scroll_value, inViewCallback, inViewCallbackOnce, outOfViewCallback) {\r\n if (scroll_value > this.start && scroll_value < this.end) {\r\n inViewCallback(this)\r\n this.setActiveValue(scroll_value)\r\n\r\n if (!this.in_view_1) {\r\n clearTimeout(this.end_timeout)\r\n this.in_view_1 = true\r\n this.in_view_2 = true\r\n inViewCallbackOnce(this)\r\n }\r\n\r\n } else if (this.in_view_1 && (scroll_value < this.start || scroll_value > this.end)) {\r\n this.in_view_1 = false\r\n outOfViewCallback(this)\r\n }\r\n\r\n if (!this.no_var && !this.in_view_1 && this.in_view_2) {\r\n if (scroll_value > this.end) this.setActiveValue(this.end)\r\n else if (scroll_value < this.start) this.setActiveValue(this.start)\r\n }\r\n }\r\n }\r\n })\r\n\r\n return {\r\n elements,\r\n resize() {\r\n let length_before = 0\r\n this.elements.forEach(el => {\r\n length_before += el.preresize()\r\n el.resize(length_before)\r\n })\r\n },\r\n\r\n resetVars() {\r\n this.elements.forEach(el => {\r\n if (el.no_var) return\r\n\r\n el.active_value[0] = el.active_value[1] = 0\r\n el.data_holder.style.setProperty(el.var_name, 0)\r\n })\r\n },\r\n\r\n checkVars(scroll_value) {\r\n this.elements.forEach(el => {\r\n if (el.no_var) return\r\n\r\n if (scroll_value > el.start) {\r\n el.active_value[0] = el.active_value[1] = el.end - el.start\r\n el.data_holder.style.setProperty(el.var_name, 1)\r\n\r\n } else if (scroll_value == 0) {\r\n el.active_value[0] = el.active_value[1] = 0\r\n el.data_holder.style.setProperty(el.var_name, 0)\r\n }\r\n })\r\n },\r\n check(scroll_value, inViewCallback, inViewCallbackOnce, outOfViewCallback) {\r\n this.elements.forEach(el => el.check(scroll_value, inViewCallback, inViewCallbackOnce, outOfViewCallback))\r\n }\r\n }\r\n});\n\n//# sourceURL=webpack:///./src/01_js/st/_stop-elements.js?"); /***/ }), /***/ "./src/01_js/st/_utils.js": /*!********************************!*\ !*** ./src/01_js/st/_utils.js ***! \********************************/ /*! exports provided: setRequiredSetting, setSecondarySetting, getStandartElementSetting, getElementSettingValueOrNode */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"setRequiredSetting\", function() { return setRequiredSetting; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"setSecondarySetting\", function() { return setSecondarySetting; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getStandartElementSetting\", function() { return getStandartElementSetting; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getElementSettingValueOrNode\", function() { return getElementSettingValueOrNode; });\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils.js */ \"./src/01_js/st/utils.js\");\n\r\n\r\nfunction setRequiredSetting(state, option_name, options) {\r\n const option = options[option_name]\r\n\r\n if (!!option) {\r\n const element = document.querySelector(option)\r\n if (element instanceof Element) {\r\n state[option_name] = element\r\n } else {\r\n return `scroll tools => option => \"${option_name}\" => value => \"${option}\" => not a valid selector`\r\n }\r\n } else {\r\n return `scroll tools => option => \"${option_name}\" => not found`\r\n }\r\n}\r\n\r\nfunction setSecondarySetting(state, option_name, options, dflt) {\r\n const option = options[option_name]\r\n\r\n if (!!option) {\r\n state[option_name] = option\r\n } else {\r\n state[option_name] = dflt\r\n }\r\n}\r\n\r\nfunction getStandartElementSetting(element, attribute, dflt) {\r\n const match = element.getAttribute(attribute)\r\n return match ? match : dflt\r\n}\r\n\r\nfunction getElementSettingValueOrNode(element, attribute, dflt) {\r\n const match = element.getAttribute(attribute)\r\n let attribute_value = match ? match : null\r\n\r\n if (attribute_value) {\r\n const is_numeric = Object(_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"isNumeric\"])(attribute_value)\r\n if (is_numeric) {\r\n return +attribute_value\r\n\r\n } else {\r\n attribute_value = document.querySelector(attribute_value)\r\n if (attribute_value instanceof Element) {\r\n return attribute_value\r\n } else {\r\n return dflt\r\n }\r\n }\r\n } else {\r\n return dflt\r\n }\r\n}\n\n//# sourceURL=webpack:///./src/01_js/st/_utils.js?"); /***/ }), /***/ "./src/01_js/st/index.js": /*!*******************************!*\ !*** ./src/01_js/st/index.js ***! \*******************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _loop_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./loop.js */ \"./src/01_js/st/loop.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_utils.js */ \"./src/01_js/st/_utils.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils.js */ \"./src/01_js/st/utils.js\");\n/* harmony import */ var _parallax_elements_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./_parallax-elements.js */ \"./src/01_js/st/_parallax-elements.js\");\n/* harmony import */ var _stop_elements_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./_stop-elements.js */ \"./src/01_js/st/_stop-elements.js\");\n/* harmony import */ var _lazy_elements_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./_lazy-elements.js */ \"./src/01_js/st/_lazy-elements.js\");\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n// ...\r\nconst state = {}\r\n\r\n// ...\r\nstate.update = function () {\r\n Object(_utils_js__WEBPACK_IMPORTED_MODULE_2__[\"simpleEasing\"])(this.scroll_value, this.ease)\r\n Object(_utils_js__WEBPACK_IMPORTED_MODULE_2__[\"translate3d\"])(this.scrollable, 0, -this.scroll_value[1] + 'px')\r\n\r\n for (let member in this.parallax_elements_in_loop) {\r\n const element = this.parallax_elements_in_loop[member]\r\n element.update()\r\n }\r\n\r\n for (let member in this.stops_elements_in_loop) {\r\n const element = this.stops_elements_in_loop[member]\r\n element.update()\r\n }\r\n}\r\n\r\n// ...\r\nstate.scroll = function () {\r\n if (this.activity.scroll) {\r\n const sy = scrollY * this.speed\r\n\r\n if (sy == 0) {\r\n this.stop_elements.resetVars()\r\n this.parallax_elements.resetVars()\r\n }\r\n\r\n this.parallax_elements.check(\r\n sy,\r\n // В поле зрения (один раз)\r\n element => this.parallax_elements_in_loop[element.name] = element,\r\n // Вне поля зрения (один раз)\r\n element => {\r\n element.end_timeout = setTimeout(() => {\r\n element.in_view_2 = false\r\n !element.onlyEffect && delete this.parallax_elements_in_loop[element.name]\r\n }, 3000)\r\n }\r\n )\r\n\r\n\r\n let stopped = false\r\n this.stop_elements.check(\r\n sy,\r\n // В поле зрения \r\n element => {\r\n stopped = true\r\n state.scroll_value[0] = element.start - element.length_before\r\n },\r\n // В поле зрения (один раз)\r\n element => {\r\n !element.no_var && (this.stops_elements_in_loop[element.name] = element)\r\n },\r\n // Вне поля зрения (один раз)\r\n element => {\r\n if (element.no_var) return\r\n element.end_timeout = setTimeout(() => {\r\n element.in_view_2 = false\r\n delete this.stops_elements_in_loop[element.name]\r\n }, 3000)\r\n }\r\n )\r\n\r\n if (!stopped) {\r\n const extra = state.stop_elements.elements.reduce((acc, curr) => acc += sy > curr.start ? curr.length : 0, 0)\r\n state.scroll_value[0] = sy - extra\r\n }\r\n }\r\n\r\n if (this.lazy_elements.elements.length) this.lazy_elements.check()\r\n}\r\n\r\n// ...\r\nstate.resize = function (another_one) {\r\n for (let media of this.disable_media) {\r\n if ((media === '(mobile)' && Object(_utils_js__WEBPACK_IMPORTED_MODULE_2__[\"isMobile\"])()) || (media !== '(mobile)' && matchMedia(media).matches)) {\r\n this.activity._scroll = false;\r\n break;\r\n } else {\r\n this.activity._scroll = true;\r\n }\r\n }\r\n\r\n const updateElements = () => {\r\n this.maintainPlaceholder()\r\n this.stop_elements.resize()\r\n this.calcTotalStopsLength()\r\n this.lazy_elements.resize()\r\n this.parallax_elements.resize()\r\n }\r\n\r\n const mainResize = (cb) => {\r\n this.stop_elements.resize()\r\n this.parallax_elements.resize()\r\n this.calcTotalStopsLength()\r\n this.maintainPlaceholder()\r\n\r\n setTimeout(() => {\r\n this.stop_elements.checkVars(scrollY * this.speed)\r\n this.parallax_elements.checkVars(scrollY * this.speed)\r\n\r\n this.lazy_elements.resize()\r\n this.scroll_value = [scrollY, scrollY]\r\n\r\n cb && cb()\r\n }, 0)\r\n }\r\n\r\n if (this.activity._scroll && !this.activity.scroll) {\r\n this.activity.scroll = true\r\n this.prepareApp()\r\n this.preparePlaceholder()\r\n mainResize(() => _loop_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].add('$$scroll$$', () => this.update()))\r\n\r\n } else if (this.activity._scroll && this.activity.scroll) {\r\n if (another_one) mainResize(() => setTimeout(() => this.scroll(), 100))\r\n else updateElements()\r\n } else if (!this.activity._scroll && this.activity.scroll) {\r\n this.activity.scroll = false\r\n state.reset()\r\n _loop_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].remove('$$scroll$$')\r\n } else if (!this.activity._scroll && !this.activity.scroll && this.lazy_elements._elements.length) {\r\n this.lazy_elements.resize()\r\n }\r\n\r\n if (!this.scroll_listener) {\r\n addEventListener('scroll', this.scroll.bind(this))\r\n this.scroll_listener = true\r\n setTimeout(() => this.scroll(), 100)\r\n }\r\n}\r\n\r\n// ...\r\n\r\nstate.reset = function () {\r\n this.app.style.position = ''\r\n this.app.style.left = ''\r\n this.app.style.top = ''\r\n this.app.style.width = ''\r\n this.app.style.height = ''\r\n this.scrollable.style.transform = ''\r\n document.body.style.height = ''\r\n document.body.removeChild(this.placeholder)\r\n}\r\n\r\n// ...\r\nstate.prepareApp = function () {\r\n this.app.style.position = 'fixed'\r\n this.app.style.left = '0'\r\n this.app.style.top = '0'\r\n this.app.style.width = '100%'\r\n this.app.style.height = '100%'\r\n document.body.style.height = 'unset'\r\n}\r\n\r\n// ...\r\nstate.preparePlaceholder = function () {\r\n state.placeholder = document.createElement('div')\r\n state.placeholder.innerHTML = ' '\r\n state.placeholder.style.width = '100%'\r\n document.body.appendChild(state.placeholder)\r\n}\r\n\r\n// ...\r\nstate.calcTotalStopsLength = function () {\r\n this.total_stops_length = this.stop_elements.elements.reduce((acc, curr) => acc += curr.length, 0)\r\n}\r\n\r\n// ...\r\nstate.maintainPlaceholder = function () {\r\n const minus_placeholders = this.placeholders.reduce((acc, cur) => acc += cur.offsetHeight, 0)\r\n this.placeholder.style.height = (this.scrollable.offsetHeight + this.total_stops_length + (innerHeight * (this.speed - 1)) - minus_placeholders) / this.speed + 'px'\r\n}\r\n\r\nstate.initialize = function (options) {\r\n\r\n // Необходимые настройки\r\n let err = Object(_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"setRequiredSetting\"])(this, 'app', options)\r\n if (err) return console.error(err)\r\n\r\n err = Object(_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"setRequiredSetting\"])(this, 'scrollable', options)\r\n\r\n if (err) {\r\n let elements = !!options.make_scrollable ? Object(_utils_js__WEBPACK_IMPORTED_MODULE_2__[\"splitMapTrimFilter\"])(options.make_scrollable, ' ') : null\r\n if (!elements.length) return\r\n\r\n this.scrollable = document.createElement('div')\r\n elements.forEach(el => this.scrollable.appendChild(document.querySelector(el)))\r\n this.app.appendChild(this.scrollable)\r\n }\r\n\r\n // Опциональные настройки\r\n Object(_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"setSecondarySetting\"])(this, 'ease', options, 0.1)\r\n Object(_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"setSecondarySetting\"])(this, 'speed', options, 2)\r\n Object(_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"setSecondarySetting\"])(this, 'scrollbar', options, true)\r\n Object(_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"setSecondarySetting\"])(this, 'disable_media', options, 'mobile, min-width: 0px')\r\n Object(_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"setSecondarySetting\"])(this, 'lazy_offset', options, -1)\r\n\r\n\r\n // Стандарные настройки\r\n this.disable_media = Object(_utils_js__WEBPACK_IMPORTED_MODULE_2__[\"splitMapTrimFilter\"])(this.disable_media, ',').map(m => `(${m})`)\r\n this.webp_supported = Object(_utils_js__WEBPACK_IMPORTED_MODULE_2__[\"checkWebpSupport\"])()\r\n this.scroll_value = [0, 0]\r\n this.placeholder = null\r\n this.parallax_elements_in_loop = {}\r\n this.stops_elements_in_loop = {}\r\n this.activity = {\r\n _scroll: false,\r\n scroll: false,\r\n lazy: false,\r\n }\r\n\r\n // Элементы\r\n this.stop_elements = Object(_stop_elements_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(this.ease,)\r\n this.parallax_elements = Object(_parallax_elements_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(this.ease, this.stop_elements)\r\n this.lazy_elements = Object(_lazy_elements_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.lazy_offset, this.webp_supported)\r\n this.placeholders = [...document.querySelectorAll('[data-st-placeholder]')]\r\n this.placeholders.forEach(placeholder => new ResizeObserver(this.resize.bind(this)).observe(placeholder))\r\n\r\n // Запуск\r\n window.addEventListener('resize', this.resize.bind(this))\r\n this.resize()\r\n\r\n return this.resize.bind(this)\r\n}\r\n\r\n/* harmony default export */ __webpack_exports__[\"default\"] = (state.initialize.bind(state));\r\n\r\n\n\n//# sourceURL=webpack:///./src/01_js/st/index.js?"); /***/ }), /***/ "./src/01_js/st/loop.js": /*!******************************!*\ !*** ./src/01_js/st/loop.js ***! \******************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\nlet frame_id, updated = {}, length = 0\r\n\r\nfunction update(t) {\r\n for (let member in updated) updated[member](t)\r\n if (length > 0) frame_id = requestAnimationFrame(update)\r\n}\r\n\r\nfunction add(name, fn) {\r\n updated[name] = fn\r\n\r\n if (length === 0) {\r\n length++\r\n run()\r\n return\r\n }\r\n\r\n length++\r\n}\r\n\r\nfunction remove(name) {\r\n if (!updated[name]) return\r\n\r\n delete updated[name]\r\n length = Math.max(0, length - 1)\r\n if (length === 0) stop()\r\n}\r\n\r\nfunction run() {\r\n stop()\r\n frame_id = requestAnimationFrame(update)\r\n}\r\n\r\nfunction stop() {\r\n cancelAnimationFrame(frame_id)\r\n}\r\n\r\n/* harmony default export */ __webpack_exports__[\"default\"] = ({ add, remove, run, stop });\n\n//# sourceURL=webpack:///./src/01_js/st/loop.js?"); /***/ }), /***/ "./src/01_js/st/utils.js": /*!*******************************!*\ !*** ./src/01_js/st/utils.js ***! \*******************************/ /*! exports provided: maxmin, round, simpleEasing, isMobile, translate3d, checkWebpSupport, cumulativeTop, isNumeric, splitMapTrimFilter */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"maxmin\", function() { return maxmin; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"round\", function() { return round; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"simpleEasing\", function() { return simpleEasing; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isMobile\", function() { return isMobile; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"translate3d\", function() { return translate3d; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"checkWebpSupport\", function() { return checkWebpSupport; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"cumulativeTop\", function() { return cumulativeTop; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isNumeric\", function() { return isNumeric; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"splitMapTrimFilter\", function() { return splitMapTrimFilter; });\nfunction maxmin(value, max, min = 0) {\r\n return Math.max(min, Math.min(value, max))\r\n}\r\n\r\nfunction round(number, places = 3) {\r\n return +number.toFixed(places)\r\n}\r\n\r\nfunction simpleEasing(array, ease_value = 0.1, places = 3) {\r\n array[1] += (array[0] - array[1]) * ease_value\r\n if (places) array[1] = round(array[1], places)\r\n}\r\n\r\nfunction isMobile() {\r\n return /Mobi|Android/i.test(navigator.userAgent)\r\n}\r\n\r\nfunction translate3d(element, x = 0, y = 0, z = 0) {\r\n element.style.transform = `translate3d(${x}, ${y}, ${z})`\r\n}\r\n\r\nfunction checkWebpSupport() {\r\n const elem = document.createElement('canvas')\r\n if (!!(elem.getContext && elem.getContext('2d')))\r\n return elem.toDataURL('image/webp').indexOf('data:image/webp') == 0\r\n return false\r\n}\r\n\r\n\r\n\r\nfunction cumulativeTop(element) {\r\n let top = 0\r\n do {\r\n top += element.offsetTop || 0\r\n element = element.offsetParent\r\n } while (element)\r\n\r\n return top\r\n}\r\n\r\nfunction isNumeric(num) {\r\n return (typeof (num) === 'number' || typeof (num) === \"string\" && num.trim() !== '') && !isNaN(num);\r\n}\r\n\r\nfunction splitMapTrimFilter(arr, sv = ',') {\r\n return arr.split(sv).map(v => v.trim()).filter(v => !!v)\r\n}\n\n//# sourceURL=webpack:///./src/01_js/st/utils.js?"); /***/ }), /***/ "./src/01_js/toggle.js": /*!*****************************!*\ !*** ./src/01_js/toggle.js ***! \*****************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ \"./src/01_js/utils.js\");\n\r\n\r\nfunction initialize() {\r\n document.querySelectorAll('[data-toggle-trigger]').forEach(trigger => {\r\n const target_name = trigger.dataset.toggleTrigger\r\n const target = document.querySelector(`[data-toggle-target=\"${target_name}\"]`)\r\n const listen_outside = trigger.hasAttribute('data-toggle-listen-outside')\r\n let outside_listeners\r\n trigger.addEventListener('click', () => {\r\n outside_listeners && outside_listeners()\r\n target.classList.toggle('toggle-on')\r\n trigger.classList.toggle('toggle-on')\r\n\r\n if (listen_outside) {\r\n outside_listeners = Object(_utils__WEBPACK_IMPORTED_MODULE_0__[\"listenOutside\"])(target, () => {\r\n target.classList.remove('toggle-on')\r\n trigger.classList.remove('toggle-on')\r\n outside_listeners()\r\n })\r\n }\r\n })\r\n })\r\n}\r\n\r\n/* harmony default export */ __webpack_exports__[\"default\"] = ({ initialize });\n\n//# sourceURL=webpack:///./src/01_js/toggle.js?"); /***/ }), /***/ "./src/01_js/utils.js": /*!****************************!*\ !*** ./src/01_js/utils.js ***! \****************************/ /*! exports provided: on, setProp, toCenter, listenOutside */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"on\", function() { return on; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"setProp\", function() { return setProp; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"toCenter\", function() { return toCenter; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"listenOutside\", function() { return listenOutside; });\nfunction on(elements, events, callback, passive = true) {\r\n const se = events.split(' ')\r\n\r\n if (!passive) {\r\n se.forEach(event => elements.forEach(element => element.addEventListener(event, callback, { passive: false })))\r\n } else {\r\n se.forEach(event => elements.forEach(element => element.addEventListener(event, callback)))\r\n }\r\n return () => se.forEach(event => elements.forEach(element => { element.removeEventListener(event, callback) }))\r\n}\r\n\r\nfunction setProp(element, prop, value) {\r\n element.style.setProperty('--' + prop, value)\r\n}\r\n\r\nfunction toCenter(element, notify, prefix = '') {\r\n prefix = !!prefix ? prefix + '-' : ''\r\n notify = notify ? notify : element\r\n const { left, top, width, height } = element.getBoundingClientRect()\r\n\r\n let dx = innerWidth / 2 - left - width / 2\r\n let tx = 1 / innerWidth * dx * 100 + 'vw'\r\n let dy = innerHeight / 2 - top - height / 2\r\n let ty = 1 / innerHeight * dy * 100 + 'vh'\r\n\r\n setProp(notify, prefix + 'center-x', tx)\r\n setProp(notify, prefix + 'center-y', ty)\r\n\r\n return function () {\r\n setProp(notify, prefix + 'center-x', 0)\r\n setProp(notify, prefix + 'center-y', 0)\r\n }\r\n}\r\n\r\nfunction listenOutside(containers, callback) {\r\n if (!Array.isArray(containers)) {\r\n containers = [containers]\r\n }\r\n\r\n let click_listener\r\n let esc_listener\r\n\r\n setTimeout(() => {\r\n\r\n click_listener = on([window], 'click', e => {\r\n containers.forEach(c => {\r\n if (!c.contains(e.target)) {\r\n callback()\r\n click_listener()\r\n esc_listener()\r\n return\r\n }\r\n })\r\n })\r\n\r\n esc_listener = on([window], 'keydown', e => {\r\n if (e.key === 'Escape') {\r\n callback()\r\n click_listener()\r\n esc_listener()\r\n }\r\n })\r\n }, 0)\r\n\r\n return () => {\r\n click_listener()\r\n esc_listener()\r\n }\r\n}\n\n//# sourceURL=webpack:///./src/01_js/utils.js?"); /***/ }), /***/ "./src/01_js/wh.js": /*!*************************!*\ !*** ./src/01_js/wh.js ***! \*************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ \"./src/01_js/utils.js\");\n\r\n\r\nfunction initialize(extra = []) {\r\n const container = document.querySelector('[data-wh-container]');\r\n if (!container) return console.error('wh script initialized but no [data-wh-container] element was found')\r\n\r\n const elements = [...document.querySelectorAll('[data-wh-element]')].map(el => {\r\n const name = el.dataset.whElement\r\n return {\r\n node: el,\r\n name,\r\n }\r\n })\r\n\r\n const resize_triggers = [...document.querySelectorAll('[data-wh-resize-trigger]')].map(t => {\r\n const events = !!t.dataset.whResizeTrigger ? t.dataset.whResizeTrigger : 'click'\r\n return { events, node: t }\r\n })\r\n resize_triggers.forEach(t => t.events.split(' ').map(e => e.trim()).forEach(event => t.node.addEventListener(event, () => setTimeout(() => resize(), 0))))\r\n\r\n for (let i = 1; i < extra.length; i += 2) {\r\n elements.push({\r\n node: extra[i - 1],\r\n name: extra[i]\r\n })\r\n }\r\n\r\n\r\n function resize() {\r\n Object(_utils__WEBPACK_IMPORTED_MODULE_0__[\"setProp\"])(container, 'client-width', document.documentElement.offsetWidth + 'px')\r\n\r\n elements.forEach(element => {\r\n Object(_utils__WEBPACK_IMPORTED_MODULE_0__[\"setProp\"])(container, element.name + '-width', element.node.offsetWidth + 'px')\r\n Object(_utils__WEBPACK_IMPORTED_MODULE_0__[\"setProp\"])(container, element.name + '-height', element.node.offsetHeight + 'px')\r\n })\r\n }\r\n\r\n resize()\r\n addEventListener('resize', resize)\r\n elements.forEach(element => new ResizeObserver(resize).observe(element.node))\r\n}\r\n\r\n/* harmony default export */ __webpack_exports__[\"default\"] = ({ initialize });\n\n//# sourceURL=webpack:///./src/01_js/wh.js?"); /***/ }) /******/ });