ionic-angular
Version:
A powerful framework for building mobile and progressive web apps with JavaScript and Angular
122 lines • 4.98 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", "./activator-base"], factory);
}
})(function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var activator_base_1 = require("./activator-base");
var Activator = (function () {
function Activator(app, config, dom) {
this.app = app;
this.dom = dom;
this._queue = [];
this._active = [];
this.activatedDelay = ADD_ACTIVATED_DEFERS;
this.clearDelay = CLEAR_STATE_DEFERS;
this._css = config.get('activatedClass', 'activated');
}
Activator.prototype.clickAction = function (ev, activatableEle, _startCoord) {
if (activator_base_1.isActivatedDisabled(ev, activatableEle)) {
return;
}
// a click happened, so immediately deactive all activated elements
this._scheduleClear();
this._queue.length = 0;
for (var i = 0; i < this._active.length; i++) {
this._active[i].classList.remove(this._css);
}
this._active.length = 0;
// then immediately activate this element
if (activatableEle && activatableEle.parentNode) {
this._active.push(activatableEle);
activatableEle.classList.add(this._css);
}
};
Activator.prototype.downAction = function (ev, activatableEle, _startCoord) {
var _this = this;
// the user just pressed down
if (activator_base_1.isActivatedDisabled(ev, activatableEle)) {
return;
}
this.unscheduleClear();
this.deactivate(true);
// queue to have this element activated
this._queue.push(activatableEle);
this._activeDefer = this.dom.write(function () {
_this._activeDefer = null;
var activatableEle;
for (var i = 0; i < _this._queue.length; i++) {
activatableEle = _this._queue[i];
_this._active.push(activatableEle);
activatableEle.classList.add(_this._css);
}
_this._queue.length = 0;
}, this.activatedDelay);
};
// the user was pressing down, then just let up
Activator.prototype.upAction = function (_ev, _activatableEle, _startCoord) {
this._scheduleClear();
};
Activator.prototype._scheduleClear = function () {
var _this = this;
if (this._clearDefer) {
return;
}
this._clearDefer = this.dom.write(function () {
_this.clearState(true);
_this._clearDefer = null;
}, this.clearDelay);
};
Activator.prototype.unscheduleClear = function () {
if (this._clearDefer) {
this._clearDefer();
this._clearDefer = null;
}
};
// all states should return to normal
Activator.prototype.clearState = function (animated) {
var _this = this;
if (!this.app.isEnabled()) {
// the app is actively disabled, so don't bother deactivating anything.
// this makes it easier on the GPU so it doesn't have to redraw any
// buttons during a transition. This will retry in XX milliseconds.
this.dom.write(function () {
_this.clearState(animated);
}, 600);
}
else {
// not actively transitioning, good to deactivate any elements
this.deactivate(animated);
}
};
// remove the active class from all active elements
Activator.prototype.deactivate = function (animated) {
this._clearDeferred();
this._queue.length = 0;
var ele;
for (var i = 0; i < this._active.length; i++) {
ele = this._active[i];
ele.style[this.dom.plt.Css.transition] = animated ? '' : 'none';
ele.classList.remove(this._css);
}
this._active.length = 0;
};
Activator.prototype._clearDeferred = function () {
// Clear any active deferral
if (this._activeDefer) {
this._activeDefer();
this._activeDefer = null;
}
};
return Activator;
}());
exports.Activator = Activator;
var ADD_ACTIVATED_DEFERS = 80;
var CLEAR_STATE_DEFERS = 80;
});
//# sourceMappingURL=activator.js.map