mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-11-07 16:44:20 +01:00
Re-commit of 55312, this time with improved support for columns with no label / ID (can not be toggled or resized)
Allow gridview / nextmatch columns to be disabled and not show as options in the column list by sending something from the server. Previously was only parsed & disabled on first load. eg: setting the column disabled=@no_column, then setting no_column=true in the get_rows response to disable it. Note: to re-enable the column ,you must send no_column=false
This commit is contained in:
parent
f0afe953b7
commit
b0eee9d9a4
@ -406,43 +406,50 @@ var et2_dataview = (function(){ "use strict"; return Class.extend({
|
||||
if(this.columnMgr && this.columnMgr.columns[i])
|
||||
{
|
||||
column.addClass(this.columnMgr.columns[i].fixedWidth ? 'fixedWidth' : 'relativeWidth');
|
||||
if(this.columnMgr.columns[i].visibility === ET2_COL_VISIBILITY_ALWAYS_NOSELECT)
|
||||
{
|
||||
column.addClass('noResize');
|
||||
}
|
||||
}
|
||||
|
||||
// make column resizable
|
||||
var enc_column = self.columnMgr.getColumnById(col.id);
|
||||
et2_dataview_makeResizeable(column, function(_w) {
|
||||
if(enc_column.visibility !== ET2_COL_VISIBILITY_ALWAYS_NOSELECT)
|
||||
{
|
||||
et2_dataview_makeResizeable(column, function(_w) {
|
||||
|
||||
// User wants the column to stay where they put it, even for relative
|
||||
// width columns, so set it explicitly first and adjust other relative
|
||||
// columns to match.
|
||||
if(this.relativeWidth)
|
||||
{
|
||||
// Set to selected width
|
||||
this.set_width(_w + "px");
|
||||
self.columnMgr.updated = true;
|
||||
// Just triggers recalculation
|
||||
self.columnMgr.getColumnWidth(0);
|
||||
|
||||
// Set relative widths to match
|
||||
var relative = self.columnMgr.totalWidth - self.columnMgr.totalFixed + _w;
|
||||
this.set_width(_w / relative);
|
||||
for(var i = 0; i < self.columnMgr.columns.length; i++)
|
||||
// User wants the column to stay where they put it, even for relative
|
||||
// width columns, so set it explicitly first and adjust other relative
|
||||
// columns to match.
|
||||
if(this.relativeWidth)
|
||||
{
|
||||
var col = self.columnMgr.columns[i];
|
||||
if(col == this || col.fixedWidth) continue;
|
||||
col.set_width(self.columnMgr.columnWidths[i] / relative);
|
||||
}
|
||||
// Triggers column change callback, which saves
|
||||
self.updateColumns();
|
||||
}
|
||||
else
|
||||
{
|
||||
this.set_width(this.relativeWidth ? (_w / self.columnMgr.totalWidth) : _w + "px");
|
||||
self.columnMgr.updated = true;
|
||||
self.updateColumns();
|
||||
}
|
||||
// Set to selected width
|
||||
this.set_width(_w + "px");
|
||||
self.columnMgr.updated = true;
|
||||
// Just triggers recalculation
|
||||
self.columnMgr.getColumnWidth(0);
|
||||
|
||||
}, enc_column);
|
||||
// Set relative widths to match
|
||||
var relative = self.columnMgr.totalWidth - self.columnMgr.totalFixed + _w;
|
||||
this.set_width(_w / relative);
|
||||
for(var i = 0; i < self.columnMgr.columns.length; i++)
|
||||
{
|
||||
var col = self.columnMgr.columns[i];
|
||||
if(col == this || col.fixedWidth) continue;
|
||||
col.set_width(self.columnMgr.columnWidths[i] / relative);
|
||||
}
|
||||
// Triggers column change callback, which saves
|
||||
self.updateColumns();
|
||||
}
|
||||
else
|
||||
{
|
||||
this.set_width(this.relativeWidth ? (_w / self.columnMgr.totalWidth) : _w + "px");
|
||||
self.columnMgr.updated = true;
|
||||
self.updateColumns();
|
||||
}
|
||||
|
||||
}, enc_column);
|
||||
}
|
||||
|
||||
// Store both nodes in the columnNodes array
|
||||
this.columnNodes.push({
|
||||
|
@ -21,6 +21,7 @@ var ET2_COL_VISIBILITY_ALWAYS = 0;
|
||||
var ET2_COL_VISIBILITY_VISIBLE = 1;
|
||||
var ET2_COL_VISIBILITY_INVISIBLE = 2;
|
||||
var ET2_COL_VISIBILITY_ALWAYS_NOSELECT = 3;
|
||||
var ET2_COL_VISIBILITY_DISABLED = 4;
|
||||
|
||||
/**
|
||||
* Class which stores the data of a single column.
|
||||
@ -251,7 +252,9 @@ var et2_dataview_columns = (function(){ "use strict"; return Class.extend({
|
||||
result.push({
|
||||
"id": this.columns[i].id,
|
||||
"width": this.getColumnWidth(i),
|
||||
"visible": this.columns[i].visibility != ET2_COL_VISIBILITY_INVISIBLE
|
||||
"visible": this.columns[i].visibility !== ET2_COL_VISIBILITY_INVISIBLE &&
|
||||
this.columns[i].visibility !== ET2_COL_VISIBILITY_DISABLED
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
@ -272,6 +275,7 @@ var et2_dataview_columns = (function(){ "use strict"; return Class.extend({
|
||||
result[this.columns[i].id] = {
|
||||
"caption": this.columns[i].caption,
|
||||
"enabled": (this.columns[i].visibility != ET2_COL_VISIBILITY_ALWAYS) &&
|
||||
(this.columns[i].visibility != ET2_COL_VISIBILITY_DISABLED) &&
|
||||
(this.columns[i].type != ET2_COL_TYPE_NAME_ICON_FIXED),
|
||||
"visible": this.columns[i].visibility != ET2_COL_VISIBILITY_INVISIBLE
|
||||
};
|
||||
@ -327,7 +331,9 @@ var et2_dataview_columns = (function(){ "use strict"; return Class.extend({
|
||||
for (var i = 0; i < this.columns.length; i++)
|
||||
{
|
||||
var col = this.columns[i];
|
||||
if (col.visibility != ET2_COL_VISIBILITY_INVISIBLE)
|
||||
if (col.visibility !== ET2_COL_VISIBILITY_INVISIBLE &&
|
||||
col.visibility !== ET2_COL_VISIBILITY_DISABLED
|
||||
)
|
||||
{
|
||||
// Some bounds sanity checking
|
||||
if(col.fixedWidth > tw || col.fixedWidth < 0)
|
||||
@ -356,7 +362,9 @@ var et2_dataview_columns = (function(){ "use strict"; return Class.extend({
|
||||
{
|
||||
var w = 0;
|
||||
var col = this.columns[i];
|
||||
if (col.visibility != ET2_COL_VISIBILITY_INVISIBLE)
|
||||
if (col.visibility != ET2_COL_VISIBILITY_INVISIBLE &&
|
||||
col.visibility !== ET2_COL_VISIBILITY_DISABLED
|
||||
)
|
||||
{
|
||||
if (col._larger)
|
||||
{
|
||||
@ -395,7 +403,8 @@ var et2_dataview_columns = (function(){ "use strict"; return Class.extend({
|
||||
// Pick the first relative column and use it
|
||||
for(columnIndex = 0; columnIndex < this.columns.length; columnIndex++)
|
||||
{
|
||||
if(this.columns[columnIndex].visibility == ET2_COL_VISIBILITY_INVISIBLE ||
|
||||
if(this.columns[columnIndex].visibility === ET2_COL_VISIBILITY_INVISIBLE ||
|
||||
col.visibility === ET2_COL_VISIBILITY_DISABLED ||
|
||||
this.columnWidths[columnIndex] <= 0)
|
||||
{
|
||||
continue;
|
||||
|
@ -850,9 +850,9 @@ var et2_nextmatch = (function(){ "use strict"; return et2_DOMWidget.extend([et2_
|
||||
for(var i = 0; i < _row.length; i++)
|
||||
{
|
||||
colName = '';
|
||||
if(_row[i].disabled)
|
||||
if(_row[i].disabled === true)
|
||||
{
|
||||
_colData[i].disabled = true;
|
||||
_colData[i].visible = false;
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -873,14 +873,14 @@ var et2_nextmatch = (function(){ "use strict"; return et2_DOMWidget.extend([et2_
|
||||
}
|
||||
// Resets field visibility too
|
||||
_row[i].widget._getColumnName();
|
||||
_colData[i].disabled = negated || jQuery.isEmptyObject(_row[i].widget.options.fields);
|
||||
_colData[i].visible = !(negated || jQuery.isEmptyObject(_row[i].widget.options.fields));
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Disable if there are no custom fields
|
||||
if(jQuery.isEmptyObject(_row[i].widget.customfields))
|
||||
{
|
||||
_colData[i].disabled = true;
|
||||
_colData[i].visible = false;
|
||||
continue;
|
||||
}
|
||||
colName = _row[i].widget.id;
|
||||
@ -907,12 +907,12 @@ var et2_nextmatch = (function(){ "use strict"; return et2_DOMWidget.extend([et2_
|
||||
{
|
||||
if(columnDisplay[j] == colName)
|
||||
{
|
||||
_colData[i].disabled = negated;
|
||||
_colData[i].visible = !negated;
|
||||
|
||||
continue RowLoop;
|
||||
}
|
||||
}
|
||||
_colData[i].disabled = !negated;
|
||||
_colData[i].visible = negated;
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -1030,7 +1030,7 @@ var et2_nextmatch = (function(){ "use strict"; return et2_DOMWidget.extend([et2_
|
||||
_row[x].widget = et2_createWidget("label");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Get column display preference
|
||||
this._applyUserPreferences(_row, _colData);
|
||||
|
||||
@ -1047,12 +1047,18 @@ var et2_nextmatch = (function(){ "use strict"; return et2_DOMWidget.extend([et2_
|
||||
"widget": _row[x].widget
|
||||
},_colData[x]);
|
||||
|
||||
|
||||
var visibility = (!_colData[x] || _colData[x].visible) ?
|
||||
ET2_COL_VISIBILITY_VISIBLE :
|
||||
ET2_COL_VISIBILITY_INVISIBLE;
|
||||
if(_colData[x].disabled && _colData[x].disabled !=='' &&
|
||||
this.getArrayMgr("content").parseBoolExpression(_colData[x].disabled))
|
||||
{
|
||||
visibility = ET2_COL_VISIBILITY_DISABLED;
|
||||
}
|
||||
columnData[x] = {
|
||||
"id": "col_" + x,
|
||||
"caption": this._genColumnCaption(_row[x].widget),
|
||||
"visibility": (!_colData[x] || _colData[x].disabled) ?
|
||||
ET2_COL_VISIBILITY_INVISIBLE : ET2_COL_VISIBILITY_VISIBLE,
|
||||
"visibility": visibility,
|
||||
"width": _colData[x] ? _colData[x].width : 0
|
||||
};
|
||||
if(_colData[x].minWidth)
|
||||
@ -1071,6 +1077,11 @@ var et2_nextmatch = (function(){ "use strict"; return et2_DOMWidget.extend([et2_
|
||||
remove_action_index = x;
|
||||
continue;
|
||||
}
|
||||
else if (!colName)
|
||||
{
|
||||
// Unnamed column cannot be toggled or saved
|
||||
columnData[x].visibility = ET2_COL_VISIBILITY_ALWAYS_NOSELECT;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1142,7 +1153,7 @@ var et2_nextmatch = (function(){ "use strict"; return et2_DOMWidget.extend([et2_
|
||||
columnWidgets[x] = _row[x].widget;
|
||||
}
|
||||
// Pass along column alignment
|
||||
if(_row[x].align)
|
||||
if(_row[x].align && columnWidgets[x])
|
||||
{
|
||||
columnWidgets[x].align = _row[x].align;
|
||||
}
|
||||
@ -1295,8 +1306,9 @@ var et2_nextmatch = (function(){ "use strict"; return et2_DOMWidget.extend([et2_
|
||||
{
|
||||
var col = columnMgr.columns[i];
|
||||
var widget = this.columns[i].widget;
|
||||
|
||||
if(col.caption && col.visibility != ET2_COL_VISIBILITY_ALWAYS_NOSELECT)
|
||||
|
||||
if(col.caption && col.visibility !== ET2_COL_VISIBILITY_ALWAYS_NOSELECT &&
|
||||
col.visibility !== ET2_COL_VISIBILITY_DISABLED)
|
||||
{
|
||||
columns[col.id] = col.caption;
|
||||
if(col.visibility == ET2_COL_VISIBILITY_VISIBLE) columns_selected.push(col.id);
|
||||
@ -1369,7 +1381,8 @@ var et2_nextmatch = (function(){ "use strict"; return et2_DOMWidget.extend([et2_
|
||||
for (var i = 0; i < columnMgr.columns.length; i++)
|
||||
{
|
||||
var col = columnMgr.columns[i];
|
||||
if(col.caption && col.visibility != ET2_COL_VISIBILITY_ALWAYS_NOSELECT )
|
||||
if(col.caption && col.visibility !== ET2_COL_VISIBILITY_ALWAYS_NOSELECT &&
|
||||
col.visibility !== ET2_COL_VISIBILITY_DISABLED )
|
||||
{
|
||||
visibility[col.id] = {visible: false};
|
||||
}
|
||||
|
@ -581,6 +581,27 @@ var et2_nextmatch_controller = (function(){ "use strict"; return et2_dataview_co
|
||||
}
|
||||
}
|
||||
}
|
||||
// Might be trying to disable a column
|
||||
var col_refresh = false;
|
||||
for(var column_index = 0; column_index < nm.columns.length; column_index++)
|
||||
{
|
||||
if(typeof nm.columns[column_index].disabled === 'string' &&
|
||||
nm.columns[column_index].disabled[0] === '@')
|
||||
{
|
||||
col_refresh = true;
|
||||
nm.dataview.columnMgr.getColumnById('col_'+column_index)
|
||||
.set_visibility(
|
||||
nm.getArrayMgr('content').parseBoolExpression(nm.columns[column_index].disabled) ?
|
||||
ET2_COL_VISIBILITY_DISABLED :
|
||||
ET2_COL_VISIBILITY_VISIBLE
|
||||
);
|
||||
}
|
||||
}
|
||||
if(col_refresh)
|
||||
{
|
||||
nm.dataview.columnMgr.updated = true;
|
||||
nm.dataview._updateColumns();
|
||||
}
|
||||
|
||||
// If we're doing an autorefresh and the count decreases, preserve the
|
||||
// selection or it will be lost when the grid rows are shuffled. Increases
|
||||
|
@ -107,12 +107,16 @@ var et2_grid = (function(){ "use strict"; return et2_DOMWidget.extend([et2_IDeta
|
||||
// Initialize the cell description objects
|
||||
for (var x = 0; x < w; x++)
|
||||
{
|
||||
// Some columns (nm) we do not parse into a boolean
|
||||
var col_disabled = typeof _colData[x].disabled == 'boolean' ?
|
||||
_colData[x].disabled :
|
||||
this.getArrayMgr("content").parseBoolExpression(_colData[x].disabled);
|
||||
cells[y][x] = {
|
||||
"td": null,
|
||||
"widget": null,
|
||||
"colData": _colData[x],
|
||||
"rowData": _rowData[y],
|
||||
"disabled": _colData[x].disabled || _rowData[y].disabled,
|
||||
"disabled": col_disabled || _rowData[y].disabled,
|
||||
"class": _colData[x]["class"],
|
||||
"colSpan": 1,
|
||||
"autoColSpan": false,
|
||||
@ -171,10 +175,22 @@ var et2_grid = (function(){ "use strict"; return et2_DOMWidget.extend([et2_IDeta
|
||||
},
|
||||
|
||||
_fetchRowColData: function(columns, rows, colData, rowData) {
|
||||
// Some things cannot be done inside a nextmatch - nm will do the expansion later
|
||||
var nm = false;
|
||||
var widget = this;
|
||||
while(!nm && widget != this.getRoot())
|
||||
{
|
||||
nm = (widget._type == 'nextmatch');
|
||||
widget = widget.getParent();
|
||||
}
|
||||
|
||||
// Parse the columns tag
|
||||
et2_filteredNodeIterator(columns, function(node, nodeName) {
|
||||
var colDataEntry = this._getColDataEntry();
|
||||
colDataEntry["disabled"] = this.getArrayMgr("content")
|
||||
// This cannot be done inside a nm, it will expand it later
|
||||
colDataEntry["disabled"] = nm ?
|
||||
et2_readAttrWithDefault(node, "disabled", "") :
|
||||
this.getArrayMgr("content")
|
||||
.parseBoolExpression(et2_readAttrWithDefault(node, "disabled", ""));
|
||||
if (nodeName == "column")
|
||||
{
|
||||
@ -254,12 +270,6 @@ var et2_grid = (function(){ "use strict"; return et2_DOMWidget.extend([et2_IDeta
|
||||
// Old etemplate checked first two widgets, or first two box children
|
||||
// This cannot be done inside a nextmatch - nm will do the expansion later
|
||||
var nm = false;
|
||||
var widget = this;
|
||||
while(!nm && widget != this.getRoot())
|
||||
{
|
||||
nm = (widget._type == 'nextmatch');
|
||||
widget = widget.getParent();
|
||||
}
|
||||
if(nm)
|
||||
{
|
||||
// No further checks for repeated rows
|
||||
|
@ -1637,6 +1637,10 @@ div.et2_progress > div {
|
||||
table.egwGridView_outer.egwResizing .fixedWidth {
|
||||
opacity: 0.5;
|
||||
}
|
||||
table.egwGridView_outer thead tr th.noResize:hover {
|
||||
background-image: none;
|
||||
background-color: inherit;
|
||||
}
|
||||
.egwResizeOverlay {
|
||||
position: fixed;
|
||||
width: 100%;
|
||||
|
@ -726,64 +726,14 @@
|
||||
* Kategorien
|
||||
*
|
||||
################################################################*/
|
||||
div#admin-categories-index {
|
||||
/*div#admin-categories-index{
|
||||
|
||||
padding: 0px;
|
||||
}
|
||||
div#admin-categories-index div.ui-helper-clearfix {
|
||||
height: 0px;
|
||||
}
|
||||
div#admin-categories-index div.et2_hbox_right {
|
||||
margin-right: 0;
|
||||
padding: 0;
|
||||
}
|
||||
/*ADD Button*/
|
||||
button#admin-categories-index_add {
|
||||
width: 32px;
|
||||
/*border: 1px solid #0C5DA5;*/
|
||||
margin: 6px 2px;
|
||||
box-shadow: 0 1px 0 rgba(0, 0, 0, 0.5);
|
||||
padding: -0.5em;
|
||||
background-color: #e6e6e6 !important;
|
||||
background-size: 16px 16px;
|
||||
-webkit-border-radius: 3px;
|
||||
-webkit-border-top-left-radius: 10px;
|
||||
-moz-border-radius: 3px;
|
||||
-moz-border-radius-topleft: 10px;
|
||||
border-radius: 3px;
|
||||
border-top-left-radius: 10px;
|
||||
height: 24px;
|
||||
margin: -2px 2px;
|
||||
}
|
||||
button#admin-categories-index_add:before {
|
||||
content: "";
|
||||
font-size: 2em;
|
||||
color: #0c5da5;
|
||||
line-height: 0.6em;
|
||||
padding-left: 0.1em;
|
||||
padding-right: 100em;
|
||||
}
|
||||
button#admin-categories-index_add:active {
|
||||
background-color: #1aa200;
|
||||
}
|
||||
button#admin-categories-index_add:hover {
|
||||
background-color: #189800 !important;
|
||||
color: #ffc200;
|
||||
-webkit-box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.6);
|
||||
-moz-box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.6);
|
||||
box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.6);
|
||||
-webkit-border-radius: 3px;
|
||||
-webkit-border-top-left-radius: 10px;
|
||||
-moz-border-radius: 3px;
|
||||
-moz-border-radius-topleft: 10px;
|
||||
border-radius: 3px;
|
||||
border-top-left-radius: 10px;
|
||||
}
|
||||
button#admin-categories-index_add:active {
|
||||
background-color: #1aa200 !important;
|
||||
}
|
||||
#admin-categories-index_filter {
|
||||
top: 8px;
|
||||
}
|
||||
|
||||
// save space above nextmatch
|
||||
// set height to zero
|
||||
div.ui-helper-clearfix { height: 0px;}
|
||||
}*/
|
||||
/*################################################################
|
||||
*
|
||||
* Favorites
|
||||
|
@ -737,64 +737,14 @@
|
||||
* Kategorien
|
||||
*
|
||||
################################################################*/
|
||||
div#admin-categories-index {
|
||||
/*div#admin-categories-index{
|
||||
|
||||
padding: 0px;
|
||||
}
|
||||
div#admin-categories-index div.ui-helper-clearfix {
|
||||
height: 0px;
|
||||
}
|
||||
div#admin-categories-index div.et2_hbox_right {
|
||||
margin-right: 0;
|
||||
padding: 0;
|
||||
}
|
||||
/*ADD Button*/
|
||||
button#admin-categories-index_add {
|
||||
width: 32px;
|
||||
/*border: 1px solid #0C5DA5;*/
|
||||
margin: 6px 2px;
|
||||
box-shadow: 0 1px 0 rgba(0, 0, 0, 0.5);
|
||||
padding: -0.5em;
|
||||
background-color: #e6e6e6 !important;
|
||||
background-size: 16px 16px;
|
||||
-webkit-border-radius: 3px;
|
||||
-webkit-border-top-left-radius: 10px;
|
||||
-moz-border-radius: 3px;
|
||||
-moz-border-radius-topleft: 10px;
|
||||
border-radius: 3px;
|
||||
border-top-left-radius: 10px;
|
||||
height: 24px;
|
||||
margin: -2px 2px;
|
||||
}
|
||||
button#admin-categories-index_add:before {
|
||||
content: "";
|
||||
font-size: 2em;
|
||||
color: #0c5da5;
|
||||
line-height: 0.6em;
|
||||
padding-left: 0.1em;
|
||||
padding-right: 100em;
|
||||
}
|
||||
button#admin-categories-index_add:active {
|
||||
background-color: #1aa200;
|
||||
}
|
||||
button#admin-categories-index_add:hover {
|
||||
background-color: #189800 !important;
|
||||
color: #ffc200;
|
||||
-webkit-box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.6);
|
||||
-moz-box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.6);
|
||||
box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.6);
|
||||
-webkit-border-radius: 3px;
|
||||
-webkit-border-top-left-radius: 10px;
|
||||
-moz-border-radius: 3px;
|
||||
-moz-border-radius-topleft: 10px;
|
||||
border-radius: 3px;
|
||||
border-top-left-radius: 10px;
|
||||
}
|
||||
button#admin-categories-index_add:active {
|
||||
background-color: #1aa200 !important;
|
||||
}
|
||||
#admin-categories-index_filter {
|
||||
top: 8px;
|
||||
}
|
||||
|
||||
// save space above nextmatch
|
||||
// set height to zero
|
||||
div.ui-helper-clearfix { height: 0px;}
|
||||
}*/
|
||||
/*################################################################
|
||||
*
|
||||
* Favorites
|
||||
|
Loading…
Reference in New Issue
Block a user