{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/js/HomeHero.js","webpack:///./src/js/.config.js","webpack:///./src/js/Breakpoints.js","webpack:///./src/js/HomeTabs.js","webpack:///./src/js/HomeDates.js","webpack:///./src/js/HomeStats.js","webpack:///./src/js/Drupal.js","webpack:///./src/js/HomeSocial.js","webpack:///./src/js/HomeTrending.js","webpack:///./src/js/Home.js","webpack:///./src/js/Change.js","webpack:///./src/js/Sticky.js","webpack:///./src/js/Header.js","webpack:///./src/js/Parallax.js","webpack:///./src/js/Banner.js","webpack:///./src/js/SmartFooter.js","webpack:///./src/js/Footer.js","webpack:///./src/js/Signup.js","webpack:///./src/js/Search.js","webpack:///./src/js/Toolbar.js","webpack:///./src/js/Navigation.js","webpack:///./src/js/ModaalTransformer.js","webpack:///./src/js/Modaal.js","webpack:///./src/js/Anchors.js","webpack:///./src/js/Flickity.js","webpack:///./src/js/Gallery.js","webpack:///./src/js/DDTemplates.js","webpack:///./src/js/CalendarFeed.js","webpack:///./src/js/FixNavigation.js","webpack:///./src/js/TermNavigation.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","HomeHero","constructor","element","this","ready","classList","add","offsets","mobile","tablet","desktop","larger","sidebar","padding","breakpoints","min","max","Infinity","Breakpoints","current","HomeTabs","createTabs","listen","tablist","document","createElement","className","setAttribute","prepend","querySelectorAll","forEach","panel","title","querySelector","tab","id","textContent","addEventListener","change","appendChild","setOrientation","setInactiveState","tabs","remove","getElementById","getAttribute","setActiveState","setFocus","currentIndex","Number","focus","event","currentTarget","on","enter","keydownHandler","activate","Keyboard","getKey","preventDefault","item","click","index","dayjs","extend","formatter","DATE_FORMAT","HomeDates","dates","date","eventDate","contains","time","formatEventDate","formatDate","dateObj","innerHTML","format","datetime","components","single","start","end","output","startObj","endObj","HomeStats","preprocess","setReadyState","heading","container","paragraph","nextElementSibling","parentNode","target","InViewport","setVisibleState","behaviors","documentIsReady","Drupal","behavior","fn","$","Callbacks","fire","DrupalAMD","context","HomeSocial","fail","success","fetchContent","request","Request","settings","ddTwitterFeed","getTweetsURI","method","fetch","then","validate","catch","response","ok","Error","statusText","text","error","content","HomeTrending","reorderLinks","more","Homepage","hero","trending","stats","social","block","region","viewport","append","nodes","ticking","update","callbacks","requestAnimationFrame","onChange","callback","Sticky","register","Change","innerHeight","offsetHeight","tolerance","classes","initial","pinned","unpinned","top","notTop","bottom","notBottom","onPin","onUnpin","onTop","onNotTop","onBottom","onNotBottom","Header","headroom","build","rebuild","init","options","offset","currentOffset","Headroom","destroy","currentBreakpoint","defaults","speed","Parallax","$element","pageYOffset","css","Banner","image","parallax","body","SmartFooter","reactiveElement","height","style","paddingBottom","Footer","page","footerLinks","socialLinks","list","Signup","addPlaceholderText","component","label","input","partial","substr","indexOf","Search","customComponents","Timer","focusIn","setTimeout","typeOutPlaceholderText","focusOut","clear","setInterval","searchText","resetSearchInput","activeClass","buttons","menu","close","search","flyout","header","Toolbar","timer","addSearchLogic","FocusTrap","addFocusTrapLogic","searchComponent","flyoutComponent","initialFocus","closeButton","clickHandler","isActive","isSearch","searchButton","deactivate","keyDownHandler","getCode","Escape","menuButton","menuBlock","menuParent","activeTrailClass","expandActiveMenus","closeUnnestedMenus","focusout","hover","delay","in","out","Navigation","menuParents","submenu","link","firstElementChild","innerText","button","insertBefore","nextSibling","lastElementChild","TickTock","Tabbable","tabbable","collapse","expand","userInteractionHandler","mobileState","openSubmenus","openSubmenu","expandElement","expandSubmenu","collapseElement","collapseSubmenu","states","active","open","removeAttribute","expanded","clearAll","keyDownEventDispatcher","mouseDownEventDispatcher","focusOutEventDispatcher","mouseOverHandler","mouseOutHandler","Enter","relatedTarget","ModaalTransformer","node","old","type","isVideo","new","cloneNode","replaceChild","isGallery","caption","modaal","start_open","animation","outer_controls","nodeSelector","Modaal","parent","selector","child","ConvertToModaal","Anchors","anchor","location","hash","goToCurrentAnchor","href","destination","scrollToDestination","scrollTo","elementToScroll","verticalOffset","maxDuration","minDuration","offsetSettings","config","Flickity","setJQuery","jQuery","fade","autoPlay","wrapAround","arrowShape","Gallery","shouldBuildSlider","slider","buildSlider","addControls","setPlayState","onReady","player","state","setPauseState","playPauseButton","playPauseHandler","sliderDots","playPlayer","stopPlayer","slides","children","photoGalleryPID","a11y","tables","newTab","anchors","sitemap","nodeMeta","messages","galleries","itemAppearsIn","expandingDates","slideshowIcons","lexiconGlossary","overtakeLightbox","subtermOverviews","fullNodeRelatedLinks","bundledReferringContent","DDTemplates","isNodeView","isNode","defineApplicableBehaviors","is","view","term","global","addEnabledBehavior","$appearingNav","find","addClass","each","$block","attr","wrap","animate","opacity","pattern","match","a","$node","$items","removeClass","$visible","map","getComputedStyle","getPropertyValue","filter","b","meta","$meta","$dates","$link","toggleClass","eq","$container","appendTo","join","$img","before","$map","$nav","digitaldcoreCreateSiteMap","letter","replace","html","toUpperCase","closest","notValid","storageKey","paginationLabel","filtersLabel","filterByPostTypes","useFilters","filters","defaultFilters","All","CalendarFeed","getFilters","buildCalendar","createFilters","$posts","$group","currentYear","currentMonth","post","$post","oDates","month","mon","day","dow","year","toLowerCase","$year","$tile","markup","isSameMonth","isSameDay","isSameYear","filterHandler","next","$filters","types","ids","getDefaultData","getCustomizedData","currentFilter","sessionStorage","getItem","decodeURIComponent","$filter","$show","inArray","not","stop","setItem","$shown","nextUntil","$ctrl","trigger","_types","_ids","regex","test","exec","indexes","aTypes","aResults","parseInt","sort","FixNavigation","process","$parent","$children","buttonLink","TermNavigation","standardize","addLogic","level","parentElement","Home","mainMenu","footer","termNavigation"],"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([41,1]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","export default class HomeHero {\n constructor(element) {\n this.element = element;\n this.ready();\n }\n\n ready() {\n this.element.classList.add('ready');\n }\n}\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://dev-cjac.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 */\nexport const offsets = {\n // offsets for each breakpoint\n mobile: 0,\n tablet: 0,\n desktop: 0,\n larger: 0,\n // other offsets for extended functionality\n sidebar: 85,\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: 1199,\n },\n larger: {\n min: 1200,\n max: Infinity,\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 this.current().max < this.get('desktop').min;\n },\n});\n\n// Create a new instance with our configured breakpoints.\nBreakpoints(breakpoints);\n\nexport default Breakpoints;\n","import Keyboard from 'keyboard-key';\nimport Breakpoints from './Breakpoints';\n\nexport default class HomeTabs {\n constructor(element) {\n this.element = element;\n this.createTabs();\n this.listen();\n this.ready();\n }\n\n createTabs() {\n // Create tablist container.\n const tablist = document.createElement('div');\n tablist.className = 'home-tablist';\n tablist.setAttribute('role', 'tablist');\n tablist.setAttribute('aria-label', 'Recent news, upcoming events, and more');\n this.element.prepend(tablist);\n\n // Iterate all content making tabs and tabpanel relations.\n this.element.querySelectorAll('.home-tabs-block').forEach((panel, i) => {\n // Extract title from block title in block.\n const title = panel.querySelector('.block-title');\n\n // Create each individual tab.\n const tab = document.createElement('button');\n tab.id = `home-tabs-tab--${i}`;\n tab.className = 'tab';\n tab.setAttribute('role', 'tab');\n tab.setAttribute('index', i);\n tab.setAttribute('tabindex', '-1');\n tab.setAttribute('aria-selected', false);\n tab.setAttribute('aria-controls', `home-tabs-content--${i}`);\n tab.textContent = title ? title.textContent : 'No title found';\n tab.addEventListener('click', this.change.bind(this));\n tablist.appendChild(tab);\n\n // Add attributes to the associated content.\n panel.id = `home-tabs-content--${i}`;\n panel.setAttribute('role', 'tabpanel');\n panel.setAttribute('tabindex', '0');\n panel.setAttribute('aria-labelledby', `home-tabs-tab--${i}`);\n });\n\n // Set initial tablist orientation.\n this.setOrientation();\n }\n\n setInactiveState() {\n this.tabs.forEach((tab) => {\n tab.classList.remove('active');\n tab.setAttribute('tabindex', '-1');\n tab.setAttribute('aria-selected', 'false');\n const panel = document.getElementById(tab.getAttribute('aria-controls'));\n if (panel) {\n panel.classList.remove('active');\n }\n });\n }\n\n setActiveState(tab, setFocus) {\n this.setInactiveState();\n tab.classList.add('active');\n tab.setAttribute('tabindex', '0');\n tab.setAttribute('aria-selected', 'true');\n this.currentIndex = Number(tab.getAttribute('index'));\n const panel = document.getElementById(tab.getAttribute('aria-controls'));\n if (panel) {\n panel.classList.add('active');\n }\n if (setFocus) {\n tab.focus();\n }\n }\n\n\n change(event) {\n this.setActiveState(event.currentTarget);\n this.setOrientation();\n }\n\n setOrientation() {\n // Manages the orientation of the tablist.\n Breakpoints.on('desktop larger', {\n enter: () => {\n this.tablist.setAttribute('aria-orientation', 'horizontal');\n },\n });\n Breakpoints.on('mobile tablet', {\n enter: () => {\n this.tablist.setAttribute('aria-orientation', 'vertical');\n },\n });\n }\n\n keydownHandler(event) {\n const key = Keyboard.getKey(event);\n let activate = false;\n\n switch (key) {\n case 'Home':\n this.currentIndex = 0;\n activate = true;\n break;\n\n case 'End':\n this.currentIndex = this.tabs.length - 1;\n activate = true;\n break;\n\n case 'ArrowLeft':\n this.currentIndex -= 1;\n activate = true;\n break;\n\n case 'ArrowRight':\n this.currentIndex += 1;\n activate = true;\n break;\n\n case 'ArrowUp':\n if (this.tablist.getAttribute('aria-orientation') === 'vertical') {\n this.currentIndex -= 1;\n activate = true;\n }\n break;\n\n case 'ArrowDown':\n if (this.tablist.getAttribute('aria-orientation') === 'vertical') {\n this.currentIndex += 1;\n activate = true;\n }\n break;\n\n default: // Do nothing.\n }\n\n if (activate) {\n event.preventDefault();\n this.setActiveState(this.tabs.item(this.currentIndex), true);\n }\n }\n\n listen() {\n // Listens for key presses.\n this.tablist.addEventListener('keydown', this.keydownHandler.bind(this));\n }\n\n ready() {\n // Set the ready state of the container.\n this.element.classList.add('ready');\n\n // Initialize the first tab.\n this.tabs.item(0).click();\n }\n\n get tablist() {\n return this.element.querySelector('[role=\"tablist\"]');\n }\n\n get tabs() {\n return this.element.querySelectorAll('[role=\"tab\"]');\n }\n\n get panels() {\n return this.element.querySelectorAll('[role=\"tabpanel\"]');\n }\n\n get currentIndex() {\n return this.index;\n }\n\n set currentIndex(index) {\n // Set currentIndex\n if (index >= this.tabs.length) {\n this.index = 0;\n } else if (index < 0) {\n this.index = this.tabs.length - 1;\n } else {\n this.index = index;\n }\n }\n}\n","/* eslint-disable class-methods-use-this */\nimport dayjs from 'dayjs';\nimport formatter from 'dayjs/plugin/customParseFormat';\n\n// Extend dayjs to parse our custom date format.\ndayjs.extend(formatter);\n\n// Used to correctly create a dayjs instance from our custom date format.\nconst DATE_FORMAT = 'MMMM D, YYYY - h:mma';\n\nexport default class HomeDates {\n constructor(element) {\n this.element = element;\n this.dates.forEach((date) => {\n const eventDate = date.classList.contains('event-date');\n const time = date.querySelector('time');\n if (!time) return;\n if (eventDate) {\n this.formatEventDate(time);\n } else {\n this.formatDate(time);\n }\n });\n }\n\n formatDate(element) {\n const dateObj = dayjs(element.getAttribute('datetime'));\n element.innerHTML = dateObj.format('M.D.YY');\n }\n\n formatEventDate(element) {\n const datetime = element.getAttribute('datetime');\n const components = {\n single: element.querySelector('.date-display-single'),\n start: element.querySelector('.date-display-start'),\n end: element.querySelector('.date-display-end'),\n };\n\n let output = '';\n\n if (components.single) {\n if (components.start && components.end) {\n output = `${dayjs(datetime).format('M.D.YY')} · ${components.start.textContent} - ${components.end.textContent}`;\n } else {\n output = dayjs(datetime).format('M.D.YY');\n }\n } else {\n const startObj = dayjs(components.start.textContent, DATE_FORMAT);\n const endObj = dayjs(components.end.textContent, DATE_FORMAT);\n output = `${startObj.format('M.D.YY · h:mma')} - ${endObj.format('M.D.YY · h:mma')}`;\n }\n\n // Output the assembled content.\n element.innerHTML = output;\n }\n\n get dates() {\n return this.element.querySelectorAll('.post-date');\n }\n}\n","import InViewport from 'in-viewport';\n\nexport default class HomeStats {\n constructor(element) {\n this.element = element;\n this.preprocess();\n this.listen();\n this.setReadyState();\n }\n\n preprocess() {\n const svg = '';\n this.element.querySelectorAll('.node-content h3').forEach((heading) => {\n const container = document.createElement('div');\n const paragraph = heading.nextElementSibling;\n heading.parentNode.appendChild(container);\n container.innerHTML = svg;\n container.appendChild(heading);\n container.appendChild(paragraph);\n });\n }\n\n listen() {\n const target = this.element.querySelector('.node-content');\n if (target) {\n InViewport(target, this.setVisibleState.bind(this));\n }\n }\n\n setVisibleState() {\n this.element.classList.add('visible');\n }\n\n setReadyState() {\n this.element.classList.add('ready');\n }\n}\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","/* eslint-disable class-methods-use-this */\nimport 'whatwg-fetch';\nimport Drupal from './Drupal';\n\nexport default class HomeSocial {\n constructor(element) {\n this.element = element;\n this.fail = this.fail.bind(this);\n this.success = this.success.bind(this);\n this.fetchContent();\n }\n\n fetchContent() {\n const request = new Request(Drupal.settings.ddTwitterFeed.getTweetsURI, {\n method: 'GET',\n });\n\n // Request homepage.\n return fetch(request)\n .then(this.validate)\n .then(this.success)\n .catch(this.fail);\n }\n\n // Validate response from our request.\n validate(response) {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n return response.text();\n }\n\n // Display an error message if the request failed.\n fail(error) {\n throw Error(error);\n }\n\n success(result) {\n // Adds our fetched content to our container.\n const content = this.element.querySelector('.twitter-feed__content');\n if (content) {\n content.innerHTML = result;\n }\n\n // Set blocks ready state.\n this.setReadyState();\n }\n\n setReadyState() {\n this.element.classList.add('ready');\n }\n}\n","export default class HomeTrending {\n constructor(element) {\n this.element = element;\n this.reorderLinks();\n this.setReadyState();\n }\n\n reorderLinks() {\n const more = this.element.querySelector('.link-read-more');\n if (more) {\n more.parentNode.appendChild(more);\n }\n }\n\n setReadyState() {\n this.element.classList.add('ready');\n }\n}\n","import HomeHero from './HomeHero';\nimport HomeTabs from './HomeTabs';\nimport HomeDates from './HomeDates';\nimport HomeStats from './HomeStats';\nimport HomeSocial from './HomeSocial';\nimport HomeTrending from './HomeTrending';\n\nexport default class Homepage {\n constructor() {\n this.context = document;\n this.hero();\n this.trending();\n this.dates();\n this.stats();\n this.social();\n this.tabs();\n }\n\n // Home Hero Block\n hero() {\n const block = this.context.querySelector('.home-hero.block');\n if (block && !block.HomeHero) {\n block.HomeHero = new HomeHero(block);\n }\n }\n\n // Home Trending Block\n trending() {\n const block = this.context.querySelector('.home-trending.block');\n if (block && !block.HomeTrending) {\n block.HomeTrending = new HomeTrending(block);\n }\n }\n\n // Home News & Events dates display\n dates() {\n this.context.querySelectorAll('.home-tabs-block .meta').forEach((block) => {\n if (!block.HomeDates) {\n block.HomeDates = new HomeDates(block);\n }\n });\n }\n\n\n // Home Stats Block\n stats() {\n const block = this.context.querySelector('.home-stats.block');\n if (block && !block.HomeStats) {\n block.HomeStats = new HomeStats(block);\n }\n }\n\n // Homepage Tabs\n tabs() {\n const region = this.context.querySelector('.page-bottom .layout');\n if (region && !region.HomeTabs) {\n region.HomeTabs = new HomeTabs(region);\n }\n\n // Creates a viewport for the tabbed blocks container.\n const viewport = document.createElement('div');\n viewport.className = 'home-tabs-viewport';\n region.append(viewport);\n\n // Creates a container for all the tabbed blocks.\n const container = document.createElement('div');\n container.className = 'home-tabs-container';\n viewport.append(container);\n\n // Add helper class to indicate block has a featured image or not.\n this.context.querySelectorAll('.home-tabs-block').forEach((block) => {\n const nodes = block.querySelectorAll('.node-home-featured');\n if (nodes.length && nodes.item(0).classList.contains('has-image')) {\n block.classList.add('image-mode');\n }\n\n // Add the block to our container.\n container.appendChild(block);\n });\n }\n\n // Homepage Social Feed\n social() {\n const block = this.context.querySelector('.twitter-feed');\n if (block && !block.HomeSocial) {\n block.HomeSocial = new HomeSocial(block);\n }\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 Change from './Change';\nimport { offsets } from './.config';\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 Headroom from 'headroom.js';\nimport Breakpoints from './Breakpoints';\nimport { offsets } from './.config';\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 $ from 'jquery';\nimport Change from './Change';\n\nconst defaults = {\n speed: 0.25,\n};\n\nexport default class Parallax {\n constructor(element, options) {\n this.$element = $(element);\n this.settings = { ...defaults, ...options };\n this.register();\n this.update();\n }\n\n register() {\n Change.onChange(this.update.bind(this));\n }\n\n update() {\n const offset = window.pageYOffset * this.settings.speed;\n this.$element.css('transform', `translate3d(0, ${offset}px, 0)`);\n }\n}\n","import Parallax from './Parallax';\n\nexport default class Banner {\n constructor(element) {\n this.element = element;\n\n // Quit if there isn't an image.\n if (!this.image) return;\n\n // Add parallax effect.\n this.parallax = new Parallax(this.image);\n\n // Register the existance of a banner to aid page theme.\n document.body.classList.add('has-banner');\n\n // Set ready state of block.\n this.element.classList.add('ready');\n }\n\n // Returns the first image found\n get image() {\n return this.element.querySelector('figure img');\n }\n}\n","import Change from './Change';\n\n/**\n * SmartFooter\n * Offsets a height to make room for the absolutely placed footer.\n *\n * @param element {HTML Element} Footer element to base height offset from.\n * @param reactiveElement {HTML Element} Element that should be offset by the height calculated.\n * @exports {Class} SmartFooter instance\n */\nexport default class SmartFooter {\n constructor(element, reactiveElement) {\n this.element = element;\n this.reactiveElement = reactiveElement;\n this.register();\n this.update();\n this.ready();\n }\n\n register() {\n // Listen for change event.\n Change.onChange(this.update.bind(this));\n }\n\n update() {\n // Update height on change event.\n const height = this.element.offsetHeight;\n this.reactiveElement.style.paddingBottom = `${height}px`;\n }\n\n ready() {\n // Set ready state of passed in footer element.\n this.element.classList.add('ready');\n }\n}\n","import SmartFooter from './SmartFooter';\n\nexport default class Footer {\n constructor(element) {\n this.element = element;\n\n if (this.page) {\n this.SmartFooter = new SmartFooter(this.element, this.page);\n }\n\n if (this.footerLinks && this.socialLinks) {\n this.extend();\n }\n }\n\n extend() {\n const list = this.footerLinks.querySelector('ul.list');\n const item = document.createElement('li');\n item.classList.add('item');\n list.appendChild(item);\n item.appendChild(this.socialLinks);\n }\n\n get footerLinks() {\n return this.element.querySelector('.footer-links.block');\n }\n\n get socialLinks() {\n return this.element.querySelector('.social-links.block');\n }\n\n // eslint-disable-next-line class-methods-use-this\n get page() {\n return document.querySelector('.page');\n }\n}\n","export default class Signup {\n constructor(element) {\n this.element = element;\n this.addPlaceholderText();\n }\n\n addPlaceholderText() {\n this.element.querySelectorAll('.webform-component').forEach((component) => {\n const label = component.querySelector('label');\n const input = component.querySelector('input');\n if (label && input) {\n const partial = label.textContent.substr(0, label.textContent.indexOf(':'));\n input.setAttribute('placeholder', partial);\n label.classList.add('sr-only');\n }\n });\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 Timer from 'tick-tock';\nimport Search from './Search';\n\nconst defaults = {\n activeClass: 'menu-active',\n buttons: {\n menu: '.menu-icon',\n close: '.close-button',\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.timer = new Timer();\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.flyoutComponent, {\n initialFocus: this.closeButton,\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.closeButton) this.closeButton.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\n this.FocusTrap.activate();\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 this.timer.clear('deactivatedFocus');\n this.timer.setTimeout('activatedFocus', () => {\n this.flyoutComponent.focus();\n }, 250);\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.closeButton) this.closeButton.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 this.timer.clear('activatedFocus');\n this.timer.setTimeout('deactivatedFocus', () => {\n this.menuButton.focus();\n }, 250);\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.closeButton) this.closeButton.addEventListener('click', this.deactivate.bind(this));\n if (this.searchButton) this.searchButton.addEventListener('click', this.clickHandler.bind(this));\n\n // Close out flyout if the whitespace is clicked.\n this.flyoutComponent.addEventListener('click', (event) => {\n if (event.target === this.flyoutComponent) {\n this.deactivate();\n }\n });\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 closeButton() {\n return this.flyoutComponent.querySelector(this.settings.buttons.close);\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 tabbable from 'tabbable';\nimport TickTock from 'tick-tock';\nimport Keyboard from 'keyboard-key';\nimport Breakpoints from './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: true,\n closeUnnestedMenus: false,\n focusout: false,\n hover: false,\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 $ from 'jquery';\nimport 'modaal';\n\nexport default class ModaalTransformer {\n constructor(node, settings) {\n this.old = node;\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 node 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 Modaal {\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","import Timer from 'tick-tock';\nimport scrollTo from 'animated-scroll-to';\nimport Breakpoints from './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 });\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 larger: -(config.desktop + config.padding),\n };\n }\n}\n","import jQuery from 'jquery';\nimport Flickity from 'flickity';\n\n// Register our jquery version with Flickity.\nFlickity.setJQuery(jQuery);\n\nexport default Flickity;\n","import Flickity from './Flickity';\nimport 'flickity-fade';\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, options) {\n this.element = element;\n this.settings = { ...defaults, ...options };\n\n // Exit if we don't have more than one slide.\n if (!this.shouldBuildSlider) return this.ready();\n\n // Build Slider\n this.slider = this.buildSlider();\n\n // Add play/pause controls\n this.addControls();\n\n // Set initial state of the gallery\n this.setPlayState();\n\n // Add listeners\n this.listen();\n\n // Ready component\n this.ready();\n }\n\n ready() {\n // Append ready state.\n this.element.classList.add('ready');\n }\n\n buildSlider() {\n return new Flickity(this.element, this.settings);\n }\n\n onReady() {\n this.setPlayState();\n }\n\n onChange() {\n if (this.slider.player.state === 'stopped') {\n this.setPauseState();\n }\n }\n\n listen() {\n // Keep track of current state of gallery\n this.slider.on('change', this.onChange.bind(this));\n }\n\n addControls() {\n const item = document.createElement('li');\n this.playPauseButton = document.createElement('button');\n this.playPauseButton.className = 'button--play-pause';\n this.playPauseButton.innerHTML = '';\n this.playPauseButton.addEventListener('click', this.playPauseHandler.bind(this));\n item.appendChild(this.playPauseButton);\n this.sliderDots.appendChild(item);\n }\n\n playPauseHandler() {\n if (this.slider.player.state === 'stopped') {\n this.slider.playPlayer();\n this.setPlayState();\n } else {\n this.slider.stopPlayer();\n this.setPauseState();\n }\n }\n\n setPlayState() {\n this.playPauseButton.setAttribute('aria-label', 'Stop the slider\\'s autoscroll');\n this.element.classList.add('playing');\n }\n\n setPauseState() {\n this.playPauseButton.setAttribute('aria-label', 'Start the slider\\'s autoscroll');\n this.element.classList.remove('playing');\n }\n\n get shouldBuildSlider() {\n return this.slides.length > 1;\n }\n\n get sliderDots() {\n return this.element.querySelector('.flickity-page-dots');\n }\n\n get slides() {\n return this.element.children;\n }\n}\n","/* eslint-disable class-methods-use-this */\nimport $ from 'jquery';\nimport Drupal from './Drupal';\nimport Modaal from './Modaal';\nimport Anchors from './Anchors';\nimport Gallery from './Gallery';\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 const selector = '.field-image a';\n element.Modaal = new Modaal(element, selector);\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 $ 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\n ready() {\n $(this.element).addClass('ready');\n }\n}\n","import Navigation from './Navigation';\nimport Breakpoints from './Breakpoints';\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 'focus-visible';\nimport Keyboard from 'keyboard-key';\nimport Home from './Home';\nimport Sticky from './Sticky';\nimport Drupal from './Drupal';\nimport Header from './Header';\nimport Banner from './Banner';\nimport Footer from './Footer';\nimport Signup from './Signup';\nimport Toolbar from './Toolbar';\nimport Navigation from './Navigation';\nimport DDTemplates from './DDTemplates';\nimport CalendarFeed from './CalendarFeed';\nimport FixNavigation from './FixNavigation';\nimport TermNavigation from './TermNavigation';\nimport FetchSourceImages from './FetchSourceImages';\n\n// Add the theme behaviors\nDrupal.behavior(() => {\n // DD Template Behaviors\n if (!document.body.DDTemplates) {\n document.body.DDTemplates = new DDTemplates();\n }\n\n // Add Homepage functionality\n if (document.body.classList.contains('front')) {\n if (!document.body.Home) {\n document.body.Home = new Home();\n }\n }\n\n // Banners\n document.querySelectorAll('.banner.block:not(.placeholder-block)').forEach((element) => {\n if (!element.Banner) {\n element.Banner = new Banner(element);\n document.body.classList.add('has-banner');\n }\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 // Sticky sidebars\n document.querySelectorAll('.page-sidebar').forEach((element) => {\n if (!element.Sticky) {\n element.Sticky = new Sticky(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 document.querySelectorAll('.toolbar').forEach((element) => {\n if (!element.Toolbar) {\n element.Toolbar = new Toolbar(element);\n }\n });\n\n // Fixed Header using Headroom.js\n const header = document.querySelector('.page-header');\n if (header && !header.Header) {\n header.Header = new Header(header);\n header.classList.add('ready');\n }\n\n // Footer\n const footer = document.querySelector('.page-footer');\n if (footer && !footer.Footer) {\n footer.Footer = new Footer(footer);\n }\n\n // Footer Signup\n document.querySelectorAll('.footer-signup').forEach((block) => {\n if (!block.Signup) {\n block.Signup = new Signup(block);\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 // Adds support to back out of an active menu when `ESC` is pressed.\n document.addEventListener('keydown', (event) => {\n const keyCode = Keyboard.getCode(event);\n if (keyCode === Keyboard.Escape) {\n document.body.classList.remove('menu-active');\n }\n })\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":""}