{"version":3,"file":"fg-modal.js","sources":["../../../node_modules/fg-modal/src/fg-modal.js"],"sourcesContent":["\nclass Modal extends HTMLElement {\n\tconstructor(){\n\t\tsuper();\n\t\tthis._init = this._init.bind(this);\n \tthis._observer = new MutationObserver(this._init);\n\t}\n\tconnectedCallback(){\n\t\tif (this.children.length) {\n\t\t\tthis._init();\n\t\t}\n\t\tthis._observer.observe(this, { childList: true });\n\t}\n\tmakeEvent( evtName ){\n\t\tif( typeof window.CustomEvent === \"function\" ){\n\t\t\treturn new CustomEvent( evtName, {\n\t\t\t\tbubbles: true,\n\t\t\t\tcancelable: false\n\t\t\t});\n\t\t} else {\n\t\t\tvar evt = document.createEvent('CustomEvent');\n\t\t\tevt.initCustomEvent( evtName, true, true, {} );\n\t\t\treturn evt;\n\t\t}\n\t}\n\t_init(){\n\t\tthis.closetext = \"Close dialog\";\n\t\tthis.closeclass = \"modal_close\";\n\t\tthis.closed = true;\n\t\t\n\t\tthis.initEvent = this.makeEvent( \"init\" );\n\t\tthis.beforeOpenEvent = this.makeEvent( \"beforeopen\" );\n\t\tthis.openEvent = this.makeEvent( \"open\" );\n\t\tthis.closeEvent = this.makeEvent( \"close\" );\n\t\tthis.beforeCloseEvent = this.makeEvent( \"beforeclose\" );\n\t\tthis.activeElem = document.activeElement;\n\t\tthis.closeBtn = this.querySelector( \".\" + this.closeclass ) || this.appendCloseBtn();\n\t\tthis.titleElem = this.querySelector( \".modal_title\" );\n\t\tthis.enhanceMarkup();\n\t\tthis.bindEvents();\n\t\tthis.dispatchEvent( this.initEvent );\n\t}\n\tclosest(el, s){\t\t\n\t\tvar whichMatches = Element.prototype.matches || Element.prototype.msMatchesSelector;\n\t\t\tdo {\n\t\t\t if (whichMatches.call(el, s)) return el;\n\t\t\t el = el.parentElement || el.parentNode;\n\t\t\t} while (el !== null && el.nodeType === 1);\n\t\t\treturn null;\n\t}\n\tappendCloseBtn(){\n\t\tvar btn = document.createElement( \"button\" );\n\t\tbtn.className = this.closeclass;\n\t\tbtn.innerHTML = this.closetext;\n\t\tthis.appendChild(btn);\n\t\treturn btn;\n\t}\n\n\tenhanceMarkup(){\n\t\tthis.setAttribute( \"role\", \"dialog\" );\n\t\tthis.id = this.id || (\"modal_\" + new Date().getTime());\n\t\tif( this.titleElem ){\n\t\t\tthis.titleElem.id = this.titleElem.id || (\"modal_title_\" + new Date().getTime());\n\t\t\tthis.setAttribute( \"aria-labelledby\", this.titleElem.id );\n\t\t}\n\t\tthis.classList.add(\"modal\");\n\t\tthis.setAttribute(\"tabindex\",\"-1\");\n\t\tthis.overlay = document.createElement(\"div\");\n\t\tthis.overlay.className = \"modal_screen\";\n\t\tthis.parentNode.insertBefore(this.overlay, this.nextSibling);\n\t\tthis.modalLinks = \"a.modal_link[href='#\" + this.id + \"']\";\n\t\tthis.changeAssocLinkRoles();\n\t}\n\n\taddInert(){\n\t\tvar self = this;\n\t\tfunction inertSiblings( node ){\n\t\t\tif( node.parentNode ){\n\t\t\t\tfor(var i in node.parentNode.childNodes ){\n\t\t\t\t\tvar elem = node.parentNode.childNodes[i];\n\t\t\t\t\tif( elem !== node && elem.nodeType === 1 && elem !== self.overlay ){\n\t\t\t\t\t\telem.inert = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif( node.parentNode !== document.body ){\n\t\t\t\t\tinertSiblings(node.parentNode);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t}\n\t\tinertSiblings(this);\n\t}\n\n\tremoveInert(){\n\t\tvar elems = document.querySelectorAll( \"[inert]\" );\n\t\tfor( var i = 0; i < elems.length; i++ ){\n\t\t\telems[i].inert = false;\n\t\t}\n\t}\n\n\topen( programmedOpen ){\n\t\tthis.dispatchEvent( this.beforeOpenEvent );\n\t\tthis.classList.add( \"modal-open\" );\n\t\tif( !programmedOpen ){\n\t\t\tthis.focusedElem = this.activeElem;\n\t\t}\n\t\tthis.closed = false;\n\t\tthis.focus();\n\t\tthis.addInert();\n\t\tthis.dispatchEvent( this.openEvent );\n\t}\n\n\t\n\n\tclose( programmedClose ){\n\t\tvar self = this;\n\t\tthis.dispatchEvent( this.beforeCloseEvent );\n\t\tthis.classList.remove( \"modal-open\" );\n\t\tthis.closed = true;\n\t\tself.removeInert();\n\t\tvar focusedElemModal = self.closest(this.focusedElem, \".modal\");\n\t\tif( focusedElemModal ){\n\t\t\tfocusedElemModal.open( true );\n\t\t}\n\t\tif( !programmedClose ){\n\t\t\tthis.focusedElem.focus();\n\t\t}\n\t\t\n\t\tthis.dispatchEvent( this.closeEvent );\n\t}\n\n\tchangeAssocLinkRoles(){\n\t\tvar elems = document.querySelectorAll(this.modalLinks);\n\t\tfor( var i = 0; i < elems.length; i++ ){\n\t\t\telems[i].setAttribute(\"role\", \"button\" );\n\t\t}\n\t}\n\n\n\tbindEvents(){\n\t\tvar self = this;\n\n\t\t// close btn click\n\t\tthis.closeBtn.addEventListener('click', event => self.close());\n\n\t\t// open dialog if click is on link to dialog\n\t\twindow.addEventListener('click', function( e ){\n\t\t\tvar assocLink = self.closest(e.target, self.modalLinks);\n\t\t\tif( assocLink ){\n\t\t\t\te.preventDefault();\n\t\t\t\tself.open();\n\t\t\t}\n\t\t});\n\n\t\twindow.addEventListener('keydown', function( e ){\n\t\t\tvar assocLink = self.closest(e.target, self.modalLinks);\n\t\t\tif( assocLink && e.keyCode === 32 ){\n\t\t\t\te.preventDefault();\n\t\t\t\tself.open();\n\t\t\t}\n\t\t});\n\n\t\twindow.addEventListener('focusin', function( e ){\n\t\t\tself.activeElem = e.target;\n\t\t});\n\n\t\t// click on the screen itself closes it\n\t\tthis.overlay.addEventListener('mouseup', function( e ){\n\t\t\tif( !self.closed ){\n\t\t\t\tself.close();\n\t\t\t}\n\t\t});\n\n\t\t// click on anything outside dialog closes it too (if screen is not shown maybe?)\n\t\twindow.addEventListener('mouseup', function( e ){\n\t\t\tif( !self.closed && !self.closest(e.target, \"#\" + self.id ) ){\n\t\t\t\te.preventDefault();\n\t\t\t\tself.close();\n\t\t\t}\n\t\t});\n\t\t\n\n\t\t// close on escape\n\t\twindow.addEventListener('keydown', function( e){\n\t\t\tif( e.keyCode === 27 && !self.closed ){\n\t\t\t\te.preventDefault();\n\t\t\t\tself.close();\n\t\t\t}\n\t\t\t\n\t\t});\n\n\t\t// close on other dialog open\n\t\twindow.addEventListener('beforeopen', function( e){\n\t\t\tif( !self.closed && e.target !== this ){\n\t\t\t\tself.close( true );\n\t\t\t}\n\t\t});\n\t}\n\n\tdisconnectedCallback(){\n\t\tthis._observer.disconnect();\n\t\t// remove screen when elem is removed\n\t\tthis.overlay.remove();\n\t}\n}\n\nif ('customElements' in window) {\n\tcustomElements.define('fg-modal', Modal );\n}"],"names":["Modal","HTMLElement","constructor","super","this","_init","bind","_observer","MutationObserver","connectedCallback","children","length","observe","childList","makeEvent","evtName","window","CustomEvent","bubbles","cancelable","evt","document","createEvent","initCustomEvent","closetext","closeclass","closed","initEvent","beforeOpenEvent","openEvent","closeEvent","beforeCloseEvent","activeElem","activeElement","closeBtn","querySelector","appendCloseBtn","titleElem","enhanceMarkup","bindEvents","dispatchEvent","closest","el","s","whichMatches","Element","prototype","matches","msMatchesSelector","call","parentElement","parentNode","nodeType","btn","createElement","className","innerHTML","appendChild","setAttribute","id","Date","getTime","classList","add","overlay","insertBefore","nextSibling","modalLinks","changeAssocLinkRoles","addInert","self","inertSiblings","node","i","childNodes","elem","inert","body","removeInert","elems","querySelectorAll","open","programmedOpen","focusedElem","focus","close","programmedClose","remove","focusedElemModal","addEventListener","event","e","target","preventDefault","keyCode","disconnectedCallback","disconnect","customElements","define"],"mappings":"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","x_google_ignoreList":[0]}