{"version":3,"sources":["webpack:///./themes/app/src/scripts/common/validation.js","webpack:///./themes/app/src/scripts/common/util.js","webpack:///./themes/app/src/scripts/common/requestTimeout.js","webpack:///.*(common|thirdparty)).*\\.js$","webpack:///./themes/app/src/scripts/components/animations.js","webpack:///./themes/app/src/scripts/components/countUp.js","webpack:///./themes/app/src/scripts/components/datepicker.js","webpack:///./themes/app/src/scripts/components/form.js","webpack:///./themes/app/src/scripts/components/historySlider.js","webpack:///./themes/app/src/scripts/components/housingDetailSlider.js","webpack:///./themes/app/src/scripts/components/locationMap.js","webpack:///./themes/app/src/scripts/components/locationSliderMap.js","webpack:///./themes/app/src/scripts/components/modal.js","webpack:///./themes/app/src/scripts/components/paginatedList.js","webpack:///./themes/app/src/scripts/components/scrollTo.js","webpack:///./themes/app/src/scripts/elements/gallery.js","webpack:///./themes/app/src/scripts/forms/contactForm.js","webpack:///./themes/app/src/scripts/forms/donation-form.js","webpack:///./themes/app/src/scripts/forms/housingApplicationPickHousing.js","webpack:///./themes/app/src/scripts/forms/multistepform.js","webpack:///./themes/app/src/scripts/sections/siteHeader.js","webpack:///./themes/app/src/scripts/sections/siteNavigation.js","webpack:///./themes/app/src/scripts/thirdparty/masking-input.js","webpack:///./themes/app/src/scripts/common/slide.js","webpack:///./themes/app/src/scripts/common/app.js","webpack:///./themes/app/src/index.js","webpack:///./themes/app/src/scripts/common/ajax.js","webpack:///./themes/app/src/scripts/common/selectors.js","webpack:///./themes/app/src/scripts/components/dropdown.js","webpack:///./themes/app/src/scripts/components/slider.js","webpack:///./themes/app/src/scripts/common/scrollTo.js"],"names":["validator","checkboxGroup","_","group","querySelectorAll","length","findFieldWrapper","$el","closest","handleBlur","e","$fieldWrapper","target","classList","remove","$existingErrorMessage","querySelector","contains","handleValidation","$form","rules","forEach","$field","offsetHeight","getAttribute","fieldName","dataset","name","presence","message","type","email","readonly","format","pattern","$radio","$checkbox","buildRules","result","validate","undefined","messages","Object","entries","insertAdjacentHTML","add","shouldScroll","formScroll","$firstError","scrollTo","focus","trackGoogleAnalytics","event","window","dataLayer","push","requestTimeout","fn","delay","start","Date","getTime","handle","loop","call","value","requestAnimationFrame","map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","Error","code","keys","resolve","module","exports","ScrollReveal","reveal","distance","origin","interval","scale","countUpModule","require","$counters","document","state","counters","init","useGrouping","decimalPlaces","end","opts","counter","CountUp","_$el","bindEvents","update","addEventListener","throttle","index","verge","inY","can","run","$datepickers","$dateRanges","$input","flatpickr","altInput","altFormat","onReady","this","input","setAttribute","datesData","dates","JSON","parse","mode","onClose","selectedDates","instance","from","formatDate","to","location","href","action","onDayCreate","dObj","dStr","fp","dayElem","includes","dateObj","on","capture","handleAjax","preventDefault","$formMessages","$submitButton","toggleSubmit","ajax","url","body","FormData","post","json","res","success","ga","reset","hideOnSubmit","style","display","el","textContent","showFormMessages","catch","finally","disabled","toggle","$holder","innerHTML","setTimeout","Swiper","use","Navigation","EffectFade","$slider","$navSlider","slider","spaceBetween","speed","slidesPerView","autoHeight","centeredSlides","navSlider","slideChange","slideTo","activeIndex","$activeYear","slides","$button","startIndex","parseInt","endIndex","effect","fadeEffect","crossFade","navigation","prevEl","nextEl","Pagination","$footer","pagination","clickable","google","$locationMap","$map","getElementById","bounds","currentInfoWindow","locations","mapCenter","maps","LatLng","lat","lng","setupMap","center","zoom","maxZoom","minZoom","mapTypeId","MapTypeId","ROADMAP","disableDefaultUI","scrollwheel","styles","featureType","elementType","stylers","visibility","isMobile","zoomControl","zoomControlOptions","ZoomControlStyle","LARGE","position","ControlPosition","RIGHT_CENTER","Map","LatLngBounds","addListenerOnce","placeMarkers","then","fitBounds","Promise","find","x","is_primary","setupMarker","setupInfoWindow","marker","Marker","title","label","panposition","icon","marker_url","scaledSize","Size","extend","getPosition","addListener","openInfoWindow","info","InfoWindow","content","maxWidth","infoWindow","close","open","panCenter","latlng","offsetX","offsetY","point1","getProjection","fromLatLngToPoint","getCenter","point2","Point","Math","pow","getZoom","panTo","fromPointToLatLng","y","getLocationById","documentElement","$locationSliderMap","currentMarkers","setupSlider","slideChangeTransitionEnd","$active","locationId","activateLocations","setVisible","setZoom","matchMedia","matches","SELECTORS","Selectors","modals","modalLoading","autoHtmlModals","$autoHtmlModals","handleOpen","openModal","hashList","hash","anchor","createElement","modal","history","replaceState","pathname","search","tagName","cssClass","buildImageModal","closeMethods","buildVideoModal","buildContentModal","autoModal","buildModal","setContent","prototype","hasOwnProperty","concat","tingle","beforeOpen","$closeBtn","appendChild","onOpen","Slider","destroy","get","text","resp","paginatedList","paginatedListNav","paginatedListTrigger","paginatedListHide","paginatedCount","paginatedCountTarget","loading","$paginated","$paginatedCountTargets","handleClick","$trigger","$nav","$list","previousElementSibling","isHide","$newNav","createRange","createContextualFragment","nav","parentNode","replaceChild","list","$newList","append","$paginatedCount","asClass","handleUrl","handleScrollToMe","targetSelector","scroll","$target","lightGallery","$gallery","currentTarget","galleryIndex","galleryData","photoGallery","dynamic","dynamicEl","thumbnail","download","uid","lgData","once","galleryButton","handleInquiry","selectedType","newType","formChangeEndpoint","query","selected","$newForm","StyledDropdown","setup","$cardElement","stripe","stripeCard","setupAmount","setupPayment","$marks","$amount","options","selectedValueIndex","indexOf","replace","opt","i","activeClass","$mark","amount","Stripe","stripePubKey","isRepeating","setupStripeCard","handleSubmit","skipValidation","card","elements","create","base","fontSize","fontFamily","color","fontSmoothing","invalid","mount","error","displayError","forceSubmit","createToken","stripeTokenHandler","token","hiddenInput","click","submit","$simpleForm","handleToggle","handleAddManageGroupBlock","handleRemoveManageGroupBlock","handleUpdateManageGroupBlock","showToggles","setupSpecialFields","setupManageGroups","$targetEl","toggleIf","split","targetValue","$toggleGroup","field","selectedValue","shouldShow","checked","valid","$placeholder","files","placeholder","insertBefore","IMask","lazy","mask","$group","$block","blockIndex","addBlockToList","$nextBlock","pendingLabel","toggleAddAction","limit","$listItem","$listItemLabel","header","searchOpenTrigger","searchCloseTrigger","searchForm","htmlSearchActive","$header","$searchForm","headerHeight","stuck","handleScroll","debounce","handleResize","handleOpenSearch","handleCloseSearch","handleSearchSubmit","handleSearchKeyUp","pageYOffset","bodyScrollLock","disableBodyScroll","enableBodyScroll","htmlMenuActive","navOpen","navClose","navMenu","navItems","navNext","navPrev","navHeader","navHeaderTitle","activeSubmenu","$navOpen","$navMenu","$navHeader","$navHeaderTitle","menuStack","closeMenu","openMenu","moveMenuPrev","moveMenuNext","handleMenuToggle","top","resetMenu","$next","updateMenu","pop","currentMenuStack","menuDepth","transform","updateNavHeader","$currentMenu","headerTitle","scripts","InputMask","masked","d","mNum","mChar","onError","refresh","inputMask","t","parentClass","createShell","activateMasking","wrap","emphasis","tClass","pTxt","createTextNode","removeAttribute","setValueOfMask","substr","that","handleValueChange","attachEvent","srcElement","handleCurrentValue","j","isInt","isLetter","strippedValue","isCharsetPresent","l","newValue","isNaN","match","matchesNumber","matchesLetter","validateProgress","validExample","RegExp","testValue","toUpperCase","test","property","getElementsByTagName","slideUp","element","duration","height","transitionProperty","transitionDuration","overflow","paddingTop","paddingBottom","marginTop","marginBottom","removeProperty","slideDown","getComputedStyle","App","SlideToggleGroup","activeId","toggleItem","closeOthers","toggleId","isItemActive","SlideToggle","active","slideToggle","isActive","AnchorNav","getBoundingClientRect","headerOffset","getPropertyValue","AccordionTabs","asTabs","innerWidth","setActive","r","reduce","modules","script","default","wretch","defaults","headers","selectors","assign","asId","selectorKey","asString","handleNavigationSelect","handleAnchorSelect","handleSubmitSelect","$select","selectedIndex","setupDropdown","hasAttribute","easydropdown","behavior","openOnFocus","maxVisibleItems","liveUpdates","$sliders","breakpoints","sliderMd","sliderLg","sync","loopFillGroupWithBlank","sliderFade","additionalOffset","offset","$logo","$pageAnchorNav","offest","getStuckHeight","jump","callback"],"mappings":"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","file":"app.js","sourcesContent":["import * as validator from 'validate.js'\nimport scrollTo from '../common/scrollTo'\n\nvalidator.validators.checkboxGroup = function (_, group) {\n if (group) {\n const checked = group.querySelectorAll('input[type=checkbox]:checked')\n\n if (checked.length) {\n return null\n }\n }\n\n return '^Please select one'\n}\n\nconst findFieldWrapper = ($el) => {\n if ($el) {\n if ($el.closest('.form-field-wrapper')) {\n return $el.closest('.form-field-wrapper')\n }\n\n if ($el.closest('.middleColumn')) {\n return $el.closest('.middleColumn')\n }\n\n if ($el.closest('.field')) {\n return $el.closest('.field')\n }\n }\n}\n\nexport const handleBlur = (e) => {\n const $fieldWrapper = findFieldWrapper(e.target)\n\n if ($fieldWrapper) {\n $fieldWrapper.classList.remove('has-error')\n\n const $existingErrorMessage = $fieldWrapper.querySelector(\n '.form-field-message'\n )\n\n if ($existingErrorMessage) {\n $existingErrorMessage.remove()\n }\n }\n\n if (e.target.classList.contains('has-error')) {\n e.target.classList.remove('has-error')\n }\n}\n\nexport const buildRules = ($form) => {\n const rules = {}\n\n $form\n .querySelectorAll(\n '[required], input.required-if, .js-dropdown.required-if select, .optionset.required-if input'\n )\n .forEach(($field) => {\n // Ignore hidden fields\n if (\n (findFieldWrapper($field) &&\n findFieldWrapper($field).offsetHeight === 0) ||\n $field.getAttribute('readonly')\n ) {\n return\n }\n\n const fieldName = $field.dataset.name\n ? $field.dataset.name\n : $field.name\n\n rules[fieldName] = {\n presence: {\n message: '^Required',\n },\n }\n\n if ($field.type === 'email') {\n rules[$field.name].email = true\n }\n })\n\n $form.querySelectorAll('[pattern]').forEach(($field) => {\n // Ignore hidden fields\n if (findFieldWrapper($field).offsetHeight === 0 || $field.readonly) {\n return\n }\n\n rules[$field.name] = {\n format: {\n pattern: $field.getAttribute('pattern'),\n message: '^Required',\n },\n }\n })\n\n $form.querySelectorAll('[aria-required]').forEach(($field) => {\n // Ignore hidden fields\n if (\n (findFieldWrapper($field) &&\n findFieldWrapper($field).offsetHeight === 0) ||\n $field.readonly\n ) {\n return\n }\n\n if ($field.classList.contains('optionset')) {\n const $radio = $field.querySelector('input[type=radio]')\n const $checkbox = $field.querySelector('input[type=checkbox]')\n\n if ($radio) {\n rules[$radio.name] = {\n presence: {\n message: '^Required',\n },\n }\n }\n\n if ($checkbox) {\n rules[$checkbox.name] = {\n checkboxGroup: $checkbox.closest('.optionset'),\n }\n }\n }\n })\n\n return rules\n}\n\nexport const handleValidation = ($form) => {\n const rules = buildRules($form)\n const result = validate($form, rules)\n\n if (result !== undefined) {\n for (const [name, messages] of Object.entries(result)) {\n const $field = $form.querySelector(`[name=\"${name}\"]`)\n const $fieldWrapper = findFieldWrapper($field)\n\n // Place error message\n if ($fieldWrapper) {\n const $existingErrorMessage = $fieldWrapper.querySelector(\n '.form-field-message'\n )\n\n if ($existingErrorMessage) {\n $existingErrorMessage.remove()\n }\n\n const message = `\n
\n ${messages[0]}\n
\n `\n $fieldWrapper.insertAdjacentHTML('beforeend', message)\n $fieldWrapper.classList.add('has-error')\n }\n\n $field.classList.add('has-error')\n }\n\n const shouldScroll = $form.dataset.formScroll !== undefined\n\n const $firstError = $form.querySelector('.field.has-error')\n\n if (shouldScroll && $firstError) {\n scrollTo(\n $firstError,\n 150,\n () =>\n $firstError.querySelector('input') &&\n $firstError.querySelector('input').focus()\n )\n }\n\n return false\n }\n\n return true\n}\n\nexport const validate = validator\n","export const trackGoogleAnalytics = (event) => {\n if (window.dataLayer) {\n window.dataLayer.push(event)\n }\n}\n","const requestTimeout = (fn, delay) => {\n const start = new Date().getTime()\n const handle = new Object()\n\n const loop = () => {\n const current = new Date().getTime()\n const delta = current - start\n\n delta >= delay\n ? fn.call()\n : (handle.value = window.requestAnimationFrame(loop))\n }\n\n handle.value = window.requestAnimationFrame(loop)\n\n return handle\n}\n\nexport default requestTimeout\n","var map = {\n\t\"./components/animations.js\": 163,\n\t\"./components/countUp.js\": 164,\n\t\"./components/datepicker.js\": 174,\n\t\"./components/dropdown.js\": 68,\n\t\"./components/form.js\": 229,\n\t\"./components/historySlider.js\": 232,\n\t\"./components/housingDetailSlider.js\": 233,\n\t\"./components/locationMap.js\": 234,\n\t\"./components/locationSliderMap.js\": 235,\n\t\"./components/modal.js\": 236,\n\t\"./components/paginatedList.js\": 241,\n\t\"./components/scrollTo.js\": 242,\n\t\"./components/slider.js\": 69,\n\t\"./elements/gallery.js\": 243,\n\t\"./forms/contactForm.js\": 247,\n\t\"./forms/donation-form.js\": 248,\n\t\"./forms/housingApplicationPickHousing.js\": 249,\n\t\"./forms/multistepform.js\": 250,\n\t\"./sections/siteHeader.js\": 252,\n\t\"./sections/siteNavigation.js\": 253\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 162;","import ScrollReveal from 'scrollreveal'\n\nScrollReveal().reveal('[data-sr-fade-up]', {\n distance: '125%',\n origin: 'bottom',\n interval: 100,\n})\n\nScrollReveal().reveal('[data-sr-fade-down]', {\n distance: '125%',\n origin: 'top',\n interval: 100,\n})\n\nScrollReveal().reveal('[data-sr-fade-left]', {\n distance: '125%',\n origin: 'right',\n interval: 100,\n})\n\nScrollReveal().reveal('[data-sr-fade-right]', {\n distance: '125%',\n origin: 'left',\n interval: 100,\n})\n\nScrollReveal().reveal('[data-sr-fade]', {\n interval: 100,\n})\n\nScrollReveal().reveal('[data-sr-zoom-in]', {\n scale: 0.85,\n interval: 100,\n})\n","import requestTimeout from '../common/requestTimeout'\nimport throttle from 'lodash/throttle'\nimport verge from 'verge'\nconst countUpModule = require('countup.js')\n\nconst $counters = document.querySelectorAll('[data-counter]')\n\nconst state = {\n counters: [],\n}\n\nconst fn = {\n init: () => {\n $counters.forEach(($el) => {\n const useGrouping = $el.dataset.useGrouping\n const decimalPlaces = $el.dataset.decimalPlaces\n const end = $el.dataset.end\n\n const opts = {\n useGrouping: !!+useGrouping,\n }\n\n if (decimalPlaces) {\n opts.decimalPlaces = decimalPlaces\n }\n\n const counter = new countUpModule.CountUp($el, end, opts)\n counter._$el = $el\n\n state.counters.push(counter)\n })\n\n fn.bindEvents()\n\n requestTimeout(fn.update, 300)\n },\n\n bindEvents: () => {\n window.addEventListener('scroll', throttle(fn.update, 250))\n },\n\n update: () => {\n state.counters.forEach((counter, index) => {\n if (verge.inY(counter._$el)) {\n counter.start()\n delete state.counters[index]\n }\n })\n },\n}\n\nexport default {\n can: () => $counters.length,\n run: fn.init,\n}\n","import flatpickr from 'flatpickr'\n\nconst $datepickers = document.querySelectorAll('input[type=date]')\nconst $dateRanges = document.querySelectorAll('.date-range-field')\n\nconst fn = {\n init: () => {\n $datepickers.forEach(($input) => {\n flatpickr($input, {\n altInput: true,\n altFormat: 'M j, Y',\n onReady: function () {\n if (this.input.getAttribute('data-toggle-if')) {\n this.altInput.setAttribute(\n 'data-name',\n this.input.getAttribute('name')\n )\n\n this.altInput.setAttribute(\n 'data-toggle-if',\n this.input.getAttribute('data-toggle-if')\n )\n }\n },\n })\n })\n\n $dateRanges.forEach(($el) => {\n const datesData = $el.dataset.dates\n ? JSON.parse($el.dataset.dates)\n : null\n\n flatpickr($el.querySelector('input[name=date]'), {\n altInput: true,\n mode: 'range',\n altFormat: 'M j, Y',\n onClose: (selectedDates, _, instance) => {\n if (selectedDates.length == 2) {\n const from = instance.formatDate(\n selectedDates[0],\n 'Y-m-d'\n )\n const to = instance.formatDate(\n selectedDates[1],\n 'Y-m-d'\n )\n\n window.location.href = `${\n $el.closest('form').action\n }?from=${from}&to=${to}`\n }\n },\n onDayCreate: (dObj, dStr, fp, dayElem) => {\n if (\n datesData &&\n datesData.includes(\n fp.formatDate(dayElem.dateObj, 'Y-m-d')\n )\n ) {\n dayElem.classList.add('is-highlighted')\n }\n },\n })\n })\n },\n}\n\nexport default {\n can: () => true,\n run: fn.init,\n}\n","import { on } from 'delegated-events'\nimport { handleValidation, handleBlur } from '../common/validation'\nimport { trackGoogleAnalytics } from '../common/util'\n\nconst fn = {\n init: () => {\n on('blur', '.has-error', handleBlur, { capture: true })\n on('change', '.has-error', handleBlur, { capture: true })\n on('change', '.has-error blur', handleBlur, {\n capture: true,\n })\n on('submit', '[data-form-validate]:not(.multistepform)', (e) =>\n handleValidation(e.target)\n )\n on('submit', '[data-form-ajax]', fn.handleAjax)\n },\n\n handleAjax: (e) => {\n e.preventDefault()\n\n const $form = e.target\n const isValid = handleValidation($form)\n\n if (isValid) {\n const $formMessages = $form.querySelector('.form-messages')\n const $submitButton = $form.querySelector('[type=submit]')\n fn.toggleSubmit($submitButton)\n\n ajax.url($form.action)\n .body(new FormData($form))\n .post()\n .json((res) => {\n if (res.success) {\n if (res.ga) {\n res.ga.forEach((event) =>\n trackGoogleAnalytics(event)\n )\n }\n\n $form.reset()\n\n if ($form.dataset.hideOnSubmit) {\n $form.style.display = 'none'\n }\n\n // If there are file inputs, reset the placeholder text\n if (document.querySelector('.file-input-placeholder')) {\n let filePlaceholder = document.querySelectorAll(\n '.file-input-placeholder'\n )\n\n filePlaceholder.forEach((el) => {\n el.textContent = 'Click to select'\n el.classList.remove('filled')\n })\n }\n }\n\n if (res.message) {\n fn.showFormMessages($formMessages, res.message)\n }\n })\n .catch(() => {\n fn.showFormMessages(\n $formMessages,\n 'Sorry, there was a problem with your submission'\n )\n })\n .finally(() => {\n fn.toggleSubmit($submitButton)\n })\n }\n },\n\n toggleSubmit: ($submitButton) => {\n $submitButton.disabled = !$submitButton.disabled\n $submitButton.classList.toggle('btn-loading')\n },\n\n showFormMessages: ($holder, message) => {\n $holder.innerHTML = message\n $holder.style.display = 'block'\n\n setTimeout(() => {\n $holder.style.display = 'none'\n }, 6000)\n },\n}\n\nexport default {\n can: () => document.querySelectorAll('form:not(.multistepform)').length,\n run: fn.init,\n}\n","import { on } from 'delegated-events'\nimport { Swiper, EffectFade, Navigation } from 'swiper'\n\nSwiper.use([Navigation, EffectFade])\n\nconst $slider = document.querySelector('.history-slider')\nconst $navSlider = document.querySelector('.history-nav-slider')\n\nconst fn = {\n init: () => {\n const slider = new Swiper($slider, {\n spaceBetween: 10,\n speed: 500,\n slidesPerView: 'auto',\n autoHeight: true,\n centeredSlides: true,\n })\n\n const navSlider = new Swiper($navSlider, {\n on: {\n slideChange: function () {\n slider.slideTo(this.activeIndex)\n\n const $activeYear = document.querySelector(\n '.milestone-year.is-active'\n )\n\n if ($activeYear) {\n $activeYear.classList.remove('is-active')\n }\n\n if (this.activeIndex === this.slides.length - 1) {\n document\n .querySelector('.milestone-year.is-today')\n .classList.add('is-active')\n } else {\n document\n .querySelectorAll('.milestone-year')\n .forEach(($button) => {\n const startIndex = parseInt(\n $button.dataset.startIndex,\n 10\n )\n const endIndex = parseInt(\n $button.dataset.endIndex,\n 10\n )\n\n if (\n startIndex <= this.activeIndex &&\n endIndex > this.activeIndex\n ) {\n $button.classList.add('is-active')\n }\n })\n }\n },\n },\n speed: 500,\n slidesPerView: 1,\n autoHeight: true,\n effect: 'fade',\n fadeEffect: {\n crossFade: true,\n },\n navigation: {\n prevEl: $navSlider.querySelector('.slider-prev'),\n nextEl: $navSlider.querySelector('.slider-next'),\n },\n })\n\n on('click', '.milestone-year', function () {\n let index = slider.slides.length - 1\n\n if (!this.classList.contains('is-today')) {\n index = this.dataset.startIndex\n }\n\n navSlider.slideTo(index)\n })\n },\n}\n\nexport default {\n can: () => $slider,\n run: fn.init,\n}\n","import { Swiper, Navigation, Pagination } from 'swiper'\n\nSwiper.use([Navigation, Pagination])\n\nconst $footer = document.querySelector('.housing-detail-footer')\n\nconst fn = {\n init: () => {\n const $slider = $footer.querySelector('.swiper-container')\n\n new Swiper($slider, {\n slidesPerView: 'auto',\n loop: true,\n pagination: {\n el: $footer.querySelector('.slider-pagination'),\n clickable: true,\n },\n navigation: {\n prevEl: $footer.querySelector('.slider-prev'),\n nextEl: $footer.querySelector('.slider-next'),\n },\n })\n },\n}\n\nexport default {\n can: () => $footer,\n run: fn.init,\n}\n","const google = window.google\n\nconst $locationMap = document.querySelector('.location-map')\nconst $map = document.getElementById('google-map')\n\nconst state = {\n map: null,\n bounds: null,\n currentInfoWindow: null,\n locations: [],\n mapCenter: null,\n}\n\nconst fn = {\n init: () => {\n state.locations = JSON.parse($map.dataset.locations)\n state.mapCenter = new google.maps.LatLng(\n state.locations[0][0].lat,\n state.locations[0][0].lng\n )\n\n fn.setupMap()\n },\n\n setupMap: () => {\n const opts = {\n center: state.mapCenter,\n zoom: 17,\n maxZoom: 20,\n minZoom: 12,\n mapTypeId: google.maps.MapTypeId.ROADMAP,\n disableDefaultUI: true,\n scrollwheel: false,\n styles: [\n {\n featureType: 'administrative',\n elementType: 'geometry',\n stylers: [\n {\n visibility: 'off',\n },\n ],\n },\n {\n featureType: 'poi',\n stylers: [\n {\n visibility: 'off',\n },\n ],\n },\n {\n featureType: 'road',\n elementType: 'labels.icon',\n stylers: [\n {\n visibility: 'off',\n },\n ],\n },\n {\n featureType: 'transit',\n stylers: [\n {\n visibility: 'off',\n },\n ],\n },\n ],\n }\n\n if (!fn.isMobile()) {\n opts.zoomControl = true\n\n opts.zoomControlOptions = {\n style: google.maps.ZoomControlStyle.LARGE,\n position: google.maps.ControlPosition.RIGHT_CENTER,\n }\n }\n\n state.map = new google.maps.Map($map, opts)\n state.bounds = new google.maps.LatLngBounds()\n\n google.maps.event.addListenerOnce(state.map, 'tilesloaded', () => {\n fn.placeMarkers().then(() => {\n state.map.fitBounds(state.bounds)\n })\n })\n },\n\n placeMarkers: () => {\n const placed = new Promise((resolve) => {\n for (const locations of state.locations) {\n const location = locations.find((x) => x.is_primary)\n\n fn.setupMarker(location)\n fn.setupInfoWindow(location)\n }\n\n resolve()\n })\n\n return placed\n },\n\n setupMarker: (location) => {\n const marker = new google.maps.Marker({\n map: state.map,\n title: location.label,\n position: new google.maps.LatLng(location.lat, location.lng),\n panposition: new google.maps.LatLng(location.lat, location.lng),\n icon: {\n url: location.marker_url,\n scaledSize: new google.maps.Size(75, 75),\n },\n })\n\n state.bounds.extend(marker.getPosition())\n\n google.maps.event.addListener(\n marker,\n fn.isMobile() ? 'touchend' : 'click',\n () => {\n fn.openInfoWindow(location)\n }\n )\n\n location.marker = marker\n },\n\n setupInfoWindow: (location) => {\n const info = new google.maps.InfoWindow({\n content: location.info,\n maxWidth: 320,\n })\n\n location.infoWindow = info\n },\n\n openInfoWindow: (location) => {\n if (\n state.currentInfoWindow &&\n state.currentInfoWindow != location.infoWindow\n ) {\n state.currentInfoWindow.close()\n }\n\n location.infoWindow.open(state.map, location.marker)\n state.currentInfoWindow = location.infoWindow\n\n fn.panCenter(location.marker.getPosition(), 0, -120)\n },\n\n panCenter: (latlng, offsetX, offsetY) => {\n const point1 = state.map\n .getProjection()\n .fromLatLngToPoint(\n latlng instanceof google.maps.LatLng\n ? latlng\n : state.map.getCenter()\n )\n\n const point2 = new google.maps.Point(\n (typeof offsetX === 'number' ? offsetX : 0) /\n Math.pow(2, state.map.getZoom()) || 0,\n (typeof offsetY === 'number' ? offsetY : 0) /\n Math.pow(2, state.map.getZoom()) || 0\n )\n\n state.map.panTo(\n state.map\n .getProjection()\n .fromPointToLatLng(\n new google.maps.Point(\n point1.x - point2.x,\n point1.y + point2.y\n )\n )\n )\n },\n\n getLocationById: (id) => {\n return state.locations.find((x) => parseInt(x.id) === id)\n },\n\n isMobile: () => {\n return 'ontouchstart' in document.documentElement\n },\n}\n\nexport default {\n can: () => $locationMap,\n run: fn.init,\n}\n","import { Swiper, Navigation, Pagination } from 'swiper'\n\nSwiper.use([Navigation, Pagination])\n\nconst google = window.google\n\nconst $locationSliderMap = document.querySelector('.location-slider-map')\nconst $map = document.getElementById('google-map')\n\nconst state = {\n map: null,\n currentMarkers: [],\n locations: [],\n mapCenter: null,\n}\n\nconst fn = {\n init: () => {\n state.locations = JSON.parse($map.dataset.locations)\n state.mapCenter = new google.maps.LatLng(\n state.locations[0][0].lat,\n state.locations[0][0].lng\n )\n\n fn.setupMap()\n },\n\n setupMap: () => {\n const opts = {\n center: state.mapCenter,\n zoom: 17,\n maxZoom: 20,\n minZoom: 12,\n mapTypeId: google.maps.MapTypeId.ROADMAP,\n disableDefaultUI: true,\n scrollwheel: false,\n styles: [\n {\n featureType: 'administrative',\n elementType: 'geometry',\n stylers: [\n {\n visibility: 'off',\n },\n ],\n },\n {\n featureType: 'poi',\n stylers: [\n {\n visibility: 'off',\n },\n ],\n },\n {\n featureType: 'road',\n elementType: 'labels.icon',\n stylers: [\n {\n visibility: 'off',\n },\n ],\n },\n {\n featureType: 'transit',\n stylers: [\n {\n visibility: 'off',\n },\n ],\n },\n ],\n }\n\n if (!fn.isMobile()) {\n opts.zoomControl = true\n\n opts.zoomControlOptions = {\n style: google.maps.ZoomControlStyle.LARGE,\n position: google.maps.ControlPosition.RIGHT_CENTER,\n }\n }\n\n state.map = new google.maps.Map($map, opts)\n\n google.maps.event.addListenerOnce(state.map, 'tilesloaded', () => {\n fn.placeMarkers()\n fn.setupSlider()\n })\n },\n\n setupSlider: () => {\n const $slider = $locationSliderMap.querySelector('.swiper-container')\n\n new Swiper($slider, {\n on: {\n slideChangeTransitionEnd: () => {\n const $active = $slider.querySelector(\n '.swiper-slide-active'\n )\n\n if ($active) {\n const locations = fn.getLocationById(\n parseInt($active.dataset.locationId)\n )\n\n fn.activateLocations(locations)\n }\n },\n },\n autoHeight: true,\n loop: true,\n pagination: {\n el: $locationSliderMap.querySelector('.slider-pagination'),\n clickable: true,\n },\n navigation: {\n prevEl: $locationSliderMap.querySelector('.slider-prev'),\n nextEl: $locationSliderMap.querySelector('.slider-next'),\n },\n })\n },\n\n activateLocations: (locations) => {\n const bounds = new google.maps.LatLngBounds()\n\n state.currentMarkers.forEach((marker) => marker.setVisible(false))\n\n state.currentMarkers = locations.map((location) => location.marker)\n\n state.currentMarkers.forEach((marker) => {\n bounds.extend(marker.getPosition())\n\n return marker.setVisible(true)\n })\n\n state.map.fitBounds(bounds)\n\n if (state.currentMarkers.length < 2) {\n state.map.setZoom(17)\n }\n\n fn.panCenter(bounds.getCenter())\n },\n\n placeMarkers: () => {\n for (const locations of state.locations) {\n fn.setupMarker(locations)\n }\n\n fn.activateLocations(state.locations[0])\n },\n\n setupMarker: (locations) => {\n locations.forEach((location) => {\n const marker = new google.maps.Marker({\n map: state.map,\n title: location.label,\n position: new google.maps.LatLng(location.lat, location.lng),\n panposition: new google.maps.LatLng(location.lat, location.lng),\n icon: {\n url: location.marker_url,\n scaledSize: new google.maps.Size(75, 75),\n },\n })\n\n marker.setVisible(false)\n\n location.marker = marker\n\n google.maps.event.addListener(\n marker,\n fn.isMobile() ? 'touchend' : 'click',\n () => {\n window.location.href = location.url\n }\n )\n })\n },\n\n panCenter: (latlng) => {\n let offsetX = 0\n const offsetY = 0\n\n if (window.matchMedia('(min-width: 768px)').matches) {\n offsetX = 180\n }\n\n if (\n window.matchMedia('(min-width: 1440px)').matches &&\n state.currentMarkers.length > 1\n ) {\n offsetX = 320\n }\n\n const point1 = state.map\n .getProjection()\n .fromLatLngToPoint(\n latlng instanceof google.maps.LatLng\n ? latlng\n : state.map.getCenter()\n )\n\n const point2 = new google.maps.Point(\n (typeof offsetX === 'number' ? offsetX : 0) /\n Math.pow(2, state.map.getZoom()) || 0,\n (typeof offsetY === 'number' ? offsetY : 0) /\n Math.pow(2, state.map.getZoom()) || 0\n )\n\n state.map.panTo(\n state.map\n .getProjection()\n .fromPointToLatLng(\n new google.maps.Point(\n point1.x - point2.x,\n point1.y + point2.y\n )\n )\n )\n },\n\n getLocationById: (id) => {\n return state.locations.find((location) =>\n location.find((x) => parseInt(x.id) === id && x.is_primary)\n )\n },\n\n isMobile: () => {\n return 'ontouchstart' in document.documentElement\n },\n}\n\nexport default {\n can: () => $locationSliderMap,\n run: fn.init,\n}\n","import tingle from 'tingle.js'\nimport { on } from 'delegated-events'\nimport { Slider } from './slider'\n\nconst SELECTORS = Selectors({\n modals: '[data-modal]',\n modalLoading: 'modal--loading',\n autoHtmlModals: '[data-auto-modal]',\n})\n\nconst $autoHtmlModals = document.querySelectorAll(SELECTORS.autoHtmlModals)\n\nconst fn = {\n init: () => {\n on('click', SELECTORS.modals, fn.handleOpen)\n\n if ($autoHtmlModals.length) {\n $autoHtmlModals.forEach(($el) => fn.openModal($el))\n }\n\n const hashList = {\n \"#BlogSubscription\": \"/subscription/subscribe/newsevents?type=blog\",\n \"#NewsSubscription\": \"/subscription/subscribe/newsevents?type=news\",\n \"#EventSubscription\": \"/subscription/subscribe/newsevents?type=event\",\n \"#Subscription\": \"/subscription/subscribe/newsevents\",\n };\n\n const hash = window.location.hash;\n\n if (hash in hashList) {\n let anchor = document.createElement('a')\n anchor.href = hashList[hash]\n anchor.dataset.modal = 'content'\n fn.openModal(anchor)\n\n // Remove hash for clean URL\n window.history.replaceState({}, document.title, window.location.pathname + window.location.search)\n }\n },\n\n handleOpen: (e) => {\n if (\n e.target.tagName !== 'A' ||\n (e.target.tagName === 'A' && e.target.dataset.modal)\n ) {\n e.preventDefault()\n fn.openModal(e.target.closest(SELECTORS.modals))\n }\n },\n\n openModal: ($el) => {\n let modal = null\n\n // Setup an image modal\n if ($el.dataset.modal === 'image') {\n let opts = {\n cssClass: ['modal--image'],\n }\n\n modal = fn.buildImageModal($el.getAttribute('href'), opts)\n }\n\n // Setup a video modal\n if ($el.dataset.modal === 'video') {\n let opts = {\n cssClass: ['modal--video'],\n closeMethods: ['button', 'escape'],\n }\n\n modal = fn.buildVideoModal($el.getAttribute('href'), opts)\n }\n\n // Setup a content/AJAX modal\n if ($el.dataset.modal === 'content') {\n let opts = {\n cssClass: ['modal--content', 'modal--ajax'],\n }\n\n const href = $el.dataset.href\n ? $el.dataset.href\n : $el.getAttribute('href')\n modal = fn.buildContentModal(href, opts)\n }\n\n // Setup an auto HTML modal\n if ($el.dataset.autoModal !== undefined) {\n let opts = {\n cssClass: ['modal--content'],\n }\n\n modal = fn.buildModal(opts)\n modal.setContent($el.innerHTML)\n }\n\n if (modal) {\n modal.open()\n }\n },\n\n buildModal: (opts = {}) => {\n let cssClass = ['modal']\n let closeMethods = ['button', 'escape', 'overlay']\n\n if (Object.prototype.hasOwnProperty.call(opts, 'cssClass')) {\n cssClass = cssClass.concat(opts.cssClass)\n }\n\n if (Object.prototype.hasOwnProperty.call(opts, 'closeMethods')) {\n closeMethods = opts.closeMethods\n }\n\n const modal = new tingle.modal({\n closeMethods,\n cssClass,\n beforeOpen: () => {\n modal.modal.classList.add(SELECTORS.modalLoading)\n\n // Move the close button\n const $closeBtn = modal.modal.querySelector(\n '.tingle-modal__close'\n )\n modal.modal\n .querySelector('.tingle-modal-box')\n .appendChild($closeBtn)\n },\n onOpen: () => {\n modal.modal.classList.remove(SELECTORS.modalLoading)\n\n const $slider = modal.modal.querySelector('[data-slider]')\n\n if ($slider) {\n Slider.setupSlider($slider)\n }\n },\n onClose: () => {\n modal.destroy()\n },\n })\n\n return modal\n },\n\n buildImageModal: (href, opts = {}) => {\n const modal = fn.buildModal(opts)\n modal.setContent(``)\n\n return modal\n },\n\n buildVideoModal: (href, opts = {}) => {\n const modal = fn.buildModal(opts)\n modal.setContent(\n ``\n )\n\n return modal\n },\n\n buildContentModal: (href, opts = {}) => {\n const modal = fn.buildModal(opts)\n\n ajax.url(href)\n .get()\n .text((resp) => {\n modal.setContent(resp)\n modal.modal.classList.remove('modal--ajax')\n })\n\n return modal\n },\n}\n\nexport default {\n can: () => true,\n run: fn.init,\n}\n","import { on } from 'delegated-events'\nimport scrollTo from '../common/scrollTo'\n\nconst SELECTORS = Selectors({\n paginatedList: '[data-paginated-list]',\n paginatedListNav: '[data-paginated-list-nav]',\n paginatedListTrigger: '[data-paginated-list-trigger]',\n paginatedListHide: '[data-paginated-list-hide]',\n paginatedCount: 'paginated-count',\n paginatedCountTarget: '[data-paginated-count-target]',\n loading: 'is-loading',\n})\n\nconst $paginated = document.querySelectorAll(SELECTORS.paginatedList)\nconst $paginatedCountTargets = document.querySelectorAll(\n SELECTORS.paginatedCountTarget\n)\n\nconst fn = {\n init: () => {\n fn.bindEvents()\n },\n\n bindEvents: () => {\n on('click', SELECTORS.paginatedListTrigger, fn.handleClick)\n },\n\n handleClick: (e) => {\n e.preventDefault()\n\n const $trigger = e.target\n const $nav = $trigger.closest(SELECTORS.paginatedListNav)\n const $list = $nav.previousElementSibling\n const isHide = $trigger.matches(SELECTORS.paginatedListHide)\n\n $trigger.disabled = true\n $trigger.classList.add(SELECTORS.loading)\n\n ajax.url($trigger.href)\n .get()\n .json((resp) => {\n const $newNav = document\n .createRange()\n .createContextualFragment(resp.nav)\n $nav.parentNode.replaceChild($newNav, $nav)\n\n if (isHide) {\n $list.innerHTML = resp.list\n } else {\n const $newList = document\n .createRange()\n .createContextualFragment(resp.list)\n $list.append($newList)\n }\n\n // Update the new count elsewhere on the page, if applicable\n const $paginatedCount = document.querySelector(\n SELECTORS.asClass('paginatedCount')\n )\n\n $paginatedCountTargets.forEach(($el) => {\n $el.innerHTML = $paginatedCount.innerHTML\n })\n\n if (isHide) {\n scrollTo($list, 150)\n }\n })\n },\n}\n\nexport default {\n can: () => $paginated.length,\n run: fn.init,\n}\n","import { on } from 'delegated-events'\nimport scrollTo from '../common/scrollTo'\n\nconst fn = {\n init: () => {\n fn.bindEvents()\n fn.handleUrl()\n fn.handleScrollToMe()\n },\n\n bindEvents: () => {\n on('click', '[data-scroll]', fn.handleClick)\n },\n\n handleClick: (e) => {\n e.preventDefault()\n\n const $el = e.target.closest('[data-scroll]')\n\n let targetSelector = null\n\n if ($el.dataset.scroll) {\n targetSelector = $el.dataset.scroll\n } else if ($el.tagName === 'A') {\n targetSelector = $el.hash\n } else {\n return\n }\n\n const $target = document.querySelector(targetSelector)\n\n if ($target) {\n scrollTo($target)\n }\n },\n\n handleUrl: () => {\n if (window.location.hash) {\n const $target = document.querySelector(window.location.hash)\n\n if ($target) {\n scrollTo($target, 30)\n }\n }\n },\n\n // Automatically scrolls to the first element with the [data-scrolltome] attribute\n handleScrollToMe: () => {\n const $target = document.querySelector('[data-scrolltome]')\n\n if ($target) {\n setTimeout(() => {\n scrollTo($target)\n }, 250)\n }\n },\n}\n\nexport default {\n can: () => true,\n run: fn.init,\n}\n","import { on } from 'delegated-events'\nimport 'lightgallery.js/dist/js/lightgallery.js'\nimport 'lg-thumbnail.js/dist/lg-thumbnail.js'\nimport 'lightgallery.js/dist/css/lightgallery.css'\n\nconst lightGallery = window.lightGallery\n\nconst fn = {\n init: () => {\n on('click', '[data-gallery-trigger]', (e) => {\n e.preventDefault()\n\n const $gallery = e.target.closest('[data-photo-gallery]')\n const startIndex = e.currentTarget.dataset.galleryIndex || 1\n const galleryData = JSON.parse($gallery.dataset.photoGallery)\n\n lightGallery($gallery, {\n index: parseInt(startIndex - 1),\n dynamic: true,\n dynamicEl: galleryData,\n thumbnail: true,\n download: false,\n })\n\n $gallery.addEventListener(\n 'onCloseAfter',\n () => {\n const uid = $gallery.getAttribute('lg-uid')\n\n if (\n Object.prototype.hasOwnProperty.call(window.lgData, uid)\n ) {\n window.lgData[uid].destroy(true)\n }\n },\n { once: true }\n )\n })\n\n on('click', '[data-gallery-button]', (e) => {\n e.preventDefault()\n\n const $gallery = e.target.closest('button')\n const galleryData = JSON.parse($gallery.dataset.galleryButton)\n\n lightGallery($gallery, {\n dynamic: true,\n dynamicEl: galleryData,\n thumbnail: true,\n download: false,\n })\n\n $gallery.addEventListener(\n 'onCloseAfter',\n () => {\n const uid = $gallery.getAttribute('lg-uid')\n\n if (\n Object.prototype.hasOwnProperty.call(window.lgData, uid)\n ) {\n window.lgData[uid].destroy(true)\n }\n },\n { once: true }\n )\n })\n },\n}\n\nexport default {\n can: () => true,\n run: fn.init,\n}\n","import { StyledDropdown } from '../components/dropdown'\nimport { on } from 'delegated-events'\n\nconst $form = document.querySelector('form.contact-form')\n\nconst fn = {\n init: () => {\n on('change', '.contact-form [name=Inquiry]', fn.handleInquiry)\n },\n\n handleInquiry: (e) => {\n const $form = document.querySelector('form.contact-form')\n const selectedType = e.target.value\n\n let newType = false\n\n if (selectedType === 'Resident Concern Report') {\n if (!$form.classList.contains('contact-form--silentwitness')) {\n newType = 'silentwitness'\n }\n } else {\n if ($form.classList.contains('contact-form--silentwitness')) {\n newType = 'general'\n }\n }\n\n if (newType !== false) {\n ajax.url($form.dataset.formChangeEndpoint)\n .query({\n selected: selectedType,\n type: newType,\n })\n .get()\n .text((resp) => {\n const $newForm = document\n .createRange()\n .createContextualFragment(resp)\n $form.parentNode.replaceChild($newForm, $form)\n\n StyledDropdown.setup()\n })\n }\n },\n}\n\nexport default {\n can: () => $form,\n run: fn.init,\n}\n","import { on } from 'delegated-events'\n\nconst $form = document.querySelector('.donation-form')\nconst $submitButton = $form ? $form.querySelector('[name=action_finish]') : null\nconst $cardElement = document.getElementById('card-element')\n\nconst state = {\n stripe: null,\n stripeCard: null,\n}\n\nconst fn = {\n init: () => {\n if ($form && $form.classList.contains('amount-step')) {\n fn.setupAmount()\n }\n\n if ($form && $form.classList.contains('payment-step')) {\n fn.setupPayment()\n }\n },\n\n setupAmount: () => {\n const $slider = $form.querySelector('input[type=range]')\n const $marks = $form.querySelector('.marks')\n const $amount = $form.querySelector('input.donation-amount-field')\n const options = JSON.parse(\n $form.querySelector('#amount-options').textContent\n )\n\n const setAmount = (amount) => {\n $amount.value = `$${amount}.00`\n }\n\n const selectedValueIndex = options.indexOf(\n parseInt($amount.value.replace('.00', '').replace('$', ''))\n )\n\n if (selectedValueIndex >= 0) {\n $slider.value = selectedValueIndex\n }\n\n options.forEach((opt, i) => {\n const activeClass = parseInt($slider.value) === i ? 'is-active' : ''\n\n const $mark = document.createRange().createContextualFragment(`\n
\n $${opt}\n
\n `)\n\n $marks.appendChild($mark)\n })\n\n $slider.addEventListener('input', (e) => {\n const index = e.target.value\n $marks.querySelector('.is-active').classList.remove('is-active')\n $marks\n .querySelector(`[data-index=\"${index}\"]`)\n .classList.add('is-active')\n\n setAmount(options[index])\n })\n },\n\n setupPayment: () => {\n if ($cardElement) {\n state.stripe = window.Stripe($form.dataset.stripePubKey)\n state.isRepeating = $form.querySelector(\n '[type=hidden][name=IsRepeating]'\n )\n fn.setupStripeCard()\n\n $form.addEventListener('submit', fn.handleSubmit)\n\n on('click', '[formnovalidate]', () => {\n $form.skipValidation = true\n })\n }\n },\n\n setupStripeCard: () => {\n const style = {\n base: {\n fontSize: '16px',\n fontFamily: 'Open Sans, sans-serif',\n color: '#2c2c2c',\n fontSmoothing: 'antialiased',\n '::placeholder': {\n color: '#b4b4b4',\n },\n },\n invalid: {\n color: '#b9112a',\n },\n }\n\n const card = state.stripe.elements().create('card', { style })\n\n card.mount('#card-element')\n state.stripeCard = card\n\n card.addEventListener('change', ({ error }) => {\n const displayError = document.getElementById('card-errors')\n if (error) {\n displayError.textContent = error.message\n } else {\n displayError.textContent = ''\n }\n })\n },\n\n handleSubmit: (e) => {\n if (e.target.skipValidation || e.target.forceSubmit) {\n return true\n }\n\n e.preventDefault()\n\n // Handle Stripe\n $submitButton.disabled = true\n $submitButton.classList.add('btn-loading')\n\n state.stripe\n .createToken(state.stripeCard, {\n name: $form.querySelector('[name=CardholderName]').value,\n })\n .then((result) => {\n if (result.error) {\n const errorElement = document.getElementById('card-errors')\n errorElement.textContent = result.error.message\n $submitButton.disabled = false\n $submitButton.classList.remove('btn-loading')\n } else {\n fn.stripeTokenHandler(result.token)\n }\n })\n\n return false\n },\n\n stripeTokenHandler: (token) => {\n const hiddenInput = document.createElement('input')\n hiddenInput.setAttribute('type', 'hidden')\n hiddenInput.setAttribute('name', 'stripeToken')\n hiddenInput.setAttribute('value', token.id)\n $form.appendChild(hiddenInput)\n\n $form.forceSubmit = true\n $submitButton.disabled = false\n $submitButton.click()\n $submitButton.disabled = true\n },\n}\n\nexport default {\n can: () => document.body.classList.contains('pagetype-donationpage'),\n run: fn.init,\n}\n","import { on } from 'delegated-events'\n\nconst fn = {\n init: () => {\n on('click', '.optionsetpropertycategory input[type=radio]', (e) => {\n e.target.closest('form').submit()\n })\n },\n}\n\nexport default {\n can: () =>\n document.querySelector(\n '.pagetype-housingapplicationpage .multistepform.first-step'\n ),\n run: fn.init,\n}\n","import IMask from 'imask'\nimport { on } from 'delegated-events'\nimport { handleValidation, handleBlur } from '../common/validation'\n\nconst $form = document.querySelector('form.multistepform')\nconst $simpleForm = document.querySelector('form')\n\nconst state = {\n skipValidation: false,\n}\n\nconst fn = {\n init: () => {\n on('blur', '.has-error', handleBlur, { capture: true })\n on('change', '.has-error', handleBlur, { capture: true })\n on('change', '.has-error blur', handleBlur, {\n capture: true,\n })\n\n on('change', 'input[type=radio]', fn.handleToggle)\n on('change', 'input[type=checkbox]', fn.handleToggle)\n\n on('click', '[formnovalidate]', () => {\n state.skipValidation = true\n })\n on('submit', '[data-form-validate]', fn.handleValidation)\n\n // Manage Group handlers\n on('click', '.manage-group-add-action', fn.handleAddManageGroupBlock)\n on(\n 'click',\n '.manage-group-remove-action',\n fn.handleRemoveManageGroupBlock\n )\n on(\n 'blur',\n '[data-manage-group-target]',\n fn.handleUpdateManageGroupBlock,\n {\n capture: true,\n }\n )\n\n fn.showToggles()\n fn.setupSpecialFields()\n fn.setupManageGroups()\n },\n\n showToggles: () => {\n if (!$form) {\n return\n }\n\n $form.querySelectorAll(`[data-toggle-if]`).forEach(($input) => {\n const $targetEl = $form.querySelector(\n `[name=\"${$input.dataset.toggleIf.split('|')[0]}\"]:checked`\n )\n const targetValue = $input.dataset.toggleIf.split('|')[1]\n const $toggleGroup = $input.closest('.toggle-group')\n\n if ($targetEl && $targetEl.value === targetValue) {\n $toggleGroup.classList.remove('hidden')\n }\n })\n },\n\n handleToggle: (e) => {\n const field = e.target\n const name = e.target.name\n const selectedValue = e.target.value\n\n if (!$form) {\n return\n }\n\n $form\n .querySelectorAll(`[data-toggle-if^=\"${name}|\"]`)\n .forEach(($input) => {\n const $toggleGroup = $input.closest('.toggle-group')\n let shouldShow = false\n\n if (field.type === 'radio') {\n const targetValue = $input.dataset.toggleIf.split('|')[1]\n shouldShow = targetValue === selectedValue\n }\n\n if (field.type === 'checkbox') {\n shouldShow = field.checked\n }\n\n if (shouldShow) {\n $toggleGroup.classList.remove('hidden')\n } else {\n $toggleGroup.classList.add('hidden')\n\n $toggleGroup\n .querySelectorAll('input')\n .forEach((x) => (x.value = null))\n }\n })\n },\n\n handleValidation: (e) => {\n if (state.skipValidation) {\n return true\n }\n\n const valid = handleValidation(e.target)\n\n if (!valid) {\n e.preventDefault()\n }\n\n return valid\n },\n\n setupSpecialFields: () => {\n document.querySelectorAll('form').forEach(($form) => {\n // Setup file inputs\n $form.querySelectorAll('input[type=file]').forEach(($input) => {\n const $placeholder = document.createElement('div')\n $placeholder.classList.add('file-input-placeholder')\n\n if ($input.value) {\n $placeholder.textContent = $input.files[0].name\n } else {\n $placeholder.textContent = $input.dataset.placeholder\n }\n\n $input.parentNode.insertBefore($placeholder, $input)\n\n $placeholder.addEventListener('click', () => $input.click())\n\n $input.addEventListener('change', (e) => {\n let files = e.target.files\n if (files.length > 1) {\n $placeholder.textContent = `${files.length} files selected`\n } else {\n $placeholder.textContent = e.target.files[0].name\n }\n $placeholder.classList.add('filled')\n })\n })\n\n $form.querySelectorAll('input.ssn.masked').forEach(($input) => {\n IMask($input, {\n lazy: false,\n mask: '000-00-0000',\n })\n })\n\n $form.querySelectorAll(`input[type=\"tel\"]`).forEach(($input) => {\n IMask($input, {\n mask: '(000) 000-0000',\n })\n })\n\n $form.querySelectorAll('input.phone-number').forEach(($input) => {\n IMask($input, {\n mask: '(000) 000-0000',\n })\n })\n })\n },\n\n setupManageGroups: () => {\n if (!$form) {\n return\n }\n\n const $groups = $form.querySelectorAll('.manage-group')\n\n $groups.forEach(($group) => {\n const $targets = $group.querySelectorAll(\n '[data-manage-group-target]'\n )\n\n $targets.forEach(($field) => {\n if ($field && $field.value) {\n const $block = $field.closest('.manage-group-block')\n const blockIndex = $block.dataset.index\n const isInitial = parseInt(blockIndex) === 1\n\n if (isInitial) {\n return\n }\n\n $block.classList.remove('hidden')\n fn.addBlockToList($group, $field.value, blockIndex)\n }\n })\n })\n },\n\n handleAddManageGroupBlock: (e) => {\n const $button = e.target.closest('button')\n const $group = $button.closest('.manage-group')\n const $nextBlock = $group.querySelectorAll('.manage-group-block.hidden')\n\n if ($nextBlock.length) {\n $nextBlock[0].classList.remove('hidden')\n\n fn.addBlockToList(\n $group,\n $button.dataset.pendingLabel,\n $nextBlock[0].dataset.index\n )\n }\n\n fn.toggleAddAction($group)\n },\n\n toggleAddAction: ($group) => {\n const $button = $group.querySelector('.manage-group-add-action')\n\n const visibleBlocks = $group.querySelectorAll(\n '.manage-group-block:not(.hidden)'\n ).length\n\n if (visibleBlocks >= $group.dataset.limit) {\n $button.classList.add('hidden')\n } else {\n $button.classList.remove('hidden')\n }\n },\n\n addBlockToList: ($group, label, index) => {\n const $list = $group.querySelector('.manage-group-list')\n\n const $listItem = document.createRange().createContextualFragment(`\n
  • \n
    ${label}
    \n \n
  • \n `)\n\n $list.appendChild($listItem)\n },\n\n handleRemoveManageGroupBlock: (e) => {\n const $button = e.target.closest('button')\n const $listItem = $button.closest('li')\n const $group = $button.closest('.manage-group')\n const $block = $group.querySelector(\n `.manage-group-block[data-index=\"${$button.dataset.index}\"]`\n )\n\n $block.querySelectorAll('input, select').forEach(($input) => {\n $input.value = null\n })\n\n $block.classList.add('hidden')\n $listItem.remove()\n\n fn.toggleAddAction($group)\n },\n\n handleUpdateManageGroupBlock: (e) => {\n const $input = e.target\n const $group = $input.closest('.manage-group')\n const $block = $input.closest('.manage-group-block')\n const blockIndex = $block.dataset.index\n const $listItemLabel = $group.querySelector(\n `.manage-group-list [data-label-index=\"${blockIndex}\"]`\n )\n\n if ($input.value && $listItemLabel) {\n $listItemLabel.textContent = $input.value\n }\n },\n}\n\nexport default {\n can: () => $form || $simpleForm,\n run: fn.init,\n}\n","import requestTimeout from '../common/requestTimeout'\nimport debounce from 'lodash/debounce'\nimport { on } from 'delegated-events'\n\nconst SELECTORS = Selectors({\n header: 'site-header',\n searchOpenTrigger: 'site-search-trigger',\n searchCloseTrigger: 'site-search-close',\n searchForm: 'site-header-search form',\n htmlSearchActive: 'js-search-active',\n})\n\nconst $header = document.querySelector(SELECTORS.asClass('header'))\nconst $searchForm = document.querySelector(SELECTORS.asClass('searchForm'))\n\nconst state = {\n headerHeight: 0,\n stuck: true,\n}\n\nconst fn = {\n init: () => {\n state.headerHeight = $header.offsetHeight\n\n fn.handleScroll()\n fn.bindEvents()\n },\n\n bindEvents: () => {\n window.addEventListener('scroll', fn.handleScroll)\n window.addEventListener('resize', debounce(fn.handleResize, 250))\n\n on('click', SELECTORS.asClass('searchOpenTrigger'), fn.handleOpenSearch)\n on(\n 'click',\n SELECTORS.asClass('searchCloseTrigger'),\n fn.handleCloseSearch\n )\n\n if ($searchForm) {\n $searchForm.addEventListener('submit', fn.handleSearchSubmit)\n $searchForm.addEventListener('keyup', fn.handleSearchKeyUp)\n }\n },\n\n handleScroll: () => {\n state.stuck = window.pageYOffset > 1\n $header.classList.toggle('is-stuck', state.stuck)\n },\n\n handleResize: () => {\n state.headerHeight = $header.offsetHeight\n },\n\n handleOpenSearch: () => {\n document.documentElement.classList.add(SELECTORS.htmlSearchActive)\n\n requestTimeout(() => {\n $searchForm.querySelector('input').focus()\n }, 250)\n },\n\n handleCloseSearch: () => {\n document.documentElement.classList.remove(SELECTORS.htmlSearchActive)\n\n $searchForm.querySelector('input').value = null\n $searchForm.classList.remove('has-error')\n },\n\n handleSearchSubmit: (e) => {\n const $input = e.target.querySelector('input')\n\n if ($input.value === '') {\n e.preventDefault()\n $searchForm.classList.add('has-error')\n $input.focus()\n }\n },\n\n handleSearchKeyUp: () => {\n $searchForm.classList.remove('has-error')\n },\n}\n\nexport default {\n can: () => document.contains($header),\n run: fn.init,\n}\n","import { on } from 'delegated-events'\nimport throttle from 'lodash/throttle'\nimport requestTimeout from 'scripts/common/requestTimeout'\n\nconst bodyScrollLock = require('body-scroll-lock')\nconst disableBodyScroll = bodyScrollLock.disableBodyScroll\nconst enableBodyScroll = bodyScrollLock.enableBodyScroll\n\nconst SELECTORS = Selectors({\n htmlMenuActive: 'js-menu-active',\n nav: 'site-nav',\n navOpen: 'site-menu-btn',\n navClose: 'site-menu-btn-close',\n navMenu: 'site-nav-menu',\n navItems: 'site-nav-submenu',\n navNext: 'site-nav-next',\n navPrev: 'site-nav-prev',\n navHeader: 'site-nav-header',\n navHeaderTitle: 'site-nav-header-title',\n activeSubmenu: 'is-active',\n})\n\nconst $nav = document.querySelector(SELECTORS.asClass('nav'))\nconst $navOpen = document.querySelector(SELECTORS.asClass('navOpen'))\nconst $navMenu = document.querySelector(SELECTORS.asClass('navMenu'))\nconst $navHeader = document.querySelector(SELECTORS.asClass('navHeader'))\nconst $navHeaderTitle = document.querySelector(\n SELECTORS.asClass('navHeaderTitle')\n)\n\nconst state = {\n menuStack: [],\n}\n\nconst fn = {\n init: () => {\n fn.bindEvents()\n },\n\n bindEvents: () => {\n window.addEventListener('resize', throttle(fn.handleResize, 250))\n document.addEventListener('click', fn.closeMenu)\n on('click', SELECTORS.asClass('navOpen'), fn.openMenu)\n on('click', SELECTORS.asClass('navClose'), fn.closeMenu)\n on('click', SELECTORS.asClass('navPrev'), fn.moveMenuPrev)\n on('click', SELECTORS.asClass('navNext'), fn.moveMenuNext)\n },\n\n handleMenuToggle: () => {\n const isOpen = $navOpen.getAttribute('aria-expanded') === 'true'\n\n if (isOpen) {\n fn.closeMenu({ target: document.body })\n } else {\n fn.openMenu()\n }\n },\n\n openMenu: () => {\n document.documentElement.classList.add(SELECTORS.htmlMenuActive)\n $nav.style.top = `${window.pageYOffset}px`\n $navOpen.setAttribute('aria-expanded', 'true')\n disableBodyScroll($nav)\n },\n\n closeMenu: ({ target }) => {\n if (\n !target.closest('.site-search-close') &&\n !target.closest(SELECTORS.asClass('navOpen')) &&\n (target.closest(SELECTORS.asClass('navClose')) ||\n !target.closest(SELECTORS.asClass('nav')))\n ) {\n document.documentElement.classList.remove(SELECTORS.htmlMenuActive)\n $nav.style.top = null\n $navOpen.setAttribute('aria-expanded', 'false')\n\n fn.resetMenu()\n enableBodyScroll($nav)\n }\n },\n\n moveMenuNext: ({ target }) => {\n const $next = target\n .closest('li')\n .querySelector(SELECTORS.asClass('navItems'))\n state.menuStack.push($next)\n $next.classList.add(SELECTORS.activeSubmenu)\n fn.updateMenu()\n },\n\n moveMenuPrev: () => {\n const $prev = state.menuStack.pop()\n $prev.classList.remove(SELECTORS.activeSubmenu)\n fn.updateMenu()\n },\n\n resetMenu: () => {\n const currentMenuStack = state.menuStack\n\n state.menuStack = []\n\n requestTimeout(() => {\n currentMenuStack.forEach((el) =>\n el.classList.remove(SELECTORS.activeSubmenu)\n )\n fn.updateMenu()\n }, 300)\n },\n\n updateMenu: () => {\n const menuDepth = state.menuStack.length\n $navMenu.style.transform = `translate3d(${menuDepth * -100}%, 0, 0)`\n\n fn.updateNavHeader()\n },\n\n updateNavHeader: () => {\n const $currentMenu = state.menuStack[state.menuStack.length - 1]\n let headerTitle = null\n\n if ($currentMenu) {\n const $parentLink = $currentMenu\n .closest('li')\n .querySelector('a:first-of-type')\n headerTitle = $parentLink.getAttribute('title')\n }\n\n $navHeaderTitle.textContent = headerTitle\n $navHeader.classList.toggle(\n SELECTORS.activeSubmenu,\n $currentMenu !== undefined\n )\n $nav.classList.toggle(\n SELECTORS.activeSubmenu,\n $currentMenu !== undefined\n )\n },\n\n handleResize: () => {\n if (window.matchMedia('(min-width: 1024px)').matches) {\n fn.closeMenu({ target: document.body })\n }\n },\n}\n\nexport default {\n can: () => document.contains($nav),\n run: fn.init,\n}\n","/* eslint-disable */\nvar InputMask = function ( opts ) {\n if ( opts && opts.masked ) {\n // Make it easy to wrap this plugin and pass elements instead of a selector\n opts.masked = typeof opts.masked === 'string' ? document.querySelectorAll( opts.masked ) : opts.masked;\n }\n\n if ( opts ) {\n this.opts = {\n masked: opts.masked || document.querySelectorAll( this.d.masked ),\n mNum: opts.mNum || this.d.mNum,\n mChar: opts.mChar || this.d.mChar,\n error: opts.onError || this.d.onError\n }\n } else {\n this.opts = this.d;\n this.opts.masked = document.querySelectorAll( this.opts.masked );\n }\n\n this.refresh( true );\n};\n\nvar inputMask = {\n\n // Default Values\n d: {\n masked : '.masked',\n mNum : 'XdDmMyY9',\n mChar : '_',\n onError: function(){}\n },\n\n refresh: function(init) {\n var t, parentClass;\n\n if ( !init ) {\n this.opts.masked = document.querySelectorAll( this.opts.masked );\n }\n\n for(i = 0; i < this.opts.masked.length; i++) {\n t = this.opts.masked[i]\n parentClass = t.parentNode.getAttribute('class');\n\n if ( !parentClass || ( parentClass && parentClass.indexOf('shell') === -1 ) ) {\n this.createShell(t);\n this.activateMasking(t);\n }\n }\n },\n\n // replaces each masked t with a shall containing the t and it's mask.\n createShell : function (t) {\n var wrap = document.createElement('span'),\n mask = document.createElement('span'),\n emphasis = document.createElement('i'),\n tClass = t.getAttribute('class'),\n pTxt = t.getAttribute('placeholder'),\n placeholder = document.createTextNode(pTxt);\n\n t.setAttribute('maxlength', placeholder.length);\n t.setAttribute('data-placeholder', pTxt);\n t.removeAttribute('placeholder');\n\n\n if ( !tClass || ( tClass && tClass.indexOf('masked') === -1 ) ) {\n t.setAttribute( 'class', tClass + ' masked');\n }\n\n mask.setAttribute('aria-hidden', 'true');\n mask.setAttribute('id', t.getAttribute('id') + 'Mask');\n mask.appendChild(emphasis);\n mask.appendChild(placeholder);\n\n wrap.setAttribute('class', 'shell');\n wrap.appendChild(mask);\n t.parentNode.insertBefore( wrap, t );\n wrap.appendChild(t);\n },\n\n setValueOfMask : function (e) {\n var value = e.target.value,\n placeholder = e.target.getAttribute('data-placeholder');\n\n return \"\" + value + \"\" + placeholder.substr(value.length);\n },\n\n // add event listeners\n activateMasking : function (t) {\n var that = this;\n if (t.addEventListener) { // remove \"if\" after death of IE 8\n t.addEventListener('keyup', function(e) {\n that.handleValueChange.call(that,e);\n }, false);\n } else if (t.attachEvent) { // For IE 8\n t.attachEvent('onkeyup', function(e) {\n e.target = e.srcElement;\n that.handleValueChange.call(that, e);\n });\n }\n },\n\n handleValueChange : function (e) {\n var id = e.target.getAttribute('id');\n\n if(e.target.value == document.querySelector('#' + id + 'Mask i').innerHTML) {\n return; // Continue only if value hasn't changed\n }\n\n document.getElementById(id).value = this.handleCurrentValue(e);\n document.getElementById(id + 'Mask').innerHTML = this.setValueOfMask(e);\n\n },\n\n handleCurrentValue : function (e) {\n var isCharsetPresent = e.target.getAttribute('data-charset'),\n placeholder = isCharsetPresent || e.target.getAttribute('data-placeholder'),\n value = e.target.value, l = placeholder.length, newValue = '',\n i, j, isInt, isLetter, strippedValue;\n\n // strip special characters\n strippedValue = isCharsetPresent ? value.replace(/\\W/g, \"\") : value.replace(/\\D/g, \"\");\n\n for (i = 0, j = 0; i < l; i++) {\n isInt = !isNaN(parseInt(strippedValue[j]));\n isLetter = strippedValue[j] ? strippedValue[j].match(/[A-Z]/i) : false;\n matchesNumber = this.opts.mNum.indexOf(placeholder[i]) >= 0;\n matchesLetter = this.opts.mChar.indexOf(placeholder[i]) >= 0;\n if ((matchesNumber && isInt) || (isCharsetPresent && matchesLetter && isLetter)) {\n newValue += strippedValue[j++];\n } else if ((!isCharsetPresent && !isInt && matchesNumber) || (isCharsetPresent && ((matchesLetter && !isLetter) || (matchesNumber && !isInt)))) {\n //this.opts.onError( e ); // write your own error handling function\n return newValue;\n } else {\n newValue += placeholder[i];\n }\n // break if no characters left and the pattern is non-special character\n if (strippedValue[j] == undefined) {\n break;\n }\n }\n if (e.target.getAttribute('data-valid-example')) {\n return this.validateProgress(e, newValue);\n }\n return newValue;\n },\n\n validateProgress : function (e, value) {\n var validExample = e.target.getAttribute('data-valid-example'),\n pattern = new RegExp(e.target.getAttribute('pattern')),\n placeholder = e.target.getAttribute('data-placeholder'),\n l = value.length, testValue = '';\n\n //convert to months\n if (l == 1 && placeholder.toUpperCase().substr(0,2) == 'MM') {\n if(value > 1 && value < 10) {\n value = '0' + value;\n }\n return value;\n }\n // test the value, removing the last character, until what you have is a submatch\n for ( i = l; i >= 0; i--) {\n testValue = value + validExample.substr(value.length);\n if (pattern.test(testValue)) {\n return value;\n } else {\n value = value.substr(0, value.length-1);\n }\n }\n\n return value;\n }\n};\n\nfor ( var property in inputMask ) {\n if (inputMask.hasOwnProperty(property)) {\n InputMask.prototype[ property ] = inputMask[ property ];\n }\n}\n\n// Declaritive initalization\n(function(){\n var scripts = document.getElementsByTagName('script'),\n script = scripts[ scripts.length - 1 ];\n if ( script.getAttribute('data-autoinit') ) {\n new InputMask();\n }\n})();\n\n\nwindow.InputMask = InputMask\n","import requestTimeout from './requestTimeout'\n\nexport const slideUp = (element, duration = 400) => {\n return new Promise(function (resolve) {\n element.style.height = element.offsetHeight + 'px'\n element.style.transitionProperty = `height, margin, padding`\n element.style.transitionDuration = duration + 'ms'\n element.offsetHeight\n element.style.overflow = 'hidden'\n element.style.height = 0\n element.style.paddingTop = 0\n element.style.paddingBottom = 0\n element.style.marginTop = 0\n element.style.marginBottom = 0\n\n requestTimeout(() => {\n element.style.display = 'none'\n element.style.removeProperty('height')\n element.style.removeProperty('padding-top')\n element.style.removeProperty('padding-bottom')\n element.style.removeProperty('margin-top')\n element.style.removeProperty('margin-bottom')\n element.style.removeProperty('overflow')\n element.style.removeProperty('transition-duration')\n element.style.removeProperty('transition-property')\n resolve(false)\n }, duration)\n })\n}\n\nexport const slideDown = (element, duration = 400) => {\n return new Promise(function (resolve) {\n element.style.removeProperty('display')\n let display = window.getComputedStyle(element).display\n\n if (display === 'none') display = 'block'\n\n element.style.display = display\n let height = element.offsetHeight\n element.style.overflow = 'hidden'\n element.style.height = 0\n element.style.paddingTop = 0\n element.style.paddingBottom = 0\n element.style.marginTop = 0\n element.style.marginBottom = 0\n element.offsetHeight\n element.style.transitionProperty = `height, margin, padding`\n element.style.transitionDuration = duration + 'ms'\n element.style.height = height + 'px'\n element.style.removeProperty('padding-top')\n element.style.removeProperty('padding-bottom')\n element.style.removeProperty('margin-top')\n element.style.removeProperty('margin-bottom')\n\n requestTimeout(() => {\n element.style.removeProperty('height')\n element.style.removeProperty('overflow')\n element.style.removeProperty('transition-duration')\n element.style.removeProperty('transition-property')\n resolve(false)\n }, duration)\n })\n}\n\nexport const slideToggle = (target, duration = 400) => {\n if (window.getComputedStyle(target).display === 'none') {\n return slideDown(target, duration)\n } else {\n return slideUp(target, duration)\n }\n}\n","import { slideUp, slideDown, slideToggle } from './slide'\nimport scrollTo from './scrollTo'\n\nwindow.App = {}\n\nwindow.App.SlideToggleGroup = () => {\n return {\n activeId: null,\n toggleItem(id) {\n const $target = this.$el.querySelector(`[data-toggle-id=\"${id}\"]`)\n\n if (this.activeId === id) {\n this.activeId = null\n slideUp($target)\n } else {\n this.activeId = id\n slideDown($target)\n this.closeOthers(id)\n }\n },\n closeOthers(id) {\n this.$el.querySelectorAll('[data-toggle-id]').forEach(($target) => {\n if (parseInt($target.dataset.toggleId, 10) !== id) {\n slideUp($target)\n }\n })\n },\n isItemActive(id) {\n return this.activeId === id\n },\n }\n}\n\nwindow.App.SlideToggle = () => {\n return {\n active: false,\n toggle() {\n const $target = this.$el.querySelector(`[data-toggle-target]`)\n slideToggle($target).then(scrollTo($target))\n\n this.active = !this.active\n },\n isActive() {\n return this.active\n },\n }\n}\n\nwindow.App.AnchorNav = () => {\n return {\n stuck: false,\n scroll() {\n const top = this.$el.getBoundingClientRect().top\n const headerOffset = parseInt(\n getComputedStyle(this.$el).getPropertyValue('--header-offset'),\n 10\n )\n\n this.stuck = top - headerOffset <= 0\n },\n }\n}\n\nwindow.App.AccordionTabs = () => {\n return {\n asTabs: window.innerWidth >= 768,\n activeId: null,\n isActive(id) {\n return this.activeId === id\n },\n setActive(id) {\n this.activeId = id\n },\n toggle(id) {\n const $target = this.$el.querySelector(`[data-toggle-id=\"${id}\"]`)\n\n if (this.activeId === id) {\n this.activeId = null\n slideUp($target)\n } else {\n this.activeId = id\n slideDown($target)\n this.closeOthers(id)\n }\n },\n closeOthers(id) {\n this.$el.querySelectorAll('[data-toggle-id]').forEach(($target) => {\n if (parseInt($target.dataset.toggleId, 10) !== id) {\n slideUp($target)\n }\n })\n },\n }\n}\n","import './styles/index.css'\nimport 'swiper/swiper-bundle.css'\nimport 'flatpickr/dist/flatpickr.css'\n\n// Thirdparty\nimport 'alpinejs'\nimport 'what-input'\nimport './scripts/thirdparty/masking-input'\n\n// App components\nimport './scripts/common/app'\n\n/*\n * Script loader\n *\n * Imports and runs all scripts in the `./scripts` directory\n * Scripts must have a default export with `can` and `run` functions\n *\n * export default {\n * can: () => boolean,\n * run: function to run if `can` is true\n * }\n */\ndocument.addEventListener('DOMContentLoaded', () => {\n ;((r) => {\n r.keys()\n .reduce((modules, script) => {\n const module = r(script).default\n if (module) {\n modules.push(module)\n }\n return modules\n }, [])\n .map(\n (module) =>\n (module.can === true || module.can()) && module.run()\n )\n })(require.context('scripts', true, /^(?!.*(common|thirdparty)).*\\.js$/))\n})\n","import wretch from 'wretch'\n\nexport default wretch().defaults({\n headers: { 'X-Requested-With': 'XMLHttpRequest' },\n})\n","const Selectors = function (selectors = {}) {\n return Object.assign(\n {\n asId(selectorKey) {\n return `#${this[selectorKey]}`\n },\n asClass(selectorKey) {\n return `.${this[selectorKey]}`\n },\n asString(selectorKey) {\n return selectorKey.replace(/^(#|\\.)/, '')\n },\n },\n selectors\n )\n}\n\nexport default Selectors\n","import { on } from 'delegated-events'\nimport easydropdown from 'easydropdown'\nimport scrollTo from '../common/scrollTo'\n\nconst fn = {\n init: () => {\n on(\n 'change',\n '.js-navigation-dropdown select',\n fn.handleNavigationSelect\n )\n on('change', '.js-anchor-dropdown select', fn.handleAnchorSelect)\n on('change', '.js-submit-dropdown select', fn.handleSubmitSelect)\n\n fn.setup()\n },\n\n setup: () => {\n document.querySelectorAll('.js-dropdown').forEach(($select) => {\n if (!$select.querySelector('[selected]')) {\n $select.selectedIndex = -1\n }\n\n fn.setupDropdown($select)\n })\n },\n\n handleNavigationSelect: (e) => {\n window.location.href = e.target.value\n },\n\n handleAnchorSelect: (e) => {\n const $target = document.querySelector(e.target.value)\n\n if ($target) {\n scrollTo($target).then(() => (e.target.selectedIndex = -1))\n }\n },\n\n handleSubmitSelect: (e) => {\n e.target.closest('form').submit()\n },\n\n setupDropdown: ($el) => {\n if ($el.tagName !== 'SELECT') {\n return\n }\n\n const $placeholder = $el.querySelector('option[value=\"\"]')\n\n if ($placeholder && !$placeholder.hasAttribute('data-placeholder')) {\n $placeholder.setAttribute('data-placeholder', true)\n }\n\n const opts = {\n behavior: {\n openOnFocus: true,\n maxVisibleItems: 8,\n liveUpdates: true,\n },\n }\n\n easydropdown($el, opts)\n },\n}\n\nexport const StyledDropdown = {\n init: ($select) => fn.setupDropdown($select),\n setup: () => fn.setup(),\n}\n\nexport default {\n can: () => true,\n run: fn.init,\n}\n","import ScrollReveal from 'scrollreveal'\nimport { Swiper, Navigation, EffectFade, Pagination } from 'swiper'\n\nSwiper.use([Navigation, EffectFade, Pagination])\n\nconst $sliders = document.querySelectorAll('[data-slider]')\n\nconst fn = {\n init: () => {\n $sliders.forEach(($slider) => {\n fn.setupSlider($slider)\n })\n },\n\n setupSlider: ($slider) => {\n if ($slider.querySelectorAll('.swiper-slide').length < 2) {\n return\n }\n\n const breakpoints = {}\n\n if ($slider.dataset.sliderMd) {\n const opts = JSON.parse($slider.dataset.sliderMd)\n\n breakpoints['768'] = opts\n }\n\n if ($slider.dataset.sliderLg) {\n const opts = JSON.parse($slider.dataset.sliderLg)\n\n breakpoints['1024'] = opts\n }\n\n new Swiper($slider, {\n on: {\n init: () => {\n ScrollReveal().sync()\n },\n },\n autoHeight: true,\n loop: true,\n loopFillGroupWithBlank: true,\n effect: $slider.dataset.sliderFade !== undefined ? 'fade' : 'slide',\n fadeEffect: {\n crossFade: true,\n },\n pagination: {\n el: $slider.querySelector('.slider-pagination'),\n clickable: true,\n },\n navigation: {\n prevEl: $slider.querySelector('.slider-prev'),\n nextEl: $slider.querySelector('.slider-next'),\n },\n breakpoints,\n })\n },\n}\n\nexport const Slider = {\n setupSlider: fn.setupSlider,\n}\n\nexport default {\n can: () => $sliders.length,\n run: fn.init,\n}\n","import jump from 'jump.js'\n\nconst getStuckHeight = () => {\n const $header = document.querySelector('.site-header')\n const $logo = $header.querySelector('.site-logo')\n const $pageAnchorNav = document.querySelector('.page-anchor-nav')\n\n let offest = 0\n\n if ($header) {\n if (window.matchMedia('(min-width: 1024px)').matches) {\n offest = $header.offsetHeight + 20\n } else {\n offest = $header.offsetHeight + $logo.offsetHeight / 4 + 20\n }\n }\n\n if ($pageAnchorNav) {\n offest += $pageAnchorNav.offsetHeight\n }\n\n return offest\n}\n\nconst scrollTo = ($target, additionalOffset = 0) => {\n const headerOffset = getStuckHeight() * -1\n const offset = headerOffset - additionalOffset\n\n return new Promise((resolve) => {\n jump($target, { duration: 500, offset, callback: resolve })\n })\n}\n\nexport default scrollTo\n"],"sourceRoot":""}