From 5c5d1dd39d8d6d247b32e79af233d1dbc2f1c3e9 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_description.js | 744 ++++++++++----------- api/js/etemplate/et2_widget_template.js | 1 + api/js/etemplate/et2_widget_textbox.js | 1 + api/js/etemplate/et2_widget_video.js | 1 + 18 files changed, 425 insertions(+), 784 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 36cdcc1ca9..86e9a2298c 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") { @@ -555,7 +558,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); @@ -884,3 +887,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 177b7ff1d6..60d770bb72 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. @@ -701,7 +705,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_description.js b/api/js/etemplate/et2_widget_description.js index 83cfa4f299..5b2cba1f5c 100644 --- a/api/js/etemplate/et2_widget_description.js +++ b/api/js/etemplate/et2_widget_description.js @@ -1,3 +1,4 @@ +"use strict"; /** * EGroupware eTemplate2 - JS Description object * @@ -6,410 +7,351 @@ * @subpackage api * @link http://www.egroupware.org * @author Andreas Stöckel - * @copyright Stylite 2011 - * @version $Id$ */ - +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; - et2_core_baseWidget; - expose; + /vendor/bower-asset/jquery/dist/jquery.js; + et2_core_baseWidget; + expose; */ - +require("./et2_core_common"); +var et2_core_inheritance_1 = require("./et2_core_inheritance"); +var et2_core_widget_1 = require("./et2_core_widget"); +var et2_core_DOMWidget_1 = require("./et2_core_DOMWidget"); +var et2_core_baseWidget_1 = require("./et2_core_baseWidget"); +require("./et2_types"); /** * Class which implements the "description" XET-Tag - * - * @augments et2_baseWidget */ -var et2_description = (function(){ "use strict"; return expose(et2_baseWidget.extend([et2_IDetachedDOM], -{ - attributes: { - "label": { - "name": "Label", - "default": "", - "type": "string", - "description": "The label is displayed by default in front (for radiobuttons behind) each widget (if not empty). If you want to specify a different position, use a '%s' in the label, which gets replaced by the widget itself. Eg. '%s Name' to have the label Name behind a checkbox. The label can contain variables, as descript for name. If the label starts with a '@' it is replaced by the value of the content-array at this index (with the '@'-removed and after expanding the variables).", - "translate": true - }, - "value": { - "name": "Value", - "type": "string", - "description": "Displayed text", - "translate": "!no_lang", - "default": "" - }, - - /** - * Options converted from the "options"-attribute. - */ - "font_style": { - "name": "Font Style", - "type": "string", - "description": "Style may be a compositum of \"b\" and \"i\" which " + - " renders the text bold and/or italic." - }, - "href": { - "name": "Link URL", - "type": "string", - "description": "Link URL, empty if you don't wan't to display a link." - }, - "activate_links": { - "name": "Replace URLs", - "type": "boolean", - "default": false, - "description": "If set, URLs in the text are automatically replaced " + - "by links" - }, - "for": { - "name": "Label for widget", - "type": "string", - "description": "Marks the text as label for the given widget." - }, - "extra_link_target": { - "name": "Link target", - "type": "string", - "default": "_browser", - "description": "Link target for href attribute" - }, - "extra_link_popup": { - "name": "Popup", - "type": "string", - "description": "widthxheight, if popup should be used, eg. 640x480" - }, - "expose_view":{ - name: "Expose view", - type: "boolean", - default: false, - description: "Clicking on description with href value would popup an expose view, and will show content referenced by href." - }, - mime:{ - name: "Mime type", - type: "string", - default: '', - description: "Mime type of the registered link" - }, - mime_data:{ - name: "Mime data", - type: "string", - default: '', - description: "hash for data stored on service-side with egw_link::(get|set)_data()" - }, - hover_action: { - "name": "hover action", - "type": "js", - "default": et2_no_init, - "description": "JS code which is executed when clicking on action button. This action is explicitly for attached nodes, like in nm." - }, - hover_action_title: { - "name": "hover action title", - "type": "string", - "default": "Edit", - "description": "Text to show as tooltip of defined action" - } - - }, - - legacyOptions: ["font_style", "href", "activate_links", "for", - "extra_link_target", "extra_link_popup", "statustext"], - - /** - * Constructor - * - * @memberOf et2_description - */ - init: function() { - this._super.apply(this, arguments); - - // Create the span/label tag which contains the label text - this.span = jQuery(document.createElement(this.options["for"] ? "label" : "span")) - .addClass("et2_label"); - - - - et2_insertLinkText(this._parseText(this.options.value), this.span[0], - this.options.href ? this.options.extra_link_target : '_blank'); - - this.setDOMNode(this.span[0]); - }, - - transformAttributes: function(_attrs) { - this._super.apply(this, arguments); - - if (this.id) - { - var val = this.getArrayMgr("content").getEntry(this.id); - - if (val) - { - _attrs["value"] = val; - } - } - }, - - doLoadingFinished: function() { - - this._super.apply(this, arguments); - - // Get the real id of the 'for' widget - var for_widget = null; - if (this.options["for"] && ( - (for_widget = this.getParent().getWidgetById(this.options.for)) || - (for_widget = this.getRoot().getWidgetById(this.options.for)) - ) && for_widget && for_widget.id) - { - if(for_widget.dom_id) - { - this.span.attr("for", for_widget.dom_id); - } - else - { - // Target widget is not done yet, need to wait - var tab_deferred = jQuery.Deferred(); - window.setTimeout(function() { - this.span.attr("for", for_widget.dom_id); - tab_deferred.resolve(); - }.bind(this),0); - - return tab_deferred.promise(); - } - } - return true; - }, - - set_label: function(_value) { - // Abort if ther was no change in the label - if (_value == this.label) - { - return; - } - - if (_value) - { - // Create the label container if it didn't exist yet - if (this._labelContainer == null) - { - this._labelContainer = jQuery(document.createElement("label")) - .addClass("et2_label"); - this.getSurroundings().insertDOMNode(this._labelContainer[0]); - } - - // Clear the label container. - this._labelContainer.empty(); - - // Create the placeholder element and set it - var ph = document.createElement("span"); - this.getSurroundings().setWidgetPlaceholder(ph); - - // Split the label at the "%s" - var parts = et2_csvSplit(_value, 2, "%s"); - - // Update the content of the label container - for (var i = 0; i < parts.length; i++) - { - if (parts[i]) - { - this._labelContainer.append(document.createTextNode(parts[i])); - } - if (i == 0) - { - this._labelContainer.append(ph); - } - } - - // add class if label is empty - this._labelContainer.toggleClass('et2_label_empty', !_value || !parts[0]); - } - else - { - // Delete the labelContainer from the surroundings object - if (this._labelContainer) - { - this.getSurroundings().removeDOMNode(this._labelContainer[0]); - } - this._labelContainer = null; - } - - // Update the surroundings in order to reflect the change in the label - this.getSurroundings().update(); - - // Copy the given value - this.label = _value; - }, - /** - * Function to get media content to feed the expose - * @param {type} _value - * @returns {Array|Array.getMedia.mediaContent} - */ - getMedia: function (_value) - { - var base_url = egw.webserverUrl.match(/^\//,'ig')?egw(window).window.location.origin :''; - var mediaContent = []; - if (_value) - { - mediaContent = [{ - title: this.options.label, - href: base_url + _value, - type: this.options.type + "/*", - thumbnail: base_url + _value - }]; - if (_value.match(/\/webdav.php/,'ig')) mediaContent[0]["download_href"] = base_url + _value + '?download'; - } - return mediaContent; - }, - set_value: function(_value) { - if (!_value) _value = ""; - if (!this.options.no_lang) _value = this.egw().lang(_value); - if (this.options.value && (this.options.value+"").indexOf('%s') != -1) - { - _value = this.options.value.replace(/%s/g, _value); - } - et2_insertLinkText(this._parseText(_value), - this.span[0], - this.options.href ? this.options.extra_link_target : '_blank' - ); - // Add hover action button (Edit) - if (this.options.hover_action) - { - this._build_hover_action(); - } - if(this.options.extra_link_popup || this.options.mime) - { - var href = this.options.href; - var mime_data = this.options.mime_data; - var self= this; - var $span = this.options.mime_data? jQuery(this.span): jQuery('a',this.span); - $span.click(function(e) { - if (self.options.expose_view && typeof self.options.mime !='undefined' && self.options.mime.match(self.mime_regexp,'ig')) - { - self._init_blueimp_gallery(e, href); - } - else - { - egw(window).open_link(mime_data || href, self.options.extra_link_target, self.options.extra_link_popup, null, null, self.options.mime); - } - e.preventDefault(); - return false; - }); - } - }, - - _parseText: function(_value) { - if (this.options.href) - { - var href = this.options.href; - if (href.indexOf('/')==-1 && href.split('.').length >= 3 && - !(href.indexOf('mailto:')!=-1 || href.indexOf('://') != -1 || href.indexOf('javascript:') != -1) - ) - { - href = "/index.php?menuaction="+href; - } - if (href.charAt(0) == '/') // link relative to eGW - { - href = egw.link(href); - } - return [{ - "href": href, - "text": _value - }]; - } - else if (this.options.activate_links) - { - return et2_activateLinks(_value); - } - else - { - return [_value]; - } - }, - - set_font_style: function(_value) { - this.font_style = _value; - - this.span.toggleClass("et2_bold", _value.indexOf("b") >= 0); - this.span.toggleClass("et2_italic", _value.indexOf("i") >= 0); - }, - - /** - * Code for implementing et2_IDetachedDOM - * - * @param {array} _attrs - */ - getDetachedAttributes: function(_attrs) - { - _attrs.push("value", "class", "href"); - }, - - getDetachedNodes: function() - { - return [this.span[0]]; - }, - - setDetachedAttributes: function(_nodes, _values, _data) - { - // Update the properties - var updateLink = false; - if (typeof _values["href"] != "undefined") - { - updateLink = true; - this.options.href = _values["href"]; - } - - if (typeof _values["value"] != "undefined" || (updateLink && (_values["value"] || this.options.value))) - { - this.span = jQuery(_nodes[0]); - this.set_value(_values["value"]); - } - - if (typeof _values["class"] != "undefined") - { - _nodes[0].setAttribute("class", _values["class"]); - } - - // Add hover action button (Edit), _data is nm's row data - if (this.options.hover_action) - { - this._build_hover_action(_data); - } - }, - - /** - * Builds button for hover action - * @param {object} _data - */ - _build_hover_action: function(_data) - { - var content = _data && _data.content ? _data.content: undefined; - var widget = this; - this.span.off().on('mouseenter', jQuery.proxy(function(event) { - event.stopImmediatePropagation(); - var self = this; - this.span.tooltip({ - items: 'span.et2_label', - position: {my:"right top", at:"left top", collision:"flipfit"}, - tooltipClass: "et2_email_popup", - content: function() - { - return jQuery('') - .on('click', function() { - widget.options.hover_action.call(self, self.widget, content); - }); - }, - close: function( event, ui ) - { - ui.tooltip.hover( - function () { - jQuery(this).stop(true).fadeTo(400, 1); - }, - function () { - jQuery(this).fadeOut("400", function(){ jQuery(this).remove();}); - } - ); - } - }) - .tooltip("open"); - }, {widget: this, span: this.span})); - } -}));}).call(this); -et2_register_widget(et2_description, ["description", "label"]); - +var et2_description = /** @class */ (function (_super) { + __extends(et2_description, _super); + /** + * Constructor + */ + function et2_description(_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.legacyOptions = ["font_style", "href", "activate_links", "for", + "extra_link_target", "extra_link_popup", "statustext"]; + _this._labelContainer = null; + // Create the span/label tag which contains the label text + _this.span = jQuery(document.createElement(_this.options["for"] ? "label" : "span")) + .addClass("et2_label"); + et2_insertLinkText(_this._parseText(_this.options.value), _this.span[0], _this.options.href ? _this.options.extra_link_target : '_blank'); + _this.setDOMNode(_this.span[0]); + return _this; + } + et2_description.prototype.transformAttributes = function (_attrs) { + _super.prototype.transformAttributes.call(this, _attrs); + if (this.id) { + var val = this.getArrayMgr("content").getEntry(this.id); + if (val) { + _attrs["value"] = val; + } + } + }; + et2_description.prototype.doLoadingFinished = function () { + _super.prototype.doLoadingFinished.call(this); + // Get the real id of the 'for' widget + var for_widget = null; + if (this.options["for"] && ((for_widget = this.getParent().getWidgetById(this.options.for)) || + (for_widget = this.getRoot().getWidgetById(this.options.for))) && for_widget && for_widget.id) { + if (for_widget.dom_id) { + this.span.attr("for", for_widget.dom_id); + } + else { + // Target widget is not done yet, need to wait + var tab_deferred = jQuery.Deferred(); + window.setTimeout(function () { + this.span.attr("for", for_widget.dom_id); + tab_deferred.resolve(); + }.bind(this), 0); + return tab_deferred.promise(); + } + } + return true; + }; + et2_description.prototype.set_label = function (_value) { + // Abort if ther was no change in the label + if (_value == this.label) { + return; + } + if (_value) { + // Create the label container if it didn't exist yet + if (this._labelContainer == null) { + this._labelContainer = jQuery(document.createElement("label")) + .addClass("et2_label"); + this.getSurroundings().insertDOMNode(this._labelContainer[0]); + } + // Clear the label container. + this._labelContainer.empty(); + // Create the placeholder element and set it + var ph = document.createElement("span"); + this.getSurroundings().setWidgetPlaceholder(ph); + // Split the label at the "%s" + var parts = et2_csvSplit(_value, 2, "%s"); + // Update the content of the label container + for (var i = 0; i < parts.length; i++) { + if (parts[i]) { + this._labelContainer.append(document.createTextNode(parts[i])); + } + if (i == 0) { + this._labelContainer.append(ph); + } + } + // add class if label is empty + this._labelContainer.toggleClass('et2_label_empty', !_value || !parts[0]); + } + else { + // Delete the labelContainer from the surroundings object + if (this._labelContainer) { + this.getSurroundings().removeDOMNode(this._labelContainer[0]); + } + this._labelContainer = null; + } + // Update the surroundings in order to reflect the change in the label + this.getSurroundings().update(); + // Copy the given value + this.label = _value; + }; + /** + * Function to get media content to feed the expose + * @param {type} _value + * @returns {Array|Array.getMedia.mediaContent} + */ + et2_description.prototype.getMedia = function (_value) { + var base_url = egw.webserverUrl.match(/^\//, 'ig') ? egw(window).window.location.origin : ''; + var mediaContent = []; + if (_value) { + mediaContent = [{ + title: this.options.label, + href: base_url + _value, + type: this.options.type + "/*", + thumbnail: base_url + _value + }]; + if (_value.match(/\/webdav.php/, 'ig')) + mediaContent[0]["download_href"] = base_url + _value + '?download'; + } + return mediaContent; + }; + et2_description.prototype.set_value = function (_value) { + if (!_value) + _value = ""; + if (!this.options.no_lang) + _value = this.egw().lang(_value); + if (this.options.value && (this.options.value + "").indexOf('%s') != -1) { + _value = this.options.value.replace(/%s/g, _value); + } + et2_insertLinkText(this._parseText(_value), this.span[0], this.options.href ? this.options.extra_link_target : '_blank'); + // Add hover action button (Edit) + if (this.options.hover_action) { + this._build_hover_action(); + } + if (this.options.extra_link_popup || this.options.mime) { + var href = this.options.href; + var mime_data = this.options.mime_data; + var self = this; + var $span = this.options.mime_data ? jQuery(this.span) : jQuery('a', this.span); + $span.click(function (e) { + if (self.options.expose_view && typeof self.options.mime != 'undefined' && self.options.mime.match(self.mime_regexp, 'ig')) { + // ToDoExpose: self._init_blueimp_gallery(e, href); + } + else { + egw(window).open_link(mime_data || href, self.options.extra_link_target, self.options.extra_link_popup, null, null, self.options.mime); + } + e.preventDefault(); + return false; + }); + } + }; + et2_description.prototype._parseText = function (_value) { + if (this.options.href) { + var href = this.options.href; + if (href.indexOf('/') == -1 && href.split('.').length >= 3 && + !(href.indexOf('mailto:') != -1 || href.indexOf('://') != -1 || href.indexOf('javascript:') != -1)) { + href = "/index.php?menuaction=" + href; + } + if (href.charAt(0) == '/') // link relative to eGW + { + href = egw.link(href); + } + return [{ + "href": href, + "text": _value + }]; + } + else if (this.options.activate_links) { + return et2_activateLinks(_value); + } + else { + return [_value]; + } + }; + et2_description.prototype.set_font_style = function (_value) { + this.font_style = _value; + this.span.toggleClass("et2_bold", _value.indexOf("b") >= 0); + this.span.toggleClass("et2_italic", _value.indexOf("i") >= 0); + }; + /** + * Code for implementing et2_IDetachedDOM + * + * @param {array} _attrs + */ + et2_description.prototype.getDetachedAttributes = function (_attrs) { + _attrs.push("value", "class", "href"); + }; + et2_description.prototype.getDetachedNodes = function () { + return [this.span[0]]; + }; + et2_description.prototype.setDetachedAttributes = function (_nodes, _values, _data) { + // Update the properties + var updateLink = false; + if (typeof _values["href"] != "undefined") { + updateLink = true; + this.options.href = _values["href"]; + } + if (typeof _values["value"] != "undefined" || (updateLink && (_values["value"] || this.options.value))) { + this.span = jQuery(_nodes[0]); + this.set_value(_values["value"]); + } + if (typeof _values["class"] != "undefined") { + _nodes[0].setAttribute("class", _values["class"]); + } + // Add hover action button (Edit), _data is nm's row data + if (this.options.hover_action) { + this._build_hover_action(_data); + } + }; + /** + * Builds button for hover action + * @param {object} _data + */ + et2_description.prototype._build_hover_action = function (_data) { + var content = _data && _data.content ? _data.content : undefined; + var widget = this; + this.span.off().on('mouseenter', jQuery.proxy(function (event) { + event.stopImmediatePropagation(); + var self = this; + this.span.tooltip({ + items: 'span.et2_label', + position: { my: "right top", at: "left top", collision: "flipfit" }, + tooltipClass: "et2_email_popup", + content: function () { + return jQuery('') + .on('click', function () { + widget.options.hover_action.call(self, self.widget, content); + }); + }, + close: function (event, ui) { + ui.tooltip.hover(function () { + jQuery(this).stop(true).fadeTo(400, 1); + }, function () { + jQuery(this).fadeOut("400", function () { jQuery(this).remove(); }); + }); + } + }) + .tooltip("open"); + }, { widget: this, span: this.span })); + }; + et2_description._attributes = { + "label": { + "name": "Label", + "default": "", + "type": "string", + "description": "The label is displayed by default in front (for radiobuttons behind) each widget (if not empty). If you want to specify a different position, use a '%s' in the label, which gets replaced by the widget itself. Eg. '%s Name' to have the label Name behind a checkbox. The label can contain variables, as descript for name. If the label starts with a '@' it is replaced by the value of the content-array at this index (with the '@'-removed and after expanding the variables).", + "translate": true + }, + "value": { + "name": "Value", + "type": "string", + "description": "Displayed text", + "translate": "!no_lang", + "default": "" + }, + /** + * Options converted from the "options"-attribute. + */ + "font_style": { + "name": "Font Style", + "type": "string", + "description": "Style may be a compositum of \"b\" and \"i\" which " + + " renders the text bold and/or italic." + }, + "href": { + "name": "Link URL", + "type": "string", + "description": "Link URL, empty if you don't wan't to display a link." + }, + "activate_links": { + "name": "Replace URLs", + "type": "boolean", + "default": false, + "description": "If set, URLs in the text are automatically replaced " + + "by links" + }, + "for": { + "name": "Label for widget", + "type": "string", + "description": "Marks the text as label for the given widget." + }, + "extra_link_target": { + "name": "Link target", + "type": "string", + "default": "_browser", + "description": "Link target for href attribute" + }, + "extra_link_popup": { + "name": "Popup", + "type": "string", + "description": "widthxheight, if popup should be used, eg. 640x480" + }, + "expose_view": { + name: "Expose view", + type: "boolean", + default: false, + description: "Clicking on description with href value would popup an expose view, and will show content referenced by href." + }, + mime: { + name: "Mime type", + type: "string", + default: '', + description: "Mime type of the registered link" + }, + mime_data: { + name: "Mime data", + type: "string", + default: '', + description: "hash for data stored on service-side with egw_link::(get|set)_data()" + }, + hover_action: { + "name": "hover action", + "type": "js", + "default": et2_no_init, + "description": "JS code which is executed when clicking on action button. This action is explicitly for attached nodes, like in nm." + }, + hover_action_title: { + "name": "hover action title", + "type": "string", + "default": "Edit", + "description": "Text to show as tooltip of defined action" + } + }; + return et2_description; +}(et2_core_baseWidget_1.et2_baseWidget)); +et2_core_widget_1.et2_register_widget(et2_description, ["description", "label"]); +//# sourceMappingURL=et2_widget_description.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