web/js/vcldojo/HoverTooltip.js (87 lines of code) (raw):

/* * 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. */ 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; } } } );