vasille
Version:
The same framework which is designed to build bulletproof frontends (core library).
57 lines (56 loc) • 1.67 kB
JavaScript
import { Binding } from "./binding.js";
export function addClass(node, cl) {
if (process.env.VASILLE_TARGET === "es5" && !node.element.classList) {
node.element.className = [...node.element.className.split(" "), cl].filter(item => !!item).join(" ");
}
else {
node.element.classList.add(cl);
}
}
export function removeClass(node, cl) {
if (process.env.VASILLE_TARGET === "es5" && !node.element.classList) {
node.element.className = node.element.className
.split(" ")
.filter(name => name !== cl)
.join(" ");
}
else {
node.element.classList.remove(cl);
}
}
export class StaticClassBinding extends Binding {
current = false;
constructor(node, name, value) {
super(value);
this.init((value) => {
if (value !== this.current) {
if (value) {
addClass(node, name);
}
else {
removeClass(node, name);
}
this.current = value;
}
});
}
}
export class DynamicalClassBinding extends Binding {
current = "";
constructor(node, value) {
super(value);
this.init((value) => {
/* istanbul ignore else */
if (this.current != value) {
if (this.current.length) {
removeClass(node, this.current);
}
/* istanbul ignore else */
if (value.length) {
addClass(node, value);
}
this.current = value;
}
});
}
}