{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/js/core/Drupal.js","webpack:///./src/js/.config.js","webpack:///./src/js/utils/Change.js","webpack:///./src/js/core/Sticky.js","webpack:///./src/js/components/Carousel.js","webpack:///./src/js/components/PlayPause.js","webpack:///./src/js/components/ProgressLoop.js","webpack:///./src/js/utils/Breakpoints.js","webpack:///./src/js/components/Slider.js","webpack:///./src/js/Gallery.js","webpack:///./src/js/components/Anchors.js","webpack:///./src/js/modifiers/ModaalTransformer.js","webpack:///./src/js/modifiers/Lightbox2Modaal.js","webpack:///./src/js/core/DDTemplates.js","webpack:///./src/js/views/CalendarFeed.js","webpack:///./src/js/components/Navigation.js","webpack:///./src/js/core/TermNavigation.js","webpack:///./src/js/modifiers/FixNavigation.js","webpack:///./src/js/modifiers/Shift.js","webpack:///./src/js/Header.js","webpack:///./src/js/Search.js","webpack:///./src/js/Toolbar.js","webpack:///./src/js/HomeHero.js","webpack:///./src/js/components/PanelGroup.js","webpack:///./src/js/HomeMembers.js","webpack:///./src/js/HomeQuicklinks.js","webpack:///./src/js/HomeWebinars.js","webpack:///./src/js/.theme.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","0","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","behaviors","documentIsReady","Drupal","behavior","fn","$","Callbacks","document","ready","fire","DrupalAMD","context","add","this","offsets","mobile","tablet","desktop","sidebar","padding","breakpoints","min","max","Infinity","ticking","listen","callbacks","request","requestAnimationFrame","update","callback","change","Sticky","element","register","Change","onChange","innerHeight","offsetHeight","classList","remove","Flickity","setJQuery","Carousel","dispatchEvent","defaults","playPause","wrapperTag","attachTo","shape","PlayPause","slider","options","settings","merge","playPauseButton","addButton","button","createElement","className","innerHTML","addEventListener","playPauseHandler","wrapper","appendChild","destination","contains","pausePlayer","playPlayer","setAttribute","on","setPlayingState","setPausedState","destroy","off","removeEventListener","parentNode","querySelector","progressLoop","ProgressProgressLoop","addProgressLoop","time","autoPlay","speed","progress","style","animationDuration","player","state","restart","stop","offsetWidth","start","pauseAutoPlayOnHover","Breakpoints","is","responsive","Slider","shouldBuildSlider","addResponsiveSupport","PlayPauseControls","ProgressLoop","Promise","resolve","restore","then","disabled","build","keys","forEach","bp","bpSettings","baseSettings","slides","children","fade","wrapAround","arrowShape","Gallery","Anchors","id","querySelectorAll","anchor","clickHandler","location","hash","substr","goToCurrentAnchor","event","preventDefault","currentTarget","href","indexOf","getElementById","scrollToDestination","scrollTo","elementToScroll","verticalOffset","currentOffset","maxDuration","minDuration","scrollX","scrollY","focus","timer","Timer","setTimeout","clear","currentBreakpoint","current","offsetSettings","config","ModaalTransformer","old","type","isVideo","removeAttribute","cloneNode","replaceChild","isGallery","caption","getAttribute","modaal","start_open","animation","outer_controls","Lightbox2Modaal","parent","selector","child","ConvertToModaal","node","photoGalleryPID","a11y","tables","newTab","anchors","sitemap","nodeMeta","messages","galleries","itemAppearsIn","expandingDates","slideshowIcons","lexiconGlossary","overtakeLightbox","subtermOverviews","fullNodeRelatedLinks","bundledReferringContent","DDTemplates","isNodeView","isNode","defineApplicableBehaviors","body","view","term","global","addEnabledBehavior","$appearingNav","find","addClass","each","$block","attr","wrap","prepend","click","animate","opacity","height","pattern","match","target","a","$node","$items","removeClass","$visible","map","item","getComputedStyle","getPropertyValue","filter","b","meta","$meta","$dates","$link","toggleClass","text","insertBefore","eq","$container","appendTo","append","join","image","$img","before","$map","$nav","digitaldcoreCreateSiteMap","letter","replace","html","toUpperCase","Modaal","closest","notValid","getElementsByClassName","el","$el","$image","storageKey","paginationLabel","filtersLabel","filterByPostTypes","useFilters","filters","defaultFilters","All","CalendarFeed","$element","getFilters","buildCalendar","createFilters","$group","$posts","currentYear","currentMonth","post","$post","oDates","datetime","dateObj","dayjs","month","format","mon","day","dow","year","toLowerCase","$year","$tile","markup","isSameMonth","end","isSameDay","isSameYear","next","$filters","types","ids","getDefaultData","getCustomizedData","currentFilter","sessionStorage","getItem","decodeURIComponent","$filter","$show","inArray","not","setItem","$shown","nextUntil","$ctrl","filterHandler","trigger","_types","_ids","classes","regex","test","exec","indexes","aResults","aTypes","parseInt","index","sort","menuBlock","menuParent","activeClass","activeTrailClass","expandActiveMenus","closeUnnestedMenus","focusout","hover","delay","in","out","Navigation","menu","preprocess","menuParents","components","submenu","link","firstElementChild","innerText","nextSibling","lastElementChild","TickTock","Tabbable","tabbable","collapse","expand","mobileState","openSubmenus","openSubmenu","expandElement","expandSubmenu","collapseElement","collapseSubmenu","states","active","open","expanded","keyDownEventDispatcher","mouseDownEventDispatcher","focusOutEventDispatcher","mouseOverHandler","mouseOutHandler","Keyboard","getCode","Enter","userInteractionHandler","Escape","clearAll","relatedTarget","TermNavigation","standardize","addLogic","level","parentElement","list","buttonLink","FixNavigation","process","$parent","$children","header","flyout","Shift","Error","entries","rearrange","region","block","tolerance","initial","pinned","unpinned","top","notTop","bottom","notBottom","onPin","onUnpin","onTop","onNotTop","onBottom","onNotBottom","Header","headroom","rebuild","init","offset","Headroom","input","Search","customComponents","typeOutPlaceholderText","setInterval","searchText","resetSearchInput","buttons","search","Toolbar","addSearchLogic","FocusTrap","addFocusTrapLogic","searchComponent","headerComponent","initialFocus","flyoutComponent","isActive","isSearch","searchButton","deactivate","activate","menuButton","focusIn","focusOut","keyDownHandler","selectedAttraction","friction","prevNextButtons","HomeHero","container","panel","close","PanelGroup","selectors","hasClose","closeButton","addEventListeners","updateView","CustomEvent","bubbles","keydownHandler","closeHandler","HomeMembers","createPanelGroups","nodes","Array","from","expandedHandler","HomeQuicklinks","groupCells","pageDots","HomeWebinars","pageHeader","mainMenu","toolbar","termNavigation","heroBlock","membersBlock","quicklinksBlock","webinarsBlock"],"mappings":"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","file":"theme.min.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\t0: 0\n \t};\n\n \tvar deferredModules = [];\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\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 = \"/dist/\";\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([55,1]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","/* global Drupal */\nimport $ from 'jquery';\n\nlet behaviors;\nlet documentIsReady = false;\n\n/**\n * Allows a Drupal behavior to be added from an AMD-style module. The behavior\n * will be executed when:\n * - As soon as the DOM is ready, if the DOM is not ready when the behavior is\n * added, just like a regular Drupal behavior.\n * - Immediately upon adding, if the DOM is ready (which may happen since\n * AMD-style modules are loaded asynchronously).\n * - When Drupal.attachBehaviors is executed.\n */\nDrupal.behavior = function addDrupalBehavior(fn) {\n if (!behaviors) {\n behaviors = $.Callbacks();\n documentIsReady = false;\n\n $(document).ready(() => {\n documentIsReady = true;\n behaviors.fire(document);\n\n // Now that we know the document is ready, add ourselves to Drupal's\n // behavior handling.\n window.Drupal.behaviors.DrupalAMD = function DrupalAMD(context) {\n behaviors.fire(context);\n };\n });\n }\n\n // Note: we can't use the 'memory' option of jQuery.Callbacks, because we\n // need control over the argument.\n if (documentIsReady) {\n fn(document);\n }\n\n behaviors.add(fn);\n return this;\n};\n\nexport default Drupal;\n","import { version } from '../../package.json';\n\n/**\n * Default export is the theme version identified within the package.json file.\n */\nexport default version;\n\n/**\n * Domain to use with the import/export script\n */\nexport const domain = 'https://live-acera2020.pantheonsite.io';\n\n/**\n * Path/page to append to the domain to use with the import/export script.\n */\nexport const path = '/user';\n\n/**\n * Centralized offsets used by various components.\n */\n export const offsets = {\n // offsets for each breakpoint\n mobile: 120,\n tablet: 180,\n desktop: 95,\n // other offsets for extended functionality\n sidebar: 35,\n padding: 20,\n};\n\n/**\n * Theme Breakpoints\n */\nexport const breakpoints = {\n mobile: {\n min: 0,\n max: 767,\n },\n tablet: {\n min: 768,\n max: 1024,\n },\n desktop: {\n min: 1025,\n max: Infinity,\n },\n};\n","import $ from 'jquery';\n\nclass Change {\n constructor() {\n this.ticking = false;\n this.listen();\n }\n\n update() {\n this.ticking = false;\n if (this.callbacks) {\n this.callbacks.fire();\n }\n }\n\n change() {\n this.request();\n }\n\n request() {\n if (!this.ticking) {\n requestAnimationFrame(this.update.bind(this));\n this.ticking = true;\n }\n }\n\n onChange(callback) {\n if (!this.callbacks) {\n this.callbacks = $.Callbacks('memory');\n }\n this.callbacks.add(callback);\n return this;\n }\n\n listen() {\n $(window).bind('scroll resize orientationchange', this.change.bind(this));\n }\n}\n\nexport default new Change();\n","import { offsets } from '../.config';\nimport Change from '../utils/Change';\n\nexport default class Sticky {\n constructor(element) {\n this.element = element;\n this.register();\n this.update();\n }\n\n register() {\n Change.onChange(this.update.bind(this));\n }\n\n update() {\n if (window.innerHeight - offsets.sidebar > this.element.offsetHeight) {\n this.element.classList.add('sticky');\n } else {\n this.element.classList.remove('sticky');\n }\n }\n}\n","import $ from 'jquery';\nimport Flickity from 'flickity';\n\n// Register our jquery version with Flickity.\nFlickity.setJQuery($);\n\nclass Carousel extends Flickity {\n playPlayer() {\n super.playPlayer();\n this.dispatchEvent('playing', null);\n }\n\n pausePlayer() {\n super.pausePlayer();\n this.dispatchEvent('paused', null);\n }\n\n stopPlayer() {\n super.stopPlayer();\n this.dispatchEvent('stopped', null);\n }\n\n destroy() {\n this.dispatchEvent('destroy', null);\n super.destroy();\n }\n}\n\nexport default Carousel;\n","import merge from 'deepmerge';\n\nconst defaults = {\n playPause: {\n wrapperTag: 'li',\n attachTo: '.flickity-page-dots',\n shape: '',\n },\n};\n\nexport default class PlayPause {\n constructor(element, slider, options = {}) {\n this.element = element;\n this.slider = slider;\n this.settings = merge(defaults, options);\n\n // Normalizes the playPause options.\n if (typeof options.playPause === 'boolean') {\n this.settings = merge(options, defaults);\n }\n\n // Adds play / pause controls\n this.playPauseButton = this.addButton();\n\n // Add Listeners\n this.listen();\n }\n\n addButton() {\n const button = document.createElement('button');\n button.className = 'button--play-pause';\n button.innerHTML = this.settings.playPause.shape;\n button.addEventListener('click', this.playPauseHandler.bind(this));\n if (this.settings.playPause.wrapperTag) {\n const wrapper = document.createElement(this.settings.playPause.wrapperTag);\n wrapper.appendChild(button);\n this.destination.appendChild(wrapper);\n } else {\n this.destination.appendChild(button);\n }\n return button;\n }\n\n playPauseHandler() {\n if (this.element.classList.contains('playing')) {\n this.slider.pausePlayer();\n } else {\n this.slider.playPlayer();\n }\n }\n\n setPlayingState() {\n this.playPauseButton.setAttribute('aria-label', 'Stop the slider\\'s autoscroll');\n this.element.classList.add('playing');\n }\n\n setPausedState() {\n this.playPauseButton.setAttribute('aria-label', 'Start the slider\\'s autoscroll');\n this.element.classList.remove('playing');\n }\n\n listen() {\n this.slider.on('playing', this.setPlayingState.bind(this));\n this.slider.on('stopped', this.setPausedState.bind(this));\n this.slider.on('paused', this.setPausedState.bind(this));\n this.slider.on('destroy', this.destroy.bind(this));\n }\n\n destroy() {\n this.slider.off('playing', this.setPlayingState.bind(this));\n this.slider.off('stopped', this.setPausedState.bind(this));\n this.slider.off('paused', this.setPausedState.bind(this));\n this.slider.off('destroy', this.destroy.bind(this));\n\n if (this.playPauseButton) {\n this.playPauseButton.removeEventListener('click', this.playPauseHandler.bind(this));\n if (this.settings.playPause.wrapperTag) {\n this.playPauseButton.parentNode.remove();\n } else {\n this.playPauseButton.remove();\n }\n }\n }\n\n get destination() {\n return this.element.querySelector(this.settings.playPause.attachTo) || this.element;\n }\n}\n","import merge from 'deepmerge';\n\nconst defaults = {\n progressLoop: {\n attachTo: '.button--play-pause',\n shape: '',\n },\n};\n\nexport default class ProgressProgressLoop {\n constructor(element, slider, options = {}) {\n this.element = element;\n this.slider = slider;\n this.settings = merge(defaults, options);\n\n // Normalizes the progressLoop options.\n if (typeof options.progressLoop === 'boolean') {\n this.settings = merge(options, defaults);\n }\n\n // Add the progress loop\n this.progressLoop = this.addProgressLoop();\n\n // Add Listeners\n this.listen();\n }\n\n addProgressLoop() {\n // Create out svg wrapper\n const progressLoop = document.createElement('div');\n progressLoop.className = 'progress-loop';\n progressLoop.innerHTML = this.settings.progressLoop.shape;\n\n // Add our svg to the passed element\n this.destination.appendChild(progressLoop);\n\n // If speed is not a number, use the flickity default value.\n const time = this.settings.autoPlay;\n const speed = typeof time === 'number' ? time : 3000;\n\n // Set the animation duration / speed.\n this.progress.style.animationDuration = `${speed}ms`;\n\n return progressLoop;\n }\n\n start() {\n this.progressLoop.classList.add('running');\n }\n\n stop() {\n this.progressLoop.classList.remove('running');\n }\n\n change() {\n if (this.slider.player.state === 'playing') {\n this.restart();\n }\n }\n\n restart() {\n this.stop();\n\n // @see https://css-tricks.com/restart-css-animation/#article-header-id-0\n // eslint-disable-next-line no-void\n void this.progressLoop.offsetWidth;\n\n this.start();\n }\n\n listen() {\n // Custom slider events\n this.slider.on('paused', this.stop.bind(this));\n this.slider.on('stopped', this.stop.bind(this));\n this.slider.on('playing', this.start.bind(this));\n this.slider.on('change', this.change.bind(this));\n this.slider.on('destroy', this.destroy.bind(this));\n\n // Mouse movements handlers\n if (this.settings.pauseAutoPlayOnHover !== false) {\n this.element.addEventListener('mouseenter', this.stop.bind(this));\n this.element.addEventListener('mouseleave', this.start.bind(this));\n }\n }\n\n destroy() {\n // Remove Custom slider events\n this.slider.off('paused', this.stop.bind(this));\n this.slider.off('stopped', this.stop.bind(this));\n this.slider.off('playing', this.start.bind(this));\n this.slider.off('change', this.change.bind(this));\n this.slider.off('destroy', this.destroy.bind(this));\n\n // Remove Mouse movements handlers\n if (this.settings.pauseAutoPlayOnHover !== false) {\n this.element.removeEventListener('mouseenter', this.stop.bind(this));\n this.element.removeEventListener('mouseleave', this.start.bind(this));\n }\n\n // Remove markup added.\n this.progressLoop.remove();\n }\n\n get progress() {\n return this.element.querySelector('.progress');\n }\n\n get destination() {\n return this.element.querySelector(this.settings.progressLoop.attachTo) || this.element;\n }\n}\n","import Breakpoints from 'breakpoints-js/dist/breakpoints';\nimport { breakpoints } from '../.config';\n\n// Create a mobileState property to help manage viewport based functionality.\nObject.defineProperty(Breakpoints, 'mobileState', {\n get() {\n return !Breakpoints.is('desktop');\n },\n});\n\n// Create a new instance with our configured breakpoints.\nBreakpoints(breakpoints);\n\nexport default Breakpoints;\n","import merge from 'deepmerge';\nimport Carousel from './Carousel';\nimport PlayPause from './PlayPause';\nimport { breakpoints } from '../.config';\nimport ProgressLoop from './ProgressLoop';\nimport Breakpoints from '../utils/Breakpoints';\n\nconst defaults = {\n playPause: true,\n responsive: false,\n progressLoop: false,\n};\n\nexport default class Slider {\n constructor(element, options = {}) {\n this.element = element;\n this.settings = merge(defaults, options);\n\n // Exit if we don't have more than one slide.\n if (!this.shouldBuildSlider) {\n return;\n }\n\n if (this.settings.responsive) {\n // Add responsive listeners\n this.addResponsiveSupport();\n return;\n }\n\n // If our slider isn't built yet, and isn't disabled,\n // default to building one with the base settings.\n this.update(this.settings);\n }\n\n build(settings) {\n // Construct our new slider instance.\n const slider = new Carousel(this.element, settings);\n\n // Add additional components based if autoplay is enabled.\n if (settings.autoPlay) {\n // Add Play/Pause support (if enabled)\n if (settings.playPause) {\n this.PlayPauseControls = new PlayPause(this.element, slider, settings);\n }\n\n // Add Progress Loop feature (if enabled)\n if (settings.progressLoop) {\n this.ProgressLoop = new ProgressLoop(this.element, slider, settings);\n }\n\n // We need to reannounce, to our added components, that the show's already started.\n slider.dispatchEvent(`${slider.player.state}`, null);\n }\n\n // Return the new slider instance.\n return slider;\n }\n\n restore() {\n // Destroys existing slider if one exists.\n return new Promise((resolve) => {\n if (this.slider) {\n this.slider.destroy();\n }\n\n // Resolve response after slider is removed.\n resolve();\n });\n }\n\n update(data) {\n this.restore().then(() => {\n // Do not build a new slider if set to 'disable'.\n if (data.disabled) {\n return;\n }\n\n // Build a new slider based on the passed settings.\n this.slider = this.build(data);\n });\n }\n\n // Adds responsive support which allows custom settings based on\n // the current viewport.\n addResponsiveSupport() {\n const { responsive } = this.settings;\n\n // Iterate through the provided breakpoints...\n Object.keys(breakpoints).forEach((bp) => {\n // Merges the baseSettings with the custom responsive settings.\n const bpSettings = merge(this.baseSettings, responsive[bp] || {});\n\n // Adds breakpoint listener for when this viewport is entered.\n Breakpoints.on(bp, 'enter', bpSettings, this.update.bind(this));\n });\n }\n\n // Only builds slider if there are enought slides.\n get shouldBuildSlider() {\n return this.slides.length > 1;\n }\n\n // Returns reference to the available slides within this slider.\n get slides() {\n return this.element.children;\n }\n\n // Extracts the base settings while stripping the responsive subset.\n get baseSettings() {\n const baseSettings = this.settings;\n if ('responsive' in baseSettings) {\n delete baseSettings.responsive;\n }\n return baseSettings;\n }\n}\n","import 'flickity-fade';\nimport Slider from './components/Slider';\n\nconst defaults = {\n fade: true,\n autoPlay: 4000,\n wrapAround: false,\n arrowShape: 'M58.7 20.6c.4-.4.8-.6 1.3-.6s1 .2 1.3.6c.4.4.6.9.6 1.4 0 .5-.2 1.1-.6 1.5L36.6 50.1l24.7 26.5c.7.8.7 2.1-.1 2.9-.7.7-1.9.7-2.6 0l-26.1-28c-.4-.4-.6-.9-.6-1.4 0-.5.2-1.1.6-1.4l26.2-28.1z',\n};\n\nexport default class Gallery {\n constructor(element) {\n this.element = element;\n this.settings = defaults;\n this.Slider = new Slider(this.element, this.settings);\n this.element.classList.add('ready');\n }\n}\n","import Timer from 'tick-tock';\nimport scrollTo from 'animated-scroll-to';\nimport Breakpoints from '../utils/Breakpoints';\nimport { offsets } from '../.config';\n\nexport default class Anchors {\n constructor() {\n this.id = '';\n this.offsets = offsets;\n\n // Listen for click events on links starting with a hash.\n // If an id'd element exists, scroll to it.\n const anchors = document.querySelectorAll('a[href^=\"#\"]');\n anchors.forEach((anchor) => {\n anchor.addEventListener('click', this.clickHandler.bind(this));\n });\n\n // Manage URLs containing a hash\n // If an id'd element exists, scroll to it.\n if (window.location.hash) {\n this.id = window.location.hash.substr(1);\n this.goToCurrentAnchor();\n }\n }\n\n clickHandler(event) {\n // Prevent default browser based hash functionality.\n event.preventDefault();\n\n // Extract the hash to use as the element id to search for.\n this.id = event.currentTarget.href.substr(event.currentTarget.href.indexOf('#') + 1);\n\n // Locate destination within the document.\n const destination = document.getElementById(this.id);\n\n // Quit if the destination isn't found\n if (!destination) return;\n\n // Scroll to destination.\n this.scrollToDestination(destination);\n }\n\n scrollToDestination(destination) {\n scrollTo(destination, {\n elementToScroll: window,\n verticalOffset: this.currentOffset,\n maxDuration: 1000,\n minDuration: 250,\n speed: 1000,\n }).then(() => {\n // Focus the element we scrolled to after we scroll down to it.\n const { scrollX, scrollY } = window;\n destination.focus();\n window.scrollTo(scrollX, scrollY);\n });\n }\n\n goToCurrentAnchor() {\n const anchor = document.getElementById(this.id);\n if (anchor) {\n const timer = new Timer();\n timer.setTimeout('setCurrentAnchor', () => {\n this.scrollToDestination(anchor);\n timer.clear('setCurrentAnchor');\n }, 500);\n }\n }\n\n get currentOffset() {\n const currentBreakpoint = Breakpoints.current();\n return this.offsets[currentBreakpoint.name];\n }\n\n get offsets() {\n return this.offsetSettings;\n }\n\n set offsets(config) {\n this.offsetSettings = {\n mobile: -config.padding,\n tablet: -config.padding,\n desktop: -(config.desktop + config.padding),\n };\n }\n}\n","import $ from 'jquery';\nimport 'modaal';\n\nexport default class ModaalTransformer {\n constructor(element, settings) {\n this.old = element;\n this.settings = settings;\n this.type = 'image';\n\n // Add custom video type.\n if (this.settings.isVideo) {\n this.type = 'video';\n }\n\n // Remove unneeded attributes and classes.\n this.old.removeAttribute('rel');\n this.old.classList.remove('lightbox-processed');\n\n // Clone the element to insure removal of previously set lightbox listeners functions.\n this.new = this.old.cloneNode(true);\n this.old.parentNode.replaceChild(this.new, this.old);\n\n // Add Modaal attributes for this particular link type.\n this.new.setAttribute('data-modaal-type', this.type);\n\n // If this is an image gallery, add the group data attribute.\n if (this.settings.isGallery) {\n this.new.setAttribute('data-group', 'gallery');\n }\n\n // Add the caption, if applicable.\n const image = this.new.querySelector('img');\n const caption = image.getAttribute('title');\n if (caption.length) {\n this.new.setAttribute('data-modaal-desc', caption);\n }\n\n // Add a replacement listener for our new link.\n this.new.addEventListener('click', this.clickHandler.bind(this));\n }\n\n clickHandler(event) {\n event.preventDefault();\n $(this.new).modaal({\n type: this.type,\n start_open: true,\n animation: 'none',\n outer_controls: true,\n });\n }\n}\n","import ModaalTransformer from './ModaalTransformer';\n\nconst nodeSelector = 'node';\n\nexport default class Lightbox2Modaal {\n constructor(parent, selector) {\n const settings = {\n isGallery: parent.querySelectorAll('img').length > 1,\n };\n\n if (parent.classList.contains(nodeSelector)) {\n // Process individual node.\n parent.querySelectorAll(selector).forEach((child) => {\n settings.isVideo = child.parentNode.classList.contains('field-video');\n child.ConvertToModaal = new ModaalTransformer(child, settings);\n });\n } else {\n // Process group of nodes.\n parent.querySelectorAll(nodeSelector).forEach((node) => {\n node.querySelectorAll(selector).forEach((child) => {\n settings.isVideo = child.parentNode.classList.contains('field-video');\n child.ConvertToModaal = new ModaalTransformer(child, settings);\n });\n });\n }\n }\n}\n","/* eslint-disable class-methods-use-this */\nimport $ from 'jquery';\nimport Drupal from './Drupal';\nimport Gallery from '../Gallery';\nimport Anchors from '../components/Anchors';\nimport Modaal from '../modifiers/Lightbox2Modaal';\n\nconst defaults = {\n photoGalleryPID: 107,\n behaviors: {\n a11y: true,\n tables: true,\n newTab: true,\n anchors: true,\n sitemap: true,\n nodeMeta: true,\n messages: true,\n galleries: true,\n itemAppearsIn: true,\n expandingDates: true,\n slideshowIcons: true,\n lexiconGlossary: true,\n overtakeLightbox: true,\n subtermOverviews: true,\n fullNodeRelatedLinks: true,\n bundledReferringContent: true,\n },\n};\n\nexport default class DDTemplates {\n constructor(options) {\n this.isNodeView = this.isNode();\n this.settings = { ...defaults, ...options };\n // Global behaviors\n this.defineApplicableBehaviors('global');\n // Current view behaviors only\n this.defineApplicableBehaviors(this.isNodeView ? 'node' : 'term');\n }\n\n /**\n * Simple check to see if the current body element contains the node class.\n */\n isNode() {\n return $(document.body).is('.n, .section-node');\n }\n\n /**\n * Segregates behaviors by different types of common views. If they're\n * enabled, define them in this module.\n */\n defineApplicableBehaviors(view) {\n const behaviors = {\n node: [\n 'itemAppearsIn',\n 'bundledReferringContent',\n ],\n term: [\n 'sitemap',\n 'subtermOverviews',\n 'lexiconGlossary',\n ],\n global: [\n 'a11y',\n 'tables',\n 'newTab',\n 'nodeMeta',\n 'messages',\n 'overtakeLightbox',\n 'slideshowIcons',\n 'expandingDates',\n 'galleries',\n 'anchors',\n ],\n };\n\n // Cycle through each behavior and only add it if it's enabled\n behaviors[view].forEach((behavior) => {\n this.addEnabledBehavior(behavior);\n });\n }\n\n /**\n * A way to enable only behaviors the theme requires.\n */\n addEnabledBehavior(behavior) {\n const enabled = this.settings.behaviors[behavior];\n if (enabled) {\n this[behavior].call(this);\n }\n }\n\n /**\n * Helper class for theming the appearing navigation block\n */\n itemAppearsIn() {\n const $appearingNav = $('.appearing-nav');\n const $links = $appearingNav.find('ul.links li');\n if (!$links.length) {\n $appearingNav.addClass('placeholder-block');\n }\n }\n\n /**\n * Hides the blocks if no content is present.\n */\n bundledReferringContent() {\n const $blocks = $('#block-digitaldcore-node_referring, #block-digitaldcore-node_bundled');\n $blocks.each((i, element) => {\n const $block = $(element);\n const $nodes = $block.find('.node-teaser');\n if (!$nodes.length) {\n $block.addClass('placeholder-block');\n }\n });\n }\n\n /**\n * Accessibility fixes\n */\n a11y() {\n $('.field-image a').attr('tabindex', -1);\n }\n\n /**\n * Wraps all tables in a responsive, scrollable, container.\n */\n tables() {\n $('.node-content table').wrap('
');\n }\n\n /**\n * Adds a close button to all Drupal message containers.\n */\n messages() {\n $('.messages').each((i, element) => {\n // Creates a button element instance.\n const button = document.createElement('button');\n button.className = 'close-button';\n button.setAttribute('aria-label', 'Dismiss alert');\n button.type = 'button';\n\n // Add our button\n $(element).prepend(button);\n\n // Close message if the close button is pressed.\n $(button).click(() => {\n $(element).animate({\n opacity: 'hide',\n height: 'hide',\n }, 250);\n });\n });\n }\n\n /**\n * Open the links within a new tab.\n */\n newTab() {\n const pattern = /\\.(pdf|doc|docx|xls|xlsx|csv|txt|rtf|odf|ppt|pptx|xml)$/;\n $('.page a').each((i, element) => {\n if (element.href.match(pattern)) {\n element.target = '_blank';\n }\n });\n }\n\n /**\n * Finds the real last meta item and identifies node of visible meta info\n */\n nodeMeta() {\n const $nodes = $('.node');\n $nodes.each((a, node) => {\n // Create a meta object\n const $node = $(node);\n const $meta = $node.find('.node-upper-meta');\n const $items = $meta.find('.meta-item');\n\n // Clean up last classname\n $items.removeClass('last');\n\n // Filter to just visible items\n const $visible = $items.map((i, item) => {\n const props = window.getComputedStyle(item);\n const display = props.getPropertyValue('display');\n return display !== 'none' ? item : null;\n });\n\n // Correctly identify last meta item and label node with the has-meta flag\n if ($visible.length) {\n $node.addClass('has-meta');\n $visible.filter(':last').addClass('last new-dd-templates-functionality');\n }\n });\n }\n\n /**\n * If there is more than two event dates, functionality is added to show and\n * hide all events within one container.\n *\n * Helps cleans up the look of meta data.\n *\n * @note:\n * This is only enabled for blocks with the 'posts' classname and all\n * full post views\n */\n expandingDates() {\n $('.posts .node, .node-full').each((a, node) => {\n $('.node-meta, .node-upper-meta', node).each((b, meta) => {\n const $meta = $(meta);\n const $dates = $('.event-date', node);\n\n if ($dates.length > 2) {\n // Create and add functionality to display all other dates\n const $link = $('Show all dates');\n $link.bind('click', (event) => {\n event.preventDefault();\n $meta.toggleClass('show-all-dates');\n $(event.currentTarget).text($meta.is('.show-all-dates') ? 'Hide all dates' : 'Show all dates');\n });\n $link.insertBefore($dates.eq(0));\n\n // Move all other dates\n const $container = $('
');\n $dates.appendTo($container);\n $meta.append($container);\n }\n });\n });\n }\n\n /**\n * Photo galleries\n */\n galleries() {\n // Photo Galleries\n const selectors = [\n '.photo-gallery .node-image',\n '.node-content .photo-gallery',\n '.photo-gallery .node-upper-image',\n ];\n\n document.querySelectorAll(selectors.join(',')).forEach((element) => {\n if (!element.Gallery) {\n element.Gallery = new Gallery(element);\n }\n });\n }\n\n /**\n * Adds markup to slideshow teasers to show an icon overlay\n */\n slideshowIcons() {\n const $slideshowNodes = $(`.pt${this.settings.photoGalleryPID}.node-teaser`);\n // cycle through each node instance\n $slideshowNodes.each((a, element) => {\n const $images = $(element).find('.field-image');\n // cycle through each field image instance\n $images.each((b, image) => {\n const $img = $(image).find('img');\n // add a button helper classname\n $(image).find('a').addClass('slideshow-btn');\n // prepend the icon overlay\n $img.before('');\n });\n });\n }\n\n sitemap() {\n // Add Sitemap output using the digitaldcore.js function\n const $map = $('#sitemap');\n const $nav = $('#sitemap .content');\n\n if ($map.length && $nav.length) {\n Drupal.digitaldcoreCreateSiteMap($map, $nav);\n $map.addClass('ready');\n }\n }\n\n /**\n * Adds the has more class to subterm overviews to properly control node-link display\n */\n subtermOverviews() {\n $('.subterm-overview .node-teaser').removeClass('no-more').addClass('has-more');\n }\n\n /**\n * Helper function to theme the category letters and seperate the sections\n */\n lexiconGlossary() {\n $('#glossary').find('.lexicon-list > a').each((i, element) => {\n const letter = $(element).attr('id').replace('letter_', '');\n $(element).html(letter.toUpperCase());\n });\n }\n\n /**\n * Adds page anchor support\n */\n anchors() {\n if (!document.body.Anchors) {\n document.body.Anchors = new Anchors();\n }\n }\n\n /**\n * Overtake Lightbox\n */\n overtakeLightbox() {\n // Replace Lightbox lightframe functionality with Modaal.\n $('.open-lightframe').each((i, element) => {\n if (!element.Modaal) {\n const selector = '.node-header a, .field-image a, .link-read-more a';\n element.Modaal = new Modaal(element, selector);\n }\n });\n\n // Replace Lightbox slideshow functionality with Modaal.\n $('.te-open-slideshow .node, .te-open-slideshow.node').each((i, element) => {\n if (!element.Modaal) {\n const selector = '.field-image a';\n element.Modaal = new Modaal(element, selector);\n }\n });\n\n // Replace Lightbox and Lighframe straggelers.\n $('[rel^=lightbox], [rel^=lightframe]').closest('.node').each((i, element) => {\n const notValid = element.parentNode.classList.contains('dd-hover-dependencies');\n if (!element.Modaal && !notValid) {\n if (element.getElementsByClassName('photo-gallery').length) {\n const selector = '.photo-gallery .field-image a';\n element.Modaal = new Modaal(element, selector);\n\n $('.field-image').each((j, el) => {\n const $el = $(el);\n const $link = $el.find('a.lightbox-processed');\n if ($link.length > 0) {\n const $image = $link.find('img');\n $link.remove();\n $el.append($image);\n }\n });\n } else {\n const selector = '.field-image a';\n element.Modaal = new Modaal(element, selector);\n }\n }\n });\n }\n}\n","import $ from 'jquery';\nimport dayjs from 'dayjs';\n\nconst defaults = {\n // local storage key used to save the currently applied filter\n storageKey: 'currentCalendarFilter',\n\n // Button text displayed as the pagination to the next page of events\n paginationLabel: 'Load More Events',\n\n // Mobile only drop down label that houses the filtering options\n filtersLabel: 'Filter by...',\n\n // Force the filters to be automatically determined by the post types present in the feed.\n filterByPostTypes: false,\n\n // A simple indicator to determine the build out of filters\n useFilters: false,\n\n // Used to pass in an object of filters which use key value pairs.\n // {Object}\n // @key: Name that will appear as the filter button text\n // @value: ID of post type or navigation term\n filters: false,\n};\n\n// These filters are used if the filterByPostTypes is enabled. Present post\n// types are then added to this object, then the filters are made from those.\nconst defaultFilters = {\n All: 2,\n};\n\nexport default class CalendarFeed {\n constructor(element, options) {\n this.$element = $(element);\n this.settings = { ...defaults, ...options };\n this.filters = this.getFilters();\n this.buildCalendar();\n if (this.settings.useFilters) {\n this.createFilters();\n }\n }\n\n buildCalendar() {\n const $posts = this.$element.find('.node');\n const group = '
';\n let currentYear = null;\n let currentMonth = '';\n let $group;\n\n // Manage the types of calendar filters being created\n $posts.each((i, post) => {\n const $post = $(post);\n const dates = ['start', 'end'];\n const oDates = {};\n\n // Parse the start/end timestamps using the dayjs framework\n $.each(dates, (j, type) => {\n const datetime = $post.find(`time.${type}`).attr('datetime');\n const dateObj = dayjs(datetime);\n oDates[type] = {\n month: dateObj.format('MMMM'),\n mon: dateObj.format('MMM'),\n day: dateObj.format('D'),\n dow: dateObj.format('ddd'),\n year: dateObj.format('YYYY'),\n };\n });\n\n // Add the post into a month grouping\n if (oDates.start.month.length && currentMonth !== oDates.start.month) {\n currentMonth = oDates.start.month;\n $group = $(group);\n $group.addClass(oDates.start.month.toLowerCase());\n $group.append(`

${oDates.start.month}

`);\n $post.before($group);\n\n // Set year labels followed by the associated months of that year\n if (oDates.start.year && oDates.start.year > currentYear) {\n const $year = $(`${oDates.start.year}`);\n $group.before($year);\n currentYear = oDates.start.year;\n }\n }\n\n // Dynamically create the date tile for the event display\n const $tile = $post.find('.event-date-tile');\n const markup = (data) => `${data.dow}${data.mon}${data.day}`;\n $tile.find('time.start').html(markup(oDates.start));\n\n // Handle date ranges\n if ($tile.is('.range')) {\n const isSameMonth = oDates.start.month === oDates.end.month;\n const isSameDay = oDates.start.day === oDates.end.day;\n const isSameYear = oDates.start.year === oDates.end.year;\n\n // This identifies an event which begins and ends at different times on the same day\n if (isSameMonth && isSameDay && isSameYear) {\n $post.addClass('day-event');\n }\n\n // This identifies an event which spans multiple days within the same month\n if (isSameMonth && !isSameDay && isSameYear) {\n $post.addClass('multiple-day-event');\n $tile.find('time.start .day').text(`${oDates.start.day}-${oDates.end.day}`);\n }\n\n // This identifies an event which spans multiple months or maybe a year(s)\n if (!isSameMonth || !isSameYear) {\n $post.addClass('multiple-month-event');\n $tile.find('time.end').html(markup(oDates.end));\n }\n }\n\n // Add the grouped posts to the display\n $post.appendTo($group);\n });\n\n // Alter the text of the next pager button\n $('.pager-next a', this.$element).text(this.settings.paginationLabel);\n\n // Add a helper class\n this.$element.addClass('ready');\n }\n\n filterHandler(event) {\n event.preventDefault();\n $(this).next('.filters').toggleClass('expanded');\n }\n\n getFilters() {\n // If custom filters where passed, use them, if not use the defaults.\n let data = this.settings.filters ? this.settings.filters : defaultFilters;\n // If the filter by post types flag is set, force that filtering option.\n if (this.settings.filterByPostTypes) {\n data = defaultFilters;\n }\n return data;\n }\n\n createFilters() {\n const { $element } = this;\n const $posts = $element.find('.node');\n let $filters = $('
');\n const filter = '
';\n const types = [];\n const ids = [];\n\n // Create the proposed filters\n $.each(this.filters, (type, id) => {\n types.push(type);\n ids.push(id);\n });\n\n // Using the proposed filters, generate relevant filters of those types\n // that are actually present or use the semi default, filter by post type.\n const data = this.settings.filterByPostTypes\n ? this.getDefaultData(types, ids)\n : this.getCustomizedData(types, ids);\n\n // Get the latest selected filter.\n let currentFilter = sessionStorage.getItem(this.settings.storageKey) || ids[0];\n\n // See if a hash was passed, if so let's filter by that instead later on.\n let { hash } = window.location;\n if (hash.length > 1) {\n hash = hash.substr(1); // Remove the hash symbol #\n hash = decodeURIComponent(hash); // Normalize the filter passed\n }\n\n // Create filters\n $.each(data.types, (i, type) => {\n const $filter = $(filter);\n // Use the type key to identify the associated filter id\n const id = data.ids[i];\n\n // Check to see if this filter is being forced to be filtered by using\n // a url hash.\n if (hash.length && hash.toLowerCase() === type.toLowerCase()) {\n currentFilter = id;\n }\n\n // Add the type to the filter\n $filter.text(type);\n\n // Add a class name to theme the filter\n $filter.addClass(`show-${ids[i]}`);\n\n // Add the newly created filter\n $filters.append($filter);\n\n // Add a click handler\n $filter.on('click', () => {\n // Default to all posts in calendar feed\n let $show = $posts;\n\n // Filter what posts to display if not all option\n if (type !== 'All') {\n $show = $posts.filter(\n (j, element) => $.inArray(type, $(element).data('types')) !== -1,\n );\n }\n\n // Manage the active filter styling\n $filters.not(this).removeClass('active');\n $(this).addClass('active');\n\n // hide all events that aren't of this type\n $posts.not($show).stop(true, true).animate({\n opacity: 'hide',\n height: 'hide',\n }, 300).removeClass('show');\n\n // show all events that are of this type\n $show.stop(true, true).animate({\n opacity: 'show',\n height: 'show',\n }, 300).addClass('show');\n\n // Set the current filter into session storage\n sessionStorage.setItem(this.settings.storageKey, id);\n currentFilter = id;\n\n // Check to see if the event group is empty\n $element.find('.group').each((j, element) => {\n const $shown = $('.node.show', element);\n const result = $shown.length ? 'show' : 'hide';\n\n // Add a helper class for the use with the year function below\n if ($shown.length) {\n $(element).addClass('show');\n } else {\n $(element).removeClass('show');\n }\n\n // Manages the visibility of the group\n $(element).stop(true, true).animate({\n opacity: result,\n height: result,\n }, 300);\n });\n\n // Check to see if the group year should display or not\n $element.find('.group-year').each((j, element) => {\n const $shown = $(element).nextUntil('.group-year').filter('.show');\n const result = $shown.length ? 'show' : 'hide';\n $(element).stop(true, true).animate({\n opacity: result,\n height: result,\n }, 300);\n });\n });\n });\n\n // Add a drop down controller for mobile\n const $ctrl = $(`

${this.settings.filtersLabel}

`);\n $ctrl.on('click', this.filterHandler);\n\n // Add the drop down controller for mobile display\n $element.find('.view-header').append($ctrl, $filters);\n\n // Make this an jquery array of filters reference rather than a container\n // reference.\n $filters = $filters.find('.filter');\n\n // Simulate a click event for the last or default calendar filter\n $filters.filter(`.show-${currentFilter}`).trigger('click');\n }\n\n getDefaultData(_types, _ids) {\n const { $element } = this;\n const $posts = $element.find('.node');\n\n const types = _types;\n const ids = _ids;\n\n // Dynamically create the filter types and identify the posts that belong\n // to each one.\n $posts.each((i, post) => {\n const $post = $(post);\n\n // Extract the post type\n let type = $post.attr('data-type');\n\n // If the post type is the generic Event, set the label to All instead.\n if (type === 'Event') {\n type = 'All';\n }\n\n let id = 0;\n const classes = $post.attr('class');\n const regex = /\\w?pt([0-9]+)/;\n\n // Make filters by types found if were using the default filters\n if (regex.test(classes)) {\n /* eslint-disable prefer-destructuring */\n id = regex.exec(classes)[1];\n }\n\n // Make filters by post type\n if ($.inArray(type, types) === -1) {\n types.push(type);\n ids.push(id);\n }\n\n // Add a data types to identify this when a filter is clicked\n $post.data('types', [type]);\n });\n\n return {\n types,\n ids,\n };\n }\n\n getCustomizedData(_types, _ids) {\n const { $element } = this;\n const $posts = $element.find('.node');\n const types = [];\n const ids = [];\n\n // Keep track of the types and ids that have been identified within this content.\n const indexes = [];\n\n // Dynamically create the filter types and identify the posts that belong\n // to each one.\n $posts.each((i, post) => {\n const $post = $(post);\n const classes = $post.attr('class');\n const regex = /\\w?[wp]t([0-9]+)/g; // Filter could be either wt or pt.\n const aTypes = [];\n\n // Add the post type by default\n aTypes.push($post.attr('data-type'));\n\n // If the post type is the generic Event, set the label to All instead.\n if (aTypes[0] === 'Event') {\n aTypes[0] = 'All';\n }\n\n // Iterates through all matches made to see what this post should be\n // filtered by from the filters assigned\n let aResults;\n // eslint-disable-next-line no-cond-assign\n while ((aResults = regex.exec(classes)) !== null) {\n const result = parseInt(aResults[1], 10);\n if ($.inArray(result, _ids) !== -1) {\n const index = _ids.indexOf(result);\n // Check to see if index has already been added, if not, add it.\n if ($.inArray(index, indexes) === -1) {\n indexes.push(index);\n }\n // Add this type to the post since it's been found\n aTypes.push(_types[index]);\n }\n }\n\n // Add a data id to identify this type when the filter is clicked\n $post.data('types', aTypes);\n });\n\n // Create new types and ids of the relevant types found using the\n // supplied custom filters\n $.each(indexes.sort(), (i, index) => {\n types.push(_types[index]);\n ids.push(_ids[index]);\n });\n\n return {\n types,\n ids,\n };\n }\n}\n","import tabbable from 'tabbable';\nimport TickTock from 'tick-tock';\nimport Keyboard from 'keyboard-key';\nimport Breakpoints from '../utils/Breakpoints';\n\n/**\n * @file Navigation\n *\n * Transforms an existing HTML list into an accessible navigation menu w/dropdowns.\n *\n * @constructor\n * @param element {HTML element} Menu list\n * @param options {object} Custom options to override the defaults of this instance.\n *\n * @constant defaults {object} Default options of this module\n * @param menuBlock {string} Namespace to be used for this instance\n * @param menuParent {string} DOM selector of the list items which contain a submenu\n * @param activeClass {string} Classname to be used to reference a active element\n * @param activeTrailClass {string} Classname to be used to reference a active element ancestor\n * @param expandActiveMenus {boolean} Whether or not to open active menus in the active trail\n * @param closeUnnestedMenus {boolean} Whether or not to close menus that are not\n * decendents of the currently interacted menu tree\n * @param focusout {boolean} Whether or not to close open menus when the block has lost focus\n * @param hover {boolean} Whether or not to control menu display based on mouse interaction\n * @var delay {object}\n * @param in {int} Hover delay on mouse over\n * @param out {int} Hover delay on mouse out\n *\n */\n\nconst defaults = {\n menuBlock: 'navigation',\n menuParent: '.menuparent',\n activeClass: 'active',\n activeTrailClass: 'active-trail',\n expandActiveMenus: false,\n closeUnnestedMenus: true,\n focusout: true,\n hover: true,\n delay: {\n in: 150,\n out: 250,\n },\n};\n\nexport default class Navigation {\n constructor(element, options) {\n this.menu = element;\n this.settings = { ...defaults, ...options };\n this.preprocess();\n this.listen();\n }\n\n // Add appropriate accessibility attributes to existing markup\n // and the toggle button which manages the submenu display.\n\n preprocess() {\n this.menuParents.forEach((element, index) => {\n // Set unique ID to link the button to the submenu.\n const id = `${this.components.submenu}-${index}`;\n\n // Link\n const link = element.firstElementChild;\n link.setAttribute('aria-label', `${link.innerText}, tab to the next button to expand the submenu`);\n link.setAttribute('aria-haspopup', true);\n link.setAttribute('aria-controls', id);\n\n // Toggle button\n const button = document.createElement('button');\n button.classList.add(this.components.button);\n button.setAttribute('aria-haspopup', true);\n button.setAttribute('aria-controls', id);\n button.innerText = link.innerText;\n element.insertBefore(button, link.nextSibling);\n\n // Submenu\n const submenu = element.lastElementChild;\n submenu.id = id;\n submenu.classList.add(this.components.submenu);\n submenu.Timer = new TickTock();\n submenu.Tabbable = tabbable(submenu);\n\n // Add each reference within the parent.\n element.link = link;\n element.button = button;\n element.submenu = submenu;\n\n // Set initial state of components\n this.collapse(element);\n\n // Manage display of the active trail, if configured.\n if (this.settings.expandActiveMenus) {\n const isActiveTrail = element.classList.contains(this.settings.activeTrailClass);\n if (isActiveTrail) {\n this.expand(element, false);\n }\n }\n });\n }\n\n // Update submenu display based on user interaction.\n\n userInteractionHandler(event) {\n const { parentNode } = event.target;\n const { button, submenu } = parentNode;\n\n // If there isn't a submenu and button, quit.\n if (!submenu && !button) return;\n\n // Set expand state based on current aria-expanded attribute set on the button.\n const expand = button.getAttribute('aria-expanded') === 'false';\n\n // Set the current state of the associate submenu and button.\n if (expand) {\n this.expand(parentNode, true);\n } else {\n this.collapse(parentNode);\n }\n\n // Only continue to close unnested expanded submenus if the setting is true and\n // we're not viewing in a mobile state.\n if (!this.settings.closeUnnestedMenus || Breakpoints.mobileState) return;\n\n // Loop thru each open submenu\n this.openSubmenus.forEach((openSubmenu) => {\n // If the button interacted with is not within this subtree, collapse it.\n if (!openSubmenu.parentNode.contains(button)) {\n this.collapse(openSubmenu.parentNode);\n }\n });\n }\n\n // Sets the expanded state of the passed in components.\n\n expand(parentNode, focus) {\n const { link, button, submenu } = parentNode;\n this.expandElement(link);\n this.expandElement(button);\n this.expandSubmenu(submenu, focus);\n }\n\n // Sets the collapsed state of the passed in components.\n\n collapse(parentNode) {\n const { link, button, submenu } = parentNode;\n this.collapseElement(link);\n this.collapseElement(button);\n this.collapseSubmenu(submenu);\n }\n\n // Sets the expanded state of the passed in element.\n\n /* eslint-disable-next-line */\n expandElement(element) {\n element.setAttribute('aria-expanded', true);\n }\n\n // Sets the collapsed state of the passed in element.\n\n /* eslint-disable-next-line */\n collapseElement(element) {\n element.setAttribute('aria-expanded', false);\n }\n\n // Sets the expanded state of the submenu.\n\n expandSubmenu(submenu, focus) {\n submenu.parentNode.classList.add(this.states.active);\n submenu.classList.add(this.states.open);\n submenu.removeAttribute('aria-hidden');\n submenu.expanded = true;\n\n // Don't focus if it's not set to.\n if (!focus) return;\n\n // Only continue if this submenu has tabbable elements.\n if (!submenu.Tabbable.length) return;\n\n // Focus the first tabbable element after submenu is expanded.\n submenu.Timer.setTimeout('focus', () => {\n submenu.Tabbable[0].focus();\n }, 100);\n }\n\n // Sets the collapsed state of the submenu.\n\n collapseSubmenu(submenu) {\n submenu.parentNode.classList.remove(this.states.active);\n submenu.classList.remove(this.states.open);\n submenu.setAttribute('aria-hidden', true);\n submenu.expanded = false;\n }\n\n // Completely reset the state of the menu\n\n clearAll() {\n this.openSubmenus.forEach((openSubmenu) => {\n this.collapse(openSubmenu.parentNode);\n });\n }\n\n // Add event listeners to the array of event types.\n\n listen() {\n this.menu.addEventListener('keydown', this.keyDownEventDispatcher.bind(this));\n this.menu.addEventListener('mousedown', this.mouseDownEventDispatcher.bind(this));\n\n // Whether or not to close open menus if the block loses focus.\n if (this.settings.focusout) {\n this.menu.addEventListener('focusout', this.focusOutEventDispatcher.bind(this));\n }\n\n // Whether or not to activate menus on a mouseover event.\n if (this.settings.hover) {\n this.menuParents.forEach((menuParent) => {\n menuParent.addEventListener('mouseover', this.mouseOverHandler.bind(this));\n menuParent.addEventListener('mouseout', this.mouseOutHandler.bind(this));\n });\n }\n }\n\n // Dispatch events for the keydown event type.\n\n keyDownEventDispatcher(event) {\n const keyCode = Keyboard.getCode(event);\n switch (keyCode) {\n case Keyboard.Enter:\n // if the keydown is caused by the return key, it should be a click\n this.userInteractionHandler(event);\n break;\n case Keyboard.Escape:\n // if the keydown is caused by the escape key, close the menus\n this.clearAll();\n break;\n default: break;\n }\n }\n\n // Dispatch events for the mousedown event type.\n\n mouseDownEventDispatcher(event) {\n this.userInteractionHandler(event);\n }\n\n // Attach a listener to close everything when a user\n // interacts outside of the menu.\n\n focusOutEventDispatcher(event) {\n if (!this.menu.contains(event.relatedTarget) && !Breakpoints.mobileState) {\n this.clearAll();\n }\n }\n\n // Manages menu states on a mouse over event.\n\n mouseOverHandler(event) {\n const { submenu } = event.currentTarget;\n submenu.Timer.clear('collapse');\n\n // Stop mouse actions on smaller devices.\n if (Breakpoints.mobileState) return;\n\n // Quit if the menu is already expanded.\n if (submenu.expanded) return;\n\n // Stage menu to be expanded.\n submenu.Timer.setTimeout('expand', () => {\n this.expand(submenu.parentNode, false);\n }, this.settings.delay.in);\n }\n\n // Manages menu states on a mouse out event.\n\n mouseOutHandler(event) {\n const { submenu } = event.currentTarget;\n submenu.Timer.clear('expand');\n\n // Stop mouse actions on smaller devices.\n if (Breakpoints.mobileState) return;\n\n // Quit if the menu is already collapsed.\n if (!submenu.expanded) return;\n\n // Stage menu to be collapsed.\n submenu.Timer.setTimeout('collapse', () => {\n this.collapse(submenu.parentNode);\n }, this.settings.delay.out);\n }\n\n // BEM conventions using the passed in `menuBlock` namespace for all states.\n\n get states() {\n return {\n active: `${this.settings.menuBlock}--active`,\n open: `${this.settings.menuBlock}__submenu--open`,\n };\n }\n\n // BEM conventions using the passed in `menuBlock` namespace for all components.\n\n get components() {\n return {\n button: `${this.settings.menuBlock}__toggle`,\n submenu: `${this.settings.menuBlock}__submenu`,\n };\n }\n\n // Getters for obtaining NodeLists of various elements.\n\n get menuParents() {\n return this.menu.querySelectorAll(this.settings.menuParent);\n }\n\n get buttons() {\n return this.menu.querySelectorAll(`.${this.components.button}`);\n }\n\n get submenus() {\n return this.menu.querySelectorAll(`.${this.components.submenu}`);\n }\n\n get openSubmenus() {\n return this.menu.querySelectorAll(`.${this.states.open}`);\n }\n}\n","import Breakpoints from '../utils/Breakpoints';\nimport Navigation from '../components/Navigation';\n\nconst components = {\n menu: '#term-navigation-menu',\n button: '.block-title button',\n buttonLink: '.block-title a',\n};\n\nconst settings = {\n menuBlock: 'term-navigation',\n menuParent: 'li.collapsed, li.expanded',\n expandActiveMenus: true,\n closeUnnestedMenus: false,\n focusout: false,\n hover: false,\n};\n\nexport default class TermNavigation {\n constructor(element) {\n this.element = element;\n this.open = false;\n\n if (this.menu) {\n this.standardize();\n this.addLogic();\n this.listen();\n }\n\n this.ready();\n }\n\n // Add depth classes to our term navigation structure which match the primary\n // navigation. That way we can share styling more easily.\n standardize() {\n this.menu.querySelectorAll('a.menu-link').forEach((link) => {\n const match = link.getAttribute('class').match(/depth-([0-9]+)/);\n if (match) {\n const level = match[1];\n // Replace current class with new depth to retain structure.\n link.classList.remove(`depth-${level}`);\n link.classList.add(`depth-${level - 1}`);\n // Add the appropriate classes to the list and it's items.\n const item = link.parentElement;\n const list = item.parentElement;\n item.classList.add(`depth-${level - 1}`);\n list.classList.add(`depth-${level - 1}`);\n }\n });\n }\n\n // Enhance the term navigation with the standardized, accessible, menu.\n addLogic() {\n return new Navigation(this.menu, settings);\n }\n\n // We want to control the mobile dropdown but let the desktop link go thru.\n clickHandler() {\n if (Breakpoints.mobileState) {\n if (this.open) {\n this.open = false;\n this.button.setAttribute('aria-expanded', false);\n this.element.classList.remove('term-navigation--open');\n this.menu.setAttribute('aria-hidden', true);\n } else {\n this.open = true;\n this.button.setAttribute('aria-expanded', true);\n this.element.classList.add('term-navigation--open');\n this.menu.setAttribute('aria-hidden', false);\n this.buttonLink.focus();\n }\n }\n }\n\n listen() {\n // Add a click handler to control the mobile dropdown menu\n this.button.addEventListener('click', this.clickHandler.bind(this));\n }\n\n ready() {\n this.element.classList.add('ready');\n }\n\n get button() {\n return this.element.querySelector(components.button);\n }\n\n get buttonLink() {\n return this.element.querySelector(components.buttonLink);\n }\n\n get menu() {\n return this.element.querySelector(components.menu);\n }\n}\n","import $ from 'jquery';\n\nexport default class FixNavigation {\n constructor(element) {\n this.element = element;\n this.process();\n this.ready();\n }\n\n process() {\n $('.menuparent, .expanded, .collapsed', this.element).each((i, item) => {\n // handles the parent term (if hidden)\n const $parent = $(item).children('a');\n if (!$parent.length || $parent.is('.hidden')) {\n $(item).remove();\n }\n\n // handles the term to see if it only parents orphans.\n let $children = $('> ul > li', item);\n if (!$parent.is('.hidden') && $children.length) {\n // Logged in: shows links with a hidden class.\n $children.children('a.hidden').parent().remove();\n // Logged out: shows an empty li :\\\n $children.filter(':empty').remove();\n // Reset $children to reflect potential missing items.\n $children = $('> ul > li', item);\n // If the list is empty, the parent should no longer be\n // labeled as such and the list should be removed.\n if (!$children.length) {\n $(item).removeClass('menuparent expanded collapsed'); // unlabel\n $(item).find('ul').remove();\n }\n }\n });\n\n // Get rid of any straggler hidden terms which don't have children.\n $('a.hidden', this.element).parent().remove();\n }\n\n ready() {\n $(this.element).addClass('ready');\n }\n}\n","import Breakpoints from '../utils/Breakpoints';\n\nconst config = {\n mobile: {\n header: [\n '.branding',\n '.toolbar',\n ],\n flyout: [\n '.site-search.block',\n '.secondary-links',\n '.gtranslate',\n '.primary-navigation',\n ],\n },\n desktop: {\n header: [\n '.branding',\n '.toolbar',\n '.site-search.block',\n '.gtranslate',\n '.secondary-links',\n '.primary-navigation',\n ],\n flyout: [],\n },\n};\n\nexport default class Shift {\n constructor(element) {\n this.element = element;\n this.config = config;\n\n if (!this.header || !this.flyout) {\n throw Error('Header module requires a .header .layout and .flyout .layout element to proceed.');\n }\n\n this.listen();\n this.ready();\n }\n\n update() {\n const state = Breakpoints.mobileState ? 'mobile' : 'desktop';\n Object.entries(this.config[state]).forEach(this.rearrange.bind(this));\n }\n\n rearrange([region, blocks]) {\n blocks.forEach((selector) => {\n const block = this.element.querySelector(selector);\n if (block) {\n this[region].append(block);\n }\n });\n }\n\n listen() {\n // Listen for breakpoint changes\n Breakpoints.on('mobile tablet', 'enter', this.update.bind(this));\n Breakpoints.on('desktop', 'enter', this.update.bind(this));\n }\n\n ready() {\n this.element.classList.add('ready');\n }\n\n get header() {\n return this.element.querySelector('.header .layout');\n }\n\n get flyout() {\n return this.element.querySelector('.flyout .layout');\n }\n}\n","import Headroom from 'headroom.js';\nimport { offsets } from './.config';\nimport Breakpoints from './utils/Breakpoints';\n\n// Headroom settings\nconst settings = {\n // scroll tolerance in px before state changes\n tolerance: 5, // or {down: 0, up: 0},\n // css classes to apply\n classes: {\n // when element is initialised\n initial: 'headroom',\n // when scrolling up\n pinned: 'locked',\n // when scrolling down\n unpinned: 'unlocked',\n // when above offset\n top: 'top',\n // when below offset\n notTop: 'not-top',\n // when at bottom of scoll area\n bottom: 'bottom',\n // when not at bottom of scroll area\n notBottom: 'not-bottom',\n },\n // callback when pinned, `this` is headroom object\n onPin() {},\n // callback when unpinned, `this` is headroom object\n onUnpin() {},\n // callback when above offset, `this` is headroom object\n onTop() {},\n // callback when below offset, `this` is headroom object\n onNotTop() {},\n // callback at bottom of page, `this` is headroom object\n onBottom() {},\n // callback when moving away from bottom of page, `this` is headroom object\n onNotBottom() {},\n};\n\nexport default class Header {\n constructor(element) {\n this.element = element;\n this.offsets = offsets;\n this.headroom = this.build();\n Breakpoints.on('change', this.rebuild.bind(this));\n this.headroom.init();\n }\n\n // Create a new Headroom instance\n build() {\n const options = settings;\n options.offset = this.currentOffset;\n return new Headroom(this.element, options);\n }\n\n // Rebuild existing Headroom instance with updated offset.\n rebuild() {\n this.headroom.destroy();\n this.headroom.offset = this.currentOffset;\n this.headroom.init();\n }\n\n get currentOffset() {\n const currentBreakpoint = Breakpoints.current();\n return this.offsets[currentBreakpoint.name];\n }\n}\n","import Timer from 'tick-tock';\n\nconst components = {\n text: 'Search',\n input: '#edit-keywords',\n};\n\nexport default class Search {\n constructor(element, customComponents) {\n // Make reference to the passed in element.\n this.element = element;\n\n // Manage intervals and timeouts with the TickTock tool.\n this.Timer = new Timer();\n\n // Merge default components with custom ones, if applicable.\n this.components = { ...components, ...customComponents };\n\n // Clear out values of these components.\n this.input.value = '';\n\n // Event management\n this.listen();\n }\n\n // Focus the search box after a small delay.\n\n focusIn() {\n this.input.setAttribute('placeholder', '');\n this.Timer.setTimeout('focus', () => {\n this.typeOutPlaceholderText();\n }, 250);\n }\n\n // Cancel any search input timeouts that may be running.\n\n focusOut() {\n this.Timer.clear('focus');\n this.Timer.clear('typing');\n }\n\n // Types out placeholder text on focusin state.\n\n typeOutPlaceholderText() {\n let i = 0;\n if (!this.input.value.length) {\n this.Timer.setInterval('typing', () => {\n if (i <= this.searchText.length) {\n this.input.setAttribute('placeholder', this.searchText.substr(0, i));\n this.input.focus();\n i += 1;\n } else {\n this.Timer.clear('typing');\n }\n }, 60);\n } else {\n this.input.focus();\n }\n }\n\n // This is a workaround to overcome the default dd-search.js search\n // input scripted behaviors.\n\n resetSearchInput() {\n if (this.searchText === this.input.value) {\n this.input.value = '';\n }\n }\n\n // Listening so that we can override previously set scripted behaviors.\n\n listen() {\n this.input.addEventListener('focusin', this.resetSearchInput.bind(this));\n this.input.addEventListener('focusout', this.resetSearchInput.bind(this));\n }\n\n // Getters of various components.\n\n get searchText() {\n return this.components.text;\n }\n\n get input() {\n return this.element.querySelector(this.components.input);\n }\n}\n","import FocusTrap from 'focus-trap';\nimport Keyboard from 'keyboard-key';\nimport Breakpoints from './utils/Breakpoints';\nimport Search from './Search';\n\nconst defaults = {\n activeClass: 'menu-active',\n buttons: {\n menu: '.menu-icon',\n search: '.search-icon',\n },\n components: {\n flyout: '#flyout',\n search: '#dd-search',\n header: '.page-header',\n },\n};\n\nexport default class Toolbar {\n constructor(element, options) {\n this.element = element;\n this.settings = { ...defaults, ...options };\n this.Search = this.addSearchLogic();\n this.FocusTrap = this.addFocusTrapLogic();\n this.listen();\n }\n\n // Add search logic to manage the various states of the search component\n\n addSearchLogic() {\n return this.searchComponent ? new Search(this.searchComponent) : false;\n }\n\n // Add focus-trap logic to manage focus state when flyout is expanded.\n\n addFocusTrapLogic() {\n return new FocusTrap(this.headerComponent, {\n initialFocus: this.flyoutComponent,\n });\n }\n\n // Manage click events.\n\n clickHandler(event) {\n const isActive = document.body.classList.contains(this.settings.activeClass);\n const isSearch = this.searchButton && this.searchButton === event.currentTarget;\n\n if (isActive) {\n this.deactivate();\n } else {\n this.activate(isSearch);\n }\n }\n\n // Manage keydown events.\n\n keyDownHandler(event) {\n const keyCode = Keyboard.getCode(event);\n if (keyCode === Keyboard.Escape) {\n this.deactivate();\n }\n }\n\n // Activates the flyout and all of the associated buttons.\n\n activate(search) {\n document.body.classList.add(this.settings.activeClass);\n if (this.menuButton) this.menuButton.setAttribute('aria-expanded', !search);\n if (this.searchButton) this.searchButton.setAttribute('aria-expanded', search);\n\n // Leverage the focus trap logic to lock active element focus\n // within the flyout only (on mobile devices specifically).\n if (Breakpoints.mobileState) {\n this.FocusTrap.activate();\n }\n\n if (search && this.Search) {\n // Leverage the Search logic to manage it's focus in state.\n this.Search.focusIn();\n } else {\n // If the menu button is clicked, focus the flyout container.\n this.flyoutComponent.focus();\n }\n }\n\n // Deactivates the flyout and all of the associated buttons.\n\n deactivate() {\n this.FocusTrap.deactivate();\n document.body.classList.remove(this.settings.activeClass);\n if (this.menuButton) this.menuButton.setAttribute('aria-expanded', false);\n if (this.searchButton) this.searchButton.setAttribute('aria-expanded', false);\n\n // Leverage the Search logic to manage it's focus out state.\n if (this.Search) {\n this.Search.focusOut();\n }\n }\n\n // Set up event listeners to help control the various states of the toolbar and flyout.\n\n listen() {\n this.element.addEventListener('keydown', this.keyDownHandler.bind(this));\n if (this.menuButton) this.menuButton.addEventListener('click', this.clickHandler.bind(this));\n if (this.searchButton) this.searchButton.addEventListener('click', this.clickHandler.bind(this));\n }\n\n // Getters of the various components available\n\n get menuButton() {\n return this.element.querySelector(this.settings.buttons.menu);\n }\n\n get searchButton() {\n return this.element.querySelector(this.settings.buttons.search);\n }\n\n get flyoutComponent() {\n return document.querySelector(this.settings.components.flyout);\n }\n\n get searchComponent() {\n return document.querySelector(this.settings.components.search);\n }\n\n get headerComponent() {\n return document.querySelector(this.settings.components.header);\n }\n}\n","import Slider from './components/Slider';\n\nconst defaults = {\n selectedAttraction: 0.2, // default 0.025\n friction: 0.8, // default 0.28\n autoPlay: false,\n wrapAround: true,\n prevNextButtons: false,\n responsive: {\n desktop: {\n autoPlay: 4000,\n progressLoop: true,\n pauseAutoPlayOnHover: false,\n playPause: {\n shape: 'Play / Pause button',\n wrapperTag: false,\n attachTo: false,\n },\n },\n },\n};\n\nexport default class HomeHero {\n constructor(element) {\n this.element = element;\n this.settings = defaults;\n this.Slider = new Slider(this.container, this.settings);\n this.element.classList.add('ready');\n }\n\n get container() {\n return this.element.querySelector('.block-content');\n }\n}\n","import Keyboard from 'keyboard-key';\n\nconst defaults = {\n node: '.node',\n button: '.node-button',\n panel: '.node-panel',\n close: '.btn-close',\n};\n\nexport default class PanelGroup {\n constructor(element, options) {\n this.element = element;\n this.expanded = false;\n this.selectors = { ...defaults, ...options };\n this.hasClose = this.closeButton;\n this.addEventListeners();\n }\n\n keydownHandler(event) {\n const key = Keyboard.getCode(event);\n if (key === Keyboard.Escape && this.expanded) {\n this.deactivate();\n }\n }\n\n clickHandler() {\n return this.expanded ? this.deactivate() : this.activate();\n }\n\n closeHandler() {\n return this.deactivate();\n }\n\n activate() {\n this.expanded = true;\n this.updateView();\n this.element.dispatchEvent(new CustomEvent('expanded', { bubbles: true }));\n }\n\n deactivate() {\n this.expanded = false;\n this.updateView();\n this.element.dispatchEvent(new CustomEvent('collapsed', { bubbles: true }));\n }\n\n updateView() {\n this.panel.setAttribute('aria-hidden', !this.expanded);\n this.button.setAttribute('aria-expanded', this.expanded);\n if (this.hasClose) {\n this.closeButton.setAttribute('aria-expanded', this.expanded);\n }\n }\n\n get button() {\n return this.element.querySelector(this.selectors.button);\n }\n\n get panel() {\n return this.element.querySelector(this.selectors.panel);\n }\n\n get closeButton() {\n return this.element.querySelector(this.selectors.close) || false;\n }\n\n addEventListeners() {\n window.addEventListener('keydown', this.keydownHandler.bind(this));\n this.button.addEventListener('click', this.clickHandler.bind(this));\n if (this.hasClose) {\n this.closeButton.addEventListener('click', this.closeHandler.bind(this));\n }\n }\n}\n","import PanelGroup from './components/PanelGroup';\n\nconst selectors = {\n node: '.node-home-members',\n};\n\nexport default class HomeMembers {\n constructor(element) {\n this.element = element;\n this.selectors = selectors;\n this.createPanelGroups();\n this.addEventListeners();\n }\n\n createPanelGroups() {\n this.nodes.forEach((node) => {\n if (!node.PanelGroup) {\n node.PanelGroup = new PanelGroup(node, this.selectors);\n }\n });\n }\n\n expandedHandler({ target }) {\n const closeThese = Array.from(this.nodes).filter((node) => node !== target);\n closeThese.forEach((node) => node.PanelGroup.deactivate());\n }\n\n addEventListeners() {\n this.element.addEventListener('expanded', this.expandedHandler.bind(this));\n }\n\n get nodes() {\n return this.element.querySelectorAll(this.selectors.node);\n }\n}\n","import PanelGroup from './components/PanelGroup';\n\nconst selectors = {\n node: '.node-home-quicklinks',\n};\n\nexport default class HomeQuicklinks {\n constructor(element) {\n this.element = element;\n this.selectors = selectors;\n this.createPanelGroups();\n }\n\n createPanelGroups() {\n this.nodes.forEach((node) => {\n if (!node.PanelGroup) {\n node.PanelGroup = new PanelGroup(node, this.selectors);\n }\n });\n }\n\n get nodes() {\n return this.element.querySelectorAll(this.selectors.node);\n }\n}\n","import Slider from './components/Slider';\n\nconst defaults = {\n groupCells: 2,\n arrowShape: 'M24.5,51.6v-3.2l19.6-19.6l3.2,3.2L31.5,47.8h44.1v4.5H31.5L47.2,68l-3.2,3.2L24.5,51.6z',\n selectedAttraction: 0.2, // default 0.025\n friction: 0.8, // default 0.28\n autoPlay: false,\n wrapAround: true,\n pageDots: false,\n responsive: {\n mobile: {\n prevNextButtons: false,\n pageDots: true,\n groupCells: 1,\n },\n },\n};\n\nexport default class HomeWebinars {\n constructor(element) {\n this.element = element;\n this.settings = defaults;\n this.Slider = new Slider(this.container, this.settings);\n this.element.classList.add('ready');\n }\n\n get container() {\n return this.element.querySelector('.home-webinars-slider');\n }\n}\n","import 'focus-visible';\nimport Drupal from './core/Drupal';\nimport Sticky from './core/Sticky';\nimport DDTemplates from './core/DDTemplates';\nimport CalendarFeed from './views/CalendarFeed';\nimport Navigation from './components/Navigation';\nimport TermNavigation from './core/TermNavigation';\nimport FixNavigation from './modifiers/FixNavigation';\nimport FetchSourceImages from './core/FetchSourceImages';\nimport Shift from './modifiers/Shift';\nimport Header from './Header';\nimport Toolbar from './Toolbar';\nimport HomeHero from './HomeHero';\nimport HomeMembers from './HomeMembers';\nimport HomeQuicklinks from './HomeQuicklinks';\nimport HomeWebinars from './HomeWebinars';\n\n// Homepage funcationality\nconst homepage = () => {\n // Home Hero Block\n const heroBlock = document.querySelector('.home-hero.block');\n if (heroBlock && !heroBlock.HomeHero) {\n heroBlock.HomeHero = new HomeHero(heroBlock);\n }\n\n // Home Members Block\n const membersBlock = document.querySelector('.home-members.block');\n if (membersBlock && !membersBlock.HomeMembers) {\n membersBlock.HomeMembers = new HomeMembers(membersBlock);\n }\n\n // Home Quicklinks Block\n const quicklinksBlock = document.querySelector('.home-quicklinks.block');\n if (quicklinksBlock && !quicklinksBlock.HomeMembers) {\n quicklinksBlock.HomeMembers = new HomeQuicklinks(quicklinksBlock);\n }\n\n // Home Webinars Block\n const webinarsBlock = document.querySelector('.home-webinars.block');\n if (webinarsBlock && !webinarsBlock.HomeWebinars) {\n webinarsBlock.HomeWebinars = new HomeWebinars(webinarsBlock);\n }\n\n // Add homepage ready state\n document.body.classList.add('homepage-ready');\n};\n\n// Sitewide functionality\nconst sitewide = () => {\n // Page element\n const page = document.querySelector('.page');\n\n // DD Template Behaviors\n if (!document.body.DDTemplates) {\n document.body.DDTemplates = new DDTemplates();\n }\n\n // Shift Components based on currrent breakpoint.\n const pageHeader = document.querySelector('.page-header');\n if (!pageHeader.Shift) {\n pageHeader.Shift = new Shift(pageHeader);\n }\n\n // Fix our damn menus from displaying orphaned children\n document.querySelectorAll('.main-navigation, .term-navigation').forEach((element) => {\n if (!element.FixNavigation) {\n element.FixNavigation = new FixNavigation(element);\n }\n });\n\n // Main Navigation\n const mainMenu = document.querySelector('#nice-menu-3');\n if (mainMenu && !mainMenu.Navigation) {\n mainMenu.Navigation = new Navigation(mainMenu);\n }\n\n // Controls the states of the menu and search states\n const toolbar = document.querySelector('.toolbar');\n if (toolbar && !toolbar.Toolbar) {\n toolbar.Toolbar = new Toolbar(toolbar);\n }\n\n // Fixed Header using Headroom.js\n document.querySelectorAll('.headroom').forEach((element) => {\n if (!element.Header) {\n element.Header = new Header(element);\n }\n });\n\n // Sticky sidebars\n document.querySelectorAll('.page-sidebar').forEach((element) => {\n if (!element.Sticky) {\n element.Sticky = new Sticky(element);\n }\n });\n\n // Term Navigation\n const termNavigation = document.querySelector('.term-navigation');\n if (termNavigation && !termNavigation.TermNavigation) {\n termNavigation.TermNavigation = new TermNavigation(termNavigation);\n }\n\n // Calendar of Events View\n document.querySelectorAll('.calendar-feed').forEach((element) => {\n if (!element.CalendarFeed) {\n element.CalendarFeed = new CalendarFeed(element);\n }\n });\n};\n\n// Add sitewide functionality\nDrupal.behavior(sitewide);\n\n// Add homepage specific functionality\nif (document.body.classList.contains('front')) {\n Drupal.behavior(homepage);\n}\n\n// If we're in development mode...\n// Open up all missing images within a new tab/window.\nif (process.env.NODE_ENV === 'development') {\n document.body.FetchSourceImages = new FetchSourceImages();\n}\n"],"sourceRoot":""}