]> source.dussan.org Git - jquery-ui.git/commitdiff
All: Drop $.ui.escapeSelector in favor of $.escapeSelector
authorMichał Gołębiowski-Owczarek <m.goleb@gmail.com>
Fri, 14 May 2021 21:37:19 +0000 (23:37 +0200)
committerGitHub <noreply@github.com>
Fri, 14 May 2021 21:37:19 +0000 (23:37 +0200)
Fixes #14991
Closes gh-1957

tests/unit/core/selector.js
ui/escape-selector.js [deleted file]
ui/jquery-patch.js
ui/labels.js
ui/widgets/checkboxradio.js
ui/widgets/selectmenu.js
ui/widgets/tabs.js

index 6d867f63479b7407af80b8f2dd3157e082cf9779..61f4a2381bdfcfd3a49f440f51982aa861dd9ac6 100644 (file)
@@ -3,7 +3,6 @@ define( [
        "jquery",
        "lib/helper",
        "ui/data",
-       "ui/escape-selector",
        "ui/focusable",
        "ui/tabbable"
 ], function( QUnit, $, helper ) {
@@ -280,11 +279,4 @@ QUnit.test( "tabbable - dimensionless parent with overflow", function( assert )
        assert.isTabbable( "#dimensionlessParent", "input" );
 } );
 
-QUnit.test( "escapeSelector", function( assert ) {
-       assert.expect( 1 );
-
-       assert.equal( $( "#" + $.ui.escapeSelector( "weird-['x']-id" ) ).length, 1,
-               "properly escapes selectors to use as an id" );
-} );
-
 } );
diff --git a/ui/escape-selector.js b/ui/escape-selector.js
deleted file mode 100644 (file)
index d43e4f8..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-( function( factory ) {
-       if ( typeof define === "function" && define.amd ) {
-
-               // AMD. Register as an anonymous module.
-               define( [ "jquery", "./version" ], factory );
-       } else {
-
-               // Browser globals
-               factory( jQuery );
-       }
-} ( function( $ ) {
-
-// Internal use only
-return $.ui.escapeSelector = ( function() {
-       var selectorEscape = /([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;
-       return function( selector ) {
-               return selector.replace( selectorEscape, "\\$1" );
-       };
-} )();
-
-} ) );
index 4d939535e31d3637b95d68a5e29af8e0aed9df03..578c47a3f1da28b34f449b1b278a410a8b17492f 100644 (file)
@@ -36,6 +36,36 @@ if ( !$.uniqueSort ) {
        $.uniqueSort = $.unique;
 }
 
+// Support: jQuery 2.2.x or older.
+// This method has been defined in jQuery 3.0.0.
+// Code from https://github.com/jquery/jquery/blob/e539bac79e666bba95bba86d690b4e609dca2286/src/selector/escapeSelector.js
+if ( !$.escapeSelector ) {
+
+       // CSS string/identifier serialization
+       // https://drafts.csswg.org/cssom/#common-serializing-idioms
+       var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;
+
+       var fcssescape = function( ch, asCodePoint ) {
+               if ( asCodePoint ) {
+
+                       // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
+                       if ( ch === "\0" ) {
+                               return "\uFFFD";
+                       }
+
+                       // Control characters and (dependent upon position) numbers get escaped as code points
+                       return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
+               }
+
+               // Other potentially-special ASCII characters get backslash-escaped
+               return "\\" + ch;
+       };
+
+       $.escapeSelector = function( sel ) {
+               return ( sel + "" ).replace( rcssescape, fcssescape );
+       };
+}
+
 // Support: jQuery 3.4.x or older
 // These methods have been defined in jQuery 3.5.0.
 if ( !$.fn.even || !$.fn.odd ) {
index 1bf56ac4146e5d47548cd5084291873dca01140e..216c46a9ad0e974c1fcb1c9baa0c3dbc53a2d75e 100644 (file)
@@ -16,7 +16,7 @@
        if ( typeof define === "function" && define.amd ) {
 
                // AMD. Register as an anonymous module.
-               define( [ "jquery", "./version", "./escape-selector" ], factory );
+               define( [ "jquery", "./version" ], factory );
        } else {
 
                // Browser globals
@@ -53,7 +53,7 @@ return $.fn.labels = function() {
                ancestors = ancestor.add( ancestor.length ? ancestor.siblings() : this.siblings() );
 
                // Create a selector for the label based on the id
-               selector = "label[for='" + $.ui.escapeSelector( id ) + "']";
+               selector = "label[for='" + $.escapeSelector( id ) + "']";
 
                labels = labels.add( ancestors.find( selector ).addBack( selector ) );
 
index 228c9fab94400fb1cf5ed77d38b89597a08ebb05..0cb1a0cf8d6cb9840d689de696f5c3e037b0d644 100644 (file)
@@ -23,7 +23,6 @@
                // AMD. Register as an anonymous module.
                define( [
                        "jquery",
-                       "../escape-selector",
                        "../form-reset-mixin",
                        "../labels",
                        "../widget"
@@ -149,7 +148,7 @@ $.widget( "ui.checkboxradio", [ $.ui.formResetMixin, {
        _getRadioGroup: function() {
                var group;
                var name = this.element[ 0 ].name;
-               var nameSelector = "input[name='" + $.ui.escapeSelector( name ) + "']";
+               var nameSelector = "input[name='" + $.escapeSelector( name ) + "']";
 
                if ( !name ) {
                        return $( [] );
index 79e97816bb23ab3e08038c97c755a5abe503bf02..cc98ecbbf34469e96fa21289084f408799c20652 100644 (file)
@@ -25,7 +25,6 @@
                define( [
                        "jquery",
                        "./menu",
-                       "../escape-selector",
                        "../form-reset-mixin",
                        "../keycode",
                        "../labels",
@@ -425,7 +424,7 @@ return $.widget( "ui.selectmenu", [ $.ui.formResetMixin, {
                        }
 
                        if ( !$( event.target ).closest( ".ui-selectmenu-menu, #" +
-                                       $.ui.escapeSelector( this.ids.button ) ).length ) {
+                               $.escapeSelector( this.ids.button ) ).length ) {
                                this.close( event );
                        }
                }
index 0eb69ebe174129d87c499a4f68a5d071c2c04de2..7a53767ddca8a362398609d20bff93ab4f31559a 100644 (file)
@@ -22,7 +22,6 @@
                // AMD. Register as an anonymous module.
                define( [
                        "jquery",
-                       "../escape-selector",
                        "../keycode",
                        "../safe-active-element",
                        "../unique-id",
@@ -733,7 +732,7 @@ $.widget( "ui.tabs", {
                // meta-function to give users option to provide a href string instead of a numerical index.
                if ( typeof index === "string" ) {
                        index = this.anchors.index( this.anchors.filter( "[href$='" +
-                               $.ui.escapeSelector( index ) + "']" ) );
+                               $.escapeSelector( index ) + "']" ) );
                }
 
                return index;