{"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/Notify.js","webpack:///./src/js/components/Headroom.js","webpack:///./src/js/components/PrintButton.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/components/StringSplit.js","webpack:///./src/js/header/Headerlinks.js","webpack:///./src/js/components/Placeholder.js","webpack:///./src/js/components/Select2.js","webpack:///./src/js/footer/Contact.js","webpack:///./src/js/core/Redirect.js","webpack:///./src/js/footer/Locations.js","webpack:///./src/js/components/RandomImage.js","webpack:///./src/js/home/Hero.js","webpack:///./src/js/home/AudienceHeader.js","webpack:///./src/js/core/DynaLink.js","webpack:///./src/js/home/Audience.js","webpack:///./src/js/home/FindYourPath.js","webpack:///./src/js/components/FixDate.js","webpack:///./src/js/home/WhatsNew.js","webpack:///./src/js/components/Redirect.js","webpack:///./src/js/home/Featured.js","webpack:///./src/js/core/TermHeroSlider.js","webpack:///./src/js/core/CustomHero.js","webpack:///./src/js/core/RelatedLinks.js","webpack:///./src/js/core/CustomMenu.js","webpack:///./src/js/core/CustomMenuScroll.js","webpack:///./src/js/core/PrintSection.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","shouldBuildSlider","addResponsiveSupport","update","build","PlayPauseControls","ProgressLoop","restore","Promise","resolve","then","disabled","keys","bp","bpSettings","baseSettings","slides","children","fade","wrapAround","arrowShape","Gallery","Anchors","id","querySelectorAll","anchor","clickHandler","location","hash","substr","goToCurrentAnchor","event","preventDefault","currentTarget","href","indexOf","getElementById","scrollToDestination","scrollTo","elementToScroll","verticalOffset","currentOffset","maxDuration","minDuration","scrollX","scrollY","focus","timer","Timer","setTimeout","clear","currentBreakpoint","offsetSettings","config","ModaalTransformer","old","type","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","siblings","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","undefined","isPseudo","BackgroundImage","addBackgroundImage","getSource","src","css","Notify","createStorageKey","hasSeen","getVariable","addBehaviors","show","eq","setVariable","$button","hide","postType","tolerance","initial","pinned","unpinned","notTop","bottom","notBottom","onPin","onUnpin","onTop","onNotTop","onBottom","onNotBottom","Headroom","headroom","rebuild","HeadroomCore","btnText","PrintButton","ticking","callbacks","request","requestAnimationFrame","onChange","callback","Sticky","register","Change","innerHeight","offsetHeight","Visible","visibleHandler","InViewport","input","Search","customComponents","focusIn","typeOutPlaceholderText","focusOut","setInterval","searchText","resetSearchInput","searchClass","buttons","search","menuClose","flyout","header","Toolbar","addSearchLogic","FocusTrap","addFocusTrapLogic","searchComponent","headerComponent","initialFocus","flyoutComponent","isActive","isSearchActive","isSearch","searchButton","deactivate","activate","keyDownHandler","menuButton","menuCloseButton","title","divider","StringSplit","RegExp","Headerlinks","$body","getBody","homeHeaderlink","relocate","strSplit","mobileActive","desktopActive","outerWidth","prependTo","linkHtml","clone","news","trim","Placeholder","label","selectList","Select2","select2","placeholder","multiple","Connect","textfield","form","linkLocation","Redirect","url","SessionColumns","redirect","bgImg","RandomImage","imageReady","addImage","source","$sources","winner","getRandomInt","Image","_min","_max","Math","ceil","floor","random","Hero","randomImgs","hero","randomImage","AudienceHeader","clickable","altClickable","slide","DynaLink","hasAttribute","Audience","slideToggle","visible","FindYourPath","hasStartTime","hasEndTime","FixDates","fixDate","hasPostDate","isEvent","isTwitterFeed","dateContent","childNodes","textContent","extractDate","tweetContent","nodeValue","newDateString","fullDate","$fullDate","isMultiDay","isMultiTime","startDate","endDate","startTime","extractTime","endTime","eventContent","console","log","dateText","isEnd","newDateArr","newMonth","arrLength","hasTime","includes","abbrevMonth","timeText","newTimeArr","newHour","temp","newMinute","ampm","WhatsNew","FixDate","Featured","profileImg","TermHeroSlider","CustomHero","pageTop","pageHero","RelatedLinks","relatedLinks","firstPart","secondPart","CustomMenu","customMenu","section","sectionID","sectionTitle","customLink","CustomMenuScroll","menuPosition","linkActive","pageHeader","contentTop","getBoundingClientRect","pageHeaderActive","headerHeight","links","pageCustomMenu","pageHeaderHeight","pageCustomMenuHeight","delayedScrollIntoView","func","timeoutId","args","clearTimeout","debounce","scrollIntoView","scrollPosition","sectionId","sectionTop","getSectionTop","PrintSection","getAllStyles","head","getElementsByTagName","Array","from","linkElement","outerHTML","printDiv","styles","divContents","allStyles","write","close","print","homeBehaviors","AudHdr","Aud","fyp","whatsNew","featured","footerFooter","activationButton","targetNode","handleSlider","windowWidth","innerWidth","MutationObserver","mutationsList","observer","mutation","observe","attributes","childList","subtree","rect","left","clientHeight","right","clientWidth","isInViewport","cssText","headerlinks","Contact","FooterContact","Locations","FooterLocations","Academic","Banner","accordionWrap","accordionContainer","AccordionContainer","hasImage","notify","printBlock","customHero","printSection","customMenuScroll","ele","pageMain","landingForm","fieldImageEl","fieldImage","nodeImage","heroImage","insertAdjacentHTML"],"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([40,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-cotc2020.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 this.element = element;\n this.settings = merge(defaults, options);\n\n // Exit if we don't have more than one slide.\n if (!this.shouldBuildSlider) {\n return;\n }\n\n if (this.settings.responsive) {\n // Add responsive listeners\n this.addResponsiveSupport();\n return;\n }\n\n // If our slider isn't built yet, and isn't disabled,\n // default to building one with the base settings.\n this.update(this.settings);\n }\n\n build(settings) {\n // Construct our new slider instance.\n const slider = new 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 destroy() {\n // Put your destruction logic here\n if (this.PlayPauseControls) {\n this.PlayPauseControls.destroy();\n }\n if (this.ProgressLoop) {\n this.ProgressLoop.destroy();\n }\n if (this.slider) {\n this.slider.destroy();\n this.slider = null;\n }\n }\n\n update(data) {\n this.restore().then(() => {\n // Do not build a new slider if set to 'disable'.\n if (data.disabled) {\n return;\n }\n\n // Build a new slider based on the passed settings.\n this.slider = this.build(data);\n });\n }\n\n // Adds responsive support which allows custom settings based on\n // the current viewport.\n addResponsiveSupport() {\n const { responsive } = this.settings;\n\n // Iterate through the provided breakpoints...\n Object.keys(breakpoints).forEach((bp) => {\n // Merges the baseSettings with the custom responsive settings.\n const bpSettings = merge(this.baseSettings, responsive[bp] || {});\n\n // Adds breakpoint listener for when this viewport is entered.\n Breakpoints.on(bp, 'enter', bpSettings, this.update.bind(this));\n });\n }\n\n // Only builds slider if there are enought slides.\n get shouldBuildSlider() {\n return this.slides.length > 1;\n }\n\n // Returns reference to the available slides within this slider.\n get slides() {\n return this.element.children;\n }\n\n // Extracts the base settings while stripping the responsive subset.\n get baseSettings() {\n const baseSettings = this.settings;\n if ('responsive' in baseSettings) {\n delete baseSettings.responsive;\n }\n return baseSettings;\n }\n}\n","import 'flickity-fade';\nimport Slider from '../components/Slider';\n\nconst defaults = {\n fade: true,\n autoPlay: 4000,\n wrapAround: 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 // Add custom video type.\n if (this.settings.isVideo) {\n this.type = 'video';\n }\n\n // Remove unneeded attributes and classes.\n this.old.removeAttribute('rel');\n this.old.classList.remove('lightbox-processed');\n\n // Clone the element to insure removal of previously set lightbox listeners functions.\n this.new = this.old.cloneNode(true);\n this.old.parentNode.replaceChild(this.new, this.old);\n\n // Add Modaal attributes for this particular link type.\n this.new.setAttribute('data-modaal-type', this.type);\n\n // If this is an image gallery, add the group data attribute.\n if (this.settings.isGallery) {\n this.new.setAttribute('data-group', 'gallery');\n }\n\n // Add the caption, if applicable.\n const image = this.new.querySelector('img');\n const caption = image.getAttribute('title');\n if (caption.length) {\n this.new.setAttribute('data-modaal-desc', caption);\n }\n\n // Add a replacement listener for our new link.\n this.new.addEventListener('click', this.clickHandler.bind(this));\n }\n\n clickHandler(event) {\n event.preventDefault();\n $(this.new).modaal({\n type: this.type,\n start_open: true,\n animation: 'none',\n outer_controls: true,\n });\n }\n}\n","import ModaalTransformer from './ModaalTransformer';\n\nconst nodeSelector = 'node';\n\nexport default class Lightbox2Modaal {\n constructor(parent, selector) {\n const settings = {\n isGallery: parent.querySelectorAll('img').length > 1,\n };\n\n if (parent.classList.contains(nodeSelector)) {\n // Process individual node.\n parent.querySelectorAll(selector).forEach((child) => {\n settings.isVideo = child.parentNode.classList.contains('field-video');\n child.ConvertToModaal = new ModaalTransformer(child, settings);\n });\n } else {\n // Process group of nodes.\n parent.querySelectorAll(nodeSelector).forEach((node) => {\n node.querySelectorAll(selector).forEach((child) => {\n settings.isVideo = child.parentNode.classList.contains('field-video');\n child.ConvertToModaal = new ModaalTransformer(child, settings);\n });\n });\n }\n }\n}\n","/* eslint-disable class-methods-use-this */\nimport $ from 'jquery';\nimport 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:not(.image-to-url) 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-${id}`);\n\n // Add the newly created filter\n $filters.append($filter);\n\n // Add a click handler\n $filter.on('click', ({ currentTarget }) => {\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(currentTarget).removeClass('active');\n $(currentTarget).addClass('active').closest('.filters').removeClass('expanded');\n $(currentTarget).closest('.filters').siblings('.ctrl').text($(currentTarget).text());\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 $ from 'jquery';\n\nlet key = 'has_seen_notification_';\n\nfunction Notify(element) {\n this.element = element;\n this.$element = $(element);\n this.clickHandler = this.clickHandler.bind(this);\n this.storageKey = this.createStorageKey();\n this.hasSeen = this.getVariable();\n this.init();\n}\n\nNotify.prototype = {\n init() {\n if (!this.hasSeen) {\n this.addBehaviors();\n this.theme();\n this.show();\n }\n },\n createStorageKey() {\n const elem = $('.node', this.element);\n const id = elem.eq(0).attr('id');\n key += /(\\d+)/.exec(id)[0];\n return key;\n },\n getVariable() {\n // Get the current filter from session storage\n return sessionStorage.getItem(this.storageKey) || false;\n },\n setVariable() {\n // Set the current filter into session storage\n sessionStorage.setItem(this.storageKey, true);\n },\n clickHandler(event) {\n event.stopPropagation();\n const $block = $(event.target).filter(this.element);\n const $button = $(event.target).filter('.block-content');\n // Set seen variable\n this.setVariable();\n // If the button or background was clicked, hide the notification\n if ($block.length || $button.length) this.hide();\n },\n hide() {\n this.$element.removeClass('show');\n },\n show() {\n this.$element.addClass('show');\n },\n theme() {\n const postType = this.$element.find('.node-teaser').prop('class').match(/pt([0-9]+)/)[1];\n this.$element.addClass(`pt${postType}`);\n },\n addBehaviors() {\n this.$element.bind('click', this.clickHandler);\n },\n};\n\nexport default Notify;\n","import $ from 'jquery';\nimport 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 $(document.body).addClass('locked').removeClass('unlocked');\n },\n // callback when unpinned, `this` is headroom object\n onUnpin() {\n $(document.body).addClass('unlocked').removeClass('locked');\n },\n // callback when above offset, `this` is headroom object\n onTop() {\n $(document.body).addClass('top').removeClass('not-top');\n },\n // callback when below offset, `this` is headroom object\n onNotTop() {\n $(document.body).addClass('not-top').removeClass('top');\n },\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 btnText: 'Print This Page',\n};\n\nfunction PrintButton(element, options) {\n this.element = element;\n this.$element = $(element);\n this.settings = Object.assign(defaults, options);\n this.init();\n}\n\nPrintButton.prototype = {\n init() {\n this.$element.find('.print-html a').addClass('btn btn-primary btn-print').text(this.settings.btnText);\n },\n};\n\nexport default PrintButton;\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 searchClass: 'search-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 isSearchActive = document.body.classList.contains(this.settings.searchClass);\n const isSearch = this.searchButton && this.searchButton === event.currentTarget;\n // console.log(this.searchButton === event.currentTarget);\n\n if (isActive || isSearchActive) {\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 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 // const windowWidth = window.innerWidth;\n // Leverage the focus trap logic to lock active element focus\n // within the flyout only (on mobile devices specifically).\n // if (windowWidth < 1521) {\n // this.FocusTrap.activate();\n // }\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 document.body.classList.add(this.settings.searchClass);\n } else {\n // If the menu button is clicked, focus the flyout container.\n this.flyoutComponent.focus();\n document.body.classList.add(this.settings.activeClass);\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 document.body.classList.remove(this.settings.searchClass);\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';\n\nconst defaults = {\n title: '.node-header h1',\n divider: '<br>',\n};\n\nfunction StringSplit(element, options) {\n this.element = element;\n this.$element = $(element);\n this.settings = Object.assign(defaults, options);\n this.init();\n this.ready();\n}\n\nStringSplit.prototype = {\n init() {\n // hack in differences in font size when a specific selector or character is present\n $(this.settings.title, this.element).each((i, title) => {\n const html = $(title).html();\n const divider = new RegExp(this.settings.divider);\n if (divider.test(html)) {\n const a = html.split(this.settings.divider);\n $(title).addClass('splitText').html(`<span>${a[0]}</span><span>${a[1]}</span>`);\n }\n });\n },\n ready() {\n this.$element.addClass('ready');\n },\n};\n\nexport default StringSplit;\n","import $ from 'jquery';\nimport Change from '../utils/Change';\nimport StringSplit from '../components/StringSplit';\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.strSplit();\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 strSplit() {\n this.element.querySelectorAll('.title').forEach((news) => {\n if (!news.strSplit) {\n news.strSplit = new StringSplit(news, {\n title: 'a',\n divider: '<br>',\n });\n }\n });\n }\n\n getBody() { return $(document.body, this.context); }\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);\n }\n },\n};\n\nexport default Placeholder;\n","import $ from 'jquery';\nimport 'select2';\n\nconst defaults = {\n selectList: undefined,\n};\n\nfunction Select2(element, options) {\n this.element = element;\n this.$element = $(element);\n this.settings = Object.assign(defaults, options);\n this.create();\n this.ready();\n}\n\nSelect2.prototype = {\n create() {\n const $select = this.$element.find(this.settings.selectList);\n\n $select\n .select2({\n placeholder: 'Choose A Category',\n multiple: false,\n })\n .wrap('<div class=\"dynamic-select-wrapper\"></div>');\n },\n\n ready() {\n this.element.classList.add('ready');\n },\n};\n\nexport default Select2;\n","import Placeholder from '../components/Placeholder';\nimport Select2 from '../components/Select2';\n\nexport default class Connect {\n constructor(element) {\n this.element = element;\n this.placeholder();\n this.selectList();\n this.ready();\n }\n\n placeholder() {\n this.element.querySelectorAll('.type-textfield').forEach((textfield) => {\n if (textfield && !textfield.placeholder) {\n textfield.placeholder = new Placeholder(textfield, { trim: true });\n }\n });\n }\n\n selectList() {\n this.element.querySelectorAll('.webform-component-select').forEach((form) => {\n if (form && !form.selectList) {\n form.selectList = new Select2(form, {\n selectList: '#edit-submitted-choose-your-interest',\n });\n }\n });\n }\n\n ready() {\n this.element.classList.add('ready');\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 '../core/Redirect';\nimport BackgroundImage from '../core/BackgroundImage';\n\nexport default class SessionColumns {\n constructor(element) {\n this.element = element;\n this.redirect();\n this.bgImg();\n this.ready();\n }\n\n redirect() {\n this.element.querySelectorAll('.node-footer-location').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 bgImg() {\n this.element.querySelectorAll('.node-footer-location').forEach((elem) => {\n if (!elem.bgImg) {\n elem.bgImg = new BackgroundImage(elem, {\n sourceSelector: '.field-image img',\n destSelector: '.field-image',\n });\n }\n });\n }\n\n ready() {\n setTimeout(() => {\n this.element.classList.add('ready');\n }, 300);\n }\n}\n","import $ from 'jquery';\n\nconst defaults = {\n sourceSelector: '.field-image',\n};\n\nfunction RandomImage(element, options) {\n this.element = element;\n this.$element = $(element);\n this.settings = { ...defaults, ...options };\n this.imageReady = this.imageReady.bind(this);\n this.addImage();\n}\n\nRandomImage.prototype = {\n getSource() {\n let source;\n const $sources = this.$element.find(this.settings.sourceSelector);\n if ($sources.length) {\n const winner = this.getRandomInt(0, $sources.length - 1);\n source = $sources.eq(winner).find('img').attr('src');\n }\n return source;\n },\n addImage() {\n this.src = this.getSource();\n if (this.src && this.src.length) {\n const image = new Image();\n $(image).on('load', this.imageReady);\n image.src = this.src;\n } else {\n // Present the block, even if a image isn't found.\n this.ready();\n }\n },\n getRandomInt(_min, _max) {\n const min = Math.ceil(_min);\n const max = Math.floor(_max);\n return Math.floor(Math.random() * (max - min)) + min;\n },\n imageReady() {\n this.$element.find('.image-bg').css('background-image', `url(${this.src})`);\n this.ready();\n },\n ready() {\n this.$element.addClass('ready');\n },\n};\n\nexport default RandomImage;\n","import RandomImage from '../components/RandomImage';\nimport StringSplit from '../components/StringSplit';\n\nexport default class Hero {\n constructor(element) {\n this.element = element;\n this.randomImgs();\n this.strSplit();\n this.ready();\n }\n\n strSplit() {\n this.element.querySelectorAll('.node-header').forEach((news) => {\n if (!news.strSplit) {\n news.strSplit = new StringSplit(news, {\n title: '.title',\n divider: '<br>',\n });\n }\n });\n }\n\n randomImgs() {\n this.element.querySelectorAll('.node-home-hero').forEach((hero) => {\n if (hero && !hero.randomImage) {\n hero.randomImage = new RandomImage(hero);\n }\n });\n }\n\n ready() {\n this.element.classList.add('ready');\n }\n}\n","import StringSplit from '../components/StringSplit';\n\nexport default class AudienceHeader {\n constructor(element) {\n this.element = element;\n this.strSplit();\n this.ready();\n }\n\n strSplit() {\n this.element.querySelectorAll('.block-title').forEach((news) => {\n if (!news.strSplit) {\n news.strSplit = new StringSplit(news, {\n title: '.block-title-text',\n divider: '|',\n });\n }\n });\n }\n\n ready() {\n this.element.classList.add('ready');\n }\n}\n","import $ from 'jquery';\n\nconst defaults = {\n clickable: 'button.toggle-button',\n altClickable: '.toggle-overlay',\n slide: '.toggle-slide',\n};\n\nexport default class DynaLink {\n constructor(element, options) {\n this.element = element;\n this.$element = $(element);\n this.settings = { ...defaults, ...options };\n this.listen();\n }\n\n clickHandler(event) {\n event.preventDefault();\n this.$element.find(this.settings.slide).toggleClass('expanded');\n if (!event.target.hasAttribute('aria-expanded') || $(event.target).attr('aria-expanded') === 'false') {\n this.$element.find(this.settings.clickable).attr('aria-expanded', 'true');\n this.$element.find(this.settings.altClickable).attr('aria-expanded', 'true');\n } else {\n this.$element.find(this.settings.clickable).attr('aria-expanded', 'false');\n this.$element.find(this.settings.altClickable).attr('aria-expanded', 'false');\n }\n this.$element.siblings().find(this.settings.slide).removeClass('expanded');\n this.$element.siblings().find(this.settings.clickable).attr('aria-expanded', 'false');\n this.$element.siblings().find(this.settings.altClickable).attr('aria-expanded', 'false');\n }\n\n listen() {\n this.clickable.addEventListener('click', this.clickHandler.bind(this));\n this.altClickable.addEventListener('click', this.clickHandler.bind(this));\n }\n\n get clickable() {\n return this.element.querySelector(this.settings.clickable);\n }\n\n get altClickable() {\n return this.element.querySelector(this.settings.altClickable);\n }\n}\n","import BackgroundImage from '../core/BackgroundImage';\nimport DynaLink from '../core/DynaLink';\nimport Visible from '../utils/Visible';\n\nexport default class Audience {\n constructor(element) {\n this.element = element;\n this.bgImg();\n this.slideToggle();\n this.visible();\n this.ready();\n }\n\n bgImg() {\n this.element.querySelectorAll('.node-home-audience').forEach((node) => {\n if (!node.bgImg) {\n node.bgImg = new BackgroundImage(node, {\n sourceSelector: '.node-image img',\n destSelector: '.image-bg',\n });\n }\n });\n }\n\n slideToggle() {\n this.element.querySelectorAll('.node-home-audience').forEach((node) => {\n if (!node.slide) {\n node.slide = new DynaLink(node);\n }\n });\n }\n\n visible() {\n this.element.querySelectorAll('.node-home-audience').forEach((node) => {\n if (!node.visible) {\n node.visible = new Visible(node);\n }\n });\n }\n\n ready() {\n this.element.classList.add('ready');\n }\n}\n","import StringSplit from '../components/StringSplit';\n\nexport default class FindYourPath {\n constructor(element) {\n this.element = element;\n this.strSplit();\n this.ready();\n }\n\n strSplit() {\n this.element.querySelectorAll('.block-title').forEach((news) => {\n if (!news.strSplit) {\n news.strSplit = new StringSplit(news, {\n title: '.block-title-text',\n divider: '|',\n });\n }\n });\n }\n\n ready() {\n this.element.classList.add('ready');\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].textContent;\n if (dateContent) {\n this.extractDate(dateContent);\n }\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 = this.element.querySelector('.event-date.upcoming time > span[class^=\"date-display-\"]').childNodes[0].textContent;\n if (hasEventDate) {\n const dates = this.element.querySelectorAll('.node-home-whats-new .event-date.upcoming time');\n dates.forEach((fullDate) => {\n // this.settings.isMultiDay = false;\n const $fullDate = $(fullDate);\n const isMultiDay = $fullDate.children('.date-display-start').length > 0;\n const isMultiTime = $fullDate.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 = fullDate.querySelector('.date-display-start').childNodes[0].nodeValue;\n const endDate = fullDate.querySelector('.date-display-end').childNodes[0].nodeValue;\n this.extractDate(startDate);\n // this.settings.isMultiDay = true;\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 date = fullDate.textContent;\n let hasEndTime = false;\n // Extract end date data\n this.extractDate(date);\n if (fullDate.querySelector('.date-display-end')) {\n hasEndTime = fullDate.querySelector('.date-display-end').childNodes[0].nodeValue.length > -1;\n }\n if (fullDate.querySelector('.date-display-start')) {\n const startTime = fullDate.querySelector('.date-display-start').childNodes[0].nodeValue;\n // Extract start time data\n this.extractTime(startTime);\n }\n if (hasEndTime) {\n const endTime = fullDate.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} ${settings.start.time}${(hasEndTime) ? `-${settings.end.time}` : ''}</span>`;\n\n // Basic date data\n } else {\n const eventContent = fullDate.textContent;\n console.log(eventContent);\n this.extractDate(eventContent);\n newDateString = `<span class=\"date-time-rendered\">${settings.start.month}.${settings.start.day}.${settings.start.year}</span>`;\n }\n\n // Replace date/time with formatted version\n $fullDate.html(newDateString);\n });\n }\n }\n }\n\n // Separate date string into usable variables\n extractDate(dateText, isEnd) {\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 // 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 FixDate from '../components/FixDate';\n\nexport default class WhatsNew {\n constructor(element) {\n this.element = element;\n this.fixDate();\n this.ready();\n }\n\n fixDate() {\n this.element.querySelectorAll('.node-home-whats-new').forEach((elem) => {\n if (!elem.fixDate) {\n elem.fixDate = new FixDate(elem);\n }\n });\n }\n\n ready() {\n this.element.classList.add('ready');\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 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.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: '.node-image',\n });\n }\n if (!node.profileImg) {\n node.profileImg = new BackgroundImage(node, {\n sourceSelector: '.profile-image img',\n destSelector: '.profile-image',\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-wrapper',\n linkLocation: '.node-header a',\n });\n }\n });\n }\n\n ready() {\n this.element.classList.add('ready');\n }\n}\n","import 'flickity-fade';\nimport Slider from '../components/Slider';\n\nconst defaults = {\n fade: true,\n autoPlay: false,\n playPause: false,\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 TermHeroSlider {\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 restore() {\n // Destroys existing slider if one exists.\n return new Promise((resolve) => {\n if (this.Slider) {\n this.Slider.destroy();\n this.Slider = null; // Reset the slider instance\n }\n\n // Resolve promise after slider is removed.\n resolve();\n });\n }\n}\n","import $ from 'jquery';\n\nfunction CustomHero(element) {\n this.$element = $(element);\n this.init();\n}\n\nCustomHero.prototype = {\n init() {\n const pageTop = document.querySelector('.page-top');\n const pageHero = this.$element[0];\n if (pageHero) {\n pageTop.insertAdjacentElement('afterbegin', pageHero);\n }\n },\n};\n\nexport default CustomHero;\n","import $ from 'jquery';\n\nfunction RelatedLinks(element) {\n this.$element = $(element);\n this.init();\n}\n\nRelatedLinks.prototype = {\n init() {\n const relatedLinks = this.$element[0].querySelector('.link-text');\n if (relatedLinks) {\n const text = relatedLinks.textContent.split('|');\n if (text.length === 2) {\n const [firstPart, secondPart] = text;\n relatedLinks.innerHTML = `<h6 class=\"title\">${firstPart}</h6><hr><p>${secondPart}</p>`;\n } else {\n relatedLinks.innerHTML = `<h6 class=\"title\">${text[0]}</h6>`;\n }\n }\n },\n};\n\nexport default RelatedLinks;\n","import $ from 'jquery';\n\nfunction CustomMenu(element) {\n this.$element = $(element);\n this.init();\n}\n\nCustomMenu.prototype = {\n init() {\n const customMenu = document.querySelector('#custom-menu');\n const section = this.$element[0];\n\n if (section) {\n const sectionID = section.getAttribute('id');\n const sectionTitle = section.querySelector('h2').textContent;\n\n const customLink = document.createElement('a');\n customLink.setAttribute('href', `#${sectionID}`);\n customLink.textContent = sectionTitle;\n customMenu.insertAdjacentElement('beforeend', customLink);\n }\n },\n};\n\nexport default CustomMenu;\n","import $ from 'jquery';\n\nfunction CustomMenuScroll(element) {\n this.$element = $(element);\n this.menuPosition();\n this.linkActive();\n}\n\nCustomMenuScroll.prototype = {\n menuPosition() {\n let customMenu = document.querySelector('#custom-menu');\n let pageHeader = document.querySelector('.page-header');\n let contentTop = customMenu.getBoundingClientRect().top + window.scrollY\n - pageHeader.offsetHeight;\n\n function updateValues() {\n customMenu = document.querySelector('#custom-menu');\n pageHeader = document.querySelector('.page-header');\n contentTop = customMenu.getBoundingClientRect().top + window.scrollY\n - pageHeader.offsetHeight;\n }\n\n function handleScroll() {\n const pageHeaderActive = pageHeader.classList.contains('not-top') && pageHeader.classList.contains('locked');\n const scrollPosition = window.scrollY;\n\n if (scrollPosition >= contentTop) {\n customMenu.classList.add('fixed');\n if (pageHeaderActive) {\n const headerHeight = pageHeader.offsetHeight;\n customMenu.style.top = `${headerHeight}px`;\n } else {\n customMenu.style.top = '';\n }\n } else {\n customMenu.classList.remove('fixed');\n customMenu.style.top = '';\n }\n }\n\n window.addEventListener('resize', updateValues);\n window.addEventListener('scroll', handleScroll);\n },\n linkActive() {\n const links = document.querySelectorAll('#custom-menu a');\n const pageHeader = document.querySelector('.page-header');\n const pageCustomMenu = document.querySelector('#custom-menu');\n let pageHeaderHeight = pageHeader.offsetHeight;\n let pageCustomMenuHeight = pageCustomMenu.offsetHeight;\n\n function getSectionTop(section) {\n const rect = section.getBoundingClientRect();\n return rect.top + window.scrollY - pageHeaderHeight - pageCustomMenuHeight - 15;\n }\n\n function debounce(func, delay) {\n let timeoutId;\n return function (...args) {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => func(...args), delay);\n };\n }\n\n const delayedScrollIntoView = debounce((link) => {\n link.scrollIntoView({ behavior: 'smooth' });\n }, 500);\n\n function activateLinks() {\n const scrollPosition = window.scrollY;\n\n links.forEach((link) => {\n const sectionId = link.hash;\n const section = document.querySelector(`section${sectionId}`);\n\n if (section) {\n const sectionTop = getSectionTop(section);\n\n if (scrollPosition >= sectionTop && scrollPosition < sectionTop + section.offsetHeight) {\n link.classList.add('active');\n delayedScrollIntoView(link);\n } else {\n link.classList.remove('active');\n }\n }\n });\n }\n\n window.addEventListener('resize', () => {\n pageHeaderHeight = pageHeader.offsetHeight;\n pageCustomMenuHeight = pageCustomMenu.offsetHeight;\n });\n window.addEventListener('scroll', activateLinks);\n },\n};\n\nexport default CustomMenuScroll;\n","import $ from 'jquery';\n\nfunction PrintSection(element) {\n this.$element = $(element);\n this.init();\n}\n\nPrintSection.prototype = {\n getAllStyles() {\n const head = document.head || document.getElementsByTagName('head')[0];\n const linkElements = Array.from(head.querySelectorAll('link[rel=\"stylesheet\"]'));\n const filteredStylesheets = linkElements.filter((linkElement) => {\n const href = linkElement.getAttribute('href');\n return href.includes('css_') || href.includes('theme.min.css') || href.includes('dtheme-direct.css');\n });\n const stylesheets = filteredStylesheets.map((linkElement) => linkElement.outerHTML);\n return stylesheets;\n },\n printDiv(element, styles, title) {\n const divContents = element.parentNode.innerHTML;\n const allStyles = styles.join('');\n const a = window.open('', '', 'height=500, width=500');\n a.document.write(`\n <html>\n <head>\n <title>${title}</title>\n ${allStyles}\n <style>body { padding: 20px; } .btn-primary { display: inline-block !important; } .btn-print { display: none !important; } .accordion-content { display: block !important; }</style>\n </head>\n <body>`);\n a.document.write(divContents);\n a.document.write('</body></html>');\n a.document.close();\n a.addEventListener('load', () => {\n setTimeout(() => {\n a.print();\n }, 500);\n });\n },\n init() {\n this.$element.on('click', () => {\n this.printDiv(this.$element[0], this.getAllStyles(), this.$element[0].innerHTML);\n });\n },\n};\n\nexport default PrintSection;\n","import 'focus-visible';\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 Notify from './components/Notify';\nimport Headroom from './components/Headroom';\nimport Navigation from './components/Navigation';\nimport PrintButton from './components/PrintButton';\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 FooterContact from './footer/Contact';\nimport FooterLocations from './footer/Locations';\n// Homepage functionality\nimport Hero from './home/Hero';\nimport AudienceHeader from './home/AudienceHeader';\nimport Audience from './home/Audience';\nimport FindYourPath from './home/FindYourPath';\nimport WhatsNew from './home/WhatsNew';\nimport Featured from './home/Featured';\nimport TermHeroSlider from './core/TermHeroSlider';\nimport CustomHero from './core/CustomHero';\nimport RelatedLinks from './core/RelatedLinks';\nimport CustomMenu from './core/CustomMenu';\nimport CustomMenuScroll from './core/CustomMenuScroll';\nimport PrintSection from './core/PrintSection';\n\n// ----------------------------------------------------------------------------\n// Homepage Specific Behaviors.\n// ----------------------------------------------------------------------------\n\nconst homeBehaviors = () => {\n // Homepage Blocks\n document.querySelectorAll('.front .block').forEach((element) => {\n if (!element.Visible) {\n element.Visible = new Visible(element);\n }\n });\n\n // Homepage Block Titles\n document.querySelectorAll('.front .block-title').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 // Home Audience Header Block\n document.querySelectorAll('.home-audience-header.block').forEach((element) => {\n if (!element.AudHdr) {\n element.AudHdr = new AudienceHeader(element);\n }\n });\n\n // Home Audience Block\n document.querySelectorAll('.home-audience.block').forEach((element) => {\n if (!element.Aud) {\n element.Aud = new Audience(element);\n }\n });\n\n // Home Find Your Path Block\n document.querySelectorAll('.home-find-your-path.block').forEach((element) => {\n if (!element.fyp) {\n element.fyp = new FindYourPath(element);\n }\n });\n\n // Home What's New Block\n document.querySelectorAll('.home-whats-new.block').forEach((element) => {\n if (!element.whatsNew) {\n element.whatsNew = new WhatsNew(element);\n }\n });\n\n // Home Featured Block\n document.querySelectorAll('.home-featured.block').forEach((element) => {\n if (!element.featured) {\n element.featured = new Featured(element);\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 const footerFooter = document.querySelector('.footer-footer');\n let activationButton = '';\n\n const targetNode = document.querySelector('body');\n const config = { attributes: false, childList: true, subtree: true };\n const callback = (mutationsList, observer) => {\n for (const mutation of mutationsList) {\n if (mutation.type === 'childList') {\n activationButton = document.querySelector('.activation-button');\n }\n }\n };\n const observer = new MutationObserver(callback);\n observer.observe(targetNode, config);\n\n function isInViewport(element) {\n const rect = element.getBoundingClientRect();\n return (\n rect.top >= 0\n && rect.left >= 0\n && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) + 2\n && rect.right <= (window.innerWidth || document.documentElement.clientWidth) + 2\n );\n }\n\n document.addEventListener('scroll', () => {\n if (isInViewport(footerFooter) && window.innerWidth > 1365) {\n activationButton.style.cssText += 'bottom:116px;animation:talkToUsTop 0.2s;';\n } else {\n activationButton.style.cssText += 'bottom:16px;animation:talkToUsBottom 0.2s;';\n }\n });\n\n // Term Hero Block\n function handleSlider() {\n const windowWidth = window.innerWidth;\n const elements = document.querySelectorAll('.term-hero .view-content');\n elements.forEach((element) => {\n if (windowWidth < 768) {\n if (!element.TermHeroSlider) {\n element.TermHeroSlider = new TermHeroSlider(element);\n }\n } else {\n if (element.TermHeroSlider) {\n element.TermHeroSlider.restore();\n element.TermHeroSlider = null;\n }\n }\n });\n }\n handleSlider();\n\n window.addEventListener('resize', () => {\n handleSlider();\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 // Footer Contact Block\n document.querySelectorAll('.footer-contact.block').forEach((element) => {\n if (!element.Contact) {\n element.Contact = new FooterContact(element);\n }\n });\n\n // Footer Locations Block\n document.querySelectorAll('.footer-locations.block').forEach((element) => {\n if (!element.Locations) {\n element.Locations = new FooterLocations(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 useFilters: true,\n filters: {\n All: 2,\n 'Community Events': 417,\n 'Campus Events': 418,\n Academic: 419,\n 'Teaching & Learning': 468,\n },\n });\n }\n });\n\n // Calendar of Events View\n document.querySelectorAll('.calendar-feed-2').forEach((element) => {\n if (!element.CalendarFeed) {\n element.CalendarFeed = new CalendarFeed(element, {\n useFilters: true,\n filters: {\n All: 2,\n 'Community Events': 417,\n 'Campus Events': 418,\n Academic: 419,\n 'Teaching & Learning': 468,\n },\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 // Pods\n document.querySelectorAll('.pt6').forEach((element) => {\n const hasImage = element.querySelector('.node-upper-image img') !== null;\n element.classList.add('hasImage');\n if (!element.bgImg && hasImage) {\n element.bgImg = new BackgroundImage(element, {\n sourceSelector: '.node-upper-image img',\n destSelector: '.node-upper-image',\n });\n }\n });\n\n // Notifications\n document.querySelectorAll('.notifications').forEach((element) => {\n if (!element.notify && element.querySelectorAll('.node').length) {\n element.notify = new Notify(element);\n }\n });\n\n // Print Button\n const printBlock = document.querySelector('#block-digitaldcore-utility_links');\n if (printBlock && !printBlock.button) {\n printBlock.button = new PrintButton(printBlock);\n }\n\n // Reorder tabs for the Scholarship directory page.\n if (document.querySelector('.tt424 .dtabs')) {\n document.querySelector('.tt424 .dtabs').insertBefore(document.querySelector('.tt424 .dtabs .tab.tab-5'), document.querySelector('.tt424 .dtabs .tab.tab-3'));\n }\n\n // Add page-top element to degree page\n document.querySelectorAll('body.t509 .page-main').forEach((element) => {\n if (element) {\n const pageTop = document.createElement('div');\n pageTop.classList.add('page-top');\n element.insertAdjacentElement('afterbegin', pageTop);\n\n const customMenu = document.createElement('section');\n customMenu.setAttribute('id', 'custom-menu');\n pageTop.insertAdjacentElement('beforeend', customMenu);\n }\n });\n\n // Move hero from body source to top\n document.querySelectorAll('body.t509 section#hero').forEach((element) => {\n element.classList.add('hasImage');\n if (!element.customHero) {\n element.bgImg = new BackgroundImage(element, {\n sourceSelector: '.field-image img',\n destSelector: '.field-image',\n });\n element.customHero = new CustomHero(element);\n }\n });\n\n // Setup related links\n document.querySelectorAll('body.t509 .page-sidebar .link-related').forEach((element) => {\n if (!element.relatedLinks) {\n element.relatedLinks = new RelatedLinks(element);\n }\n });\n\n // Find sections and create custom menu\n document.querySelectorAll('body.t509 .node-content section').forEach((element) => {\n if (!element.customMenu) {\n element.customMenu = new CustomMenu(element);\n }\n });\n\n // Print Section buttons\n document.querySelectorAll('body.t509 .node-content section a.btn-print').forEach((element) => {\n if (!element.printSection) {\n element.printSection = new PrintSection(element);\n }\n });\n\n // Custom Menu Scrolling Func\n const customMenuScroll = document.querySelector('body.t509 #custom-menu');\n if (customMenuScroll && !customMenuScroll.ele) {\n customMenuScroll.ele = new CustomMenuScroll(customMenuScroll);\n }\n\n // Landing Page\n const pageMain = document.querySelector('main.page-main');\n\n // FORM COMPONENT\n const landingForm = document.querySelector('.section-landing-page .node-image .field-embed');\n if (landingForm) {\n const pageRight = document.querySelector('.page-right .page-sidebar');\n pageRight.insertAdjacentElement('afterbegin', landingForm);\n }\n // END FORM COMPONENT\n\n const fieldImageEl = document.querySelector('.section-landing-page article .node-image img');\n if (fieldImageEl) {\n const fieldImage = fieldImageEl.getAttribute('src');\n const nodeImage = document.querySelector('.section-landing-page article .node-image');\n const heroImage = `<div class='page-top'><div class='home-hero block with-block-editing ready visible' data-loader=''><div class='block-inner'><div class='block-content'><div class='node node-home-hero pt148 dd-hover-help ddHover-processed ready'><div class='image-bg' style='background-image: url(${fieldImage});'> </div><div class='node-inner'></div></div></div></div></div></div>`;\n pageMain.insertAdjacentHTML('afterbegin', heroImage);\n nodeImage.remove();\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":""}