Author: jfthomps Date: Tue Oct 18 18:18:45 2011 New Revision: 1185779 URL: http://svn.apache.org/viewvc?rev=1185779&view=rev Log: no JIRA
added this widget as part of the major rewrite of viewRequests in requests.php (svn revision 1097842 - this should have been checked in at that point) Added: incubator/vcl/trunk/web/js/vcldojo/HoverTooltip.js Added: incubator/vcl/trunk/web/js/vcldojo/HoverTooltip.js URL: http://svn.apache.org/viewvc/incubator/vcl/trunk/web/js/vcldojo/HoverTooltip.js?rev=1185779&view=auto ============================================================================== --- incubator/vcl/trunk/web/js/vcldojo/HoverTooltip.js (added) +++ incubator/vcl/trunk/web/js/vcldojo/HoverTooltip.js Tue Oct 18 18:18:45 2011 @@ -0,0 +1,143 @@ +/* +* 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. +*/ +if(! dojo._hasResource["vcldojo.HoverTooltip"]) { +dojo._hasResource["vcldojo.HoverTooltip"] = true; +dojo.provide("vcldojo.HoverTooltip"); + +dojo.declare( + "vcldojo._MasterTooltip", + dijit._MasterTooltip, + { + tooltipobj: '', + _saveAroundNode: '', + templateString: dojo.cache("dijit", "templates/Tooltip.html", "<div class=\"dijitTooltip dijitTooltipLeft\" id=\"dojoTooltip\">\n\t<div class=\"dijitTooltipContainer dijitTooltipContents\" dojoAttachPoint=\"containerNode\" dojoAttachEvent=\"onmouseenter:_mouseIn,onmouseleave:_mouseOut\" waiRole='alert'></div>\n\t<div class=\"dijitTooltipConnector\" dojoAttachPoint=\"connectorNode\"></div>\n</div>\n"), + _mouseIn: function(e) { + this.tooltipobj._hovering = true; + }, + _mouseOut: function(e) { + this.tooltipobj._hovering = false; + this.hide(this._saveAroundNode); + if(this.tooltipobj._showTimer) { + clearTimeout(this.tooltipobj._showTimer); + delete this.tooltip._showTimer; + } + }, + + show: function(/*String*/ innerHTML, /*DomNode*/ aroundNode, /*String[]?*/ position, /*Boolean*/ rtl, tooltipobj){ + // summary: + // Display tooltip w/specified contents to right of specified node + // (To left if there's no space on the right, or if rtl == true) + this.tooltipobj = tooltipobj; + this.tooltipobj._hovering = false; + + this._saveAroundNode = aroundNode; + + if(this.aroundNode && this.aroundNode === aroundNode){ + return; + } + + if(this.fadeOut.status() == "playing"){ + // previous tooltip is being hidden; wait until the hide completes then show new one + this._onDeck=arguments; + return; + } + this.containerNode.innerHTML=innerHTML; + + var pos = dijit.placeOnScreenAroundElement(this.domNode, aroundNode, dijit.getPopupAroundAlignment((position && position.length) ? position : dijit.Tooltip.defaultPosition, !rtl), dojo.hitch(this, "orient")); + + // show it + dojo.style(this.domNode, "opacity", 0); + this.fadeIn.play(); + this.isShowingNow = true; + this.aroundNode = aroundNode; + } + } +); + +dijit.showTooltip = function(/*String*/ innerHTML, /*DomNode*/ aroundNode, /*String[]?*/ position, /*Boolean*/ rtl, tooltipobj){ + // summary: + // Display tooltip w/specified contents in specified position. + // See description of dijit.Tooltip.defaultPosition for details on position parameter. + // If position is not specified then dijit.Tooltip.defaultPosition is used. + if(!dijit._masterTT){ dijit._masterTT = new vcldojo._MasterTooltip(); } + return dijit._masterTT.show(innerHTML, aroundNode, position, rtl, tooltipobj); +}; + +dijit.hideTooltip = function(aroundNode){ + // summary: + // Hide the tooltip + if(!dijit._masterTT){ dijit._masterTT = new vcldojo._MasterTooltip(); } + return dijit._masterTT.hide(aroundNode); +}; + +dojo.declare( + "vcldojo.HoverTooltip", + dijit.Tooltip, + { + _hovering: false, + _onUnHover: function(e) { + if(this._focus){ return; } + + if(this._showTimer){ + clearTimeout(this._showTimer); + delete this._showTimer; + } + if(! this._hideTimer) { + this._hideTimer = setTimeout(dojo.hitch(this, function(){this.close()}), 500); + } + }, + + open: function(/*DomNode*/ target){ + // summary: + // Display the tooltip; usually not called directly. + // tags: + // private + + if(this._showTimer){ + clearTimeout(this._showTimer); + delete this._showTimer; + } + dijit.showTooltip(this.label || this.domNode.innerHTML, target, this.position, !this.isLeftToRight(), this); + + this._connectNode = target; + this.onShow(target, this.position); + }, + + close: function(){ + // summary: + // Hide the tooltip or cancel timer for show of tooltip + // tags: + // private + if(this._hovering == true) { + return; + } + + if(this._connectNode){ + // if tooltip is currently shown + dijit.hideTooltip(this._connectNode); + delete this._connectNode; + this.onHide(); + } + if(this._showTimer){ + // if tooltip is scheduled to be shown (after a brief delay) + clearTimeout(this._showTimer); + delete this._showTimer; + } + } + } +); +}