{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/js/.theme.config.js","webpack:///./src/js/Breakpoints.js","webpack:///./src/js/Drupal.js","webpack:///./src/js/Anchors.js","webpack:///./src/js/DDTemplates.js","webpack:///./src/js/Header.js","webpack:///./src/js/Viewport.js","webpack:///./src/js/Search.js","webpack:///./src/js/Toolbar.js","webpack:///./src/js/Change.js","webpack:///./src/js/Sticky.js","webpack:///./src/js/Gallery.js","webpack:///./src/js/Navigation.js","webpack:///./src/js/SmartFooter.js","webpack:///./src/js/BackgroundImage.js","webpack:///./src/js/TrumbaEvents.js","webpack:///./src/js/CalendarFeed.js","webpack:///./src/js/FixNavigation.js","webpack:///./src/js/TermNavigation.js","webpack:///./src/js/AccordionWrap.js","webpack:///./src/js/AccordionFix.js","webpack:///./src/js/AccordionContainer.js","webpack:///./src/js/RelocateSearch.js","webpack:///./src/js/RelocateHeaderlinks.js","webpack:///./src/js/Modaal.js","webpack:///./src/js/AnchorTags.js","webpack:///./src/js/StringSplit.js","webpack:///./src/js/Placeholder.js","webpack:///./src/js/Programs.js","webpack:///./src/js/BrowserCheck.js","webpack:///./src/js/EventSlider.js","webpack:///./src/js/theme.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","0","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","offsets","mobile","tablet","desktop","larger","sidebar","padding","breakpoints","min","max","Infinity","Breakpoints","this","current","behaviors","Anchors","id","document","querySelectorAll","forEach","anchor","addEventListener","clickHandler","location","hash","substr","goToCurrentAnchor","event","preventDefault","currentTarget","href","indexOf","destination","getElementById","scrollToDestination","scrollTo","elementToScroll","verticalOffset","currentOffset","maxDuration","minDuration","speed","then","scrollX","scrollY","focus","timer","Timer","setTimeout","clear","currentBreakpoint","offsetSettings","config","defaults","photoGalleryPID","a11y","anchors","itemAppearsIn","fullNodeRelatedLinks","bundledReferringContent","subtermOverviews","lexiconGlossary","nodeMeta","slideshowIcons","expandingDates","DDTemplates","context","options","isNodeView","isNode","settings","assign","defineApplicableBehaviors","$","body","is","view","node","term","global","behavior","addEnabledBehavior","$appearingNav","find","addClass","each","element","$block","attr","a","$node","$items","removeClass","$visible","map","item","getComputedStyle","getPropertyValue","filter","b","meta","$meta","$dates","$link","toggleClass","text","insertBefore","eq","$container","appendTo","append","image","$img","before","letter","replace","html","toUpperCase","console","log","documentIsReady","Drupal","fn","Callbacks","ready","fire","DrupalAMD","add","offset","tolerance","classes","initial","pinned","unpinned","top","notTop","bottom","notBottom","onPin","onUnpin","onTop","onNotTop","onBottom","onNotBottom","Header","headroom","Headroom","init","breakpoint","Viewport","_breakpoint","change","ticking","addListeners","state","mobileState","innerWidth","currentState","getCurrentState","previousState","changeCallbacks","setCurrentState","mobileCallbacks","desktopCallbacks","requestTick","requestAnimationFrame","update","callback","on","viewport","components","input","Search","customComponents","searchText","listen","setAttribute","typeOutPlaceholderText","setInterval","resetSearchInput","querySelector","menuClass","searchClass","buttons","menu","search","close","flyout","header","Toolbar","$element","addSearchLogic","FocusTrap","addFocusTrapLogic","searchComponent","headerComponent","initialFocus","flyoutComponent","menuActive","classList","contains","searchActive","isActive","isSearch","searchButton","deactivate","activate","Keyboard","getCode","Escape","activeClass","menuButton","closeButton","fadeOut","focusIn","remove","focusOut","css","keyDownHandler","callbacks","request","Sticky","register","Change","onChange","innerHeight","height","fade","dots","arrows","slidesToShow","slidesToScroll","responsive","Gallery","$gallery","build","slick","menuBlock","menuParent","activeTrailClass","expandActiveMenus","closeUnnestedMenus","focusout","hover","delay","in","out","Navigation","preprocess","menuParents","index","submenu","link","firstElementChild","innerText","button","createElement","nextSibling","lastElementChild","TickTock","Tabbable","tabbable","collapse","expand","parentNode","target","getAttribute","openSubmenus","openSubmenu","expandElement","expandSubmenu","collapseElement","collapseSubmenu","states","active","open","removeAttribute","expanded","keyDownEventDispatcher","mouseDownEventDispatcher","focusOutEventDispatcher","mouseOverHandler","mouseOutHandler","Enter","userInteractionHandler","clearAll","relatedTarget","SmartFooter","$reactiveElement","outerHeight","sourceSelector","destSelector","isPseudo","BackgroundImage","addBackgroundImage","getSource","src","prepend","url","maxDescLength","TrumbaEvents","Request","fetch","cache","response","json","success","complete","catch","error","className","innerHTML","render","appendChild","eventTime","hours","start","Date","startDateTime","end","endDateTime","month","getMonth","day","getDate","startTime","getHours","endTime","undefined","calUrl","eventID","imgUrl","eventImage","description","title","eventBgImage","loader","removeChild","storageKey","paginationLabel","filtersLabel","filterByPostTypes","useFilters","filters","defaultFilters","All","CalendarFeed","getFilters","buildCalendar","createFilters","$group","$posts","currentYear","currentMonth","post","$post","oDates","type","datetime","date","moment","format","mon","dow","year","toLowerCase","$year","$tile","markup","isSameMonth","isSameDay","isSameYear","next","$filters","types","ids","getDefaultData","getCustomizedData","currentFilter","sessionStorage","getItem","decodeURIComponent","$filter","$show","inArray","not","stop","animate","opacity","setItem","$shown","nextUntil","$ctrl","filterHandler","trigger","_types","_ids","regex","test","exec","indexes","aResults","aTypes","parseInt","sort","FixNavigation","process","$parent","children","$children","parent","TermNavigation","standardize","addLogic","match","level","parentElement","list","buttonLink","AccordionWrap","getClasses","status","getStatus","addBack","wrapAll","$classes","hasClass","elemClasses","split","val","substring","$status","selector","AccordionFix","click","setVert","stopPropagation","isVisible","topOffset","documentElement","scrollTop","e","elementTop","elementBottom","viewportTop","viewportBottom","elem","SearchRelocate","$body","getBody","mobileActive","desktopActive","outerWidth","prependTo","HeaderlinksRelocate","ConvertToModaal","old","isVideo","new","cloneNode","replaceChild","isGallery","caption","textContent","modaal","start_open","Modaal","child","AnchorTag","hostname","divider","StringSplit","tempText","trim","Placeholder","label","Programs","openFlyout","closeFlyout","BrowserCheck","browserArr","uagent","navigator","userAgent","chrome","firefox","msie","safari","opr","browser","version","keys","matchCheck","RegExp","newMatch","opera","Flickity","setJQuery","jQuery","prevNextButtons","wrapAround","pageDots","groupCells","EventSlider","sliderElement","shouldBuildSlider","Promise","resolve","slider","destroy","restore","onMobileChange","onTabletChange","onDesktopChange","slides","browserCheck","closest","RelocateSearch","Relocateheaderlinks","RelocateHeaderlinks","accordionWrap","accordionContainer","AccordionContainer","anchorTag","bannerBgImage","heroBgImage","stringSplit","placeholder","homePrograms","instafeed","instagramSlider","Instafeed","userId","clientId","accessToken","resolution","template","limit","sortBy","run","$map","$nav","digitaldcoreCreateSiteMap"],"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([169,1]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","/**\n * Theme version\n */\nconst version = '4.0.0';\n\n/**\n * Domain to use with the import/export script\n */\nexport const domain = 'https://live-asi-csus-pa.pantheonsite.io';\n\n/**\n * Path/page to append to the domain to use with the import/export script.\n */\nexport const path = '/user';\n\n/**\n * Centralized offsets used by various components.\n */\nexport const offsets = {\n // offsets for each breakpoint\n mobile: 80,\n tablet: 80,\n desktop: 120,\n larger: 120,\n // other offsets for extended functionality\n sidebar: 35,\n padding: 20,\n};\n\n/**\n * Theme Breakpoints\n */\nexport const breakpoints = {\n mobile: {\n min: 0,\n max: 639,\n },\n tablet: {\n min: 640,\n max: 1199,\n },\n desktop: {\n min: 1200,\n max: 1365,\n },\n larger: {\n min: 1366,\n max: Infinity,\n }\n};\n\n/**\n * Default export of theme related info.\n */\nexport default version;\n","import Breakpoints from 'breakpoints-js/dist/breakpoints';\nimport { breakpoints } from './.theme.config';\n\n// Create a mobileState property to help manage viewport based functionality.\nObject.defineProperty(Breakpoints, 'mobileState', {\n get() {\n return this.current().max < this.get('desktop').min;\n },\n});\n\n// Create a new instance with our configured breakpoints.\nBreakpoints(breakpoints);\n\nexport default Breakpoints;\n","/* 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 Timer from 'tick-tock';\nimport scrollTo from 'animated-scroll-to';\nimport Breakpoints from './Breakpoints';\nimport { offsets } from './.theme.config';\n\nexport default class Anchors {\n constructor() {\n this.id = '';\n this.offsets = offsets;\n\n // Listen for click events on links starting with a hash.\n // If an id'd element exists, scroll to it.\n const anchors = document.querySelectorAll('a[href^=\"#\"]');\n anchors.forEach((anchor) => {\n anchor.addEventListener('click', this.clickHandler.bind(this));\n });\n\n // Manage URLs containing a hash\n // If an id'd element exists, scroll to it.\n if (window.location.hash) {\n this.id = window.location.hash.substr(1);\n this.goToCurrentAnchor();\n }\n }\n\n clickHandler(event) {\n // Prevent default browser based hash functionality.\n event.preventDefault();\n\n // Extract the hash to use as the element id to search for.\n this.id = event.currentTarget.href.substr(event.currentTarget.href.indexOf('#') + 1);\n\n // Locate destination within the document.\n const destination = document.getElementById(this.id);\n\n // Quit if the destination isn't found\n if (!destination) return;\n\n // Scroll to destination.\n this.scrollToDestination(destination);\n }\n\n scrollToDestination(destination) {\n scrollTo(destination, {\n elementToScroll: window,\n verticalOffset: this.currentOffset,\n maxDuration: 1000,\n minDuration: 250,\n speed: 1000,\n }).then(() => {\n // Focus the element we scrolled to after we scroll down to it.\n const { scrollX, scrollY } = window;\n destination.focus();\n window.scrollTo(scrollX, scrollY);\n });\n }\n\n goToCurrentAnchor() {\n const anchor = document.getElementById(this.id);\n if (anchor) {\n const timer = new Timer();\n timer.setTimeout('setCurrentAnchor', () => {\n this.scrollToDestination(anchor);\n timer.clear('setCurrentAnchor');\n }, 500);\n }\n }\n\n get currentOffset() {\n const currentBreakpoint = Breakpoints.current();\n return this.offsets[currentBreakpoint.name];\n }\n\n get offsets() {\n return this.offsetSettings;\n }\n\n set offsets(config) {\n this.offsetSettings = {\n mobile: -config.padding,\n tablet: -config.padding,\n desktop: -(config.desktop + config.padding),\n larger: -(config.desktop + config.padding),\n };\n }\n}\n","import $ from 'jquery';\nimport Anchors from './Anchors';\n\nconst defaults = {\n photoGalleryPID: 107,\n behaviors: {\n a11y: true,\n anchors: 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 = Object.assign({}, 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 'nodeMeta',\n 'slideshowIcons',\n 'expandingDates',\n 'anchors',\n ],\n };\n\n // Cycle through each behavior and only add it if it's enabled\n behaviors[view].forEach((behavior) => {\n this.addEnabledBehavior(behavior);\n });\n }\n\n /**\n * A way to enable only behaviors the theme requires.\n */\n addEnabledBehavior(behavior) {\n const enabled = this.settings.behaviors[behavior];\n if (enabled) {\n this[behavior].call(this);\n }\n }\n\n /**\n * Helper class for theming the appearing navigation block\n */\n itemAppearsIn() {\n const $appearingNav = $('.appearing-nav', 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 * 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 /**\n * Adds page anchor support\n */\n anchors() {\n window.console.log($(this.context).attr('id'));\n if (!document.body.Anchors) {\n document.body.Anchors = new Anchors();\n }\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: 80,\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 // 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 $ from 'jquery';\n\nconst breakpoint = 1200;\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 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 = Object.assign({}, 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 $ from 'jquery';\nimport FocusTrap from 'focus-trap';\nimport Keyboard from 'keyboard-key';\nimport Viewport from './Viewport';\nimport Search from './Search';\n\nconst defaults = {\n menuClass: 'menu-active',\n searchClass: 'search-active',\n buttons: {\n menu: '.menu-icon',\n search: '.search-icon',\n close: '.close-icon',\n },\n components: {\n flyout: '#flyout',\n search: '#dd-search',\n header: '.page-header',\n },\n};\n\nexport default class Toolbar {\n constructor(element, options) {\n this.element = element;\n this.$element = $(element);\n this.settings = Object.assign({}, defaults, options);\n this.Search = this.addSearchLogic();\n this.FocusTrap = this.addFocusTrapLogic();\n this.listen();\n }\n\n // Add search logic to manage the various states of the search component\n\n addSearchLogic() {\n return this.searchComponent ? new Search(this.searchComponent) : false;\n }\n\n // Add focus-trap logic to manage focus state when flyout is expanded.\n\n addFocusTrapLogic() {\n return new FocusTrap(this.headerComponent, {\n initialFocus: this.flyoutComponent,\n });\n }\n\n // Manage click events.\n\n clickHandler(event) {\n const menuActive = document.body.classList.contains(this.settings.menuClass);\n const searchActive = document.body.classList.contains(this.settings.searchClass);\n const isActive = menuActive || searchActive;\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 const activeClass = search ? this.settings.searchClass : this.settings.menuClass;\n document.body.classList.add(activeClass);\n this.menuButton.setAttribute('aria-expanded', !search);\n this.searchButton.setAttribute('aria-expanded', search);\n this.closeButton.setAttribute('aria-expanded', !search);\n\n if (search && !Viewport.mobileState) {\n $(document.querySelector('.headerlinks')).fadeOut(100);\n $(document.querySelector('.toolbar .social-links')).fadeOut(100);\n }\n\n // Leverage the focus trap logic to lock active element focus\n // within the flyout only (on mobile devices specifically).\n if (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.flyoutComponent.focus();\n }\n }\n\n // Deactivates the flyout and all of the associated buttons.\n\n deactivate() {\n this.FocusTrap.deactivate();\n document.body.classList.remove(this.settings.menuClass);\n document.body.classList.remove(this.settings.searchClass);\n this.menuButton.setAttribute('aria-expanded', false);\n this.searchButton.setAttribute('aria-expanded', false);\n this.closeButton.setAttribute('aria-expanded', false);\n\n // Leverage the Search logic to manage it's focus out state.\n\n if (this.Search) {\n this.Search.focusOut();\n $(document.querySelector('.headerlinks')).css('display', 'inline-block');\n $(document.querySelector('.toolbar .social-links')).css('display', 'inline-block');\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 this.closeButton.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 closeButton() {\n return document.querySelector(this.settings.buttons.close);\n }\n\n get flyoutComponent() {\n return document.querySelector(this.settings.components.flyout);\n }\n\n get searchComponent() {\n return document.querySelector(this.settings.components.search);\n }\n\n get headerComponent() {\n return document.querySelector(this.settings.components.header);\n }\n}\n","import $ 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 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 $ 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 = Object.assign({}, 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 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: false,\n delay: {\n in: 150,\n out: 250,\n },\n};\n\nexport default class Navigation {\n constructor(element, options) {\n this.menu = element;\n this.settings = Object.assign({}, defaults, options);\n this.preprocess();\n this.listen();\n }\n\n // Add appropriate accessibility attributes to existing markup\n // and the toggle button which manages the submenu display.\n\n preprocess() {\n this.menuParents.forEach((element, index) => {\n // Set unique ID to link the button to the submenu.\n const id = `${this.components.submenu}-${index}`;\n\n // Link\n const link = element.firstElementChild;\n link.setAttribute('aria-label', `${link.innerText}, tab to the next button to expand the submenu`);\n link.setAttribute('aria-haspopup', true);\n link.setAttribute('aria-controls', id);\n\n // Toggle button\n const button = document.createElement('button');\n button.classList.add(this.components.button);\n button.setAttribute('aria-haspopup', true);\n button.setAttribute('aria-controls', id);\n button.innerText = link.innerText;\n element.insertBefore(button, link.nextSibling);\n\n // Submenu\n const submenu = element.lastElementChild;\n submenu.id = id;\n submenu.classList.add(this.components.submenu);\n submenu.Timer = new TickTock();\n submenu.Tabbable = tabbable(submenu);\n\n // Add each reference within the parent.\n element.link = link;\n element.button = button;\n element.submenu = submenu;\n\n // Set initial state of components\n this.collapse(element);\n\n // Manage display of the active trail, if configured.\n if (this.settings.expandActiveMenus) {\n const isActiveTrail = element.classList.contains(this.settings.activeTrailClass);\n if (isActiveTrail) {\n this.expand(element, false);\n }\n }\n });\n }\n\n // Update submenu display based on user interaction.\n\n userInteractionHandler(event) {\n const { parentNode } = event.target;\n const { button, submenu } = parentNode;\n\n // If there isn't a submenu and button, quit.\n if (!submenu && !button) return;\n\n // Set expand state based on current aria-expanded attribute set on the button.\n const expand = button.getAttribute('aria-expanded') === 'false';\n\n // Set the current state of the associate submenu and button.\n if (expand) {\n this.expand(parentNode, true);\n } else {\n this.collapse(parentNode);\n }\n\n // Only continue to close unnested expanded submenus if the setting is true and\n // we're not viewing in a mobile state.\n if (!this.settings.closeUnnestedMenus || 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 // 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, true);\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","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';\n\nconst defaults = {\n sourceSelector: '.field-image.c1 img',\n destSelector: null,\n isPseudo: false,\n};\n\nfunction BackgroundImage(element, options) {\n this.$element = $(element);\n this.settings = Object.assign(defaults, options);\n this.addBackgroundImage();\n this.ready();\n}\n\nBackgroundImage.prototype = {\n getSource() { return this.$element.find(this.settings.sourceSelector).attr('src'); },\n\n addBackgroundImage() {\n const src = this.getSource();\n if (src && src.length) {\n if (this.settings.isPseudo) {\n this.$element.find('.node').prepend('');\n this.$element.find('.pod-image-bg').css('background-image', `url(${src})`);\n } else if (this.settings.destSelector) {\n this.$element.find(this.settings.destSelector).css('background-image', `url(${src})`);\n } else {\n this.$element.css('background-image', `url(${src})`);\n }\n this.$element.addClass('hasImage');\n }\n },\n\n ready() {\n setTimeout(() => {\n this.$element.addClass('ready');\n }, 300);\n },\n};\n\nexport default BackgroundImage;\n","import 'whatwg-fetch';\nimport $ from 'jquery';\nimport BackgroundImage from './BackgroundImage';\n\nconst defaults = {\n url: 'https://www.trumba.com/calendars/asi.json',\n filter: null,\n maxDescLength: 100,\n};\n\nexport default class TrumbaEvents {\n constructor(element, options) {\n this.element = element;\n this.$element = $(element);\n this.settings = { ...defaults, ...options };\n\n const request = new Request(this.url);\n const params = {\n mode: 'cors',\n cache: 'default',\n };\n\n // Request the Trumba json data.\n fetch(request, params)\n .then(response => response.json())\n .then(this.success.bind(this))\n .then(this.complete.bind(this))\n .catch(this.error.bind(this));\n }\n\n // Manage the fitlering of events coming from Trumba.\n get url() {\n let { url } = this.settings;\n if (this.settings.filter) {\n url += `?filterview=${this.settings.filter}`;\n }\n return url;\n }\n\n // Handle the response if we successfully return json data.\n success(json) {\n // Iterate over each node of our json data.\n json.forEach((node) => {\n const event = document.createElement('div');\n event.className = 'event';\n event.innerHTML = this.render(node);\n this.element.appendChild(event);\n });\n\n // If no events were found, let the user know.\n if (!json.length) {\n this.element.innerHTML = `

There are no upcoming ${this.settings.filter} events at this time.

`;\n }\n }\n\n // Handle errors\n error(error) {\n this.element.innerHTML = `

There was an error loading the ${this.settings.filter} events.

`;\n window.console.log(error);\n }\n\n // Renders out our markup for each event.\n render(data) {\n // Format date\n const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n const hours = ['1am', '2am', '3am', '4am', '5am', '6am', '7am', '8am', '9am', '10am', '11am', '12am',\n '1pm', '2pm', '3pm', '4pm', '5pm', '6pm', '7pm', '8pm', '9pm', '10pm', '11pm', '12pm'];\n const start = new Date(data.startDateTime);\n const end = new Date(data.endDateTime);\n const month = months[start.getMonth()];\n const day = start.getDate();\n const startTime = hours[start.getHours() - 1];\n const endTime = hours[end.getHours() - 1];\n let eventTime;\n if (startTime !== undefined) {\n eventTime = `

${startTime}`;\n if (endTime !== undefined) {\n eventTime += `-${endTime}`;\n }\n eventTime += '

';\n } else {\n eventTime = '';\n }\n\n // Get PermaLinkUrl\n const calUrl = `/adventure-trips?trumbaEmbed=view%3Devent%26eventid%3D${data.eventID}`;\n\n const imgUrl = (data.eventImage) ? `\"\"/` : '';\n\n const description = data.description.replace(/[<]br[^>]*[>]/gi, ' ');\n\n return `\n \n
${month}${day}
\n
\n ${imgUrl}\n
\n
\n

\n ${data.title}\n

\n ${eventTime}\n

${data.location}

\n

${description.substr(0, this.settings.maxDescLength)}...

\n
\n
\n `;\n }\n\n // Add functionality or state change here...\n complete() {\n this.$element.find('.event').each((i, element) => {\n if (!element.eventBgImage) {\n element.eventBgImage = new BackgroundImage(element, {\n sourceSelector: 'img.event__image',\n destSelector: '.event__image',\n });\n }\n });\n\n // eg. Adds a ready state class\n this.element.classList.add('ready');\n\n // eg. Removes our loader element\n const loader = this.element.querySelector('.loader');\n if (loader) {\n loader.parentNode.removeChild(loader);\n }\n }\n}\n","import $ from 'jquery';\nimport moment from 'moment';\n\nconst defaults = {\n // local storage key used to save the currently applied filter\n storageKey: 'currentCalendarFilter',\n\n // Button text displayed as the pagination to the next page of events\n paginationLabel: 'Load More Events',\n\n // Mobile only drop down label that houses the filtering options\n filtersLabel: 'Filter by...',\n\n // Force the filters to be automatically determined by the post types present in the feed.\n filterByPostTypes: false,\n\n // A simple indicator to determine the build out of filters\n useFilters: false,\n\n // Used to pass in an object of filters which use key value pairs.\n // {Object}\n // @key: Name that will appear as the filter button text\n // @value: ID of post type or navigation term\n filters: false,\n};\n\n// These filters are used if the filterByPostTypes is enabled. Present post\n// types are then added to this object, then the filters are made from those.\nconst defaultFilters = {\n All: 2,\n};\n\nexport default class CalendarFeed {\n constructor(element, options) {\n this.$element = $(element);\n this.settings = Object.assign({}, defaults, options);\n this.filters = this.getFilters();\n this.buildCalendar();\n if (this.settings.useFilters) {\n this.createFilters();\n }\n }\n\n buildCalendar() {\n const $posts = this.$element.find('.node');\n const group = '
';\n let currentYear = null;\n let currentMonth = '';\n let $group;\n\n // Manage the types of calendar filters being created\n $posts.each((i, post) => {\n const $post = $(post);\n const dates = ['start', 'end'];\n const oDates = {};\n\n // Parse the start/end timestamps using the moment.js framework\n $.each(dates, (j, type) => {\n const datetime = $post.find(`time.${type}`).attr('datetime');\n const date = moment(datetime);\n oDates[type] = {\n month: date.format('MMMM'),\n mon: date.format('MMM'),\n day: date.format('D'),\n dow: date.format('ddd'),\n year: date.format('YYYY'),\n };\n });\n\n // Add the post into a month grouping\n if (oDates.start.month.length && currentMonth !== oDates.start.month) {\n currentMonth = oDates.start.month;\n $group = $(group);\n $group.addClass(oDates.start.month.toLowerCase());\n $group.append(`

${oDates.start.month}

`);\n $post.before($group);\n\n // Set year labels followed by the associated months of that year\n if (oDates.start.year && oDates.start.year > currentYear) {\n const $year = $(`${oDates.start.year}`);\n $group.before($year);\n currentYear = oDates.start.year;\n }\n }\n\n // Dynamically create the date tile for the event display\n const $tile = $post.find('.event-date-tile');\n const markup = data => `${data.dow}${data.mon}${data.day}`;\n $tile.find('time.start').html(markup(oDates.start));\n\n // Handle date ranges\n if ($tile.is('.range')) {\n const isSameMonth = oDates.start.month === oDates.end.month;\n const isSameDay = oDates.start.day === oDates.end.day;\n const isSameYear = oDates.start.year === oDates.end.year;\n\n // 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\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 { viewport } from './Viewport';\nimport Navigation from './Navigation';\n\nconst components = {\n menu: '#term-navigation-menu',\n button: '.block-title button',\n buttonLink: '.block-title a',\n};\n\nconst settings = {\n menuBlock: 'term-navigation',\n menuParent: 'li.collapsed, li.expanded',\n expandActiveMenus: true,\n closeUnnestedMenus: false,\n focusout: false,\n hover: false,\n};\n\nexport default class TermNavigation {\n constructor(element) {\n this.element = element;\n this.open = false;\n\n if (this.menu) {\n this.standardize();\n this.addLogic();\n this.listen();\n }\n\n this.ready();\n }\n\n // Add depth classes to our term navigation structure which match the primary\n // navigation. That way we can share styling more easily.\n standardize() {\n this.menu.querySelectorAll('a.menu-link').forEach((link) => {\n const match = link.getAttribute('class').match(/depth-([0-9]+)/);\n if (match) {\n const level = match[1];\n // Replace current class with new depth to retain structure.\n link.classList.remove(`depth-${level}`);\n link.classList.add(`depth-${level - 1}`);\n // Add the appropriate classes to the list and it's items.\n const item = link.parentElement;\n const list = item.parentElement;\n item.classList.add(`depth-${level - 1}`);\n list.classList.add(`depth-${level - 1}`);\n }\n });\n }\n\n // Enhance the term navigation with the standardized, accessible, menu.\n addLogic() {\n return new Navigation(this.menu, settings);\n }\n\n // We want to control the mobile dropdown but let the desktop link go thru.\n clickHandler() {\n if (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\nfunction AccordionWrap(element) {\n this.element = element;\n this.$element = $(element);\n this.init();\n this.ready();\n}\n\nAccordionWrap.prototype = {\n init() {\n const classes = (this.getClasses()) ? this.getClasses() : '';\n const status = (this.getStatus()) ? ` style=\"display: ${this.getStatus()}\"` : '';\n this.$element\n .next('.accordion-content')\n .addBack()\n .wrapAll(`
`);\n },\n getClasses() {\n let $classes = null;\n if (this.$element.hasClass('under-tab')) {\n $classes = 'under-tab';\n let elemClasses = this.$element.attr('class');\n elemClasses = elemClasses.split(' ');\n\n for (let i = 0; i < elemClasses.length; i += 1) {\n const val = elemClasses[i];\n if (val.substring(0, 10) === 'under-tab-') {\n $classes += ` ${val}`;\n }\n }\n }\n\n return $classes;\n },\n getStatus() {\n let $status;\n if (this.$element.hasClass('under-tab')) {\n $status = (this.$element.is('.under-tab-0')) ? 'block' : 'none';\n }\n\n return $status;\n },\n ready() {\n setTimeout(() => {\n this.$element.addClass('ready');\n }, 200);\n },\n};\n\nexport default AccordionWrap;\n","import $ from 'jquery';\n\nconst defaults = {\n selector: 'a',\n};\n\nfunction AccordionFix(element, options) {\n this.$element = $(element);\n this.settings = Object.assign(defaults, options);\n this.click = this.click.bind(this);\n this.setVert = this.setVert.bind(this);\n this.listen();\n}\n\nAccordionFix.prototype = {\n listen() {\n this.$element.on('click', this.click);\n },\n click(event) {\n event.preventDefault();\n event.stopPropagation();\n this.setVert(event);\n },\n setVert(event) {\n setTimeout(() => {\n const isVis = this.isVisible(event.target);\n if (!isVis) {\n const topOffset = $(this.$element).offset().top - 80;\n $([document.documentElement, document.body]).animate({\n scrollTop: topOffset,\n }, 500);\n }\n }, 500);\n },\n isVisible(e) {\n const elementTop = $(e).offset().top - 80;\n const elementBottom = elementTop + $(e).outerHeight();\n const viewportTop = $(window).scrollTop();\n const viewportBottom = viewportTop + $(window).height();\n return (elementBottom > viewportTop && elementTop < viewportBottom);\n },\n};\n\nexport default AccordionFix;\n","import $ from 'jquery';\n\nfunction AccordionFix(element) {\n this.$element = $(element);\n this.init();\n}\n\nAccordionFix.prototype = {\n init() {\n this.$element.find(':not(.accordion-item) + .accordion-item, * > .accordion-item:first-of-type, > .accordion-item:first-of-type').each((i, elem) => {\n $(elem)\n .nextUntil(':not(.accordion-item)')\n .addBack()\n .wrapAll('
');\n });\n },\n};\n\nexport default AccordionFix;\n","import $ from 'jquery';\nimport Change from './Change';\n\nconst BREAKPOINT = 1200;\n\nexport default class SearchRelocate {\n constructor(element) {\n this.element = element;\n this.$element = $(element);\n this.$body = this.getBody();\n this.update();\n this.register();\n }\n\n register() {\n Change.onChange(this.update.bind(this));\n }\n\n update() {\n const mobileActive = this.$body.find('.flyout .site-search').length > 0;\n const desktopActive = this.$body.find('.desktop-header .site-search').length > 0;\n if (($(window).outerWidth(true) < BREAKPOINT) && (desktopActive)) {\n this.$element.insertBefore(this.$body.find('.flyout #navigation'));\n } else if (($(window).outerWidth(true) >= BREAKPOINT) && (mobileActive)) {\n this.$element.prependTo(this.$body.find('.desktop-header'));\n }\n this.$element.addClass('ready');\n return this;\n }\n\n getBody() { return $(document.body, this.context); }\n}\n","import $ from 'jquery';\nimport Change from './Change';\n\nconst BREAKPOINT = 1200;\n\nexport default class HeaderlinksRelocate {\n constructor(element) {\n this.element = element;\n this.$element = $(element);\n this.$body = this.getBody();\n this.update();\n this.register();\n }\n\n register() {\n Change.onChange(this.update.bind(this));\n }\n\n update() {\n const mobileActive = this.$body.find('.flyout .headerlinks').length > 0;\n const desktopActive = this.$body.find('.toolbar .headerlinks').length > 0;\n if (($(window).outerWidth(true) < BREAKPOINT) && (desktopActive)) {\n this.$element.appendTo(this.$body.find('.flyout .inner .layout'));\n } else if (($(window).outerWidth(true) >= BREAKPOINT) && (mobileActive)) {\n this.$element.prependTo(this.$body.find('.toolbar'));\n }\n this.$element.addClass('ready');\n return this;\n }\n\n getBody() { return $(document.body, this.context); }\n}\n","import $ from 'jquery';\nimport 'modaal';\n\nconst nodeSelector = 'node';\n\nclass ConvertToModaal {\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 caption = this.new.querySelector('.caption');\n if (caption && caption.textContent.length) {\n this.caption = caption.textContent;\n }\n\n if (this.caption) {\n this.new.setAttribute('data-modaal-desc', this.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 });\n }\n}\n\nexport default class Modaal {\n constructor(parent, selector) {\n const settings = {\n isVideo: false,\n isGallery: false,\n };\n\n if (parent.classList.contains(nodeSelector)) {\n // Process individual node.\n settings.isVideo = parent.classList.contains('has-video');\n settings.isGallery = parent.querySelectorAll('img').length > 1;\n parent.querySelectorAll(selector).forEach((child) => {\n child.ConvertToModaal = new ConvertToModaal(child, settings);\n });\n } else {\n // Process group of nodes.\n parent.querySelectorAll(nodeSelector).forEach((node) => {\n settings.isVideo = node.classList.contains('has-video');\n settings.isGallery = parent.querySelectorAll('img').length > 1;\n node.querySelectorAll(selector).forEach((child) => {\n child.ConvertToModaal = new ConvertToModaal(child, settings);\n });\n });\n }\n }\n}\n","import $ from 'jquery';\n\nfunction AnchorTag(element) {\n this.element = element;\n this.$element = $(element);\n this.init();\n}\n\nAnchorTag.prototype = {\n init() {\n const current = window.location.hostname.replace('http://', '').replace('https://', '').split(/[/?#]/)[0];\n const linkPath = this.element.href.replace('http://', '').replace('https://', '').split(/[/?#]/)[0];\n if (current === linkPath) {\n this.$element.on('click', (event) => {\n event.preventDefault();\n $('html, body').animate({\n scrollTop: $(this.$element.attr('href')).offset().top - 90,\n }, 500);\n });\n }\n },\n};\n\nexport default AnchorTag;\n","import $ from 'jquery';\n\nconst defaults = {\n title: '.node-header h2',\n divider: '
',\n};\n\nfunction StringSplit(element, options) {\n this.element = element;\n this.$element = $(element);\n this.settings = Object.assign(defaults, options);\n this.init();\n this.ready();\n}\n\nStringSplit.prototype = {\n init() {\n // hack in differences in font size when a pipe is present\n $(this.settings.title, this.element).each((i, title) => {\n const html = $(title).html();\n if (/|/.test(html)) {\n const a = html.split(this.settings.divider);\n let tempText = `${a[0]}`;\n if (a[1] !== undefined) {\n tempText += (`${a[1]}`);\n }\n $(title).addClass('splitText').html(tempText);\n }\n });\n },\n ready() {\n this.$element.addClass('strings-split');\n },\n};\n\nexport default StringSplit;\n","import $ from 'jquery';\n\nconst defaults = {\n trim: true,\n};\n\nfunction Placeholder(element, options) {\n this.element = element;\n this.$element = $(element);\n this.settings = Object.assign(defaults, options);\n this.trim = this.settings.trim;\n this.init();\n}\n\nPlaceholder.prototype = {\n init() {\n let label = this.$element.find('label').text();\n if (label.length) {\n if (this.trim) {\n label = label.substring(0, label.indexOf(':'));\n this.$element.find('label').text(label);\n }\n this.$element.find('input').attr('placeholder', label);\n }\n },\n};\n\nexport default Placeholder;\n","import $ from 'jquery';\n\nconst defaults = {\n open: '.node-image + a',\n close: '.close-icon',\n};\n\nfunction Programs(element, options) {\n this.$element = $(element);\n this.settings = Object.assign(defaults, options);\n this.openFlyout = this.openFlyout.bind(this);\n this.closeFlyout = this.closeFlyout.bind(this);\n this.$body = this.getBody();\n this.flyout();\n this.listen();\n}\n\nPrograms.prototype = {\n listen() {\n this.$element.find(this.settings.open).on('click', this.openFlyout);\n this.$body.find(this.settings.close).on('click', this.closeFlyout);\n },\n flyout() {\n this.$element.find('.programs-flyout').insertBefore(this.$body.find('.page-header'));\n },\n openFlyout(event) {\n event.preventDefault();\n event.stopPropagation();\n this.$body.find('.programs-flyout').addClass('expanded');\n },\n closeFlyout(event) {\n event.preventDefault();\n event.stopPropagation();\n this.$body.find('.programs-flyout').removeClass('expanded');\n },\n\n getBody() { return $(document.body, this.context); },\n};\n\nexport default Programs;\n","import $ from 'jquery';\n\nfunction BrowserCheck(element) {\n this.element = element;\n this.$element = $(element);\n this.init();\n}\n\nBrowserCheck.prototype = {\n init() {\n const browserArr = {};\n const uagent = navigator.userAgent.toLowerCase();\n let match = '';\n\n // console.log(`User agent string: ${uagent}`);\n\n browserArr.chrome = /webkit/.test(uagent) && /chrome/.test(uagent) && !/edge/.test(uagent);\n browserArr.firefox = /mozilla/.test(uagent) && /firefox/.test(uagent);\n browserArr.msie = /msie/.test(uagent) || /trident/.test(uagent) || /edge/.test(uagent);\n browserArr.safari = /safari/.test(uagent) && /applewebkit/.test(uagent) && !/chrome/.test(uagent);\n browserArr.opr = /mozilla/.test(uagent) && /applewebkit/.test(uagent) && /chrome/.test(uagent) && /safari/.test(uagent) && /opr/.test(uagent);\n browserArr.browser = '';\n browserArr.version = '';\n\n // console.log(Object.keys(browserArr).slice(0, -2));\n\n Object.keys(browserArr).slice(0, -2).forEach((key) => {\n if (browserArr[key]) {\n let matchCheck = '';\n\n if (key === 'msie') {\n matchCheck = 'msie|edge';\n } else if (key === 'safari') {\n matchCheck = 'version';\n } else {\n matchCheck = key;\n }\n\n match = uagent.match(new RegExp(`(${matchCheck})( |/)([0-9]+)`));\n browserArr.browser = key;\n\n if (match) {\n const newMatch = match[3];\n browserArr.version = newMatch;\n } else {\n match = uagent.match(new RegExp('rv:([0-9]+)'));\n browserArr.version = match ? match[1] : '';\n }\n }\n });\n\n $(document.body).addClass(`${browserArr.browser} ${browserArr.browser}-v${browserArr.version}`);\n\n browserArr.opera = browserArr.opr;\n delete browserArr.opr;\n },\n};\n\nexport default BrowserCheck;\n","import jQuery from 'jquery';\nimport Flickity from 'flickity';\nimport Breakpoints from './Breakpoints';\nimport 'flickity-fade';\n\n// Register our jquery version with Flickity.\nFlickity.setJQuery(jQuery);\n\nconst config = {\n mobileSettings: {\n prevNextButtons: false,\n fade: false,\n wrapAround: true,\n pageDots: true,\n },\n tabletSettings: {\n prevNextButtons: false,\n fade: false,\n wrapAround: true,\n pageDots: true,\n groupCells: 2,\n },\n};\n\nconst defaults = {};\n\nexport default class EventSlider {\n constructor(element, options) {\n this.element = element;\n this.$element = jQuery(element);\n this.settings = { ...defaults, ...options };\n\n // Exit if the sliderElement isn't found.\n if (!this.sliderElement) return;\n\n // Prevent initialization of a slider with less than 2 slides.\n if (this.shouldBuildSlider) {\n // Add listeners\n this.listen();\n }\n\n // Ready Component\n this.ready();\n }\n\n ready() {\n this.element.classList.add('ready');\n }\n\n build(settings) {\n return new Flickity(this.sliderElement, settings);\n }\n\n restore() {\n return new Promise((resolve) => {\n if (this.slider) {\n this.slider.destroy();\n }\n resolve();\n });\n }\n\n onMobileChange() {\n this.restore().then(this.slider = this.build(config.mobileSettings));\n }\n\n onTabletChange() {\n this.restore().then(this.slider = this.build(config.tabletSettings));\n }\n\n onDesktopChange() {\n if (this.slider) {\n this.slider.destroy();\n }\n }\n\n listen() {\n // Listen for breakpoint changes\n Breakpoints.on('mobile', 'enter', this.onMobileChange.bind(this));\n Breakpoints.on('tablet', 'enter', this.onTabletChange.bind(this));\n Breakpoints.on('desktop larger', 'enter', this.onDesktopChange.bind(this));\n }\n\n get shouldBuildSlider() {\n return this.slides.length > 1;\n }\n\n get sliderElement() {\n return this.element;\n }\n\n get slides() {\n return this.sliderElement.children;\n }\n}\n","import $ from 'jquery';\nimport 'focus-visible';\nimport 'nodelist-foreach-polyfill';\nimport Instafeed from 'instafeed.js';\n\nimport DDTemplates from './DDTemplates';\nimport Drupal from './Drupal';\nimport Header from './Header';\nimport Toolbar from './Toolbar';\nimport { viewport } from './Viewport';\nimport Sticky from './Sticky';\nimport Gallery from './Gallery';\nimport Navigation from './Navigation';\nimport SmartFooter from './SmartFooter';\nimport TrumbaEvents from './TrumbaEvents';\nimport CalendarFeed from './CalendarFeed';\nimport FixNavigation from './FixNavigation';\nimport TermNavigation from './TermNavigation';\nimport AccordionWrap from './AccordionWrap';\nimport AccordionFix from './AccordionFix';\nimport AccordionContainer from './AccordionContainer';\nimport RelocateSearch from './RelocateSearch';\nimport RelocateHeaderlinks from './RelocateHeaderlinks';\nimport Modaal from './Modaal';\nimport BackgroundImage from './BackgroundImage';\nimport AnchorTag from './AnchorTags';\nimport StringSplit from './StringSplit';\nimport Placeholder from './Placeholder';\nimport Programs from './Programs';\nimport BrowserCheck from './BrowserCheck';\nimport EventSlider from './EventSlider';\n\n// Add the theme behaviors\nDrupal.behavior((context) => {\n // Helpers\n const $body = $(document.body, context);\n\n // DD Template Behaviors\n if (!document.body.DDTemplates) {\n document.body.DDTemplates = new DDTemplates(context);\n }\n\n // Get browser and version\n $('body', context).each((i, element) => {\n if (!element.browserCheck) {\n element.browserCheck = new BrowserCheck(element);\n }\n });\n\n // Replace Lightbox lightframe functionality with Modaal.\n document.querySelectorAll('.open-lightframe').forEach((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 document.querySelectorAll('.te-open-slideshow .node, .te-open-slideshow.node').forEach((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 if (!element.Modaal) {\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 // 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 // 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 // Relocate search based on media query\n $('.site-search', context).each((i, element) => {\n if (!element.RelocateSearch) {\n element.RelocateSearch = new RelocateSearch(element);\n }\n });\n\n // Relocate headerlinks based on media query\n $('.headerlinks', context).each((i, element) => {\n if (!element.Relocateheaderlinks) {\n element.Relocateheaderlinks = new RelocateHeaderlinks(element);\n }\n });\n\n // Controls the page overlay display\n $('.overlay', context).bind('click', () => {\n $body.removeClass('menu-active search-active');\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 $('.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 // Photo Galleries\n $('.node-content .photo-gallery, .photo-gallery .node-image, .photo-gallery .node-upper-image', context).each((i, element) => {\n if (!element.Gallery) {\n element.Gallery = new Gallery(element);\n }\n });\n\n // Wraps each accordion element\n $('.accordion-heading', context).each((i, element) => {\n if (!element.accordionWrap) {\n element.accordionWrap = new AccordionWrap(element);\n element.accordionWrap = new AccordionFix(element);\n }\n });\n\n // Wraps each accordion in a container\n $('.node-content', context).each((i, element) => {\n if (!element.accordionContainer) {\n setTimeout(() => {\n element.accordionContainer = new AccordionContainer(element);\n }, 300);\n }\n });\n\n $('a[href*=\"#\"]:not([href=\"#\"])', context).each((i, element) => {\n if (!element.anchorTag) {\n element.anchorTag = new AnchorTag(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 // Background Images\n $('.banner', context).each((i, element) => {\n if (!element.bannerBgImage) {\n element.bannerBgImage = new BackgroundImage(element, {\n sourceSelector: 'figure img',\n destSelector: '.node-banner',\n });\n }\n });\n $('.hero .hero-pod, .home-activities .views-row', context).each((i, element) => {\n if (!element.heroBgImage) {\n element.heroBgImage = new BackgroundImage(element, {\n sourceSelector: 'figure img',\n destSelector: 'a',\n });\n }\n });\n\n // Trumba Events Custom block\n $('.block-home-trumba-events .trumba-events', context).each((i, element) => {\n if (!element.TrumbaEvents && !element.EventSlider) {\n element.innerHTML = '';\n element.TrumbaEvents = new TrumbaEvents(element, {\n filter: 'Peak Adventures',\n });\n setTimeout(() => {\n element.EventSlider = new EventSlider(element);\n }, 1000);\n }\n });\n\n // Split text at verticle pipe\n $('.hero .hero-pod', context).each((i, element) => {\n if (!element.stringSplit) {\n element.stringSplit = new StringSplit(element, {\n title: 'figcaption',\n divider: '|',\n });\n }\n });\n\n // Set placeholder of textfield using label\n $('.pods .type-textfield, .footer-sign-up .type-textfield', context).each((i, element) => {\n if (!element.placeholder) {\n element.placeholder = new Placeholder(element);\n }\n });\n\n $('.home-programs .node', context).each((i, element) => {\n if (!element.homePrograms) {\n element.homePrograms = new Programs(element);\n }\n });\n\n // Homepage: Instagram Slider\n $('#instagram-slider', context).each((i, element) => {\n if (!element.instafeed && !element.instagramSlider) {\n element.instafeed = new Instafeed({\n get: 'user',\n userId: '196110284',\n clientId: '72b1c1904acd4f6fabfd623085b068ed',\n accessToken: '196110284.1677ed0.ae9924bea7cf49e3bacae3e76973134c',\n resolution: 'standard_resolution',\n template: '
 {{caption}}
',\n limit: 8,\n sortBy: 'most-recent',\n });\n\n // Run the thing ;)\n element.instafeed.run();\n $(element).addClass('ready');\n $(element).closest('.block').addClass('block-instagram-feed');\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 // Force Viewport Update\n viewport.update();\n});\n"],"sourceRoot":""}