{"version":3,"names":[],"mappings":"","sources":["header-hero.js"],"sourcesContent":["// via Andy Bell\nfunction getFocusableElements(parent) {\n\tif (!parent) {\n\t\tconsole.warn(\"You need to pass a parent HTMLElement\");\n\t\treturn [];\n\t}\n\n\treturn parent.querySelectorAll(\n\t\t'button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"]):not([disabled]), details:not([disabled]), summary:not(:disabled)'\n\t);\n}\n\n// via https://gomakethings.com/how-to-get-the-closest-parent-element-with-a-matching-selector-using-vanilla-javascript/\nfunction getClosest(elem, selector) {\n\t// Element.matches() polyfill\n\tif (!Element.prototype.matches) {\n\t\tElement.prototype.matches =\n\t\t\tElement.prototype.matchesSelector ||\n\t\t\tElement.prototype.mozMatchesSelector ||\n\t\t\tElement.prototype.msMatchesSelector ||\n\t\t\tElement.prototype.oMatchesSelector ||\n\t\t\tElement.prototype.webkitMatchesSelector ||\n\t\t\tfunction (s) {\n\t\t\t\tvar matches = (this.document || this.ownerDocument).querySelectorAll(s),\n\t\t\t\t\ti = matches.length;\n\t\t\t\twhile (--i >= 0 && matches.item(i) !== this) {}\n\t\t\t\treturn i > -1;\n\t\t\t};\n\t}\n\n\t// Get the closest matching element\n\tfor (; elem && elem !== document; elem = elem.parentNode) {\n\t\tif (elem.matches(selector)) return elem;\n\t}\n\treturn null;\n}\n\n// via https://justmarkup.com/articles/2019-01-21-the-link-to-button-enhancement/\nfunction convertLinkToButton(link) {\n\tif (null !== link) {\n\t\tconst linkHTML = link.innerHTML;\n\t\tconst linkAtts = link.attributes;\n\t\tconst button = document.createElement(\"button\");\n\n\t\t// copy button attributes and content from link\n\t\tbutton.innerHTML = linkHTML.trim();\n\t\tfor (var i = 0, len = linkAtts.length; i < len; i++) {\n\t\t\tlet attr = linkAtts[i];\n\t\t\tif (\"href\" !== attr.name) {\n\t\t\t\tbutton.setAttribute(attr.name, attr.value);\n\t\t\t}\n\t\t}\n\t\tlink.replaceWith(button);\n\n\t\treturn button;\n\t}\n\n\treturn link;\n}\n\n// =========\n\nfunction setupYoutubeIframe() {\n\tvar tag = document.createElement(\"script\");\n\n\ttag.src = \"https://www.youtube.com/iframe_api\";\n\tvar firstScriptTag = document.getElementsByTagName(\"script\")[0];\n\tfirstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n}\nfunction onYouTubeIframeAPIReady() {\n\tvar video_url = document.getElementById(\"header-video-youtube-player\").getAttribute(\"data-video-url\");\n\tvar video_id = video_url.split(\"/\").slice(-1).toString();\n\n\tyoutube_player = new YT.Player(\"header-video-youtube-player\", {\n\t\theight: \"390\",\n\t\twidth: \"640\",\n\t\tvideoId: video_id,\n\t\tplayerVars: {\n\t\t\tenablejsapi: 1,\n\t\t\tiv_load_policy: 3,\n\t\t\tmodestbranding: 1,\n\t\t\tplaysinline: 1,\n\t\t\trel: 0,\n\t\t},\n\t\tevents: {\n\t\t\tonStateChange: onYouTubeIframeStateChange,\n\t\t},\n\t});\n\n\tdocument.getElementById(\"header-video-youtube-player\").setAttribute(\"aria-label\", \"YouTube Embed Player\");\n}\nfunction onYouTubeIframeStateChange(event) {\n\tif (event.data === 0) {\n\t\tcloseModal();\n\t}\n}\n\nfunction setupVimeoIframe() {\n\tvar tag = document.createElement(\"script\");\n\ttag.onload = function () {\n\t\tvar iframe = document.getElementById(\"header-video-vimeo-player\");\n\t\tiframe.setAttribute(\"aria-label\", \"Vimeo Embed Player\");\n\n\t\tvimeo_player = new Vimeo.Player(iframe);\n\t\tvimeo_player.on(\"ended\", function (event) {\n\t\t\tcloseModal();\n\t\t});\n\t};\n\n\ttag.src = \"https://player.vimeo.com/api/player.js\";\n\tvar firstScriptTag = document.getElementsByTagName(\"script\")[0];\n\tfirstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n}\n\nfunction setupHtml5VideoTag() {\n\thtml5_player = document.getElementById(\"header-video-html5-player\");\n\n\thtml5_player.addEventListener(\"ended\", function (event) {\n\t\tcloseModal();\n\t});\n}\n\nfunction playEmbeddedVideo() {\n\tswitch (player_mode) {\n\t\tcase \"youtube\":\n\t\t\tyoutube_player.playVideo();\n\t\t\tbreak;\n\t\tcase \"vimeo\":\n\t\t\tvimeo_player.play();\n\t\t\tbreak;\n\t\tcase \"html5\":\n\t\t\thtml5_player.play();\n\t\t\tbreak;\n\t}\n}\nfunction pauseEmbeddedVideo() {\n\tswitch (player_mode) {\n\t\tcase \"youtube\":\n\t\t\tyoutube_player.stopVideo();\n\t\t\tbreak;\n\t\tcase \"vimeo\":\n\t\t\tvimeo_player.pause();\n\t\t\tbreak;\n\t\tcase \"html5\":\n\t\t\thtml5_player.pause();\n\t\t\tbreak;\n\t}\n}\n\nfunction closeModal() {\n\tvar close_button = document.getElementById(\"header-video-close-button\");\n\tclose_button.click();\n}\n\nfunction toggleVideoClick(event) {\n\tvar target = getClosest(event.target, \"a, button, #header-hero-video-embed\");\n\tif (!target || !target.id) {\n\t\treturn false;\n\t}\n\n\tvar open_button = document.getElementById(\"header-video-open-button\");\n\tvar close_button = document.getElementById(\"header-video-close-button\");\n\tvar embed_container = document.getElementById(\"header-hero-video-embed\");\n\n\t// show video\n\tif (target.id === open_button.id) {\n\t\tevent.preventDefault();\n\n\t\topen_button.setAttribute(\"aria-hidden\", true);\n\t\tvideo_container.setAttribute(\"aria-hidden\", false);\n\t\tvideo_container.removeAttribute(\"inert\");\n\t\tvideo_container.removeAttribute(\"hidden\");\n\n\t\tsite_header.classList.add(\"video-is-open\");\n\t\tbackground_video.pause();\n\n\t\tplayEmbeddedVideo();\n\t}\n\n\t// hide video\n\tif (target.id === close_button.id) {\n\t\tevent.preventDefault();\n\n\t\topen_button.setAttribute(\"aria-hidden\", false);\n\t\tvideo_container.setAttribute(\"aria-hidden\", true);\n\t\tvideo_container.setAttribute(\"inert\", \"inert\");\n\t\tvideo_container.setAttribute(\"hidden\", \"hidden\");\n\n\t\tsite_header.classList.remove(\"video-is-open\");\n\t\tif (!window.matchMedia(\"(prefers-reduced-motion)\").matches) {\n\t\t\tbackground_video.play();\n\t\t}\n\n\t\tpauseEmbeddedVideo();\n\t}\n\n\tif (target.id === embed_container.id) {\n\t\tpauseEmbeddedVideo();\n\t\tcloseModal();\n\t}\n}\nfunction toggleVideoKeyboard(event) {\n\tlet close_button = document.getElementById(\"header-video-close-button\");\n\n\tif (27 === event.keyCode) {\n\t\tif (video_container.getAttribute(\"aria-hidden\") === \"false\") {\n\t\t\tclose_button.click();\n\t\t}\n\t}\n}\n\nvar player_mode = document.querySelector(\".header-hero-video-embed [data-video-mode]\").getAttribute(\"data-video-mode\");\nvar youtube_player;\nvar vimeo_player;\nvar html5_player;\n\nconst site_header = document.getElementById(\"site-header\");\n\nconst video_container = document.getElementById(\"header-hero-video-embed\");\nconst video_link = document.getElementById(\"header-video-open-button\");\n\nconst background_container = document.getElementById(\"header-background\");\nconst background_video = background_container.querySelector(\"video\");\n\nconvertLinkToButton(video_link);\n\nswitch (player_mode) {\n\tcase \"youtube\":\n\t\tsetupYoutubeIframe();\n\t\tbreak;\n\tcase \"vimeo\":\n\t\tsetupVimeoIframe();\n\t\tbreak;\n\tcase \"html5\":\n\t\tsetupHtml5VideoTag();\n\t\tbreak;\n}\n\ndocument.addEventListener(\"click\", toggleVideoClick, false);\ndocument.addEventListener(\"keyup\", toggleVideoKeyboard, false);\n\n// Only enable for browsers that support prefers-reduced-motion but do not have it enabled\nif (window.matchMedia(\"(prefers-reduced-motion: no-preference)\").matches) {\n\tbackground_video.play();\n}\n"],"file":"header-hero.js"}