module uim.html.core.element; import uim.html; template Classes() { const char[] Classes = ` string[] classes() { if ("class" in attributes) return attributes["class"].split(" ").unique; return null; } @property O classes(this O)(string newClass) { return this.classes(newClass.split(" ").unique); } @property O classes(this O)(string[] someClasses) { if (classes) _attributes["class"] = (classes ~ someClasses).unique.join(" "); else _attributes["class"] = someClasses.unique.join(" "); return cast(O)this; } bool hasClasses(string[] someClasses) { foreach(c; someClasses) if (!hasClass(c)) return false; return true; } bool hasClass(string className) { return classes.has(className); } O addClasses(this O)(string[] someClasses) { this.classes(someClasses); return cast(O)this; } O addClass(this O)(string newClass) { this.classes(newClass); return cast(O)this; } O removeClass(this O)(string[] someClasses) { foreach(c; someClasses) removeClass(c); return cast(O)this; } O removeClass(this O)(string className) { if (hasClass(className)) classes = std.algorithm.mutation.remove(classes, className); return cast(O)this; } O toggleClass(this O)(string[] someClasses) { foreach(c; someClasses) toggleClass(c); return cast(O)this; } O toggleClass(this O)(string className) { if (hasClass(className)) removeClass(className); else addClass(className); return cast(O)this; } `; } enum ShowMode { standard, onlyHTML, onlyJS, onlyCSS } unittest { }