1 line
No EOL
29 KiB
Text
1 line
No EOL
29 KiB
Text
{"version":3,"file":"modal.nomodule.js","sources":["../../../.config/config.js","../../../src/core/api.js","../../../src/component/modal/script/modal/modal-selector.js","../../../src/component/modal/script/modal/modal-button.js","../../../src/component/modal/script/modal/modal-attribute.js","../../../src/component/modal/script/modal/modal.js","../../../src/component/modal/script/modal/focus-trap.js","../../../src/component/modal/script/modal/modals-group.js","../../../src/component/modal/script/modal/modal-body.js","../../../src/component/modal/index.js","../../../src/component/modal/main.js"],"sourcesContent":["const config = {\r\n prefix: 'fr',\r\n namespace: 'dsfr',\r\n organisation: '@gouvfr',\r\n version: '1.11.2'\r\n};\r\n\r\nexport default config;\r\n","import config from './config.js';\nconst api = window[config.namespace];\nexport default api;\n","import api from '../../api.js';\n\nexport const ModalSelector = {\n MODAL: api.internals.ns.selector('modal'),\n SCROLL_DIVIDER: api.internals.ns.selector('scroll-divider'),\n BODY: api.internals.ns.selector('modal__body'),\n TITLE: api.internals.ns.selector('modal__title')\n};\n","import api from '../../api.js';\n\nclass ModalButton extends api.core.DisclosureButton {\n constructor () {\n super(api.core.DisclosureType.OPENED);\n }\n\n static get instanceClassName () {\n return 'ModalButton';\n }\n}\n\nexport { ModalButton };\n","import api from '../../api';\n\nexport const ModalAttribute = {\n CONCEALING_BACKDROP: api.internals.ns.attr('concealing-backdrop')\n};\n","import api from '../../api.js';\nimport { ModalSelector } from './modal-selector.js';\nimport { ModalButton } from './modal-button.js';\nimport { ModalAttribute } from './modal-attribute';\n\nclass Modal extends api.core.Disclosure {\n constructor () {\n super(api.core.DisclosureType.OPENED, ModalSelector.MODAL, ModalButton, 'ModalsGroup');\n this._isActive = false;\n this.scrolling = this.resize.bind(this, false);\n this.resizing = this.resize.bind(this, true);\n }\n\n static get instanceClassName () {\n return 'Modal';\n }\n\n init () {\n super.init();\n this._isDialog = this.node.tagName === 'DIALOG';\n this.isScrolling = false;\n this.listenClick();\n this.addEmission(api.core.RootEmission.KEYDOWN, this._keydown.bind(this));\n }\n\n _keydown (keyCode) {\n switch (keyCode) {\n case api.core.KeyCodes.ESCAPE:\n this._escape();\n break;\n }\n }\n\n // TODO v2 : passer les tagName d'action en constante\n _escape () {\n const tagName = document.activeElement ? document.activeElement.tagName : undefined;\n\n switch (tagName) {\n case 'INPUT':\n case 'LABEL':\n case 'TEXTAREA':\n case 'SELECT':\n case 'AUDIO':\n case 'VIDEO':\n break;\n\n default:\n if (this.isDisclosed) {\n this.conceal();\n this.focus();\n }\n }\n }\n\n retrieved () {\n this._ensureAccessibleName();\n }\n\n get body () {\n return this.element.getDescendantInstances('ModalBody', 'Modal')[0];\n }\n\n handleClick (e) {\n if (e.target === this.node && this.getAttribute(ModalAttribute.CONCEALING_BACKDROP) !== 'false') this.conceal();\n }\n\n disclose (withhold) {\n if (!super.disclose(withhold)) return false;\n if (this.body) this.body.activate();\n this.isScrollLocked = true;\n this.setAttribute('aria-modal', 'true');\n this.setAttribute('open', 'true');\n if (!this._isDialog) {\n this.activateModal();\n }\n return true;\n }\n\n conceal (withhold, preventFocus) {\n if (!super.conceal(withhold, preventFocus)) return false;\n this.isScrollLocked = false;\n this.removeAttribute('aria-modal');\n this.removeAttribute('open');\n if (this.body) this.body.deactivate();\n if (!this._isDialog) {\n this.deactivateModal();\n }\n return true;\n }\n\n get isDialog () {\n return this._isDialog;\n }\n\n set isDialog (value) {\n this._isDialog = value;\n }\n\n activateModal () {\n if (this._isActive) return;\n this._isActive = true;\n this._hasDialogRole = this.getAttribute('role') === 'dialog';\n if (!this._hasDialogRole) this.setAttribute('role', 'dialog');\n }\n\n deactivateModal () {\n if (!this._isActive) return;\n this._isActive = false;\n if (!this._hasDialogRole) this.removeAttribute('role');\n }\n\n _setAccessibleName (node, append) {\n const id = this.retrieveNodeId(node, append);\n this.warn(`add reference to ${append} for accessible name (aria-labelledby)`);\n this.setAttribute('aria-labelledby', id);\n }\n\n _ensureAccessibleName () {\n if (this.hasAttribute('aria-labelledby') || this.hasAttribute('aria-label')) return;\n this.warn('missing accessible name');\n const title = this.node.querySelector(ModalSelector.TITLE);\n const primary = this.primaryButtons[0];\n\n switch (true) {\n case title !== null:\n this._setAccessibleName(title, 'title');\n break;\n\n case primary !== undefined:\n this.warn('missing required title, fallback to primary button');\n this._setAccessibleName(primary, 'primary');\n break;\n }\n }\n}\n\nexport { Modal };\n","import api from '../../api.js';\n\nconst unordereds = [\n '[tabindex=\"0\"]',\n 'a[href]',\n 'button:not([disabled])',\n 'input:not([disabled])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n 'audio[controls]',\n 'video[controls]',\n '[contenteditable]:not([contenteditable=\"false\"])',\n 'details>summary:first-of-type',\n 'details',\n 'iframe'\n];\n\nconst UNORDEREDS = unordereds.join();\n\nconst ordereds = [\n '[tabindex]:not([tabindex=\"-1\"]):not([tabindex=\"0\"])'\n];\n\nconst ORDEREDS = ordereds.join();\n\nconst IS_STUNNING = false;\n\nconst isFocusable = (element, container) => {\n if (!(element instanceof Element)) return false;\n const style = window.getComputedStyle(element);\n if (!style) return false;\n if (style.visibility === 'hidden') return false;\n if (container === undefined) container = element;\n\n while (container.contains(element)) {\n if (style.display === 'none') return false;\n element = element.parentElement;\n }\n\n return true;\n};\n\nclass FocusTrap {\n constructor (onTrap, onUntrap) {\n this.element = null;\n this.activeElement = null;\n this.onTrap = onTrap;\n this.onUntrap = onUntrap;\n this.waiting = this.wait.bind(this);\n this.handling = this.handle.bind(this);\n this.focusing = this.maintainFocus.bind(this);\n this.current = null;\n }\n\n get trapped () { return this.element !== null; }\n\n trap (element) {\n if (this.trapped) this.untrap();\n\n this.element = element;\n this.isTrapping = true;\n this.wait();\n\n if (this.onTrap) this.onTrap();\n }\n\n wait () {\n if (!isFocusable(this.element)) {\n window.requestAnimationFrame(this.waiting);\n return;\n }\n\n this.trapping();\n }\n\n trapping () {\n if (!this.isTrapping) return;\n this.isTrapping = false;\n const focusables = this.focusables;\n if (focusables.length && focusables.indexOf(document.activeElement) === -1) focusables[0].focus();\n this.element.setAttribute('aria-modal', true);\n window.addEventListener('keydown', this.handling);\n document.body.addEventListener('focus', this.focusing, true);\n\n if (IS_STUNNING) {\n this.stunneds = [];\n this.stun(document.body);\n }\n }\n\n stun (node) {\n for (const child of node.children) {\n if (child === this.element) continue;\n if (child.contains(this.element)) {\n this.stun(child);\n continue;\n }\n this.stunneds.push(new Stunned(child));\n }\n }\n\n maintainFocus (event) {\n if (!this.element.contains(event.target)) {\n const focusables = this.focusables;\n if (focusables.length === 0) return;\n const first = focusables[0];\n event.preventDefault();\n first.focus();\n }\n }\n\n handle (e) {\n if (e.keyCode !== 9) return;\n\n const focusables = this.focusables;\n if (focusables.length === 0) return;\n\n const first = focusables[0];\n const last = focusables[focusables.length - 1];\n\n const index = focusables.indexOf(document.activeElement);\n\n if (e.shiftKey) {\n if (!this.element.contains(document.activeElement) || index < 1) {\n e.preventDefault();\n last.focus();\n } else if (document.activeElement.tabIndex > 0 || focusables[index - 1].tabIndex > 0) {\n e.preventDefault();\n focusables[index - 1].focus();\n }\n } else {\n if (!this.element.contains(document.activeElement) || index === focusables.length - 1 || index === -1) {\n e.preventDefault();\n first.focus();\n } else if (document.activeElement.tabIndex > 0) {\n e.preventDefault();\n focusables[index + 1].focus();\n }\n }\n }\n\n get focusables () {\n let unordereds = api.internals.dom.querySelectorAllArray(this.element, UNORDEREDS);\n\n /**\n * filtrage des radiobutttons de même name (la navigations d'un groupe de radio se fait à la flèche et non pas au tab\n **/\n const radios = api.internals.dom.querySelectorAllArray(document.documentElement, 'input[type=\"radio\"]');\n\n if (radios.length) {\n const groups = {};\n\n for (const radio of radios) {\n const name = radio.getAttribute('name');\n if (groups[name] === undefined) groups[name] = new RadioButtonGroup(name);\n groups[name].push(radio);\n }\n\n unordereds = unordereds.filter((unordered) => {\n if (unordered.tagName.toLowerCase() !== 'input' || unordered.getAttribute('type').toLowerCase() !== 'radio') return true;\n const name = unordered.getAttribute('name');\n return groups[name].keep(unordered);\n });\n }\n\n const ordereds = api.internals.dom.querySelectorAllArray(this.element, ORDEREDS);\n\n ordereds.sort((a, b) => a.tabIndex - b.tabIndex);\n\n const noDuplicates = unordereds.filter((element) => ordereds.indexOf(element) === -1);\n const concateneds = ordereds.concat(noDuplicates);\n return concateneds.filter((element) => element.tabIndex !== '-1' && isFocusable(element, this.element));\n }\n\n untrap () {\n if (!this.trapped) return;\n this.isTrapping = false;\n\n this.element.removeAttribute('aria-modal');\n window.removeEventListener('keydown', this.handling);\n document.body.removeEventListener('focus', this.focusing, true);\n\n this.element = null;\n\n if (IS_STUNNING) {\n for (const stunned of this.stunneds) stunned.unstun();\n this.stunneds = [];\n }\n\n if (this.onUntrap) this.onUntrap();\n }\n\n dispose () {\n this.untrap();\n }\n}\n\nclass Stunned {\n constructor (element) {\n this.element = element;\n // this.hidden = element.getAttribute('aria-hidden');\n this.inert = element.getAttribute('inert');\n\n // this.element.setAttribute('aria-hidden', true);\n this.element.setAttribute('inert', '');\n }\n\n unstun () {\n /*\n if (this.hidden === null) this.element.removeAttribute('aria-hidden');\n else this.element.setAttribute('aria-hidden', this.hidden);\n */\n\n if (this.inert === null) this.element.removeAttribute('inert');\n else this.element.setAttribute('inert', this.inert);\n }\n}\n\nclass RadioButtonGroup {\n constructor (name) {\n this.name = name;\n this.buttons = [];\n }\n\n push (button) {\n this.buttons.push(button);\n if (button === document.activeElement || button.checked || this.selected === undefined) this.selected = button;\n }\n\n keep (button) {\n return this.selected === button;\n }\n}\n\nexport { FocusTrap };\n","import api from '../../api.js';\nimport { FocusTrap } from './focus-trap.js';\n\nclass ModalsGroup extends api.core.DisclosuresGroup {\n constructor () {\n super('Modal', false);\n this.focusTrap = new FocusTrap();\n }\n\n static get instanceClassName () {\n return 'ModalsGroup';\n }\n\n apply (value, initial) {\n super.apply(value, initial);\n if (this.current === null) this.focusTrap.untrap();\n else this.focusTrap.trap(this.current.node);\n }\n}\n\nexport { ModalsGroup };\n","import api from '../../api.js';\nimport { ModalSelector } from './modal-selector.js';\n\nconst OFFSET = 32; // 32px => 8v => 2rem\n\nclass ModalBody extends api.core.Instance {\n static get instanceClassName () {\n return 'ModalBody';\n }\n\n init () {\n this.listen('scroll', this.divide.bind(this));\n }\n\n activate () {\n this.isResizing = true;\n this.resize();\n }\n\n deactivate () {\n this.isResizing = false;\n }\n\n divide () {\n if (this.node.scrollHeight > this.node.clientHeight) {\n if (this.node.offsetHeight + this.node.scrollTop >= this.node.scrollHeight) {\n this.removeClass(ModalSelector.SCROLL_DIVIDER);\n } else {\n this.addClass(ModalSelector.SCROLL_DIVIDER);\n }\n } else {\n this.removeClass(ModalSelector.SCROLL_DIVIDER);\n }\n }\n\n resize () {\n this.adjust();\n this.request(this.adjust.bind(this));\n }\n\n adjust () {\n const offset = OFFSET * (this.isBreakpoint(api.core.Breakpoints.MD) ? 2 : 1);\n if (this.isLegacy) this.style.maxHeight = `${window.innerHeight - offset}px`;\n else this.style.setProperty('--modal-max-height', `${window.innerHeight - offset}px`);\n this.divide();\n }\n}\n\nexport { ModalBody };\n","import api from './api.js';\n\nimport { Modal } from './script/modal/modal.js';\nimport { ModalButton } from './script/modal/modal-button.js';\nimport { ModalsGroup } from './script/modal/modals-group.js';\nimport { ModalBody } from './script/modal/modal-body.js';\nimport { ModalSelector } from './script/modal/modal-selector.js';\n\napi.modal = {\n Modal: Modal,\n ModalButton: ModalButton,\n ModalBody: ModalBody,\n ModalsGroup: ModalsGroup,\n ModalSelector: ModalSelector\n};\n\nexport default api;\n","import api from './index.js';\n\napi.internals.register(api.modal.ModalSelector.MODAL, api.modal.Modal);\napi.internals.register(api.modal.ModalSelector.BODY, api.modal.ModalBody);\napi.internals.register(api.core.RootSelector.ROOT, api.modal.ModalsGroup);\n\nexport default api;\n"],"names":["const","super","let","this"],"mappings":"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"} |