ionic-angular
Version:
A powerful framework for building mobile and progressive web apps with JavaScript and Angular
164 lines • 5.92 kB
JavaScript
(function (factory) {
if (typeof module === "object" && typeof module.exports === "object") {
var v = factory(require, exports);
if (v !== undefined) module.exports = v;
}
else if (typeof define === "function" && define.amd) {
define(["require", "exports", "../util/util", "./recognizers", "../util/dom", "./ui-event-manager"], factory);
}
})(function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var util_1 = require("../util/util");
var recognizers_1 = require("./recognizers");
var dom_1 = require("../util/dom");
var ui_event_manager_1 = require("./ui-event-manager");
/**
* @hidden
*/
var PanGesture = (function () {
function PanGesture(plt, element, opts) {
if (opts === void 0) { opts = {}; }
this.plt = plt;
this.element = element;
util_1.defaults(opts, {
threshold: 20,
maxAngle: 40,
direction: 'x',
zone: true,
capture: false,
passive: false,
});
this.events = new ui_event_manager_1.UIEventManager(plt);
if (opts.domController) {
this.debouncer = opts.domController.debouncer();
}
this.gestute = opts.gesture;
this.direction = opts.direction;
this.eventsConfig = {
element: this.element,
pointerDown: this.pointerDown.bind(this),
pointerMove: this.pointerMove.bind(this),
pointerUp: this.pointerUp.bind(this),
zone: opts.zone,
capture: opts.capture,
passive: opts.passive
};
if (opts.threshold > 0) {
this.detector = new recognizers_1.PanRecognizer(opts.direction, opts.threshold, opts.maxAngle);
}
}
PanGesture.prototype.listen = function () {
if (!this.isListening) {
this.pointerEvents = this.events.pointerEvents(this.eventsConfig);
this.isListening = true;
}
};
PanGesture.prototype.unlisten = function () {
if (this.isListening) {
this.gestute && this.gestute.release();
this.events.unlistenAll();
this.isListening = false;
}
};
PanGesture.prototype.destroy = function () {
this.gestute && this.gestute.destroy();
this.gestute = null;
this.unlisten();
this.events.destroy();
this.events = this.element = this.gestute = null;
};
PanGesture.prototype.pointerDown = function (ev) {
if (this.started) {
return;
}
if (!this.canStart(ev)) {
return false;
}
if (this.gestute) {
// Release fallback
this.gestute.release();
// Start gesture
if (!this.gestute.start()) {
return false;
}
}
this.started = true;
this.captured = false;
var coord = dom_1.pointerCoord(ev);
if (this.detector) {
this.detector.start(coord);
}
else {
if (!this.tryToCapture(ev)) {
this.started = false;
this.captured = false;
this.gestute.release();
return false;
}
}
return true;
};
PanGesture.prototype.pointerMove = function (ev) {
var _this = this;
(void 0) /* assert */;
if (this.captured) {
this.debouncer.write(function () {
_this.onDragMove(ev);
});
return;
}
(void 0) /* assert */;
var coord = dom_1.pointerCoord(ev);
if (this.detector.detect(coord)) {
if (this.detector.pan() !== 0) {
if (!this.tryToCapture(ev)) {
this.abort(ev);
}
}
}
};
PanGesture.prototype.pointerUp = function (ev) {
(void 0) /* assert */;
this.debouncer.cancel();
this.gestute && this.gestute.release();
if (this.captured) {
this.onDragEnd(ev);
}
else {
this.notCaptured(ev);
}
this.captured = false;
this.started = false;
};
PanGesture.prototype.tryToCapture = function (ev) {
(void 0) /* assert */;
(void 0) /* assert */;
if (this.gestute && !this.gestute.capture()) {
return false;
}
this.onDragStart(ev);
this.captured = true;
return true;
};
PanGesture.prototype.abort = function (ev) {
this.started = false;
this.captured = false;
this.gestute.release();
this.pointerEvents.stop();
this.notCaptured(ev);
};
PanGesture.prototype.getNativeElement = function () {
return this.element;
};
// Implemented in a subclass
PanGesture.prototype.canStart = function (_ev) { return true; };
PanGesture.prototype.onDragStart = function (_ev) { };
PanGesture.prototype.onDragMove = function (_ev) { };
PanGesture.prototype.onDragEnd = function (_ev) { };
PanGesture.prototype.notCaptured = function (_ev) { };
return PanGesture;
}());
exports.PanGesture = PanGesture;
});
//# sourceMappingURL=pan-gesture.js.map