]> source.dussan.org Git - jquery-ui.git/commitdiff
Tooltip: Do not attempt to position if tooltip is hidden. Fixed #8644 - Delayed toolt...
authorAndrew Couch <acouch@bluewolf.com>
Tue, 16 Oct 2012 16:55:50 +0000 (12:55 -0400)
committerJörn Zaefferer <joern.zaefferer@gmail.com>
Sun, 21 Oct 2012 17:15:59 +0000 (13:15 -0400)
tests/unit/tooltip/tooltip_options.js
tests/visual/tooltip/tooltip.html
ui/jquery.ui.tooltip.js

index db193e8fa5320e97aab72ecbefc148f4e1784ca4..e5046f4648b47176f8159fc4c62da22995072481 100644 (file)
@@ -103,4 +103,39 @@ test( "tooltipClass", function() {
        ok( $( "#" + element.data( "ui-tooltip-id" ) ).hasClass( "custom" ) );
 });
 
+test( "track + show delay", function() {
+       expect( 2 );
+       var event,
+               leftVal = 314,
+               topVal = 159,
+               offsetVal = 26,
+               element = $( "#tooltipped1" ).tooltip({
+                       track: true,
+                       show: {
+                               delay: 1
+                       },
+                       position: {
+                               my: "left+" + offsetVal + " top+" + offsetVal,
+                               at: "right bottom"
+                       }
+               });
+
+       event = $.Event( "mouseover" );
+       event.target = $( "#tooltipped1" )[ 0 ];
+       event.originalEvent = { type: "mouseover" };
+       event.pageX = leftVal;
+       event.pageY = topVal;
+       element.trigger( event );
+
+       event = $.Event( "mousemove" );
+       event.target = $( "#tooltipped1" )[ 0 ];
+       event.originalEvent = { type: "mousemove" };
+       event.pageX = leftVal;
+       event.pageY = topVal;
+       element.trigger( event );
+
+       equal( $( ".ui-tooltip" ).css( "left" ), leftVal + offsetVal + "px" );
+       equal( $( ".ui-tooltip" ).css( "top" ), topVal + offsetVal + "px" );
+});
+
 }( jQuery ) );
index 97fa99bb949d2c077abce1db3190c6e36b28f82e..598af0ee850b69d7f485bf67a63f51646aa535c3 100644 (file)
                        }
                });
 
-               $( "#blurs-on-click" ).tooltip().click(function() {
+               $( "#blurs-on-click" ).tooltip({
+                       track: true,
+                       show: {
+                               delay: 500
+                       }
+               }).click(function() {
                        $( "#focus-on-me" ).focus();
                });
        });
index 1be56c7ea35117bd7619b6adc84c5c7087287acf..a04b8428936f00733bb7a801c22b20bbe05c180b 100644 (file)
@@ -206,7 +206,8 @@ $.widget( "ui.tooltip", {
        },
 
        _open: function( event, target, content ) {
-               var tooltip, positionOption, events;
+               var tooltip, events, delayedShow,
+                       positionOption = $.extend( {}, this.options.position );
 
                if ( !content ) {
                        return;
@@ -241,10 +242,12 @@ $.widget( "ui.tooltip", {
 
                function position( event ) {
                        positionOption.of = event;
+                       if ( tooltip.is( ":hidden" ) ) {
+                               return;
+                       }
                        tooltip.position( positionOption );
                }
                if ( this.options.track && event && /^mouse/.test( event.originalEvent.type ) ) {
-                       positionOption = $.extend( {}, this.options.position );
                        this._on( this.document, {
                                mousemove: position
                        });
@@ -259,6 +262,17 @@ $.widget( "ui.tooltip", {
                tooltip.hide();
 
                this._show( tooltip, this.options.show );
+               // Handle tracking tooltips that are shown with a delay (#8644). As soon
+               // as the tooltip is visible, position the tooltip using the most recent
+               // event.
+               if ( this.options.show && this.options.show.delay ) {
+                       delayedShow = setInterval(function() {
+                               if ( tooltip.is( ":visible" ) ) {
+                                       position( positionOption.of );
+                                       clearInterval( delayedShow );
+                               }
+                       }, $.fx.interval );
+               }
 
                this._trigger( "open", event, { tooltip: tooltip } );