{"version":3,"sources":["../js/libs/pep.js"],"names":["global","factory","exports","module","define","amd","PointerEventsPolyfill","this","MOUSE_PROPS","MOUSE_DEFAULTS","_PointerEvent","PointerEvent","inType","inDict","Object","create","e","document","createEvent","initEvent","bubbles","cancelable","p","i","length","buttons","pressure","x","clientX","y","clientY","pointerId","width","height","tiltX","tiltY","pointerType","hwTimestamp","isPrimary","SparseArrayMap","array","size","_pointermap","window","Map","prototype","forEach","CLONE_PROPS","CLONE_DEFAULTS","set","k","v","undefined","delete","has","get","clear","callback","thisArg","call","BOUNDARY_EVENTS","pointerover","pointerout","pointerenter","pointerleave","HAS_SVG_INSTANCE","SVGElementInstance","dispatcher","pointermap","eventMap","captureInfo","eventSources","eventSourceList","registerSource","name","source","s","newEvents","events","bind","push","register","element","es","l","unregister","contains","container","contained","ex","down","inEvent","fireEvent","move","up","enter","leave","over","out","cancel","leaveOut","event","target","relatedTarget","enterOver","eventHandler","_handledByPE","type","fn","listen","addEvent","unlisten","removeEvent","eventName","addEventListener","boundHandler","removeEventListener","makeEvent","preventDefault","_target","dispatchEvent","cloneEvent","eventCopy","correspondingUseElement","getTarget","capture","setCapture","inPointerId","inTarget","releaseCapture","implicitRelease","asyncDispatchEvent","t","requestAnimationFrame","_dispatcher","targeting","shadow","inEl","shadowRoot","webkitShadowRoot","canTarget","Boolean","elementFromPoint","targetingShadow","olderShadow","os","olderShadowRoot","se","querySelector","allShadows","shadows","searchRoot","inRoot","st","sr","ssr","owner","parentNode","nodeType","Node","DOCUMENT_NODE","DOCUMENT_FRAGMENT_NODE","findTarget","Array","map","toArray","slice","filter","MO","MutationObserver","WebKitMutationObserver","OBSERVER_INIT","subtree","childList","attributes","attributeOldValue","attributeFilter","Installer","add","remove","changed","binder","addCallback","removeCallback","changedCallback","observer","mutationWatcher","watchSubtree","observe","enableOnSubtree","readyState","installOnLoad","installNewSubtree","findElements","addElement","querySelectorAll","removeElement","el","elementChanged","oldValue","concatLists","accum","list","concat","isElement","n","ELEMENT_NODE","flattenMutationTree","inNodes","tree","reduce","mutations","mutationHandler","m","addedNodes","removedNodes","installer","shadowSelector","selector","rule","attrib2css","selectors","styles","hasNativePE","MSPointerEvent","hasShadowRoot","ShadowDOMPolyfill","head","createShadowRoot","mouse__pointermap","BUTTON_TO_BUTTONS","HAS_BUTTONS","MouseEvent","INSTALLER","mouse","POINTER_ID","POINTER_TYPE","lastTouches","isEventSimulatedFromTouch","lts","dx","Math","abs","dy","prepareEvent","pd","prepareButtonsForMove","mousedown","button","mousemove","mouseup","cleanupMouse","mouseover","mouseout","touch__pointermap","touchEvents","elementAdded","a","getAttribute","touchActionToScrollType","_scrollType","elementRemoved","oldSt","scrollTypes","EMITTER","XSCROLLER","YSCROLLER","SCROLLER","touchAction","exec","firstTouch","isPrimaryTouch","inTouch","identifier","setPrimaryTouch","firstXY","X","Y","scrolling","cancelResetClickCount","removePrimaryPointer","inPointer","resetClickCount","clickCount","resetId","setTimeout","clearTimeout","typeToButtons","ret","touchToPointer","cte","currentTouchEvent","id","detail","radiusX","webkitRadiusX","radiusY","webkitRadiusY","force","webkitForce","self","processTouches","inFunction","tl","changedTouches","shouldScroll","scrollAxis","currentTarget","oa","da","findTouch","inTL","inId","vacuumTouches","touches","d","value","key","cancelOut","touchstart","dedupSynthMouse","overDown","outTarget","touchmove","touchcancel","moveOverOut","pointer","outEvent","touchend","upOut","cleanUpPointer","lt","indexOf","splice","touch","ms__pointermap","HAS_BITMAP_TYPE","MSPOINTER_TYPE_MOUSE","ms","POINTER_TYPES","cleanup","MSPointerDown","MSPointerMove","MSPointerUp","MSPointerOut","MSPointerOver","MSPointerCancel","MSLostPointerCapture","MSGotPointerCapture","r","navigator","assertDown","Error","msPointerEnabled","msSetPointerCapture","msReleasePointerCapture","setPointerCapture","releasePointerCapture","applyAttributeStyles","String","createElement","textContent","appendChild","platform_events__applyPolyfill","tp","msMaxTouchPoints","defineProperty","enumerable","ontouchstart","_capture__applyPolyfill","Element","defineProperties","PointerMap","targetFinding"],"mappings":"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","file":"pep-a9570e3fa2.js","sourcesContent":["/*!\r\n * PEP v0.4.1 | https://github.com/jquery/PEP\r\n * Copyright jQuery Foundation and other contributors | http://jquery.org/license\r\n */\r\n(function (global, factory) {\r\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\r\n typeof define === 'function' && define.amd ? define(factory) :\r\n global.PointerEventsPolyfill = factory()\r\n}(this, function () { 'use strict';\r\n\r\n /**\r\n * This is the constructor for new PointerEvents.\r\n *\r\n * New Pointer Events must be given a type, and an optional dictionary of\r\n * initialization properties.\r\n *\r\n * Due to certain platform requirements, events returned from the constructor\r\n * identify as MouseEvents.\r\n *\r\n * @constructor\r\n * @param {String} inType The type of the event to create.\r\n * @param {Object} [inDict] An optional dictionary of initial event properties.\r\n * @return {Event} A new PointerEvent of type `inType`, initialized with properties from `inDict`.\r\n */\r\n var MOUSE_PROPS = [\r\n 'bubbles',\r\n 'cancelable',\r\n 'view',\r\n 'detail',\r\n 'screenX',\r\n 'screenY',\r\n 'clientX',\r\n 'clientY',\r\n 'ctrlKey',\r\n 'altKey',\r\n 'shiftKey',\r\n 'metaKey',\r\n 'button',\r\n 'relatedTarget',\r\n 'pageX',\r\n 'pageY'\r\n ];\r\n\r\n var MOUSE_DEFAULTS = [\r\n false,\r\n false,\r\n null,\r\n null,\r\n 0,\r\n 0,\r\n 0,\r\n 0,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 0,\r\n null,\r\n 0,\r\n 0\r\n ];\r\n\r\n function PointerEvent(inType, inDict) {\r\n inDict = inDict || Object.create(null);\r\n\r\n var e = document.createEvent('Event');\r\n e.initEvent(inType, inDict.bubbles || false, inDict.cancelable || false);\r\n\r\n // define inherited MouseEvent properties\r\n // skip bubbles and cancelable since they're set above in initEvent()\r\n for (var i = 2, p; i < MOUSE_PROPS.length; i++) {\r\n p = MOUSE_PROPS[i];\r\n e[p] = inDict[p] || MOUSE_DEFAULTS[i];\r\n }\r\n e.buttons = inDict.buttons || 0;\r\n\r\n // Spec requires that pointers without pressure specified use 0.5 for down\r\n // state and 0 for up state.\r\n var pressure = 0;\r\n if (inDict.pressure) {\r\n pressure = inDict.pressure;\r\n } else {\r\n pressure = e.buttons ? 0.5 : 0;\r\n }\r\n\r\n // add x/y properties aliased to clientX/Y\r\n e.x = e.clientX;\r\n e.y = e.clientY;\r\n\r\n // define the properties of the PointerEvent interface\r\n e.pointerId = inDict.pointerId || 0;\r\n e.width = inDict.width || 0;\r\n e.height = inDict.height || 0;\r\n e.pressure = pressure;\r\n e.tiltX = inDict.tiltX || 0;\r\n e.tiltY = inDict.tiltY || 0;\r\n e.pointerType = inDict.pointerType || '';\r\n e.hwTimestamp = inDict.hwTimestamp || 0;\r\n e.isPrimary = inDict.isPrimary || false;\r\n return e;\r\n }\r\n\r\n var _PointerEvent = PointerEvent;\r\n\r\n /**\r\n * This module implements a map of pointer states\r\n */\r\n var USE_MAP = window.Map && window.Map.prototype.forEach;\r\n var PointerMap = USE_MAP ? Map : SparseArrayMap;\r\n\r\n function SparseArrayMap() {\r\n this.array = [];\r\n this.size = 0;\r\n }\r\n\r\n SparseArrayMap.prototype = {\r\n set: function(k, v) {\r\n if (v === undefined) {\r\n return this.delete(k);\r\n }\r\n if (!this.has(k)) {\r\n this.size++;\r\n }\r\n this.array[k] = v;\r\n },\r\n has: function(k) {\r\n return this.array[k] !== undefined;\r\n },\r\n delete: function(k) {\r\n if (this.has(k)) {\r\n delete this.array[k];\r\n this.size--;\r\n }\r\n },\r\n get: function(k) {\r\n return this.array[k];\r\n },\r\n clear: function() {\r\n this.array.length = 0;\r\n this.size = 0;\r\n },\r\n\r\n // return value, key, map\r\n forEach: function(callback, thisArg) {\r\n return this.array.forEach(function(v, k) {\r\n callback.call(thisArg, v, k, this);\r\n }, this);\r\n }\r\n };\r\n\r\n var _pointermap = PointerMap;\r\n\r\n var CLONE_PROPS = [\r\n\r\n // MouseEvent\r\n 'bubbles',\r\n 'cancelable',\r\n 'view',\r\n 'detail',\r\n 'screenX',\r\n 'screenY',\r\n 'clientX',\r\n 'clientY',\r\n 'ctrlKey',\r\n 'altKey',\r\n 'shiftKey',\r\n 'metaKey',\r\n 'button',\r\n 'relatedTarget',\r\n\r\n // DOM Level 3\r\n 'buttons',\r\n\r\n // PointerEvent\r\n 'pointerId',\r\n 'width',\r\n 'height',\r\n 'pressure',\r\n 'tiltX',\r\n 'tiltY',\r\n 'pointerType',\r\n 'hwTimestamp',\r\n 'isPrimary',\r\n\r\n // event instance\r\n 'type',\r\n 'target',\r\n 'currentTarget',\r\n 'which',\r\n 'pageX',\r\n 'pageY',\r\n 'timeStamp'\r\n ];\r\n\r\n var CLONE_DEFAULTS = [\r\n\r\n // MouseEvent\r\n false,\r\n false,\r\n null,\r\n null,\r\n 0,\r\n 0,\r\n 0,\r\n 0,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 0,\r\n null,\r\n\r\n // DOM Level 3\r\n 0,\r\n\r\n // PointerEvent\r\n 0,\r\n 0,\r\n 0,\r\n 0,\r\n 0,\r\n 0,\r\n '',\r\n 0,\r\n false,\r\n\r\n // event instance\r\n '',\r\n null,\r\n null,\r\n 0,\r\n 0,\r\n 0,\r\n 0\r\n ];\r\n\r\n var BOUNDARY_EVENTS = {\r\n 'pointerover': 1,\r\n 'pointerout': 1,\r\n 'pointerenter': 1,\r\n 'pointerleave': 1\r\n };\r\n\r\n var HAS_SVG_INSTANCE = (typeof SVGElementInstance !== 'undefined');\r\n\r\n /**\r\n * This module is for normalizing events. Mouse and Touch events will be\r\n * collected here, and fire PointerEvents that have the same semantics, no\r\n * matter the source.\r\n * Events fired:\r\n * - pointerdown: a pointing is added\r\n * - pointerup: a pointer is removed\r\n * - pointermove: a pointer is moved\r\n * - pointerover: a pointer crosses into an element\r\n * - pointerout: a pointer leaves an element\r\n * - pointercancel: a pointer will no longer generate events\r\n */\r\n var dispatcher = {\r\n pointermap: new _pointermap(),\r\n eventMap: Object.create(null),\r\n captureInfo: Object.create(null),\r\n\r\n // Scope objects for native events.\r\n // This exists for ease of testing.\r\n eventSources: Object.create(null),\r\n eventSourceList: [],\r\n /**\r\n * Add a new event source that will generate pointer events.\r\n *\r\n * `inSource` must contain an array of event names named `events`, and\r\n * functions with the names specified in the `events` array.\r\n * @param {string} name A name for the event source\r\n * @param {Object} source A new source of platform events.\r\n */\r\n registerSource: function(name, source) {\r\n var s = source;\r\n var newEvents = s.events;\r\n if (newEvents) {\r\n newEvents.forEach(function(e) {\r\n if (s[e]) {\r\n this.eventMap[e] = s[e].bind(s);\r\n }\r\n }, this);\r\n this.eventSources[name] = s;\r\n this.eventSourceList.push(s);\r\n }\r\n },\r\n register: function(element) {\r\n var l = this.eventSourceList.length;\r\n for (var i = 0, es; (i < l) && (es = this.eventSourceList[i]); i++) {\r\n\r\n // call eventsource register\r\n es.register.call(es, element);\r\n }\r\n },\r\n unregister: function(element) {\r\n var l = this.eventSourceList.length;\r\n for (var i = 0, es; (i < l) && (es = this.eventSourceList[i]); i++) {\r\n\r\n // call eventsource register\r\n es.unregister.call(es, element);\r\n }\r\n },\r\n contains: /*scope.external.contains || */function(container, contained) {\r\n try {\r\n return container.contains(contained);\r\n } catch (ex) {\r\n\r\n // most likely: https://bugzilla.mozilla.org/show_bug.cgi?id=208427\r\n return false;\r\n }\r\n },\r\n\r\n // EVENTS\r\n down: function(inEvent) {\r\n inEvent.bubbles = true;\r\n this.fireEvent('pointerdown', inEvent);\r\n },\r\n move: function(inEvent) {\r\n inEvent.bubbles = true;\r\n this.fireEvent('pointermove', inEvent);\r\n },\r\n up: function(inEvent) {\r\n inEvent.bubbles = true;\r\n this.fireEvent('pointerup', inEvent);\r\n },\r\n enter: function(inEvent) {\r\n inEvent.bubbles = false;\r\n this.fireEvent('pointerenter', inEvent);\r\n },\r\n leave: function(inEvent) {\r\n inEvent.bubbles = false;\r\n this.fireEvent('pointerleave', inEvent);\r\n },\r\n over: function(inEvent) {\r\n inEvent.bubbles = true;\r\n this.fireEvent('pointerover', inEvent);\r\n },\r\n out: function(inEvent) {\r\n inEvent.bubbles = true;\r\n this.fireEvent('pointerout', inEvent);\r\n },\r\n cancel: function(inEvent) {\r\n inEvent.bubbles = true;\r\n this.fireEvent('pointercancel', inEvent);\r\n },\r\n leaveOut: function(event) {\r\n this.out(event);\r\n if (!this.contains(event.target, event.relatedTarget)) {\r\n this.leave(event);\r\n }\r\n },\r\n enterOver: function(event) {\r\n this.over(event);\r\n if (!this.contains(event.target, event.relatedTarget)) {\r\n this.enter(event);\r\n }\r\n },\r\n\r\n // LISTENER LOGIC\r\n eventHandler: function(inEvent) {\r\n\r\n // This is used to prevent multiple dispatch of pointerevents from\r\n // platform events. This can happen when two elements in different scopes\r\n // are set up to create pointer events, which is relevant to Shadow DOM.\r\n if (inEvent._handledByPE) {\r\n return;\r\n }\r\n var type = inEvent.type;\r\n var fn = this.eventMap && this.eventMap[type];\r\n if (fn) {\r\n fn(inEvent);\r\n }\r\n inEvent._handledByPE = true;\r\n },\r\n\r\n // set up event listeners\r\n listen: function(target, events) {\r\n events.forEach(function(e) {\r\n this.addEvent(target, e);\r\n }, this);\r\n },\r\n\r\n // remove event listeners\r\n unlisten: function(target, events) {\r\n events.forEach(function(e) {\r\n this.removeEvent(target, e);\r\n }, this);\r\n },\r\n addEvent: /*scope.external.addEvent || */function(target, eventName) {\r\n target.addEventListener(eventName, this.boundHandler);\r\n },\r\n removeEvent: /*scope.external.removeEvent || */function(target, eventName) {\r\n target.removeEventListener(eventName, this.boundHandler);\r\n },\r\n\r\n // EVENT CREATION AND TRACKING\r\n /**\r\n * Creates a new Event of type `inType`, based on the information in\r\n * `inEvent`.\r\n *\r\n * @param {string} inType A string representing the type of event to create\r\n * @param {Event} inEvent A platform event with a target\r\n * @return {Event} A PointerEvent of type `inType`\r\n */\r\n makeEvent: function(inType, inEvent) {\r\n\r\n // relatedTarget must be null if pointer is captured\r\n if (this.captureInfo[inEvent.pointerId]) {\r\n inEvent.relatedTarget = null;\r\n }\r\n var e = new _PointerEvent(inType, inEvent);\r\n if (inEvent.preventDefault) {\r\n e.preventDefault = inEvent.preventDefault;\r\n }\r\n e._target = e._target || inEvent.target;\r\n return e;\r\n },\r\n\r\n // make and dispatch an event in one call\r\n fireEvent: function(inType, inEvent) {\r\n var e = this.makeEvent(inType, inEvent);\r\n return this.dispatchEvent(e);\r\n },\r\n /**\r\n * Returns a snapshot of inEvent, with writable properties.\r\n *\r\n * @param {Event} inEvent An event that contains properties to copy.\r\n * @return {Object} An object containing shallow copies of `inEvent`'s\r\n * properties.\r\n */\r\n cloneEvent: function(inEvent) {\r\n var eventCopy = Object.create(null);\r\n var p;\r\n for (var i = 0; i < CLONE_PROPS.length; i++) {\r\n p = CLONE_PROPS[i];\r\n eventCopy[p] = inEvent[p] || CLONE_DEFAULTS[i];\r\n\r\n // Work around SVGInstanceElement shadow tree\r\n // Return the element that is represented by the instance for Safari, Chrome, IE.\r\n // This is the behavior implemented by Firefox.\r\n if (HAS_SVG_INSTANCE && (p === 'target' || p === 'relatedTarget')) {\r\n if (eventCopy[p] instanceof SVGElementInstance) {\r\n eventCopy[p] = eventCopy[p].correspondingUseElement;\r\n }\r\n }\r\n }\r\n\r\n // keep the semantics of preventDefault\r\n if (inEvent.preventDefault) {\r\n eventCopy.preventDefault = function() {\r\n inEvent.preventDefault();\r\n };\r\n }\r\n return eventCopy;\r\n },\r\n getTarget: function(inEvent) {\r\n var capture = this.captureInfo[inEvent.pointerId];\r\n if (!capture) {\r\n return inEvent._target;\r\n }\r\n if (inEvent._target === capture || !(inEvent.type in BOUNDARY_EVENTS)) {\r\n return capture;\r\n }\r\n },\r\n setCapture: function(inPointerId, inTarget) {\r\n if (this.captureInfo[inPointerId]) {\r\n this.releaseCapture(inPointerId);\r\n }\r\n this.captureInfo[inPointerId] = inTarget;\r\n var e = document.createEvent('Event');\r\n e.initEvent('gotpointercapture', true, false);\r\n e.pointerId = inPointerId;\r\n this.implicitRelease = this.releaseCapture.bind(this, inPointerId);\r\n document.addEventListener('pointerup', this.implicitRelease);\r\n document.addEventListener('pointercancel', this.implicitRelease);\r\n e._target = inTarget;\r\n this.asyncDispatchEvent(e);\r\n },\r\n releaseCapture: function(inPointerId) {\r\n var t = this.captureInfo[inPointerId];\r\n if (t) {\r\n var e = document.createEvent('Event');\r\n e.initEvent('lostpointercapture', true, false);\r\n e.pointerId = inPointerId;\r\n this.captureInfo[inPointerId] = undefined;\r\n document.removeEventListener('pointerup', this.implicitRelease);\r\n document.removeEventListener('pointercancel', this.implicitRelease);\r\n e._target = t;\r\n this.asyncDispatchEvent(e);\r\n }\r\n },\r\n /**\r\n * Dispatches the event to its target.\r\n *\r\n * @param {Event} inEvent The event to be dispatched.\r\n * @return {Boolean} True if an event handler returns true, false otherwise.\r\n */\r\n dispatchEvent: /*scope.external.dispatchEvent || */function(inEvent) {\r\n var t = this.getTarget(inEvent);\r\n if (t) {\r\n return t.dispatchEvent(inEvent);\r\n }\r\n },\r\n asyncDispatchEvent: function(inEvent) {\r\n requestAnimationFrame(this.dispatchEvent.bind(this, inEvent));\r\n }\r\n };\r\n dispatcher.boundHandler = dispatcher.eventHandler.bind(dispatcher);\r\n\r\n var _dispatcher = dispatcher;\r\n\r\n var targeting = {\r\n shadow: function(inEl) {\r\n if (inEl) {\r\n return inEl.shadowRoot || inEl.webkitShadowRoot;\r\n }\r\n },\r\n canTarget: function(shadow) {\r\n return shadow && Boolean(shadow.elementFromPoint);\r\n },\r\n targetingShadow: function(inEl) {\r\n var s = this.shadow(inEl);\r\n if (this.canTarget(s)) {\r\n return s;\r\n }\r\n },\r\n olderShadow: function(shadow) {\r\n var os = shadow.olderShadowRoot;\r\n if (!os) {\r\n var se = shadow.querySelector('shadow');\r\n if (se) {\r\n os = se.olderShadowRoot;\r\n }\r\n }\r\n return os;\r\n },\r\n allShadows: function(element) {\r\n var shadows = [];\r\n var s = this.shadow(element);\r\n while (s) {\r\n shadows.push(s);\r\n s = this.olderShadow(s);\r\n }\r\n return shadows;\r\n },\r\n searchRoot: function(inRoot, x, y) {\r\n if (inRoot) {\r\n var t = inRoot.elementFromPoint(x, y);\r\n var st, sr;\r\n\r\n // is element a shadow host?\r\n sr = this.targetingShadow(t);\r\n while (sr) {\r\n\r\n // find the the element inside the shadow root\r\n st = sr.elementFromPoint(x, y);\r\n if (!st) {\r\n\r\n // check for older shadows\r\n sr = this.olderShadow(sr);\r\n } else {\r\n\r\n // shadowed element may contain a shadow root\r\n var ssr = this.targetingShadow(st);\r\n return this.searchRoot(ssr, x, y) || st;\r\n }\r\n }\r\n\r\n // light dom element is the target\r\n return t;\r\n }\r\n },\r\n owner: function(element) {\r\n var s = element;\r\n\r\n // walk up until you hit the shadow root or document\r\n while (s.parentNode) {\r\n s = s.parentNode;\r\n }\r\n\r\n // the owner element is expected to be a Document or ShadowRoot\r\n if (s.nodeType !== Node.DOCUMENT_NODE && s.nodeType !== Node.DOCUMENT_FRAGMENT_NODE) {\r\n s = document;\r\n }\r\n return s;\r\n },\r\n findTarget: function(inEvent) {\r\n var x = inEvent.clientX;\r\n var y = inEvent.clientY;\r\n\r\n // if the listener is in the shadow root, it is much faster to start there\r\n var s = this.owner(inEvent.target);\r\n\r\n // if x, y is not in this root, fall back to document search\r\n if (!s.elementFromPoint(x, y)) {\r\n s = document;\r\n }\r\n return this.searchRoot(s, x, y);\r\n }\r\n };\r\n\r\n /**\r\n * This module uses Mutation Observers to dynamically adjust which nodes will\r\n * generate Pointer Events.\r\n *\r\n * All nodes that wish to generate Pointer Events must have the attribute\r\n * `touch-action` set to `none`.\r\n */\r\n var forEach = Array.prototype.forEach.call.bind(Array.prototype.forEach);\r\n var map = Array.prototype.map.call.bind(Array.prototype.map);\r\n var toArray = Array.prototype.slice.call.bind(Array.prototype.slice);\r\n var filter = Array.prototype.filter.call.bind(Array.prototype.filter);\r\n var MO = window.MutationObserver || window.WebKitMutationObserver;\r\n var SELECTOR = '[touch-action]';\r\n var OBSERVER_INIT = {\r\n subtree: true,\r\n childList: true,\r\n attributes: true,\r\n attributeOldValue: true,\r\n attributeFilter: ['touch-action']\r\n };\r\n\r\n function Installer(add, remove, changed, binder) {\r\n this.addCallback = add.bind(binder);\r\n this.removeCallback = remove.bind(binder);\r\n this.changedCallback = changed.bind(binder);\r\n if (MO) {\r\n this.observer = new MO(this.mutationWatcher.bind(this));\r\n }\r\n }\r\n\r\n Installer.prototype = {\r\n watchSubtree: function(target) {\r\n\r\n // Only watch scopes that can target find, as these are top-level.\r\n // Otherwise we can see duplicate additions and removals that add noise.\r\n //\r\n // TODO(dfreedman): For some instances with ShadowDOMPolyfill, we can see\r\n // a removal without an insertion when a node is redistributed among\r\n // shadows. Since it all ends up correct in the document, watching only\r\n // the document will yield the correct mutations to watch.\r\n if (this.observer && targeting.canTarget(target)) {\r\n this.observer.observe(target, OBSERVER_INIT);\r\n }\r\n },\r\n enableOnSubtree: function(target) {\r\n this.watchSubtree(target);\r\n if (target === document && document.readyState !== 'complete') {\r\n this.installOnLoad();\r\n } else {\r\n this.installNewSubtree(target);\r\n }\r\n },\r\n installNewSubtree: function(target) {\r\n forEach(this.findElements(target), this.addElement, this);\r\n },\r\n findElements: function(target) {\r\n if (target.querySelectorAll) {\r\n return target.querySelectorAll(SELECTOR);\r\n }\r\n return [];\r\n },\r\n removeElement: function(el) {\r\n this.removeCallback(el);\r\n },\r\n addElement: function(el) {\r\n this.addCallback(el);\r\n },\r\n elementChanged: function(el, oldValue) {\r\n this.changedCallback(el, oldValue);\r\n },\r\n concatLists: function(accum, list) {\r\n return accum.concat(toArray(list));\r\n },\r\n\r\n // register all touch-action = none nodes on document load\r\n installOnLoad: function() {\r\n document.addEventListener('readystatechange', function() {\r\n if (document.readyState === 'complete') {\r\n this.installNewSubtree(document);\r\n }\r\n }.bind(this));\r\n },\r\n isElement: function(n) {\r\n return n.nodeType === Node.ELEMENT_NODE;\r\n },\r\n flattenMutationTree: function(inNodes) {\r\n\r\n // find children with touch-action\r\n var tree = map(inNodes, this.findElements, this);\r\n\r\n // make sure the added nodes are accounted for\r\n tree.push(filter(inNodes, this.isElement));\r\n\r\n // flatten the list\r\n return tree.reduce(this.concatLists, []);\r\n },\r\n mutationWatcher: function(mutations) {\r\n mutations.forEach(this.mutationHandler, this);\r\n },\r\n mutationHandler: function(m) {\r\n if (m.type === 'childList') {\r\n var added = this.flattenMutationTree(m.addedNodes);\r\n added.forEach(this.addElement, this);\r\n var removed = this.flattenMutationTree(m.removedNodes);\r\n removed.forEach(this.removeElement, this);\r\n } else if (m.type === 'attributes') {\r\n this.elementChanged(m.target, m.oldValue);\r\n }\r\n }\r\n };\r\n\r\n var installer = Installer;\r\n\r\n function shadowSelector(v) {\r\n return 'body /shadow-deep/ ' + selector(v);\r\n }\r\n function selector(v) {\r\n return '[touch-action=\"' + v + '\"]';\r\n }\r\n function rule(v) {\r\n return '{ -ms-touch-action: ' + v + '; touch-action: ' + v + '; touch-action-delay: none; }';\r\n }\r\n var attrib2css = [\r\n 'none',\r\n 'auto',\r\n 'pan-x',\r\n 'pan-y',\r\n {\r\n rule: 'pan-x pan-y',\r\n selectors: [\r\n 'pan-x pan-y',\r\n 'pan-y pan-x'\r\n ]\r\n }\r\n ];\r\n var styles = '';\r\n\r\n // only install stylesheet if the browser has touch action support\r\n var hasNativePE = window.PointerEvent || window.MSPointerEvent;\r\n\r\n // only add shadow selectors if shadowdom is supported\r\n var hasShadowRoot = !window.ShadowDOMPolyfill && document.head.createShadowRoot;\r\n\r\n function applyAttributeStyles() {\r\n if (hasNativePE) {\r\n attrib2css.forEach(function(r) {\r\n if (String(r) === r) {\r\n styles += selector(r) + rule(r) + '\\n';\r\n if (hasShadowRoot) {\r\n styles += shadowSelector(r) + rule(r) + '\\n';\r\n }\r\n } else {\r\n styles += r.selectors.map(selector) + rule(r.rule) + '\\n';\r\n if (hasShadowRoot) {\r\n styles += r.selectors.map(shadowSelector) + rule(r.rule) + '\\n';\r\n }\r\n }\r\n });\r\n\r\n var el = document.createElement('style');\r\n el.textContent = styles;\r\n document.head.appendChild(el);\r\n }\r\n }\r\n\r\n var mouse__pointermap = _dispatcher.pointermap;\r\n\r\n // radius around touchend that swallows mouse events\r\n var DEDUP_DIST = 25;\r\n\r\n // left, middle, right, back, forward\r\n var BUTTON_TO_BUTTONS = [1, 4, 2, 8, 16];\r\n\r\n var HAS_BUTTONS = false;\r\n try {\r\n HAS_BUTTONS = new MouseEvent('test', { buttons: 1 }).buttons === 1;\r\n } catch (e) {}\r\n\r\n // handler block for native mouse events\r\n var mouseEvents = {\r\n POINTER_ID: 1,\r\n POINTER_TYPE: 'mouse',\r\n events: [\r\n 'mousedown',\r\n 'mousemove',\r\n 'mouseup',\r\n 'mouseover',\r\n 'mouseout'\r\n ],\r\n register: function(target) {\r\n _dispatcher.listen(target, this.events);\r\n },\r\n unregister: function(target) {\r\n _dispatcher.unlisten(target, this.events);\r\n },\r\n lastTouches: [],\r\n\r\n // collide with the global mouse listener\r\n isEventSimulatedFromTouch: function(inEvent) {\r\n var lts = this.lastTouches;\r\n var x = inEvent.clientX;\r\n var y = inEvent.clientY;\r\n for (var i = 0, l = lts.length, t; i < l && (t = lts[i]); i++) {\r\n\r\n // simulated mouse events will be swallowed near a primary touchend\r\n var dx = Math.abs(x - t.x);\r\n var dy = Math.abs(y - t.y);\r\n if (dx <= DEDUP_DIST && dy <= DEDUP_DIST) {\r\n return true;\r\n }\r\n }\r\n },\r\n prepareEvent: function(inEvent) {\r\n var e = _dispatcher.cloneEvent(inEvent);\r\n\r\n // forward mouse preventDefault\r\n var pd = e.preventDefault;\r\n e.preventDefault = function() {\r\n inEvent.preventDefault();\r\n pd();\r\n };\r\n e.pointerId = this.POINTER_ID;\r\n e.isPrimary = true;\r\n e.pointerType = this.POINTER_TYPE;\r\n return e;\r\n },\r\n prepareButtonsForMove: function(e, inEvent) {\r\n var p = mouse__pointermap.get(this.POINTER_ID);\r\n e.buttons = p ? p.buttons : 0;\r\n inEvent.buttons = e.buttons;\r\n },\r\n mousedown: function(inEvent) {\r\n if (!this.isEventSimulatedFromTouch(inEvent)) {\r\n var p = mouse__pointermap.get(this.POINTER_ID);\r\n var e = this.prepareEvent(inEvent);\r\n if (!HAS_BUTTONS) {\r\n e.buttons = BUTTON_TO_BUTTONS[e.button];\r\n if (p) { e.buttons |= p.buttons; }\r\n inEvent.buttons = e.buttons;\r\n }\r\n mouse__pointermap.set(this.POINTER_ID, inEvent);\r\n if (!p) {\r\n _dispatcher.down(e);\r\n } else {\r\n _dispatcher.move(e);\r\n }\r\n }\r\n },\r\n mousemove: function(inEvent) {\r\n if (!this.isEventSimulatedFromTouch(inEvent)) {\r\n var e = this.prepareEvent(inEvent);\r\n if (!HAS_BUTTONS) { this.prepareButtonsForMove(e, inEvent); }\r\n _dispatcher.move(e);\r\n }\r\n },\r\n mouseup: function(inEvent) {\r\n if (!this.isEventSimulatedFromTouch(inEvent)) {\r\n var p = mouse__pointermap.get(this.POINTER_ID);\r\n var e = this.prepareEvent(inEvent);\r\n if (!HAS_BUTTONS) {\r\n var up = BUTTON_TO_BUTTONS[e.button];\r\n\r\n // Produces wrong state of buttons in Browsers without `buttons` support\r\n // when a mouse button that was pressed outside the document is released\r\n // inside and other buttons are still pressed down.\r\n e.buttons = p ? p.buttons & ~up : 0;\r\n inEvent.buttons = e.buttons;\r\n }\r\n mouse__pointermap.set(this.POINTER_ID, inEvent);\r\n\r\n // Support: Firefox <=44 only\r\n // FF Ubuntu includes the lifted button in the `buttons` property on\r\n // mouseup.\r\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1223366\r\n if (e.buttons === 0 || e.buttons === BUTTON_TO_BUTTONS[e.button]) {\r\n this.cleanupMouse();\r\n _dispatcher.up(e);\r\n } else {\r\n _dispatcher.move(e);\r\n }\r\n }\r\n },\r\n mouseover: function(inEvent) {\r\n if (!this.isEventSimulatedFromTouch(inEvent)) {\r\n var e = this.prepareEvent(inEvent);\r\n if (!HAS_BUTTONS) { this.prepareButtonsForMove(e, inEvent); }\r\n _dispatcher.enterOver(e);\r\n }\r\n },\r\n mouseout: function(inEvent) {\r\n if (!this.isEventSimulatedFromTouch(inEvent)) {\r\n var e = this.prepareEvent(inEvent);\r\n if (!HAS_BUTTONS) { this.prepareButtonsForMove(e, inEvent); }\r\n _dispatcher.leaveOut(e);\r\n }\r\n },\r\n cancel: function(inEvent) {\r\n var e = this.prepareEvent(inEvent);\r\n _dispatcher.cancel(e);\r\n this.cleanupMouse();\r\n },\r\n cleanupMouse: function() {\r\n mouse__pointermap.delete(this.POINTER_ID);\r\n }\r\n };\r\n\r\n var mouse = mouseEvents;\r\n\r\n var captureInfo = _dispatcher.captureInfo;\r\n var findTarget = targeting.findTarget.bind(targeting);\r\n var allShadows = targeting.allShadows.bind(targeting);\r\n var touch__pointermap = _dispatcher.pointermap;\r\n\r\n // This should be long enough to ignore compat mouse events made by touch\r\n var DEDUP_TIMEOUT = 2500;\r\n var CLICK_COUNT_TIMEOUT = 200;\r\n var ATTRIB = 'touch-action';\r\n var INSTALLER;\r\n\r\n // The presence of touch event handlers blocks scrolling, and so we must be careful to\r\n // avoid adding handlers unnecessarily. Chrome plans to add a touch-action-delay property\r\n // (crbug.com/329559) to address this, and once we have that we can opt-in to a simpler\r\n // handler registration mechanism. Rather than try to predict how exactly to opt-in to\r\n // that we'll just leave this disabled until there is a build of Chrome to test.\r\n var HAS_TOUCH_ACTION_DELAY = false;\r\n\r\n // handler block for native touch events\r\n var touchEvents = {\r\n events: [\r\n 'touchstart',\r\n 'touchmove',\r\n 'touchend',\r\n 'touchcancel'\r\n ],\r\n register: function(target) {\r\n if (HAS_TOUCH_ACTION_DELAY) {\r\n _dispatcher.listen(target, this.events);\r\n } else {\r\n INSTALLER.enableOnSubtree(target);\r\n }\r\n },\r\n unregister: function(target) {\r\n if (HAS_TOUCH_ACTION_DELAY) {\r\n _dispatcher.unlisten(target, this.events);\r\n } else {\r\n\r\n // TODO(dfreedman): is it worth it to disconnect the MO?\r\n }\r\n },\r\n elementAdded: function(el) {\r\n var a = el.getAttribute(ATTRIB);\r\n var st = this.touchActionToScrollType(a);\r\n if (st) {\r\n el._scrollType = st;\r\n _dispatcher.listen(el, this.events);\r\n\r\n // set touch-action on shadows as well\r\n allShadows(el).forEach(function(s) {\r\n s._scrollType = st;\r\n _dispatcher.listen(s, this.events);\r\n }, this);\r\n }\r\n },\r\n elementRemoved: function(el) {\r\n el._scrollType = undefined;\r\n _dispatcher.unlisten(el, this.events);\r\n\r\n // remove touch-action from shadow\r\n allShadows(el).forEach(function(s) {\r\n s._scrollType = undefined;\r\n _dispatcher.unlisten(s, this.events);\r\n }, this);\r\n },\r\n elementChanged: function(el, oldValue) {\r\n var a = el.getAttribute(ATTRIB);\r\n var st = this.touchActionToScrollType(a);\r\n var oldSt = this.touchActionToScrollType(oldValue);\r\n\r\n // simply update scrollType if listeners are already established\r\n if (st && oldSt) {\r\n el._scrollType = st;\r\n allShadows(el).forEach(function(s) {\r\n s._scrollType = st;\r\n }, this);\r\n } else if (oldSt) {\r\n this.elementRemoved(el);\r\n } else if (st) {\r\n this.elementAdded(el);\r\n }\r\n },\r\n scrollTypes: {\r\n EMITTER: 'none',\r\n XSCROLLER: 'pan-x',\r\n YSCROLLER: 'pan-y',\r\n SCROLLER: /^(?:pan-x pan-y)|(?:pan-y pan-x)|auto$/\r\n },\r\n touchActionToScrollType: function(touchAction) {\r\n var t = touchAction;\r\n var st = this.scrollTypes;\r\n if (t === 'none') {\r\n return 'none';\r\n } else if (t === st.XSCROLLER) {\r\n return 'X';\r\n } else if (t === st.YSCROLLER) {\r\n return 'Y';\r\n } else if (st.SCROLLER.exec(t)) {\r\n return 'XY';\r\n }\r\n },\r\n POINTER_TYPE: 'touch',\r\n firstTouch: null,\r\n isPrimaryTouch: function(inTouch) {\r\n return this.firstTouch === inTouch.identifier;\r\n },\r\n setPrimaryTouch: function(inTouch) {\r\n\r\n // set primary touch if there no pointers, or the only pointer is the mouse\r\n if (touch__pointermap.size === 0 || (touch__pointermap.size === 1 && touch__pointermap.has(1))) {\r\n this.firstTouch = inTouch.identifier;\r\n this.firstXY = { X: inTouch.clientX, Y: inTouch.clientY };\r\n this.scrolling = false;\r\n this.cancelResetClickCount();\r\n }\r\n },\r\n removePrimaryPointer: function(inPointer) {\r\n if (inPointer.isPrimary) {\r\n this.firstTouch = null;\r\n this.firstXY = null;\r\n this.resetClickCount();\r\n }\r\n },\r\n clickCount: 0,\r\n resetId: null,\r\n resetClickCount: function() {\r\n var fn = function() {\r\n this.clickCount = 0;\r\n this.resetId = null;\r\n }.bind(this);\r\n this.resetId = setTimeout(fn, CLICK_COUNT_TIMEOUT);\r\n },\r\n cancelResetClickCount: function() {\r\n if (this.resetId) {\r\n clearTimeout(this.resetId);\r\n }\r\n },\r\n typeToButtons: function(type) {\r\n var ret = 0;\r\n if (type === 'touchstart' || type === 'touchmove') {\r\n ret = 1;\r\n }\r\n return ret;\r\n },\r\n touchToPointer: function(inTouch) {\r\n var cte = this.currentTouchEvent;\r\n var e = _dispatcher.cloneEvent(inTouch);\r\n\r\n // We reserve pointerId 1 for Mouse.\r\n // Touch identifiers can start at 0.\r\n // Add 2 to the touch identifier for compatibility.\r\n var id = e.pointerId = inTouch.identifier + 2;\r\n e.target = captureInfo[id] || findTarget(e);\r\n e.bubbles = true;\r\n e.cancelable = true;\r\n e.detail = this.clickCount;\r\n e.button = 0;\r\n e.buttons = this.typeToButtons(cte.type);\r\n e.width = inTouch.radiusX || inTouch.webkitRadiusX || 0;\r\n e.height = inTouch.radiusY || inTouch.webkitRadiusY || 0;\r\n e.pressure = inTouch.force || inTouch.webkitForce || 0.5;\r\n e.isPrimary = this.isPrimaryTouch(inTouch);\r\n e.pointerType = this.POINTER_TYPE;\r\n\r\n // forward touch preventDefaults\r\n var self = this;\r\n e.preventDefault = function() {\r\n self.scrolling = false;\r\n self.firstXY = null;\r\n cte.preventDefault();\r\n };\r\n return e;\r\n },\r\n processTouches: function(inEvent, inFunction) {\r\n var tl = inEvent.changedTouches;\r\n this.currentTouchEvent = inEvent;\r\n for (var i = 0, t; i < tl.length; i++) {\r\n t = tl[i];\r\n inFunction.call(this, this.touchToPointer(t));\r\n }\r\n },\r\n\r\n // For single axis scrollers, determines whether the element should emit\r\n // pointer events or behave as a scroller\r\n shouldScroll: function(inEvent) {\r\n if (this.firstXY) {\r\n var ret;\r\n var scrollAxis = inEvent.currentTarget._scrollType;\r\n if (scrollAxis === 'none') {\r\n\r\n // this element is a touch-action: none, should never scroll\r\n ret = false;\r\n } else if (scrollAxis === 'XY') {\r\n\r\n // this element should always scroll\r\n ret = true;\r\n } else {\r\n var t = inEvent.changedTouches[0];\r\n\r\n // check the intended scroll axis, and other axis\r\n var a = scrollAxis;\r\n var oa = scrollAxis === 'Y' ? 'X' : 'Y';\r\n var da = Math.abs(t['client' + a] - this.firstXY[a]);\r\n var doa = Math.abs(t['client' + oa] - this.firstXY[oa]);\r\n\r\n // if delta in the scroll axis > delta other axis, scroll instead of\r\n // making events\r\n ret = da >= doa;\r\n }\r\n this.firstXY = null;\r\n return ret;\r\n }\r\n },\r\n findTouch: function(inTL, inId) {\r\n for (var i = 0, l = inTL.length, t; i < l && (t = inTL[i]); i++) {\r\n if (t.identifier === inId) {\r\n return true;\r\n }\r\n }\r\n },\r\n\r\n // In some instances, a touchstart can happen without a touchend. This\r\n // leaves the pointermap in a broken state.\r\n // Therefore, on every touchstart, we remove the touches that did not fire a\r\n // touchend event.\r\n // To keep state globally consistent, we fire a\r\n // pointercancel for this \"abandoned\" touch\r\n vacuumTouches: function(inEvent) {\r\n var tl = inEvent.touches;\r\n\r\n // pointermap.size should be < tl.length here, as the touchstart has not\r\n // been processed yet.\r\n if (touch__pointermap.size >= tl.length) {\r\n var d = [];\r\n touch__pointermap.forEach(function(value, key) {\r\n\r\n // Never remove pointerId == 1, which is mouse.\r\n // Touch identifiers are 2 smaller than their pointerId, which is the\r\n // index in pointermap.\r\n if (key !== 1 && !this.findTouch(tl, key - 2)) {\r\n var p = value.out;\r\n d.push(p);\r\n }\r\n }, this);\r\n d.forEach(this.cancelOut, this);\r\n }\r\n },\r\n touchstart: function(inEvent) {\r\n this.vacuumTouches(inEvent);\r\n this.setPrimaryTouch(inEvent.changedTouches[0]);\r\n this.dedupSynthMouse(inEvent);\r\n if (!this.scrolling) {\r\n this.clickCount++;\r\n this.processTouches(inEvent, this.overDown);\r\n }\r\n },\r\n overDown: function(inPointer) {\r\n touch__pointermap.set(inPointer.pointerId, {\r\n target: inPointer.target,\r\n out: inPointer,\r\n outTarget: inPointer.target\r\n });\r\n _dispatcher.over(inPointer);\r\n _dispatcher.enter(inPointer);\r\n _dispatcher.down(inPointer);\r\n },\r\n touchmove: function(inEvent) {\r\n if (!this.scrolling) {\r\n if (this.shouldScroll(inEvent)) {\r\n this.scrolling = true;\r\n this.touchcancel(inEvent);\r\n } else {\r\n inEvent.preventDefault();\r\n this.processTouches(inEvent, this.moveOverOut);\r\n }\r\n }\r\n },\r\n moveOverOut: function(inPointer) {\r\n var event = inPointer;\r\n var pointer = touch__pointermap.get(event.pointerId);\r\n\r\n // a finger drifted off the screen, ignore it\r\n if (!pointer) {\r\n return;\r\n }\r\n var outEvent = pointer.out;\r\n var outTarget = pointer.outTarget;\r\n _dispatcher.move(event);\r\n if (outEvent && outTarget !== event.target) {\r\n outEvent.relatedTarget = event.target;\r\n event.relatedTarget = outTarget;\r\n\r\n // recover from retargeting by shadow\r\n outEvent.target = outTarget;\r\n if (event.target) {\r\n _dispatcher.leaveOut(outEvent);\r\n _dispatcher.enterOver(event);\r\n } else {\r\n\r\n // clean up case when finger leaves the screen\r\n event.target = outTarget;\r\n event.relatedTarget = null;\r\n this.cancelOut(event);\r\n }\r\n }\r\n pointer.out = event;\r\n pointer.outTarget = event.target;\r\n },\r\n touchend: function(inEvent) {\r\n this.dedupSynthMouse(inEvent);\r\n this.processTouches(inEvent, this.upOut);\r\n },\r\n upOut: function(inPointer) {\r\n if (!this.scrolling) {\r\n _dispatcher.up(inPointer);\r\n _dispatcher.out(inPointer);\r\n _dispatcher.leave(inPointer);\r\n }\r\n this.cleanUpPointer(inPointer);\r\n },\r\n touchcancel: function(inEvent) {\r\n this.processTouches(inEvent, this.cancelOut);\r\n },\r\n cancelOut: function(inPointer) {\r\n _dispatcher.cancel(inPointer);\r\n _dispatcher.out(inPointer);\r\n _dispatcher.leave(inPointer);\r\n this.cleanUpPointer(inPointer);\r\n },\r\n cleanUpPointer: function(inPointer) {\r\n touch__pointermap.delete(inPointer.pointerId);\r\n this.removePrimaryPointer(inPointer);\r\n },\r\n\r\n // prevent synth mouse events from creating pointer events\r\n dedupSynthMouse: function(inEvent) {\r\n var lts = mouse.lastTouches;\r\n var t = inEvent.changedTouches[0];\r\n\r\n // only the primary finger will synth mouse events\r\n if (this.isPrimaryTouch(t)) {\r\n\r\n // remember x/y of last touch\r\n var lt = { x: t.clientX, y: t.clientY };\r\n lts.push(lt);\r\n var fn = (function(lts, lt) {\r\n var i = lts.indexOf(lt);\r\n if (i > -1) {\r\n lts.splice(i, 1);\r\n }\r\n }).bind(null, lts, lt);\r\n setTimeout(fn, DEDUP_TIMEOUT);\r\n }\r\n }\r\n };\r\n\r\n if (!HAS_TOUCH_ACTION_DELAY) {\r\n INSTALLER = new installer(touchEvents.elementAdded, touchEvents.elementRemoved,\r\n touchEvents.elementChanged, touchEvents);\r\n }\r\n\r\n var touch = touchEvents;\r\n\r\n var ms__pointermap = _dispatcher.pointermap;\r\n var HAS_BITMAP_TYPE = window.MSPointerEvent &&\r\n typeof window.MSPointerEvent.MSPOINTER_TYPE_MOUSE === 'number';\r\n var msEvents = {\r\n events: [\r\n 'MSPointerDown',\r\n 'MSPointerMove',\r\n 'MSPointerUp',\r\n 'MSPointerOut',\r\n 'MSPointerOver',\r\n 'MSPointerCancel',\r\n 'MSGotPointerCapture',\r\n 'MSLostPointerCapture'\r\n ],\r\n register: function(target) {\r\n _dispatcher.listen(target, this.events);\r\n },\r\n unregister: function(target) {\r\n _dispatcher.unlisten(target, this.events);\r\n },\r\n POINTER_TYPES: [\r\n '',\r\n 'unavailable',\r\n 'touch',\r\n 'pen',\r\n 'mouse'\r\n ],\r\n prepareEvent: function(inEvent) {\r\n var e = inEvent;\r\n if (HAS_BITMAP_TYPE) {\r\n e = _dispatcher.cloneEvent(inEvent);\r\n e.pointerType = this.POINTER_TYPES[inEvent.pointerType];\r\n }\r\n return e;\r\n },\r\n cleanup: function(id) {\r\n ms__pointermap.delete(id);\r\n },\r\n MSPointerDown: function(inEvent) {\r\n ms__pointermap.set(inEvent.pointerId, inEvent);\r\n var e = this.prepareEvent(inEvent);\r\n _dispatcher.down(e);\r\n },\r\n MSPointerMove: function(inEvent) {\r\n var e = this.prepareEvent(inEvent);\r\n _dispatcher.move(e);\r\n },\r\n MSPointerUp: function(inEvent) {\r\n var e = this.prepareEvent(inEvent);\r\n _dispatcher.up(e);\r\n this.cleanup(inEvent.pointerId);\r\n },\r\n MSPointerOut: function(inEvent) {\r\n var e = this.prepareEvent(inEvent);\r\n _dispatcher.leaveOut(e);\r\n },\r\n MSPointerOver: function(inEvent) {\r\n var e = this.prepareEvent(inEvent);\r\n _dispatcher.enterOver(e);\r\n },\r\n MSPointerCancel: function(inEvent) {\r\n var e = this.prepareEvent(inEvent);\r\n _dispatcher.cancel(e);\r\n this.cleanup(inEvent.pointerId);\r\n },\r\n MSLostPointerCapture: function(inEvent) {\r\n var e = _dispatcher.makeEvent('lostpointercapture', inEvent);\r\n _dispatcher.dispatchEvent(e);\r\n },\r\n MSGotPointerCapture: function(inEvent) {\r\n var e = _dispatcher.makeEvent('gotpointercapture', inEvent);\r\n _dispatcher.dispatchEvent(e);\r\n }\r\n };\r\n\r\n var ms = msEvents;\r\n\r\n function platform_events__applyPolyfill() {\r\n\r\n // only activate if this platform does not have pointer events\r\n if (!window.PointerEvent) {\r\n window.PointerEvent = _PointerEvent;\r\n\r\n if (window.navigator.msPointerEnabled) {\r\n var tp = window.navigator.msMaxTouchPoints;\r\n Object.defineProperty(window.navigator, 'maxTouchPoints', {\r\n value: tp,\r\n enumerable: true\r\n });\r\n _dispatcher.registerSource('ms', ms);\r\n } else {\r\n _dispatcher.registerSource('mouse', mouse);\r\n if (window.ontouchstart !== undefined) {\r\n _dispatcher.registerSource('touch', touch);\r\n }\r\n }\r\n\r\n _dispatcher.register(document);\r\n }\r\n }\r\n\r\n var n = window.navigator;\r\n var s, r;\r\n function assertDown(id) {\r\n if (!_dispatcher.pointermap.has(id)) {\r\n throw new Error('InvalidPointerId');\r\n }\r\n }\r\n if (n.msPointerEnabled) {\r\n s = function(pointerId) {\r\n assertDown(pointerId);\r\n this.msSetPointerCapture(pointerId);\r\n };\r\n r = function(pointerId) {\r\n assertDown(pointerId);\r\n this.msReleasePointerCapture(pointerId);\r\n };\r\n } else {\r\n s = function setPointerCapture(pointerId) {\r\n assertDown(pointerId);\r\n _dispatcher.setCapture(pointerId, this);\r\n };\r\n r = function releasePointerCapture(pointerId) {\r\n assertDown(pointerId);\r\n _dispatcher.releaseCapture(pointerId, this);\r\n };\r\n }\r\n\r\n function _capture__applyPolyfill() {\r\n if (window.Element && !Element.prototype.setPointerCapture) {\r\n Object.defineProperties(Element.prototype, {\r\n 'setPointerCapture': {\r\n value: s\r\n },\r\n 'releasePointerCapture': {\r\n value: r\r\n }\r\n });\r\n }\r\n }\r\n\r\n applyAttributeStyles();\r\n platform_events__applyPolyfill();\r\n _capture__applyPolyfill();\r\n\r\n var pointerevents = {\r\n dispatcher: _dispatcher,\r\n Installer: installer,\r\n PointerEvent: _PointerEvent,\r\n PointerMap: _pointermap,\r\n targetFinding: targeting\r\n };\r\n\r\n return pointerevents;\r\n\r\n}));"]}