{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./static/js/utils/constants.js","webpack:///./static/js/components/menu.js","webpack:///./static/js/components/share-modal.js","webpack:///./static/js/components/links.js","webpack:///./static/js/components/video-modal.js","webpack:///./static/js/components/in-page-scroll.js","webpack:///./static/js/components/in-page-nav.js","webpack:///./static/js/components/svg-inject.js","webpack:///./static/js/components/table-of-contents.js","webpack:///./static/js/components/accordion.js","webpack:///./static/js/components/scroll-up-nav-mobile.js","webpack:///./static/js/app.js","webpack:///./static/js/utils/on.js","webpack:///./static/js/utils/onDocumentReady.js","webpack:///./static/js/utils/StateMachine.js","webpack:///./static/js/utils/index.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","2","exports","module","l","e","promises","installedChunkData","promise","Promise","resolve","reject","onScriptComplete","script","document","createElement","charset","timeout","nc","setAttribute","src","p","jsonpScriptSrc","error","Error","event","onerror","onload","clearTimeout","chunk","errorType","type","realSrc","target","message","name","request","undefined","setTimeout","head","appendChild","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","err","console","jsonpArray","window","oldJsonpFunction","slice","KEY_CODES","ARROW_LEFT","ARROW_RIGHT","ESCAPE","TAB","SPACE","ENTER","Menu","classname","this","body","querySelector","logo","menu","menuToggle","closeButton","menuIsOpen","focusTrap","listeners","bindEvents","addEventListener","toggle","close","resize","removeAttribute","classList","add","activeClass","focus","on","keydown","disableBodyScroll","activate","remove","forEach","off","enableBodyScroll","deactivate","open","keyCode","innerWidth","replace","plainClassname","ShareModal","shareModal","shareModalToggle","querySelectorAll","shareModalIsOpen","triggerElement","focusableEls","Array","from","firstFocusableEl","lastFocusableEl","activeElement","preventDefault","shiftKey","handleBackwardTab","handleForwardTab","Links","initLinks","allLinks","link","host","location","gsap","defaults","duration","ease","SHOW","autoAlpha","pointerEvents","HIDE","VideoModal","element","playButton","modal","embed","iframe","tabIndex","iframeSrc","set","closeAnim","openAnim","tl","timeline","to","zIndex","clearProps","registerPlugin","ScrollToPlugin","InPageScroll","nav","scrolledDown","links","handleClick","keyup","linkHash","hash","scrollTo","y","offsetY","ScrollTrigger","InPageNav","selects","isMobile","init","checkExists","setInterval","children","trackScroll","backToTop","clearInterval","history","replaceState","href","split","parentElement","substr","section","getElementById","enter","id","pushState","scrollTrigger","trigger","start","end","onEnter","onEnterBack","onLeave","onLeaveBack","documentElement","top","behavior","matchMedia","opacity","yPercent","toggleActions","leave","delay","SVGInject","images","image","SVG_Inject","TableOfContents","articleInner","articleBody","headingArray","findHeadings","articleNavList","updateHeadingID","updateNavItem","getElementsByTagName","heading","sanitizedText","innerText","numHeadings","currentItem","newNavItem","navItemLink","innerHTML","navItemHref","Accordion","accordions","accordion","el","getAttribute","scrollUpNavMobile","handleScroll","lastScrollTop","scrollTop","currentScrollTop","scrollY","innerHeight","offsetHeight","pathname","includes","onDocumentReady","InjectSVG","program","then","ModalGallery","default","ToggleClass","HangPunctuation","Tables","SearchPage","SetActive","getElementsByClassName","map","GoogleMapsEmbed","jQuery","elementOrMultiple","listener","options","elements","isArray","removeEventListener","callback","readyState","once","StateMachine","initialState","stateMap","_state","_map","entries","reduce","acc","state","nextStates","Set","states","has","newState","validStates"],"mappings":"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","file":"app.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t2: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"\" + ({\"4\":\"hang-punctuation\",\"5\":\"modal-gallery\",\"6\":\"search-page\",\"7\":\"set-active\"}[chunkId]||chunkId) + \".js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/wp-content/themes/harvard-dce/dist/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([192,0]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","export const KEY_CODES = {\n ARROW_LEFT: 37,\n ARROW_RIGHT: 39,\n ESCAPE: 27,\n TAB: 9,\n SPACE: 32,\n ENTER: 13,\n};\n","import { disableBodyScroll, enableBodyScroll } from 'body-scroll-lock';\nimport focusTrap from 'focus-trap';\nimport { on } from '@src/utils';\nimport { KEY_CODES } from '@src/utils/constants';\n\nclass Menu {\n constructor(classname) {\n this.classname = classname;\n\n this.body = document.querySelector('body');\n this.logo = document.querySelector('.nav__logo-link');\n this.menu = document.querySelector(`${this.classname}`);\n this.menuToggle = document.querySelector(`${this.classname}-toggle`);\n this.closeButton = this.menu.querySelector(`${this.classname}-toggle`);\n this.menuIsOpen = false;\n this.focusTrap = focusTrap(this.menu);\n\n this.listeners = [];\n\n this.bindEvents();\n }\n\n /**\n * Returns the classname without the starting `.`\n *\n * @example\n * this.classname = '.js--menu';\n * // this.plainClassname === 'js--menu'\n */\n get plainClassname() {\n return this.classname.replace(/^\\.*/g, '');\n }\n\n get activeClass() {\n return `${this.plainClassname}-active`;\n }\n\n bindEvents() {\n this.menuToggle.addEventListener('click', () => this.toggle());\n this.closeButton.addEventListener('click', () => this.close());\n window.addEventListener('resize', () => this.resize());\n }\n\n open() {\n this.menu.removeAttribute('aria-hidden');\n this.body.classList.add(this.activeClass);\n this.menuIsOpen = true;\n this.closeButton.focus();\n this.listeners.push(on(document, 'keydown', this.keydown.bind(this)));\n disableBodyScroll(this.menu);\n this.focusTrap.activate();\n }\n\n close() {\n this.menu.setAttribute('aria-hidden', true);\n this.body.classList.remove(this.activeClass);\n this.menuToggle.focus();\n this.menuIsOpen = false;\n this.listeners.forEach(off => {\n off();\n });\n enableBodyScroll(this.menu);\n this.focusTrap.deactivate();\n }\n\n toggle() {\n if (this.menuIsOpen) {\n this.close();\n } else {\n this.open();\n }\n }\n\n keydown(e) {\n if (e.keyCode === KEY_CODES.ESCAPE) {\n this.close();\n }\n }\n\n resize() {\n if (window.innerWidth >= 767 && this.menuIsOpen) {\n this.close();\n }\n }\n}\n\nexport default Menu;\n","import { disableBodyScroll, enableBodyScroll } from 'body-scroll-lock';\nimport { on } from '@src/utils';\nimport { KEY_CODES } from '@src/utils/constants';\n\nclass ShareModal {\n constructor(classname) {\n this.classname = classname;\n\n this.body = document.querySelector('body');\n this.shareModal = document.querySelector(`${this.classname}`);\n this.shareModalToggle = document.querySelectorAll(`${this.classname}-toggle`);\n this.shareModalIsOpen = false;\n this.triggerElement;\n // Set focusable elements\n this.focusableEls = [\n ...Array.from(this.shareModal.querySelectorAll('a')),\n ...Array.from(this.shareModal.querySelectorAll('button')),\n ];\n\n this.firstFocusableEl = this.focusableEls[0];\n this.lastFocusableEl = this.focusableEls[this.focusableEls.length - 1];\n this.listeners = [];\n\n this.bindEvents();\n }\n\n /**\n * Returns the classname without the starting `.`\n *\n * @example\n * this.classname = '.js--menu';\n * // this.plainClassname === 'js--menu'\n */\n get plainClassname() {\n return this.classname.replace(/^\\.*/g, '');\n }\n\n get activeClass() {\n return `${this.plainClassname}-active`;\n }\n\n bindEvents() {\n this.shareModalToggle.forEach(toggle => toggle.addEventListener('click', e => this.toggle(e)));\n }\n\n open(e) {\n this.triggerElement = e.target;\n this.shareModal.removeAttribute('aria-hidden');\n this.body.classList.add(this.activeClass);\n this.shareModalIsOpen = true;\n this.shareModal.focus();\n this.listeners.push(on(document, 'keydown', this.keydown.bind(this)));\n disableBodyScroll(this.shareModal);\n }\n\n close() {\n this.shareModal.setAttribute('aria-hidden', true);\n this.body.classList.remove(this.activeClass);\n this.triggerElement.focus();\n this.shareModalIsOpen = false;\n this.listeners.forEach(off => {\n off();\n });\n enableBodyScroll(this.shareModal);\n }\n\n toggle(e) {\n if (this.shareModalIsOpen) {\n this.close();\n } else {\n this.open(e);\n }\n }\n\n handleBackwardTab(e) {\n if (\n document.activeElement === this.firstFocusableEl ||\n document.activeElement === this.shareModal\n ) {\n e.preventDefault();\n this.lastFocusableEl.focus();\n }\n }\n\n handleForwardTab(e) {\n if (document.activeElement === this.lastFocusableEl) {\n e.preventDefault();\n this.firstFocusableEl.focus();\n }\n }\n\n keydown(e) {\n switch (e.keyCode) {\n case KEY_CODES.ESCAPE: {\n this.close();\n break;\n }\n\n case KEY_CODES.TAB: {\n if (this.focusableEls.length === 1) {\n e.preventDefault();\n break;\n }\n if (e.shiftKey) {\n this.handleBackwardTab(e);\n } else {\n this.handleForwardTab(e);\n }\n break;\n }\n\n default: {\n break;\n }\n }\n }\n}\n\nexport default ShareModal;\n","class Links {\n constructor() {\n this.initLinks();\n }\n\n initLinks() {\n // Sets target=\"_blank\" rel=\"noopener noreferrer\" on external links\n const allLinks = Array.from(document.querySelectorAll('a'));\n\n if (allLinks.length > 0) {\n allLinks.forEach(link => {\n if (link.host !== window.location.host) {\n link.setAttribute('rel', 'noopener noreferrer');\n link.setAttribute('target', '_blank');\n }\n });\n }\n }\n}\n\nexport default Links;\n","import gsap from 'gsap';\nimport focusTrap from 'focus-trap';\nimport { disableBodyScroll, enableBodyScroll } from 'body-scroll-lock';\n\nimport { on } from '@src/utils';\nimport { KEY_CODES } from '@src/utils/constants';\n\ngsap.defaults({\n duration: 0.3,\n ease: 'power3.inOut',\n});\n\nconst SHOW = { autoAlpha: 1, pointerEvents: 'initial' };\nconst HIDE = { autoAlpha: 0, pointerEvents: 'none' };\n\nclass VideoModal {\n constructor(element) {\n this.playButton = element.querySelector('.js-play-button');\n if (this.playButton) {\n this.modal = element.querySelector('.js-video-modal');\n\n this.embed = this.modal.querySelector('.js-video-embed');\n\n this.iframe = this.modal.querySelector('iframe');\n this.iframe.tabIndex = 0;\n this.iframeSrc = this.iframe.src;\n\n this.closeButton = this.modal.querySelector('.js-close-button');\n this.focusTrap = focusTrap(this.modal);\n\n this.listeners = [];\n\n this.bindEvents();\n gsap.set([this.modal, this.embed], HIDE);\n }\n }\n\n bindEvents() {\n this.playButton.addEventListener('click', () => this.open());\n this.closeButton.addEventListener('click', () => this.close());\n }\n\n close() {\n enableBodyScroll(this.modal);\n this.closeAnim(this.modal, this.embed);\n this.listeners.forEach(off => {\n off();\n });\n this.iframe.src = '';\n this.focusTrap.deactivate();\n }\n\n open() {\n disableBodyScroll(this.modal);\n this.closeButton.focus();\n this.listeners.push(on(document, 'keydown', this.keydown.bind(this)));\n this.iframe.src = this.iframeSrc;\n this.iframe.src += '&autoplay=1';\n this.openAnim(this.modal, this.embed);\n }\n\n openAnim(modal, embed) {\n this.tl = gsap.timeline();\n this.tl\n .to(modal, SHOW)\n .set(['.nav', '.program-content__nav.js-page-nav-bar', '.footer'], { zIndex: 0 }, '<')\n .to(embed, SHOW)\n .call(() => this.focusTrap.activate());\n }\n\n closeAnim(modal, embed) {\n this.tl = gsap.timeline();\n this.tl\n .to(embed, HIDE)\n .to(modal, HIDE, '<')\n .set(['.nav', '.program-content__nav.js-page-nav-bar', '.footer'], { clearProps: 'all' });\n }\n\n keydown(e) {\n if (e.keyCode === KEY_CODES.ESCAPE) {\n this.close();\n }\n }\n}\n\nexport default VideoModal;\n","import { gsap } from 'gsap';\nimport { ScrollToPlugin } from 'gsap/ScrollToPlugin';\nimport { KEY_CODES } from '@src/utils/constants';\n\ngsap.registerPlugin(ScrollToPlugin);\ngsap.defaults({\n duration: 0.4,\n ease: 'power2.inOut',\n});\n\nclass InPageScroll {\n constructor() {\n this.nav = document.querySelector('.js-page-nav-ul');\n this.scrolledDown = false;\n\n if (this.nav) {\n this.links = Array.from(this.nav.querySelectorAll('a'));\n this.bindEvents();\n }\n }\n\n bindEvents() {\n this.links.forEach(link => {\n link.addEventListener('click', this.handleClick.bind(this));\n document.addEventListener('keyup', this.keyup.bind(this));\n });\n }\n\n handleClick(e) {\n e.preventDefault();\n const linkHash = e.target.hash;\n const tl = gsap.timeline();\n\n if (window.innerWidth >= 768) {\n tl.to(window, { scrollTo: { y: linkHash, offsetY: 65 } });\n } else {\n tl.to(window, { scrollTo: { y: linkHash, offsetY: 10 } });\n }\n }\n\n keyup(e) {\n if (e.keyCode === KEY_CODES.TAB) {\n this.links.forEach(link => {\n if (document.activeElement === link) {\n const linkHash = link.hash;\n\n gsap.to(window, { scrollTo: linkHash });\n }\n });\n }\n }\n}\n\nexport default InPageScroll;\n","import { gsap } from 'gsap';\nimport { ScrollTrigger } from 'gsap/ScrollTrigger';\nimport { ScrollToPlugin } from 'gsap/ScrollToPlugin';\n\ngsap.registerPlugin(ScrollToPlugin);\ngsap.registerPlugin(ScrollTrigger);\ngsap.defaults({\n duration: 0.4,\n ease: 'power2.inOut',\n});\n\nclass InPageNav {\n constructor() {\n this.nav = document.querySelector('.js-page-nav');\n this.selects = document.querySelectorAll('.js-set-active');\n this.isMobile = true;\n\n if (this.nav) {\n this.init();\n this.bindEvents();\n }\n }\n\n init() {\n const checkExists = setInterval(() => {\n if (this.nav.children.length) {\n this.trackScroll();\n if ((this.nav = document.querySelector('.program-content__nav.js-page-nav'))) {\n this.backToTop();\n }\n clearInterval(checkExists);\n }\n }, 100);\n }\n\n bindEvents() {\n this.links = Array.from(this.nav.querySelectorAll('a'));\n this.links.forEach(link => {\n link.addEventListener('click', this.handleClick.bind(this));\n });\n window.addEventListener('popstate', () => {\n history.replaceState({}, '', `${window.location.href.split('#')[0]}`);\n });\n }\n\n handleClick(e) {\n const navItem = e.target.parentElement;\n navItem.classList.add('nav-item--active');\n }\n\n trackScroll() {\n const links = Array.from(this.nav.querySelectorAll('a'));\n links.forEach(link => {\n const hash = link.hash.substr(1);\n const section = document.getElementById(hash);\n\n const enter = () => {\n if (section) {\n if (hash === section.id) {\n link.parentElement.classList.add('nav-item--active');\n\n if (window.history.pushState) {\n window.history.pushState(null, null, `#${hash}`);\n } else {\n window.location.hash = `#${hash}`;\n }\n }\n }\n };\n\n const leave = () => {\n if ((this.nav = document.querySelector('.program-content__nav .js-page-nav'))) {\n this.backToTop();\n }\n };\n\n const leaveBack = () => {\n if (hash === section.id) {\n link.parentElement.classList.remove('nav-item--active');\n }\n };\n\n gsap.set(section, {\n scrollTrigger: {\n trigger: section,\n start: 'top 100px',\n end: '75% 0px',\n onEnter: enter,\n onEnterBack: enter,\n onLeave: leave,\n onLeaveBack: leaveBack,\n },\n });\n });\n }\n\n backToTop() {\n const backToTopButton = document.getElementById('js-nav-back-to-top-cta');\n\n backToTopButton.addEventListener('click', () =>\n document.documentElement.scrollTo({\n top: 0,\n behavior: 'smooth',\n }),\n );\n }\n\n handleNavBar() {\n ScrollTrigger.matchMedia({\n // Desktop\n '(min-width: 1200px)': () => {\n gsap.set('.js-page-nav', { opacity: 0, pointerEvents: 'none', yPercent: 0 });\n\n gsap.to('.js-page-nav', {\n scrollTrigger: {\n trigger: '.main#content',\n toggleActions: 'play reverse play reverse',\n start: 'top 75px',\n end: 'bottom 85%',\n },\n yPercent: 0,\n });\n\n const enter = () => gsap.set('.js-page-nav', { opacity: 1, pointerEvents: 'initial' });\n const leave = () =>\n gsap.set('.js-page-nav', { opacity: 0, pointerEvents: 'none', delay: 0.4 });\n\n gsap.to('.js-page-nav', {\n scrollTrigger: {\n trigger: 'main#content',\n toggleActions: 'play none play none',\n onEnter: enter,\n onEnterBack: enter,\n onLeave: leave,\n onLeaveBack: leave,\n start: 'top 75px',\n end: 'bottom 85%',\n },\n });\n },\n\n // Small screens\n '(max-width: 1070px)': () => {\n gsap.set(['.js-page-nav', '.main#content'], {\n clearProps: 'all',\n });\n },\n });\n }\n}\n\nexport default InPageNav;\n","import SVG_Inject from '@iconfu/svg-inject';\n\nclass SVGInject {\n constructor() {\n this.images = Array.from(document.querySelectorAll('.js-svg-inject'));\n\n this.init();\n }\n\n init() {\n this.images.forEach(image => SVG_Inject(image));\n }\n}\n\nexport default SVGInject;\n","class TableOfContents {\n constructor() {\n this.articleInner = document.querySelector('.article-body__inner');\n this.articleBody = document.querySelector('.article-body__content');\n\n const headingArray = this.findHeadings(this.articleBody);\n\n if (headingArray.length > 0) {\n this.nav = document.querySelector('.article-body__nav');\n this.nav.classList.add('article-body__nav--display');\n\n this.articleNavList = document.querySelector('ul.article-body__nav-list');\n }\n\n this.updateHeadingID(headingArray);\n this.updateNavItem(this.articleNavList, headingArray);\n }\n\n findHeadings(articleBody) {\n this.headingArray = articleBody.getElementsByTagName('h2');\n return this.headingArray;\n }\n\n updateHeadingID(headingArray) {\n headingArray.forEach(heading => {\n const headingText = heading.innerText.replace(/[^\\w\\s]+/g, '');\n const sanitizedText = headingText.replace(/[^a-zA-Z0-9]/g, '-');\n heading.setAttribute('id', sanitizedText);\n });\n }\n\n updateNavItem(articleNavList, headingArray) {\n const numHeadings = headingArray.length;\n for (let currentItem = 0; currentItem < numHeadings; currentItem++) {\n const newNavItem = document.createElement('li');\n newNavItem.setAttribute('class', 'article-body__nav-item');\n\n const navItemLink = document.createElement('a');\n navItemLink.setAttribute('class', 'article-body__nav-link');\n\n navItemLink.innerHTML = headingArray[currentItem].innerText;\n const headingText = headingArray[currentItem].innerText.replace(/[^\\w\\s]+/g, '');\n const sanitizedText = headingText.replace(/[^a-zA-Z0-9]/g, '-');\n const navItemHref = `#${sanitizedText}`;\n\n navItemLink.setAttribute('href', navItemHref);\n\n newNavItem.appendChild(navItemLink);\n articleNavList.appendChild(newNavItem);\n }\n }\n}\n\nexport default TableOfContents;\n","class Accordion {\n constructor() {\n this.accordions = Array.from(document.querySelectorAll('.dce-block__accordion'));\n\n if (this.accordions.length > 0) {\n this.accordions.forEach(accordion => {\n const accordionToggle = accordion.querySelector('.accordion__toggle-button');\n accordionToggle.addEventListener('click', this.handleClick.bind(this));\n });\n }\n }\n\n handleClick(e) {\n const el = e.target;\n const isOpen = el.getAttribute('aria-expanded');\n\n isOpen === 'true'\n ? el.setAttribute('aria-expanded', 'false')\n : el.setAttribute('aria-expanded', 'true');\n }\n}\n\nexport default Accordion;\n","class scrollUpNavMobile {\n constructor() {\n const lastScrollTop = 0;\n this.handleScroll(lastScrollTop);\n }\n\n handleScroll(lastScrollTop) {\n document.addEventListener('scroll', () => {\n this.scrollTop = document.documentElement.scrollTop;\n const currentScrollTop = window.scrollY || this.scrollTop;\n\n if (currentScrollTop > lastScrollTop || currentScrollTop === 0) {\n if (document.querySelector('.show-sticky-nav-mobile')) {\n document.querySelector('body').classList.remove('show-sticky-nav-mobile');\n }\n if (document.querySelector('.show-sticky-nav-mobile-for-blog')) {\n document.querySelector('body').classList.remove('show-sticky-nav-mobile-for-blog');\n }\n } else {\n if (window.innerHeight + window.scrollY >= document.body.offsetHeight) {\n document.querySelector('body').classList.remove('show-sticky-nav-mobile');\n document.querySelector('body').classList.remove('show-sticky-nav-mobile-for-blog');\n } else {\n if (\n window.location.pathname !== '/blog/' &&\n window.location.pathname.includes('/blog/')\n ) {\n document.querySelector('body').classList.add('show-sticky-nav-mobile');\n document.querySelector('body').classList.add('show-sticky-nav-mobile-for-blog');\n } else {\n document.querySelector('body').classList.add('show-sticky-nav-mobile');\n }\n }\n }\n lastScrollTop = currentScrollTop;\n });\n }\n}\nexport default scrollUpNavMobile;\n","/* eslint-disable no-undef */\nimport 'core-js/stable';\n\n/* eslint-disable */\nimport LazySizes from 'lazysizes';\nimport Unveilhooks from 'lazysizes/plugins/unveilhooks/ls.unveilhooks';\n/* eslint-enable */\n\nimport { onDocumentReady } from './utils';\n\n// Components\nimport Menu from '@src/components/menu';\nimport ShareModal from '@src/components/share-modal';\nimport Links from '@src/components/links';\nimport VideoModal from '@src/components/video-modal';\nimport InPageScroll from '@src/components/in-page-scroll';\nimport InPageNav from '@src/components/in-page-nav';\nimport InjectSVG from '@src/components/svg-inject';\nimport TableOfContents from '@src/components/table-of-contents';\nimport Accordion from '@src/components/accordion';\nimport scrollUpNavMobile from '@src/components/scroll-up-nav-mobile';\n\nonDocumentReady(() => {\n new Links();\n new InjectSVG();\n new scrollUpNavMobile();\n\n if (document.querySelector('.js-page-nav') && document.querySelector('.js-page-nav')) {\n new InPageScroll();\n new InPageNav();\n }\n\n if (document.querySelector('.dce-block__accordion')) {\n new Accordion();\n }\n\n const MENU_CLASS = '.js--menu';\n if (document.querySelector(MENU_CLASS)) {\n new Menu(MENU_CLASS);\n }\n const SHARE_MODAL_CLASS = '.js-share-modal';\n if (document.querySelector(SHARE_MODAL_CLASS)) {\n new ShareModal(SHARE_MODAL_CLASS);\n }\n\n if (document.querySelectorAll('.js-program-card').length) {\n const programs = Array.from(document.querySelectorAll('.js-program-card'));\n programs.forEach(program => new VideoModal(program));\n }\n\n if (document.querySelector('.js-modal-gallery')) {\n import(/* webpackChunkName: \"modal-gallery\" */ '@src/components/modal-gallery').then(module => {\n const ModalGallery = module.default;\n new ModalGallery();\n });\n }\n\n if (document.querySelector('.js-toggle-class')) {\n import(/* webpackChunkName: \"modal-gallery\" */ '@src/components/toggle-class').then(module => {\n const ToggleClass = module.default;\n new ToggleClass();\n });\n }\n\n if (document.querySelector('.js-hang-punc')) {\n import(/* webpackChunkName: \"hang-punctuation\" */ '@src/components/hang-punctuation').then(\n module => {\n const HangPunctuation = module.default;\n new HangPunctuation();\n },\n );\n }\n\n if (document.querySelector('.article-body__content')) {\n new TableOfContents();\n }\n\n if (document.querySelector('.wp-block-table')) {\n import(/* webpackChunkName: \"hang-punctuation\" */ '@src/components/tables').then(module => {\n const Tables = module.default;\n new Tables();\n });\n }\n\n if (document.querySelector('.js-search')) {\n import(/* webpackChunkName: \"search-page\" */ '@src/components/search-page').then(module => {\n const SearchPage = module.default;\n new SearchPage();\n });\n }\n\n if (document.querySelector('.js-set-active')) {\n import(/* webpackChunkName: \"set-active\" */ '@src/components/set-active').then(module => {\n const SetActive = module.default;\n [...document.getElementsByClassName('js-set-active')].map(el => new SetActive(el));\n });\n }\n\n if (document.querySelector('.acf-map')) {\n import(/* webpackChunkNAme: \"google-maps-embed\" */ '@src/components/google-maps-embed').then(\n module => {\n const GoogleMapsEmbed = module.default;\n /* eslint-disable */\n new GoogleMapsEmbed(jQuery('.acf-map'));\n },\n );\n }\n\n // This is an example of how to do code splitting. The JS in this\n // referenced file will only be loaded on that page. Good for\n // when you have a large amount of JS only needed in one place\n //\n // if (document.querySelector('#js-process')) {\n // import(/* webpackChunkName: \"process\" */ './pages/process')\n // .then(module => {\n // const Process = module.default;\n // this.process = new Process();\n // });\n // }\n});\n","/**\n * Applies the event listener to the given element(s).\n *\n * @example\n * ```js\n * // Creates an event listener on window scroll\n * const off = on(window, 'scroll', onScroll);\n * // Returns function to remove event listener when you're done\n * off();\n * ```\n *\n * @example\n * ```js\n * // Handles one or multiple elements\n * const off = on([input, input2, input3], 'blur', onBlur);\n * ```\n *\n * @param {HTMLElement|HTMLElement[]} elementOrMultiple one or many HTML elements to apply the listener to\n * @param {string} type the type of event to apply\n * @param {Function} listener the event listener callback\n * @param {boolean|EventListenerOptions} options the event listener options to use\n * @returns {Function} a function that unsubscribes from any event listeners\n */\nconst on = (elementOrMultiple, type, listener, options) => {\n /**\n * @type {HTMLElement[]} the elements to attach listeners to\n */\n let elements = elementOrMultiple;\n if (!Array.isArray(elementOrMultiple)) {\n elements = [elementOrMultiple];\n }\n\n elements.forEach(el => {\n if (el) {\n el.addEventListener(type, listener, options);\n }\n });\n\n return () => {\n elements.forEach(el => {\n if (el) {\n el.removeEventListener(type, listener, options);\n }\n });\n };\n};\n\nexport default on;\n","/**\n * Event listener for when the document is ready. This serves as replacement for\n * JQuery's `$(document).ready()` function.\n *\n * @see http://youmightnotneedjquery.com/#ready\n *\n * @param {Function} callback the function to call when the DOM is ready\n */\nconst onDocumentReady = callback => {\n if (document.readyState !== 'loading') {\n callback();\n } else {\n document.addEventListener('DOMContentLoaded', callback, { once: true });\n }\n};\n\nexport default onDocumentReady;\n","class StateMachine {\n /**\n * Creates a new state machine.\n *\n * @param {string} initialState the initial state of the machine\n * @param {Record} stateMap a map of states to their valid next states\n */\n constructor(initialState, stateMap) {\n /**\n * @private\n * @type {string} the current internal state\n */\n this._state = initialState;\n\n /**\n * @private\n * @type {Record>} a map of states to their valid next states\n */\n this._map = Object.entries(stateMap).reduce(\n (acc, [state, nextStates]) => ({\n ...acc,\n [state]: new Set(nextStates),\n }),\n {},\n );\n }\n\n /**\n * @type {string} the current state of the machine\n */\n get state() {\n return this._state;\n }\n\n /**\n * Checks whether the current state is any of the given ones.\n *\n * @example\n * ```js\n * const isMounted = stateMachine.isStateOneOf(['beforeMount', 'mounted', 'beforeUnmount']);\n * ```\n *\n * @param {...string} states the different states to check\n * @returns {boolean} whether the current state is one of the given ones\n */\n isStateOneOf(...states) {\n return new Set(states).has(this._state);\n }\n\n /**\n * Sets the current state, granted that the given state is valid to move to from\n * the current state in the machine.\n *\n * @param {string} newState the new state to move to\n */\n setState(newState) {\n const validStates = this._map[this._state];\n if (!validStates) {\n throw new Error(`Modal gallery is in unknown state: ${this._state}`);\n }\n\n if (validStates.has(newState)) {\n this._state = newState;\n } else if (process.env.NODE_ENV === 'development') {\n const validStatesList = Array.from(validStates)\n .map(state => `\"${state}\"`)\n .join(',');\n console.warn(\n `Modal gallery is in state \"${this._state}\".\\nFrom here, it can only be in one of the following states: ${validStatesList}`,\n );\n }\n }\n}\n\nexport default StateMachine;\n","export { default as on } from './on';\nexport { default as onDocumentReady } from './onDocumentReady';\nexport { default as StateMachine } from './StateMachine';\n"],"sourceRoot":""}