{"version":3,"sources":["core/@hoverToTouch.js","core/@http.js","core/@objectFit.js","core/@outlineAccessibility.js","core/@scrollToElement.js","core/@testChrome.js","core/@urlExternalSafe.js","helpers/@filterPagination.js","helpers/@formHelper.js","helpers/@formValidation.js","helpers/@pagination.js","helpers/@searchFilter.js","site/aosAnimate.js","site/areas.js","site/aside.js","site/filter.js","site/formContact.js","site/header.js","site/hero.js","site/loadMore.js","site/masonry.js","site/modal.js","site/nav.js","site/news.js","site/range.js","site/search.js","site/slider.js","site/sliderBox.js","site/social.js","site/tableFilter.js","site/toggle.js","site/video.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"app.js","sourcesContent":["const hoverToTouch = {\r\n\tel: {\r\n\t\tbody: document.body\r\n\t},\r\n\tinit() {\r\n\t\tthis.el.body.addEventListener('touchstart', () => {})\r\n\t}\r\n}\r\n\r\nhoverToTouch.init()","/* global axios*/\r\nconst http = {\r\n\tel: {\r\n\t\tsearch: document.querySelector('.search'),\r\n\t\tnewsContainer: document.querySelector('.js-get-news')\r\n\t},\r\n\r\n\tfxPreloaderFilterAddHelper(spinnerElement, el) {\r\n\t\tspinnerElement.innerHTML = ''\r\n\t\tspinnerElement.classList.add('is-loading')\r\n\t\tspinnerElement.innerHTML += '
'\r\n\t\tel.closest('.js-search').querySelector('.pagination').style.display = 'none'\r\n\t\tel.querySelector('.filter-search__text').style.display = 'none'\r\n\t\tthis.el.search.querySelector('.search-results__article') && this.el.search.querySelectorAll('.search-results__article').forEach(el => el.style.display = 'none')\r\n\t},\r\n\r\n\tfxPreloaderFilterRemoveHelper(spinnerElement, el) {\r\n\t\tspinnerElement.classList.remove('is-loading')\r\n\t\tspinnerElement.removeAttribute('style')\r\n\t\tspinnerElement.innerHTML = ''\r\n\t\tel.closest('.js-search').querySelector('.pagination').removeAttribute('style')\r\n\t\tel.querySelector('.filter-search__text').removeAttribute('style')\r\n\t\tthis.el.search.querySelector('.search-results__article') && this.el.search.querySelectorAll('.search-results__article').forEach(el => el.removeAttribute('style'))\r\n\t},\r\n\r\n\tfxpreloaderAddHelper(spinnerElement) {\r\n\t\tspinnerElement.classList.add('is-loading')\r\n\t\tspinnerElement.innerHTML += '
'\r\n\t},\r\n\r\n\tfxpreloaderRemoveHelper(spinnerElement) {\r\n\t\tspinnerElement.classList.remove('is-loading')\r\n\t\tspinnerElement.querySelector('.is-loading-spinner').outerHTML = ''\r\n\t},\r\n\r\n\tfxPreloader() {\r\n\t\t// Add a request interceptor\r\n\t\taxios.interceptors.request.use(config => {\r\n\r\n\t\t\tif (this.el.search.classList.contains('is-search-open')) {\r\n\t\t\t\tdocument.querySelectorAll('.filter-search').forEach(el => {\r\n\t\t\t\t\tconst spinnerElement = el.nextElementSibling\r\n\t\t\t\t\tthis.fxPreloaderFilterAddHelper(spinnerElement, el)\r\n\t\t\t\t})\r\n\t\t\t}\r\n\r\n\t\t\telse if (document.querySelectorAll('.filter-search').length > 1 && !this.el.search.classList.contains('is-search-open')) {\r\n\t\t\t\tdocument.querySelectorAll('.filter-search').forEach(el => {\r\n\t\t\t\t\tconst spinnerElement = el.nextElementSibling.classList.contains('search-results') ? el.nextElementSibling : el.nextElementSibling.children[0]\r\n\t\t\t\t\tthis.fxPreloaderFilterAddHelper(spinnerElement, el)\r\n\t\t\t\t})\r\n\t\t\t}\r\n\r\n\t\t\telse {\r\n\t\t\t\tthis.el.newsContainer && this.fxpreloaderAddHelper(document.querySelector('.js-get-news .media__list'))\r\n\t\t\t\tdocument.querySelectorAll('.js-form-contact .js-submit').forEach(el => this.fxpreloaderAddHelper(el))\r\n\t\t\t}\r\n\r\n\t\t\treturn config\r\n\r\n\t\t}, error => Promise.reject(error))\r\n\r\n\t\t// Add a response interceptor\r\n\t\taxios.interceptors.response.use(response => {\r\n\t\t\t// Any status code that lie within the range of 2xx cause this function to trigger\r\n\t\t\t// Do something with response data\r\n\t\t\tif (this.el.search.classList.contains('is-search-open')) {\r\n\t\t\t\tdocument.querySelectorAll('.filter-search').forEach(el => {\r\n\t\t\t\t\tconst spinnerElement = el.nextElementSibling\r\n\t\t\t\t\tthis.fxPreloaderFilterRemoveHelper(spinnerElement, el)\r\n\t\t\t\t})\r\n\r\n\t\t\t}\r\n\r\n\t\t\telse if (document.querySelectorAll('.filter-search').length > 1 && !this.el.search.classList.contains('is-search-open')) {\r\n\t\t\t\tdocument.querySelectorAll('.filter-search').forEach(el => {\r\n\t\t\t\t\tconst spinnerElement = el.nextElementSibling.classList.contains('search-results') ? el.nextElementSibling : el.nextElementSibling.children[0]\r\n\t\t\t\t\tthis.fxPreloaderFilterRemoveHelper(spinnerElement, el)\r\n\t\t\t\t})\r\n\t\t\t}\r\n\r\n\t\t\telse {\r\n\t\t\t\tthis.el.newsContainer && this.fxpreloaderRemoveHelper(document.querySelector('.js-get-news .media__list'))\r\n\t\t\t\tdocument.querySelectorAll('.js-form-contact .js-submit').forEach(el => this.fxpreloaderRemoveHelper(el))\r\n\t\t\t}\r\n\r\n\t\t\treturn response\r\n\t\t}, error => Promise.reject(error))\r\n\t},\r\n\r\n\tfxPost(endpoint, formData, callback) {\r\n\t\treturn axios.post(endpoint, formData)\r\n\t\t\t.then(result => {\r\n\t\t\t\tcallback(result)\r\n\t\t\t\treturn result\r\n\t\t\t})\r\n\t\t\t.catch(error => callback({ ...error }))\r\n\t},\r\n\r\n\tfxGet(endpoint, callback) {\r\n\t\treturn axios.get(endpoint)\r\n\t\t\t.then(result => {\r\n\t\t\t\tcallback(result)\r\n\t\t\t\treturn result\r\n\t\t\t})\r\n\t\t\t.catch(error => callback({ ...error }))\r\n\t}\r\n}\r\n\r\nhttp.fxPreloader()","const objectFit = {\r\n\r\n\tevents() {\r\n\t\tif ('objectFit' in document.documentElement.style === false) {\r\n\t\t\tdocument.addEventListener('DOMContentLoaded', () => {\r\n\t\t\t\tdocument.querySelectorAll('img[data-object-fit]').forEach(image => {\r\n\t\t\t\t\t(image.runtimeStyle || image.style).background = `url(\"${image.src}\") no-repeat 50%/${image.currentStyle ? image.currentStyle['object-fit'] : image.getAttribute('data-object-fit')}`\r\n\t\t\t\t\timage.src = `data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='${image.width}' height='${image.height}'%3E%3C/svg%3E`\r\n\t\t\t\t})\r\n\t\t\t})\r\n\t\t}\r\n\t},\r\n\r\n\tinit() {\r\n\t\tthis.events()\r\n\t}\r\n}\r\n\r\nobjectFit.init()","const accessibility = {\r\n\tel: {\r\n\t\tdoc: document,\r\n\t\thtml: document.documentElement\r\n\t},\r\n\r\n\tevents() {\r\n\t\tthis.el.doc.addEventListener('keydown', e => e.key === 'Tab' ? this.el.html.classList.add('a11y') : '')\r\n\t\tthis.el.doc.addEventListener('click', () => {\r\n\t\t\tif (this.el.html.classList.contains('a11y'))\r\n\t\t\t\tthis.el.html.classList.remove('a11y')\r\n\t\t\telse\r\n\t\t\t\treturn false\r\n\t\t})\r\n\t},\r\n\r\n\tinit() {\r\n\t\tthis.events()\r\n\t}\r\n}\r\n\r\naccessibility.init()","const scrollToElement = {\r\n\tel: {\r\n\t\tbtnScroll: document.querySelectorAll('.js-scrollto'),\r\n\t\theader: document.querySelector('.header'),\r\n\t\tsticky: document.querySelector('.sticky'),\r\n\t\taside: document.querySelector('.aside'),\r\n\t\tasideToggleMobile: document.querySelector('.js-toggle-aside'),\r\n\t\taccordion: document.querySelector('.accordion'),\r\n\t\tmap: document.querySelector('.map')\r\n\t},\r\n\r\n\tvars: {\r\n\t\textraLargeAndUp: window.matchMedia('(min-width: 80em)')\r\n\t},\r\n\t// polyfilled smooth scrolling for Edge & Safari\r\n\tfxSmoothScrollToPolyfill(to, duration) {\r\n\t\tconst element = document.scrollingElement || document.documentElement,\r\n\t\t\tstart = element.scrollTop,\r\n\t\t\tchange = to - start,\r\n\t\t\tstartDate = Number(new Date())\r\n\r\n\t\t// t = current time b = start value c = change in value d = duration\r\n\t\tconst easeInOutQuad = (t, b, c, d) => {\r\n\t\t\tt /= d / 2\r\n\t\t\tif (t < 1) return c / 2 * t * t + b\r\n\t\t\tt--\r\n\t\t\treturn -c / 2 * (t * (t - 2) - 1) + b\r\n\t\t}\r\n\r\n\t\tconst animateScroll = () => {\r\n\t\t\tconst currentDate = Number(new Date()),\r\n\t\t\t\tcurrentTime = currentDate - startDate\r\n\r\n\t\t\telement.scrollTop = parseInt(easeInOutQuad(currentTime, start, change, duration))\r\n\t\t\tcurrentTime < duration ? requestAnimationFrame(animateScroll) : element.scrollTop = to\r\n\r\n\t\t}\r\n\t\tanimateScroll()\r\n\t},\r\n\r\n\tfxScrollTarget(target) {\r\n\t\tconst headerHeight = this.el.header.offsetHeight,\r\n\t\t\tasideStickyHeight = this.el.asideToggleMobile ? this.el.asideToggleMobile.offsetHeight : 0,\r\n\t\t\tsupportsNativeSmoothScroll = 'scrollBehavior' in document.documentElement.style,\r\n\t\t\toffsetTopElement = target.closest('.accordion') && this.el.map ? this.el.accordion.offsetParent.offsetTop + target.offsetTop : target.offsetTop\r\n\r\n\t\tif (supportsNativeSmoothScroll) {\r\n\t\t\twindow.scrollTo({\r\n\t\t\t\tbehavior: 'smooth',\r\n\t\t\t\ttop: offsetTopElement - (this.el.header ? headerHeight : 0) - (this.el.asideToggleMobile && !this.vars.extraLargeAndUp.matches ? asideStickyHeight : 0) + 1\r\n\t\t\t})\r\n\t\t}\r\n\t\telse\r\n\t\t\tthis.fxSmoothScrollToPolyfill(target.offsetTop - (this.el.header ? headerHeight : 0) - (this.el.asideToggleMobile && !this.vars.extraLargeAndUp.matches ? asideStickyHeight : 0) + 1, 500)\r\n\t},\r\n\r\n\tfxScrollTo(btnScrollTo, target) {\r\n\t\tbtnScrollTo.forEach(button => button.addEventListener('click', e => {\r\n\t\t\te.preventDefault()\r\n\t\t\tconst searchContainer = button.closest('.js-search') ? button.closest('.js-search') : button.closest('.modal') ? button.closest('.modal').previousElementSibling : button.closest('.pagination') ? button.closest('.pagination').previousElementSibling : ''\r\n\r\n\t\t\tconst isMapContainer = button.closest('.map') ? button.closest('.map') : ''\r\n\r\n\t\t\ttarget = btnScrollTo === this.el.btnScroll ? document.getElementById(button.dataset.scroll) : (searchContainer.querySelector('.js-autocomplete') ? searchContainer.querySelector('.js-autocomplete') : searchContainer)\r\n\r\n\t\t\tif (target) {\r\n\t\t\t\tif (isMapContainer) {\r\n\t\t\t\t\tdocument.querySelectorAll('.js-toggle-accordion').forEach(el => el.classList.remove('is-toggled'))\r\n\t\t\t\t\tdocument.querySelectorAll('.accordion__panel').forEach(el => el.classList.remove('is-toggle-open'))\r\n\t\t\t\t\ttarget.children[0].click()\r\n\t\t\t\t}\r\n\t\t\t\tthis.vars.extraLargeAndUp.matches ? this.fxScrollTarget(target) : setTimeout(() => this.fxScrollTarget(target), 500)\r\n\t\t\t\tbtnScrollTo.forEach(el => el.classList.remove('is-active'))\r\n\t\t\t\te.currentTarget.classList.add('is-active')\r\n\t\t\t\tif ((this.el.aside || this.el.sticky) && !this.vars.extraLargeAndUp.matches) {\r\n\t\t\t\t\tthis.el.sticky ? this.el.sticky.classList.remove('is-aside-open') : ''\r\n\t\t\t\t\tthis.el.aside ? this.el.aside.classList.remove('is-aside-open') : ''\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}))\r\n\t},\r\n\r\n\tevents() {\r\n\t\tthis.fxScrollTo(this.el.btnScroll, this)\r\n\t},\r\n\r\n\tinit() {\r\n\t\tthis.events()\r\n\t}\r\n}\r\n\r\nscrollToElement.init()","const addressBarChromeMobileVH = {\r\n\tel: {\r\n\t\tbody: document.body,\r\n\t\thero: document.querySelector('.js-hero'),\r\n\t\theader: document.querySelector('.header')\r\n\t},\r\n\r\n\tvars: {\r\n\t\textraLargeAndUp: window.matchMedia('(min-width: 80em)')\r\n\t},\r\n\r\n\tfxDetectHeight() {\r\n\t\tif (!this.el.hero) return\r\n\r\n\t\tconst heightHeader = this.el.header.offsetHeight,\r\n\t\t\theightFinal = window.innerHeight - heightHeader\r\n\r\n\t\tthis.el.hero.style.height = `${heightFinal}px`\r\n\r\n\t\twindow.addEventListener('resize', () => {\r\n\t\t\t// Update window Height size\r\n\t\t\tconst heightFinal = window.innerHeight - heightHeader\r\n\t\t\t// Update sizes\r\n\t\t\tthis.el.hero.style.height = `${heightFinal}px`\r\n\t\t})\r\n\t},\r\n\r\n\tevents() {\r\n\t\tthis.vars.extraLargeAndUp.addEventListener('change', () => this.fxDetectHeight())\r\n\t},\r\n\r\n\tinit() {\r\n\t\tthis.events()\r\n\t\tthis.fxDetectHeight()\r\n\t}\r\n}\r\n\r\naddressBarChromeMobileVH.init()","const url = {\r\n\tel: {\r\n\t\tlinkToNewTab: document.querySelectorAll('a[target=\"_blank\"]')\r\n\t},\r\n\r\n\tevents() {\r\n\t\tthis.el.linkToNewTab.forEach(el => el.setAttribute('rel', 'noopener noreferrer'))\r\n\t},\r\n\r\n\tinit() {\r\n\t\tthis.events()\r\n\t}\r\n}\r\n\r\nurl.init()","/* global pagination http searchFilter formHelper */\r\n/*eslint-disable no-unused-vars*/\r\nconst filterPagination = {\r\n\tvars: {\r\n\t\tcurrentPage: 1\r\n\t},\r\n\r\n\tfxFilterPaginationItemHelper(selector, element, endpoint) {\r\n\t\tdocument.addEventListener('click', e => {\r\n\t\t\tif (e.target && e.target.classList.contains('pagination__item') && e.target.closest('.js-search').querySelector(selector)) {\r\n\t\t\t\tconst paginationList = e.target.parentElement,\r\n\t\t\t\t\tpage = Number(e.target.querySelector('button').textContent),\r\n\t\t\t\t\tsearchContainer = element.closest('.js-search') ? element.closest('.js-search') : element.closest('.modal').previousElementSibling,\r\n\t\t\t\t\tform = searchContainer.nextElementSibling && searchContainer.nextElementSibling.querySelector('.js-filter-modal') ? searchContainer.nextElementSibling.querySelector('.js-filter-modal') : element,\r\n\t\t\t\t\tinput = searchContainer.querySelector('.js-autocomplete'),\r\n\t\t\t\t\tterm = searchContainer.nextElementSibling && searchContainer.nextElementSibling.querySelector('.js-search-term') ? searchContainer.nextElementSibling.querySelector('.js-search-term') : '',\r\n\t\t\t\t\trange = searchContainer.nextElementSibling && searchContainer.nextElementSibling.querySelector('.js-range') ? searchContainer.nextElementSibling.querySelector('.js-range') : '',\r\n\t\t\t\t\trangeStart = searchContainer.nextElementSibling && searchContainer.nextElementSibling.querySelector('.js-range') ? searchContainer.nextElementSibling.querySelector('.js-range-value-start') : '',\r\n\t\t\t\t\trangeEnd = searchContainer.nextElementSibling && searchContainer.nextElementSibling.querySelector('.js-range') ? searchContainer.nextElementSibling.querySelector('.js-range-value-end') : ''\r\n\r\n\t\t\t\tsearchContainer.nextElementSibling && term ? term.value = input.value : ''\r\n\t\t\t\tsearchContainer.nextElementSibling && range && range.noUiSlider ? rangeStart.value = range.noUiSlider.get()[0] : ''\r\n\t\t\t\tsearchContainer.nextElementSibling && range && range.noUiSlider ? rangeEnd.value = range.noUiSlider.get()[1] : ''\r\n\r\n\t\t\t\tconst callback = response => {\r\n\t\t\t\t\tsearchFilter.fxFilterCallback(response, element, page)\r\n\t\t\t\t\te.target.closest('.pagination__list').querySelectorAll('.pagination__item').forEach(el => el.classList.remove('is-active'))\r\n\t\t\t\t\te.target.classList.add('is-active')\r\n\t\t\t\t}\r\n\r\n\t\t\t\thttp.fxPost(`${endpoint.substring(0, endpoint.lastIndexOf('/') + 1)}${page}`, formHelper.fxFormToJson(form), callback).then(response => {\r\n\t\t\t\t\tthis.vars.currentPage = response.data.pagination.filter(el => {\r\n\t\t\t\t\t\tif (el.currentPage) return el\r\n\t\t\t\t\t})[0].page\r\n\t\t\t\t\tsetTimeout(() => pagination.fxPaginationItemHelper(response, paginationList, this.vars.currentPage), 0)\r\n\t\t\t\t\tpagination.fxPaginationHelper(response, paginationList)\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t})\r\n\t},\r\n\r\n\tfxFilterNavigationHelper(selector, endpoint, filter) {\r\n\t\tconst searchContainer = filter.closest('.js-search'),\r\n\t\t\tinput = searchContainer.querySelector('.js-autocomplete'),\r\n\t\t\tterm = searchContainer.nextElementSibling && searchContainer.nextElementSibling.querySelector('.js-search-term') ? searchContainer.nextElementSibling.querySelector('.js-search-term') : '',\r\n\t\t\trange = searchContainer.nextElementSibling && searchContainer.nextElementSibling.querySelector('.js-range') ? searchContainer.nextElementSibling.querySelector('.js-range') : '',\r\n\t\t\trangeStart = searchContainer.nextElementSibling && searchContainer.nextElementSibling.querySelector('.js-range') ? searchContainer.nextElementSibling.querySelector('.js-range-value-start') : '',\r\n\t\t\trangeEnd = searchContainer.nextElementSibling && searchContainer.nextElementSibling.querySelector('.js-range') ? searchContainer.nextElementSibling.querySelector('.js-range-value-end') : ''\r\n\r\n\t\tpagination.el.paginationButtonPrev.forEach(el => el.addEventListener('click', e => {\r\n\t\t\tif (e.target.closest('.js-search').querySelector(selector)) {\r\n\t\t\t\tthis.vars.currentPage--\r\n\r\n\t\t\t\tsearchContainer.nextElementSibling && term ? term.value = input.value : ''\r\n\t\t\t\tsearchContainer.nextElementSibling && range && range.noUiSlider ? rangeStart.value = range.noUiSlider.get()[0] : ''\r\n\t\t\t\tsearchContainer.nextElementSibling && range && range.noUiSlider ? rangeEnd.value = range.noUiSlider.get()[1] : ''\r\n\r\n\t\t\t\tpagination.fxNavigationHelper(endpoint, '', e.target.nextElementSibling, this.vars.currentPage, filter)\r\n\t\t\t}\r\n\t\t}))\r\n\r\n\t\tpagination.el.paginationButtonNext.forEach(el => el.addEventListener('click', e => {\r\n\t\t\tif (e.target.closest('.js-search').querySelector(selector)) {\r\n\t\t\t\tthis.vars.currentPage++\r\n\r\n\t\t\t\tsearchContainer.nextElementSibling && term ? term.value = input.value : ''\r\n\t\t\t\tsearchContainer.nextElementSibling && range && range.noUiSlider ? rangeStart.value = range.noUiSlider.get()[0] : ''\r\n\t\t\t\tsearchContainer.nextElementSibling && range && range.noUiSlider ? rangeEnd.value = range.noUiSlider.get()[1] : ''\r\n\r\n\t\t\t\tpagination.fxNavigationHelper(endpoint, '', e.target.previousElementSibling, this.vars.currentPage, filter)\r\n\t\t\t}\r\n\t\t}))\r\n\t}\r\n}","const formHelper = {\r\n\tel: {\r\n\t\tcheckbox: document.querySelectorAll('.js-checkbox'),\r\n\t\tmodalContact: document.querySelector('.modal-contacts'),\r\n\t\tbody: document.body,\r\n\t\theader: document.querySelector('.header')\r\n\t},\r\n\r\n\tfxFormToJson(el) {\r\n\t\tconst indexedArray = {}\r\n\t\tfor (let i = 0; i < el.length; i++) {\r\n\t\t\tif (el[i].value) {\r\n\t\t\t\tif ((['checkbox', 'radio'].indexOf(el[i].type) > -1 && el[i].checked) || ['checkbox', 'radio', 'file', 'button'].indexOf(el[i].type) === -1)\r\n\t\t\t\t\tindexedArray[el[i].name] = el[i].value\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tindexedArray[el[i].name] = el[i].name === 'term' || el[i].name === 'teacher' ? '' : null\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn indexedArray\r\n\t},\r\n\r\n\tfxInputEvents() {\r\n\t\tthis.el.checkbox.forEach(el => el.addEventListener('change', e => e.currentTarget.value = e.currentTarget.checked ? 'true' : 'false'))\r\n\t},\r\n\r\n\tfxShowMessage(form, msg, status = 200) {\r\n\t\tconst buttonSubmit = form.el.querySelector('.js-submit')\r\n\r\n\t\tbuttonSubmit.style.display = 'none'\r\n\t\tform.el.nextElementSibling.textContent = msg\r\n\t\tform.el.nextElementSibling.style.display = 'inherit'\r\n\r\n\t\tsetTimeout(() => {\r\n\t\t\tform.el.nextElementSibling.textContent = ''\r\n\t\t\tform.el.nextElementSibling.style.display = 'none'\r\n\t\t\tbuttonSubmit.removeAttribute('disabled')\r\n\t\t\tbuttonSubmit.style.display = 'inherit'\r\n\t\t\tstatus === 200 ? form.el.reset() : ''\r\n\t\t\tif (document.querySelector('[type=\"file\"]')) {\r\n\t\t\t\tform.el.value = ''\r\n\t\t\t\tform.el.querySelector('[name=\"fileName\"]').value = ''\r\n\t\t\t\tform.el.querySelector('.upload-file__name').textContent = ''\r\n\t\t\t\tsetTimeout(() => form.el.querySelector('.js-clear-file').style.display = 'none', 0)\r\n\t\t\t}\r\n\t\t}, 5000)\r\n\t},\r\n\r\n\tfxShowModalSubmitMessage () {\r\n\t\tconst sucessMessage = this.el.modalContact.querySelector('.umbraco-forms-submitmessage')\r\n\t\tif(!sucessMessage) return\r\n\t\tthis.fxModalContactsOpen()\r\n\t},\r\n\r\n\tfxValidateModal () {\r\n\t\tconst form = this.el.modalContact.querySelector('form')\r\n\t\tif(!form) return\r\n\t\tconst error = form.querySelectorAll('.field-validation-error')\r\n\t\t\r\n\t\tif([...error].length) {\r\n\t\t\tthis.fxModalContactsOpen()\r\n\t\t}\r\n\t},\r\n\r\n\tfxModalContactsOpen () {\r\n\t\tthis.el.modalContact.classList.add('is-modal-open')\r\n\t\tthis.el.body.classList.add('no-scroll-hidden')\r\n\t\tsetTimeout(() => {\r\n\t\t\tthis.el.header.classList.add('header--modal')\r\n\t\t\tthis.el.header.classList.contains('header--fixed') && this.el.header.classList.remove('header--fixed')\r\n\t\t}, 500)\r\n\t},\r\n\r\n\tinit() {\r\n\t\tthis.fxInputEvents()\r\n\r\n\t\tif(!this.el.modalContact) return\r\n\t\tthis.fxShowModalSubmitMessage()\r\n\t\tthis.fxValidateModal()\r\n\t}\r\n}\r\n\r\nformHelper.init()","/* global Bouncer */\r\nconst formValidation = {\r\n\tel: {\r\n\t\thtml: document.documentElement,\r\n\t\tbody: document.body\r\n\t},\r\n\r\n\tinitBouncer(form) {\r\n\t\tnew Bouncer(form.dataset.selector, {\r\n\t\t\tdisableSubmit: true,\r\n\t\t\tfieldClass: 'form__error', // Applied to fields with errors\r\n\t\t\terrorClass: 'form__error-message', // Applied to the error message for invalid fields\r\n\t\t\tfieldPrefix: 'form__field--', // If a field doesn't have a name or ID, one is generated with this prefix\r\n\t\t\terrorPrefix: 'form__error--', // Prefix used for error message IDs,\r\n\t\t\t// Override default Patterns\r\n\t\t\tpatterns: {\r\n\t\t\t\temail: /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])+/i,\r\n\t\t\t\turl: /^(http(s?):\\/\\/)(?!www | www\\.)[a-z0-9_-]+\\.+[a-z0-9./%&=?_:;-]+$/i\r\n\t\t\t},\r\n\t\t\tcustomValidations: {\r\n\t\t\t\tcompareFields: field => {\r\n\t\t\t\t\tconst selector = field.dataset.equalto,\r\n\t\t\t\t\t\totherField = field.form.querySelector(selector)\r\n\r\n\t\t\t\t\tif (!selector || !otherField) return false\r\n\r\n\t\t\t\t\treturn otherField.value !== field.value\r\n\t\t\t\t},\r\n\t\t\t\tnif: field => {\r\n\t\t\t\t\tif (field.classList.contains('js-nif')) {\r\n\t\t\t\t\t\tlet v = field.value\r\n\t\t\t\t\t\t//FIX IE for includes method\r\n\t\t\t\t\t\tif (!Array.prototype.includes) {\r\n\t\t\t\t\t\t\tObject.defineProperty(Array.prototype, 'includes', {\r\n\t\t\t\t\t\t\t\tenumerable: false,\r\n\t\t\t\t\t\t\t\tvalue: function(obj) {\r\n\t\t\t\t\t\t\t\t\tconst newArr = this.filter(el => {\r\n\t\t\t\t\t\t\t\t\t\treturn el == obj\r\n\t\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t\t\treturn newArr.length > 0\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (v.length > 0)\r\n\t\t\t\t\t\t\tif (v += '', !['1', '2', '3', '5', '6', '8'].includes(v.substr(0, 1)) && !['45', '70', '71', '72', '77', '79', '90', '91', '98', '99'].includes(v.substr(0, 2))) return !1\r\n\r\n\t\t\t\t\t\tlet d, b = 9 * v[0] + 8 * v[1] + 7 * v[2] + 6 * v[3] + 5 * v[4] + 4 * v[5] + 3 * v[6] + 2 * v[7],\r\n\t\t\t\t\t\t\tc = b - 11 * parseInt(b / 11)\r\n\r\n\t\t\t\t\t\treturn !(d = 1 == c || 0 == c ? 0 : 11 - c, v[8] == d)\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tpastDate: field => {\r\n\t\t\t\t\tif (field.classList.contains('js-past-date'))\r\n\t\t\t\t\t\treturn field.value > field.getAttribute('max')\r\n\t\t\t\t},\r\n\t\t\t\tfutureDate: field => {\r\n\t\t\t\t\tif (field.classList.contains('js-future-date'))\r\n\t\t\t\t\t\treturn field.value < field.getAttribute('min')\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tmessages: {\r\n\t\t\t\tmissingValue: {\r\n\t\t\t\t\tcheckbox: form.dataset.msgRequired,\r\n\t\t\t\t\tradio: form.dataset.msgRequired,\r\n\t\t\t\t\tselect: form.dataset.msgRequired,\r\n\t\t\t\t\tdefault: form.dataset.msgRequired\r\n\t\t\t\t},\r\n\t\t\t\tpatternMismatch: {\r\n\t\t\t\t\temail: form.dataset.msgInvalidFormat,\r\n\t\t\t\t\turl: form.dataset.msgInvalidFormat,\r\n\t\t\t\t\tnumber: form.dataset.msgInvalidFormat,\r\n\t\t\t\t\tcolor: form.dataset.msgInvalidFormat,\r\n\t\t\t\t\tdate: form.dataset.msgInvalidFormat,\r\n\t\t\t\t\ttime: form.dataset.msgInvalidFormat,\r\n\t\t\t\t\tmonth: form.dataset.msgInvalidFormat,\r\n\t\t\t\t\tdefault: form.dataset.msgInvalidFormat\r\n\t\t\t\t},\r\n\t\t\t\toutOfRange: {\r\n\t\t\t\t\tover: `${form.dataset.msgMaxFormat} {max}`,\r\n\t\t\t\t\tunder: `${form.dataset.msgMinFormat} {min}`\r\n\t\t\t\t},\r\n\t\t\t\twrongLength: {\r\n\t\t\t\t\tover: `${form.dataset.msgMaxlengthFormat} {maxLength}`,\r\n\t\t\t\t\tunder: `${form.dataset.msgMinlengthFormat} {minLength}`\r\n\t\t\t\t},\r\n\t\t\t\tcompareFields: () => {\r\n\t\t\t\t\treturn form.dataset.msgCompare\r\n\t\t\t\t},\r\n\t\t\t\tnif: () => {\r\n\t\t\t\t\treturn form.dataset.msgInvalidFormat\r\n\t\t\t\t},\r\n\t\t\t\tpastDate: () => {\r\n\t\t\t\t\treturn `${form.dataset.msgMaxFormat} ` + new Date().toJSON().split('T')[0]\r\n\t\t\t\t},\r\n\t\t\t\tfutureDate: () => {\r\n\t\t\t\t\treturn `${form.dataset.msgMinFormat} ` + new Date().toJSON().split('T')[0]\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\t},\r\n\r\n\tfxValidate(form) {\r\n\t\tthis.initBouncer(form)\r\n\t\treturn form.checkValidity()\r\n\t},\r\n\r\n\tfxSetValidationAttributes() {\r\n\t\tdocument.querySelector('.js-past-date') ? document.querySelector('.js-past-date').setAttribute('max', new Date().toJSON().split('T')[0]) : ''\r\n\t\tdocument.querySelector('.js-future-date') ? document.querySelector('.js-future-date').setAttribute('min', new Date().toJSON().split('T')[0]) : ''\r\n\t\tdocument.querySelector('[type=number]') ? document.querySelectorAll('[type=number]:not(.js-range-date)').forEach(el => el.setAttribute('min', 0)) : ''\r\n\t\tif (document.querySelector('.js-range-date')) {\r\n\t\t\tdocument.querySelector('.js-range-date').setAttribute('min', '1900')\r\n\t\t\tdocument.querySelector('.js-range-date').setAttribute('max', new Date().getFullYear())\r\n\t\t}\r\n\t},\r\n\r\n\tinit() {\r\n\t\tthis.fxSetValidationAttributes()\r\n\t}\r\n}\r\n\r\nformValidation.init()","/*global http formHelper searchFilter news search*/\r\n/*eslint-disable no-unused-vars*/\r\nconst pagination = {\r\n\tel: {\r\n\t\tpaginationButtonPrev: document.querySelectorAll('.pagination__button--prev'),\r\n\t\tpaginationButtonNext: document.querySelectorAll('.pagination__button--next')\r\n\t},\r\n\r\n\tvars: {\r\n\t\tmaxPaginationItem: 5\r\n\t},\r\n\r\n\tfxPaginationItemHelper(response, element, currentPage) {\r\n\t\tif(Object.keys(response).length) {\r\n\t\t\tconst data = response.data,\r\n\t\t\t\tpagination = data.pagination\r\n\r\n\t\t\tpagination.forEach(el => {\r\n\t\t\t\tif (el.currentPage) {\r\n\t\t\t\t\tif (el.page === 1)\r\n\t\t\t\t\t\telement.previousElementSibling.setAttribute('disabled', true)\r\n\r\n\t\t\t\t\telse if (el.page > 1 && pagination.length > 1)\r\n\t\t\t\t\t\telement.previousElementSibling.removeAttribute('disabled')\r\n\r\n\t\t\t\t\tif (el.page >= 1 && el.page < pagination.length)\r\n\t\t\t\t\t\telement.nextElementSibling.removeAttribute('disabled')\r\n\r\n\t\t\t\t\telse if (el.page === pagination.length)\r\n\t\t\t\t\t\telement.nextElementSibling.setAttribute('disabled', true)\r\n\t\t\t\t}\r\n\t\t\t})\r\n\r\n\t\t\tlet start, end\r\n\t\t\tconst ceiling = Math.ceil(this.vars.maxPaginationItem / 2),\r\n\t\t\t\tfloor = Math.floor(this.vars.maxPaginationItem / 2)\r\n\r\n\t\t\tif (pagination.length < this.vars.maxPaginationItem) {\r\n\t\t\t\tstart = 0\r\n\t\t\t\tend = pagination.length\r\n\t\t\t}\r\n\t\t\telse if (currentPage >= 1 && currentPage <= ceiling) {\r\n\t\t\t\tstart = 0\r\n\t\t\t\tend = this.vars.maxPaginationItem\r\n\t\t\t}\r\n\t\t\telse if ((currentPage + floor) >= pagination.length) {\r\n\t\t\t\tstart = pagination.length - this.vars.maxPaginationItem\r\n\t\t\t\tend = pagination.length\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tstart = currentPage - ceiling\r\n\t\t\t\tend = currentPage + floor\r\n\t\t\t}\r\n\r\n\t\t\tfor (let index = start; index < end + 1; index++) {\r\n\t\t\t\telement.querySelectorAll('.pagination__item')[index === 0 ? index : index - 1].classList.remove('is-hidden')\r\n\t\t\t\telement.querySelectorAll(`.pagination__item:nth-of-type(n+${end + 1})`).forEach(el => el.classList.add('is-hidden'))\r\n\r\n\t\t\t\tif (currentPage >= this.vars.maxPaginationItem - 1) {\r\n\t\t\t\t\telement.querySelectorAll(`.pagination__item:nth-of-type(-n+${start})`).forEach(el => el.classList.add('is-hidden'))\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tfxPaginationHelper(response, element) {\r\n\t\t\r\n\t\tif(Object.keys(response).length) {\r\n\t\t\tconst data = response.data,\r\n\t\t\t\tpagination = data.pagination\r\n\r\n\t\t\telement.innerHTML = ''\r\n\r\n\t\t\telement.style.pointerEvents = pagination.length === 1 ? 'none' : 'auto'\r\n\r\n\t\t\tpagination.forEach(el => {\r\n\t\t\t\tconst isCurrentPage = el.currentPage ? 'is-active' : ''\r\n\t\t\t\tif (el.currentPage && el.page === 1)\r\n\t\t\t\t\telement.previousElementSibling.setAttribute('disabled', true)\r\n\t\t\t\tif (data.pagination.length === 1)\r\n\t\t\t\t\telement.nextElementSibling.setAttribute('disabled', true)\r\n\r\n\t\t\t\telement.innerHTML +=\r\n\t\t\t\t\t`\r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t`\r\n\t\t\t})\r\n\t\t}\r\n\t},\r\n\r\n\tfxNavigationHelper(endpoint, selector, element, page, formElement) {\r\n\t\tconst searchGeneral = element.closest('.search'),\r\n\t\t\tsearchContainer = !element.offsetParent.querySelector('.js-get-news') ? (element.closest('.js-search') ? element.closest('.js-search') : element.closest('.modal').previousElementSibling.classList.contains('js-search')) : '',\r\n\t\t\tinput = searchContainer ? searchContainer.querySelector('.js-autocomplete') : '',\r\n\t\t\tform = searchContainer.nextElementSibling && searchContainer.nextElementSibling.querySelector('.js-filter-modal') ? searchContainer.nextElementSibling.querySelector('.js-filter-modal') : formElement,\r\n\t\t\tvalue = input.value\r\n\r\n\t\tconst callback = response => {\r\n\t\t\tthis.fxPaginationHelper(response, element)\r\n\r\n\t\t\tif (element.offsetParent.querySelector('.js-get-news'))\r\n\t\t\t\tnews.fxNewsCallback(response, selector)\r\n\r\n\t\t\telse if (searchGeneral)\r\n\t\t\t\tsearch.fxSearchCallback(response, page)\r\n\r\n\t\t\telse\r\n\t\t\t\tsearchFilter.fxFilterCallback(response, formElement, page)\r\n\t\t}\r\n\r\n\t\tif (element.offsetParent.querySelector('.js-get-news'))\r\n\t\t\thttp.fxGet(`${endpoint.substring(0, endpoint.lastIndexOf('/') + 1)}${page}`, callback).then(response => this.fxPaginationItemHelper(response, element, page))\r\n\r\n\t\telse if (searchGeneral)\r\n\t\t\thttp.fxGet(`${endpoint.substring(0, endpoint.lastIndexOf('/') + 1)}${value}/${page}`, callback).then(response => this.fxPaginationItemHelper(response, element, page))\r\n\r\n\t\telse\r\n\t\t\thttp.fxPost(`${endpoint.substring(0, endpoint.lastIndexOf('/') + 1)}${page}`, formHelper.fxFormToJson(form), callback).then(response => this.fxPaginationItemHelper(response, element, page))\r\n\t}\r\n}","/*global http filterPagination formHelper pagination scrollToElement*/\r\nconst searchFilter = {\r\n\tel: {\r\n\t\tbody: document.body,\r\n\t\tmodal: document.querySelector('.modal'),\r\n\t\tfilterForm: document.querySelectorAll('.js-filter'),\r\n\t\tfilterModal: document.querySelector('.js-filter-modal'),\r\n\t\tfilterFormContacts: document.querySelector('.js-filter.contacts'),\r\n\t\tfilterFormEvents: document.querySelector('.js-filter.events'),\r\n\t\tfilterFormNews: document.querySelector('.js-filter.news'),\r\n\t\tfilterFormPublications: document.querySelector('.js-filter.publications'),\r\n\t\tfilterFormProjects: document.querySelector('.js-filter.projects'),\r\n\t\tfilterFormTeachers: document.querySelector('.js-filter.teachers')\r\n\t},\r\n\r\n\tvars: {\r\n\t\ttimer: '',\r\n\t\tcurrentPage: 1,\r\n\t\thasCleared: false\r\n\t},\r\n\r\n\tfxFilterResults(element) {\r\n\t\tconst searchContainer = element.closest('.js-search') ? element.closest('.js-search') : element.closest('.modal').previousElementSibling,\r\n\t\t\tform = element.classList.contains('js-filter-modal') ? element : searchContainer.nextElementSibling ? searchContainer.nextElementSibling.querySelector('.js-filter-modal') : '',\r\n\t\t\tinput = searchContainer.querySelector('.js-autocomplete'),\r\n\t\t\tterm = searchContainer.nextElementSibling && searchContainer.nextElementSibling.querySelector('.js-search-term') ? searchContainer.nextElementSibling.querySelector('.js-search-term') : '',\r\n\t\t\trange = searchContainer.nextElementSibling && searchContainer.nextElementSibling.querySelector('.js-range') ? searchContainer.nextElementSibling.querySelector('.js-range') : '',\r\n\t\t\trangeStart = searchContainer.nextElementSibling && searchContainer.nextElementSibling.querySelector('.js-range') ? searchContainer.nextElementSibling.querySelector('.js-range-value-start') : '',\r\n\t\t\trangeEnd = searchContainer.nextElementSibling && searchContainer.nextElementSibling.querySelector('.js-range') ? searchContainer.nextElementSibling.querySelector('.js-range-value-end') : ''\r\n\r\n\t\tsearchContainer.nextElementSibling && term ? term.value = input.value : ''\r\n\t\tsearchContainer.nextElementSibling && range && range.noUiSlider ? rangeStart.value = range.noUiSlider.get()[0] : ''\r\n\t\tsearchContainer.nextElementSibling && range && range.noUiSlider ? rangeEnd.value = range.noUiSlider.get()[1] : ''\r\n\r\n\t\tconst callback = response => this.fxFilterCallback(response, element),\r\n\t\t\tformData = !element.classList.contains('teachers') || !element.classList.contains('contacts') ? formHelper.fxFormToJson(form) : null\r\n\r\n\t\thttp.fxPost(searchContainer.querySelector('.js-filter').getAttribute('action'), formData, callback)\r\n\t},\r\n\r\n\tfxFilterCallback(response, element, page) {\r\n\t\tconst data = response.data,\r\n\t\t\tsearchContainer = element.closest('.js-search') ? element.closest('.js-search') : element.closest('.modal').previousElementSibling,\r\n\t\t\tfilterType = searchContainer.querySelector('.js-filter'),\r\n\t\t\tnoResults = filterType.dataset.msgNoResults,\r\n\t\t\tpaginationList = searchContainer.querySelector('.pagination__list'),\r\n\t\t\tselectorContainer = filterType.classList.contains('teachers') || filterType.classList.contains('contacts') ? '.card-avatar' : filterType.classList.contains('publications') ? '.search-results' : '.media__list'\r\n\r\n\t\t//close modal\r\n\t\tthis.el.modal ? this.el.modal.classList.remove('is-modal-open') : ''\r\n\t\tthis.el.body.classList.remove('no-scroll-hidden')\r\n\r\n\t\t//pagination load\r\n\t\tif (page === undefined) {\r\n\t\t\tpagination.fxPaginationHelper(response, paginationList)\r\n\t\t\tif (data.pagination.length > pagination.vars.maxPaginationItem)\r\n\t\t\t\tpaginationList.querySelectorAll(`.pagination__item:nth-of-type(n+${pagination.vars.maxPaginationItem+1}`).forEach(el => el.classList.add('is-hidden'))\r\n\t\t}\r\n\r\n\t\tsearchContainer.querySelector(selectorContainer).innerHTML = ''\r\n\r\n\t\t//numberOfResults\r\n\t\tsearchContainer.querySelector('.js-total-results').textContent = data.numberOfResults\r\n\r\n\t\tif (data.results.length === 0) {\r\n\t\t\tsearchContainer.querySelector('.pagination').style.display = 'none'\r\n\t\t\tsearchContainer.querySelector(selectorContainer).innerHTML = noResults\r\n\t\t}\r\n\r\n\t\telse {\r\n\t\t\tdata.results.forEach((el, i) => {\r\n\t\t\t\t//parsing date\r\n\t\t\t\tconst date = new Date(el.date),\r\n\t\t\t\t\tformattedDate = new Date(date).toLocaleDateString(),\r\n\t\t\t\t\tgetShortMonth = date.toLocaleDateString(filterType.dataset.language, { month: 'short' }).slice(0, 3),\r\n\t\t\t\t\tgetMonth = date.toLocaleDateString(filterType.dataset.language, { month: 'long' }),\r\n\t\t\t\t\tgetShortYear = date.getFullYear() % 100,\r\n\t\t\t\t\tgetHours = `${(date.getHours()<10?'0':'')}${date.getHours()}`,\r\n\t\t\t\t\tgetMinutes = `${(date.getMinutes()<10?'0':'')}${date.getMinutes()}`,\r\n\t\t\t\t\tshortHour = `${getHours}h${getMinutes}`,\r\n\t\t\t\t\tgetTime = getHours === '00' && getMinutes === '00' ? '' : `

    ${el.fullDate?el.fullDate:shortHour}

    `\r\n\r\n\t\t\t\t//API values check\r\n\t\t\t\tconst target = el.link && el.link.url ? (el.link.target === '_blank' ? el.link.target : '_self') : '',\r\n\t\t\t\t\ttime = filterType.classList.contains('events') ? `` : '',\r\n\t\t\t\t\tcategory = el.category && el.category.length ? `
    ${el.category}
    ` : '',\r\n\t\t\t\t\tlocation = el.location && el.location.length ? `

    ${el.location}

    ` : '',\r\n\t\t\t\t\tcontent = filterType.classList.contains('events') ? `${getTime}${location}` : el.description && el.description.length ? `

    ${el.description}

    ` : '',\r\n\t\t\t\t\tlink = el.link && el.link.url ? `${el.link.name}` : '',\r\n\t\t\t\t\tlinkCard = el.link && el.link.url ? `${el.link.name}` : '',\r\n\t\t\t\t\temailCard = el.email ? `${el.email}` : ''\r\n\r\n\t\t\t\t//show Elements\r\n\t\t\t\tif (filterType.classList.contains('events') || filterType.classList.contains('projects')) {\r\n\t\t\t\t\tsearchContainer.querySelector('.media__list').innerHTML +=\r\n\t\t\t\t\t\t`\r\n\t\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t\t${el.title}\r\n\t\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t${time}\r\n\t\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t\t${category}\r\n\t\t\t\t\t\t\t\t\t\t

    ${el.title}

    \r\n\t\t\t\t\t\t\t\t\t\t${content}\r\n\t\t\t\t\t\t\t\t\t\t${link}\r\n\t\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t`\r\n\t\t\t\t}\r\n\r\n\t\t\t\telse if (filterType.classList.contains('news')) {\r\n\t\t\t\t\tsearchContainer.querySelector('.media__list').innerHTML +=\r\n\t\t\t\t\t\t`\r\n\t\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t\t${el.title}\r\n\t\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t

    ${el.title}

    \r\n\t\t\t\t\t\t\t\t\t\t

    ${el.description}

    \r\n\t\t\t\t\t\t\t\t\t\t${link}\r\n\t\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t`\r\n\t\t\t\t}\r\n\r\n\t\t\t\telse if (filterType.classList.contains('publications')) {\r\n\t\t\t\t\tsearchContainer.querySelector('.search-results').innerHTML +=\r\n\t\t\t\t\t\t`\r\n\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t

    ${el.title}

    \r\n\t\t\t\t\t\t\t\t

    ${el.description}.

    \r\n\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t`\r\n\t\t\t\t}\r\n\r\n\t\t\t\telse {\r\n\t\t\t\t\tsearchContainer.querySelector('.card-avatar').innerHTML +=\r\n\t\t\t\t\t\t`\r\n\t\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t\t${el.name}\r\n\t\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t\t
    ${el.name}
    \r\n\t\t\t\t\t\t\t\t\t\t
    ${el.role}
    \r\n\t\t\t\t\t\t\t\t\t\t${emailCard}\r\n\t\t\t\t\t\t\t\t\t\t${linkCard}\r\n\t\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t`\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\tscrollToElement.fxScrollTo(document.querySelectorAll('.pagination__item, .pagination__button'), this)\r\n\t\t}\r\n\t},\r\n\r\n\tfxClearSearch(el) {\r\n\t\tconst searchContainer = el.closest('.js-search') ? el.closest('.js-search') : el.closest('.modal').previousElementSibling,\r\n\t\t\tclearButton = searchContainer.querySelector('.js-search-clean'),\r\n\t\t\trange = searchContainer.nextElementSibling && searchContainer.nextElementSibling.querySelector('.js-range') ? searchContainer.nextElementSibling.querySelector('.js-range') : ''\r\n\r\n\t\tclearButton.addEventListener('click', e => {\r\n\t\t\tthis.vars.hasCleared = true\r\n\t\t\te.currentTarget.removeAttribute('style')\r\n\t\t\tel.reset()\r\n\t\t\tthis.el.filterModal ? this.el.filterModal.reset() : ''\r\n\t\t\tsearchContainer.nextElementSibling && range && range.noUiSlider ? range.noUiSlider.reset() : ''\r\n\t\t\tthis.el.filterForm.forEach(el => this.fxFilterResults(el))\r\n\t\t})\r\n\t},\r\n\r\n\tfxGetResultsOnEvents(el, endpoint) {\r\n\t\tconst searchContainer = el.closest('.js-search') ? el.closest('.js-search') : el.closest('.modal').previousElementSibling,\r\n\t\t\tinput = searchContainer.querySelector('.js-autocomplete')\r\n\r\n\t\tinput.addEventListener('keydown', e => {\r\n\t\t\tif (e.key === 'Enter') {\r\n\t\t\t\te.preventDefault()\r\n\t\t\t\tif (input.value.length > 3)\r\n\t\t\t\t\tthis.fxSearch(el, endpoint)\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\tif (!searchContainer.querySelector('.js-search-filter')) return\r\n\r\n\t\tsearchContainer.querySelector('.js-search-filter').addEventListener('click', e => {\r\n\t\t\te.preventDefault()\r\n\t\t\tthis.fxSearch(el, endpoint)\r\n\t\t})\r\n\t},\r\n\r\n\tfxAutocomplete(el, endpoint) {\r\n\t\tconst searchContainer = el.closest('.js-search') ? el.closest('.js-search') : el.closest('.modal').previousElementSibling,\r\n\t\t\tclearButton = searchContainer.querySelector('.js-search-clean'),\r\n\t\t\tinput = searchContainer.querySelector('.js-autocomplete'),\r\n\t\t\tterm = searchContainer.nextElementSibling && searchContainer.nextElementSibling.querySelector('.js-search-term') ? searchContainer.nextElementSibling.querySelector('.js-search-term') : ''\r\n\r\n\t\tinput.addEventListener('input', () => {\r\n\t\t\tif (input.value.length >= 3) {\r\n\t\t\t\tinput.nextElementSibling.style.display = 'block'\r\n\t\t\t\tclearTimeout(this.vars.timer)\r\n\t\t\t\tthis.vars.timer = setTimeout(() => this.fxSearch(el, endpoint), 1000)\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tclearButton.removeAttribute('style')\r\n\r\n\t\t\t\tif (input.value.length === 0) {\r\n\t\t\t\t\tsearchContainer.nextElementSibling && term ? term.value = '' : ''\r\n\t\t\t\t\tthis.el.filterForm.forEach(el => this.fxFilterResults(el))\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\t},\r\n\r\n\tfxSearch(element, endpoint) {\r\n\t\tconst searchContainer = element.closest('.js-search') ? element.closest('.js-search') : element.closest('.modal').previousElementSibling,\r\n\t\t\tform = searchContainer.nextElementSibling && searchContainer.nextElementSibling.querySelector('.js-filter-modal') ? searchContainer.nextElementSibling.querySelector('.js-filter-modal') : element,\r\n\t\t\tinput = searchContainer.querySelector('.js-autocomplete'),\r\n\t\t\tterm = searchContainer.nextElementSibling && searchContainer.nextElementSibling.querySelector('.js-search-term') ? searchContainer.nextElementSibling.querySelector('.js-search-term') : '',\r\n\t\t\trange = searchContainer.nextElementSibling && searchContainer.nextElementSibling.querySelector('.js-range') ? searchContainer.nextElementSibling.querySelector('.js-range') : '',\r\n\t\t\trangeStart = searchContainer.nextElementSibling && searchContainer.nextElementSibling.querySelector('.js-range') ? searchContainer.nextElementSibling.querySelector('.js-range-value-start') : '',\r\n\t\t\trangeEnd = searchContainer.nextElementSibling && searchContainer.nextElementSibling.querySelector('.js-range') ? searchContainer.nextElementSibling.querySelector('.js-range-value-end') : ''\r\n\r\n\t\tsearchContainer.nextElementSibling && term ? term.value = input.value : ''\r\n\t\tsearchContainer.nextElementSibling && range && range.noUiSlider ? rangeStart.value = range.noUiSlider.get()[0] : ''\r\n\t\tsearchContainer.nextElementSibling && range && range.noUiSlider ? rangeEnd.value = range.noUiSlider.get()[1] : ''\r\n\r\n\t\tconst callback = response => this.fxFilterCallback(response, element)\r\n\t\thttp.fxPost(endpoint, formHelper.fxFormToJson(form), callback)\r\n\t},\r\n\r\n\tinit() {\r\n\t\tif (this.el.filterFormEvents) {\r\n\t\t\tthis.fxClearSearch(this.el.filterFormEvents)\r\n\t\t\tthis.fxAutocomplete(this.el.filterFormEvents, this.el.filterFormEvents.getAttribute('action'))\r\n\t\t\tthis.fxGetResultsOnEvents(this.el.filterFormEvents, this.el.filterFormEvents.getAttribute('action'))\r\n\t\t\tthis.fxFilterResults(this.el.filterFormEvents)\r\n\t\t\tfilterPagination.fxFilterPaginationItemHelper('.events', this.el.filterFormEvents, this.el.filterFormEvents.getAttribute('action'))\r\n\t\t\tfilterPagination.fxFilterNavigationHelper('.events', this.el.filterFormEvents.getAttribute('action'), this.el.filterFormEvents)\r\n\t\t}\r\n\r\n\t\telse if (this.el.filterFormNews) {\r\n\t\t\tthis.fxClearSearch(this.el.filterFormNews)\r\n\t\t\tthis.fxAutocomplete(this.el.filterFormNews, this.el.filterFormNews.getAttribute('action'))\r\n\t\t\tthis.fxGetResultsOnEvents(this.el.filterFormNews, this.el.filterFormNews.getAttribute('action'))\r\n\t\t\tthis.fxFilterResults(this.el.filterFormNews)\r\n\t\t\tfilterPagination.fxFilterPaginationItemHelper('.news', this.el.filterFormNews, this.el.filterFormNews.getAttribute('action'))\r\n\t\t\tfilterPagination.fxFilterNavigationHelper('.news', this.el.filterFormNews.getAttribute('action'), this.el.filterFormNews)\r\n\t\t}\r\n\r\n\t\telse if (this.el.filterFormProjects) {\r\n\t\t\tthis.fxClearSearch(this.el.filterFormProjects)\r\n\t\t\tthis.fxAutocomplete(this.el.filterFormProjects, this.el.filterFormProjects.getAttribute('action'))\r\n\t\t\tthis.fxGetResultsOnEvents(this.el.filterFormProjects, this.el.filterFormProjects.getAttribute('action'))\r\n\t\t\tthis.fxFilterResults(this.el.filterFormProjects)\r\n\t\t\tfilterPagination.fxFilterPaginationItemHelper('.projects', this.el.filterFormProjects, this.el.filterFormProjects.getAttribute('action'))\r\n\t\t\tfilterPagination.fxFilterNavigationHelper('.projects', this.el.filterFormProjects.getAttribute('action'), this.el.filterFormProjects)\r\n\t\t}\r\n\r\n\t\telse if (this.el.filterFormTeachers) {\r\n\t\t\tthis.fxClearSearch(this.el.filterFormTeachers)\r\n\t\t\tthis.fxAutocomplete(this.el.filterFormTeachers, this.el.filterFormTeachers.getAttribute('action'))\r\n\t\t\tthis.fxGetResultsOnEvents(this.el.filterFormTeachers, this.el.filterFormTeachers.getAttribute('action'))\r\n\t\t\tthis.fxFilterResults(this.el.filterFormTeachers)\r\n\t\t\tfilterPagination.fxFilterPaginationItemHelper('.teachers', this.el.filterFormTeachers, this.el.filterFormTeachers.getAttribute('action'))\r\n\t\t\tfilterPagination.fxFilterNavigationHelper('.teachers', this.el.filterFormTeachers.getAttribute('action'), this.el.filterFormTeachers)\r\n\t\t}\r\n\t\telse if (this.el.filterFormContacts) {\r\n\t\t\tthis.fxClearSearch(this.el.filterFormContacts)\r\n\t\t\tthis.fxAutocomplete(this.el.filterFormContacts, this.el.filterFormContacts.getAttribute('action'))\r\n\t\t\tthis.fxGetResultsOnEvents(this.el.filterFormContacts, this.el.filterFormContacts.getAttribute('action'))\r\n\t\t\tthis.fxFilterResults(this.el.filterFormContacts)\r\n\t\t\tfilterPagination.fxFilterPaginationItemHelper('.contacts', this.el.filterFormContacts, this.el.filterFormContacts.getAttribute('action'))\r\n\t\t\tfilterPagination.fxFilterNavigationHelper('.contacts', this.el.filterFormContacts.getAttribute('action'), this.el.filterFormContacts)\r\n\t\t}\r\n\t\telse if (this.el.filterFormPublications) {\r\n\t\t\tthis.fxClearSearch(this.el.filterFormPublications)\r\n\t\t\tthis.fxAutocomplete(this.el.filterFormPublications, this.el.filterFormPublications.getAttribute('action'))\r\n\t\t\tthis.fxGetResultsOnEvents(this.el.filterFormPublications, this.el.filterFormPublications.getAttribute('action'))\r\n\t\t\tthis.fxFilterResults(this.el.filterFormPublications)\r\n\t\t\tfilterPagination.fxFilterPaginationItemHelper('.publications', this.el.filterFormPublications, this.el.filterFormPublications.getAttribute('action'))\r\n\t\t\tfilterPagination.fxFilterNavigationHelper('.publications', this.el.filterFormPublications.getAttribute('action'), this.el.filterFormPublications)\r\n\t\t}\r\n\t}\r\n}\r\n\r\nsearchFilter.init()","/* global AOS*/\r\nconst aosAnimation = {\r\n\r\n\tinit() {\r\n\t\tconst aosSettings = {\r\n\t\t\t// Settings that can be overridden on per-element basis, by `data-aos-*` attributes:\r\n\t\t\tdelay: 200 // values from 0 to 3000, with step 50ms\r\n\t\t}\r\n\r\n\t\tAOS.init(aosSettings)\r\n\t}\r\n}\r\n\r\naosAnimation.init()","const areas = {\r\n\tel: {\r\n\t\theader: document.querySelector('header'),\r\n\t\tasideToggleMobile: document.querySelector('.js-toggle-aside'),\r\n\t\tsticky: document.querySelector('.sticky'),\r\n\t\tareasArticles: document.querySelectorAll('.areas'),\r\n\t\tareasScrollItem: document.querySelectorAll('.sticky [data-scroll]'),\r\n\t\tareasStickyItem: document.querySelectorAll('.sticky__item'),\r\n\t\tareasStickyItemCopy: document.querySelector('.sticky__item-sticky-copy'),\r\n\t\tareasFilter: document.querySelectorAll('.js-filter-courses'),\r\n\t\tarticlesContainer: document.querySelectorAll('.content__article'),\r\n\t\tcourses: document.querySelectorAll('[data-filter-courses]'),\r\n\t\tcardsBlock: document.querySelectorAll('.card-border__block')\r\n\t},\r\n\r\n\tvars: {\r\n\t\textraLargeAndUp: window.matchMedia('(min-width: 80em)')\r\n\t},\r\n\r\n\tfxaAreasFilter() {\r\n\t\tthis.el.areasFilter.forEach(el => el.addEventListener('change', e => {\r\n\t\t\tsetTimeout(() => window.dispatchEvent(new Event('scroll')), 100)\r\n\r\n\t\t\tthis.el.sticky.classList.contains('is-aside-open') ? this.el.sticky.classList.remove('is-aside-open') : ''\r\n\r\n\t\t\tconst value = e.currentTarget.value\r\n\r\n\t\t\tif (value === '-1') {\r\n\t\t\t\t[...this.el.courses, ...this.el.cardsBlock, ...this.el.articlesContainer].forEach(el => el.removeAttribute('style'))\r\n\t\t\t}\r\n\r\n\t\t\telse {\r\n\t\t\t\tthis.el.articlesContainer.forEach(el => el.removeAttribute('style'))\r\n\t\t\t\tconst spacingBetweenArticles = 2 //20px\r\n\r\n\t\t\t\tsetTimeout(() => this.el.articlesContainer.forEach(el => el.style.height = `${el.offsetHeight/10 + spacingBetweenArticles}rem`), 100)\r\n\r\n\t\t\t\tconst filtered = [...this.el.courses].filter(el => el.dataset.filterCourses === value)\r\n\r\n\t\t\t\tthis.el.courses.forEach(el => {\r\n\t\t\t\t\tel.style.display = 'none'\r\n\t\t\t\t\tthis.el.cardsBlock.forEach(el => el.style.display = 'none')\r\n\r\n\t\t\t\t})\r\n\r\n\t\t\t\tfiltered.forEach(el => {\r\n\t\t\t\t\tel.style.display = 'block'\r\n\t\t\t\t\tel.closest('.card-border__block').style.display = 'block'\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t}))\r\n\t},\r\n\r\n\tfxAreasSetActive(element, index) {\r\n\t\tif (window.pageYOffset >= element.offsetTop - this.el.header.offsetHeight - (this.el.asideToggleMobile && !this.vars.extraLargeAndUp.matches ? this.el.asideToggleMobile.offsetHeight : 0)) {\r\n\t\t\t[...this.el.areasScrollItem, ...this.el.areasStickyItem].forEach(el => el.classList.remove('is-active'))\r\n\t\t\tif (this.el.areasScrollItem[index])\r\n\t\t\t\tthis.el.areasScrollItem[index].classList.add('is-active')\r\n\r\n\t\t\tif (this.el.areasStickyItem[index])\r\n\t\t\t\tthis.el.areasStickyItem[index].classList.add('is-active')\r\n\r\n\t\t\tif (!this.vars.extraLargeAndUp.matches)\r\n\t\t\t\tthis.el.areasStickyItemCopy.textContent = document.querySelector('.sticky__item.is-active').textContent\r\n\t\t}\r\n\t},\r\n\r\n\tevents() {\r\n\t\t//set mobile item\r\n\t\tthis.el.areasStickyItemCopy.textContent = this.el.areasStickyItem[0].textContent\r\n\r\n\t\tthis.el.asideToggleMobile.addEventListener('click', e => {\r\n\t\t\te.currentTarget.parentElement.classList.toggle('is-aside-open')\r\n\t\t\tthis.el.areasStickyItemCopy.textContent = document.querySelector('.sticky__item.is-active') ? document.querySelector('.sticky__item.is-active').textContent : ''\r\n\t\t})\r\n\t\tthis.el.areasArticles.forEach((el, i) => window.addEventListener('load', e => {\r\n\t\t\t//highlight items while scroll\r\n\t\t\te.currentTarget.addEventListener('scroll', () => this.fxAreasSetActive(el, i))\r\n\t\t\t//on load\r\n\t\t\tthis.fxAreasSetActive(el, i)\r\n\t\t}))\r\n\t},\r\n\r\n\tinit() {\r\n\t\tif (!this.el.sticky) return\r\n\t\tthis.events()\r\n\t\tthis.fxaAreasFilter()\r\n\t}\r\n\r\n}\r\n\r\nareas.init()","const aside = {\r\n\tel: {\r\n\t\theader: document.querySelector('header'),\r\n\t\taside: document.querySelector('.aside'),\r\n\t\tasideStickyItemCopy: document.querySelector('.aside__item-sticky-copy'),\r\n\t\tasideScrollItem: document.querySelectorAll('.aside__item[data-scroll]'),\r\n\t\tasideToggleMobile: document.querySelector('.js-toggle-aside'),\r\n\t\tarticles: document.querySelectorAll('.js-article')\r\n\t},\r\n\r\n\tvars: {\r\n\t\textraLargeAndUp: window.matchMedia('(min-width: 80em)')\r\n\t},\r\n\r\n\tfxAsideSetActive(element, index) {\r\n\t\tconst asideHalfHeight = this.el.aside.offsetHeight / 2\r\n\r\n\t\tif (window.pageYOffset >= element.offsetTop - this.el.header.offsetHeight - (this.el.asideToggleMobile && !this.vars.extraLargeAndUp.matches ? this.el.asideToggleMobile.offsetHeight : asideHalfHeight)) {\r\n\t\t\tthis.el.asideScrollItem.forEach(el => el.classList.remove('is-active'))\r\n\t\t\tif (this.el.asideScrollItem[index])\r\n\t\t\t\tthis.el.asideScrollItem[index].classList.add('is-active')\r\n\r\n\t\t\tif (!this.vars.extraLargeAndUp.matches)\r\n\t\t\t\tthis.el.asideStickyItemCopy.textContent = document.querySelector('.aside__item.is-active').textContent\r\n\t\t}\r\n\t},\r\n\r\n\tfxSetMobileText() {\r\n\t\tthis.el.asideStickyItemCopy.textContent = this.el.asideScrollItem[0].textContent\r\n\t},\r\n\r\n\tevents() {\r\n\t\tif (this.el.asideScrollItem.length > 1) {\r\n\t\t\tthis.el.asideToggleMobile.parentElement.classList.add('is-list')\r\n\t\t\tthis.el.asideToggleMobile.addEventListener('click', e => {\r\n\t\t\t\te.currentTarget.parentElement.classList.toggle('is-aside-open')\r\n\t\t\t\tthis.el.asideStickyItemCopy.textContent = document.querySelector('.aside__item.is-active') ? document.querySelector('.aside__item.is-active').textContent : ''\r\n\t\t\t})\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.el.asideToggleMobile.classList.add('d-none')\r\n\t\t}\r\n\r\n\t\tthis.el.articles.forEach((el, i) => window.addEventListener('load', e => e.currentTarget.addEventListener('scroll', () => this.fxAsideSetActive(el, i))))\r\n\t},\r\n\r\n\tinit() {\r\n\t\tif (!this.el.aside) return\r\n\t\tthis.fxSetMobileText()\r\n\t\tthis.events()\r\n\t}\r\n}\r\n\r\naside.init()","/*global searchFilter */\r\nconst filter = {\r\n\tel: {\r\n\t\tbody: document.body,\r\n\t\tmodal: document.querySelector('.modal'),\r\n\t\tfilterFormModal: document.querySelectorAll('.js-filter-modal')\r\n\t},\r\n\r\n\tevents() {\r\n\t\tthis.el.filterFormModal.forEach(el => el.addEventListener('submit', e => {\r\n\t\t\te.preventDefault()\r\n\t\t\tsearchFilter.fxFilterResults(e.currentTarget)\r\n\t\t}))\r\n\t},\r\n\r\n\tinit() {\r\n\t\tthis.events()\r\n\t}\r\n}\r\n\r\nfilter.init()","/* global http formValidation formHelper modal*/\r\nconst formContact = {\r\n\tel: {\r\n\t\thtml: document.documentElement,\r\n\t\tbody: document.body,\r\n\t\tcontact: document.querySelector('.js-form-contact')\r\n\t},\r\n\tfxFormEvents(selector) {\r\n\t\tif (!this.el.contact) return\r\n\r\n\t\tconst form = {\r\n\t\t\tel: document.querySelector(selector),\r\n\t\t\tbutton: document.querySelector(selector).querySelector('.js-submit')\r\n\t\t}\r\n\r\n\t\tform.el.addEventListener('submit', e => {\r\n\t\t\te.preventDefault()\r\n\r\n\t\t\tconst callback = info => {\r\n\t\t\t\tif (info.status === 200) {\r\n\t\t\t\t\tformHelper.fxShowMessage(form, form.el.dataset.msgSuccess)\r\n\t\t\t\t\tif (form.el.classList.contains('form-cookieless')) {\r\n\t\t\t\t\t\tmodal.fxCreateCookie('flyer-downloaded', true, 365)\r\n\t\t\t\t\t\tconst link = document.createElement('a'),\r\n\t\t\t\t\t\t\tfilename = form.button.dataset.url.split('/').pop()\r\n\r\n\t\t\t\t\t\tlink.href = form.button.dataset.url\r\n\t\t\t\t\t\tlink.download = filename\r\n\t\t\t\t\t\tlink.click()\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t//handle error\r\n\t\t\t\tif (info.response) {\r\n\t\t\t\t\tif (info.response.status === 409)\r\n\t\t\t\t\t\tformHelper.fxShowMessage(form, form.el.dataset.msgConflict, 409)\r\n\r\n\t\t\t\t\tif (info.response.status === 500)\r\n\t\t\t\t\t\tformHelper.fxShowMessage(form, form.el.dataset.msgServer, 500)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (formValidation.fxValidate(e.currentTarget)) {\r\n\t\t\t\thttp.fxPost(e.currentTarget.getAttribute('action'), formHelper.fxFormToJson(e.currentTarget), callback)\r\n\t\t\t}\r\n\t\t})\r\n\t},\r\n\tinit() {\r\n\t\tthis.fxFormEvents('.js-form-contact')\r\n\t}\r\n}\r\n\r\nformContact.init()","const header = {\r\n\tel: {\r\n\t\thtml: document.documentElement,\r\n\t\theader: document.querySelector('.header'),\r\n\t\tmainContent: document.querySelector('.wrapper'),\r\n\t\tlogoStart: document.querySelector('.header__animated--start'),\r\n\t\tlogoMiddle: document.querySelector('.header__animated--middle'),\r\n\t\tlogoEnd: document.querySelector('.header__animated--end')\r\n\r\n\t},\r\n\r\n\tevents() {\r\n\t\twindow.addEventListener('scroll', () => {\r\n\t\t\tif (this.el.html.scrollTop > 1) {\r\n\t\t\t\tthis.el.header.classList.add('header--fixed')\r\n\t\t\t\tthis.el.mainContent.style.paddingTop = `${this.el.header.offsetHeight/10}rem`\r\n\t\t\t\tthis.el.logoStart.classList.remove('header__animated--1')\r\n\t\t\t\tthis.el.logoMiddle.classList.remove('header__animated--2')\r\n\t\t\t\tthis.el.logoEnd && this.el.logoEnd.classList.remove('header__animated--3')\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.el.header.classList.remove('header--fixed')\r\n\t\t\t\tthis.el.mainContent.removeAttribute('style')\r\n\t\t\t\tthis.el.logoStart.classList.add('header__animated--1')\r\n\t\t\t\tthis.el.logoMiddle.classList.add('header__animated--2')\r\n\t\t\t\tthis.el.logoEnd && this.el.logoEnd.classList.add('header__animated--3')\r\n\t\t\t}\r\n\t\t})\r\n\t},\r\n\r\n\tinit() {\r\n\t\tthis.events()\r\n\t}\r\n}\r\n\r\nheader.init()","const hero = {\r\n\tel: {\r\n\t\theroArticle: document.querySelector('.hero-article'),\r\n\t\theroArticleHeading: document.querySelector('.hero-article__heading'),\r\n\t\theroArticlePreHeading: document.querySelector('.hero-article__preheading'),\r\n\t\theroArticleInfo: document.querySelector('.hero-article__info'),\r\n\t\theroArticleContainer: document.querySelector('.hero-article__container')\r\n\t},\r\n\r\n\tvars: {\r\n\t\textraLargeAndUp: window.matchMedia('(min-width: 80em)')\r\n\t},\r\n\r\n\tfxHeroInfoSpacing() {\r\n\t\tif (!this.el.heroArticle) return\r\n\r\n\t\t!this.el.heroArticleContainer ? this.el.heroArticle.style.paddingBottom = 0 : ''\r\n\r\n\t\tif (!this.el.heroArticleHeading) return\r\n\r\n\t\tconst preaheadingOuterHeight = this.el.heroArticlePreHeading ? this.el.heroArticlePreHeading.offsetHeight + parseInt(window.getComputedStyle(this.el.heroArticlePreHeading).getPropertyValue('margin-bottom')) : 0,\r\n\t\t\theadingOuterHeight = this.el.heroArticleHeading.offsetHeight + parseInt(window.getComputedStyle(this.el.heroArticleHeading).getPropertyValue('margin-bottom')),\r\n\t\t\ttotalHeadingHeight = headingOuterHeight + preaheadingOuterHeight\r\n\r\n\t\tthis.vars.extraLargeAndUp.matches ? this.el.heroArticleInfo.style.paddingTop = `${totalHeadingHeight/10}rem` : ''\r\n\t},\r\n\r\n\tinit() {\r\n\t\tthis.fxHeroInfoSpacing()\r\n\t}\r\n}\r\n\r\nhero.init()","const loadMore = {\r\n\tel: {\r\n\t\tbuttonLoadMore: document.querySelector('.js-loadmore')\r\n\t},\r\n\r\n\tloadContent(el) {\r\n\t\tlet numberOfItems = Number(el.dataset.results)\r\n\t\tconst articles = el.parentElement.querySelectorAll('.search-results__article'),\r\n\t\t\tarrayArticles = [...articles]\r\n\r\n\t\tarrayArticles.forEach(el => el.style.display = 'none')\r\n\r\n\t\tarrayArticles.slice(0, numberOfItems).forEach(el => el.style.display = 'block')\r\n\r\n\t},\r\n\r\n\tevents(el) {\r\n\t\tlet numberOfItems = Number(el.dataset.results)\r\n\t\tconst articles = el.parentElement.querySelectorAll('.search-results__article'),\r\n\t\t\tarrayArticles = [...articles]\r\n\r\n\t\tthis.el.buttonLoadMore.addEventListener('click', e => {\r\n\t\t\tnumberOfItems = numberOfItems + Number(el.dataset.results)\r\n\t\t\tarrayArticles.slice(0, numberOfItems).forEach(el => el.style.display = 'block')\r\n\t\t\tif (numberOfItems >= arrayArticles.length)\r\n\t\t\t\te.currentTarget.style.display = 'none'\r\n\t\t})\r\n\t},\r\n\r\n\tinit() {\r\n\t\tif (!this.el.buttonLoadMore) return\r\n\t\tthis.events(this.el.buttonLoadMore)\r\n\t\tthis.loadContent(this.el.buttonLoadMore)\r\n\t}\r\n}\r\n\r\nloadMore.init()","/* global Macy */\r\nconst masonryLayout = {\r\n\tel: {\r\n\t\tmasonryContainer: document.querySelector('.areas-grid')\r\n\t},\r\n\r\n\tfxMasonry() {\r\n\t\tif (!this.el.masonryContainer) return\r\n\r\n\t\tconst macy = new Macy({\r\n\t\t\tcontainer: '.areas-grid',\r\n\t\t\ttrueOrder: true,\r\n\t\t\tcolumns: 1,\r\n\t\t\tmobileFirst: true,\r\n\t\t\tmargin: {\r\n\t\t\t\tx: 30,\r\n\t\t\t\ty: 50\r\n\t\t\t},\r\n\t\t\tbreakAt: {\r\n\t\t\t\t1024: 2\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\twindow.addEventListener('resize', () => macy.recalculate(true))\r\n\t},\r\n\r\n\tinit() {\r\n\t\tthis.fxMasonry()\r\n\t}\r\n}\r\n\r\nmasonryLayout.init()","/* global http */\r\nconst modal = {\r\n\tel: {\r\n\t\tbody: document.body,\r\n\t\theader: document.querySelector('.header'),\r\n\t\tmodals: document.querySelectorAll('.modal'),\r\n\t\tmodalHeader: document.querySelector('.modal__header-copy'),\r\n\t\tmodalTitle: document.querySelector('.modal__heading'),\r\n\t\tmodalFlyerCourse: document.querySelector('.modal__grid-heading'),\r\n\t\tmodalFlyerInfo: document.querySelector('.modal__grid-posheading'),\r\n\t\tmodalFlyerImage: document.querySelector('.modal__grid-image'),\r\n\t\tmodalList: document.querySelector('.modal__list'),\r\n\t\tmodalCards: document.querySelector('.modal__cards'),\r\n\t\tmodalContent: document.querySelector('.modal__content'),\r\n\t\tmodalPrizesType: document.querySelector('.js-prizes-type'),\r\n\t\tmodalPrizesPartner: document.querySelector('.js-prizes-partner'),\r\n\t\tmodalPrizesContent: document.querySelector('.js-prizes-content'),\r\n\t\tmodalPrizesCaption: document.querySelector('.js-prizes-caption'),\r\n\t\tmodalOpen: document.querySelectorAll('.js-open-modal'),\r\n\t\tmodalClose: document.querySelectorAll('.js-close-modal')\r\n\t},\r\n\r\n\tfxGetTableStudies(element) {\r\n\t\tconst endpoint = `${element.closest('.js-modal-endpoint').dataset.endpoint}${element.dataset.tableId}`\r\n\r\n\t\tconst callback = response => {\r\n\t\t\tconst data = response.data\r\n\t\t\tdocument.querySelector('.modal-studyplans .modal__preloader').classList.add('d-none')\r\n\r\n\t\t\tif (response.status === 200) {\r\n\t\t\t\tthis.el.modalTitle.textContent = data.title\r\n\t\t\t\tthis.el.modalCards.querySelector('.modal__item-heading').textContent = data.teachers.title\r\n\r\n\t\t\t\tdata.list.forEach(el => {\r\n\t\t\t\t\tthis.el.modalList.innerHTML +=\r\n\t\t\t\t\t\t`\r\n\t\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\t\t

    ${el.title}

    \r\n\t\t\t\t\t\t\t\t

    ${el.copy}

    \r\n\t\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t`\r\n\t\t\t\t})\r\n\r\n\t\t\t\tdata.teachers.cards.forEach(el => {\r\n\t\t\t\t\tthis.el.modalCards.querySelector('.card-avatar').innerHTML +=\r\n\t\t\t\t\t\t`\r\n\t\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t\t\"${el.name}\"\r\n\t\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t\t
    ${el.name}
    \r\n\t\t\t\t\t\t\t\t\t\t
    ${el.job}
    \r\n\t\t\t\t\t\t\t\t\t\t${el.email}\r\n\t\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t`\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tdocument.querySelector('.modal-studyplans .modal__preloader').classList.remove('d-none')\r\n\t\thttp.fxGet(endpoint, callback)\r\n\t},\r\n\r\n\tfxGetTablePrizes(element) {\r\n\t\tconst endpoint = element.parentElement.dataset.endpoint\r\n\r\n\t\tconst callback = response => {\r\n\t\t\tconst data = response.data\r\n\t\t\tdocument.querySelector('.modal-prizes .modal__preloader').classList.add('d-none')\r\n\r\n\t\t\t//prevent Duplicates\r\n\t\t\tthis.el.modalPrizesContent.innerHTML = ''\r\n\t\t\tthis.el.modalPrizesCaption.innerHTML = ''\r\n\r\n\t\t\tdata.results.forEach(el => {\r\n\t\t\t\tif (response.status === 200 && Number(element.dataset.prizeId) === el.id) {\r\n\t\t\t\t\tthis.el.modalHeader.textContent = el.title\r\n\t\t\t\t\tthis.el.modalPrizesType.textContent = el.prizeType\r\n\t\t\t\t\tthis.el.modalPrizesPartner.textContent = el.partner ? `(${el.partner})` : ''\r\n\r\n\t\t\t\t\tel.info.forEach(el => {\r\n\t\t\t\t\t\tthis.el.modalPrizesContent.innerHTML +=\r\n\t\t\t\t\t\t\t`\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t${el.class}\r\n\t\t\t\t\t\t\t\t\t${el.course}\r\n\t\t\t\t\t\t\t\t\t${el.prize}\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t`\r\n\t\t\t\t\t})\r\n\r\n\t\t\t\t\tel.caption.forEach(el => this.el.modalPrizesCaption.innerHTML += `
  • ${el.item}
  • `)\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t}\r\n\t\tdocument.querySelector('.modal-prizes .modal__preloader').classList.remove('d-none')\r\n\t\thttp.fxGet(endpoint, callback)\r\n\t},\r\n\r\n\tfxCreateCookie(name, value, days) {\r\n\t\tlet expires\r\n\r\n\t\tif (days) {\r\n\t\t\tconst date = new Date()\r\n\t\t\tdate.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000))\r\n\t\t\texpires = `expires=${date.toUTCString()}`\r\n\t\t}\r\n\t\tdocument.cookie = `${name}=${value || ''}; ${expires}; path=/`\r\n\t},\r\n\r\n\tfxReadCookie(name) {\r\n\t\tlet cookie = {}\r\n\t\tdocument.cookie.split(';').forEach(el => {\r\n\t\t\tlet [key, value] = el.split('=')\r\n\t\t\tcookie[key.trim()] = value\r\n\t\t})\r\n\t\treturn cookie[name]\r\n\t},\r\n\r\n\tfxShowFlyer(element) {\r\n\t\tconst flyerDownloadedId = `flyer-downloaded-${element.dataset.flyerId}`\r\n\t\tthis.el.modalFlyerCourse.textContent = element.dataset.flyerText\r\n\t\tthis.el.modalFlyerImage.src = element.dataset.flyerImage\r\n\r\n\t\tif (this.fxReadCookie(flyerDownloadedId)) {\r\n\t\t\tthis.el.modalFlyerInfo.classList.add('d-none')\r\n\t\t\tdocument.querySelector('.form-cookieless') && document.querySelector('.form-cookieless').classList.add('d-none')\r\n\t\t\tdocument.querySelector('.js-button-download') && document.querySelector('.js-button-download').classList.remove('d-none')\r\n\t\t}\r\n\t},\r\n\r\n\tevents() {\r\n\t\tif (!this.el.modalOpen) return\r\n\r\n\t\tthis.el.modalOpen.forEach(el => el.addEventListener('click', e => {\r\n\r\n\t\t\tthis.el.body.classList.add('no-scroll-hidden')\r\n\t\t\tif (this.el.header.classList.contains('header--fixed')) {\r\n\t\t\t\tthis.el.header.classList.add('header--modal')\r\n\t\t\t\tthis.el.header.classList.remove('header--fixed')\r\n\t\t\t}\r\n\t\t\tthis.el.modalContent.classList.remove('d-none')\r\n\r\n\t\t\tswitch (true) {\r\n\t\t\t\tcase el.hasAttribute('data-table-id'):\r\n\t\t\t\t\te.currentTarget.hasAttribute('data-table-id') && document.querySelector('.modal-studyplans').classList.add('is-modal-open')\r\n\t\t\t\t\tthis.fxGetTableStudies(el)\r\n\t\t\t\t\tbreak\r\n\r\n\t\t\t\tcase el.hasAttribute('data-prize-id'):\r\n\t\t\t\t\te.currentTarget.hasAttribute('data-prize-id') && document.querySelector('.modal-prizes').classList.add('is-modal-open')\r\n\t\t\t\t\tthis.fxGetTablePrizes(el)\r\n\t\t\t\t\tbreak\r\n\r\n\t\t\t\tcase el.hasAttribute('data-flyer-id'):\r\n\t\t\t\t\te.currentTarget.hasAttribute('data-flyer-id') && document.querySelector('.modal-flyer').classList.add('is-modal-open')\r\n\t\t\t\t\tthis.fxShowFlyer(el)\r\n\t\t\t\t\tbreak\r\n\r\n\t\t\t\tcase el.hasAttribute('data-contacts-id'):\r\n\t\t\t\t\te.currentTarget.hasAttribute('data-contacts-id') && document.querySelector('.modal-contacts').classList.add('is-modal-open')\r\n\t\t\t\t\tbreak\r\n\r\n\t\t\t\tcase el.classList.contains('filter-search__button'):\r\n\t\t\t\t\te.currentTarget.classList.contains('filter-search__button') && document.querySelector('.modal-filter').classList.add('is-modal-open')\r\n\t\t\t\t\tbreak\r\n\r\n\t\t\t\tcase el.classList.contains('content__info-button'):\r\n\t\t\t\t\te.currentTarget.classList.contains('content__info-button') && document.querySelector('.modal-event').classList.add('is-modal-open')\r\n\t\t\t\t\tbreak\r\n\t\t\t}\r\n\t\t}))\r\n\r\n\t\tif (!this.el.modalClose) return\r\n\r\n\t\tthis.el.modalClose.forEach(el => el.addEventListener('click', () => {\r\n\t\t\tthis.el.modals.forEach(el => el.classList.remove('is-modal-open'))\r\n\t\t\tthis.el.body.classList.remove('no-scroll-hidden')\r\n\t\t\tif (this.el.header.classList.contains('header--modal')) {\r\n\t\t\t\tthis.el.header.classList.remove('header--modal')\r\n\t\t\t\tthis.el.header.classList.add('header--fixed')\r\n\t\t\t}\r\n\t\t\tthis.el.modalContent.classList.add('d-none')\r\n\r\n\t\t\tthis.el.modalList ? this.el.modalList.innerHTML = '' : ''\r\n\t\t\tthis.el.modalTitle ? this.el.modalTitle.innerHTML = '' : ''\r\n\t\t\tthis.el.modalPrizesContent ? this.el.modalPrizesContent.innerHTML = '' : ''\r\n\t\t\tif (this.el.modalCards) {\r\n\t\t\t\tthis.el.modalCards.querySelector('.modal__item-heading').innerHTML = ''\r\n\t\t\t\tthis.el.modalCards.querySelector('.card-avatar').innerHTML = ''\r\n\t\t\t}\r\n\t\t}))\r\n\t},\r\n\r\n\tinit() {\r\n\t\tthis.events()\r\n\t}\r\n}\r\n\r\nmodal.init()","const nav = {\r\n\tel: {\r\n\t\tbody: document.body,\r\n\t\theader: document.querySelector('.header'),\r\n\t\tnav: document.querySelector('.nav'),\r\n\t\tnavLower: document.querySelector('.nav__lower'),\r\n\t\tnavItem: document.querySelectorAll('.nav__item'),\r\n\t\tnavBack: document.querySelectorAll('.js-back-first-level'),\r\n\t\tsubNav: document.querySelectorAll('.nav__wrap'),\r\n\t\tsubNavHeading: document.querySelectorAll('.nav__subheading'),\r\n\t\tsubNavItem: document.querySelectorAll('.nav__subitem'),\r\n\t\tsubNavBack: document.querySelectorAll('.js-back-second-level'),\r\n\t\tsubSubNav: document.querySelectorAll('.nav__menuwrap'),\r\n\t\taside: document.querySelector('.aside')\r\n\t},\r\n\r\n\tvars: {\r\n\t\textraLargeAndUp: window.matchMedia('(min-width: 80em)')\r\n\t},\r\n\r\n\tfxNavToggle() {\r\n\t\tthis.el.nav.addEventListener('click', e => {\r\n\t\t\tif (e.target.classList.contains('nav') || e.target.classList.contains('nav__hamburger')) {\r\n\t\t\t\t!this.el.header.classList.contains('header--fixed') ? this.el.header.classList.add('header--fixed') : ''\r\n\t\t\t\tthis.el.body.classList.toggle('no-scroll-hidden')\r\n\t\t\t\tthis.el.nav.classList.toggle('is-nav-open')\r\n\t\t\t\tthis.el.subNav.forEach(el => el.classList.remove('is-second-level', 'is-third-level'))\r\n\t\t\t\tthis.el.navItem.forEach(el => el.removeAttribute('style'))\r\n\t\t\t\tthis.el.subNavItem.forEach(el => el.removeAttribute('style'))\r\n\t\t\t\tthis.el.navLower.removeAttribute('style')\r\n\t\t\t\tif (this.el.aside) {\r\n\t\t\t\t\tthis.el.aside.classList.toggle('is-nav-open')\r\n\t\t\t\t\tthis.el.aside.classList.contains('is-nav-open') ? this.el.aside.classList.remove('is-nav-open') : ''\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\t},\r\n\r\n\tfxNavBack(el, classRemove) {\r\n\t\tel.forEach(el => el.addEventListener('click', e => {\r\n\t\t\te.stopPropagation()\r\n\t\t\tthis.el.navLower.removeAttribute('style')\r\n\r\n\t\t\tif (classRemove === 'is-third-level') {\r\n\t\t\t\tthis.el.subSubNav.forEach(el => el.style.right = '-100%')\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\tthis.el.subNav.forEach(el => el.classList.remove(classRemove))\r\n\t\t\t\t\tthis.el.subSubNav.forEach(el => el.removeAttribute('style'))\r\n\t\t\t\t\tthis.el.subNavItem.forEach(el => el.removeAttribute('style'))\r\n\t\t\t\t}, 500)\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.el.subNav.forEach(el => el.classList.remove(classRemove))\r\n\t\t\t\tthis.el.navItem.forEach(el => el.removeAttribute('style'))\r\n\t\t\t}\r\n\t\t}))\r\n\t},\r\n\r\n\tevents() {\r\n\t\tif (this.vars.extraLargeAndUp.matches) {\r\n\t\t\t//open submenu on hover\r\n\t\t\tthis.el.navItem.forEach(el => el.addEventListener('mouseenter', e => {\r\n\t\t\t\tthis.el.subNav.forEach(el => el.classList.remove('is-hovered'))\r\n\t\t\t\te.currentTarget.querySelector('.nav__wrap') && e.currentTarget.querySelector('.nav__wrap').classList.add('is-hovered')\r\n\t\t\t}))\r\n\r\n\t\t\t//close menu on hover\r\n\t\t\tthis.el.header.addEventListener('mouseleave', () => this.el.subNav.forEach(el => el.classList.remove('is-hovered')))\r\n\t\t\tthis.el.navLower.addEventListener('mouseenter', () => this.el.subNav.forEach(el => el.classList.remove('is-hovered')))\r\n\t\t}\r\n\r\n\t\telse {\r\n\t\t\tthis.el.navItem.forEach(el => el.addEventListener('click', e => {\r\n\t\t\t\tif (e.currentTarget.querySelector('.nav__wrap')) {\r\n\t\t\t\t\tthis.el.navLower.style.display = 'none'\r\n\t\t\t\t\tthis.el.navItem.forEach(el => el.style.position = 'static')\r\n\t\t\t\t\tthis.el.subNav.forEach(el => el.classList.remove('is-second-level'))\r\n\t\t\t\t\te.currentTarget.querySelector('.nav__wrap').classList.add('is-second-level')\r\n\t\t\t\t}\r\n\t\t\t}))\r\n\r\n\t\t\tthis.el.subNavItem.forEach(el => el.addEventListener('click', e => {\r\n\t\t\t\tthis.el.subNavItem.forEach(el => el.style.display = 'none')\r\n\t\t\t\te.currentTarget.style.cssText = 'display: block; position: static;'\r\n\t\t\t\tthis.el.subNav.forEach(el => el.classList.remove('is-second-level', 'is-third-level'))\r\n\t\t\t\te.currentTarget.closest('.nav__wrap').classList.add('is-second-level', 'is-third-level')\r\n\t\t\t}))\r\n\t\t}\r\n\r\n\t},\r\n\tinit() {\r\n\t\tthis.fxNavBack(this.el.navBack, 'is-second-level')\r\n\t\tthis.fxNavBack(this.el.subNavBack, 'is-third-level')\r\n\t\tthis.fxNavToggle()\r\n\t\tthis.events()\r\n\t}\r\n}\r\n\r\nnav.init()","/* global http pagination scrollToElement*/\r\nconst news = {\r\n\tel: {\r\n\t\tnewsContainer: document.querySelector('.js-get-news')\r\n\t},\r\n\r\n\tvars: {\r\n\t\tcurrentPage: 1\r\n\t},\r\n\r\n\tfxGetNewsOnLoad() {\r\n\t\tconst endpoint = this.el.newsContainer.dataset.endpoint,\r\n\t\t\tpaginationList = this.el.newsContainer.nextElementSibling.querySelector('.pagination__list')\r\n\r\n\t\tconst callback = response => {\r\n\t\t\tthis.fxNewsCallback(response, '.media__list')\r\n\t\t\tpagination.fxPaginationHelper(response, paginationList)\r\n\t\t\tif (response.data.pagination.length > pagination.vars.maxPaginationItem)\r\n\t\t\t\tpaginationList.querySelectorAll(`.pagination__item:nth-of-type(n+${pagination.vars.maxPaginationItem+1}`).forEach(el => el.classList.add('is-hidden'))\r\n\t\t}\r\n\r\n\t\thttp.fxGet(endpoint, callback)\r\n\t},\r\n\r\n\tfxNewsCallback(response, selector) {\r\n\t\tconst data = response.data\r\n\t\tdocument.querySelector(selector).innerHTML = ''\r\n\r\n\t\tif (document.querySelector(selector).closest('.js-get-news')) {\r\n\t\t\tdata.results.forEach(el => {\r\n\t\t\t\tconst date = new Date(el.date),\r\n\t\t\t\t\tformattedDate = new Date(el.date).toLocaleDateString(),\r\n\t\t\t\t\tgetMonth = date.toLocaleDateString(this.el.newsContainer.dataset.language, { month: 'long' }),\r\n\t\t\t\t\ttarget = el.link.target === '_blank' ? el.link.target : '_self'\r\n\r\n\t\t\t\tdocument.querySelector(selector).innerHTML +=\r\n\t\t\t\t\t`\r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t${el.title}\r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t

    ${el.title}

    \r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t${el.link.name}\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t`\r\n\t\t\t})\r\n\r\n\t\t\twindow.addEventListener('load', () => scrollToElement.fxScrollTo(document.querySelectorAll('.pagination__item, .pagination__button'), this))\r\n\t\t}\r\n\t},\r\n\r\n\tfxGetNewsPaginationItem() {\r\n\t\tdocument.addEventListener('click', e => {\r\n\t\t\tif (e.target && e.target.classList.contains('pagination__item') && e.target.offsetParent.querySelector('.js-get-news')) {\r\n\t\t\t\te.target.closest('.pagination__list').querySelectorAll('.pagination__item').forEach(el => el.classList.remove('is-active'))\r\n\t\t\t\te.target.classList.add('is-active')\r\n\r\n\t\t\t\tconst endpoint = this.el.newsContainer.dataset.endpoint,\r\n\t\t\t\t\tpaginationList = e.target.parentElement,\r\n\t\t\t\t\tpage = Number(e.target.querySelector('button').textContent)\r\n\r\n\t\t\t\tconst callback = response => this.fxNewsCallback(response, '.media__list--flex')\r\n\r\n\t\t\t\thttp.fxGet(`${endpoint.substring(0, endpoint.lastIndexOf('/') + 1)}${page}`, callback).then(response => {\r\n\t\t\t\t\tthis.vars.currentPage = response.data.pagination.filter(el => {\r\n\t\t\t\t\t\tif (el.currentPage) return el\r\n\t\t\t\t\t})[0].page\r\n\t\t\t\t\tpagination.fxPaginationItemHelper(response, paginationList, this.vars.currentPage)\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t})\r\n\t},\r\n\r\n\tfxGetNewsNavigation() {\r\n\t\tpagination.el.paginationButtonPrev.forEach(el => el.addEventListener('click', e => {\r\n\t\t\tif (el.offsetParent.querySelector('.js-get-news')) {\r\n\t\t\t\tthis.vars.currentPage--\r\n\t\t\t\tpagination.fxNavigationHelper(this.el.newsContainer.dataset.endpoint, '.media__list--flex', e.target.nextElementSibling, this.vars.currentPage)\r\n\t\t\t}\r\n\t\t}))\r\n\r\n\t\tpagination.el.paginationButtonNext.forEach(el => el.addEventListener('click', e => {\r\n\t\t\tif (el.offsetParent.querySelector('.js-get-news')) {\r\n\t\t\t\tthis.vars.currentPage++\r\n\t\t\t\tpagination.fxNavigationHelper(this.el.newsContainer.dataset.endpoint, '.media__list--flex', e.target.previousElementSibling, this.vars.currentPage)\r\n\t\t\t}\r\n\t\t}))\r\n\t},\r\n\r\n\tinit() {\r\n\t\tif (!this.el.newsContainer) return\r\n\t\tthis.fxGetNewsOnLoad()\r\n\t\tthis.fxGetNewsPaginationItem()\r\n\t\tthis.fxGetNewsNavigation()\r\n\t}\r\n}\r\n\r\nnews.init()","/*global noUiSlider */\r\nconst range = {\r\n\tel: {\r\n\t\trangeSlider: document.querySelector('.js-range')\r\n\t},\r\n\r\n\tfxnoUiSlider() {\r\n\t\tif (!this.el.rangeSlider) return\r\n\t\t\r\n\t\tconst currentYear = new Date().getFullYear()\r\n\r\n\t\tnoUiSlider.create(this.el.rangeSlider, {\r\n\t\t\tstart: [2006, currentYear],\r\n\t\t\tconnect: true,\r\n\t\t\ttooltips: true,\r\n\t\t\tstep: 1,\r\n\t\t\tformat: {\r\n\t\t\t\tto: value => {\r\n\t\t\t\t\treturn Math.round(value)\r\n\t\t\t\t},\r\n\t\t\t\tfrom: value => {\r\n\t\t\t\t\treturn Math.round(value)\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\trange: {\r\n\t\t\t\t'min': 2006,\r\n\t\t\t\t'max': currentYear\r\n\t\t\t}\r\n\t\t})\r\n\t},\r\n\r\n\tinit() {\r\n\t\tthis.fxnoUiSlider()\r\n\t}\r\n}\r\n\r\nrange.init()","/*global http pagination searchFilter*/\r\nconst search = {\r\n\tel: {\r\n\t\tbody: document.body,\r\n\t\tsearch: document.querySelector('.search'),\r\n\t\tnav: document.querySelector('.nav'),\r\n\t\tform: document.querySelector('.general'),\r\n\t\tfilterFormModal: document.querySelectorAll('.js-filter'),\r\n\t\tsearchOpen: document.querySelectorAll('.js-open-search'),\r\n\t\tsearchClose: document.querySelector('.js-close-search'),\r\n\t\tsearchHighlights: document.querySelector('.search__highlights')\r\n\t},\r\n\r\n\tvars: {\r\n\t\ttimer: '',\r\n\t\tcurrentPage: 1,\r\n\t\tendpoint: `${document.querySelector('.general').getAttribute('action')}/`\r\n\t},\r\n\r\n\tfxHideHighlights() {\r\n\t\tconst search = this.el.search\r\n\r\n\t\tthis.el.searchHighlights && this.el.searchHighlights.removeAttribute('style')\r\n\r\n\t\tsearch.querySelector('.search-results').classList.remove('has-value')\r\n\t\tsearch.querySelector('.filter-search__text').classList.remove('has-value')\r\n\t\tsearch.querySelector('.pagination').classList.remove('has-value')\r\n\t},\r\n\r\n\tfxClearSearch() {\r\n\t\tconst search = this.el.search,\r\n\t\t\tclearButton = search.querySelector('.js-search-clean'),\r\n\t\t\tinput = search.querySelector('.js-autocomplete'),\r\n\t\t\tsearchResults = search.querySelector('.search-results'),\r\n\t\t\tsearchResultsContent = searchResults.innerHTML\r\n\r\n\t\tclearButton.addEventListener('click', e => {\r\n\t\t\te.currentTarget.removeAttribute('style')\r\n\t\t\tinput.value = ''\r\n\t\t\tthis.el.searchHighlights && this.fxHideHighlights()\r\n\t\t\tsearchResults.innerHTML = searchResultsContent\r\n\t\t\tthis.vars.currentPage = 1\r\n\t\t})\r\n\t},\r\n\r\n\t//pagination\r\n\tfxGetResultsPaginationButton() {\r\n\t\tif (!pagination.el.paginationButtonPrev || !pagination.el.paginationButtonNext) return\r\n\t\tpagination.el.paginationButtonPrev.forEach(el => el.addEventListener('click', e => {\r\n\t\t\tconst search = e.target.closest('.search')\r\n\r\n\t\t\tif (search) {\r\n\t\t\t\tthis.vars.currentPage--\r\n\t\t\t\tpagination.fxNavigationHelper(this.vars.endpoint, '.search-results', e.target.nextElementSibling, this.vars.currentPage)\r\n\t\t\t}\r\n\t\t}))\r\n\r\n\t\tpagination.el.paginationButtonNext.forEach(el => el.addEventListener('click', e => {\r\n\t\t\tconst search = e.target.closest('.search')\r\n\r\n\t\t\tif (search) {\r\n\t\t\t\tthis.vars.currentPage++\r\n\t\t\t\tpagination.fxNavigationHelper(this.vars.endpoint, '.search-results', e.target.previousElementSibling, this.vars.currentPage)\r\n\t\t\t}\r\n\t\t}))\r\n\t},\r\n\r\n\tfxGetResultsPaginationItem() {\r\n\t\tconst input = this.el.search.querySelector('.js-autocomplete')\r\n\r\n\t\tdocument.addEventListener('click', e => {\r\n\t\t\tif (e.target && e.target.classList.contains('pagination__item') && e.target.closest('.search')) {\r\n\t\t\t\tconst paginationItem = e.target,\r\n\t\t\t\t\tpaginationAllItems = paginationItem.closest('.pagination__list').querySelectorAll('.pagination__item'),\r\n\t\t\t\t\tpage = Number(paginationItem.querySelector('button').textContent),\r\n\t\t\t\t\tpaginationList = paginationItem.parentElement\r\n\r\n\t\t\t\tpaginationAllItems.forEach(el => el.classList.remove('is-active'))\r\n\t\t\t\tpaginationItem.classList.add('is-active')\r\n\r\n\t\t\t\tconst callback = response => {\r\n\t\t\t\t\tpagination.fxPaginationHelper(response, paginationList)\r\n\t\t\t\t\tthis.fxSearchCallback(response, page)\r\n\t\t\t\t}\r\n\r\n\t\t\t\thttp.fxGet(`${this.vars.endpoint.substring(0, this.vars.endpoint.lastIndexOf('/') + 1)}${input.value}/${page}`, callback).then(response => {\r\n\t\t\t\t\tthis.vars.currentPage = response.data.pagination.filter(el => {\r\n\t\t\t\t\t\tif (el.currentPage) return el\r\n\t\t\t\t\t})[0].page\r\n\t\t\t\t\tpagination.fxPaginationItemHelper(response, paginationList, this.vars.currentPage)\r\n\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t})\r\n\t},\r\n\r\n\tfxGetResultsOnEvents() {\r\n\t\tconst input = this.el.search.querySelector('.js-autocomplete')\r\n\r\n\t\tinput.addEventListener('keydown', e => {\r\n\t\t\tif (e.key === 'Enter') {\r\n\t\t\t\te.preventDefault()\r\n\t\t\t\tif (input.value.length >= 3)\r\n\t\t\t\t\tthis.fxSearch(input.value)\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\tthis.el.search.querySelector('.js-search-filter').addEventListener('click', e => {\r\n\t\t\te.preventDefault()\r\n\t\t\tthis.fxSearch(input.value)\r\n\t\t})\r\n\t},\r\n\r\n\tfxAutocomplete() {\r\n\t\tconst search = this.el.search,\r\n\t\t\tclearButton = search.querySelector('.js-search-clean'),\r\n\t\t\tinput = search.querySelector('.js-autocomplete'),\r\n\t\t\tsearchResults = search.querySelector('.search-results'),\r\n\t\t\tsearchResultsContent = searchResults.innerHTML\r\n\r\n\t\tinput.addEventListener('input', () => {\r\n\t\t\tif (input.value.length >= 3) {\r\n\t\t\t\tthis.el.searchHighlights ? this.el.searchHighlights.style.display = 'none' : ''\r\n\t\t\t\tinput.nextElementSibling.style.display = 'block'\r\n\r\n\t\t\t\tclearTimeout(this.vars.timer)\r\n\r\n\t\t\t\tthis.vars.timer = setTimeout(() => {\r\n\t\t\t\t\tthis.fxSearch(input.value)\r\n\t\t\t\t\tsearch.querySelector('.search-results').classList.add('has-value')\r\n\t\t\t\t\tsearch.querySelector('.filter-search__text').classList.add('has-value')\r\n\t\t\t\t\tsearch.querySelector('.pagination').classList.add('has-value')\r\n\t\t\t\t}, 1000)\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tclearButton.removeAttribute('style')\r\n\t\t\t\tthis.el.searchHighlights && this.fxHideHighlights()\r\n\t\t\t\tthis.vars.currentPage = 1\r\n\r\n\t\t\t\tif (input.value.length === 0) {\r\n\t\t\t\t\tsearchResults.innerHTML = searchResultsContent\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\t},\r\n\r\n\tfxSearchCallback(response, page) {\r\n\t\tconst searchContainer = this.el.search,\r\n\t\t\tnoResults = this.el.form.dataset.msgNoResults,\r\n\t\t\tpaginationList = searchContainer.querySelector('.pagination__list'),\r\n\t\t\tdata = response.data\r\n\r\n\t\t//prevent duplicate push\r\n\t\tsearchContainer.querySelector('.search-results').innerHTML = ''\r\n\r\n\t\t//numberOfResults\r\n\t\tsearchContainer.querySelector('.js-total-results').textContent = data.numberOfResults\r\n\r\n\t\tif (data.results.length === 0) {\r\n\t\t\tsearchContainer.querySelector('.pagination').style.display = 'none'\r\n\t\t\tsearchContainer.querySelector('.search-results').innerHTML = noResults\r\n\t\t}\r\n\r\n\t\telse {\r\n\t\t\t//pagination load\r\n\t\t\tif (page === undefined) {\r\n\t\t\t\tpagination.fxPaginationHelper(response, paginationList)\r\n\t\t\t\tif (data.pagination.length > pagination.vars.maxPaginationItem)\r\n\t\t\t\t\tpaginationList.querySelectorAll(`.pagination__item:nth-of-type(n+${pagination.vars.maxPaginationItem+1}`).forEach(el => el.classList.add('is-hidden'))\r\n\t\t\t}\r\n\r\n\t\t\tdata.results.forEach(el => {\r\n\t\t\t\tsearchContainer.querySelector('.pagination').removeAttribute('style')\r\n\t\t\t\tsearchContainer.querySelector('.search-results').innerHTML +=\r\n\t\t\t\t\t`\r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t

    ${el.title}

    \r\n\t\t\t\t\t\t\t

    ${el.description}

    \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t${el.link.caption}\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t`\r\n\t\t\t})\r\n\t\t}\r\n\t\tsearchContainer.querySelector('.js-autocomplete').scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'start' })\r\n\t},\r\n\r\n\tfxSearch(term) {\r\n\t\tconst query = `${term}/1`\r\n\r\n\t\tconst callback = response => this.fxSearchCallback(response)\r\n\r\n\t\thttp.fxGet(`${this.vars.endpoint}${query}`, callback)\r\n\t},\r\n\r\n\tfxToggleModal() {\r\n\t\tconst search = this.el.search\r\n\r\n\t\tif (!this.el.searchOpen) return\r\n\r\n\t\tthis.el.searchOpen.forEach(el => el.addEventListener('click', () => {\r\n\t\t\tthis.el.searchHighlights && this.el.searchHighlights.removeAttribute('style')\r\n\t\t\tsearch.classList.add('is-search-open')\r\n\t\t\tthis.el.body.classList.add('no-scroll-hidden')\r\n\t\t\tthis.el.nav.classList.remove('is-nav-open')\r\n\t\t}))\r\n\r\n\t\tif (!this.el.searchClose) return\r\n\r\n\t\tthis.el.searchClose.addEventListener('click', e => {\r\n\t\t\te.preventDefault()\r\n\t\t\tsearch.classList.remove('is-search-open')\r\n\t\t\tthis.el.body.classList.remove('no-scroll-hidden')\r\n\t\t\tsearch.querySelector('.js-search-clean').removeAttribute('style')\r\n\t\t\tsearch.querySelector('.js-autocomplete').value = ''\r\n\t\t\tsearch.querySelector('.search-results').classList.remove('has-value')\r\n\t\t\tsearch.querySelector('.filter-search__text').classList.remove('has-value')\r\n\t\t\tsearch.querySelector('.pagination').classList.remove('has-value')\r\n\t\t\tthis.el.filterFormModal.forEach(el => searchFilter.fxFilterResults(el))\r\n\t\t})\r\n\t},\r\n\r\n\tinit() {\r\n\t\tthis.fxAutocomplete()\r\n\t\tthis.fxClearSearch()\r\n\t\tthis.fxGetResultsOnEvents()\r\n\t\tthis.fxGetResultsPaginationButton()\r\n\t\tthis.fxGetResultsPaginationItem()\r\n\t\tthis.fxToggleModal()\r\n\t}\r\n\r\n}\r\n\r\nsearch.init()","/* global Swiper */\r\nconst sliders = {\r\n\tel: {\r\n\t\tsliderContainer: document.querySelectorAll('.js-slider')\r\n\t},\r\n\r\n\tvars: {\r\n\t\tmediumAndUp: window.matchMedia('(min-width: 48em)'),\r\n\t\textraLargeAndUp: window.matchMedia('(min-width: 80em)')\r\n\t},\r\n\r\n\tfxInitSlider(el) {\r\n\t\tconst sliderCentered = el.dataset.sliderCentered ? JSON.parse(el.dataset.sliderCentered) : '',\r\n\t\t\tsliderDelay = el.dataset.sliderDelay ? JSON.parse(el.dataset.sliderDelay) : '',\r\n\t\t\tsliderLoop = el.dataset.sliderLoop ? JSON.parse(el.dataset.sliderLoop) : '',\r\n\t\t\tsliderAutoPlay = el.dataset.sliderAutoplay ? JSON.parse(el.dataset.sliderAutoplay) : '',\r\n\t\t\tsliderSizeWide = el.dataset.sliderWide ? JSON.parse(el.dataset.sliderWide) : '',\r\n\t\t\tsliderSizeLarge = el.dataset.sliderLarge ? JSON.parse(el.dataset.sliderLarge) : '',\r\n\t\t\tsliderSizeMedium = el.dataset.sliderMedium ? JSON.parse(el.dataset.sliderMedium) : '',\r\n\t\t\tsliderSizeSmall = el.dataset.sliderSmall ? JSON.parse(el.dataset.sliderSmall) : '',\r\n\t\t\tsliderPaginationType = el.dataset.sliderPaginationType ? el.dataset.sliderPaginationType : '',\r\n\t\t\tsliderSpaceBetween = el.dataset.sliderSpaceBetween ? JSON.parse(el.dataset.sliderSpaceBetween) : '',\r\n\t\t\tsliderOnInteraction = el.dataset.sliderOnInteraction ? JSON.parse(el.dataset.sliderOnInteraction) : '',\r\n\t\t\tsliderNoSwipe = el.dataset.sliderNoSwipe ? JSON.parse(el.dataset.sliderNoSwipe) : '',\r\n\t\t\tsliderFreeMode = el.dataset.sliderFreemode ? JSON.parse(el.dataset.sliderFreemode) : '',\r\n\t\t\tsliderFreeModeSticky = el.dataset.sliderFreemodeSticky ? JSON.parse(el.dataset.sliderFreemodeSticky) : '',\r\n\t\t\tsliderKeyboard = el.dataset.sliderKeyboard ? JSON.parse(el.dataset.sliderKeyboard) : '',\r\n\t\t\tsliderMouseWheel = el.dataset.sliderMousewheel ? JSON.parse(el.dataset.sliderMousewheel) : '',\r\n\t\t\tsliderScroll = el.dataset.sliderScroll ? JSON.parse(el.dataset.sliderScroll) : '',\r\n\t\t\tsliderSpeed = el.dataset.sliderSpeed ? JSON.parse(el.dataset.sliderSpeed) : '',\r\n\t\t\tslidesPerGroup = el.dataset.sliderGroup ? JSON.parse(el.dataset.sliderGroup) : '',\r\n\t\t\tslidesPerColumn = el.dataset.sliderColumn ? JSON.parse(el.dataset.sliderColumn) : ''\r\n\r\n\t\tconst slider = new Swiper(el, {\r\n\t\t\tslidesPerView: sliderSizeSmall ? sliderSizeSmall : 1,\r\n\t\t\tcenteredSlides: sliderCentered ? sliderCentered : false,\r\n\t\t\tloop: sliderLoop ? sliderLoop : false,\r\n\t\t\tspaceBetween: sliderSpaceBetween ? sliderSpaceBetween : 0,\r\n\t\t\tnoSwiping: sliderNoSwipe ? sliderNoSwipe : false,\r\n\t\t\tspeed: sliderSpeed ? sliderSpeed : 300,\r\n\t\t\tfreeMode: sliderFreeMode ? sliderFreeMode : false,\r\n\t\t\tfreeModeSticky: sliderFreeMode && sliderFreeModeSticky ? sliderFreeModeSticky : false,\r\n\t\t\tslideToClickedSlide: sliderFreeMode ? true : false,\r\n\t\t\tslidesPerGroup: slidesPerGroup ? slidesPerGroup : 1,\r\n\t\t\tslidesPerColumn: slidesPerColumn ? slidesPerColumn : 1,\r\n\t\t\tthreshold: el.closest('.slider-quote') ? 10000 : 0,\r\n\t\t\twatchOverflow: true,\r\n\t\t\tmousewheel: sliderFreeMode ? {\r\n\t\t\t\treleaseOnEdges: true\r\n\t\t\t} : sliderMouseWheel ? sliderMouseWheel : false,\r\n\r\n\t\t\tkeyboard: {\r\n\t\t\t\tenabled: sliderKeyboard ? sliderKeyboard : false\r\n\t\t\t},\r\n\r\n\t\t\tnavigation: {\r\n\t\t\t\tnextEl: el.closest('.slider-quote') ? '.js-slider-next' : el.querySelector('.swiper-button-next'),\r\n\t\t\t\tprevEl: el.closest('.slider-quote') ? '.js-slider-prev' : el.querySelector('.swiper-button-prev')\r\n\t\t\t},\r\n\r\n\t\t\tpagination: {\r\n\t\t\t\tel: el.querySelector('.swiper-pagination'),\r\n\t\t\t\tclickable: sliderPaginationType ? false : true,\r\n\t\t\t\ttype: sliderPaginationType ? sliderPaginationType : 'bullets' //\"bullets\", \"fraction\", \"progressbar\" or \"custom\" (default:\"bullets\")\r\n\t\t\t},\r\n\r\n\t\t\tscrollbar: {\r\n\t\t\t\tel: sliderScroll ? sliderScroll : null,\r\n\t\t\t\thide: sliderScroll && true\r\n\t\t\t},\r\n\r\n\t\t\tautoplay: sliderAutoPlay === true ? {\r\n\t\t\t\tdelay: sliderDelay ? sliderDelay : 5000,\r\n\t\t\t\tdisableOnInteraction: sliderOnInteraction ? sliderOnInteraction : false\r\n\t\t\t} : false,\r\n\r\n\t\t\tbreakpoints: {\r\n\t\t\t\t768: { //tablet up\r\n\t\t\t\t\tslidesPerView: sliderSizeMedium ? sliderSizeMedium : sliderSizeSmall ? sliderSizeSmall : 1\r\n\t\t\t\t},\r\n\t\t\t\t1280: { //small desktop up\r\n\t\t\t\t\tslidesPerView: sliderSizeLarge ? sliderSizeLarge : sliderSizeMedium ? sliderSizeMedium : sliderSizeSmall ? sliderSizeSmall : 1\r\n\t\t\t\t},\r\n\t\t\t\t1440: { // desktop up\r\n\t\t\t\t\tslidesPerView: sliderSizeWide ? sliderSizeWide : sliderSizeLarge ? sliderSizeLarge : sliderSizeMedium ? sliderSizeMedium : sliderSizeSmall ? sliderSizeSmall : 1\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\ton: {\r\n\t\t\t\tinit: () => setTimeout(() => {\r\n\t\t\t\t\twindow.dispatchEvent(new Event('resize'))\r\n\t\t\t\t\tif (el.querySelector('.swiper-slide-active .js-video') && el.querySelector('.swiper-slide-active .js-video').classList.contains('js-autoplay')) {\r\n\t\t\t\t\t\tslider.autoplay.stop()\r\n\t\t\t\t\t\tel.querySelector('.js-autoplay video').load()\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tslider.autoplay.start()\r\n\t\t\t\t\t}\r\n\t\t\t\t}, 100),\r\n\r\n\t\t\t\tslideChange: () => {\r\n\t\t\t\t\tif (el.querySelector('.js-video')) {\r\n\t\t\t\t\t\tel.closest('.slider-hero') && el.closest('.slider-hero').classList.contains('hidden-progress-bar') && el.closest('.slider-hero').classList.remove('hidden-progress-bar')\r\n\t\t\t\t\t\tel.querySelectorAll('.js-video').forEach(el => {\r\n\t\t\t\t\t\t\tconst videoPlayer = el.querySelector('video')\r\n\t\t\t\t\t\t\tconst progressBar = el.querySelector('.js-video-seekbar')\r\n\t\t\t\t\t\t\tprogressBar.value = 0\r\n\t\t\t\t\t\t\tvideoPlayer.pause()\r\n\t\t\t\t\t\t\tvideoPlayer.currentTime = 0\r\n\t\t\t\t\t\t\tvideoPlayer.muted = true\r\n\t\t\t\t\t\t\tvideoPlayer.closest('.swiper-slide').classList.remove('video-is-playing')\r\n\t\t\t\t\t\t\tvideoPlayer.parentElement.querySelector('.js-video-play').classList.contains('is-playing') && videoPlayer.parentElement.querySelector('.js-video-play').classList.remove('is-playing')\r\n\t\t\t\t\t\t\tvideoPlayer.parentElement.querySelector('.js-video-sound').classList.contains('has-sound') && videoPlayer.parentElement.querySelector('.js-video-sound').classList.remove('has-sound')\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\tif (el.querySelector('.swiper-slide-active .js-video') && el.querySelector('.swiper-slide-active .js-video').classList.contains('js-autoplay')) {\r\n\t\t\t\t\t\t\t\tslider.autoplay.stop()\r\n\t\t\t\t\t\t\t\tel.querySelector('.js-autoplay video').load()\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\tslider.autoplay.start()\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}, 100)\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\r\n\t\t\t\ttransitionStart: () => {\r\n\t\t\t\t\tif (this.vars.extraLargeAndUp.matches && el.parentElement.classList.contains('slider-media__grid'))\r\n\t\t\t\t\t\tel.querySelector('.slider-media__thumb').style.display = 'none'\r\n\t\t\t\t},\r\n\r\n\t\t\t\ttransitionEnd: () => {\r\n\t\t\t\t\tif (this.vars.extraLargeAndUp.matches && el.parentElement.classList.contains('slider-media__grid') && !el.swiper.slides[el.swiper.slides.length - 1].classList.contains('swiper-slide-active')) {\r\n\r\n\t\t\t\t\t\tconst nextSlide = el.querySelector('.swiper-slide-next'),\r\n\t\t\t\t\t\t\tnextSlideTitle = nextSlide.querySelector('.beta').innerHTML,\r\n\t\t\t\t\t\t\tnextSlideImage = nextSlide.querySelector('.slider-media__image').src\r\n\r\n\t\t\t\t\t\tel.querySelector('.slider-media__thumb').style.display = 'flex'\r\n\t\t\t\t\t\tel.querySelector('.slider-media__thumb-heading').innerHTML = nextSlideTitle\r\n\t\t\t\t\t\tel.querySelector('.slider-media__thumb-image').src = nextSlideImage\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\r\n\t\t\t\treachEnd: () => {\r\n\t\t\t\t\tif (this.vars.extraLargeAndUp.matches && el.parentElement.classList.contains('slider-media__grid')) {\r\n\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\tconst nextSlide = el.querySelector('[data-swiper-slide-index=\"1\"]'),\r\n\t\t\t\t\t\t\t\tnextSlideTitle = nextSlide.querySelector('.beta').innerHTML,\r\n\t\t\t\t\t\t\t\tnextSlideImage = nextSlide.querySelector('.slider-media__image').src\r\n\r\n\t\t\t\t\t\t\tel.querySelector('.slider-media__thumb').style.display = 'flex'\r\n\t\t\t\t\t\t\tel.querySelector('.slider-media__thumb-heading').innerHTML = nextSlideTitle\r\n\t\t\t\t\t\t\tel.querySelector('.slider-media__thumb-image').src = nextSlideImage\r\n\t\t\t\t\t\t}, 300)\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\r\n\t\t\t\tresize: () => !this.vars.extraLargeAndUp.matches && document.querySelector('.slider-media__thumb') ? document.querySelector('.slider-media__thumb').style.display = 'none' : ''\r\n\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\tif (!document.querySelector('.js-next-slide')) return\r\n\t\tdocument.querySelector('.js-next-slide').addEventListener('click', () => slider.slideNext())\r\n\t},\r\n\r\n\tinit() {\r\n\t\tthis.el.sliderContainer.forEach(el => {\r\n\t\t\tif (el.querySelectorAll('.swiper-slide').length === 1) {\r\n\t\t\t\tif (el.closest('.slider-hero')) {\r\n\t\t\t\t\tel.querySelector('.slider-hero__nav-pagination').classList.add('d-none')\r\n\t\t\t\t\tel.closest('.slider-hero').classList.add('hidden-progress-bar')\r\n\t\t\t\t}\r\n\t\t\t\tif (el.closest('.slider-media')) {\r\n\t\t\t\t\tel.querySelector('.slider-media__thumb').classList.add('d-none')\r\n\t\t\t\t\tel.querySelector('.slider-media__nav-pagination').classList.add('d-none')\r\n\t\t\t\t\tel.querySelector('.slider-media__container').classList.add('hidden-progress-bar')\r\n\t\t\t\t}\r\n\t\t\t\tel.closest('.slider-quote') && el.querySelector('.slider-quote__navigation') && el.querySelector('.slider-quote__navigation').classList.add('d-none')\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\tthis.fxInitSlider(el)\r\n\t\t})\r\n\r\n\t}\r\n}\r\nsliders.init()","/* global Swiper */\r\nconst sliderBox = {\r\n\tel: {\r\n\t\tsliderContainerCommand: document.querySelectorAll('.js-slider-box-command'),\r\n\t\tsliderContainerController: document.querySelectorAll('.js-slider-box-controller')\r\n\t},\r\n\r\n\tfxInitSlider(el, elementControll) {\r\n\t\tconst sliderPaginationType = el.dataset.sliderPaginationType ? el.dataset.sliderPaginationType : ''\r\n\r\n\t\tconst swiperOptions = {\r\n\t\t\twatchOverflow: true,\r\n\t\t\tnavigation: {\r\n\t\t\t\tnextEl: el.parentElement.querySelector('.swiper-button-next'),\r\n\t\t\t\tprevEl: el.parentElement.querySelector('.swiper-button-prev')\r\n\t\t\t},\r\n\r\n\t\t\tpagination: {\r\n\t\t\t\tel: el.querySelector('.swiper-pagination'),\r\n\t\t\t\tclickable: true,\r\n\t\t\t\ttype: sliderPaginationType ? sliderPaginationType : 'bullets' //\"bullets\", \"fraction\", \"progressbar\" or \"custom\" (default:\"bullets\")\r\n\t\t\t},\r\n\r\n\t\t\ton: {\r\n\t\t\t\tinit: () => setTimeout(() => window.dispatchEvent(new Event('resize')), 100)\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// this way we can define which swiper instace controls the other\r\n\t\tnew Swiper(el, swiperOptions).controller.control = new Swiper(elementControll)\r\n\t},\r\n\r\n\tinit() {\r\n\t\tthis.el.sliderContainerController.forEach(el => {\r\n\t\t\tconst previousElement = el.parentElement.previousElementSibling.querySelector('.js-slider-box-command')\r\n\t\t\tthis.fxInitSlider(el, previousElement)\r\n\t\t})\r\n\r\n\t\t// this is the slider that controlls the other\r\n\t\tthis.el.sliderContainerCommand.forEach(el => {\r\n\t\t\tconst nextElement = el.parentElement.nextElementSibling.querySelector('.js-slider-box-controller')\r\n\t\t\tthis.fxInitSlider(el, nextElement)\r\n\t\t})\r\n\t}\r\n}\r\nsliderBox.init()","const social = {\r\n\tel: {\r\n\t\tsocialItem: document.querySelectorAll('.js-social')\r\n\t},\r\n\r\n\tfxPopupCenter(url, w = 600, h = 400) {\r\n\t\tconst dualScreenLeft = window.screenLeft !== undefined ? window.screenLeft : screen.left,\r\n\t\t\tdualScreenTop = window.screenTop !== undefined ? window.screenTop : screen.top,\r\n\t\t\twidth = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : screen.width,\r\n\t\t\theight = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : screen.height,\r\n\t\t\tleft = ((width / 2) - (w / 2)) + dualScreenLeft,\r\n\t\t\ttop = ((height / 2) - (h / 2)) + dualScreenTop,\r\n\t\t\tnewWindow = window.open(url, 'Share', `scrollbars=yes, width=${w}, height=${h}, top=${top}, left=${left}`)\r\n\t\t// Puts focus on the newWindow \r\n\t\twindow.focus ? newWindow.focus() : ''\r\n\t},\r\n\r\n\tevents() {\r\n\t\tthis.el.socialItem.forEach(el => el.addEventListener('click', e => {\r\n\t\t\te.preventDefault()\r\n\t\t\tconst encodedShareUrl = decodeURIComponent(location.href),\r\n\t\t\t\tshareUrl = `${e.currentTarget.dataset.url}${encodedShareUrl}`\r\n\r\n\t\t\tthis.fxPopupCenter(shareUrl)\r\n\t\t}))\r\n\t},\r\n\r\n\tinit() {\r\n\t\tthis.events()\r\n\t}\r\n\r\n}\r\n\r\nsocial.init()","/*global http*/\r\nconst tableFilter = {\r\n\tel: {\r\n\t\tfilterSelect: document.querySelectorAll('.js-filter-table'),\r\n\t\tfilterSelectContainer: document.querySelector('.table__selects'),\r\n\t\ttableHeading: document.querySelector('.js-table-heading'),\r\n\t\ttableContainer: document.querySelector('.js-table-content'),\r\n\t\tselectYears: document.querySelector('.js-years'),\r\n\t\tselectCourses: document.querySelector('.js-courses')\r\n\t},\r\n\r\n\tfxFilter(students, type) {\r\n\t\tconst filteredResults = [...students].filter(el => el.type === type.value),\r\n\t\t\tmsgNoResults = this.el.filterSelectContainer.dataset.msgNoResults,\r\n\t\t\tcellHeading = document.createElement('th')\r\n\r\n\t\tcellHeading.classList.add('table__cell', 'text-right', 'js-table-header')\r\n\t\t\r\n\t\tif (filteredResults.length === 0) {\r\n\t\t\tthis.el.tableContainer.innerHTML +=\r\n\t\t\t\t`\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t${msgNoResults}\r\n\t\t\t\t\t\r\n\t\t\t\t`\r\n\t\t}\r\n\r\n\t\telse if (type.options[type.selectedIndex].dataset.extrafieldenabled === 'True') {\r\n\t\t\tcellHeading.textContent = type.options[type.selectedIndex].dataset.extrafieldheader\r\n\t\t\tthis.el.tableHeading.appendChild(cellHeading)\r\n\r\n\t\t\tfilteredResults.forEach(el => {\r\n\t\t\t\tthis.el.tableContainer.innerHTML +=\r\n\t\t\t\t\t`\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t${el.name}\r\n\t\t\t\t\t\t\t${el.average}\r\n\t\t\t\t\t\t\t${el.field}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t`\r\n\t\t\t})\r\n\t\t}\r\n\t\t\r\n\t\telse {\r\n\t\t\tfilteredResults.forEach(el => {\r\n\t\t\t\tthis.el.tableContainer.innerHTML +=\r\n\t\t\t\t\t`\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t${el.name}\r\n\t\t\t\t\t\t\t${el.average}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t`\r\n\t\t\t})\r\n\t\t}\r\n\t},\r\n\r\n\tevents() {\r\n\t\tif (!this.el.filterSelectContainer) return\r\n\r\n\t\tconst endpoint = this.el.filterSelectContainer.dataset.endpoint\r\n\r\n\t\tthis.el.filterSelect.forEach(select => {\r\n\t\t\tselect.addEventListener('change', e => {\r\n\t\t\t\tconst callback = response => {\r\n\t\t\t\t\tconst data = response.data\r\n\r\n\t\t\t\t\tthis.el.tableContainer.innerHTML = ''\r\n\t\t\t\t\tdocument.querySelector('.js-table-header') ? this.el.tableHeading.removeChild(document.querySelector('.js-table-header')) : ''\r\n\r\n\t\t\t\t\tdata.forEach(item => {\r\n\t\t\t\t\t\tif (select.classList.contains('js-years') && select.value === item.year)\r\n\t\t\t\t\t\t\tthis.fxFilter(item.students, this.el.selectCourses)\r\n\t\t\t\t\t\telse if (item.year === this.el.selectYears.value)\r\n\t\t\t\t\t\t\tthis.fxFilter(item.students, e.target)\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\r\n\t\t\t\thttp.fxGet(endpoint, callback)\r\n\r\n\t\t\t})\r\n\t\t})\r\n\t},\r\n\r\n\tinit() {\r\n\t\tthis.events()\r\n\t}\r\n}\r\n\r\ntableFilter.init()","const toggle = {\r\n\tel: {\r\n\t\taccordionToggle: document.querySelectorAll('.js-toggle-accordion'),\r\n\t\tfilterToggle: document.querySelectorAll('.js-toggle-filter'),\r\n\t\ttableCaptionToggle: document.querySelectorAll('.js-toggle-caption'),\r\n\t\tasideList: document.querySelectorAll('.js-toggle-aside-list')\r\n\t},\r\n\r\n\tvars: {\r\n\t\textraLargeAndUp: window.matchMedia('(min-width: 80em)')\r\n\t},\r\n\r\n\tfxToggleElement(el) {\r\n\t\tif (el) {\r\n\t\t\tel.forEach(el => el.addEventListener('click', e => {\r\n\t\t\t\te.currentTarget.classList.toggle('is-toggled')\r\n\t\t\t\te.currentTarget.nextElementSibling.classList.toggle(el.classList.contains('js-toggle-aside-list') || (el.classList.contains('js-toggle-filter') && this.vars.extraLargeAndUp.matches) ? 'is-toggle-close' : 'is-toggle-open')\r\n\t\t\t\tif (el.classList.contains('js-toggle-caption'))\r\n\t\t\t\t\tel.textContent = el.classList.contains('is-toggled') ? el.dataset.captionHide : el.dataset.captionShow\r\n\t\t\t}))\r\n\t\t}\r\n\t},\r\n\r\n\tevents() {\r\n\t\tthis.fxToggleElement(this.el.accordionToggle)\r\n\t\tthis.fxToggleElement(this.el.filterToggle)\r\n\t\tthis.fxToggleElement(this.el.tableCaptionToggle)\r\n\t\tif (this.vars.extraLargeAndUp.matches)\r\n\t\t\tthis.fxToggleElement(this.el.asideList)\r\n\t},\r\n\r\n\tinit() {\r\n\t\tthis.events()\r\n\t}\r\n}\r\n\r\ntoggle.init()","const video = {\r\n\tel: {\r\n\t\tvideoContainer: document.querySelectorAll('.js-video')\r\n\t},\r\n\r\n\tfxTabSwitch(videoPlayer) {\r\n\t\tlet inTab = true\r\n\t\tdocument.addEventListener('visibilitychange', () => {\r\n\t\t\tinTab = !inTab\r\n\t\t\tinTab && videoPlayer.parentElement.querySelector('.js-video-play').classList.contains('is-playing') ? videoPlayer.play() : videoPlayer.pause()\r\n\t\t})\r\n\t},\r\n\r\n\tfxTimeUpdateVideos(videoPlayer) {\r\n\t\tif (videoPlayer.parentElement.querySelector('.js-video-play').classList.contains('is-playing')) {\r\n\t\t\tvideoPlayer.addEventListener('timeupdate', e => {\r\n\t\t\t\tif (e.currentTarget.currentTime || e.currentTarget.duration) {\r\n\t\t\t\t\tconst percentage = Math.round((e.currentTarget.currentTime / e.currentTarget.duration) * 100)\r\n\t\t\t\t\te.currentTarget.parentElement.querySelector('.js-video-seekbar').value = percentage\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t}\r\n\t},\r\n\r\n\tfxActionsOnEndVideo(videoPlayer) {\r\n\t\tvideoPlayer.addEventListener('ended', () => {\r\n\t\t\tvideoPlayer.parentElement.querySelector('.js-video-play').classList.remove('is-playing')\r\n\t\t\tvideoPlayer.currentTime = 0\r\n\t\t\tvideoPlayer.load()\r\n\t\t})\r\n\t},\r\n\r\n\tfxTogglePlayVideo(videoPlayer, playButton) {\r\n\t\tplayButton.addEventListener('click', e => {\r\n\t\t\te.currentTarget.classList.toggle('is-playing')\r\n\t\t\tvideoPlayer.paused ? videoPlayer.play() : videoPlayer.pause()\r\n\t\t\tthis.fxTimeUpdateVideos(videoPlayer)\r\n\t\t})\r\n\t},\r\n\r\n\tfxToggleSoundVideo(videoPlayer, soundButton) {\r\n\t\tsoundButton.addEventListener('click', e => {\r\n\t\t\te.currentTarget.classList.toggle('has-sound')\r\n\t\t\tvideoPlayer.muted = !videoPlayer.muted\r\n\t\t})\r\n\t},\r\n\r\n\tfxSeekVideo(videoPlayer, seekBar) {\r\n\t\tseekBar.addEventListener('click', e => {\r\n\t\t\tconst percentage = (e.pageX - e.currentTarget.getBoundingClientRect().left) / e.currentTarget.clientWidth,\r\n\t\t\t\ttime = videoPlayer.duration * percentage\r\n\t\t\tvideoPlayer.currentTime = time\r\n\t\t})\r\n\t},\r\n\r\n\tfxPlaysInlineVideo(videoPlayer, playButtonInSlider, playButton) {\r\n\t\tplayButtonInSlider && playButtonInSlider.forEach(el => {\r\n\t\t\tel.addEventListener('click', e => {\r\n\t\t\t\tconst target = e.currentTarget,\r\n\t\t\t\t\tswiper = target.closest('.swiper-container').swiper\r\n\r\n\t\t\t\tswiper && swiper.autoplay.stop()\r\n\t\t\t\ttarget.closest('.swiper-slide').classList.add('video-is-playing')\r\n\t\t\t\tplayButton.classList.add('is-playing')\r\n\t\t\t\tvideoPlayer.paused ? videoPlayer.play() : videoPlayer.pause()\r\n\t\t\t\tthis.fxTimeUpdateVideos(target.closest('.video-is-playing').querySelector('video'))\r\n\t\t\t\ttarget.closest('.slider-hero') && target.closest('.slider-hero').classList.add('hidden-progress-bar')\r\n\t\t\t})\r\n\t\t})\r\n\t},\r\n\r\n\tfxAutoPlayVideo(videoPlayer, autoPlayElement, playButton) {\r\n\r\n\t\tvideoPlayer.addEventListener('playing', e => {\r\n\t\t\tif (autoPlayElement) {\r\n\t\t\t\tplayButton.classList.add('is-playing')\r\n\t\t\t\te.currentTarget.closest('.swiper-slide').classList.add('video-is-playing')\r\n\t\t\t\tautoPlayElement.closest('.slider-hero').classList.add('hidden-progress-bar')\r\n\t\t\t\tthis.fxTimeUpdateVideos(videoPlayer) \r\n\t\t\t}\r\n\t\t})\r\n\t},\r\n\r\n\tevents() {\r\n\t\tif (!this.el.videoContainer) return\r\n\r\n\t\tthis.el.videoContainer.forEach(el => {\r\n\t\t\tconst playButton = el.querySelector('.js-video-play'),\r\n\t\t\t\tsoundButton = el.querySelector('.js-video-sound'),\r\n\t\t\t\tseekBar = el.querySelector('.js-video-seekbar'),\r\n\t\t\t\tvideoPlayer = el.querySelector('video'),\r\n\t\t\t\tplayButtonInSlider = el.closest('.js-slider') && el.closest('.js-slider').querySelectorAll('.js-slider-video-play'),\r\n\t\t\t\tautoPlayElement = el.classList.contains('js-autoplay') && el.parentElement.querySelector('.js-autoplay')\r\n\r\n\t\t\tthis.fxTabSwitch(videoPlayer)\r\n\t\t\tthis.fxActionsOnEndVideo(videoPlayer)\r\n\t\t\tthis.fxTogglePlayVideo(videoPlayer, playButton)\r\n\t\t\tthis.fxToggleSoundVideo(videoPlayer, soundButton)\r\n\t\t\tthis.fxSeekVideo(videoPlayer, seekBar)\r\n\t\t\tthis.fxPlaysInlineVideo(videoPlayer, playButtonInSlider, playButton)\r\n\t\t\tthis.fxAutoPlayVideo(videoPlayer, autoPlayElement, playButton)\r\n\t\t})\r\n\t},\r\n\r\n\tinit() {\r\n\t\tthis.events()\r\n\t}\r\n}\r\n\r\nvideo.init()"]}