{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/moment/locale sync ^\\.\\/.*$","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/FixNavigation.js","webpack:///./src/js/components/Navigation.js","webpack:///./src/js/core/TermNavigation.js","webpack:///./src/js/components/Headroom.js","webpack:///./src/js/header/Search.js","webpack:///./src/js/header/Toolbar.js","webpack:///./src/js/utils/Shift.js","webpack:///./src/js/utils/Change.js","webpack:///./src/js/utils/Sticky.js","webpack:///./src/js/utils/Placeholder.js","webpack:///./src/js/components/PanelGroup.js","webpack:///./src/js/home/Hero.js","webpack:///./src/js/home/News.js","webpack:///./src/js/home/Stats.js","webpack:///./src/js/core/FixTranslate.js","webpack:///./src/js/core/CalendarFeed.js","webpack:///./src/js/core/CalendarGridFilters.js","webpack:///./src/js/theme.js","webpack:///./src/config.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","map","webpackContext","req","id","webpackContextResolve","e","Error","code","keys","resolve","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","mobile","min","breakpoints","base","max","tablet","desktop","desktop_xl","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","then","disabled","forEach","bp","bpSettings","baseSettings","slides","children","fade","wrapAround","arrowShape","Gallery","Anchors","offset","querySelectorAll","anchor","clickHandler","location","hash","substr","goToCurrentAnchor","event","preventDefault","currentTarget","href","indexOf","getElementById","scrollToDestination","scrollTo","elementToScroll","verticalOffset","maxDuration","minDuration","scrollX","scrollY","focus","timer","Timer","setTimeout","clear","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","item","getComputedStyle","getPropertyValue","filter","b","meta","dates","container","text","icon","insertAdjacentElement","expanded","date","join","image","$img","before","$map","$nav","digitaldcoreCreateSiteMap","letter","replace","html","toUpperCase","Modaal","closest","notValid","FixNavigation","process","$parent","$children","menuBlock","menuParent","activeClass","activeTrailClass","expandActiveMenus","closeUnnestedMenus","focusout","hover","delay","in","out","Navigation","menu","preprocess","menuParents","index","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","tolerance","classes","initial","pinned","unpinned","top","notTop","bottom","notBottom","onPin","onUnpin","onTop","onNotTop","onBottom","onNotBottom","Headroom","offsets","offsetUnit","units","headroom","rebuild","init","currentOffset","HeadroomCore","currentBreakpoint","input","Search","customComponents","focusIn","typeOutPlaceholderText","focusOut","setInterval","searchText","resetSearchInput","activeState","search","buttons","flyout","header","Toolbar","addSearchLogic","FocusTrap","addFocusTrapLogic","searchComponent","headerComponent","initialFocus","flyoutComponent","menuClickHandler","isSearchActive","deactivateSearch","isMenuActive","deactivateMenu","activateMenu","searchClickHandler","activateSearch","keyDownHandler","menuButton","activate","searchButton","deactivate","config","Shift","entries","rearrange","region","blocks","block","append","ticking","callbacks","request","requestAnimationFrame","onChange","callback","Sticky","register","Change","offsetTop","innerHeight","offsetHeight","Placeholder","label","panel","close","PanelGroup","selectors","hasClose","closeButton","addEventListeners","keydownHandler","closeHandler","updateView","CustomEvent","bubbles","HTMLElement","Hero","pageDots","adaptiveHeight","slidesPerGroup","News","total","Math","ceil","groupings","groupID","slide","group","slideGroup","countUpOptions","duration","startVal","useEasing","viewportOptions","Stats","countupOptions","visibleHandler","digits","exp","RegExp","split","output","createTextNode","replaceWith","startCountDown","endValue","Number","countUp","CountUp","InViewport","FixTranslate","head","contentWindow","rel","storageKey","paginationLabel","filtersLabel","filterByPostTypes","useFilters","filters","defaultFilters","All","CalendarFeed","$element","getFilters","buildCalendar","createFilters","$posts","$group","currentYear","currentMonth","post","$post","oDates","datetime","moment","month","format","mon","day","dow","year","toLowerCase","$year","$tile","markup","isSameMonth","end","isSameDay","isSameYear","appendTo","filterHandler","next","toggleClass","$container","types","ids","getDefaultData","getCustomizedData","currentFilter","sessionStorage","getItem","decodeURIComponent","tempHash","charAt","filterExists","idExists","console","log","$filter","$show","inArray","$filters","not","setItem","$shown","nextUntil","$ctrl","trigger","_types","_ids","regex","test","exec","indexes","aTypes","aResults","parseInt","sort","defaultFilter","undefined","quantity","CalFilters","$calendar","$name","$defaults","addFilters","render","getCurrentFilter","getDefaultFilter","alert","k","tabClicked","plugin","scope","slideUp","slideDown","args","activeSet","filterClasses","hasClass","createDropdown","addListener","$createDropdown","homeBehaviors","$modal","$storiesButton","video","hideModal","display","pause","currentTime","toggle","MouseEvent","Trainings","calendarGridFilters","CalendarGridFilters","font_size","line_height","layout","max_width","gutters","desktop_xxl","heights","minimized","gutter","breakpoint","header_height","paths","theme","img","favicon","unitize","suffix","obj","prop","propName","isFinite","isNumber","rekey","variables","domain"],"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([177,1]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","var map = {\n\t\"./af\": 16,\n\t\"./af.js\": 16,\n\t\"./ar\": 17,\n\t\"./ar-dz\": 18,\n\t\"./ar-dz.js\": 18,\n\t\"./ar-kw\": 19,\n\t\"./ar-kw.js\": 19,\n\t\"./ar-ly\": 20,\n\t\"./ar-ly.js\": 20,\n\t\"./ar-ma\": 21,\n\t\"./ar-ma.js\": 21,\n\t\"./ar-sa\": 22,\n\t\"./ar-sa.js\": 22,\n\t\"./ar-tn\": 23,\n\t\"./ar-tn.js\": 23,\n\t\"./ar.js\": 17,\n\t\"./az\": 24,\n\t\"./az.js\": 24,\n\t\"./be\": 25,\n\t\"./be.js\": 25,\n\t\"./bg\": 26,\n\t\"./bg.js\": 26,\n\t\"./bm\": 27,\n\t\"./bm.js\": 27,\n\t\"./bn\": 28,\n\t\"./bn-bd\": 29,\n\t\"./bn-bd.js\": 29,\n\t\"./bn.js\": 28,\n\t\"./bo\": 30,\n\t\"./bo.js\": 30,\n\t\"./br\": 31,\n\t\"./br.js\": 31,\n\t\"./bs\": 32,\n\t\"./bs.js\": 32,\n\t\"./ca\": 33,\n\t\"./ca.js\": 33,\n\t\"./cs\": 34,\n\t\"./cs.js\": 34,\n\t\"./cv\": 35,\n\t\"./cv.js\": 35,\n\t\"./cy\": 36,\n\t\"./cy.js\": 36,\n\t\"./da\": 37,\n\t\"./da.js\": 37,\n\t\"./de\": 38,\n\t\"./de-at\": 39,\n\t\"./de-at.js\": 39,\n\t\"./de-ch\": 40,\n\t\"./de-ch.js\": 40,\n\t\"./de.js\": 38,\n\t\"./dv\": 41,\n\t\"./dv.js\": 41,\n\t\"./el\": 42,\n\t\"./el.js\": 42,\n\t\"./en-au\": 43,\n\t\"./en-au.js\": 43,\n\t\"./en-ca\": 44,\n\t\"./en-ca.js\": 44,\n\t\"./en-gb\": 45,\n\t\"./en-gb.js\": 45,\n\t\"./en-ie\": 46,\n\t\"./en-ie.js\": 46,\n\t\"./en-il\": 47,\n\t\"./en-il.js\": 47,\n\t\"./en-in\": 48,\n\t\"./en-in.js\": 48,\n\t\"./en-nz\": 49,\n\t\"./en-nz.js\": 49,\n\t\"./en-sg\": 50,\n\t\"./en-sg.js\": 50,\n\t\"./eo\": 51,\n\t\"./eo.js\": 51,\n\t\"./es\": 52,\n\t\"./es-do\": 53,\n\t\"./es-do.js\": 53,\n\t\"./es-mx\": 54,\n\t\"./es-mx.js\": 54,\n\t\"./es-us\": 55,\n\t\"./es-us.js\": 55,\n\t\"./es.js\": 52,\n\t\"./et\": 56,\n\t\"./et.js\": 56,\n\t\"./eu\": 57,\n\t\"./eu.js\": 57,\n\t\"./fa\": 58,\n\t\"./fa.js\": 58,\n\t\"./fi\": 59,\n\t\"./fi.js\": 59,\n\t\"./fil\": 60,\n\t\"./fil.js\": 60,\n\t\"./fo\": 61,\n\t\"./fo.js\": 61,\n\t\"./fr\": 62,\n\t\"./fr-ca\": 63,\n\t\"./fr-ca.js\": 63,\n\t\"./fr-ch\": 64,\n\t\"./fr-ch.js\": 64,\n\t\"./fr.js\": 62,\n\t\"./fy\": 65,\n\t\"./fy.js\": 65,\n\t\"./ga\": 66,\n\t\"./ga.js\": 66,\n\t\"./gd\": 67,\n\t\"./gd.js\": 67,\n\t\"./gl\": 68,\n\t\"./gl.js\": 68,\n\t\"./gom-deva\": 69,\n\t\"./gom-deva.js\": 69,\n\t\"./gom-latn\": 70,\n\t\"./gom-latn.js\": 70,\n\t\"./gu\": 71,\n\t\"./gu.js\": 71,\n\t\"./he\": 72,\n\t\"./he.js\": 72,\n\t\"./hi\": 73,\n\t\"./hi.js\": 73,\n\t\"./hr\": 74,\n\t\"./hr.js\": 74,\n\t\"./hu\": 75,\n\t\"./hu.js\": 75,\n\t\"./hy-am\": 76,\n\t\"./hy-am.js\": 76,\n\t\"./id\": 77,\n\t\"./id.js\": 77,\n\t\"./is\": 78,\n\t\"./is.js\": 78,\n\t\"./it\": 79,\n\t\"./it-ch\": 80,\n\t\"./it-ch.js\": 80,\n\t\"./it.js\": 79,\n\t\"./ja\": 81,\n\t\"./ja.js\": 81,\n\t\"./jv\": 82,\n\t\"./jv.js\": 82,\n\t\"./ka\": 83,\n\t\"./ka.js\": 83,\n\t\"./kk\": 84,\n\t\"./kk.js\": 84,\n\t\"./km\": 85,\n\t\"./km.js\": 85,\n\t\"./kn\": 86,\n\t\"./kn.js\": 86,\n\t\"./ko\": 87,\n\t\"./ko.js\": 87,\n\t\"./ku\": 88,\n\t\"./ku.js\": 88,\n\t\"./ky\": 89,\n\t\"./ky.js\": 89,\n\t\"./lb\": 90,\n\t\"./lb.js\": 90,\n\t\"./lo\": 91,\n\t\"./lo.js\": 91,\n\t\"./lt\": 92,\n\t\"./lt.js\": 92,\n\t\"./lv\": 93,\n\t\"./lv.js\": 93,\n\t\"./me\": 94,\n\t\"./me.js\": 94,\n\t\"./mi\": 95,\n\t\"./mi.js\": 95,\n\t\"./mk\": 96,\n\t\"./mk.js\": 96,\n\t\"./ml\": 97,\n\t\"./ml.js\": 97,\n\t\"./mn\": 98,\n\t\"./mn.js\": 98,\n\t\"./mr\": 99,\n\t\"./mr.js\": 99,\n\t\"./ms\": 100,\n\t\"./ms-my\": 101,\n\t\"./ms-my.js\": 101,\n\t\"./ms.js\": 100,\n\t\"./mt\": 102,\n\t\"./mt.js\": 102,\n\t\"./my\": 103,\n\t\"./my.js\": 103,\n\t\"./nb\": 104,\n\t\"./nb.js\": 104,\n\t\"./ne\": 105,\n\t\"./ne.js\": 105,\n\t\"./nl\": 106,\n\t\"./nl-be\": 107,\n\t\"./nl-be.js\": 107,\n\t\"./nl.js\": 106,\n\t\"./nn\": 108,\n\t\"./nn.js\": 108,\n\t\"./oc-lnc\": 109,\n\t\"./oc-lnc.js\": 109,\n\t\"./pa-in\": 110,\n\t\"./pa-in.js\": 110,\n\t\"./pl\": 111,\n\t\"./pl.js\": 111,\n\t\"./pt\": 112,\n\t\"./pt-br\": 113,\n\t\"./pt-br.js\": 113,\n\t\"./pt.js\": 112,\n\t\"./ro\": 114,\n\t\"./ro.js\": 114,\n\t\"./ru\": 115,\n\t\"./ru.js\": 115,\n\t\"./sd\": 116,\n\t\"./sd.js\": 116,\n\t\"./se\": 117,\n\t\"./se.js\": 117,\n\t\"./si\": 118,\n\t\"./si.js\": 118,\n\t\"./sk\": 119,\n\t\"./sk.js\": 119,\n\t\"./sl\": 120,\n\t\"./sl.js\": 120,\n\t\"./sq\": 121,\n\t\"./sq.js\": 121,\n\t\"./sr\": 122,\n\t\"./sr-cyrl\": 123,\n\t\"./sr-cyrl.js\": 123,\n\t\"./sr.js\": 122,\n\t\"./ss\": 124,\n\t\"./ss.js\": 124,\n\t\"./sv\": 125,\n\t\"./sv.js\": 125,\n\t\"./sw\": 126,\n\t\"./sw.js\": 126,\n\t\"./ta\": 127,\n\t\"./ta.js\": 127,\n\t\"./te\": 128,\n\t\"./te.js\": 128,\n\t\"./tet\": 129,\n\t\"./tet.js\": 129,\n\t\"./tg\": 130,\n\t\"./tg.js\": 130,\n\t\"./th\": 131,\n\t\"./th.js\": 131,\n\t\"./tk\": 132,\n\t\"./tk.js\": 132,\n\t\"./tl-ph\": 133,\n\t\"./tl-ph.js\": 133,\n\t\"./tlh\": 134,\n\t\"./tlh.js\": 134,\n\t\"./tr\": 135,\n\t\"./tr.js\": 135,\n\t\"./tzl\": 136,\n\t\"./tzl.js\": 136,\n\t\"./tzm\": 137,\n\t\"./tzm-latn\": 138,\n\t\"./tzm-latn.js\": 138,\n\t\"./tzm.js\": 137,\n\t\"./ug-cn\": 139,\n\t\"./ug-cn.js\": 139,\n\t\"./uk\": 140,\n\t\"./uk.js\": 140,\n\t\"./ur\": 141,\n\t\"./ur.js\": 141,\n\t\"./uz\": 142,\n\t\"./uz-latn\": 143,\n\t\"./uz-latn.js\": 143,\n\t\"./uz.js\": 142,\n\t\"./vi\": 144,\n\t\"./vi.js\": 144,\n\t\"./x-pseudo\": 145,\n\t\"./x-pseudo.js\": 145,\n\t\"./yo\": 146,\n\t\"./yo.js\": 146,\n\t\"./zh-cn\": 147,\n\t\"./zh-cn.js\": 147,\n\t\"./zh-hk\": 148,\n\t\"./zh-hk.js\": 148,\n\t\"./zh-mo\": 149,\n\t\"./zh-mo.js\": 149,\n\t\"./zh-tw\": 150,\n\t\"./zh-tw.js\": 150\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 175;","/* 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: 'Play / Pause button',\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: '',\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 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';\n\nexport default class Anchors {\n constructor() {\n this.id = '';\n this.offset = 20;\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.offset,\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","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('
');\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('');\n });\n });\n }\n\n sitemap() {\n // Add Sitemap output using the digitaldcore.js function\n const $map = $('#sitemap');\n const $nav = $('#sitemap .content');\n\n if ($map.length && $nav.length) {\n Drupal.digitaldcoreCreateSiteMap($map, $nav);\n $map.addClass('ready');\n }\n }\n\n /**\n * Adds the has more class to subterm overviews to properly control node-link display\n */\n subtermOverviews() {\n $('.subterm-overview .node-teaser').removeClass('no-more').addClass('has-more');\n }\n\n /**\n * Helper function to theme the category letters and seperate the sections\n */\n lexiconGlossary() {\n $('#glossary').find('.lexicon-list > a').each((i, element) => {\n const letter = $(element).attr('id').replace('letter_', '');\n $(element).html(letter.toUpperCase());\n });\n }\n\n /**\n * Adds page anchor support\n */\n anchors() {\n if (!document.body.Anchors) {\n document.body.Anchors = new Anchors();\n }\n }\n\n /**\n * Overtake Lightbox\n */\n overtakeLightbox() {\n // Replace Lightbox lightframe functionality with Modaal.\n $('.open-lightframe').each((i, element) => {\n if (!element.Modaal) {\n const selector = '.node-header a, .field-image a, .link-read-more a';\n element.Modaal = new Modaal(element, selector);\n }\n });\n\n // Replace Lightbox slideshow functionality with Modaal.\n $('.te-open-slideshow .node, .te-open-slideshow.node').each((i, element) => {\n if (!element.Modaal) {\n const selector = '.field-image a';\n element.Modaal = new Modaal(element, selector);\n }\n });\n\n // Replace Lightbox and Lighframe straggelers.\n $('[rel^=lightbox], [rel^=lightframe]').closest('.node').each((i, element) => {\n const notValid = element.parentNode.classList.contains('dd-hover-dependencies');\n if (!element.Modaal && !notValid) {\n const selector = '.field-image a';\n element.Modaal = new Modaal(element, selector);\n }\n });\n }\n}\n","import $ from 'jquery';\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 // Remove empty li tags which is somehow a thing :(\n $('li:empty', this.element).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 HeadroomCore from 'headroom.js';\nimport Breakpoints from './Breakpoints';\nimport { offsets, units } from '../../config';\n\n// Headroom settings\nconst settings = {\n // scroll tolerance in px before state changes\n tolerance: 5, // or {down: 0, up: 0},\n // css classes to apply\n classes: {\n // when element is initialised\n initial: 'headroom',\n // when scrolling up\n pinned: 'locked',\n // when scrolling down\n unpinned: 'unlocked',\n // when above offset\n top: 'top',\n // when below offset\n notTop: 'not-top',\n // when at bottom of scoll area\n bottom: 'bottom',\n // when not at bottom of scroll area\n notBottom: 'not-bottom',\n },\n // callback when pinned, `this` is headroom object\n onPin() {},\n // callback when unpinned, `this` is headroom object\n onUnpin() {},\n // callback when above offset, `this` is headroom object\n onTop() {},\n // callback when below offset, `this` is headroom object\n onNotTop() {},\n // callback at bottom of page, `this` is headroom object\n onBottom() {},\n // callback when moving away from bottom of page, `this` is headroom object\n onNotBottom() {},\n};\n\nexport default class Headroom {\n constructor(element) {\n this.element = element;\n this.offsets = offsets;\n this.offsetUnit = units.offset;\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 let currentBreakpoint = this.offsets[Breakpoints.current().name];\n // We're making the assumption that the root font size is being set on the html element.\n // Also, we're only making an exception for the alternate unit, `rem` at the moment.\n if (this.offsetUnit === 'rem') {\n const html = document.querySelector('html');\n const multiplier = window.getComputedStyle(html, null).getPropertyValue('font-size').replace('px', '');\n currentBreakpoint *= multiplier;\n }\n return currentBreakpoint;\n }\n}\n","import Timer from 'tick-tock';\n\nconst components = {\n text: 'Search',\n input: '#edit-keywords',\n};\n\nexport default class Search {\n constructor(element, customComponents) {\n // Make reference to the passed in element.\n this.element = element;\n\n // Manage intervals and timeouts with the TickTock tool.\n this.Timer = new Timer();\n\n // Merge default components with custom ones, if applicable.\n this.components = { ...components, ...customComponents };\n\n // Clear out values of these components.\n this.input.value = '';\n\n // Event management\n this.listen();\n }\n\n // Focus the search box after a small delay.\n\n focusIn() {\n this.input.setAttribute('placeholder', '');\n this.Timer.setTimeout('focus', () => {\n this.typeOutPlaceholderText();\n }, 250);\n }\n\n // Cancel any search input timeouts that may be running.\n\n focusOut() {\n this.Timer.clear('focus');\n this.Timer.clear('typing');\n }\n\n // Types out placeholder text on focusin state.\n\n typeOutPlaceholderText() {\n let i = 0;\n if (!this.input.value.length) {\n this.Timer.setInterval('typing', () => {\n if (i <= this.searchText.length) {\n this.input.setAttribute('placeholder', this.searchText.substr(0, i));\n this.input.focus();\n i += 1;\n } else {\n this.Timer.clear('typing');\n }\n }, 60);\n } else {\n this.input.focus();\n }\n }\n\n // This is a workaround to overcome the default dd-search.js search\n // input scripted behaviors.\n\n resetSearchInput() {\n if (this.searchText === this.input.value) {\n this.input.value = '';\n }\n }\n\n // Listening so that we can override previously set scripted behaviors.\n\n listen() {\n this.input.addEventListener('focusin', this.resetSearchInput.bind(this));\n this.input.addEventListener('focusout', this.resetSearchInput.bind(this));\n }\n\n // Getters of various components.\n\n get searchText() {\n return this.components.text;\n }\n\n get input() {\n return this.element.querySelector(this.components.input);\n }\n}\n","import FocusTrap from 'focus-trap';\nimport Keyboard from 'keyboard-key';\nimport Search from './Search';\n\nconst defaults = {\n activeState: {\n menu: 'menu-active',\n search: 'search-active',\n },\n buttons: {\n menu: '.menu-button',\n search: '.search-button',\n },\n components: {\n flyout: '#flyout',\n search: '#dd-search',\n header: '.page-header',\n },\n};\n\nexport default class Toolbar {\n constructor(element, options) {\n this.element = element;\n this.settings = { ...defaults, ...options };\n this.Search = this.addSearchLogic();\n this.FocusTrap = this.addFocusTrapLogic();\n this.listen();\n }\n\n // Add search logic to manage the various states of the search component\n\n addSearchLogic() {\n return this.searchComponent ? new Search(this.searchComponent) : false;\n }\n\n // Add focus-trap logic to manage focus state when flyout is expanded.\n\n addFocusTrapLogic() {\n return new FocusTrap(this.headerComponent, {\n initialFocus: this.flyoutComponent,\n });\n }\n\n // Manage click events.\n\n menuClickHandler() {\n // Deactive search if the menu button is clicked.\n if (this.isSearchActive) {\n this.deactivateSearch();\n }\n\n // Toggle menu state.\n return this.isMenuActive ? this.deactivateMenu() : this.activateMenu();\n }\n\n searchClickHandler() {\n // Deactive search if the menu button is clicked.\n if (this.isMenuActive) {\n this.deactivateMenu();\n }\n\n // Toggle search state.\n return this.isSearchActive ? this.deactivateSearch() : this.activateSearch();\n }\n\n // Manage keydown events.\n\n keyDownHandler(event) {\n const keyCode = Keyboard.getCode(event);\n if (keyCode === Keyboard.Escape) {\n this.deactivateMenu();\n this.deactivateSearch();\n }\n }\n\n // Activates the flyout and all of the associated buttons.\n\n activateMenu() {\n document.body.classList.add(this.settings.activeState.menu);\n if (this.menuButton) this.menuButton.setAttribute('aria-expanded', true);\n\n // Leverage the focus trap logic to lock active element focus\n // within the flyout only.\n this.FocusTrap.activate();\n\n // Set focus on the flyout.\n this.flyoutComponent.focus();\n }\n\n // Activates the search components.\n\n activateSearch() {\n document.body.classList.add(this.settings.activeState.search);\n if (this.searchButton) this.searchButton.setAttribute('aria-expanded', true);\n // Leverage the Search logic to manage it's focus in state.\n if (this.Search) {\n this.Search.focusIn();\n }\n }\n\n // Deactivates the flyout and all of the associated buttons.\n\n deactivateMenu() {\n this.FocusTrap.deactivate();\n document.body.classList.remove(this.settings.activeState.menu);\n if (this.menuButton) this.menuButton.setAttribute('aria-expanded', false);\n }\n\n // Deactivates the search components.\n\n deactivateSearch() {\n document.body.classList.remove(this.settings.activeState.search);\n if (this.searchButton) this.searchButton.setAttribute('aria-expanded', false);\n\n // Leverage the Search logic to manage it's focus out state.\n if (this.Search) {\n this.Search.focusOut();\n }\n }\n\n // Set up event listeners to help control the various states of the toolbar and flyout.\n\n listen() {\n this.element.addEventListener('keydown', this.keyDownHandler.bind(this));\n if (this.menuButton) this.menuButton.addEventListener('click', this.menuClickHandler.bind(this));\n if (this.searchButton) this.searchButton.addEventListener('click', this.searchClickHandler.bind(this));\n }\n\n // Getters of the various components available\n\n get menuButton() {\n return this.element.querySelector(this.settings.buttons.menu);\n }\n\n get searchButton() {\n return this.element.querySelector(this.settings.buttons.search);\n }\n\n get flyoutComponent() {\n return document.querySelector(this.settings.components.flyout);\n }\n\n get searchComponent() {\n return document.querySelector(this.settings.components.search);\n }\n\n get headerComponent() {\n return document.querySelector(this.settings.components.header);\n }\n\n get isMenuActive() {\n return document.body.classList.contains(this.settings.activeState.menu);\n }\n\n get isSearchActive() {\n return document.body.classList.contains(this.settings.activeState.search);\n }\n}\n","import Breakpoints from '../components/Breakpoints';\n\nconst config = {\n mobile: {\n header: [\n '.branding',\n '.menu-button',\n ],\n flyout: [\n '.gtranslate',\n '.site-search',\n '.search-button',\n '.primary-navigation',\n '.social-links',\n ],\n },\n tablet: {\n header: [\n '.branding',\n '.gtranslate',\n '.menu-button',\n ],\n flyout: [\n '.site-search',\n '.search-button',\n '.primary-navigation',\n '.social-links',\n ],\n },\n desktop: {\n header: [\n '.search-button',\n '.site-search',\n '.gtranslate',\n '.branding',\n '.social-links',\n '.menu-button',\n ],\n flyout: [\n '.primary-navigation',\n ],\n },\n};\n\nexport default class Shift {\n constructor(element) {\n this.element = element;\n this.config = config;\n\n if (!this.header || !this.flyout) {\n throw Error('[Shift] module requires a .header .layout and .flyout .layout element to proceed.');\n }\n\n this.listen();\n this.ready();\n }\n\n update(data) {\n Object.entries(this.config[data.config]).forEach(this.rearrange.bind(this));\n }\n\n rearrange([region, blocks]) {\n blocks.forEach((selector) => {\n const block = this.element.querySelector(selector);\n if (block) {\n this[region].append(block);\n }\n });\n }\n\n listen() {\n // Listen for breakpoint changes\n Breakpoints.on('mobile', 'enter', { config: 'mobile' }, this.update.bind(this));\n Breakpoints.on('tablet', 'enter', { config: 'tablet' }, this.update.bind(this));\n Breakpoints.on('desktop desktop_xl', 'enter', { config: 'desktop' }, this.update.bind(this));\n }\n\n ready() {\n this.element.classList.add('ready');\n }\n\n get header() {\n return this.element.querySelector('.header .layout');\n }\n\n get flyout() {\n return this.element.querySelector('.flyout .layout');\n }\n}\n","import $ 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';\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 this.element.classList[this.state]('sticky');\n }\n\n get offset() {\n return this.element.parentNode.offsetTop;\n }\n\n get state() {\n return window.innerHeight - this.offset > this.element.offsetHeight ? 'add' : 'remove';\n }\n}\n","export default class Placeholder {\n constructor(element) {\n this.element = element;\n this.element.setAttribute('placeholder', this.text);\n }\n\n get text() {\n let text = '';\n if (this.label) {\n text += this.label.innerText.replace(/[:*]/g, '');\n }\n return text;\n }\n\n get label() {\n return this.element.parentNode.querySelector('label');\n }\n}\n","import Keyboard from 'keyboard-key';\n\n/**\n * Default options\n *\n * @prop {String || HTMLElement} button - A selector string or passed in element.\n * @prop {String || HTMLElement} panel - A selector string or passed in element.\n * @prop {String || HTMLElement} close - A selector string or passed in element.\n */\n\nconst defaults = {\n button: '.node-button',\n panel: '.node-panel',\n close: '.btn-close',\n};\n\nexport default class PanelGroup {\n constructor(element, options) {\n this.element = element;\n this.expanded = false;\n this.selectors = { ...defaults, ...options };\n this.hasClose = this.closeButton;\n this.addEventListeners();\n }\n\n keydownHandler(event) {\n const key = Keyboard.getCode(event);\n if (key === Keyboard.Escape && this.expanded) {\n this.deactivate();\n }\n }\n\n clickHandler() {\n return this.expanded ? this.deactivate() : this.activate();\n }\n\n closeHandler() {\n return this.deactivate();\n }\n\n activate() {\n this.expanded = true;\n this.updateView();\n this.element.dispatchEvent(new CustomEvent('expanded', { bubbles: true }));\n }\n\n deactivate() {\n this.expanded = false;\n this.updateView();\n this.element.dispatchEvent(new CustomEvent('collapsed', { bubbles: true }));\n }\n\n updateView() {\n this.panel.setAttribute('aria-hidden', !this.expanded);\n this.button.setAttribute('aria-expanded', this.expanded);\n if (this.hasClose) {\n this.closeButton.setAttribute('aria-expanded', this.expanded);\n }\n }\n\n get button() {\n let button = this.element.querySelector(this.selectors.button);\n if (this.selectors.button instanceof HTMLElement) {\n button = this.selectors.button;\n }\n return button;\n }\n\n get panel() {\n let panel = this.element.querySelector(this.selectors.panel);\n if (this.selectors.panel instanceof HTMLElement) {\n panel = this.selectors.panel;\n }\n return panel;\n }\n\n get closeButton() {\n let close = this.element.querySelector(this.selectors.close) || false;\n if (this.selectors.close instanceof HTMLElement) {\n close = this.selectors.close;\n }\n return close;\n }\n\n addEventListeners() {\n window.addEventListener('keydown', this.keydownHandler.bind(this));\n this.button.addEventListener('click', this.clickHandler.bind(this));\n if (this.hasClose) {\n this.closeButton.addEventListener('click', this.closeHandler.bind(this));\n }\n }\n}\n","import Timer from 'tick-tock';\n\nexport default class Hero {\n constructor(element) {\n this.element = element;\n this.timer = new Timer();\n this.ready();\n }\n\n ready() {\n this.timer.setTimeout('delay', () => {\n this.element.classList.add('ready');\n this.timer.clear('delay');\n }, 350);\n }\n}\n","import Slider from '../components/Slider';\n\nconst defaults = {\n wrapAround: true,\n pageDots: false,\n autoPlay: false,\n adaptiveHeight: true,\n arrowShape: 'M24.5,51.6v-3.2l19.6-19.6l3.2,3.2L31.5,47.8h44.1v4.5H31.5L47.2,68l-3.2,3.2L24.5,51.6z',\n slidesPerGroup: 2,\n};\n\nexport default class News {\n constructor(element) {\n this.element = element;\n this.settings = defaults;\n this.preprocess();\n this.build();\n this.ready();\n }\n\n preprocess() {\n const total = Math.ceil(this.slides.length / this.settings.slidesPerGroup);\n const groupings = [];\n let groupID = 0;\n\n // Create a multi-dimensional array which houses each group array within\n // a groupings array.\n for (let index = 0; index < total; index += 1) {\n groupings.push([]);\n }\n\n // Place each slide within it's proper group.\n this.slides.forEach((slide, index) => {\n groupings[groupID].push(slide);\n if (index % this.settings.slidesPerGroup === 1) {\n groupID += 1;\n }\n });\n\n // Loop through each group within the multi-dimensional groupings array\n // to nest slides within a group wrapper element.\n groupings.forEach((group, index) => {\n const slideGroup = document.createElement('div');\n slideGroup.className = 'slide-group';\n this.container.appendChild(slideGroup);\n group.forEach((slide) => {\n slideGroup.appendChild(slide);\n });\n\n // Add in missing classname when there is only one slide group.\n if (index === 0 && groupings.length === 1) {\n slideGroup.classList.add('is-selected');\n }\n });\n }\n\n build() {\n this.Slider = new Slider(this.container, this.settings);\n }\n\n ready() {\n this.element.classList.add('ready');\n }\n\n get container() {\n return this.element.querySelector('.slider');\n }\n\n get slides() {\n return this.container.querySelectorAll('.slide');\n }\n}\n","import { CountUp } from 'countup.js';\nimport InViewport from 'in-viewport';\n\nconst countUpOptions = {\n duration: 2,\n startVal: 0,\n useEasing: true,\n};\n\nconst viewportOptions = {\n offset: -100,\n};\n\nexport default class Stats {\n constructor(element) {\n this.element = element;\n this.countupOptions = countUpOptions;\n this.viewportOptions = viewportOptions;\n this.listen();\n }\n\n visibleHandler() {\n this.slides.forEach((slide) => {\n const value = slide.querySelector('.value');\n const digits = document.createElement('span');\n digits.className = 'digits';\n digits.innerText = '0';\n\n if (value) {\n const html = value.cloneNode();\n const exp = new RegExp(/([0-9.,]{2,})/);\n const results = value.innerHTML.split(exp);\n results.forEach((result, i) => {\n let output = document.createTextNode(result);\n if (i === 1) {\n digits.setAttribute('data-end', result.replace(/[.,]/, ''));\n output = digits;\n }\n html.appendChild(output);\n });\n value.replaceWith(html);\n this.startCountDown(digits);\n }\n });\n }\n\n startCountDown(element) {\n const endValue = Number(element.getAttribute('data-end'));\n element.countUp = new CountUp(element, endValue, this.countUpOptions);\n element.countUp.start();\n }\n\n listen() {\n InViewport(this.element, this.viewportOptions, this.visibleHandler.bind(this));\n }\n\n get slides() {\n return this.element.querySelectorAll('.block-content > *');\n }\n}\n","// import $ from 'jquery';\n\nexport default class FixTranslate {\n constructor(element) {\n this.element = element;\n this.process();\n }\n\n process() {\n const head = this.element.contentWindow.document.querySelector('html head');\n const link = document.createElement('link');\n link.type = 'text/css';\n link.rel = 'stylesheet';\n link.href = 'https://www.altaregional.org/sites/default/files/theme/dtheme-direct.css';\n head.appendChild(link);\n }\n}\n","import $ from 'jquery';\nimport moment from 'moment';\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 = Object.assign({}, defaults, options);\n this.settings = { ...defaults, ...options };\n this.filters = this.getFilters();\n this.buildCalendar();\n if (this.settings.useFilters) {\n this.createFilters();\n }\n }\n\n buildCalendar() {\n const $posts = this.$element.find('.node');\n const group = '
';\n let currentYear = null;\n let currentMonth = '';\n let $group;\n\n // Manage the types of calendar filters being created\n $posts.each((i, post) => {\n const $post = $(post);\n const dates = ['start', 'end'];\n const oDates = {};\n\n // Parse the start/end timestamps using the moment.js framework\n $.each(dates, (j, type) => {\n const datetime = $post.find(`time.${type}`).attr('datetime');\n const date = moment(datetime);\n // .format('h:mm a');\n oDates[type] = {\n month: date.format('MMMM'),\n mon: date.format('MMM'),\n day: date.format('D'),\n dow: date.format('ddd'),\n year: date.format('YYYY'),\n };\n });\n\n // Add the post into a month grouping\n if (oDates.start.month.length && currentMonth !== oDates.start.month) {\n currentMonth = oDates.start.month;\n $group = $(group);\n $group.addClass(oDates.start.month.toLowerCase());\n $group.append(`

${oDates.start.month}

`);\n $post.before($group);\n\n // Set year labels followed by the associated months of that year\n if (oDates.start.year && oDates.start.year > currentYear) {\n const $year = $(`${oDates.start.year}`);\n $group.before($year);\n currentYear = oDates.start.year;\n }\n }\n\n // Dynamically create the date tile for the event display\n const $tile = $post.find('.event-date-tile');\n const markup = (data) => `${data.dow}${data.mon}${data.day}`;\n $tile.find('time.start').html(markup(oDates.start));\n\n // Handle date ranges\n if ($tile.is('.range')) {\n const isSameMonth = oDates.start.month === oDates.end.month;\n const isSameDay = oDates.start.day === oDates.end.day;\n const isSameYear = oDates.start.year === oDates.end.year;\n\n // console.log(oDates);\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 const $container = $('
');\n const filter = '
';\n let types = [];\n let 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 // Using the provided date, rebuild the arrays using relevant data.\n ({ types } = data);\n ({ ids } = data);\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 hash = hash.replace(/[-_]/g, ' ');\n if (hash[0] !== hash[0].toUpperCase()) {\n const tempHash = hash.split(' ');\n hash = tempHash.map((e) => e.charAt(0).toUpperCase() + e.substr(1).toLowerCase()).join(' ');\n }\n const filterExists = hash in this.filters;\n const idExists = data.types.indexOf(hash);\n\n if (filterExists && idExists < 0) {\n data.types.push(hash);\n data.ids.push(this.filters[hash]);\n window.console.log(\"found, but hasn't been added to the data. Let's add it\", data);\n } else {\n window.console.log(\"filter doesn't exist or already exists in our data.\");\n }\n }\n\n // Create filters\n $.each(types, (i, type) => {\n const $filter = $(filter);\n // Use the type key to identify the associated filter id\n const id = 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 $container.append($filter);\n\n // Add a click handler\n $filter.bind('click', (event) => {\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 if (!$show.length) {\n this.$element.addClass('no-event');\n } else {\n this.$element.removeClass('no-event');\n }\n\n // Manage the active filter styling\n const $filters = $element.find('.filters .filter');\n $filters.not(event.currentTarget).removeClass('active');\n $filters.filter(event.currentTarget).addClass('active');\n\n // hide all events that aren't of this type\n $posts.not($show).stop(true, true).animate({\n opacity: 'hide',\n height: 'hide',\n }, 300).removeClass('show');\n\n // show all events that are of this type\n $show.stop(true, true).animate({\n opacity: 'show',\n height: 'show',\n }, 300).addClass('show');\n\n // Set the current filter into session storage\n sessionStorage.setItem(this.settings.storageKey, id);\n currentFilter = id;\n\n // Check to see if the event group is empty\n $element.find('.group').each((j, element) => {\n const $shown = $('.node.show', element);\n const result = $shown.length ? 'show' : 'hide';\n\n // Add a helper class for the use with the year function below\n if ($shown.length) {\n $(element).addClass('show');\n } else {\n $(element).removeClass('show');\n }\n\n // Manages the visibility of the group\n $(element).stop(true, true).animate({\n opacity: result,\n height: result,\n }, 300);\n });\n\n // Check to see if the group year should display or not\n $element.find('.group-year').each((j, element) => {\n const $shown = $(element).nextUntil('.group-year').filter('.show');\n const result = $shown.length ? 'show' : 'hide';\n $(element).stop(true, true).animate({\n opacity: result,\n height: result,\n }, 300);\n });\n });\n });\n\n // Add a drop down controller for mobile\n const $ctrl = $(`

${this.settings.filtersLabel}

`);\n $ctrl.bind('click', this.filterHandler);\n\n // Add the drop down controller for mobile display\n $element.find('.view-header').append($ctrl, $container);\n\n // Simulate a click event for the last or default calendar filter\n $element.find(`.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-type', post).text();\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-type', post).text());\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\n/**\n * @plugin calfilters\n * @desc Adds filters to the calendar events grid view.\n * */\n\nconst pluginName = 'calfilters';\nconst defaults = {\n defaultFilter: null,\n filters: undefined,\n quantity: 0,\n};\n\nfunction CalFilters(element, options) {\n this.element = element;\n this.$calendar = $(element);\n this.$name = pluginName;\n this.$defaults = defaults;\n // this.options = Object.assign({}, defaults, options);\n this.options = { ...defaults, ...options };\n this.addFilters = this.addFilters.bind(this);\n this.$filters = this.render('filters');\n this.addFilters();\n this.init();\n}\n\nCalFilters.prototype = {\n init() {\n const plugin = this;\n plugin.$filters.find(`a.show-${plugin.currentFilter}`).click();\n },\n /**\n * Controls the assignment of the current calendar filter\n *\n * @returns {string}\n */\n getCurrentFilter() {\n // get saved calendar filter if it exists in sessionStorage.\n const plugin = this;\n const { filters } = plugin.options;\n const defaultFilter = plugin.getDefaultFilter();\n let currentFilter = sessionStorage.getItem('calfilters.currentFilter');\n\n // if the saved filter wasn't found or is invalid, set the current filter\n // to the default filter provided\n if (!currentFilter || !Object.prototype.hasOwnProperty.call(filters, currentFilter)) {\n currentFilter = defaultFilter;\n }\n return currentFilter;\n },\n /**\n * Controls the assignment of the default calendar filter\n *\n * @returns {string}\n */\n getDefaultFilter() {\n const plugin = this;\n const { filters } = plugin.options;\n let { defaultFilter } = plugin.options;\n\n // if a default filter was assigned, validate if it's a property of the\n // filters object\n if (defaultFilter && !Object.prototype.hasOwnProperty.call(filters, defaultFilter)) {\n // notify the user that an invalid default filter was passed\n alert(`[calfilter] An invalid default calendar filter ('${defaultFilter}') has been passed to the calfilters js plugin.`);\n // invalid default filter passed, eliminate it\n defaultFilter = null;\n }\n\n // set the default filter (to the first property of the filters object)\n // if it wasn't passed or is invalid\n if (!defaultFilter) {\n const keys = [];\n $.each(filters, (k) => {\n keys.push(k);\n });\n [defaultFilter] = keys;\n }\n return defaultFilter;\n },\n tabClicked(event) {\n const plugin = event.data.scope;\n const filter = event.data.value;\n plugin.$filters.find('a.active').removeClass('active');\n $(this).addClass('active');\n plugin.$calendar.find(`.node:visible:not(.wt${filter})`).slideUp();\n plugin.$calendar.find(`.node.wt${filter}`).slideDown();\n // store the current filter to persist through different calendar views.\n sessionStorage.setItem('calfilters.currentFilter', filter);\n plugin.currentFilter = filter;\n event.preventDefault();\n },\n render(name, args) {\n const plugin = this;\n const templates = {\n filters() {\n const $filters = $('
');\n let activeSet = false;\n $.each(plugin.options.filters, (filter, value) => {\n let filterClasses = 'filter';\n if (!activeSet) {\n filterClasses += ' active';\n activeSet = true;\n }\n if (plugin.$calendar.find('.node').hasClass(`wt${value}`)) {\n $filters.append(`${filter}`);\n $filters.find(`.show-${value}`).bind('click', { scope: plugin, value }, plugin.tabClicked);\n plugin.options.quantity += 1;\n }\n });\n return $filters;\n },\n };\n // return a rendered template.\n return templates[name](args);\n },\n\n createDropdown() {\n return '

Filter by...

';\n },\n\n addListener() {\n this.$createDropdown.insertBefore(this.$calendar.find('.filters'));\n this.$createDropdown.bind('click', this.filterHandler);\n },\n\n filterHandler(event) {\n event.preventDefault();\n $(this).next('.filters').toggleClass('expanded');\n },\n\n addFilters() {\n if (this.options.quantity > 1) {\n this.$filters.insertBefore(this.$calendar.find('.calendar-heading .date-nav'));\n this.$createDropdown = $(this.createDropdown());\n this.addListener();\n }\n },\n};\n\n// $.fn[pluginName] = (options) => {\n// const temp = this.each(() => {\n// if (!$.data(this, `plugin_${pluginName}`)) {\n// $.data(this, `plugin_${pluginName}`, new Plugin(this, options));\n// }\n// });\n// return temp;\n// };\n\nexport default CalFilters;\n","import 'focus-visible';\nimport Drupal from './core/Drupal';\nimport DDTemplates from './core/DDTemplates';\nimport FixNavigation from './core/FixNavigation';\nimport TermNavigation from './core/TermNavigation';\nimport FetchSourceImages from './core/FetchSourceImages';\nimport Breakpoints from './components/Breakpoints';\nimport Headroom from './components/Headroom';\nimport Toolbar from './header/Toolbar';\nimport Shift from './utils/Shift';\nimport Sticky from './utils/Sticky';\nimport Navigation from './components/Navigation';\nimport Placeholder from './utils/Placeholder';\nimport PanelGroup from './components/PanelGroup';\nimport Hero from './home/Hero';\nimport News from './home/News';\nimport Stats from './home/Stats';\nimport FixTranslate from './core/FixTranslate';\nimport CalendarFeed from './core/CalendarFeed';\nimport CalendarGridFilters from './core/CalendarGridFilters';\n\n// ----------------------------------------------------------------------------\n// Homepage Specific Behaviors.\n// ----------------------------------------------------------------------------\n\nconst homeBehaviors = () => {\n const $modal = document.querySelectorAll('#custom-modal-overlay')[0];\n const $storiesButton = document.querySelectorAll('#stories-video');\n const video = document.querySelector('#video');\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 // News Block\n document.querySelectorAll('.home-news.block').forEach((element) => {\n if (!element.News) {\n element.News = new News(element);\n }\n });\n\n // Stats Block\n document.querySelectorAll('.home-stats.block').forEach((element) => {\n if (!element.Stats) {\n element.Stats = new Stats(element);\n }\n });\n\n function hideModal() {\n document.querySelectorAll('body')[0].classList.remove('no-scroll');\n $modal.style.display = 'none';\n video.pause();\n video.currentTime = 0;\n }\n\n document.querySelectorAll('.close-modal-button').forEach((element) => {\n element.addEventListener('click', (e) => {\n e.preventDefault();\n hideModal();\n });\n });\n\n document.querySelectorAll('#custom-modal-overlay').forEach((element) => {\n document.querySelectorAll('.page')[0].insertBefore(element, null);\n });\n\n // Hide modal if modal is open and escape key is pressed.\n document.addEventListener('keydown', (e) => {\n if (e.key === 'Escape' && $modal.style.display === 'block') {\n hideModal();\n }\n });\n\n // Hide modal if the target of the click isn't the modal.\n document.addEventListener('click', (e) => {\n if ((e.target !== $modal.firstElementChild\n && e.target !== $modal.firstElementChild.firstElementChild\n && e.target !== $storiesButton[0])\n && $modal.style.display === 'block') {\n hideModal();\n }\n });\n\n $storiesButton.forEach((element) => {\n element.addEventListener('click', (e) => {\n e.preventDefault();\n document.querySelectorAll('body')[0].classList.add('no-scroll');\n $modal.style.display = 'block';\n });\n });\n};\n\n// ----------------------------------------------------------------------------\n// Core Theme Behaviors.\n// ----------------------------------------------------------------------------\n\nconst coreBehaviors = () => {\n // DD Template Behaviors\n if (!document.body.DDTemplates) {\n document.body.DDTemplates = new DDTemplates();\n }\n\n // Fix our damn menus from displaying orphaned children\n document.querySelectorAll('.main-navigation, .term-navigation').forEach((element) => {\n if (!element.FixNavigation) {\n element.FixNavigation = new FixNavigation(element);\n }\n });\n\n // Sticky sidebars\n document.querySelectorAll('.page-sidebar').forEach((element) => {\n if (!element.Sticky) {\n element.Sticky = new Sticky(element);\n }\n });\n\n // Main Navigation\n document.querySelectorAll('#nice-menu-3').forEach((element) => {\n if (!element.Navigation) {\n element.Navigation = new Navigation(element, {\n expandActiveMenus: true,\n closeUnnestedMenus: false,\n focusout: false,\n hover: false,\n });\n\n // Expands all root terms on all desktop breakpoints.\n Breakpoints.on('desktop desktop_xl', 'enter', () => {\n element.querySelectorAll('a.depth-1 + .navigation__toggle').forEach((toggle) => {\n if (toggle.getAttribute('aria-expanded') === 'false') {\n toggle.dispatchEvent(new MouseEvent('mousedown', { bubbles: true }));\n }\n });\n });\n }\n });\n\n document.querySelectorAll('.page-header').forEach((element) => {\n // Controls the states of the menu and search states\n if (!element.Toolbar) {\n element.Toolbar = new Toolbar(element);\n }\n // Controls the states of the menu and search states\n if (!element.Shift) {\n element.Shift = new Shift(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 // Term Navigation\n document.querySelectorAll('.term-navigation').forEach((element) => {\n if (!element.TermNavigation) {\n element.TermNavigation = new TermNavigation(element);\n }\n });\n\n // Calendar of Events View\n // document.querySelectorAll('.calendar-feed').forEach((element) => {\n // if (!element.CalendarFeed) {\n // element.CalendarFeed = new CalendarFeed(element);\n // }\n // });\n // 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 'Alta Sponsored Event': 555,\n 'Board Meeting': 316,\n 'Community Event': 554,\n 'Cultural Diversity': 634,\n 'Deaf+': 638,\n 'Public Meetings': 637,\n Trainings: 635,\n 'Vendor Events': 636,\n },\n });\n }\n });\n\n document.querySelectorAll('.view-grid-calendar').forEach((element) => {\n if (!element.calendarGridFilters) {\n element.calendarGridFilters = new CalendarGridFilters(element, {\n filters: {\n All: 2,\n 'Alta Sponsored Event': 555,\n 'Board Meeting': 316,\n 'Community Event': 554,\n 'Cultural Diversity': 634,\n 'Deaf+': 638,\n 'Public Meetings': 637,\n Trainings: 635,\n 'Vendor Events': 636,\n },\n });\n }\n });\n\n // Footerlink accordions\n document.querySelectorAll('.node-accordion').forEach((element) => {\n if (!element.PanelGroup) {\n element.PanelGroup = new PanelGroup(element);\n }\n });\n\n // Placeholder text\n document.querySelectorAll('.node-webform input').forEach((element) => {\n if (!element.Placeholder) {\n element.Placeholder = new Placeholder(element);\n }\n });\n\n // Fix Translate dropdown\n document.querySelectorAll('.goog-te-menu-frame').forEach((element) => {\n if (!element.FixTranslate) {\n element.FixTranslate = new FixTranslate(element);\n }\n });\n};\n\n// ----------------------------------------------------------------------------\n// Load homepage behaviors if we're on the frontpage.\n// ----------------------------------------------------------------------------\n\nif (document.body.classList.contains('front')) {\n Drupal.behavior(homeBehaviors);\n}\n\n// ----------------------------------------------------------------------------\n// Load core behaviors.\n// ----------------------------------------------------------------------------\n\nDrupal.behavior(coreBehaviors);\n\n// ----------------------------------------------------------------------------\n// If we're in development mode...\n// Open up all missing images within a new tab/window.\n// ----------------------------------------------------------------------------\n\nif (process.env.NODE_ENV === 'development') {\n document.body.FetchSourceImages = new FetchSourceImages();\n}\n","// -----------------------------------------------------------------------------\n// Domain to use with the import/export script\n// -----------------------------------------------------------------------------\n\nconst domain = 'https://live-alta2020.pantheonsite.io';\n\n// -----------------------------------------------------------------------------\n// Set the base sizes for this theme.\n// -----------------------------------------------------------------------------\n\nconst base = {\n font_size: 18,\n line_height: 1.5,\n};\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 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: 13.2,\n tablet: 17.6,\n desktop: 17,\n minimized: 10,\n desktop_xl: 17,\n};\n\n// -----------------------------------------------------------------------------\n// Centralized offsets used by various components.\n// -----------------------------------------------------------------------------\n\nconst offsets = {\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 // Problematic, don't change\n layout: 'px',\n gutter: 'px',\n breakpoint: 'px',\n\n // Trial and error\n offset: 'rem',\n header_height: 'rem',\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// -----------------------------------------------------------------------------\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('base', base),\n ...rekey('path', paths),\n ...unitize('layout', layout),\n ...unitize('offset', offsets),\n ...unitize('gutter', gutters),\n ...unitize('header_height', heights),\n ...unitize('breakpoint', breakpoints),\n};\n\n// -----------------------------------------------------------------------------\n// Exports configuration.\n// -----------------------------------------------------------------------------\n\nmodule.exports = {\n base,\n domain,\n paths,\n units,\n layout,\n heights,\n offsets,\n gutters,\n breakpoints,\n variables,\n};\n"],"sourceRoot":""}