From 556637928e2f6bcef709f4b15af56a95432db279 Mon Sep 17 00:00:00 2001 From: Jeremy Fields Date: Wed, 27 Mar 2019 15:54:11 -0600 Subject: [PATCH] Fixing polyfill bug --- dist/maps/what-input.min.js.map | 2 +- dist/what-input.js | 8 +++++--- dist/what-input.min.js | 2 +- src/scripts/what-input.js | 8 +++++--- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/dist/maps/what-input.min.js.map b/dist/maps/what-input.min.js.map index fb14100..5dccd54 100644 --- a/dist/maps/what-input.min.js.map +++ b/dist/maps/what-input.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["what-input.min.js","what-input.js"],"names":["root","factory","exports","module","define","amd","this","modules","installedModules","__webpack_require__","moduleId","id","loaded","call","m","c","p","document","window","ask","element","ignoreKeys","specificKeys","registerOnChange","unRegisterOnChange","docElem","documentElement","currentElement","currentInput","currentIntent","currentTimestamp","Date","now","sessionStorage","getItem","e","formInputs","functionList","ignoreMap","specificMap","inputMap","keydown","keyup","mousedown","mousemove","MSPointerDown","MSPointerMove","pointerdown","pointermove","touchstart","touchend","isScrolling","mousePos","x","y","pointerMap","2","3","4","supportsPassive","opts","Object","defineProperty","get","addEventListener","addListeners","options","passive","PointerEvent","setInput","setIntent","MSPointerEvent","detectWheel","setElement","clearElement","event","eventKey","which","value","type","pointerType","ignoreMatch","length","indexOf","specificMatch","shouldUpdate","validateTouch","setItem","doUpdate","activeElem","activeElement","nodeName","toLowerCase","checkClosest","setAttribute","fireFunctions","detectScrolling","target","classList","toString","replace","removeAttribute","timestamp","touchIsValid","createElement","undefined","onmousewheel","i","len","fn","screenX","screenY","elem","tag","Element","prototype","matches","msMatchesSelector","webkitMatchesSelector","closest","parentElement","parentNode","nodeType","Array","opt","arr","eventType","push","position","match","objPos","splice"],"mappings":"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","file":"../what-input.min.js","sourcesContent":[null,"/**\n * what-input - A global utility for tracking the current input method (mouse, keyboard or touch).\n * @version v5.2.1\n * @link https://github.com/ten1seven/what-input\n * @license MIT\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"whatInput\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"whatInput\"] = factory();\n\telse\n\t\troot[\"whatInput\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\n\tmodule.exports = function () {\n\t /*\n\t * bail out if there is no document or window\n\t * (i.e. in a node/non-DOM environment)\n\t *\n\t * Return a stubbed API instead\n\t */\n\t if (typeof document === 'undefined' || typeof window === 'undefined') {\n\t return {\n\t // always return \"initial\" because no interaction will ever be detected\n\t ask: function ask() {\n\t return 'initial';\n\t },\n\n\t // always return null\n\t element: function element() {\n\t return null;\n\t },\n\n\t // no-op\n\t ignoreKeys: function ignoreKeys() {},\n\n\t // no-op\n\t specificKeys: function specificKeys() {},\n\n\t // no-op\n\t registerOnChange: function registerOnChange() {},\n\n\t // no-op\n\t unRegisterOnChange: function unRegisterOnChange() {}\n\t };\n\t }\n\n\t /*\n\t * variables\n\t */\n\n\t // cache document.documentElement\n\t var docElem = document.documentElement;\n\n\t // currently focused dom element\n\t var currentElement = null;\n\n\t // last used input type\n\t var currentInput = 'initial';\n\n\t // last used input intent\n\t var currentIntent = currentInput;\n\n\t // UNIX timestamp of current event\n\t var currentTimestamp = Date.now();\n\n\t // check for sessionStorage support\n\t // then check for session variables and use if available\n\t try {\n\t if (window.sessionStorage.getItem('what-input')) {\n\t currentInput = window.sessionStorage.getItem('what-input');\n\t }\n\n\t if (window.sessionStorage.getItem('what-intent')) {\n\t currentIntent = window.sessionStorage.getItem('what-intent');\n\t }\n\t } catch (e) {}\n\n\t // form input types\n\t var formInputs = ['button', 'input', 'select', 'textarea'];\n\n\t // empty array for holding callback functions\n\t var functionList = [];\n\n\t // list of modifier keys commonly used with the mouse and\n\t // can be safely ignored to prevent false keyboard detection\n\t var ignoreMap = [16, // shift\n\t 17, // control\n\t 18, // alt\n\t 91, // Windows key / left Apple cmd\n\t 93 // Windows menu / right Apple cmd\n\t ];\n\n\t var specificMap = [];\n\n\t // mapping of events to input types\n\t var inputMap = {\n\t keydown: 'keyboard',\n\t keyup: 'keyboard',\n\t mousedown: 'mouse',\n\t mousemove: 'mouse',\n\t MSPointerDown: 'pointer',\n\t MSPointerMove: 'pointer',\n\t pointerdown: 'pointer',\n\t pointermove: 'pointer',\n\t touchstart: 'touch',\n\t touchend: 'touch'\n\n\t // boolean: true if the page is being scrolled\n\t };var isScrolling = false;\n\n\t // store current mouse position\n\t var mousePos = {\n\t x: null,\n\t y: null\n\n\t // map of IE 10 pointer events\n\t };var pointerMap = {\n\t 2: 'touch',\n\t 3: 'touch', // treat pen like touch\n\t 4: 'mouse'\n\n\t // check support for passive event listeners\n\t };var supportsPassive = false;\n\n\t try {\n\t var opts = Object.defineProperty({}, 'passive', {\n\t get: function get() {\n\t supportsPassive = true;\n\t }\n\t });\n\n\t window.addEventListener('test', null, opts);\n\t } catch (e) {}\n\n\t /*\n\t * set up\n\t */\n\n\t var setUp = function setUp() {\n\t // add correct mouse wheel event mapping to `inputMap`\n\t inputMap[detectWheel()] = 'mouse';\n\n\t addListeners();\n\t doUpdate('input');\n\t doUpdate('intent');\n\t };\n\n\t /*\n\t * events\n\t */\n\n\t var addListeners = function addListeners() {\n\t // `pointermove`, `MSPointerMove`, `mousemove` and mouse wheel event binding\n\t // can only demonstrate potential, but not actual, interaction\n\t // and are treated separately\n\t var options = supportsPassive ? { passive: true } : false;\n\n\t // pointer events (mouse, pen, touch)\n\t if (window.PointerEvent) {\n\t window.addEventListener('pointerdown', setInput);\n\t window.addEventListener('pointermove', setIntent);\n\t } else if (window.MSPointerEvent) {\n\t window.addEventListener('MSPointerDown', setInput);\n\t window.addEventListener('MSPointerMove', setIntent);\n\t } else {\n\t // mouse events\n\t window.addEventListener('mousedown', setInput);\n\t window.addEventListener('mousemove', setIntent);\n\n\t // touch events\n\t if ('ontouchstart' in window) {\n\t window.addEventListener('touchstart', setInput, options);\n\t window.addEventListener('touchend', setInput);\n\t }\n\t }\n\n\t // mouse wheel\n\t window.addEventListener(detectWheel(), setIntent, options);\n\n\t // keyboard events\n\t window.addEventListener('keydown', setInput);\n\t window.addEventListener('keyup', setInput);\n\n\t // focus events\n\t window.addEventListener('focusin', setElement);\n\t window.addEventListener('focusout', clearElement);\n\t };\n\n\t // checks conditions before updating new input\n\t var setInput = function setInput(event) {\n\t var eventKey = event.which;\n\t var value = inputMap[event.type];\n\n\t if (value === 'pointer') {\n\t value = pointerType(event);\n\t }\n\n\t var ignoreMatch = !specificMap.length && ignoreMap.indexOf(eventKey) === -1;\n\n\t var specificMatch = specificMap.length && specificMap.indexOf(eventKey) !== -1;\n\n\t var shouldUpdate = value === 'keyboard' && eventKey && (ignoreMatch || specificMatch) || value === 'mouse' || value === 'touch';\n\n\t // prevent touch detection from being overridden by event execution order\n\t if (validateTouch(value)) {\n\t shouldUpdate = false;\n\t }\n\n\t if (shouldUpdate && currentInput !== value) {\n\t currentInput = value;\n\n\t try {\n\t window.sessionStorage.setItem('what-input', currentInput);\n\t } catch (e) {}\n\n\t doUpdate('input');\n\t }\n\n\t if (shouldUpdate && currentIntent !== value) {\n\t // preserve intent for keyboard interaction with form fields\n\t var activeElem = document.activeElement;\n\t var notFormInput = activeElem && activeElem.nodeName && formInputs.indexOf(activeElem.nodeName.toLowerCase()) === -1 || activeElem.nodeName.toLowerCase() === 'button' && !checkClosest(activeElem, 'form');\n\n\t if (notFormInput) {\n\t currentIntent = value;\n\n\t try {\n\t window.sessionStorage.setItem('what-intent', currentIntent);\n\t } catch (e) {}\n\n\t doUpdate('intent');\n\t }\n\t }\n\t };\n\n\t // updates the doc and `inputTypes` array with new input\n\t var doUpdate = function doUpdate(which) {\n\t docElem.setAttribute('data-what' + which, which === 'input' ? currentInput : currentIntent);\n\n\t fireFunctions(which);\n\t };\n\n\t // updates input intent for `mousemove` and `pointermove`\n\t var setIntent = function setIntent(event) {\n\t var value = inputMap[event.type];\n\n\t if (value === 'pointer') {\n\t value = pointerType(event);\n\t }\n\n\t // test to see if `mousemove` happened relative to the screen to detect scrolling versus mousemove\n\t detectScrolling(event);\n\n\t // only execute if scrolling isn't happening\n\t if (!isScrolling && !validateTouch(value) && currentIntent !== value) {\n\t currentIntent = value;\n\n\t try {\n\t window.sessionStorage.setItem('what-intent', currentIntent);\n\t } catch (e) {}\n\n\t doUpdate('intent');\n\t }\n\t };\n\n\t var setElement = function setElement(event) {\n\t if (!event.target.nodeName) {\n\t // If nodeName is undefined, clear the element\n\t // This can happen if click inside an element.\n\t clearElement();\n\t return;\n\t }\n\n\t currentElement = event.target.nodeName.toLowerCase();\n\t docElem.setAttribute('data-whatelement', currentElement);\n\n\t if (event.target.classList && event.target.classList.length) {\n\t docElem.setAttribute('data-whatclasses', event.target.classList.toString().replace(' ', ','));\n\t }\n\t };\n\n\t var clearElement = function clearElement() {\n\t currentElement = null;\n\n\t docElem.removeAttribute('data-whatelement');\n\t docElem.removeAttribute('data-whatclasses');\n\t };\n\n\t /*\n\t * utilities\n\t */\n\n\t var pointerType = function pointerType(event) {\n\t if (typeof event.pointerType === 'number') {\n\t return pointerMap[event.pointerType];\n\t } else {\n\t // treat pen like touch\n\t return event.pointerType === 'pen' ? 'touch' : event.pointerType;\n\t }\n\t };\n\n\t // prevent touch detection from being overridden by event execution order\n\t var validateTouch = function validateTouch(value) {\n\t var timestamp = Date.now();\n\n\t var touchIsValid = value === 'mouse' && currentInput === 'touch' && timestamp - currentTimestamp < 200;\n\n\t currentTimestamp = timestamp;\n\n\t return touchIsValid;\n\t };\n\n\t // detect version of mouse wheel event to use\n\t // via https://developer.mozilla.org/en-US/docs/Web/Events/wheel\n\t var detectWheel = function detectWheel() {\n\t var wheelType = void 0;\n\n\t // Modern browsers support \"wheel\"\n\t if ('onwheel' in document.createElement('div')) {\n\t wheelType = 'wheel';\n\t } else {\n\t // Webkit and IE support at least \"mousewheel\"\n\t // or assume that remaining browsers are older Firefox\n\t wheelType = document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\n\t }\n\n\t return wheelType;\n\t };\n\n\t // runs callback functions\n\t var fireFunctions = function fireFunctions(type) {\n\t for (var i = 0, len = functionList.length; i < len; i++) {\n\t if (functionList[i].type === type) {\n\t functionList[i].fn.call(undefined, type === 'input' ? currentInput : currentIntent);\n\t }\n\t }\n\t };\n\n\t // finds matching element in an object\n\t var objPos = function objPos(match) {\n\t for (var i = 0, len = functionList.length; i < len; i++) {\n\t if (functionList[i].fn === match) {\n\t return i;\n\t }\n\t }\n\t };\n\n\t var detectScrolling = function detectScrolling(event) {\n\t if (mousePos['x'] !== event.screenX || mousePos['y'] !== event.screenY) {\n\t isScrolling = false;\n\n\t mousePos['x'] = event.screenX;\n\t mousePos['y'] = event.screenY;\n\t } else {\n\t isScrolling = true;\n\t }\n\t };\n\n\t // manual version of `closest()`\n\t var checkClosest = function checkClosest(elem, tag) {\n\t if (!Element.prototype.matches) {\n\t Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\n\t }\n\n\t if (!Element.prototype.closest) {\n\t do {\n\t if (elem.matches(tag)) {\n\t return elem;\n\t }\n\n\t elem = elem.parentElement || elem.parentNode;\n\t } while (elem !== null && elem.nodeType === 1);\n\n\t return null;\n\t } else {\n\t return elem.closest(tag);\n\t }\n\t };\n\n\t /*\n\t * init\n\t */\n\n\t // don't start script unless browser cuts the mustard\n\t // (also passes if polyfills are used)\n\t if ('addEventListener' in window && Array.prototype.indexOf) {\n\t setUp();\n\t }\n\n\t /*\n\t * api\n\t */\n\n\t return {\n\t // returns string: the current input type\n\t // opt: 'intent'|'input'\n\t // 'input' (default): returns the same value as the `data-whatinput` attribute\n\t // 'intent': includes `data-whatintent` value if it's different than `data-whatinput`\n\t ask: function ask(opt) {\n\t return opt === 'intent' ? currentIntent : currentInput;\n\t },\n\n\t // returns string: the currently focused element or null\n\t element: function element() {\n\t return currentElement;\n\t },\n\n\t // overwrites ignored keys with provided array\n\t ignoreKeys: function ignoreKeys(arr) {\n\t ignoreMap = arr;\n\t },\n\n\t // overwrites specific char keys to update on\n\t specificKeys: function specificKeys(arr) {\n\t specificMap = arr;\n\t },\n\n\t // attach functions to input and intent \"events\"\n\t // funct: function to fire on change\n\t // eventType: 'input'|'intent'\n\t registerOnChange: function registerOnChange(fn, eventType) {\n\t functionList.push({\n\t fn: fn,\n\t type: eventType || 'input'\n\t });\n\t },\n\n\t unRegisterOnChange: function unRegisterOnChange(fn) {\n\t var position = objPos(fn);\n\n\t if (position || position === 0) {\n\t functionList.splice(position, 1);\n\t }\n\t }\n\t };\n\t}();\n\n/***/ })\n/******/ ])\n});\n;"]} \ No newline at end of file +{"version":3,"sources":["what-input.min.js","what-input.js"],"names":["root","factory","exports","module","define","amd","this","modules","installedModules","__webpack_require__","moduleId","id","loaded","call","m","c","p","document","window","ask","element","ignoreKeys","specificKeys","registerOnChange","unRegisterOnChange","docElem","documentElement","currentElement","currentInput","currentIntent","currentTimestamp","Date","now","sessionStorage","getItem","e","formInputs","functionList","ignoreMap","specificMap","inputMap","keydown","keyup","mousedown","mousemove","MSPointerDown","MSPointerMove","pointerdown","pointermove","touchstart","touchend","isScrolling","mousePos","x","y","pointerMap","2","3","4","supportsPassive","opts","Object","defineProperty","get","addEventListener","addListeners","options","passive","PointerEvent","setInput","setIntent","MSPointerEvent","detectWheel","setElement","clearElement","event","eventKey","which","value","type","pointerType","ignoreMatch","length","indexOf","specificMatch","shouldUpdate","validateTouch","setItem","doUpdate","activeElem","activeElement","nodeName","toLowerCase","checkClosest","setAttribute","fireFunctions","detectScrolling","target","classList","toString","replace","removeAttribute","timestamp","touchIsValid","createElement","undefined","onmousewheel","i","len","fn","screenX","screenY","elem","tag","ElementPrototype","Element","prototype","matches","msMatchesSelector","webkitMatchesSelector","closest","parentElement","parentNode","nodeType","Array","opt","arr","eventType","push","position","match","objPos","splice"],"mappings":"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","file":"../what-input.min.js","sourcesContent":[null,"/**\n * what-input - A global utility for tracking the current input method (mouse, keyboard or touch).\n * @version v5.2.1\n * @link https://github.com/ten1seven/what-input\n * @license MIT\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"whatInput\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"whatInput\"] = factory();\n\telse\n\t\troot[\"whatInput\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\n\tmodule.exports = function () {\n\t /*\n\t * bail out if there is no document or window\n\t * (i.e. in a node/non-DOM environment)\n\t *\n\t * Return a stubbed API instead\n\t */\n\t if (typeof document === 'undefined' || typeof window === 'undefined') {\n\t return {\n\t // always return \"initial\" because no interaction will ever be detected\n\t ask: function ask() {\n\t return 'initial';\n\t },\n\n\t // always return null\n\t element: function element() {\n\t return null;\n\t },\n\n\t // no-op\n\t ignoreKeys: function ignoreKeys() {},\n\n\t // no-op\n\t specificKeys: function specificKeys() {},\n\n\t // no-op\n\t registerOnChange: function registerOnChange() {},\n\n\t // no-op\n\t unRegisterOnChange: function unRegisterOnChange() {}\n\t };\n\t }\n\n\t /*\n\t * variables\n\t */\n\n\t // cache document.documentElement\n\t var docElem = document.documentElement;\n\n\t // currently focused dom element\n\t var currentElement = null;\n\n\t // last used input type\n\t var currentInput = 'initial';\n\n\t // last used input intent\n\t var currentIntent = currentInput;\n\n\t // UNIX timestamp of current event\n\t var currentTimestamp = Date.now();\n\n\t // check for sessionStorage support\n\t // then check for session variables and use if available\n\t try {\n\t if (window.sessionStorage.getItem('what-input')) {\n\t currentInput = window.sessionStorage.getItem('what-input');\n\t }\n\n\t if (window.sessionStorage.getItem('what-intent')) {\n\t currentIntent = window.sessionStorage.getItem('what-intent');\n\t }\n\t } catch (e) {}\n\n\t // form input types\n\t var formInputs = ['button', 'input', 'select', 'textarea'];\n\n\t // empty array for holding callback functions\n\t var functionList = [];\n\n\t // list of modifier keys commonly used with the mouse and\n\t // can be safely ignored to prevent false keyboard detection\n\t var ignoreMap = [16, // shift\n\t 17, // control\n\t 18, // alt\n\t 91, // Windows key / left Apple cmd\n\t 93 // Windows menu / right Apple cmd\n\t ];\n\n\t var specificMap = [];\n\n\t // mapping of events to input types\n\t var inputMap = {\n\t keydown: 'keyboard',\n\t keyup: 'keyboard',\n\t mousedown: 'mouse',\n\t mousemove: 'mouse',\n\t MSPointerDown: 'pointer',\n\t MSPointerMove: 'pointer',\n\t pointerdown: 'pointer',\n\t pointermove: 'pointer',\n\t touchstart: 'touch',\n\t touchend: 'touch'\n\n\t // boolean: true if the page is being scrolled\n\t };var isScrolling = false;\n\n\t // store current mouse position\n\t var mousePos = {\n\t x: null,\n\t y: null\n\n\t // map of IE 10 pointer events\n\t };var pointerMap = {\n\t 2: 'touch',\n\t 3: 'touch', // treat pen like touch\n\t 4: 'mouse'\n\n\t // check support for passive event listeners\n\t };var supportsPassive = false;\n\n\t try {\n\t var opts = Object.defineProperty({}, 'passive', {\n\t get: function get() {\n\t supportsPassive = true;\n\t }\n\t });\n\n\t window.addEventListener('test', null, opts);\n\t } catch (e) {}\n\n\t /*\n\t * set up\n\t */\n\n\t var setUp = function setUp() {\n\t // add correct mouse wheel event mapping to `inputMap`\n\t inputMap[detectWheel()] = 'mouse';\n\n\t addListeners();\n\t doUpdate('input');\n\t doUpdate('intent');\n\t };\n\n\t /*\n\t * events\n\t */\n\n\t var addListeners = function addListeners() {\n\t // `pointermove`, `MSPointerMove`, `mousemove` and mouse wheel event binding\n\t // can only demonstrate potential, but not actual, interaction\n\t // and are treated separately\n\t var options = supportsPassive ? { passive: true } : false;\n\n\t // pointer events (mouse, pen, touch)\n\t if (window.PointerEvent) {\n\t window.addEventListener('pointerdown', setInput);\n\t window.addEventListener('pointermove', setIntent);\n\t } else if (window.MSPointerEvent) {\n\t window.addEventListener('MSPointerDown', setInput);\n\t window.addEventListener('MSPointerMove', setIntent);\n\t } else {\n\t // mouse events\n\t window.addEventListener('mousedown', setInput);\n\t window.addEventListener('mousemove', setIntent);\n\n\t // touch events\n\t if ('ontouchstart' in window) {\n\t window.addEventListener('touchstart', setInput, options);\n\t window.addEventListener('touchend', setInput);\n\t }\n\t }\n\n\t // mouse wheel\n\t window.addEventListener(detectWheel(), setIntent, options);\n\n\t // keyboard events\n\t window.addEventListener('keydown', setInput);\n\t window.addEventListener('keyup', setInput);\n\n\t // focus events\n\t window.addEventListener('focusin', setElement);\n\t window.addEventListener('focusout', clearElement);\n\t };\n\n\t // checks conditions before updating new input\n\t var setInput = function setInput(event) {\n\t var eventKey = event.which;\n\t var value = inputMap[event.type];\n\n\t if (value === 'pointer') {\n\t value = pointerType(event);\n\t }\n\n\t var ignoreMatch = !specificMap.length && ignoreMap.indexOf(eventKey) === -1;\n\n\t var specificMatch = specificMap.length && specificMap.indexOf(eventKey) !== -1;\n\n\t var shouldUpdate = value === 'keyboard' && eventKey && (ignoreMatch || specificMatch) || value === 'mouse' || value === 'touch';\n\n\t // prevent touch detection from being overridden by event execution order\n\t if (validateTouch(value)) {\n\t shouldUpdate = false;\n\t }\n\n\t if (shouldUpdate && currentInput !== value) {\n\t currentInput = value;\n\n\t try {\n\t window.sessionStorage.setItem('what-input', currentInput);\n\t } catch (e) {}\n\n\t doUpdate('input');\n\t }\n\n\t if (shouldUpdate && currentIntent !== value) {\n\t // preserve intent for keyboard interaction with form fields\n\t var activeElem = document.activeElement;\n\t var notFormInput = activeElem && activeElem.nodeName && formInputs.indexOf(activeElem.nodeName.toLowerCase()) === -1 || activeElem.nodeName.toLowerCase() === 'button' && !checkClosest(activeElem, 'form');\n\n\t if (notFormInput) {\n\t currentIntent = value;\n\n\t try {\n\t window.sessionStorage.setItem('what-intent', currentIntent);\n\t } catch (e) {}\n\n\t doUpdate('intent');\n\t }\n\t }\n\t };\n\n\t // updates the doc and `inputTypes` array with new input\n\t var doUpdate = function doUpdate(which) {\n\t docElem.setAttribute('data-what' + which, which === 'input' ? currentInput : currentIntent);\n\n\t fireFunctions(which);\n\t };\n\n\t // updates input intent for `mousemove` and `pointermove`\n\t var setIntent = function setIntent(event) {\n\t var value = inputMap[event.type];\n\n\t if (value === 'pointer') {\n\t value = pointerType(event);\n\t }\n\n\t // test to see if `mousemove` happened relative to the screen to detect scrolling versus mousemove\n\t detectScrolling(event);\n\n\t // only execute if scrolling isn't happening\n\t if (!isScrolling && !validateTouch(value) && currentIntent !== value) {\n\t currentIntent = value;\n\n\t try {\n\t window.sessionStorage.setItem('what-intent', currentIntent);\n\t } catch (e) {}\n\n\t doUpdate('intent');\n\t }\n\t };\n\n\t var setElement = function setElement(event) {\n\t if (!event.target.nodeName) {\n\t // If nodeName is undefined, clear the element\n\t // This can happen if click inside an element.\n\t clearElement();\n\t return;\n\t }\n\n\t currentElement = event.target.nodeName.toLowerCase();\n\t docElem.setAttribute('data-whatelement', currentElement);\n\n\t if (event.target.classList && event.target.classList.length) {\n\t docElem.setAttribute('data-whatclasses', event.target.classList.toString().replace(' ', ','));\n\t }\n\t };\n\n\t var clearElement = function clearElement() {\n\t currentElement = null;\n\n\t docElem.removeAttribute('data-whatelement');\n\t docElem.removeAttribute('data-whatclasses');\n\t };\n\n\t /*\n\t * utilities\n\t */\n\n\t var pointerType = function pointerType(event) {\n\t if (typeof event.pointerType === 'number') {\n\t return pointerMap[event.pointerType];\n\t } else {\n\t // treat pen like touch\n\t return event.pointerType === 'pen' ? 'touch' : event.pointerType;\n\t }\n\t };\n\n\t // prevent touch detection from being overridden by event execution order\n\t var validateTouch = function validateTouch(value) {\n\t var timestamp = Date.now();\n\n\t var touchIsValid = value === 'mouse' && currentInput === 'touch' && timestamp - currentTimestamp < 200;\n\n\t currentTimestamp = timestamp;\n\n\t return touchIsValid;\n\t };\n\n\t // detect version of mouse wheel event to use\n\t // via https://developer.mozilla.org/en-US/docs/Web/Events/wheel\n\t var detectWheel = function detectWheel() {\n\t var wheelType = void 0;\n\n\t // Modern browsers support \"wheel\"\n\t if ('onwheel' in document.createElement('div')) {\n\t wheelType = 'wheel';\n\t } else {\n\t // Webkit and IE support at least \"mousewheel\"\n\t // or assume that remaining browsers are older Firefox\n\t wheelType = document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\n\t }\n\n\t return wheelType;\n\t };\n\n\t // runs callback functions\n\t var fireFunctions = function fireFunctions(type) {\n\t for (var i = 0, len = functionList.length; i < len; i++) {\n\t if (functionList[i].type === type) {\n\t functionList[i].fn.call(undefined, type === 'input' ? currentInput : currentIntent);\n\t }\n\t }\n\t };\n\n\t // finds matching element in an object\n\t var objPos = function objPos(match) {\n\t for (var i = 0, len = functionList.length; i < len; i++) {\n\t if (functionList[i].fn === match) {\n\t return i;\n\t }\n\t }\n\t };\n\n\t var detectScrolling = function detectScrolling(event) {\n\t if (mousePos['x'] !== event.screenX || mousePos['y'] !== event.screenY) {\n\t isScrolling = false;\n\n\t mousePos['x'] = event.screenX;\n\t mousePos['y'] = event.screenY;\n\t } else {\n\t isScrolling = true;\n\t }\n\t };\n\n\t // manual version of `closest()`\n\t var checkClosest = function checkClosest(elem, tag) {\n\t var ElementPrototype = window.Element.prototype;\n\n\t if (!ElementPrototype.matches) {\n\t ElementPrototype.matches = ElementPrototype.msMatchesSelector || ElementPrototype.webkitMatchesSelector;\n\t }\n\n\t if (!ElementPrototype.closest) {\n\t do {\n\t if (elem.matches(tag)) {\n\t return elem;\n\t }\n\n\t elem = elem.parentElement || elem.parentNode;\n\t } while (elem !== null && elem.nodeType === 1);\n\n\t return null;\n\t } else {\n\t return elem.closest(tag);\n\t }\n\t };\n\n\t /*\n\t * init\n\t */\n\n\t // don't start script unless browser cuts the mustard\n\t // (also passes if polyfills are used)\n\t if ('addEventListener' in window && Array.prototype.indexOf) {\n\t setUp();\n\t }\n\n\t /*\n\t * api\n\t */\n\n\t return {\n\t // returns string: the current input type\n\t // opt: 'intent'|'input'\n\t // 'input' (default): returns the same value as the `data-whatinput` attribute\n\t // 'intent': includes `data-whatintent` value if it's different than `data-whatinput`\n\t ask: function ask(opt) {\n\t return opt === 'intent' ? currentIntent : currentInput;\n\t },\n\n\t // returns string: the currently focused element or null\n\t element: function element() {\n\t return currentElement;\n\t },\n\n\t // overwrites ignored keys with provided array\n\t ignoreKeys: function ignoreKeys(arr) {\n\t ignoreMap = arr;\n\t },\n\n\t // overwrites specific char keys to update on\n\t specificKeys: function specificKeys(arr) {\n\t specificMap = arr;\n\t },\n\n\t // attach functions to input and intent \"events\"\n\t // funct: function to fire on change\n\t // eventType: 'input'|'intent'\n\t registerOnChange: function registerOnChange(fn, eventType) {\n\t functionList.push({\n\t fn: fn,\n\t type: eventType || 'input'\n\t });\n\t },\n\n\t unRegisterOnChange: function unRegisterOnChange(fn) {\n\t var position = objPos(fn);\n\n\t if (position || position === 0) {\n\t functionList.splice(position, 1);\n\t }\n\t }\n\t };\n\t}();\n\n/***/ })\n/******/ ])\n});\n;"]} \ No newline at end of file diff --git a/dist/what-input.js b/dist/what-input.js index 82c0408..d57b5a9 100644 --- a/dist/what-input.js +++ b/dist/what-input.js @@ -409,11 +409,13 @@ return /******/ (function(modules) { // webpackBootstrap // manual version of `closest()` var checkClosest = function checkClosest(elem, tag) { - if (!Element.prototype.matches) { - Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector; + var ElementPrototype = window.Element.prototype; + + if (!ElementPrototype.matches) { + ElementPrototype.matches = ElementPrototype.msMatchesSelector || ElementPrototype.webkitMatchesSelector; } - if (!Element.prototype.closest) { + if (!ElementPrototype.closest) { do { if (elem.matches(tag)) { return elem; diff --git a/dist/what-input.min.js b/dist/what-input.min.js index ac0169b..a836cc7 100644 --- a/dist/what-input.min.js +++ b/dist/what-input.min.js @@ -4,5 +4,5 @@ * @link https://github.com/ten1seven/what-input * @license MIT */ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("whatInput",[],t):"object"==typeof exports?exports.whatInput=t():e.whatInput=t()}(this,function(){return function(n){var o={};function i(e){if(o[e])return o[e].exports;var t=o[e]={exports:{},id:e,loaded:!1};return n[e].call(t.exports,t,t.exports,i),t.loaded=!0,t.exports}return i.m=n,i.c=o,i.p="",i(0)}([function(e,t){"use strict";e.exports=function(){if("undefined"==typeof document||"undefined"==typeof window)return{ask:function(){return"initial"},element:function(){return null},ignoreKeys:function(){},specificKeys:function(){},registerOnChange:function(){},unRegisterOnChange:function(){}};var t=document.documentElement,n=null,u="initial",a=u,o=Date.now();try{window.sessionStorage.getItem("what-input")&&(u=window.sessionStorage.getItem("what-input")),window.sessionStorage.getItem("what-intent")&&(a=window.sessionStorage.getItem("what-intent"))}catch(e){}var d=["button","input","select","textarea"],i=[],c=[16,17,18,91,93],w=[],p={keydown:"keyboard",keyup:"keyboard",mousedown:"mouse",mousemove:"mouse",MSPointerDown:"pointer",MSPointerMove:"pointer",pointerdown:"pointer",pointermove:"pointer",touchstart:"touch",touchend:"touch"},r=!1,s={x:null,y:null},f={2:"touch",3:"touch",4:"mouse"},l=!1;try{var e=Object.defineProperty({},"passive",{get:function(){l=!0}});window.addEventListener("test",null,e)}catch(e){}var m=function(){var e=!!l&&{passive:!0};window.PointerEvent?(window.addEventListener("pointerdown",h),window.addEventListener("pointermove",y)):window.MSPointerEvent?(window.addEventListener("MSPointerDown",h),window.addEventListener("MSPointerMove",y)):(window.addEventListener("mousedown",h),window.addEventListener("mousemove",y),"ontouchstart"in window&&(window.addEventListener("touchstart",h,e),window.addEventListener("touchend",h))),window.addEventListener(b(),y,e),window.addEventListener("keydown",h),window.addEventListener("keyup",h),window.addEventListener("focusin",g),window.addEventListener("focusout",E)},h=function(e){var t=e.which,n=p[e.type];"pointer"===n&&(n=L(e));var o=!w.length&&-1===c.indexOf(t),i=w.length&&-1!==w.indexOf(t),r="keyboard"===n&&t&&(o||i)||"mouse"===n||"touch"===n;if(x(n)&&(r=!1),r&&u!==n){u=n;try{window.sessionStorage.setItem("what-input",u)}catch(e){}v("input")}if(r&&a!==n){var s=document.activeElement;if(s&&s.nodeName&&-1===d.indexOf(s.nodeName.toLowerCase())||"button"===s.nodeName.toLowerCase()&&!k(s,"form")){a=n;try{window.sessionStorage.setItem("what-intent",a)}catch(e){}v("intent")}}},v=function(e){t.setAttribute("data-what"+e,"input"===e?u:a),S(e)},y=function(e){var t=p[e.type];if("pointer"===t&&(t=L(e)),M(e),!r&&!x(t)&&a!==t){a=t;try{window.sessionStorage.setItem("what-intent",a)}catch(e){}v("intent")}},g=function(e){e.target.nodeName?(n=e.target.nodeName.toLowerCase(),t.setAttribute("data-whatelement",n),e.target.classList&&e.target.classList.length&&t.setAttribute("data-whatclasses",e.target.classList.toString().replace(" ",","))):E()},E=function(){n=null,t.removeAttribute("data-whatelement"),t.removeAttribute("data-whatclasses")},L=function(e){return"number"==typeof e.pointerType?f[e.pointerType]:"pen"===e.pointerType?"touch":e.pointerType},x=function(e){var t=Date.now(),n="mouse"===e&&"touch"===u&&t-o<200;return o=t,n},b=function(){return"onwheel"in document.createElement("div")?"wheel":void 0!==document.onmousewheel?"mousewheel":"DOMMouseScroll"},S=function(e){for(var t=0,n=i.length;t { // manual version of `closest()` const checkClosest = (elem, tag) => { - if (!Element.prototype.matches) { - Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector + const ElementPrototype = window.Element.prototype + + if (!ElementPrototype.matches) { + ElementPrototype.matches = ElementPrototype.msMatchesSelector || ElementPrototype.webkitMatchesSelector } - if (!Element.prototype.closest) { + if (!ElementPrototype.closest) { do { if (elem.matches(tag)) { return elem