mirror of
https://github.com/EGroupware/egroupware.git
synced 2025-03-03 17:41:27 +01:00
Added code for creating widget-rows in the dataview
This commit is contained in:
parent
366bad914d
commit
d037187234
@ -151,7 +151,7 @@ var et2_DOMWidget = et2_widget.extend(et2_IDOMNode, {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Append this node at its index
|
// Append this node at its index
|
||||||
var idx = this._parent ? this._parent.getChildren().indexOf(this) : -1;
|
var idx = this.getDOMIndex();
|
||||||
if (idx < 0 || idx >= this.parentNode.childNodes.length - 1)
|
if (idx < 0 || idx >= this.parentNode.childNodes.length - 1)
|
||||||
{
|
{
|
||||||
this.parentNode.appendChild(node);
|
this.parentNode.appendChild(node);
|
||||||
@ -210,6 +210,31 @@ var et2_DOMWidget = et2_widget.extend(et2_IDOMNode, {
|
|||||||
return this.parentNode;
|
return this.parentNode;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the index of this element in the DOM tree
|
||||||
|
*/
|
||||||
|
getDOMIndex: function() {
|
||||||
|
if (this._parent)
|
||||||
|
{
|
||||||
|
var idx = 0;
|
||||||
|
var children = this._parent.getChildren();
|
||||||
|
|
||||||
|
for (var i = 0; i < children.length; i++)
|
||||||
|
{
|
||||||
|
if (children[i] == this)
|
||||||
|
{
|
||||||
|
return idx;
|
||||||
|
}
|
||||||
|
else if (children[i].isInTree())
|
||||||
|
{
|
||||||
|
idx++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the id of the DOM-Node.
|
* Sets the id of the DOM-Node.
|
||||||
*/
|
*/
|
||||||
|
@ -43,7 +43,6 @@ var et2_arrayMgr = Class.extend({
|
|||||||
this.perspectiveData = {
|
this.perspectiveData = {
|
||||||
"owner": null,
|
"owner": null,
|
||||||
"key": null,
|
"key": null,
|
||||||
"col": 0,
|
|
||||||
"row": 0
|
"row": 0
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -217,7 +216,7 @@ var et2_arrayMgr = Class.extend({
|
|||||||
return et2_evalBool(val);
|
return et2_evalBool(val);
|
||||||
},
|
},
|
||||||
|
|
||||||
openPerspective: function(_owner, _root, _col, _row)
|
openPerspective: function(_owner, _root, _row)
|
||||||
{
|
{
|
||||||
// Get the root node
|
// Get the root node
|
||||||
var root = typeof _root == "string" ? this.data[_root] :
|
var root = typeof _root == "string" ? this.data[_root] :
|
||||||
@ -235,10 +234,9 @@ var et2_arrayMgr = Class.extend({
|
|||||||
mgr.perspectiveData.key = _root;
|
mgr.perspectiveData.key = _root;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set the _col and _row parameter
|
// Set _row parameter
|
||||||
if (typeof _col != "undefined" && typeof _row != "undefined")
|
if (typeof _row != "undefined")
|
||||||
{
|
{
|
||||||
mgr.perspectiveData.col = _col;
|
|
||||||
mgr.perspectiveData.row = _row;
|
mgr.perspectiveData.row = _row;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -283,4 +281,26 @@ var et2_readonlysArrayMgr = et2_arrayMgr.extend({
|
|||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new set of array managers
|
||||||
|
*/
|
||||||
|
function et2_arrayMgrs_expand(_owner, _mgrs, _data, _row)
|
||||||
|
{
|
||||||
|
// Create a copy of the given _mgrs associative array
|
||||||
|
var result = {};
|
||||||
|
|
||||||
|
// Merge the given data associative array into the existing array managers
|
||||||
|
for (var key in _data)
|
||||||
|
{
|
||||||
|
if (typeof _mgrs[key] != "undefined")
|
||||||
|
{
|
||||||
|
// Open a perspective for the given data row
|
||||||
|
result[key] = _mgrs[key].openPerspective(_owner,
|
||||||
|
_data[key], _row);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return the resulting managers object
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -229,10 +229,14 @@ var et2_widget = Class.extend({
|
|||||||
this._parent.removeChild(this);
|
this._parent.removeChild(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Delete all references to other objects
|
// Free the array managers if they belong to this widget
|
||||||
this._children = [];
|
for (var key in this._mgrs)
|
||||||
this._parent = null;
|
{
|
||||||
this._mgrs = {};
|
if (this._mgrs[key] && this._mgrs[key].owner == this)
|
||||||
|
{
|
||||||
|
this._mgrs[key].free();
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -19,12 +19,16 @@
|
|||||||
|
|
||||||
var et2_dataview_dataProvider = Class.extend({
|
var et2_dataview_dataProvider = Class.extend({
|
||||||
|
|
||||||
|
init: function() {
|
||||||
|
this.updateQueue = 0;
|
||||||
|
},
|
||||||
|
|
||||||
getCount: function() {
|
getCount: function() {
|
||||||
return 10000;
|
return 10000;
|
||||||
},
|
},
|
||||||
|
|
||||||
registerDataRow: function(_idx, _dataRow) {
|
registerDataRow: function(_dataRow, _idx) {
|
||||||
var row = {
|
/* var row = {
|
||||||
"type": "dataRow",
|
"type": "dataRow",
|
||||||
"data": {
|
"data": {
|
||||||
"ts_title": "Row " + _idx
|
"ts_title": "Row " + _idx
|
||||||
@ -41,7 +45,12 @@ var et2_dataview_dataProvider = Class.extend({
|
|||||||
}
|
}
|
||||||
|
|
||||||
window.setTimeout(function() {_dataRow.updateData(row); },
|
window.setTimeout(function() {_dataRow.updateData(row); },
|
||||||
Math.round(rnd / 2));
|
Math.round(rnd / 2));*/
|
||||||
|
|
||||||
|
|
||||||
|
// 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);
|
||||||
},
|
},
|
||||||
|
|
||||||
unregisterDataRow: function(_dataRow) {
|
unregisterDataRow: function(_dataRow) {
|
||||||
|
@ -28,7 +28,7 @@ var ET2_GRID_VIEW_EXT = 25;
|
|||||||
/**
|
/**
|
||||||
* Determines the timeout after which the scroll-event is processed.
|
* Determines the timeout after which the scroll-event is processed.
|
||||||
*/
|
*/
|
||||||
var ET2_GRID_SCROLL_TIMEOUT = 25;
|
var ET2_GRID_SCROLL_TIMEOUT = 100;
|
||||||
|
|
||||||
var partitionTree = null;
|
var partitionTree = null;
|
||||||
|
|
||||||
@ -46,7 +46,8 @@ var et2_dataview_grid = Class.extend(et2_dataview_IViewRange, {
|
|||||||
* classes.
|
* classes.
|
||||||
* @param _avgHeight is the starting average height of the column rows.
|
* @param _avgHeight is the starting average height of the column rows.
|
||||||
*/
|
*/
|
||||||
init: function(_parent, _outerId, _columnIds, _dataProvider, _avgHeight) {
|
init: function(_parent, _outerId, _columnIds, _dataProvider, _rowProvider,
|
||||||
|
_avgHeight) {
|
||||||
|
|
||||||
// If the parent is given, copy all other parameters from it
|
// If the parent is given, copy all other parameters from it
|
||||||
if (_parent != null)
|
if (_parent != null)
|
||||||
@ -63,12 +64,9 @@ var et2_dataview_grid = Class.extend(et2_dataview_IViewRange, {
|
|||||||
this._outerId = _outerId;
|
this._outerId = _outerId;
|
||||||
this._columnIds = _columnIds;
|
this._columnIds = _columnIds;
|
||||||
this._dataProvider = _dataProvider;
|
this._dataProvider = _dataProvider;
|
||||||
|
this._rowProvider = _rowProvider;
|
||||||
this._avgHeight = _avgHeight;
|
this._avgHeight = _avgHeight;
|
||||||
|
|
||||||
// Create the row provider
|
|
||||||
this._rowProvider = new et2_dataview_rowProvider(_outerId,
|
|
||||||
_columnIds);
|
|
||||||
|
|
||||||
this._scrollHeight = 0;
|
this._scrollHeight = 0;
|
||||||
this._scrollTimeout = null;
|
this._scrollTimeout = null;
|
||||||
}
|
}
|
||||||
@ -112,9 +110,8 @@ var et2_dataview_grid = Class.extend(et2_dataview_IViewRange, {
|
|||||||
// Stop the rebuild timer
|
// Stop the rebuild timer
|
||||||
window.clearInterval(this._rebuildTimer);
|
window.clearInterval(this._rebuildTimer);
|
||||||
|
|
||||||
// Free the partition tree and the row provider
|
// Free the partition tree
|
||||||
this._partitionTree.free();
|
this._partitionTree.free();
|
||||||
this._rowProvider.free();
|
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -52,6 +52,7 @@ var et2_dataview_gridContainer = Class.extend({
|
|||||||
this.columnNodes = []; // Array with the header containers
|
this.columnNodes = []; // Array with the header containers
|
||||||
this.columns = [];
|
this.columns = [];
|
||||||
this.columnMgr = null;
|
this.columnMgr = null;
|
||||||
|
this.rowProvider = null;
|
||||||
|
|
||||||
this.grid = null;
|
this.grid = null;
|
||||||
|
|
||||||
@ -80,6 +81,12 @@ var et2_dataview_gridContainer = Class.extend({
|
|||||||
this.grid.free();
|
this.grid.free();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Free the row provider
|
||||||
|
if (this.rowProvider)
|
||||||
|
{
|
||||||
|
this.rowProvider.free();
|
||||||
|
}
|
||||||
|
|
||||||
// Detatch the outer element
|
// Detatch the outer element
|
||||||
this.table.remove();
|
this.table.remove();
|
||||||
},
|
},
|
||||||
@ -375,9 +382,17 @@ var et2_dataview_gridContainer = Class.extend({
|
|||||||
colIds[i] = this.columns[i].id;
|
colIds[i] = this.columns[i].id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Create the row provider
|
||||||
|
if (this.rowProvider)
|
||||||
|
{
|
||||||
|
this.rowProvider.free();
|
||||||
|
}
|
||||||
|
|
||||||
|
this.rowProvider = new et2_dataview_rowProvider(this.uniqueId, colIds);
|
||||||
|
|
||||||
// Create the grid class and pass "19" as the starting average row height
|
// Create the grid class and pass "19" as the starting average row height
|
||||||
this.grid = new et2_dataview_grid(null, this.uniqueId, colIds,
|
this.grid = new et2_dataview_grid(null, this.uniqueId, colIds,
|
||||||
this.dataProvider, 19);
|
this.dataProvider, this.rowProvider, 19);
|
||||||
|
|
||||||
// Insert the grid into the DOM-Tree
|
// Insert the grid into the DOM-Tree
|
||||||
this.containerTr.append(this.grid.getJNode());
|
this.containerTr.append(this.grid.getJNode());
|
||||||
|
@ -236,11 +236,9 @@ var et2_dataview_partitionRowNode = et2_dataview_partitionContainerNode.extend({
|
|||||||
init: function(_root, _avgHeight) {
|
init: function(_root, _avgHeight) {
|
||||||
|
|
||||||
var container = new et2_dataview_row(_root.getDataProvider(),
|
var container = new et2_dataview_row(_root.getDataProvider(),
|
||||||
_root.getRowProvider(), this);
|
_root.getRowProvider(), this, _avgHeight);
|
||||||
|
|
||||||
this._super(_root, container);
|
this._super(_root, container);
|
||||||
|
|
||||||
this._avgHeight = _avgHeight;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
initializeContainer: function() {
|
initializeContainer: function() {
|
||||||
|
@ -24,19 +24,66 @@ var et2_dataview_row = et2_dataview_container.extend(et2_dataview_IDataRow, {
|
|||||||
|
|
||||||
this._avgHeight = _avgHeight;
|
this._avgHeight = _avgHeight;
|
||||||
|
|
||||||
|
this.rowWidget = null;
|
||||||
|
this.hasAvgHeight = false;
|
||||||
|
|
||||||
|
// Get the default row object and scale the row to the average height
|
||||||
this.tr = this.rowProvider.getPrototype("default");
|
this.tr = this.rowProvider.getPrototype("default");
|
||||||
|
|
||||||
|
// Append the row
|
||||||
this.appendNode(this.tr);
|
this.appendNode(this.tr);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
destroy: function() {
|
||||||
|
|
||||||
|
// Unregister the row from the data provider
|
||||||
|
this.dataProvider.unregisterDataRow(this);
|
||||||
|
|
||||||
|
// Free the row widget first, if it has been set
|
||||||
|
if (this.rowWidget)
|
||||||
|
{
|
||||||
|
this.rowWidget.free();
|
||||||
|
}
|
||||||
|
|
||||||
|
this._super();
|
||||||
|
},
|
||||||
|
|
||||||
setIdx: function(_idx) {
|
setIdx: function(_idx) {
|
||||||
this._idx = _idx;
|
this._idx = _idx;
|
||||||
|
|
||||||
$j("div:first", this.tr)
|
// Register the row in the data provider
|
||||||
.text(_idx + ":")
|
this.dataProvider.registerDataRow(this, _idx);
|
||||||
.height((_idx % 10) * 10 + 20);
|
|
||||||
|
// Set the default height of the rowWidget has not been immediately
|
||||||
|
// created
|
||||||
|
if (!this.rowWidget)
|
||||||
|
{
|
||||||
|
$j("td:first", this.tr).height(this._avgHeight);
|
||||||
|
this.hasAvgHeight = true;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
updateData: function(_data) {
|
updateData: function(_data) {
|
||||||
|
|
||||||
|
// Reset the height
|
||||||
|
if (this.hasAvgHeight)
|
||||||
|
{
|
||||||
|
$j("td:first", this.tr).height("auto");
|
||||||
|
this.hasAvgHeight = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Free the row widget if it already existed
|
||||||
|
if (this.rowWidget != null)
|
||||||
|
{
|
||||||
|
this.rowWidget.free();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create the row widget - it automatically generates the widgets and
|
||||||
|
// attaches the given data to them
|
||||||
|
this.rowWidget = this.rowProvider.getDataRow(_data, this.tr, this._idx);
|
||||||
|
|
||||||
|
// Invalidate this element
|
||||||
|
this.invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
@ -13,6 +13,9 @@
|
|||||||
/*egw:uses
|
/*egw:uses
|
||||||
jquery.jquery;
|
jquery.jquery;
|
||||||
et2_core_inheritance;
|
et2_core_inheritance;
|
||||||
|
et2_core_interfaces;
|
||||||
|
et2_core_arrayMgr;
|
||||||
|
et2_core_widget;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -27,6 +30,10 @@ var et2_dataview_rowProvider = Class.extend({
|
|||||||
this._columnIds = _columnIds;
|
this._columnIds = _columnIds;
|
||||||
this._prototypes = {};
|
this._prototypes = {};
|
||||||
|
|
||||||
|
this._dataRowTemplate = null;
|
||||||
|
this._mgrs = null;
|
||||||
|
this._rootWidget = null;
|
||||||
|
|
||||||
// Create the default row "prototypes"
|
// Create the default row "prototypes"
|
||||||
this._createFullRowPrototype();
|
this._createFullRowPrototype();
|
||||||
this._createDefaultPrototype();
|
this._createDefaultPrototype();
|
||||||
@ -55,6 +62,25 @@ var et2_dataview_rowProvider = Class.extend({
|
|||||||
return this._prototypes[_name].clone();
|
return this._prototypes[_name].clone();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
setDataRowTemplate: function(_template, _rootWidget) {
|
||||||
|
this._dataRowTemplate = _template;
|
||||||
|
this._rootWidget = _rootWidget;
|
||||||
|
},
|
||||||
|
|
||||||
|
getDataRow: function(_data, _row, _idx) {
|
||||||
|
// Create the row widget
|
||||||
|
var rowWidget = new et2_dataview_rowWidget(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._dataRowTemplate);
|
||||||
|
|
||||||
|
return rowWidget;
|
||||||
|
},
|
||||||
|
|
||||||
/* ---- PRIVATE FUNCTIONS ---- */
|
/* ---- PRIVATE FUNCTIONS ---- */
|
||||||
|
|
||||||
_createFullRowPrototype: function() {
|
_createFullRowPrototype: function() {
|
||||||
@ -93,3 +119,56 @@ var et2_dataview_rowProvider = Class.extend({
|
|||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
var et2_dataview_rowWidget = et2_widget.extend(et2_IDOMNode, {
|
||||||
|
|
||||||
|
init: function(_parent, _row) {
|
||||||
|
// Call the parent constructor with some dummy attributes
|
||||||
|
this._super(_parent, {"id": "", "type": "rowWidget"});
|
||||||
|
|
||||||
|
// Initialize some variables
|
||||||
|
this._widgets = [];
|
||||||
|
|
||||||
|
// Copy the given DOM node
|
||||||
|
this._row = _row;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Copies the given array manager and clones the given widgets and inserts
|
||||||
|
* them into the row which has been passed in the constructor.
|
||||||
|
*/
|
||||||
|
createWidgets: function(_mgrs, _widgets) {
|
||||||
|
// Set the array managers - don't use setArrayMgrs here as this creates
|
||||||
|
// an unnecessary copy of the object
|
||||||
|
this._mgrs = _mgrs;
|
||||||
|
|
||||||
|
// Clone the given the widgets with this element as parent
|
||||||
|
this._widgets = new Array(_widgets.length);
|
||||||
|
for (var i = 0; i < _widgets.length; i++)
|
||||||
|
{
|
||||||
|
this._widgets[i] = _widgets[i].clone(this);
|
||||||
|
this._widgets[i].loadingFinished();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the column node for the given sender
|
||||||
|
*/
|
||||||
|
getDOMNode: function(_sender) {
|
||||||
|
|
||||||
|
if (typeof _sender == "undefined" || !_sender)
|
||||||
|
{
|
||||||
|
return this.row;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var i = 0; i < this._widgets.length; i++)
|
||||||
|
{
|
||||||
|
if (this._widgets[i] == _sender)
|
||||||
|
{
|
||||||
|
return this._row.childNodes[i]; // Return the i-th td tag
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
@ -214,6 +214,27 @@ var et2_nextmatch = et2_DOMWidget.extend(et2_IResizeable, {
|
|||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_parseDataRow: function(_row, _colData) {
|
||||||
|
var columnWidgets = new Array(this.columns.length);
|
||||||
|
|
||||||
|
for (var x = 0; x < columnWidgets.length; x++)
|
||||||
|
{
|
||||||
|
if (typeof _row[x] != "undefined" && _row[x].widget)
|
||||||
|
{
|
||||||
|
columnWidgets[x] = _row[x].widget;
|
||||||
|
|
||||||
|
// Append the widget to this container
|
||||||
|
this.addChild(_row[x].widget);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
columnWidgets[x] = _row[x].widget;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.dataviewContainer.rowProvider.setDataRowTemplate(columnWidgets, this);
|
||||||
|
},
|
||||||
|
|
||||||
_parseGrid: function(_grid) {
|
_parseGrid: function(_grid) {
|
||||||
// Search the rows for a header-row - if one is found, parse it
|
// Search the rows for a header-row - if one is found, parse it
|
||||||
for (var y = 0; y < _grid.rowData.length; y++)
|
for (var y = 0; y < _grid.rowData.length; y++)
|
||||||
@ -222,6 +243,10 @@ var et2_nextmatch = et2_DOMWidget.extend(et2_IResizeable, {
|
|||||||
{
|
{
|
||||||
this._parseHeaderRow(_grid.cells[y], _grid.colData);
|
this._parseHeaderRow(_grid.cells[y], _grid.colData);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this._parseDataRow(_grid.cells[y], _grid.colData);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -62,6 +62,71 @@
|
|||||||
</vbox>
|
</vbox>
|
||||||
<nextmatch-sortheader label="last changed" id="info_datemodified" options="DESC"/>
|
<nextmatch-sortheader label="last changed" id="info_datemodified" options="DESC"/>
|
||||||
</row>
|
</row>
|
||||||
|
<row class="$row_cont[info_cat] $row_cont[class]" valign="top">
|
||||||
|
<hbox align="center" options="5">
|
||||||
|
<image label="$row_cont[info_type]" src="${row}[info_type]"/>
|
||||||
|
<button statustext="Change the status of an entry, eg. close it" label="$row_cont[info_status_label]" id="edit_status[$row_cont[info_id]]" onclick="window.open(egw::link('/index.php','menuaction=infolog.infolog_ui.edit&info_id=$row_cont[info_id]'),'_blank','dependent=yes,width=750,height=600,scrollbars=yes,status=yes'); return false;" image="$row_cont[info_status_label]" ro_image="$row_cont[info_status_label]"/>
|
||||||
|
<button statustext="Change the status of an entry, eg. close it" label="$row_cont[info_percent]" id="edit_percent[$row_cont[info_id]]" onclick="window.open(egw::link('/index.php','menuaction=infolog.infolog_ui.edit&info_id=$row_cont[info_id]'),'_blank','dependent=yes,width=750,height=600,scrollbars=yes,status=yes'); return false;" image="$row_cont[info_percent]"/>
|
||||||
|
<image label="$row_cont[info_percent2]" src="{$row}[info_percent2]" onclick="window.open(egw::link('/index.php','menuaction=infolog.infolog_ui.edit&info_id=$row_cont[info_id]'),'_blank','dependent=yes,width=750,height=600,scrollbars=yes,status=yes'); return false;"/>
|
||||||
|
</hbox>
|
||||||
|
<vbox options="0,0" class="fullWidth">
|
||||||
|
<link label="%s $row_cont[info_addr]" id="${row}[info_link]" options="b"/>
|
||||||
|
<hbox options="0,0">
|
||||||
|
<description id="${row}[info_subject]" no_lang="1" class="$row_cont[sub_class]"/>
|
||||||
|
<description align="right" id="{$row}[info_number]" no_lang="1" class="infoId"/>
|
||||||
|
</hbox>
|
||||||
|
<box class="infoDes">
|
||||||
|
<description id="${row}[info_des]" no_lang="1" options=",,1"/>
|
||||||
|
</box>
|
||||||
|
<link-string id="${row}[filelinks]"/>
|
||||||
|
</vbox>
|
||||||
|
<customfields-list id="$row" class="customfields"/>
|
||||||
|
<menulist>
|
||||||
|
<menupopup type="select-cat" id="${row}[info_cat]" readonly="true"/>
|
||||||
|
</menulist>
|
||||||
|
<vbox cols="1" rows="3" options="0,0,1">
|
||||||
|
<date-time id="${row}[info_startdate]" readonly="true" options=",8" class="fixedHeight"/>
|
||||||
|
<date id="${row}[info_enddate]" readonly="true" class="$row_cont[end_class] fixedHeight"/>
|
||||||
|
<date-time id="${row}[info_datecompleted]" readonly="true" class="fixedHeight"/>
|
||||||
|
</vbox>
|
||||||
|
<vbox cols="1" rows="3" options="0,0">
|
||||||
|
<hbox readonly="true">
|
||||||
|
<hbox readonly="true" options="1,0">
|
||||||
|
<date-duration id="${row}[info_used_time]" readonly="true" options="@duration_format"/>
|
||||||
|
<date-duration id="${row}[info_sum_timesheets]" readonly="true" options="@duration_format" class="timesheet"/>
|
||||||
|
</hbox>
|
||||||
|
<description/>
|
||||||
|
</hbox>
|
||||||
|
<date-duration id="${row}[info_planned_time]" readonly="true" options="@duration_format" span="all" class="planned"/>
|
||||||
|
</vbox>
|
||||||
|
<vbox cols="1" rows="3" options="0,0">
|
||||||
|
<hbox id="r_used_time" options="1,0">
|
||||||
|
<image label="Times" src="timesheet"/>
|
||||||
|
<date-duration id="${row}[info_used_time]" readonly="true" options="@duration_format"/>
|
||||||
|
<date-duration id="${row}[info_sum_timesheets]" readonly="true" options="@duration_format" class="timesheet"/>
|
||||||
|
</hbox>
|
||||||
|
<hbox id="planified" options="1,0">
|
||||||
|
<image label="planned time" src="k_alarm.png"/>
|
||||||
|
<date-duration id="${row}[info_planned_time]" readonly="true" options="@duration_format" span="all" class="planned"/>
|
||||||
|
</hbox>
|
||||||
|
<hbox id="replanified" options="1,0">
|
||||||
|
<image label="Re-planned time" src="agt_reload.png"/>
|
||||||
|
<date-duration id="${row}[info_replanned_time]" readonly="true" options="@duration_format" span="all" class="replanned"/>
|
||||||
|
</hbox>
|
||||||
|
</vbox>
|
||||||
|
<vbox options="0,0">
|
||||||
|
<menulist>
|
||||||
|
<menupopup type="select-account" id="${row}[info_owner]" readonly="true"/>
|
||||||
|
</menulist>
|
||||||
|
<listbox type="select-account" id="${row}[info_responsible]" readonly="true" rows="5"/>
|
||||||
|
</vbox>
|
||||||
|
<vbox options="0" orient="0">
|
||||||
|
<date-time id="${row}[info_datemodified]" readonly="true"/>
|
||||||
|
<menulist>
|
||||||
|
<menupopup type="select-account" id="${row}[info_modifier]" readonly="true"/>
|
||||||
|
</menulist>
|
||||||
|
</vbox>
|
||||||
|
</row>
|
||||||
</rows>
|
</rows>
|
||||||
</grid>
|
</grid>
|
||||||
</template>
|
</template>
|
||||||
|
Loading…
Reference in New Issue
Block a user