ionic-angular
Version:
A powerful framework for building mobile and progressive web apps with JavaScript and Angular
110 lines • 4.05 kB
JavaScript
import { isActivatedDisabled } from './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 (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 (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;
}());
export { Activator };
var ADD_ACTIVATED_DEFERS = 80;
var CLEAR_STATE_DEFERS = 80;
//# sourceMappingURL=activator.js.map