diff --git a/pagetop/src/html.rs b/pagetop/src/html.rs
index 3d71db75..4e9d3355 100644
--- a/pagetop/src/html.rs
+++ b/pagetop/src/html.rs
@@ -15,7 +15,7 @@ mod identifier;
pub use identifier::IdentifierValue;
mod classes;
-pub use classes::{Classes, ClassesOp};
+pub use classes::{Classes, ClassesOp, ClassValue};
mod unit;
pub use unit::UnitValue;
diff --git a/pagetop/src/html/classes.rs b/pagetop/src/html/classes.rs
index a3766c59..2bc8421e 100644
--- a/pagetop/src/html/classes.rs
+++ b/pagetop/src/html/classes.rs
@@ -1,11 +1,14 @@
use crate::concat_string;
+pub type ClassValue = &'static str;
+
pub enum ClassesOp {
Add,
- AddAfter(&'static str),
- AddBefore(&'static str),
+ AddAfter(ClassValue),
+ AddBefore(ClassValue),
AddFirst,
- Replace(&'static str),
+ Remove,
+ Replace(ClassValue),
Reset,
SetDefault,
SetDefaultIfEmpty,
@@ -59,6 +62,17 @@ impl Classes {
self.added = concat_string!(classes, " ", self.added).trim().to_owned()
},
+ ClassesOp::Remove => {
+ let v_list: Vec<&str> = classes.split_ascii_whitespace().collect();
+ let mut v_added: Vec<&str> = self.added.split_ascii_whitespace().collect();
+ for class in v_list {
+ if let Some(pos) = v_added.iter().position(|c| c.eq(&class)) {
+ v_added.remove(pos);
+ }
+ }
+ self.added = v_added.join(" ");
+ },
+
ClassesOp::Replace(class) => {
let mut v_added: Vec<&str> = self.added.split_ascii_whitespace().collect();
match v_added.iter().position(|c| c.eq(&class)) {