{"version":3,"file":"289.ac76a7ba71efb9218c93.js","mappings":"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","sources":["webpack://Chaos Karts/./wwwroot/app/src/js/keyboard-accessibility-check.js","webpack://Chaos Karts/./wwwroot/app/src/js/main-navigation.js","webpack://Chaos Karts/./node_modules/tornis/src/tornis.js","webpack://Chaos Karts/./wwwroot/app/src/js/scrolling.js"],"sourcesContent":["// 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\n\r\nimport { keyboardControl } from './keyboard-accessibility-check';\r\n\r\nexport const navigation = {\r\n active: false\r\n}\r\n\r\nclass menu {\r\n constructor(wrapper, toggleButton, ul) {\r\n this.wrapper = wrapper;\r\n this.menuToggle = 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.activeSubmenuExpanderItemIndex = -1;\r\n this.items = [];\r\n [...document.querySelectorAll('#main-menu > .main-menu--inner > 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 // is there search functionality inside menu wrapper?\r\n this.search = {\r\n inputField : null,\r\n submitButton : null,\r\n form : this.wrapper.querySelector('#main-menu--search')\r\n }\r\n this.hasSearch = this.search.form != null;\r\n if(this.hasSearch) {\r\n this.search.inputField = this.search.form.querySelector('input[type=\"search\"]');\r\n this.search.submitButton = this.search.form.querySelector('button[type=\"submit\"]');\r\n }\r\n }\r\n show() {\r\n this.expanded = true;\r\n navigation.active = true\r\n this.wrapper.setAttribute('aria-hidden', false);\r\n this.menuToggle.setAttribute('aria-expanded', true);\r\n window.requestAnimationFrame(() => {\r\n document.querySelector('html').classList.add('menu-active');\r\n });\r\n }\r\n hide() {\r\n this.expanded = false;\r\n navigation.active = false;\r\n this.menuToggle.setAttribute('aria-expanded', false);\r\n document.querySelector('html').classList.remove('menu-active');\r\n this.wrapper.ontransitionend = () => {\r\n this.transitionEnd();\r\n };\r\n }\r\n transitionEnd() {\r\n this.wrapper.setAttribute('aria-hidden', true);\r\n this.wrapper.ontransitionend = null;\r\n }\r\n update(setFocus = false, itemIndex = -1, submenuItemIndex = -1, expanderItemIndex = -1) {\r\n if (itemIndex > -1 && submenuItemIndex > -1 && expanderItemIndex > -1) {\r\n\r\n // FOCUS TARGET IS SUBMENU EXPANDER MENU ITEM\r\n\r\n if (!this.expanded) this.show();\r\n // close old submenu without animation?\r\n if (this.activeItemIndex > -1 && itemIndex != this.activeItemIndex && this.items[this.activeItemIndex].submenu.expanded) this.items[this.activeItemIndex].submenu.hide(false);\r\n // open new submenu\r\n if (!this.items[itemIndex].submenu.expanded) this.items[itemIndex].submenu.show(this.activeItemIndex == -1);\r\n // close old expander?\r\n if (this.activeSubmenuExpanderItemIndex > -1) {\r\n let prevSubmenuExpander = this.items[this.activeItemIndex].submenu.items[this.activeSubmenuItemIndex].submenu;\r\n if (itemIndex != this.activeItemIndex || submenuItemIndex != this.activeSubmenuItemIndex) {\r\n if (prevSubmenuExpander.expanded) prevSubmenuExpander.hide(false);\r\n }\r\n }\r\n let newSubmenuExpander = this.items[itemIndex].submenu.items[submenuItemIndex].submenu;\r\n if (!newSubmenuExpander.expanded) newSubmenuExpander.show(true);\r\n // focus on item\r\n if (keyboardControl.active && setFocus) this.items[itemIndex].submenu.items[submenuItemIndex].submenu.items[expanderItemIndex].link.focus();\r\n\r\n } else if (itemIndex > -1 && submenuItemIndex > -1) {\r\n\r\n // FOCUS TARGET IS SUBMENU MENU ITEM\r\n\r\n if (!this.expanded) this.show();\r\n\r\n // close expander?\r\n if (this.activeSubmenuExpanderItemIndex > -1) {\r\n let prevSubmenuExpander = this.items[this.activeItemIndex].submenu.items[this.activeSubmenuItemIndex].submenu;\r\n if (itemIndex != this.activeItemIndex) {\r\n if (prevSubmenuExpander.expanded) prevSubmenuExpander.hide(false);\r\n } else {\r\n if (prevSubmenuExpander.expanded) prevSubmenuExpander.hide(true);\r\n }\r\n }\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(false);\r\n // open new submenu\r\n if (!this.items[itemIndex].submenu.expanded) this.items[itemIndex].submenu.show(this.activeSubmenuItemIndex == -1);\r\n // focus on item\r\n if (keyboardControl.active && setFocus) {\r\n if (this.items[itemIndex].submenu.items[submenuItemIndex].hasSubmenu) {\r\n this.items[itemIndex].submenu.items[submenuItemIndex].submenu.toggle.focus();\r\n } else {\r\n this.items[itemIndex].submenu.items[submenuItemIndex].link.focus();\r\n }\r\n }\r\n\r\n } else if (itemIndex > -1) {\r\n\r\n // FOCUS TARGET IS TOP-LEVEL MENU ITEM\r\n\r\n if (!this.expanded) this.show();\r\n\r\n // close expander?\r\n if (this.activeSubmenuExpanderItemIndex > -1) {\r\n let prevSubmenuExpander = this.items[this.activeItemIndex].submenu.items[this.activeSubmenuItemIndex].submenu;\r\n if (itemIndex != this.activeItemIndex) {\r\n if (prevSubmenuExpander.expanded) prevSubmenuExpander.hide(false);\r\n } else {\r\n if (prevSubmenuExpander.expanded) prevSubmenuExpander.hide(true);\r\n }\r\n }\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.activeSubmenuExpanderItemIndex > -1 && this.items[this.activeItemIndex].submenu.items[this.activeSubmenuItemIndex].submenu.expanded) this.items[this.activeItemIndex].submenu.items[this.activeSubmenuItemIndex].submenu.hide(false);\r\n if (this.activeItemIndex > -1 && this.activeSubmenuItemIndex > -1 && this.items[this.activeItemIndex].submenu.expanded) this.items[this.activeItemIndex].submenu.hide(false);\r\n if (this.expanded) {\r\n this.hide();\r\n if (keyboardControl.active && setFocus) this.menuToggle.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 (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 this.activeSubmenuExpanderItemIndex = expanderItemIndex;\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 let button = obj.querySelector(level == 1 ? 'button.submenu--toggle' : 'button.submenu-expander--toggle');\r\n let sub = obj.querySelector(level == 1 ? 'div.submenu' : 'div.submenu-expander');\r\n if (button && sub) {\r\n this.hasSubmenu = true;\r\n this.submenu = new subMenu(sub, button, level);\r\n } else {\r\n this.hasSubmenu = false;\r\n this.link = obj.querySelector('a');\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.inner = this.wrapper.querySelector(level == 1 ? 'ul.submenu--items' : 'ul.submenu-expander--items');\r\n this.items = [];\r\n let query = level == 1 ? 'ul.submenu--items > li' : 'ul.submenu-expander--items > li';\r\n [...this.wrapper.querySelectorAll(query)].forEach(i => {\r\n let x = this.items.length;\r\n this.items[x] = new menuItem(x, i, (level + 1));\r\n });\r\n }\r\n show(animate) {\r\n this.expanded = true;\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 this.wrapper.style.maxHeight = 'none';\r\n this.wrapper.ontransitionend = null;\r\n };\r\n } else {\r\n this.wrapper.style.maxHeight = 'none';\r\n }\r\n this.wrapper.setAttribute('aria-hidden', false);\r\n this.toggle.setAttribute('aria-expanded', true);\r\n }\r\n hide(animate) {\r\n this.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 = () => {\r\n this.wrapper.classList.remove('animate');\r\n };\r\n }\r\n this.wrapper.setAttribute('aria-hidden', true);\r\n this.toggle.setAttribute('aria-expanded', false);\r\n }\r\n}\r\n\r\n// create instance of menu\r\n\r\nconst m = new menu(document.querySelector('#main-menu'), document.querySelector('.main-header--menu-toggle'), document.querySelector('#main-menu > .main-menu--inner > ul'));\r\n\r\n\r\n// menu toggle functionality\r\n\r\nm.menuToggle.addEventListener('click', () => {\r\n if (m.expanded) {\r\n // close\r\n m.update(true);\r\n } else {\r\n // open\r\n m.update(true, 0);\r\n }\r\n});\r\n\r\n// add menu item listeners\r\n\r\nfor (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 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 m.update(true, o.index);\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 if (oo.submenu.expanded) {\r\n m.update(true, o.index, oo.index);\r\n } else {\r\n m.update(true, o.index, oo.index, 0);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n}\r\n\r\n// add keyboard accessibility\r\nm.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.activeSubmenuExpanderItemIndex > -1) {\r\n m.update(true, m.activeItemIndex, m.activeSubmenuItemIndex);\r\n } else 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.activeSubmenuExpanderItemIndex > -1) {\r\n let next = m.activeSubmenuExpanderItemIndex + 1,\r\n list = m.items[m.activeItemIndex].submenu.items[m.activeSubmenuItemIndex].submenu.items;\r\n if (next >= list.length) next = 0;\r\n m.update(true, m.activeItemIndex, m.activeSubmenuItemIndex, next);\r\n } else if (m.activeSubmenuItemIndex > -1) {\r\n let next = m.activeSubmenuItemIndex + 1,\r\n list = m.items[m.activeItemIndex].submenu.items;\r\n if (next >= list.length) next = 0;\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.activeSubmenuExpanderItemIndex > -1) {\r\n let next = m.activeSubmenuExpanderItemIndex - 1,\r\n list = m.items[m.activeItemIndex].submenu.items[m.activeSubmenuItemIndex].submenu.items;\r\n if (next < 0) next = list.length - 1;\r\n m.update(true, m.activeItemIndex, m.activeSubmenuItemIndex, next);\r\n } else 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 = list.length - 1;\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 (!m.hasSearch && m.activeItemIndex > -1) {\r\n m.hide();\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.activeSubmenuExpanderItemIndex > -1) {\r\n m.items[m.activeItemIndex].submenu.items[m.activeSubmenuItemIndex].submenu.items[m.activeSubmenuExpanderItemIndex].link.click();\r\n } else if (m.activeSubmenuItemIndex > -1) {\r\n if (m.items[m.activeItemIndex].submenu.items[m.activeSubmenuItemIndex].hasSubmenu) {\r\n m.items[m.activeItemIndex].submenu.items[m.activeSubmenuItemIndex].submenu.toggle.click();\r\n } else {\r\n m.items[m.activeItemIndex].submenu.items[m.activeSubmenuItemIndex].link.click();\r\n }\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// search form keyboard accessibility\r\nif(m.hasSearch) {\r\n m.search.inputField.addEventListener('keydown', (e) => {\r\n switch (e.key) {\r\n // ESCAPE closes mobile menu if input field is empty\r\n case 'Escape':\r\n if(m.search.inputField.value == '') {\r\n e.preventDefault();\r\n m.update(true);\r\n }\r\n break;\r\n }\r\n });\r\n m.search.submitButton.addEventListener('keydown', (e) => {\r\n switch (e.key) {\r\n // TAB on mobile - goes to start of menu\r\n case 'Tab':\r\n e.preventDefault();\r\n m.update(true, 0);\r\n break;\r\n // ESCAPE jumps out a level\r\n case 'Escape':\r\n e.preventDefault();\r\n m.update(true);\r\n break;\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