. The tour must attach the popover to\n // modal-content div, NOT the modal-dialog div. But most coders + dialog plugins put the id on the modal-dialog div.\n // So for display, we must adjust the step element to point at modal-content under the modal-dialog div. However if we change the step.element\n // permanently to the modal-content (by changing tour._options.steps), this won't work if the step is reshown (plugin destroys modal, meaning\n // the element jq object is no longer valid) and could potentially screw up other\n // parts of a tour that have dialogs. So instead we record the original element used for this step that involves modals, change the step.element\n // to the modal-content div, then set it back when the step is hidden again.\n //\n // This is ONLY done because it's too difficult to unpick all the original tour code that uses step.element directly.\n this._setStepFlag(this.getCurrentStepIndex(), \"elementModalOriginal\", step.element);\n\n // fix the tour element, the actual visible offset comes from modal > modal-dialog > modal-content and step.element is used to calc this offset & size\n step.element = $(step.element).find(\".modal-content:first\");\n }\n\n const $element = $(step.element);\n\n // is element inside a modal?\n if ($modalObject === null && $element.parents(\".modal:first\").length) {\n // find the parent modal div\n $modalObject = $element.parents(\".modal:first\");\n }\n\n if ($modalObject && $modalObject.length > 0) {\n this._debug(\"Modal identified, onModalHidden callback available\");\n\n // store the modal element for other calls\n this._setStepFlag(i, \"elementModal\", $modalObject)\n\n // modal in use, add callback\n const funcModalHelper = () => {\n this._debug(\"Modal close triggered\");\n\n if (typeof (step.onModalHidden) == \"function\") {\n // if step onModalHidden returns false, do nothing. returns int, move to the step specified.\n // Otherwise continue regular next/end functionality\n const rslt = step.onModalHidden(this, i);\n\n if (rslt === false) {\n this._debug(\"onModalHidden returned exactly false, tour step unchanged\");\n return;\n }\n\n if (Number.isInteger(rslt)) {\n this._debug(\"onModalHidden returned int, tour moving to step \" + rslt + 1);\n\n $_modalObject.off(\"hidden.bs.modal\", funcModalHelper);\n return this.goTo(rslt);\n }\n\n this._debug(\"onModalHidden did not return false or int, continuing tour\");\n }\n\n $_modalObject.off(\"hidden.bs.modal\", funcModalHelper);\n\n return (this._isLast()) ? this.next() : this.end();\n };\n\n $modalObject.off(\"hidden.bs.modal\", funcModalHelper).on(\"hidden.bs.modal\", funcModalHelper);\n }\n\n // Helper function to actually show the popover using _showPopoverAndOverlay\n const showStepHelper = (e) => {\n if (this._isOrphan(step)) {\n if (step.orphan === false) {\n this._debug(\"Skip the orphan step \" + (this._current + 1) + \".\\nOrphan option is false and the element \" + step.element + \" does not exist or is hidden.\");\n\n if (typeof (step.onElementUnavailable) == \"function\") {\n this._debug(\"Calling onElementUnavailable callback\");\n step.onElementUnavailable(this, this._current);\n }\n\n if (skipToPrevious) {\n this._showPrevStep(true);\n } else {\n this._showNextStep(true);\n }\n return;\n }\n this._debug(\"Show the orphan step \" + (this._current + 1) + \". Orphans option is true.\");\n }\n\n //console.log(step);\n\n if (step.autoscroll && !this._isOrphan(step)) {\n this._scrollIntoView(i);\n } else {\n this._showPopoverAndOverlay(i);\n }\n\n if (step.duration) {\n return this.resume();\n }\n };\n // delay in millisec specified in step options\n const showDelay = step.delay.show || step.delay;\n if ({}\n .toString.call(showDelay) === '[object Number]' && showDelay > 0) {\n this._debug(\"Wait \" + showDelay + \" milliseconds to show the step \" + (this._current + 1));\n window.setTimeout(() => {\n return this._callOnPromiseDone(promise, showStepHelper);\n }, showDelay);\n } else {\n if (step.delayOnElement) {\n // delay by element existence or max delay (default 2 sec)\n const revalidateDelayElement = function () {\n if (typeof (step.delayOnElement.delayElement) == \"function\")\n return step.delayOnElement.delayElement();\n else if (step.delayOnElement.delayElement == \"element\")\n return $(step.element);\n else\n return $(step.delayOnElement.delayElement);\n };\n\n const getElementForLogging = function ($element) {\n if ($delayElement.length > 0) {\n return $delayElement.reduce((col, el) => col.push(el.tagName), []).join(', ');\n } else {\n return $delayElement.prop('tagName');\n }\n }\n\n let $delayElement = revalidateDelayElement();\n\n const delayElementLog = getElementForLogging($delayElement);\n let delayMax = (step.delayOnElement.maxDelay ? step.delayOnElement.maxDelay : 2000);\n //\tset max delay to greater than default interval check for element appearance\n delayMax = delayMax < 250 ? 251 : delayMax;\n\n\n this._debug(\"Wait for element \" + delayElementLog + \" visible or max \" + delayMax + \" milliseconds to show the step \" + (this._current + 1));\n\n const delayFunc = window.setInterval(() => {\n this._debug(\"Wait for element \" + delayElementLog + \": checking...\");\n if ($delayElement.length === 0) {\n $delayElement = revalidateDelayElement();\n }\n if ($delayElement.is(':visible')) {\n this._debug(\"Wait for element \" + delayElementLog + \": found, showing step\");\n window.clearInterval(delayFunc);\n delayFunc = null;\n return this._callOnPromiseDone(promise, showStepHelper);\n }\n }, 250);\n\n\n // Set timer to kill the setInterval call after max delay time expires\n window.setTimeout(() => {\n if (delayFunc) {\n this._debug(\"Wait for element \" + delayElementLog + \": max timeout reached without element found\");\n window.clearInterval(delayFunc);\n\n // showStepHelper will handle broken/missing/invisible element\n return this._callOnPromiseDone(promise, showStepHelper);\n }\n }, delayMax);\n } else {\n // no delay by milliseconds or delay by time\n this._callOnPromiseDone(promise, showStepHelper);\n }\n }\n\n return promise;\n };\n\n getCurrentStepIndex() {\n return this._current;\n };\n\n setCurrentStep(value) {\n if (value != null) {\n this._current = value;\n this._setState('current_step', value);\n } else {\n this._current = this._getState('current_step');\n this._current = this._current === null ? 0 : parseInt(this._current, 10);\n }\n\n return this;\n };\n\n\n _setState(key, value) {\n if (this._options.storage) {\n const keyName = this._options.name + \"_\" + key;\n try {\n this._options.storage.setItem(keyName, value);\n } catch (error) {\n if (error.code === DOMException.QUOTA_EXCEEDED_ERR) {\n this._debug('LocalStorage quota exceeded. State storage failed.');\n }\n }\n return this._options.afterSetState(keyName, value);\n } else {\n if (this._state == null) {\n this._state = {};\n }\n return this._state[key] = value;\n }\n };\n\n _removeState(key) {\n if (this._options.storage) {\n const keyName = this._options.name + \"_\" + key;\n this._options.storage.removeItem(keyName);\n return this._options.afterRemoveState(keyName);\n } else {\n if (this._state != null) {\n return delete this._state[key];\n }\n }\n };\n\n _getState(key) {\n let value;\n if (this._options.storage) {\n const keyName = this._options.name + \"_\" + key;\n value = this._options.storage.getItem(keyName);\n } else {\n if (this._state != null) {\n value = this._state[key];\n }\n }\n if (value === null || value === 'null') {\n value = null;\n }\n this._options.afterGetState(key, value);\n return value;\n };\n\n _showNextStep(skipOrphan) {\n skipOrphan = skipOrphan || false;\n\n const showNextStepHelper = (e) => {\n return this.showStep(this._current + 1);\n };\n\n const step = this.getStep(this._current);\n let promise = Promise.resolve();\n\n // only call the onNext handler if this is a click and NOT an orphan skip due to missing element\n if (skipOrphan === false && step.onNext != null) {\n const rslt = step.onNext(this);\n this._debug(\"Current steps onNext failed. Check onNext -> \", step.onNext);\n this._debug(\"Current result: \", rslt);\n\n if (rslt === false) {\n this._debug(\"onNext callback returned false, preventing move to next step\");\n return this.showStep(this._current);\n }\n\n promise = this._makePromise(rslt);\n }\n\n return this._callOnPromiseDone(promise, showNextStepHelper);\n };\n\n _showPrevStep(skipOrphan) {\n skipOrphan = skipOrphan || false;\n\n const showPrevStepHelper = (e) => {\n return this.showStep(step.prev);\n };\n\n const step = this.getStep(this._current);\n let promise = Promise.resolve();\n\n // only call the onPrev handler if this is a click and NOT an orphan skip due to missing element\n if (skipOrphan === false && step.onPrev != null) {\n const rslt = step.onPrev(this);\n\n if (rslt === false) {\n this._debug(\"onPrev callback returned false, preventing move to previous step\");\n return this.showStep(this._current);\n }\n\n promise = this._makePromise(rslt);\n }\n\n return this._callOnPromiseDone(promise, showPrevStepHelper);\n };\n\n _debug() {\n if (this._options.debug) {\n return window.console.log.call(this, \"[ Bootstrap Tour: '\" + this._options.name + \"' ] \", ...arguments);\n }\n };\n\n _isRedirect(host, path, location) {\n if ((host != null) && host !== '' && (({}\n .toString.call(host) === '[object RegExp]' && !host.test(location.origin)) || ({}\n .toString.call(host) === '[object String]' && this._isHostDifferent(host, location)))) {\n return true;\n }\n const currentPath = [location.pathname, location.search, location.hash].join('');\n return (path != null) && path !== '' && (({}\n .toString.call(path) === '[object RegExp]' && !path.test(currentPath)) || ({}\n .toString.call(path) === '[object String]' && this._isPathDifferent(path, currentPath)));\n };\n\n _isHostDifferent(host, location) {\n switch ({}\n .toString.call(host)) {\n case '[object RegExp]':\n return !host.test(location.origin);\n case '[object String]':\n return this._getProtocol(host) !== this._getProtocol(location.href) || this._getHost(host) !== this._getHost(location.href);\n default:\n return true;\n }\n };\n\n _isPathDifferent(path, currentPath) {\n return this._getPath(path) !== this._getPath(currentPath) || !this._equal(this._getQuery(path), this._getQuery(currentPath)) || !this._equal(this._getHash(path), this._getHash(currentPath));\n };\n\n _isJustPathHashDifferent(host, path, location) {\n\n if ((host != null) && host !== '') {\n if (this._isHostDifferent(host, location)) {\n return false;\n }\n }\n const currentPath = [location.pathname, location.search, location.hash].join('');\n if ({}\n .toString.call(path) === '[object String]') {\n return this._getPath(path) === this._getPath(currentPath) && this._equal(this._getQuery(path), this._getQuery(currentPath)) && !this._equal(this._getHash(path), this._getHash(currentPath));\n }\n return false;\n };\n\n _redirect(step, i, path) {\n if (LS.ld.isFunction(step.redirect)) {\n return step.redirect.call(this, path);\n } else {\n const href = {}\n .toString.call(step.host) === '[object String]' ? \"\" + step.host + path : path;\n this._debug(\"Redirect to \" + href);\n if (this._getState('redirect_to') === (\"\" + i)) {\n this._debug(\"Error redirection loop to \" + path);\n this._removeState('redirect_to');\n if (step.onRedirectError != null) {\n return step.onRedirectError(this);\n }\n } else {\n this._setState('redirect_to', \"\" + i);\n return document.location.href = href;\n }\n }\n };\n\n // Tests if the step is orphan\n // Step can be \"orphan\" (unattached to any element) if specifically set as such in tour step options, or with an invalid/hidden element\n _isOrphan(step) {\n const isOrphan = (step.orphan == true) || (step.element == null) || !$(step.element).length || $(step.element).is(':hidden') && ($(step.element)[0].namespaceURI !== 'http://www.w3.org/2000/svg');\n this._debug(\"It seems this element is an orphan -> \", step)\n return isOrphan;\n };\n\n\n _isLast() {\n return this._current < this._options.steps.length - 1;\n };\n\n // wraps the calls to show the tour step in a popover and the background overlay.\n // Note this is ALSO called by scroll event handler. Individual funcs called will determine whether redraws etc are required.\n _showPopoverAndOverlay(i) {\n if (this.getCurrentStepIndex() !== i || this.ended()) {\n return;\n }\n\n const step = this.getStep(i);\n if (step.backdrop) {\n this._showOverlayElements(step);\n }\n\n this._fixBootstrapSelectPickerZindex(step);\n\n // Ensure this is called last, to allow preceeding calls to check whether current step popover is already visible.\n // This is required because this func is called by scroll event. showPopover creates the actual popover with\n // current step index as a class. Therefore all preceeding funcs can check if they are being called because of a\n // scroll event (popover class using current step index exists), or because of a step change (class doesn't exist).\n this._showPopover(step, i);\n\n if (step.onShown != null) {\n step.onShown(this);\n }\n\n return this;\n };\n\n // handles view of popover\n _showPopover(step, i) {\n const isOrphan = this._isOrphan(step);\n\n // is this step already visible? _showPopover is called by _showPopoverAndOverlay, which is called by window scroll event. This\n // check prevents the continual flickering of the current tour step - original approach reloaded the popover every scroll event.\n // Why is this check here and not in _showPopoverAndOverlay? This allows us to selectively redraw elements on scroll.\n if ($(document).find(\".popover.tour-\" + this._options.name + \".tour-\" + this._options.name + \"-\" + this.getCurrentStepIndex()).length == 0) {\n // Step not visible, draw first time\n\n $(\".tour-\" + this._options.name).remove();\n\n step.template = this._template(step, i);\n\n if (isOrphan) {\n // Note: BS4 popper.js requires additional fiddling to work, see below where popOpts object is created\n step.element = 'body';\n step.placement = 'top';\n }\n\n const $element = $(step.element);\n\n $element.addClass(\"tour-\" + this._options.name + \"-element tour-\" + this._options.name + \"-\" + i + \"-element\");\n\n\n if (step.reflex && !isOrphan) {\n $(step.reflexElement)\n .addClass('tour-step-element-reflex')\n .off((this._reflexEvent(step.reflex)) + \".tour-\" + this._options.name)\n .on((this._reflexEvent(step.reflex)) + \".tour-\" + this._options.name, (e) => {\n if (this._isLast()) {\n return this.next();\n } else {\n return this.end();\n }\n });\n }\n\n\n const percentProgress = parseInt(((i + 1) / this.getStepCount()) * 100);\n\n let title = step.title;\n let content = step.content;\n\n if (step.showProgressBar) {\n if (typeof (step.getProgressBarHTML) == \"function\") {\n content = step.getProgressBarHTML(percentProgress) + content;\n } else {\n content = '
' + content;\n }\n }\n\n if (step.showProgressText) {\n if (typeof (step.getProgressTextHTML) == \"function\") {\n title += step.getProgressTextHTML(i, percentProgress, this.getStepCount());\n } else {\n if (this._options.framework == \"bootstrap3\") {\n title += '
';\n }\n if (this._options.framework == \"bootstrap4\") {\n title += '
';\n }\n }\n }\n\n // Tourist v0.10 - split popOpts out of bootstrap popper instantiation due to BS3 / BS4 diverging requirements\n const popOpts = {\n placement: step.placement, // When auto is specified, it will dynamically reorient the popover.\n trigger: 'manual',\n title: title,\n content: content,\n html: true,\n //sanitize: false, // turns off all bootstrap sanitization of popover content, only use in last resort case - use whiteListAdditions instead!\n whiteList: this._options.sanitizeWhitelist, // ignored if sanitizeFn is specified\n sanitizeFn: this._options.sanitizeFunction,\n animation: step.animation,\n container: step.container,\n template: step.template,\n selector: step.element,\n //boundary: \"viewport\", // added for BS4 popper testing. Do not enable, creates visible jump on orphan step scroll to bottom\n };\n\n if (this._options.framework == \"bootstrap4\") {\n if (isOrphan) {\n // BS4 uses popper.js, which doesn't have a method of fixing the popper to the center of the viewport without an element. However\n // BS4 wrapper does some extra funky stuff that means we can't just replace the BS4 popper init code. Instead, fudge the popper\n // using the offset feature, which params don't seem to be documented properly!\n popOpts.offset = (obj) => {\n //console.log(obj);\n\n const top = Math.max(0, (($(window).height() - obj.popper.height) / 2));\n const left = Math.max(0, (($(window).width() - obj.popper.width) / 2));\n\n obj.popper.position = \"fixed\";\n obj.popper.top = top;\n obj.popper.bottom = top + obj.popper.height;\n obj.popper.left = left;\n obj.popper.right = top + obj.popper.width;\n return obj;\n }\n } else {\n // BS3 popover accepts jq object or string literal. BS4 popper.js of course doesn't, just to make life extra irritating.\n popOpts.selector = \"#\" + step.element[0].id;\n }\n }\n\n // BS4 / popper.js does not accept a jquery object as element. BS3 popover does!\n if (this._options.framework == \"bootstrap4\" && isOrphan == false) {\n popOpts.selector = \"#\" + step.element[0].id;\n }\n\n $element.popover(popOpts);\n $element.popover('show');\n let $tip = null;\n if (this._options.framework == \"bootstrap3\") {\n $tip = $element.data('bs.popover') ? $element.data('bs.popover').tip() : $element.data('popover').tip();\n\n // For BS3 only. BS4 popper.js reverts this change\n if ($element.css('position') === 'fixed') {\n $tip.css('position', 'fixed');\n }\n\n if (isOrphan) {\n this._center($tip);\n $tip.css('position', 'fixed');\n } else {\n this._reposition($tip, step);\n }\n }\n\n if (this._options.framework == \"bootstrap4\") {\n $tip = $(($element.data('bs.popover') ? $element.data('bs.popover').getTipElement() : $element.data('popover').getTipElement()));\n }\n\n $tip.attr('id', step.id);\n\n this._debug(\"Step \" + (this._current + 1) + \" of \" + this._options.steps.length);\n } else {\n // Step is already visible, something has requested a redraw. Uncomment code to force redraw on scroll etc\n //$element = $(step.element);\n //$tip = $element.data('bs.popover') ? $element.data('bs.popover').tip() : $element.data('popover').tip();\n\n if (isOrphan) {\n // unnecessary re-call, when tour step is set up centered it's fixed to the middle.\n //this._center($tip);\n } else {\n // Add some code to shift the popover wherever is required.\n // NOTE: this approach works for BS3 ONLY. BS4 with popper.js requires manipulation of offset, see popOpts.offset above.\n //this._reposition($tip, step);\n }\n }\n };\n\n _template(step, i) {\n\n const template = (this._isOrphan(step) && !LS.ld.isBoolean(step.orphan)) ?\n template = step.orphan :\n step.template;\n\n const $template = $.isFunction(template) ? $(template(i, step)) : $(template);\n\n const $navigation = $template.find('.popover-navigation');\n const $prev = $navigation.find('[data-role=\"prev\"]');\n const $next = $navigation.find('[data-role=\"next\"]');\n const $resume = $navigation.find('[data-role=\"pause-resume\"]');\n\n if (this._isOrphan(step)) {\n $template.addClass('orphan');\n }\n $template.addClass(\"tour-\" + this._options.name + \" tour-\" + this._options.name + \"-\" + i);\n if (step.reflex) {\n $template.addClass(\"tour-\" + this._options.name + \"-reflex\");\n }\n if (step.prev < 0) {\n $prev.addClass('disabled').prop('disabled', true).prop('tabindex', -1);\n }\n if (step.next < 0) {\n $next.addClass('disabled').prop('disabled', true).prop('tabindex', -1);\n }\n if (step.reflexOnly) {\n $next.hide();\n }\n if (!step.duration) {\n $resume.remove();\n }\n return $template.clone().wrap('
').parent().html();\n };\n\n _reflexEvent(reflex) {\n return LS.ld.isBoolean(reflex) ? 'click' : reflex;\n };\n\n _reposition($tip, step) {\n const offsetWidth = $tip[0].offsetWidth;\n const offsetHeight = $tip[0].offsetHeight;\n\n const tipOffset = $tip.offset();\n const originalLeft = tipOffset.left;\n const originalTop = tipOffset.top;\n\n const offsetBottom = $(document).height() - tipOffset.top - $tip.outerHeight();\n if (offsetBottom < 0) {\n tipOffset.top = tipOffset.top + offsetBottom;\n }\n\n const offsetRight = $('html').outerWidth() - tipOffset.left - $tip.outerWidth();\n if (offsetRight < 0) {\n tipOffset.left = tipOffset.left + offsetRight;\n }\n if (tipOffset.top < 0) {\n tipOffset.top = 0;\n }\n if (tipOffset.left < 0) {\n tipOffset.left = 0;\n }\n\n $tip.offset(tipOffset);\n\n if (step.placement === 'bottom' || step.placement === 'top') {\n if (originalLeft !== tipOffset.left) {\n return this._replaceArrow($tip, (tipOffset.left - originalLeft) * 2, offsetWidth, 'left');\n }\n } else {\n if (originalTop !== tipOffset.top) {\n return this._replaceArrow($tip, (tipOffset.top - originalTop) * 2, offsetHeight, 'top');\n }\n }\n };\n\n _center($tip) {\n $tip.css('top', $(window).outerHeight() / 2 - $tip.outerHeight() / 2);\n\n return $tip.css('left', $(window).outerWidth() / 2 - $tip.outerWidth() / 2);\n };\n\n _replaceArrow($tip, delta, dimension, position) {\n return $tip.find('.arrow').css(position, delta ? 50 * (1 - delta / dimension) + '%' : '');\n };\n\n _scrollIntoView(i) {\n const step = this.getStep(i);\n const $element = $(step.element);\n\n if (this._isOrphan(step)) {\n // If this is an orphan step, don't auto-scroll. Orphan steps are now css fixed to center of window\n return this._showPopoverAndOverlay(i);\n }\n\n if (!$element.length) {\n return this._showPopoverAndOverlay(i);\n }\n\n const $window = $(window);\n const offsetTop = $element.offset().top;\n const height = $element.outerHeight();\n const windowHeight = $window.height();\n\n let scrollTop = 0;\n switch (step.placement) {\n case 'top':\n scrollTop = Math.max(0, offsetTop - (windowHeight / 2));\n break;\n case 'left':\n case 'right':\n scrollTop = Math.max(0, (offsetTop + height / 2) - (windowHeight / 2));\n break;\n case 'bottom':\n scrollTop = Math.max(0, (offsetTop + height) - (windowHeight / 2));\n }\n this._debug(\"Scroll into view. ScrollTop: \" + scrollTop + \". Element offset: \" + offsetTop + \". Window height: \" + windowHeight + \".\");\n\n let counter = 0;\n return $('body, html').stop(true, true).animate({\n scrollTop: Math.ceil(scrollTop)\n }, () => {\n if (++counter === 2) {\n this._showPopoverAndOverlay(i);\n return this._debug(\"Scroll into view.\\nAnimation end element offset: \" + ($element.offset().top) + \".\\nWindow height: \" + ($window.height()) + \".\");\n }\n });\n };\n\n\n // Note: this method is not required, but remains here in case any future forkers want to reinstate the code that moves a non-orphan popover\n // when window is scrolled\n _onScroll(callback, timeout) {\n return $(window).on(\"scroll.tour-\" + this._options.name, function () {\n clearTimeout(timeout);\n return timeout = setTimeout(callback, 100);\n });\n };\n\n _initMouseNavigation() {\n\n return $(document)\n .off(\"click.tour-\" + this._options.name, \".popover.tour-\" + this._options.name + \" *[data-role='prev']\")\n .off(\"click.tour-\" + this._options.name, \".popover.tour-\" + this._options.name + \" *[data-role='next']\")\n .off(\"click.tour-\" + this._options.name, \".popover.tour-\" + this._options.name + \" *[data-role='end']\")\n .off(\"click.tour-\" + this._options.name, \".popover.tour-\" + this._options.name + \" *[data-role='pause-resume']\")\n .on(\"click.tour-\" + this._options.name, \".popover.tour-\" + this._options.name + \" *[data-role='next']\", (e) => {\n e.preventDefault();\n return this.next();\n })\n .on(\"click.tour-\" + this._options.name, \".popover.tour-\" + this._options.name + \" *[data-role='prev']\", (e) => {\n e.preventDefault();\n if (this._current > 0) {\n return this.prev();\n }\n })\n .on(\"click.tour-\" + this._options.name, \".popover.tour-\" + this._options.name + \" *[data-role='end']\", (e) => {\n e.preventDefault();\n return this.end();\n })\n .on(\"click.tour-\" + this._options.name, \".popover.tour-\" + this._options.name + \" *[data-role='pause-resume']\", (e) => {\n e.preventDefault();\n $this = $(e.target);\n $this.text(this._paused ? $this.data('pause-text') : $this.data('resume-text'));\n if (this._paused) {\n return this.resume();\n } else {\n return this.pause();\n }\n });\n };\n\n _initKeyboardNavigation() {\n if (!this._options.keyboard) {\n return;\n }\n return $(document).on(\"keyup.tour-\" + this._options.name, (e) => {\n if (!e.which) {\n return;\n }\n switch (e.which) {\n case 39:\n e.preventDefault();\n if (this._isLast()) {\n return this.next();\n } else {\n return this.end();\n }\n break;\n case 37:\n e.preventDefault();\n if (this._current > 0) {\n return this.prev();\n }\n }\n });\n };\n\n // If param is a promise, returns the promise back to the caller. Otherwise returns null.\n // Only purpose is to make calls to _callOnPromiseDone() simple - first param of _callOnPromiseDone()\n // accepts either null or a promise to smart call either promise or straight callback. This\n // pair of funcs therefore allows easy integration of user code to return callbacks or promises\n _makePromise(possiblePromise) {\n if (possiblePromise && $.isFunction(possiblePromise.then)) {\n return possiblePromise;\n } else {\n return Promise.resolve();\n }\n };\n\n // Creates a promise wrapping the callback if valid promise is provided as first arg. If\n // first arg is not a promise, simply uses direct function call of callback.\n _callOnPromiseDone(promise, callback, arg) {\n if (promise) {\n return promise.then(() => callback.call(this, arg));\n } else {\n return callback.call(this, arg);\n }\n };\n\n // Bootstrap Select custom draws the drop down, force the Z index between Tour overlay and popoper\n _fixBootstrapSelectPickerZindex(step) {\n if (this._isOrphan(step)) {\n // If it's an orphan step, it can't be a selectpicker element\n return;\n }\n\n // is the current step already visible?\n if ($(document).find(\".popover.tour-\" + this._options.name + \".tour-\" + this._options.name + \"-\" + this.getCurrentStepIndex()).length != 0) {\n // don't waste time redoing the fix\n return;\n }\n\n // is this element or child of this element a selectpicker\n const $selectpicker = ($(step.element)[0].tagName.toLowerCase() == \"select\") ? $(step.element) : $(step.element).find(\"select:first\");\n\n // is this selectpicker a bootstrap-select: https://github.com/snapappointments/bootstrap-select/\n if ($selectpicker.length > 0 && $selectpicker.parent().hasClass(\"bootstrap-select\")) {\n this._debug(\"Fixing Bootstrap SelectPicker\");\n // set zindex to open dropdown over background element\n $selectpicker.parent().css(\"z-index\", \"1101\");\n\n // store the element for other calls. Mainly for when step is hidden, selectpicker must be unfixed / z index reverted to avoid visual issues.\n // storing element means we don't need to find it again later\n this._setStepFlag(this.getCurrentStepIndex(), \"elementBootstrapSelectpicker\", $selectpicker);\n }\n }\n\n // Revert the Z index between Tour overlay and popoper\n _unfixBootstrapSelectPickerZindex(step) {\n const $selectpicker = this._getStepFlag(this.getCurrentStepIndex(), \"elementBootstrapSelectpicker\");\n if ($selectpicker) {\n this._debug(\"Unfixing Bootstrap SelectPicker\");\n // set zindex to open dropdown over background element\n $selectpicker.parent().css(\"z-index\", \"auto\");\n }\n }\n\n // Shows the preventInteraction div, and the background divs\n _showOverlayElements(step) {\n\n // check if the popover for the current step already exists (is this a redraw)\n const isRedraw = ($(document).find(\".popover.tour-\" + this._options.name + \".tour-\" + this._options.name + \"-\" + this.getCurrentStepIndex()).length == 0)\n\n if (step.preventInteraction && !isRedraw) {\n $(step.backdropContainer).append(\"
\");\n $(\"#tourPrevent\").width($(step.element).outerWidth());\n $(\"#tourPrevent\").height($(step.element).outerHeight());\n $(\"#tourPrevent\").offset($(step.element).offset());\n }\n\n const docHeight = $(document).height();\n const docWidth = $(document).width();\n\n if ($(step.element).length === 0 || this._isOrphan(step)) {\n var $backdrop = $('
');\n $backdrop.offset({\n top: 0,\n left: 0\n });\n $backdrop.width(docWidth);\n $backdrop.height(docHeight);\n $(\"body\").append($backdrop);\n } else {\n const elementData = {\n width: $(step.element).innerWidth(),\n height: $(step.element).innerHeight(),\n offset: $(step.element).offset()\n };\n\n if (step.backdropPadding) {\n elementData = this._applyBackdropPadding(step.backdropPadding, elementData);\n }\n\n const $backdropTop = $('
');\n $backdropTop.offset({\n top: 0,\n left: 0\n });\n $backdropTop.width(docWidth);\n $backdropTop.height(elementData.offset.top);\n\n const $backdropLeft = $('
');\n $backdropLeft.width(elementData.offset.left);\n $backdropLeft.height(elementData.height);\n $backdropLeft.offset({\n top: elementData.offset.top,\n left: 0\n });\n\n const $backdropRight = $('
');\n $backdropRight.width(docWidth - (elementData.width + elementData.offset.left));\n $backdropRight.height(elementData.height);\n $backdropRight.offset({\n top: elementData.offset.top,\n left: elementData.offset.left + elementData.width\n });\n\n const $backdropBottom = $('
');\n $backdropBottom.width(docWidth);\n $backdropBottom.height(docHeight - elementData.offset.top - elementData.height);\n $backdropBottom.offset({\n top: elementData.offset.top + elementData.height,\n left: 0\n });\n\n $(step.backdropContainer).append($backdropTop);\n $(step.backdropContainer).append($backdropLeft);\n $(step.backdropContainer).append($backdropRight);\n $(step.backdropContainer).append($backdropBottom);\n }\n };\n\n _hideOverlayElement(step) {\n // remove any previous interaction overlay\n if ($(\"#tourPrevent\").length) {\n $(\"#tourPrevent\").remove();\n }\n $(\".tour-backdrop\").remove();\n };\n\n _applyBackdropPadding(padding, data) {\n if (typeof padding === 'object') {\n if (padding.top == null) {\n padding.top = 0;\n }\n if (padding.right == null) {\n padding.right = 0;\n }\n if (padding.bottom == null) {\n padding.bottom = 0;\n }\n if (padding.left == null) {\n padding.left = 0;\n }\n data.offset.top = data.offset.top - padding.top;\n data.offset.left = data.offset.left - padding.left;\n data.width = data.width + padding.left + padding.right;\n data.height = data.height + padding.top + padding.bottom;\n } else {\n data.offset.top = data.offset.top - padding;\n data.offset.left = data.offset.left - padding;\n data.width = data.width + (padding * 2);\n data.height = data.height + (padding * 2);\n }\n return data;\n };\n\n _clearTimer() {\n window.clearTimeout(this._timer);\n this._timer = null;\n return this._duration = null;\n };\n\n\n // =============================================================================================================================\n\n _getProtocol(url) {\n url = url.split('://');\n if (url.length > 1) {\n return url[0];\n } else {\n return 'http';\n }\n };\n\n _getHost(url) {\n url = url.split('//');\n url = url.length > 1 ? url[1] : url[0];\n return url.split('/')[0];\n };\n\n _getPath(path) {\n return path.replace(/\\/?$/, '').split('?')[0].split('#')[0];\n };\n\n _getQuery(path) {\n return this._getParams(path, '?');\n };\n\n _getHash(path) {\n return this._getParams(path, '#');\n };\n\n _getParams(path, start) {\n let params = path.split(start);\n if (params.length === 1) {\n return {};\n }\n\n params = params[1].split('&');\n\n const paramsObject = {};\n for (let j = 0, len = params.length; j < len; j++) {\n let param = params[j];\n param = param.split('=');\n paramsObject[param[0]] = param[1] || '';\n }\n return paramsObject;\n };\n\n _equal(obj1, obj2) {\n if (LS.ld.isObject(obj1) && LS.ld.isObject(obj2)) {\n const obj1Keys = Object.keys(obj1);\n const obj2Keys = Object.keys(obj2);\n if (obj1Keys.length !== obj2Keys.length) {\n return false;\n }\n for (let k in obj1) {\n const v = obj1[k];\n if (!this._equal(obj2[k], v)) {\n return false;\n }\n }\n return true;\n } else if (LS.ld.isArray(obj1) && LS.ld.isArray(obj2)) {\n if (obj1.length !== obj2.length) {\n return false;\n }\n for (let k = j = 0, len = obj1.length; j < len; k = ++j) {\n const v = obj1[k];\n if (!this._equal(v, obj2[k])) {\n return false;\n }\n }\n return true;\n } else {\n return obj1 === obj2;\n }\n }\n\n};\n\nexport default Tour;\n","const globalTourObject = function(){\n const getBasedUrls = (/(\\/index.php)?\\?r=admin/.test(window.location.href)),\n \n combineParams = function(params){\n const getBasedUrls = false;\n if(params === false) return '';\n\n const returner = (getBasedUrls ? '?' :'/') + LS.ld.reduce(params, (urlParams, value, key)=>{ \n return urlParams + (\n getBasedUrls ? \n (urlParams === '' ? '' : '&')+key+'='+value \n : (urlParams === '' ? '' : '/')+key+'/'+value\n );\n }, '');\n return returner;\n },\n filterUrl = function(url,params=false, forceGet=false){\n if(url.charAt(0) == '/')\n url = url.substring(1);\n \n const baseUrl = (getBasedUrls || forceGet) ? '?r=admin/' : '/admin/';\n const containsIndex = (/\\/index.php\\/?/.test(window.location.href));\n const returnUrl = window.LS.data.baseUrl+(containsIndex ? '/index.php' : '')+baseUrl+url+combineParams(params);\n\n return returnUrl;\n\n },\n _preparePath = function(path){\n if(typeof path === 'string')\n return path;\n \n return RegExp(path.join());\n },\n _prepareMethods = function(tutorialObject){\n 'use strict';\n tutorialObject.steps = LS.ld.map(tutorialObject.steps, function(step,i){\n step.path = _preparePath(step.path);\n step.onNext = step.onNext ? eval(step.onNext) : undefined;\n step.onShow = step.onShow ? eval(step.onShow) : undefined;\n step.onShown = step.onShown ? eval(step.onShown) : undefined;\n step.onHide = step.onHide ? eval(step.onHide) : undefined;\n step.onHidden = step.onHidden ? eval(step.onHidden) : undefined;\n //if(window.debugState.backend) { console.ls.log(step); }\n return step;\n });\n \n tutorialObject.onShown = tutorialObject.onShown ? eval(tutorialObject.onShown) : null;\n tutorialObject.onEnd = tutorialObject.onEnd ? eval(tutorialObject.onEnd) : null;\n tutorialObject.onStart = tutorialObject.onStart ? eval(tutorialObject.onStart) : null;\n return tutorialObject;\n };\n\n return {\n get : function(tourName){\n return new Promise((resolve, reject)=>{\n $.ajax({\n url: filterUrl('/tutorial/sa/servertutorial'),\n data: {tutorialname: tourName, ajax: true},\n method: 'POST',\n success: (tutorialData)=>{\n const tutorialObject = _prepareMethods(tutorialData.tutorial);\n resolve(tutorialObject);\n },\n error: (error)=>{\n reject(error);\n }\n });\n });\n }\n };\n\n};\n\nexport default globalTourObject();\n","import 'popper.js';\nimport '../scss/lstutorial.scss';\n\nimport Tour from '../lib/bootstrap-tourist.js';\nimport globalTourObject from './tours/global-tour-object.js';\n\nconst TourLibrary = function () {\n 'use strict';\n\n const _getIsTourActive = () => {\n let isTourActive = window.localStorage.getItem('lstutorial-is-tour-active') || false;\n return isTourActive;\n },\n _setTourActive = (tourName) => {\n window.localStorage.setItem('lstutorial-is-tour-active', tourName);\n },\n\n _setNoTourActive = (tid) => {\n window.localStorage.removeItem('lstutorial-is-tour-active');\n \n if(tid !== undefined) {\n $.post(LS.data.baseUrl+(LS.data.urlFormat == 'path' ? '/admin/tutorial/sa/triggerfinished/tid/' : '?r=admin/tutorial/sa/triggerfinished/tid/')+tid);\n }\n },\n \n clearActiveTour = () => {\n if (typeof _actionActiveTour === 'object' && _actionActiveTour !== null) {\n _actionActiveTour.end();\n }\n\n _setNoTourActive();\n },\n getCurrentStep = () => {\n if ((_getIsTourActive() !== false)) {\n return globalTourObject.getCurrentStep();\n }\n },\n initTour = (tourName) => {\n return new Promise((resolve, reject) => {\n if ((_getIsTourActive() !== false) && (_getIsTourActive() !== tourName)) {\n clearActiveTour();\n reject();\n }\n globalTourObject.get(tourName).then((tourObject) => {\n _setTourActive(tourName);\n\n tourObject.onEnd = () => {\n _setNoTourActive(tourObject.tid);\n };\n \n tourObject.debug = window.debugState.backend;\n tourObject.framework = \"bootstrap3\";\n\n _actionActiveTour = new Tour(tourObject);\n window.addEventListener('resize', ()=>{\n _actionActiveTour.redraw();\n });\n \n resolve(_actionActiveTour);\n }, console.ls.err);\n });\n },\n triggerTourStart = (tutorialName) => {\n clearActiveTour();\n initTour(tutorialName).then(\n (startedTutorial) => {\n if(startedTutorial.ended())\n startedTutorial.restart();\n else\n startedTutorial.start(true);\n },\n (err) => {\n console.ls.log('Couldn\\'t be loaded!');\n console.ls.error(err);\n }\n );\n };\n\n let _activeTour = _getIsTourActive();\n let _actionActiveTour = null;\n\n if (_activeTour !== false && (typeof _actionActiveTour !== 'function')) {\n initTour(_activeTour).then(\n (startedTutorial) => {\n if(startedTutorial.ended()){\n startedTutorial.restart();\n } else {\n setTimeout(function(){ startedTutorial.start();}, 1);\n }\n },\n (err) => {\n console.ls.log('Couldn\\'t be loaded!');\n console.ls.error(err);\n }\n );\n }\n\n return {\n triggerTourStart: triggerTourStart,\n clearActiveTour: clearActiveTour,\n initTour: initTour,\n _actionActiveTour: _actionActiveTour,\n getCurrentStep: getCurrentStep\n };\n};\n\n\n$(document).on('ready pjax:scriptcomplete', function () {\n if(typeof window.tourLibrary === 'undefined'){\n window.tourLibrary = TourLibrary();\n }\n\n $('#selector__welcome-modal--starttour').on('click', function (e) {\n $(e.currentTarget).closest('.modal').modal('hide');\n window.tourLibrary.triggerTourStart('firstStartTour');\n });\n});\n"],"names":["document","window","Tour","options","storage","localStorage","objTemplates","objTemplatesButtonTexts","prevButton","nextButton","pauseButton","resumeButton","endTourButton","_options","$","extend","name","steps","container","autoscroll","keyboard","debug","backdrop","backdropContainer","backdropPadding","redirect","orphan","duration","delay","basePath","template","localization","buttonTexts","this","framework","sanitizeWhitelist","sanitizeFunction","showProgressBar","showProgressText","getProgressBarHTML","getProgressTextHTML","afterSetState","key","value","afterGetState","afterRemoveState","onStart","tour","onEnd","onShow","onShown","onHide","onHidden","onNext","onPrev","onPause","onResume","onRedirectError","onElementUnavailable","onPreviouslyEnded","onModalHidden","_debug","bootstrap3","bootstrap4","undefined","defaultWhiteList","fn","popover","Constructor","Default","whiteList","DEFAULTS","each","index","merge","_current","backdrops","j","len","length","step","addStep","push","i","element","id","path","host","placement","title","content","next","prev","animation","reflexElement","preventInteraction","internalFlags","elementModal","elementModalOriginal","elementBootstrapSelectpicker","stepNumber","flagName","console","log","ended","setCurrentStep","_initMouseNavigation","_initKeyboardNavigation","on","_this","reshowCurrentStep","promise","_makePromise","Promise","resolve","_callOnPromiseDone","showStep","hideStep","_showNextStep","_showPrevStep","e","off","_this2","_setState","_clearTimer","_getState","_removeState","start","getStep","_paused","_duration","Date","getTime","_start","clearTimeout","_timer","setTimeout","_this3","_isLast","end","getCurrentStepIndex","hideStepHelper","$element","data","_this4","removeClass","removeData","reflex","_reflexEvent","_hideOverlayElement","_unfixBootstrapSelectPickerZindex","tmpModalOriginalElement","_getStepFlag","_setStepFlag","hideDelay","hide","skipToPrevious","LS","ld","isFunction","_this5","_isRedirect","location","_redirect","_isJustPathHashDifferent","$modalObject","hasClass","find","parents","funcModalHelper","rslt","Number","isInteger","$_modalObject","goTo","showStepHelper","_isOrphan","_scrollIntoView","_showPopoverAndOverlay","resume","showDelay","show","toString","call","delayOnElement","revalidateDelayElement","delayElement","$delayElement","delayElementLog","reduce","col","el","tagName","join","prop","delayMax","maxDelay","delayFunc","setInterval","is","clearInterval","parseInt","keyName","setItem","error","code","DOMException","QUOTA_EXCEEDED_ERR","_state","removeItem","getItem","skipOrphan","_this6","_this7","arguments","test","origin","_isHostDifferent","currentPath","pathname","search","hash","_isPathDifferent","_getProtocol","href","_getHost","_getPath","_equal","_getQuery","_getHash","isOrphan","namespaceURI","_showOverlayElements","_fixBootstrapSelectPickerZindex","_showPopover","remove","_template","addClass","_this8","percentProgress","getStepCount","popOpts","trigger","html","sanitizeFn","selector","offset","obj","top","Math","max","height","popper","left","width","position","bottom","right","$tip","tip","css","_center","_reposition","getTipElement","attr","isBoolean","$template","$navigation","$prev","$next","$resume","reflexOnly","clone","wrap","parent","offsetWidth","offsetHeight","tipOffset","originalLeft","originalTop","offsetBottom","outerHeight","offsetRight","outerWidth","_replaceArrow","delta","dimension","$window","offsetTop","windowHeight","scrollTop","counter","stop","animate","ceil","_this9","callback","timeout","preventDefault","_this10","$this","target","text","pause","which","_this11","possiblePromise","then","arg","_this12","$selectpicker","toLowerCase","isRedraw","append","docHeight","docWidth","$backdrop","elementData","innerWidth","innerHeight","_applyBackdropPadding","$backdropTop","$backdropLeft","$backdropRight","$backdropBottom","padding","_typeof","url","split","replace","_getParams","params","paramsObject","param","obj1","obj2","isObject","obj1Keys","Object","keys","obj2Keys","k","v","isArray","globalTourObject","getBasedUrls","combineParams","urlParams","filterUrl","forceGet","charAt","substring","baseUrl","containsIndex","returnUrl","_preparePath","RegExp","_prepareMethods","tutorialObject","map","eval","get","tourName","reject","ajax","tutorialname","method","success","tutorialData","tutorial","TourLibrary","_getIsTourActive","_setNoTourActive","tid","post","urlFormat","clearActiveTour","_actionActiveTour","initTour","tourObject","_setTourActive","debugState","backend","addEventListener","redraw","ls","err","_activeTour","startedTutorial","restart","triggerTourStart","tutorialName","getCurrentStep","tourLibrary","currentTarget","closest","modal"],"mappings":"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"}