UNPKG

awv3

Version:
1 lines 4.23 kB
"use strict";function _interopRequireWildcard(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var s in e)Object.prototype.hasOwnProperty.call(e,s)&&(t[s]=e[s]);return t.default=e,t}function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function createStates(e,t,s){var n=arguments.length<=3||void 0===arguments[3]?void 0:arguments[3];return t.reduce(function(t,r){var i;return e.addEventListener(r,s,n),(0,_extends4.default)({},t,(i={},i[r]={type:r,fulfilled:!1,detach:function(){return e.removeEventListener(r,s)}},i))},{})}exports.__esModule=!0;var _getIterator2=require("babel-runtime/core-js/get-iterator"),_getIterator3=_interopRequireDefault(_getIterator2),_classCallCheck2=require("babel-runtime/helpers/classCallCheck"),_classCallCheck3=_interopRequireDefault(_classCallCheck2),_extends3=require("babel-runtime/helpers/extends"),_extends4=_interopRequireDefault(_extends3),_error=require("../core/error"),Error=_interopRequireWildcard(_error),_events=require("../core/events"),_events2=_interopRequireDefault(_events);require("event-listener-with-options/js/polyfill");var Dom=function(){function e(){var t=arguments.length<=0||void 0===arguments[0]?Error.log("View undefined"):arguments[0],s=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];(0,_classCallCheck3.default)(this,e),this.view=t,this.canvas=t.canvas,this.renderer=t.renderer,this.dom=t.dom,this.recent=[],this.enabled=!0,this.debounce=!0,_events2.default.mixin(this,s),this.eventHandler=this.handleEvent.bind(this),this.eventHandlerDefault=this.handleEventDefault.bind(this);var n=createStates(this.dom,["mousedown","mouseup","mousemove","mouseout","wheel"],this.eventHandler,{passive:!0}),r=createStates(this.dom,["touchstart","touchmove","touchend"],this.eventHandlerDefault,{passive:!1});this.states=(0,_extends4.default)({},n,r),this.mouse={},this.wheel={},this.touch={},this.changes=[]}return e.prototype.detach=function(){for(var e in this.states)this.states[e].detach()},e.prototype.update=function(){if(this.changes.length>0){for(var e=this.changes,t=Array.isArray(e),s=0,e=t?e:(0,_getIterator3.default)(e);;){var n;if(t){if(s>=e.length)break;n=e[s++]}else{if(s=e.next(),s.done)break;n=s.value}var r=n;this.emit(r.type,r),r.fulfilled=!1}this.changes=[]}},e.prototype.handleEventDefault=function(e){e.preventDefault(),this.handleEvent(e)},e.prototype.handleEvent=function(e){if(this.enabled){var t=e.type,s=e.pageX,n=e.pageY,r=e.clientX,i=e.clientY,o=e.button,a=e.which,u=e.deltaMode,h=e.deltaY,l=this.states[t];if(!this.debounce||!l.fulfilled){if(l.delta=h*(u?-1:-.03),l.fulfilled=!0,l.pageX=s,l.pageY=n,l.clientX=r,l.clientY=i,l.offsetX=s-this.renderer.offset.left-this.view.left,l.offsetY=n-this.renderer.offset.top-this.view.top,l.touches=[],e.touches){for(var d=[].slice.call(e.touches),f=Array.isArray(d),c=0,d=f?d:(0,_getIterator3.default)(d);;){var v;if(f){if(c>=d.length)break;v=d[c++]}else{if(c=d.next(),c.done)break;v=c.value}var p=v;s=p.pageX,n=p.pageY,r=p.clientX,i=p.clientY,l.touches.push({clientX:r,clientY:i,offsetX:s-this.renderer.offset.left-this.view.left,offsetY:n-this.renderer.offset.top-this.view.top,pageX:s,pageY:n})}l.touch=!0,l.multitouch=l.touches.length>1,l.touches.length>0?(l.offsetX=this.touch.offsetX=l.touches[0].offsetX,l.offsetY=this.touch.offsetX=l.touches[0].offsetY):(l.offsetX=this.touch.offsetX,l.offsetY=this.touch.offsetX)}l.button=o,l.which=a,l.event=e,this.changes.push(l),"mousedown"===t?(this.mouse.down=!0,this.mouse.button=o,document.addEventListener("mouseup",this.eventHandlerDefault,!1),document.addEventListener("mousemove",this.eventHandlerDefault,!1)):"mouseup"===t?(this.mouse.down=!1,this.mouse.button=o,document.removeEventListener("mouseup",this.eventHandlerDefault),document.removeEventListener("mousemove",this.eventHandlerDefault)):"touchstart"===t?(this.touch.down=!0,document.addEventListener("touchend",this.eventHandlerDefault,!1),document.addEventListener("touchmove",this.eventHandlerDefault,!1)):"touchend"===t&&(this.touch.down=!1,document.removeEventListener("touchend",this.eventHandlerDefault),document.removeEventListener("touchmove",this.eventHandlerDefault)),this.recent[l.type]=l,this.debounce||this.update()}}},e}();exports.default=Dom;