Skip to content

Commit 0b3e59f

Browse files
couchandjzaefferer
authored andcommitted
Tooltip: Do not attempt to position if tooltip is hidden. Fixed #8644 - Delayed tooltips set to track should reposition when being shown for the first time.
1 parent 3b2d1e7 commit 0b3e59f

File tree

3 files changed

+57
-3
lines changed

3 files changed

+57
-3
lines changed

tests/unit/tooltip/tooltip_options.js

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,4 +103,39 @@ test( "tooltipClass", function() {
103103
ok( $( "#" + element.data( "ui-tooltip-id" ) ).hasClass( "custom" ) );
104104
});
105105

106+
test( "track + show delay", function() {
107+
expect( 2 );
108+
var event,
109+
leftVal = 314,
110+
topVal = 159,
111+
offsetVal = 26,
112+
element = $( "#tooltipped1" ).tooltip({
113+
track: true,
114+
show: {
115+
delay: 1
116+
},
117+
position: {
118+
my: "left+" + offsetVal + " top+" + offsetVal,
119+
at: "right bottom"
120+
}
121+
});
122+
123+
event = $.Event( "mouseover" );
124+
event.target = $( "#tooltipped1" )[ 0 ];
125+
event.originalEvent = { type: "mouseover" };
126+
event.pageX = leftVal;
127+
event.pageY = topVal;
128+
element.trigger( event );
129+
130+
event = $.Event( "mousemove" );
131+
event.target = $( "#tooltipped1" )[ 0 ];
132+
event.originalEvent = { type: "mousemove" };
133+
event.pageX = leftVal;
134+
event.pageY = topVal;
135+
element.trigger( event );
136+
137+
equal( $( ".ui-tooltip" ).css( "left" ), leftVal + offsetVal + "px" );
138+
equal( $( ".ui-tooltip" ).css( "top" ), topVal + offsetVal + "px" );
139+
});
140+
106141
}( jQuery ) );

tests/visual/tooltip/tooltip.html

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,12 @@
9191
}
9292
});
9393

94-
$( "#blurs-on-click" ).tooltip().click(function() {
94+
$( "#blurs-on-click" ).tooltip({
95+
track: true,
96+
show: {
97+
delay: 500
98+
}
99+
}).click(function() {
95100
$( "#focus-on-me" ).focus();
96101
});
97102
});

ui/jquery.ui.tooltip.js

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,8 @@ $.widget( "ui.tooltip", {
206206
},
207207

208208
_open: function( event, target, content ) {
209-
var tooltip, positionOption, events;
209+
var tooltip, events, delayedShow,
210+
positionOption = $.extend( {}, this.options.position );
210211

211212
if ( !content ) {
212213
return;
@@ -241,10 +242,12 @@ $.widget( "ui.tooltip", {
241242

242243
function position( event ) {
243244
positionOption.of = event;
245+
if ( tooltip.is( ":hidden" ) ) {
246+
return;
247+
}
244248
tooltip.position( positionOption );
245249
}
246250
if ( this.options.track && event && /^mouse/.test( event.originalEvent.type ) ) {
247-
positionOption = $.extend( {}, this.options.position );
248251
this._on( this.document, {
249252
mousemove: position
250253
});
@@ -259,6 +262,17 @@ $.widget( "ui.tooltip", {
259262
tooltip.hide();
260263

261264
this._show( tooltip, this.options.show );
265+
// Handle tracking tooltips that are shown with a delay (#8644). As soon
266+
// as the tooltip is visible, position the tooltip using the most recent
267+
// event.
268+
if ( this.options.show && this.options.show.delay ) {
269+
delayedShow = setInterval(function() {
270+
if ( tooltip.is( ":visible" ) ) {
271+
position( positionOption.of );
272+
clearInterval( delayedShow );
273+
}
274+
}, $.fx.interval );
275+
}
262276

263277
this._trigger( "open", event, { tooltip: tooltip } );
264278

0 commit comments

Comments
 (0)