diff --git a/pagetop-bootsier/src/lib.rs b/pagetop-bootsier/src/lib.rs index b80e96c1..e96fbe87 100644 --- a/pagetop-bootsier/src/lib.rs +++ b/pagetop-bootsier/src/lib.rs @@ -131,18 +131,24 @@ impl ThemeTrait for Bootsier { } COMPONENT_BASE_HEADING => { let h = component_as_mut::(component); - let original = h.display().to_string(); - h.alter_classes( - ClassesOp::SetDefault, - match h.display() { - HeadingDisplay::ExtraLarge => "display-1", - HeadingDisplay::XxLarge => "display-2", - HeadingDisplay::XLarge => "display-3", - HeadingDisplay::Large => "display-4", - HeadingDisplay::Medium => "display-5", - _ => original.as_str(), - }, - ); + match h.display() { + HeadingDisplay::ExtraLarge => { + h.alter_classes(ClassesOp::Replace(h.display().to_string()), "display-1"); + } + HeadingDisplay::XxLarge => { + h.alter_classes(ClassesOp::Replace(h.display().to_string()), "display-2"); + } + HeadingDisplay::XLarge => { + h.alter_classes(ClassesOp::Replace(h.display().to_string()), "display-3"); + } + HeadingDisplay::Large => { + h.alter_classes(ClassesOp::Replace(h.display().to_string()), "display-4"); + } + HeadingDisplay::Medium => { + h.alter_classes(ClassesOp::Replace(h.display().to_string()), "display-5"); + } + _ => {} + }; } COMPONENT_BASE_PARAGRAPH => { let p = component_as_mut::(component); diff --git a/pagetop/src/base/component/block.rs b/pagetop/src/base/component/block.rs index cff0f744..a56a4af2 100644 --- a/pagetop/src/base/component/block.rs +++ b/pagetop/src/base/component/block.rs @@ -18,7 +18,7 @@ pub struct Block { impl ComponentTrait for Block { fn new() -> Self { - Block::default().with_classes(ClassesOp::SetDefault, "block") + Block::default().with_classes(ClassesOp::AddDefault, "block") } fn handle(&self) -> Handle { diff --git a/pagetop/src/base/component/flex/container.rs b/pagetop/src/base/component/flex/container.rs index da37b150..ed71e85f 100644 --- a/pagetop/src/base/component/flex/container.rs +++ b/pagetop/src/base/component/flex/container.rs @@ -22,7 +22,7 @@ pub struct Container { impl ComponentTrait for Container { fn new() -> Self { Container::default() - .with_classes(ClassesOp::SetDefault, flex::Direction::Default.to_string()) + .with_classes(ClassesOp::AddDefault, flex::Direction::Default.to_string()) } fn handle(&self) -> Handle { diff --git a/pagetop/src/base/component/flex/item.rs b/pagetop/src/base/component/flex/item.rs index 1b44f26f..d7f1f907 100644 --- a/pagetop/src/base/component/flex/item.rs +++ b/pagetop/src/base/component/flex/item.rs @@ -23,8 +23,8 @@ pub struct Item { impl ComponentTrait for Item { fn new() -> Self { Item::default() - .with_item_classes(ClassesOp::SetDefault, "pt-flex__item") - .with_inner_classes(ClassesOp::SetDefault, "pt-flex__item-inner") + .with_item_classes(ClassesOp::AddDefault, "pt-flex__item") + .with_inner_classes(ClassesOp::AddDefault, "pt-flex__item-inner") } fn handle(&self) -> Handle { diff --git a/pagetop/src/base/component/form/button.rs b/pagetop/src/base/component/form/button.rs index 1fce9dc9..1e111459 100644 --- a/pagetop/src/base/component/form/button.rs +++ b/pagetop/src/base/component/form/button.rs @@ -26,7 +26,7 @@ pub struct Button { impl ComponentTrait for Button { fn new() -> Self { - Button::default().with_classes(ClassesOp::SetDefault, "btn btn-primary form-button") + Button::default().with_classes(ClassesOp::AddDefault, "btn btn-primary form-button") } fn handle(&self) -> Handle { diff --git a/pagetop/src/base/component/form/date.rs b/pagetop/src/base/component/form/date.rs index 22190bab..af319873 100644 --- a/pagetop/src/base/component/form/date.rs +++ b/pagetop/src/base/component/form/date.rs @@ -23,7 +23,7 @@ pub struct Date { impl ComponentTrait for Date { fn new() -> Self { - Date::default().with_classes(ClassesOp::SetDefault, "form-item form-type-date") + Date::default().with_classes(ClassesOp::AddDefault, "form-item form-type-date") } fn handle(&self) -> Handle { diff --git a/pagetop/src/base/component/form/form_main.rs b/pagetop/src/base/component/form/form_main.rs index a2bed394..70261ca2 100644 --- a/pagetop/src/base/component/form/form_main.rs +++ b/pagetop/src/base/component/form/form_main.rs @@ -28,7 +28,7 @@ pub struct Form { impl ComponentTrait for Form { fn new() -> Self { Form::default() - .with_classes(ClassesOp::SetDefault, "form") + .with_classes(ClassesOp::AddDefault, "form") .with_charset("UTF-8") } diff --git a/pagetop/src/base/component/form/input.rs b/pagetop/src/base/component/form/input.rs index 74a92497..55340a46 100644 --- a/pagetop/src/base/component/form/input.rs +++ b/pagetop/src/base/component/form/input.rs @@ -39,7 +39,7 @@ pub struct Input { impl ComponentTrait for Input { fn new() -> Self { Input::default() - .with_classes(ClassesOp::SetDefault, "form-item form-type-textfield") + .with_classes(ClassesOp::AddDefault, "form-item form-type-textfield") .with_size(Some(60)) .with_maxlength(Some(128)) } diff --git a/pagetop/src/base/component/icon.rs b/pagetop/src/base/component/icon.rs index ecc7a859..b35287e3 100644 --- a/pagetop/src/base/component/icon.rs +++ b/pagetop/src/base/component/icon.rs @@ -14,7 +14,7 @@ pub struct Icon { impl ComponentTrait for Icon { fn new() -> Self { - Icon::default().with_classes(ClassesOp::SetDefault, "bi-question-circle-fill") + Icon::default().with_icon_name("question-circle-fill") } fn handle(&self) -> Handle { @@ -75,7 +75,10 @@ impl Icon { #[fn_builder] pub fn alter_icon_name(&mut self, name: &str) -> &mut Self { - self.alter_classes(ClassesOp::SetDefault, concat_string!("bi-", name)); + self.classes.alter_value( + ClassesOp::Replace(concat_string!("bi-", self.icon_name)), + concat_string!("bi-", name), + ); self.icon_name = name.to_owned(); self } diff --git a/pagetop/src/base/component/image.rs b/pagetop/src/base/component/image.rs index cf67191b..181cda6a 100644 --- a/pagetop/src/base/component/image.rs +++ b/pagetop/src/base/component/image.rs @@ -28,7 +28,7 @@ pub struct Image { impl ComponentTrait for Image { fn new() -> Self { - Image::default().with_classes(ClassesOp::SetDefault, IMG_FLUID) + Image::default().with_classes(ClassesOp::AddDefault, IMG_FLUID) } fn handle(&self) -> Handle { @@ -70,19 +70,19 @@ impl Image { pub fn with(source: &str) -> Self { Image::default() .with_source(source) - .with_classes(ClassesOp::SetDefault, IMG_FLUID) + .with_classes(ClassesOp::AddDefault, IMG_FLUID) } pub fn fixed(source: &str) -> Self { Image::default() .with_source(source) - .with_classes(ClassesOp::SetDefault, IMG_FIXED) + .with_classes(ClassesOp::AddDefault, IMG_FIXED) } pub fn pagetop() -> Self { Image::default() .with_source("/base/pagetop-logo.svg") - .with_classes(ClassesOp::SetDefault, IMG_FIXED) + .with_classes(ClassesOp::AddDefault, IMG_FIXED) .with_size(ImageSize::Size(64, 64)) } diff --git a/pagetop/src/base/component/wrapper.rs b/pagetop/src/base/component/wrapper.rs index 75061dc7..8480e683 100644 --- a/pagetop/src/base/component/wrapper.rs +++ b/pagetop/src/base/component/wrapper.rs @@ -30,8 +30,8 @@ pub struct Wrapper { impl ComponentTrait for Wrapper { fn new() -> Self { Wrapper::default() - .with_classes(ClassesOp::SetDefault, "container") - .with_inner_classes(ClassesOp::SetDefault, "container") + .with_classes(ClassesOp::AddDefault, "container") + .with_inner_classes(ClassesOp::AddDefault, "container") } fn handle(&self) -> Handle { @@ -99,25 +99,33 @@ impl ComponentTrait for Wrapper { impl Wrapper { pub fn header() -> Self { - let mut c = Wrapper::new().with_classes(ClassesOp::SetDefault, "header"); + let mut c = Wrapper::default() + .with_classes(ClassesOp::AddDefault, "header") + .with_inner_classes(ClassesOp::AddDefault, "container"); c.wrapper_type = WrapperType::Header; c } pub fn footer() -> Self { - let mut c = Wrapper::new().with_classes(ClassesOp::SetDefault, "footer"); + let mut c = Wrapper::default() + .with_classes(ClassesOp::AddDefault, "footer") + .with_inner_classes(ClassesOp::AddDefault, "container"); c.wrapper_type = WrapperType::Footer; c } pub fn main() -> Self { - let mut c = Wrapper::new().with_classes(ClassesOp::SetDefault, "main"); + let mut c = Wrapper::default() + .with_classes(ClassesOp::AddDefault, "main") + .with_inner_classes(ClassesOp::AddDefault, "container"); c.wrapper_type = WrapperType::Main; c } pub fn section() -> Self { - let mut c = Wrapper::new().with_classes(ClassesOp::SetDefault, "section"); + let mut c = Wrapper::default() + .with_classes(ClassesOp::AddDefault, "section") + .with_inner_classes(ClassesOp::AddDefault, "container"); c.wrapper_type = WrapperType::Section; c } diff --git a/pagetop/src/html/opt_classes.rs b/pagetop/src/html/opt_classes.rs index a3f0444e..0df33e4e 100644 --- a/pagetop/src/html/opt_classes.rs +++ b/pagetop/src/html/opt_classes.rs @@ -3,9 +3,9 @@ //! This *helper* differentiates between default classes (generally associated with styles provided //! by the theme) and user classes (for customizing components based on application styles). //! -//! Default classes can be added using [SetDefault] and [AddDefault], while user classes can be -//! added using [Add]. Operations to [Remove], [Replace] or [ReplaceIfExists] a class, as well as -//! to [Reset] user classes, are also provided. +//! Default classes can be added using [AddDefault], while user classes can be added using [Add]. +//! Operations to [Remove], [Replace] or [ReplaceIfExists] a class, as well as to [Reset] user +//! classes, are also provided. //! //! Although the order of the classes is irrelevant (), default //! classes will be presented before user classes and duplicate classes will not be allowed. @@ -13,7 +13,6 @@ use crate::fn_builder; pub enum ClassesOp { - SetDefault, AddDefault, Add, Remove, @@ -51,10 +50,6 @@ impl OptionClasses { let classes: Vec<&str> = classes.split_ascii_whitespace().collect(); match op { - ClassesOp::SetDefault => { - self.0.retain(|(_, t)| t.ne(&ClassType::Default)); - self.add(&classes, 0, ClassType::Default); - } ClassesOp::AddDefault => { let pos = match self.0.iter().position(|(_, t)| t.eq(&ClassType::User)) { Some(pos) => pos,