{"version":3,"file":"tq-header.min.js","names":["Tq","Header","render","removeElement","element","parentNode","removeChild","SwapLegacyId","oldId","newId","document","getElementById","setAttribute","innerHTML","htmlContent","init","window","addEventListener","Element","prototype","matches","mozMatchesSelector","msMatchesSelector","oMatchesSelector","offcanvas","activeClass","closeSelector","openSelector","overlay","querySelector","preventClickOutside","readyClass","selector","doc","docEl","documentElement","_q","el","ctx","slice","call","querySelectorAll","classList","panels","btns","currButtonOpen","currPanel","_defer","fn","setTimeout","_getPanelId","panel","getAttribute","_closeExpanded","btn","_hidePanel","returnfocus","removeAttribute","blur","style","visibility","forEach","_unbindClosePointer","_unbindDocKey","_unbindDocClick","_bindOpenPointer","remove","focus","overflow","_eventOpenPointer","e","panelId","currentTarget","_openExpanded","_unbindOpenPointer","_bindDocKey","_bindDocClick","_bindClosePointer","scrollTop","add","_showPanel","_eventClosePointer","_eventDocClick","isPanel","target","isPanelChild","select","parentElement","_closest","_eventDocKey","keyCode","button","closeButtons","length","closeButton","removeEventListener","_addA11y","destroy","_removeA11y","_removeExpanded","divOverlay","createElement","targetEl","insertBefore","myOffcanvas","widthChange","mq","matchMedia","tqApp","name","content","head","appendChild","undefined"],"sources":["tq-header.js"],"mappings":"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","sourcesContent":["var Tq = Tq || {};\r\nTq.Header = Tq.Header || {};\r\n\r\nTq.Header.render = function() {\r\n function removeElement (element) {\r\n element && element.parentNode && element.parentNode.removeChild(element);\r\n }\r\n function SwapLegacyId(oldId, newId) {\r\n if (document.getElementById(oldId)) {\r\n document.getElementById(oldId).setAttribute(\"id\", newId);\r\n }\r\n }\r\n SwapLegacyId('tq-header-content', 'tq-header-container');\r\n SwapLegacyId('tqBar', 'tq-header-container');\r\n\r\n var htmlContent = \"\";\r\n htmlContent += '
Logo Télé-Québec
';\r\n if (document.getElementById(\"tq-header-container\")) {\r\n document.getElementById(\"tq-header-container\").innerHTML = htmlContent;\r\n }\r\n\r\n removeElement(document.getElementById(\"tqBarM\"));\r\n removeElement(document.getElementById(\"mobile-header\"));\r\n\r\n Tq.Header.init();\r\n};\r\n\r\nwindow.addEventListener(\"DOMContentLoaded\", Tq.Header.render);\r\n\n\"use strict\";\r\n\r\nvar Tq = Tq || {};\r\nTq.Header = Tq.Header || {};\r\n\r\n// Polyfill matches as per https://github.com/jonathantneal/closest\r\nElement.prototype.matches =\r\n Element.prototype.matches ||\r\n Element.prototype.mozMatchesSelector ||\r\n Element.prototype.msMatchesSelector ||\r\n Element.prototype.oMatchesSelector;\r\n\r\n// --- OFFCANVAS MENU https://github.com/frend/frend.co/tree/gh-pages/_components/offcanvas ---\r\n/**\r\n * @param {object} options Object containing configuration overrides\r\n */\r\nTq.Header.offcanvas = function ({\r\n activeClass: activeClass = \"fr-offcanvas--is-active\",\r\n closeSelector: closeSelector = \".js-fr-offcanvas-close\",\r\n openSelector: openSelector = \".js-fr-offcanvas-open\",\r\n overlay: overlay = document.querySelector(\"#tq-overlay\"),\r\n preventClickOutside: preventClickOutside = false,\r\n readyClass: readyClass = \"fr-offcanvas--is-ready\",\r\n selector: selector = \".js-fr-offcanvas\",\r\n} = {}) {\r\n // CONSTANTS\r\n const doc = document;\r\n const docEl = doc.documentElement;\r\n const _q = (el, ctx = doc) => {\r\n return [].slice.call(ctx.querySelectorAll(el));\r\n };\r\n\r\n // SUPPORTS\r\n if (\r\n !(\"querySelector\" in doc) ||\r\n !(\"addEventListener\" in window) ||\r\n !docEl.classList\r\n ){\r\n return;\r\n }\r\n\r\n // SETUP\r\n // set offcanvas element NodeLists\r\n const panels = _q(selector);\r\n const btns = _q(\".tq-button\");\r\n\r\n // TEMP\r\n let currButtonOpen = null;\r\n let currPanel = null;\r\n\r\n // UTILS\r\n function _defer(fn) {\r\n // wrapped in setTimeout to delay binding until previous rendering has completed\r\n if (typeof fn === \"function\") {\r\n setTimeout(fn, 0);\r\n }\r\n }\r\n\r\n function _closest(el, select) {\r\n while (el) {\r\n if (el.matches(select)) {\r\n break;\r\n }\r\n el = el.parentElement;\r\n }\r\n return el;\r\n }\r\n\r\n function _getPanelId(panel) {\r\n return panel.getAttribute(\"id\");\r\n }\r\n\r\n // A11Y\r\n function _addA11y(panel) {\r\n panel.setAttribute(\"aria-hidden\", true);\r\n }\r\n\r\n function _removeA11y(panel) {\r\n panel.removeAttribute(\"aria-hidden\");\r\n }\r\n\r\n function _openExpanded(btn) {\r\n btn.setAttribute(\"aria-expanded\", true);\r\n }\r\n\r\n function _closeExpanded(btn) {\r\n btn.setAttribute(\"aria-expanded\", false);\r\n }\r\n\r\n function _removeExpanded(btn) {\r\n btn.removeAttribute(\"aria-expanded\");\r\n }\r\n\r\n // ACTIONS\r\n function _showPanel(panel) {\r\n // set visibility to override any previous set style\r\n panel.style.visibility = \"visible\";\r\n\r\n // remove aria-hidden, add focus\r\n panel.setAttribute(\"aria-hidden\", false);\r\n panel.setAttribute(\"tabindex\", -1);\r\n panel.focus();\r\n btns.forEach((btn) => {\r\n _openExpanded(btn);\r\n });\r\n\r\n // sort out events\r\n _defer(_unbindOpenPointer);\r\n _defer(_bindDocKey);\r\n\r\n if (!preventClickOutside) {\r\n _defer(_bindDocClick);\r\n }\r\n\r\n _defer(_bindClosePointer);\r\n\r\n // reset scroll position\r\n panel.scrollTop = 0;\r\n\r\n // add active class\r\n panel.classList.add(activeClass);\r\n\r\n // Remove scroll on body\r\n document.querySelector(\"html, body\").style.overflow = \"hidden\";\r\n\r\n // Show overlay\r\n overlay.classList.add(\"overlayActive\");\r\n }\r\n\r\n function _hidePanel(panel = currPanel, returnfocus = true) {\r\n // add aria-hidden, remove focus\r\n panel.setAttribute(\"aria-hidden\", true);\r\n panel.removeAttribute(\"tabindex\");\r\n panel.blur();\r\n\r\n // set visibility to override any previous set style\r\n panel.style.visibility = \"hidden\";\r\n btns.forEach((btn) => {\r\n _closeExpanded(btn);\r\n });\r\n\r\n // sort out events\r\n _unbindClosePointer(panel);\r\n _unbindDocKey();\r\n\r\n if (!preventClickOutside) {\r\n _unbindDocClick();\r\n }\r\n\r\n _bindOpenPointer(panel);\r\n\r\n // remove active class\r\n panel.classList.remove(activeClass);\r\n\r\n // return focus to button that opened the panel and reset the reference\r\n if (returnfocus) {\r\n currButtonOpen.focus();\r\n currButtonOpen = null;\r\n }\r\n\r\n // Reset scroll on body\r\n document.querySelector(\"html, body\").style.overflow = \"visible\";\r\n // Remove overlay\r\n overlay.classList.remove(\"overlayActive\");\r\n }\r\n\r\n function destroy() {\r\n panels.forEach((panel) => {\r\n // remove attributes\r\n _removeA11y(panel);\r\n // unbind local events\r\n _unbindOpenPointer(panel);\r\n _unbindClosePointer(panel);\r\n // remove class\r\n panel.classList.remove(readyClass);\r\n panel.classList.remove(activeClass);\r\n panel.style.visibility = \"\";\r\n });\r\n\r\n btns.forEach((btn) => {\r\n _removeExpanded(btn);\r\n });\r\n\r\n // unbind global events\r\n _unbindDocClick();\r\n _unbindDocKey();\r\n\r\n // reset temp references\r\n currButtonOpen = null;\r\n currPanel = null;\r\n overlay.classList.remove(\"overlayActive\");\r\n }\r\n\r\n // EVENTS\r\n function _eventOpenPointer(e) {\r\n // get panel\r\n const panelId = e.currentTarget.getAttribute(\"aria-controls\");\r\n const panel = doc.getElementById(panelId);\r\n\r\n // hide any open panels\r\n if (currPanel) {\r\n _hidePanel(currPanel, false);\r\n }\r\n\r\n // save temp panel/button\r\n currButtonOpen = e.currentTarget;\r\n currPanel = panel;\r\n\r\n // show\r\n _showPanel(panel);\r\n }\r\n\r\n function _eventClosePointer() {\r\n _hidePanel();\r\n }\r\n\r\n function _eventDocClick(e) {\r\n // check if target is panel or child of\r\n const isPanel = e.target === currPanel;\r\n const isPanelChild = _closest(e.target, selector);\r\n\r\n if (!isPanel && !isPanelChild) {\r\n _hidePanel();\r\n }\r\n }\r\n\r\n function _eventDocKey(e) {\r\n // esc key\r\n if (e.keyCode === 27) {\r\n _hidePanel();\r\n }\r\n }\r\n\r\n // BIND EVENTS\r\n function _bindOpenPointer(panel) {\r\n const openButtons = _q(\r\n `${openSelector}[aria-controls=\"${_getPanelId(panel)}\"]`\r\n ); // is this selector totally crazy?\r\n\r\n openButtons.forEach((button) =>\r\n button.addEventListener(\"click\", _eventOpenPointer)\r\n );\r\n }\r\n\r\n function _bindClosePointer(panel = currPanel) {\r\n const closeButtons = _q(closeSelector, panel);\r\n if (closeButtons.length === 0) {\r\n return;\r\n }\r\n\r\n const closeButton = closeButtons[0];\r\n if (closeButton) {\r\n closeButton.addEventListener(\"click\", _eventClosePointer);\r\n }\r\n }\r\n\r\n function _bindDocClick() {\r\n doc.addEventListener(\"click\", _eventDocClick);\r\n }\r\n\r\n function _bindDocKey() {\r\n doc.addEventListener(\"keydown\", _eventDocKey);\r\n }\r\n\r\n // UNBIND EVENTS\r\n function _unbindOpenPointer(panel = currPanel) {\r\n const openButtons = _q(\r\n `${openSelector}[aria-controls=\"${_getPanelId(panel)}\"]`\r\n ); // yep its totally crazy\r\n\r\n openButtons.forEach((button) =>\r\n button.removeEventListener(\"click\", _eventOpenPointer)\r\n );\r\n }\r\n\r\n function _unbindClosePointer(panel = currPanel) {\r\n const closeButton = _q(closeSelector, panel)[0];\r\n closeButton.removeEventListener(\"click\", _eventClosePointer);\r\n }\r\n\r\n function _unbindDocClick() {\r\n doc.removeEventListener(\"click\", _eventDocClick);\r\n }\r\n\r\n function _unbindDocKey() {\r\n doc.removeEventListener(\"keydown\", _eventDocKey);\r\n }\r\n\r\n // INIT\r\n function init() {\r\n if (!panels) {\r\n return;\r\n }\r\n\r\n // loop through each offcanvas element\r\n panels.forEach((panel) => {\r\n _addA11y(panel);\r\n _bindOpenPointer(panel);\r\n panel.classList.add(readyClass);\r\n });\r\n\r\n btns.forEach((btn) => {\r\n _closeExpanded(btn);\r\n });\r\n }\r\n init();\r\n\r\n // REVEAL API\r\n return {\r\n destroy,\r\n init,\r\n };\r\n};\r\n\r\n// --- HEADER INIT ---\r\nTq.Header.init = function () {\r\n // Create overlay\r\n const divOverlay = document.createElement(\"div\");\r\n divOverlay.setAttribute(\"id\", \"tq-overlay\");\r\n\r\n // grab target element reference\r\n const targetEl = document.querySelector(\"#top-bar-mobile\");\r\n\r\n if (targetEl === null) {\r\n return;\r\n }\r\n\r\n // insert the element after target element\r\n targetEl.parentNode.insertBefore(divOverlay, targetEl);\r\n\r\n // media query event handler\r\n const myOffcanvas = Tq.Header.offcanvas();\r\n\r\n function widthChange(e) {\r\n if (e.matches) {\r\n // window width is at least 1152px\r\n myOffcanvas.destroy();\r\n } else {\r\n // window width is less than 1152px\r\n myOffcanvas.init();\r\n }\r\n }\r\n\r\n const mq = window.matchMedia(\"(min-width: 1152px)\");\r\n mq.addEventListener(\"change\", widthChange);\r\n widthChange(mq);\r\n\r\n // Telequebec App\r\n const tqApp = document.createElement('meta');\r\n tqApp.name = 'apple-itunes-app';\r\n tqApp.content = \"app-id=690228492\";\r\n document.head.appendChild(tqApp)\r\n\r\n};\r\n\r\n/// Call init seulement si on n'est pas en mode injection via javascript\r\n/// En mode injection via javascript, on attend que Tq.Header.render ce fasse et s'occupe de call Tq.Header.init\r\nif (Tq.Header.render === undefined) {\r\n Tq.Header.init();\r\n}\r\n"]}