{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/js/Drupal.js","webpack:///./src/js/Change.js","webpack:///./src/js/.theme.config.js","webpack:///./src/js/Sticky.js","webpack:///./src/js/Breakpoints.js","webpack:///./src/js/Header.js","webpack:///./src/js/Search.js","webpack:///./src/js/Toolbar.js","webpack:///./src/js/Visible.js","webpack:///./src/js/Navigation.js","webpack:///./src/js/ModaalTransformer.js","webpack:///./src/js/Modaal.js","webpack:///./src/js/Flickity.js","webpack:///./src/js/Gallery.js","webpack:///./src/js/DDTemplates.js","webpack:///./src/js/SmartFooter.js","webpack:///./src/js/LACityHeader.js","webpack:///./src/js/CalendarFeed.js","webpack:///./src/js/FixNavigation.js","webpack:///./src/js/TermNavigation.js","webpack:///./src/js/HomeHero.js","webpack:///./src/js/Slick.PlayPauseControls.js","webpack:///./src/js/HeroSlider.js","webpack:///./src/js/HomeSpotlights.js","webpack:///./src/js/HomeNewsEvents.js","webpack:///./src/js/GoogleTranslateHelp.js","webpack:///./src/js/EnhanceExposedFilters.js","webpack:///./src/js/AccordionAnchors.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","behaviors","this","ticking","listen","callbacks","fire","request","requestAnimationFrame","update","callback","$","Callbacks","add","change","offsets","mobile","tablet","desktop","larger","sidebar","padding","breakpoints","min","max","Infinity","Sticky","element","register","Change","onChange","innerHeight","offsetHeight","classList","remove","documentIsReady","Drupal","behavior","fn","document","ready","DrupalAMD","context","Breakpoints","current","settings","tolerance","classes","initial","pinned","unpinned","top","notTop","bottom","notBottom","onPin","onUnpin","onTop","onNotTop","onBottom","onNotBottom","Header","headroom","build","on","rebuild","init","options","offset","currentOffset","Headroom","destroy","currentBreakpoint","components","text","input","Search","customComponents","Timer","setAttribute","setTimeout","typeOutPlaceholderText","clear","focus","setInterval","searchText","substr","addEventListener","resetSearchInput","querySelector","defaults","activeClass","buttons","menu","search","flyout","header","Toolbar","addSearchLogic","FocusTrap","addFocusTrapLogic","searchComponent","headerComponent","initialFocus","flyoutComponent","event","isActive","body","contains","isSearch","searchButton","currentTarget","deactivate","activate","Keyboard","getCode","Escape","menuButton","mobileState","focusIn","focusOut","keyDownHandler","clickHandler","defaultOffset","Visible","InViewport","visibleHandler","menuBlock","menuParent","activeTrailClass","expandActiveMenus","closeUnnestedMenus","focusout","hover","delay","in","out","Navigation","preprocess","menuParents","forEach","index","id","submenu","link","firstElementChild","innerText","button","createElement","insertBefore","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","querySelectorAll","ModaalTransformer","node","old","type","preventDefault","new","modaal","start_open","animation","outer_controls","Modaal","parent","selector","isGallery","child","isVideo","ConvertToModaal","Flickity","setJQuery","jQuery","fade","autoPlay","wrapAround","arrowShape","Gallery","shouldBuildSlider","slider","buildSlider","addControls","setPlayState","player","state","setPauseState","item","playPauseButton","className","innerHTML","playPauseHandler","appendChild","sliderDots","playPlayer","stopPlayer","slides","children","photoGalleryPID","a11y","tables","newTab","sitemap","nodeMeta","galleries","itemAppearsIn","expandingDates","slideshowIcons","lexiconGlossary","overtakeLightbox","subtermOverviews","fullNodeRelatedLinks","bundledReferringContent","DDTemplates","isNodeView","isNode","defineApplicableBehaviors","is","view","term","global","addEnabledBehavior","$appearingNav","find","addClass","each","$block","attr","wrap","pattern","href","match","a","$node","$items","removeClass","$visible","map","getComputedStyle","getPropertyValue","filter","b","meta","$meta","$dates","$link","toggleClass","eq","$container","appendTo","append","join","image","$img","before","$map","$nav","digitaldcoreCreateSiteMap","letter","replace","html","toUpperCase","closest","notValid","SmartFooter","reactiveElement","height","style","paddingBottom","LACityHeader","destination","getElementById","prepend","storageKey","paginationLabel","filtersLabel","filterByPostTypes","useFilters","filters","defaultFilters","All","CalendarFeed","$element","getFilters","buildCalendar","createFilters","$group","$posts","currentYear","currentMonth","post","$post","oDates","datetime","dateObj","dayjs","month","format","mon","day","dow","year","start","toLowerCase","$year","$tile","markup","isSameMonth","end","isSameDay","isSameYear","next","$filters","types","ids","getDefaultData","getCustomizedData","currentFilter","sessionStorage","getItem","hash","location","decodeURIComponent","$filter","$show","inArray","not","siblings","stop","animate","opacity","setItem","$shown","nextUntil","$ctrl","filterHandler","trigger","_types","_ids","regex","test","exec","indexes","aResults","aTypes","parseInt","indexOf","sort","FixNavigation","process","$parent","$children","TermNavigation","standardize","addLogic","level","parentElement","list","buttonLink","HomeHero","images","loadRandomlyChoosenImage","then","Promise","resolve","$images","src","img","Image","onload","selectedImage","total","Number","Math","floor","random","slickInstance","slickContainer","attachTo","playBtn","pauseBtn","SlickPlayPauseControls","$slickContainer","slick","assign","play","proxy","pause","onBreakpointChange","$playBtn","addPlayBtn","$pauseBtn","addPauseBtn","setCurrentBreakpointState","verify","error","slickControls","$slickControls","setCurrentState","removeControls","off","paused","$autoplay","$activeBreakpoint","activeBreakpoint","breakpointSettings","autoplay","breakpoint","speed","autoplaySpeed","dots","arrows","infinite","pauseOnFocus","waitForAnimate","responsive","Hero","extend","addSlick","controls","config","prevNextButtons","HomeSpotlights","sliderElement","turnOnSliderListeners","turnOffSliderListeners","restore","mobileHandler","desktopHandler","HomeNewsEvents","slide","first","onMobileChange","onTabletChange","onDesktopChange","maxWidthPerc","GoogleTranslateHelp","timer","processing","respond","availableSpace","offsetWidth","onTranslate","EnhanceExposedFilters","submit","reset","widget","reload","AccordionAnchors","openAccordion","urlAnchor","URL","split","urlID","accordionContent","dtabs","underTabs","content","parentLabel","e","u","display","accordionHeading","previousSibling","scrollIntoView","page","toString","pop","substring","mainMenu","footer","termNavigation","block","heroSlider","HeroSlider","$controls","$track","$slides","$dots","checkWidth","windowsize","width","css","console","log","totalWidth","left","outerWidth","resize","tocWrapper","nodeImage","tocHeight"],"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([299,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\nclass Change {\n constructor() {\n this.ticking = false;\n this.listen();\n }\n\n update() {\n this.ticking = false;\n if (this.callbacks) {\n this.callbacks.fire();\n }\n }\n\n change() {\n this.request();\n }\n\n request() {\n if (!this.ticking) {\n requestAnimationFrame(this.update.bind(this));\n this.ticking = true;\n }\n }\n\n onChange(callback) {\n if (!this.callbacks) {\n this.callbacks = $.Callbacks('memory');\n }\n this.callbacks.add(callback);\n return this;\n }\n\n listen() {\n $(window).bind('scroll resize orientationchange', this.change.bind(this));\n }\n}\n\nexport default new Change();\n","/**\n * Theme version\n */\nexport const version = '4.0.0';\n\n/**\n * Domain to use with the import/export script\n */\nexport const domain = 'https://live-lacers.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: 227,\n tablet: 181,\n desktop: 0,\n larger: 0,\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: 767,\n },\n tablet: {\n min: 768,\n max: 1024,\n },\n desktop: {\n min: 1025,\n max: 1199,\n },\n larger: {\n min: 1200,\n max: Infinity,\n }\n};\n\n/**\n * Default export of theme related info.\n */\nexport default version;\n","import Change from './Change';\nimport { offsets } from './.theme.config';\n\nexport default class Sticky {\n constructor(element) {\n this.element = element;\n this.register();\n this.update();\n }\n\n register() {\n Change.onChange(this.update.bind(this));\n }\n\n update() {\n if (window.innerHeight - offsets.sidebar > this.element.offsetHeight) {\n this.element.classList.add('sticky');\n } else {\n this.element.classList.remove('sticky');\n }\n }\n}\n","import 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","import Headroom from 'headroom.js';\nimport Breakpoints from './Breakpoints';\nimport { offsets } from './.theme.config';\n\n// Headroom settings\nconst settings = {\n // scroll tolerance in px before state changes\n tolerance: 5, // or {down: 0, up: 0},\n // css classes to apply\n classes: {\n // when element is initialised\n initial: 'headroom',\n // when scrolling up\n pinned: 'locked',\n // when scrolling down\n unpinned: 'unlocked',\n // when above offset\n top: 'top',\n // when below offset\n notTop: 'not-top',\n // when at bottom of scoll area\n bottom: 'bottom',\n // when not at bottom of scroll area\n notBottom: 'not-bottom',\n },\n // callback when pinned, `this` is headroom object\n onPin() {},\n // callback when unpinned, `this` is headroom object\n onUnpin() {},\n // callback when above offset, `this` is headroom object\n onTop() {},\n // callback when below offset, `this` is headroom object\n onNotTop() {},\n // callback at bottom of page, `this` is headroom object\n onBottom() {},\n // callback when moving away from bottom of page, `this` is headroom object\n onNotBottom() {},\n};\n\nexport default class Header {\n constructor(element) {\n this.element = element;\n this.offsets = offsets;\n this.headroom = this.build();\n Breakpoints.on('change', this.rebuild.bind(this));\n this.headroom.init();\n }\n\n // Create a new Headroom instance\n build() {\n const options = settings;\n options.offset = this.currentOffset;\n return new Headroom(this.element, options);\n }\n\n // Rebuild existing Headroom instance with updated offset.\n rebuild() {\n this.headroom.destroy();\n this.headroom.offset = this.currentOffset;\n this.headroom.init();\n }\n\n get currentOffset() {\n const currentBreakpoint = Breakpoints.current();\n return this.offsets[currentBreakpoint.name];\n }\n}\n","import Timer from 'tick-tock';\n\nconst components = {\n text: 'Search',\n input: '#edit-keywords',\n};\n\nexport default class Search {\n constructor(element, customComponents) {\n // Make reference to the passed in element.\n this.element = element;\n\n // Manage intervals and timeouts with the TickTock tool.\n this.Timer = new Timer();\n\n // Merge default components with custom ones, if applicable.\n this.components = { ...components, ...customComponents };\n\n // Clear out values of these components.\n this.input.value = '';\n\n // Event management\n this.listen();\n }\n\n // Focus the search box after a small delay.\n\n focusIn() {\n this.input.setAttribute('placeholder', '');\n this.Timer.setTimeout('focus', () => {\n this.typeOutPlaceholderText();\n }, 250);\n }\n\n // Cancel any search input timeouts that may be running.\n\n focusOut() {\n this.Timer.clear('focus');\n this.Timer.clear('typing');\n }\n\n // Types out placeholder text on focusin state.\n\n typeOutPlaceholderText() {\n let i = 0;\n if (!this.input.value.length) {\n this.Timer.setInterval('typing', () => {\n if (i <= this.searchText.length) {\n this.input.setAttribute('placeholder', this.searchText.substr(0, i));\n this.input.focus();\n i += 1;\n } else {\n this.Timer.clear('typing');\n }\n }, 60);\n } else {\n this.input.focus();\n }\n }\n\n // This is a workaround to overcome the default dd-search.js search\n // input scripted behaviors.\n\n resetSearchInput() {\n if (this.searchText === this.input.value) {\n this.input.value = '';\n }\n }\n\n // Listening so that we can override previously set scripted behaviors.\n\n listen() {\n this.input.addEventListener('focusin', this.resetSearchInput.bind(this));\n this.input.addEventListener('focusout', this.resetSearchInput.bind(this));\n }\n\n // Getters of various components.\n\n get searchText() {\n return this.components.text;\n }\n\n get input() {\n return this.element.querySelector(this.components.input);\n }\n}\n","import FocusTrap from 'focus-trap';\nimport Keyboard from 'keyboard-key';\nimport Breakpoints from './Breakpoints';\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.listen();\n }\n\n // Add search logic to manage the various states of the search component\n\n addSearchLogic() {\n return this.searchComponent ? new Search(this.searchComponent) : false;\n }\n\n // Add focus-trap logic to manage focus state when flyout is expanded.\n\n addFocusTrapLogic() {\n return new FocusTrap(this.headerComponent, {\n initialFocus: this.flyoutComponent,\n });\n }\n\n // Manage click events.\n\n clickHandler(event) {\n const isActive = document.body.classList.contains(this.settings.activeClass);\n const isSearch = this.searchButton && this.searchButton === event.currentTarget;\n\n if (isActive) {\n this.deactivate();\n } else {\n this.activate(isSearch);\n }\n }\n\n // Manage keydown events.\n\n keyDownHandler(event) {\n const keyCode = Keyboard.getCode(event);\n if (keyCode === Keyboard.Escape) {\n this.deactivate();\n }\n }\n\n // Activates the flyout and all of the associated buttons.\n\n activate(search) {\n document.body.classList.add(this.settings.activeClass);\n if (this.menuButton) this.menuButton.setAttribute('aria-expanded', !search);\n if (this.searchButton) this.searchButton.setAttribute('aria-expanded', search);\n\n // Leverage the focus trap logic to lock active element focus\n // within the flyout only (on mobile devices specifically).\n if (Breakpoints.mobileState) {\n this.FocusTrap.activate();\n }\n\n if (search && this.Search) {\n // Leverage the Search logic to manage it's focus in state.\n this.Search.focusIn();\n } else {\n // If the menu button is clicked, focus the flyout container.\n this.flyoutComponent.focus();\n }\n }\n\n // Deactivates the flyout and all of the associated buttons.\n\n deactivate() {\n this.FocusTrap.deactivate();\n document.body.classList.remove(this.settings.activeClass);\n if (this.menuButton) this.menuButton.setAttribute('aria-expanded', false);\n if (this.searchButton) this.searchButton.setAttribute('aria-expanded', false);\n\n // Leverage the Search logic to manage it's focus out state.\n if (this.Search) {\n this.Search.focusOut();\n }\n }\n\n // Set up event listeners to help control the various states of the toolbar and flyout.\n\n listen() {\n this.element.addEventListener('keydown', this.keyDownHandler.bind(this));\n if (this.menuButton) this.menuButton.addEventListener('click', this.clickHandler.bind(this));\n if (this.searchButton) this.searchButton.addEventListener('click', this.clickHandler.bind(this));\n }\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 InViewport from 'in-viewport';\n\n// Offset from page height until element is declared 'visible'\nconst defaultOffset = -100;\n\nexport default class Visible {\n constructor(element, offset) {\n this.offset = offset || defaultOffset;\n this.element = element;\n this.listen();\n }\n\n visibleHandler() {\n this.element.classList.add('visible');\n }\n\n listen() {\n InViewport(this.element, { offset: this.offset }, this.visibleHandler.bind(this));\n }\n}\n","import tabbable from 'tabbable';\nimport TickTock from 'tick-tock';\nimport Keyboard from 'keyboard-key';\nimport Breakpoints from './Breakpoints';\n\n/**\n * @file Navigation\n *\n * Transforms an existing HTML list into an accessible navigation menu w/dropdowns.\n *\n * @constructor\n * @param element {HTML element} Menu list\n * @param options {object} Custom options to override the defaults of this instance.\n *\n * @constant defaults {object} Default options of this module\n * @param menuBlock {string} Namespace to be used for this instance\n * @param menuParent {string} DOM selector of the list items which contain a submenu\n * @param activeClass {string} Classname to be used to reference a active element\n * @param activeTrailClass {string} Classname to be used to reference a active element ancestor\n * @param expandActiveMenus {boolean} Whether or not to open active menus in the active trail\n * @param closeUnnestedMenus {boolean} Whether or not to close menus that are not\n * decendents of the currently interacted menu tree\n * @param focusout {boolean} Whether or not to close open menus when the block has lost focus\n * @param hover {boolean} Whether or not to control menu display based on mouse interaction\n * @var delay {object}\n * @param in {int} Hover delay on mouse over\n * @param out {int} Hover delay on mouse out\n *\n */\n\nconst defaults = {\n menuBlock: 'navigation',\n menuParent: '.menuparent',\n activeClass: 'active',\n activeTrailClass: 'active-trail',\n expandActiveMenus: false,\n closeUnnestedMenus: true,\n focusout: true,\n hover: true,\n delay: {\n in: 150,\n out: 250,\n },\n};\n\nexport default class Navigation {\n constructor(element, options) {\n this.menu = element;\n this.settings = { ...defaults, ...options };\n this.preprocess();\n this.listen();\n }\n\n // Add appropriate accessibility attributes to existing markup\n // and the toggle button which manages the submenu display.\n\n preprocess() {\n this.menuParents.forEach((element, index) => {\n // Set unique ID to link the button to the submenu.\n const id = `${this.components.submenu}-${index}`;\n\n // Link\n const link = element.firstElementChild;\n link.setAttribute('aria-label', `${link.innerText}, tab to the next button to expand the submenu`);\n link.setAttribute('aria-haspopup', true);\n link.setAttribute('aria-controls', id);\n\n // Toggle button\n const button = document.createElement('button');\n button.classList.add(this.components.button);\n button.setAttribute('aria-haspopup', true);\n button.setAttribute('aria-controls', id);\n button.innerText = link.innerText;\n element.insertBefore(button, link.nextSibling);\n\n // Submenu\n const submenu = element.lastElementChild;\n submenu.id = id;\n submenu.classList.add(this.components.submenu);\n submenu.Timer = new TickTock();\n submenu.Tabbable = tabbable(submenu);\n\n // Add each reference within the parent.\n element.link = link;\n element.button = button;\n element.submenu = submenu;\n\n // Set initial state of components\n this.collapse(element);\n\n // Manage display of the active trail, if configured.\n if (this.settings.expandActiveMenus) {\n const isActiveTrail = element.classList.contains(this.settings.activeTrailClass);\n if (isActiveTrail) {\n this.expand(element, false);\n }\n }\n });\n }\n\n // Update submenu display based on user interaction.\n\n userInteractionHandler(event) {\n const { parentNode } = event.target;\n const { button, submenu } = parentNode;\n\n // If there isn't a submenu and button, quit.\n if (!submenu && !button) return;\n\n // Set expand state based on current aria-expanded attribute set on the button.\n const expand = button.getAttribute('aria-expanded') === 'false';\n\n // Set the current state of the associate submenu and button.\n if (expand) {\n this.expand(parentNode, true);\n } else {\n this.collapse(parentNode);\n }\n\n // Only continue to close unnested expanded submenus if the setting is true and\n // we're not viewing in a mobile state.\n if (!this.settings.closeUnnestedMenus || Breakpoints.mobileState) return;\n\n // Loop thru each open submenu\n this.openSubmenus.forEach((openSubmenu) => {\n // If the button interacted with is not within this subtree, collapse it.\n if (!openSubmenu.parentNode.contains(button)) {\n this.collapse(openSubmenu.parentNode);\n }\n });\n }\n\n // Sets the expanded state of the passed in components.\n\n expand(parentNode, focus) {\n const { link, button, submenu } = parentNode;\n this.expandElement(link);\n this.expandElement(button);\n this.expandSubmenu(submenu, focus);\n }\n\n // Sets the collapsed state of the passed in components.\n\n collapse(parentNode) {\n const { link, button, submenu } = parentNode;\n this.collapseElement(link);\n this.collapseElement(button);\n this.collapseSubmenu(submenu);\n }\n\n // Sets the expanded state of the passed in element.\n\n /* eslint-disable-next-line */\n expandElement(element) {\n element.setAttribute('aria-expanded', true);\n }\n\n // Sets the collapsed state of the passed in element.\n\n /* eslint-disable-next-line */\n collapseElement(element) {\n element.setAttribute('aria-expanded', false);\n }\n\n // Sets the expanded state of the submenu.\n\n expandSubmenu(submenu, focus) {\n submenu.parentNode.classList.add(this.states.active);\n submenu.classList.add(this.states.open);\n submenu.removeAttribute('aria-hidden');\n submenu.expanded = true;\n\n // Don't focus if it's not set to.\n if (!focus) return;\n\n // Only continue if this submenu has tabbable elements.\n if (!submenu.Tabbable.length) return;\n\n // Focus the first tabbable element after submenu is expanded.\n submenu.Timer.setTimeout('focus', () => {\n submenu.Tabbable[0].focus();\n }, 100);\n }\n\n // Sets the collapsed state of the submenu.\n\n collapseSubmenu(submenu) {\n submenu.parentNode.classList.remove(this.states.active);\n submenu.classList.remove(this.states.open);\n submenu.setAttribute('aria-hidden', true);\n submenu.expanded = false;\n }\n\n // Completely reset the state of the menu\n\n clearAll() {\n this.openSubmenus.forEach((openSubmenu) => {\n this.collapse(openSubmenu.parentNode);\n });\n }\n\n // Add event listeners to the array of event types.\n\n listen() {\n this.menu.addEventListener('keydown', this.keyDownEventDispatcher.bind(this));\n this.menu.addEventListener('mousedown', this.mouseDownEventDispatcher.bind(this));\n\n // Whether or not to close open menus if the block loses focus.\n if (this.settings.focusout) {\n this.menu.addEventListener('focusout', this.focusOutEventDispatcher.bind(this));\n }\n\n // Whether or not to activate menus on a mouseover event.\n if (this.settings.hover) {\n this.menuParents.forEach((menuParent) => {\n menuParent.addEventListener('mouseover', this.mouseOverHandler.bind(this));\n menuParent.addEventListener('mouseout', this.mouseOutHandler.bind(this));\n });\n }\n }\n\n // Dispatch events for the keydown event type.\n\n keyDownEventDispatcher(event) {\n const keyCode = Keyboard.getCode(event);\n switch (keyCode) {\n case Keyboard.Enter:\n // if the keydown is caused by the return key, it should be a click\n this.userInteractionHandler(event);\n break;\n case Keyboard.Escape:\n // if the keydown is caused by the escape key, close the menus\n this.clearAll();\n break;\n default: break;\n }\n }\n\n // Dispatch events for the mousedown event type.\n\n mouseDownEventDispatcher(event) {\n this.userInteractionHandler(event);\n }\n\n // Attach a listener to close everything when a user\n // interacts outside of the menu.\n\n focusOutEventDispatcher(event) {\n if (!this.menu.contains(event.relatedTarget) && !Breakpoints.mobileState) {\n this.clearAll();\n }\n }\n\n // Manages menu states on a mouse over event.\n\n mouseOverHandler(event) {\n const { submenu } = event.currentTarget;\n submenu.Timer.clear('collapse');\n\n // Stop mouse actions on smaller devices.\n if (Breakpoints.mobileState) return;\n\n // Quit if the menu is already expanded.\n if (submenu.expanded) return;\n\n // Stage menu to be expanded.\n submenu.Timer.setTimeout('expand', () => {\n this.expand(submenu.parentNode, false);\n }, this.settings.delay.in);\n }\n\n // Manages menu states on a mouse out event.\n\n mouseOutHandler(event) {\n const { submenu } = event.currentTarget;\n submenu.Timer.clear('expand');\n\n // Stop mouse actions on smaller devices.\n if (Breakpoints.mobileState) return;\n\n // Quit if the menu is already collapsed.\n if (!submenu.expanded) return;\n\n // Stage menu to be collapsed.\n submenu.Timer.setTimeout('collapse', () => {\n this.collapse(submenu.parentNode);\n }, this.settings.delay.out);\n }\n\n // BEM conventions using the passed in `menuBlock` namespace for all states.\n\n get states() {\n return {\n active: `${this.settings.menuBlock}--active`,\n open: `${this.settings.menuBlock}__submenu--open`,\n };\n }\n\n // BEM conventions using the passed in `menuBlock` namespace for all components.\n\n get components() {\n return {\n button: `${this.settings.menuBlock}__toggle`,\n submenu: `${this.settings.menuBlock}__submenu`,\n };\n }\n\n // Getters for obtaining NodeLists of various elements.\n\n get menuParents() {\n return this.menu.querySelectorAll(this.settings.menuParent);\n }\n\n get buttons() {\n return this.menu.querySelectorAll(`.${this.components.button}`);\n }\n\n get submenus() {\n return this.menu.querySelectorAll(`.${this.components.submenu}`);\n }\n\n get openSubmenus() {\n return this.menu.querySelectorAll(`.${this.states.open}`);\n }\n}\n","import $ 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 jQuery from 'jquery';\nimport Flickity from 'flickity';\n\n// Register our jquery version with Flickity.\nFlickity.setJQuery(jQuery);\n\nexport default Flickity;\n","import Flickity from './Flickity';\nimport 'flickity-fade';\n\nconst defaults = {\n fade: true,\n autoPlay: 4000,\n wrapAround: false,\n arrowShape: 'M58.7 20.6c.4-.4.8-.6 1.3-.6s1 .2 1.3.6c.4.4.6.9.6 1.4 0 .5-.2 1.1-.6 1.5L36.6 50.1l24.7 26.5c.7.8.7 2.1-.1 2.9-.7.7-1.9.7-2.6 0l-26.1-28c-.4-.4-.6-.9-.6-1.4 0-.5.2-1.1.6-1.4l26.2-28.1z',\n};\n\nexport default class Gallery {\n constructor(element, options) {\n this.element = element;\n this.settings = { ...defaults, ...options };\n\n // Exit if we don't have more than one slide.\n if (!this.shouldBuildSlider) return this.ready();\n\n // Build Slider\n this.slider = this.buildSlider();\n\n // Add play/pause controls\n this.addControls();\n\n // Set initial state of the gallery\n this.setPlayState();\n\n // Add listeners\n this.listen();\n\n // Ready component\n this.ready();\n }\n\n ready() {\n // Append ready state.\n this.element.classList.add('ready');\n }\n\n buildSlider() {\n return new Flickity(this.element, this.settings);\n }\n\n onReady() {\n this.setPlayState();\n }\n\n onChange() {\n if (this.slider.player.state === 'stopped') {\n this.setPauseState();\n }\n }\n\n listen() {\n // Keep track of current state of gallery\n this.slider.on('change', this.onChange.bind(this));\n }\n\n addControls() {\n const item = document.createElement('li');\n this.playPauseButton = document.createElement('button');\n this.playPauseButton.className = 'button--play-pause';\n this.playPauseButton.innerHTML = '';\n this.playPauseButton.addEventListener('click', this.playPauseHandler.bind(this));\n item.appendChild(this.playPauseButton);\n this.sliderDots.appendChild(item);\n }\n\n playPauseHandler() {\n if (this.slider.player.state === 'stopped') {\n this.slider.playPlayer();\n this.setPlayState();\n } else {\n this.slider.stopPlayer();\n this.setPauseState();\n }\n }\n\n setPlayState() {\n this.playPauseButton.setAttribute('aria-label', 'Stop the slider\\'s autoscroll');\n this.element.classList.add('playing');\n }\n\n setPauseState() {\n this.playPauseButton.setAttribute('aria-label', 'Start the slider\\'s autoscroll');\n this.element.classList.remove('playing');\n }\n\n get shouldBuildSlider() {\n return this.slides.length > 1;\n }\n\n get sliderDots() {\n return this.element.querySelector('.flickity-page-dots');\n }\n\n get slides() {\n return this.element.children;\n }\n}\n","/* eslint-disable class-methods-use-this */\nimport $ from 'jquery';\nimport Drupal from './Drupal';\nimport Modaal from './Modaal';\n// import Anchors from './Anchors';\nimport Gallery from './Gallery';\n\nconst defaults = {\n photoGalleryPID: 107,\n behaviors: {\n a11y: true,\n tables: true,\n newTab: true,\n // anchors: true,\n sitemap: true,\n nodeMeta: true,\n galleries: true,\n itemAppearsIn: true,\n expandingDates: true,\n slideshowIcons: true,\n lexiconGlossary: true,\n overtakeLightbox: true,\n subtermOverviews: true,\n fullNodeRelatedLinks: true,\n bundledReferringContent: true,\n },\n};\n\nexport default class DDTemplates {\n constructor(options) {\n this.isNodeView = this.isNode();\n this.settings = { ...defaults, ...options };\n // Global behaviors\n this.defineApplicableBehaviors('global');\n // Current view behaviors only\n this.defineApplicableBehaviors(this.isNodeView ? 'node' : 'term');\n }\n\n /**\n * Simple check to see if the current body element contains the node class.\n */\n isNode() {\n return $(document.body).is('.n, .section-node');\n }\n\n /**\n * Segregates behaviors by different types of common views. If they're\n * enabled, define them in this module.\n */\n defineApplicableBehaviors(view) {\n const behaviors = {\n node: [\n 'itemAppearsIn',\n 'bundledReferringContent',\n ],\n term: [\n 'sitemap',\n 'subtermOverviews',\n 'lexiconGlossary',\n ],\n global: [\n 'a11y',\n 'tables',\n 'newTab',\n 'nodeMeta',\n 'overtakeLightbox',\n 'slideshowIcons',\n 'expandingDates',\n 'galleries',\n 'anchors',\n ],\n };\n\n // Cycle through each behavior and only add it if it's enabled\n behaviors[view].forEach((behavior) => {\n this.addEnabledBehavior(behavior);\n });\n }\n\n /**\n * A way to enable only behaviors the theme requires.\n */\n addEnabledBehavior(behavior) {\n const enabled = this.settings.behaviors[behavior];\n if (enabled) {\n this[behavior].call(this);\n }\n }\n\n /**\n * Helper class for theming the appearing navigation block\n */\n itemAppearsIn() {\n const $appearingNav = $('.appearing-nav');\n const $links = $appearingNav.find('ul.links li');\n if (!$links.length) {\n $appearingNav.addClass('placeholder-block');\n }\n }\n\n /**\n * Hides the blocks if no content is present.\n */\n bundledReferringContent() {\n const $blocks = $('#block-digitaldcore-node_referring, #block-digitaldcore-node_bundled');\n $blocks.each((i, element) => {\n const $block = $(element);\n const $nodes = $block.find('.node-teaser');\n if (!$nodes.length) {\n $block.addClass('placeholder-block');\n }\n });\n }\n\n /**\n * Accessibility fixes\n */\n a11y() {\n $('.field-image a').attr('tabindex', -1);\n }\n\n /**\n * Wraps all tables in a responsive, scrollable, container.\n */\n tables() {\n $('.node-content table').wrap('
');\n }\n\n /**\n * Open the links within a new tab.\n */\n newTab() {\n const pattern = /\\.(pdf|doc|docx|xls|xlsx|csv|txt|rtf|odf|ppt|pptx|xml)$/;\n $('.page a').each((i, element) => {\n if (element.href.match(pattern)) {\n element.target = '_blank';\n }\n });\n }\n\n /**\n * Finds the real last meta item and identifies node of visible meta info\n */\n nodeMeta() {\n const $nodes = $('.node');\n $nodes.each((a, node) => {\n // Create a meta object\n const $node = $(node);\n const $meta = $node.find('.node-upper-meta');\n const $items = $meta.find('.meta-item');\n\n // Clean up last classname\n $items.removeClass('last');\n\n // Filter to just visible items\n const $visible = $items.map((i, item) => {\n const props = window.getComputedStyle(item);\n const display = props.getPropertyValue('display');\n return display !== 'none' ? item : null;\n });\n\n // Correctly identify last meta item and label node with the has-meta flag\n if ($visible.length) {\n $node.addClass('has-meta');\n $visible.filter(':last').addClass('last new-dd-templates-functionality');\n }\n });\n }\n\n /**\n * If there is more than two event dates, functionality is added to show and\n * hide all events within one container.\n *\n * Helps cleans up the look of meta data.\n *\n * @note:\n * This is only enabled for blocks with the 'posts' classname and all\n * full post views\n */\n expandingDates() {\n $('.posts .node, .node-full').each((a, node) => {\n $('.node-meta, .node-upper-meta', node).each((b, meta) => {\n const $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 * Photo galleries\n */\n galleries() {\n // Photo Galleries\n const selectors = [\n '.photo-gallery .node-image',\n '.node-content .photo-gallery',\n '.photo-gallery .node-upper-image',\n ];\n\n document.querySelectorAll(selectors.join(',')).forEach((element) => {\n if (!element.Gallery) {\n element.Gallery = new Gallery(element);\n }\n });\n }\n\n /**\n * Adds markup to slideshow teasers to show an icon overlay\n */\n slideshowIcons() {\n const $slideshowNodes = $(`.pt${this.settings.photoGalleryPID}.node-teaser`);\n // cycle through each node instance\n $slideshowNodes.each((a, element) => {\n const $images = $(element).find('.field-image');\n // cycle through each field image instance\n $images.each((b, image) => {\n const $img = $(image).find('img');\n // add a button helper classname\n $(image).find('a').addClass('slideshow-btn');\n // prepend the icon overlay\n $img.before('');\n });\n });\n }\n\n sitemap() {\n // Add Sitemap output using the digitaldcore.js function\n const $map = $('#sitemap');\n const $nav = $('#sitemap .content');\n\n if ($map.length && $nav.length) {\n Drupal.digitaldcoreCreateSiteMap($map, $nav);\n $map.addClass('ready');\n }\n }\n\n /**\n * Adds the has more class to subterm overviews to properly control node-link display\n */\n subtermOverviews() {\n $('.subterm-overview .node-teaser').removeClass('no-more').addClass('has-more');\n }\n\n /**\n * Helper function to theme the category letters and seperate the sections\n */\n lexiconGlossary() {\n $('#glossary').find('.lexicon-list > a').each((i, element) => {\n const letter = $(element).attr('id').replace('letter_', '');\n $(element).html(letter.toUpperCase());\n });\n }\n\n /**\n * Adds page anchor support\n */\n // anchors() {\n // if (!document.body.Anchors) {\n // document.body.Anchors = new Anchors();\n // }\n // }\n\n /**\n * Overtake Lightbox\n */\n overtakeLightbox() {\n // Replace Lightbox lightframe functionality with Modaal.\n $('.open-lightframe').each((i, element) => {\n if (!element.Modaal) {\n const selector = '.node-header a, .field-image a, .link-read-more a';\n element.Modaal = new Modaal(element, selector);\n }\n });\n\n // Replace Lightbox slideshow functionality with Modaal.\n $('.te-open-slideshow .node, .te-open-slideshow.node').each((i, element) => {\n if (!element.Modaal) {\n const selector = '.field-image a';\n element.Modaal = new Modaal(element, selector);\n }\n });\n\n // Replace Lightbox and Lighframe straggelers.\n $('[rel^=lightbox], [rel^=lightframe]').closest('.node').each((i, element) => {\n const notValid = element.parentNode.classList.contains('dd-hover-dependencies');\n if (!element.Modaal && !notValid) {\n const selector = '.field-image a';\n element.Modaal = new Modaal(element, selector);\n }\n });\n }\n}\n","import 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 {HTML 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.offsetHeight;\n this.reactiveElement.style.paddingBottom = `${height}px`;\n }\n\n ready() {\n // Set ready state of passed in footer element.\n this.element.classList.add('ready');\n }\n}\n","/**\n * Loads a standardized LA City header which is shared by many websites,\n * such as LACERS.\n */\n\nconst defaults = {\n id: 'global_navbar_la_4324422',\n};\n\nexport default class LACityHeader {\n constructor(destination, options) {\n this.destination = destination;\n this.settings = { ...defaults, ...options };\n\n const header = document.getElementById(this.settings.id);\n if (header && this.destination) {\n this.destination.prepend(header);\n }\n }\n}\n","import $ from 'jquery';\nimport dayjs from 'dayjs';\n\nconst defaults = {\n // local storage key used to save the currently applied filter\n storageKey: 'currentCalendarFilter',\n\n // Button text displayed as the pagination to the next page of events\n paginationLabel: 'Load More Events',\n\n // Mobile only drop down label that houses the filtering options\n filtersLabel: 'Filter by...',\n\n // Force the filters to be automatically determined by the post types present in the feed.\n filterByPostTypes: false,\n\n // A simple indicator to determine the build out of filters\n useFilters: false,\n\n // Used to pass in an object of filters which use key value pairs.\n // {Object}\n // @key: Name that will appear as the filter button text\n // @value: ID of post type or navigation term\n filters: false,\n};\n\n// These filters are used if the filterByPostTypes is enabled. Present post\n// types are then added to this object, then the filters are made from those.\nconst defaultFilters = {\n All: 2,\n};\n\nexport default class CalendarFeed {\n constructor(element, options) {\n this.$element = $(element);\n this.settings = { ...defaults, ...options };\n this.filters = this.getFilters();\n this.buildCalendar();\n if (this.settings.useFilters) {\n this.createFilters();\n }\n }\n\n buildCalendar() {\n const $posts = this.$element.find('.node');\n const group = '
';\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.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-${id}`);\n\n // Add the newly created filter\n $filters.append($filter);\n\n // Add a click handler\n $filter.on('click', ({ currentTarget }) => {\n // Default to all posts in calendar feed\n let $show = $posts;\n\n // Filter what posts to display if not all option\n if (type !== 'All') {\n $show = $posts.filter(\n (j, element) => $.inArray(type, $(element).data('types')) !== -1,\n );\n }\n\n // Manage the active filter styling\n $filters.not(currentTarget).removeClass('active');\n $(currentTarget).addClass('active').closest('.filters').removeClass('expanded');\n $(currentTarget).closest('.filters').siblings('.ctrl').text($(currentTarget).text());\n\n // hide all events that aren't of this type\n $posts.not($show).stop(true, true).animate({\n opacity: 'hide',\n height: 'hide',\n }, 300).removeClass('show');\n\n // show all events that are of this type\n $show.stop(true, true).animate({\n opacity: 'show',\n height: 'show',\n }, 300).addClass('show');\n\n // Set the current filter into session storage\n sessionStorage.setItem(this.settings.storageKey, id);\n currentFilter = id;\n\n // Check to see if the event group is empty\n $element.find('.group').each((j, element) => {\n const $shown = $('.node.show', element);\n const result = $shown.length ? 'show' : 'hide';\n\n // Add a helper class for the use with the year function below\n if ($shown.length) {\n $(element).addClass('show');\n } else {\n $(element).removeClass('show');\n }\n\n // Manages the visibility of the group\n $(element).stop(true, true).animate({\n opacity: result,\n height: result,\n }, 300);\n });\n\n // Check to see if the group year should display or not\n $element.find('.group-year').each((j, element) => {\n const $shown = $(element).nextUntil('.group-year').filter('.show');\n const result = $shown.length ? 'show' : 'hide';\n $(element).stop(true, true).animate({\n opacity: result,\n height: result,\n }, 300);\n });\n });\n });\n\n // Add a drop down controller for mobile\n const $ctrl = $(`

${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.attr('data-type');\n\n // If the post type is the generic Event, set the label to All instead.\n if (type === 'Event') {\n type = 'All';\n }\n\n let id = 0;\n const classes = $post.attr('class');\n const regex = /\\w?pt([0-9]+)/;\n\n // Make filters by types found if were using the default filters\n if (regex.test(classes)) {\n /* eslint-disable prefer-destructuring */\n id = regex.exec(classes)[1];\n }\n\n // Make filters by post type\n if ($.inArray(type, types) === -1) {\n types.push(type);\n ids.push(id);\n }\n\n // Add a data types to identify this when a filter is clicked\n $post.data('types', [type]);\n });\n\n return {\n types,\n ids,\n };\n }\n\n getCustomizedData(_types, _ids) {\n const { $element } = this;\n const $posts = $element.find('.node');\n const types = [];\n const ids = [];\n\n // Keep track of the types and ids that have been identified within this content.\n const indexes = [];\n\n // Dynamically create the filter types and identify the posts that belong\n // to each one.\n $posts.each((i, post) => {\n const $post = $(post);\n const classes = $post.attr('class');\n const regex = /\\w?[wp]t([0-9]+)/g; // Filter could be either wt or pt.\n const aTypes = [];\n\n // Add the post type by default\n aTypes.push($post.attr('data-type'));\n\n // If the post type is the generic Event, set the label to All instead.\n if (aTypes[0] === 'Event') {\n aTypes[0] = 'All';\n }\n\n // Iterates through all matches made to see what this post should be\n // filtered by from the filters assigned\n let aResults;\n // eslint-disable-next-line no-cond-assign\n while ((aResults = regex.exec(classes)) !== null) {\n const result = parseInt(aResults[1], 10);\n if ($.inArray(result, _ids) !== -1) {\n const index = _ids.indexOf(result);\n // Check to see if index has already been added, if not, add it.\n if ($.inArray(index, indexes) === -1) {\n indexes.push(index);\n }\n // Add this type to the post since it's been found\n aTypes.push(_types[index]);\n }\n }\n\n // Add a data id to identify this type when the filter is clicked\n $post.data('types', aTypes);\n });\n\n // Create new types and ids of the relevant types found using the\n // supplied custom filters\n $.each(indexes.sort(), (i, index) => {\n types.push(_types[index]);\n ids.push(_ids[index]);\n });\n\n return {\n types,\n ids,\n };\n }\n}\n","import $ from 'jquery';\n\nexport default class FixNavigation {\n constructor(element) {\n this.element = element;\n this.process();\n this.ready();\n }\n\n process() {\n $('.menuparent, .expanded, .collapsed', this.element).each((i, item) => {\n // handles the parent term (if hidden)\n const $parent = $(item).children('a');\n if (!$parent.length || $parent.is('.hidden')) {\n $(item).remove();\n }\n\n // handles the term to see if it only parents orphans.\n let $children = $('> ul > li', item);\n if (!$parent.is('.hidden') && $children.length) {\n // Logged in: shows links with a hidden class.\n $children.children('a.hidden').parent().remove();\n // Logged out: shows an empty li :\\\n $children.filter(':empty').remove();\n // Reset $children to reflect potential missing items.\n $children = $('> ul > li', item);\n // If the list is empty, the parent should no longer be\n // labeled as such and the list should be removed.\n if (!$children.length) {\n $(item).removeClass('menuparent expanded collapsed'); // unlabel\n $(item).find('ul').remove();\n }\n }\n });\n }\n\n ready() {\n $(this.element).addClass('ready');\n }\n}\n","import Navigation from './Navigation';\nimport Breakpoints from './Breakpoints';\n\nconst components = {\n menu: '#term-navigation-menu',\n button: '.block-title button',\n buttonLink: '.block-title a',\n};\n\nconst settings = {\n menuBlock: 'term-navigation',\n menuParent: 'li.collapsed, li.expanded',\n expandActiveMenus: true,\n closeUnnestedMenus: false,\n focusout: false,\n hover: false,\n};\n\nexport default class TermNavigation {\n constructor(element) {\n this.element = element;\n this.open = false;\n\n if (this.menu) {\n this.standardize();\n this.addLogic();\n this.listen();\n }\n\n this.ready();\n }\n\n // Add depth classes to our term navigation structure which match the primary\n // navigation. That way we can share styling more easily.\n standardize() {\n this.menu.querySelectorAll('a.menu-link').forEach((link) => {\n const match = link.getAttribute('class').match(/depth-([0-9]+)/);\n if (match) {\n const level = match[1];\n // Replace current class with new depth to retain structure.\n link.classList.remove(`depth-${level}`);\n link.classList.add(`depth-${level - 1}`);\n // Add the appropriate classes to the list and it's items.\n const item = link.parentElement;\n const list = item.parentElement;\n item.classList.add(`depth-${level - 1}`);\n list.classList.add(`depth-${level - 1}`);\n }\n });\n }\n\n // Enhance the term navigation with the standardized, accessible, menu.\n addLogic() {\n return new Navigation(this.menu, settings);\n }\n\n // We want to control the mobile dropdown but let the desktop link go thru.\n clickHandler() {\n if (Breakpoints.mobileState) {\n if (this.open) {\n this.open = false;\n this.button.setAttribute('aria-expanded', false);\n this.element.classList.remove('term-navigation--open');\n this.menu.setAttribute('aria-hidden', true);\n } else {\n this.open = true;\n this.button.setAttribute('aria-expanded', true);\n this.element.classList.add('term-navigation--open');\n this.menu.setAttribute('aria-hidden', false);\n this.buttonLink.focus();\n }\n }\n }\n\n listen() {\n // Add a click handler to control the mobile dropdown menu\n this.button.addEventListener('click', this.clickHandler.bind(this));\n }\n\n ready() {\n this.element.classList.add('ready');\n }\n\n get button() {\n return this.element.querySelector(components.button);\n }\n\n get buttonLink() {\n return this.element.querySelector(components.buttonLink);\n }\n\n get menu() {\n return this.element.querySelector(components.menu);\n }\n}\n","export default class HomeHero {\n constructor(element) {\n this.element = element;\n\n // Verify an image is present\n if (!this.images.length) return;\n\n // Randomize what image to display\n this.loadRandomlyChoosenImage()\n .then(this.ready());\n }\n\n loadRandomlyChoosenImage() {\n return new Promise((resolve) => {\n const $images = this.images;\n if ($images.length > 0) {\n $images.forEach((element) => {\n const src = element.getAttribute('data-src');\n const img = new Image();\n img.onload = () => {\n element.src = src;\n resolve();\n };\n img.src = src;\n });\n }\n });\n }\n\n removeUnselectedImages(selectedImage) {\n return this.images.forEach((image) => {\n if (image !== selectedImage) {\n image.remove();\n }\n });\n }\n\n ready() {\n return this.element.classList.add('ready');\n }\n\n get images() {\n return this.element.querySelectorAll('.node-image img');\n }\n\n get random() {\n const total = Number(this.images.length);\n return Math.floor(Math.random() * total);\n }\n}\n","import $ from 'jquery';\n\n/**\n * Adds Play and Pause functionality to a Slick Carousel component\n * @param slickContainer {jQuery} Required jQuery container that the slick\n * component was made from\n * @param options {object}\n * - attachTo {jQuery} An optional jQuery object to inject the play and\n * pause controls\n * - playBtn {html string} HTML to be used as the play button\n * - pauseBtn {html string} HTML to be used as the pause button\n */\n\nconst defaults = {\n slickInstance: null,\n slickContainer: null,\n attachTo: null,\n playBtn: '',\n pauseBtn: '',\n};\n\nfunction SlickPlayPauseControls(slickContainer, options) {\n this.slickContainer = slickContainer;\n this.$slickContainer = $(slickContainer);\n this.slickInstance = slickContainer.get(0).slick;\n this.settings = Object.assign(defaults, options);\n\n // set scope\n this.play = $.proxy(this.play, this);\n this.pause = $.proxy(this.pause, this);\n this.onBreakpointChange = $.proxy(this.onBreakpointChange, this);\n\n // create\n this.$playBtn = this.addPlayBtn();\n this.$pauseBtn = this.addPauseBtn();\n\n // set breakpoint listener\n this.slickContainer.on('breakpoint', this.onBreakpointChange);\n\n // set current state\n this.setCurrentBreakpointState();\n}\n\nSlickPlayPauseControls.prototype = {\n verify(slickContainer) {\n let error;\n if (!slickContainer || !slickContainer.length) {\n error = \"SlickPlayPauseControls: The slickContainer was't found or passed\";\n } else if (!slickContainer.get(0).slick) {\n error = \"SlickPlayPauseControls: The slickInstance wasn't found\";\n }\n return error;\n },\n addPlayBtn() {\n return $(this.settings.playBtn);\n },\n addPauseBtn() {\n return $(this.settings.pauseBtn);\n },\n addControls() {\n // Allows the controls to be attached to a passed jQuery object or default\n // to the passed in container\n if (!this.settings.attachTo) {\n this.settings.attachTo = this.slickContainer;\n }\n\n // Add play and pause the controls and finally add the controls container\n const slickControls = document.createElement('div');\n const $slickControls = $(slickControls);\n $slickControls\n .addClass('slickControls')\n .append(this.$playBtn, this.$pauseBtn);\n this.settings.attachTo.append($slickControls);\n\n // Add click handlers to each button to control autoplay functionality\n this.$playBtn.on('click', this.play);\n this.$pauseBtn.on('click', this.pause);\n\n // set the current state of these buttons we just added\n this.setCurrentState();\n },\n removeControls() {\n // remove the buttons\n this.$playBtn.off('click', this.play).remove();\n this.$pauseBtn.off('click', this.pause).remove();\n },\n play(event) {\n event.preventDefault();\n if (this.slickInstance.paused) {\n this.slickContainer.slick('slickPlay');\n }\n this.setCurrentState();\n },\n pause(event) {\n event.preventDefault();\n if (!this.slickInstance.paused) {\n this.slickContainer.slick('slickPause');\n }\n this.setCurrentState();\n },\n setPlayState() {\n this.$playBtn.attr('aria-hidden', 'false');\n this.$pauseBtn.attr('aria-hidden', 'true');\n this.$playBtn.addClass('active');\n this.$pauseBtn.removeClass('active');\n },\n setPauseState() {\n this.$playBtn.attr('aria-hidden', 'true');\n this.$pauseBtn.attr('aria-hidden', 'false');\n this.$playBtn.removeClass('active');\n this.$pauseBtn.addClass('active');\n },\n setCurrentBreakpointState() {\n const $activeBreakpoint = this.slickInstance.activeBreakpoint;\n let $autoplay;\n\n // check to see if the current breakpoint adjusts the autoplay setting\n if ($activeBreakpoint) {\n $autoplay = this.slickInstance.breakpointSettings[$activeBreakpoint].autoplay;\n }\n\n // verify that an autoplay setting will be set\n if (!$autoplay) {\n $autoplay = this.slickInstance.options.autoplay;\n }\n\n // manage our controls accordingly\n if ($autoplay) {\n this.addControls();\n } else {\n this.removeControls();\n }\n },\n setCurrentState() {\n if (this.slickInstance.paused) {\n this.setPlayState();\n } else {\n this.setPauseState();\n }\n },\n // Integrates with the slick carousel breakpoint functionality\n onBreakpointChange(event, slick, breakpoint) {\n this.setCurrentBreakpointState(slick, breakpoint);\n },\n};\n\nexport default SlickPlayPauseControls;\n","import $ from 'jquery';\nimport 'slick-carousel';\nimport SlickPlayPauseControls from './Slick.PlayPauseControls';\n\nconst defaults = {\n speed: 500,\n autoplay: true,\n autoplaySpeed: 5000,\n dots: true,\n arrows: false,\n infinite: true,\n pauseOnFocus: false,\n waitForAnimate: false,\n fade: true,\n responsive: [\n {\n breakpoint: 768,\n settings: {\n autoplay: false,\n },\n },\n ],\n};\n\n/**\n * Gallery Constructor\n */\nfunction Hero(element, options) {\n this.element = element;\n this.$element = $(element);\n this.settings = $.extend(true, defaults, options);\n\n // add slick carousel functionality\n this.$slickContainer = this.addSlick();\n\n // add play/pause functionality\n this.controls = this.addControls();\n\n // set component ready\n this.ready();\n}\n\nHero.prototype = {\n addSlick() {\n const $slider = this.$element.find('.block-content');\n return $slider.slick(this.settings);\n },\n addControls() {\n return new SlickPlayPauseControls(this.$slickContainer, {\n attachTo: this.$slickContainer,\n });\n },\n ready() {\n this.$element.closest('.page-top').addClass('ready');\n },\n};\n\nexport default Hero;\n","import Breakpoints from './Breakpoints';\nimport Flickity from './Flickity';\nimport 'flickity-fade';\n\nconst config = {\n mobileSettings: {\n fade: false,\n autoPlay: false,\n wrapAround: true,\n prevNextButtons: false,\n },\n desktopSettings: {\n fade: true,\n autoPlay: 4000,\n wrapAround: false,\n prevNextButtons: false,\n },\n};\n\nexport default class HomeSpotlights {\n constructor(element) {\n this.element = element;\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 onChange() {\n if (this.slider.player.state === 'stopped') {\n this.setPauseState();\n }\n }\n\n turnOnSliderListeners() {\n // Turn on tracking of current state of gallery\n this.slider.on('change', this.onChange.bind(this));\n }\n\n turnOffSliderListeners() {\n // Turn off tracking of current state of gallery\n this.slider.off('change', this.onChange.bind(this));\n }\n\n addControls() {\n const item = document.createElement('li');\n this.playPauseButton = document.createElement('button');\n this.playPauseButton.className = 'button--play-pause';\n this.playPauseButton.innerHTML = '';\n this.playPauseButton.addEventListener('click', this.playPauseHandler.bind(this));\n item.appendChild(this.playPauseButton);\n this.sliderDots.appendChild(item);\n }\n\n playPauseHandler() {\n if (this.slider.player.state === 'stopped') {\n this.slider.playPlayer();\n this.setPlayState();\n } else {\n this.slider.stopPlayer();\n this.setPauseState();\n }\n }\n\n setPlayState() {\n this.playPauseButton.setAttribute('aria-label', 'Stop the slider\\'s autoscroll');\n this.sliderElement.classList.add('playing');\n }\n\n setPauseState() {\n this.playPauseButton.setAttribute('aria-label', 'Start the slider\\'s autoscroll');\n this.sliderElement.classList.remove('playing');\n }\n\n build(settings) {\n // Fire up a new flickity slider instance\n this.slider = new Flickity(this.sliderElement, settings);\n\n // If autoplay is enabled, add play/pause support.\n if (settings.autoPlay) {\n // Add play/pause controls\n this.addControls();\n\n // Set initial state of the gallery\n this.setPlayState();\n\n // Add listeners\n this.turnOnSliderListeners();\n }\n }\n\n restore() {\n return new Promise((resolve) => {\n if (this.slider) {\n this.turnOffSliderListeners();\n this.slider.destroy();\n this.slider = null;\n }\n resolve();\n });\n }\n\n mobileHandler() {\n this.restore().then(this.build(config.mobileSettings));\n }\n\n desktopHandler() {\n this.restore().then(this.build(config.desktopSettings));\n }\n\n listen() {\n // Listen for breakpoint changes\n Breakpoints.on('mobile tablet', 'enter', this.mobileHandler.bind(this));\n Breakpoints.on('desktop larger', 'enter', this.desktopHandler.bind(this));\n }\n\n get shouldBuildSlider() {\n return this.slides.length > 1;\n }\n\n get sliderElement() {\n return this.element.querySelector('.block-content');\n }\n\n get sliderDots() {\n return this.sliderElement.querySelector('.flickity-page-dots');\n }\n\n get slides() {\n return this.sliderElement.children;\n }\n}\n","import $ from 'jquery';\nimport Breakpoints from './Breakpoints';\nimport Flickity from './Flickity';\nimport 'flickity-fade';\n\nconst config = {\n mobileSettings: {\n prevNextButtons: false,\n },\n tabletSettings: {\n prevNextButtons: false,\n },\n};\n\nexport default class HomeNewsEvents {\n constructor(element) {\n this.element = element;\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 // Preprocess content\n this.preprocess();\n\n // Ready Component\n this.ready();\n }\n\n preprocess() {\n this.slides.forEach((slide) => {\n const $dates = $(slide).children().not('.dd-hover-dependencies').find('span.meta-item.event-date');\n if ($dates.length > 1) {\n $dates.not($dates.first()).remove();\n $dates.first().html('Multiple dates');\n }\n });\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 this.restore();\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.querySelector('.block-content');\n }\n\n get slides() {\n return this.sliderElement.children;\n }\n}\n","import Timer from 'tick-tock';\nimport Breakpoints from './Breakpoints';\n\nconst settings = {\n delay: 500,\n maxWidthPerc: 0.65,\n};\n\nexport default class GoogleTranslateHelp {\n constructor(element) {\n this.element = element;\n this.settings = settings;\n this.timer = new Timer();\n this.processing = false;\n this.listen();\n }\n\n onTranslate() {\n if (!this.processing && !Breakpoints.mobileState) {\n this.processing = true;\n this.timer.setTimeout('polling', this.respond.bind(this), this.settings.delay);\n }\n }\n\n respond() {\n const availableSpace = document.querySelector('.page-header .layout').offsetWidth;\n const elementWidth = this.element.offsetWidth;\n\n if (elementWidth >= (availableSpace * this.settings.maxWidthPerc)) {\n document.body.classList.add('small-logo');\n } else {\n document.body.classList.remove('small-logo');\n }\n this.timer.clear('polling');\n this.processing = false;\n }\n\n listen() {\n this.element.addEventListener('DOMSubtreeModified', this.onTranslate.bind(this));\n }\n}\n","export default class EnhanceExposedFilters {\n constructor(element) {\n // Modify the apply/submit button\n const submit = element.querySelector('.form-submit');\n if (!submit) return;\n submit.value = 'Submit';\n\n // Create a reset button\n const reset = document.createElement('input');\n reset.type = 'reset';\n reset.id = 'edit-reset-document-library';\n reset.className = 'form-submit form-reset';\n reset.value = 'Reset';\n\n // Create a reset button wrapper\n const widget = document.createElement('div');\n widget.className = 'views-exposed-widget views-reset-button';\n submit.parentNode.parentNode.append(widget);\n widget.append(reset);\n\n // Reset page to it's default state when reset is clicked.\n reset.addEventListener('click', () => {\n window.location.reload();\n });\n }\n}\n","function AccordionAnchors() {\n function openAccordion() {\n const currentUrl = document.URL;\n const urlAnchor = currentUrl.split('#');\n const urlID = (urlAnchor.length > 1) ? urlAnchor[1] : null;\n\n const accordionContent = document.querySelectorAll('.accordion-processed .accordion-content');\n const dtabs = document.querySelectorAll('.accordion-processed .dtabs .tab');\n const underTabs = document.querySelectorAll('.accordion-processed .under-tab');\n\n if (accordionContent) {\n accordionContent.forEach((content) => {\n if (content.getAttribute('aria-labelledby') === urlID) {\n const parentLabel = content.parentElement.getAttribute('aria-labelledby');\n dtabs.forEach((e) => {\n if (e.id === parentLabel) {\n e.classList.add('active');\n e.setAttribute('aria-selected', true);\n\n underTabs.forEach((u) => {\n const underTab = u.getAttribute('aria-labelledby');\n if (underTab === e.id) {\n u.style.display = 'block';\n } else {\n u.style.display = 'none';\n }\n });\n } else {\n e.classList.remove('active');\n e.setAttribute('aria-selected', false);\n }\n });\n\n const accordionHeading = content.previousSibling;\n accordionHeading.classList.add('active');\n accordionHeading.querySelector(`#${urlID}`).setAttribute('aria-expanded', 'true');\n setTimeout(() => {\n content.style.display = 'block';\n accordionHeading.scrollIntoView();\n }, 500);\n } else {\n const accordionHeading = content.previousSibling;\n accordionHeading.classList.remove('active');\n accordionHeading.querySelector('a').setAttribute('aria-expanded', 'false');\n setTimeout(() => {\n content.style.display = 'none';\n }, 500);\n }\n });\n }\n }\n openAccordion();\n\n window.addEventListener('hashchange', () => {\n openAccordion();\n });\n}\n\nexport default AccordionAnchors;\n","import Sticky from './Sticky';\nimport Drupal from './Drupal';\nimport Header from './Header';\nimport Toolbar from './Toolbar';\nimport Visible from './Visible';\nimport Navigation from './Navigation';\nimport DDTemplates from './DDTemplates';\nimport SmartFooter from './SmartFooter';\nimport LACityHeader from './LACityHeader';\nimport CalendarFeed from './CalendarFeed';\nimport FixNavigation from './FixNavigation';\nimport TermNavigation from './TermNavigation';\nimport HomeHero from './HomeHero';\nimport HeroSlider from './HeroSlider';\nimport HomeSpotlights from './HomeSpotlights';\nimport HomeNewsEvents from './HomeNewsEvents';\nimport GoogleTranslateHelp from './GoogleTranslateHelp';\nimport EnhanceExposedFilters from './EnhanceExposedFilters';\nimport AccordionAnchors from './AccordionAnchors';\nimport $ from \"jquery\";\n\n// Add the theme behaviors\nDrupal.behavior((context) => {\n // Page element\n const page = document.querySelector('.page');\n const header = document.querySelector('.page-header');\n\n // Add target=\"_blank\" to pdf links in field-image\n const links = document.querySelectorAll('.field-image a');\n links.forEach(link => {\n let src = link.toString().split('.').pop();\n const n = src.indexOf('?');\n src = src.substring(0, n != -1 ? n : src.length);\n if (src === 'pdf') {\n link.setAttribute('target', '_blank');\n }\n })\n\n // LA City Header\n if (header && !header.LACityHeader) {\n header.LACityHeader = new LACityHeader(header);\n }\n\n // DD Template Behaviors\n if (!document.body.DDTemplates) {\n document.body.DDTemplates = new DDTemplates();\n }\n\n // Fix our damn menus from displaying orphaned children\n document.querySelectorAll('.main-navigation, .term-navigation').forEach((element) => {\n if (!element.FixNavigation) {\n element.FixNavigation = new FixNavigation(element);\n }\n });\n\n // Sticky sidebars\n document.querySelectorAll('.page-sidebar').forEach((element) => {\n if (!element.Sticky) {\n element.Sticky = new Sticky(element);\n }\n });\n\n // Main Navigation\n const mainMenu = document.querySelector('#nice-menu-3');\n if (mainMenu && !mainMenu.Navigation) {\n mainMenu.Navigation = new Navigation(mainMenu);\n }\n\n // Controls the states of the menu and search states\n document.querySelectorAll('.toolbar').forEach((element) => {\n if (!element.Toolbar) {\n element.Toolbar = new Toolbar(element);\n }\n });\n\n // Fixed Header using Headroom.js\n document.querySelectorAll('.headroom').forEach((element) => {\n if (!element.Header) {\n element.Header = new Header(element);\n }\n });\n\n // Smart Footer\n const footer = document.querySelector('.page-footer');\n if (footer && !footer.SmartFooter && page && !footer.Visible) {\n footer.SmartFooter = new SmartFooter(footer, page);\n footer.Visible = new Visible(footer, -200);\n }\n\n // Term Navigation\n const termNavigation = document.querySelector('.term-navigation');\n if (termNavigation && !termNavigation.TermNavigation) {\n termNavigation.TermNavigation = new TermNavigation(termNavigation);\n }\n\n // Calendar of Events View\n document.querySelectorAll('.calendar-feed').forEach((element) => {\n if (!element.CalendarFeed) {\n element.CalendarFeed = new CalendarFeed(element, {\n useFilters: true,\n filters: {\n 'All': 2,\n 'Board Meeting': 296,\n 'Audit Committee': 297,\n 'Investments Committee': 298,\n 'Benefits Administration Committee': 299,\n 'Governance Committee': 300,\n 'Board Event': 307,\n 'Committee': 308,\n 'Retiree Events/LACERS Well': 309,\n 'Champion-Led Retiree Events': 310,\n 'Seminars': 311,\n },\n });\n }\n });\n\n // Google Translate Header Help\n if (mainMenu && !mainMenu.GoogleTranslateHelp) {\n mainMenu.GoogleTranslateHelp = new GoogleTranslateHelp(mainMenu);\n }\n\n // ---------------------- //\n // HOMEPAGE FUNCTIONALITY //\n // ---------------------- //\n\n // Homepage Block Titles\n document.querySelectorAll('.front .block-title').forEach((element) => {\n if (!element.Visible) {\n element.Visible = new Visible(element);\n }\n });\n\n // Homepage Hero\n let block = document.querySelector('.home-hero.block');\n if (block && !block.HomeHero && !block.Visible) {\n block.HomeHero = new HomeHero(block);\n block.Visible = new Visible(block);\n }\n\n // Hero slider\n $('.home-hero', context).each((i, element) => {\n if (!element.heroSlider) {\n element.heroSlider = new HeroSlider(element);\n }\n });\n\n // Slider controls\n const $controls = $('.slickControls');\n const $track = $('.slick-track');\n const $slides = $track.children();\n const $dots = $('.slick-dots');\n const $children = $dots.children();\n\n function checkWidth() {\n var windowsize = $(window).width();\n if (windowsize < 768) {\n $controls.css('display', 'none');\n $($slides, context).each((i, element) => {\n console.log(element);\n $(element).css('height', $track.height());\n });\n } else if (windowsize > 767 && windowsize < 1024) {\n let totalWidth = $($dots).offset().left;\n // eslint-disable-next-line no-plusplus\n for (let i = 0; i < $children.length; i++) {\n totalWidth += $($children[i]).outerWidth(true);\n }\n $controls.css('left', totalWidth + 'px');\n $controls.css('display', 'block');\n } else {\n let totalWidth = parseInt($($dots).css('padding-left'));\n // eslint-disable-next-line no-plusplus\n for (let i = 0; i < $children.length; i++) {\n totalWidth += $($children[i]).outerWidth(true);\n }\n $controls.css('left', totalWidth + 'px');\n $controls.css('display', 'block');\n }\n }\n if($dots.length < 1) {\n $controls.css('display', 'none');\n } else {\n checkWidth();\n $(window).resize(checkWidth);\n }\n\n // Homepage Audience\n block = document.querySelector('.home-audience.block');\n if (block && !block.Visible) {\n block.Visible = new Visible(block);\n }\n\n // Homepage Resources\n block = document.querySelector('.home-resources.block');\n if (block && !block.Visible) {\n block.Visible = new Visible(block);\n }\n\n // Homepage Spotlights\n block = document.querySelector('.home-spotlights.block');\n if (block && !block.HomeSpotlights && !block.Visible) {\n block.HomeSpotlights = new HomeSpotlights(block);\n block.Visible = new Visible(block);\n }\n\n // Homepage News and Events\n block = document.querySelector('.home-news-events.block');\n if (block && !block.HomeNewsEvents && !block.Visible) {\n block.HomeNewsEvents = new HomeNewsEvents(block);\n block.Visible = new Visible(block);\n }\n\n // Document Library\n const view = document.getElementById('views-exposed-form-document-library-page-1');\n if (view && !view.EnhanceExposedFilters) {\n view.EnhanceExposedFilters = new EnhanceExposedFilters(view);\n }\n\n // Accordion Anchor Links\n AccordionAnchors();\n\n // TOC-WRAPPER image\n const tocWrapper = document.querySelector('#toc-wrapper');\n const nodeImage = document.querySelector('.node-image img');\n if (tocWrapper && nodeImage) {\n const tocHeight = tocWrapper.offsetHeight;\n nodeImage.setAttribute('style', `height: ${tocHeight}px !important; object-fit: cover; object-position: left;`);\n nodeImage.parentNode.parentNode.setAttribute('style', 'margin: 20px 0 0 0;');\n }\n});\n"],"sourceRoot":""}