diff --git a/src/virtual_dom/mod.rs b/src/virtual_dom/mod.rs index 9ba19f2a0..57ab86d9e 100644 --- a/src/virtual_dom/mod.rs +++ b/src/virtual_dom/mod.rs @@ -17,6 +17,7 @@ pub use self::vnode::VNode; pub use self::vtag::VTag; pub use self::vtext::VText; use crate::html::{Component, Scope}; +use std::ops::RangeFull; /// `Listener` trait is an universal implementation of an event listener /// which helps to bind Rust-listener to JS-listener (DOM). @@ -41,7 +42,7 @@ type Listeners = Vec>>; type Attributes = HashMap; /// A set of classes. -#[derive(Debug)] +#[derive(Debug, Clone)] pub struct Classes { set: IndexSet, } @@ -63,6 +64,13 @@ impl Classes { pub fn contains(&self, class: &str) -> bool { self.set.contains(class) } + + /// Adds other classes to this class; returning itself. + pub fn extend>(mut self, other: T) -> Self { + let mut other: Classes = other.into(); + self.set.extend(other.set.drain(RangeFull)); + self + } } impl ToString for Classes {