Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove escaping selector and add a warning to inform folks to escape … #25390

Merged
merged 4 commits into from
Jan 21, 2018
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions docs/4.0/getting-started/javascript.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,11 @@ Alternatively, to target a specific plugin, just include the plugin's name as a
$(document).off('.alert.data-api')
{% endhighlight %}

{% callout warning %}
##### Escaping selectors
If you use special selectors, for example: `collapse:Example`, be sure to escape them, because they'll be passed through jQuery.
{% endcallout %}

## Events

Bootstrap provides custom events for most plugins' unique actions. Generally, these come in an infinitive and past participle form - where the infinitive (ex. `show`) is triggered at the start of an event, and its past participle form (ex. `shown`) is triggered on the completion of an action.
Expand Down
14 changes: 0 additions & 14 deletions js/src/util.js
Original file line number Diff line number Diff line change
Expand Up @@ -72,15 +72,6 @@ const Util = (($) => {
}
}

function escapeId(selector) {
// We escape IDs in case of special selectors (selector = '#myId:something')
// $.escapeSelector does not exist in jQuery < 3
selector = typeof $.escapeSelector === 'function' ? $.escapeSelector(selector).substr(1)
: selector.replace(/(:|\.|\[|\]|,|=|@)/g, '\\$1')

return selector
}

/**
* --------------------------------------------------------------------------
* Public Util Api
Expand All @@ -105,11 +96,6 @@ const Util = (($) => {
selector = element.getAttribute('href') || ''
}

// If it's an ID
if (selector.charAt(0) === '#') {
selector = escapeId(selector)
}

try {
const $selector = $(document).find(selector)
return $selector.length > 0 ? selector : null
Expand Down
12 changes: 0 additions & 12 deletions js/tests/unit/util.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,18 +12,6 @@ $(function () {
// Not found element
var $el2 = $('<div data-target="#fakeDiv"></div>').appendTo($('#qunit-fixture'))
assert.strictEqual(Util.getSelectorFromElement($el2[0]), null)

// Should escape ID and find the correct element
var $el3 = $('<div data-target="#collapse:Example"></div>').appendTo($('#qunit-fixture'))
$('<div id="collapse:Example"></div>').appendTo($('#qunit-fixture'))
assert.strictEqual(Util.getSelectorFromElement($el3[0]), '#collapse\\:Example')

// If $.escapeSelector doesn't exist in older jQuery versions (< 3)
var tmpEscapeSelector = $.escapeSelector
delete $.escapeSelector
assert.ok(typeof $.escapeSelector === 'undefined', '$.escapeSelector undefined')
assert.strictEqual(Util.getSelectorFromElement($el3[0]), '#collapse\\:Example')
$.escapeSelector = tmpEscapeSelector
})

QUnit.test('Util.typeCheckConfig should thrown an error when a bad config is passed', function (assert) {
Expand Down