Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/UpdatableStore.js URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/UpdatableStore.js?rev=1741609&r1=1741608&r2=1741609&view=diff ============================================================================== --- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/UpdatableStore.js (original) +++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/UpdatableStore.js Fri Apr 29 11:04:40 2016 @@ -23,167 +23,182 @@ define(["dojo/json", "dojo/store/Memory", "dojox/grid/DataGrid", "dojo/data/ObjectStore", - "dojo/store/Observable"], function (json, util, Memory, DataGrid, ObjectStore, Observable) { + "dojo/store/Observable"], function (json, util, Memory, DataGrid, ObjectStore, Observable) + { - function UpdatableStore( data, divName, structure, func, props, Grid, notObservable ) { + function UpdatableStore(data, divName, structure, func, props, Grid, notObservable) + { - var that = this; - var GridType = DataGrid; + var that = this; + var GridType = DataGrid; - that.memoryStore = new Memory({data: data, idProperty: "id"}); - that.store = notObservable ? that.memoryStore : new Observable(that.memoryStore); - that.dataStore = ObjectStore({objectStore: that.store}); - - var gridProperties = { store: that.dataStore, - structure: structure, - autoHeight: true - }; - if(props) { - for(var prop in props) { - if(props.hasOwnProperty(prop)) - { - gridProperties[ prop ] = props[ prop ]; - } - } - } - - if(Grid) - { - GridType = Grid; - } - - that.grid = new GridType(gridProperties, divName); - - // since we created this grid programmatically, call startup to render it - that.grid.startup(); - - if( func ) - { - func(that); - } - - } - - UpdatableStore.prototype.update = function(data) - { - var changed = false; - var store = this.store; - var theItem; - - // handle deletes - // iterate over existing store... if not in new data then remove - store.query({ }).forEach(function(object) { - if(data) { - for(var i=0; i < data.length; i++) { - if(data[i].id == object.id) { - return; - } - } - } - store.remove(object.id); - changed = true; - }); - - // iterate over data... - if(data) { - for(var i=0; i < data.length; i++) - { - if(theItem = store.get(data[i].id)) - { - var modified = !util.equals(theItem, data[i]); - if(modified) - { - if (store.notify) - { - // Seems that we are required to update the item that the store already holds - for(var propName in data[i]) - { - if(data[i].hasOwnProperty(propName)) - { - if(theItem[ propName ] != data[i][ propName ]) - { - theItem[ propName ] = data[i][ propName ]; - } - } - } - // and tell it we have done so - store.notify(theItem, data[i].id); - } - else - { - store.put(data[i], {overwrite: true}); - } - changed = true; - } - } else { - // if not in the store then add - store.put(data[i]); - changed = true; - } - } - } - - return changed; - }; - - function removeItemsFromArray(items, numberToRemove) - { - if (items) - { - if (numberToRemove > 0 && items.length > 0) - { - if (numberToRemove >= items.length) - { - numberToRemove = numberToRemove - items.length; - items.length = 0 - } - else - { - items.splice(0, numberToRemove); - numberToRemove = 0; - } - } - } - return numberToRemove; - }; - - UpdatableStore.prototype.append = function(data, limit) - { - var changed = false; - var items = this.memoryStore.data; - - if (limit) - { - var totalSize = items.length + (data ? data.length : 0); - var numberToRemove = totalSize - limit; - - if (numberToRemove > 0) - { - changed = true; - numberToRemove = removeItemsFromArray(items, numberToRemove); - if (numberToRemove > 0) - { - removeItemsFromArray(data, numberToRemove); - } - } - } - - if (data && data.length > 0) - { - changed = true; - items.push.apply(items, data); - } - - this.memoryStore.setData(items); - return changed; - }; - - UpdatableStore.prototype.close = function() - { - this.dataStore.close(); - this.dataStore = null; - this.store = null; - this.memoryStore = null; - }; - return UpdatableStore; -}); + that.memoryStore = new Memory({ + data: data, + idProperty: "id" + }); + that.store = notObservable ? that.memoryStore : new Observable(that.memoryStore); + that.dataStore = ObjectStore({objectStore: that.store}); + + var gridProperties = { + store: that.dataStore, + structure: structure, + autoHeight: true + }; + if (props) + { + for (var prop in props) + { + if (props.hasOwnProperty(prop)) + { + gridProperties[prop] = props[prop]; + } + } + } + + if (Grid) + { + GridType = Grid; + } + + that.grid = new GridType(gridProperties, divName); + + // since we created this grid programmatically, call startup to render it + that.grid.startup(); + + if (func) + { + func(that); + } + + } + + UpdatableStore.prototype.update = function (data) + { + var changed = false; + var store = this.store; + var theItem; + + // handle deletes + // iterate over existing store... if not in new data then remove + store.query({}).forEach(function (object) + { + if (data) + { + for (var i = 0; i < data.length; i++) + { + if (data[i].id == object.id) + { + return; + } + } + } + store.remove(object.id); + changed = true; + }); + + // iterate over data... + if (data) + { + for (var i = 0; i < data.length; i++) + { + if (theItem = store.get(data[i].id)) + { + var modified = !util.equals(theItem, data[i]); + if (modified) + { + if (store.notify) + { + // Seems that we are required to update the item that the store already holds + for (var propName in data[i]) + { + if (data[i].hasOwnProperty(propName)) + { + if (theItem[propName] != data[i][propName]) + { + theItem[propName] = data[i][propName]; + } + } + } + // and tell it we have done so + store.notify(theItem, data[i].id); + } + else + { + store.put(data[i], {overwrite: true}); + } + changed = true; + } + } + else + { + // if not in the store then add + store.put(data[i]); + changed = true; + } + } + } + + return changed; + }; + + function removeItemsFromArray(items, numberToRemove) + { + if (items) + { + if (numberToRemove > 0 && items.length > 0) + { + if (numberToRemove >= items.length) + { + numberToRemove = numberToRemove - items.length; + items.length = 0 + } + else + { + items.splice(0, numberToRemove); + numberToRemove = 0; + } + } + } + return numberToRemove; + }; + + UpdatableStore.prototype.append = function (data, limit) + { + var changed = false; + var items = this.memoryStore.data; + + if (limit) + { + var totalSize = items.length + (data ? data.length : 0); + var numberToRemove = totalSize - limit; + + if (numberToRemove > 0) + { + changed = true; + numberToRemove = removeItemsFromArray(items, numberToRemove); + if (numberToRemove > 0) + { + removeItemsFromArray(data, numberToRemove); + } + } + } + + if (data && data.length > 0) + { + changed = true; + items.push.apply(items, data); + } + + this.memoryStore.setData(items); + return changed; + }; + + UpdatableStore.prototype.close = function () + { + this.dataStore.close(); + this.dataStore = null; + this.store = null; + this.memoryStore = null; + }; + return UpdatableStore; + });
Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/WarningPane.js URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/WarningPane.js?rev=1741609&r1=1741608&r2=1741609&view=diff ============================================================================== --- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/WarningPane.js (original) +++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/WarningPane.js Fri Apr 29 11:04:40 2016 @@ -18,8 +18,7 @@ * under the License. * */ -define([ - "dojo/_base/declare", +define(["dojo/_base/declare", "dojo/_base/array", "dojo/_base/lang", "dojo/_base/event", @@ -30,44 +29,45 @@ define([ "dojox/html/entities", "dijit/form/Button", "dojo/domReady!"], -function (declare, array, lang, event, _WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin, template, entities) -{ + function (declare, array, lang, event, _WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin, template, entities) + { - return declare("qpid.common.WarningPane", [_WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin], - { - templateString: template, - message: "Not Found", + return declare("qpid.common.WarningPane", [_WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin], { + templateString: template, + message: "Not Found", - buildRendering: function() - { - //Strip out the apache comment header from the template html as comments unsupported. - this.templateString = this.templateString.replace(/<!--[\s\S]*?-->/g, ""); - this.inherited(arguments); - }, - postCreate: function() - { - this.inherited(arguments); - this._renderMessage(); - var that = this; - this.closeButton.on("click", function(e){that._onButtonClick(e)}); - }, - _onButtonClick: function( /*Event*/ e) - { - this.onClick(e); - }, - onClick: function( /*Event*/ e) - { - // extention point - }, - _setMessageAttr: function(message) - { - this.message = message; - this._renderMessage(); - }, - _renderMessage : function() - { - this.warningMessage.innerHTML = entities.encode(String(this.message)); - } - } - ); -}); + buildRendering: function () + { + //Strip out the apache comment header from the template html as comments unsupported. + this.templateString = this.templateString.replace(/<!--[\s\S]*?-->/g, ""); + this.inherited(arguments); + }, + postCreate: function () + { + this.inherited(arguments); + this._renderMessage(); + var that = this; + this.closeButton.on("click", function (e) + { + that._onButtonClick(e) + }); + }, + _onButtonClick: function (/*Event*/ e) + { + this.onClick(e); + }, + onClick: function (/*Event*/ e) + { + // extention point + }, + _setMessageAttr: function (message) + { + this.message = message; + this._renderMessage(); + }, + _renderMessage: function () + { + this.warningMessage.innerHTML = entities.encode(String(this.message)); + } + }); + }); Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/footer.js URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/footer.js?rev=1741609&r1=1741608&r2=1741609&view=diff ============================================================================== --- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/footer.js (original) +++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/footer.js Fri Apr 29 11:04:40 2016 @@ -18,13 +18,18 @@ * under the License. * */ -define(["dojo/_base/xhr", "dojo/query", "dojo/domReady!"], function (xhr, query) { - query('div[qpid-type="footer"]').forEach(function(node, index, arr) { - xhr.get({url: "footer.html", - sync: true, - load: function(data) { - node.innerHTML = data; - } }); - }); +define(["dojo/_base/xhr", "dojo/query", "dojo/domReady!"], function (xhr, query) +{ + query('div[qpid-type="footer"]').forEach(function (node, index, arr) + { + xhr.get({ + url: "footer.html", + sync: true, + load: function (data) + { + node.innerHTML = data; + } + }); + }); }); Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/formatter.js URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/formatter.js?rev=1741609&r1=1741608&r2=1741609&view=diff ============================================================================== --- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/formatter.js (original) +++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/formatter.js Fri Apr 29 11:04:40 2016 @@ -19,81 +19,86 @@ * */ -define(function () { - return { - - formatBytes: function formatBytes(amount) - { - var returnVal = { units: "B", - value: "0"}; - - - if(amount < 1000) - { - returnVal.value = amount.toPrecision(3);; - } - else if(amount < 1000 * 1024) - { - returnVal.units = "KB"; - returnVal.value = (amount / 1024).toPrecision(3); - } - else if(amount < 1000 * 1024 * 1024) - { - returnVal.units = "MB"; - returnVal.value = (amount / (1024 * 1024)).toPrecision(3); - } - else if(amount < 1000 * 1024 * 1024 * 1024) - { - returnVal.units = "GB"; - returnVal.value = (amount / (1024 * 1024 * 1024)).toPrecision(3); - } - - return returnVal; - - }, - - formatTime: function formatTime(amount) - { - var returnVal = { units: "ms", - value: "0"}; - - if(amount < 1000) - { - returnVal.units = "ms"; - returnVal.value = amount.toString(); - } - else if(amount < 1000 * 60) - { - returnVal.units = "s"; - returnVal.value = (amount / 1000).toPrecision(3); - } - else if(amount < 1000 * 60 * 60) - { - returnVal.units = "min"; - returnVal.value = (amount / (1000 * 60)).toPrecision(3); - } - else if(amount < 1000 * 60 * 60 * 24) - { - returnVal.units = "hr"; - returnVal.value = (amount / (1000 * 60 * 60)).toPrecision(3); - } - else if(amount < 1000 * 60 * 60 * 24 * 7) - { - returnVal.units = "d"; - returnVal.value = (amount / (1000 * 60 * 60 * 24)).toPrecision(3); - } - else if(amount < 1000 * 60 * 60 * 24 * 365) - { - returnVal.units = "wk"; - returnVal.value = (amount / (1000 * 60 * 60 * 24 * 7)).toPrecision(3); - } - else - { - returnVal.units = "yr"; - returnVal.value = (amount / (1000 * 60 * 60 * 24 * 365)).toPrecision(3); - } - - return returnVal; - } - }; -}); \ No newline at end of file +define(function () + { + return { + + formatBytes: function formatBytes(amount) + { + var returnVal = { + units: "B", + value: "0" + }; + + if (amount < 1000) + { + returnVal.value = amount.toPrecision(3); + ; + } + else if (amount < 1000 * 1024) + { + returnVal.units = "KB"; + returnVal.value = (amount / 1024).toPrecision(3); + } + else if (amount < 1000 * 1024 * 1024) + { + returnVal.units = "MB"; + returnVal.value = (amount / (1024 * 1024)).toPrecision(3); + } + else if (amount < 1000 * 1024 * 1024 * 1024) + { + returnVal.units = "GB"; + returnVal.value = (amount / (1024 * 1024 * 1024)).toPrecision(3); + } + + return returnVal; + + }, + + formatTime: function formatTime(amount) + { + var returnVal = { + units: "ms", + value: "0" + }; + + if (amount < 1000) + { + returnVal.units = "ms"; + returnVal.value = amount.toString(); + } + else if (amount < 1000 * 60) + { + returnVal.units = "s"; + returnVal.value = (amount / 1000).toPrecision(3); + } + else if (amount < 1000 * 60 * 60) + { + returnVal.units = "min"; + returnVal.value = (amount / (1000 * 60)).toPrecision(3); + } + else if (amount < 1000 * 60 * 60 * 24) + { + returnVal.units = "hr"; + returnVal.value = (amount / (1000 * 60 * 60)).toPrecision(3); + } + else if (amount < 1000 * 60 * 60 * 24 * 7) + { + returnVal.units = "d"; + returnVal.value = (amount / (1000 * 60 * 60 * 24)).toPrecision(3); + } + else if (amount < 1000 * 60 * 60 * 24 * 365) + { + returnVal.units = "wk"; + returnVal.value = (amount / (1000 * 60 * 60 * 24 * 7)).toPrecision(3); + } + else + { + returnVal.units = "yr"; + returnVal.value = (amount / (1000 * 60 * 60 * 24 * 365)).toPrecision(3); + } + + return returnVal; + } + }; + }); \ No newline at end of file Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/ColumnDefDialog.js URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/ColumnDefDialog.js?rev=1741609&r1=1741608&r2=1741609&view=diff ============================================================================== --- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/ColumnDefDialog.js (original) +++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/ColumnDefDialog.js Fri Apr 29 11:04:40 2016 @@ -19,127 +19,136 @@ * */ -define([ - "dojo/_base/declare", - "dojo/_base/event", - "dojo/_base/array", - "dojo/_base/lang", - "dojo/parser", - "dojo/dom-construct", - "dojo/query", - "dijit/registry", - "dijit/form/Button", - "dijit/form/CheckBox", - "dojox/grid/enhanced/plugins/Dialog", - "dojo/text!../../../grid/showColumnDefDialog.html", - "dojo/domReady!" -], function(declare, event, array, lang, parser, dom, query, registry, Button, CheckBox, Dialog, template ){ - - -return declare("qpid.common.grid.ColumnDefDialog", null, { - - grid: null, - containerNode: null, - _columns: [], - _dialog: null, - - constructor: function(args){ - var grid = this.grid = args.grid; - var that = this; - this.containerNode = dom.create("div", {innerHTML: template}); - parser.parse(this.containerNode).then(function(instances) - { - that._postParse(); - }); - }, - _postParse: function() - { - var submitButton = registry.byNode(query(".displayButton", this.containerNode)[0]); - this.closeButton = registry.byNode(query(".cancelButton", this.containerNode)[0]); - var columnsContainer = query(".columnList", this.containerNode)[0]; - - this._buildColumnWidgets(columnsContainer); - - this._dialog = new Dialog({ - "refNode": this.grid.domNode, - "title": "Grid Columns", - "content": this.containerNode - }); - - var self = this; - submitButton.on("click", function(e){self._onColumnsSelect(e); }); - this.closeButton.on("click", function(e){self._dialog.hide(); }); - - this._dialog.startup(); - }, - - destroy: function(){ - this._dialog.destroyRecursive(); - this._dialog = null; - this.grid = null; - this.containerNode = null; - this._columns = null; - }, - - showDialog: function(){ - this._initColumnWidgets(); - this._dialog.show(); - }, - - _initColumnWidgets: function() - { - var cells = this.grid.layout.cells; - for(var i in cells) - { - var cell = cells[i]; - this._columns[cell.name].checked = !cell.hidden; - } - }, - - _onColumnsSelect: function(evt){ - event.stop(evt); - var grid = this.grid; - grid.beginUpdate(); - var cells = grid.layout.cells; - try - { - for(var i in cells) - { - var cell = cells[i]; - var widget = this._columns[cell.name]; - grid.layout.setColumnVisibility(i, widget.checked); - } - } - finally - { - grid.endUpdate(); - this._dialog.hide(); - } - }, - - _buildColumnWidgets: function(columnsContainer) - { - var cells = this.grid.layout.cells; - for(var i in cells) - { - var cell = cells[i]; - var widget = new dijit.form.CheckBox({ - required: false, - checked: !cell.hidden, - label: cell.name, - name: this.grid.id + "_cchb_ " + i - }); - - this._columns[cell.name] = widget; - - var div = dom.create("div"); - div.appendChild(widget.domNode); - div.appendChild(dom.create("span", {innerHTML: cell.name})); - - columnsContainer.appendChild(div); - } - } +define(["dojo/_base/declare", + "dojo/_base/event", + "dojo/_base/array", + "dojo/_base/lang", + "dojo/parser", + "dojo/dom-construct", + "dojo/query", + "dijit/registry", + "dijit/form/Button", + "dijit/form/CheckBox", + "dojox/grid/enhanced/plugins/Dialog", + "dojo/text!../../../grid/showColumnDefDialog.html", + "dojo/domReady!"], + function (declare, event, array, lang, parser, dom, query, registry, Button, CheckBox, Dialog, template) + { + + return declare("qpid.common.grid.ColumnDefDialog", null, { + + grid: null, + containerNode: null, + _columns: [], + _dialog: null, + + constructor: function (args) + { + var grid = this.grid = args.grid; + var that = this; + this.containerNode = dom.create("div", {innerHTML: template}); + parser.parse(this.containerNode).then(function (instances) + { + that._postParse(); + }); + }, + _postParse: function () + { + var submitButton = registry.byNode(query(".displayButton", this.containerNode)[0]); + this.closeButton = registry.byNode(query(".cancelButton", this.containerNode)[0]); + var columnsContainer = query(".columnList", this.containerNode)[0]; + + this._buildColumnWidgets(columnsContainer); + + this._dialog = new Dialog({ + "refNode": this.grid.domNode, + "title": "Grid Columns", + "content": this.containerNode + }); + + var self = this; + submitButton.on("click", function (e) + { + self._onColumnsSelect(e); + }); + this.closeButton.on("click", function (e) + { + self._dialog.hide(); + }); + + this._dialog.startup(); + }, + + destroy: function () + { + this._dialog.destroyRecursive(); + this._dialog = null; + this.grid = null; + this.containerNode = null; + this._columns = null; + }, + + showDialog: function () + { + this._initColumnWidgets(); + this._dialog.show(); + }, + + _initColumnWidgets: function () + { + var cells = this.grid.layout.cells; + for (var i in cells) + { + var cell = cells[i]; + this._columns[cell.name].checked = !cell.hidden; + } + }, + + _onColumnsSelect: function (evt) + { + event.stop(evt); + var grid = this.grid; + grid.beginUpdate(); + var cells = grid.layout.cells; + try + { + for (var i in cells) + { + var cell = cells[i]; + var widget = this._columns[cell.name]; + grid.layout.setColumnVisibility(i, widget.checked); + } + } + finally + { + grid.endUpdate(); + this._dialog.hide(); + } + }, + + _buildColumnWidgets: function (columnsContainer) + { + var cells = this.grid.layout.cells; + for (var i in cells) + { + var cell = cells[i]; + var widget = new dijit.form.CheckBox({ + required: false, + checked: !cell.hidden, + label: cell.name, + name: this.grid.id + "_cchb_ " + i + }); + + this._columns[cell.name] = widget; + + var div = dom.create("div"); + div.appendChild(widget.domNode); + div.appendChild(dom.create("span", {innerHTML: cell.name})); + + columnsContainer.appendChild(div); + } + } - }); + }); -}); + }); Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/EnhancedFilter.js URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/EnhancedFilter.js?rev=1741609&r1=1741608&r2=1741609&view=diff ============================================================================== --- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/EnhancedFilter.js (original) +++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/EnhancedFilter.js Fri Apr 29 11:04:40 2016 @@ -19,213 +19,235 @@ * */ -define([ - "dojo/_base/declare", - "dojo/_base/lang", - "dojo/_base/array", - "dijit/Toolbar", - "dojox/grid/enhanced/_Plugin", - "dojox/grid/enhanced/plugins/Dialog", - "dojox/grid/enhanced/plugins/filter/FilterLayer", - "dojox/grid/enhanced/plugins/filter/FilterDefDialog", - "dojox/grid/enhanced/plugins/filter/FilterStatusTip", - "dojox/grid/enhanced/plugins/filter/ClearFilterConfirm", - "dojox/grid/EnhancedGrid", - "dojo/i18n!dojox/grid/enhanced/nls/Filter", - "qpid/common/grid/EnhancedFilterTools" -], function(declare, lang, array, Toolbar, _Plugin, - Dialog, FilterLayer, FilterDefDialog, FilterStatusTip, ClearFilterConfirm, EnhancedGrid, nls, EnhancedFilterTools){ - - // override CriteriaBox#_getColumnOptions to show criteria for hidden columns with EnhancedFilter - dojo.extend(dojox.grid.enhanced.plugins.filter.CriteriaBox, { - _getColumnOptions: function(){ - var colIdx = this.dlg.curColIdx >= 0 ? String(this.dlg.curColIdx) : "anycolumn"; - var filterHidden = this.plugin.filterHidden; - return array.map(array.filter(this.plugin.grid.layout.cells, function(cell){ - return !(cell.filterable === false || (!filterHidden && cell.hidden)); - }), function(cell){ - return { - label: cell.name || cell.field, - value: String(cell.index), - selected: colIdx == String(cell.index) - }; - }); - } - }); - - // Enhanced filter has extra functionality for refreshing, limiting rows, displaying/hiding columns in the grid - var EnhancedFilter = declare("qpid.common.grid.EnhancedFilter", _Plugin, { - // summary: - // Accept the same plugin parameters as dojox.grid.enhanced.plugins.Filter and the following: - // - // filterHidden: boolean: - // Whether to display filtering criteria for hidden columns. Default to true. - // - // defaulGridRowLimit: int: - // Default limit for numbers of items to cache in the gris dtore - // - // disableFiltering: boolean: - // Whether to disable a filtering including filter button, clear filter button and filter summary. - // - // toolbar: dijit.Toolbar: - // An instance of toolbar to add the enhanced filter widgets. - - - // name: String - // plugin name - name: "enhancedFilter", - - // filterHidden: Boolean - // whether to filter hidden columns - filterHidden: true, - - constructor: function(grid, args){ - // summary: - // See constructor of dojox.grid.enhanced._Plugin. - this.grid = grid; - this.nls = nls; - this.userPreferences = args.userPreferences; - args = this.args = lang.isObject(args) ? args : {}; - if(typeof args.ruleCount != 'number' || args.ruleCount < 0){ - args.ruleCount = 0; - } - this.ruleCountToConfirmClearFilter = args.ruleCountToConfirmClearFilter || 5; - - if (args.filterHidden){ - this.filterHidden = args.filterHidden; - } - this.defaulGridRowLimit = args.defaulGridRowLimit; - this.disableFiltering = args.disableFiltering; - this.displayLastUpdateTime = args.displayLastUpdateTime; - - //Install UI components - var obj = { "plugin": this }; - - this.filterBar = ( args.toolbar && args.toolbar instanceof dijit.Toolbar) ? args.toolbar: new Toolbar(); - - if (!this.disableFiltering) - { - //Install filter layer - this._wrapStore(); - - this.clearFilterDialog = new Dialog({ - refNode: this.grid.domNode, - title: this.nls["clearFilterDialogTitle"], - content: new ClearFilterConfirm(obj) - }); - - this.filterDefDialog = new FilterDefDialog(obj); - this.filterDefDialog.filterDefPane._clearFilterBtn.set("label", "Clear Filter"); - - nls["statusTipTitleNoFilter"] = "Filter is not set"; - nls["statusTipMsg"] = "Click on 'Set Filter' button to specify filtering conditions"; - this.filterStatusTip = new FilterStatusTip(obj); - - var self = this; - var toggleClearFilterBtn = function (arg){ self.enhancedFilterTools.toggleClearFilterBtn(arg); }; - - this.filterBar.toggleClearFilterBtn = toggleClearFilterBtn; - - this.grid.isFilterBarShown = function (){return true}; - - this.connect(this.grid.layer("filter"), "onFilterDefined", function(filter){ - toggleClearFilterBtn(true); - }); - - //Expose the layer event to grid. - grid.onFilterDefined = function(){}; - this.connect(grid.layer("filter"), "onFilterDefined", function(filter){ - grid.onFilterDefined(grid.getFilter(), grid.getFilterRelation()); - }); - } - - // add extra buttons into toolbar - this.enhancedFilterTools = new EnhancedFilterTools({ - grid: grid, - toolbar: this.filterBar, - filterStatusTip: this.filterStatusTip, - clearFilterDialog: this.clearFilterDialog, - filterDefDialog: this.filterDefDialog, - defaulGridRowLimit: this.defaulGridRowLimit, - disableFiltering: this.disableFiltering, - displayLastUpdateTime: this.displayLastUpdateTime, - nls: nls, - ruleCountToConfirmClearFilter: this.ruleCountToConfirmClearFilter, - userPreferences: this.userPreferences - }); - - this.filterBar.placeAt(this.grid.viewsHeaderNode, "before"); - this.filterBar.startup(); - - }, - - destroy: function(){ - this.inherited(arguments); - try - { - if (this.filterDefDialog) - { - this.filterDefDialog.destroy(); - this.filterDefDialog = null; - } - if (this.grid) - { - this.grid.unwrap("filter"); - this.grid = null; - } - if (this.filterBar) - { - this.filterBar.destroyRecursive(); - this.filterBar = null; - } - if (this.enhancedFilterTools) - { - this.enhancedFilterTools.destroy(); - this.enhancedFilterTools = null; - } - if (this.clearFilterDialog) - { - this.clearFilterDialog.destroyRecursive(); - this.clearFilterDialog = null; - } - if (this.filterStatusTip) - { - this.filterStatusTip.destroy(); - this.filterStatusTip = null; - } - this.args = null; - - }catch(e){ - console.warn("Filter.destroy() error:",e); - } - }, - - _wrapStore: function(){ - var g = this.grid; - var args = this.args; - var filterLayer = args.isServerSide ? new FilterLayer.ServerSideFilterLayer(args) : - new FilterLayer.ClientSideFilterLayer({ - cacheSize: args.filterCacheSize, - fetchAll: args.fetchAllOnFirstFilter, - getter: this._clientFilterGetter - }); - FilterLayer.wrap(g, "_storeLayerFetch", filterLayer); - - this.connect(g, "_onDelete", lang.hitch(filterLayer, "invalidate")); - }, - - onSetStore: function(store){ - this.filterDefDialog.clearFilter(true); - }, - - _clientFilterGetter: function(/* data item */ datarow,/* cell */cell, /* int */rowIndex){ - return cell.get(rowIndex, datarow); - } +define(["dojo/_base/declare", + "dojo/_base/lang", + "dojo/_base/array", + "dijit/Toolbar", + "dojox/grid/enhanced/_Plugin", + "dojox/grid/enhanced/plugins/Dialog", + "dojox/grid/enhanced/plugins/filter/FilterLayer", + "dojox/grid/enhanced/plugins/filter/FilterDefDialog", + "dojox/grid/enhanced/plugins/filter/FilterStatusTip", + "dojox/grid/enhanced/plugins/filter/ClearFilterConfirm", + "dojox/grid/EnhancedGrid", + "dojo/i18n!dojox/grid/enhanced/nls/Filter", + "qpid/common/grid/EnhancedFilterTools"], + function (declare, lang, array, Toolbar, _Plugin, Dialog, FilterLayer, FilterDefDialog, FilterStatusTip, ClearFilterConfirm, EnhancedGrid, nls, EnhancedFilterTools) + { + + // override CriteriaBox#_getColumnOptions to show criteria for hidden columns with EnhancedFilter + dojo.extend(dojox.grid.enhanced.plugins.filter.CriteriaBox, { + _getColumnOptions: function () + { + var colIdx = this.dlg.curColIdx >= 0 ? String(this.dlg.curColIdx) : "anycolumn"; + var filterHidden = this.plugin.filterHidden; + return array.map(array.filter(this.plugin.grid.layout.cells, function (cell) + { + return !(cell.filterable === false || (!filterHidden && cell.hidden)); + }), function (cell) + { + return { + label: cell.name || cell.field, + value: String(cell.index), + selected: colIdx == String(cell.index) + }; + }); + } + }); + + // Enhanced filter has extra functionality for refreshing, limiting rows, displaying/hiding columns in the grid + var EnhancedFilter = declare("qpid.common.grid.EnhancedFilter", _Plugin, { + // summary: + // Accept the same plugin parameters as dojox.grid.enhanced.plugins.Filter and the following: + // + // filterHidden: boolean: + // Whether to display filtering criteria for hidden columns. Default to true. + // + // defaulGridRowLimit: int: + // Default limit for numbers of items to cache in the gris dtore + // + // disableFiltering: boolean: + // Whether to disable a filtering including filter button, clear filter button and filter summary. + // + // toolbar: dijit.Toolbar: + // An instance of toolbar to add the enhanced filter widgets. + + // name: String + // plugin name + name: "enhancedFilter", + + // filterHidden: Boolean + // whether to filter hidden columns + filterHidden: true, + + constructor: function (grid, args) + { + // summary: + // See constructor of dojox.grid.enhanced._Plugin. + this.grid = grid; + this.nls = nls; + this.userPreferences = args.userPreferences; + args = this.args = lang.isObject(args) ? args : {}; + if (typeof args.ruleCount != 'number' || args.ruleCount < 0) + { + args.ruleCount = 0; + } + this.ruleCountToConfirmClearFilter = args.ruleCountToConfirmClearFilter || 5; + + if (args.filterHidden) + { + this.filterHidden = args.filterHidden; + } + this.defaulGridRowLimit = args.defaulGridRowLimit; + this.disableFiltering = args.disableFiltering; + this.displayLastUpdateTime = args.displayLastUpdateTime; + + //Install UI components + var obj = {"plugin": this}; + + this.filterBar = + ( args.toolbar && args.toolbar instanceof dijit.Toolbar) ? args.toolbar : new Toolbar(); + + if (!this.disableFiltering) + { + //Install filter layer + this._wrapStore(); + + this.clearFilterDialog = new Dialog({ + refNode: this.grid.domNode, + title: this.nls["clearFilterDialogTitle"], + content: new ClearFilterConfirm(obj) + }); + + this.filterDefDialog = new FilterDefDialog(obj); + this.filterDefDialog.filterDefPane._clearFilterBtn.set("label", "Clear Filter"); + + nls["statusTipTitleNoFilter"] = "Filter is not set"; + nls["statusTipMsg"] = "Click on 'Set Filter' button to specify filtering conditions"; + this.filterStatusTip = new FilterStatusTip(obj); + + var self = this; + var toggleClearFilterBtn = function (arg) + { + self.enhancedFilterTools.toggleClearFilterBtn(arg); + }; + + this.filterBar.toggleClearFilterBtn = toggleClearFilterBtn; + + this.grid.isFilterBarShown = function () + { + return true + }; + + this.connect(this.grid.layer("filter"), "onFilterDefined", function (filter) + { + toggleClearFilterBtn(true); + }); + + //Expose the layer event to grid. + grid.onFilterDefined = function () + { + }; + this.connect(grid.layer("filter"), "onFilterDefined", function (filter) + { + grid.onFilterDefined(grid.getFilter(), grid.getFilterRelation()); + }); + } + + // add extra buttons into toolbar + this.enhancedFilterTools = new EnhancedFilterTools({ + grid: grid, + toolbar: this.filterBar, + filterStatusTip: this.filterStatusTip, + clearFilterDialog: this.clearFilterDialog, + filterDefDialog: this.filterDefDialog, + defaulGridRowLimit: this.defaulGridRowLimit, + disableFiltering: this.disableFiltering, + displayLastUpdateTime: this.displayLastUpdateTime, + nls: nls, + ruleCountToConfirmClearFilter: this.ruleCountToConfirmClearFilter, + userPreferences: this.userPreferences + }); + + this.filterBar.placeAt(this.grid.viewsHeaderNode, "before"); + this.filterBar.startup(); + + }, + + destroy: function () + { + this.inherited(arguments); + try + { + if (this.filterDefDialog) + { + this.filterDefDialog.destroy(); + this.filterDefDialog = null; + } + if (this.grid) + { + this.grid.unwrap("filter"); + this.grid = null; + } + if (this.filterBar) + { + this.filterBar.destroyRecursive(); + this.filterBar = null; + } + if (this.enhancedFilterTools) + { + this.enhancedFilterTools.destroy(); + this.enhancedFilterTools = null; + } + if (this.clearFilterDialog) + { + this.clearFilterDialog.destroyRecursive(); + this.clearFilterDialog = null; + } + if (this.filterStatusTip) + { + this.filterStatusTip.destroy(); + this.filterStatusTip = null; + } + this.args = null; + + } + catch (e) + { + console.warn("Filter.destroy() error:", e); + } + }, + + _wrapStore: function () + { + var g = this.grid; + var args = this.args; + var filterLayer = args.isServerSide + ? new FilterLayer.ServerSideFilterLayer(args) + : new FilterLayer.ClientSideFilterLayer({ + cacheSize: args.filterCacheSize, + fetchAll: args.fetchAllOnFirstFilter, + getter: this._clientFilterGetter + }); + FilterLayer.wrap(g, "_storeLayerFetch", filterLayer); + + this.connect(g, "_onDelete", lang.hitch(filterLayer, "invalidate")); + }, + + onSetStore: function (store) + { + this.filterDefDialog.clearFilter(true); + }, + + _clientFilterGetter: function (/* data item */ datarow, /* cell */cell, /* int */rowIndex) + { + return cell.get(rowIndex, datarow); + } - }); + }); - EnhancedGrid.registerPlugin(EnhancedFilter); + EnhancedGrid.registerPlugin(EnhancedFilter); - return EnhancedFilter; + return EnhancedFilter; -}); + }); Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/EnhancedFilterTools.js URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/EnhancedFilterTools.js?rev=1741609&r1=1741608&r2=1741609&view=diff ============================================================================== --- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/EnhancedFilterTools.js (original) +++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/EnhancedFilterTools.js Fri Apr 29 11:04:40 2016 @@ -19,293 +19,342 @@ * */ -define([ - "dojo/_base/declare", - "dojo/_base/event", - "dojo/dom-construct", - "dojo/date/locale", - "dijit/form/Button", - "dijit/form/ToggleButton", - "qpid/common/grid/RowNumberLimitDialog", - "qpid/common/grid/ColumnDefDialog", - "qpid/common/grid/FilterSummary" -], function(declare, event, domConstruct, locale, Button, ToggleButton, RowNumberLimitDialog, ColumnDefDialog, FilterSummary){ - - var _stopEvent = function (evt){ - try{ - if(evt && evt.preventDefault){ - event.stop(evt); - } - }catch(e){} - }; - - return declare("qpid.common.grid.EnhancedFilterTools", null, { - - grid: null, - filterBar: null, - filterStatusTip: null, - clearFilterDialog: null, - filterDefDialog: null, - - columnDefDialog: null, - columnDefButton: null, - filterDefButton: null, - clearFilterButton: null, - filterSummary: null, - setRowNumberLimitButton: null, - setRowNumberLimitDialog: null, - refreshButton: null, - autoRefreshButton: null, - - constructor: function(params) - { - this.inherited(arguments); - - this.userPreferences = params.userPreferences; - this.filterBar = params.toolbar; - this.grid = params.grid; - this.filterStatusTip= params.filterStatusTip; - this.clearFilterDialog = params.clearFilterDialog; - this.filterDefDialog = params.filterDefDialog; - this.ruleCountToConfirmClearFilter = params.ruleCountToConfirmClearFilter; - this.displayLastUpdateTime = params.hasOwnProperty("displayLastUpdateTime")?params.displayLastUpdateTime:true; - - this._addRefreshButtons(); - this._addRowLimitButton(params.defaulGridRowLimit); - this._addColumnsButton(); - - if (!params.disableFiltering) - { - this._addFilteringTools(params.nls); - } - }, - - toggleClearFilterBtn: function(clearFlag) - { - var filterLayer = this.grid.layer("filter"); - var filterSet = filterLayer && filterLayer.filterDef && filterLayer.filterDef(); - this.clearFilterButton.set("disabled", !filterSet); - }, - - destroy: function() - { - this.inherited(arguments); - - if (this.columnDefDialog) - { - this.columnDefDialog.destroy(); - this.columnDefDialog = null; - } - if (this.columnDefButton) - { - this.columnDefButton.destroy(); - this.columnDefButton = null; - } - if (this.filterDefButton) - { - this.filterDefButton.destroy(); - this.filterDefButton = null; - } - if (this.clearFilterButton) - { - this.clearFilterButton.destroy(); - this.clearFilterButton = null; - } - if (this.filterSummary) - { - this.filterSummary.destroy(); - this.filterSummary = null; - } - if (this.setRowNumberLimitButton) - { - this.setRowNumberLimitButton.destroy(); - this.setRowNumberLimitButton = null; - } - if (this.setRowNumberLimitDialog) - { - this.setRowNumberLimitDialog.destroy(); - this.setRowNumberLimitDialog = null; - } - if (this.refreshButton) - { - this.refreshButton.destroy(); - this.refreshButton = null; - } - if (this.autoRefreshButton) - { - this.autoRefreshButton.destroy(); - this.autoRefreshButton = null; - } - - this.grid = null; - this.filterBar = null; - this.filterStatusTip = null; - this.clearFilterDialog = null; - this.filterDefDialog = null; - }, - - _addRefreshButtons: function() - { - var self = this; - this.refreshButton = new dijit.form.Button({ - label: "Refresh", - type: "button", - iconClass: "gridRefreshIcon", - title: "Manual Refresh" - }); - - this.autoRefreshButton = new dijit.form.ToggleButton({ - label: "Auto Refresh", - type: "button", - iconClass: "gridAutoRefreshIcon", - title: "Auto Refresh" - }); - - this.autoRefreshButton.on("change", function(value){ - self.grid.updater.updatable=value; - self.refreshButton.set("disabled", value); - }); - - this.refreshButton.on("click", function(value){ - self.grid.updater.performUpdate(); - }); - - this.filterBar.addChild(this.autoRefreshButton); - this.filterBar.addChild(this.refreshButton); - - if (this.displayLastUpdateTime) - { - var updateStatusPanel = domConstruct.create("div"); - var updateTimeLabel = domConstruct.create("span", {innerHTML: "Update time: ", "class": "formLabel-labelCell", "style": "padding-right: 5px;padding-left: 5px"}, updateStatusPanel); - var updateTimeLabelPreferredTZ = domConstruct.create("span", {innerHTML: "Preferred timezone:", "style": "padding-right: 5px"}, updateStatusPanel); - var updateTimePreferredTZ = domConstruct.create("span", {"style": "padding-right: 5px"}, updateStatusPanel); - var updateTimeLabelBrowserTZ = domConstruct.create("span", {innerHTML: "Browser timezone:", "style": "padding-right: 5px"}, updateStatusPanel); - var updateTimeBrowserTZ = domConstruct.create("span", {"style": "padding-right: 5px"}, updateStatusPanel); - - var userPreferences = this.userPreferences; - var lastUpdateTimeUpdater = function(data) - { - var userTimeZone = userPreferences.timeZone; - var displayStyle = userTimeZone? "inline" : "none"; - updateTimeLabelPreferredTZ.style.display = displayStyle; - updateTimePreferredTZ.style.display = displayStyle; - var formatOptions = {selector: "time", timePattern: "HH:mm:ss.SSS", appendTimeZone: true, addOffset: true}; - var updateTime = new Date(); - updateTimePreferredTZ.innerHTML = userPreferences.formatDateTime(updateTime.getTime(), formatOptions); - updateTimeBrowserTZ.innerHTML = locale.format(updateTime, formatOptions); - }; - - if (self.grid.updater.store) - { - // data have been already provided/or fetched - // set last update time to current time - lastUpdateTimeUpdater(); - } - - self.grid.updater.addOnUpdate(lastUpdateTimeUpdater); - domConstruct.place(updateStatusPanel, this.grid.viewsHeaderNode, "before"); - } - }, - - _addRowLimitButton: function(defaulGridRowLimit) - { - var self = this; - this.setRowNumberLimitButton = new dijit.form.Button({ - label: "Set Row Limit", - type: "button", - iconClass: "rowNumberLimitIcon", - title: "Set Row Number Limit" - }); - this.setRowNumberLimitButton.set("title", "Set Row Number Limit (Current: " + defaulGridRowLimit +")"); - - this.setRowNumberLimitDialog = new RowNumberLimitDialog(this.grid.domNode, function(newLimit){ - if (newLimit > 0 && self.grid.updater.appendLimit != newLimit ) - { - self.grid.updater.appendLimit = newLimit; - self.grid.updater.performRefresh([]); - self.setRowNumberLimitButton.set("title", "Set Row Number Limit (Current: " + newLimit +")"); - } - }); - - this.setRowNumberLimitButton.on("click", function(evt){ - self.setRowNumberLimitDialog.showDialog(self.grid.updater.appendLimit); - }); - - this.filterBar.addChild(this.setRowNumberLimitButton); - }, - - _addColumnsButton: function() - { - var self = this; - this.columnDefDialog = new ColumnDefDialog({grid: this.grid}); - - this.columnDefButton = new dijit.form.Button({ - label: "Display Columns", - type: "button", - iconClass: "columnDefDialogButtonIcon", - title: "Show/Hide Columns" - }); - - this.columnDefButton.on("click", function(e){ - _stopEvent(e); - self.columnDefDialog.showDialog(); - }); - - this.filterBar.addChild(this.columnDefButton); - }, - - _addFilteringTools: function(nls) - { - var self = this; - - this.filterDefButton = new dijit.form.Button({ - "class": "dojoxGridFBarBtn", - label: "Set Filter", - iconClass: "dojoxGridFBarDefFilterBtnIcon", - showLabel: "true", - title: "Define filter" - }); - - this.clearFilterButton = new dijit.form.Button({ - "class": "dojoxGridFBarBtn", - label: "Clear filter", - iconClass: "dojoxGridFBarClearFilterButtontnIcon", - showLabel: "true", - title: "Clear filter", - disabled: true - }); - - - this.filterDefButton.on("click", function(e){ - _stopEvent(e); - - // a bit of a hack to force dialog to rebuild the criteria controls in order to get rid from empty rule controls - self.filterDefDialog._criteriasChanged = true; - self.filterDefDialog.showDialog(); - }); - - this.clearFilterButton.on("click", function(e){ - _stopEvent(e); - if (self.ruleCountToConfirmClearFilter && self.filterDefDialog.getCriteria() >= self.ruleCountToConfirmClearFilter) - { - self.clearFilterDialog.show(); - } - else - { - self.grid.layer("filter").filterDef(null); - self.toggleClearFilterBtn(true) - } - }); - - this.filterSummary = new FilterSummary({grid: this.grid, filterStatusTip: this.filterStatusTip, nls: nls}); - - this.filterBar.addChild(this.filterDefButton); - this.filterBar.addChild(this.clearFilterButton); - - this.filterBar.addChild(new dijit.ToolbarSeparator()); - this.filterBar.addChild(this.filterSummary, "last"); - this.filterBar.getColumnIdx = function(coordX){return self.filterSummary._getColumnIdx(coordX);}; - - } - }); -}); \ No newline at end of file +define(["dojo/_base/declare", + "dojo/_base/event", + "dojo/dom-construct", + "dojo/date/locale", + "dijit/form/Button", + "dijit/form/ToggleButton", + "qpid/common/grid/RowNumberLimitDialog", + "qpid/common/grid/ColumnDefDialog", + "qpid/common/grid/FilterSummary"], + function (declare, event, domConstruct, locale, Button, ToggleButton, RowNumberLimitDialog, ColumnDefDialog, FilterSummary) + { + + var _stopEvent = function (evt) + { + try + { + if (evt && evt.preventDefault) + { + event.stop(evt); + } + } + catch (e) + { + } + }; + + return declare("qpid.common.grid.EnhancedFilterTools", null, { + + grid: null, + filterBar: null, + filterStatusTip: null, + clearFilterDialog: null, + filterDefDialog: null, + + columnDefDialog: null, + columnDefButton: null, + filterDefButton: null, + clearFilterButton: null, + filterSummary: null, + setRowNumberLimitButton: null, + setRowNumberLimitDialog: null, + refreshButton: null, + autoRefreshButton: null, + + constructor: function (params) + { + this.inherited(arguments); + + this.userPreferences = params.userPreferences; + this.filterBar = params.toolbar; + this.grid = params.grid; + this.filterStatusTip = params.filterStatusTip; + this.clearFilterDialog = params.clearFilterDialog; + this.filterDefDialog = params.filterDefDialog; + this.ruleCountToConfirmClearFilter = params.ruleCountToConfirmClearFilter; + this.displayLastUpdateTime = + params.hasOwnProperty("displayLastUpdateTime") ? params.displayLastUpdateTime : true; + + this._addRefreshButtons(); + this._addRowLimitButton(params.defaulGridRowLimit); + this._addColumnsButton(); + + if (!params.disableFiltering) + { + this._addFilteringTools(params.nls); + } + }, + + toggleClearFilterBtn: function (clearFlag) + { + var filterLayer = this.grid.layer("filter"); + var filterSet = filterLayer && filterLayer.filterDef && filterLayer.filterDef(); + this.clearFilterButton.set("disabled", !filterSet); + }, + + destroy: function () + { + this.inherited(arguments); + + if (this.columnDefDialog) + { + this.columnDefDialog.destroy(); + this.columnDefDialog = null; + } + if (this.columnDefButton) + { + this.columnDefButton.destroy(); + this.columnDefButton = null; + } + if (this.filterDefButton) + { + this.filterDefButton.destroy(); + this.filterDefButton = null; + } + if (this.clearFilterButton) + { + this.clearFilterButton.destroy(); + this.clearFilterButton = null; + } + if (this.filterSummary) + { + this.filterSummary.destroy(); + this.filterSummary = null; + } + if (this.setRowNumberLimitButton) + { + this.setRowNumberLimitButton.destroy(); + this.setRowNumberLimitButton = null; + } + if (this.setRowNumberLimitDialog) + { + this.setRowNumberLimitDialog.destroy(); + this.setRowNumberLimitDialog = null; + } + if (this.refreshButton) + { + this.refreshButton.destroy(); + this.refreshButton = null; + } + if (this.autoRefreshButton) + { + this.autoRefreshButton.destroy(); + this.autoRefreshButton = null; + } + + this.grid = null; + this.filterBar = null; + this.filterStatusTip = null; + this.clearFilterDialog = null; + this.filterDefDialog = null; + }, + + _addRefreshButtons: function () + { + var self = this; + this.refreshButton = new dijit.form.Button({ + label: "Refresh", + type: "button", + iconClass: "gridRefreshIcon", + title: "Manual Refresh" + }); + + this.autoRefreshButton = new dijit.form.ToggleButton({ + label: "Auto Refresh", + type: "button", + iconClass: "gridAutoRefreshIcon", + title: "Auto Refresh" + }); + + this.autoRefreshButton.on("change", function (value) + { + self.grid.updater.updatable = value; + self.refreshButton.set("disabled", value); + }); + + this.refreshButton.on("click", function (value) + { + self.grid.updater.performUpdate(); + }); + + this.filterBar.addChild(this.autoRefreshButton); + this.filterBar.addChild(this.refreshButton); + + if (this.displayLastUpdateTime) + { + var updateStatusPanel = domConstruct.create("div"); + var updateTimeLabel = domConstruct.create("span", + { + innerHTML: "Update time: ", + "class": "formLabel-labelCell", + "style": "padding-right: 5px;padding-left: 5px" + }, + updateStatusPanel); + var updateTimeLabelPreferredTZ = domConstruct.create("span", + { + innerHTML: "Preferred timezone:", + "style": "padding-right: 5px" + }, + updateStatusPanel); + var updateTimePreferredTZ = domConstruct.create("span", + {"style": "padding-right: 5px"}, + updateStatusPanel); + var updateTimeLabelBrowserTZ = domConstruct.create("span", + { + innerHTML: "Browser timezone:", + "style": "padding-right: 5px" + }, + updateStatusPanel); + var updateTimeBrowserTZ = domConstruct.create("span", + {"style": "padding-right: 5px"}, + updateStatusPanel); + + var userPreferences = this.userPreferences; + var lastUpdateTimeUpdater = function (data) + { + var userTimeZone = userPreferences.timeZone; + var displayStyle = userTimeZone ? "inline" : "none"; + updateTimeLabelPreferredTZ.style.display = displayStyle; + updateTimePreferredTZ.style.display = displayStyle; + var formatOptions = { + selector: "time", + timePattern: "HH:mm:ss.SSS", + appendTimeZone: true, + addOffset: true + }; + var updateTime = new Date(); + updateTimePreferredTZ.innerHTML = + userPreferences.formatDateTime(updateTime.getTime(), formatOptions); + updateTimeBrowserTZ.innerHTML = locale.format(updateTime, formatOptions); + }; + + if (self.grid.updater.store) + { + // data have been already provided/or fetched + // set last update time to current time + lastUpdateTimeUpdater(); + } + + self.grid.updater.addOnUpdate(lastUpdateTimeUpdater); + domConstruct.place(updateStatusPanel, this.grid.viewsHeaderNode, "before"); + } + }, + + _addRowLimitButton: function (defaulGridRowLimit) + { + var self = this; + this.setRowNumberLimitButton = new dijit.form.Button({ + label: "Set Row Limit", + type: "button", + iconClass: "rowNumberLimitIcon", + title: "Set Row Number Limit" + }); + this.setRowNumberLimitButton.set("title", + "Set Row Number Limit (Current: " + defaulGridRowLimit + ")"); + + this.setRowNumberLimitDialog = new RowNumberLimitDialog(this.grid.domNode, function (newLimit) + { + if (newLimit > 0 && self.grid.updater.appendLimit != newLimit) + { + self.grid.updater.appendLimit = newLimit; + self.grid.updater.performRefresh([]); + self.setRowNumberLimitButton.set("title", + "Set Row Number Limit (Current: " + newLimit + ")"); + } + }); + + this.setRowNumberLimitButton.on("click", function (evt) + { + self.setRowNumberLimitDialog.showDialog(self.grid.updater.appendLimit); + }); + + this.filterBar.addChild(this.setRowNumberLimitButton); + }, + + _addColumnsButton: function () + { + var self = this; + this.columnDefDialog = new ColumnDefDialog({grid: this.grid}); + + this.columnDefButton = new dijit.form.Button({ + label: "Display Columns", + type: "button", + iconClass: "columnDefDialogButtonIcon", + title: "Show/Hide Columns" + }); + + this.columnDefButton.on("click", function (e) + { + _stopEvent(e); + self.columnDefDialog.showDialog(); + }); + + this.filterBar.addChild(this.columnDefButton); + }, + + _addFilteringTools: function (nls) + { + var self = this; + + this.filterDefButton = new dijit.form.Button({ + "class": "dojoxGridFBarBtn", + label: "Set Filter", + iconClass: "dojoxGridFBarDefFilterBtnIcon", + showLabel: "true", + title: "Define filter" + }); + + this.clearFilterButton = new dijit.form.Button({ + "class": "dojoxGridFBarBtn", + label: "Clear filter", + iconClass: "dojoxGridFBarClearFilterButtontnIcon", + showLabel: "true", + title: "Clear filter", + disabled: true + }); + + this.filterDefButton.on("click", function (e) + { + _stopEvent(e); + + // a bit of a hack to force dialog to rebuild the criteria controls in order to get rid from empty rule controls + self.filterDefDialog._criteriasChanged = true; + self.filterDefDialog.showDialog(); + }); + + this.clearFilterButton.on("click", function (e) + { + _stopEvent(e); + if (self.ruleCountToConfirmClearFilter && self.filterDefDialog.getCriteria() + >= self.ruleCountToConfirmClearFilter) + { + self.clearFilterDialog.show(); + } + else + { + self.grid.layer("filter").filterDef(null); + self.toggleClearFilterBtn(true) + } + }); + + this.filterSummary = new FilterSummary({ + grid: this.grid, + filterStatusTip: this.filterStatusTip, + nls: nls + }); + + this.filterBar.addChild(this.filterDefButton); + this.filterBar.addChild(this.clearFilterButton); + + this.filterBar.addChild(new dijit.ToolbarSeparator()); + this.filterBar.addChild(this.filterSummary, "last"); + this.filterBar.getColumnIdx = function (coordX) + { + return self.filterSummary._getColumnIdx(coordX); + }; + + } + }); + }); \ No newline at end of file Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/FilterSummary.js URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/FilterSummary.js?rev=1741609&r1=1741608&r2=1741609&view=diff ============================================================================== --- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/FilterSummary.js (original) +++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/FilterSummary.js Fri Apr 29 11:04:40 2016 @@ -19,155 +19,186 @@ * */ -define([ - "dojo/_base/declare", - "dojo/_base/lang", - "dojo/_base/html", - "dojo/query", - "dojo/dom-construct", - "dojo/string", - "dojo/on", - "dijit/_WidgetBase" -], function(declare, lang, html, query, domConstruct, string, on, _WidgetBase){ - -return declare("qpid.common.grid.FilterSummary", [_WidgetBase], { - - domNode: null, - itemName: null, - filterStatusTip: null, - grid: null, - _handle_statusTooltip: null, - _timeout_statusTooltip: 300, - _nls: null, - - constructor: function(params) - { - this.inherited(arguments); - this.itemName = params.itemsName; - this.initialize(params.filterStatusTip, params.grid); - this._nls = params.nls; - }, - - buildRendering: function(){ - this.inherited(arguments); - var itemsName = this.itemName || this._nls["defaultItemsName"]; - var message = string.substitute(this._nls["filterBarMsgNoFilterTemplate"], [0, itemsName ]); - this.domNode = domConstruct.create("span", {innerHTML: message, "class": "dijit dijitReset dijitInline dijitButtonInline", role: "presentation" }); - }, - - postCreate: function(){ - this.inherited(arguments); - on(this.domNode, "mouseenter", lang.hitch(this, this._onMouseEnter)); - on(this.domNode, "mouseleave", lang.hitch(this, this._onMouseLeave)); - on(this.domNode, "mousemove", lang.hitch(this, this._onMouseMove)); - }, - - destroy: function() - { - this.inherited(arguments); - this.itemName = null; - this.filterStatusTip = null; - this.grid = null; - this._handle_statusTooltip = null; - this._filteredClass = null; - this._nls = null; - }, - - initialize: function(filterStatusTip, grid) - { - this.filterStatusTip = filterStatusTip; - this.grid = grid; - if (this.grid) - { - var filterLayer = grid.layer("filter"); - this.connect(filterLayer, "onFiltered", this.onFiltered); - } - }, - - onFiltered: function(filteredSize, originSize) - { - try - { - var itemsName = this.itemName || this._nls["defaultItemsName"], - msg = "", g = this.grid, - filterLayer = g.layer("filter"); - if(filterLayer.filterDef()){ - msg = string.substitute(this._nls["filterBarMsgHasFilterTemplate"], [filteredSize, originSize, itemsName]); - }else{ - msg = string.substitute(this._nls["filterBarMsgNoFilterTemplate"], [originSize, itemsName]); - } - this.domNode.innerHTML = msg; - } - catch(e) - { - // swallow and log exception - // otherwise grid rendering is screwed - console.error(e); - } - }, - - _getColumnIdx: function(coordX){ - var headers = query("[role='columnheader']", this.grid.viewsHeaderNode); - var idx = -1; - for(var i = headers.length - 1; i >= 0; --i){ - var coord = html.position(headers[i]); - if(coordX >= coord.x && coordX < coord.x + coord.w){ - idx = i; - break; - } - } - if(idx >= 0 && this.grid.layout.cells[idx].filterable !== false){ - return idx; - }else{ - return -1; - } - }, - - _setStatusTipTimeout: function(){ - this._clearStatusTipTimeout(); - this._handle_statusTooltip = setTimeout(lang.hitch(this,this._showStatusTooltip),this._timeout_statusTooltip); - }, - - _clearStatusTipTimeout: function(){ - if (this._handle_statusTooltip){ - clearTimeout(this._handle_statusTooltip); - } - this._handle_statusTooltip = null; - }, - - _showStatusTooltip: function(){ - this._handle_statusTooltip = null; - if(this.filterStatusTip){ - this.filterStatusTip.showDialog(this._tippos.x, this._tippos.y, this._getColumnIdx(this._tippos.x)); - } - }, - - _updateTipPosition: function(evt){ - this._tippos = { - x: evt.pageX, - y: evt.pageY - }; - }, - - _onMouseEnter: function(e){ - this._updateTipPosition(e); - if(this.filterStatusTip){ - this._setStatusTipTimeout(); - } - }, - - _onMouseMove: function(e){ - if(this.filterStatusTip){ - this._setStatusTipTimeout(); - if(this._handle_statusTooltip){ - this._updateTipPosition(e); - } - } - }, - - _onMouseLeave: function(e){ - this._clearStatusTipTimeout(); - } - }); +define(["dojo/_base/declare", + "dojo/_base/lang", + "dojo/_base/html", + "dojo/query", + "dojo/dom-construct", + "dojo/string", + "dojo/on", + "dijit/_WidgetBase"], function (declare, lang, html, query, domConstruct, string, on, _WidgetBase) + { + + return declare("qpid.common.grid.FilterSummary", [_WidgetBase], { + + domNode: null, + itemName: null, + filterStatusTip: null, + grid: null, + _handle_statusTooltip: null, + _timeout_statusTooltip: 300, + _nls: null, + + constructor: function (params) + { + this.inherited(arguments); + this.itemName = params.itemsName; + this.initialize(params.filterStatusTip, params.grid); + this._nls = params.nls; + }, + + buildRendering: function () + { + this.inherited(arguments); + var itemsName = this.itemName || this._nls["defaultItemsName"]; + var message = string.substitute(this._nls["filterBarMsgNoFilterTemplate"], [0, itemsName]); + this.domNode = domConstruct.create("span", + { + innerHTML: message, + "class": "dijit dijitReset dijitInline dijitButtonInline", + role: "presentation" + }); + }, + + postCreate: function () + { + this.inherited(arguments); + on(this.domNode, "mouseenter", lang.hitch(this, this._onMouseEnter)); + on(this.domNode, "mouseleave", lang.hitch(this, this._onMouseLeave)); + on(this.domNode, "mousemove", lang.hitch(this, this._onMouseMove)); + }, + + destroy: function () + { + this.inherited(arguments); + this.itemName = null; + this.filterStatusTip = null; + this.grid = null; + this._handle_statusTooltip = null; + this._filteredClass = null; + this._nls = null; + }, + + initialize: function (filterStatusTip, grid) + { + this.filterStatusTip = filterStatusTip; + this.grid = grid; + if (this.grid) + { + var filterLayer = grid.layer("filter"); + this.connect(filterLayer, "onFiltered", this.onFiltered); + } + }, + + onFiltered: function (filteredSize, originSize) + { + try + { + var itemsName = this.itemName + || this._nls["defaultItemsName"], msg = "", g = this.grid, filterLayer = g.layer( + "filter"); + if (filterLayer.filterDef()) + { + msg = string.substitute(this._nls["filterBarMsgHasFilterTemplate"], + [filteredSize, originSize, itemsName]); + } + else + { + msg = string.substitute(this._nls["filterBarMsgNoFilterTemplate"], [originSize, itemsName]); + } + this.domNode.innerHTML = msg; + } + catch (e) + { + // swallow and log exception + // otherwise grid rendering is screwed + console.error(e); + } + }, + + _getColumnIdx: function (coordX) + { + var headers = query("[role='columnheader']", this.grid.viewsHeaderNode); + var idx = -1; + for (var i = headers.length - 1; i >= 0; --i) + { + var coord = html.position(headers[i]); + if (coordX >= coord.x && coordX < coord.x + coord.w) + { + idx = i; + break; + } + } + if (idx >= 0 && this.grid.layout.cells[idx].filterable !== false) + { + return idx; + } + else + { + return -1; + } + }, + + _setStatusTipTimeout: function () + { + this._clearStatusTipTimeout(); + this._handle_statusTooltip = + setTimeout(lang.hitch(this, this._showStatusTooltip), this._timeout_statusTooltip); + }, + + _clearStatusTipTimeout: function () + { + if (this._handle_statusTooltip) + { + clearTimeout(this._handle_statusTooltip); + } + this._handle_statusTooltip = null; + }, + + _showStatusTooltip: function () + { + this._handle_statusTooltip = null; + if (this.filterStatusTip) + { + this.filterStatusTip.showDialog(this._tippos.x, + this._tippos.y, + this._getColumnIdx(this._tippos.x)); + } + }, + + _updateTipPosition: function (evt) + { + this._tippos = { + x: evt.pageX, + y: evt.pageY + }; + }, + + _onMouseEnter: function (e) + { + this._updateTipPosition(e); + if (this.filterStatusTip) + { + this._setStatusTipTimeout(); + } + }, + + _onMouseMove: function (e) + { + if (this.filterStatusTip) + { + this._setStatusTipTimeout(); + if (this._handle_statusTooltip) + { + this._updateTipPosition(e); + } + } + }, + + _onMouseLeave: function (e) + { + this._clearStatusTipTimeout(); + } + }); -}); \ No newline at end of file + }); \ No newline at end of file --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
