{"version":3,"file":"foundation.reveal.js","sources":["../../../../IREP.Web.Content/v7/node_modules/foundation-sites/js/foundation.reveal.js"],"sourcesContent":["import $ from 'jquery';\nimport { Plugin } from './foundation.core.plugin';\nimport { onLoad } from './foundation.core.utils';\nimport { Keyboard } from './foundation.util.keyboard';\nimport { MediaQuery } from './foundation.util.mediaQuery';\nimport { Motion } from './foundation.util.motion';\nimport { Triggers } from './foundation.util.triggers';\nimport { Touch } from './foundation.util.touch'\n\n/**\n * Reveal module.\n * @module foundation.reveal\n * @requires foundation.util.keyboard\n * @requires foundation.util.touch\n * @requires foundation.util.triggers\n * @requires foundation.util.mediaQuery\n * @requires foundation.util.motion if using animations\n */\n\nclass Reveal extends Plugin {\n /**\n * Creates a new instance of Reveal.\n * @class\n * @name Reveal\n * @param {jQuery} element - jQuery object to use for the modal.\n * @param {Object} options - optional parameters.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, Reveal.defaults, this.$element.data(), options);\n this.className = 'Reveal'; // ie9 back compat\n this._init();\n\n // Touch and Triggers init are idempotent, just need to make sure they are initialized\n Touch.init($);\n Triggers.init($);\n\n Keyboard.register('Reveal', {\n 'ESCAPE': 'close',\n });\n }\n\n /**\n * Initializes the modal by adding the overlay and close buttons, (if selected).\n * @private\n */\n _init() {\n MediaQuery._init();\n this.id = this.$element.attr('id');\n this.isActive = false;\n this.cached = {mq: MediaQuery.current};\n\n this.$anchor = $(`[data-open=\"${this.id}\"]`).length ? $(`[data-open=\"${this.id}\"]`) : $(`[data-toggle=\"${this.id}\"]`);\n this.$anchor.attr({\n 'aria-controls': this.id,\n 'aria-haspopup': 'dialog',\n 'tabindex': 0\n });\n\n if (this.options.fullScreen || this.$element.hasClass('full')) {\n this.options.fullScreen = true;\n this.options.overlay = false;\n }\n if (this.options.overlay && !this.$overlay) {\n this.$overlay = this._makeOverlay(this.id);\n }\n\n this.$element.attr({\n 'role': 'dialog',\n 'aria-hidden': true,\n 'data-yeti-box': this.id,\n 'data-resize': this.id\n });\n\n if(this.$overlay) {\n this.$element.detach().appendTo(this.$overlay);\n } else {\n this.$element.detach().appendTo($(this.options.appendTo));\n this.$element.addClass('without-overlay');\n }\n this._events();\n if (this.options.deepLink && window.location.hash === ( `#${this.id}`)) {\n this.onLoadListener = onLoad($(window), () => this.open());\n }\n }\n\n /**\n * Creates an overlay div to display behind the modal.\n * @private\n */\n _makeOverlay() {\n var additionalOverlayClasses = '';\n\n if (this.options.additionalOverlayClasses) {\n additionalOverlayClasses = ' ' + this.options.additionalOverlayClasses;\n }\n\n return $('
')\n .addClass('reveal-overlay' + additionalOverlayClasses)\n .appendTo(this.options.appendTo);\n }\n\n /**\n * Updates position of modal\n * TODO: Figure out if we actually need to cache these values or if it doesn't matter\n * @private\n */\n _updatePosition() {\n var width = this.$element.outerWidth();\n var outerWidth = $(window).width();\n var height = this.$element.outerHeight();\n var outerHeight = $(window).height();\n var left, top = null;\n if (this.options.hOffset === 'auto') {\n left = parseInt((outerWidth - width) / 2, 10);\n } else {\n left = parseInt(this.options.hOffset, 10);\n }\n if (this.options.vOffset === 'auto') {\n if (height > outerHeight) {\n top = parseInt(Math.min(100, outerHeight / 10), 10);\n } else {\n top = parseInt((outerHeight - height) / 4, 10);\n }\n } else if (this.options.vOffset !== null) {\n top = parseInt(this.options.vOffset, 10);\n }\n\n if (top !== null) {\n this.$element.css({top: top + 'px'});\n }\n\n // only worry about left if we don't have an overlay or we have a horizontal offset,\n // otherwise we're perfectly in the middle\n if (!this.$overlay || (this.options.hOffset !== 'auto')) {\n this.$element.css({left: left + 'px'});\n this.$element.css({margin: '0px'});\n }\n\n }\n\n /**\n * Adds event handlers for the modal.\n * @private\n */\n _events() {\n var _this = this;\n\n this.$element.on({\n 'open.zf.trigger': this.open.bind(this),\n 'close.zf.trigger': (event, $element) => {\n if ((event.target === _this.$element[0]) ||\n ($(event.target).parents('[data-closable]')[0] === $element)) { // only close reveal when it's explicitly called\n return this.close.apply(this);\n }\n },\n 'toggle.zf.trigger': this.toggle.bind(this),\n 'resizeme.zf.trigger': function() {\n _this._updatePosition();\n }\n });\n\n if (this.options.closeOnClick && this.options.overlay) {\n this.$overlay.off('.zf.reveal').on('click.zf.dropdown tap.zf.dropdown', function(e) {\n if (e.target === _this.$element[0] ||\n $.contains(_this.$element[0], e.target) ||\n !$.contains(document, e.target)) {\n return;\n }\n _this.close();\n });\n }\n if (this.options.deepLink) {\n $(window).on(`hashchange.zf.reveal:${this.id}`, this._handleState.bind(this));\n }\n }\n\n /**\n * Handles modal methods on back/forward button clicks or any other event that triggers hashchange.\n * @private\n */\n _handleState() {\n if(window.location.hash === ( '#' + this.id) && !this.isActive){ this.open(); }\n else{ this.close(); }\n }\n\n /**\n * Disables the scroll when Reveal is shown to prevent the background from shifting\n * @param {number} scrollTop - Scroll to visually apply, window current scroll by default\n */\n _disableScroll(scrollTop) {\n scrollTop = scrollTop || $(window).scrollTop();\n if ($(document).height() > $(window).height()) {\n $(\"html\")\n .css(\"top\", -scrollTop);\n }\n }\n\n /**\n * Reenables the scroll when Reveal closes\n * @param {number} scrollTop - Scroll to restore, html \"top\" property by default (as set by `_disableScroll`)\n */\n _enableScroll(scrollTop) {\n scrollTop = scrollTop || parseInt($(\"html\").css(\"top\"), 10);\n if ($(document).height() > $(window).height()) {\n $(\"html\")\n .css(\"top\", \"\");\n $(window).scrollTop(-scrollTop);\n }\n }\n\n\n /**\n * Opens the modal controlled by `this.$anchor`, and closes all others by default.\n * @function\n * @fires Reveal#closeme\n * @fires Reveal#open\n */\n open() {\n // either update or replace browser history\n const hash = `#${this.id}`;\n if (this.options.deepLink && window.location.hash !== hash) {\n\n if (window.history.pushState) {\n if (this.options.updateHistory) {\n window.history.pushState({}, '', hash);\n } else {\n window.history.replaceState({}, '', hash);\n }\n } else {\n window.location.hash = hash;\n }\n }\n\n // Remember anchor that opened it to set focus back later, have general anchors as fallback\n this.$activeAnchor = $(document.activeElement).is(this.$anchor) ? $(document.activeElement) : this.$anchor;\n\n this.isActive = true;\n\n // Make elements invisible, but remove display: none so we can get size and positioning\n this.$element\n .css({ 'visibility': 'hidden' })\n .show()\n .scrollTop(0);\n if (this.options.overlay) {\n this.$overlay.css({'visibility': 'hidden'}).show();\n }\n\n this._updatePosition();\n\n this.$element\n .hide()\n .css({ 'visibility': '' });\n\n if(this.$overlay) {\n this.$overlay.css({'visibility': ''}).hide();\n if(this.$element.hasClass('fast')) {\n this.$overlay.addClass('fast');\n } else if (this.$element.hasClass('slow')) {\n this.$overlay.addClass('slow');\n }\n }\n\n\n if (!this.options.multipleOpened) {\n /**\n * Fires immediately before the modal opens.\n * Closes any other modals that are currently open\n * @event Reveal#closeme\n */\n this.$element.trigger('closeme.zf.reveal', this.id);\n }\n\n if ($('.reveal:visible').length === 0) {\n this._disableScroll();\n }\n\n var _this = this;\n\n // Motion UI method of reveal\n if (this.options.animationIn) {\n function afterAnimation(){\n _this.$element\n .attr({\n 'aria-hidden': false,\n 'tabindex': -1\n })\n .focus();\n _this._addGlobalClasses();\n Keyboard.trapFocus(_this.$element);\n }\n if (this.options.overlay) {\n Motion.animateIn(this.$overlay, 'fade-in');\n }\n Motion.animateIn(this.$element, this.options.animationIn, () => {\n if(this.$element) { // protect against object having been removed\n this.focusableElements = Keyboard.findFocusable(this.$element);\n afterAnimation();\n }\n });\n }\n // jQuery method of reveal\n else {\n if (this.options.overlay) {\n this.$overlay.show(0);\n }\n this.$element.show(this.options.showDelay);\n }\n\n // handle accessibility\n this.$element\n .attr({\n 'aria-hidden': false,\n 'tabindex': -1\n })\n .focus();\n Keyboard.trapFocus(this.$element);\n\n this._addGlobalClasses();\n\n this._addGlobalListeners();\n\n /**\n * Fires when the modal has successfully opened.\n * @event Reveal#open\n */\n this.$element.trigger('open.zf.reveal');\n }\n\n /**\n * Adds classes and listeners on document required by open modals.\n *\n * The following classes are added and updated:\n * - `.is-reveal-open` - Prevents the scroll on document\n * - `.zf-has-scroll` - Displays a disabled scrollbar on document if required like if the\n * scroll was not disabled. This prevent a \"shift\" of the page content due\n * the scrollbar disappearing when the modal opens.\n *\n * @private\n */\n _addGlobalClasses() {\n const updateScrollbarClass = () => {\n $('html').toggleClass('zf-has-scroll', !!($(document).height() > $(window).height()));\n };\n\n this.$element.on('resizeme.zf.trigger.revealScrollbarListener', () => updateScrollbarClass());\n updateScrollbarClass();\n $('html').addClass('is-reveal-open');\n }\n\n /**\n * Removes classes and listeners on document that were required by open modals.\n * @private\n */\n _removeGlobalClasses() {\n this.$element.off('resizeme.zf.trigger.revealScrollbarListener');\n $('html').removeClass('is-reveal-open');\n $('html').removeClass('zf-has-scroll');\n }\n\n /**\n * Adds extra event handlers for the body and window if necessary.\n * @private\n */\n _addGlobalListeners() {\n var _this = this;\n if(!this.$element) { return; } // If we're in the middle of cleanup, don't freak out\n this.focusableElements = Keyboard.findFocusable(this.$element);\n\n if (!this.options.overlay && this.options.closeOnClick && !this.options.fullScreen) {\n $('body').on('click.zf.dropdown tap.zf.dropdown', function(e) {\n if (e.target === _this.$element[0] ||\n $.contains(_this.$element[0], e.target) ||\n !$.contains(document, e.target)) { return; }\n _this.close();\n });\n }\n\n if (this.options.closeOnEsc) {\n $(window).on('keydown.zf.reveal', function(e) {\n Keyboard.handleKey(e, 'Reveal', {\n close: function() {\n if (_this.options.closeOnEsc) {\n _this.close();\n }\n }\n });\n });\n }\n }\n\n /**\n * Closes the modal.\n * @function\n * @fires Reveal#closed\n */\n close() {\n if (!this.isActive || !this.$element.is(':visible')) {\n return false;\n }\n var _this = this;\n\n // Motion UI method of hiding\n if (this.options.animationOut) {\n if (this.options.overlay) {\n Motion.animateOut(this.$overlay, 'fade-out');\n }\n\n Motion.animateOut(this.$element, this.options.animationOut, finishUp);\n }\n // jQuery method of hiding\n else {\n this.$element.hide(this.options.hideDelay);\n\n if (this.options.overlay) {\n this.$overlay.hide(0, finishUp);\n }\n else {\n finishUp();\n }\n }\n\n // Conditionals to remove extra event listeners added on open\n if (this.options.closeOnEsc) {\n $(window).off('keydown.zf.reveal');\n }\n\n if (!this.options.overlay && this.options.closeOnClick) {\n $('body').off('click.zf.dropdown tap.zf.dropdown');\n }\n\n this.$element.off('keydown.zf.reveal');\n\n function finishUp() {\n\n // Get the current top before the modal is closed and restore the scroll after.\n // TODO: use component properties instead of HTML properties\n // See https://github.com/foundation/foundation-sites/pull/10786\n var scrollTop = parseInt($(\"html\").css(\"top\"), 10);\n\n if ($('.reveal:visible').length === 0) {\n _this._removeGlobalClasses(); // also remove .is-reveal-open from the html element when there is no opened reveal\n }\n\n Keyboard.releaseFocus(_this.$element);\n\n _this.$element.attr('aria-hidden', true);\n\n if ($('.reveal:visible').length === 0) {\n _this._enableScroll(scrollTop);\n }\n\n /**\n * Fires when the modal is done closing.\n * @event Reveal#closed\n */\n _this.$element.trigger('closed.zf.reveal');\n }\n\n /**\n * Resets the modal content\n * This prevents a running video to keep going in the background\n */\n if (this.options.resetOnClose) {\n this.$element.html(this.$element.html());\n }\n\n this.isActive = false;\n // If deepLink and we did not switched to an other modal...\n if (_this.options.deepLink && window.location.hash === `#${this.id}`) {\n // Remove the history hash\n if (window.history.replaceState) {\n const urlWithoutHash = window.location.pathname + window.location.search;\n if (this.options.updateHistory) {\n window.history.pushState({}, '', urlWithoutHash); // remove the hash\n } else {\n window.history.replaceState('', document.title, urlWithoutHash);\n }\n } else {\n window.location.hash = '';\n }\n }\n\n this.$activeAnchor.focus();\n }\n\n /**\n * Toggles the open/closed state of a modal.\n * @function\n */\n toggle() {\n if (this.isActive) {\n this.close();\n } else {\n this.open();\n }\n };\n\n /**\n * Destroys an instance of a modal.\n * @function\n */\n _destroy() {\n if (this.options.overlay) {\n this.$element.appendTo($(this.options.appendTo)); // move $element outside of $overlay to prevent error unregisterPlugin()\n this.$overlay.hide().off().remove();\n }\n this.$element.hide().off();\n this.$anchor.off('.zf');\n $(window).off(`.zf.reveal:${this.id}`)\n if (this.onLoadListener) $(window).off(this.onLoadListener);\n\n if ($('.reveal:visible').length === 0) {\n this._removeGlobalClasses(); // also remove .is-reveal-open from the html element when there is no opened reveal\n }\n };\n}\n\nReveal.defaults = {\n /**\n * Motion-UI class to use for animated elements. If none used, defaults to simple show/hide.\n * @option\n * @type {string}\n * @default ''\n */\n animationIn: '',\n /**\n * Motion-UI class to use for animated elements. If none used, defaults to simple show/hide.\n * @option\n * @type {string}\n * @default ''\n */\n animationOut: '',\n /**\n * Time, in ms, to delay the opening of a modal after a click if no animation used.\n * @option\n * @type {number}\n * @default 0\n */\n showDelay: 0,\n /**\n * Time, in ms, to delay the closing of a modal after a click if no animation used.\n * @option\n * @type {number}\n * @default 0\n */\n hideDelay: 0,\n /**\n * Allows a click on the body/overlay to close the modal.\n * @option\n * @type {boolean}\n * @default true\n */\n closeOnClick: true,\n /**\n * Allows the modal to close if the user presses the `ESCAPE` key.\n * @option\n * @type {boolean}\n * @default true\n */\n closeOnEsc: true,\n /**\n * If true, allows multiple modals to be displayed at once.\n * @option\n * @type {boolean}\n * @default false\n */\n multipleOpened: false,\n /**\n * Distance, in pixels, the modal should push down from the top of the screen.\n * @option\n * @type {number|string}\n * @default auto\n */\n vOffset: 'auto',\n /**\n * Distance, in pixels, the modal should push in from the side of the screen.\n * @option\n * @type {number|string}\n * @default auto\n */\n hOffset: 'auto',\n /**\n * Allows the modal to be fullscreen, completely blocking out the rest of the view. JS checks for this as well.\n * @option\n * @type {boolean}\n * @default false\n */\n fullScreen: false,\n /**\n * Allows the modal to generate an overlay div, which will cover the view when modal opens.\n * @option\n * @type {boolean}\n * @default true\n */\n overlay: true,\n /**\n * Allows the modal to remove and reinject markup on close. Should be true if using video elements w/o using provider's api, otherwise, videos will continue to play in the background.\n * @option\n * @type {boolean}\n * @default false\n */\n resetOnClose: false,\n /**\n * Link the location hash to the modal.\n * Set the location hash when the modal is opened/closed, and open/close the modal when the location changes.\n * @option\n * @type {boolean}\n * @default false\n */\n deepLink: false,\n /**\n * If `deepLink` is enabled, update the browser history with the open modal\n * @option\n * @default false\n */\n updateHistory: false,\n /**\n * Allows the modal to append to custom div.\n * @option\n * @type {string}\n * @default \"body\"\n */\n appendTo: \"body\",\n /**\n * Allows adding additional class names to the reveal overlay.\n * @option\n * @type {string}\n * @default ''\n */\n additionalOverlayClasses: ''\n};\n\nexport {Reveal};\n"],"names":["Reveal","Plugin","_setup","element","options","this","$element","$","extend","defaults","data","className","_init","Touch","init","Triggers","Keyboard","register","ESCAPE","MediaQuery","id","attr","isActive","cached","mq","current","$anchor","length","tabindex","fullScreen","hasClass","overlay","$overlay","_makeOverlay","role","detach","appendTo","addClass","_events","deepLink","window","location","hash","onLoadListener","onLoad","open","additionalOverlayClasses","_updatePosition","left","width","outerWidth","height","outerHeight","top","hOffset","parseInt","vOffset","Math","min","css","margin","_this","on","bind","event","target","parents","close","apply","toggle","closeOnClick","off","e","contains","document","_handleState","_disableScroll","scrollTop","_enableScroll","history","pushState","updateHistory","replaceState","$activeAnchor","activeElement","is","visibility","show","hide","multipleOpened","trigger","animationIn","Motion","animateIn","focusableElements","findFocusable","focus","_addGlobalClasses","trapFocus","showDelay","_addGlobalListeners","updateScrollbarClass","toggleClass","_removeGlobalClasses","removeClass","closeOnEsc","handleKey","finishUp","releaseFocus","animationOut","animateOut","hideDelay","resetOnClose","html","urlWithoutHash","pathname","search","title","_destroy","remove"],"mappings":"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","x_google_ignoreList":[0]}