Skip to content

Commit

Permalink
Merge pull request alpinejs#437 from felixsc/master
Browse files Browse the repository at this point in the history
Fix whitespace bug in x-bind:class class list
  • Loading branch information
calebporzio authored May 8, 2020
2 parents c116279 + 35ec9db commit e32bea0
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 9 deletions.
6 changes: 3 additions & 3 deletions dist/alpine-ie11.js
Original file line number Diff line number Diff line change
Expand Up @@ -6019,13 +6019,13 @@
_newArrowCheck(this, _this);

if (value[classNames]) {
classNames.split(' ').forEach(function (className) {
classNames.split(' ').filter(Boolean).forEach(function (className) {
_newArrowCheck(this, _this2);

return el.classList.add(className);
}.bind(this));
} else {
classNames.split(' ').forEach(function (className) {
classNames.split(' ').filter(Boolean).forEach(function (className) {
_newArrowCheck(this, _this2);

return el.classList.remove(className);
Expand All @@ -6035,7 +6035,7 @@
} else {
var _originalClasses = el.__x_original_classes || [];

var newClasses = value.split(' ');
var newClasses = value.split(' ').filter(Boolean);
el.setAttribute('class', arrayUnique(_originalClasses.concat(newClasses)).join(' '));
}
} else if (isBooleanAttr(attrName)) {
Expand Down
6 changes: 3 additions & 3 deletions dist/alpine.js
Original file line number Diff line number Diff line change
Expand Up @@ -574,14 +574,14 @@
const keysSortedByBooleanValue = Object.keys(value).sort((a, b) => value[a] - value[b]);
keysSortedByBooleanValue.forEach(classNames => {
if (value[classNames]) {
classNames.split(' ').forEach(className => el.classList.add(className));
classNames.split(' ').filter(Boolean).forEach(className => el.classList.add(className));
} else {
classNames.split(' ').forEach(className => el.classList.remove(className));
classNames.split(' ').filter(Boolean).forEach(className => el.classList.remove(className));
}
});
} else {
const originalClasses = el.__x_original_classes || [];
const newClasses = value.split(' ');
const newClasses = value.split(' ').filter(Boolean);
el.setAttribute('class', arrayUnique(originalClasses.concat(newClasses)).join(' '));
}
} else if (isBooleanAttr(attrName)) {
Expand Down
6 changes: 3 additions & 3 deletions src/directives/bind.js
Original file line number Diff line number Diff line change
Expand Up @@ -67,14 +67,14 @@ export function handleAttributeBindingDirective(component, el, attrName, express

keysSortedByBooleanValue.forEach(classNames => {
if (value[classNames]) {
classNames.split(' ').forEach(className => el.classList.add(className))
classNames.split(' ').filter(Boolean).forEach(className => el.classList.add(className))
} else {
classNames.split(' ').forEach(className => el.classList.remove(className))
classNames.split(' ').filter(Boolean).forEach(className => el.classList.remove(className))
}
})
} else {
const originalClasses = el.__x_original_classes || []
const newClasses = value.split(' ')
const newClasses = value.split(' ').filter(Boolean)
el.setAttribute('class', arrayUnique(originalClasses.concat(newClasses)).join(' '))
}
} else if (isBooleanAttr(attrName)) {
Expand Down
11 changes: 11 additions & 0 deletions test/bind.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -420,3 +420,14 @@ test('setSelectionRange is not called for inapplicable input types', async () =>
expect(document.querySelector('input').value).toEqual('baz')
})
})

test('unnecessary whitespaces in class list are ignored', async () => {
document.body.innerHTML = `
<div x-data="{ foo: 'bar' }">
<span x-bind:class="{' foo:class ': foo === 'bar' }"></span>
</div>
`
Alpine.start()

expect(document.querySelector('span').classList.contains('foo:class')).toBeTruthy()
})

0 comments on commit e32bea0

Please sign in to comment.