Skip to content

Commit a319955

Browse files
committed
Fix: Properly escape querySelector value to avoid SyntaxError Element.querySelector: ':scope > option[value=[foo]]' is not a valid selector
1 parent 6b802fc commit a319955

File tree

2 files changed

+10
-4
lines changed

2 files changed

+10
-4
lines changed

src/Autocomplete/assets/dist/controller.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
1515
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
1616
PERFORMANCE OF THIS SOFTWARE.
1717
***************************************************************************** */
18-
/* global Reflect, Promise, SuppressedError, Symbol */
18+
/* global Reflect, Promise, SuppressedError, Symbol, Iterator */
1919

2020

2121
function __classPrivateFieldGet(receiver, state, kind, f) {
@@ -29,7 +29,7 @@ typeof SuppressedError === "function" ? SuppressedError : function (error, suppr
2929
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
3030
};
3131

32-
var _default_1_instances, _default_1_getCommonConfig, _default_1_createAutocomplete, _default_1_createAutocompleteWithHtmlContents, _default_1_createAutocompleteWithRemoteData, _default_1_stripTags, _default_1_mergeObjects, _default_1_createTomSelect;
32+
var _default_1_instances, _default_1_getCommonConfig, _default_1_createAutocomplete, _default_1_createAutocompleteWithHtmlContents, _default_1_createAutocompleteWithRemoteData, _default_1_stripTags, _default_1_addSlashes, _default_1_mergeObjects, _default_1_createTomSelect;
3333
class default_1 extends Controller {
3434
constructor() {
3535
super(...arguments);
@@ -270,7 +270,7 @@ _default_1_instances = new WeakSet(), _default_1_getCommonConfig = function _def
270270
let orderedOption = null;
271271
for (const [, tomSelectOption] of Object.entries(this.tomSelect.options)) {
272272
if (tomSelectOption.$order === optionOrder) {
273-
orderedOption = parentElement.querySelector(`:scope > option[value="${tomSelectOption[this.tomSelect.settings.valueField]}"]`);
273+
orderedOption = parentElement.querySelector(`:scope > option[value="${[__classPrivateFieldGet(this, _default_1_instances, "m", _default_1_addSlashes).call(this, this.tomSelect.settings.valueField)]}"]`);
274274
break;
275275
}
276276
}
@@ -364,6 +364,8 @@ _default_1_instances = new WeakSet(), _default_1_getCommonConfig = function _def
364364
return __classPrivateFieldGet(this, _default_1_instances, "m", _default_1_createTomSelect).call(this, config);
365365
}, _default_1_stripTags = function _default_1_stripTags(string) {
366366
return string.replace(/(<([^>]+)>)/gi, '');
367+
}, _default_1_addSlashes = function _default_1_addSlashes(string) {
368+
return string.replace(/["\\]/g, '\\$&');
367369
}, _default_1_mergeObjects = function _default_1_mergeObjects(object1, object2) {
368370
return { ...object1, ...object2 };
369371
}, _default_1_createTomSelect = function _default_1_createTomSelect(options) {

src/Autocomplete/assets/src/controller.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ export default class extends Controller {
192192
for (const [, tomSelectOption] of Object.entries(this.tomSelect.options)) {
193193
if (tomSelectOption.$order === optionOrder) {
194194
orderedOption = parentElement.querySelector(
195-
`:scope > option[value="${tomSelectOption[this.tomSelect.settings.valueField].replace(/["\\]/g, '\\$&')}"]`
195+
`:scope > option[value="${[this.#addSlashes(this.tomSelect.settings.valueField)]}"]`
196196
);
197197

198198
break;
@@ -325,6 +325,10 @@ export default class extends Controller {
325325
return string.replace(/(<([^>]+)>)/gi, '');
326326
}
327327

328+
#addSlashes(string: string): string {
329+
return string.replace(/["\\]/g, '\\$&');
330+
}
331+
328332
#mergeObjects(object1: any, object2: any): any {
329333
return { ...object1, ...object2 };
330334
}

0 commit comments

Comments
 (0)