Skip to content

Commit 9df2706

Browse files
committed
Support multiple classes for loading states.
1 parent 550719c commit 9df2706

File tree

2 files changed

+37
-10
lines changed

2 files changed

+37
-10
lines changed

django_unicorn/static/js/element.js

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,9 @@ export class Element {
8484
if (attribute.modifiers.attr) {
8585
this.loading.attr = attribute.value;
8686
} else if (attribute.modifiers.class && attribute.modifiers.remove) {
87-
this.loading.removeClass = attribute.value;
87+
this.loading.removeClasses = attribute.value.split(" ");
8888
} else if (attribute.modifiers.class) {
89-
this.loading.class = attribute.value;
89+
this.loading.classes = attribute.value.split(" ");
9090
} else if (attribute.modifiers.remove) {
9191
this.loading.hide = true;
9292
} else {
@@ -237,11 +237,15 @@ export class Element {
237237
handleLoading() {
238238
if (hasValue(this.loading)) {
239239
if (this.loading.attr) {
240-
this.el[this.loading.attr] = this.loading.attr;
241-
} else if (this.loading.class) {
242-
this.el.classList.add(this.loading.class);
243-
} else if (this.loading.removeClass) {
244-
this.el.classList.remove(this.loading.removeClass);
240+
this.el.setAttribute(this.loading.attr, this.loading.attr);
241+
}
242+
243+
if (this.loading.classes) {
244+
this.el.classList.add(...this.loading.classes);
245+
}
246+
247+
if (this.loading.removeClasses) {
248+
this.el.classList.remove(...this.loading.removeClasses);
245249
}
246250
}
247251
}

tests/js/element/loading.test.js

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,37 @@ test("loading class", (t) => {
55
const html = "<div u:click='update()' u:loading.class='loading'></div>";
66
const element = getElement(html);
77

8-
t.is(element.loading.class, "loading");
8+
t.is(element.loading.classes.length, 1);
9+
t.is(element.loading.classes[0], "loading");
10+
});
11+
12+
test("loading multiple classes", (t) => {
13+
const html =
14+
"<div u:click='update()' u:loading.class='loading another'></div>";
15+
const element = getElement(html);
16+
17+
t.is(element.loading.classes.length, 2);
18+
t.is(element.loading.classes[0], "loading");
19+
t.is(element.loading.classes[1], "another");
920
});
1021

1122
test("loading remove class", (t) => {
12-
const html = "<div u:click='update()' u:loading.class.remove='unloading'></div>";
23+
const html =
24+
"<div u:click='update()' u:loading.class.remove='unloading'></div>";
25+
const element = getElement(html);
26+
27+
t.is(element.loading.removeClasses.length, 1);
28+
t.is(element.loading.removeClasses[0], "unloading");
29+
});
30+
31+
test("loading multiple remove classes", (t) => {
32+
const html =
33+
"<div u:click='update()' u:loading.class.remove='unloading great'></div>";
1334
const element = getElement(html);
1435

15-
t.is(element.loading.removeClass, "unloading");
36+
t.is(element.loading.removeClasses.length, 2);
37+
t.is(element.loading.removeClasses[0], "unloading");
38+
t.is(element.loading.removeClasses[1], "great");
1639
});
1740

1841
test("loading attr", (t) => {

0 commit comments

Comments
 (0)