salix/front/core/lib/component.js

49 lines
1.3 KiB
JavaScript
Raw Normal View History

2018-10-18 07:24:20 +00:00
import EventEmitter from './event-emitter';
2018-10-22 15:54:04 +00:00
import {kebabToCamel} from './string';
2018-10-18 07:24:20 +00:00
/**
* Base class for component controllers.
*/
2018-10-18 07:24:20 +00:00
export default class Component extends EventEmitter {
/**
* Contructor.
*
* @param {HTMLElement} $element The main component element
* @param {$rootScope.Scope} $scope The element scope
*/
constructor($element, $scope) {
2018-10-22 15:54:04 +00:00
super();
if (!$element) return;
this.element = $element[0];
this.element.$ctrl = this;
this.$element = $element;
this.$ = $scope;
}
2018-10-22 15:54:04 +00:00
$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);
}
}
2018-10-18 07:24:20 +00:00
/**
* The component owner window.
*/
get window() {
return this.document.defaultView;
}
/**
* The component owner document.
*/
get document() {
return this.element.ownerDocument;
}
}
Component.$inject = ['$element', '$scope'];