{"version":3,"file":"59.ed2d6cc0823839b73cf0.js","mappings":"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","sources":["webpack://pratt-parent/./static/js/utils/StateMachine.js","webpack://pratt-parent/./static/js/utils/on.js","webpack://pratt-parent/./static/js/components/modal-gallery/constants.js","webpack://pratt-parent/./static/js/components/modal-gallery/Slide.js","webpack://pratt-parent/./static/js/components/modal-gallery/index.js"],"sourcesContent":["class StateMachine {\n /**\n * Creates a new state machine.\n *\n * @param {string} initialState the initial state of the machine\n * @param {Record} stateMap a map of states to their valid next states\n */\n constructor(initialState, stateMap) {\n /**\n * @private\n * @type {string} the current internal state\n */\n this._state = initialState;\n\n /**\n * @private\n * @type {Record>} a map of states to their valid next states\n */\n this._map = Object.entries(stateMap).reduce(\n (acc, [state, nextStates]) => ({\n ...acc,\n [state]: new Set(nextStates),\n }),\n {},\n );\n }\n\n /**\n * @type {string} the current state of the machine\n */\n get state() {\n return this._state;\n }\n\n /**\n * Checks whether the current state is any of the given ones.\n *\n * @example\n * ```js\n * const isMounted = stateMachine.isStateOneOf(['beforeMount', 'mounted', 'beforeUnmount']);\n * ```\n *\n * @param {...string} states the different states to check\n * @returns {boolean} whether the current state is one of the given ones\n */\n isStateOneOf(...states) {\n return new Set(states).has(this._state);\n }\n\n /**\n * Sets the current state, granted that the given state is valid to move to from\n * the current state in the machine.\n *\n * @param {string} newState the new state to move to\n */\n setState(newState) {\n const validStates = this._map[this._state];\n if (!validStates) {\n throw new Error(`Modal gallery is in unknown state: ${this._state}`);\n }\n\n if (validStates.has(newState)) {\n this._state = newState;\n } else if (process.env.NODE_ENV === 'development') {\n const validStatesList = Array.from(validStates)\n .map(state => `\"${state}\"`)\n .join(',');\n console.warn(\n `Modal gallery is in state \"${this._state}\".\\nFrom here, it can only be in one of the following states: ${validStatesList}`,\n );\n }\n }\n}\n\nexport default StateMachine;\n","/**\n * Applies the event listener to the given element(s).\n *\n * @example\n * ```js\n * // Creates an event listener on window scroll\n * const off = on(window, 'scroll', onScroll);\n * // Returns function to remove event listener when you're done\n * off();\n * ```\n *\n * @example\n * ```js\n * // Handles one or multiple elements\n * const off = on([input, input2, input3], 'blur', onBlur);\n * ```\n *\n * @param {HTMLElement|HTMLElement[]} elementOrMultiple one or many HTML elements to apply the listener to\n * @param {string} type the type of event to apply\n * @param {Function} listener the event listener callback\n * @param {boolean|EventListenerOptions} options the event listener options to use\n * @returns {Function} a function that unsubscribes from any event listeners\n */\nconst on = (elementOrMultiple, type, listener, options) => {\n /**\n * @type {HTMLElement[]} the elements to attach listeners to\n */\n let elements = elementOrMultiple;\n if (!Array.isArray(elementOrMultiple)) {\n elements = [elementOrMultiple];\n }\n\n elements.forEach(el => {\n if (el) {\n el.addEventListener(type, listener, options);\n }\n });\n\n return () => {\n elements.forEach(el => {\n if (el) {\n el.removeEventListener(type, listener, options);\n }\n });\n };\n};\n\nexport default on;\n","export const STATE = {\n unmounted: 'unmounted',\n beforeUnmount: 'beforeUnmount',\n beforeMount: 'beforeMount',\n mounted: 'mounted',\n open: 'open',\n beforeOpen: 'beforeOpen',\n beforeClose: 'beforeClose',\n};\n\nexport const TARGET_CLASSES = {\n container: 'js-modal-gallery',\n root: 'js-modal-gallery__root',\n trigger: 'js-modal-gallery__trigger',\n hidden: 'js-modal-gallery__hidden',\n videoOverlay: 'js-modal-gallery__video-overlay',\n videoButton: 'js-modal-gallery__video-button',\n open: 'js-modal-gallery__open',\n caption: 'js-modal-gallery__caption',\n close: 'js-modal-gallery__close',\n countCurrent: 'js-modal-gallery__count--current',\n countTotal: 'js-modal-gallery__count--total',\n credit: 'js-modal-gallery__credit',\n next: 'js-modal-gallery__next',\n previous: 'js-modal-gallery__previous',\n slideAsset: 'js-modal-gallery__asset',\n slideActive: 'js-modal-gallery__slide--active',\n slideNext: 'js-modal-gallery__slide--next',\n slidePrevious: 'js-modal-gallery__slide--previous',\n};\n\nexport const COMPONENTS = {\n caption: null,\n close: [],\n countCurrent: null,\n countTotal: null,\n credit: null,\n next: [],\n open: [],\n previous: [],\n slideActive: null,\n slideNext: null,\n slidePrevious: null,\n};\n","import { StateMachine, on } from '@pratt/js/utils';\nimport { KEY_CODES } from '@pratt/js/utils/constants';\nimport { TARGET_CLASSES } from './constants';\n\nconst STATE = {\n unmounted: 'unmounted',\n beforeMount: 'beforeMount',\n mounted: 'mounted',\n beforeUnmount: 'beforeUnmount',\n};\n\nconst VIDEO_LABELS = {\n play: 'Play',\n pause: 'Pause',\n ariaPlay: 'Play Video',\n ariaPause: 'Pause Video',\n};\n\nclass Slide {\n /**\n * Creates a new slide for the modal gallery.\n *\n * @param {HTMLImageElement|HTMLVideoElement} ref the original reference to the image or video element\n * on the page\n */\n constructor(ref) {\n this.stateManager = new StateMachine(STATE.unmounted, {\n [STATE.unmounted]: [STATE.beforeMount],\n [STATE.beforeMount]: [STATE.mounted],\n [STATE.mounted]: [STATE.beforeUnmount],\n [STATE.beforeUnmount]: [STATE.unmounted],\n });\n\n this.ref = ref;\n this.wrapper = null;\n this.button = null;\n this.el = null; // the media element (img/video)\n this.videoPoster = null;\n\n this.initialize();\n this.mount();\n }\n\n initialize() {\n // Clone the ref to display it in the slide and give it our custom class\n this.el = this.ref.cloneNode(true);\n this.el.className = TARGET_CLASSES.slideAsset;\n\n if (this.isVideo) {\n this.videoPoster = document.createElement('img');\n this.videoPoster.src = this.ref.poster;\n } else {\n // For image sizes\n this.el.src = this.ref.dataset.src || this.ref.src;\n this.el.srcset = this.ref.dataset.srcset || this.ref.srcset;\n this.el.sizes = this.ref.dataset.sizes || this.ref.sizes;\n }\n }\n\n /**\n * @type {boolean} whether the slide is currently mounted\n */\n get isMounted() {\n return this.stateManager.isStateOneOf([STATE.beforeMount, STATE.mounted, STATE.beforeUnmount]);\n }\n\n /**\n * @type {HTMLImageElement} the preview to show for inactive slides\n */\n get preview() {\n if (this.isVideo) {\n return this.videoPoster;\n }\n return this.el;\n }\n\n /**\n * @type {boolean} whether the slide is a video\n */\n get isVideo() {\n return this.ref instanceof HTMLVideoElement;\n }\n\n /**\n * @type {string} the slide's media caption\n */\n get caption() {\n let figureElement = this.ref.closest('figure');\n let captionElement = figureElement.querySelector('figcaption');\n if (captionElement) {\n let descriptionElement = captionElement.querySelector('.article__caption-description');\n return descriptionElement ? descriptionElement.innerHTML : captionElement.innerHTML;\n } else {\n return '';\n }\n }\n\n /**\n * @type {string} the slide's media credit\n */\n get credit() {\n return this.ref.dataset.credit || '';\n }\n\n /**\n * Callback before the slide is mounted. Wraps the media reference in a `span` for\n * adding the open button.\n */\n _beforeMount() {\n const wrapper = document.createElement('span');\n wrapper.classList.add(TARGET_CLASSES.trigger);\n\n // If the media item isn't absolutely positioned, add a relative class\n // to position the wrapper element correctly\n if (window.getComputedStyle(this.ref).position !== 'absolute') {\n wrapper.classList.add('relative');\n }\n\n let videoOverlay = null;\n const isFromVideoBlock = this.ref.parentNode.classList.contains('wp-block-video');\n\n if (this.isVideo && isFromVideoBlock) {\n wrapper.classList.add('video');\n videoOverlay = this.createVideoOverlayElem();\n }\n\n // Add the wrapper around the media element\n this.ref.parentNode.insertBefore(wrapper, this.ref);\n\n // Append the media element to the wrapper\n wrapper.append(this.ref);\n\n // Append the video overlay and play the video\n if (videoOverlay) {\n wrapper.append(videoOverlay);\n this.ref.play();\n }\n\n this.wrapper = wrapper;\n }\n\n /**\n * Mounts the slide to the DOM. If the slide is already mounted, an error\n * is thrown.\n */\n mount() {\n if (this.isMounted) {\n throw new Error('Slide is already mounted!');\n }\n\n this.stateManager.setState(STATE.beforeMount);\n this._beforeMount();\n this.stateManager.setState(STATE.mounted);\n }\n\n /**\n * Unwraps the media reference, removes the wrapper, and resets both the wrapper and button.\n */\n _beforeUnmount() {\n this.wrapper.parentNode.insertBefore(this.wrapper, this.ref);\n this.wrapper.parentNode.removeChild(this.wrapper);\n this.button = null;\n this.wrapper = null;\n }\n\n /**\n * Unmounts the slide from the DOM, if the slide was mounted.\n */\n unmount() {\n if (this.stateManager.state === STATE.mounted) {\n this.stateManager.setState(STATE.beforeUnmount);\n this._beforeUnmount();\n this.stateManager.setState(STATE.unmounted);\n }\n }\n\n /**\n * Retrieves the slide's open button or, if it doesn't exist, creates one.\n *\n * @returns {HTMLButtonElement} the open button, or `null` if the slide isn't mounted\n */\n getOrCreateOpenButton() {\n if (this.stateManager.state !== STATE.mounted) {\n return null;\n } else if (!this.button) {\n const button = document.createElement('button');\n\n button.setAttribute('aria-label', 'Open gallery');\n button.setAttribute('aria-haspopup', 'dialog');\n button.setAttribute('aria-expanded', 'false');\n button.setAttribute('aria-controls', 'modal-gallery');\n button.classList.add(TARGET_CLASSES.open);\n\n this.wrapper.append(button);\n this.button = button;\n }\n return this.button;\n }\n\n /**\n * Renders the slide to the given element.\n *\n * @param {HTMLElement} element the element to render to\n * @param {boolean} [active=false] whether the slide is currently active\n * @returns {HTMLImageElement|HTMLVideoElement} the rendered slide\n */\n renderTo(element, active = false) {\n if (this.stateManager.state !== STATE.mounted || !element) {\n return null;\n }\n\n if (active) {\n element.appendChild(this.el);\n\n // Append the video overlay and play the video from the beginning\n if (this.isVideo) {\n const videoOverlay = this.createVideoOverlayElem();\n element.append(videoOverlay);\n\n this.el.currentTime = 0;\n this.el.play();\n }\n\n return;\n }\n\n return element.appendChild(this.preview);\n }\n\n /**\n * Returns overlay div allow video play/pause functionality\n *\n * @returns {HTMLElement} video overlay div with button\n */\n createVideoOverlayElem() {\n // Add a focusable overlay on top of the video element to allow play/pause functionality\n const videoOverlay = document.createElement('div');\n videoOverlay.classList.add(TARGET_CLASSES.videoOverlay);\n videoOverlay.setAttribute('tabindex', '0');\n videoOverlay.setAttribute('role', 'button');\n videoOverlay.setAttribute('aria-label', VIDEO_LABELS.ariaPause);\n\n // Add event listeners for the video overlay for toggling play/pause\n on(videoOverlay, 'click', this.toggleVideoPlay);\n on(videoOverlay, 'keydown', e => {\n const spaceKey = e.key === KEY_CODES.SPACE || e.key === KEY_CODES.SPACE_IE11;\n const enterKey = e.key === KEY_CODES.ENTER;\n if (spaceKey || enterKey) {\n e.preventDefault(); // prevent page from scrolling down\n this.toggleVideoPlay(e);\n }\n });\n\n // Add a button to visually indicate play/pause state\n const videoButton = document.createElement('button');\n videoButton.classList.add(TARGET_CLASSES.videoButton);\n videoButton.setAttribute('tabindex', '-1');\n videoButton.setAttribute('aria-label', VIDEO_LABELS.ariaPause);\n videoButton.textContent = VIDEO_LABELS.pause;\n\n // Append the button to the video overlay\n videoOverlay.append(videoButton);\n\n return videoOverlay;\n }\n\n /**\n * Toggles video play/pause state\n *\n * @param {MouseEvent|KeyboardEvent} e The event from the click or keydown event listeners\n * @returns void\n */\n toggleVideoPlay(e) {\n const videoOverlay = e.currentTarget;\n // Get the