app-decorators
Version:
Collection of useful ES7 Decorators, writtin in ES6, that can be used for building webapps
109 lines (83 loc) • 2.97 kB
JavaScript
System.register(['app-decorators/src/libs/element-to-function'], function (_export, _context) {
"use strict";
var _elementToFunc, Register;
return {
setters: [function (_appDecoratorsSrcLibsElementToFunction) {
_elementToFunc = _appDecoratorsSrcLibsElementToFunction.default;
}],
execute: function () {
_export('Register', Register = {
/**
* Prefix of component if used
* e.g. com-foo
*/
prefix: 'com',
customElement: function customElement(Class) {
var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var name = config.name;
if (!name) {
var className = this._getClassName(Class);
name = this._createComponentName(className, this.prefix);
} else {
delete config.name;
}
this._addExtends(Class, config);
this._registerElement(Class, name);
},
_classof: function _classof(value) {
return Object.prototype.toString.call(value).slice(8, -1);
},
_addExtends: function _addExtends(Class) {
var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var inherit = config.extends;
if (inherit && !Class.extends) {
Class.extends = inherit;
}
return Class;
},
_getClassName: function _getClassName(Class) {
return Class.$$componentName || Class.prototype.constructor.name;
},
_createComponentName: function _createComponentName(className) {
var prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.prefix;
return prefix + '-' + className.toLowerCase();
},
_enableConstructorVars: function _enableConstructorVars(Class) {
var createdCallback = Class.prototype.createdCallback;
Class.prototype.createdCallback = function () {
if (!arguments.length && !this.parentElement) {
return;
}
// console.log(args, this.parentElement)
createdCallback ? createdCallback.call.apply(createdCallback, [this].concat(Array.prototype.slice.call(arguments))) : null;
};
return Class;
},
_registerElement: function _registerElement(Class, name) {
this._enableConstructorVars(Class);
// register element
var registeredElement = document.registerElement(name, Class);
/**
* create (add factory)
* @param vars {object}
*/
Class.create = function (vars) {
if (arguments.length > 1) {
throw new Error('Its not allowed to pass more than one argument');
}
var classof = Register._classof(vars);
if (!(classof === 'Object' || classof === 'Undefined')) {
throw new Error('Passed argument must be an object or undefined');
}
var element = new registeredElement();
element.createdCallback(vars || "");
return element;
};
return Class;
}
});
_export('Register', Register);
}
};
});
//# sourceMappingURL=customelement.js.map