Skip to content

Commit

Permalink
[LiveComponent] Tokenize classes on all allowed whitespaces
Browse files Browse the repository at this point in the history
The class attribute can be tokenized by any white space as defined by
the HTML spec. A class string containing new lines was not correctly
cleaned / trimmed, resulting in incorrectly detected class changes and a
browser error if empty classes or classes with newlines were applied.

Fixes #1819
  • Loading branch information
aleho committed May 6, 2024
1 parent 3962582 commit 30bf81c
Showing 1 changed file with 5 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -190,19 +190,18 @@ export default class {
const element = mutation.target as Element;

const previousValue = mutation.oldValue;
const previousValues = previousValue ? previousValue.split(' ') : [];
const previousValues = previousValue ? previousValue.trim().split(' ') : [];
const previousValuesClean = [];
previousValues.forEach((value, index) => {
const trimmedValue = value.trim();
if (trimmedValue !== '') {
previousValues[index] = trimmedValue;
} else {
previousValues.splice(index, 1);
previousValuesClean.push(trimmedValue);
}
});

const newValues: string[] = [].slice.call(element.classList);
const addedValues = newValues.filter((value) => !previousValues.includes(value));
const removedValues = previousValues.filter((value) => !newValues.includes(value));
const addedValues = newValues.filter((value) => !previousValuesClean.includes(value));
const removedValues = previousValuesClean.filter((value) => !newValues.includes(value));

addedValues.forEach((value) => {
elementChanges.addClass(value);
Expand Down

0 comments on commit 30bf81c

Please sign in to comment.