diff --git a/etemplate/js/et2_dataview.js b/etemplate/js/et2_dataview.js index 8b5de1c715..2cb7e9150e 100644 --- a/etemplate/js/et2_dataview.js +++ b/etemplate/js/et2_dataview.js @@ -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({ diff --git a/etemplate/js/et2_dataview_model_columns.js b/etemplate/js/et2_dataview_model_columns.js index b8acfa1a6d..3b10489cc6 100755 --- a/etemplate/js/et2_dataview_model_columns.js +++ b/etemplate/js/et2_dataview_model_columns.js @@ -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; diff --git a/etemplate/js/et2_extension_nextmatch.js b/etemplate/js/et2_extension_nextmatch.js index 1abcf193dd..e49302cabc 100644 --- a/etemplate/js/et2_extension_nextmatch.js +++ b/etemplate/js/et2_extension_nextmatch.js @@ -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}; } diff --git a/etemplate/js/et2_extension_nextmatch_controller.js b/etemplate/js/et2_extension_nextmatch_controller.js index 05702b2107..608eef1a08 100644 --- a/etemplate/js/et2_extension_nextmatch_controller.js +++ b/etemplate/js/et2_extension_nextmatch_controller.js @@ -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 diff --git a/etemplate/js/et2_widget_grid.js b/etemplate/js/et2_widget_grid.js index 1edd7be452..0783fefee8 100644 --- a/etemplate/js/et2_widget_grid.js +++ b/etemplate/js/et2_widget_grid.js @@ -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 diff --git a/etemplate/templates/default/etemplate2.css b/etemplate/templates/default/etemplate2.css index 3a3ccbe27e..b249a139fe 100644 --- a/etemplate/templates/default/etemplate2.css +++ b/etemplate/templates/default/etemplate2.css @@ -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%; diff --git a/pixelegg/css/mobile.css b/pixelegg/css/mobile.css index 269b7af907..1f70aa2fd6 100644 --- a/pixelegg/css/mobile.css +++ b/pixelegg/css/mobile.css @@ -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 diff --git a/pixelegg/mobile/fw_mobile.css b/pixelegg/mobile/fw_mobile.css index e0bef7fe07..33b51841b8 100644 --- a/pixelegg/mobile/fw_mobile.css +++ b/pixelegg/mobile/fw_mobile.css @@ -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