@aurelia-mdc-web/base
Version:
Base classes for Aurelia Material Components Web
88 lines • 4.18 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.MdcComponentAdapters = void 0;
var tslib_1 = require("tslib");
var aurelia_framework_1 = require("aurelia-framework");
var aurelia_templating_binding_1 = require("aurelia-templating-binding");
var MdcComponentAdapters = /** @class */ (function () {
function MdcComponentAdapters(observerLocator) {
this.observerLocator = observerLocator;
this.adaptersCreated = false;
this.adapters = {};
}
MdcComponentAdapters.prototype.createAdapter = function () {
var _this = this;
this.observerLocator.addAdapter({
getObserver: function (obj, propertyName, descriptor) {
var _a;
if (obj instanceof Element) {
var tagName = (_a = obj.getAttribute('as-element')) !== null && _a !== void 0 ? _a : obj.tagName;
var elAdapters = _this.adapters[tagName];
if (!elAdapters) {
return null;
}
var propertyAdapter = elAdapters.properties[propertyName];
if (propertyAdapter) {
var observer = propertyAdapter.getObserver(obj, propertyName, _this.observerLocator, descriptor);
if (observer) {
return observer;
}
}
}
return null;
}
});
};
MdcComponentAdapters.prototype.getOrCreateMdcElementAdapters = function (tagName) {
if (!this.adaptersCreated) {
this.createAdapter();
this.adaptersCreated = true;
}
var adapters = this.adapters;
var elementAdapters = adapters[tagName] || adapters[tagName.toLowerCase()];
if (!elementAdapters) {
elementAdapters = adapters[tagName] = adapters[tagName.toLowerCase()] = { tagName: tagName, properties: {} };
}
return elementAdapters;
};
MdcComponentAdapters.prototype.interceptDetermineDefaultBindingMode = function () {
// eslint-disable-next-line @typescript-eslint/no-this-alias
var mdc = this;
var originalFn = aurelia_templating_binding_1.SyntaxInterpreter.prototype.determineDefaultBindingMode;
aurelia_templating_binding_1.SyntaxInterpreter.prototype.determineDefaultBindingMode = function (element, attrName, context) {
var _a;
var tagName = (_a = element.getAttribute('as-element')) !== null && _a !== void 0 ? _a : element.tagName;
var elAdapters = mdc.adapters[tagName];
if (elAdapters) {
var propertyAdapter = elAdapters.properties[attrName];
if (propertyAdapter) {
return propertyAdapter.defaultBindingMode;
}
}
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
return originalFn.call(this, element, attrName, context);
};
};
MdcComponentAdapters.prototype.addMdcElementObserverAdapter = function (tagName, properties) {
if (!this.adaptersCreated) {
this.createAdapter();
this.adaptersCreated = true;
}
var elementAdapters = this.getOrCreateMdcElementAdapters(tagName);
Object.assign(elementAdapters.properties, properties);
};
MdcComponentAdapters.prototype.registerMdcElementConfig = function (observerAdapter) {
if (!this.bindingModeIntercepted) {
this.interceptDetermineDefaultBindingMode();
this.bindingModeIntercepted = true;
}
this.addMdcElementObserverAdapter(observerAdapter.tagName.toUpperCase(), observerAdapter.properties);
};
MdcComponentAdapters = tslib_1.__decorate([
(0, aurelia_framework_1.inject)(aurelia_framework_1.ObserverLocator),
tslib_1.__metadata("design:paramtypes", [aurelia_framework_1.ObserverLocator])
], MdcComponentAdapters);
return MdcComponentAdapters;
}());
exports.MdcComponentAdapters = MdcComponentAdapters;
//# sourceMappingURL=mdc-component-adapters.js.map