]> source.dussan.org Git - jquery-ui.git/commitdiff
Position: Make sure `of` is treated as a CSS selector
authorMichał Gołębiowski-Owczarek <m.goleb@gmail.com>
Tue, 4 May 2021 11:31:39 +0000 (13:31 +0200)
committerGitHub <noreply@github.com>
Tue, 4 May 2021 11:31:39 +0000 (13:31 +0200)
Closes gh-1955

tests/unit/position/core.js
ui/position.js

index 49f02afab9ba28cfd544a0bbed3f38be1452b03f..f5c78424225c965201e88074ad08322852deec36 100644 (file)
@@ -113,7 +113,9 @@ QUnit.test( "positions", function( assert ) {
 } );
 
 QUnit.test( "of", function( assert ) {
-       assert.expect( 9 + ( scrollTopSupport() ? 1 : 0 ) );
+       assert.expect( 10 + ( scrollTopSupport() ? 1 : 0 ) );
+
+       var done = assert.async();
 
        var event;
 
@@ -225,6 +227,21 @@ QUnit.test( "of", function( assert ) {
                top: 600,
                left: 400
        }, "event - left top, right bottom" );
+
+       try {
+               $( "#elx" ).position( {
+                       my: "left top",
+                       at: "right bottom",
+                       of: "<img onerror='window.globalOf=true' src='/404' />",
+                       collision: "none"
+               } );
+       } catch ( e ) {}
+
+       setTimeout( function() {
+               assert.equal( window.globalOf, undefined, "of treated as a selector" );
+               delete window.globalOf;
+               done();
+       }, 500 );
 } );
 
 QUnit.test( "offsets", function( assert ) {
@@ -334,6 +351,7 @@ QUnit.test( "using", function( assert ) {
                        assert.deepEqual( position, expectedPosition, "correct position for call #" + count );
                        assert.deepEqual( feedback.element.element[ 0 ], elems[ count ] );
                        delete feedback.element.element;
+                       delete feedback.target.element.prevObject;
                        assert.deepEqual( feedback, expectedFeedback );
                        count++;
                }
index 2d196959974aa6e2256496de707040f94c6fe59d..2bd814d9350df4172cfc948673216266dafc8fdf 100644 (file)
@@ -148,7 +148,12 @@ $.fn.position = function( options ) {
        options = $.extend( {}, options );
 
        var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,
-               target = $( options.of ),
+
+               // Make sure string options are treated as CSS selectors
+               target = typeof options.of === "string" ?
+                       $( document ).find( options.of ) :
+                       $( options.of ),
+
                within = $.position.getWithinInfo( options.within ),
                scrollInfo = $.position.getScrollInfo( within ),
                collision = ( options.collision || "flip" ).split( " " ),