{"version":3,"sources":["webpack:///webpack/universalModuleDefinition?5ca6***","webpack:///webpack/bootstrap e53f3a44e16ca2bd7531?fa2f***","webpack:///./src/main/util/Util.js?5bc4*","webpack:///./src/main/util/Settings.js?b01f*","webpack:///./src/main/util/Event.js?68bf*","webpack:///./src/main/Modal.js?a8d4","webpack:///./src/main/Widget.js?920e","webpack:///./src/main/lib/FixedWindow.js?6376","webpack:///./src/main/lib/debounce.js?3601","webpack:///./src/main/modules/Modal.js"],"names":["PFX","COL_LEFT_CLASS","COL_RIGHT_CLASS","COL_BOTTOM_CLASS","Util","element","type","callback","thisFunction","e","apply","p","length","thisType","toLowerCase","name","addEventListener","el","document","createElement","transitions","transition","OTransition","MozTransition","WebkitTransition","Object","entries","key","value","style","undefined","target","parent","now","parentNode","func","s4","Math","floor","random","toString","substring","doc","global","inner","width","height","outer","position","top","left","visibility","overflow","appendChild","body","w1","offsetWidth","w2","clientWidth","removeChild","ev","capture","event","removeEventListener","offsetHeight","str","replace","g","toUpperCase","input","JSON","parse","stringify","base","attrs","attributes","i","attr","s","dashToCamelCase","nodeName","val","nodeValue","hasOwnProperty","parseInt","elementToPosition","collisionContainer","centerHorizontal","positionTop","amountTop","amountLeft","parentsUntil","HTMLElement","window","getComputedStyle","isPartOfNode","offsetTop","offsetLeft","targetPosition","getBoundingClientRect","elementRect","colRect","targetTop","targetRight","right","isCollisionTop","isCollisionBottom","innerHeight","isCollisionLeft","targetLeft","isCollisionRight","classList","remove","calcTop","calcLeft","add","rightPosition","leftCentered","collisionCentered","cssText","optionalOffset","scrollIntoView","thisOffset","scrolledY","pageYOffset","scroll","FLEXCSS_GLOBAL_SETTINGS","smallBreakpoint","touchMoveBreakpointOffCanvas","scrollbarUpdateNodes","darkenerFadeDelay","canvasToggledClass","FLEXCSS_CONST_IS_IOS","FLEXCSS_CONST_IS_TOUCH","FLEXCSS_CONST_IS_SAFARI","FLEXCSS_CONST_IS_IE","FLEXCSS_CONST_TAB_EVENT","FLEXCSS_IS_SMALL_SCREEN","init","FLEXCSS_CONST_SCROLLBAR_WIDTH","getScrollBarWidth","FLEXCSS_CONST_TRANSITION_EVENT","whichTransitionEndEvent","readyState","Settings","settings","assign","navigator","userAgent","match","test","innerWidth","get","msMaxTouchPoints","poly","CustomEvent","params","thisParams","bubbles","cancelable","detail","evt","createEvent","initCustomEvent","superPreventDefault","preventDefault","defineProperty","prototype","Event","EventHandler","defaultOptions","options","withDetail","originalEvent","o","dispatchEvent","withOptions","fire","KEY_ESC","ATTR_CREATE_NEW","ATTR_CLOSE","ATTR_NAME","CLS_CONTAINER_CURRENT","CLS_OPEN","CLS_CURRENT","CLS_PART_OF_STACK","CLS_MODAL_CONTAINER","CLS_ANIM_END","CLS_LOADER_CONTAINER","CLS_LOADER","CLS_BACKDROP","EVENT_MODAL_CLOSED","EVENT_MODAL_BEFORE_CLOSED","EVENT_MODAL_OPENED","EVENT_MODAL_INIT","EVENT_MODAL_ASYNC_TARGET_LOADED","Modal","DelegateContainer","container","getElementById","Error","currentOpen","loading","classNames","closeOnEscape","closeOnBackgroundClick","destroyOnFinish","fixedContainer","containerClassNames","eventContainer","eventFunction","dataMainPageContainer","currentScrollTop","modalContainer","n","t","_modalInstances","indexOf","splice","getInstance","close","self","applyOptionsFromElement","copy","KeyboardEvent","getTabEvent","hasAttribute","dispatchAndFire","defaultPrevented","_finishState","prevModal","switchModals","dispatch","withOriginal","_removeModalFromStack","lastContainer","childNodes","node","cl","destroy","co","last","push","open","prefixedAnimateEvent","_finishAnim","instances","m","isCurrent","contains","foundInstance","flexModalInstance","targetContent","future","widget","hasTarget","isHtmlElement","isWidget","getAttribute","findWidget","newInstance","setDestroyOnFinish","fromEvent","then","registerEvents","getModalContainer","stopImmediatePropagation","modalContainerClasses","className","closeModalFunction","ce","loader","toggleLoader","show","loaderLoader","requestAnimationFrame","async","getAsync","r","result","DocumentFragment","innerHTML","id","guid","finalContent","Promise","resolve","thisEl","hfWidgetInstance","modal","internal","maybeEvent","delegate","delegateContainer","addScreenConstraint","args","createWidget","v","isEmptyContainer","MutationObserver","observer","mutations","forEach","disconnect","observe","childList","keyCode","lastModal","Widget","asyncContent","_isWidget","setAsync","CLS_FIXED_WINDOW","EVENT_BEFORE_FIXED_ADD","EVENT_AFTER_FIXED_REMOVE","ALLOW_ELEMENT_OVERFLOW_TOUCH","fixedWindowInstance","FixedWindow","widgets","fixedScreenConstraints","windowWidth","isFixedWindowActive","touchListener","fixedBreakpointFn","thisWidget","fixed","Set","widgetsThatRequireFixedWindow","Array","from","some","isFixed","getCurrentWidget","index","_removeFixedContainer","_addFixedContainer","map","foundProperty","direction","whatNode","property","d","__fixedWindowMod__","getScrollbarWidth","shouldNotMoveUp","shouldNotMoveDown","neverScroll","lastClientY","touchStartListener","getLastFixedWidget","closestOverflow","closestCallback","HTMLTextAreaElement","scrollHeight","touches","clientY","scrollTop","touchMoveListener","isScrollingDown","touchEndListener","documentElement","paddingRight","_checkFixedNeeded","pop","instance","constructor","fixedWidget","eventHandler","resizeListener","bind","fn","ms","clearTimeout","timeout","setTimeout"],"mappings":"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","file":"js/modal.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"FlexCss\"] = factory();\n\telse\n\t\troot[\"FlexCss\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"../\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap e53f3a44e16ca2bd7531","/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2015 David Heidrich, BowlingX <me@bowlingx.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nconst PFX = [\"webkit\", \"moz\", \"MS\", \"o\", \"\"];\n\nconst COL_LEFT_CLASS = 'is-collision-left';\n\nconst COL_RIGHT_CLASS = 'is-collision-right';\n\nconst COL_BOTTOM_CLASS = 'is-collision-bottom';\n\n/**\n * Provides shared DOM-Utility functions\n */\nclass Util {\n\n    /**\n     * Will register the right animation event based on browser\n     * @param element\n     * @param type\n     * @param callback\n     */\n    static prefixedAnimateEvent(element, type, callback) {\n        const thisFunction = function thisFunction(e) {\n            callback.apply(element, [e, thisFunction]);\n        };\n\n        for (let p = 0; p < PFX.length; p++) {\n            let thisType = type;\n            if (!PFX[p]) {\n                thisType = type.toLowerCase();\n            }\n            const name = PFX[p] + thisType;\n            element.addEventListener(name, thisFunction, true);\n        }\n    }\n\n    /**\n     * Get correct transitionend event\n     * @returns {String}\n     * @private\n     */\n    static whichTransitionEndEvent() {\n        const el = document.createElement('fake');\n\n        const transitions = {\n            transition: 'transitionend',\n            OTransition: 'oTransitionEnd',\n            MozTransition: 'transitionend',\n            WebkitTransition: 'webkitTransitionEnd'\n        };\n\n        for (const [key, value] of Object.entries(transitions)) {\n            if (el.style[key] !== undefined) {\n                return value;\n            }\n        }\n    }\n\n    /**\n     * Check if target is part of parent node\n     * @param target\n     * @param parent\n     * @returns {boolean}\n     */\n    static isPartOfNode(target, parent) {\n        if (!target || !parent) {\n            return false;\n        }\n        let now = target;\n        while (now !== parent && now !== null) {\n            if (now === parent) {\n                break;\n            }\n            now = now.parentNode;\n        }\n        return now !== null;\n    }\n\n    /**\n     * Finds the closest element including itself matching a callback\n     * @param {Node} el\n     * @param {Function} callback\n     * @returns {Node|boolean}\n     */\n    static closestCallback(el, callback) {\n        let element = el;\n        while (element !== null) {\n            if (callback(element)) {\n                return element;\n            }\n            element = element.parentNode;\n        }\n        return false;\n    }\n\n    /**\n     * Walks the tree until func returns true for given argument\n     * @param target\n     * @param func\n     * @returns {boolean|HTMLElement}\n     */\n    static parentsUntil(target, func) {\n        if (!target) {\n            return false;\n        }\n        let now = target;\n        while (!func(now) && now !== null) {\n            now = now.parentNode;\n        }\n\n        return now;\n    }\n\n    /**\n     * Generates a unique id\n     * @return {String}\n     */\n    static guid() {\n        function s4() {\n            return Math.floor((1 + Math.random()) * 0x10000)\n                .toString(16)\n                .substring(1);\n        }\n\n        return `${s4() + s4()}-${s4()}-${s4()}-${s4()}-${s4() + s4() + s4()}`;\n    }\n\n    /**\n     * Detects scrollbar width\n     * @see http://stackoverflow.com/questions/986937/how-can-i-get-the-browsers-scrollbar-sizes\n     * @returns {number}\n     */\n    static getScrollBarWidth() {\n        const doc = global.document;\n        const inner = doc.createElement('p');\n\n        inner.style.width = \"100%\";\n        inner.style.height = \"200px\";\n\n        const outer = doc.createElement('div');\n        outer.style.position = \"absolute\";\n        outer.style.top = \"0px\";\n        outer.style.left = \"0px\";\n        outer.style.visibility = \"hidden\";\n        outer.style.width = \"200px\";\n        outer.style.height = \"150px\";\n        outer.style.overflow = \"hidden\";\n        outer.appendChild(inner);\n\n        doc.body.appendChild(outer);\n        const w1 = inner.offsetWidth;\n        outer.style.overflow = 'scroll';\n        let w2 = inner.offsetWidth;\n        if (w1 === w2) {\n            w2 = outer.clientWidth;\n        }\n        doc.body.removeChild(outer);\n\n        return (w1 - w2);\n    }\n\n\n    /**\n     * Run an event once\n     * @param {String} ev\n     * @param {HTMLElement|HTMLDocument} target\n     * @param {Function} func\n     * @param {boolean} [capture]\n     * @return Function created listener\n     */\n    static addEventOnce(ev, target, func, capture) {\n        const thisFunction = function thisFunction(event) {\n            func(event, func);\n            target.removeEventListener(ev, thisFunction, capture);\n        };\n        target.addEventListener(ev, thisFunction, capture);\n        return thisFunction;\n    }\n\n    /**\n     * Checks if an element is visible\n     * @param {HTMLElement} element\n     * @returns bool\n     */\n    static isVisible(element) {\n        return element.offsetWidth > 0 && element.offsetHeight > 0;\n    }\n\n    /**\n     * Creates a camelCaseRepresentation of a dashed string\n     * @param {String} str\n     * @returns String\n     */\n    static dashToCamelCase(str) {\n        return str.replace(/-([a-z])/g, (g) => {\n            return g[1].toUpperCase();\n        });\n    }\n\n    /**\n     * Creates a copy of `input`\n     * @param {*} input\n     * @return *\n     */\n    static copy(input) {\n        return JSON.parse(JSON.stringify(input));\n    }\n\n    /**\n     * Reads options from element (data attributes) and applies to base\n     * @param {HTMLElement} element\n     * @param {Object} base\n     * @return {Object}\n     */\n    static applyOptionsFromElement(element, base) {\n        if (!element) {\n            return base;\n        }\n        const attrs = element.attributes;\n        for (let i = 0; i < attrs.length; i++) {\n            const attr = attrs[i];\n            if (attr) {\n                const s = Util.dashToCamelCase(attr.nodeName.replace('data-', ''));\n                const val = attr.nodeValue;\n                if (base.hasOwnProperty(s)) {\n                    // skip functions\n                    if (typeof base[s] === 'function') {\n                        continue;\n                    }\n                    if (typeof base[s] === 'boolean') {\n                        base[s] = parseInt(val || 1, 10) === 1;\n                    } else {\n                        base[s] = val;\n                    }\n                }\n            }\n        }\n        return base;\n    }\n\n    /**\n     * Will position an element directly at given target\n     * Is aware of a given collision container to detect edges\n     * Will put elementToPosition either to left, center or right edge (prefer right)\n     *  and either to bottom or top (prefers bottom)\n     *\n     * You may overwrite preferred positioned with `centerHorizontal` and `positionTop`\n     *\n     * @param {HTMLElement|ClientRect} target the target container to align to\n     * @param {HTMLElement} elementToPosition the element to position\n     * @param {HTMLElement} collisionContainer the outer container to prevent collisions\n     * @param {boolean} [centerHorizontal] set true to center element, otherwise it's put on the right border by default\n     * @param {boolean} [positionTop] flip top, by default element is positioned to the bottom.\n     * @returns {HTMLElement}\n     */\n    static setupPositionNearby(target, elementToPosition, collisionContainer, centerHorizontal, positionTop) {\n        // determine relative offsets\n        let amountTop = 0;\n        let amountLeft = 0;\n        Util.parentsUntil(target.parentNode, (el) => {\n            if (!(el instanceof HTMLElement)) {\n                return false;\n            }\n            const style = window.getComputedStyle(el);\n            if (Util.isPartOfNode(elementToPosition, el)) {\n                if (style && style.position === 'relative') {\n                    amountTop += el.offsetTop || 0;\n                    amountLeft += el.offsetLeft || 0;\n                }\n                return false;\n            }\n            return true;\n        });\n\n        const targetPosition = target instanceof HTMLElement ? target.getBoundingClientRect() : target;\n        const elementRect = elementToPosition.getBoundingClientRect();\n        const colRect = collisionContainer.getBoundingClientRect();\n        const targetTop = targetPosition.top - amountTop;\n        const targetRight = targetPosition.right;\n        const isCollisionTop = (targetTop - elementRect.height) <= 0;\n        const isCollisionBottom =\n            window.innerHeight < (targetTop + amountTop + targetPosition.height + elementRect.height);\n        const isCollisionLeft = targetRight < elementRect.width;\n        const targetLeft = targetPosition.left;\n        const isCollisionRight = (targetLeft + elementRect.width) > colRect.width;\n        const classList = elementToPosition.classList;\n\n        classList.remove(COL_RIGHT_CLASS);\n        classList.remove(COL_LEFT_CLASS);\n        classList.remove(COL_BOTTOM_CLASS);\n\n        let calcTop;\n        let calcLeft;\n        if (isCollisionLeft && !isCollisionRight) {\n            // put element to left if collision with left\n            calcLeft = `${(targetPosition.left - colRect.left - amountLeft)}px`;\n            classList.add(COL_LEFT_CLASS);\n        } else {\n            // maybe center if no collision with either side\n            const rightPosition = `${(targetRight - elementRect.width - colRect.left - amountLeft)}px`;\n            const leftCentered = ((targetLeft + targetPosition.width / 2) -\n                    (elementRect.width / 2) || 0) - colRect.left;\n            const collisionCentered = (leftCentered + elementRect.width) > colRect.width;\n            if (centerHorizontal && !collisionCentered) {\n                calcLeft = `${leftCentered}px`;\n            } else {\n                classList.add(COL_RIGHT_CLASS);\n                calcLeft = rightPosition;\n            }\n        }\n\n        if (isCollisionBottom || (positionTop && !isCollisionTop)) {\n            // Put Element on top if collision\n            calcTop = `${(targetTop - elementRect.height) - colRect.top}px`;\n            classList.add(COL_BOTTOM_CLASS);\n        } else {\n            calcTop = `${(targetTop + targetPosition.height) - colRect.top}px`;\n        }\n\n        elementToPosition.style.cssText = `top:${calcTop};left:${calcLeft};`;\n\n        return elementToPosition;\n    }\n\n    /**\n     * Brings a given element into viewport\n     * @param {HTMLElement} el\n     * @param {int|function}[optionalOffset]\n     */\n    static scrollToElement(el, optionalOffset) {\n        el.scrollIntoView();\n        let thisOffset = optionalOffset;\n        // optionally use a additional scrollDif\n        if (thisOffset) {\n            if (typeof thisOffset === 'function') {\n                thisOffset = optionalOffset();\n            }\n            const scrolledY = window.pageYOffset;\n            window.scroll(0, scrolledY - thisOffset);\n        }\n    }\n}\n\nexport default Util;\n\n\n\n// WEBPACK FOOTER //\n// ./src/main/util/Util.js","/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2015 David Heidrich, BowlingX <me@bowlingx.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\nimport Util from './Util';\n\n// we attach global settings to global once because settings might be shared a lot of times trough the application\n// Maybe find a better way to handle that scenario\nif (global.document && !global.FLEXCSS_GLOBAL_SETTINGS) {\n    global.FLEXCSS_GLOBAL_SETTINGS = {\n        // defined breakpoint for small devices < n\n        smallBreakpoint: 768,\n        // breakpoint when touchmove should be available\n        touchMoveBreakpointOffCanvas: 768,\n        // nodes that should be updated when no scrollbar is expected\n        scrollbarUpdateNodes: global.document.body !== null ? [global.document.body] : [],\n        // additional Delay until darkener is fully hidden\n        darkenerFadeDelay: 100,\n        // class that is added if canvas has been toggled\n        canvasToggledClass: 'toggled-canvas'\n    };\n\n    global.FLEXCSS_CONST_IS_IOS = null;\n\n    global.FLEXCSS_CONST_IS_TOUCH = null;\n\n    global.FLEXCSS_CONST_IS_SAFARI = null;\n\n    global.FLEXCSS_CONST_IS_IE = null;\n\n    global.FLEXCSS_CONST_TAB_EVENT = 'click';\n\n    global.FLEXCSS_IS_SMALL_SCREEN = false;\n\n    const init = () => {\n        // Measure scrollbar width\n        global.FLEXCSS_CONST_SCROLLBAR_WIDTH = Util.getScrollBarWidth();\n        // detect right transition end event\n        global.FLEXCSS_CONST_TRANSITION_EVENT = Util.whichTransitionEndEvent();\n    };\n\n    if (global.document.readyState !== 'loading') {\n        init();\n    } else {\n        // it's possible that global.document.body is not available if the document is not\n        // loaded completely\n        document.addEventListener('DOMContentLoaded', () => {\n            init();\n        });\n    }\n}\n\n/**\n * Utility class that setups global settings\n */\nclass Settings {\n\n    /**\n     * Setup global settings, overwrite default values\n     * @param {Object} settings\n     */\n    static setup(settings) {\n        Object.assign(global.FLEXCSS_GLOBAL_SETTINGS, settings);\n    }\n\n    /**\n     * Access to global settings\n     * @returns {Object}\n     */\n    static get() {\n        return global.FLEXCSS_GLOBAL_SETTINGS;\n    }\n\n    /**\n     * Detects a IOS Device, caches subsequent calls\n     * @returns {boolean}\n     */\n    static isIosDevice() {\n        if (!global.FLEXCSS_CONST_IS_IOS) {\n            global.FLEXCSS_CONST_IS_IOS = global.navigator.userAgent.match(/(iPad|iPhone|iPod)/i);\n        }\n\n        return global.FLEXCSS_CONST_IS_IOS;\n    }\n\n    /**\n     * Detects a safari browser\n     * @returns {boolean}\n     */\n    static isSafari() {\n        if (!global.FLEXCSS_CONST_IS_SAFARI) {\n            global.FLEXCSS_CONST_IS_SAFARI = !!/^((?!chrome|android).)*safari/i.test(global.navigator.userAgent);\n        }\n        return global.FLEXCSS_CONST_IS_SAFARI;\n    }\n\n    /**\n     * @returns {boolean}\n     */\n    static isSmallScreen() {\n        return window.innerWidth < Settings.get().smallBreakpoint;\n    }\n\n    /**\n     * Detects a touch device, caches subsequent calls\n     * @returns {boolean}\n     */\n    static isTouchDevice() {\n        if (!global.FLEXCSS_CONST_IS_TOUCH) {\n            global.FLEXCSS_CONST_IS_TOUCH = 'ontouchstart' in window || !!(global.navigator.msMaxTouchPoints);\n        }\n        return global.FLEXCSS_CONST_IS_TOUCH;\n    }\n\n    /**\n     * Checks if current browser is Internet Explorer\n     * @returns {boolean|*}\n     */\n    static isIE() {\n        if (!global.FLEXCSS_CONST_IS_IE) {\n            global.FLEXCSS_CONST_IS_IE = \"ActiveXObject\" in window;\n        }\n        return global.FLEXCSS_CONST_IS_IE;\n    }\n\n    /**\n     * @returns {String}\n     */\n    static getTransitionEvent() {\n        return global.FLEXCSS_CONST_TRANSITION_EVENT;\n    }\n\n    /**\n     * @returns {int}\n     */\n    static getScrollbarWidth() {\n        return global.FLEXCSS_CONST_SCROLLBAR_WIDTH;\n    }\n\n    /**\n     * @returns {String}\n     */\n    static getTabEvent() {\n        return global.FLEXCSS_CONST_TAB_EVENT;\n    }\n}\n\nexport default Settings;\n\n\n\n// WEBPACK FOOTER //\n// ./src/main/util/Settings.js","/* global CustomEvent */\n\n/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2015 David Heidrich, BowlingX <me@bowlingx.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n// polyfill for custom events to make thinks work in IE\n// The needed polyfill is so small that I embedded it here\n(function poly() {\n    if (global.document && (!global.CustomEvent || typeof global.CustomEvent !== 'function')) {\n        const CustomEvent = function CustomEvent(event, params) {\n            const thisParams = params || {\n                bubbles: false,\n                cancelable: false,\n                detail: undefined\n            };\n            const evt = document.createEvent(\"CustomEvent\");\n            evt.initCustomEvent(event, thisParams.bubbles,\n                thisParams.cancelable, thisParams.detail);\n            evt.superPreventDefault = evt.preventDefault;\n            evt.preventDefault = () => {\n                // Due a bug in IE11, we need to set defaultPrevented manually\n                Object.defineProperty(evt, \"defaultPrevented\", {\n                    get: () => {\n                        return true;\n                    }\n                });\n                evt.superPreventDefault();\n            };\n            return evt;\n        };\n        CustomEvent.prototype = global.Event.prototype;\n        global.CustomEvent = CustomEvent;\n    }\n}());\n/**\n * Simpler Event dispatching\n */\nclass EventHandler {\n\n    /**\n     * @param {HTMLElement} target\n     * @param {String} name\n     */\n    constructor(target, name) {\n        this.target = target;\n        this.defaultOptions = {\n            bubbles: true,\n            cancelable: true\n        };\n\n        this.name = name;\n    }\n\n    /**\n     * Set more options\n     * @param {Object} options\n     * @returns {EventHandler}\n     */\n    withOptions(options) {\n        Object.assign(this.defaultOptions, (options || {}));\n        return this;\n    }\n\n    /**\n     * Call with the originalEvent\n     * @param {Event} e\n     * @returns {EventHandler}\n     */\n    withOriginal(e) {\n        return this.withDetail({\n            originalEvent: e\n        });\n    }\n\n    /**\n     * Extends the detail part of the event\n     * @param {Object} o\n     * @returns {EventHandler}\n     */\n    withDetail(o) {\n        if (!this.defaultOptions.detail) {\n            this.defaultOptions.detail = {};\n        }\n        Object.assign(this.defaultOptions.detail, o);\n        return this;\n    }\n\n    /**\n     * @returns {CustomEvent}\n     */\n    fire() {\n        const e = new CustomEvent(this.name, this.defaultOptions);\n        if (this.target) {\n            this.target.dispatchEvent(e);\n        }\n        return e;\n    }\n}\n\nclass Event {\n    /**\n     * Prepares to dispatch a custom event (without firing)\n     * @param {HTMLElement} target\n     * @param {String} name\n     * @returns {EventHandler}\n     */\n    static dispatch(target, name) {\n        return new EventHandler(target, name);\n    }\n\n    /**\n     * Dispatches a custom event and fires it directly\n     * @param {HTMLElement} target\n     * @param {String} name\n     * @param {Object} [options]\n     * @returns {CustomEvent}\n     */\n    static dispatchAndFire(target, name, options) {\n        return new EventHandler(target, name).withOptions(options).fire();\n    }\n}\n\nexport default Event;\n\n\n\n// WEBPACK FOOTER //\n// ./src/main/util/Event.js","/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2015 David Heidrich, BowlingX <me@bowlingx.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n/*!\n * FlexCss.Modal\n * Licensed under the MIT License (MIT)\n * Copyright (c) 2015 David Heidrich, BowlingX <me@bowlingx.com>\n */\n\n/* global KeyboardEvent */\n\nimport Settings from './util/Settings';\nimport Event from './util/Event';\nimport Util from './util/Util';\nimport Widget from './Widget';\nimport FixedWindow from './lib/FixedWindow';\nconst KEY_ESC = 27;\n/* Attribute Names */\nconst ATTR_CREATE_NEW = 'data-new-instance';\nconst ATTR_CLOSE = 'data-close-modal';\nconst ATTR_NAME = 'data-modal';\n\n/* Class names */\nconst CLS_CONTAINER_CURRENT = 'front';\nconst CLS_OPEN = 'open';\nconst CLS_CURRENT = 'current';\nconst CLS_PART_OF_STACK = 'part-of-stack';\nconst CLS_MODAL_CONTAINER = 'modal-container';\nconst CLS_ANIM_END = 'modal-anim-end';\nconst CLS_LOADER_CONTAINER = 'loader-container';\nconst CLS_LOADER = 'loader';\nconst CLS_BACKDROP = 'backdrop';\n\n/* Events */\n\n/**\n * Event triggered when modal is closed\n * @type {string}\n */\nexport const EVENT_MODAL_CLOSED = 'flexcss.modal.closed';\n/**\n * Event triggered before a modal is closed, cancelable\n * @type {string}\n */\nexport const EVENT_MODAL_BEFORE_CLOSED = 'flexcss.modal.beforeClose';\n/**\n * Event triggered when a modal is opened\n * @type {string}\n */\nexport const EVENT_MODAL_OPENED = 'flexcss.modal.opened';\n\n/**\n * Event triggered when modal is initilized, called on target\n * @type {string}\n */\nexport const EVENT_MODAL_INIT = 'flexcss.modal.init';\n\n/**\n * Triggered when the content of an async modal on a target is loaded, called on target\n * @type {string}\n */\nexport const EVENT_MODAL_ASYNC_TARGET_LOADED = 'flexcss.modal.asyncTargetLoaded';\n\n/**\n * A Modal Implementation\n */\nclass Modal {\n    constructor(DelegateContainer, options) {\n        const doc = global.document;\n        const container = DelegateContainer instanceof HTMLElement ?\n            DelegateContainer : doc.getElementById(DelegateContainer);\n\n        // Instance vars:\n        if (!container) {\n            throw new Error(`Could not found container element by given ID/Element: ${DelegateContainer}`);\n        }\n\n        this.currentOpen = null;\n\n        this.loading = false;\n\n        this.container = container;\n\n        /**\n         * Default Options\n         */\n        this.options = {\n            classNames: 'modal',\n            closeOnEscape: true,\n            closeOnBackgroundClick: true,\n            destroyOnFinish: false,\n            fixedContainer: true,\n            containerClassNames: ''\n        };\n\n        Object.assign(this.options, options);\n\n        // Container where events are delegated\n        this.eventContainer = null;\n        this.eventFunction = null;\n\n        this.dataMainPageContainer = global.document.body;\n\n        this.currentScrollTop = 0;\n\n        this.modalContainer = null;\n\n        // Destroy full modal instance when no dialogs are bind to?\n        // Otherwise container is recycled\n        this.destroyOnFinish = this.options.destroyOnFinish;\n    }\n\n    /**\n     * Removes this modal from global stack\n     * Will handle fixing main html element too\n     * @private\n     * @param n\n     */\n    _removeModalFromStack(n) {\n        const t = Modal._modalInstances.indexOf(n);\n        if (t > -1) {\n            Modal._modalInstances.splice(t, 1);\n            FixedWindow.getInstance().close();\n        }\n    }\n\n\n    /**\n     * Modal container that contains all `stacked` modals for this instance\n     * @returns {HTMLElement}\n     */\n    getModalContainer() {\n        return this.modalContainer;\n    }\n\n    /**\n     * Closes the current open modal of this stack\n     * @params [e], optional event\n     * @returns {*}\n     */\n    close(e) {\n        const self = this;\n\n        const options = self.currentOpen ? Util.applyOptionsFromElement(\n            self.currentOpen, Util.copy(self.options)) : self.options;\n\n        // close only on keyboard if instance should\n        if (!options.closeOnEscape && e instanceof KeyboardEvent) {\n            return false;\n        }\n\n        // close only on background if instance should\n        if (!options.closeOnBackgroundClick && e &&\n            e.type === Settings.getTabEvent() && !e.target.hasAttribute(ATTR_CLOSE)) {\n            return false;\n        }\n\n        // if an instance is currently loading, prevent from closing\n        if (self.loading) {\n            return false;\n        }\n\n        if (e) {\n            e.preventDefault();\n        }\n\n        if (self.currentOpen) {\n            // dispatch beforeClose event, if prevented prevent modal from closing\n            const ev = Event.dispatchAndFire(self.currentOpen, EVENT_MODAL_BEFORE_CLOSED);\n            if (ev.defaultPrevented) {\n                return false;\n            }\n\n            this._finishState(self.currentOpen);\n            // if there is an previous modal\n            if (self.currentOpen.prevModal) {\n                // switch to the next modal\n                return self.switchModals(self.currentOpen.prevModal,\n                    self.currentOpen.prevModal.prevModal || null);\n            }\n\n            // finally trigger closed event\n            Event.dispatch(self.currentOpen, EVENT_MODAL_CLOSED).withOriginal(e).fire();\n        }\n        self._removeModalFromStack(self.currentOpen);\n\n        // Full stack closed:\n        self.currentOpen = null;\n        if (self.modalContainer) {\n            // setup next open\n            const lastContainer = Modal._modalInstances[Modal._modalInstances.length - 1];\n            const classList = self.modalContainer.classList;\n            classList.remove(CLS_CONTAINER_CURRENT);\n            classList.remove(CLS_BACKDROP);\n            classList.remove(CLS_OPEN);\n            // Remove all current classes from child-nodes\n            for (let i = 0; i < self.modalContainer.childNodes.length; i++) {\n                const node = self.modalContainer.childNodes[i];\n                const cl = node.classList;\n                // remove applied styles\n                self._finishState(node);\n                cl.remove(CLS_CURRENT);\n                cl.remove(CLS_PART_OF_STACK);\n            }\n            if (lastContainer) {\n                lastContainer.parentNode.classList.add(CLS_CONTAINER_CURRENT);\n            }\n        }\n\n        if (self.destroyOnFinish) {\n            self.destroy();\n        }\n        return self;\n    }\n\n    /**\n     * Resets a target when newly initilizes\n     * @param target\n     * @private\n     */\n    _finishState(target) {\n        target.classList.remove(CLS_ANIM_END);\n    }\n\n    /**\n     * Handler called when a Modal has finished an animation\n     * @param e\n     * @param self\n     * @private\n     */\n    _finishAnim(e, self) {\n        e.target.classList.add(CLS_ANIM_END);\n        e.target.removeEventListener(e.type, self, true);\n    }\n\n    /**\n     * Brings the given modal to front\n     * @param co\n     * @param last\n     */\n    switchModals(co, last) {\n        co.prevModal = last;\n        Modal._modalInstances.push(co);\n        FixedWindow.getInstance().open(this, this.modalContainer);\n        if (last) {\n            this._finishState(last);\n            Util.prefixedAnimateEvent(last, 'AnimationEnd', this._finishAnim);\n            last.classList.add(CLS_PART_OF_STACK);\n        }\n        // set new currentOpen\n        this.currentOpen = co;\n\n        // bring current container to the front\n        const instances = Modal._modalInstances;\n\n        for (let m = 0; m < instances.length; m++) {\n            instances[m].parentNode.classList.remove(CLS_CONTAINER_CURRENT);\n        }\n        this.modalContainer.classList.add(CLS_CONTAINER_CURRENT);\n        // remove animations if animations has been completed, fixes various bugs:\n        // - fixes nested scrolling element issue in iOS Browsers / Mobile-Safari\n        Util.prefixedAnimateEvent(co, 'AnimationEnd', this._finishAnim);\n\n        for (let i = 0; i < this.modalContainer.childNodes.length; i++) {\n            const n = this.modalContainer.childNodes[i];\n            const isCurrent = n.classList.contains(CLS_CURRENT);\n            if (n === co) {\n                co.classList.add(CLS_CURRENT);\n                co.classList.remove(CLS_PART_OF_STACK);\n                this._finishState(co);\n            } else {\n                n.classList.remove(CLS_CURRENT);\n                if (isCurrent) {\n                    this._removeModalFromStack(n);\n                    Event.dispatchAndFire(n, EVENT_MODAL_CLOSED);\n                }\n            }\n        }\n    }\n\n    /**\n     * Creates a Modal and opens it (later)\n     * @param e\n     * @returns {Promise|boolean}\n     */\n    createWidget(e) {\n        const self = this;\n        if (this.loading) {\n            return false;\n        }\n\n        // check if another modal has registered events on this dom path:\n        if (e && e.target) {\n            const foundInstance = Util.parentsUntil(e.target, (node) => {\n                return node && node.flexModalInstance;\n            });\n\n            // if another instance has been found, abort\n            if (foundInstance !== this.container) {\n                return false;\n            }\n        }\n        let targetContent;\n        let future;\n        let widget;\n        let target;\n        let hasTarget = true;\n        const isHtmlElement = e instanceof HTMLElement;\n        const isWidget = Widget.isWidget(e);\n        if (isHtmlElement || isWidget) {\n            if (isHtmlElement) {\n                targetContent = e;\n            } else {\n                widget = e;\n                targetContent = widget.element;\n            }\n        } else {\n            target = e.target;\n            if (!target) {\n                throw new Error('Could not find target, did you pass an event, a HTMLElement or an Widget?');\n            }\n            hasTarget = target.hasAttribute(ATTR_NAME);\n            targetContent = target.getAttribute(ATTR_NAME);\n            widget = Widget.findWidget(target);\n            if (target.hasAttribute(ATTR_CREATE_NEW) && !e.newInstance) {\n                const newInstance = new Modal(this.container)\n                    .setDestroyOnFinish(true);\n                e.newInstance = true;\n                newInstance.fromEvent(e).then(() => {\n                    newInstance.registerEvents(newInstance.getModalContainer());\n                });\n                return false;\n            }\n            if (hasTarget) {\n                e.stopImmediatePropagation();\n                e.preventDefault();\n            }\n        }\n\n        if (!hasTarget) {\n            return false;\n        }\n\n        let modalContainerClasses = this.modalContainer ? this.modalContainer.classList : [];\n\n        // lazy create modal container\n        if (!this.modalContainer) {\n            this.modalContainer = global.document.createElement('div');\n            this.modalContainer.className = `${CLS_MODAL_CONTAINER} ${this.options.containerClassNames} ${CLS_OPEN}`;\n            const closeModalFunction = (ce) => {\n                if (this.loading) {\n                    return false;\n                }\n                if (Util.isPartOfNode(ce.target, this.currentOpen)) {\n                    if (!ce.target.hasAttribute(ATTR_CLOSE)) {\n                        return false;\n                    }\n                }\n                this.close(ce);\n            };\n\n            this.modalContainer.addEventListener(Settings.getTabEvent(), closeModalFunction, false);\n\n            modalContainerClasses = this.modalContainer.classList;\n            this.container.appendChild(this.modalContainer);\n        } else {\n            modalContainerClasses.add(CLS_OPEN);\n        }\n\n        let loader;\n        const doc = global.document;\n        const toggleLoader = (show) => {\n            if (show) {\n                loader = doc.createElement('div');\n                loader.className = CLS_LOADER_CONTAINER;\n                const loaderLoader = doc.createElement('div');\n                loaderLoader.className = CLS_LOADER;\n                loader.appendChild(loaderLoader);\n                this.modalContainer.appendChild(loader);\n            } else {\n                loader.parentNode.removeChild(loader);\n            }\n        };\n        modalContainerClasses.add('loading');\n        modalContainerClasses.add(CLS_CONTAINER_CURRENT);\n\n        requestAnimationFrame(() => {\n            requestAnimationFrame(() => {\n                modalContainerClasses.add(CLS_BACKDROP);\n            });\n        });\n\n        this.loading = true;\n        toggleLoader(true);\n        const async = widget ? widget.getAsync() : null;\n        if (Widget.isWidget(widget) && async) {\n            future = async.then((r) => {\n                let result;\n                if (r instanceof HTMLElement || r instanceof DocumentFragment) {\n                    result = r;\n                } else {\n                    // Create container Element:\n                    const element = doc.createElement('div');\n                    element.className = self.options.classNames;\n                    element.innerHTML = r;\n                    element.id = Util.guid();\n                    result = element;\n                }\n                widget.finalContent = result;\n                Event.dispatchAndFire(target, EVENT_MODAL_ASYNC_TARGET_LOADED);\n                return result;\n            });\n        } else {\n            const el = targetContent instanceof HTMLElement ||\n            targetContent instanceof DocumentFragment ? targetContent : doc.getElementById(targetContent);\n            if (el) {\n                future = new Promise((resolve) => {\n                    resolve(el);\n                });\n            } else {\n                throw new Error(`Could not found given modal element (content) with ID: ${targetContent}`);\n            }\n        }\n\n        Event.dispatchAndFire(target, EVENT_MODAL_INIT);\n\n        return future.then((thisEl) => {\n            thisEl.hfWidgetInstance = this;\n            this.modalContainer.appendChild(thisEl);\n            modalContainerClasses.remove('loading');\n            this.loading = false;\n            toggleLoader(false);\n            this.open(thisEl, true, e);\n            return thisEl;\n        });\n    }\n\n    /**\n     * Open's an already rendered modal\n     * @param {HTMLElement} modal\n     * @param {Boolean} [internal], set to true to prevent container management\n     * @param {Boolean} [maybeEvent], optional event-object that triggered open\n     */\n    open(modal, internal, maybeEvent) {\n        if (!internal) {\n            this.modalContainer.classList.add('open');\n        }\n        this.switchModals(modal, this.currentOpen);\n\n        Event.dispatch(modal, EVENT_MODAL_OPENED).withOriginal(maybeEvent).fire();\n    }\n\n\n    registerEvents(delegate) {\n        const delegateContainer = delegate || this.container;\n        // Modals should always be fixed\n        FixedWindow.getInstance().addScreenConstraint(Modal, () => true);\n        // register modal instance so we can detect multiple registrars\n        delegateContainer.flexModalInstance = this;\n        this.eventFunction = (...args) => {\n            this.createWidget.apply(this, args);\n        };\n        delegateContainer.addEventListener(Settings.getTabEvent(), this.eventFunction, false);\n\n        this.eventContainer = delegateContainer;\n        return this;\n    }\n\n\n    /**\n     * Creates a new Dialog Instance either directly from HTML Element or a Widget instance\n     * @param {HTMLElement|Widget} widget instance or html element\n     * @returns {Promise}\n     */\n    fromWidget(widget) {\n        return this.createWidget(widget);\n    }\n\n    /**\n     * Creates a Widget from event\n     * @param e\n     * @returns {Promise}\n     */\n    fromEvent(e) {\n        return this.createWidget(e);\n    }\n\n    setDestroyOnFinish(v) {\n        this.destroyOnFinish = v;\n        return this;\n    }\n\n    /**\n     * Destroy this widget instance, cleans empty DOM nodes\n     * Will use fast MutationObserver if available, otherwise falls back to DOMNodeRemoved event\n     */\n    destroy() {\n        const modalContainer = this.modalContainer;\n        const isEmptyContainer = modalContainer.childNodes.length === 0;\n        // Remove event listener on destroy, do not remove DOM node\n        if (this.eventContainer) {\n            this.eventContainer.removeEventListener(Settings.getTabEvent(), this.eventFunction, true);\n        }\n\n        if (isEmptyContainer) {\n            if (modalContainer.parentNode) {\n                modalContainer.parentNode.removeChild(modalContainer);\n            }\n        }\n        if (global.MutationObserver) {\n            const observer = new MutationObserver((mutations) => {\n                mutations.forEach(() => {\n                    if (modalContainer.childNodes.length === 0) {\n                        modalContainer.parentNode.removeChild(modalContainer);\n                        observer.disconnect();\n                    }\n                });\n            });\n            observer.observe(modalContainer,\n                {\n                    childList: true\n                }\n            );\n        } else {\n            modalContainer.addEventListener('DOMNodeRemoved', (e) => {\n                if (e.target !== modalContainer && (modalContainer.childNodes.length - 1) === 0) {\n                    modalContainer.parentNode.removeChild(modalContainer);\n                }\n            });\n        }\n    }\n}\n\n\n// Static variable that keeps track of all open modals\nModal._modalInstances = [];\n\nif (global.addEventListener) {\n// Global keydown listener for modal\n    global.addEventListener('keydown', (e) => {\n        if (e.keyCode === KEY_ESC) {\n            const lastModal = Modal._modalInstances[Modal._modalInstances.length - 1];\n            if (lastModal) {\n                Widget.findWidget(lastModal).close(e);\n            }\n        }\n    });\n}\n\nexport default Modal;\n\n\n\n// WEBPACK FOOTER //\n// ./src/main/Modal.js","/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2015 David Heidrich, BowlingX <me@bowlingx.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n/*!\n * FlexCss.Widget\n * Licensed under the MIT License (MIT)\n * Copyright (c) 2015 David Heidrich, BowlingX <me@bowlingx.com>\n */\n\n/**\n * A Widget provides async content on a specific target (e.g. a modal link)\n */\nclass Widget {\n\n    /**\n     * Creates a new Widget\n     * @param [element], optional define the content of widget\n     */\n    constructor(element) {\n        /**\n         *\n         * @type {Promise}\n         */\n        this.asyncContent = null;\n\n        /**\n         * @type {boolean}\n         */\n        this._isWidget = true;\n\n        if (element) {\n            /**\n             * @type {HTMLElement}\n             */\n            this.element = element instanceof HTMLElement ? element : global.document.getElementById(element);\n            if (this.element) {\n                this.element.hfWidgetInstance = this;\n                this.setAsync(() => {\n                    return new Promise((s) => {\n                        s(this.element);\n                    });\n                });\n            } else {\n                throw new Error(`Could not found element with ID: ${element}`);\n            }\n        }\n        /**\n         * The final resulted content that a widget did create (e.g. a modal container)\n         * @type {HTMLElement}\n         */\n        this.finalContent = null;\n    }\n\n    /**\n     *\n     * @returns {Promise}\n     */\n    getAsync() {\n        return this.asyncContent();\n    }\n\n    /**\n     * @param {Function.<Promise>} async\n     * @returns {Widget}\n     */\n    setAsync(async) {\n        this.asyncContent = async;\n        return this;\n    }\n\n    /**\n     * @returns {HTMLElement}\n     */\n    getFinalContent() {\n        return this.finalContent;\n    }\n\n    /**\n     * @param {HTMLElement} element\n     * @returns {Widget}\n     */\n    setElement(element) {\n        this.element = element;\n        return this;\n    }\n\n    /**\n     * Destroys the generated content of this widget\n     * @returns {boolean}\n     */\n    destroy() {\n        if (this.finalContent && this.finalContent.parentNode) {\n            this.finalContent.parentNode.removeChild(this.finalContent);\n            return true;\n        }\n\n        delete this.element;\n        delete this.asyncContent;\n        delete this.finalContent;\n\n        return false;\n    }\n\n    /**\n     * Will find a widget on an Element\n     * @param {HTMLElement} element\n     * @returns {Widget|undefined}\n     */\n    static findWidget(element) {\n        return element ? element.hfWidgetInstance : undefined;\n    }\n\n    /**\n     * Checks if a given object is an instance\n     * @param {Object} self\n     * @returns {boolean}\n     */\n    static isWidget(self) {\n        return self instanceof Widget || typeof self === 'object' && self.hasOwnProperty('_isWidget');\n    }\n}\n\nexport default Widget;\n\n\n\n// WEBPACK FOOTER //\n// ./src/main/Widget.js","import Settings from '../util/Settings';\nimport debounce from './debounce';\nimport Event from '../util/Event';\nimport Util from '../util/Util';\n\nconst CLS_FIXED_WINDOW = 'fixed-window-open';\n\nexport const EVENT_BEFORE_FIXED_ADD = 'flexcss.fixedWindow.beforeAdd';\nexport const EVENT_AFTER_FIXED_REMOVE = 'flexcss.fixedWindow.afterRemove';\n\n/**\n * @type {string}\n */\nexport const ALLOW_ELEMENT_OVERFLOW_TOUCH = 'data-overflow';\n\n/**\n * @type {FixedWindow}\n */\nlet fixedWindowInstance;\n\nexport default class FixedWindow {\n\n    constructor() {\n        this.widgets = [];\n        this.currentScrollTop = 0;\n        this.fixedScreenConstraints = [];\n        this.windowWidth = 0;\n        this.isFixedWindowActive = false;\n        this.touchListener = null;\n    }\n\n    /**\n     * Adds a constraint to detect if the window needs to be changed when the screensize changes\n     *\n     * @param {Function} widget\n     * @param {Function} fixedBreakpointFn gets a width argument, return true to open a window\n     */\n    addScreenConstraint(widget, fixedBreakpointFn) {\n        this.fixedScreenConstraints[widget] = fixedBreakpointFn;\n    }\n\n    /**\n     * @returns {null|DestroyableWidget}\n     */\n    getCurrentWidget() {\n        return this.widgets.length > 0 ? this.widgets[this.widgets.length - 1] : null;\n    }\n\n    getLastFixedWidget() {\n        let length = this.widgets.length;\n        let widget = null;\n        while (length > 0) {\n            const thisWidget = this.widgets[length - 1];\n            if (thisWidget.fixed) {\n                widget = thisWidget;\n                break;\n            }\n            length--;\n        }\n        return widget;\n    }\n\n    /**\n     * @private\n     */\n    _checkFixedNeeded() {\n        if (this.widgets.length === 0) {\n            return;\n        }\n        const widgets = new Set(this.widgets);\n        const widgetsThatRequireFixedWindow = Array.from(widgets).some(el => {\n            const { widget } = el;\n            const isFixed = this.fixedScreenConstraints[widget] &&\n              this.fixedScreenConstraints[widget](this.windowWidth, this.getCurrentWidget());\n            const index = this.widgets.indexOf(el);\n            this.widgets[index] = Object.assign(el, { fixed: isFixed });\n            return isFixed;\n        });\n        if (!widgetsThatRequireFixedWindow) {\n            this._removeFixedContainer();\n        } else {\n            this._addFixedContainer();\n        }\n    }\n\n    /**\n     * @private\n     */\n    _addFixedContainer() {\n        if (this.isFixedWindowActive) {\n            return;\n        }\n        Event.dispatchAndFire(global.document, EVENT_BEFORE_FIXED_ADD, {\n            detail: this.getCurrentWidget()\n        });\n        // this causes layout and should be optimized\n        // At lest we write in a batch later\n        Settings.get().scrollbarUpdateNodes.map((n) => {\n            let foundProperty = 'paddingRight';\n            let direction = 1;\n            let node = n;\n            if (n instanceof Array) {\n                const [whatNode, property, d] = n;\n                foundProperty = property;\n                node = whatNode;\n                direction = d || 1;\n            }\n            return {\n                node,\n                property: foundProperty,\n                value: `${parseInt(global.getComputedStyle(node)[foundProperty], 10) +\n                (!node.__fixedWindowMod__ ? (Settings.getScrollbarWidth() * direction) : 0)}px`\n            };\n        }).forEach((d) => {\n            d.node.__fixedWindowMod__ = true;\n            d.node.style[d.property] = d.value;\n        });\n\n        this.touchListener = (e) => {\n            e.preventDefault();\n        };\n\n        let shouldNotMoveUp = false;\n        let shouldNotMoveDown = false;\n        let neverScroll = false;\n        let lastClientY = 0;\n        this.touchStartListener = (e) => {\n            let { element } = this.getLastFixedWidget();\n            const closestOverflow = Util.closestCallback(e.target,\n              (el) => el instanceof HTMLTextAreaElement ||\n              (el.hasAttribute && el.hasAttribute(ALLOW_ELEMENT_OVERFLOW_TOUCH)));\n            if (closestOverflow && closestOverflow.scrollHeight !== closestOverflow.offsetHeight) {\n                element = closestOverflow;\n            }\n            if (Util.isPartOfNode(e.target, element)) {\n                neverScroll = element.scrollHeight === element.offsetHeight;\n                lastClientY = e.touches[0].clientY;\n                // never allow scrolling when there is nothing to scroll\n                if (neverScroll) {\n                    return false;\n                }\n                if (element.scrollTop === 0) {\n                    shouldNotMoveUp = true;\n                } else if (element.scrollHeight === element.scrollTop + element.offsetHeight) {\n                    shouldNotMoveDown = true;\n                }\n            }\n        };\n\n        global.addEventListener('touchmove', this.touchListener);\n        global.document.body.addEventListener('touchstart', this.touchStartListener);\n\n        this.touchMoveListener = (e) => {\n            const { element } = this.getLastFixedWidget();\n            if (Util.isPartOfNode(e.target, element)) {\n                const { clientY } = e.touches[0];\n                const isScrollingDown = (lastClientY - clientY) > 0;\n                lastClientY = clientY;\n                if (neverScroll) {\n                    return false;\n                }\n                if ((!shouldNotMoveDown && isScrollingDown) ||\n                    (shouldNotMoveDown && !isScrollingDown) ||\n                    (!shouldNotMoveDown && !shouldNotMoveUp && !isScrollingDown) ||\n                    (shouldNotMoveDown && shouldNotMoveUp && isScrollingDown)\n                ) {\n                    e.stopImmediatePropagation();\n                }\n            }\n        };\n\n        this.touchEndListener = () => {\n            neverScroll = false;\n            shouldNotMoveUp = false;\n            shouldNotMoveDown = false;\n            lastClientY = 0;\n        };\n\n        global.document.body.addEventListener('touchmove', this.touchMoveListener);\n        global.document.body.addEventListener('touchend', this.touchEndListener);\n        global.document.documentElement.classList.add(CLS_FIXED_WINDOW);\n        this.isFixedWindowActive = true;\n    }\n\n    /**\n     * @private\n     */\n    _removeFixedContainer() {\n        if (this.isFixedWindowActive) {\n            // cleanup event listeners\n            global.removeEventListener('touchmove', this.touchListener);\n            global.document.body.removeEventListener('touchstart', this.touchStartListener);\n            global.document.body.removeEventListener('touchmove', this.touchMoveListener);\n            global.document.body.removeEventListener('touchend', this.touchEndListener);\n\n            // reset scrollbar nodes\n            Settings.get().scrollbarUpdateNodes.forEach((node) => {\n                if (node instanceof Array) {\n                    const [whatNode, property] = node;\n                    delete whatNode.__fixedWindowMod__;\n                    whatNode.style[property] = '';\n                } else {\n                    delete node.__fixedWindowMod__;\n                    node.style.paddingRight = '';\n                }\n            });\n            global.document.documentElement.classList.remove(CLS_FIXED_WINDOW);\n            Event.dispatchAndFire(global.document, EVENT_AFTER_FIXED_REMOVE);\n            this.isFixedWindowActive = false;\n        }\n    }\n\n    /**\n     * Will close a window when no widgets are opened that need one\n     */\n    resizeListener() {\n        this.windowWidth = global.innerWidth;\n        this._checkFixedNeeded();\n    }\n\n    /**\n     * @returns {FixedWindow}\n     */\n    static getInstance() {\n        if (!fixedWindowInstance) {\n            fixedWindowInstance = new FixedWindow();\n            fixedWindowInstance.windowWidth = global.innerWidth;\n            const eventHandler = fixedWindowInstance.resizeListener.bind(fixedWindowInstance);\n            global.addEventListener(\n                'resize',\n                debounce(eventHandler, 500)\n            );\n            global.addEventListener('orientationchange', eventHandler);\n        }\n        return fixedWindowInstance;\n    }\n\n    /**\n     * Request a close of the fixed window\n     */\n    close() {\n        this.widgets.pop();\n        this._checkFixedNeeded();\n        if (this.widgets.length === 0) {\n            this._removeFixedContainer();\n        }\n    }\n\n    /**\n     * Request to open a fixed windows\n     * @param {Object|DestroyableWidget} instance\n     * @param {HTMLElement} element\n     */\n    open(instance, element) {\n        let fixed = false;\n        if (typeof instance === 'object') {\n            const widget = instance.constructor;\n            const fixedWidget = this.fixedScreenConstraints[instance.constructor];\n            if (widget && fixedWidget) {\n                fixed = fixedWidget(this.windowWidth, instance);\n            }\n            this.widgets.push(\n                {\n                    widget,\n                    element,\n                    fixed\n                }\n            );\n            // open a new window if there is no window active\n            if (!this.isFixedWindowActive && fixed) {\n                this._addFixedContainer();\n            }\n        }\n    }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/main/lib/FixedWindow.js","export default (fn, ms) => (...args) => {\n    clearTimeout(fn.timeout);\n    fn.timeout = setTimeout(fn.bind(this, ...args), ms);\n    return fn.timeout;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/main/lib/debounce.js","import Modal from '../Modal';\nimport Settings from '../util/Settings';\nimport Widget from '../Widget';\n\n// default export as component object\nexport default {\n    Modal,\n    Settings,\n    Widget\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/main/modules/Modal.js"],"sourceRoot":""}