forked from extern/egroupware
Expressions in the dataview-rows are now evaluated correctly
This commit is contained in:
parent
f5c5df3299
commit
b1223cb426
@ -13,7 +13,9 @@
|
||||
"use strict";
|
||||
|
||||
/*egw:uses
|
||||
et2_core_common;
|
||||
et2_core_inheritance;
|
||||
et2_core_phpExpressionCompiler;
|
||||
*/
|
||||
|
||||
var et2_arrayMgr = Class.extend({
|
||||
@ -147,6 +149,8 @@ var et2_arrayMgr = Class.extend({
|
||||
return entry;
|
||||
},
|
||||
|
||||
compiledExpressions: {},
|
||||
|
||||
/**
|
||||
* Equivaltent to the boetemplate::expand_name function.
|
||||
*
|
||||
@ -159,13 +163,44 @@ var et2_arrayMgr = Class.extend({
|
||||
|
||||
// Check whether "$" occurs in the given identifier
|
||||
var pos_var = _ident.indexOf('$');
|
||||
if (pos_var >= 0)
|
||||
if (pos_var >= 0 && this.perspectiveData.row != null)
|
||||
{
|
||||
console.log("blub", _ident, this.perspectiveData);
|
||||
if (this.perspectiveData.row !== null)
|
||||
// Get the content array for the current row
|
||||
var row = this.perspectiveData.row;
|
||||
var cont = this.data;
|
||||
var row_cont = cont[row];
|
||||
|
||||
// Check whether the expression has already been compiled - if not,
|
||||
// try to compile it first. If an error occurs, the identifier
|
||||
// function is set to null
|
||||
var proto = this.constructor.prototype;
|
||||
if (typeof proto.compiledExpressions[_ident] == "undefined")
|
||||
{
|
||||
_ident.replace(/\$\{row\}/, this.perspectiveData.row);
|
||||
console.log(_ident);
|
||||
try
|
||||
{
|
||||
proto.compiledExpressions[_ident] = et2_compilePHPExpression(
|
||||
_ident, ["row", "cont", "row_cont"]);
|
||||
}
|
||||
catch(e)
|
||||
{
|
||||
proto.compiledExpressions[_ident] = null;
|
||||
et2_debug("error", "Error while compiling PHP->JS ", e);
|
||||
}
|
||||
}
|
||||
|
||||
// Execute the previously compiled expression, if it is not "null"
|
||||
// because compilation failed. The parameters have to be in the same
|
||||
// order as defined during compilation.
|
||||
if (proto.compiledExpressions[_ident])
|
||||
{
|
||||
try
|
||||
{
|
||||
_ident = proto.compiledExpressions[_ident](row, cont, row_cont);
|
||||
}
|
||||
catch(e)
|
||||
{
|
||||
et2_debug("error", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -289,6 +324,14 @@ var et2_readonlysArrayMgr = et2_arrayMgr.extend({
|
||||
|
||||
/**
|
||||
* Creates a new set of array managers
|
||||
*
|
||||
* @param _owner is the owner object of the array managers - this object (a widget)
|
||||
* will free the array manager
|
||||
* @param _mgrs is the original set of array managers, the array managers are
|
||||
* inside an associative array as recived from et2_widget::getArrayMgrs()
|
||||
* @param _data is an associative array of new data which will be merged into the
|
||||
* existing array managers.
|
||||
* @param _row is the row for which the array managers will be opened.
|
||||
*/
|
||||
function et2_arrayMgrs_expand(_owner, _mgrs, _data, _row)
|
||||
{
|
||||
@ -296,16 +339,17 @@ function et2_arrayMgrs_expand(_owner, _mgrs, _data, _row)
|
||||
var result = {};
|
||||
|
||||
// Merge the given data associative array into the existing array managers
|
||||
for (var key in _data)
|
||||
for (var key in _mgrs)
|
||||
{
|
||||
if (typeof _mgrs[key] != "undefined")
|
||||
result[key] = _mgrs[key];
|
||||
|
||||
if (typeof _data[key] != "undefined")
|
||||
{
|
||||
// Open a perspective for the given data row
|
||||
var rowData = {};
|
||||
rowData[_row] = _data[key];
|
||||
|
||||
result[key] = _mgrs[key].openPerspective(_owner,
|
||||
_data[key], rowData);
|
||||
result[key] = _mgrs[key].openPerspective(_owner, rowData, _row);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -350,7 +350,7 @@
|
||||
if (typeof part == "string")
|
||||
{
|
||||
// Escape all "'" and "\" chars and add the string to the parts array
|
||||
parts.push("'" + part.replace(/'/g, "\\'").replace(/\\/g, "\\\\") + "'");
|
||||
parts.push("'" + part.replace(/\\/g, "\\\\").replace(/'/g, "\\'") + "'");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -51,7 +51,7 @@ var et2_dataview_dataProvider = Class.extend({
|
||||
// All data rows are updated independently of all others - this allows
|
||||
// user input between generation of the widgets.
|
||||
//window.setTimeout(function() {_dataRow.updateData({"readonlys": {"__ALL__": true}});}, 0);
|
||||
_dataRow.updateData({});
|
||||
_dataRow.updateData({"content": {"ts_title": "Idx: " + _idx}});
|
||||
},
|
||||
|
||||
unregisterDataRow: function(_dataRow) {
|
||||
|
@ -315,7 +315,8 @@ var et2_dataview_rowProvider = Class.extend({
|
||||
"row": row[0],
|
||||
"widgets": _widgets,
|
||||
"root": _rootWidget,
|
||||
"seperated": null
|
||||
"seperated": null,
|
||||
"mgrs": _rootWidget.getArrayMgrs()
|
||||
};
|
||||
|
||||
// Create the row widget and insert the given widgets into the row
|
||||
@ -328,7 +329,7 @@ var et2_dataview_rowProvider = Class.extend({
|
||||
// Filter out all widgets which do not implement the et2_IDetachedDOM
|
||||
// interface or do not support all attributes listed in the et2_IDetachedDOM
|
||||
// interface. A warning is issued for all those widgets as they heavily
|
||||
// degrade the performance of the widgets
|
||||
// degrade the performance of the dataview
|
||||
var seperated = rowTemplate.seperated =
|
||||
this._seperateWidgets(variableAttributes);
|
||||
|
||||
@ -344,6 +345,10 @@ var et2_dataview_rowProvider = Class.extend({
|
||||
|
||||
getDataRow: function(_data, _row, _idx) {
|
||||
|
||||
// Create array managers with the given data merged in
|
||||
var mgrs = et2_arrayMgrs_expand(rowWidget, this._template.mgrs,
|
||||
_data, _idx);
|
||||
|
||||
// Insert the widgets into the row which do not provide the functions
|
||||
// to set the _data directly
|
||||
var rowWidget = null;
|
||||
@ -353,10 +358,6 @@ var et2_dataview_rowProvider = Class.extend({
|
||||
var rowWidget = new et2_dataview_rowTemplateWidget(this._rootWidget,
|
||||
_row[0]);
|
||||
|
||||
// Create array managers with the given data merged in
|
||||
var mgrs = et2_arrayMgrs_expand(rowWidget, this._rootWidget.getArrayMgrs(),
|
||||
_data, _idx);
|
||||
|
||||
// Let the row widget create the widgets
|
||||
rowWidget.createWidgets(mgrs, this._template.placeholders);
|
||||
}
|
||||
@ -371,7 +372,7 @@ var et2_dataview_rowProvider = Class.extend({
|
||||
for (var j = 0; j < entry.data.length; j++)
|
||||
{
|
||||
var set = entry.data[i];
|
||||
data[set.attribute] = set.expression + " for " + _idx; // TODO: Parsing of the expression
|
||||
data[set.attribute] = mgrs["content"].expandName(set.expression);
|
||||
}
|
||||
|
||||
// Retrieve all DOM-Nodes
|
||||
|
@ -65,7 +65,7 @@
|
||||
<row class="$row_cont[info_cat] $row_cont[class]" valign="top">
|
||||
<vbox>
|
||||
<description value="Dynamic description tag:" />
|
||||
<description value="${row}" />
|
||||
<description value="$cont[$row][ts_title]" />
|
||||
<button label="This is a button" />
|
||||
</vbox>
|
||||
<description value="test" />
|
||||
|
Loading…
Reference in New Issue
Block a user