{"version":3,"file":"javascripts/chunks/2a86c4f5706d85e4caad.dialog.js","mappings":"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","sources":["webpack:///./components/dialog/javascripts/dialog.js","webpack:///./javascripts/events/delegateEvent.js","webpack:///./javascripts/dom/addClass.js","webpack:///./javascripts/dom/removeClass.js","webpack:///./javascripts/dom/select.js","webpack:///./javascripts/helpers/baseModule.js","webpack:///../.yarn/cache/body-scroll-lock-npm-3.1.5-fbe946063b-52c25b81d6.zip/node_modules/body-scroll-lock/lib/bodyScrollLock.esm.js"],"sourcesContent":["import { disableBodyScroll, enableBodyScroll } from 'body-scroll-lock';\n\nimport addClass from '../../../javascripts/dom/addClass';\nimport BaseModule from '../../../javascripts/helpers/baseModule';\nimport delegateEvent from '../../../javascripts/events/delegateEvent';\nimport removeClass from '../../../javascripts/dom/removeClass';\n\n// Dialo module based on the wai-aria best practises https://www.w3.org/TR/2017/NOTE-wai-aria-practices-1.1-20171214/examples/dialog-dialog/dialog.html\nexport default class Dialog extends BaseModule {\n constructor(element) {\n super(element, element.getAttribute('data-js-module'));\n if (this.initializedBefore) return;\n\n // make sure the overlay is a direct child of \n if (element.parentElement !== document.body) {\n document.body.appendChild(element);\n }\n\n this.getElements([\n { id: 'body', selector: 'body' },\n { id: 'close', selector: 'close' },\n { id: 'content', selector: 'content' }\n ]);\n\n this.dialogContentUrl = this.elements.self.getAttribute(\n 'data-js-dialog-content'\n );\n this.dialogIsActiveClass = 'dialog--is-active';\n\n this.focusedElementBeforeOpen = document.activeElement;\n this.bindEvents();\n }\n\n get focusableElements() {\n return Array.from(\n this.elements.self.querySelectorAll(\n 'a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), [tabindex=\"0\"]:not([hidden])'\n )\n );\n }\n\n get firstFocusableElement() {\n return this.focusableElements[0];\n }\n\n get lastFocusableElement() {\n return this.focusableElements.slice(-1)[0];\n }\n\n get isActive() {\n return this.elements.self.classList.contains(this.dialogIsActiveClass);\n }\n\n /**\n * When focus is on the first element, moves the focus to\n * the last element of a dialog\n * @param {any} event backward tab\n * @returns {void}\n */\n handleBackwardTab(event) {\n if (document.activeElement === this.firstFocusableElement) {\n event.preventDefault();\n this.lastFocusableElement.focus();\n }\n }\n\n /**\n * When focus is on the last element, moves the focus back to\n * the first element of a dialog\n * @param {any} event forward tab\n * @returns {void}\n */\n handleForwardTab(event) {\n if (document.activeElement === this.lastFocusableElement) {\n event.preventDefault();\n this.firstFocusableElement.focus();\n }\n }\n\n openDialog() {\n disableBodyScroll(this.elements.self);\n this.focusedElementBeforeOpen = document.activeElement;\n addClass(this.elements.self, this.dialogIsActiveClass);\n this.elements.self.removeAttribute('hidden', '');\n this.firstFocusableElement.focus();\n }\n\n closeDialog() {\n removeClass(this.elements.self, this.dialogIsActiveClass);\n this.elements.self.setAttribute('hidden', '');\n this.focusedElementBeforeOpen.focus();\n enableBodyScroll(this.elements.self);\n }\n\n toggleDialog() {\n if (this.isActive) {\n this.closeDialog();\n } else {\n this.openDialog();\n }\n }\n\n bindEvents() {\n // Close the dialog when clicking outside of it\n this.elements.self.addEventListener('click', (event) => {\n if (event.target === this.elements.self) {\n this.closeDialog();\n }\n });\n\n // Open dialog on button click\n const selector = `[data-js-dialog-toggle=\"${this.elements.self.id}\"]`;\n if (selector) {\n delegateEvent('click', selector, document, this.openDialog.bind(this));\n }\n\n // Close dialog on close click\n this.elements.close.addEventListener('click', this.closeDialog.bind(this));\n\n // Control dialog via events\n this.elements.self.addEventListener(\n 'closeDialog',\n this.closeDialog.bind(this)\n );\n this.elements.self.addEventListener(\n 'openDialog',\n this.openDialog.bind(this)\n );\n this.elements.self.addEventListener(\n 'toggleDialog',\n this.toggleDialog.bind(this)\n );\n\n // a11y key helpers\n this.elements.self.addEventListener('keydown', (event) => {\n switch (event.key) {\n // Focus never leaves the dialog and moves around\n // between focusable elements\n case 'Tab': {\n if (this.focusableElements.length === 1) {\n event.preventDefault();\n break;\n }\n if (event.shiftKey) {\n this.handleBackwardTab(event);\n } else {\n this.handleForwardTab(event);\n }\n break;\n }\n // Escape closes the top dialog (current dialog)\n case 'Escape': {\n this.closeDialog();\n break;\n }\n default: {\n break;\n }\n }\n });\n }\n}\n","/**\n * Live event binding on document or different context\n *\n * delegate('click', '.some_elem', document, (event) => {\n * });\n *\n * @param {string} eventName Event to bind\n * @param {string} sel Selector for the descendant node\n * @param {Object} el Context the event node is related to\n * @param {function} handler Callback function shoulkd get triggered when event gets triggered\n * @returns {void}\n */\nexport default (eventName, sel, el, handler) => {\n el.addEventListener(\n eventName,\n (e) => {\n const found = e.target.closest(sel);\n // returns null if no matching parentNode is found\n if (found) {\n handler.call(found, e);\n }\n },\n false\n );\n};\n","/**\n * Adds classes to a DOM element\n * @param {Element} element Element the classes should get added to\n * @param {string} classNames One or more classnames\n * @returns {void}\n */\nexport default (element, ...classNames) => {\n classNames\n .filter((className) => !element.classList.contains(className))\n .forEach((className) => {\n element.classList.add(className);\n });\n};\n","/**\n * Removes classes from a DOM element\n * @param {Element} element Element the classes should get removed from\n * @param {string} classNames One or more classnames\n * @returns {void}\n */\nexport default (element, ...classNames) => {\n classNames\n .filter((className) => element.classList.contains(className))\n .forEach((className) => {\n element.classList.remove(className);\n });\n};\n","/**\n * This methods selects Elements from a specific context by a selector\n * @param {string} selector Selector of the element to find\n * @param {Element|HTMLDocument} [element] Context of the selectable\n * @returns {Array} Am array with selected Elements\n */\nexport default (selector, element = window.document) =>\n [].slice.call(element.querySelectorAll(selector));\n","import select from '../dom/select';\n\nclass BaseModule {\n constructor(element, id) {\n this.id = id;\n this.elements = {\n self: element\n };\n\n this.setInitialized();\n }\n\n setInitialized() {\n if (this.elements.self) {\n this.elements.self.setAttribute('data-js-module-initialized', true);\n }\n }\n\n setUnInitialized() {\n if (this.elements.self) {\n this.elements.self.removeAttribute('data-js-module-initialized');\n }\n }\n\n /**\n * Selects DOMElements of a module with a specific data attribute (`data-js-element=\"${module}__${selector}\"`)\n * Receives an object where the id param is the key in the elements cache\n * The selector param of the config is the selector part in the query-selector described above\n * @param {Object} config Configuration object in a key value format\n * @returns {void}\n */\n getElements(config) {\n const elementsConfig = config.map((elementConfig) => ({\n ...elementConfig,\n selector: `${this.id}__${elementConfig.selector}`\n }));\n\n const domElements = select('[data-js-element]', this.elements.self);\n\n for (let i = 0; i < domElements.length; i += 1) {\n const domElement = domElements[i];\n const elementConfigCandidates = elementsConfig.filter(\n (singleConfig) =>\n domElement.getAttribute('data-js-element') === singleConfig.selector\n );\n\n const [elementConfig] = elementConfigCandidates;\n\n if (elementConfig) {\n if (typeof this.elements[elementConfig.id] === 'undefined') {\n this.elements[elementConfig.id] = domElement;\n } else {\n if (typeof this.elements[elementConfig.id].push === 'undefined') {\n this.elements[elementConfig.id] = [this.elements[elementConfig.id]];\n }\n this.elements[elementConfig.id].push(domElement);\n }\n }\n }\n\n /*\n * Append a attribute \"asList\" to each element/s in this.elements\n * which is always an array no matter if element/s is an array\n * or a single HTMLElement\n */\n\n const asList = (obj) => (typeof obj.push === 'undefined' ? [obj] : obj);\n Object.values(this.elements).forEach((obj) => {\n obj.asList = asList(obj); // eslint-disable-line no-param-reassign\n });\n }\n}\n\nexport default BaseModule;\n","function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\n// Older browsers don't support event options, feature detect it.\n\n// Adopted and modified solution from Bohdan Didukh (2017)\n// https://stackoverflow.com/questions/41594997/ios-10-safari-prevent-scrolling-behind-a-fixed-overlay-and-maintain-scroll-posi\n\nvar hasPassiveEvents = false;\nif (typeof window !== 'undefined') {\n var passiveTestOptions = {\n get passive() {\n hasPassiveEvents = true;\n return undefined;\n }\n };\n window.addEventListener('testPassive', null, passiveTestOptions);\n window.removeEventListener('testPassive', null, passiveTestOptions);\n}\n\nvar isIosDevice = typeof window !== 'undefined' && window.navigator && window.navigator.platform && (/iP(ad|hone|od)/.test(window.navigator.platform) || window.navigator.platform === 'MacIntel' && window.navigator.maxTouchPoints > 1);\n\n\nvar locks = [];\nvar documentListenerAdded = false;\nvar initialClientY = -1;\nvar previousBodyOverflowSetting = void 0;\nvar previousBodyPaddingRight = void 0;\n\n// returns true if `el` should be allowed to receive touchmove events.\nvar allowTouchMove = function allowTouchMove(el) {\n return locks.some(function (lock) {\n if (lock.options.allowTouchMove && lock.options.allowTouchMove(el)) {\n return true;\n }\n\n return false;\n });\n};\n\nvar preventDefault = function preventDefault(rawEvent) {\n var e = rawEvent || window.event;\n\n // For the case whereby consumers adds a touchmove event listener to document.\n // Recall that we do document.addEventListener('touchmove', preventDefault, { passive: false })\n // in disableBodyScroll - so if we provide this opportunity to allowTouchMove, then\n // the touchmove event on document will break.\n if (allowTouchMove(e.target)) {\n return true;\n }\n\n // Do not prevent if the event has more than one touch (usually meaning this is a multi touch gesture like pinch to zoom).\n if (e.touches.length > 1) return true;\n\n if (e.preventDefault) e.preventDefault();\n\n return false;\n};\n\nvar setOverflowHidden = function setOverflowHidden(options) {\n // If previousBodyPaddingRight is already set, don't set it again.\n if (previousBodyPaddingRight === undefined) {\n var _reserveScrollBarGap = !!options && options.reserveScrollBarGap === true;\n var scrollBarGap = window.innerWidth - document.documentElement.clientWidth;\n\n if (_reserveScrollBarGap && scrollBarGap > 0) {\n previousBodyPaddingRight = document.body.style.paddingRight;\n document.body.style.paddingRight = scrollBarGap + 'px';\n }\n }\n\n // If previousBodyOverflowSetting is already set, don't set it again.\n if (previousBodyOverflowSetting === undefined) {\n previousBodyOverflowSetting = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n }\n};\n\nvar restoreOverflowSetting = function restoreOverflowSetting() {\n if (previousBodyPaddingRight !== undefined) {\n document.body.style.paddingRight = previousBodyPaddingRight;\n\n // Restore previousBodyPaddingRight to undefined so setOverflowHidden knows it\n // can be set again.\n previousBodyPaddingRight = undefined;\n }\n\n if (previousBodyOverflowSetting !== undefined) {\n document.body.style.overflow = previousBodyOverflowSetting;\n\n // Restore previousBodyOverflowSetting to undefined\n // so setOverflowHidden knows it can be set again.\n previousBodyOverflowSetting = undefined;\n }\n};\n\n// https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight#Problems_and_solutions\nvar isTargetElementTotallyScrolled = function isTargetElementTotallyScrolled(targetElement) {\n return targetElement ? targetElement.scrollHeight - targetElement.scrollTop <= targetElement.clientHeight : false;\n};\n\nvar handleScroll = function handleScroll(event, targetElement) {\n var clientY = event.targetTouches[0].clientY - initialClientY;\n\n if (allowTouchMove(event.target)) {\n return false;\n }\n\n if (targetElement && targetElement.scrollTop === 0 && clientY > 0) {\n // element is at the top of its scroll.\n return preventDefault(event);\n }\n\n if (isTargetElementTotallyScrolled(targetElement) && clientY < 0) {\n // element is at the bottom of its scroll.\n return preventDefault(event);\n }\n\n event.stopPropagation();\n return true;\n};\n\nexport var disableBodyScroll = function disableBodyScroll(targetElement, options) {\n // targetElement must be provided\n if (!targetElement) {\n // eslint-disable-next-line no-console\n console.error('disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.');\n return;\n }\n\n // disableBodyScroll must not have been called on this targetElement before\n if (locks.some(function (lock) {\n return lock.targetElement === targetElement;\n })) {\n return;\n }\n\n var lock = {\n targetElement: targetElement,\n options: options || {}\n };\n\n locks = [].concat(_toConsumableArray(locks), [lock]);\n\n if (isIosDevice) {\n targetElement.ontouchstart = function (event) {\n if (event.targetTouches.length === 1) {\n // detect single touch.\n initialClientY = event.targetTouches[0].clientY;\n }\n };\n targetElement.ontouchmove = function (event) {\n if (event.targetTouches.length === 1) {\n // detect single touch.\n handleScroll(event, targetElement);\n }\n };\n\n if (!documentListenerAdded) {\n document.addEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined);\n documentListenerAdded = true;\n }\n } else {\n setOverflowHidden(options);\n }\n};\n\nexport var clearAllBodyScrollLocks = function clearAllBodyScrollLocks() {\n if (isIosDevice) {\n // Clear all locks ontouchstart/ontouchmove handlers, and the references.\n locks.forEach(function (lock) {\n lock.targetElement.ontouchstart = null;\n lock.targetElement.ontouchmove = null;\n });\n\n if (documentListenerAdded) {\n document.removeEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined);\n documentListenerAdded = false;\n }\n\n // Reset initial clientY.\n initialClientY = -1;\n } else {\n restoreOverflowSetting();\n }\n\n locks = [];\n};\n\nexport var enableBodyScroll = function enableBodyScroll(targetElement) {\n if (!targetElement) {\n // eslint-disable-next-line no-console\n console.error('enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices.');\n return;\n }\n\n locks = locks.filter(function (lock) {\n return lock.targetElement !== targetElement;\n });\n\n if (isIosDevice) {\n targetElement.ontouchstart = null;\n targetElement.ontouchmove = null;\n\n if (documentListenerAdded && locks.length === 0) {\n document.removeEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined);\n documentListenerAdded = false;\n }\n } else if (!locks.length) {\n restoreOverflowSetting();\n }\n};\n\n"],"names":["Dialog","element","getAttribute","initializedBefore","parentElement","document","body","appendChild","getElements","id","selector","dialogContentUrl","elements","self","dialogIsActiveClass","focusedElementBeforeOpen","activeElement","bindEvents","Array","from","this","querySelectorAll","focusableElements","slice","classList","contains","event","firstFocusableElement","preventDefault","lastFocusableElement","focus","disableBodyScroll","addClass","removeAttribute","removeClass","setAttribute","enableBodyScroll","isActive","closeDialog","openDialog","addEventListener","target","sel","el","handler","bind","e","found","closest","call","close","toggleDialog","key","length","shiftKey","handleBackwardTab","handleForwardTab","BaseModule","classNames","filter","className","forEach","add","remove","window","setInitialized","config","elementsConfig","map","elementConfig","domElements","select","i","domElement","singleConfig","push","Object","values","obj","asList","hasPassiveEvents","passiveTestOptions","passive","removeEventListener","isIosDevice","navigator","platform","test","maxTouchPoints","locks","documentListenerAdded","initialClientY","previousBodyOverflowSetting","previousBodyPaddingRight","allowTouchMove","some","lock","options","rawEvent","touches","targetElement","concat","arr","isArray","arr2","_toConsumableArray","ontouchstart","targetTouches","clientY","ontouchmove","scrollTop","scrollHeight","clientHeight","isTargetElementTotallyScrolled","stopPropagation","handleScroll","undefined","_reserveScrollBarGap","reserveScrollBarGap","scrollBarGap","innerWidth","documentElement","clientWidth","style","paddingRight","overflow","setOverflowHidden","console","error"],"sourceRoot":""}