TiddlyWiki5/core/modules
pmario 005e175378 Fix RSOD when $tw.utils.addClass receives a class string with whitespace
PR #9251 replaced the manual setAttribute("class", ...) implementation of
$tw.utils.addClass/removeClass/toggleClass with direct Element.classList
calls. Unlike setAttribute, classList.add/remove/toggle throws
InvalidCharacterError on any token containing whitespace, so callers that
pass a whole class string (e.g. modal.js passing tiddler.fields.class)
now crash.

Manual repro on tw5-com: open SampleWizard, set the `class` field to
"aaa bbb", Done, open popup -> OK -> open nested popup -> RSOD.

Fix: split the className argument on whitespace in deprecated.js and feed
individual tokens to classList. A small splitClasses() helper keeps the
three functions symmetrical.

Adds adversarial regression tests in test-utils.js covering:
- ASCII whitespace variants (space, tab, CR, LF, mixed runs, padding)
- Unicode whitespace (U+00A0 non-breaking space)
- de-duplication across single and multiple calls
- remove/toggle no-op on missing tokens
- toggle with status undefined / true / false
- silent no-op for whitespace-only / empty / non-string / null input
- silent no-op when the element has no classList
2026-04-22 17:15:35 +02:00
..
editor Fixes ESLint errors (#9668) 2026-02-20 08:38:42 +00:00
filterrunprefixes Fixes ESLint errors (#9668) 2026-02-20 08:38:42 +00:00
filters Revert "Add locale support for sort operator (#9400)" (#9702) 2026-03-01 08:02:18 +01:00
indexers Fixes ESLint errors (#9668) 2026-02-20 08:38:42 +00:00
info Fixes ESLint errors (#9668) 2026-02-20 08:38:42 +00:00
macros Fixes ESLint errors (#9668) 2026-02-20 08:38:42 +00:00
parsers Fix: limit macro call parser to need >> to work, prevent > in regex (#9813) 2026-04-18 09:59:22 +01:00
relinkers Moved bulkops relink behavior into dedicated module (#9703) 2026-03-28 12:06:27 +00:00
savers Fixes ESLint errors (#9668) 2026-02-20 08:38:42 +00:00
startup Fixes ESLint errors (#9668) 2026-02-20 08:38:42 +00:00
storyviews fix: zoomin storyview should not remove CSS properties when element is already removed (#9686) 2026-02-23 08:59:32 +01:00
upgraders Fixes ESLint errors (#9668) 2026-02-20 08:38:42 +00:00
utils Fix RSOD when $tw.utils.addClass receives a class string with whitespace 2026-04-22 17:15:35 +02:00
widgets Fixes MVV's so that getVariableInfo returns undefined (#9765) 2026-03-28 12:04:29 +00:00
background-actions.js Fixes ESLint errors (#9668) 2026-02-20 08:38:42 +00:00
config.js Revert "Fix 8166 html tag validation (#8176)" (#9374) 2025-10-29 22:01:03 +01:00
deserializers.js Remove module function wrapper and add matching configurations for dprint and eslint (#7596) 2025-03-21 17:22:57 +00:00
filter-tracker.js Fixes ESLint errors (#9668) 2026-02-20 08:38:42 +00:00
filters.js Fixes ESLint errors (#9668) 2026-02-20 08:38:42 +00:00
keyboard.js Fixes ESLint errors (#9668) 2026-02-20 08:38:42 +00:00
language.js Remove module function wrapper and add matching configurations for dprint and eslint (#7596) 2025-03-21 17:22:57 +00:00
pluginswitcher.js Fixes ESLint errors (#9668) 2026-02-20 08:38:42 +00:00
saver-handler.js Fixes ESLint errors (#9668) 2026-02-20 08:38:42 +00:00
story.js Remove module function wrapper and add matching configurations for dprint and eslint (#7596) 2025-03-21 17:22:57 +00:00
syncer.js Fixes ESLint errors (#9668) 2026-02-20 08:38:42 +00:00
tiddler.js Remove module function wrapper and add matching configurations for dprint and eslint (#7596) 2025-03-21 17:22:57 +00:00
wiki-bulkops.js Moved bulkops relink behavior into dedicated module (#9703) 2026-03-28 12:06:27 +00:00
wiki.js Revert "Add locale support for sort operator (#9400)" (#9702) 2026-03-01 08:02:18 +01:00