UNPKG

rxjs-gestures

Version:

A library for reacting to future user input.

256 lines (215 loc) 12.7 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.NormalizeSubscriber = exports.NormalizeOperator = undefined; var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _support = require('../support'); var _Subscriber2 = require('rxjs/Subscriber'); function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var NormalizeOperator = exports.NormalizeOperator = function () { function NormalizeOperator(origin, Gestures, scheduler) { _classCallCheck(this, NormalizeOperator); this.origin = origin || undefined; this.Gestures = Gestures; this.scheduler = scheduler; } _createClass(NormalizeOperator, [{ key: 'call', value: function call(subscriber, source) { return source.subscribe(new NormalizeSubscriber(subscriber, this.origin, this.Gestures, this.scheduler)); } }]); return NormalizeOperator; }(); var NormalizeSubscriber = exports.NormalizeSubscriber = function (_Subscriber) { _inherits(NormalizeSubscriber, _Subscriber); function NormalizeSubscriber(subscriber, origin, Gestures, scheduler) { _classCallCheck(this, NormalizeSubscriber); var _this = _possibleConstructorReturn(this, (NormalizeSubscriber.__proto__ || Object.getPrototypeOf(NormalizeSubscriber)).call(this, subscriber)); _this.origin = origin; _this.previous = origin; _this.Gestures = Gestures; _this.scheduler = scheduler; _this.sampleX = 0; _this.sampleY = 0; _this.sampleT = scheduler.now(); return _this; } _createClass(NormalizeSubscriber, [{ key: '_next', value: function _next(multitouchEvent) { if (multitouchEvent instanceof _support.Point) { return _get(NormalizeSubscriber.prototype.__proto__ || Object.getPrototypeOf(NormalizeSubscriber.prototype), '_next', this).call(this, this.previous = multitouchEvent); } var time = this.scheduler.now(); var origin = this.origin, lastWindowTime = this.lastWindowTime; var type = multitouchEvent.type, index = multitouchEvent.index, event = multitouchEvent.event, touch = multitouchEvent.touch, target = multitouchEvent.target, screenX = multitouchEvent.screenX, screenY = multitouchEvent.screenY, pageX = multitouchEvent.pageX, pageY = multitouchEvent.pageY, clientX = multitouchEvent.clientX, clientY = multitouchEvent.clientY, deltaX = multitouchEvent.deltaX, deltaY = multitouchEvent.deltaY, deltaZ = multitouchEvent.deltaZ, button = multitouchEvent.button, buttons = multitouchEvent.buttons, _multitouchEvent$radi = multitouchEvent.radiusX, radiusX = _multitouchEvent$radi === undefined ? 1 : _multitouchEvent$radi, _multitouchEvent$radi2 = multitouchEvent.radiusY, radiusY = _multitouchEvent$radi2 === undefined ? 1 : _multitouchEvent$radi2, _multitouchEvent$rota = multitouchEvent.rotationAngle, rotationAngle = _multitouchEvent$rota === undefined ? 0 : _multitouchEvent$rota; if (!origin) { this.origin = origin = NormalizeSubscriber.createOrigin(multitouchEvent, touch, time, this.Gestures); } var _previous = this.previous, previous = _previous === undefined ? origin : _previous; var prevX = previous.pageX, prevY = previous.pageY; var movementX = pageX - prevX; var movementY = pageY - prevY; var movementT = time - previous.time; var movementXTotal = movementX + previous.movementXTotal; var movementYTotal = movementY + previous.movementYTotal; var movementTTotal = movementT + previous.movementTTotal; var sampleTTotal = time - this.sampleT; var sampleXTotal = pageX - this.sampleX; var sampleYTotal = pageY - this.sampleY; if (sampleTTotal >= 100) { this.sampleT = time; this.sampleX = pageX; this.sampleY = pageY; } var distance = Math.sqrt(sampleXTotal * sampleXTotal + sampleYTotal * sampleYTotal) || 0; var speed = Math.sqrt(distance / (sampleTTotal || 1) / 5) || 0; var direction = Math.atan2(movementY / movementT, movementX / movementT) || 0; var point = origin.clone(); point.type = type; point.time = time; point.index = index; point.touch = touch; point.event = event; point.pageX = pageX; point.pageY = pageY; point.button = button; point.buttons = buttons; point.movementT = movementT; point.movementX = movementX; point.movementY = movementY; point.deltaX = deltaX; point.deltaY = deltaY; point.deltaZ = deltaZ; point.clientX = clientX; point.clientY = clientY; point.screenX = screenX; point.screenY = screenY; point.radiusX = radiusX; point.radiusY = radiusY; point.speed = speed; point.direction = direction; point.rotationAngle = rotationAngle; point.movementXTotal = movementXTotal; point.movementYTotal = movementYTotal; point.movementTTotal = movementTTotal; point.x += movementXTotal; point.y += movementYTotal; point.targetX += movementXTotal; point.targetY += movementYTotal; point.targetPageX += movementXTotal; point.targetPageY += movementYTotal; point.targetClientX += movementXTotal; point.targetClientY += movementYTotal; point.targetScreenX += movementXTotal; point.targetScreenY += movementYTotal; _get(NormalizeSubscriber.prototype.__proto__ || Object.getPrototypeOf(NormalizeSubscriber.prototype), '_next', this).call(this, this.previous = point); } }], [{ key: 'createOrigin', value: function createOrigin(event, touch, time, Gestures) { var _target$getBBox; var identifier = touch.identifier; var topLevelElement = Gestures.topLevelElement; var type = event.type, target = event.target, pageX = event.pageX, pageY = event.pageY, clientX = event.clientX, clientY = event.clientY, screenX = event.screenX, screenY = event.screenY, _event$radiusX = event.radiusX, radiusX = _event$radiusX === undefined ? 1 : _event$radiusX, _event$radiusY = event.radiusY, radiusY = _event$radiusY === undefined ? 1 : _event$radiusY, _event$rotationAngle = event.rotationAngle, rotationAngle = _event$rotationAngle === undefined ? 0 : _event$rotationAngle; var scrollTop = target.scrollTop, scrollLeft = target.scrollLeft; var parent = target.offsetParent || target.parentNode || topLevelElement; var _target$getBoundingCl = target.getBoundingClientRect(), targetTop = _target$getBoundingCl.top, targetLeft = _target$getBoundingCl.left, targetRight = _target$getBoundingCl.right, targetBottom = _target$getBoundingCl.bottom; var _parent$getBoundingCl = parent.getBoundingClientRect(), parentTop = _parent$getBoundingCl.top, parentLeft = _parent$getBoundingCl.left, parentRight = _parent$getBoundingCl.right, parentBottom = _parent$getBoundingCl.bottom; var offsetLeft = target.offsetLeft, offsetTop = target.offsetTop; 'ownerSVGElement' in target && (_target$getBBox = target.getBBox(), offsetLeft = _target$getBBox.x, offsetTop = _target$getBBox.y, _target$getBBox); var x = clientX - targetLeft - scrollLeft; var y = clientY - targetTop - scrollTop; var targetPageX = targetLeft - scrollLeft + topLevelElement.pageXOffset; var targetPageY = targetTop - scrollTop + topLevelElement.pageYOffset; var targetX = targetLeft - parentLeft - offsetLeft - scrollLeft; var targetY = targetTop - parentTop - offsetTop - scrollTop; var targetClientX = targetLeft - scrollLeft; var targetClientY = targetTop - scrollTop; var targetScreenX = screenX - clientX + targetLeft - scrollLeft; var targetScreenY = screenY - clientY + targetTop - scrollTop; var origin = new _support.Point(time, null, null, target, identifier, radiusX, radiusY, rotationAngle, x, y, pageX, pageY, clientX, clientY, screenX, screenY, targetX, targetY, targetPageX, targetPageY, targetClientX, targetClientY, targetScreenX, targetScreenY); origin.type = type; origin.origin = origin; origin.xOrigin = origin.x; origin.yOrigin = origin.y; origin.targetTop = targetTop; origin.targetLeft = targetLeft; origin.targetRight = targetRight; origin.targetBottom = targetBottom; origin.parentTop = parentTop; origin.parentLeft = parentLeft; origin.parentRight = parentRight; origin.parentBottom = parentBottom; origin.pageXOrigin = origin.pageX; origin.pageYOrigin = origin.pageY; origin.clientXOrigin = origin.clientX; origin.clientYOrigin = origin.clientY; origin.screenXOrigin = origin.screenX; origin.screenYOrigin = origin.screenY; origin.targetXOrigin = origin.targetX; origin.targetYOrigin = origin.targetY; origin.targetPageXOrigin = origin.targetPageX; origin.targetPageYOrigin = origin.targetPageY; origin.targetClientXOrigin = origin.targetClientX; origin.targetClientYOrigin = origin.targetClientY; origin.targetScreenXOrigin = origin.targetScreenX; origin.targetScreenYOrigin = origin.targetScreenY; return origin; } }]); return NormalizeSubscriber; }(_Subscriber2.Subscriber); //# sourceMappingURL=NormalizeOperator.js.map