{"version":3,"sources":["webpack://stoneridgeresidences.com/./themes/app/src/index.js","webpack://stoneridgeresidences.com/./themes/app/src/scripts/common/ajax.js","webpack://stoneridgeresidences.com/./themes/app/src/scripts/common/requestTimeout.js","webpack://stoneridgeresidences.com/./themes/app/src/scripts/common/scrollTo.js","webpack://stoneridgeresidences.com/./themes/app/src/scripts/common/validation.js","webpack://stoneridgeresidences.com/./themes/app/src/scripts/components/animation.js","webpack://stoneridgeresidences.com/./themes/app/src/scripts/components/countUp.js","webpack://stoneridgeresidences.com/./themes/app/src/scripts/components/datepicker.js","webpack://stoneridgeresidences.com/./themes/app/src/scripts/components/donationForm.js","webpack://stoneridgeresidences.com/./themes/app/src/scripts/components/dropdown.js","webpack://stoneridgeresidences.com/./themes/app/src/scripts/components/elementToggler.js","webpack://stoneridgeresidences.com/./themes/app/src/scripts/components/featuredArticleSlider.js","webpack://stoneridgeresidences.com/./themes/app/src/scripts/components/form.js","webpack://stoneridgeresidences.com/./themes/app/src/scripts/components/mediaThumbnailSlider.js","webpack://stoneridgeresidences.com/./themes/app/src/scripts/components/modal.js","webpack://stoneridgeresidences.com/./themes/app/src/scripts/components/multistepform.js","webpack://stoneridgeresidences.com/./themes/app/src/scripts/components/pageHeaderSlider.js","webpack://stoneridgeresidences.com/./themes/app/src/scripts/components/panelLinkObserver.js","webpack://stoneridgeresidences.com/./themes/app/src/scripts/components/photoGallery.js","webpack://stoneridgeresidences.com/./themes/app/src/scripts/components/propertyMap.js","webpack://stoneridgeresidences.com/./themes/app/src/scripts/components/scrollTo.js","webpack://stoneridgeresidences.com/./themes/app/src/scripts/components/sectionNavigation.js","webpack://stoneridgeresidences.com/./themes/app/src/scripts/components/siteAnnouncement.js","webpack://stoneridgeresidences.com/./themes/app/src/scripts/components/siteHeader.js","webpack://stoneridgeresidences.com/./themes/app/src/scripts/components/siteNavigation.js","webpack://stoneridgeresidences.com/./themes/app/src/scripts/components/siteWidget.js","webpack://stoneridgeresidences.com/./themes/app/src/scripts/common/slide.js","webpack://stoneridgeresidences.com/./themes/app/src/scripts/components/slideToggle.js","webpack://stoneridgeresidences.com/./themes/app/src/scripts/components/tooltip.js","webpack://stoneridgeresidences.com/./themes/app/src/scripts/common/util.js","webpack://stoneridgeresidences.com/./themes/app/src/scripts/elements/calloutSlider.js","webpack://stoneridgeresidences.com/./themes/app/src/scripts/elements/fileSlider.js","webpack://stoneridgeresidences.com/./themes/app/src/scripts/elements/housingProperties.js","webpack://stoneridgeresidences.com/./themes/app/src/scripts/elements/mediaSlider.js","webpack://stoneridgeresidences.com/./themes/app/src/scripts/elements/milestones.js","webpack://stoneridgeresidences.com/./themes/app/src/scripts/elements/testimonials.js","webpack://stoneridgeresidences.com/./themes/app/src/scripts/sections/housing.js","webpack://stoneridgeresidences.com/.*(common)).*\\.js$/"],"names":["document","addEventListener","r","require","keys","reduce","modules","script","module","default","push","map","can","run","documentElement","classList","remove","wretch","defaults","headers","fn","delay","start","Date","getTime","handle","Object","loop","call","value","window","requestAnimationFrame","$target","additionalOffset","offset","siteHeader","querySelector","panelLinks","offsetHeight","getPageOffset","Promise","resolve","jump","duration","callback","validator","_","group","querySelectorAll","length","findFieldWrapper","$el","closest","handleBlur","e","$fieldWrapper","target","$existingErrorMessage","contains","handleValidation","$form","rules","forEach","$field","getAttribute","fieldName","dataset","name","presence","message","type","email","readonly","format","pattern","$radio","$checkbox","checkboxGroup","buildRules","result","validate","undefined","messages","entries","insertAdjacentHTML","add","shouldScroll","formScroll","$firstError","scrollTo","setTimeout","focus","init","setupScrollReveals","ScrollReveal","reveal","distance","origin","interval","opacity","afterReveal","el","countUpModule","counters","state","useGrouping","decimalPlaces","end","opts","counter","CountUp","_el","bindEvents","requestTimeout","update","throttle","index","verge","$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","form","totalField","submitButton","cardElement","getElementById","stripe","stripeCard","setupAmount","setupPayment","slider","marks","amountField","options","textContent","selectedValueIndex","indexOf","parseInt","replace","opt","i","activeClass","mark","createRange","createContextualFragment","appendChild","amount","setTotal","on","durationField","checked","Stripe","stripePubKey","isRepeating","setupStripeCard","handleSubmit","skipValidation","card","elements","create","style","base","fontSize","fontFamily","color","fontSmoothing","invalid","mount","error","forceSubmit","preventDefault","disabled","createToken","then","stripeTokenHandler","token","formMessages","hiddenInput","createElement","id","ajax","url","body","FormData","post","json","res","success","x","showFormMessages","catch","finally","holder","autoHide","display","innerHTML","handleNavigationSelect","handleScrollSelect","handleSubmitSelect","setup","select","selectedIndex","setupDropdown","easydropdown","refresh","submit","tagName","placeholder","hasAttribute","behavior","openOnFocus","maxVisibleItems","liveUpdates","StyledDropdown","toggler","handleToggle","elementToggler","groups","Swiper","Navigation","EffectFade","Pagination","setupSlider","textSliderContainer","imageSliderContainer","numSlides","imageSwiper","slidesPerView","spaceBetween","centeredSlides","slideToClickedSlide","breakpoints","768","slidesOffsetAfter","textSliderOpts","autoHeight","effect","fadeEffect","crossFade","slideChangeTransitionStart","swiper","slideTo","activeIndex","navigation","nextEl","prevEl","capture","handleLengthLimit","handleAjax","handleAllGroup","setupSpecialFields","maxLength","$label","$counter","$count","$labelHolder","cloneNode","replaceWith","isAll","allEl","$formMessages","$submitButton","autoHideMessage","toggleSubmit","reset","hideOnSubmit","toggle","$holder","Autoplay","Thumbs","mainContainer","thumbnailContainer","mainOpts","autoplay","speed","thumbnailOpts","watchSlidesVisibility","watchSlidesProgress","pagination","clickable","thumbnailSwiper","thumbs","handleOpen","autoOpenModal","openModal","modal","cssClass","buildImageModal","closeMethods","buildVideoModal","buildContentModal","buildEmbedModal","autoModal","Cookies","expires","autoModalVideo","buildModal","setContent","open","prototype","hasOwnProperty","concat","tingle","beforeOpen","closeBtn","onOpen","destroy","_currentModal","get","text","resp","handleAddManageGroupBlock","handleRemoveManageGroupBlock","handleUpdateManageGroupBlock","showToggles","setupManageGroups","$targetEl","toggleIf","split","targetValue","$toggleGroup","field","selectedValue","shouldShow","valid","$placeholder","files","parentNode","insertBefore","click","IMask","lazy","mask","$group","$block","blockIndex","addBlockToList","$button","$nextBlock","pendingLabel","toggleAddAction","limit","label","$list","$listItem","$listItemLabel","container","observer","IntersectionObserver","entry","isIntersecting","updateActiveLink","clearActiveLink","threshold","observe","link","lightGallery","gallery","activeCategory","initialGalleryData","activeGalleryData","photoGallery","handleCategories","handleTrigger","selected","category","images","startIndex","currentTarget","galleryIndex","galleryData","dynamic","dynamicEl","thumbnail","download","uid","lgData","once","google","propertyMap","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","event","addListenerOnce","placeMarkers","fitBounds","setupMarker","setupInfoWindow","marker","Marker","title","panposition","icon","marker_url","scaledSize","Size","extend","getPosition","addListener","openInfoWindow","info","InfoWindow","content","maxWidth","infoWindow","close","panCenter","latlng","offsetX","offsetY","point1","getProjection","fromLatLngToPoint","getCenter","point2","Point","Math","pow","getZoom","panTo","fromPointToLatLng","y","getLocationById","find","handleUrl","handleScrollToMe","handleClick","targetSelector","scroll","hash","navigationMenu","handleMenu","handleOutsideClick","stopPropagation","topBar","handleClose","setHeight","setProperty","header","searchForm","stuck","handleScroll","handleOpenSearch","handleCloseSearch","handleSearchSubmit","handleSearchKeyUp","getBoundingClientRect","top","bodyScrollLock","disableBodyScroll","enableBodyScroll","nav","navOpen","navMenu","navHeader","navHeaderTitle","menuStack","handleResize","closeMenu","openMenu","moveMenuPrev","moveMenuNext","handleMenuToggle","resetMenu","next","updateMenu","pop","currentMenuStack","menuDepth","transform","updateNavHeader","currentMenu","headerTitle","matchMedia","matches","setCookie","widget","slideToggle","getComputedStyle","element","removeProperty","height","overflow","paddingTop","paddingBottom","marginTop","marginBottom","transitionProperty","transitionDuration","slideDown","slideUp","keyCode","trigger","tooltips","tippy","theme","arrow","1024","handleNavigationControls","slideChangeTransitionEnd","slidePrev","slideNext","isBeginning","isEnd","handlePaginationControls","renderCustom","current","total","controls","handleControls","slidesPerColumn","slidesPerColumnFill","1280","blockSliderContainer","blockSwiper","formatFractionCurrent","number","toString","padStart","formatFractionTotal","textSwiper","blockSliderOpts","previousIndex","slides","slide","allowSlideNext","snapGrid","slidesGrid","restartBtn","keyContacts","setupKeyContactsSlider","webpackContext","req","webpackContextResolve","__webpack_require__","o","Error","code","exports"],"mappings":"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","file":"app.js","sourcesContent":["import 'swiper/swiper-bundle.css'\nimport 'flatpickr/dist/flatpickr.css'\nimport './styles/index.css'\n\n// Thirdparty\nimport 'what-input'\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((module) => (module.can === true || module.can()) && module.run())\n })(require.context('scripts', true, /^(?!.*(common)).*\\.js$/))\n\n document.documentElement.classList.remove('_preload')\n})\n","import wretch from 'wretch'\n\nexport default wretch().defaults({\n headers: { 'X-Requested-With': 'XMLHttpRequest' },\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 ? fn.call() : (handle.value = window.requestAnimationFrame(loop))\n }\n\n handle.value = window.requestAnimationFrame(loop)\n\n return handle\n}\n\nexport default requestTimeout\n","import jump from 'jump.js'\n\nconst getPageOffset = () => {\n let offset = 0\n\n const siteHeader = document.querySelector('.site-header')\n const panelLinks = document.querySelector('.panel-links')\n\n if (panelLinks) {\n offset += panelLinks.offsetHeight\n }\n\n if (siteHeader) {\n offset += siteHeader.offsetHeight\n }\n\n return offset\n}\n\nconst scrollTo = ($target, additionalOffset = 0) => {\n const pageOffset = getPageOffset() * -1\n let offset = pageOffset - additionalOffset\n\n return new Promise((resolve) => {\n jump($target, { duration: 500, offset, callback: resolve })\n })\n}\n\nexport default scrollTo\n","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('.form-field-message')\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('[required], input.required-if, .js-dropdown.required-if select, .optionset.required-if input')\n .forEach(($field) => {\n // Ignore hidden fields\n if (\n (findFieldWrapper($field) && findFieldWrapper($field).offsetHeight === 0) ||\n $field.getAttribute('readonly')\n ) {\n return\n }\n\n const fieldName = $field.dataset.name ? $field.dataset.name : $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 ((findFieldWrapper($field) && findFieldWrapper($field).offsetHeight === 0) || $field.readonly) {\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('.form-field-message')\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($firstError, 150, () => {\n setTimeout(() => {\n $firstError.querySelector('input') && $firstError.querySelector('input').focus()\n }, 0)\n })\n }\n\n return false\n }\n\n return true\n}\n\nexport const validate = validator\n","import ScrollReveal from 'scrollreveal'\n\nconst fn = {\n init: () => {\n fn.setupScrollReveals()\n },\n\n setupScrollReveals: () => {\n ScrollReveal().reveal('[data-sr-fade-up]', {\n distance: '125%',\n origin: 'bottom',\n interval: 50,\n })\n\n ScrollReveal().reveal('[data-sr-touch]', {\n opacity: 1,\n afterReveal: (el) => el.classList.add('sr-touched'),\n })\n\n ScrollReveal().reveal('[data-sr-fade-left]', {\n distance: '125%',\n origin: 'right',\n interval: 50,\n })\n\n ScrollReveal().reveal('[data-sr-fade-right]', {\n distance: '125%',\n origin: 'left',\n interval: 50,\n })\n },\n}\n\nexport default {\n can: () => true,\n run: fn.init,\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('data-name', this.input.getAttribute('name'))\n\n this.altInput.setAttribute('data-toggle-if', this.input.getAttribute('data-toggle-if'))\n }\n },\n })\n })\n\n $dateRanges.forEach(($el) => {\n const datesData = $el.dataset.dates ? JSON.parse($el.dataset.dates) : 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(selectedDates[0], 'Y-m-d')\n const to = instance.formatDate(selectedDates[1], 'Y-m-d')\n\n window.location.href = `${$el.closest('form').action}?from=${from}&to=${to}`\n }\n },\n onDayCreate: (dObj, dStr, fp, dayElem) => {\n if (datesData && datesData.includes(fp.formatDate(dayElem.dateObj, 'Y-m-d'))) {\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 } from '../common/validation'\n\nconst form = document.querySelector('.donation-form')\nconst totalField = form ? form.querySelector('#donate-total-field') : null\nconst submitButton = form ? form.querySelector('[name=action_submit]') : null\nconst cardElement = document.getElementById('card-element')\n\nconst state = {\n stripe: null,\n stripeCard: null,\n}\n\nconst fn = {\n init: () => {\n fn.setupAmount()\n fn.setupPayment()\n },\n\n setupAmount: () => {\n const slider = form.querySelector('input[type=range]')\n const marks = form.querySelector('.marks')\n const amountField = form.querySelector('input.donation-amount-field')\n const options = JSON.parse(form.querySelector('#amount-options').textContent)\n\n const setAmount = (amount) => {\n amountField.value = `$${amount}.00`\n\n fn.setTotal(amount)\n }\n\n const selectedValueIndex = options.indexOf(parseInt(amountField.value.replace('.00', '').replace('$', '')))\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.querySelector(`[data-index=\"${index}\"]`).classList.add('is-active')\n\n setAmount(options[index])\n })\n\n on('change', 'input.donation-amount-field', (e) => {\n const value = e.target.value.replace('.00', '').replace('$', '')\n\n fn.setTotal(value)\n })\n\n on('change', 'input[name=RepeatDonation]', (e) => {\n const durationField = form.querySelector('.duration-holder')\n\n if (e.target.checked) {\n durationField.classList.remove('hidden')\n } else {\n durationField.classList.add('hidden')\n }\n })\n },\n\n setTotal: (amount) => {\n totalField.textContent = `$${amount}`\n },\n\n setupPayment: () => {\n if (cardElement) {\n state.stripe = window.Stripe(form.dataset.stripePubKey)\n state.isRepeating = form.querySelector('[type=hidden][name=IsRepeating]')\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: 'Poppins, 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 const isValid = handleValidation(e.target)\n\n if (!isValid) {\n return\n }\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 } else {\n fn.stripeTokenHandler(result.token)\n }\n })\n\n return false\n },\n\n stripeTokenHandler: (token) => {\n const formMessages = form.querySelector('.form-messages')\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 submitButton.disabled = true\n\n ajax\n .url(form.action)\n .body(new FormData(form))\n .post()\n .json((res) => {\n if (res.success) {\n form.querySelectorAll('.form-content').forEach((x) => x.classList.add('hidden'))\n }\n\n if (res.message) {\n fn.showFormMessages(formMessages, res.message, res.success, false)\n }\n })\n .catch(() => {\n fn.showFormMessages(formMessages, 'Sorry, there was a problem with your submission')\n })\n .finally(() => {\n submitButton.disabled = false\n })\n },\n\n showFormMessages: (holder, message, success, autoHide) => {\n holder.style.display = 'block'\n holder.innerHTML = message\n\n if (success) {\n holder.classList.remove('form-message-error')\n } else {\n holder.classList.add('form-message-error')\n }\n\n if (autoHide) {\n setTimeout(() => {\n holder.style.display = 'none'\n }, 5000)\n }\n },\n}\n\nexport default {\n can: () => document.body.classList.contains('pagetype-donatepage'),\n run: fn.init,\n}\n","import { on } from 'delegated-events'\nimport easydropdown from 'easydropdown'\nimport scrollTo from '../common/scrollTo'\n\nconst fn = {\n init: () => {\n on('change', '.js-navigation-dropdown select', fn.handleNavigationSelect)\n on('change', '.js-scroll-dropdown select', fn.handleScrollSelect)\n on('change', '.js-submit-dropdown select', fn.handleSubmitSelect)\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 handleScrollSelect: (e) => {\n const target = document.querySelector(e.target.value)\n\n if (target) {\n scrollTo(target)\n\n e.target.value = null\n\n easydropdown(e.target).refresh()\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 { on } from 'delegated-events'\n\nconst toggler = document.querySelector('.element-toggler')\n\nconst fn = {\n init: () => {\n on('click', '[data-element-toggler]', fn.handleToggle)\n },\n\n handleToggle: (e) => {\n const target = e.target.dataset.elementToggler\n const groups = document.querySelectorAll('.panel')\n\n toggler.querySelectorAll('button').forEach((x) => x.classList.remove('btn-fill'))\n toggler.querySelector(`button[data-element-toggler=\"${target}\"]`).classList.add('btn-fill')\n\n if (target === 'all') {\n groups.forEach((x) => (x.style.display = 'block'))\n } else {\n groups.forEach((x) => (x.style.display = 'none'))\n\n document.querySelector(target).style.display = 'block'\n }\n },\n}\n\nexport default {\n can: () => toggler,\n run: fn.init,\n}\n","import { Swiper, Navigation, EffectFade, Pagination } from 'swiper'\n\nSwiper.use([Navigation, EffectFade, Pagination])\n\nconst fn = {\n init: () => {\n document.querySelectorAll('.featured-article-slider').forEach((el) => fn.setupSlider(el))\n },\n\n setupSlider: (el) => {\n const textSliderContainer = el.querySelector('.featured-article-text-slider .swiper-container')\n const imageSliderContainer = el.querySelector('.featured-article-image-slider .swiper-container')\n\n const numSlides = imageSliderContainer.querySelectorAll('.swiper-slide').length\n\n const imageSliderOpts = {\n slidesPerView: 'auto',\n spaceBetween: 40,\n centeredSlides: true,\n slideToClickedSlide: true,\n breakpoints: {\n 768: {\n centeredSlides: false,\n slidesOffsetAfter: 1000,\n },\n },\n }\n\n const imageSwiper = new Swiper(imageSliderContainer, imageSliderOpts)\n\n const textSliderOpts = {\n autoHeight: true,\n slidesPerView: 1,\n effect: 'fade',\n fadeEffect: {\n crossFade: true,\n },\n breakpoints: {\n 768: {\n autoHeight: false,\n },\n },\n on: {\n slideChangeTransitionStart: (swiper) => {\n imageSwiper.slideTo(swiper.activeIndex)\n },\n },\n }\n\n if (numSlides > 1) {\n textSliderOpts.navigation = {\n nextEl: textSliderContainer.querySelector('.featured-article-button-next'),\n prevEl: textSliderContainer.querySelector('.featured-article-button-prev'),\n }\n }\n\n new Swiper(textSliderContainer, textSliderOpts)\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'\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('keyup', 'textarea.has-length-limit', fn.handleLengthLimit, {\n capture: true,\n })\n on('submit', '[data-form-validate]:not(.multistepform)', (e) => handleValidation(e.target))\n on('submit', '[data-form-ajax]', fn.handleAjax)\n on('change', '.form-all-group input[type=\"checkbox\"]', fn.handleAllGroup)\n\n fn.setupSpecialFields()\n },\n\n setupSpecialFields: () => {\n document.querySelectorAll('form').forEach(($form) => {\n // Setup length limits\n $form.querySelectorAll('.form-field-wrapper.has-length-limit').forEach(($field) => {\n const $input = $field.querySelector('.has-length-limit')\n\n if ($input && $input.maxLength) {\n const $label = $field.querySelector('label')\n $label.classList.add('has-length-limit')\n\n const $counter = document.createElement('div')\n $counter.classList.add('length-limit-counter')\n\n const $count = document.createElement('span')\n $count.textContent = `(${$input.value.length}/${$input.maxLength})`\n\n $counter.appendChild($count)\n\n const $labelHolder = document.createElement('div')\n\n $labelHolder.classList.add('form-field-label')\n $labelHolder.appendChild($label.cloneNode(true))\n $labelHolder.appendChild($counter)\n\n $label.replaceWith($labelHolder)\n }\n })\n })\n },\n\n handleLengthLimit: (e) => {\n const $input = e.target.closest('.has-length-limit')\n const $field = $input.closest('.field.has-length-limit')\n\n if ($input && $field) {\n const $count = $field.querySelector('.length-limit-counter span')\n $count.textContent = `(${$input.value.length}/${$input.maxLength})`\n }\n },\n\n handleAllGroup: (e) => {\n const isAll = e.target.value === 'All'\n const group = e.target.closest('.form-all-group')\n\n if (group) {\n const allEl = group.querySelector('input[value=\"All\"]')\n\n if (allEl && isAll) {\n if (allEl.checked) {\n group.querySelectorAll('[type=\"checkbox\"]').forEach((x) => (x.checked = true))\n } else {\n group.querySelectorAll('[type=\"checkbox\"]').forEach((x) => (x.checked = false))\n }\n }\n\n if (allEl && !isAll) {\n allEl.checked = false\n }\n }\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 let autoHideMessage = true\n fn.toggleSubmit($submitButton)\n\n ajax\n .url($form.action)\n .body(new FormData($form))\n .post()\n .json((res) => {\n if (res.success) {\n $form.reset()\n $form.querySelectorAll('select').forEach((x) => (x.value = null))\n $form.querySelectorAll('.file-input-placeholder').forEach((x) => x.classList.add('is-hidden'))\n $form.querySelectorAll('.toggle-fields').forEach((x) => x.classList.add('hidden'))\n $form.querySelectorAll('textarea.has-length-limit').forEach((el) => {\n fn.handleLengthLimit({ target: el })\n })\n\n if ($form.dataset.hideOnSubmit) {\n $form.querySelectorAll('.form-content').forEach((x) => x.classList.add('hidden'))\n autoHideMessage = false\n }\n }\n\n if (res.message) {\n fn.showFormMessages($formMessages, res.message, res.success, autoHideMessage)\n }\n })\n .catch(() => {\n fn.showFormMessages($formMessages, 'Sorry, there was a problem with your submission')\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, success, autoHide) => {\n $holder.style.display = 'block'\n $holder.innerHTML = message\n\n if (success) {\n $holder.classList.remove('form-message-error')\n } else {\n $holder.classList.add('form-message-error')\n }\n\n if (autoHide) {\n setTimeout(() => {\n $holder.style.display = 'none'\n }, 5000)\n }\n },\n}\n\nexport default {\n can: () => true,\n run: fn.init,\n}\n","import { Swiper, Pagination, Autoplay, Thumbs, EffectFade } from 'swiper'\n\nSwiper.use([Pagination, Autoplay, Thumbs, EffectFade])\n\nconst fn = {\n init: () => {\n document.querySelectorAll('.media-thumbnail-slider').forEach((el) => fn.setupSlider(el))\n },\n\n setupSlider: (el) => {\n const mainContainer = el.querySelector('.swiper-container.main-swiper')\n const thumbnailContainer = el.querySelector('.swiper-container.thumbnail-swiper')\n\n if (!mainContainer) {\n return\n }\n\n const numSlides = mainContainer.querySelectorAll('.swiper-slide').length\n\n const mainOpts = {\n autoplay: {\n delay: 4000,\n },\n slidesPerView: 1,\n speed: 500,\n effect: 'fade',\n fadeEffect: {\n crossFade: true,\n },\n }\n\n const thumbnailOpts = {\n slidesPerView: 3,\n spaceBetween: 20,\n watchSlidesVisibility: true,\n watchSlidesProgress: true,\n }\n\n if (numSlides > 3) {\n thumbnailOpts.pagination = {\n el: thumbnailContainer.querySelector('.swiper-pagination'),\n type: 'bullets',\n clickable: true,\n }\n }\n\n if (numSlides > 1) {\n const thumbnailSwiper = new Swiper(thumbnailContainer, thumbnailOpts)\n\n mainOpts.thumbs = {\n swiper: thumbnailSwiper,\n }\n\n new Swiper(mainContainer, mainOpts)\n }\n },\n}\n\nexport default {\n can: () => true,\n run: fn.init,\n}\n","import Cookies from 'js-cookie'\nimport tingle from 'tingle.js'\nimport { on } from 'delegated-events'\n\nconst fn = {\n init: () => {\n on('click', '[data-modal]', fn.handleOpen)\n\n const autoOpenModal = document.querySelector('[data-auto-modal]')\n\n if (autoOpenModal) {\n fn.openModal(autoOpenModal)\n }\n },\n\n handleOpen: (e) => {\n if (e.target.tagName !== 'A' || (e.target.tagName === 'A' && e.target.dataset.modal)) {\n e.preventDefault()\n fn.openModal(e.target.closest('[data-modal]'))\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 ? el.dataset.href : el.getAttribute('href')\n modal = fn.buildContentModal(href, opts)\n }\n\n // Setup an embed modal\n if (el.dataset.modal === 'embed') {\n let opts = {\n cssClass: ['modal--embed'],\n closeMethods: ['button'],\n }\n\n modal = fn.buildEmbedModal(el.getAttribute('href'), opts)\n }\n\n // Setup an auto HTML modal\n if (el.dataset.autoModal !== undefined) {\n if (el.dataset.autoModal === 'setcookie') {\n Cookies.set('seenautomodal', true, {\n expires: 1,\n })\n }\n\n let opts = {\n cssClass: ['modal--content'],\n }\n\n if (el.dataset.autoModalVideo !== undefined) {\n opts.cssClass = ['modal--embed']\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('modal--loading')\n\n // Move the close button\n const closeBtn = modal.modal.querySelector('.tingle-modal__close')\n closeBtn.querySelector('.tingle-modal__closeIcon').innerHTML = `\n \n \n \n `\n modal.modal.querySelector('.tingle-modal-box').appendChild(closeBtn)\n },\n onOpen: () => {\n modal.modal.classList.remove('modal--loading')\n },\n onClose: () => {\n modal.destroy()\n\n if (window._currentModal) {\n window._currentModal = null\n }\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 return modal\n },\n\n buildEmbedModal: (href, opts = {}) => {\n const modal = fn.buildModal(opts)\n modal.setContent(``)\n\n return modal\n },\n\n buildContentModal: (href, opts = {}) => {\n const modal = fn.buildModal(opts)\n\n ajax\n .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 IMask from 'imask'\nimport { on } from 'delegated-events'\nimport { handleValidation, handleBlur } from '../common/validation'\n\nconst $form = document.querySelector('form.multistepform')\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('click', '.manage-group-remove-action', fn.handleRemoveManageGroupBlock)\n on('blur', '[data-manage-group-target]', fn.handleUpdateManageGroupBlock, {\n capture: true,\n })\n\n fn.showToggles()\n fn.setupSpecialFields()\n fn.setupManageGroups()\n },\n\n showToggles: () => {\n $form.querySelectorAll(`[data-toggle-if]`).forEach(($input) => {\n const $targetEl = $form.querySelector(`[name=\"${$input.dataset.toggleIf.split('|')[0]}\"]:checked`)\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 $form.querySelectorAll(`[data-toggle-if^=\"${name}|\"]`).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.querySelectorAll('input').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 $placeholder.textContent = e.target.files[0].name\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 },\n\n setupManageGroups: () => {\n const $groups = $form.querySelectorAll('.manage-group')\n\n $groups.forEach(($group) => {\n const $targets = $group.querySelectorAll('[data-manage-group-target]')\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($group, $button.dataset.pendingLabel, $nextBlock[0].dataset.index)\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('.manage-group-block:not(.hidden)').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(`.manage-group-block[data-index=\"${$button.dataset.index}\"]`)\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(`.manage-group-list [data-label-index=\"${blockIndex}\"]`)\n\n if ($input.value && $listItemLabel) {\n $listItemLabel.textContent = $input.value\n }\n },\n}\n\nexport default {\n can: () => $form,\n run: fn.init,\n}\n","import { Swiper, Autoplay, EffectFade } from 'swiper'\n\nSwiper.use([Autoplay, EffectFade])\n\nconst fn = {\n init: () => {\n document.querySelectorAll('.page-header-slider').forEach((el) => fn.setupSlider(el))\n },\n\n setupSlider: (el) => {\n const container = el.querySelector('.swiper-container')\n\n if (!container) {\n return\n }\n\n const numSlides = container.querySelectorAll('.swiper-slide').length\n\n const opts = {\n autoplay: {\n delay: 4000,\n },\n slidesPerView: 1,\n speed: 750,\n effect: 'fade',\n fadeEffect: {\n crossFade: true,\n },\n }\n\n if (numSlides > 1) {\n new Swiper(container, opts)\n }\n },\n}\n\nexport default {\n can: () => true,\n run: fn.init,\n}\n","const fn = {\n init: () => {\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n if (entry.target.classList.contains('panel') || entry.target.classList.contains('section-panel')) {\n fn.updateActiveLink(entry.target)\n } else {\n fn.clearActiveLink()\n }\n }\n })\n },\n {\n threshold: 1,\n }\n )\n\n document.querySelectorAll('section.panel').forEach((el) => observer.observe(el))\n\n document.querySelectorAll('section.section-panel').forEach((el) => observer.observe(el))\n\n observer.observe(document.querySelector('.page-header'))\n },\n\n updateActiveLink: (el) => {\n const link = document.querySelector(`.panel-link[data-panel-id=\"${el.id}\"]`)\n\n fn.clearActiveLink()\n\n if (link) {\n link.classList.add('is-active')\n }\n },\n\n clearActiveLink: () => {\n document.querySelectorAll('.panel-links .panel-link').forEach((x) => x.classList.remove('is-active'))\n },\n}\n\nexport default {\n can: () => document.body.classList.contains('has-panel-observer'),\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 gallery = document.querySelector('[data-photo-gallery]')\n\nconst state = {\n activeCategory: 'all',\n initialGalleryData: null,\n activeGalleryData: null,\n}\n\nconst fn = {\n init: () => {\n state.initialGalleryData = JSON.parse(gallery.dataset.photoGallery)\n state.activeGalleryData = JSON.parse(gallery.dataset.photoGallery)\n\n on('click', '.photo-gallery-categories button', fn.handleCategories)\n on('click', '[data-gallery-trigger]', fn.handleTrigger)\n },\n\n handleCategories: (e) => {\n const selected = e.target.closest('button').dataset.category\n gallery.querySelectorAll('.photo-gallery-categories button').forEach((el) => el.classList.remove('is-active'))\n gallery\n .querySelectorAll('.photo-gallery-categories button')\n .forEach((el) => el.dataset.category === selected && el.classList.add('is-active'))\n\n const images = gallery.querySelectorAll('.photo-gallery-image')\n\n if (selected === 'all') {\n images.forEach((el) => el.classList.remove('hidden'))\n } else {\n images.forEach((el) => el.classList.add('hidden'))\n images.forEach((el) => el.dataset.category === selected && el.classList.remove('hidden'))\n }\n },\n\n handleTrigger: (e) => {\n e.preventDefault()\n\n const startIndex = e.currentTarget.dataset.galleryIndex || 1\n const galleryData = state.activeGalleryData\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 (Object.prototype.hasOwnProperty.call(window.lgData, uid)) {\n window.lgData[uid].destroy(true)\n }\n },\n { once: true }\n )\n },\n}\n\nexport default {\n can: () => gallery,\n run: fn.init,\n}\n","const google = window.google\n\nconst propertyMap = document.querySelector('.property-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(state.locations[0].lat, state.locations[0].lng)\n\n fn.setupMap()\n },\n\n setupMap: () => {\n const opts = {\n center: state.mapCenter,\n zoom: 17,\n maxZoom: 17,\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 location of state.locations) {\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(marker, 'click', () => {\n fn.openInfoWindow(location)\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 (state.currentInfoWindow && state.currentInfoWindow != location.infoWindow) {\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(latlng instanceof google.maps.LatLng ? latlng : state.map.getCenter())\n\n const point2 = new google.maps.Point(\n (typeof offsetX === 'number' ? offsetX : 0) / Math.pow(2, state.map.getZoom()) || 0,\n (typeof offsetY === 'number' ? offsetY : 0) / Math.pow(2, state.map.getZoom()) || 0\n )\n\n state.map.panTo(\n state.map.getProjection().fromPointToLatLng(new google.maps.Point(point1.x - point2.x, point1.y + point2.y))\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: () => propertyMap,\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 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 if (targetSelector) {\n const target = document.querySelector(targetSelector)\n\n if (target) {\n e.preventDefault()\n\n document.documentElement.classList.remove('js-nav-active')\n\n if (window._currentModal && window._currentModal.modal) {\n window._currentModal.close()\n }\n\n scrollTo(target)\n }\n }\n },\n\n handleUrl: () => {\n if (window.location.hash) {\n let targetSelector = window.location.hash\n\n let target = document.querySelector(targetSelector)\n\n if (target) {\n scrollTo(target)\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'\n\nconst navigationMenu = document.querySelector('.section-navigation-menu')\n\nconst fn = {\n init: () => {\n on('click', '.section-navigation-trigger', fn.handleMenu)\n\n window.addEventListener('click', fn.handleOutsideClick)\n },\n\n handleMenu: (e) => {\n if (navigationMenu) {\n e.stopPropagation()\n\n navigationMenu.classList.toggle('is-active')\n document.documentElement.classList.toggle('overflow-hidden')\n }\n },\n\n handleOutsideClick: (e) => {\n if (navigationMenu && navigationMenu.classList.contains('is-active')) {\n if (!e.target.closest('.section-navigation-menu')) {\n navigationMenu.classList.remove('is-active')\n document.documentElement.classList.remove('overflow-hidden')\n }\n }\n },\n}\n\nexport default {\n can: () => true,\n run: fn.init,\n}\n","import { on } from 'delegated-events'\n\nconst topBar = document.querySelector('.site-announcement')\n\nconst fn = {\n init: () => {\n on('click', '.site-announcement-close', fn.handleClose)\n\n window.addEventListener('resize', fn.setHeight)\n fn.setHeight()\n },\n\n handleClose: () => {\n topBar.remove()\n fn.setHeight()\n },\n\n setHeight: () => {\n document.documentElement.style.setProperty('--site-announcement-height', `${topBar.offsetHeight}px`)\n },\n}\n\nexport default {\n can: () => topBar,\n run: fn.init,\n}\n","import { on } from 'delegated-events'\nimport requestTimeout from '../common/requestTimeout'\n\nconst header = document.querySelector('.site-header')\nconst searchForm = document.querySelector('.site-header-search form')\n\nconst state = {\n stuck: true,\n}\n\nconst fn = {\n init: () => {\n fn.handleScroll()\n fn.bindEvents()\n\n on('click', '.site-search-trigger', fn.handleOpenSearch)\n on('click', '.site-search-close', fn.handleCloseSearch)\n\n if (searchForm) {\n searchForm.addEventListener('submit', fn.handleSearchSubmit)\n searchForm.addEventListener('keyup', fn.handleSearchKeyUp)\n }\n },\n\n bindEvents: () => {\n window.addEventListener('scroll', fn.handleScroll)\n },\n\n handleScroll: () => {\n state.stuck = header.getBoundingClientRect().top <= 0\n header.classList.toggle('is-stuck', state.stuck)\n },\n\n handleOpenSearch: () => {\n document.documentElement.classList.add('js-search-active')\n\n requestTimeout(() => {\n searchForm.querySelector('input').focus()\n }, 250)\n },\n\n handleCloseSearch: () => {\n document.documentElement.classList.remove('js-search-active')\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: () => header,\n run: fn.init,\n}\n","import { on } from 'delegated-events'\nimport throttle from 'lodash/throttle'\nimport requestTimeout from '../common/requestTimeout'\n\nconst bodyScrollLock = require('body-scroll-lock')\nconst disableBodyScroll = bodyScrollLock.disableBodyScroll\nconst enableBodyScroll = bodyScrollLock.enableBodyScroll\n\nconst nav = document.querySelector('.site-mobile-menu')\nconst navOpen = document.querySelector('.site-mobile-menu-open')\nconst navMenu = document.querySelector('.site-nav-menu')\nconst navHeader = document.querySelector('.site-nav-header')\nconst navHeaderTitle = document.querySelector('.site-nav-header-title')\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', '.site-mobile-menu-open', fn.openMenu)\n on('click', '.site-mobile-menu-close', fn.closeMenu)\n on('click', '.site-nav-prev', fn.moveMenuPrev)\n on('click', '.site-nav-next', 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('js-menu-active')\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('.site-mobile-menu-open') &&\n (target.closest('.site-mobile-menu-close') || !target.closest('.site-mobile-menu'))\n ) {\n document.documentElement.classList.remove('js-menu-active')\n navOpen.setAttribute('aria-expanded', 'false')\n\n fn.resetMenu()\n enableBodyScroll(nav)\n }\n },\n\n moveMenuNext: ({ target }) => {\n const next = target.closest('.has-submenu').querySelector('.site-nav-submenu')\n state.menuStack.push(next)\n next.classList.add('is-active')\n fn.updateMenu()\n },\n\n moveMenuPrev: () => {\n const prev = state.menuStack.pop()\n prev.classList.remove('is-active')\n fn.updateMenu()\n },\n\n resetMenu: () => {\n const currentMenuStack = state.menuStack\n\n state.menuStack = []\n\n requestTimeout(() => {\n currentMenuStack.forEach((el) => el.classList.remove('is-active'))\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.closest('.has-submenu').querySelector('a:first-of-type')\n headerTitle = parentLink.getAttribute('title')\n }\n\n navHeaderTitle.textContent = headerTitle\n navHeader.classList.toggle('is-active', currentMenu !== undefined)\n nav.classList.toggle('is-active', currentMenu !== undefined)\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","import Cookies from 'js-cookie'\nimport { on } from 'delegated-events'\n\nconst setCookie = (state) => {\n Cookies.set('widgetstate', state, {\n expires: 1,\n })\n}\n\nconst widget = document.querySelector('.site-widget')\n\nconst fn = {\n init: () => {\n on('click', '.site-widget-top', fn.handleToggle)\n\n const offset = widget.querySelector('.site-widget-top').offsetHeight\n\n if (Cookies.get('widgetstate') === 'inactive') {\n widget.style.transform = `translate3d(0, calc(100% - ${offset}px), 0)`\n widget.setAttribute('aria-expanded', 'false')\n setCookie('inactive')\n } else {\n widget.style.transform = 'translate3d(0, 0, 0)'\n widget.setAttribute('aria-expanded', 'true')\n setCookie('active')\n }\n\n if (widget.classList.contains('has-auto-hide')) {\n setTimeout(() => {\n if (widget.getAttribute('aria-expanded') === 'true') {\n widget.style.transform = `translate3d(0, calc(100% - ${offset}px), 0)`\n widget.setAttribute('aria-expanded', 'false')\n setCookie('inactive')\n }\n }, 5000)\n }\n },\n\n handleToggle: () => {\n const offset = widget.querySelector('.site-widget-top').offsetHeight\n\n if (widget.getAttribute('aria-expanded') === 'false') {\n widget.style.transform = 'translate3d(0, 0, 0)'\n widget.setAttribute('aria-expanded', 'true')\n setCookie('active')\n } else {\n widget.style.transform = `translate3d(0, calc(100% - ${offset}px), 0)`\n widget.setAttribute('aria-expanded', 'false')\n setCookie('inactive')\n }\n },\n}\n\nexport default {\n can: () => widget,\n run: fn.init,\n}\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 { on } from 'delegated-events'\nimport { slideToggle } from '../common/slide'\n\nconst fn = {\n init: () => {\n on('click', '[data-slide-toggle]', fn.handleToggle)\n on('keyup', '[data-slide-toggle]', fn.handleToggle)\n },\n\n handleToggle: (e) => {\n if (e.type === 'keyup' && e.keyCode !== 13) {\n return\n }\n\n const trigger = e.target.closest('[data-slide-toggle]')\n\n if (!trigger) {\n return\n }\n\n const target = document.getElementById(trigger.getAttribute('aria-controls'))\n\n if (!target) {\n return\n }\n\n if (trigger.getAttribute('aria-expanded') === 'false') {\n slideToggle(target)\n trigger.setAttribute('aria-expanded', 'true')\n } else {\n slideToggle(target)\n trigger.setAttribute('aria-expanded', 'false')\n }\n },\n}\n\nexport default {\n can: () => true,\n run: fn.init,\n}\n","import { isTouchDevice } from '../common/util'\nimport tippy from 'tippy.js'\nimport 'tippy.js/dist/tippy.css'\nimport 'tippy.js/themes/light.css'\n\nconst tooltips = document.querySelectorAll('[data-tippy]')\n\nconst fn = {\n init: () => {\n if (!isTouchDevice()) {\n tippy('[data-tippy]', {\n theme: 'light',\n arrow: true,\n delay: 40,\n })\n }\n },\n}\n\nexport default {\n can: () => tooltips.length,\n run: fn.init,\n}\n","export const isTouchDevice = () => {\n return 'ontouchstart' in document.documentElement\n}\n","import { on } from 'delegated-events'\nimport { Swiper, Navigation } from 'swiper'\n\nSwiper.use([Navigation])\n\nconst fn = {\n init: () => {\n const elements = document.querySelectorAll('.element-calloutslider')\n\n if (elements.length) {\n elements.forEach((el) => fn.setupSlider(el))\n }\n },\n\n setupSlider: (el) => {\n const container = el.querySelector('.swiper-container')\n\n if (!container) {\n return\n }\n\n const numSlides = container.querySelectorAll('.swiper-slide').length\n\n const opts = {\n slidesPerView: 2,\n spaceBetween: 20,\n breakpoints: {\n 768: {\n slidesPerView: 2,\n spaceBetween: 0,\n },\n 1024: {\n spaceBetween: 0,\n slidesPerView: 3,\n },\n },\n on: {\n init: (swiper) => {\n fn.handleNavigationControls(swiper, el)\n },\n slideChangeTransitionEnd: (swiper) => {\n fn.handleNavigationControls(swiper, el)\n },\n },\n }\n\n if (numSlides > 1) {\n const swiper = new Swiper(container, opts)\n\n on('click', '.callout-slider-button-prev', () => {\n swiper.slidePrev()\n })\n\n on('click', '.callout-slider-button-next', () => {\n swiper.slideNext()\n })\n }\n },\n\n handleNavigationControls: (swiper, el) => {\n el.querySelector('.callout-slider-button-prev').classList.remove('swiper-button-disabled')\n el.querySelector('.callout-slider-button-next').classList.remove('swiper-button-disabled')\n\n if (swiper.isBeginning) {\n el.querySelector('.callout-slider-button-prev').classList.add('swiper-button-disabled')\n }\n\n if (swiper.isEnd) {\n el.querySelector('.callout-slider-button-next').classList.add('swiper-button-disabled')\n }\n },\n}\n\nexport default {\n can: () => true,\n run: fn.init,\n}\n","import { Swiper, Navigation, Pagination } from 'swiper'\n\nSwiper.use([Navigation, Pagination])\n\nconst fn = {\n init: () => {\n const elements = document.querySelectorAll('.fileslider')\n\n if (elements.length) {\n elements.forEach((el) => fn.setupSlider(el))\n\n window.addEventListener('resize', fn.handlePaginationControls)\n\n fn.handlePaginationControls()\n }\n },\n\n setupSlider: (el) => {\n const container = el.querySelector('.swiper-container')\n\n const numSlides = container.querySelectorAll('.swiper-slide').length\n\n const opts = {\n slidesPerView: 1,\n spaceBetween: 16,\n pagination: {\n el: container.querySelector('.fileslider-text-pagination'),\n type: 'custom',\n renderCustom: (_, current, total) => {\n return `(${current}/${total})`\n },\n },\n breakpoints: {\n 768: {\n slidesPerView: 3,\n spaceBetween: 16,\n },\n 1024: {\n slidesPerView: 4,\n spaceBetween: 48,\n },\n },\n }\n\n if (numSlides > 1) {\n opts.navigation = {\n nextEl: container.querySelector('.fileslider-button-next'),\n prevEl: container.querySelector('.fileslider-button-prev'),\n }\n }\n\n new Swiper(container, opts)\n },\n\n handlePaginationControls: () => {\n document.querySelectorAll('.fileslider .swiper-container').forEach((el) => {\n const numSlides = el.querySelectorAll('.swiper-slide').length\n const controls = el.querySelector('.fileslider-controls')\n\n if (numSlides < 2) {\n return\n }\n\n if (controls) {\n controls.classList.remove('invisible')\n\n if (window.matchMedia('(min-width: 768px)').matches && numSlides < 4) {\n controls.classList.add('invisible')\n }\n\n if (window.matchMedia('(min-width: 1024px)').matches && numSlides < 5) {\n controls.classList.add('invisible')\n }\n }\n })\n },\n}\n\nexport default {\n can: () => true,\n run: fn.init,\n}\n","import { Swiper, Navigation, Pagination } from 'swiper'\n\nSwiper.use([Navigation, Pagination])\n\nconst fn = {\n init: () => {\n const elements = document.querySelectorAll('.housing-properties-slider')\n\n if (elements.length) {\n elements.forEach((el) => fn.setupSlider(el))\n\n window.addEventListener('resize', fn.handleControls)\n\n fn.handleControls()\n }\n },\n\n setupSlider: (el) => {\n const container = el.querySelector('.swiper-container')\n\n if (!container) {\n return\n }\n\n const numSlides = container.querySelectorAll('.swiper-slide').length\n\n const opts = {\n slidesPerView: 1,\n pagination: {\n el: container.querySelector('.housing-properties-slider-pagination'),\n type: 'custom',\n renderCustom: function (_, current, total) {\n return `(${current}/${total})`\n },\n },\n breakpoints: {\n 768: {\n slidesPerView: 2,\n slidesPerColumn: 2,\n slidesPerColumnFill: 'row',\n spaceBetween: 20,\n },\n 1024: {\n slidesPerView: 3,\n slidesPerColumn: 2,\n slidesPerColumnFill: 'row',\n spaceBetween: 20,\n },\n 1280: {\n slidesPerView: 3,\n slidesPerColumn: 2,\n slidesPerColumnFill: 'row',\n spaceBetween: 40,\n },\n },\n }\n\n if (numSlides > 1) {\n opts.navigation = {\n nextEl: container.querySelector('.housing-properties-slider-button-next'),\n prevEl: container.querySelector('.housing-properties-slider-button-prev'),\n }\n\n new Swiper(container, opts)\n }\n },\n\n handleControls: () => {\n document.querySelectorAll('.housing-properties-slider .swiper-container').forEach((el) => {\n const numSlides = el.querySelectorAll('.swiper-slide').length\n const controls = el.querySelector('.housing-properties-slider-controls')\n\n if (numSlides < 2) {\n return\n }\n\n if (controls) {\n controls.classList.remove('invisible')\n\n if (window.matchMedia('(min-width: 768px)').matches && numSlides < 5) {\n controls.classList.add('invisible')\n }\n\n if (window.matchMedia('(min-width: 1024px)').matches && numSlides < 7) {\n controls.classList.add('invisible')\n }\n }\n })\n },\n}\n\nexport default {\n can: () => true,\n run: fn.init,\n}\n","import { Swiper, Navigation } from 'swiper'\n\nSwiper.use([Navigation])\n\nconst fn = {\n init: () => {\n const elements = document.querySelectorAll('.element-mediaslider')\n\n if (elements.length) {\n elements.forEach((el) => fn.setupSlider(el))\n\n window.addEventListener('resize', fn.handleNavigationControls)\n\n fn.handleNavigationControls()\n }\n },\n\n setupSlider: (el) => {\n const container = el.querySelector('.swiper-container')\n\n const numSlides = container.querySelectorAll('.swiper-slide').length\n\n const opts = {\n slidesPerView: 1,\n breakpoints: {\n 768: {\n slidesPerView: 2,\n spaceBetween: 24,\n },\n 1024: {\n slidesPerView: 3,\n spaceBetween: 24,\n },\n 1280: {\n slidesPerView: 3,\n spaceBetween: 40,\n },\n },\n }\n\n if (numSlides > 1) {\n opts.navigation = {\n nextEl: container.querySelector('.mediaslider-button-next'),\n prevEl: container.querySelector('.mediaslider-button-prev'),\n }\n\n new Swiper(container, opts)\n }\n },\n\n handleNavigationControls: () => {\n document.querySelectorAll('.element-mediaslider .swiper-container').forEach((el) => {\n const numSlides = el.querySelectorAll('.swiper-slide').length\n const controls = el.querySelector('.mediaslider-controls')\n\n if (numSlides < 2) {\n return\n }\n\n if (controls) {\n controls.classList.remove('invisible')\n\n if (window.matchMedia('(min-width: 768px)').matches && numSlides < 3) {\n controls.classList.add('invisible')\n }\n\n if (window.matchMedia('(min-width: 1024px)').matches && numSlides < 4) {\n controls.classList.add('invisible')\n }\n }\n })\n },\n}\n\nexport default {\n can: () => true,\n run: fn.init,\n}\n","import { Swiper, Navigation, EffectFade, Pagination } from 'swiper'\n\nSwiper.use([Navigation, EffectFade, Pagination])\n\nconst fn = {\n init: () => {\n document.querySelectorAll('.milestones-slider').forEach((el) => fn.setupSlider(el))\n },\n\n setupSlider: (el) => {\n const textSliderContainer = el.querySelector('.milestones-text-slider .swiper-container')\n const blockSliderContainer = el.querySelector('.milestones-block-slider .swiper-container')\n const numSlides = blockSliderContainer.querySelectorAll('.swiper-slide').length\n\n let blockSwiper = null\n\n const textSliderOpts = {\n autoHeight: true,\n slidesPerView: 1,\n effect: 'fade',\n pagination: {\n el: textSliderContainer.querySelector('.milestones-text-pagination'),\n type: 'fraction',\n formatFractionCurrent: (number) => number.toString().padStart(2, '0'),\n formatFractionTotal: (number) => number.toString().padStart(2, '0'),\n },\n fadeEffect: {\n crossFade: true,\n },\n breakpoints: {\n 768: {\n autoHeight: false,\n },\n },\n on: {\n slideChangeTransitionStart: (swiper) => {\n blockSwiper.slideTo(swiper.activeIndex)\n },\n },\n }\n\n if (numSlides > 1) {\n textSliderOpts.navigation = {\n nextEl: textSliderContainer.querySelector('.milestones-button-next'),\n prevEl: textSliderContainer.querySelector('.milestones-button-prev'),\n }\n }\n\n const textSwiper = new Swiper(textSliderContainer, textSliderOpts)\n\n const blockSliderOpts = {\n slidesPerView: 'auto',\n spaceBetween: 40,\n centeredSlides: true,\n slideToClickedSlide: true,\n breakpoints: {\n 768: {\n centeredSlides: false,\n slidesOffsetAfter: 1000,\n },\n },\n on: {\n slideChangeTransitionStart: (swiper) => {\n textSwiper.slideTo(swiper.activeIndex)\n\n if (swiper.activeIndex > swiper.previousIndex) {\n swiper.slides.forEach((slide, index) => {\n if (index < swiper.activeIndex) {\n slide.classList.add('opacity-0')\n }\n })\n } else {\n swiper.slides.forEach((slide, index) => {\n if (index === swiper.activeIndex) {\n slide.classList.remove('opacity-0')\n }\n })\n }\n\n swiper.allowSlideNext = swiper.activeIndex < swiper.slides.length\n },\n },\n }\n\n blockSwiper = new Swiper(blockSliderContainer, blockSliderOpts)\n\n blockSwiper.snapGrid = [...blockSwiper.slidesGrid]\n\n const restartBtn = textSliderContainer.querySelector('.milestones-slider-restart')\n\n if (restartBtn) {\n restartBtn.addEventListener('click', () => {\n blockSwiper.slideTo(0)\n blockSwiper.slides.forEach((slide) => slide.classList.remove('opacity-0'))\n })\n }\n },\n}\n\nexport default {\n can: () => true,\n run: fn.init,\n}\n","import { Swiper, Navigation, EffectFade } from 'swiper'\n\nSwiper.use([Navigation, EffectFade])\n\nconst fn = {\n init: () => {\n document.querySelectorAll('.testimonials-slider').forEach((el) => fn.setupSlider(el))\n },\n\n setupSlider: (el) => {\n const container = el.querySelector('.swiper-container')\n\n if (!container) {\n return\n }\n\n const numSlides = container.querySelectorAll('.swiper-slide').length\n\n const opts = {\n slidesPerView: 1,\n speed: 500,\n effect: 'fade',\n fadeEffect: {\n crossFade: true,\n },\n }\n\n if (numSlides > 1) {\n opts.navigation = {\n nextEl: container.querySelector('.testimonials-slider-button-next'),\n prevEl: container.querySelector('.testimonials-slider-button-prev'),\n }\n\n new Swiper(container, opts)\n }\n },\n}\n\nexport default {\n can: () => true,\n run: fn.init,\n}\n","import { Swiper, Pagination } from 'swiper'\n\nSwiper.use([Pagination])\n\nconst fn = {\n init: () => {\n const keyContacts = document.querySelector('.key-contacts')\n\n if (keyContacts) {\n fn.setupKeyContactsSlider(keyContacts)\n }\n },\n\n setupKeyContactsSlider: (el) => {\n const container = el.querySelector('.swiper-container')\n\n const numSlides = container.querySelectorAll('.swiper-slide').length\n\n const opts = {\n slidesPerView: 1,\n pagination: {\n el: container.querySelector('.swiper-pagination'),\n clickable: true,\n },\n }\n\n if (numSlides > 1) {\n new Swiper(container, opts)\n }\n },\n}\n\nexport default {\n can: () => document.body.classList.contains('pagetype-housingpage'),\n run: fn.init,\n}\n","var map = {\n\t\"./components/animation.js\": 7587,\n\t\"./components/countUp.js\": 7160,\n\t\"./components/datepicker.js\": 7965,\n\t\"./components/donationForm.js\": 3551,\n\t\"./components/dropdown.js\": 2064,\n\t\"./components/elementToggler.js\": 2650,\n\t\"./components/featuredArticleSlider.js\": 347,\n\t\"./components/form.js\": 7577,\n\t\"./components/mediaThumbnailSlider.js\": 3694,\n\t\"./components/modal.js\": 3568,\n\t\"./components/multistepform.js\": 9639,\n\t\"./components/pageHeaderSlider.js\": 7089,\n\t\"./components/panelLinkObserver.js\": 1174,\n\t\"./components/photoGallery.js\": 9995,\n\t\"./components/propertyMap.js\": 267,\n\t\"./components/scrollTo.js\": 9644,\n\t\"./components/sectionNavigation.js\": 9399,\n\t\"./components/siteAnnouncement.js\": 7754,\n\t\"./components/siteHeader.js\": 6835,\n\t\"./components/siteNavigation.js\": 1547,\n\t\"./components/siteWidget.js\": 1596,\n\t\"./components/slideToggle.js\": 4728,\n\t\"./components/tooltip.js\": 9870,\n\t\"./elements/calloutSlider.js\": 8520,\n\t\"./elements/fileSlider.js\": 9383,\n\t\"./elements/housingProperties.js\": 7959,\n\t\"./elements/mediaSlider.js\": 4540,\n\t\"./elements/milestones.js\": 6763,\n\t\"./elements/testimonials.js\": 5238,\n\t\"./sections/housing.js\": 3365\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 = 5014;"],"sourceRoot":""}