{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/config.js","webpack:///./src/js/core/Drupal.js","webpack:///./src/js/components/Flickity.js","webpack:///./src/js/components/PlayPause.js","webpack:///./src/js/components/Breakpoints.js","webpack:///./src/js/components/ProgressLoop.js","webpack:///./src/js/components/Slider.js","webpack:///./src/js/core/Gallery.js","webpack:///./src/js/core/Anchors.js","webpack:///./src/js/core/ModaalTransformer.js","webpack:///./src/js/core/Lightbox2Modaal.js","webpack:///./src/js/core/DDTemplates.js","webpack:///./src/js/core/CalendarFeed.js","webpack:///./src/js/core/FixNavigation.js","webpack:///./src/js/components/Navigation.js","webpack:///./src/js/core/TermNavigation.js","webpack:///./src/js/core/AccordionWrap.js","webpack:///./src/js/core/AccordionFix.js","webpack:///./src/js/core/AccordionContainer.js","webpack:///./src/js/core/BackgroundImage.js","webpack:///./src/js/components/Headroom.js","webpack:///./src/js/components/Placeholder.js","webpack:///./src/js/utils/Change.js","webpack:///./src/js/utils/Sticky.js","webpack:///./src/js/utils/Visible.js","webpack:///./src/js/header/Search.js","webpack:///./src/js/header/Toolbar.js","webpack:///./src/js/header/Headerlinks.js","webpack:///./src/js/footer/SignUp.js","webpack:///./src/js/home/Hero.js","webpack:///./src/js/components/Redirect.js","webpack:///./src/js/home/Quicklinks.js","webpack:///./src/js/home/Featured.js","webpack:///./src/js/home/Tabs.js","webpack:///./src/js/components/FixDate.js","webpack:///./src/js/home/TabBlock.js","webpack:///./src/js/home/WhatsHappening.js","webpack:///./src/js/home/GetInvolved.js","webpack:///./src/js/templates/FileListTemplate.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","layout","max_width","gutters","base","mobile","tablet","desktop","desktop_xl","desktop_xxl","breakpoints","split","heights","minimized","headerOffsets","offsets","sidebar","padding","units","offset","gutter","breakpoint","header_height","paths","theme","img","favicon","unitize","suffix","obj","output","entries","forEach","prop","propName","replace","Number","isFinite","isNumber","variables","rekey","domain","behaviors","documentIsReady","Drupal","behavior","fn","$","Callbacks","document","ready","fire","DrupalAMD","context","add","this","FlickityCore","setJQuery","Flickity","playPlayer","super","dispatchEvent","pausePlayer","stopPlayer","destroy","defaults","playPause","wrapperTag","attachTo","shape","PlayPause","constructor","element","slider","options","settings","merge","playPauseButton","addButton","listen","button","createElement","className","innerHTML","addEventListener","playPauseHandler","wrapper","appendChild","destination","classList","contains","setPlayingState","setAttribute","setPausedState","remove","on","off","removeEventListener","parentNode","querySelector","min","max","Infinity","Breakpoints","current","progressLoop","ProgressProgressLoop","addProgressLoop","time","autoPlay","speed","progress","style","animationDuration","start","stop","change","player","state","restart","offsetWidth","pauseAutoPlayOnHover","responsive","Slider","dtabs","underTab","querySelectorAll","photoGallery","containsPhotoGallery","el","shouldBuildSlider","addResponsiveSupport","update","build","PlayPauseControls","ProgressLoop","restore","Promise","resolve","then","disabled","group","undefined","groupCells","slides","keys","bp","bpSettings","baseSettings","children","fade","wrapAround","arrowShape","Gallery","Anchors","id","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","offsetSettings","config","ModaalTransformer","old","type","imageURL","isVideo","removeAttribute","new","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","is","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","dates","container","text","icon","insertAdjacentElement","expanded","date","join","image","$img","before","$map","$nav","digitaldcoreCreateSiteMap","letter","html","toUpperCase","Modaal","closest","notValid","storageKey","paginationLabel","filtersLabel","filterByPostTypes","useFilters","filters","defaultFilters","All","CalendarFeed","$element","getFilters","buildCalendar","createFilters","$posts","$group","currentYear","currentMonth","post","$post","oDates","datetime","dateObj","dayjs","month","format","mon","day","dow","year","toLowerCase","append","$year","$tile","markup","isSameMonth","end","isSameDay","isSameYear","appendTo","filterHandler","next","toggleClass","$filters","types","ids","getDefaultData","getCustomizedData","currentFilter","sessionStorage","getItem","decodeURIComponent","$filter","$show","inArray","not","setItem","$shown","nextUntil","$ctrl","trigger","_types","_ids","classes","regex","test","exec","indexes","aTypes","aResults","parseInt","index","sort","FixNavigation","process","$parent","$children","menuBlock","menuParent","activeClass","activeTrailClass","expandActiveMenus","closeUnnestedMenus","focusout","hover","delay","in","out","Navigation","menu","preprocess","menuParents","components","submenu","link","firstElementChild","innerText","insertBefore","nextSibling","lastElementChild","TickTock","Tabbable","tabbable","collapse","expand","userInteractionHandler","mobileState","openSubmenus","openSubmenu","expandElement","expandSubmenu","collapseElement","collapseSubmenu","states","active","open","clearAll","keyDownEventDispatcher","mouseDownEventDispatcher","focusOutEventDispatcher","mouseOverHandler","mouseOutHandler","Keyboard","getCode","Enter","Escape","relatedTarget","TermNavigation","standardize","addLogic","level","parentElement","list","buttonLink","AccordionWrap","init","getClasses","status","getStatus","addBack","wrapAll","$classes","hasClass","elemClasses","val","substring","$status","AccordionFix","assign","setVert","stopPropagation","isVisible","topOffset","top","documentElement","scrollTop","e","elementTop","elementBottom","outerHeight","viewportTop","viewportBottom","elem","sourceSelector","destSelector","isPseudo","BackgroundImage","addBackgroundImage","getSource","src","css","tolerance","initial","pinned","unpinned","notTop","bottom","notBottom","onPin","onUnpin","onTop","onNotTop","onBottom","onNotBottom","Headroom","headroom","rebuild","HeadroomCore","trim","Placeholder","label","ticking","callbacks","request","requestAnimationFrame","onChange","callback","Sticky","register","Change","innerHeight","offsetHeight","Visible","visibleHandler","InViewport","input","Search","customComponents","focusIn","typeOutPlaceholderText","focusOut","setInterval","searchText","resetSearchInput","buttons","search","menuClose","flyout","header","Toolbar","addSearchLogic","FocusTrap","addFocusTrapLogic","searchComponent","headerComponent","initialFocus","flyoutComponent","isActive","isSearch","searchButton","deactivate","activate","keyDownHandler","menuButton","menuCloseButton","Headerlinks","$body","getBody","homeHeaderlink","relocate","mobileActive","desktopActive","outerWidth","prependTo","linkHtml","clone","SignUp","placeholder","pageDots","adaptiveHeight","SessionTestimonials","imgBg","banner","BgImage","linkLocation","Redirect","url","Quicklinks","redirect","Featured","bgImg","wrapperElem","tabTitle","tabsQty","Tabs","tabs","tabWrapper","clickable","tmp","implementation","createHTMLDocument","siblings","minHeight","hasStartTime","hasEndTime","FixDates","fixDate","hasPostDate","isEvent","isTwitterFeed","dateContent","childNodes","extractDate","show","tweetContent","nodeValue","newDateString","isMultiDay","isMultiTime","startDate","endDate","startTime","extractTime","endTime","eventContent","dateText","isEnd","newDateArr","newMonth","arrLength","hasTime","includes","abbrevMonth","timeText","newTimeArr","newHour","temp","newMinute","ampm","WhatsNew","FixDate","WhatsHappening","marginTop","marginBottom","FileListTemplate","reset","selectList","ddHover","hasAttribute","homeBehaviors","Hero","TabBlock","GetInvolved","downloadToggle","headerlinks","links","Banner","accordionWrap","accordionContainer","AccordionContainer"],"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([39,1]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","// -----------------------------------------------------------------------------\n// Domain to use with the import/export script\n// -----------------------------------------------------------------------------\n\nconst domain = 'https://live-scag.pantheonsite.io';\n\n// -----------------------------------------------------------------------------\n// Max width of layout container.\n// -----------------------------------------------------------------------------\n\nconst layout = {\n  max_width: 1580,\n};\n\n// -----------------------------------------------------------------------------\n// Theme Gutters\n// -----------------------------------------------------------------------------\n\nconst gutters = {\n  base: 20,\n  mobile: 36,\n  tablet: 80,\n  desktop: 40,\n  desktop_xl: 83,\n  desktop_xxl: 'auto',\n};\n\n// -----------------------------------------------------------------------------\n// Theme Breakpoints\n// -----------------------------------------------------------------------------\n\nconst breakpoints = {\n  base: 0,\n  mobile: 375,\n  tablet: 768,\n  split: 992,\n  desktop: 1025,\n  desktop_xl: 1366,\n  desktop_xxl: layout.max_width + gutters.desktop_xl * 2,\n};\n\n// -----------------------------------------------------------------------------\n// Header heights for each breakpoint.\n// -----------------------------------------------------------------------------\n\nconst heights = {\n  mobile: 120,\n  tablet: 120,\n  desktop: 250,\n  desktop_xl: 250,\n  minimized: 90,\n};\n\nconst headerOffsets = {\n  mobile: heights.mobile,\n  tablet: heights.mobile,\n  desktop: heights.mobile,\n  desktop_xl: heights.mobile,\n};\n\n// -----------------------------------------------------------------------------\n// Centralized offsets used by various components.\n// -----------------------------------------------------------------------------\n\nconst offsets = {\n  sidebar: 35,\n  padding: 20,\n  mobile: heights.mobile,\n  tablet: heights.tablet,\n  desktop: heights.desktop,\n  desktop_xl: heights.desktop_xl,\n};\n\n// -----------------------------------------------------------------------------\n// Measurement Units Matrix\n// @warning This feature is experimental and needs a great deal of thought\n// when changing some of the units. This is due to calculations being made that\n// assume a pixel expression.\n// (eg. media queries based on breakpoint and gutter values)\n// -----------------------------------------------------------------------------\n\nconst units = {\n  layout: 'px',\n  offset: 'px',\n  gutter: 'px',\n  breakpoint: 'px',\n  header_height: 'px',\n};\n\n// -----------------------------------------------------------------------------\n// Theme paths.\n// -----------------------------------------------------------------------------\n\nconst paths = {\n  theme: '../../../../src/less',\n  img: '/sites/default/themes/dtheme/img',\n  favicon: '/sites/default/themes/dtheme/icons',\n};\n\n// -----------------------------------------------------------------------------\n// isNumber utility which checks to see if a value is a number,\n// if it is it appends the appriote unit to the value.\n// -----------------------------------------------------------------------------\n\nconst isNumber = (value) => typeof value === 'number' && Number.isFinite(value);\n\n// -----------------------------------------------------------------------------\n// Unitize JS objects to CSS units for use within a CSS preprocessor.\n// -----------------------------------------------------------------------------\n\nconst unitize = (suffix, obj) => {\n  const output = {};\n  Object.entries(obj).forEach(([prop, value]) => {\n    const propName = `${prop.replace('_', '-')}-${suffix.replace('_', '-')}`;\n    output[propName] = isNumber(value) ? `${value}${units[suffix]}` : value;\n  });\n  return output;\n};\n\n// -----------------------------------------------------------------------------\n// Adds a suffix passed to each object key, then returns the transformed object.\n// -----------------------------------------------------------------------------\n\nconst rekey = (suffix, obj) => {\n  const output = {};\n  Object.entries(obj).forEach(([prop, value]) => {\n    const propName = `${prop.replace('_', '-')}-${suffix.replace('_', '-')}`;\n    output[propName] = value;\n  });\n  return output;\n};\n\n// -----------------------------------------------------------------------------\n// Prep and merge together all variables for the preprocessor.\n// -----------------------------------------------------------------------------\n\nconst variables = {\n  ...rekey('path', paths),\n  ...unitize('layout', layout),\n  ...unitize('offset', offsets),\n  ...unitize('headerOffset', headerOffsets),\n  ...unitize('gutter', gutters),\n  ...unitize('header_height', heights),\n  ...unitize('breakpoint', breakpoints),\n};\n\n// -----------------------------------------------------------------------------\n// Exports configuration.\n// -----------------------------------------------------------------------------\n\nmodule.exports = {\n  domain,\n  paths,\n  units,\n  layout,\n  heights,\n  offsets,\n  headerOffsets,\n  gutters,\n  breakpoints,\n  variables,\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","import $ from 'jquery';\nimport FlickityCore from 'flickity';\n\n// Register our jquery version with Flickity.\nFlickityCore.setJQuery($);\n\nclass Flickity extends FlickityCore {\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 Flickity;\n","import merge from 'deepmerge';\n\nconst defaults = {\n  playPause: {\n    wrapperTag: 'li',\n    attachTo: '.flickity-page-dots',\n    shape: '<svg xmlns=\"http://www.w3.org/2000/svg\" class=\"play-pause-icon\" width=\"30\" height=\"30\" viewBox=\"0 0 30 30\"><title>Play / Pause button</title><path class=\"play\" d=\"M26.27,13.74,9.2,4.19a1.5,1.5,0,0,0-2,.51,1.43,1.43,0,0,0-.2.73V24.57A1.44,1.44,0,0,0,8.45,26a1.61,1.61,0,0,0,.75-.19l17.07-9.6a1.4,1.4,0,0,0,.53-2A1.55,1.55,0,0,0,26.27,13.74Z\"/><g class=\"pause\"><path d=\"M11.72,24H8.28A1.24,1.24,0,0,1,7,22.79V7.26A1.27,1.27,0,0,1,8.28,6h3.44A1.27,1.27,0,0,1,13,7.26V22.79A1.24,1.24,0,0,1,11.75,24Z\"/><path d=\"M21.72,24H18.28A1.24,1.24,0,0,1,17,22.79V7.26A1.27,1.27,0,0,1,18.28,6h3.44A1.27,1.27,0,0,1,23,7.26V22.79A1.27,1.27,0,0,1,21.72,24Z\"/></g></svg>',\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 Breakpoints from 'breakpoints-js/dist/breakpoints';\nimport { breakpoints } from '../../config';\n\n/**\n * Min/Max values based on breakpoints set above. These min/max values are uses\n */\nconst settings = {\n  mobile: {\n    min: breakpoints.base,\n    max: breakpoints.tablet - 1,\n  },\n  tablet: {\n    min: breakpoints.tablet,\n    max: breakpoints.desktop - 1,\n  },\n  desktop: {\n    min: breakpoints.desktop,\n    max: breakpoints.desktop_xl - 1,\n  },\n  desktop_xl: {\n    min: breakpoints.desktop_xl,\n    max: Infinity,\n  },\n};\n\n// Create a mobileState property to help manage viewport based functionality.\nObject.defineProperty(Breakpoints, 'mobileState', {\n  get() {\n    const current = this.current();\n    const desktop = this.get('desktop');\n    return current.max < desktop.min && current.max !== desktop.max;\n  },\n});\n\n// Create a new instance with our configured breakpoints.\nBreakpoints(settings);\n\nexport default Breakpoints;\n","import merge from 'deepmerge';\n\nconst defaults = {\n  progressLoop: {\n    attachTo: '.button--play-pause',\n    shape: '<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"><circle class=\"halo\"></circle><circle class=\"progress\"></circle></svg>',\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 merge from 'deepmerge';\nimport Flickity from './Flickity';\nimport PlayPause from './PlayPause';\nimport Breakpoints from './Breakpoints';\nimport ProgressLoop from './ProgressLoop';\nimport { breakpoints } from '../../config';\n\nconst defaults = {\n  playPause: true,\n  responsive: false,\n  progressLoop: false,\n};\n\nexport default class Slider {\n  constructor(element, options = {}) {\n    const dtabs = document.querySelector('.dtabs');\n    const underTab = document.querySelectorAll('.under-tab');\n    const photoGallery = document.querySelector('.photo-gallery');\n    let containsPhotoGallery = false;\n\n    this.element = element;\n    this.settings = merge(defaults, options);\n\n    underTab.forEach((el) => {\n      if (el.contains(photoGallery)) {\n        containsPhotoGallery = true;\n      }\n    });\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 (dtabs && containsPhotoGallery) {\n      dtabs.addEventListener('click', () => {\n        this.update(this.settings);\n      });\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 Flickity(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      const group = (data.groupCells === undefined) ? 1 : data.groupCells;\n\n      // Build a new slider based on the passed settings.\n      if (this.slides.length > group) {\n        this.slider = this.build(data);\n      }\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: true,\n  pauseAutoPlayOnHover: 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 '../components/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      desktop_xl: -(config.desktop + config.padding),\n    };\n  }\n}\n","import 'modaal';\nimport $ from 'jquery';\n\nexport default class ModaalTransformer {\n  constructor(element, settings) {\n    this.old = element;\n    this.settings = settings;\n    this.type = 'image';\n\n    // If image has \"Link to a URL\" don't add it to lightbox modal\n    if (this.settings.imageURL) {\n      return;\n    }\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        settings.imageURL = child.parentNode.classList.contains('image-to-url');\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          settings.imageURL = child.parentNode.classList.contains('image-to-url');\n          child.ConvertToModaal = new ModaalTransformer(child, settings);\n        });\n      });\n    }\n  }\n}\n","/* eslint-disable class-methods-use-this */\nimport $ from 'jquery';\nimport merge from 'deepmerge';\nimport Drupal from './Drupal';\nimport Gallery from './Gallery';\nimport Anchors from './Anchors';\nimport Modaal from './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 = merge(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('<div class=\"table-responsive\"></div>');\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 dates = meta.querySelectorAll('.event-date');\n\n        if (dates.length > 2) {\n          // Move all other dates\n          const container = document.createElement('div');\n          container.id = `all-dates-container--${a}-${b}`;\n          container.className = 'all-dates';\n\n          // Create and add functionality to display all other dates\n          const button = document.createElement('button');\n          button.className = 'meta-item all-dates-button';\n          button.setAttribute('aria-controls', `all-dates-container--${a}-${b}`);\n          button.setAttribute('aria-expanded', false);\n\n          // Creates a text container we can update within the button.\n          const text = document.createElement('span');\n          text.innerHTML = 'Show all dates';\n          button.appendChild(text);\n\n          // Creates an icon add to our button.\n          const icon = document.createElement('span');\n          icon.setAttribute('aria-hidden', true);\n          icon.className = 'plusminus-icon';\n          button.appendChild(icon);\n\n          // Insert our button inline with the other meta info.\n          dates[0].insertAdjacentElement('beforebegin', button);\n\n          // Add a click event handler to manage the dates display and button state.\n          button.addEventListener('click', () => {\n            const expanded = button.getAttribute('aria-expanded') === 'true';\n            button.setAttribute('aria-expanded', !expanded);\n            text.innerHTML = expanded ? 'Show all dates' : 'Hide all dates';\n            container.classList[expanded ? 'remove' : 'add']('show-all');\n          });\n\n          // Add all dates into the container.\n          dates.forEach((date) => container.appendChild(date));\n\n          // Append our all dates container after so we can expand/collapse\n          // it without affecting other meta information above.\n          meta.appendChild(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('<span class=\"slideshow-icon\"></span>');\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 = '<div class=\"group\"></div>';\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(`<h3 class=\"group-title\">${oDates.start.month}</h3>`);\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 = $(`<span class=\"group-year\">${oDates.start.year}</span>`);\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) => `<span class=\"day-of-week\">${data.dow}</span><span class=\"month\">${data.mon}</span><span class=\"day\">${data.day}</span>`;\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 = $('<div class=\"filters\"></div>');\n    const filter = '<div class=\"filter\"></div>';\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 = $(`<h3 class=\"ctrl\">${this.settings.filtersLabel}</h3>`);\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    // 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 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: 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 Navigation from '../components/Navigation';\nimport Breakpoints from '../components/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 $ from 'jquery';\n\nfunction AccordionWrap(element) {\n  this.element = element;\n  this.$element = $(element);\n  this.init();\n  this.ready();\n}\n\nAccordionWrap.prototype = {\n  init() {\n    const classes = (this.getClasses()) ? this.getClasses() : '';\n    const status = (this.getStatus()) ? ` style=\"display: ${this.getStatus()}\"` : '';\n    this.$element\n      .next('.accordion-content')\n      .addBack()\n      .wrapAll(`<div class=\"accordion-item ${classes}\"${status}></div>`);\n  },\n  getClasses() {\n    let $classes = null;\n    if (this.$element.hasClass('under-tab')) {\n      $classes = 'under-tab';\n      let elemClasses = this.$element.attr('class');\n      elemClasses = elemClasses.split(' ');\n\n      for (let i = 0; i < elemClasses.length; i += 1) {\n        const val = elemClasses[i];\n        if (val.substring(0, 10) === 'under-tab-') {\n          $classes += ` ${val}`;\n        }\n      }\n    }\n\n    return $classes;\n  },\n  getStatus() {\n    let $status;\n    if (this.$element.hasClass('under-tab')) {\n      $status = (this.$element.is('.under-tab-0')) ? 'block' : 'none';\n    }\n\n    return $status;\n  },\n  ready() {\n    setTimeout(() => {\n      this.$element.addClass('ready');\n    }, 200);\n  },\n};\n\nexport default AccordionWrap;\n","import $ from 'jquery';\n\nconst defaults = {\n  selector: 'a',\n};\n\nfunction AccordionFix(element, options) {\n  this.$element = $(element);\n  this.settings = Object.assign(defaults, options);\n  this.click = this.click.bind(this);\n  this.setVert = this.setVert.bind(this);\n  this.listen();\n}\n\nAccordionFix.prototype = {\n  listen() {\n    this.$element.on('click', this.click);\n  },\n  click(event) {\n    event.preventDefault();\n    event.stopPropagation();\n    this.setVert(event);\n  },\n  setVert(event) {\n    setTimeout(() => {\n      const isVis = this.isVisible(event.target);\n      if (!isVis) {\n        const topOffset = $(this.$element).offset().top - 80;\n        $([document.documentElement, document.body]).animate({\n          scrollTop: topOffset,\n        }, 500);\n      }\n    }, 500);\n  },\n  isVisible(e) {\n    const elementTop = $(e).offset().top - 80;\n    const elementBottom = elementTop + $(e).outerHeight();\n    const viewportTop = $(window).scrollTop();\n    const viewportBottom = viewportTop + $(window).height();\n    return (elementBottom > viewportTop && elementTop < viewportBottom);\n  },\n};\n\nexport default AccordionFix;\n","import $ from 'jquery';\n\nfunction AccordionFix(element) {\n  this.$element = $(element);\n  this.init();\n}\n\nAccordionFix.prototype = {\n  init() {\n    this.$element.find(':not(.accordion-item) + .accordion-item, * > .accordion-item:first-of-type, > .accordion-item:first-of-type').each((i, elem) => {\n      $(elem)\n        .nextUntil(':not(.accordion-item)')\n        .addBack()\n        .wrapAll('<div class=\"accordion-wrapper\" />');\n    });\n  },\n};\n\nexport default AccordionFix;\n","import $ from 'jquery';\n\nconst defaults = {\n  sourceSelector: '.field-image.c1 img',\n  destSelector: undefined,\n  isPseudo: false,\n};\n\nfunction BackgroundImage(element, options) {\n  this.$element = $(element);\n  this.settings = Object.assign(defaults, options);\n  this.addBackgroundImage();\n  this.ready();\n}\n\nBackgroundImage.prototype = {\n  getSource() { return this.$element.find(this.settings.sourceSelector).attr('src'); },\n\n  addBackgroundImage() {\n    const src = this.getSource();\n    if (src && src.length) {\n      if (this.settings.isPseudo) {\n        this.$element.find('.node').prepend('<span class=\"pod-image-bg\"></span>');\n        this.$element.find('.pod-image-bg').css('background-image', `url(${src})`);\n      } else if (this.settings.destSelector) {\n        this.$element.find(this.settings.destSelector).css('background-image', `url(${src})`);\n      } else {\n        this.$element.css('background-image', `url(${src})`);\n      }\n      this.$element.addClass('hasImage');\n    }\n  },\n\n  ready() {\n    setTimeout(() => {\n      this.$element.addClass('ready');\n    }, 300);\n  },\n};\n\nexport default BackgroundImage;\n","import HeadroomCore 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 Headroom {\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 HeadroomCore(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';\n\nconst defaults = {\n  trim: false,\n};\n\nfunction Placeholder(element, options) {\n  this.element = element;\n  this.$element = $(element);\n  this.settings = Object.assign(defaults, options);\n  this.trim = this.settings.trim;\n  this.init();\n}\n\nPlaceholder.prototype = {\n  init() {\n    let label = this.$element.find('label').text();\n    if (label.length) {\n      if (this.trim) {\n        label = label.substring(0, label.indexOf(':'));\n        this.$element.find('label').text(label);\n      }\n      this.$element.find('input').attr('placeholder', label.trim());\n    }\n  },\n};\n\nexport default Placeholder;\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 InViewport from 'in-viewport';\n\n// Offset from page height until element is declared 'visible'\nconst defaultOffset = -100;\n\nexport default class Visible {\n  constructor(element, offset) {\n    this.offset = offset || defaultOffset;\n    this.element = element;\n    this.listen();\n  }\n\n  visibleHandler() {\n    this.element.classList.add('visible');\n  }\n\n  listen() {\n    InViewport(this.element, { offset: this.offset }, this.visibleHandler.bind(this));\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 $ from 'jquery';\nimport FocusTrap from 'focus-trap';\nimport Keyboard from 'keyboard-key';\nimport Breakpoints from '../components/Breakpoints';\nimport Search from './Search';\n\nconst defaults = {\n  activeClass: 'menu-active',\n  buttons: {\n    menu: '.menu-icon',\n    search: '.search-icon',\n    menuClose: '.flyout .close-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.$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    if (this.menuCloseButton) this.menuCloseButton.setAttribute('aria-expanded', true);\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    if (this.menuCloseButton) this.menuCloseButton.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    if (this.menuCloseButton) this.menuCloseButton.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 menuCloseButton() {\n    return document.querySelector(this.settings.buttons.menuClose);\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 $ from 'jquery';\nimport Change from '../utils/Change';\n\nconst BREAKPOINT = 1024;\n\nexport default class Headerlinks {\n  constructor(element) {\n    this.element = element;\n    this.$element = $(element);\n    this.$body = this.getBody();\n    this.homeHeaderlink();\n    this.relocate();\n    this.update();\n  }\n\n  update() {\n    Change.onChange(this.relocate.bind(this));\n  }\n\n  relocate() {\n    const mobileActive = this.$body.find('.flyout .headerlinks').length > 0;\n    const desktopActive = this.$body.find('.toolbar .headerlinks').length > 0;\n    if (($(window).outerWidth(true) <= BREAKPOINT) && (desktopActive)) {\n      this.$element.insertBefore(this.$body.find('#navigation'));\n    } else if (($(window).outerWidth(true) > BREAKPOINT) && (mobileActive)) {\n      this.$element.prependTo(this.$body.find('.toolbar'));\n    }\n    this.$element.addClass('ready');\n    return this;\n  }\n\n  homeHeaderlink() {\n    const linkHtml = this.$body.find('.headerlinks .node-simple:last-child .node-header').clone();\n    this.$body.find('.home-headerlink').html(linkHtml);\n  }\n\n  getBody() { return $(document.body, this.context); }\n}\n","import Placeholder from '../components/Placeholder';\n\nexport default class SignUp {\n  constructor(element) {\n    this.element = element;\n    this.placeholder();\n    this.element.classList.add('ready');\n  }\n\n  placeholder() {\n    this.element.querySelectorAll('.node-footer-sign-up .type-textfield').forEach((element) => {\n      if (!element.placeholder) {\n        element.placeholder = new Placeholder(element, {\n          trim: true,\n        });\n      }\n    });\n  }\n}\n","import Slider from '../components/Slider';\nimport BackgroundImage from '../core/BackgroundImage';\n\nconst settings = {\n  wrapAround: true,\n  pageDots: false,\n  adaptiveHeight: false,\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};\n\nexport default class SessionTestimonials {\n  constructor(element) {\n    this.element = element;\n    this.Slider = new Slider(this.container, settings);\n    this.imgBg();\n    this.element.classList.add('ready');\n  }\n\n  // Banner\n  imgBg() {\n    this.element.querySelectorAll('.node-home-hero').forEach((banner) => {\n      if (!banner.BgImage) {\n        banner.BgImage = new BackgroundImage(banner, {\n          sourceSelector: 'figure img',\n          destSelector: '.node-image',\n        });\n      }\n    });\n  }\n\n  get container() {\n    return this.element.querySelector('.block-content');\n  }\n}\n","import $ from 'jquery';\n\nconst defaults = {\n  selector: '.node-inner',\n  linkLocation: '.link-read-more a',\n};\n\nfunction Redirect(element, options) {\n  this.$element = $(element);\n  this.settings = Object.assign(defaults, options);\n  this.click = this.click.bind(this);\n  this.listen();\n}\n\nRedirect.prototype = {\n  listen() {\n    this.$element.find(this.settings.selector).on('click', this.click);\n  },\n  click(event) {\n    event.preventDefault();\n    event.stopPropagation();\n    const url = $(event.currentTarget).find(this.settings.linkLocation).attr('href');\n    window.location.href = url;\n  },\n};\n\nexport default Redirect;\n","import Redirect from '../components/Redirect';\n\nexport default class Quicklinks {\n  constructor(element) {\n    this.element = element;\n    this.redirect();\n    this.element.classList.add('ready');\n  }\n\n  redirect() {\n    this.element.querySelectorAll('.node-home-quicklink').forEach((elem) => {\n      if (!elem.redirect) {\n        elem.redirect = new Redirect(elem, {\n          selector: '.node-inner',\n          linkLocation: '.node-header a',\n        });\n      }\n    });\n  }\n}\n","import BackgroundImage from '../core/BackgroundImage';\nimport Redirect from '../components/Redirect';\n\nexport default class Featured {\n  constructor(element) {\n    this.element = element;\n    this.bgImg();\n    this.redirect();\n    this.element.classList.add('ready');\n  }\n\n  bgImg() {\n    this.element.querySelectorAll('.node-home-featured').forEach((node) => {\n      if (!node.bgImg) {\n        node.bgImg = new BackgroundImage(node, {\n          sourceSelector: '.node-image img',\n          destSelector: '.imgBg',\n        });\n      }\n    });\n  }\n\n  redirect() {\n    this.element.querySelectorAll('.node-home-featured').forEach((elem) => {\n      if (!elem.redirect) {\n        elem.redirect = new Redirect(elem, {\n          selector: '.node-inner',\n          linkLocation: '.node-header a',\n        });\n      }\n    });\n  }\n}\n","import $ from 'jquery';\n\nconst defaults = {\n  wrapperElem: 'div',\n  tabTitle: '.block-title-text',\n  tabsQty: 0,\n  active: false,\n};\n\nexport default class Tabs {\n  constructor(element, options) {\n    this.settings = Object.assign(defaults, options);\n    this.element = element;\n    this.$element = $(element);\n    this.clickHandler = this.clickHandler.bind(this);\n    this.tabs();\n    this.element.classList.add('ready');\n  }\n\n  tabs() {\n    const tabWrapper = document.createElement(this.settings.wrapperElem);\n    tabWrapper.className = 'event-tabs';\n    this.element.querySelectorAll('.block.home-tabbed').forEach((elem, i) => {\n      const hasBlockTitle = !!elem.querySelector(this.settings.tabTitle);\n      const tabTitle = (hasBlockTitle) ? elem.querySelector(this.settings.tabTitle).innerHTML : `${i + 1}`;\n      let clickable = `<a id=\"tab-${i + 1}\" class=\"${(!this.settings.active) ? `active ${tabTitle.toLowerCase()}` : `${tabTitle.toLowerCase()}`}\"><span>${tabTitle}</span></a>`;\n      this.settings.active = true;\n      const tmp = document.implementation.createHTMLDocument();\n      tmp.body.innerHTML = clickable;\n      clickable = tmp.body.children;\n      tabWrapper.append(clickable[0]);\n      this.settings.tabsQty += 1;\n    });\n    this.element.prepend(tabWrapper);\n    this.clickHandler();\n  }\n\n  clickHandler() {\n    for (let i = 0; i < this.settings.tabsQty; i += 1) {\n      const tab = this.element.querySelector(`#tab-${i + 1}`);\n      tab.addEventListener('click', (event) => {\n        $(event.target).addClass('active').siblings().removeClass('active');\n        this.$element.find('.home-tabbed').removeClass('show');\n        setTimeout(() => {\n          this.$element.find(`.home-tabbed-${i + 1}`).addClass('show');\n          const minHeight = this.$element.find(`.home-tabbed-${i + 1}`).outerHeight();\n          this.$element.find('.inner').css('min-height', minHeight);\n        }, 200);\n      });\n    }\n  }\n}\n","import $ from 'jquery';\n\nconst defaults = {\n  date: undefined,\n  start: {\n    month: undefined,\n    day: undefined,\n    year: undefined,\n  },\n  end: {\n    month: undefined,\n    day: undefined,\n    year: undefined,\n  },\n  hasStartTime: false,\n  hasEndTime: false,\n};\n\nexport default class FixDates {\n  constructor(element, options) {\n    this.element = element;\n    this.$element = $(element);\n    this.settings = { ...defaults, ...options };\n    this.fixDate();\n    this.ready();\n  }\n\n  fixDate() {\n    const { element, $element, settings } = this;\n    const hasPostDate = $element.find('.post-date').length > 0;\n    const isEvent = $element.find('.post-date').is('.upcoming');\n    const isTwitterFeed = $element.find('.handle + .date').length > 0;\n\n    // Check if node has a post date, but is NOT an event\n    if (hasPostDate && !isEvent) {\n      const dateContent = element.querySelector('.post-date time').childNodes[0].innerHTML;\n      this.extractDate(dateContent);\n      $element.find('.post-date time').html(`<span class=\"date-time-rendered\">${settings.start.month}.${settings.start.day}.${settings.start.year}</span>`);\n      $element.find('.post-date').show();\n\n    // Check if node is from a Twitter feed\n    } else if (isTwitterFeed) {\n      const tweetContent = element.querySelector('.handle + .date time').childNodes[0].nodeValue;\n      // Extract date data\n      this.extractDate(tweetContent);\n      $element.find('.handle + .date').html(`${settings.start.month}.${settings.start.day}.${settings.start.year}`);\n    } else {\n      let newDateString;\n\n      // Check if event date exists\n      const hasEventDate = element.querySelector('.upcoming.first-upcoming time > span[class^=\"date-display-\"]').childNodes[0].nodeValue;\n      if (hasEventDate) {\n        const isMultiDay = $element.find('time > .date-display-start').length > 0;\n        const isMultiTime = $element.find('.date-display-single > .date-display-start').length > 0;\n\n        // Check if event is more than one day\n        if (isMultiDay) {\n          const startDate = element.querySelector('.date-display-start').childNodes[0].nodeValue;\n          const endDate = element.querySelector('.date-display-end').childNodes[0].nodeValue;\n          // Extract start date data\n          this.extractDate(startDate);\n          // Extract end date data\n          this.extractDate(endDate, true);\n          newDateString = `<span class=\"date-time-rendered\">${settings.start.month}/${settings.start.day}${(settings.start.year !== settings.end.year) ? `/${settings.start.year}` : ''} - ${settings.end.month}/${settings.end.day}/${(settings.start.year !== settings.end.year) ? settings.start.year : settings.end.year}</span>`;\n\n        // Does event have a start and end time\n        } else if (isMultiTime) {\n          const hasEndTime = element.querySelector('.date-display-end').childNodes[0].nodeValue.length > -1;\n          const startTime = element.querySelector('.date-display-start').childNodes[0].nodeValue;\n          const date = element.querySelector('.date-display-single').childNodes[0].nodeValue;\n          // Extract end date data\n          this.extractDate(date);\n          // Extract start time data\n          this.extractTime(startTime);\n          if (hasEndTime) {\n            const endTime = element.querySelector('.date-display-end').childNodes[0].nodeValue;\n            // Extract end time data\n            this.extractTime(endTime, true);\n          }\n          newDateString = `<span class=\"date-time-rendered\">${settings.start.month}/${settings.start.day}/${settings.start.year}</span><span class=\"date-time-rendered\">${settings.start.time}${(hasEndTime) ? ` - ${settings.end.time}` : ''}</span>`;\n\n        // Basic date data\n        } else {\n          const eventContent = element.querySelector('.upcoming.first-upcoming time > span[class^=\"date-display-\"]').childNodes[0].nodeValue;\n          this.extractDate(eventContent);\n          newDateString = `<span class=\"date-time-rendered\">${settings.start.month}/${settings.start.day}/${settings.start.year}</span>`;\n        }\n      }\n\n      // Replace date/time with formatted version\n      $element.find('.post-date time').html(newDateString);\n    }\n  }\n\n  // Separate date string into usable variables\n  extractDate(dateText, isEnd) {\n    if (dateText) {\n      const newDateArr = dateText.split(' ');\n      const newMonth = newDateArr[0];\n      const arrLength = newDateArr.length;\n      const hasTime = newDateArr[arrLength - 1].includes(':');\n      const e = (isEnd) ? 'end' : 'start';\n      this.settings[e].month = this.abbrevMonth(newMonth);\n      this.settings[e].day = newDateArr[1].substring(0, newDateArr[1].length - 1);\n      this.settings[e].year = newDateArr[2].substring(0, newDateArr[2].length);\n      if (hasTime) {\n        this.extractTime(newDateArr[arrLength - 1], isEnd);\n      }\n    }\n  }\n\n  // Separate time string into usable variables\n  extractTime(timeText, isEnd) {\n    const newTimeArr = timeText.split(':');\n    const newHour = newTimeArr[0];\n    const temp = newTimeArr[1];\n    let newMinute = (temp) ? temp.substring(0, 2) : '';\n    const ampm = (temp) ? temp.substring(2, 4) : '';\n    newMinute = (newMinute === '00') ? ampm : `:${newMinute}${ampm}`;\n    const e = (isEnd) ? 'end' : 'start';\n    this.settings[e].time = `${newHour}${newMinute}`;\n  }\n\n  // Change formatting of month\n  /* eslint-disable */\n  abbrevMonth(month) {\n    let newMonth;\n    switch (month) {\n      case 'January': newMonth = '1'; break;\n      case 'February': newMonth = '2'; break;\n      case 'March': newMonth = '3'; break;\n      case 'April': newMonth = '4'; break;\n      case 'May': newMonth = '5'; break;\n      case 'June': newMonth = '6'; break;\n      case 'July': newMonth = '7'; break;\n      case 'August': newMonth = '8'; break;\n      case 'September': newMonth = '9'; break;\n      case 'October': newMonth = '10'; break;\n      case 'November': newMonth = '11'; break;\n      case 'December': newMonth = '12'; break;\n      default: newMonth = 'N/A';\n    }\n    return newMonth;\n  }\n  /* eslint-enable */\n\n  // Add ready class to block\n  ready() {\n    this.element.classList.add('ready');\n  }\n}\n","import Slider from '../components/Slider';\nimport FixDate from '../components/FixDate';\n\nconst defaults = {\n  wrapAround: true,\n  pageDots: false,\n  autoPlay: false,\n  adaptiveHeight: false,\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  groupCells: 1,\n  responsive: {\n    tablet: {\n      groupCells: 2,\n    },\n    desktop: {\n      groupCells: 3,\n    },\n    desktop_xl: {\n      groupCells: 3,\n    },\n  },\n};\n\nexport default class WhatsNew {\n  constructor(element) {\n    this.element = element;\n    this.settings = defaults;\n    this.Slider = new Slider(this.container, this.settings);\n    this.fixDate();\n    this.element.classList.add('ready');\n  }\n\n  fixDate() {\n    this.element.querySelectorAll('.node-home-tab').forEach((elem) => {\n      if (!elem.fixDate) {\n        elem.fixDate = new FixDate(elem);\n      }\n    });\n  }\n\n  get container() {\n    return this.element.querySelector('.block-content');\n  }\n}\n","import BackgroundImage from '../core/BackgroundImage';\nimport Redirect from '../components/Redirect';\n// import Change from '../utils/Change';\n\nexport default class WhatsHappening {\n  constructor(element) {\n    this.element = element;\n    this.init();\n    this.bgImg();\n    this.redirect();\n    this.element.classList.add('ready');\n  }\n\n  // update() {\n  //   Change.onChange(this.init.bind(this));\n  // }\n\n  init() {\n    let minHeight = 0;\n    this.element.querySelectorAll('.node-home-whats-happening').forEach((node) => {\n      node.querySelector('.node-inner').style.minHeight = 'auto';\n      const tmp = this.outerHeight(node);\n      if (tmp > minHeight) {\n        minHeight = tmp;\n      }\n    });\n    this.element.querySelectorAll('.node-home-whats-happening').forEach((node) => {\n      node.querySelector('.node-inner').style.minHeight = `${minHeight}px`;\n    });\n  }\n\n  bgImg() {\n    this.element.querySelectorAll('.node-home-whats-happening').forEach((node) => {\n      if (!node.bgImg) {\n        node.bgImg = new BackgroundImage(node, {\n          sourceSelector: '.node-image img',\n          destSelector: '.node-image',\n        });\n      }\n    });\n  }\n\n  redirect() {\n    this.element.querySelectorAll('.node-home-whats-happening').forEach((elem) => {\n      if (!elem.redirect) {\n        elem.redirect = new Redirect(elem, {\n          selector: '.node-inner',\n          linkLocation: '.node-header a',\n        });\n      }\n    });\n  }\n\n  /* eslint-disable */\n  outerHeight(el) {\n    let height = el.offsetHeight;\n    const style = getComputedStyle(el);\n\n    height += parseInt(style.marginTop) + parseInt(style.marginBottom);\n    return height;\n  }\n  /* eslint-enable */\n}\n","import Redirect from '../components/Redirect';\n\nexport default class Quicklinks {\n  constructor(element) {\n    this.element = element;\n    this.redirect();\n    this.element.classList.add('ready');\n  }\n\n  redirect() {\n    this.element.querySelectorAll('.node-home-quicklink').forEach((elem) => {\n      if (!elem.redirect) {\n        elem.redirect = new Redirect(elem, {\n          selector: '.node-inner',\n          linkLocation: '.node-header a',\n        });\n      }\n    });\n  }\n}\n","import $ from 'jquery';\nimport Placeholder from '../components/Placeholder';\n\nexport default class FileListTemplate {\n  constructor(element) {\n    this.element = element;\n    this.$element = $(element);\n    this.reset = this.reset.bind(this);\n    this.selectList();\n    this.process();\n    this.ddHover();\n    this.element.classList.add('ready');\n  }\n\n  process() {\n    this.$element.find('.views-exposed-widget').each((i, element) => {\n      // Add placeholders to text inputs\n      if (!element.Placeholder) {\n        element.Placeholder = new Placeholder(element);\n      }\n      // Alter submit text and add a reset button.\n      // if ($(element).is('.views-submit-button')) {\n      //   $(element).find('input').val('Find');\n      // const $resetButton = $('<input type=\"reset\" value=\"Clear\">');\n      // $resetButton\n      //   .bind('click', this.reset)\n      //   .appendTo(element);\n      // }\n    });\n  }\n\n  reset() {\n    this.$element.find('input[type=\"text\"]').attr('value', '');\n  }\n\n  ddHover() {\n    this.element.querySelectorAll('.dd-hover-expand').forEach((el) => {\n      if (el.hasAttribute('href')) {\n        const url = el.getAttribute('href');\n        el.addEventListener('click', () => {\n          window.location = url;\n        });\n      }\n    });\n  }\n\n  selectList() {\n    $('#edit-category').wrap('<div class=\"dynamic-select-wrapper\"></div>');\n    $('#edit-category > option:first-child').text('All Categories');\n    return this;\n  }\n}\n","import 'focus-visible';\nimport $ from 'jquery';\nimport Drupal from './core/Drupal';\nimport DDTemplates from './core/DDTemplates';\nimport CalendarFeed from './core/CalendarFeed';\nimport FixNavigation from './core/FixNavigation';\nimport TermNavigation from './core/TermNavigation';\nimport FetchSourceImages from './core/FetchSourceImages';\nimport AccordionWrap from './core/AccordionWrap';\nimport AccordionFix from './core/AccordionFix';\nimport AccordionContainer from './core/AccordionContainer';\nimport BackgroundImage from './core/BackgroundImage';\nimport Headroom from './components/Headroom';\nimport Placeholder from './components/Placeholder';\nimport Navigation from './components/Navigation';\nimport Sticky from './utils/Sticky';\nimport Visible from './utils/Visible';\n// Header Functionality\nimport Toolbar from './header/Toolbar';\nimport Headerlinks from './header/Headerlinks';\n// Footer Functionality\nimport SignUp from './footer/SignUp';\n// Home Functionality\nimport Hero from './home/Hero';\nimport Quicklinks from './home/Quicklinks';\nimport Featured from './home/Featured';\nimport Tabs from './home/Tabs';\nimport TabBlock from './home/TabBlock';\nimport WhatsHappening from './home/WhatsHappening';\nimport GetInvolved from './home/GetInvolved';\n// Template Functionality\nimport FileListTemplate from './templates/FileListTemplate';\n\n// ----------------------------------------------------------------------------\n// Homepage Specific Behaviors.\n// ----------------------------------------------------------------------------\n\nconst homeBehaviors = () => {\n  // Homepage Blocks\n  document.querySelectorAll('.front .block, .home-page-two').forEach((element) => {\n    if (!element.Visible) {\n      element.Visible = new Visible(element);\n    }\n  });\n\n  // Hero Block\n  document.querySelectorAll('.home-hero.block').forEach((element) => {\n    if (!element.Hero) {\n      element.Hero = new Hero(element);\n    }\n  });\n\n  // Quicklinks Block\n  document.querySelectorAll('.home-quicklinks.block').forEach((element) => {\n    if (!element.Quicklinks) {\n      element.Quicklinks = new Quicklinks(element);\n    }\n  });\n\n  // Featured Block\n  document.querySelectorAll('.home-featured.block').forEach((element) => {\n    if (!element.Featured) {\n      element.Featured = new Featured(element);\n    }\n  });\n\n  // Tabs Functionality\n  document.querySelectorAll('.home-page-two').forEach((element) => {\n    if (!element.Tabs) {\n      element.Tabs = new Tabs(element);\n    }\n  });\n\n  // Tabbed Blocks\n  document.querySelectorAll('.home-tabbed').forEach((element) => {\n    if (!element.TabBlock) {\n      element.TabBlock = new TabBlock(element);\n    }\n  });\n\n  // What's Happening Block\n  document.querySelectorAll('.home-whats-happening').forEach((element) => {\n    if (!element.WhatsHappening) {\n      element.TabBlock = new WhatsHappening(element);\n    }\n  });\n\n  // Get Involved Block\n  document.querySelectorAll('.home-get-involved.block').forEach((element) => {\n    if (!element.GetInvolved) {\n      element.GetInvolved = new GetInvolved(element);\n    }\n  });\n\n  // Get Involved Block\n  document.querySelectorAll('.home-sign-up.block').forEach((element) => {\n    if (!element.SignUp) {\n      element.SignUp = new SignUp(element);\n    }\n  });\n};\n\n// ----------------------------------------------------------------------------\n// Template Specific Behaviors.\n// ----------------------------------------------------------------------------\n\n// File List Templates\ndocument.querySelectorAll('.view-file-list').forEach((element) => {\n  // Search form\n  if (!element.FileListTemplate) {\n    element.FileListTemplate = new FileListTemplate(element);\n  }\n  // File downloads\n  if (!element.downloadToggle) {\n    element.downloadToggle = true;\n    $(element).find('.documentation.node-links').on('click', (event) => {\n      $(event.currentTarget).toggleClass('expanded');\n    });\n  }\n});\n\n// ----------------------------------------------------------------------------\n// Core Theme Behaviors.\n// ----------------------------------------------------------------------------\n\nconst coreBehaviors = () => {\n  // DD Template Behaviors\n  if (!document.body.DDTemplates) {\n    document.body.DDTemplates = new DDTemplates();\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  document.querySelectorAll('#nice-menu-3').forEach((element) => {\n    if (!element.Navigation) {\n      element.Navigation = new Navigation(element);\n    }\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  document.querySelectorAll('.headroom').forEach((element) => {\n    if (!element.Headroom) {\n      element.Headroom = new Headroom(element);\n    }\n  });\n\n  // Headerlinks\n  const headerlinks = document.querySelector('.headerlinks-wrapper');\n  if (headerlinks && !headerlinks.links) {\n    headerlinks.links = new Headerlinks(headerlinks);\n  }\n\n  // Get Involved Block\n  document.querySelectorAll('.footer-sign-up.block').forEach((element) => {\n    if (!element.SignUp) {\n      element.SignUp = new SignUp(element);\n    }\n  });\n\n  // Term Navigation\n  document.querySelectorAll('.term-navigation').forEach((element) => {\n    if (!element.TermNavigation) {\n      element.TermNavigation = new TermNavigation(element);\n    }\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  // Set placeholder of textfield using label\n  document.querySelectorAll('.pods .type-textfield').forEach((element) => {\n    if (!element.placeholder) {\n      element.placeholder = new Placeholder(element, {\n        trim: true,\n      });\n    }\n  });\n\n  // Banner\n  document.querySelectorAll('.banner:not(.placeholder-block)').forEach((element) => {\n    if (!element.Banner) {\n      element.Banner = new BackgroundImage(element, {\n        sourceSelector: 'figure img',\n        destSelector: '.node-banner',\n      });\n      document.body.classList.add('has-banner');\n    }\n  });\n\n  // Wraps each accordion element\n  document.querySelectorAll('.accordion-heading').forEach((element) => {\n    if (!element.accordionWrap) {\n      element.accordionWrap = new AccordionWrap(element);\n      element.accordionWrap = new AccordionFix(element);\n    }\n  });\n\n  // Wraps each accordion in a container\n  document.querySelectorAll('.node-content').forEach((element) => {\n    if (!element.accordionContainer) {\n      setTimeout(() => {\n        element.accordionContainer = new AccordionContainer(element);\n      }, 300);\n    }\n  });\n};\n\n// ----------------------------------------------------------------------------\n// Load homepage behaviors if we're on the frontpage.\n// ----------------------------------------------------------------------------\n\nif (document.body.classList.contains('front')) {\n  Drupal.behavior(homeBehaviors);\n}\n\n// ----------------------------------------------------------------------------\n// Load core behaviors.\n// ----------------------------------------------------------------------------\n\nDrupal.behavior(coreBehaviors);\n\n// ----------------------------------------------------------------------------\n// If we're in development mode...\n// Open up all missing images within a new tab/window.\n// ----------------------------------------------------------------------------\n\nif (process.env.NODE_ENV === 'development') {\n  document.body.FetchSourceImages = new FetchSourceImages();\n}\n"],"sourceRoot":""}