Sindbad~EG File Manager

Current Path : /var/www/html/ceade.tocsa.com.py/admin/tool/usertours/amd/build/
Upload File :
Current File : /var/www/html/ceade.tocsa.com.py/admin/tool/usertours/amd/build/tour.min.js.map

{"version":3,"file":"tour.min.js","sources":["../src/tour.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.\n\n/**\n * Manage user tours in Moodle.\n *\n * @module tool_usertours/tour\n * @copyright  2018 Andrew Nicols <andrew@nicols.co.uk>\n * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport $ from 'jquery';\nimport * as Aria from 'core/aria';\nimport Popper from 'core/popper';\n\n/**\n * A Tour.\n *\n * @class\n */\nexport default class Tour {\n    /**\n     * @param   {object}    config  The configuration object.\n     */\n    constructor(config) {\n        this.init(config);\n    }\n\n    /**\n     * Initialise the tour.\n     *\n     * @method  init\n     * @param   {Object}    config  The configuration object.\n     * @chainable\n     * @return {Object} this.\n     */\n    init(config) {\n        // Unset all handlers.\n        this.eventHandlers = {};\n\n        // Reset the current tour states.\n        this.reset();\n\n        // Store the initial configuration.\n        this.originalConfiguration = config || {};\n\n        // Apply configuration.\n        this.configure.apply(this, arguments);\n\n        try {\n            this.storage = window.sessionStorage;\n            this.storageKey = 'tourstate_' + this.tourName;\n        } catch (e) {\n            this.storage = false;\n            this.storageKey = '';\n        }\n\n        return this;\n    }\n\n    /**\n     * Reset the current tour state.\n     *\n     * @method  reset\n     * @chainable\n     * @return {Object} this.\n     */\n    reset() {\n        // Hide the current step.\n        this.hide();\n\n        // Unset all handlers.\n        this.eventHandlers = [];\n\n        // Unset all listeners.\n        this.resetStepListeners();\n\n        // Unset the original configuration.\n        this.originalConfiguration = {};\n\n        // Reset the current step number and list of steps.\n        this.steps = [];\n\n        // Reset the current step number.\n        this.currentStepNumber = 0;\n\n        return this;\n    }\n\n    /**\n     * Prepare tour configuration.\n     *\n     * @method  configure\n     * @param {Object} config The configuration object.\n     * @chainable\n     * @return {Object} this.\n     */\n    configure(config) {\n        if (typeof config === 'object') {\n            // Tour name.\n            if (typeof config.tourName !== 'undefined') {\n                this.tourName = config.tourName;\n            }\n\n            // Set up eventHandlers.\n            if (config.eventHandlers) {\n                for (let eventName in config.eventHandlers) {\n                    config.eventHandlers[eventName].forEach(function(handler) {\n                        this.addEventHandler(eventName, handler);\n                    }, this);\n                }\n            }\n\n            // Reset the step configuration.\n            this.resetStepDefaults(true);\n\n            // Configure the steps.\n            if (typeof config.steps === 'object') {\n                this.steps = config.steps;\n            }\n\n            if (typeof config.template !== 'undefined') {\n                this.templateContent = config.template;\n            }\n        }\n\n        // Check that we have enough to start the tour.\n        this.checkMinimumRequirements();\n\n        return this;\n    }\n\n    /**\n     * Check that the configuration meets the minimum requirements.\n     *\n     * @method  checkMinimumRequirements\n     */\n    checkMinimumRequirements() {\n        // Need a tourName.\n        if (!this.tourName) {\n            throw new Error(\"Tour Name required\");\n        }\n\n        // Need a minimum of one step.\n        if (!this.steps || !this.steps.length) {\n            throw new Error(\"Steps must be specified\");\n        }\n    }\n\n    /**\n     * Reset step default configuration.\n     *\n     * @method  resetStepDefaults\n     * @param   {Boolean}   loadOriginalConfiguration   Whether to load the original configuration supplied with the Tour.\n     * @chainable\n     * @return {Object} this.\n     */\n    resetStepDefaults(loadOriginalConfiguration) {\n        if (typeof loadOriginalConfiguration === 'undefined') {\n            loadOriginalConfiguration = true;\n        }\n\n        this.stepDefaults = {};\n        if (!loadOriginalConfiguration || typeof this.originalConfiguration.stepDefaults === 'undefined') {\n            this.setStepDefaults({});\n        } else {\n            this.setStepDefaults(this.originalConfiguration.stepDefaults);\n        }\n\n        return this;\n    }\n\n    /**\n     * Set the step defaults.\n     *\n     * @method  setStepDefaults\n     * @param   {Object}    stepDefaults                The step defaults to apply to all steps\n     * @chainable\n     * @return {Object} this.\n     */\n    setStepDefaults(stepDefaults) {\n        if (!this.stepDefaults) {\n            this.stepDefaults = {};\n        }\n        $.extend(\n            this.stepDefaults,\n            {\n                element:        '',\n                placement:      'top',\n                delay:          0,\n                moveOnClick:    false,\n                moveAfterTime:  0,\n                orphan:         false,\n                direction:      1,\n            },\n            stepDefaults\n        );\n\n        return this;\n    }\n\n    /**\n     * Retrieve the current step number.\n     *\n     * @method  getCurrentStepNumber\n     * @return  {Integer}                   The current step number\n     */\n    getCurrentStepNumber() {\n        return parseInt(this.currentStepNumber, 10);\n    }\n\n    /**\n     * Store the current step number.\n     *\n     * @method  setCurrentStepNumber\n     * @param   {Integer}   stepNumber      The current step number\n     * @chainable\n     */\n    setCurrentStepNumber(stepNumber) {\n        this.currentStepNumber = stepNumber;\n        if (this.storage) {\n            try {\n                this.storage.setItem(this.storageKey, stepNumber);\n            } catch (e) {\n                if (e.code === DOMException.QUOTA_EXCEEDED_ERR) {\n                    this.storage.removeItem(this.storageKey);\n                }\n            }\n        }\n    }\n\n    /**\n     * Get the next step number after the currently displayed step.\n     *\n     * @method  getNextStepNumber\n     * @param   {Integer}   stepNumber      The current step number\n     * @return  {Integer}    The next step number to display\n     */\n    getNextStepNumber(stepNumber) {\n        if (typeof stepNumber === 'undefined') {\n            stepNumber = this.getCurrentStepNumber();\n        }\n        let nextStepNumber = stepNumber + 1;\n\n        // Keep checking the remaining steps.\n        while (nextStepNumber <= this.steps.length) {\n            if (this.isStepPotentiallyVisible(this.getStepConfig(nextStepNumber))) {\n                return nextStepNumber;\n            }\n            nextStepNumber++;\n        }\n\n        return null;\n    }\n\n    /**\n     * Get the previous step number before the currently displayed step.\n     *\n     * @method  getPreviousStepNumber\n     * @param   {Integer}   stepNumber      The current step number\n     * @return  {Integer}    The previous step number to display\n     */\n    getPreviousStepNumber(stepNumber) {\n        if (typeof stepNumber === 'undefined') {\n            stepNumber = this.getCurrentStepNumber();\n        }\n        let previousStepNumber = stepNumber - 1;\n\n        // Keep checking the remaining steps.\n        while (previousStepNumber >= 0) {\n            if (this.isStepPotentiallyVisible(this.getStepConfig(previousStepNumber))) {\n                return previousStepNumber;\n            }\n            previousStepNumber--;\n        }\n\n        return null;\n    }\n\n    /**\n     * Is the step the final step number?\n     *\n     * @method  isLastStep\n     * @param   {Integer}   stepNumber  Step number to test\n     * @return  {Boolean}               Whether the step is the final step\n     */\n    isLastStep(stepNumber) {\n        let nextStepNumber = this.getNextStepNumber(stepNumber);\n\n        return nextStepNumber === null;\n    }\n\n    /**\n     * Is the step the first step number?\n     *\n     * @method  isFirstStep\n     * @param   {Integer}   stepNumber  Step number to test\n     * @return  {Boolean}               Whether the step is the first step\n     */\n    isFirstStep(stepNumber) {\n        let previousStepNumber = this.getPreviousStepNumber(stepNumber);\n\n        return previousStepNumber === null;\n    }\n\n    /**\n     * Is this step potentially visible?\n     *\n     * @method  isStepPotentiallyVisible\n     * @param   {Object}    stepConfig      The step configuration to normalise\n     * @return  {Boolean}               Whether the step is the potentially visible\n     */\n    isStepPotentiallyVisible(stepConfig) {\n        if (!stepConfig) {\n            // Without step config, there can be no step.\n            return false;\n        }\n\n        if (this.isStepActuallyVisible(stepConfig)) {\n            // If it is actually visible, it is already potentially visible.\n            return true;\n        }\n\n        if (typeof stepConfig.orphan !== 'undefined' && stepConfig.orphan) {\n            // Orphan steps have no target. They are always visible.\n            return true;\n        }\n\n        if (typeof stepConfig.delay !== 'undefined' && stepConfig.delay) {\n            // Only return true if the activated has not been used yet.\n            return true;\n        }\n\n        // Not theoretically, or actually visible.\n        return false;\n    }\n\n    /**\n     * Is this step actually visible?\n     *\n     * @method  isStepActuallyVisible\n     * @param   {Object}    stepConfig      The step configuration to normalise\n     * @return  {Boolean}               Whether the step is actually visible\n     */\n    isStepActuallyVisible(stepConfig) {\n        if (!stepConfig) {\n            // Without step config, there can be no step.\n            return false;\n        }\n\n        let target = this.getStepTarget(stepConfig);\n        if (target && target.length && target.is(':visible')) {\n            // Without a target, there can be no step.\n            return !!target.length;\n        }\n\n        return false;\n    }\n\n    /**\n     * Go to the next step in the tour.\n     *\n     * @method  next\n     * @chainable\n     * @return {Object} this.\n     */\n    next() {\n        return this.gotoStep(this.getNextStepNumber());\n    }\n\n    /**\n     * Go to the previous step in the tour.\n     *\n     * @method  previous\n     * @chainable\n     * @return {Object} this.\n     */\n    previous() {\n        return this.gotoStep(this.getPreviousStepNumber(), -1);\n    }\n\n    /**\n     * Go to the specified step in the tour.\n     *\n     * @method  gotoStep\n     * @param   {Integer}   stepNumber     The step number to display\n     * @param   {Integer}   direction      Next or previous step\n     * @chainable\n     * @return {Object} this.\n     */\n    gotoStep(stepNumber, direction) {\n        if (stepNumber < 0) {\n            return this.endTour();\n        }\n\n        let stepConfig = this.getStepConfig(stepNumber);\n        if (stepConfig === null) {\n            return this.endTour();\n        }\n\n        return this._gotoStep(stepConfig, direction);\n    }\n\n    _gotoStep(stepConfig, direction) {\n        if (!stepConfig) {\n            return this.endTour();\n        }\n\n        if (typeof stepConfig.delay !== 'undefined' && stepConfig.delay && !stepConfig.delayed) {\n            stepConfig.delayed = true;\n            window.setTimeout(this._gotoStep.bind(this), stepConfig.delay, stepConfig, direction);\n\n            return this;\n        } else if (!stepConfig.orphan && !this.isStepActuallyVisible(stepConfig)) {\n            let fn = direction == -1 ? 'getPreviousStepNumber' : 'getNextStepNumber';\n            return this.gotoStep(this[fn](stepConfig.stepNumber), direction);\n        }\n\n        this.hide();\n\n        this.fireEventHandlers('beforeRender', stepConfig);\n        this.renderStep(stepConfig);\n        this.fireEventHandlers('afterRender', stepConfig);\n\n        return this;\n    }\n\n    /**\n     * Fetch the normalised step configuration for the specified step number.\n     *\n     * @method  getStepConfig\n     * @param   {Integer}   stepNumber      The step number to fetch configuration for\n     * @return  {Object}                    The step configuration\n     */\n    getStepConfig(stepNumber) {\n        if (stepNumber === null || stepNumber < 0 || stepNumber >= this.steps.length) {\n            return null;\n        }\n\n        // Normalise the step configuration.\n        let stepConfig = this.normalizeStepConfig(this.steps[stepNumber]);\n\n        // Add the stepNumber to the stepConfig.\n        stepConfig = $.extend(stepConfig, {stepNumber: stepNumber});\n\n        return stepConfig;\n    }\n\n    /**\n     * Normalise the supplied step configuration.\n     *\n     * @method  normalizeStepConfig\n     * @param   {Object}    stepConfig      The step configuration to normalise\n     * @return  {Object}                    The normalised step configuration\n     */\n    normalizeStepConfig(stepConfig) {\n\n        if (typeof stepConfig.reflex !== 'undefined' && typeof stepConfig.moveAfterClick === 'undefined') {\n            stepConfig.moveAfterClick = stepConfig.reflex;\n        }\n\n        if (typeof stepConfig.element !== 'undefined' && typeof stepConfig.target === 'undefined') {\n            stepConfig.target = stepConfig.element;\n        }\n\n        if (typeof stepConfig.content !== 'undefined' && typeof stepConfig.body === 'undefined') {\n            stepConfig.body = stepConfig.content;\n        }\n\n        stepConfig = $.extend({}, this.stepDefaults, stepConfig);\n\n        stepConfig = $.extend({}, {\n            attachTo: stepConfig.target,\n            attachPoint: 'after',\n        }, stepConfig);\n\n        if (stepConfig.attachTo) {\n            stepConfig.attachTo = $(stepConfig.attachTo).first();\n        }\n\n        return stepConfig;\n    }\n\n    /**\n     * Fetch the actual step target from the selector.\n     *\n     * This should not be called until after any delay has completed.\n     *\n     * @method  getStepTarget\n     * @param   {Object}    stepConfig      The step configuration\n     * @return  {$}\n     */\n    getStepTarget(stepConfig) {\n        if (stepConfig.target) {\n            return $(stepConfig.target);\n        }\n\n        return null;\n    }\n\n    /**\n     * Fire any event handlers for the specified event.\n     *\n     * @param   {String}    eventName       The name of the event to handle\n     * @param   {Object}    data            Any data to pass to the event\n     * @chainable\n     * @return {Object} this.\n     */\n    fireEventHandlers(eventName, data) {\n        if (typeof this.eventHandlers[eventName] === 'undefined') {\n            return this;\n        }\n\n        this.eventHandlers[eventName].forEach(function(thisEvent) {\n            thisEvent.call(this, data);\n        }, this);\n\n        return this;\n    }\n\n    /**\n     * @method addEventHandler\n     * @param  {string}      eventName       The name of the event to listen for\n     * @param  {function}    handler         The event handler to call\n     * @return {Object} this.\n     */\n    addEventHandler(eventName, handler) {\n        if (typeof this.eventHandlers[eventName] === 'undefined') {\n            this.eventHandlers[eventName] = [];\n        }\n\n        this.eventHandlers[eventName].push(handler);\n\n        return this;\n    }\n\n    /**\n     * Process listeners for the step being shown.\n     *\n     * @method  processStepListeners\n     * @param   {object}    stepConfig      The configuration for the step\n     * @chainable\n     * @return {Object} this.\n     */\n    processStepListeners(stepConfig) {\n        this.listeners.push(\n        // Next/Previous buttons.\n        {\n            node: this.currentStepNode,\n            args: ['click', '[data-role=\"next\"]', $.proxy(this.next, this)]\n        }, {\n            node: this.currentStepNode,\n            args: ['click', '[data-role=\"previous\"]', $.proxy(this.previous, this)]\n        },\n\n        // Close and end tour buttons.\n        {\n            node: this.currentStepNode,\n            args: ['click', '[data-role=\"end\"]', $.proxy(this.endTour, this)]\n        },\n\n        // Click backdrop and hide tour.\n        {\n            node: $('[data-flexitour=\"backdrop\"]'),\n            args: ['click', $.proxy(this.hide, this)]\n        },\n\n        // Keypresses.\n        {\n            node: $('body'),\n            args: ['keydown', $.proxy(this.handleKeyDown, this)]\n        });\n\n        if (stepConfig.moveOnClick) {\n            var targetNode = this.getStepTarget(stepConfig);\n            this.listeners.push({\n                node: targetNode,\n                args: ['click', $.proxy(function(e) {\n                    if ($(e.target).parents('[data-flexitour=\"container\"]').length === 0) {\n                        // Ignore clicks when they are in the flexitour.\n                        window.setTimeout($.proxy(this.next, this), 500);\n                    }\n                }, this)]\n            });\n        }\n\n        this.listeners.forEach(function(listener) {\n            listener.node.on.apply(listener.node, listener.args);\n        });\n\n        return this;\n    }\n\n    /**\n     * Reset step listeners.\n     *\n     * @method  resetStepListeners\n     * @chainable\n     * @return {Object} this.\n     */\n    resetStepListeners() {\n        // Stop listening to all external handlers.\n        if (this.listeners) {\n            this.listeners.forEach(function(listener) {\n                listener.node.off.apply(listener.node, listener.args);\n            });\n        }\n        this.listeners = [];\n\n        return this;\n    }\n\n    /**\n     * The standard step renderer.\n     *\n     * @method  renderStep\n     * @param   {Object}    stepConfig      The step configuration of the step\n     * @chainable\n     * @return {Object} this.\n     */\n    renderStep(stepConfig) {\n        // Store the current step configuration for later.\n        this.currentStepConfig = stepConfig;\n        this.setCurrentStepNumber(stepConfig.stepNumber);\n\n        // Fetch the template and convert it to a $ object.\n        let template = $(this.getTemplateContent());\n\n        // Title.\n        template.find('[data-placeholder=\"title\"]')\n            .html(stepConfig.title);\n\n        // Body.\n        template.find('[data-placeholder=\"body\"]')\n            .html(stepConfig.body);\n\n        // Is this the first step?\n        if (this.isFirstStep(stepConfig.stepNumber)) {\n            template.find('[data-role=\"previous\"]').hide();\n        } else {\n            template.find('[data-role=\"previous\"]').prop('disabled', false);\n        }\n\n        // Is this the final step?\n        if (this.isLastStep(stepConfig.stepNumber)) {\n            template.find('[data-role=\"next\"]').hide();\n            template.find('[data-role=\"end\"]').removeClass(\"btn-secondary\").addClass(\"btn-primary\");\n        } else {\n            template.find('[data-role=\"next\"]').prop('disabled', false);\n        }\n\n        template.find('[data-role=\"previous\"]').attr('role', 'button');\n        template.find('[data-role=\"next\"]').attr('role', 'button');\n        template.find('[data-role=\"end\"]').attr('role', 'button');\n\n        // Replace the template with the updated version.\n        stepConfig.template = template;\n\n        // Add to the page.\n        this.addStepToPage(stepConfig);\n\n        // Process step listeners after adding to the page.\n        // This uses the currentNode.\n        this.processStepListeners(stepConfig);\n\n        return this;\n    }\n\n    /**\n     * Getter for the template content.\n     *\n     * @method  getTemplateContent\n     * @return  {$}\n     */\n    getTemplateContent() {\n        return $(this.templateContent).clone();\n    }\n\n    /**\n     * Helper to add a step to the page.\n     *\n     * @method  addStepToPage\n     * @param   {Object}    stepConfig      The step configuration of the step\n     * @chainable\n     * @return {Object} this.\n     */\n    addStepToPage(stepConfig) {\n        // Create the stepNode from the template data.\n        let currentStepNode = $('<span data-flexitour=\"container\"></span>')\n            .html(stepConfig.template)\n            .hide();\n\n        // The scroll animation occurs on the body or html.\n        let animationTarget = $('body, html')\n            .stop(true, true);\n\n        if (this.isStepActuallyVisible(stepConfig)) {\n            let targetNode = this.getStepTarget(stepConfig);\n\n            targetNode.data('flexitour', 'target');\n\n            let zIndex = this.calculateZIndex(targetNode);\n            if (zIndex) {\n                stepConfig.zIndex = zIndex + 1;\n            }\n\n            if (stepConfig.zIndex) {\n                currentStepNode.css('zIndex', stepConfig.zIndex + 1);\n            }\n\n            // Add the backdrop.\n            this.positionBackdrop(stepConfig);\n\n            $(document.body).append(currentStepNode);\n            this.currentStepNode = currentStepNode;\n\n            // Ensure that the step node is positioned.\n            // Some situations mean that the value is not properly calculated without this step.\n            this.currentStepNode.css({\n                top: 0,\n                left: 0,\n            });\n\n            animationTarget\n                .animate({\n                    scrollTop: this.calculateScrollTop(stepConfig),\n                }).promise().then(function() {\n                        this.positionStep(stepConfig);\n                        this.revealStep(stepConfig);\n                        return;\n                    }.bind(this))\n                    .catch(function() {\n                        // Silently fail.\n                    });\n\n        } else if (stepConfig.orphan) {\n            stepConfig.isOrphan = true;\n\n            // This will be appended to the body instead.\n            stepConfig.attachTo = $('body').first();\n            stepConfig.attachPoint = 'append';\n\n            // Add the backdrop.\n            this.positionBackdrop(stepConfig);\n\n            // This is an orphaned step.\n            currentStepNode.addClass('orphan');\n\n            // It lives in the body.\n            $(document.body).append(currentStepNode);\n            this.currentStepNode = currentStepNode;\n\n            this.currentStepNode.offset(this.calculateStepPositionInPage());\n            this.currentStepNode.css('position', 'fixed');\n\n            this.currentStepPopper = new Popper(\n                $('body'),\n                this.currentStepNode[0], {\n                    removeOnDestroy: true,\n                    placement: stepConfig.placement + '-start',\n                    arrowElement: '[data-role=\"arrow\"]',\n                    // Empty the modifiers. We've already placed the step and don't want it moved.\n                    modifiers: {\n                        hide: {\n                            enabled: false,\n                        },\n                        applyStyle: {\n                            onLoad: null,\n                            enabled: false,\n                        },\n                    }\n                }\n            );\n\n            this.revealStep(stepConfig);\n        }\n\n        return this;\n    }\n\n    /**\n     * Make the given step visible.\n     *\n     * @method revealStep\n     * @param {Object} stepConfig The step configuration of the step\n     * @chainable\n     * @return {Object} this.\n     */\n    revealStep(stepConfig) {\n        // Fade the step in.\n        this.currentStepNode.fadeIn('', $.proxy(function() {\n                // Announce via ARIA.\n                this.announceStep(stepConfig);\n\n                // Focus on the current step Node.\n                this.currentStepNode.focus();\n                window.setTimeout($.proxy(function() {\n                    // After a brief delay, focus again.\n                    // There seems to be an issue with Jaws where it only reads the dialogue title initially.\n                    // This second focus helps it to read the full dialogue.\n                    if (this.currentStepNode) {\n                        this.currentStepNode.focus();\n                    }\n                }, this), 100);\n\n            }, this));\n\n        return this;\n    }\n\n    /**\n     * Helper to announce the step on the page.\n     *\n     * @method  announceStep\n     * @param   {Object}    stepConfig      The step configuration of the step\n     * @chainable\n     * @return {Object} this.\n     */\n    announceStep(stepConfig) {\n        // Setup the step Dialogue as per:\n        // * https://www.w3.org/TR/wai-aria-practices/#dialog_nonmodal\n        // * https://www.w3.org/TR/wai-aria-practices/#dialog_modal\n\n        // Generate an ID for the current step node.\n        let stepId = 'tour-step-' + this.tourName + '-' + stepConfig.stepNumber;\n        this.currentStepNode.attr('id', stepId);\n\n        let bodyRegion = this.currentStepNode.find('[data-placeholder=\"body\"]').first();\n        bodyRegion.attr('id', stepId + '-body');\n        bodyRegion.attr('role', 'document');\n\n        let headerRegion = this.currentStepNode.find('[data-placeholder=\"title\"]').first();\n        headerRegion.attr('id', stepId + '-title');\n        headerRegion.attr('aria-labelledby', stepId + '-body');\n\n        // Generally, a modal dialog has a role of dialog.\n        this.currentStepNode.attr('role', 'dialog');\n        this.currentStepNode.attr('tabindex', 0);\n        this.currentStepNode.attr('aria-labelledby', stepId + '-title');\n        this.currentStepNode.attr('aria-describedby', stepId + '-body');\n\n        // Configure ARIA attributes on the target.\n        let target = this.getStepTarget(stepConfig);\n        if (target) {\n            if (!target.attr('tabindex')) {\n                target.attr('tabindex', 0);\n            }\n\n            target\n                .data('original-describedby', target.attr('aria-describedby'))\n                .attr('aria-describedby', stepId + '-body')\n                ;\n        }\n\n        this.accessibilityShow(stepConfig);\n\n        return this;\n    }\n\n    /**\n     * Handle key down events.\n     *\n     * @method  handleKeyDown\n     * @param   {EventFacade} e\n     */\n    handleKeyDown(e) {\n        let tabbableSelector = 'a[href], link[href], [draggable=true], [contenteditable=true], ';\n        tabbableSelector += ':input:enabled, [tabindex], button:enabled';\n        switch (e.keyCode) {\n            case 27:\n                this.endTour();\n                break;\n\n            // 9 == Tab - trap focus for items with a backdrop.\n            case 9:\n                // Tab must be handled on key up only in this instance.\n                (function() {\n                    if (!this.currentStepConfig.hasBackdrop) {\n                        // Trapping tab focus is only handled for those steps with a backdrop.\n                        return;\n                    }\n\n                    // Find all tabbable locations.\n                    let activeElement = $(document.activeElement);\n                    let stepTarget = this.getStepTarget(this.currentStepConfig);\n                    let tabbableNodes = $(tabbableSelector);\n                    let dialogContainer = $('span[data-flexitour=\"container\"]');\n                    let currentIndex;\n                    // Filter out element which is not belong to target section or dialogue.\n                    if (stepTarget) {\n                        tabbableNodes = tabbableNodes.filter(function(index, element) {\n                            return stepTarget !== null\n                                && (stepTarget.has(element).length\n                                    || dialogContainer.has(element).length\n                                    || stepTarget.is(element)\n                                    || dialogContainer.is(element));\n                        });\n                    }\n\n                    // Find index of focusing element.\n                    tabbableNodes.each(function(index, element) {\n                        if (activeElement.is(element)) {\n                            currentIndex = index;\n                            return false;\n                        }\n                        // Keep looping.\n                        return true;\n                    });\n\n                    let nextIndex;\n                    let nextNode;\n                    let focusRelevant;\n                    if (currentIndex != void 0) {\n                        let direction = 1;\n                        if (e.shiftKey) {\n                            direction = -1;\n                        }\n                        nextIndex = currentIndex;\n                        do {\n                            nextIndex += direction;\n                            nextNode = $(tabbableNodes[nextIndex]);\n                        } while (nextNode.length && nextNode.is(':disabled') || nextNode.is(':hidden'));\n                        if (nextNode.length) {\n                            // A new f\n                            focusRelevant = nextNode.closest(stepTarget).length;\n                            focusRelevant = focusRelevant || nextNode.closest(this.currentStepNode).length;\n                        } else {\n                            // Unable to find the target somehow.\n                            focusRelevant = false;\n                        }\n                    }\n\n                    if (focusRelevant) {\n                        nextNode.focus();\n                    } else {\n                        if (e.shiftKey) {\n                            // Focus on the last tabbable node in the step.\n                            this.currentStepNode.find(tabbableSelector).last().focus();\n                        } else {\n                            if (this.currentStepConfig.isOrphan) {\n                                // Focus on the step - there is no target.\n                                this.currentStepNode.focus();\n                            } else {\n                                // Focus on the step target.\n                                stepTarget.focus();\n                            }\n                        }\n                    }\n                    e.preventDefault();\n                }).call(this);\n                break;\n        }\n    }\n\n    /**\n     * Start the current tour.\n     *\n     * @method  startTour\n     * @param   {Integer}   startAt     Which step number to start at. If not specified, starts at the last point.\n     * @chainable\n     * @return {Object} this.\n     */\n    startTour(startAt) {\n        if (this.storage && typeof startAt === 'undefined') {\n            let storageStartValue = this.storage.getItem(this.storageKey);\n            if (storageStartValue) {\n                let storageStartAt = parseInt(storageStartValue, 10);\n                if (storageStartAt <= this.steps.length) {\n                    startAt = storageStartAt;\n                }\n            }\n        }\n\n        if (typeof startAt === 'undefined') {\n            startAt = this.getCurrentStepNumber();\n        }\n\n        this.fireEventHandlers('beforeStart', startAt);\n        this.gotoStep(startAt);\n        this.fireEventHandlers('afterStart', startAt);\n\n        return this;\n    }\n\n    /**\n     * Restart the tour from the beginning, resetting the completionlag.\n     *\n     * @method  restartTour\n     * @chainable\n     * @return {Object} this.\n     */\n    restartTour() {\n        return this.startTour(0);\n    }\n\n    /**\n     * End the current tour.\n     *\n     * @method  endTour\n     * @chainable\n     * @return {Object} this.\n     */\n    endTour() {\n        this.fireEventHandlers('beforeEnd');\n\n        if (this.currentStepConfig) {\n            let previousTarget = this.getStepTarget(this.currentStepConfig);\n            if (previousTarget) {\n                if (!previousTarget.attr('tabindex')) {\n                    previousTarget.attr('tabindex', '-1');\n                }\n                previousTarget.focus();\n            }\n        }\n\n        this.hide(true);\n\n        this.fireEventHandlers('afterEnd');\n\n        return this;\n    }\n\n    /**\n     * Hide any currently visible steps.\n     *\n     * @method hide\n     * @param {Bool} transition Animate the visibility change\n     * @chainable\n     * @return {Object} this.\n     */\n    hide(transition) {\n        this.fireEventHandlers('beforeHide');\n\n        if (this.currentStepNode && this.currentStepNode.length) {\n            this.currentStepNode.hide();\n            if (this.currentStepPopper) {\n                this.currentStepPopper.destroy();\n            }\n        }\n\n        // Restore original target configuration.\n        if (this.currentStepConfig) {\n            let target = this.getStepTarget(this.currentStepConfig);\n            if (target) {\n                if (target.data('original-labelledby')) {\n                    target.attr('aria-labelledby', target.data('original-labelledby'));\n                }\n\n                if (target.data('original-describedby')) {\n                    target.attr('aria-describedby', target.data('original-describedby'));\n                }\n\n                if (target.data('original-tabindex')) {\n                    target.attr('tabindex', target.data('tabindex'));\n                }\n            }\n\n            // Clear the step configuration.\n            this.currentStepConfig = null;\n        }\n\n        let fadeTime = 0;\n        if (transition) {\n            fadeTime = 400;\n        }\n\n        // Remove the backdrop features.\n        $('[data-flexitour=\"step-background\"]').remove();\n        $('[data-flexitour=\"step-backdrop\"]').removeAttr('data-flexitour');\n        $('[data-flexitour=\"backdrop\"]').fadeOut(fadeTime, function() {\n            $(this).remove();\n        });\n\n        // Remove aria-describedby and tabindex attributes.\n        if (this.currentStepNode && this.currentStepNode.length) {\n            let stepId = this.currentStepNode.attr('id');\n            if (stepId) {\n                let currentStepElement = '[aria-describedby=\"' + stepId + '-body\"]';\n                $(currentStepElement).removeAttr('tabindex');\n                $(currentStepElement).removeAttr('aria-describedby');\n            }\n        }\n\n        // Reset the listeners.\n        this.resetStepListeners();\n\n        this.accessibilityHide();\n\n        this.fireEventHandlers('afterHide');\n\n        this.currentStepNode = null;\n        this.currentStepPopper = null;\n        return this;\n    }\n\n    /**\n     * Show the current steps.\n     *\n     * @method show\n     * @chainable\n     * @return {Object} this.\n     */\n    show() {\n        // Show the current step.\n        let startAt = this.getCurrentStepNumber();\n\n        return this.gotoStep(startAt);\n    }\n\n    /**\n     * Return the current step node.\n     *\n     * @method  getStepContainer\n     * @return  {jQuery}\n     */\n    getStepContainer() {\n        return $(this.currentStepNode);\n    }\n\n    /**\n     * Calculate scrollTop.\n     *\n     * @method  calculateScrollTop\n     * @param   {Object}    stepConfig      The step configuration of the step\n     * @return  {Number}\n     */\n    calculateScrollTop(stepConfig) {\n        let scrollTop = $(window).scrollTop();\n        let viewportHeight = $(window).height();\n        let targetNode = this.getStepTarget(stepConfig);\n\n        if (stepConfig.placement === 'top') {\n            // If the placement is top, center scroll at the top of the target.\n            scrollTop = targetNode.offset().top - (viewportHeight / 2);\n        } else if (stepConfig.placement === 'bottom') {\n            // If the placement is bottom, center scroll at the bottom of the target.\n            scrollTop = targetNode.offset().top + targetNode.height() - (viewportHeight / 2);\n        } else if (targetNode.height() <= (viewportHeight * 0.8)) {\n            // If the placement is left/right, and the target fits in the viewport, centre screen on the target\n            scrollTop = targetNode.offset().top - ((viewportHeight - targetNode.height()) / 2);\n        } else {\n            // If the placement is left/right, and the target is bigger than the viewport, set scrollTop to target.top + buffer\n            // and change step attachmentTarget to top+.\n            scrollTop = targetNode.offset().top - (viewportHeight * 0.2);\n        }\n\n        // Never scroll over the top.\n        scrollTop = Math.max(0, scrollTop);\n\n        // Never scroll beyond the bottom.\n        scrollTop = Math.min($(document).height() - viewportHeight, scrollTop);\n\n        return Math.ceil(scrollTop);\n    }\n\n    /**\n     * Calculate dialogue position for page middle.\n     *\n     * @method  calculateScrollTop\n     * @return  {Number}\n     */\n    calculateStepPositionInPage() {\n        let viewportHeight = $(window).height();\n        let stepHeight = this.currentStepNode.height();\n\n        let viewportWidth = $(window).width();\n        let stepWidth = this.currentStepNode.width();\n\n        return {\n            top: Math.ceil((viewportHeight - stepHeight) / 2),\n            left: Math.ceil((viewportWidth - stepWidth) / 2)\n        };\n    }\n\n    /**\n     * Position the step on the page.\n     *\n     * @method  positionStep\n     * @param   {Object}    stepConfig      The step configuration of the step\n     * @chainable\n     * @return {Object} this.\n     */\n    positionStep(stepConfig) {\n        let content = this.currentStepNode;\n        if (!content || !content.length) {\n            // Unable to find the step node.\n            return this;\n        }\n\n        stepConfig.placement = this.recalculatePlacement(stepConfig);\n        let flipBehavior;\n        switch (stepConfig.placement) {\n            case 'left':\n                flipBehavior = ['left', 'right', 'top', 'bottom'];\n                break;\n            case 'right':\n                flipBehavior = ['right', 'left', 'top', 'bottom'];\n                break;\n            case 'top':\n                flipBehavior = ['top', 'bottom', 'right', 'left'];\n                break;\n            case 'bottom':\n                flipBehavior = ['bottom', 'top', 'right', 'left'];\n                break;\n            default:\n                flipBehavior = 'flip';\n                break;\n        }\n\n        let target = this.getStepTarget(stepConfig);\n        var config = {\n            placement: stepConfig.placement + '-start',\n            removeOnDestroy: true,\n            modifiers: {\n                flip: {\n                    behaviour: flipBehavior,\n                },\n                arrow: {\n                    element: '[data-role=\"arrow\"]',\n                },\n            },\n            onCreate: function(data) {\n                recalculateArrowPosition(data);\n            },\n            onUpdate: function(data) {\n                recalculateArrowPosition(data);\n            },\n        };\n\n        let recalculateArrowPosition = function(data) {\n            let placement = data.placement.split('-')[0];\n            const isVertical = ['left', 'right'].indexOf(placement) !== -1;\n            const arrowElement = data.instance.popper.querySelector('[data-role=\"arrow\"]');\n            const stepElement = $(data.instance.popper.querySelector('[data-role=\"flexitour-step\"]'));\n            if (isVertical) {\n                let arrowHeight = parseFloat(window.getComputedStyle(arrowElement).height);\n                let arrowOffset = parseFloat(window.getComputedStyle(arrowElement).top);\n                let popperHeight = parseFloat(window.getComputedStyle(data.instance.popper).height);\n                let popperOffset = parseFloat(window.getComputedStyle(data.instance.popper).top);\n                let popperBorderWidth = parseFloat(stepElement.css('borderTopWidth'));\n                let popperBorderRadiusWidth = parseFloat(stepElement.css('borderTopLeftRadius')) * 2;\n                let arrowPos = arrowOffset + (arrowHeight / 2);\n                let maxPos = popperHeight + popperOffset - popperBorderWidth - popperBorderRadiusWidth;\n                let minPos = popperOffset + popperBorderWidth + popperBorderRadiusWidth;\n                if (arrowPos >= maxPos || arrowPos <= minPos) {\n                    let newArrowPos = 0;\n                    if (arrowPos > (popperHeight / 2)) {\n                        newArrowPos = maxPos - arrowHeight;\n                    } else {\n                        newArrowPos = minPos + arrowHeight;\n                    }\n                    $(arrowElement).css('top', newArrowPos);\n                }\n            } else {\n                let arrowWidth = parseFloat(window.getComputedStyle(arrowElement).width);\n                let arrowOffset = parseFloat(window.getComputedStyle(arrowElement).left);\n                let popperWidth = parseFloat(window.getComputedStyle(data.instance.popper).width);\n                let popperOffset = parseFloat(window.getComputedStyle(data.instance.popper).left);\n                let popperBorderWidth = parseFloat(stepElement.css('borderTopWidth'));\n                let popperBorderRadiusWidth = parseFloat(stepElement.css('borderTopLeftRadius')) * 2;\n                let arrowPos = arrowOffset + (arrowWidth / 2);\n                let maxPos = popperWidth + popperOffset - popperBorderWidth - popperBorderRadiusWidth;\n                let minPos = popperOffset + popperBorderWidth + popperBorderRadiusWidth;\n                if (arrowPos >= maxPos || arrowPos <= minPos) {\n                    let newArrowPos = 0;\n                    if (arrowPos > (popperWidth / 2)) {\n                        newArrowPos = maxPos - arrowWidth;\n                    } else {\n                        newArrowPos = minPos + arrowWidth;\n                    }\n                    $(arrowElement).css('left', newArrowPos);\n                }\n            }\n        };\n\n        let background = $('[data-flexitour=\"step-background\"]');\n        if (background.length) {\n            target = background;\n        }\n        this.currentStepPopper = new Popper(target, content[0], config);\n\n        return this;\n    }\n\n    /**\n     * For left/right placement, checks that there is room for the step at current window size.\n     *\n     * If there is not enough room, changes placement to 'top'.\n     *\n     * @method  recalculatePlacement\n     * @param   {Object}    stepConfig      The step configuration of the step\n     * @return  {String}                    The placement after recalculate\n     */\n    recalculatePlacement(stepConfig) {\n        const buffer = 10;\n        const arrowWidth = 16;\n        let target = this.getStepTarget(stepConfig);\n        let widthContent = this.currentStepNode.width() + arrowWidth;\n        let targetOffsetLeft = target.offset().left - buffer;\n        let targetOffsetRight = target.offset().left + target.width() + buffer;\n        let placement = stepConfig.placement;\n\n        if (['left', 'right'].indexOf(placement) !== -1) {\n            if ((targetOffsetLeft < (widthContent + buffer)) &&\n                ((targetOffsetRight + widthContent + buffer) > document.documentElement.clientWidth)) {\n                placement = 'top';\n            }\n        }\n        return placement;\n    }\n\n    /**\n     * Add the backdrop.\n     *\n     * @method  positionBackdrop\n     * @param   {Object}    stepConfig      The step configuration of the step\n     * @chainable\n     * @return {Object} this.\n     */\n    positionBackdrop(stepConfig) {\n        if (stepConfig.backdrop) {\n            this.currentStepConfig.hasBackdrop = true;\n            let backdrop = $('<div data-flexitour=\"backdrop\"></div>');\n\n            if (stepConfig.zIndex) {\n                if (stepConfig.attachPoint === 'append') {\n                    stepConfig.attachTo.append(backdrop);\n                } else {\n                    backdrop.insertAfter(stepConfig.attachTo);\n                }\n            } else {\n                $('body').append(backdrop);\n            }\n\n            if (this.isStepActuallyVisible(stepConfig)) {\n                // The step has a visible target.\n                // Punch a hole through the backdrop.\n                let background = $('<div data-flexitour=\"step-background\"></div>');\n\n                let targetNode = this.getStepTarget(stepConfig);\n\n                let buffer = 10;\n\n                let colorNode = targetNode;\n                if (buffer) {\n                    colorNode = $('body');\n                }\n\n                background.css({\n                    width: targetNode.outerWidth() + buffer + buffer,\n                    height: targetNode.outerHeight() + buffer + buffer,\n                    left: targetNode.offset().left - buffer,\n                    top: targetNode.offset().top - buffer,\n                    backgroundColor: this.calculateInherittedBackgroundColor(colorNode),\n                });\n\n                if (targetNode.offset().left < buffer) {\n                    background.css({\n                        width: targetNode.outerWidth() + targetNode.offset().left + buffer,\n                        left: targetNode.offset().left,\n                    });\n                }\n\n                if (targetNode.offset().top < buffer) {\n                    background.css({\n                        height: targetNode.outerHeight() + targetNode.offset().top + buffer,\n                        top: targetNode.offset().top,\n                    });\n                }\n\n                let targetRadius = targetNode.css('borderRadius');\n                if (targetRadius && targetRadius !== $('body').css('borderRadius')) {\n                    background.css('borderRadius', targetRadius);\n                }\n\n                let targetPosition = this.calculatePosition(targetNode);\n                if (targetPosition === 'fixed') {\n                    background.css('top', 0);\n                } else if (targetPosition === 'absolute') {\n                    background.css('position', 'fixed');\n                }\n\n                let fader = background.clone();\n                fader.css({\n                    backgroundColor: backdrop.css('backgroundColor'),\n                    opacity: backdrop.css('opacity'),\n                });\n                fader.attr('data-flexitour', 'step-background-fader');\n\n                if (stepConfig.zIndex) {\n                    if (stepConfig.attachPoint === 'append') {\n                        stepConfig.attachTo.append(background);\n                    } else {\n                        fader.insertAfter(stepConfig.attachTo);\n                        background.insertAfter(stepConfig.attachTo);\n                    }\n                } else {\n                    $('body').append(fader);\n                    $('body').append(background);\n                }\n\n                // Add the backdrop data to the actual target.\n                // This is the part which actually does the work.\n                targetNode.attr('data-flexitour', 'step-backdrop');\n\n                if (stepConfig.zIndex) {\n                    backdrop.css('zIndex', stepConfig.zIndex);\n                    background.css('zIndex', stepConfig.zIndex + 1);\n                    targetNode.css('zIndex', stepConfig.zIndex + 2);\n                }\n\n                fader.fadeOut('2000', function() {\n                    $(this).remove();\n                });\n            }\n        }\n        return this;\n    }\n\n    /**\n     * Calculate the inheritted z-index.\n     *\n     * @method  calculateZIndex\n     * @param   {jQuery}    elem                        The element to calculate z-index for\n     * @return  {Number}                                Calculated z-index\n     */\n    calculateZIndex(elem) {\n        elem = $(elem);\n        while (elem.length && elem[0] !== document) {\n            // Ignore z-index if position is set to a value where z-index is ignored by the browser\n            // This makes behavior of this function consistent across browsers\n            // WebKit always returns auto if the element is positioned.\n            let position = elem.css(\"position\");\n            if (position === \"absolute\" || position === \"relative\" || position === \"fixed\") {\n                // IE returns 0 when zIndex is not specified\n                // other browsers return a string\n                // we ignore the case of nested elements with an explicit value of 0\n                // <div style=\"z-index: -10;\"><div style=\"z-index: 0;\"></div></div>\n                let value = parseInt(elem.css(\"zIndex\"), 10);\n                if (!isNaN(value) && value !== 0) {\n                    return value;\n                }\n            }\n            elem = elem.parent();\n        }\n\n        return 0;\n    }\n\n    /**\n     * Calculate the inheritted background colour.\n     *\n     * @method  calculateInherittedBackgroundColor\n     * @param   {jQuery}    elem                        The element to calculate colour for\n     * @return  {String}                                Calculated background colour\n     */\n    calculateInherittedBackgroundColor(elem) {\n        // Use a fake node to compare each element against.\n        let fakeNode = $('<div>').hide();\n        $('body').append(fakeNode);\n        let fakeElemColor = fakeNode.css('backgroundColor');\n        fakeNode.remove();\n\n        elem = $(elem);\n        while (elem.length && elem[0] !== document) {\n            let color = elem.css('backgroundColor');\n            if (color !== fakeElemColor) {\n                return color;\n            }\n            elem = elem.parent();\n        }\n\n        return null;\n    }\n\n    /**\n     * Calculate the inheritted position.\n     *\n     * @method  calculatePosition\n     * @param   {jQuery}    elem                        The element to calculate position for\n     * @return  {String}                                Calculated position\n     */\n    calculatePosition(elem) {\n        elem = $(elem);\n        while (elem.length && elem[0] !== document) {\n            let position = elem.css('position');\n            if (position !== 'static') {\n                return position;\n            }\n            elem = elem.parent();\n        }\n\n        return null;\n    }\n\n    /**\n     * Perform accessibility changes for step shown.\n     *\n     * This will add aria-hidden=\"true\" to all siblings and parent siblings.\n     *\n     * @method  accessibilityShow\n     */\n    accessibilityShow() {\n        let stateHolder = 'data-has-hidden';\n        let attrName = 'aria-hidden';\n        let hideFunction = function(child) {\n            let flexitourRole = child.data('flexitour');\n            if (flexitourRole) {\n                switch (flexitourRole) {\n                    case 'container':\n                    case 'target':\n                        return;\n                }\n            }\n\n            let hidden = child.attr(attrName);\n            if (!hidden) {\n                child.attr(stateHolder, true);\n                Aria.hide(child);\n            }\n        };\n\n        this.currentStepNode.siblings().each(function(index, node) {\n            hideFunction($(node));\n        });\n        this.currentStepNode.parentsUntil('body').siblings().each(function(index, node) {\n            hideFunction($(node));\n        });\n    }\n\n    /**\n     * Perform accessibility changes for step hidden.\n     *\n     * This will remove any newly added aria-hidden=\"true\".\n     *\n     * @method  accessibilityHide\n     */\n    accessibilityHide() {\n        let stateHolder = 'data-has-hidden';\n        let showFunction = function(child) {\n            let hidden = child.attr(stateHolder);\n            if (typeof hidden !== 'undefined') {\n                child.removeAttr(stateHolder);\n                Aria.unhide(child);\n            }\n        };\n\n        $('[' + stateHolder + ']').each(function(index, node) {\n            showFunction($(node));\n        });\n    }\n}\n"],"names":["Tour","config","init","eventHandlers","reset","originalConfiguration","configure","apply","this","arguments","storage","window","sessionStorage","storageKey","tourName","e","hide","resetStepListeners","steps","currentStepNumber","_typeof","eventName","forEach","handler","addEventHandler","_this","resetStepDefaults","template","templateContent","checkMinimumRequirements","Error","length","loadOriginalConfiguration","stepDefaults","setStepDefaults","extend","element","placement","delay","moveOnClick","moveAfterTime","orphan","direction","parseInt","stepNumber","setItem","code","DOMException","QUOTA_EXCEEDED_ERR","removeItem","getCurrentStepNumber","nextStepNumber","isStepPotentiallyVisible","getStepConfig","previousStepNumber","getNextStepNumber","getPreviousStepNumber","stepConfig","isStepActuallyVisible","target","getStepTarget","is","gotoStep","endTour","_gotoStep","delayed","setTimeout","bind","fn","fireEventHandlers","renderStep","normalizeStepConfig","$","reflex","moveAfterClick","content","body","attachTo","attachPoint","first","data","thisEvent","call","push","listeners","node","currentStepNode","args","proxy","next","previous","handleKeyDown","targetNode","parents","listener","on","off","currentStepConfig","setCurrentStepNumber","getTemplateContent","find","html","title","isFirstStep","prop","isLastStep","removeClass","addClass","attr","addStepToPage","processStepListeners","clone","animationTarget","stop","zIndex","calculateZIndex","css","positionBackdrop","document","append","top","left","animate","scrollTop","calculateScrollTop","promise","then","positionStep","revealStep","catch","isOrphan","offset","calculateStepPositionInPage","currentStepPopper","Popper","removeOnDestroy","arrowElement","modifiers","enabled","applyStyle","onLoad","fadeIn","announceStep","focus","stepId","bodyRegion","headerRegion","accessibilityShow","tabbableSelector","keyCode","hasBackdrop","currentIndex","nextIndex","nextNode","focusRelevant","activeElement","stepTarget","tabbableNodes","dialogContainer","filter","index","has","each","shiftKey","closest","last","preventDefault","startAt","storageStartValue","getItem","storageStartAt","startTour","previousTarget","transition","destroy","fadeTime","remove","removeAttr","fadeOut","currentStepElement","accessibilityHide","viewportHeight","height","Math","max","min","ceil","stepHeight","viewportWidth","width","stepWidth","flipBehavior","recalculatePlacement","flip","behaviour","arrow","onCreate","recalculateArrowPosition","onUpdate","split","isVertical","indexOf","instance","popper","querySelector","stepElement","arrowHeight","parseFloat","getComputedStyle","arrowOffset","popperHeight","popperOffset","popperBorderWidth","popperBorderRadiusWidth","arrowPos","maxPos","minPos","newArrowPos","arrowWidth","popperWidth","background","widthContent","targetOffsetLeft","targetOffsetRight","documentElement","clientWidth","backdrop","insertAfter","colorNode","outerWidth","outerHeight","backgroundColor","calculateInherittedBackgroundColor","targetRadius","targetPosition","calculatePosition","fader","opacity","elem","position","value","isNaN","parent","fakeNode","fakeElemColor","color","hideFunction","child","flexitourRole","Aria","siblings","parentsUntil","unhide"],"mappings":"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"}

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists