{"version":3,"sources":["webpack:///./js/components/init-nav.ts","webpack:///./node_modules/@netc/aos/src/index.js","webpack:///./js/components/init-aos.ts","webpack:///./js/components/index.ts","webpack:///./node_modules/when-dom-ready/dist/index.es2015.js"],"names":["whenDomReady","then","header","document","querySelector","nav","burger","triggers","querySelectorAll","background","body","subnav","handleEnter","event","target","Element","classList","add","setTimeout","contains","dropdown","dropdownCoords","getBoundingClientRect","navCoords","coords","height","width","top","left","style","setProperty","handleLeave","remove","stickyHeader","window","addEventListener","i","length","navItem","navLink","firstElementChild","e","targetElement","isDesktop","matchMedia","matches","preventDefault","toggle","ACTIVE","burgerClick","scrollY","defaultSettings","animationAttibute","thresholdAttribute","reverseAttribute","AOS","constructor","settings","elements","options","observer","IntersectionObserver","entries","this","handleEntries","Array","from","forEach","element","observe","cssClass","getAttribute","reverse","isIntersecting","defaultOptions","threshold","rootMargin","array","expression","map","Map","item","key","collection","get","push","set","groupBy","value","parseFloat","isNaN","createObserver","loadedStates","cb","doc","Promise","resolve","done","indexOf","readyState","resume","val"],"mappings":"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","file":"components-74bb6317ba57085f6ac9.js","sourcesContent":["import whenDomReady from 'when-dom-ready';\r\nfunction initialise() {\r\n const header = document.querySelector('.js-header');\r\n const nav = document.querySelector('.js-nav');\r\n if (!header && !nav) {\r\n return;\r\n }\r\n const burger = document.querySelector('.js-burger');\r\n const triggers = document.querySelectorAll('.js-nav .js-has-dropdown');\r\n const background = document.querySelector('.js-dropdown-bg');\r\n const body = document.querySelector('.js-body');\r\n const subnav = document.querySelector('.js-subnav-wrapper');\r\n stickyHeader();\r\n // Setup a resize observer to track changes.\r\n window.addEventListener('resize', stickyHeader);\r\n window.addEventListener('scroll', stickyHeader);\r\n function handleEnter(event) {\r\n if (event.target instanceof Element) {\r\n event.target.classList.add('trigger-enter');\r\n setTimeout(() => {\r\n if (event.target instanceof Element) {\r\n event.target.classList.contains('trigger-enter');\r\n }\r\n });\r\n background.classList.add('is-open');\r\n const dropdown = event.target.querySelector('.js-dropdown');\r\n if (dropdown) {\r\n const dropdownCoords = dropdown.getBoundingClientRect();\r\n const navCoords = nav.getBoundingClientRect();\r\n const coords = {\r\n height: dropdownCoords.height,\r\n width: dropdownCoords.width,\r\n top: dropdownCoords.top - navCoords.top,\r\n left: dropdownCoords.left - navCoords.left,\r\n };\r\n background.style.setProperty('width', `${coords.width}px`);\r\n background.style.setProperty('height', `${coords.height}px`);\r\n background.style.setProperty('transform', `translate(${coords.left}px, ${coords.top}px)`);\r\n }\r\n }\r\n }\r\n function handleLeave(event) {\r\n if (event.target instanceof Element) {\r\n event.target.classList.remove('trigger-enter');\r\n }\r\n background.classList.remove('is-open');\r\n }\r\n // eslint-disable-next-line no-plusplus\r\n for (let i = 0; i < triggers.length; i++) {\r\n // The \"trigger\" here is an
we should be handling clicking on the anchor.\r\n const navItem = triggers[i];\r\n if ('touchstart' in window) {\r\n navItem.addEventListener('touchstart', handleEnter);\r\n }\r\n else {\r\n navItem.addEventListener('mouseenter', handleEnter);\r\n }\r\n if ('touchmove' in window) {\r\n navItem.addEventListener('touchmove', handleLeave);\r\n }\r\n else {\r\n navItem.addEventListener('mouseleave', handleLeave);\r\n }\r\n // Get anchor link.\r\n const navLink = navItem.firstElementChild;\r\n navLink.addEventListener('click', (e) => {\r\n const targetElement = e.target;\r\n const isDesktop = window.matchMedia('(min-width: 1190px)').matches;\r\n // Check if we've clicked on the icon, if so then don't navigate.\r\n if ((targetElement.matches('.js-nav-link-dropdown') ||\r\n targetElement.matches('svg') ||\r\n targetElement.matches('use')) &&\r\n !isDesktop) {\r\n e.preventDefault();\r\n navLink.classList.toggle('is-open');\r\n }\r\n });\r\n }\r\n const ACTIVE = 'is-active';\r\n const READY = 'is-ready';\r\n if ('ontouchstart' in window) {\r\n burger.addEventListener('touchstart', () => {\r\n burgerClick();\r\n });\r\n }\r\n else {\r\n burger.addEventListener('click', () => {\r\n burgerClick();\r\n });\r\n }\r\n function burgerClick() {\r\n nav.classList.toggle(ACTIVE);\r\n burger.classList.add(READY);\r\n body.classList.toggle(ACTIVE);\r\n if (burger.classList.contains(ACTIVE)) {\r\n setTimeout(() => {\r\n burger.classList.remove(ACTIVE);\r\n }, 250);\r\n }\r\n else {\r\n burger.classList.add(ACTIVE);\r\n }\r\n }\r\n function stickyHeader() {\r\n if (window.scrollY > 20) {\r\n if (subnav != null) {\r\n subnav.classList.add(\"scrolled\");\r\n }\r\n else {\r\n header.classList.add(\"scrolled\");\r\n }\r\n }\r\n else {\r\n if (subnav != null) {\r\n subnav.classList.remove(\"scrolled\");\r\n }\r\n else {\r\n header.classList.remove(\"scrolled\");\r\n }\r\n }\r\n }\r\n}\r\nwhenDomReady().then(initialise);\r\n","const defaultSettings = {\r\n animationAttibute: 'data-aos',\r\n thresholdAttribute: 'data-aos-threshold',\r\n reverseAttribute: 'data-aos-reverse',\r\n};\r\n\r\nclass AOS {\r\n constructor(settings = defaultSettings) {\r\n this.settings = settings;\r\n\r\n this.defaultOptions = {\r\n threshold: 0.6,\r\n rootMargin: '-30px 0px',\r\n };\r\n\r\n const elements = document.querySelectorAll(`[${this.settings.animationAttibute}]`);\r\n\r\n if (elements.length === 0) {\r\n return;\r\n }\r\n\r\n // Gets a set of grouped elements using the anim-thresholds (threshold for intersection observer)\r\n const groupedElements = groupBy(elements, element =>\r\n element.getAttribute(this.settings.thresholdAttribute),\r\n );\r\n\r\n groupedElements.forEach((value, key) => {\r\n const options = { ...this.defaultOptions };\r\n const threshold = parseFloat(key);\r\n\r\n if (!isNaN(threshold) && threshold < 1.0) {\r\n options.threshold = threshold;\r\n }\r\n\r\n this.createObserver(value, options);\r\n });\r\n }\r\n\r\n /**\r\n * Creates an IntersectionObserver for the given elements using the given options\r\n * @param {NodeList} elements\r\n * @param {Object} options\r\n */\r\n createObserver = (elements, options) => {\r\n const observer = new IntersectionObserver(entries => this.handleEntries(entries), options);\r\n Array.from(elements).forEach(element => observer.observe(element));\r\n };\r\n\r\n /* handle entries run when a new element is observed (comes into view) */\r\n handleEntries = entries => {\r\n Array.from(entries).forEach(event => {\r\n const cssClass = event.target.getAttribute(this.settings.animationAttibute);\r\n const reverse = event.target.getAttribute(this.settings.reverseAttribute) !== null;\r\n\r\n if (!event.isIntersecting) {\r\n if (reverse) {\r\n event.target.classList.remove(cssClass);\r\n }\r\n\r\n return;\r\n }\r\n\r\n event.target.classList.add(cssClass);\r\n });\r\n };\r\n}\r\n\r\n// Groups the given array using the expression\r\nfunction groupBy(array, expression) {\r\n const map = new Map();\r\n Array.from(array).forEach(item => {\r\n const key = expression(item);\r\n const collection = map.get(key);\r\n if (!collection) {\r\n map.set(key, [item]);\r\n } else {\r\n collection.push(item);\r\n }\r\n });\r\n return map;\r\n}\r\n\r\nexport default AOS;\r\n","import AOS from '@netc/aos';\r\nimport whenDomReady from 'when-dom-ready';\r\nfunction initialise() {\r\n new AOS();\r\n}\r\nwhenDomReady().then(initialise);\r\n","import './init-nav';\r\nimport './init-aos';\r\nif (document.querySelector('.js-license-tiers')) {\r\n import('./init-license-tiers');\r\n}\r\nif (document.querySelector('pre')) {\r\n import('./init-highlight-code');\r\n}\r\nif (document.querySelector('.js-agenda-accordion')) {\r\n import('./init-agenda');\r\n}\r\nif (document.querySelector('.js-soty-voting')) {\r\n import('./init-soty-voting');\r\n}\r\nif (document.querySelector('.js-xpcookiebanner')) {\r\n import('./init-cookie-banner');\r\n}\r\nif (document.querySelector('.js-cookie-preferences')) {\r\n import('./init-cookie-preferences');\r\n}\r\nif (document.querySelector('.js-count-up')) {\r\n import('./init-countup');\r\n}\r\nif (document.querySelector('.js-smoothscroll-link')) {\r\n import('./init-smoothscroll');\r\n}\r\nif (document.querySelector('.js-subnav')) {\r\n import('./init-subnav');\r\n}\r\nif (document.querySelector('.js-course-carousel')) {\r\n import('./init-carousel-course');\r\n}\r\nif (document.querySelector('.js-event-carousel')) {\r\n import('./init-carousel-event');\r\n}\r\nif (document.querySelector('.js-testimonial-carousel')) {\r\n import('./init-carousel-testimonial');\r\n}\r\nif (document.querySelector('.js-tabbed-section')) {\r\n import('./init-tabbed-section');\r\n}\r\nif (document.querySelector('.js-tabbed-section-connected')) {\r\n import('./init-tabbed-section-connected');\r\n}\r\nif (document.querySelector('.js-tabbed-feature-title')) {\r\n import('./init-tabbed-features');\r\n}\r\nif (document.querySelector('.js-accordion')) {\r\n import('./init-accordion');\r\n}\r\nif (document.querySelector('.js-video-card')) {\r\n import('./init-video-card');\r\n}\r\nif (document.querySelector('.js-tabbed-media')) {\r\n import('./init-tabbed-media');\r\n}\r\nif (document.querySelector('.js-share-btn')) {\r\n import('./init-share-button');\r\n}\r\nif (document.querySelector('.js-bizform')) {\r\n import('./init-bizform');\r\n}\r\nif (document.querySelector('.js-projects-load-more')) {\r\n import('./init-projects-loadmore');\r\n}\r\nif (document.querySelector('.js-lightbox') || document.querySelectorAll('.js-lightbox-individual img').length) {\r\n import('./init-lightbox');\r\n}\r\nif (document.querySelector('.js-header--xpcookiebanner-is-active')) {\r\n import('./init-cookie-banner-lightbox');\r\n}\r\nif (document.querySelector('table')) {\r\n import('./init-tables');\r\n}\r\nif (document.querySelector('[data-autoplay]')) {\r\n import('./init-video-autoplay');\r\n}\r\n","/* eslint no-void: \"off\" */\n\n// Loaded ready states\nvar loadedStates = ['interactive', 'complete'];\n\n// Return Promise\nvar whenDomReady = function whenDomReady(cb, doc) {\n\treturn new Promise(function (resolve) {\n\t\t// Allow doc to be passed in as the lone first param\n\t\tif (cb && typeof cb !== 'function') {\n\t\t\tdoc = cb;\n\t\t\tcb = null;\n\t\t}\n\n\t\t// Use global document if we don't have one\n\t\tdoc = doc || window.document;\n\n\t\t// Handle DOM load\n\t\tvar done = function done() {\n\t\t\treturn resolve(void (cb && setTimeout(cb)));\n\t\t};\n\n\t\t// Resolve now if DOM has already loaded\n\t\t// Otherwise wait for DOMContentLoaded\n\t\tif (loadedStates.indexOf(doc.readyState) !== -1) {\n\t\t\tdone();\n\t\t} else {\n\t\t\tdoc.addEventListener('DOMContentLoaded', done);\n\t\t}\n\t});\n};\n\n// Promise chain helper\nwhenDomReady.resume = function (doc) {\n\treturn function (val) {\n\t\treturn whenDomReady(doc).then(function () {\n\t\t\treturn val;\n\t\t});\n\t};\n};\n\nexport default whenDomReady;\n//# sourceMappingURL=index.es2015.js.map\n"],"sourceRoot":""}