Fix namespaces were not processed

This commit is contained in:
nathangray 2020-01-29 14:29:06 -07:00
parent ffae3f2e17
commit b6e87f0887
14 changed files with 122 additions and 40 deletions

View File

@ -184,11 +184,6 @@ export class et2_widget extends ClassWithAttributes
options: WidgetConfig;
readonly: boolean;
/**
* Set this variable to true if this widget can have namespaces
*/
createNamespace: boolean = false;
/**
* Widget constructor
*
@ -237,7 +232,7 @@ export class et2_widget extends ClassWithAttributes
if (_attrs["id"]) {
// Create a namespace for this object
if (this.createNamespace) {
if (this._createNamespace()) {
this.checkCreateNamespace();
}
}
@ -621,7 +616,7 @@ Comment this out (for now)
var data = this.getArrayMgr("modifications").getEntry(this.id);
// Check for already inside namespace
if (this.createNamespace && this.getArrayMgr("modifications").perspectiveData.owner == this) {
if (this._createNamespace() && this.getArrayMgr("modifications").perspectiveData.owner == this) {
data = this.getArrayMgr("modifications").data;
}
if (typeof data === 'object') {
@ -1001,6 +996,19 @@ Comment this out (for now)
}
}
/**
* Widgets that do support a namespace should override and return true.
*
* Since a private attribute doesn't get instanciated properly before it's needed,
* we use a method so we can get what we need while still in the constructor.
*
* @private
*/
protected _createNamespace() : boolean
{
return false;
}
/**
* This is used and therefore it we can not (yet) make it private
*
@ -1043,7 +1051,7 @@ Comment this out (for now)
var path = this.getArrayMgr("content").getPath();
// Prevent namespaced widgets with value from going an extra layer deep
if (this.id && this.createNamespace && path[path.length - 1] == this.id) path.pop();
if (this.id && this._createNamespace() && path[path.length - 1] == this.id) path.pop();
return path;
}

View File

@ -62,6 +62,14 @@ var et2_core_baseWidget_1 = require("./et2_core_baseWidget");
var et2_core_inputWidget_1 = require("./et2_core_inputWidget");
var et2_widget_selectbox_1 = require("./et2_widget_selectbox");
var et2_core_inheritance_1 = require("./et2_core_inheritance");
var et2_INextmatchHeader = "et2_INextmatchHeader";
function implements_et2_INextmatchHeader(obj) {
return implements_methods(obj, ["setNextmatch"]);
}
var et2_INextmatchSortable = "et2_INextmatchSortable";
function implements_et2_INextmatchSortable(obj) {
return implements_methods(obj, ["setSortmode"]);
}
/**
* Class which implements the "nextmatch" XET-Tag
*
@ -90,7 +98,6 @@ var et2_nextmatch = /** @class */ (function (_super_1) {
*/
function et2_nextmatch(_parent, _attrs, _child) {
var _this = _super_1.call(this, _parent, _attrs, et2_core_inheritance_1.ClassWithAttributes.extendAttributes(et2_nextmatch._attributes, _child || {})) || this;
_this.createNamespace = true;
_this.activeFilters = { col_filter: {} };
_this.columns = [];
// keeps sorted columns
@ -528,6 +535,13 @@ var et2_nextmatch = /** @class */ (function (_super_1) {
return this.options.onselect.call(this, this.getSelection().ids, this);
}
};
/**
* Nextmatch needs a namespace
* @private
*/
et2_nextmatch.prototype._createNamespace = function () {
return true;
};
/**
* Create the dynamic height so nm fills all available space
*
@ -895,13 +909,17 @@ var et2_nextmatch = /** @class */ (function (_super_1) {
_colData.splice(remove_action_index, remove_action_index);
}
// Create the column manager and update the grid container
this.dataview.setColumns(columnData);
// TODO this.dataview.setColumns(columnData);
for (var x = 0; x < _row.length; x++) {
// Append the widget to this container
this.addChild(_row[x].widget);
}
// Create the nextmatch row provider
this.rowProvider = new et2_nextmatch_rowProvider(this.dataview.rowProvider, this._getSubgrid, this);
/* TODO
this.rowProvider = new et2_nextmatch_rowProvider(
this.dataview.rowProvider, this._getSubgrid, this);
*/
// Register handler to update preferences when column properties are changed
var self = this;
this.dataview.onUpdateColumns = function () {
@ -945,6 +963,8 @@ var et2_nextmatch = /** @class */ (function (_super_1) {
columnWidgets[x].align = _row[x].align;
}
}
return;
// TODO
this.rowProvider.setDataRowTemplate(columnWidgets, _rowData, this);
// Create the grid controller
this.controller = new et2_nextmatch_controller(null, this.egw(), this.getInstanceManager().etemplate_exec_id, this, null, this.dataview.grid, this.rowProvider, this.options.settings.action_links, null, this.options.actions);
@ -1425,7 +1445,7 @@ var et2_nextmatch = /** @class */ (function (_super_1) {
}
// Free the template again, but don't remove it
setTimeout(function () {
template.free();
template.destroy();
}, 1);
// Call the "setNextmatch" function of all registered
// INextmatchHeader widgets. This updates this.activeFilters.col_filters according
@ -1434,10 +1454,10 @@ var et2_nextmatch = /** @class */ (function (_super_1) {
_node.setNextmatch(this);
}, this, et2_INextmatchHeader);
// Set filters to current values
this.controller.setFilters(this.activeFilters);
// TODO this.controller.setFilters(this.activeFilters);
// If no data was sent from the server, and num_rows is 0, the nm will be empty.
// This triggers a cache check.
if (!this.options.settings.num_rows) {
if (!this.options.settings.num_rows && this.controller) {
this.controller.update();
}
// Load the default sort order
@ -2053,9 +2073,12 @@ var et2_nextmatch_header_bar = /** @class */ (function (_super_1) {
this._createHeader();
}
// Bind row count
/* TODO
this.nextmatch.dataview.grid.setInvalidateCallback(function () {
this.count_total.text(this.nextmatch.dataview.grid.getTotalCount() + "");
}, this);
*/
};
/**
* Actions are handled by the controller, so ignore these
@ -2644,7 +2667,8 @@ var et2_nextmatch_customfields = /** @class */ (function (_super_1) {
* Build widgets for header - sortable for numeric, text, etc., filterables for selectbox, radio
*/
et2_nextmatch_customfields.prototype.loadFields = function () {
if (this.nextmatch == null) {
// TODO if(this.nextmatch == null)
{
// not ready yet
return;
}
@ -2759,7 +2783,7 @@ var et2_nextmatch_customfields = /** @class */ (function (_super_1) {
if (visible.length) {
name += "_" + visible.join("_");
}
else {
else if (this.rows) {
// None hidden means all visible
jQuery(this.rows[field_name]).parent().parent().children().show();
}

View File

@ -54,7 +54,7 @@ import {ClassWithAttributes} from "./et2_core_inheritance";
/**
* Interface all special nextmatch header elements have to implement.
*/
interface et2_INextmatchHeader {
export interface et2_INextmatchHeader {
/**
* The 'setNextmatch' function is called by the parent nextmatch widget
@ -65,12 +65,22 @@ interface et2_INextmatchHeader {
*/
setNextmatch(nextmatch : et2_nextmatch)
}
var et2_INextmatchHeader = "et2_INextmatchHeader";
function implements_et2_INextmatchHeader(obj : et2_widget)
{
return implements_methods(obj, ["setNextmatch"]);
}
interface et2_INextmatchSortable{
export interface et2_INextmatchSortable{
setSortmode(_sort_mode)
}
var et2_INextmatchSortable = "et2_INextmatchSortable";
function implements_et2_INextmatchSortable(obj : et2_widget)
{
return implements_methods(obj, ["setSortmode"]);
}
/**
* Class which implements the "nextmatch" XET-Tag
@ -182,7 +192,6 @@ export class et2_nextmatch extends et2_DOMWidget implements et2_IResizeable, et2
private selectPopup: any;
public static legacyOptions = ["template","hide_header","header_left","header_right"];
createNamespace : boolean = true;
private template: any;
columns: {widget: et2_widget}[];
@ -788,6 +797,15 @@ export class et2_nextmatch extends et2_DOMWidget implements et2_IResizeable, et2
}
}
/**
* Nextmatch needs a namespace
* @private
*/
protected _createNamespace(): boolean
{
return true;
}
/**
* Create the dynamic height so nm fills all available space
*
@ -1251,7 +1269,7 @@ export class et2_nextmatch extends et2_DOMWidget implements et2_IResizeable, et2
}
// Create the column manager and update the grid container
this.dataview.setColumns(columnData);
// TODO this.dataview.setColumns(columnData);
for (var x = 0; x < _row.length; x++)
{
@ -1260,9 +1278,12 @@ export class et2_nextmatch extends et2_DOMWidget implements et2_IResizeable, et2
}
// Create the nextmatch row provider
/* TODO
this.rowProvider = new et2_nextmatch_rowProvider(
this.dataview.rowProvider, this._getSubgrid, this);
*/
// Register handler to update preferences when column properties are changed
var self = this;
this.dataview.onUpdateColumns = function() {
@ -1321,6 +1342,8 @@ export class et2_nextmatch extends et2_DOMWidget implements et2_IResizeable, et2
}
}
return;
// TODO
this.rowProvider.setDataRowTemplate(columnWidgets, _rowData, this);
@ -1946,7 +1969,7 @@ export class et2_nextmatch extends et2_DOMWidget implements et2_IResizeable, et2
// Free the template again, but don't remove it
setTimeout(function() {
template.free();
template.destroy();
},1);
// Call the "setNextmatch" function of all registered
@ -1957,11 +1980,11 @@ export class et2_nextmatch extends et2_DOMWidget implements et2_IResizeable, et2
}, this, et2_INextmatchHeader);
// Set filters to current values
this.controller.setFilters(this.activeFilters);
// TODO this.controller.setFilters(this.activeFilters);
// If no data was sent from the server, and num_rows is 0, the nm will be empty.
// This triggers a cache check.
if(!this.options.settings.num_rows)
if(!this.options.settings.num_rows && this.controller)
{
this.controller.update();
}
@ -2712,9 +2735,12 @@ class et2_nextmatch_header_bar extends et2_DOMWidget implements et2_INextmatchHe
}
// Bind row count
/* TODO
this.nextmatch.dataview.grid.setInvalidateCallback(function () {
this.count_total.text(this.nextmatch.dataview.grid.getTotalCount() + "");
}, this);
*/
}
/**
@ -3433,7 +3459,7 @@ export class et2_nextmatch_customfields extends et2_container implements et2_INe
*/
loadFields( )
{
if(this.nextmatch == null)
// TODO if(this.nextmatch == null)
{
// not ready yet
return;
@ -3581,7 +3607,7 @@ export class et2_nextmatch_customfields extends et2_container implements et2_INe
if(visible.length) {
name +="_"+ visible.join("_");
}
else
else if (this.rows)
{
// None hidden means all visible
jQuery(this.rows[field_name]).parent().parent().children().show();

View File

@ -58,8 +58,6 @@ declare class et2_customfields_list extends et2_valueWidget {
public customfields : any;
set_visible(visible : boolean);
}
declare var et2_INextmatchHeader : any;
declare var et2_INextmatchSortable : any;
declare var et2_nextmatch : any;
declare var et2_nextmatch_header_bar : any;
declare var et2_nextmatch_header : any;

View File

@ -47,13 +47,15 @@ var et2_box = /** @class */ (function (_super) {
*/
function et2_box(_parent, _attrs, _child) {
var _this = _super.call(this, _parent, _attrs, _child) || this;
_this.createNamespace = true;
_this.div = jQuery(document.createElement("div"))
.addClass("et2_" + _this.getType())
.addClass("et2_box_widget");
_this.setDOMNode(_this.div[0]);
return _this;
}
et2_box.prototype._createNamespace = function () {
return true;
};
/**
* Overriden so we can check for autorepeating children. We only check for
* $ in the immediate children & grandchildren of this node.

View File

@ -35,7 +35,6 @@ export class et2_box extends et2_baseWidget implements et2_IDetachedDOM
"cols": {"ignore": true}
};
createNamespace: boolean = true;
div: JQuery;
/**
@ -54,6 +53,11 @@ export class et2_box extends et2_baseWidget implements et2_IDetachedDOM
this.setDOMNode(this.div[0]);
}
_createNamespace() : boolean
{
return true;
}
/**
* Overriden so we can check for autorepeating children. We only check for
* $ in the immediate children & grandchildren of this node.

View File

@ -54,7 +54,6 @@ var et2_grid = /** @class */ (function (_super) {
var _this =
// Call the parent constructor
_super.call(this, _parent, _attrs, et2_core_inheritance_1.ClassWithAttributes.extendAttributes(et2_grid._attributes, _child || {})) || this;
_this.createNamespace = true;
// Counters for rows and columns
_this.rowCount = 0;
_this.columnCount = 0;
@ -472,6 +471,9 @@ var et2_grid = /** @class */ (function (_super) {
}
}
};
et2_grid.prototype._createNamespace = function () {
return true;
};
/**
* As the does not fit very well into the default widget structure, we're
* overwriting the loadFromXML function and doing a two-pass reading -
@ -731,8 +733,11 @@ var et2_grid = /** @class */ (function (_super) {
* @param {array} actions [ {ID: attributes..}+] as for set_actions
*/
et2_grid.prototype._link_actions = function (actions) {
// TODO
return;
// Get the top level element for the tree
var objectManager = egw_action_js_1.egw_getAppObjectManager(true);
// @ts-ignore
var objectManager = window.egw_getAppObjectManager(true);
objectManager = objectManager.getObjectById(this.getInstanceManager().uniqueId, 2) || objectManager;
var widget_object = objectManager.getObjectById(this.id);
if (widget_object == null) {

View File

@ -37,8 +37,6 @@ import {
*/
export class et2_grid extends et2_DOMWidget implements et2_IDetachedDOM, et2_IAligned, et2_IResizeable
{
createNamespace: boolean = true;
static readonly _attributes : any = {
// Better to use CSS, no need to warn about it
"border": {
@ -653,6 +651,10 @@ export class et2_grid extends et2_DOMWidget implements et2_IDetachedDOM, et2_IAl
}
}
_createNamespace() : boolean
{
return true;
}
/**
* As the does not fit very well into the default widget structure, we're
* overwriting the loadFromXML function and doing a two-pass reading -
@ -998,8 +1000,11 @@ export class et2_grid extends et2_DOMWidget implements et2_IDetachedDOM, et2_IAl
*/
_link_actions(actions : object[])
{
// TODO
return;
// Get the top level element for the tree
let objectManager = egw_getAppObjectManager(true);
// @ts-ignore
let objectManager = window.egw_getAppObjectManager(true);
objectManager = objectManager.getObjectById(this.getInstanceManager().uniqueId,2) || objectManager;
let widget_object = objectManager.getObjectById(this.id);
if (widget_object == null) {

View File

@ -43,7 +43,6 @@ var et2_hbox = /** @class */ (function (_super) {
*/
function et2_hbox(_parent, _attrs, _child) {
var _this = _super.call(this, _parent, _attrs, et2_core_inheritance_1.ClassWithAttributes.extendAttributes(et2_hbox._attributes, _child || {})) || this;
_this.createNamespace = true;
_this.alignData = {
"hasAlign": false,
"hasLeft": false,
@ -62,6 +61,9 @@ var et2_hbox = /** @class */ (function (_super) {
_super.prototype.setDOMNode.call(_this, _this.div[0]);
return _this;
}
et2_hbox.prototype._createNamespace = function () {
return true;
};
et2_hbox.prototype._buildAlignCells = function () {
if (this.alignData.hasAlign) {
// Check whether we have more than one type of align

View File

@ -24,7 +24,6 @@ import {et2_baseWidget} from "./et2_core_baseWidget";
*/
class et2_hbox extends et2_baseWidget
{
createNamespace: boolean = true;
alignData : any = {
"hasAlign": false,
"hasLeft": false,
@ -55,6 +54,11 @@ class et2_hbox extends et2_baseWidget
super.setDOMNode(this.div[0]);
}
_createNamespace() : boolean
{
return true;
}
_buildAlignCells() {
if (this.alignData.hasAlign)
{

View File

@ -264,7 +264,6 @@ var et2_radioGroup = /** @class */ (function (_super) {
var _this =
// Call the inherited constructor
_super.call(this, _parent, _attrs, et2_core_inheritance_1.ClassWithAttributes.extendAttributes(et2_radioGroup._attributes, _child || {})) || this;
_this.createNamespace = false;
_this.node = null;
_this.value = null;
_this.node = jQuery(document.createElement("div"))

View File

@ -314,7 +314,6 @@ class et2_radioGroup extends et2_valueWidget implements et2_IDetachedDOM
}
};
createNamespace : boolean = false;
node : JQuery = null;
value : any = null;
/**

View File

@ -47,7 +47,6 @@ var et2_template = /** @class */ (function (_super) {
var _this =
// Call the inherited constructor
_super.call(this, _parent, _attrs, et2_core_inheritance_1.ClassWithAttributes.extendAttributes(et2_template._attributes, _child || {})) || this;
_this.createNamespace = true;
// Set this early, so it's available for creating namespace
if (_attrs.content) {
_this.content = _attrs.content;
@ -148,6 +147,9 @@ var et2_template = /** @class */ (function (_super) {
this.id = old_id;
}
};
et2_template.prototype._createNamespace = function () {
return true;
};
et2_template.prototype.getDOMNode = function () {
return this.div;
};

View File

@ -70,7 +70,6 @@ class et2_template extends et2_DOMWidget
}
};
createNamespace: boolean = true;
content: string;
div: HTMLDivElement;
loading: JQueryDeferred<unknown>;
@ -203,6 +202,11 @@ class et2_template extends et2_DOMWidget
}
}
_createNamespace() : boolean
{
return true;
}
getDOMNode()
{
return this.div;