This repository has been archived on 2022-02-28. You can view files and clone it, but cannot push or open issues or pull requests.
frontend-styles/public/scripts.js

173 lines
29 KiB
JavaScript

/*
* ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
* This devtool is neither made for production nor for readable output files.
* It uses "eval()" calls to create a separate source file in the browser devtools.
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
* or disable the default devtool with "devtool: false".
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
*/
/******/ (() => { // webpackBootstrap
/******/ var __webpack_modules__ = ({
/***/ "./node_modules/responsive-nav/client/dist/responsive-nav.js":
/*!*******************************************************************!*\
!*** ./node_modules/responsive-nav/client/dist/responsive-nav.js ***!
\*******************************************************************/
/***/ ((module) => {
eval("/*! responsive-nav.js 1.0.39\n * https://github.com/viljamis/responsive-nav.js\n * http://responsive-nav.com\n *\n * Copyright (c) 2015 @viljamis\n * Available under the MIT license\n */\n\n/* global Event */\n(function (document, window, index) {\n // Index is used to keep multiple navs on the same page namespaced\n \"use strict\";\n\n var responsiveNav = function (el, options) {\n var computed = !!window.getComputedStyle;\n /**\n * getComputedStyle polyfill for old browsers\n */\n\n if (!computed) {\n window.getComputedStyle = function (el) {\n this.el = el;\n\n this.getPropertyValue = function (prop) {\n var re = /(\\-([a-z]){1})/g;\n\n if (prop === \"float\") {\n prop = \"styleFloat\";\n }\n\n if (re.test(prop)) {\n prop = prop.replace(re, function () {\n return arguments[2].toUpperCase();\n });\n }\n\n return el.currentStyle[prop] ? el.currentStyle[prop] : null;\n };\n\n return this;\n };\n }\n /* exported addEvent, removeEvent, getChildren, setAttributes, addClass, removeClass, forEach */\n\n /**\n * Add Event\n * fn arg can be an object or a function, thanks to handleEvent\n * read more at: http://www.thecssninja.com/javascript/handleevent\n *\n * @param {element} element\n * @param {event} event\n * @param {Function} fn\n * @param {boolean} bubbling\n */\n\n\n var addEvent = function (el, evt, fn, bubble) {\n if (\"addEventListener\" in el) {\n // BBOS6 doesn't support handleEvent, catch and polyfill\n try {\n el.addEventListener(evt, fn, bubble);\n } catch (e) {\n if (typeof fn === \"object\" && fn.handleEvent) {\n el.addEventListener(evt, function (e) {\n // Bind fn as this and set first arg as event object\n fn.handleEvent.call(fn, e);\n }, bubble);\n } else {\n throw e;\n }\n }\n } else if (\"attachEvent\" in el) {\n // check if the callback is an object and contains handleEvent\n if (typeof fn === \"object\" && fn.handleEvent) {\n el.attachEvent(\"on\" + evt, function () {\n // Bind fn as this\n fn.handleEvent.call(fn);\n });\n } else {\n el.attachEvent(\"on\" + evt, fn);\n }\n }\n },\n\n /**\n * Remove Event\n *\n * @param {element} element\n * @param {event} event\n * @param {Function} fn\n * @param {boolean} bubbling\n */\n removeEvent = function (el, evt, fn, bubble) {\n if (\"removeEventListener\" in el) {\n try {\n el.removeEventListener(evt, fn, bubble);\n } catch (e) {\n if (typeof fn === \"object\" && fn.handleEvent) {\n el.removeEventListener(evt, function (e) {\n fn.handleEvent.call(fn, e);\n }, bubble);\n } else {\n throw e;\n }\n }\n } else if (\"detachEvent\" in el) {\n if (typeof fn === \"object\" && fn.handleEvent) {\n el.detachEvent(\"on\" + evt, function () {\n fn.handleEvent.call(fn);\n });\n } else {\n el.detachEvent(\"on\" + evt, fn);\n }\n }\n },\n\n /**\n * Get the children of any element\n *\n * @param {element}\n * @return {array} Returns matching elements in an array\n */\n getChildren = function (e) {\n if (e.children.length < 1) {\n throw new Error(\"The Nav container has no containing elements\");\n } // Store all children in array\n\n\n var children = []; // Loop through children and store in array if child != TextNode\n\n for (var i = 0; i < e.children.length; i++) {\n if (e.children[i].nodeType === 1) {\n children.push(e.children[i]);\n }\n }\n\n return children;\n },\n\n /**\n * Sets multiple attributes at once\n *\n * @param {element} element\n * @param {attrs} attrs\n */\n setAttributes = function (el, attrs) {\n for (var key in attrs) {\n el.setAttribute(key, attrs[key]);\n }\n },\n\n /**\n * Adds a class to any element\n *\n * @param {element} element\n * @param {string} class\n */\n addClass = function (el, cls) {\n if (el.className.indexOf(cls) !== 0) {\n el.className += \" \" + cls;\n el.className = el.className.replace(/(^\\s*)|(\\s*$)/g, \"\");\n }\n },\n\n /**\n * Remove a class from any element\n *\n * @param {element} element\n * @param {string} class\n */\n removeClass = function (el, cls) {\n var reg = new RegExp(\"(\\\\s|^)\" + cls + \"(\\\\s|$)\");\n el.className = el.className.replace(reg, \" \").replace(/(^\\s*)|(\\s*$)/g, \"\");\n },\n\n /**\n * forEach method that passes back the stuff we need\n *\n * @param {array} array\n * @param {Function} callback\n * @param {scope} scope\n */\n forEach = function (array, callback, scope) {\n for (var i = 0; i < array.length; i++) {\n callback.call(scope, i, array[i]);\n }\n };\n\n var nav,\n opts,\n navToggle,\n styleElement = document.createElement(\"style\"),\n htmlEl = document.documentElement,\n hasAnimFinished,\n isMobile,\n navOpen;\n\n var ResponsiveNav = function (el, options) {\n var i;\n /**\n * Default options\n * @type {Object}\n */\n\n this.options = {\n animate: true,\n // Boolean: Use CSS3 transitions, true or false\n transition: 284,\n // Integer: Speed of the transition, in milliseconds\n label: \"Menu\",\n // String: Label for the navigation toggle\n insert: \"before\",\n // String: Insert the toggle before or after the navigation\n customToggle: \"\",\n // Selector: Specify the ID of a custom toggle\n closeOnNavClick: false,\n // Boolean: Close the navigation when one of the links are clicked\n openPos: \"relative\",\n // String: Position of the opened nav, relative or static\n navClass: \"nav-collapse\",\n // String: Default CSS class. If changed, you need to edit the CSS too!\n navActiveClass: \"js-nav-active\",\n // String: Class that is added to <html> element when nav is active\n jsClass: \"js\",\n // String: 'JS enabled' class which is added to <html> element\n init: function () {},\n // Function: Init callback\n open: function () {},\n // Function: Open callback\n close: function () {} // Function: Close callback\n\n }; // User defined options\n\n for (i in options) {\n this.options[i] = options[i];\n } // Adds \"js\" class for <html>\n\n\n addClass(htmlEl, this.options.jsClass); // Wrapper\n\n this.wrapperEl = el.replace(\"#\", \"\"); // Try selecting ID first\n\n if (document.getElementById(this.wrapperEl)) {\n this.wrapper = document.getElementById(this.wrapperEl); // If element with an ID doesn't exist, use querySelector\n } else if (document.querySelector(this.wrapperEl)) {\n this.wrapper = document.querySelector(this.wrapperEl); // If element doesn't exists, stop here.\n } else {\n throw new Error(\"The nav element you are trying to select doesn't exist\");\n } // Inner wrapper\n\n\n this.wrapper.inner = getChildren(this.wrapper); // For minification\n\n opts = this.options;\n nav = this.wrapper; // Init\n\n this._init(this);\n };\n\n ResponsiveNav.prototype = {\n /**\n * Unattaches events and removes any classes that were added\n */\n destroy: function () {\n this._removeStyles();\n\n removeClass(nav, \"closed\");\n removeClass(nav, \"opened\");\n removeClass(nav, opts.navClass);\n removeClass(nav, opts.navClass + \"-\" + this.index);\n removeClass(htmlEl, opts.navActiveClass);\n nav.removeAttribute(\"style\");\n nav.removeAttribute(\"aria-hidden\");\n removeEvent(window, \"resize\", this, false);\n removeEvent(window, \"focus\", this, false);\n removeEvent(document.body, \"touchmove\", this, false);\n removeEvent(navToggle, \"touchstart\", this, false);\n removeEvent(navToggle, \"touchend\", this, false);\n removeEvent(navToggle, \"mouseup\", this, false);\n removeEvent(navToggle, \"keyup\", this, false);\n removeEvent(navToggle, \"click\", this, false);\n\n if (!opts.customToggle) {\n navToggle.parentNode.removeChild(navToggle);\n } else {\n navToggle.removeAttribute(\"aria-hidden\");\n }\n },\n\n /**\n * Toggles the navigation open/close\n */\n toggle: function () {\n if (hasAnimFinished === true) {\n if (!navOpen) {\n this.open();\n } else {\n this.close();\n }\n }\n },\n\n /**\n * Opens the navigation\n */\n open: function () {\n if (!navOpen) {\n removeClass(nav, \"closed\");\n addClass(nav, \"opened\");\n addClass(htmlEl, opts.navActiveClass);\n addClass(navToggle, \"active\");\n nav.style.position = opts.openPos;\n setAttributes(nav, {\n \"aria-hidden\": \"false\"\n });\n navOpen = true;\n opts.open();\n }\n },\n\n /**\n * Closes the navigation\n */\n close: function () {\n if (navOpen) {\n addClass(nav, \"closed\");\n removeClass(nav, \"opened\");\n removeClass(htmlEl, opts.navActiveClass);\n removeClass(navToggle, \"active\");\n setAttributes(nav, {\n \"aria-hidden\": \"true\"\n }); // If animations are enabled, wait until they finish\n\n if (opts.animate) {\n hasAnimFinished = false;\n setTimeout(function () {\n nav.style.position = \"absolute\";\n hasAnimFinished = true;\n }, opts.transition + 10); // Animations aren't enabled, we can do these immediately\n } else {\n nav.style.position = \"absolute\";\n }\n\n navOpen = false;\n opts.close();\n }\n },\n\n /**\n * Resize is called on window resize and orientation change.\n * It initializes the CSS styles and height calculations.\n */\n resize: function () {\n // Resize watches navigation toggle's display state\n if (window.getComputedStyle(navToggle, null).getPropertyValue(\"display\") !== \"none\") {\n isMobile = true;\n setAttributes(navToggle, {\n \"aria-hidden\": \"false\"\n }); // If the navigation is hidden\n\n if (nav.className.match(/(^|\\s)closed(\\s|$)/)) {\n setAttributes(nav, {\n \"aria-hidden\": \"true\"\n });\n nav.style.position = \"absolute\";\n }\n\n this._createStyles();\n\n this._calcHeight();\n } else {\n isMobile = false;\n setAttributes(navToggle, {\n \"aria-hidden\": \"true\"\n });\n setAttributes(nav, {\n \"aria-hidden\": \"false\"\n });\n nav.style.position = opts.openPos;\n\n this._removeStyles();\n }\n },\n\n /**\n * Takes care of all even handling\n *\n * @param {event} event\n * @return {type} returns the type of event that should be used\n */\n handleEvent: function (e) {\n var evt = e || window.event;\n\n switch (evt.type) {\n case \"touchstart\":\n this._onTouchStart(evt);\n\n break;\n\n case \"touchmove\":\n this._onTouchMove(evt);\n\n break;\n\n case \"touchend\":\n case \"mouseup\":\n this._onTouchEnd(evt);\n\n break;\n\n case \"click\":\n this._preventDefault(evt);\n\n break;\n\n case \"keyup\":\n this._onKeyUp(evt);\n\n break;\n\n case \"focus\":\n case \"resize\":\n this.resize(evt);\n break;\n }\n },\n\n /**\n * Initializes the widget\n */\n _init: function () {\n this.index = index++;\n addClass(nav, opts.navClass);\n addClass(nav, opts.navClass + \"-\" + this.index);\n addClass(nav, \"closed\");\n hasAnimFinished = true;\n navOpen = false;\n\n this._closeOnNavClick();\n\n this._createToggle();\n\n this._transitions();\n\n this.resize();\n /**\n * On IE8 the resize event triggers too early for some reason\n * so it's called here again on init to make sure all the\n * calculated styles are correct.\n */\n\n var self = this;\n setTimeout(function () {\n self.resize();\n }, 20);\n addEvent(window, \"resize\", this, false);\n addEvent(window, \"focus\", this, false);\n addEvent(document.body, \"touchmove\", this, false);\n addEvent(navToggle, \"touchstart\", this, false);\n addEvent(navToggle, \"touchend\", this, false);\n addEvent(navToggle, \"mouseup\", this, false);\n addEvent(navToggle, \"keyup\", this, false);\n addEvent(navToggle, \"click\", this, false);\n /**\n * Init callback here\n */\n\n opts.init();\n },\n\n /**\n * Creates Styles to the <head>\n */\n _createStyles: function () {\n if (!styleElement.parentNode) {\n styleElement.type = \"text/css\";\n document.getElementsByTagName(\"head\")[0].appendChild(styleElement);\n }\n },\n\n /**\n * Removes styles from the <head>\n */\n _removeStyles: function () {\n if (styleElement.parentNode) {\n styleElement.parentNode.removeChild(styleElement);\n }\n },\n\n /**\n * Creates Navigation Toggle\n */\n _createToggle: function () {\n // If there's no toggle, let's create one\n if (!opts.customToggle) {\n var toggle = document.createElement(\"a\");\n toggle.innerHTML = opts.label;\n setAttributes(toggle, {\n \"href\": \"#\",\n \"class\": \"nav-toggle\"\n }); // Determine where to insert the toggle\n\n if (opts.insert === \"after\") {\n nav.parentNode.insertBefore(toggle, nav.nextSibling);\n } else {\n nav.parentNode.insertBefore(toggle, nav);\n }\n\n navToggle = toggle; // There is a toggle already, let's use that one\n } else {\n var toggleEl = opts.customToggle.replace(\"#\", \"\");\n\n if (document.getElementById(toggleEl)) {\n navToggle = document.getElementById(toggleEl);\n } else if (document.querySelector(toggleEl)) {\n navToggle = document.querySelector(toggleEl);\n } else {\n throw new Error(\"The custom nav toggle you are trying to select doesn't exist\");\n }\n }\n },\n\n /**\n * Closes the navigation when a link inside is clicked.\n */\n _closeOnNavClick: function () {\n if (opts.closeOnNavClick) {\n var links = nav.getElementsByTagName(\"a\"),\n self = this;\n forEach(links, function (i, el) {\n addEvent(links[i], \"click\", function () {\n if (isMobile) {\n self.toggle();\n }\n }, false);\n });\n }\n },\n\n /**\n * Prevents the default functionality.\n *\n * @param {event} event\n */\n _preventDefault: function (e) {\n if (e.preventDefault) {\n if (e.stopImmediatePropagation) {\n e.stopImmediatePropagation();\n }\n\n e.preventDefault();\n e.stopPropagation();\n return false; // This is strictly for old IE\n } else {\n e.returnValue = false;\n }\n },\n\n /**\n * On touch start we get the location of the touch.\n *\n * @param {event} event\n */\n _onTouchStart: function (e) {\n if (!Event.prototype.stopImmediatePropagation) {\n this._preventDefault(e);\n }\n\n this.startX = e.touches[0].clientX;\n this.startY = e.touches[0].clientY;\n this.touchHasMoved = false;\n /**\n * Remove mouseup event completely here to avoid\n * double triggering the event.\n */\n\n removeEvent(navToggle, \"mouseup\", this, false);\n },\n\n /**\n * Check if the user is scrolling instead of tapping.\n *\n * @param {event} event\n */\n _onTouchMove: function (e) {\n if (Math.abs(e.touches[0].clientX - this.startX) > 10 || Math.abs(e.touches[0].clientY - this.startY) > 10) {\n this.touchHasMoved = true;\n }\n },\n\n /**\n * On touch end toggle the navigation.\n *\n * @param {event} event\n */\n _onTouchEnd: function (e) {\n this._preventDefault(e);\n\n if (!isMobile) {\n return;\n } // If the user isn't scrolling\n\n\n if (!this.touchHasMoved) {\n // If the event type is touch\n if (e.type === \"touchend\") {\n this.toggle();\n return; // Event type was click, not touch\n } else {\n var evt = e || window.event; // If it isn't a right click, do toggling\n\n if (!(evt.which === 3 || evt.button === 2)) {\n this.toggle();\n }\n }\n }\n },\n\n /**\n * For keyboard accessibility, toggle the navigation on Enter\n * keypress too.\n *\n * @param {event} event\n */\n _onKeyUp: function (e) {\n var evt = e || window.event;\n\n if (evt.keyCode === 13) {\n this.toggle();\n }\n },\n\n /**\n * Adds the needed CSS transitions if animations are enabled\n */\n _transitions: function () {\n if (opts.animate) {\n var objStyle = nav.style,\n transition = \"max-height \" + opts.transition + \"ms\";\n objStyle.WebkitTransition = objStyle.MozTransition = objStyle.OTransition = objStyle.transition = transition;\n }\n },\n\n /**\n * Calculates the height of the navigation and then creates\n * styles which are later added to the page <head>\n */\n _calcHeight: function () {\n var savedHeight = 0;\n\n for (var i = 0; i < nav.inner.length; i++) {\n savedHeight += nav.inner[i].offsetHeight;\n }\n\n var innerStyles = \".\" + opts.jsClass + \" .\" + opts.navClass + \"-\" + this.index + \".opened{max-height:\" + savedHeight + \"px !important} .\" + opts.jsClass + \" .\" + opts.navClass + \"-\" + this.index + \".opened.dropdown-active {max-height:9999px !important}\";\n\n if (styleElement.styleSheet) {\n styleElement.styleSheet.cssText = innerStyles;\n } else {\n styleElement.innerHTML = innerStyles;\n }\n\n innerStyles = \"\";\n }\n };\n /**\n * Return new Responsive Nav\n */\n\n return new ResponsiveNav(el, options);\n };\n\n if ( true && module.exports) {\n module.exports = responsiveNav;\n } else {\n window.responsiveNav = responsiveNav;\n }\n})(document, window, 0);\n\n//# sourceURL=webpack://libregaming-design-system/./node_modules/responsive-nav/client/dist/responsive-nav.js?");
/***/ }),
/***/ "./src/js/app.js":
/*!***********************!*\
!*** ./src/js/app.js ***!
\***********************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _greeting_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./greeting.js */ \"./src/js/greeting.js\");\n/* harmony import */ var responsive_nav__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! responsive-nav */ \"./node_modules/responsive-nav/client/dist/responsive-nav.js\");\n/* harmony import */ var responsive_nav__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(responsive_nav__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _assets_lg_logo_png__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../assets/lg-logo.png */ \"./src/assets/lg-logo.png\");\n/* harmony import */ var _assets_member_panel_example_png__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../assets/member-panel-example.png */ \"./src/assets/member-panel-example.png\");\n\n\n\n\n\nclass App {\n constructor() {\n this.init();\n }\n\n init() {\n let greeting = new _greeting_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]();\n greeting.printToConsole(_greeting_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].SOURCECODE);\n let nav = responsive_nav__WEBPACK_IMPORTED_MODULE_1___default()(\".nav-collapse\", {\n customToggle: \".toggle\",\n jsClass: \"js\"\n });\n }\n\n}\n\nnew App();\n\n//# sourceURL=webpack://libregaming-design-system/./src/js/app.js?");
/***/ }),
/***/ "./src/js/greeting.js":
/*!****************************!*\
!*** ./src/js/greeting.js ***!
\****************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Greeting)\n/* harmony export */ });\nclass Greeting {\n static SOURCECODE = \"Hello. The source code lives via git. Find the repository here:\";\n\n printToConsole(message) {\n console.log(message);\n }\n\n}\n\n//# sourceURL=webpack://libregaming-design-system/./src/js/greeting.js?");
/***/ }),
/***/ "./src/assets/lg-logo.png":
/*!********************************!*\
!*** ./src/assets/lg-logo.png ***!
\********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (__webpack_require__.p + \"assets/lg-logo.png\");\n\n//# sourceURL=webpack://libregaming-design-system/./src/assets/lg-logo.png?");
/***/ }),
/***/ "./src/assets/member-panel-example.png":
/*!*********************************************!*\
!*** ./src/assets/member-panel-example.png ***!
\*********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (__webpack_require__.p + \"assets/member-panel-example.png\");\n\n//# sourceURL=webpack://libregaming-design-system/./src/assets/member-panel-example.png?");
/***/ })
/******/ });
/************************************************************************/
/******/ // The module cache
/******/ var __webpack_module_cache__ = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ var cachedModule = __webpack_module_cache__[moduleId];
/******/ if (cachedModule !== undefined) {
/******/ return cachedModule.exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = __webpack_module_cache__[moduleId] = {
/******/ // no module.id needed
/******/ // no module.loaded needed
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/************************************************************************/
/******/ /* webpack/runtime/compat get default export */
/******/ (() => {
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = (module) => {
/******/ var getter = module && module.__esModule ?
/******/ () => (module['default']) :
/******/ () => (module);
/******/ __webpack_require__.d(getter, { a: getter });
/******/ return getter;
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/define property getters */
/******/ (() => {
/******/ // define getter functions for harmony exports
/******/ __webpack_require__.d = (exports, definition) => {
/******/ for(var key in definition) {
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ }
/******/ }
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/global */
/******/ (() => {
/******/ __webpack_require__.g = (function() {
/******/ if (typeof globalThis === 'object') return globalThis;
/******/ try {
/******/ return this || new Function('return this')();
/******/ } catch (e) {
/******/ if (typeof window === 'object') return window;
/******/ }
/******/ })();
/******/ })();
/******/
/******/ /* webpack/runtime/hasOwnProperty shorthand */
/******/ (() => {
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ })();
/******/
/******/ /* webpack/runtime/make namespace object */
/******/ (() => {
/******/ // define __esModule on exports
/******/ __webpack_require__.r = (exports) => {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/publicPath */
/******/ (() => {
/******/ var scriptUrl;
/******/ if (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + "";
/******/ var document = __webpack_require__.g.document;
/******/ if (!scriptUrl && document) {
/******/ if (document.currentScript)
/******/ scriptUrl = document.currentScript.src
/******/ if (!scriptUrl) {
/******/ var scripts = document.getElementsByTagName("script");
/******/ if(scripts.length) scriptUrl = scripts[scripts.length - 1].src
/******/ }
/******/ }
/******/ // When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration
/******/ // or pass an empty string ("") and set the __webpack_public_path__ variable from your code to use your own logic.
/******/ if (!scriptUrl) throw new Error("Automatic publicPath is not supported in this browser");
/******/ scriptUrl = scriptUrl.replace(/#.*$/, "").replace(/\?.*$/, "").replace(/\/[^\/]+$/, "/");
/******/ __webpack_require__.p = scriptUrl;
/******/ })();
/******/
/************************************************************************/
/******/
/******/ // startup
/******/ // Load entry module and return exports
/******/ // This entry module can't be inlined because the eval devtool is used.
/******/ var __webpack_exports__ = __webpack_require__("./src/js/app.js");
/******/
/******/ })()
;