import EventEmitter from './event-emitter'; import {kebabToCamel} from './string'; /** * Base class for component controllers. */ export default class Component extends EventEmitter { /** * Contructor. * * @param {HTMLElement} $element The main component element * @param {$rootScope.Scope} $scope The element scope */ constructor($element, $scope) { super(); if (!$element) return; this.element = $element[0]; this.element.$ctrl = this; this.$element = $element; this.$ = $scope; } $postLink() { if (!this.$element) return; let attrs = this.$element[0].attributes; let $scope = this.$; for (let attr of attrs) { if (attr.name.substr(0, 2) !== 'on') continue; let eventName = kebabToCamel(attr.name.substr(3)); let callback = locals => $scope.$parent.$eval(attr.nodeValue, locals); this.on(eventName, callback); } } /** * The component owner window. */ get window() { return this.document.defaultView; } /** * The component owner document. */ get document() { return this.element.ownerDocument; } } Component.$inject = ['$element', '$scope'];