diff options
Diffstat (limited to 'java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/FilterSummary.js')
-rw-r--r-- | java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/FilterSummary.js | 173 |
1 files changed, 173 insertions, 0 deletions
diff --git a/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/FilterSummary.js b/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/FilterSummary.js new file mode 100644 index 0000000000..2b1d960fa5 --- /dev/null +++ b/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/FilterSummary.js @@ -0,0 +1,173 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ + +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 |