aurelia-bootstrap
Version:
Bootstrap components written in Aurelia.
75 lines (60 loc) • 2.19 kB
JavaScript
/* */
define(['exports', 'aurelia-templating', 'aurelia-binding', 'aurelia-dependency-injection', 'aurelia-task-queue', 'aurelia-pal'], function (exports, _aureliaTemplating, _aureliaBinding, _aureliaDependencyInjection, _aureliaTaskQueue, _aureliaPal) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Focus = undefined;
var _dec, _dec2, _class;
var Focus = exports.Focus = (_dec = (0, _aureliaTemplating.customAttribute)('focus', _aureliaBinding.bindingMode.twoWay), _dec2 = (0, _aureliaDependencyInjection.inject)(_aureliaPal.DOM.Element, _aureliaTaskQueue.TaskQueue), _dec(_class = _dec2(_class = function () {
function Focus(element, taskQueue) {
var _this = this;
this.element = element;
this.taskQueue = taskQueue;
this.isAttached = false;
this.needsApply = false;
this.focusListener = function (e) {
_this.value = true;
};
this.blurListener = function (e) {
if (_aureliaPal.DOM.activeElement !== _this.element) {
_this.value = false;
}
};
}
Focus.prototype.valueChanged = function valueChanged(newValue) {
if (this.isAttached) {
this._apply();
} else {
this.needsApply = true;
}
};
Focus.prototype._apply = function _apply() {
var _this2 = this;
if (this.value) {
this.taskQueue.queueMicroTask(function () {
if (_this2.value) {
_this2.element.focus();
}
});
} else {
this.element.blur();
}
};
Focus.prototype.attached = function attached() {
this.isAttached = true;
if (this.needsApply) {
this.needsApply = false;
this._apply();
}
this.element.addEventListener('focus', this.focusListener);
this.element.addEventListener('blur', this.blurListener);
};
Focus.prototype.detached = function detached() {
this.isAttached = false;
this.element.removeEventListener('focus', this.focusListener);
this.element.removeEventListener('blur', this.blurListener);
};
return Focus;
}()) || _class) || _class);
});