Improving the efficiency of classes

This commit is contained in:
Pauan 2019-06-16 02:13:53 +02:00
parent 02337c2d74
commit f8d0b13c7d
2 changed files with 12 additions and 9 deletions

View File

@ -592,9 +592,12 @@ impl<A> DomBuilder<A> where A: AsRef<Element> {
#[inline] #[inline]
pub fn class<B>(self, name: B) -> Self where B: MultiStr { pub fn class<B>(self, name: B) -> Self where B: MultiStr {
let list = self.element.as_ref().class_list();
name.each(|name| { name.each(|name| {
dom_operations::add_class(self.element.as_ref(), name); dom_operations::add_class(&list, name);
}); });
self self
} }
@ -690,7 +693,7 @@ impl<A> DomBuilder<A> where A: AsRef<Element> {
where B: MultiStr + 'static, where B: MultiStr + 'static,
C: Signal<Item = bool> + 'static { C: Signal<Item = bool> + 'static {
let element = self.element.as_ref().clone(); let list = self.element.as_ref().class_list();
let mut is_set = false; let mut is_set = false;
@ -700,7 +703,7 @@ impl<A> DomBuilder<A> where A: AsRef<Element> {
is_set = true; is_set = true;
name.each(|name| { name.each(|name| {
dom_operations::add_class(&element, name); dom_operations::add_class(&list, name);
}); });
} }
@ -709,7 +712,7 @@ impl<A> DomBuilder<A> where A: AsRef<Element> {
is_set = false; is_set = false;
name.each(|name| { name.each(|name| {
dom_operations::remove_class(&element, name); dom_operations::remove_class(&list, name);
}); });
} }
} }

View File

@ -1,5 +1,5 @@
use wasm_bindgen::UnwrapThrowExt; use wasm_bindgen::UnwrapThrowExt;
use web_sys::{Node, HtmlElement, Element}; use web_sys::{Node, HtmlElement, Element, DomTokenList};
#[inline] #[inline]
@ -47,13 +47,13 @@ pub(crate) fn set_focused(element: &HtmlElement, focused: bool) {
} }
#[inline] #[inline]
pub(crate) fn add_class(element: &Element, name: &str) { pub(crate) fn add_class(list: &DomTokenList, name: &str) {
element.class_list().add_1(name).unwrap_throw(); list.add_1(name).unwrap_throw();
} }
#[inline] #[inline]
pub(crate) fn remove_class(element: &Element, name: &str) { pub(crate) fn remove_class(list: &DomTokenList, name: &str) {
element.class_list().remove_1(name).unwrap_throw(); list.remove_1(name).unwrap_throw();
} }