From 9e33a168fc0d5023dd6ba3d6efb9664cb03f9a5b Mon Sep 17 00:00:00 2001 From: nathangray Date: Tue, 21 Jan 2020 11:45:21 -0700 Subject: [PATCH] Getting etemplate2 sort of working --- api/js/etemplate/et2_core_DOMWidget.js | 1 + api/js/etemplate/et2_core_DOMWidget.ts | 14 +- api/js/etemplate/et2_core_baseWidget.js | 356 ----------------------- api/js/etemplate/et2_core_baseWidget.ts | 8 +- api/js/etemplate/et2_core_common.js | 1 + api/js/etemplate/et2_core_inheritance.js | 27 +- api/js/etemplate/et2_core_inheritance.ts | 30 +- api/js/etemplate/et2_core_inputWidget.js | 1 + api/js/etemplate/et2_core_interfaces.js | 1 + api/js/etemplate/et2_core_valueWidget.js | 1 + api/js/etemplate/et2_core_widget.js | 10 +- api/js/etemplate/et2_core_widget.ts | 10 +- api/js/etemplate/et2_widget_box.js | 1 + api/js/etemplate/et2_widget_button.js | 1 + api/js/etemplate/et2_widget_template.js | 1 + api/js/etemplate/et2_widget_textbox.js | 1 + api/js/etemplate/et2_widget_video.js | 1 + 17 files changed, 82 insertions(+), 383 deletions(-) delete mode 100644 api/js/etemplate/et2_core_baseWidget.js diff --git a/api/js/etemplate/et2_core_DOMWidget.js b/api/js/etemplate/et2_core_DOMWidget.js index b6589e99f0..8d34c73ab5 100644 --- a/api/js/etemplate/et2_core_DOMWidget.js +++ b/api/js/etemplate/et2_core_DOMWidget.js @@ -745,3 +745,4 @@ var et2_action_object_impl = /** @class */ (function () { }; return et2_action_object_impl; }()); +//# sourceMappingURL=et2_core_DOMWidget.js.map \ No newline at end of file diff --git a/api/js/etemplate/et2_core_DOMWidget.ts b/api/js/etemplate/et2_core_DOMWidget.ts index 28d86ecd64..e04bad929c 100644 --- a/api/js/etemplate/et2_core_DOMWidget.ts +++ b/api/js/etemplate/et2_core_DOMWidget.ts @@ -14,14 +14,18 @@ /api/js/egw_action/egw_action.js; */ -import { ClassWithAttributes } from './et2_core_inheritance'; +import {ClassWithAttributes} from './et2_core_inheritance'; import './et2_core_interfaces'; import './et2_core_common'; -import {et2_widget, et2_createWidget, et2_register_widget, WidgetConfig} from "./et2_core_widget"; +import {et2_widget, WidgetConfig} from "./et2_core_widget"; import { - egw_getObjectManager, egwActionObjectInterface, - egw_getActionManager, egw_getAppObjectManager, - egwActionObject, egwAction, EGW_AI_DRAG_OVER, EGW_AI_DRAG_OUT + EGW_AI_DRAG_OUT, + EGW_AI_DRAG_OVER, + egw_getActionManager, + egw_getAppObjectManager, + egw_getObjectManager, + egwActionObject, + egwActionObjectInterface } from '../egw_action/egw_action.js'; import './et2_types'; diff --git a/api/js/etemplate/et2_core_baseWidget.js b/api/js/etemplate/et2_core_baseWidget.js deleted file mode 100644 index ee23d8a281..0000000000 --- a/api/js/etemplate/et2_core_baseWidget.js +++ /dev/null @@ -1,356 +0,0 @@ -"use strict"; -/** - * EGroupware eTemplate2 - JS Widget base class - * - * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License - * @package etemplate - * @subpackage api - * @link http://www.egroupware.org - * @author Andreas Stöckel - */ -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -/*egw:uses - /vendor/bower-asset/jquery/dist/jquery.js; - lib/tooltip; - et2_core_DOMWidget; -*/ -require("./et2_core_interfaces"); -require("./et2_core_common"); -var et2_core_DOMWidget_1 = require("./et2_core_DOMWidget"); -var et2_core_inheritance_1 = require("./et2_core_inheritance"); -/** - * Class which manages the DOM node itself. The simpleWidget class is derrived - * from et2_DOMWidget and implements the getDOMNode function. A setDOMNode - * function is provided, which attatches the given node to the DOM if possible. - * - * @augments et2_DOMWidget - */ -var et2_baseWidget = /** @class */ (function (_super) { - __extends(et2_baseWidget, _super); - /** - * Constructor - */ - function et2_baseWidget(_parent, _attrs, _child) { - var _this = - // Call the inherited constructor - _super.call(this, _parent, _attrs, et2_core_inheritance_1.ClassWithAttributes.extendAttributes(et2_core_DOMWidget_1.et2_DOMWidget._attributes, _child || {})) || this; - _this.align = 'left'; - _this.node = null; - _this.statustext = ''; - _this._messageDiv = null; - _this._tooltipElem = null; - return _this; - } - et2_baseWidget.prototype.destroy = function () { - _super.prototype.destroy.call(this); - this.node = null; - this._messageDiv = null; - }; - /** - * The setMessage function can be used to attach a small message box to the - * widget. This is e.g. used to display validation errors or success messages - * - * @param _text is the text which should be displayed as a message - * @param _type is an css class which is attached to the message box. - * Currently available are "hint", "success" and "validation_error", defaults - * to "hint" - * @param _floating if true, the object will be in one row with the element, - * defaults to true - * @param _prepend if set, the message is displayed behind the widget node - * instead of before. Defaults to false. - */ - et2_baseWidget.prototype.showMessage = function (_text, _type, _floating, _prepend) { - // Preset the parameters - if (typeof _type == "undefined") { - _type = "hint"; - } - if (typeof _floating == "undefined") { - _floating = true; - } - if (typeof _prepend == "undefined") { - _prepend = false; - } - var surr = this.getSurroundings(); - // Remove the message div from the surroundings before creating a new - // one - this.hideMessage(false, true); - // Create the message div and add it to the "surroundings" manager - this._messageDiv = jQuery(document.createElement("div")) - .addClass("message") - .addClass(_type) - .addClass(_floating ? "floating" : "") - .text(_text.valueOf() + ""); - // Decide whether to prepend or append the div - if (_prepend) { - surr.prependDOMNode(this._messageDiv[0]); - } - else { - surr.appendDOMNode(this._messageDiv[0]); - } - surr.update(); - }; - /** - * The hideMessage function can be used to hide a previously shown message. - * - * @param _fade if true, the message div will fade out, otherwise the message - * div is removed immediately. Defaults to true. - * @param _noUpdate is used internally to prevent an update of the surroundings - * manager. - */ - et2_baseWidget.prototype.hideMessage = function (_fade, _noUpdate) { - if (typeof _fade == "undefined") { - _fade = true; - } - if (typeof _noUpdate == "undefined") { - _noUpdate = false; - } - // Remove the message from the surroundings manager and remove the - // reference to it - if (this._messageDiv != null) { - var surr = this.getSurroundings(); - var self = this; - var messageDiv = this._messageDiv; - self._messageDiv = null; - var _done = function () { - surr.removeDOMNode(messageDiv[0]); - // Update the surroundings manager - if (!_noUpdate) { - surr.update(); - } - }; - // Either fade out or directly call the function which removes the div - if (_fade) { - messageDiv.fadeOut("fast", _done); - } - else { - _done(); - } - } - }; - et2_baseWidget.prototype.detachFromDOM = function () { - // Detach this node from the tooltip node - if (this._tooltipElem) { - this.egw().tooltipUnbind(this._tooltipElem); - this._tooltipElem = null; - } - // Remove the binding to the click handler - if (this.node) { - jQuery(this.node).unbind("click.et2_baseWidget"); - } - return _super.prototype.detachFromDOM.call(this); - }; - et2_baseWidget.prototype.attachToDOM = function () { - var ret = _super.prototype.attachToDOM.call(this); - // Add the binding for the click handler - if (this.node) { - jQuery(this.node).bind("click.et2_baseWidget", this, function (e) { - return e.data.click.call(e.data, e, this); - }); - if (typeof this.onclick == 'function') - jQuery(this.node).addClass('et2_clickable'); - } - // Update the statustext - this.set_statustext(this.statustext); - return ret; - }; - et2_baseWidget.prototype.setDOMNode = function (_node) { - if (_node != this.node) { - // Deatch the old node from the DOM - this.detachFromDOM(); - // Set the new DOM-Node - this.node = _node; - // Attatch the DOM-Node to the tree - return this.attachToDOM(); - } - return false; - }; - et2_baseWidget.prototype.getDOMNode = function (_sender) { - return this.node; - }; - et2_baseWidget.prototype.getTooltipElement = function () { - return this.getDOMNode(this); - }; - /** - * Click handler calling custom handler set via onclick attribute to this.onclick - * - * @param _ev - * @returns - */ - et2_baseWidget.prototype.click = function (_ev) { - if (typeof this.onclick == 'function') { - // Make sure function gets a reference to the widget, splice it in as 2. argument if not - var args = Array.prototype.slice.call(arguments); - if (args.indexOf(this) == -1) - args.splice(1, 0, this); - return this.onclick.apply(this, args); - } - return true; - }; - et2_baseWidget.prototype.set_statustext = function (_value) { - // Tooltip should not be shown in mobile view - if (egwIsMobile()) - return; - // Don't execute the code below, if no tooltip will be attached/detached - if (_value == "" && !this._tooltipElem) { - return; - } - // allow statustext to contain multiple translated sub-strings eg: {Firstname}.{Lastname} - if (_value.indexOf('{') !== -1) { - var egw = this.egw(); - _value = _value.replace(/{([^}]+)}/g, function (str, p1) { - return egw.lang(p1); - }); - } - this.statustext = _value; - //Get the domnode the tooltip should be attached to - var elem = jQuery(this.getTooltipElement()); - if (elem) { - //If a tooltip is already attached to the element, remove it first - if (this._tooltipElem) { - this.egw().tooltipUnbind(this._tooltipElem); - this._tooltipElem = null; - } - if (_value && _value != '') { - this.egw().tooltipBind(elem, _value, this.options.statustext_html); - this._tooltipElem = elem; - } - } - }; - et2_baseWidget.prototype.set_align = function (_value) { - this.align = _value; - }; - et2_baseWidget.prototype.get_align = function () { - return this.align; - }; - et2_baseWidget._attributes = { - "statustext": { - "name": "Tooltip", - "type": "string", - "description": "Tooltip which is shown for this element", - "translate": true - }, - "statustext_html": { - "name": "Tooltip is html", - "type": "boolean", - "description": "Flag to allow html content in tooltip", - "default": false - }, - "align": { - "name": "Align", - "type": "string", - "default": "left", - "description": "Position of this element in the parent hbox" - }, - "onclick": { - "name": "onclick", - "type": "js", - "default": et2_no_init, - "description": "JS code which is executed when the element is clicked." - } - }; - return et2_baseWidget; -}(et2_core_DOMWidget_1.et2_DOMWidget)); -exports.et2_baseWidget = et2_baseWidget; -/** - * Simple container object - */ -var et2_container = /** @class */ (function (_super) { - __extends(et2_container, _super); - /** - * Constructor - */ - function et2_container(_parent, _attrs, _child) { - // Call the inherited constructor - return _super.call(this, _parent, _attrs, et2_core_inheritance_1.ClassWithAttributes.extendAttributes(et2_core_DOMWidget_1.et2_DOMWidget._attributes, _child || {})) || this; - } - /** - * The destroy function destroys all children of the widget, removes itself - * from the parents children list. - * Overriden to not try to remove self from parent, as that's not possible. - */ - et2_container.prototype.destroy = function () { - // Call the destructor of all children - for (var i = this._children.length - 1; i >= 0; i--) { - this._children[i].destroy(); - } - // Free the array managers if they belong to this widget - for (var key in this._mgrs) { - if (this._mgrs[key] && this._mgrs[key].owner == this) { - this._mgrs[key].destroy(); - } - } - }; - return et2_container; -}(et2_baseWidget)); -/** - * Container object for not-yet supported widgets - * - * @augments et2_baseWidget - */ -var et2_placeholder = /** @class */ (function (_super) { - __extends(et2_placeholder, _super); - /** - * Constructor - */ - function et2_placeholder(_parent, _attrs, _child) { - var _this = - // Call the inherited constructor - _super.call(this, _parent, _attrs, et2_core_inheritance_1.ClassWithAttributes.extendAttributes(et2_core_DOMWidget_1.et2_DOMWidget._attributes, _child || {})) || this; - _this.visible = false; - _this.attrNodes = {}; - // Create the placeholder div - _this.placeDiv = jQuery(document.createElement("span")) - .addClass("et2_placeholder"); - var headerNode = jQuery(document.createElement("span")) - .text(_this.getType() || "") - .addClass("et2_caption") - .appendTo(_this.placeDiv); - var attrsCntr = jQuery(document.createElement("span")) - .appendTo(_this.placeDiv) - .hide(); - headerNode.click(_this, function (e) { - e.data.visible = !e.data.visible; - if (e.data.visible) { - attrsCntr.show(); - } - else { - attrsCntr.hide(); - } - }); - for (var key in _this.options) { - if (typeof _this.options[key] != "undefined") { - if (typeof _this.attrNodes[key] == "undefined") { - _this.attrNodes[key] = jQuery(document.createElement("span")) - .addClass("et2_attr"); - attrsCntr.append(_this.attrNodes[key]); - } - _this.attrNodes[key].text(key + "=" + _this.options[key]); - } - } - _this.setDOMNode(_this.placeDiv[0]); - return _this; - } - et2_placeholder.prototype.getDetachedAttributes = function (_attrs) { - _attrs.push("value"); - }; - et2_placeholder.prototype.getDetachedNodes = function () { - return [this.placeDiv[0]]; - }; - et2_placeholder.prototype.setDetachedAttributes = function (_nodes, _values) { - this.placeDiv = jQuery(_nodes[0]); - }; - return et2_placeholder; -}(et2_baseWidget)); diff --git a/api/js/etemplate/et2_core_baseWidget.ts b/api/js/etemplate/et2_core_baseWidget.ts index f9d020c9b7..44e6fada90 100644 --- a/api/js/etemplate/et2_core_baseWidget.ts +++ b/api/js/etemplate/et2_core_baseWidget.ts @@ -16,9 +16,9 @@ import './et2_core_interfaces'; import './et2_core_common'; -import { et2_DOMWidget } from './et2_core_DOMWidget'; -import { ClassWithAttributes } from "./et2_core_inheritance"; -import { et2_widget, et2_createWidget, et2_register_widget, WidgetConfig } from "./et2_core_widget"; +import {et2_DOMWidget} from './et2_core_DOMWidget'; +import {ClassWithAttributes} from "./et2_core_inheritance"; +import {et2_widget, WidgetConfig} from "./et2_core_widget"; /** * Class which manages the DOM node itself. The simpleWidget class is derrived @@ -54,7 +54,7 @@ export class et2_baseWidget extends et2_DOMWidget implements et2_IAligned "default": et2_no_init, "description": "JS code which is executed when the element is clicked." } - } + }; align: string = 'left'; node: HTMLElement = null; diff --git a/api/js/etemplate/et2_core_common.js b/api/js/etemplate/et2_core_common.js index cf751451fb..99651e0f95 100644 --- a/api/js/etemplate/et2_core_common.js +++ b/api/js/etemplate/et2_core_common.js @@ -579,3 +579,4 @@ function et2_rangeSubstract(_ar1, _ar2) { function html_entity_decode(_str) { return _str && _str.indexOf('&') != -1 ? jQuery('' + _str + '').text() : _str; } +//# sourceMappingURL=et2_core_common.js.map \ No newline at end of file diff --git a/api/js/etemplate/et2_core_inheritance.js b/api/js/etemplate/et2_core_inheritance.js index ae478d5a64..922ad7c213 100644 --- a/api/js/etemplate/et2_core_inheritance.js +++ b/api/js/etemplate/et2_core_inheritance.js @@ -74,12 +74,12 @@ var ClassWithAttributes = /** @class */ (function () { * * @param {object} _attrs is the associative array containing the attributes. */ - ClassWithAttributes.prototype.generateAttributeSet = function (_attrs) { + ClassWithAttributes.generateAttributeSet = function (widget, _attrs) { // Sanity check and validation for (var key in _attrs) { - if (typeof this.attributes[key] != "undefined") { - if (!this.attributes[key].ignore) { - _attrs[key] = et2_checkType(_attrs[key], this.attributes[key].type, key, this); + if (typeof widget[key] != "undefined") { + if (!widget[key].ignore) { + _attrs[key] = et2_checkType(_attrs[key], widget[key].type, key, this); } } else { @@ -90,9 +90,9 @@ var ClassWithAttributes = /** @class */ (function () { } } // Include default values or already set values for this attribute - for (var key in this.attributes) { + for (var key in widget) { if (typeof _attrs[key] == "undefined") { - var _default = this.attributes[key]["default"]; + var _default = widget[key]["default"]; if (_default == et2_no_init) { _default = undefined; } @@ -116,6 +116,20 @@ var ClassWithAttributes = /** @class */ (function () { } } }; + ClassWithAttributes.buildAttributes = function (class_prototype) { + var class_tree = []; + var attributes = {}; + var n = 0; + do { + n++; + class_tree.push(class_prototype); + class_prototype = Object.getPrototypeOf(class_prototype); + } while (class_prototype !== ClassWithAttributes && n < 50); + for (var i = class_tree.length - 1; i > 0; i--) { + class_tree[i - 1]._attributes = ClassWithAttributes.extendAttributes(class_tree[i - 1]._attributes, class_tree[i]._attributes); + } + return class_tree[0]._attributes; + }; /** * Extend current _attributes with the one from the parent class * @@ -189,3 +203,4 @@ var ClassWithAttributes = /** @class */ (function () { return ClassWithAttributes; }()); exports.ClassWithAttributes = ClassWithAttributes; +//# sourceMappingURL=et2_core_inheritance.js.map \ No newline at end of file diff --git a/api/js/etemplate/et2_core_inheritance.ts b/api/js/etemplate/et2_core_inheritance.ts index 33acaf6e2e..ecf213fc77 100644 --- a/api/js/etemplate/et2_core_inheritance.ts +++ b/api/js/etemplate/et2_core_inheritance.ts @@ -95,16 +95,16 @@ export class ClassWithAttributes * * @param {object} _attrs is the associative array containing the attributes. */ - generateAttributeSet(_attrs) + static generateAttributeSet(widget, _attrs) { // Sanity check and validation for (var key in _attrs) { - if (typeof this.attributes[key] != "undefined") + if (typeof widget[key] != "undefined") { - if (!this.attributes[key].ignore) + if (!widget[key].ignore) { - _attrs[key] = et2_checkType(_attrs[key], this.attributes[key].type, + _attrs[key] = et2_checkType(_attrs[key], widget[key].type, key, this); } } @@ -118,11 +118,11 @@ export class ClassWithAttributes } // Include default values or already set values for this attribute - for (var key in this.attributes) + for (var key in widget) { if (typeof _attrs[key] == "undefined") { - var _default = this.attributes[key]["default"]; + var _default = widget[key]["default"]; if (_default == et2_no_init) { _default = undefined; @@ -154,6 +154,24 @@ export class ClassWithAttributes } } + static buildAttributes(class_prototype: object) + { + let class_tree = []; + let attributes = {}; + let n = 0; + do + { + n++; + class_tree.push(class_prototype); + class_prototype = Object.getPrototypeOf(class_prototype); + } while (class_prototype !== ClassWithAttributes && n < 50); + + for(let i = class_tree.length - 1; i > 0; i--) + { + class_tree[i-1]._attributes = ClassWithAttributes.extendAttributes(class_tree[i-1]._attributes,class_tree[i]._attributes); + } + return class_tree[0]._attributes; + } /** * Extend current _attributes with the one from the parent class * diff --git a/api/js/etemplate/et2_core_inputWidget.js b/api/js/etemplate/et2_core_inputWidget.js index 75dc6bebd9..dd0feac72d 100644 --- a/api/js/etemplate/et2_core_inputWidget.js +++ b/api/js/etemplate/et2_core_inputWidget.js @@ -284,3 +284,4 @@ var et2_inputWidget = /** @class */ (function (_super) { return et2_inputWidget; }(et2_core_valueWidget_1.et2_valueWidget)); exports.et2_inputWidget = et2_inputWidget; +//# sourceMappingURL=et2_core_inputWidget.js.map \ No newline at end of file diff --git a/api/js/etemplate/et2_core_interfaces.js b/api/js/etemplate/et2_core_interfaces.js index 0ae9f1ec9c..a88c62ef27 100644 --- a/api/js/etemplate/et2_core_interfaces.js +++ b/api/js/etemplate/et2_core_interfaces.js @@ -49,3 +49,4 @@ var et2_IPrint = "et2_IPrint"; function implements_et2_IPrint(obj) { return implements_methods(obj, ["beforePrint", "afterPrint"]); } +//# sourceMappingURL=et2_core_interfaces.js.map \ No newline at end of file diff --git a/api/js/etemplate/et2_core_valueWidget.js b/api/js/etemplate/et2_core_valueWidget.js index e9d484dc4b..ea682b185e 100644 --- a/api/js/etemplate/et2_core_valueWidget.js +++ b/api/js/etemplate/et2_core_valueWidget.js @@ -127,3 +127,4 @@ var et2_valueWidget = /** @class */ (function (_super) { return et2_valueWidget; }(et2_core_baseWidget_1.et2_baseWidget)); exports.et2_valueWidget = et2_valueWidget; +//# sourceMappingURL=et2_core_valueWidget.js.map \ No newline at end of file diff --git a/api/js/etemplate/et2_core_widget.js b/api/js/etemplate/et2_core_widget.js index efabd15cd6..d5b3744859 100644 --- a/api/js/etemplate/et2_core_widget.js +++ b/api/js/etemplate/et2_core_widget.js @@ -35,6 +35,7 @@ var et2_core_inheritance_1 = require("./et2_core_inheritance"); * constructor. */ var et2_registry = {}; +var et2_attribute_registry = {}; /** * Registers the widget class defined by the given constructor and associates it * with the types in the _types array. @@ -44,6 +45,7 @@ var et2_registry = {}; */ function et2_register_widget(_constructor, _types) { "use strict"; + et2_attribute_registry[_constructor.name] = et2_core_inheritance_1.ClassWithAttributes.buildAttributes(_constructor); // Iterate over all given types and register those for (var i = 0; i < _types.length; i++) { var type = _types[i].toLowerCase(); @@ -447,8 +449,9 @@ var et2_widget = /** @class */ (function (_super) { // do NOT overwrite already evaluated readonly attribute } else { - if (mgr != null && typeof _proto.attributes[attrName] != "undefined") { - var attr = _proto.attributes[attrName]; + var attrs = et2_attribute_registry[Object.getPrototypeOf(_proto).constructor.name] || {}; + if (mgr != null && typeof attrs[attrName] != "undefined") { + var attr = attrs[attrName]; // If the attribute is marked as boolean, parse the // expression as bool expression. if (attr.type == "boolean") { @@ -556,7 +559,7 @@ var et2_widget = /** @class */ (function (_super) { // Parse the attributes from the given XML attributes object this.parseXMLAttrs(_node.attributes, attributes, constructor.prototype); // Do an sanity check for the attributes - constructor.prototype.generateAttributeSet(attributes); + et2_core_inheritance_1.ClassWithAttributes.generateAttributeSet(et2_attribute_registry[constructor.name], attributes); // Creates the new widget, passes this widget as an instance and // passes the widgetType. Then it goes on loading the XML for it. var widget = new constructor(this, attributes); @@ -885,3 +888,4 @@ var et2_widget = /** @class */ (function (_super) { return et2_widget; }(et2_core_inheritance_1.ClassWithAttributes)); exports.et2_widget = et2_widget; +//# sourceMappingURL=et2_core_widget.js.map \ No newline at end of file diff --git a/api/js/etemplate/et2_core_widget.ts b/api/js/etemplate/et2_core_widget.ts index bc70f67e24..d9092ae822 100644 --- a/api/js/etemplate/et2_core_widget.ts +++ b/api/js/etemplate/et2_core_widget.ts @@ -23,6 +23,8 @@ import { ClassWithAttributes } from './et2_core_inheritance'; * constructor. */ var et2_registry = {}; +var et2_attribute_registry = {}; + /** * Registers the widget class defined by the given constructor and associates it @@ -35,6 +37,7 @@ export function et2_register_widget(_constructor, _types) { "use strict"; + et2_attribute_registry[_constructor.name] = ClassWithAttributes.buildAttributes(_constructor); // Iterate over all given types and register those for (var i = 0; i < _types.length; i++) { @@ -577,8 +580,9 @@ export class et2_widget extends ClassWithAttributes } else if (attrName == "readonly" && typeof _target[attrName] != "undefined") { // do NOT overwrite already evaluated readonly attribute } else { - if (mgr != null && typeof _proto.attributes[attrName] != "undefined") { - var attr = _proto.attributes[attrName]; + let attrs = et2_attribute_registry[Object.getPrototypeOf(_proto).constructor.name] || {}; + if (mgr != null && typeof attrs[attrName] != "undefined") { + var attr = attrs[attrName]; // If the attribute is marked as boolean, parse the // expression as bool expression. @@ -702,7 +706,7 @@ export class et2_widget extends ClassWithAttributes this.parseXMLAttrs(_node.attributes, attributes, constructor.prototype); // Do an sanity check for the attributes - constructor.prototype.generateAttributeSet(attributes); + ClassWithAttributes.generateAttributeSet(et2_attribute_registry[constructor.name], attributes); // Creates the new widget, passes this widget as an instance and // passes the widgetType. Then it goes on loading the XML for it. diff --git a/api/js/etemplate/et2_widget_box.js b/api/js/etemplate/et2_widget_box.js index 038e8cdcc3..8666aa8df0 100644 --- a/api/js/etemplate/et2_widget_box.js +++ b/api/js/etemplate/et2_widget_box.js @@ -222,3 +222,4 @@ var et2_details = /** @class */ (function (_super) { }(et2_box)); exports.et2_details = et2_details; et2_core_widget_1.et2_register_widget(et2_details, ["details"]); +//# sourceMappingURL=et2_widget_box.js.map \ No newline at end of file diff --git a/api/js/etemplate/et2_widget_button.js b/api/js/etemplate/et2_widget_button.js index 6961dd20ef..14aefa7196 100644 --- a/api/js/etemplate/et2_widget_button.js +++ b/api/js/etemplate/et2_widget_button.js @@ -390,3 +390,4 @@ var et2_button = /** @class */ (function (_super) { }(et2_core_baseWidget_1.et2_baseWidget)); exports.et2_button = et2_button; et2_core_widget_1.et2_register_widget(et2_button, ["button", "buttononly"]); +//# sourceMappingURL=et2_widget_button.js.map \ No newline at end of file diff --git a/api/js/etemplate/et2_widget_template.js b/api/js/etemplate/et2_widget_template.js index 30bb559bf2..c7bab3cb36 100644 --- a/api/js/etemplate/et2_widget_template.js +++ b/api/js/etemplate/et2_widget_template.js @@ -228,3 +228,4 @@ var et2_template = /** @class */ (function (_super) { return et2_template; }(et2_core_DOMWidget_1.et2_DOMWidget)); et2_core_widget_1.et2_register_widget(et2_template, ["template"]); +//# sourceMappingURL=et2_widget_template.js.map \ No newline at end of file diff --git a/api/js/etemplate/et2_widget_textbox.js b/api/js/etemplate/et2_widget_textbox.js index f24bbda4b1..090b827cd1 100644 --- a/api/js/etemplate/et2_widget_textbox.js +++ b/api/js/etemplate/et2_widget_textbox.js @@ -575,3 +575,4 @@ var et2_searchbox = /** @class */ (function (_super) { return et2_searchbox; }(et2_textbox)); et2_core_widget_1.et2_register_widget(et2_searchbox, ["searchbox"]); +//# sourceMappingURL=et2_widget_textbox.js.map \ No newline at end of file diff --git a/api/js/etemplate/et2_widget_video.js b/api/js/etemplate/et2_widget_video.js index e142496353..a35f83e7d9 100644 --- a/api/js/etemplate/et2_widget_video.js +++ b/api/js/etemplate/et2_widget_video.js @@ -175,3 +175,4 @@ var et2_video = /** @class */ (function (_super) { }; return et2_video; }(et2_core_baseWidget_1.et2_baseWidget)); +//# sourceMappingURL=et2_widget_video.js.map \ No newline at end of file