{"version":3,"file":"7289.fb7149afd3ea9293a7ec.js","mappings":"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","sources":["webpack://riat/./wwwroot/app/src/js/header-search.js","webpack://riat/./wwwroot/app/src/js/keyboard-accessibility-check.js","webpack://riat/./wwwroot/app/src/js/main-navigation.js","webpack://riat/./node_modules/tornis/src/tornis.js","webpack://riat/./wwwroot/app/src/js/scrolling.js"],"sourcesContent":["// ***************************\r\n// ***** Header search *****\r\n// ***************************\r\n\r\nexport const headerSearch = {\r\n active: false\r\n};\r\n\r\nclass HeaderSearchSystem {\r\n\r\n constructor(showBtn, wrapper, closeBtn, searchField) {\r\n this.showBtn = showBtn;\r\n this.wrapper = wrapper;\r\n this.backdrop = this.wrapper.querySelector('.header--content--search--backdrop');\r\n this.inner = this.wrapper.querySelector('.header--content--search--inner');\r\n this.closeBtn = closeBtn;\r\n this.searchField = searchField;\r\n this.active = false;\r\n // remove 'hidden' attribute\r\n this.wrapper.removeAttribute('hidden');\r\n // triggers\r\n this.showBtn.onclick = () => {\r\n if(!this.active) this.show();\r\n };\r\n this.closeBtn.onclick = () => {\r\n if(this.active) this.hide();\r\n };\r\n this.backdrop.onclick = () => {\r\n if(this.active) this.hide();\r\n };\r\n // ESC key closes search\r\n this.wrapper.addEventListener('keydown', (e) => {\r\n switch (e.key) {\r\n // ESCAPE jumps out a level\r\n case 'Escape':\r\n if(this.active) {\r\n e.preventDefault();\r\n this.hide(true);\r\n }\r\n break;\r\n }\r\n });\r\n // loop the tabbing if search area is active\r\n this.closeBtn.addEventListener('keydown', (e) => {\r\n switch (e.key) {\r\n // TAB\r\n case 'Tab':\r\n if(this.active) {\r\n e.preventDefault();\r\n this.searchField.focus();\r\n }\r\n break;\r\n }\r\n });\r\n }\r\n\r\n show() {\r\n this.wrapper.ontransitionend = null;\r\n this.active = true;\r\n headerSearch.active = true;\r\n this.showBtn.setAttribute('aria-expanded', true);\r\n window.requestAnimationFrame(() => {\r\n this.wrapper.removeAttribute('aria-hidden');\r\n window.requestAnimationFrame(() => {\r\n this.wrapper.classList.add('search-form--active');\r\n this.inner.ontransitionend = (e) => {\r\n this.searchField.focus();\r\n this.inner.ontransitionend = null;\r\n };\r\n });\r\n });\r\n }\r\n\r\n hide(doFocus = false) {\r\n this.showBtn.setAttribute('aria-expanded', false);\r\n this.active = false;\r\n headerSearch.active = false;\r\n this.wrapper.classList.remove('search-form--active');\r\n this.inner.ontransitionend = (e) => {\r\n if(e.target == this.inner) this.transitionEnd(doFocus);\r\n };\r\n }\r\n\r\n transitionEnd(doFocus = false) {\r\n this.wrapper.setAttribute('aria-hidden', true);\r\n this.inner.ontransitionend = null;\r\n if(doFocus) this.showBtn.focus();\r\n }\r\n}\r\n\r\nconst headerSearchToggleBtn = document.querySelector('#header-search--open-btn'),\r\n headerSearchWrapper = document.querySelector('#header-search'),\r\n headerSearchCloseBtn = document.querySelector('#header-search--close-btn'),\r\n headerSearchField = headerSearchWrapper !== null ? headerSearchWrapper.querySelector('input[type=\"search\"]') : null;\r\n\r\nif(headerSearchToggleBtn != null && headerSearchWrapper != null && headerSearchCloseBtn != null && headerSearchField != null) {\r\n new HeaderSearchSystem(headerSearchToggleBtn, headerSearchWrapper, headerSearchCloseBtn, headerSearchField);\r\n}","// keyboard control detection\r\n\r\nexport const keyboardControl = {\r\n active: false\r\n}\r\n\r\nlet accessibilityTimeout = null;\r\nconst toggleAccessibilityClass = (mode) => {\r\n clearTimeout(accessibilityTimeout);\r\n accessibilityTimeout = setTimeout(() => {\r\n document.body.classList.toggle('keyboard-control', mode);\r\n keyboardControl.active = mode;\r\n }, 100);\r\n}\r\ndocument.body.addEventListener('keydown', function(e) {\r\n switch (e.key) {\r\n case 'Escape':\r\n case 'Up':\r\n case 'ArrowUp':\r\n case 'Down':\r\n case 'ArrowDown':\r\n case 'Left':\r\n case 'ArrowLeft':\r\n case 'Tab':\r\n case 'Right':\r\n case 'ArrowRight':\r\n case 'PageUp':\r\n case 'PageDown':\r\n case 'Spacebar':\r\n case ' ':\r\n case 'Enter':\r\n case 'Return':\r\n toggleAccessibilityClass(true);\r\n break;\r\n }\r\n});\r\ndocument.body.addEventListener('mousedown', function() {\r\n toggleAccessibilityClass(false);\r\n});\r\ndocument.body.addEventListener('touchstart', function() {\r\n toggleAccessibilityClass(false);\r\n});","// *****************************\r\n// ***** Main Navigation *****\r\n// *****************************\r\nimport { breakPoint } from './config';\r\nimport { keyboardControl } from './keyboard-accessibility-check';\r\n\r\nconst $html = document.querySelector('html');\r\nlet isMobile = true,\r\n resizeTimeout = null;\r\n\r\nexport const mobileNavigation = {\r\n active: false\r\n}\r\nexport const desktopNavigation = {\r\n active: false\r\n}\r\n\r\nclass menu {\r\n\r\n constructor(wrapper, toggleButton, ul) {\r\n this.wrapper = wrapper;\r\n this.desktopSubmenuIndicator = wrapper.querySelector('.submenu--menu-indicator');\r\n this.navContent = wrapper.querySelector('nav');\r\n this.mobileToggle = toggleButton;\r\n this.ul = ul;\r\n this.expanded = false;\r\n this.hideTimeout = null;\r\n this.hideDelay = 500;\r\n this.activeItemIndex = -1;\r\n this.activeSubmenuItemIndex = -1;\r\n this.items = [];\r\n [...this.ul.querySelectorAll('.header--content--menu > nav > ul > li')].forEach(i => {\r\n let x = this.items.length;\r\n this.items[x] = new menuItem(x, i, 1);\r\n });\r\n }\r\n\r\n show() {\r\n // make menu semantically visible in both mobile and desktop versions\r\n this.expanded = true;\r\n this.wrapper.removeAttribute('aria-hidden');\r\n if(isMobile) {\r\n // mobile - animate in the menu element\r\n this.mobileToggle.setAttribute('aria-expanded', true);\r\n $html.classList.add('mobile-menu-fading');\r\n mobileNavigation.active = true;\r\n window.requestAnimationFrame(() => {\r\n $html.classList.add('mobile-menu-active');\r\n this.wrapper.ontransitionend = () => {\r\n this.transitionEnd(true);\r\n this.update(true, 0, -1);\r\n };\r\n });\r\n } else {\r\n // desktop resets\r\n mobileNavigation.active = false;\r\n window.requestAnimationFrame(() => {\r\n $html.classList.remove('mobile-menu-active');\r\n });\r\n }\r\n }\r\n\r\n hide() {\r\n if(isMobile && mobileNavigation.active) {\r\n // mobile - animate out menu element\r\n this.expanded = false;\r\n mobileNavigation.active = false;\r\n this.mobileToggle.setAttribute('aria-expanded', false);\r\n $html.classList.add('mobile-menu-fading');\r\n $html.classList.remove('mobile-menu-active');\r\n this.wrapper.ontransitionend = () => {\r\n this.transitionEnd(false);\r\n };\r\n } else {\r\n // hide menu semantically in both mobile and desktop versions\r\n this.expanded = false;\r\n this.mobileToggle.setAttribute('aria-expanded', false);\r\n this.wrapper.setAttribute('aria-hidden', true);\r\n }\r\n }\r\n\r\n closeAllSubmenus() {\r\n for(let x = 0, l = this.items.length; x < l; x++) {\r\n if(this.items[x].hasSubmenu) {\r\n this.items[x].submenu.hide();\r\n }\r\n }\r\n this.activeItemIndex = -1;\r\n this.activeSubmenuItemIndex = -1;\r\n }\r\n\r\n transitionEnd(mode) {\r\n if(!mode) {\r\n // menu has hidden\r\n this.wrapper.setAttribute('aria-hidden', true);\r\n }\r\n $html.classList.remove('mobile-menu-fading');\r\n this.wrapper.ontransitionend = null;\r\n }\r\n\r\n storeTriggerPositions() {\r\n for(let x = 0, l = this.items.length; x < l; x++) {\r\n if(this.items[x].button != null) {\r\n let b = this.items[x].button.getBoundingClientRect();\r\n this.items[x].buttonX = Math.floor((b.left + b.right) / 2);\r\n }\r\n }\r\n }\r\n\r\n positionSubmenu() {\r\n if(!isMobile && this.activeItemIndex > -1 && this.items[this.activeItemIndex].hasSubmenu) {\r\n let submenuEl = this.items[this.activeItemIndex].submenu.wrapper;\r\n let submenuWidth = submenuEl.offsetWidth;\r\n let submenuLeft = `clamp(var(--submenu-min-left), ${this.items[this.activeItemIndex].buttonX - (submenuWidth / 2)}px, calc((var(--submenu-min-left) + var(--submenu-width-limit)) - ${submenuWidth}px))`;\r\n submenuEl.style.setProperty('--submenu-left', submenuLeft);\r\n }\r\n }\r\n\r\n update(setFocus = false, itemIndex = -1, submenuItemIndex = -1) {\r\n if(!isMobile) this.storeTriggerPositions();\r\n if (itemIndex > -1 && submenuItemIndex > -1) {\r\n\r\n // FOCUS TARGET IS SUBMENU MENU ITEM\r\n\r\n if (isMobile && !this.expanded) this.show();\r\n // close old submenu without animation?\r\n if (this.activeItemIndex > -1 && this.activeSubmenuItemIndex > -1 && itemIndex != this.activeItemIndex && this.items[this.activeItemIndex].submenu.expanded) this.items[this.activeItemIndex].submenu.hide(isMobile);\r\n // open new submenu\r\n if (!this.items[itemIndex].submenu.expanded) this.items[itemIndex].submenu.show(isMobile || (this.activeItemIndex == -1 || this.activeSubmenuItemIndex == -1));\r\n // focus on item\r\n if (keyboardControl.active && setFocus) this.items[itemIndex].submenu.items[submenuItemIndex].focus();\r\n\r\n } else if (itemIndex > -1) {\r\n\r\n // FOCUS TARGET IS TOP-LEVEL MENU ITEM\r\n\r\n if (isMobile && !this.expanded) this.show();\r\n // close old submenu with animation?\r\n if (this.activeItemIndex > -1 && this.items[this.activeItemIndex].hasSubmenu) {\r\n if (this.items[this.activeItemIndex].submenu.expanded) this.items[this.activeItemIndex].submenu.hide(true);\r\n }\r\n // focus on item\r\n if (keyboardControl.active && setFocus) {\r\n if (this.items[itemIndex].hasSubmenu) {\r\n this.items[itemIndex].submenu.toggle.focus();\r\n } else {\r\n this.items[itemIndex].link.focus();\r\n }\r\n }\r\n\r\n } else {\r\n if (this.activeItemIndex > -1 && this.activeSubmenuItemIndex > -1 && this.items[this.activeItemIndex].submenu.expanded) this.items[this.activeItemIndex].submenu.hide(!isMobile);\r\n if (isMobile && this.expanded) {\r\n this.hide();\r\n if (keyboardControl.active && setFocus) this.mobileToggle.focus();\r\n }\r\n }\r\n // update tabIndex setting\r\n if (this.activeItemIndex != itemIndex) {\r\n if (this.activeItemIndex > -1) {\r\n if (this.items[this.activeItemIndex].hasSubmenu) {\r\n this.items[this.activeItemIndex].submenu.toggle.setAttribute('tabindex', '-1');\r\n } else {\r\n this.items[this.activeItemIndex].link.setAttribute('tabindex', '-1');\r\n }\r\n }\r\n let nextTabIndex = itemIndex;\r\n if (!isMobile && nextTabIndex == -1) nextTabIndex = 0;\r\n if (nextTabIndex > -1) {\r\n if (this.items[nextTabIndex].hasSubmenu) {\r\n this.items[nextTabIndex].submenu.toggle.setAttribute('tabindex', '0');\r\n } else {\r\n this.items[nextTabIndex].link.setAttribute('tabindex', '0');\r\n }\r\n }\r\n }\r\n // store new values\r\n this.activeItemIndex = itemIndex;\r\n this.activeSubmenuItemIndex = submenuItemIndex;\r\n // position submenu?\r\n if (this.activeItemIndex > -1) this.positionSubmenu();\r\n }\r\n}\r\n\r\nclass menuItem {\r\n constructor(itemIndex, obj, level) {\r\n this.level = level;\r\n this.index = itemIndex;\r\n this.li = obj;\r\n this.button = obj.querySelector('button.submenu--toggle');\r\n this.buttonX = 0;\r\n let sub = obj.querySelector('div.submenu');\r\n if (this.button && sub) {\r\n this.hasSubmenu = true;\r\n this.submenu = new subMenu(sub, this.button, level);\r\n } else {\r\n this.hasSubmenu = false;\r\n this.link = obj.querySelector('a');\r\n }\r\n }\r\n}\r\n\r\nclass subMenu {\r\n constructor(sub, button, level) {\r\n this.expanded = false;\r\n this.toggle = button;\r\n this.wrapper = sub;\r\n this.level = level;\r\n this.closeBtn = this.wrapper.querySelector('.submenu--close');\r\n this.inner = this.wrapper.querySelector('.submenu--content-area');\r\n this.items = [];\r\n [...this.inner.querySelectorAll('a, button')].forEach(i => {\r\n this.items.push(i);\r\n });\r\n }\r\n show(animate) {\r\n this.expanded = true;\r\n this.wrapper.removeAttribute('aria-hidden');\r\n this.toggle.setAttribute('aria-expanded', true);\r\n if(isMobile) {\r\n this.wrapper.style.maxHeight = this.inner.offsetHeight + 'px';\r\n if (animate) {\r\n this.wrapper.classList.add('animate');\r\n this.wrapper.ontransitionend = () => {\r\n this.wrapper.classList.remove('animate');\r\n if (this.level > 1 || isMobile) {\r\n this.wrapper.style.maxHeight = 'none';\r\n this.wrapper.ontransitionend = null;\r\n }\r\n };\r\n } else {\r\n this.wrapper.style.maxHeight = 'none';\r\n }\r\n } else {\r\n this.wrapper.style.maxHeight = 'none';\r\n desktopNavigation.active = true;\r\n if (animate) {\r\n window.requestAnimationFrame(() => {\r\n $html.classList.add('desktop-menu-fading');\r\n window.requestAnimationFrame(() => {\r\n $html.classList.add('desktop-menu-active');\r\n this.wrapper.ontransitionend = () => {\r\n $html.classList.remove('desktop-menu-fading');\r\n this.wrapper.ontransitionend = null;\r\n };\r\n });\r\n });\r\n } else {\r\n $html.classList.add('desktop-menu-active');\r\n }\r\n }\r\n }\r\n hide(animate) {\r\n this.expanded = false;\r\n if (isMobile) {\r\n this.wrapper.setAttribute('aria-hidden', true);\r\n this.toggle.setAttribute('aria-expanded', false);\r\n this.wrapper.style.maxHeight = this.inner.offsetHeight + 'px';\r\n window.requestAnimationFrame(() => {\r\n this.wrapper.style.maxHeight = 0;\r\n });\r\n if (animate) {\r\n this.wrapper.classList.add('animate');\r\n this.wrapper.ontransitionend = (e) => {\r\n if(e.target == this.wrapper) this.wrapper.classList.remove('animate');\r\n };\r\n }\r\n } else {\r\n desktopNavigation.active = false;\r\n if (animate) {\r\n $html.classList.add('desktop-menu-fading');\r\n $html.classList.remove('desktop-menu-active');\r\n this.wrapper.ontransitionend = () => {\r\n this.wrapper.ontransitionend = null;\r\n $html.classList.remove('desktop-menu-fading');\r\n this.wrapper.setAttribute('aria-hidden', true);\r\n this.toggle.setAttribute('aria-expanded', false);\r\n };\r\n } else {\r\n $html.classList.remove('desktop-menu-active');\r\n this.wrapper.setAttribute('aria-hidden', true);\r\n this.toggle.setAttribute('aria-expanded', false);\r\n }\r\n }\r\n }\r\n}\r\n\r\n// create instance of menu\r\n\r\nif(document.querySelector('.header--content--menu') != null) {\r\n const m = new menu(document.querySelector('.header--content--menu'), document.querySelector('.header--content--menu-toggle button'), document.querySelector('.header--content--menu > nav > ul'));\r\n\r\n\r\n // mobile 'whole menu toggle' functionality\r\n\r\n m.mobileToggle.addEventListener('click', () => {\r\n if (isMobile) {\r\n if (m.expanded) {\r\n // close\r\n m.hide();\r\n } else {\r\n // open\r\n m.show();\r\n }\r\n }\r\n });\r\n\r\n // close menu if user focus moves outside\r\n\r\n const bodyClickTouch = (t) => {\r\n if (!isMobile && m.activeSubmenuItemIndex > -1) {\r\n let inMenu = false;\r\n while (t != document.body) {\r\n if (t == m.wrapper) {\r\n inMenu = true;\r\n break\r\n }\r\n t = t.parentNode;\r\n }\r\n if (!inMenu) {\r\n m.update();\r\n }\r\n }\r\n }\r\n document.body.addEventListener('click', (e) => {\r\n bodyClickTouch(e.target);\r\n });\r\n\r\n // add menu item listeners\r\n\r\n for (let x = 0, l = m.items.length; x < l; x++) {\r\n let o = m.items[x];\r\n if (o.hasSubmenu) {\r\n\r\n o.submenu.toggle.addEventListener('click', () => {\r\n clearTimeout(m.focusTimeout);\r\n m.focusTimeout = null;\r\n if (o.submenu.expanded) {\r\n m.update(true, o.index);\r\n } else {\r\n m.update(true, o.index, 0);\r\n }\r\n });\r\n \r\n o.submenu.toggle.addEventListener('focus', () => {\r\n if (m.expanded && m.activeItemIndex != o.index) {\r\n clearTimeout(m.focusTimeout);\r\n m.focusTimeout = setTimeout(() => {\r\n m.update(true, o.index);\r\n m.focusTimeout = null;\r\n }, 250);\r\n }\r\n });\r\n \r\n // add submenu expander listeners if required\r\n \r\n for (let xx = 0, ll = o.submenu.items.length; xx < ll; xx++) {\r\n let oo = o.submenu.items[xx];\r\n if (oo.hasSubmenu) {\r\n oo.submenu.toggle.addEventListener('click', () => {\r\n m.update(true, o.index, oo.index);\r\n });\r\n }\r\n }\r\n \r\n // desktop only - submenu close button\r\n \r\n o.submenu.closeBtn.addEventListener('click', () => {\r\n if (o.submenu.expanded) m.update(true, o.index);\r\n });\r\n }\r\n }\r\n\r\n // add keyboard accessibility\r\n m.ul.addEventListener('keydown', (e) => {\r\n switch (e.key) {\r\n // ESCAPE jumps out a level\r\n case 'Escape':\r\n e.preventDefault();\r\n if (m.activeSubmenuItemIndex > -1) {\r\n m.update(true, m.activeItemIndex);\r\n } else {\r\n m.update(true);\r\n }\r\n break;\r\n // DOWN / RIGHT to move through items at current level\r\n case 'Down':\r\n case 'ArrowDown':\r\n case 'Right':\r\n case 'ArrowRight':\r\n e.preventDefault();\r\n if (m.activeSubmenuItemIndex > -1) {\r\n let next = m.activeSubmenuItemIndex + 1,\r\n list = m.items[m.activeItemIndex].submenu.items;\r\n if (next >= (isMobile ? list.length - 1 : list.length)) next = 0; // don't include submenu close button in mobile mode\r\n m.update(true, m.activeItemIndex, next);\r\n } else {\r\n let next = m.activeItemIndex + 1,\r\n list = m.items;\r\n if (next >= list.length) next = 0;\r\n m.update(true, next);\r\n }\r\n break;\r\n // UP / LEFT to move backwards through items at current level\r\n case 'Up':\r\n case 'ArrowUp':\r\n case 'Left':\r\n case 'ArrowLeft':\r\n e.preventDefault();\r\n if (m.activeSubmenuItemIndex > -1) {\r\n let next = m.activeSubmenuItemIndex - 1,\r\n list = m.items[m.activeItemIndex].submenu.items;\r\n if (next < 0) next = isMobile ? list.length - 2 : list.length - 1; // don't include submenu close button in mobile mode\r\n m.update(true, m.activeItemIndex, next);\r\n } else {\r\n let next = m.activeItemIndex - 1,\r\n list = m.items;\r\n if (next < 0) next = list.length - 1;\r\n m.update(true, next);\r\n }\r\n break;\r\n // TAB close menu (if open) and move to next tab element\r\n case 'Tab':\r\n if(isMobile) {\r\n if (!m.hasSearch && m.activeItemIndex > -1) {\r\n m.hide();\r\n }\r\n } else {\r\n m.update();\r\n }\r\n break;\r\n // SPACE/ENTER/RETURN to click a item\r\n case 'Spacebar':\r\n case ' ':\r\n case 'Enter':\r\n case 'Return':\r\n e.preventDefault();\r\n if (m.activeSubmenuItemIndex > -1) {\r\n m.items[m.activeItemIndex].submenu.items[m.activeSubmenuItemIndex].click();\r\n } else {\r\n if (m.items[m.activeItemIndex].hasSubmenu) {\r\n m.items[m.activeItemIndex].submenu.toggle.click();\r\n } else {\r\n m.items[m.activeItemIndex].link.click();\r\n }\r\n }\r\n break;\r\n }\r\n });\r\n\r\n // define and trigger resize check\r\n\r\n const resize = () => {\r\n let prev = isMobile;\r\n isMobile = window.innerWidth < breakPoint.LG;\r\n if(!isMobile) {\r\n m.storeTriggerPositions();\r\n // position submenu?\r\n if (m.activeItemIndex > -1) m.positionSubmenu();\r\n }\r\n if(isMobile !== prev) {\r\n if(!isMobile) {\r\n m.show();\r\n m.update(false,1); // 'home' is hidden on desktop, so set menu to item 1 (without setting focus)\r\n } else {\r\n m.update(false);\r\n }\r\n // loop through all submenus and force close them\r\n m.items.forEach(s => {\r\n if(s.hasSubmenu) s.submenu.hide(false);\r\n });\r\n mobileNavigation.active = false;\r\n m.mobileToggle.setAttribute('aria-expanded', false);\r\n desktopNavigation.active = false;\r\n $html.classList.remove('mobile-menu-active');\r\n $html.classList.remove('desktop-menu-active');\r\n }\r\n };\r\n \r\n resize();\r\n window.addEventListener('resize', () => {\r\n clearTimeout(resizeTimeout);\r\n resizeTimeout = setTimeout(() => {\r\n resize();\r\n }, 100);\r\n });\r\n\r\n}\r\n","// Check if the module is initialised during server-side rendering\nconst isSSR = typeof window === 'undefined';\n\n/**\n * Simple throttling helper that limits a \n * function to only run once every {delay}ms\n * @param {Number} delay The delay in ms\n * @param {Function} fn the function to throttle\n */\nfunction throttled(delay, fn) {\n let lastCall = 0;\n return function(...args) {\n const now = new Date().getTime();\n if (now - lastCall < delay) {\n return;\n }\n lastCall = now;\n return fn(...args);\n };\n}\n\n/**\n * Calculates the mean value in an array\n * @param {Array} arr The array to average\n */\nfunction getMean(arr) {\n return Math.floor(arr.reduce((acc, curr) => {\n return acc + curr;\n }, 0) / arr.length);\n}\n\n/**\n * Main Tornis singleton class\n */\nclass Tornis {\n // set a whole load of initial values\n constructor() {\n\n // Exit out if this is running server-side\n if (isSSR) return;\n\n this.lastX = 0;\n this.lastY = 0;\n this.lastWidth = window.innerWidth;\n this.lastHeight = window.innerHeight;\n this.lastMouseX = 0;\n this.lastMouseY = 0;\n this.lastWindowX = window.screenX;\n this.lastWindowY = window.screenY;\n\n // device orientation\n this.lastAlpha = 0;\n this.lastBeta = 0;\n this.lastGamma = 0;\n this.currAlpha = 0;\n this.currBeta = 0;\n this.currGamma = 0;\n\n this.scrollHeight = document.body.scrollHeight;\n\n this.scrollChange = false;\n this.sizeChange = false;\n this.mouseChange = false;\n this.positionChange = false;\n this.orientationChange = false;\n this.devicePixelRatioChange = false;\n\n this.currX = 0;\n this.currY = 0;\n this.currWidth = window.innerWidth;\n this.currHeight = window.innerHeight;\n this.currMouseX = 0;\n this.currMouseY = 0;\n this.currWindowX = 0;\n \n // device pixel ratio (where able)\n this.currDevicePixelRatio = this.lastDevicePixelRatio = Math.max( window.devicePixelRatio || 1.0, 1.0 );\n \n // initialise array buffers for mouse velocity\n this.mouseXVelocity = [];\n this.mouseYVelocity = [];\n this.lastMouseXVelocity = 0;\n this.lastMouseYVelocity = 0;\n\n // initialise array buffers for window velocity\n this.windowXVelocity = [];\n this.windowYVelocity = [];\n this.lastWindowXVelocity = 0;\n this.lastWindowYVelocity = 0;\n\n\n // flag to limit rAF renders\n this.updating = false;\n\n // initialise the watched function queue\n this.callbacks = [];\n\n // bind this to ease class methods\n this.update = this.update.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleMouse = this.handleMouse.bind(this);\n this.handleOrientation = this.handleOrientation.bind(this);\n this.recalibrateOrientation = this.recalibrateOrientation.bind(this);\n this.formatData = this.formatData.bind(this);\n this.watch = this.watch.bind(this);\n this.unwatch = this.unwatch.bind(this);\n\n // throttled event handlers\n this.handleResize = throttled(110, this.handleResize); // resize is brutal, so throttle it more\n this.handleMouse = throttled(75, this.handleMouse);\n\n // bind event handlers to the window\n window.addEventListener('resize', this.handleResize);\n window.addEventListener('mousemove', this.handleMouse);\n window.addEventListener('deviceorientation', this.handleOrientation);\n\n // begin the update loop\n requestAnimationFrame(this.update);\n }\n\n /**\n * Event handler to capture screen size\n */\n handleResize(e) {\n this.currWidth = window.innerWidth;\n this.currHeight = window.innerHeight;\n }\n\n /**\n * Event handler to capture mouse position\n */\n handleMouse(e) {\n this.currMouseX = e.clientX;\n this.currMouseY = e.clientY;\n }\n\n /**\n * Event handler to capture device orientation\n */\n handleOrientation(e) {\n // cache initial position for calibration\n if (!this.initialAlpha) { this.initialAlpha = e.alpha; }\n if (!this.initialBeta) { this.initialBeta = e.beta; }\n if (!this.initialGamma) { this.initialGamma = e.gamma; }\n \n this.currAlpha = e.alpha;\n this.currBeta = e.beta;\n this.currGamma = e.gamma;\n }\n\n /** \n * Allow initial orientation to be reset to the last recorded values\n */\n recalibrateOrientation() {\n // cache the old values\n const calibration = {\n prev: {\n alpha: this.initialAlpha,\n beta: this.initialBeta,\n gamma: this.initialGamma,\n }\n };\n\n // reset the values to the last recorded position\n this.initialAlpha = this.lastAlpha;\n this.initialBeta = this.lastBeta;\n this.initialGamma = this.lastGamma;\n \n // add the new values to the cached calibration data\n calibration.current = {\n alpha: this.initialAlpha,\n beta: this.initialBeta,\n gamma: this.initialGamma,\n };\n\n return calibration;\n }\n\n /**\n * Returns a copy of the store data, formatted for public use\n */\n formatData() {\n return {\n scroll: {\n changed: this.scrollChange,\n left: Math.floor(this.lastX),\n right: Math.floor(this.lastX + this.lastWidth),\n top: Math.floor(this.lastY),\n bottom: Math.floor(this.lastY + this.lastHeight),\n velocity: {\n x: Math.floor(this.scrollXVelocity) || 0,\n y: Math.floor(this.scrollYVelocity) || 0\n }\n },\n size: {\n changed: this.sizeChange,\n x: Math.floor(this.lastWidth),\n y: Math.floor(this.lastHeight),\n docY: Math.floor(this.scrollHeight)\n },\n mouse: {\n changed: this.mouseChange,\n x: Math.floor(this.lastMouseX),\n y: Math.floor(this.lastMouseY),\n velocity: {\n x: Math.floor(this.lastMouseXVelocity) || 0,\n y: Math.floor(this.lastMouseYVelocity) || 0\n }\n },\n position: {\n changed: this.positionChange,\n left: Math.floor(this.lastWindowX),\n right: Math.floor(this.lastWindowX + this.lastWidth),\n top: Math.floor(this.lastWindowY),\n bottom: Math.floor(this.lastWindowY + this.lastHeight),\n velocity: {\n x: Math.floor(this.lastWindowXVelocity) || 0,\n y: Math.floor(this.lastWindowYVelocity) || 0\n }\n },\n orientation: {\n changed: this.orientationChange,\n // These values are relative to the first calibrated value\n alpha: Math.floor(this.lastAlpha - this.initialAlpha) || 0,\n beta: Math.floor(this.lastBeta - this.initialBeta) || 0,\n gamma: Math.floor(this.lastGamma - this.initialGamma) || 0\n },\n devicePixelRatio: {\n changed: this.devicePixelRatioChange,\n ratio: this.currDevicePixelRatio\n }\n };\n }\n\n /**\n * Update function to be looped by requestAnimationFrame\n */\n update() {\n const {\n currWidth,\n currHeight,\n currMouseX,\n currMouseY,\n currAlpha,\n currBeta,\n currGamma,\n currDevicePixelRatio\n } = this;\n if (this.updating) return false;\n\n // reset the flags\n this.scrollChange = this.sizeChange = this.mouseChange = this.positionChange = this.orientationChange = this.devicePixelRatioChange = false;\n\n // we need to grab a buffer of the last five values and average them\n if (this.windowXVelocity.length > 5) { this.windowXVelocity.shift(); }\n this.windowXVelocity.push(window.screenX - this.lastWindowX);\n\n // see if the average velocity changed\n if (getMean(this.windowXVelocity) != this.lastWindowXVelocity) {\n this.lastWindowXVelocity = getMean(this.windowXVelocity);\n this.positionChange = true;\n }\n\n // check window X position\n if (window.screenX != this.lastWindowX) {\n this.positionChange = true;\n this.lastWindowX = window.screenX;\n }\n\n // we need to grab a buffer of the last five values and average them\n if (this.windowYVelocity.length > 5) { this.windowYVelocity.shift(); }\n this.windowYVelocity.push(window.screenY - this.lastWindowY);\n\n // see if the average velocity changed\n if (getMean(this.windowYVelocity) != this.lastWindowYVelocity) {\n this.lastWindowYVelocity = getMean(this.windowYVelocity);\n this.positionChange = true;\n }\n\n // check window Y position\n if (window.screenY != this.lastWindowY) {\n this.positionChange = true;\n this.lastWindowY = window.screenY;\n }\n \n\n // reset scroll X velocity\n if (window.pageXOffset == this.lastX && this.scrollXVelocity != 0) {\n this.scrollXVelocity = 0;\n this.scrollChange = true;\n }\n\n // reset scroll Y velocity\n if (window.pageYOffset == this.lastY && this.scrollYVelocity != 0) {\n this.scrollYVelocity = 0;\n this.scrollChange = true;\n }\n \n // check scroll X\n if (window.pageXOffset != this.lastX) {\n this.scrollChange = true;\n this.scrollXVelocity = Math.floor(window.pageXOffset - this.lastX);\n this.lastX = window.pageXOffset;\n }\n \n // check scroll Y\n if (window.pageYOffset != this.lastY) {\n this.scrollChange = true;\n this.scrollYVelocity = Math.floor(window.pageYOffset - this.lastY);\n this.lastY = window.pageYOffset;\n }\n\n // check width\n if (currWidth != this.lastWidth) {\n this.lastWidth = currWidth;\n this.scrollHeight = document.body.scrollHeight;\n this.sizeChange = true;\n }\n\n // check height\n if (currHeight != this.lastHeight) {\n this.lastHeight = currHeight;\n this.sizeChange = true;\n }\n\n // Mouse input is throttled so in order to capture the velocity\n // we need to grab a buffer of the last five values and average them\n if (this.mouseXVelocity.length > 5) { this.mouseXVelocity.shift(); }\n this.mouseXVelocity.push(currMouseX - this.lastMouseX);\n\n // see if the average velocity changed\n if (getMean(this.mouseXVelocity) != this.lastMouseXVelocity) {\n this.lastMouseXVelocity = getMean(this.mouseXVelocity);\n this.mouseChange = true;\n }\n \n // check mouse X\n if (currMouseX != this.lastMouseX) {\n this.lastMouseX = currMouseX;\n this.mouseChange = true;\n }\n\n // grab the mouse Y velocity\n if (this.mouseYVelocity.length > 5) { this.mouseYVelocity.shift(); }\n this.mouseYVelocity.push(currMouseY - this.lastMouseY);\n\n // see if the average velocity changed\n if (getMean(this.mouseYVelocity) != this.lastMouseYVelocity) {\n this.lastMouseYVelocity = getMean(this.mouseYVelocity);\n this.mouseChange = true;\n }\n \n // check mouse y\n if (currMouseY != this.lastMouseY || getMean(this.mouseYVelocity) != 0) {\n this.lastMouseY = currMouseY;\n this.mouseChange = true;\n }\n\n // orientation\n if (currAlpha != this.lastAlpha) {\n this.lastAlpha = currAlpha;\n this.orientationChange = true;\n }\n\n if (currBeta != this.lastBeta) {\n this.lastBeta = currBeta;\n this.orientationChange = true;\n }\n\n if (currGamma != this.lastGamma) {\n this.lastGamma = currGamma;\n this.orientationChange = true;\n }\n \n // device pixel ratio, but only if the window has moved\n if ( this.positionChange || this.sizeChange )\n {\n this.currDevicePixelRatio = Math.max( window.devicePixelRatio || 1, 1 );\n \n if ( this.currDevicePixelRatio !== this.lastDevicePixelRatio )\n {\n this.devicePixelRatioChange = true;\n this.lastDevicePixelRatio = this.currDevicePixelRatio;\n }\n }\n\n // Finally, we can invoke the callbacks, but if something has changed\n if (\n this.scrollChange ||\n this.sizeChange ||\n this.mouseChange ||\n this.positionChange ||\n this.orientationChange ||\n this.devicePixelRatioChange\n ) {\n // pass the formatted data into each watched function\n this.callbacks.forEach(cb => cb(this.formatData()));\n }\n\n // reset and loop this method\n this.updating = false;\n requestAnimationFrame(this.update);\n }\n\n /**\n * Subscribes a function to the 'watched functions' list.\n * Watched functions will be automatically called on update\n * @param {Function} callback The function to call on update\n * @param {Boolean} callOnWatch Call the function on subscribe? defaults to true\n */\n watch(callback, callOnWatch = true) {\n if (typeof callback !== 'function') {\n throw new Error('Value passed to Watch is not a function');\n }\n\n // Exit out if this is running server-side\n if (isSSR) return;\n\n if (callOnWatch) {\n // get a copy of the store\n const firstRunData = this.formatData();\n\n // Most watch functions will have guard clauses that check for change\n // To cicumvent this, we simulate that all values have changed on first run\n firstRunData.scroll.changed = true;\n firstRunData.mouse.changed = true;\n firstRunData.size.changed = true;\n firstRunData.position.changed = true;\n firstRunData.orientation.changed = true;\n firstRunData.devicePixelRatio.changed = true;\n \n // run the callback using the simulated data\n callback(firstRunData);\n }\n\n // push the callback to the queue to ensure it runs on future updates\n this.callbacks.push(callback);\n }\n\n /**\n * Unsubscribe a function from the 'watched functions' list\n * @param {Function} callback The function to be removed\n */\n unwatch(callback) {\n if (typeof callback !== 'function') {\n throw new Error('The value passed to unwatch is not a function');\n }\n\n // Exit out if this is running server-side\n if (isSSR) return;\n\n // remove the callback from the list\n this.callbacks = this.callbacks.filter(cb => cb !== callback);\n }\n\n}\n\n\n// Create a singleton instance of Tornis\nconst TORNIS = new Tornis();\n\nif (!isSSR) {\n // Expose a limited set of functions to a global, in order to allow access for basic script usage with