UNPKG

@aurelia-mdc-web/base

Version:

Base classes for Aurelia Material Components Web

81 lines 3.49 kB
import { __decorate, __metadata } from "tslib"; import { inject, ObserverLocator } from 'aurelia-framework'; import { SyntaxInterpreter } from 'aurelia-templating-binding'; let MdcComponentAdapters = class MdcComponentAdapters { constructor(observerLocator) { this.observerLocator = observerLocator; this.adaptersCreated = false; this.adapters = {}; } createAdapter() { this.observerLocator.addAdapter({ getObserver: (obj, propertyName, descriptor) => { if (obj instanceof Element) { const tagName = obj.getAttribute('as-element') ?? obj.tagName; const elAdapters = this.adapters[tagName]; if (!elAdapters) { return null; } const propertyAdapter = elAdapters.properties[propertyName]; if (propertyAdapter) { const observer = propertyAdapter.getObserver(obj, propertyName, this.observerLocator, descriptor); if (observer) { return observer; } } } return null; } }); } getOrCreateMdcElementAdapters(tagName) { if (!this.adaptersCreated) { this.createAdapter(); this.adaptersCreated = true; } const adapters = this.adapters; let elementAdapters = adapters[tagName] || adapters[tagName.toLowerCase()]; if (!elementAdapters) { elementAdapters = adapters[tagName] = adapters[tagName.toLowerCase()] = { tagName, properties: {} }; } return elementAdapters; } interceptDetermineDefaultBindingMode() { // eslint-disable-next-line @typescript-eslint/no-this-alias const mdc = this; const originalFn = SyntaxInterpreter.prototype.determineDefaultBindingMode; SyntaxInterpreter.prototype.determineDefaultBindingMode = function (element, attrName, context) { const tagName = element.getAttribute('as-element') ?? element.tagName; const elAdapters = mdc.adapters[tagName]; if (elAdapters) { const 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); }; } addMdcElementObserverAdapter(tagName, properties) { if (!this.adaptersCreated) { this.createAdapter(); this.adaptersCreated = true; } const elementAdapters = this.getOrCreateMdcElementAdapters(tagName); Object.assign(elementAdapters.properties, properties); } registerMdcElementConfig(observerAdapter) { if (!this.bindingModeIntercepted) { this.interceptDetermineDefaultBindingMode(); this.bindingModeIntercepted = true; } this.addMdcElementObserverAdapter(observerAdapter.tagName.toUpperCase(), observerAdapter.properties); } }; MdcComponentAdapters = __decorate([ inject(ObserverLocator), __metadata("design:paramtypes", [ObserverLocator]) ], MdcComponentAdapters); export { MdcComponentAdapters }; //# sourceMappingURL=mdc-component-adapters.js.map