{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/js/Drupal.js","webpack:///./src/js/HeroSlider.js","webpack:///./src/js/Viewport.js","webpack:///./src/js/CalendarFeed.js","webpack:///./src/js/DDTemplates.js","webpack:///./src/js/Anchors.js","webpack:///./src/js/FixNavigation.js","webpack:///./src/js/Gallery.js","webpack:///./src/js/GallerySlider.js","webpack:///./src/js/Header.js","webpack:///./src/js/MicrositeEvents.js","webpack:///./src/js/HomeQuotes.js","webpack:///./src/js/Messages.js","webpack:///./src/js/SmartFooter.js","webpack:///./src/js/Sticky.js","webpack:///./src/js/TermNavigation.js","webpack:///./src/js/ProximityController.js","webpack:///./src/js/Timeline.js","webpack:///./src/js/EventsSlider.js","webpack:///./src/js/CommunitiesSlider.js","webpack:///./src/js/JumpMenu.js","webpack:///./src/js/Scrolljs.js","webpack:///./src/js/PhotoGallery.js","webpack:///./src/js/Parallax.js","webpack:///./src/js/CommunitiesOverview.js","webpack:///./src/js/CommunitiesBlocksConfig.js","webpack:///./src/js/CommunitiesResources.js","webpack:///./src/js/Communities.js","webpack:///./src/js/Search.js","webpack:///./src/js/Toolbar.js","webpack:///./src/js/.theme.js","webpack:///./src/js/Flickity.js","webpack:///./src/js/Change.js","webpack:///./src/js/ModaalTransformer.js","webpack:///./src/js/Modaal.js","webpack:///./src/js/Navigation.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","0","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","behaviors","documentIsReady","Drupal","behavior","fn","$","Callbacks","document","ready","fire","DrupalAMD","context","add","this","config","win","dots","slider","viewport","viewportHeight","caption","header","cell","wrapper","image","HeroSlider","element","$element","flickityWrapper","build","update","addEventListener","passive","each","e","text","css","width","mobile","desktop","captionHeight","imageHeight","outerHeight","marginBottom","height","addClass","breakpoint","Viewport","_breakpoint","change","ticking","addListeners","state","mobileState","innerWidth","currentState","getCurrentState","previousState","changeCallbacks","setCurrentState","mobileCallbacks","desktopCallbacks","requestTick","requestAnimationFrame","callback","on","defaults","storageKey","paginationLabel","filtersLabel","filterByPostTypes","useFilters","filters","defaultFilters","All","CalendarFeed","options","settings","getFilters","buildCalendar","createFilters","$group","$posts","find","currentYear","currentMonth","post","$post","oDates","type","datetime","attr","dateObj","dayjs","month","format","mon","day","dow","year","start","toLowerCase","append","before","$year","$tile","markup","html","is","isSameMonth","end","isSameDay","isSameYear","appendTo","event","preventDefault","next","toggleClass","$filters","types","ids","id","getDefaultData","getCustomizedData","currentFilter","sessionStorage","getItem","hash","location","substr","decodeURIComponent","$filter","$show","filter","inArray","not","removeClass","stop","animate","opacity","setItem","$shown","nextUntil","$ctrl","filterHandler","trigger","_types","_ids","classes","regex","test","exec","indexes","aResults","aTypes","parseInt","index","indexOf","sort","photoGalleryPID","a11y","newTab","itemAppearsIn","fullNodeRelatedLinks","bundledReferringContent","subtermOverviews","lexiconGlossary","nodeMeta","slideshowIcons","expandingDates","DDTemplates","isNodeView","isNode","defineApplicableBehaviors","body","view","node","term","global","forEach","addEnabledBehavior","$appearingNav","$block","pattern","href","match","target","a","$node","$items","$visible","map","item","getComputedStyle","getPropertyValue","b","meta","$meta","$dates","$link","currentTarget","insertBefore","eq","$container","$img","letter","replace","toUpperCase","offset","Anchors","msgs","querySelectorAll","total","querySelector","offsetHeight","anchor","clickHandler","destination","getElementById","scrollTo","verticalOffset","maxDuration","minDuration","speed","FixNavigation","process","$parent","children","remove","$children","parent","fade","arrows","slidesToShow","slidesToScroll","responsive","Gallery","$gallery","slick","centerMode","centerPadding","autoplay","variableWidth","prevArrow","nextArrow","GallerySlider","tolerance","initial","pinned","unpinned","top","notTop","bottom","notBottom","onPin","onUnpin","onTop","onNotTop","onBottom","onNotBottom","Header","$messages","headroom","Headroom","init","sliderConfig","prevNextButtons","adaptiveHeight","draggable","MicrositeEvents","shouldBuildSlider","buildSlider","createContainers","classList","imageDateWrap","createElement","contentWrap","nodeUpperMeta","nodeImage","nodeUpperImage","nodeInner","appendChild","Flickity","sliderElement","slides","childNodes","arrowShape","wrapAround","HomeEvents","Messages","modaal","accessible_title","custom_class","content_source","start_open","SmartFooter","$reactiveElement","register","Change","onChange","Sticky","innerHeight","components","menuBlock","menuParent","expandActiveMenus","closeUnnestedMenus","focusout","hover","TermNavigation","open","menu","standardize","addLogic","listen","link","getAttribute","level","parentElement","list","Navigation","button","setAttribute","buttonLink","focus","ProximityController","geolocation","currentLocation","usingCurrentLocation","allow","setViewState","checkboxState","navigator","getCurrentPosition","maximumAge","position","coords","closest","$textfield","val","checkboxChangeHandler","submitHandler","$checkbox","textfieldChangeHandler","latitude","longitude","$hiddenfield","checked","Timeline","wrapContent","addVerticalTimeline","sortViewsRows","repositionViewsRows","createNavigation","menuPosition","linkActive","viewContent","verticalTimeline","nodeHeader","nodeContent","nodeLinks","wrapperDiv","viewsRows","yearDivs","row","textContent","trim","yearDiv","titleDiv","titleHeading","div","rows","keys","yearContainers","timelineNavigation","navigationLinks","container","customMenu","pageHeader","pageHeaderHeight","getBoundingClientRect","timeline","contentTop","scrollY","contains","pageHeaderActive","scrollPosition","headerHeight","style","links","pageCustomMenu","pageCustomMenuHeight","func","delay","timeoutId","delayedScrollIntoView","scrollIntoView","args","clearTimeout","setTimeout","sectionId","section","sectionTop","getSectionTop","CommunitiesSlider","currentIndex","toggle","obj","actualLink","label","focusOutHandler","keydownHandler","onDesktopChange","desktopStateHandler","onMobileChange","mobileStateHandler","relatedTarget","close","pressed","keyboard","getCode","ArrowDown","ArrowRight","prev","ArrowUp","ArrowLeft","updateSelection","Escape","expanded","scroller","undefined","Error","HTMLElement","validateElement","Element","sanitizeScrollOptions","duration","easing","utils","getDocument","currentContainerScrollYPos","elementScrollYPos","offsetTop","documentElement","pageYOffset","el","async","Window","scroll","from","to","prop","startTime","easeFunc","currentTime","Date","now","time","Math","min","setScrollPosition","currentScrollPosition","getScrollPosition","scrollProperty","getScrollPropertyByElement","Promise","resolve","getEasing","left","props","y","x","scrollTop","easingMap","linear","join","PhotoGallery","shouldBuildGallery","buildGallery","gallery","gallerySlides","lazyLoad","pageDots","fullscreen","onReady","galleryThumbs","thumb","updateThumbs","updateIndicator","updateGallery","select","parentNode","galleryThumbsList","block","galleryIndicator","zoom","Parallax","bounds","elementIsOnScreen","z","CommunitiesOverview","processContent","addParallax","$content","prependTo","safe","outsideLink","JumpMenu","addJumpLink","prepend","groups","wrapAll","blocks","overview","resources","complementary","CommunitiesResources","$header","$image","$href","Communities","Blocks","addOverviewFunctionality","addGalleryFunctionality","addJumpLinks","addJumpMenu","addTeaserVideo","Overview","title","jumpmenu","Resources","input","Search","customComponents","Timer","searchText","typeOutPlaceholderText","clear","setInterval","resetSearchInput","activeClass","buttons","search","flyout","Toolbar","addSearchLogic","FocusTrap","addFocusTrapLogic","timer","TickTock","searchComponent","headerComponent","initialFocus","flyoutComponent","isActive","isSearch","searchButton","deactivate","activate","Keyboard","menuButton","innerText","focusIn","focusOut","keyDownHandler","jQuery","detach","removeChild","finePrint","afterFooter","parentDiv","newViewsRow","thisYear","getFullYear","insertAdjacentHTML","insertAdjacentElement","elementToCopy","targetParent","clonedElement","cloneNode","elementMobileCTA","targetParentHeader","micrositeHeroSection","heroTitleElement","heroSubTitleElement","titleWrapper","createAndAddClass","titleElement","flickityViewport","appendChildElements","elementType","className","child","selector","logoElement","bodyElement","pageClass","Array","includes","removePagePrefix","str","logoUrl","setLogoStyle","url","calendarDates","heroSlider","isError","HomeQuotes","Modaal","notValid","resourcesModaal","eventsSlider","EventsSlider","communitiesSlider","$map","$nav","digitaldcoreCreateSiteMap","hasClass","warningIndicator","articleTitleLink","articleTitle","readmoreTitleDiv","readmoreTitle","readmoreButton","searchInput","newLabel","newContent","createTextNode","isMicrosite","isEskatonCommunity","communitiesOverview","amplifyWidget","onload","testLabel","labelInput","ulCheckboxes","typeSubmit","selectOperator","loginPopup","hasAttribute","allPagers","span","after","eventDateWrap","dateTime","toLocaleTimeString","hour","minute","desiredNumber","micrositeElement","primaryNav","some","display","setJQuery","callbacks","request","ModaalTransformer","old","isVideo","removeAttribute","new","replaceChild","isGallery","animation","outer_controls","ConvertToModaal","activeTrailClass","in","out","preprocess","menuParents","submenu","firstElementChild","nextSibling","lastElementChild","Tabbable","tabbable","collapse","expand","openSubmenus","openSubmenu","expandElement","expandSubmenu","collapseElement","collapseSubmenu","states","active","keyDownEventDispatcher","mouseDownEventDispatcher","focusOutEventDispatcher","mouseOverHandler","mouseOutHandler","Enter","userInteractionHandler","clearAll"],"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 = \"\";\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([329,1]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","/* global Drupal */\nimport $ from 'jquery';\n\nlet behaviors;\nlet documentIsReady = false;\n\n/**\n * Allows a Drupal behavior to be added from an AMD-style module. The behavior\n * will be executed when:\n * - As soon as the DOM is ready, if the DOM is not ready when the behavior is\n * added, just like a regular Drupal behavior.\n * - Immediately upon adding, if the DOM is ready (which may happen since\n * AMD-style modules are loaded asynchronously).\n * - When Drupal.attachBehaviors is executed.\n */\nDrupal.behavior = function addDrupalBehavior(fn) {\n if (!behaviors) {\n behaviors = $.Callbacks();\n documentIsReady = false;\n\n $(document).ready(() => {\n documentIsReady = true;\n behaviors.fire(document);\n\n // Now that we know the document is ready, add ourselves to Drupal's\n // behavior handling.\n window.Drupal.behaviors.DrupalAMD = function DrupalAMD(context) {\n behaviors.fire(context);\n };\n });\n }\n\n // Note: we can't use the 'memory' option of jQuery.Callbacks, because we\n // need control over the argument.\n if (documentIsReady) {\n fn(document);\n }\n\n behaviors.add(fn);\n return this;\n};\n\nexport default Drupal;\n","import $ from 'jquery';\n\nconst config = {\n win: $(window),\n dots: '.flickity-page-dots',\n slider: '.flickity-enabled',\n viewport: '.flickity-viewport',\n viewportHeight: 400,\n caption: '.caption',\n header: '.node-header',\n cell: '.carousel-cell',\n wrapper: '.caption-wrapper',\n image: 'img',\n};\n\nexport default class HeroSlider {\n constructor(element) {\n this.element = element;\n this.$element = $(element);\n this.dots = $(config.dots, this.element);\n // eslint-disable-next-line prefer-destructuring\n this.flickityWrapper = $(config.slider, this.element);\n this.build();\n this.update();\n this.ready();\n window.addEventListener('resize', this.update.bind(this), { passive: true });\n }\n\n build() {\n $(config.cell, this.element).each((i, e) => {\n if ($(config.caption, e).text() === '') {\n $(config.wrapper, e).css('background', 'none');\n }\n });\n }\n\n update() {\n if (config.win.width() <= 767) {\n this.mobile();\n } else {\n this.desktop();\n }\n }\n\n mobile() {\n let captionHeight = 0;\n let imageHeight = 0;\n\n this.flickityWrapper.css('min-height', `${imageHeight}px`);\n $(config.viewport, this.element).css('height', `${imageHeight}px`);\n\n $(config.caption, this.element).each((i, e) => {\n if ($(e).outerHeight() < captionHeight) {\n captionHeight = $(e).outerHeight();\n }\n if ($(e).outerHeight() > captionHeight) {\n captionHeight = $(e).outerHeight();\n }\n });\n\n $(config.image, this.element).each((i, e) => {\n if ($(e).outerHeight() > imageHeight) {\n imageHeight = $(e).outerHeight();\n }\n if ($(e).outerHeight() < imageHeight) {\n imageHeight = $(e).outerHeight();\n }\n });\n\n const viewportHeight = `${imageHeight + captionHeight}px`;\n this.flickityWrapper.css('min-height', viewportHeight);\n $(config.viewport, this.element).css('height', `${imageHeight}px`);\n this.dots.css('bottom', `${captionHeight + 10}px`);\n }\n\n desktop() {\n const marginBottom = $(config.header, this.element).height();\n // this.dots.css('bottom', '25px');\n this.flickityWrapper.css('min-height', 'unset');\n $(config.caption, this.element).each((i, e) => {\n $(e).css('margin-bottom', marginBottom + 170);\n });\n }\n\n ready() {\n this.$element.addClass('ready');\n }\n}\n","import $ from 'jquery';\n\nconst breakpoint = 1025;\n\nclass Viewport {\n constructor(_breakpoint) {\n this.breakpoint = _breakpoint || breakpoint;\n this.change = this.change.bind(this);\n this.ticking = false;\n this.addListeners();\n }\n\n // state {Boolean}\n setCurrentState(state) {\n this.mobileState = state;\n }\n\n getCurrentState() {\n return window.innerWidth < this.breakpoint;\n }\n\n update() {\n this.ticking = false;\n const currentState = this.getCurrentState();\n const previousState = this.mobileState;\n\n // Announce screen has changed\n if (this.changeCallbacks) {\n this.changeCallbacks.fire();\n }\n\n // Check to see if the view state has changed\n if (currentState !== previousState) {\n this.setCurrentState(currentState);\n\n // Announce screen has changed to mobile mode\n if (this.mobileCallbacks && this.mobileState) {\n this.mobileCallbacks.fire();\n }\n\n // Announce screen has changed to desktop mode\n if (this.desktopCallbacks && !this.mobileState) {\n this.desktopCallbacks.fire();\n }\n }\n }\n\n change() {\n this.requestTick();\n }\n\n requestTick() {\n if (!this.ticking) {\n requestAnimationFrame(this.update.bind(this));\n this.ticking = true;\n }\n }\n\n onMobileChange(callback) {\n if (!this.mobileCallbacks) {\n this.mobileCallbacks = $.Callbacks('memory');\n }\n this.mobileCallbacks.add(callback);\n return this;\n }\n\n onDesktopChange(callback) {\n if (!this.desktopCallbacks) {\n this.desktopCallbacks = $.Callbacks('memory');\n }\n this.desktopCallbacks.add(callback);\n return this;\n }\n\n onChange(callback) {\n if (!this.changeCallbacks) {\n this.changeCallbacks = $.Callbacks('memory');\n }\n this.changeCallbacks.add(callback);\n return this;\n }\n\n addListeners() {\n $(window).on('resize orientationchange', this.change);\n }\n}\n\n// Default viewport with default breakpoint setting.\nexport const viewport = new Viewport();\n\n// Export both the default and the class to reuse with alternate breakpoints.\nexport default Viewport;\n","import $ from 'jquery';\nimport dayjs from 'dayjs';\n\nconst defaults = {\n // local storage key used to save the currently applied filter\n storageKey: 'currentCalendarFilter',\n\n // Button text displayed as the pagination to the next page of events\n paginationLabel: 'Load More Events',\n\n // Mobile only drop down label that houses the filtering options\n filtersLabel: 'Filter by...',\n\n // Force the filters to be automatically determined by the post types present in the feed.\n filterByPostTypes: false,\n\n // A simple indicator to determine the build out of filters\n useFilters: false,\n\n // Used to pass in an object of filters which use key value pairs.\n // {Object}\n // @key: Name that will appear as the filter button text\n // @value: ID of post type or navigation term\n filters: false,\n};\n\n// These filters are used if the filterByPostTypes is enabled. Present post\n// types are then added to this object, then the filters are made from those.\nconst defaultFilters = {\n All: 2,\n};\n\nexport default class CalendarFeed {\n constructor(element, options) {\n this.$element = $(element);\n this.settings = { ...defaults, ...options };\n this.filters = this.getFilters();\n this.buildCalendar();\n if (this.settings.useFilters) {\n this.createFilters();\n }\n }\n\n buildCalendar() {\n const $posts = this.$element.find('.node');\n const group = '
';\n let currentYear = null;\n let currentMonth = '';\n let $group;\n\n // Manage the types of calendar filters being created\n $posts.each((i, post) => {\n const $post = $(post);\n const dates = ['start', 'end'];\n const oDates = {};\n\n // Parse the start/end timestamps using the dayjs framework\n $.each(dates, (j, type) => {\n const datetime = $post.find(`time.${type}`).attr('datetime');\n const dateObj = dayjs(datetime);\n oDates[type] = {\n month: dateObj.format('MMMM'),\n mon: dateObj.format('MMM'),\n day: dateObj.format('D'),\n dow: dateObj.format('ddd'),\n year: dateObj.format('YYYY'),\n };\n });\n\n // Add the post into a month grouping\n if (oDates.start.month.length && currentMonth !== oDates.start.month) {\n currentMonth = oDates.start.month;\n $group = $(group);\n $group.addClass(oDates.start.month.toLowerCase());\n $group.append(`

${oDates.start.month}

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

${this.settings.filtersLabel}

`);\n $ctrl.on('click', this.filterHandler);\n\n // Add the drop down controller for mobile display\n $element.find('.view-header').append($ctrl, $filters);\n\n // Make this an jquery array of filters reference rather than a container\n // reference.\n $filters = $filters.find('.filter');\n\n // Simulate a click event for the last or default calendar filter\n $filters.filter(`.show-${currentFilter}`).trigger('click');\n }\n\n getDefaultData(_types, _ids) {\n const { $element } = this;\n const $posts = $element.find('.node');\n\n const types = _types;\n const ids = _ids;\n\n // Dynamically create the filter types and identify the posts that belong\n // to each one.\n $posts.each((i, post) => {\n const $post = $(post);\n\n // Extract the post type\n let type = $('.post-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\nconst defaults = {\n photoGalleryPID: 107,\n behaviors: {\n a11y: true,\n newTab: true,\n itemAppearsIn: true,\n fullNodeRelatedLinks: true,\n bundledReferringContent: true,\n subtermOverviews: true,\n lexiconGlossary: true,\n nodeMeta: true,\n slideshowIcons: true,\n expandingDates: true,\n },\n};\n\nexport default class DDTemplates {\n constructor(context, options) {\n this.context = context;\n this.isNodeView = this.isNode();\n this.settings = { ...defaults, ...options };\n // Global behaviors\n this.defineApplicableBehaviors('global', this.context);\n // Current view behaviors only\n this.defineApplicableBehaviors(this.isNodeView ? 'node' : 'term', this.context);\n }\n\n /**\n * Simple check to see if the current body element contains the node class.\n */\n isNode() {\n return $(document.body, this.context).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 'subtermOverviews',\n 'lexiconGlossary',\n ],\n global: [\n 'a11y',\n 'newTab',\n 'nodeMeta',\n 'slideshowIcons',\n 'expandingDates',\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', this.context);\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', this.context);\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', this.context).attr('tabindex', -1);\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', this.context).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', this.context);\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', this.context).each((a, node) => {\n $('.node-meta, .node-upper-meta', node).each((b, meta) => {\n const $meta = $(meta);\n const $dates = $('.event-date', node);\n\n if ($dates.length > 2) {\n // Create and add functionality to display all other dates\n const $link = $('Show all dates');\n $link.bind('click', (event) => {\n event.preventDefault();\n $meta.toggleClass('show-all-dates');\n $(event.currentTarget).text($meta.is('.show-all-dates') ? 'Hide all dates' : 'Show all dates');\n });\n $link.insertBefore($dates.eq(0));\n\n // Move all other dates\n const $container = $('
');\n $dates.appendTo($container);\n $meta.append($container);\n }\n });\n });\n }\n\n /**\n * Adds markup to slideshow teasers to show an icon overlay\n */\n slideshowIcons() {\n const $slideshowNodes = $(`.pt${this.settings.photoGalleryPID}.node-teaser`, this.context);\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 /**\n * Adds the has more class to subterm overviews to properly control node-link display\n */\n subtermOverviews() {\n $('.subterm-overview .node-teaser', this.context).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', this.context).find('.lexicon-list > a').each((i, element) => {\n const letter = $(element).attr('id').replace('letter_', '');\n $(element).html(letter.toUpperCase());\n });\n }\n}\n","import scrollTo from 'animated-scroll-to';\nimport { viewport } from './Viewport';\n\nconst offset = {\n mobile: 0,\n desktop: -120,\n};\n\nexport default class Anchors {\n constructor() {\n this.id = '';\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 }\n\n const msgs = document.querySelectorAll('.cc-window.cc-top.fixed-top:not(.cc-invisible)').length;\n if (msgs.length > 0) {\n // Get height of all messages and fix the offset.\n const total = document.querySelector('.cc-window').offsetHeight * msgs;\n offset.desktop -= total;\n }\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\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 scrollTo(destination, {\n verticalOffset: viewport.mobileState ? offset.mobile : offset.desktop,\n maxDuration: 1000,\n minDuration: 250,\n speed: 1000,\n });\n }\n}\n","import $ from 'jquery';\n\nexport default class FixNavigation {\n constructor(element) {\n this.element = element;\n this.process();\n this.ready();\n }\n\n process() {\n $('.menuparent, .expanded, .collapsed', this.element).each((i, item) => {\n // handles the parent term (if hidden)\n const $parent = $(item).children('a');\n if (!$parent.length || $parent.is('.hidden')) {\n $(item).remove();\n }\n\n // handles the term to see if it only parents orphans.\n let $children = $('> ul > li', item);\n if (!$parent.is('.hidden') && $children.length) {\n // Logged in: shows links with a hidden class.\n $children.children('a.hidden').parent().remove();\n // Logged out: shows an empty li :\\\n $children.filter(':empty').remove();\n // Reset $children to reflect potential missing items.\n $children = $('> ul > li', item);\n // If the list is empty, the parent should no longer be\n // labeled as such and the list should be removed.\n if (!$children.length) {\n $(item).removeClass('menuparent expanded collapsed'); // unlabel\n $(item).find('ul').remove();\n }\n }\n });\n }\n\n ready() {\n $(this.element).addClass('ready');\n }\n}\n","import $ from 'jquery';\nimport 'slick-carousel';\n\nconst defaults = {\n speed: 500,\n fade: true,\n dots: true,\n arrows: true,\n slidesToShow: 1,\n slidesToScroll: 1,\n responsive: [\n {\n breakpoint: 690,\n settings: {\n arrows: false,\n },\n },\n ],\n};\n\nexport default class Gallery {\n constructor(element, options) {\n this.element = element;\n this.$element = $(element);\n this.settings = { ...defaults, ...options };\n this.$gallery = this.build();\n this.ready();\n }\n\n build() {\n return this.$element.slick(this.settings);\n }\n\n ready() {\n this.$element.addClass('ready');\n }\n}\n","import $ from 'jquery';\nimport 'slick-carousel';\n\nconst defaults = {\n centerMode: true,\n centerPadding: '200px',\n slidesToShow: 1,\n autoplay: false,\n variableWidth: true,\n prevArrow: '',\n nextArrow: '',\n responsive: [\n {\n breakpoint: 768,\n settings: {\n centerMode: true,\n centerPadding: '40px',\n slidesToShow: 1,\n },\n },\n {\n breakpoint: 480,\n settings: {\n centerMode: true,\n centerPadding: '40px',\n slidesToShow: 1,\n },\n },\n ],\n};\n\nexport default class GallerySlider {\n constructor(element, options) {\n this.element = element;\n this.$element = $(element);\n this.settings = { ...defaults, ...options };\n this.$gallery = this.build();\n this.ready();\n }\n\n build() {\n return this.$element.slick(this.settings);\n }\n\n ready() {\n this.$element.addClass('ready');\n }\n}\n","import $ from 'jquery';\nimport Headroom from 'headroom.js';\n\n// Headroom settings\nconst settings = {\n // vertical offset in px before element is first unpinned\n offset: 120,\n // scroll tolerance in px before state changes\n tolerance: 5, // or {down: 0, up: 0},\n // css classes to apply\n classes: {\n // when element is initialised\n initial: 'headroom',\n // when scrolling up\n pinned: 'locked',\n // when scrolling down\n unpinned: 'unlocked',\n // when above offset\n top: 'top',\n // when below offset\n notTop: 'not-top',\n // when at bottom of scoll area\n bottom: 'bottom',\n // when not at bottom of scroll area\n notBottom: 'not-bottom',\n },\n // callback when pinned, `this` is headroom object\n onPin() {\n $(document.body).addClass('locked').removeClass('unlocked');\n },\n // callback when unpinned, `this` is headroom object\n onUnpin() {\n $(document.body).addClass('unlocked').removeClass('locked');\n },\n // callback when above offset, `this` is headroom object\n onTop() {\n $(document.body).addClass('top').removeClass('not-top');\n },\n // callback when below offset, `this` is headroom object\n onNotTop() {\n $(document.body).addClass('not-top').removeClass('top');\n },\n // callback at bottom of page, `this` is headroom object\n onBottom() {},\n // callback when moving away from bottom of page, `this` is headroom object\n onNotBottom() {},\n};\n\nexport default class Header {\n constructor(element) {\n // Check if (.cc-window is set)\n const $messages = $('.cc-window.cc-top.fixed-top:not(.cc-invisible)').not('.cc-invisible');\n if ($messages.length > 0) {\n // Get height of all messages and fix the offset.\n let total = 0;\n $messages.each(function () {\n total += $(this).outerHeight();\n });\n settings.offset += total;\n }\n\n // Create a new Headroom instance\n const headroom = new Headroom(element, settings);\n // Initialize this Headroom instance\n headroom.init();\n // Return back the new instance\n return headroom;\n }\n}\n","import Flickity from './Flickity';\n\nconst sliderConfig = {\n prevNextButtons: false,\n adaptiveHeight: false,\n draggable: false,\n};\n\nexport default class MicrositeEvents {\n constructor(element) {\n this.element = element;\n\n // Exit if we don't have more than one slide.\n if (!this.shouldBuildSlider) return;\n\n // Build Slider\n this.buildSlider();\n\n // Move content into containers\n this.createContainers();\n }\n\n createContainers() {\n const viewsRowsNodes = this.element.querySelectorAll('.node');\n viewsRowsNodes.forEach((node) => {\n node.classList.add('node-home-event');\n node.classList.remove('no-more');\n\n const imageDateWrap = document.createElement('div');\n imageDateWrap.classList.add('image-date-wrap');\n\n const contentWrap = document.createElement('div');\n contentWrap.classList.add('content-wrap');\n\n const nodeUpperMeta = node.querySelector('.node-upper-meta');\n const nodeImage = node.querySelector('.node-image');\n const nodeUpperImage = node.querySelector('.node-upper-image');\n const nodeInner = node.querySelector('.node-inner');\n\n if (nodeUpperMeta) {\n imageDateWrap.appendChild(nodeUpperMeta);\n }\n\n // if (nodeImage) {\n // imageDateWrap.appendChild(nodeImage);\n // }\n\n if (nodeUpperImage) {\n imageDateWrap.appendChild(nodeUpperImage);\n } else if (nodeImage) {\n imageDateWrap.appendChild(nodeImage);\n }\n\n if (nodeInner) {\n contentWrap.appendChild(nodeInner);\n }\n\n node.appendChild(imageDateWrap);\n node.appendChild(contentWrap);\n });\n }\n\n buildSlider() {\n this.slider = new Flickity(this.sliderElement, sliderConfig);\n }\n\n get shouldBuildSlider() {\n return this.sliderElement && this.slides.length > 1;\n }\n\n get sliderElement() {\n return this.element.querySelector('.view-content');\n }\n\n get slides() {\n return this.sliderElement ? this.sliderElement.childNodes : [];\n }\n}\n","import Flickity from './Flickity';\n\nconst sliderConfig = {\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 wrapAround: true,\n adaptiveHeight: true,\n};\n\nexport default class HomeEvents {\n constructor(element) {\n this.element = element;\n\n // Exit if we don't have more than one slide.\n if (!this.shouldBuildSlider) return;\n\n // Build Slider\n this.buildSlider();\n }\n\n buildSlider() {\n this.slider = new Flickity(this.sliderElement, sliderConfig);\n }\n\n get shouldBuildSlider() {\n return this.slides.length > 1;\n }\n\n get sliderElement() {\n return this.element.querySelector('.view-content');\n }\n\n get slides() {\n return this.sliderElement.childNodes;\n }\n}\n","import $ from 'jquery';\nimport 'modaal';\n\nexport default class Messages {\n constructor(element) {\n $(document.body).modaal({\n accessible_title: 'The website reported these messages',\n custom_class: 'modaal-messages',\n content_source: `#${element.id}`,\n start_open: true,\n });\n }\n}\n","import $ from 'jquery';\nimport Change from './Change';\n\n/**\n * SmartFooter\n * Offsets a height to make room for the absolutely placed footer.\n *\n * @param element {HTML Element} Footer element to base height offset from.\n * @param $reactiveElement {jQuery Element} Element that should be offset by the height calculated.\n * @exports {Class} SmartFooter instance\n */\nexport default class SmartFooter {\n constructor(element, $reactiveElement) {\n this.$element = $(element);\n this.$reactiveElement = $reactiveElement;\n this.register();\n this.update();\n this.ready();\n }\n\n register() {\n // Listen for change event.\n Change.onChange(this.update.bind(this));\n }\n\n update() {\n // Update height on change event.\n const height = this.$element.outerHeight();\n this.$reactiveElement.css('padding-bottom', height);\n }\n\n ready() {\n // Set ready state of passed in footer element.\n this.$element.addClass('ready');\n }\n}\n","import $ from 'jquery';\nimport Change from './Change';\n\nconst OFFSET = 115 + 35; // header height plus top offset of sidebars\n\nexport default class Sticky {\n constructor(element) {\n this.element = element;\n this.$element = $(element);\n this.register();\n }\n\n register() {\n Change.onChange(this.update.bind(this));\n Change.update();\n }\n\n update() {\n if (window.innerHeight - OFFSET > this.$element.height()) {\n this.$element.addClass('sticky');\n } else {\n this.$element.removeClass('sticky');\n }\n\n return this;\n }\n}\n","import Navigation from './Navigation';\nimport { viewport } from './Viewport';\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.viewport = viewport;\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 (this.viewport.mobileState) {\n if (this.open) {\n this.open = false;\n this.button.setAttribute('aria-expanded', false);\n this.element.classList.remove('term-navigation--open');\n this.menu.setAttribute('aria-hidden', true);\n } else {\n this.open = true;\n this.button.setAttribute('aria-expanded', true);\n this.element.classList.add('term-navigation--open');\n this.menu.setAttribute('aria-hidden', false);\n this.buttonLink.focus();\n }\n }\n }\n\n listen() {\n // Add a click handler to control the mobile dropdown menu\n this.button.addEventListener('click', this.clickHandler.bind(this));\n }\n\n ready() {\n this.element.classList.add('ready');\n }\n\n get button() {\n return this.element.querySelector(components.button);\n }\n\n get buttonLink() {\n return this.element.querySelector(components.buttonLink);\n }\n\n get menu() {\n return this.element.querySelector(components.menu);\n }\n}\n","import $ from 'jquery';\n\nexport default class ProximityController {\n constructor(element) {\n this.$element = $(element);\n // Declare utility variables.\n this.geolocation = false;\n this.currentLocation = null;\n this.usingCurrentLocation = false;\n // Set callback context.\n this.allow = this.allow.bind(this);\n // Initialize functionality.\n this.setViewState();\n this.listen();\n this.ready();\n }\n\n setViewState() {\n this.usingCurrentLocation = this.checkboxState;\n // navigator.permissions && navigator.permissions.query({name: 'geolocation'})\n\n if (navigator.geolocation && !this.usingCurrentLocation) {\n this.geolocation = true;\n this.$element.addClass('geolocation');\n\n // save location for an hour\n const options = {\n maximumAge: 1000 * 60 * 60,\n };\n\n // Obtain user's current location using the Geolocation API.\n navigator.geolocation.getCurrentPosition(this.allow, null, options);\n }\n }\n\n allow(position) {\n this.currentLocation = position.coords;\n $(this.$element).closest('.home__communities').addClass('ready');\n\n if (!this.checkboxState && !this.$textfield.val().length) {\n this.checkboxState = true;\n this.checkboxChangeHandler();\n }\n }\n\n listen() {\n this.$element.on('submit', this.submitHandler.bind(this));\n this.$checkbox.on('change', this.checkboxChangeHandler.bind(this));\n this.$textfield.on('input', this.textfieldChangeHandler.bind(this));\n }\n\n checkboxChangeHandler() {\n if (this.checkboxState) {\n this.$textfield.val(null);\n this.$element.trigger('submit');\n }\n }\n\n textfieldChangeHandler(event) {\n const total = event.target.value.length;\n\n if (total > 0) {\n this.checkboxState = false;\n } else if (total === 0 && this.usingCurrentLocation && this.geolocation) {\n this.checkboxState = true;\n }\n }\n\n submitHandler() {\n let location = this.$textfield.val();\n\n if (this.checkboxState) {\n if (this.geolocation && this.currentLocation) {\n location = `${this.currentLocation.latitude} ${this.currentLocation.longitude}`;\n }\n }\n\n this.$hiddenfield.val(location);\n }\n\n ready() {\n this.$element.addClass('ready');\n }\n\n get checkboxState() {\n return this.$checkbox.get(0).checked;\n }\n\n set checkboxState(state) {\n this.$checkbox.get(0).checked = state;\n }\n\n get $checkbox() {\n return this.$element.find('#edit-automatic');\n }\n\n get $textfield() {\n return this.$element.find('#edit-search');\n }\n\n get $hiddenfield() {\n return this.$element.find('#edit-location');\n }\n}\n","import $ from 'jquery';\n\nconst defaults = {\n test: 0,\n};\n\nexport default class Timeline {\n constructor(element, options) {\n this.element = element;\n this.$element = $(this.element);\n this.settings = { ...defaults, ...options };\n this.wrapContent();\n this.addVerticalTimeline();\n this.sortViewsRows();\n this.repositionViewsRows();\n this.createNavigation();\n this.menuPosition();\n this.linkActive();\n }\n\n addVerticalTimeline() {\n const viewContent = document.querySelector('.timeline .view-content');\n const verticalTimeline = document.createElement('div');\n verticalTimeline.classList.add('timeline-vertical');\n viewContent.appendChild(verticalTimeline);\n }\n\n wrapContent() {\n // Get all the .node-inner elements\n const nodeInners = document.querySelectorAll('.timeline .node-inner');\n\n // Iterate through each .node-inner element\n nodeInners.forEach((nodeInner) => {\n // Get the .node-header, .node-content, and .node-links elements within the .node-inner\n const nodeHeader = nodeInner.querySelector('.node-header');\n const nodeContent = nodeInner.querySelector('.node-content');\n const nodeLinks = nodeInner.querySelector('.node-links');\n\n // Create a new div to wrap the elements\n const wrapperDiv = document.createElement('div');\n wrapperDiv.classList.add('content-wrapper');\n\n // Append the targeted elements to the wrapper div\n if (nodeHeader) {\n wrapperDiv.appendChild(nodeHeader);\n }\n if (nodeContent) {\n wrapperDiv.appendChild(nodeContent);\n }\n if (nodeLinks) {\n wrapperDiv.appendChild(nodeLinks);\n }\n\n // Append the wrapper div back to the .node-inner element\n nodeInner.appendChild(wrapperDiv);\n });\n }\n\n sortViewsRows() {\n // Get all the .views-row elements\n const viewsRows = document.querySelectorAll('.timeline .views-row');\n\n // Create an object to store references to year divs\n const yearDivs = {};\n\n // Iterate through each .views-row element\n viewsRows.forEach((row) => {\n // Get the year from the post-type span\n const year = row.querySelector('.post-type').textContent.trim();\n\n // Create a div for the year if it doesn't exist\n if (!yearDivs[year]) {\n const yearDiv = document.createElement('div');\n yearDiv.classList.add('year-container');\n yearDiv.setAttribute('id', `era-${year}`);\n\n // Create a title div for the year\n const titleDiv = document.createElement('div');\n titleDiv.classList.add('era-title');\n\n // Wrap the title with an h2 tag\n const titleHeading = document.createElement('h2');\n titleHeading.textContent = year;\n titleDiv.appendChild(titleHeading);\n\n yearDiv.appendChild(titleDiv);\n yearDivs[year] = {\n div: yearDiv,\n rows: [], // Array to store rows for this year\n };\n }\n\n // Store the .views-row into the corresponding year div\n yearDivs[year].rows.push(row);\n });\n\n // Append the year divs to the .view-content div in sorted order\n const viewContent = document.querySelector('.timeline .view-content');\n\n // Sort the keys of yearDivs as numbers\n const sortedYears = Object.keys(yearDivs).sort((a, b) => parseInt(a, 10) - parseInt(b, 10));\n\n // Append year divs to viewContent in sorted order\n sortedYears.forEach((year) => {\n // Sort the rows for this year based on the year mentioned in the h2 title\n yearDivs[year].rows.sort((a, b) => {\n const yearA = parseInt(a.querySelector('h2.title').textContent.trim(), 10);\n const yearB = parseInt(b.querySelector('h2.title').textContent.trim(), 10);\n return yearA - yearB;\n });\n\n // Append sorted rows to the yearDiv\n yearDivs[year].rows.forEach((row) => {\n yearDivs[year].div.appendChild(row);\n });\n\n // Append sorted yearDiv to viewContent\n viewContent.appendChild(yearDivs[year].div);\n });\n }\n\n repositionViewsRows() {\n // After all elements are repositioned, add the class to every second .views-row\n const repositionedViewsRows = document.querySelectorAll('.timeline .views-row');\n repositionedViewsRows.forEach((row, index) => {\n if (index % 2 === 1) {\n row.classList.add('row-reverse');\n }\n });\n }\n\n createNavigation() {\n // Get all .year-container ids\n const yearContainers = document.querySelectorAll('.year-container');\n const viewContent = document.querySelector('.page-top');\n\n // Create div in view-content with links to ids\n const timelineNavigation = document.createElement('div');\n timelineNavigation.classList.add('timeline-navigation');\n\n // Create navigation-links div\n const navigationLinks = document.createElement('div');\n navigationLinks.classList.add('navigation-links');\n timelineNavigation.appendChild(navigationLinks);\n\n\n yearContainers.forEach((container) => {\n const id = container.getAttribute('id');\n const link = document.createElement('a');\n\n link.href = `#${id}`;\n link.textContent = id.replace('era-', '');\n navigationLinks.appendChild(link);\n });\n\n viewContent.appendChild(timelineNavigation);\n }\n\n menuPosition() {\n const customMenu = document.querySelector('.timeline-navigation');\n const pageHeader = document.querySelector('.page-header');\n const header = document.querySelector('.header');\n let pageHeaderHeight = header.getBoundingClientRect().height;\n const timeline = document.querySelector('.timeline');\n\n let contentTop = customMenu.getBoundingClientRect().top + window.scrollY\n - pageHeaderHeight;\n\n function updateValues() {\n pageHeaderHeight = header.getBoundingClientRect().height;\n if (customMenu.classList.contains('active')) {\n customMenu.classList.remove('active');\n contentTop = customMenu.getBoundingClientRect().top + window.scrollY - pageHeaderHeight\n - pageHeaderHeight;\n customMenu.classList.add('active');\n } else {\n contentTop = customMenu.getBoundingClientRect().top + window.scrollY - pageHeaderHeight;\n }\n }\n\n function handleScroll() {\n const pageHeaderActive = pageHeader.classList.contains('not-top') && pageHeader.classList.contains('locked');\n const scrollPosition = window.scrollY;\n pageHeaderHeight = header.getBoundingClientRect().height;\n\n if (scrollPosition >= contentTop) {\n customMenu.classList.add('active');\n timeline.classList.add('active');\n\n if (pageHeaderActive && window.innerWidth < 1025) {\n const headerHeight = pageHeaderHeight;\n customMenu.style.top = `${headerHeight}px`;\n } else if (window.innerWidth >= 1025) {\n const headerHeight = pageHeaderHeight;\n customMenu.style.top = `${headerHeight}px`;\n } else {\n customMenu.style.top = '';\n }\n } else {\n customMenu.classList.remove('active');\n timeline.classList.remove('active');\n customMenu.style.top = '';\n }\n }\n\n window.addEventListener('resize', updateValues);\n window.addEventListener('scroll', handleScroll);\n }\n\n linkActive() {\n const links = document.querySelectorAll('.timeline-navigation a');\n const pageHeader = document.querySelector('.header');\n const pageCustomMenu = document.querySelector('.timeline-navigation');\n let pageHeaderHeight = pageHeader.offsetHeight;\n let pageCustomMenuHeight = pageCustomMenu.offsetHeight;\n\n function getSectionTop(section) {\n const rect = section.getBoundingClientRect();\n return rect.top + window.scrollY - pageHeaderHeight - pageCustomMenuHeight - 15;\n }\n\n function debounce(func, delay) {\n let timeoutId;\n return function (...args) {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => func(...args), delay);\n };\n }\n\n const delayedScrollIntoView = debounce((link) => {\n link.scrollIntoView({ behavior: 'smooth' });\n }, 50);\n\n function activateLinks() {\n const scrollPosition = window.scrollY;\n\n links.forEach((link) => {\n const sectionId = link.hash;\n const section = document.querySelector(`div${sectionId}`);\n\n if (section) {\n const sectionTop = getSectionTop(section);\n\n if (scrollPosition >= sectionTop && scrollPosition < sectionTop + section.offsetHeight) {\n link.classList.add('active');\n delayedScrollIntoView(link);\n } else {\n link.classList.remove('active');\n }\n }\n });\n }\n\n window.addEventListener('resize', () => {\n pageHeaderHeight = pageHeader.offsetHeight;\n pageCustomMenuHeight = pageCustomMenu.offsetHeight;\n });\n window.addEventListener('scroll', activateLinks);\n }\n}\n","import $ from 'jquery';\nimport 'slick-carousel';\n\nconst defaults = {\n slidesToShow: 3,\n autoplay: false,\n arrows: false,\n dots: true,\n responsive: [\n {\n breakpoint: 768,\n settings: {\n slidesToShow: 2,\n },\n },\n {\n breakpoint: 650,\n settings: {\n slidesToShow: 1,\n },\n },\n ],\n};\n\nexport default class GallerySlider {\n constructor(element, options) {\n this.element = element;\n this.$element = $(element);\n this.settings = { ...defaults, ...options };\n this.$gallery = this.build();\n this.ready();\n }\n\n build() {\n return this.$element.slick(this.settings);\n }\n\n ready() {\n this.$element.addClass('ready');\n }\n}\n","import $ from 'jquery';\nimport 'slick-carousel';\n\nconst defaults = {\n centerMode: false,\n slidesToShow: 3,\n autoplay: false,\n variableWidth: true,\n prevArrow: '',\n nextArrow: '',\n responsive: [\n {\n breakpoint: 768,\n settings: {\n slidesToShow: 1,\n },\n },\n {\n breakpoint: 480,\n settings: {\n variableWidth: false,\n slidesToShow: 1,\n },\n },\n ],\n};\n\nexport default class CommunitiesSlider {\n constructor(element, options) {\n this.element = element;\n this.$element = $(element);\n this.settings = { ...defaults, ...options };\n this.$gallery = this.build();\n this.ready();\n }\n\n build() {\n return this.$element.slick(this.settings);\n }\n\n ready() {\n this.$element.addClass('ready');\n }\n}\n","import keyboard from 'keyboard-key';\nimport { viewport } from './Viewport';\n\nconst NAME_SPACE = 'jumpmenu';\n\nclass JumpMenu {\n constructor() {\n this.links = [];\n this.element = null;\n this.currentIndex = 0;\n }\n\n init(element) {\n // Assign this element to the element passed.\n this.element = element;\n\n // if an element wasn't passed, stop.\n if (!this.element || !this.links.length) return;\n\n // Stop if links haven't been added to the array.\n if (!this.links.length) return;\n\n // If a list and a button toggle aren't found, stop.\n if (!this.list || !this.toggle) return;\n\n // Continue...\n this.build();\n this.listen();\n this.ready();\n }\n\n build() {\n // Assign attributes to the toggle button.\n this.toggle.classList.add(`${NAME_SPACE}__toggle`);\n this.toggle.setAttribute('aria-haspopup', true);\n this.toggle.setAttribute('aria-expanded', true);\n\n // Assign attributes to the list.\n this.list.classList.add(`${NAME_SPACE}__list`);\n this.list.setAttribute('role', 'menu');\n\n // Create list items with links\n this.links.forEach((obj) => {\n const item = document.createElement('li');\n const link = document.createElement('a');\n if ('actualLink' in obj) {\n link.setAttribute('href', `${obj.actualLink}`);\n } else {\n link.setAttribute('href', `#${obj.id}`);\n }\n link.setAttribute('role', 'menuitem');\n link.setAttribute('aria-label', `Skip to ${obj.label} Section`);\n link.textContent = obj.label;\n this.list.appendChild(item);\n item.appendChild(link);\n });\n }\n\n listen() {\n this.element.addEventListener('focusout', this.focusOutHandler.bind(this));\n this.element.addEventListener('keydown', this.keydownHandler.bind(this));\n this.toggle.addEventListener('click', this.clickHandler.bind(this));\n this.list.addEventListener('click', this.clickHandler.bind(this));\n viewport.onDesktopChange(this.desktopStateHandler.bind(this));\n viewport.onMobileChange(this.mobileStateHandler.bind(this));\n }\n\n ready() {\n this.element.classList.add('ready');\n }\n\n move(event) {\n event.preventDefault();\n return this;\n }\n\n addJumpLink(obj) {\n this.links.push(obj);\n }\n\n focusOutHandler(event) {\n if (!this.element.contains(event.relatedTarget)) {\n setTimeout(() => {\n this.close();\n }, 500);\n }\n }\n\n keydownHandler(event) {\n const pressed = keyboard.getCode(event);\n const next = viewport.mobileState ? keyboard.ArrowDown : keyboard.ArrowRight;\n const prev = viewport.mobileState ? keyboard.ArrowUp : keyboard.ArrowLeft;\n\n switch (pressed) {\n case next:\n event.preventDefault();\n this.updateSelection(this.currentIndex + 1);\n break;\n case prev:\n event.preventDefault();\n this.updateSelection(this.currentIndex - 1);\n break;\n case keyboard.Escape:\n this.close();\n break;\n default: break;\n }\n }\n\n updateSelection(index) {\n // Set currentIndex based on passed in value.\n this.index = index;\n\n // Focus active element based on currentIndex.\n this.options[this.currentIndex].focus();\n }\n\n clickHandler(event) {\n // Prevent default behavior of interactive components.\n if (event.target.href.indexOf(window.location.href) > -1) {\n event.preventDefault();\n\n // Get reference to the currently expanded state.\n const expanded = this.toggle.getAttribute('aria-expanded') === 'true';\n\n // Alter expanded state based on aria attribute currently set.\n this.toggle.setAttribute('aria-expanded', !expanded);\n\n // If we're expanding the menu, focus the first link.\n if (this.toggle === event.currentTarget && !expanded) {\n this.updateSelection(0);\n }\n }\n }\n\n mobileStateHandler() {\n this.list.setAttribute('aria-orientation', 'vertical');\n this.close();\n }\n\n desktopStateHandler() {\n this.list.setAttribute('aria-orientation', 'horizontal');\n this.open();\n }\n\n open() {\n this.toggle.setAttribute('aria-expanded', true);\n }\n\n close() {\n this.toggle.setAttribute('aria-expanded', false);\n }\n\n set index(value) {\n if (value >= this.total) {\n this.currentIndex = 0;\n } else if (value < 0) {\n this.currentIndex = this.total - 1;\n } else {\n this.currentIndex = value;\n }\n }\n\n get index() {\n return this.currentIndex;\n }\n\n get total() {\n return this.options.length;\n }\n\n get toggle() {\n return this.element.querySelector('button');\n }\n\n get list() {\n return this.element.querySelector('ul');\n }\n\n get options() {\n return this.list.querySelectorAll('a');\n }\n}\n\nexport default new JumpMenu();\n","/* eslint-disable */\nasync function scrollTo(el, options = {}) {\n if (!(el instanceof Element) && !(el instanceof Window)) {\n throw new Error(`element passed to scrollTo() must be either the window or a DOM element, you passed ${el}!`);\n }\n options = sanitizeScrollOptions(options);\n const scroll = (from, to, prop, startTime, duration = 300, easeFunc, callback) => {\n window.requestAnimationFrame(() => {\n const currentTime = Date.now();\n const time = Math.min(1, (currentTime - startTime) / duration);\n if (from === to) {\n return callback ? callback() : null;\n }\n setScrollPosition(el, easeFunc(time) * (to - from) + from);\n /* prevent scrolling, if already there, or at end */\n if (time < 1) {\n scroll(from, to, prop, startTime, duration, easeFunc, callback);\n } else if (callback) {\n callback();\n }\n });\n };\n const currentScrollPosition = getScrollPosition(el);\n const scrollProperty = getScrollPropertyByElement(el);\n return new Promise(resolve => {\n scroll(currentScrollPosition, typeof options.top === 'number' ?\n options.top :\n currentScrollPosition, scrollProperty, Date.now(), options.duration, getEasing(options.easing), resolve);\n });\n}\n\nfunction scrollIntoView(element, scroller, options) {\n validateElement(element);\n if (scroller && !(scroller instanceof Element)) {\n options = scroller;\n scroller = undefined;\n }\n const {\n duration,\n easing\n } = sanitizeScrollOptions(options);\n scroller = scroller || utils.getDocument().body;\n let currentContainerScrollYPos = 0;\n let elementScrollYPos = element ? element.offsetTop : 0;\n const document = utils.getDocument();\n // if the container is the document body or document itself, we'll\n // need a different set of coordinates for accuracy\n if (scroller === document.body || scroller === document.documentElement) {\n // using pageYOffset for cross-browser compatibility\n currentContainerScrollYPos = window.pageYOffset;\n // must add containers scroll y position to ensure an absolute value that does not change\n elementScrollYPos =\n element.getBoundingClientRect().top + currentContainerScrollYPos;\n }\n return scrollTo(scroller, {\n top: elementScrollYPos,\n left: 0,\n duration,\n easing\n });\n}\n\nfunction validateElement(element) {\n if (element === undefined) {\n const errorMsg = 'The element passed to scrollIntoView() was undefined.';\n throw new Error(errorMsg);\n }\n if (!(element instanceof HTMLElement)) {\n throw new Error(`The element passed to scrollIntoView() must be a valid element. You passed ${element}.`);\n }\n}\n\nfunction getScrollPropertyByElement(el) {\n const props = {\n window: {\n y: 'scrollY',\n x: 'scrollX'\n },\n element: {\n y: 'scrollTop',\n x: 'scrollLeft'\n }\n };\n const axis = 'y';\n if (el instanceof Window) {\n return props.window[axis];\n } else {\n return props.element[axis];\n }\n}\n\nfunction sanitizeScrollOptions(options = {}) {\n if (options.behavior === 'smooth') {\n options.easing = 'ease-in-out';\n options.duration = 300;\n }\n if (options.behavior === 'auto') {\n options.duration = 0;\n options.easing = 'linear';\n }\n return options;\n}\n\nfunction getScrollPosition(el) {\n const document = utils.getDocument();\n if (el === document.body ||\n el === document.documentElement ||\n el instanceof Window) {\n return document.body.scrollTop || document.documentElement.scrollTop;\n } else {\n return el.scrollTop;\n }\n}\n\nfunction setScrollPosition(el, value) {\n const document = utils.getDocument();\n if (el === document.body ||\n el === document.documentElement ||\n el instanceof Window) {\n document.body.scrollTop = value;\n document.documentElement.scrollTop = value;\n } else {\n el.scrollTop = value;\n }\n}\nconst utils = {\n // we're really just exporting this so that tests can mock the document.documentElement\n getDocument() {\n return document;\n }\n};\nconst easingMap = {\n linear(t) {\n return t;\n },\n 'ease-in'(t) {\n return t * t;\n },\n 'ease-out'(t) {\n return t * (2 - t);\n },\n 'ease-in-out'(t) {\n return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\n }\n};\nconst getEasing = (easing) => {\n const defaultEasing = 'linear';\n const easeFunc = easingMap[easing || defaultEasing];\n if (!easeFunc) {\n const options = Object.keys(easingMap).join(',');\n throw new Error(`Scroll error: scroller does not support an easing option of \"${easing}\". Supported options are ${options}`);\n }\n return easeFunc;\n};\n\nexport {\n easingMap,\n scrollIntoView,\n scrollTo,\n utils\n};","import { scrollIntoView } from './Scrolljs';\nimport Flickity from './Flickity';\nimport 'flickity-fullscreen';\nimport 'flickity-fade';\n\nexport default class PhotoGallery {\n constructor(element) {\n this.element = element;\n\n // Exit if we don't have more than one slide.\n if (!this.shouldBuildGallery) return;\n\n this.index = 0;\n\n // Build Gallery\n this.buildGallery();\n }\n\n buildGallery() {\n this.gallery = new Flickity(this.gallerySlides, {\n fade: true,\n lazyLoad: 2,\n pageDots: false,\n wrapAround: true,\n fullscreen: 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 on: {\n ready: this.onReady.bind(this),\n change: this.onChange.bind(this),\n },\n });\n\n this.galleryThumbs.forEach((thumb, index) => {\n thumb.addEventListener('click', this.clickHandler.bind(this));\n thumb.index = index;\n });\n }\n\n onReady() {\n this.updateThumbs();\n this.updateIndicator();\n }\n\n onChange(index) {\n this.index = index;\n this.updateThumbs();\n this.updateIndicator();\n }\n\n clickHandler(event) {\n this.index = event.currentTarget.index;\n this.updateGallery();\n this.updateIndicator();\n }\n\n updateGallery() {\n this.gallery.select(this.currentIndex);\n }\n\n updateThumbs() {\n this.galleryThumbs[0].parentNode.setAttribute('data-selected-image', this.currentIndex + 1);\n this.galleryThumbs.forEach((thumb) => thumb.classList.remove('is-selected'));\n this.galleryThumbs[this.currentIndex].classList.add('is-selected');\n const destination = this.galleryThumbs[this.currentIndex];\n scrollIntoView(destination, this.galleryThumbsList, {\n block: 'nearest',\n behavior: 'smooth',\n });\n }\n\n updateIndicator() {\n this.galleryIndicator.textContent = `${this.currentIndex + 1}/${this.slides.length}`;\n this.galleryIndicator.setAttribute('aria-label', `Image ${this.currentIndex + 1} of ${this.slides.length}`);\n }\n\n get shouldBuildGallery() {\n return this.slides.length > 1;\n }\n\n get gallerySlides() {\n return this.element.querySelector('.gallery__slides');\n }\n\n get galleryThumbsList() {\n return this.element.querySelector('.gallery__thumbs ol');\n }\n\n get galleryThumbs() {\n return this.galleryThumbsList.querySelectorAll('li');\n }\n\n get galleryIndicator() {\n return this.element.querySelector('.gallery__indicator');\n }\n\n get slides() {\n return this.gallerySlides.querySelectorAll('figure');\n }\n\n get index() {\n return this.currentIndex;\n }\n\n set index(index) {\n this.currentIndex = index;\n }\n}\n","import $ from 'jquery';\nimport Change from './Change';\n\nconst defaults = {\n zoom: 0,\n speed: 0.5,\n};\n\nexport default class Parallax {\n constructor(element, options) {\n this.element = element;\n this.$element = $(this.element);\n this.settings = { ...defaults, ...options };\n this.bounds = {};\n this.register();\n this.update();\n }\n\n register() {\n Change.onChange(this.update.bind(this));\n }\n\n update() {\n this.bounds = this.element.getBoundingClientRect();\n // Continue to update component if it's within the viewport.\n if (this.elementIsOnScreen()) {\n const offset = window.pageYOffset * this.settings.speed;\n const props = {\n y: offset * this.settings.speed,\n z: offset * this.settings.zoom,\n };\n // ensure we don't go below a zero setting.\n if (props.y < 0) props.y = 0;\n if (props.z < 0) props.z = 0;\n // Zoom & move asset according to settings in 3d space.\n this.$element.css('transform', `translate3d(0, ${props.y}px, ${props.z}px)`);\n }\n }\n\n elementIsOnScreen() {\n return window.innerHeight - this.bounds.top >= 0 && this.bounds.bottom >= 0;\n }\n}\n","import $ from 'jquery';\nimport Parallax from './Parallax';\nimport JumpMenu from './JumpMenu';\n\nexport default class CommunitiesOverview {\n constructor(element) {\n this.element = element;\n this.$element = $(this.element);\n this.processContent();\n this.addParallax();\n this.listen();\n }\n\n processContent() {\n const $content = this.$element.find('.node-content');\n const $more = this.$element.find('.content__more');\n const $intro = $more.find('h3:first-of-type, p:first-of-type');\n $intro.prependTo($content);\n\n // Group all related content which proceeds each h4 heading.\n $content.find('h4').each((i, element) => {\n // Trim crap outta the heading text.\n const text = $(element).text().trim();\n // Create a safe sting for id and classname definitions.\n const safe = text.replace(/ /g, '-').toLowerCase();\n const anchor = $('a', element);\n let outsideLink = '';\n\n if (anchor.length > 0 && anchor.attr('href') !== undefined) {\n outsideLink = anchor.attr('href');\n }\n\n if (anchor.length > 0) {\n $(element).append($(element).text());\n }\n // Create our group container.\n const $group = $(document.createElement('div'));\n $group.addClass('group').addClass(safe);\n // Create a anchor to be used by the TOC at the top of the page.\n $group.attr('id', `jump-to-${safe}`);\n // Add our anchor to the jumpmenu component.\n if (outsideLink !== '') {\n JumpMenu.addJumpLink({\n id: `jump-to-${safe}`,\n label: text,\n actualLink: outsideLink,\n });\n } else {\n JumpMenu.addJumpLink({\n id: `jump-to-${safe}`,\n label: text,\n });\n }\n\n // Reference content between current and next heading.\n const $related = $(element).nextUntil('h4');\n // Add referenced content to the group\n $related.appendTo($group);\n // Place the group before the heading\n $group.insertBefore(element);\n // Prepend the heading inside the group\n $group.prepend(element);\n });\n\n // Wrap all groups in a wrapper to manage column display\n const groups = document.createElement('div');\n groups.classList.add('groups');\n $content.find('.group').wrapAll(groups);\n\n // Mark content ready.\n $content.addClass('ready');\n }\n\n addParallax() {\n return new Parallax(this.element.querySelector('figure img'));\n }\n\n listen() {\n this.toggle.addEventListener('click', this.clickHandler.bind(this));\n }\n\n clickHandler() {\n this.toggle.setAttribute('aria-hidden', true);\n this.toggle.setAttribute('aria-expanded', true);\n this.toggle.setAttribute('aria-disabled', true);\n }\n\n get toggle() {\n return this.element.querySelector('.content__toggle');\n }\n\n get more() {\n return this.element.querySelector('.content__more');\n }\n}\n","const blocks = {\n overview: '.communities__overview',\n gallery: '.communities__gallery',\n resources: '.communities__resources',\n complementary: [\n {\n id: 'jump-to-amenities',\n label: 'Amenities',\n },\n {\n id: 'jump-to-reviews',\n label: 'Reviews',\n },\n {\n id: 'jump-to-gallery',\n label: 'Gallery',\n },\n {\n id: 'jump-to-resources',\n label: 'Resources',\n },\n ],\n};\n\nexport default blocks;\n","import $ from 'jquery';\n\nexport default class CommunitiesResources {\n constructor(element) {\n this.element = element;\n this.$element = $(this.element);\n this.init();\n }\n\n init() {\n setTimeout(() => {\n const $header = $(this.element.querySelector('.node-header'));\n const $image = $(this.element.querySelector('.dd-hover-dependencies .field-image'));\n if ($image.is('.field-video')) {\n const $href = $image.find('a').attr('href');\n $header\n .addClass('field-video')\n .find('a')\n .attr('href', $href)\n .prepend('')\n .closest('.node')\n .addClass('play-video');\n }\n }, 100);\n }\n}\n","import JumpMenu from './JumpMenu';\nimport Gallery from './PhotoGallery';\nimport Overview from './CommunitiesOverview';\nimport Blocks from './CommunitiesBlocksConfig';\nimport Resources from './CommunitiesResources';\n\nexport default class Communities {\n constructor() {\n // Use the imported blocks config.\n this.blocks = Blocks;\n this.addOverviewFunctionality();\n this.addGalleryFunctionality();\n this.addJumpLinks();\n this.addJumpMenu();\n this.addTeaserVideo();\n }\n\n addOverviewFunctionality() {\n const element = document.querySelector(this.blocks.overview);\n if (element && !element.Overview) {\n element.Overview = new Overview(element);\n }\n }\n\n addGalleryFunctionality() {\n const element = document.querySelector(this.blocks.gallery);\n if (element && !element.Gallery && !element.classList.contains('placeholder-block')) {\n element.Gallery = new Gallery(element);\n }\n }\n\n addJumpLinks() {\n this.blocks.complementary.forEach((obj) => {\n // Find the block.\n const block = document.querySelector(`#${obj.id}`);\n if (block) {\n // Get reference to block title, if it exists within this block.\n const title = block.querySelector('.block-title');\n\n // If the title was found and isn't empty, use that as the jumpmenu label.\n if (title && title.textContent.length) {\n obj.label = title.textContent;\n }\n\n // Add our jumplink to this block displaying the title text we set.\n JumpMenu.addJumpLink(obj);\n }\n });\n }\n\n addJumpMenu() {\n // Initialize our jumpmenu\n this.jumpmenu = document.querySelector('.jumpmenu');\n if (this.jumpmenu) {\n JumpMenu.init(this.jumpmenu);\n }\n }\n\n addTeaserVideo() {\n // Enables video to be opened in modal from teaser\n const element = document.querySelector(this.blocks.resources);\n if (element && !element.Resources) {\n element.Resources = new Resources(element);\n }\n }\n}\n","import Timer from 'tick-tock';\n\nconst components = {\n text: '#edit-box-text',\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 // Reference the value of the searchText before we clear it out.\n this.searchText = this.text.value;\n\n // Clear out values of these components.\n this.input.value = '';\n this.text.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 }\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 text() {\n return this.element.querySelector(this.components.text);\n }\n\n get input() {\n return this.element.querySelector(this.components.input);\n }\n}\n","import TickTock from 'tick-tock';\nimport FocusTrap from 'focus-trap';\nimport Keyboard from 'keyboard-key';\nimport Viewport from './Viewport';\nimport Search from './Search';\n\nconst defaults = {\n activeClass: 'menu-active',\n buttons: {\n menu: '.menu-icon',\n search: '.search-icon',\n },\n components: {\n flyout: '#flyout',\n search: '#dd-search',\n header: '.page-header',\n },\n};\n\nexport default class Toolbar {\n constructor(element, options) {\n this.element = element;\n this.settings = { ...defaults, ...options };\n this.Search = this.addSearchLogic();\n this.FocusTrap = this.addFocusTrapLogic();\n this.timer = new TickTock();\n this.viewport = new Viewport();\n this.viewport.update();\n this.listen();\n }\n\n // Add search logic to manage the various states of the search component\n\n addSearchLogic() {\n return this.searchComponent ? new Search(this.searchComponent) : false;\n }\n\n // Add focus-trap logic to manage focus state when flyout is expanded.\n\n addFocusTrapLogic() {\n return new FocusTrap(this.headerComponent, {\n initialFocus: this.flyoutComponent,\n });\n }\n\n // Manage click events.\n\n clickHandler(event) {\n const isActive = document.body.classList.contains(this.settings.activeClass);\n const isSearch = event.currentTarget === this.searchButton;\n\n if (isActive) {\n this.deactivate();\n } else {\n this.activate(isSearch);\n }\n }\n\n // Manage keydown events.\n\n keyDownHandler(event) {\n const keyCode = Keyboard.getCode(event);\n if (keyCode === Keyboard.Escape) {\n this.deactivate();\n }\n }\n\n // Activates the flyout and all of the associated buttons.\n\n activate(search) {\n document.body.classList.add(this.settings.activeClass);\n this.menuButton.setAttribute('aria-expanded', !search);\n this.searchButton.setAttribute('aria-expanded', search);\n const menuInnerSpan = this.menuButton.querySelector('span');\n menuInnerSpan.innerText = 'Close';\n\n // Leverage the focus trap logic to lock active element focus\n // within the flyout only (on mobile devices specifically).\n if (this.viewport.mobileState) {\n this.FocusTrap.activate();\n }\n\n if (search && this.Search) {\n // Leverage the Search logic to manage it's focus in state.\n this.Search.focusIn();\n } else {\n // If the menu button is clicked, focus the flyout container.\n this.timer.setTimeout('focus', () => { this.flyoutComponent.focus(); }, 50);\n }\n }\n\n // Deactivates the flyout and all of the associated buttons.\n\n deactivate() {\n this.FocusTrap.deactivate();\n document.body.classList.remove(this.settings.activeClass);\n this.menuButton.setAttribute('aria-expanded', false);\n this.searchButton.setAttribute('aria-expanded', false);\n const menuInnerSpan = this.menuButton.querySelector('span');\n menuInnerSpan.innerText = 'Menu';\n\n // Leverage the Search logic to manage it's focus out state.\n\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 this.menuButton.addEventListener('click', this.clickHandler.bind(this));\n // this.searchButton.addEventListener('click', this.clickHandler.bind(this));\n }\n\n // Getters of the various components available\n\n get menuButton() {\n return this.element.querySelector(this.settings.buttons.menu);\n }\n\n get searchButton() {\n return this.element.querySelector(this.settings.buttons.search);\n }\n\n get flyoutComponent() {\n return document.querySelector(this.settings.components.flyout);\n }\n\n get searchComponent() {\n return document.querySelector(this.settings.components.search);\n }\n\n get headerComponent() {\n return document.querySelector(this.settings.components.header);\n }\n}\n","import $ from 'jquery';\nimport { viewport } from './Viewport';\nimport CalendarFeed from './CalendarFeed';\nimport DDTemplates from './DDTemplates';\nimport Anchors from './Anchors';\nimport Drupal from './Drupal';\nimport FixNavigation from './FixNavigation';\nimport Gallery from './Gallery';\nimport GallerySlider from './GallerySlider';\nimport Header from './Header';\nimport HomeEvents from './HomeEvents';\nimport MicrositeEvents from './MicrositeEvents';\n// Homepage functionality\nimport HeroSlider from './HeroSlider';\nimport HeroVideo from './HeroVideo';\nimport HomeQuotes from './HomeQuotes';\nimport Messages from './Messages';\nimport Modaal from './Modaal';\nimport Navigation from './Navigation';\n// import Parallax from './Parallax';\nimport SmartFooter from './SmartFooter';\nimport Sticky from './Sticky';\nimport TermNavigation from './TermNavigation';\nimport Toolbar from './Toolbar';\n// Communities Template functionality\nimport Communities from './Communities';\n// Communities nearest me\nimport ProximityController from './ProximityController';\nimport { E } from 'keyboard-key';\nimport Timeline from './Timeline';\nimport EventsSlider from './EventsSlider';\nimport CommunitiesSlider from './CommunitiesSlider';\n\n// Add a detach function to jQuery\n(function($) {\n if (!$.fn.detach) {\n $.fn.detach = function() {\n return this.each(function() {\n if(this.parentNode) {\n this.parentNode.removeChild( this );\n }\n });\n };\n }\n}(jQuery));\n\n// Add the theme behaviors\nDrupal.behavior((context) => {\n\n // After Footer links\n const finePrint = document.querySelector('.page-footer .fine-print');\n const afterFooter = document.querySelector('.page-footer .after-footer-links');\n const parentDiv = afterFooter ? afterFooter.parentNode : null;\n const viewContent = afterFooter ? afterFooter.querySelector('.view-content') : null;\n \n if (afterFooter) {\n parentDiv.insertBefore(afterFooter, finePrint);\n const newViewsRow = document.createElement('div');\n newViewsRow.classList.add(\"views-row\");\n const thisYear = new Date().getFullYear();\n newViewsRow.insertAdjacentHTML('afterbegin', `Copyright © ${thisYear} Eskaton`);\n viewContent.insertAdjacentElement('afterbegin', newViewsRow);\n }\n\n // Copy Hero CTA to header for mobile sticky functionality\n const micrositeCommunities = document.querySelector('.microsite-communities.no-sidebars');\n if (micrositeCommunities) {\n const elementToCopy = document.querySelector('.node-microsite-hero .node-header');\n if (elementToCopy) {\n const targetParent = document.querySelector('.page-header');\n const clonedElement = elementToCopy.cloneNode(true);\n targetParent.appendChild(clonedElement);\n }\n }\n\n // Move mobile CTA to header for mobile sticky functionality (subpages and mobile only)\n const micrositeCommunitiesSubpage = document.querySelector('.microsite-communities:not(.no-sidebars)');\n if (micrositeCommunitiesSubpage) {\n const elementMobileCTA = document.querySelector('.microsite-mobile-cta');\n const targetParentHeader = document.querySelector('.page-header');\n if (elementMobileCTA && targetParentHeader) {\n targetParentHeader.appendChild(elementMobileCTA);\n }\n }\n\n // Move microsite hero title to flickity-viewport\n const micrositeHeroSection = document.querySelector('.microsite-hero');\n\n if (micrositeHeroSection) {\n const heroTitleElement = micrositeHeroSection.querySelector('.node-header h1');\n const heroSubTitleElement = micrositeHeroSection.querySelector('.node-header h2');\n\n const titleWrapper = createAndAddClass('div', 'microsite-hero__title-wrapper');\n const titleElement = createAndAddClass('div', 'microsite-hero__title');\n \n const flickityViewport = micrositeHeroSection.querySelector('.flickity-viewport');\n \n if (flickityViewport) {\n appendChildElements(flickityViewport, [titleWrapper]);\n }\n\n if (titleWrapper) {\n appendChildElements(titleWrapper, [titleElement]);\n }\n\n if (heroSubTitleElement) {\n appendChildElements(titleElement, [heroSubTitleElement, heroTitleElement]);\n } else {\n appendChildElements(titleElement, [heroTitleElement]);\n }\n }\n\n function createAndAddClass(elementType, className) {\n const element = document.createElement(elementType);\n element.classList.add(className);\n return element;\n }\n \n function appendChildElements(parent, children) {\n children.forEach(child => parent.insertAdjacentElement('afterbegin', child));\n }\n\n // Get microsite title and create logo style\n const bodyElement = document.body;\n if (bodyElement.classList.contains('microsite-communities')) {\n const pageClass = Array.from(bodyElement.classList).find((className) => className.includes('microsite-'));\n\n if (pageClass) {\n const removePagePrefix = str => str.replace('microsite-', '');\n const logoUrl = `/sites/main/files/misc/${removePagePrefix(pageClass)}.svg`;\n\n const setLogoStyle = (selector, url) => {\n const logoElement = document.querySelector(selector);\n if (logoElement) {\n logoElement.setAttribute('style', `background-image: url('${url}');`);\n }\n };\n\n const setLogoUrl = (selector) => {\n const logoElement = document.querySelector(selector);\n if (logoElement) {\n logoElement.setAttribute('href', `/${removePagePrefix(pageClass)}`);\n }\n };\n\n setLogoStyle('.primary-navigation li:first-child a', logoUrl);\n setLogoStyle('.microsite-branding .mobile-logo', logoUrl);\n setLogoUrl('.microsite-branding .logo a');\n }\n }\n\n // AM / PM add space + periods\n const calendarDates = document.querySelectorAll('.date-display-single .date-display-start, .date-display-single .date-display-end, .event-date-tile .time');\n if (calendarDates) {\n calendarDates.forEach(e => e.textContent = e.textContent.replace('am', ' a.m.').replace('pm', ' p.m.'));\n }\n\n $('body').append('');\n\n $('.node-home-hero', context).each((i, element) => {\n if (!element.heroSlider) {\n element.heroSlider = new HeroSlider(element);\n $('#page-title').remove();\n }\n });\n\n // Hero Banner with Video\n // $('.home__hero .node-home-hero .flickity-slider .has-video', context).each((i, element) => {\n // if (!element.HeroVideo) {\n // element.HeroVideo = new HeroVideo(element);\n // }\n // });\n\n // Hero Slider Microsite\n $('.node-microsite-hero', context).each((i, element) => {\n if (!element.heroSlider) {\n element.heroSlider = new HeroSlider(element);\n $('#page-title').remove();\n }\n });\n\n // Messages\n $('#messages', context).each((i, element) => {\n const isError = element.querySelector('.messages.error');\n if (!element.Messages && isError) {\n element.Messages = new Messages(element);\n }\n });\n\n // DD Template Behaviors\n if (!document.body.DDTemplates) {\n document.body.DDTemplates = new DDTemplates(context);\n }\n\n // Fix our damn menus from displaying orphaned children\n $('.main-navigation, .term-navigation', context).each((i, element) => {\n if (!element.FixNavigation) {\n element.FixNavigation = new FixNavigation(element);\n }\n });\n\n /**\n * Communities Template Specific\n */\n if (document.body.classList.contains('ttv-std-4') && !document.body.Communities) {\n document.body.Communities = new Communities();\n }\n\n // Parallax effect for Home Hero and Banner images.\n // $('.home__hero, .banner', context).find('img:not(.wave)').each((i, element) => {\n // if (!element.Parallax) {\n // element.Parallax = new Parallax(element);\n // }\n // });\n\n // Sticky sidebars\n $('.page-sidebar', context).each((i, element) => {\n if (!element.Sticky) {\n element.Sticky = new Sticky(element);\n }\n });\n\n // Main Navigation\n $('#nice-menu-3', context).each((i, element) => {\n if (!element.Navigation) {\n element.Navigation = new Navigation(element);\n }\n });\n\n // Controls the states of the menu and search states\n $('.toolbar', context).each((i, element) => {\n if (!element.Toolbar) {\n element.Toolbar = new Toolbar(element);\n }\n });\n\n // Fixed Header using Headroom.js\n $('.headroom', context).each((i, element) => {\n if (!element.Header) {\n element.Header = new Header(element);\n }\n });\n\n // Smart Footer\n $('body:not(.microsite):not(.ttveskaton-community) .page-footer', context).each((i, element) => {\n if (!element.SmartFooter) {\n const $reactiveElement = $('.page', context);\n element.SmartFooter = new SmartFooter(element, $reactiveElement);\n }\n });\n\n // Term Navigation\n $('.term-navigation', context).each((i, element) => {\n if (!element.TermNavigation) {\n element.TermNavigation = new TermNavigation(element);\n }\n });\n\n // Homepage Upcoming Events\n // $('.home__events:not(.placeholder-block)', context).each((i, element) => {\n // if (!element.HomeEvents) {\n // element.HomeEvents = new HomeEvents(element);\n // }\n // });\n\n // Homepage Testimonials/Quotes\n $('.home__quotes', context).each((i, element) => {\n if (!element.HomeQuotes) {\n element.HomeQuotes = new HomeQuotes(element);\n }\n });\n\n // Replace Lightbox lightframe functionality with Modaal.\n $('.open-lightframe', context).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', context).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]', context).closest('.node').each((i, element) => {\n const notValid = element.parentNode.classList.contains('dd-hover-dependencies');\n if (!element.Modaal && !notValid) {\n // const selector = '.node-header a, .field-image a, .link-read-more a';\n const selector = '.field-image a';\n element.Modaal = new Modaal(element, selector);\n }\n });\n\n // Enable video modal on communities resources teasers.\n setTimeout(() => {\n $('.communities__resources .node.play-video', context).each((i, element) => {\n if (!element.resourcesModaal) {\n const selector = '.node-header a';\n element.resourcesModaal = new Modaal(element, selector);\n }\n });\n }, 200);\n\n // Photo Galleries\n $('.node-content .photo-gallery, body:not(.microsite) .photo-gallery .node-image, body:not(.microsite) .photo-gallery .node-upper-image', context).each((i, element) => {\n if (!element.Gallery) {\n element.Gallery = new Gallery(element);\n }\n });\n\n // Gallery Slider\n $('.microsite-carousel-gallery .node-image', context).each((i, element) => {\n if (!element.GallerySlider) {\n element.GallerySlider = new GallerySlider(element);\n }\n });\n\n // Microsite Events Slider\n $('.microsite-events .view-content', context).each((i, element) => {\n if (!element.eventsSlider) {\n element.eventsSlider = new EventsSlider(element);\n }\n });\n\n // Home Communities Slider\n $('.home__communities .block-content', context).each((i, element) => {\n if (!element.communitiesSlider) {\n element.communitiesSlider = new CommunitiesSlider(element);\n }\n });\n\n // Home Event Slider\n // $('body.front .home__events', context).each((i, element) => {\n // if (!element.HomeEvents) {\n // element.HomeEvents = new HomeEvents(element);\n // }\n // });\n\n // Microsite Event Slider\n $('.upcoming__events, .home__events', context).each((i, element) => {\n if (!element.MicrositeEvents) {\n element.MicrositeEvents = new MicrositeEvents(element);\n }\n });\n\n // Calendar of Events View\n $('.calendar-feed', context).each((i, element) => {\n if (!element.CalendarFeed) {\n element.CalendarFeed = new CalendarFeed(element);\n }\n });\n\n // Add Sitemap output using the digitaldcore.js function\n const $map = $('#sitemap', context);\n const $nav = $('#sitemap .content', context);\n\n if ($map.length && $nav.length) {\n Drupal.digitaldcoreCreateSiteMap($map, $nav);\n $map.addClass('ready');\n }\n\n // Add Anchor management\n if (!document.body.Anchors) {\n document.body.Anchors = new Anchors();\n }\n\n // Geofield Form Controller\n $('form#proximity-geofield', context).each((i, element) => {\n if (!element.ProximityController) {\n element.ProximityController = new ProximityController(element);\n }\n });\n\n // Timeline\n $('body.page-our-history-and-timeline', context).each((i, element) => {\n if (!element.Timeline) {\n element.Timeline = new Timeline(element);\n }\n });\n\n // function addPadding(test) {\n // $(test).each((i, element) => {\n // var $header = $('header.page-header .header');\n // var $nav = $('#navigation');\n // var $flyout = $('.page-header #flyout.flyout');\n // var $search = $('.page-header #flyout.flyout .site-search');\n // var $sidebar = $('main.page-main .page-sidebar.sticky');\n // var $section = $('main.page-main .page-center');\n // $(element).detach().prependTo('body');\n // const elemHeight = $(element).outerHeight(false);\n // if ($(element).not('.cc-invisible').length > 0) {\n // $nav.css('top', (parseInt($nav.css('top')) + elemHeight) + 'px');\n // $header.css('top', (parseInt($header.css('top')) + elemHeight) + 'px');\n // $flyout.css('top', (parseInt($flyout.css('top')) + elemHeight) + 'px');\n // if ($(window).width() > 1024) {\n // $search.css('top', (parseInt($search.css('top')) + elemHeight) + 'px');\n // }\n // $sidebar.css('top', (parseInt($sidebar.css('top')) + elemHeight) + 'px');\n // $section.css('padding-top', (parseInt($section.css('padding-top')) + elemHeight) + 'px');\n // }\n // $(element).find('.cc-dismiss').click(function () {\n // $nav.css('top', (parseInt($nav.css('top')) - elemHeight) + 'px');\n // $header.css('top', (parseInt($header.css('top')) - elemHeight) + 'px');\n // $flyout.css('top', (parseInt($flyout.css('top')) - elemHeight) + 'px');\n // if ($(window).width() > 1024) {\n // $search.css('top', (parseInt($search.css('top')) + elemHeight) + 'px');\n // }\n // $sidebar.css('top', (parseInt($sidebar.css('top')) + elemHeight) + 'px');\n // $section.css('padding-top', (parseInt($section.css('padding-top')) - elemHeight) + 'px');\n // $(this).addClass('cc-invisible');\n // });\n // });\n // }\n\n $('body', context).each(() => {\n var title = $('h1#page-title');\n if (title.length > 1) {\n title.each((i,element) => {\n var $element = $(element);\n if ($element.hasClass('default')) {\n $element.remove();\n }\n });\n }\n });\n\n // Links with new tab or new frame.\n $('a[target=\"_blank\"]', context).each((i, element) => {\n var $element = $(element);\n var warningIndicator = 'Opens an external site in a new window';\n\n if ($element.hasClass('video-lightframe')) {\n warningIndicator = 'Opens video in a new frame';\n }\n\n $element.attr('aria-describedby', `warning-indicator-${i}`);\n $('.warning-indicators').append(`${warningIndicator}`);\n });\n\n // function addPadding(cookie) {\n // setTimeout(() => {\n // const cookieVisible = $(cookie).not('.cc-invisible');\n // const microsite = $('body.microsite');\n // if (cookieVisible) {\n // let topCookie = cookieVisible.outerHeight();\n // let topPad = $('.page').css('padding-top');\n // topPad = parseInt(topPad);\n // let newPadding = topPad + topCookie;\n // // if (!microsite.length > 0) {\n // // $('header.page-header').css('top', topCookie + 'px');\n // // }\n // // $('.page').css('padding-top', newPadding + 'px');\n // }\n // }, 400);\n // }\n // addPadding('.cc-window.cc-top.fixed-top');\n \n // Update Viewport\n viewport.update();\n\n // Read More ADA\n const articles = document.querySelectorAll('article');\n articles.forEach(e => {\n const articleTitleLink = e.querySelector('.title a');\n const articleTitle = articleTitleLink ? articleTitleLink.innerText : '';\n const readmoreTitleDiv = e.querySelector('.readmore-title');\n const readmoreTitle = readmoreTitleDiv ? readmoreTitleDiv.innerText : false;\n const readmoreButton = e.querySelector('li.link-read-more a');\n if (readmoreTitle && readmoreButton) {\n readmoreButton.setAttribute('aria-label', readmoreTitle);\n readmoreButton.setAttribute('title', readmoreTitle);\n } else if(readmoreButton) {\n readmoreButton.setAttribute('aria-label', 'Read more about ' + articleTitle);\n readmoreButton.setAttribute('title', 'Read more about ' + articleTitle);\n }\n });\n\n // Add label to search input\n const searchInput = document.querySelector('#edit-keywords-wrapper');\n if (searchInput) {\n const newLabel = document.createElement('Label');\n const newContent = document.createTextNode(\"Search\");\n newLabel.setAttribute('for', 'edit-keywords');\n newLabel.classList.add('visuallyhidden');\n newLabel.appendChild(newContent);\n searchInput.insertAdjacentElement('afterbegin', newLabel);\n }\n\n const isMicrosite = document.querySelector('body.microsite');\n const isEskatonCommunity = document.querySelector('body.ttveskaton-community');\n const communitiesOverview = document.querySelector('.communities__overview');\n const amplifyWidget = document.querySelector('.amplify-widget');\n if (amplifyWidget && !isMicrosite && !communitiesOverview && !isEskatonCommunity) {\n const nodeContent = document.querySelector('.node-content');\n nodeContent.insertAdjacentElement('beforeend', amplifyWidget);\n }\n\n // Add aria-label to inputs inside \"field-embed label\"\n window.onload = function () {\n const testLabel = document.querySelectorAll('.field-embed label');\n if (testLabel) {\n testLabel.forEach((e) => {\n const labelInput = e.querySelector('input');\n if (labelInput) {\n labelInput.setAttribute('aria-label', e.textContent);\n e.parentElement.setAttribute('aria-label', e.textContent);\n }\n });\n }\n\n const ulCheckboxes = document.querySelectorAll('[role=\"checkbox\"]');\n if (ulCheckboxes) {\n ulCheckboxes.forEach((e) => {\n e.setAttribute('aria-label', 'Checkbox');\n });\n }\n\n const typeSubmit = document.querySelectorAll('input[type=\"submit\"]');\n if (typeSubmit) {\n typeSubmit.forEach((e) => {\n e.setAttribute('aria-label', 'Submit');\n });\n }\n\n const selectOperator = document.querySelectorAll('.form-select');\n if (selectOperator) {\n selectOperator.forEach((e) => {\n e.setAttribute('aria-label', e.getAttribute('title'));\n });\n }\n\n const loginPopup = document.querySelectorAll('.dd-login');\n if (loginPopup) {\n loginPopup.forEach((e) => {\n e.setAttribute('aria-label', 'Login popup dialog');\n });\n }\n\n // Select All links and add aria-label\n const links = document.querySelectorAll('a');\n if (links) {\n links.forEach((e) => {\n if (e.hasAttribute('aria-label') || e.hasAttribute('title') || e.hasAttribute('role')) {\n return;\n }\n e.setAttribute('aria-label', e.textContent.trim());\n });\n }\n\n // Add span element to pagination text\n const allPagers = document.querySelectorAll('li.pager-first a, li.pager-previous a, li.pager-next a, li.pager-last a');\n if (allPagers) {\n allPagers.forEach(e => {\n const node = e.childNodes[0];\n const span = document.createElement('span');\n node.after(span);\n span.appendChild(node);\n });\n }\n\n // Add time to events on calendar page\n const eventDateWrap = document.querySelectorAll('body.page-calendar time.start');\n if (eventDateWrap) {\n eventDateWrap.forEach(e => {\n const dateTime = new Date(e.getAttribute('datetime')).toLocaleTimeString('en-US', { hour: \"2-digit\", minute: \"2-digit\" }).toLowerCase().replace('am', ' a.m.').replace('pm', ' p.m.');\n e.insertAdjacentHTML('beforeend', `
${dateTime}
`);\n });\n }\n \n\n // Add phone number on \"live well at home\" microsite primary navigation\n const primaryNav = document.querySelector('.microsite-388 .primary-navigation #nice-menu-3');\n if (primaryNav) {\n primaryNav.insertAdjacentHTML('beforeend', '
  • 800-478-1209
  • ');\n }\n\n // Display footer with same id as body microsite-id\n function applyStyleToMicrositeFooter() {\n const pattern = /microsite-(\\d+)/;\n let desiredNumber = null;\n const micrositeElement = document.querySelector('.microsite');\n\n if (micrositeElement) {\n Array.from(micrositeElement.classList).some(className => {\n const match = className.match(pattern);\n if (match) {\n desiredNumber = match[1];\n return true;\n }\n return false;\n });\n \n if (desiredNumber) {\n const micrositeFooter = document.querySelectorAll(`.microsite-footer article.t${desiredNumber}`);\n micrositeFooter.forEach(e => {\n e.style.display = 'block';\n });\n }\n }\n }\n applyStyleToMicrositeFooter();\n\n function hideHeroLinks() {\n // Get the elements\n const header = document.querySelector('.microsite-hero .node-header');\n const link = document.querySelector(\".microsite-hero .node-header a\");\n\n // Check if the link has text content\n if (!link.textContent.trim()) {\n header.style.display = \"none\"; // Hide the header\n } else {\n header.style.display = \"block\"; // Show the header\n }\n }\n hideHeroLinks();\n }\n});\n","import jQuery from 'jquery';\nimport Flickity from 'flickity';\n\n// Register our jquery version with Flickity.\nFlickity.setJQuery(jQuery);\n\nexport default Flickity;\n","import $ from 'jquery';\n\nclass Change {\n constructor() {\n this.change = this.change.bind(this);\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).on('scroll resize orientationchange', this.change);\n }\n}\n\nexport default new Change();\n","import $ from 'jquery';\nimport 'modaal';\n\nexport default class ModaalTransformer {\n constructor(node, settings) {\n this.old = node;\n this.settings = settings;\n this.type = 'image';\n\n // Add custom video type.\n if (this.settings.isVideo) {\n this.type = 'video';\n }\n\n // Remove unneeded attributes and classes.\n this.old.removeAttribute('rel');\n this.old.classList.remove('lightbox-processed');\n\n // Clone the node to insure removal of previously set lightbox listeners functions.\n this.new = this.old.cloneNode(true);\n this.old.parentNode.replaceChild(this.new, this.old);\n\n // Add Modaal attributes for this particular link type.\n this.new.setAttribute('data-modaal-type', this.type);\n\n // If this is an image gallery, add the group data attribute.\n if (this.settings.isGallery) {\n this.new.setAttribute('data-group', 'gallery');\n }\n\n // Add the caption, if applicable.\n const image = this.new.querySelector('img');\n const caption = image.getAttribute('title');\n if (caption.length) {\n this.new.setAttribute('data-modaal-desc', caption);\n }\n\n // Add a replacement listener for our new link.\n this.new.addEventListener('click', this.clickHandler.bind(this));\n }\n\n clickHandler(event) {\n event.preventDefault();\n $(this.new).modaal({\n type: this.type,\n start_open: true,\n animation: 'none',\n outer_controls: true,\n });\n }\n}\n","import ModaalTransformer from './ModaalTransformer';\n\nconst nodeSelector = 'node';\n\nexport default class Modaal {\n constructor(parent, selector) {\n const settings = {\n isGallery: parent.querySelectorAll('img').length > 1,\n };\n\n if (parent.classList.contains(nodeSelector)) {\n // Process individual node.\n parent.querySelectorAll(selector).forEach((child) => {\n settings.isVideo = child.parentNode.classList.contains('field-video');\n child.ConvertToModaal = new ModaalTransformer(child, settings);\n });\n } else {\n // Process group of nodes.\n parent.querySelectorAll(nodeSelector).forEach((node) => {\n node.querySelectorAll(selector).forEach((child) => {\n settings.isVideo = child.parentNode.classList.contains('field-video');\n child.ConvertToModaal = new ModaalTransformer(child, settings);\n });\n });\n }\n }\n}\n","import tabbable from 'tabbable';\nimport TickTock from 'tick-tock';\nimport Keyboard from 'keyboard-key';\nimport { viewport } from './Viewport';\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.textContent}, 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.textContent = link.textContent;\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 || viewport.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 // Don't continue if there isn't tabbable options available.\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) && !viewport.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 (viewport.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 (viewport.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"],"sourceRoot":""}