diff options
-rw-r--r-- | tests/unit/tooltip/tooltip_methods.js | 35 | ||||
-rw-r--r-- | ui/jquery.ui.tooltip.js | 8 |
2 files changed, 41 insertions, 2 deletions
diff --git a/tests/unit/tooltip/tooltip_methods.js b/tests/unit/tooltip/tooltip_methods.js index a557ff943..ead360bf3 100644 --- a/tests/unit/tooltip/tooltip_methods.js +++ b/tests/unit/tooltip/tooltip_methods.js @@ -96,4 +96,39 @@ test( "widget", function() { strictEqual( widgetElement[ 0 ], element[ 0 ], "same element" ); }); +test( "preserve changes to title attributes on close and destroy", function() { + expect( 6 ); + var element = $( "#tooltipped1" ), + changed = "changed title text", + original = "original title text", + tests = []; + + // 1. Changes to title attribute are preserved on close() + tests[ 0 ] = { title: changed, expected: changed, method: "close" }; + // 2. Changes to title attribute are preserved on destroy() + tests[ 1 ] = { title: changed, expected: changed , method: "destroy" }; + // 3. Changes to title attribute are NOT preserved when set to empty string on close() + tests[ 2 ] = { title: "", expected: original, method: "close" }; + // 4. Changes to title attribute are NOT preserved when set to empty string on destroy() + tests[ 3 ] = { title: "", expected: original, method: "destroy" }; + // 5. Changes to title attribute NOT preserved when attribute has been removed on close() + tests[ 4 ] = { expected: original, method: "close" }; + // 6. Changes to title attribute NOT preserved when attribute has been removed on destroy() + tests[ 5 ] = { expected: original, method: "destroy" }; + + $.each( tests, function( index, test ) { + + element.attr( "title", original ).tooltip() + .tooltip( "open", $.Event( "mouseover", { target: element[ 0 ] } ) ); + if ( test.title ) { + element.attr( "title", test.title ); + } else { + element.removeAttr( "title" ); + } + element.tooltip( test.method ); + equal( $( "#tooltipped1" ).attr( "title" ), test.expected ); + + } ); +}); + }( jQuery ) ); diff --git a/ui/jquery.ui.tooltip.js b/ui/jquery.ui.tooltip.js index 1ebe1a958..6854032f4 100644 --- a/ui/jquery.ui.tooltip.js +++ b/ui/jquery.ui.tooltip.js @@ -339,7 +339,8 @@ $.widget( "ui.tooltip", { clearInterval( this.delayedShow ); // only set title if we had one before (see comment in _open()) - if ( target.data( "ui-tooltip-title" ) ) { + // If the title attribute has changed since open(), don't restore + if ( target.data( "ui-tooltip-title" ) && !target.attr( "title" ) ) { target.attr( "title", target.data( "ui-tooltip-title" ) ); } @@ -412,7 +413,10 @@ $.widget( "ui.tooltip", { // Restore the title if ( element.data( "ui-tooltip-title" ) ) { - element.attr( "title", element.data( "ui-tooltip-title" ) ); + // If the title attribute has changed since open(), don't restore + if ( !element.attr( "title" ) ) { + element.attr( "title", element.data( "ui-tooltip-title" ) ); + } element.removeData( "ui-tooltip-title" ); } }); |