UNPKG

@aurelia-mdc-web/base

Version:

Base classes for Aurelia Material Components Web

88 lines 4.18 kB
"use strict"; 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