{"version":3,"file":"PopOver.js","names":["PopOver","a","setters","ToolTip","default","on","off","trigger","Event","ajax","debounce","deepMerge","isTouchDevice","execute","constructor","element","options","arguments","length","contentUrl","targetContent","autoCloseTimeout","showOnInit","showOnClick","enableAnalyticsOnShow","afterInit","showContent","initState","state","isContentHovered","isContentLoaded","wasContentShownOnce","closeTimer","isElementHovered","bindEvents","selectors","target","bind","id","tooltip","onContentMouseEnter","onContentMouseLeave","close","onPopoverHide","getAttribute","hideContent","onClick","event","currentTarget","isActive","triggerAnalyticsOnClick","window","location","href","onMouseEnter","clearTimeout","onMouseLeave","keyBoardActions","obj","triggerAnalytics","analytics","emit","Object","keys","isForceContentLoad","isLoading","loadContent","loadTargetContent","isContentValid","text","url","addLoader","then","onLoadContent","catch","error","autoPosition","update","removeLoader","setContent","message","autoClose","Promise","reject","Error","targetElement","document","querySelector","innerHTML","onContentUpdated","parentNode","removeChild","response","initAccessibility","tooltipContent","hidePopOver","setTimeout","hideContentFromMouse","destroy"],"sources":["components/global/PopOver.js"],"sourcesContent":["import ToolTip from 'components/global/ToolTip';\nimport { on, off, trigger } from 'toolbox/event';\nimport { Event } from 'services/EventEmitter';\nimport { ajax } from 'toolbox/ajax';\nimport { debounce } from 'toolbox/debounce';\nimport { deepMerge } from 'toolbox/deepMerge';\nimport { isTouchDevice } from 'toolbox/device';\n\n/**\n * This is a description of the PopOver constructor function.\n * @class\n * @classdesc This is a description of the PopOver class.\n * @extends ToolTip\n */\nexport default class PopOver extends ToolTip {\n /**\n * Constructor of the class that mainly merge the options of the components\n * @param {HTMLElement} element HTMLElement of the component\n * @param {Object} options options that belongs to the component\n */\n constructor(element, options = {}) {\n super(element, deepMerge({\n contentUrl: null,\n targetContent: null, // should be a unique selector\n autoCloseTimeout: null,\n showOnInit: false,\n showOnClick: false, // show content on click (disable mouse enter/leave events)\n enableAnalyticsOnShow: false,\n }, options));\n }\n\n /**\n * After init\n * Run any script after the component is fully initialized\n */\n afterInit() {\n super.afterInit();\n\n if (this.options.showOnInit) {\n this.showContent();\n }\n }\n\n /**\n * Init the different state of the component\n * It helps to avoid heavy DOM manipulation\n */\n initState() {\n super.initState();\n\n this.state.isContentHovered = false;\n this.state.isContentLoaded = false;\n this.state.wasContentShownOnce = false;\n this.state.closeTimer = null;\n this.state.isElementHovered = true;\n }\n\n /**\n * Should contain only event listeners and nothing else\n * All the event handlers should be into a separated function. No usage of anonyous function\n */\n bindEvents() {\n super.bindEvents();\n\n on('popover.show', this.selectors.target, this.showContent.bind(this));\n if (!isTouchDevice() && !this.options.showOnClick) {\n on(`mouseenter.popover${this.id}`, this.tooltip, this.onContentMouseEnter.bind(this));\n on(`mouseleave.popover${this.id}`, this.tooltip, debounce(this.onContentMouseLeave.bind(this), 100));\n }\n\n Event.on('modal.open', this.close, this);\n Event.on('popover.hide.content', this.onPopoverHide, this);\n }\n\n /**\n * Hide popover content event handler\n * @param {String} id popover ID\n */\n onPopoverHide(id) {\n if (!this.element || this.element.getAttribute('data-component-id') !== id) {\n return;\n }\n\n this.hideContent();\n }\n\n /**\n * Click event handler\n * @param {Event} event - Event object\n */\n onClick(event) {\n const currentTarget = this.selectors.target || event.target;\n\n if (currentTarget.getAttribute('data-href') && this.state.isActive) {\n this.triggerAnalyticsOnClick();\n\n window.location.href = currentTarget.getAttribute('data-href');\n }\n\n super.onClick(event);\n }\n\n /**\n * MouseEnter event handler\n */\n onMouseEnter() {\n this.state.isElementHovered = true;\n\n if (this.state.closeTimer) {\n clearTimeout(this.state.closeTimer);\n this.state.closeTimer = null;\n }\n\n super.onMouseEnter();\n }\n\n /**\n * MouseLeave event handler\n */\n onMouseLeave() {\n this.state.isElementHovered = false;\n super.onMouseLeave();\n }\n\n /**\n * ContentMouseEnter event handler\n */\n onContentMouseEnter() {\n this.state.isContentHovered = true;\n }\n\n /**\n * ContentMouseLeave event handler\n */\n onContentMouseLeave() {\n this.close();\n }\n\n /**\n * Shows/hides on keypress\n * @param {Event} event - Event object\n * @param {Object} obj - Code key object\n */\n keyBoardActions(event, obj) {\n super.keyBoardActions(event, obj);\n }\n\n /**\n * Trigger Analytics On ShowContent\n */\n triggerAnalytics() {\n if (!this.analytics || !this.options.enableAnalyticsOnShow || this.state.wasContentShownOnce) {\n return;\n }\n\n Event.emit('analytics.event', this.analytics);\n }\n\n /**\n * Trigger Analytics On Click\n */\n triggerAnalyticsOnClick() {\n if (this.analytics && Object.keys(this.analytics).length) {\n Event.emit('analytics.event', this.analytics);\n }\n }\n\n /**\n * Shows a PopOver\n *\n * @param {Boolean} isForceContentLoad Indicates that content needs to force load from server despite the cached value\n */\n showContent(isForceContentLoad) {\n if (this.state.isActive) {\n return;\n }\n\n if (isForceContentLoad) {\n this.state.isContentLoaded = false;\n }\n\n super.showContent();\n\n this.triggerAnalytics();\n\n this.state.wasContentShownOnce = true;\n\n if (this.state.isContentLoaded || this.state.isLoading) {\n return;\n }\n\n if (this.options.contentUrl) {\n this.loadContent(this.options.contentUrl);\n } else if (this.options.targetContent) {\n this.loadTargetContent();\n }\n }\n\n /**\n * Content has to have at least text or text coming from a URL\n *\n * @returns {Boolean} True or False\n */\n isContentValid() {\n const { text, contentUrl, targetContent } = this.options;\n return text || contentUrl || targetContent;\n }\n\n /**\n * Ajax request for the content\n *\n * @param {String} url - url to fetch content for a PopOver\n * @returns {Promise} object\n */\n loadContent(url) {\n if (!url) {\n return Promise.reject(new Error('Popover has to have a URL set in order to load content'));\n }\n\n this.addLoader(this.tooltip);\n\n return ajax(url)\n .then(this.onLoadContent.bind(this))\n .catch((error) => {\n if (this.autoPosition) {\n this.autoPosition.update();\n }\n this.removeLoader(this.tooltip);\n this.setContent(error.message);\n this.autoClose();\n });\n }\n\n /**\n * Load content from a targetted element\n */\n loadTargetContent() {\n if (this.state.isContentLoaded) {\n return;\n }\n\n const targetElement = document.querySelector(this.options.targetContent);\n\n if (!targetElement) {\n return;\n }\n\n this.state.isContentLoaded = true;\n this.setContent(targetElement.innerHTML);\n this.onContentUpdated();\n this.autoClose();\n\n // remove original element\n targetElement.parentNode.removeChild(targetElement);\n }\n\n /**\n * Put a content to PopOver after request is resolved\n * @param {string} response - HTML which inserts to PopOver\n */\n onLoadContent(response) {\n this.state.isContentLoaded = true;\n this.removeLoader(this.tooltip);\n this.setContent(response);\n this.onContentUpdated();\n this.autoClose();\n this.initAccessibility();\n trigger('tooltip.checkcomponent', this.element);\n }\n\n /**\n * Register children elements when content is updated\n */\n onContentUpdated() {\n Event.emit('registry.registerChildren', this.selectors.tooltipContent);\n }\n\n /**\n * Hides the PopOver if it is not in use.\n * takes also account of the loading state and autoclose timer\n */\n hidePopOver() {\n if (this.state.isElementHovered || this.state.isContentHovered || (this.state.isLoading && this.state.closeTimer)) {\n return;\n }\n this.hideContent();\n }\n\n /**\n * Hides a PopOver\n */\n close() {\n this.state.isContentHovered = false;\n if (this.options.autoCloseTimeout) {\n this.autoClose();\n } else {\n this.hidePopOver();\n }\n }\n\n /**\n * Hides a PopOver after the specified delay\n */\n autoClose() {\n if (this.options.autoCloseTimeout) {\n this.state.closeTimer = setTimeout(() => {\n this.state.closeTimer = null;\n this.hidePopOver();\n }, this.options.autoCloseTimeout);\n }\n }\n\n /**\n * Hide content on mouse iteraction\n */\n hideContentFromMouse() {\n this.hidePopOver();\n }\n\n /**\n * Destroy is called automatically after the component is being removed from the DOM\n * You must always destroy the listeners attached to an element to avoid any memory leaks\n */\n destroy() {\n super.destroy();\n if (!isTouchDevice() && !this.options.showOnClick) {\n off(this.tooltip);\n }\n Event.off('modal.open', this.close);\n Event.off('popover.hide.content', this.onPopoverHide);\n }\n}\n"],"mappings":"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","ignoreList":[]}