🔥 Remove unnecessary SetDefault in OptionClasses

This commit is contained in:
Manuel Cillero 2023-11-01 22:59:46 +01:00
parent 556a160c16
commit 6dd9eb28f5
12 changed files with 52 additions and 40 deletions

View file

@ -131,18 +131,24 @@ impl ThemeTrait for Bootsier {
} }
COMPONENT_BASE_HEADING => { COMPONENT_BASE_HEADING => {
let h = component_as_mut::<Heading>(component); let h = component_as_mut::<Heading>(component);
let original = h.display().to_string();
h.alter_classes(
ClassesOp::SetDefault,
match h.display() { match h.display() {
HeadingDisplay::ExtraLarge => "display-1", HeadingDisplay::ExtraLarge => {
HeadingDisplay::XxLarge => "display-2", h.alter_classes(ClassesOp::Replace(h.display().to_string()), "display-1");
HeadingDisplay::XLarge => "display-3", }
HeadingDisplay::Large => "display-4", HeadingDisplay::XxLarge => {
HeadingDisplay::Medium => "display-5", h.alter_classes(ClassesOp::Replace(h.display().to_string()), "display-2");
_ => original.as_str(), }
}, 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 => { COMPONENT_BASE_PARAGRAPH => {
let p = component_as_mut::<Paragraph>(component); let p = component_as_mut::<Paragraph>(component);

View file

@ -18,7 +18,7 @@ pub struct Block {
impl ComponentTrait for Block { impl ComponentTrait for Block {
fn new() -> Self { fn new() -> Self {
Block::default().with_classes(ClassesOp::SetDefault, "block") Block::default().with_classes(ClassesOp::AddDefault, "block")
} }
fn handle(&self) -> Handle { fn handle(&self) -> Handle {

View file

@ -22,7 +22,7 @@ pub struct Container {
impl ComponentTrait for Container { impl ComponentTrait for Container {
fn new() -> Self { fn new() -> Self {
Container::default() Container::default()
.with_classes(ClassesOp::SetDefault, flex::Direction::Default.to_string()) .with_classes(ClassesOp::AddDefault, flex::Direction::Default.to_string())
} }
fn handle(&self) -> Handle { fn handle(&self) -> Handle {

View file

@ -23,8 +23,8 @@ pub struct Item {
impl ComponentTrait for Item { impl ComponentTrait for Item {
fn new() -> Self { fn new() -> Self {
Item::default() Item::default()
.with_item_classes(ClassesOp::SetDefault, "pt-flex__item") .with_item_classes(ClassesOp::AddDefault, "pt-flex__item")
.with_inner_classes(ClassesOp::SetDefault, "pt-flex__item-inner") .with_inner_classes(ClassesOp::AddDefault, "pt-flex__item-inner")
} }
fn handle(&self) -> Handle { fn handle(&self) -> Handle {

View file

@ -26,7 +26,7 @@ pub struct Button {
impl ComponentTrait for Button { impl ComponentTrait for Button {
fn new() -> Self { 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 { fn handle(&self) -> Handle {

View file

@ -23,7 +23,7 @@ pub struct Date {
impl ComponentTrait for Date { impl ComponentTrait for Date {
fn new() -> Self { 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 { fn handle(&self) -> Handle {

View file

@ -28,7 +28,7 @@ pub struct Form {
impl ComponentTrait for Form { impl ComponentTrait for Form {
fn new() -> Self { fn new() -> Self {
Form::default() Form::default()
.with_classes(ClassesOp::SetDefault, "form") .with_classes(ClassesOp::AddDefault, "form")
.with_charset("UTF-8") .with_charset("UTF-8")
} }

View file

@ -39,7 +39,7 @@ pub struct Input {
impl ComponentTrait for Input { impl ComponentTrait for Input {
fn new() -> Self { fn new() -> Self {
Input::default() 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_size(Some(60))
.with_maxlength(Some(128)) .with_maxlength(Some(128))
} }

View file

@ -14,7 +14,7 @@ pub struct Icon {
impl ComponentTrait for Icon { impl ComponentTrait for Icon {
fn new() -> Self { 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 { fn handle(&self) -> Handle {
@ -75,7 +75,10 @@ impl Icon {
#[fn_builder] #[fn_builder]
pub fn alter_icon_name(&mut self, name: &str) -> &mut Self { 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.icon_name = name.to_owned();
self self
} }

View file

@ -28,7 +28,7 @@ pub struct Image {
impl ComponentTrait for Image { impl ComponentTrait for Image {
fn new() -> Self { fn new() -> Self {
Image::default().with_classes(ClassesOp::SetDefault, IMG_FLUID) Image::default().with_classes(ClassesOp::AddDefault, IMG_FLUID)
} }
fn handle(&self) -> Handle { fn handle(&self) -> Handle {
@ -70,19 +70,19 @@ impl Image {
pub fn with(source: &str) -> Self { pub fn with(source: &str) -> Self {
Image::default() Image::default()
.with_source(source) .with_source(source)
.with_classes(ClassesOp::SetDefault, IMG_FLUID) .with_classes(ClassesOp::AddDefault, IMG_FLUID)
} }
pub fn fixed(source: &str) -> Self { pub fn fixed(source: &str) -> Self {
Image::default() Image::default()
.with_source(source) .with_source(source)
.with_classes(ClassesOp::SetDefault, IMG_FIXED) .with_classes(ClassesOp::AddDefault, IMG_FIXED)
} }
pub fn pagetop() -> Self { pub fn pagetop() -> Self {
Image::default() Image::default()
.with_source("/base/pagetop-logo.svg") .with_source("/base/pagetop-logo.svg")
.with_classes(ClassesOp::SetDefault, IMG_FIXED) .with_classes(ClassesOp::AddDefault, IMG_FIXED)
.with_size(ImageSize::Size(64, 64)) .with_size(ImageSize::Size(64, 64))
} }

View file

@ -30,8 +30,8 @@ pub struct Wrapper {
impl ComponentTrait for Wrapper { impl ComponentTrait for Wrapper {
fn new() -> Self { fn new() -> Self {
Wrapper::default() Wrapper::default()
.with_classes(ClassesOp::SetDefault, "container") .with_classes(ClassesOp::AddDefault, "container")
.with_inner_classes(ClassesOp::SetDefault, "container") .with_inner_classes(ClassesOp::AddDefault, "container")
} }
fn handle(&self) -> Handle { fn handle(&self) -> Handle {
@ -99,25 +99,33 @@ impl ComponentTrait for Wrapper {
impl Wrapper { impl Wrapper {
pub fn header() -> Self { 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.wrapper_type = WrapperType::Header;
c c
} }
pub fn footer() -> Self { 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.wrapper_type = WrapperType::Footer;
c c
} }
pub fn main() -> Self { 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.wrapper_type = WrapperType::Main;
c c
} }
pub fn section() -> Self { 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.wrapper_type = WrapperType::Section;
c c
} }

View file

@ -3,9 +3,9 @@
//! This *helper* differentiates between default classes (generally associated with styles provided //! This *helper* differentiates between default classes (generally associated with styles provided
//! by the theme) and user classes (for customizing components based on application styles). //! 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 //! Default classes can be added using [AddDefault], while user classes can be added using [Add].
//! added using [Add]. Operations to [Remove], [Replace] or [ReplaceIfExists] a class, as well as //! Operations to [Remove], [Replace] or [ReplaceIfExists] a class, as well as to [Reset] user
//! to [Reset] user classes, are also provided. //! classes, are also provided.
//! //!
//! Although the order of the classes is irrelevant (<https://stackoverflow.com/a/1321712>), default //! Although the order of the classes is irrelevant (<https://stackoverflow.com/a/1321712>), default
//! classes will be presented before user classes and duplicate classes will not be allowed. //! classes will be presented before user classes and duplicate classes will not be allowed.
@ -13,7 +13,6 @@
use crate::fn_builder; use crate::fn_builder;
pub enum ClassesOp { pub enum ClassesOp {
SetDefault,
AddDefault, AddDefault,
Add, Add,
Remove, Remove,
@ -51,10 +50,6 @@ impl OptionClasses {
let classes: Vec<&str> = classes.split_ascii_whitespace().collect(); let classes: Vec<&str> = classes.split_ascii_whitespace().collect();
match op { match op {
ClassesOp::SetDefault => {
self.0.retain(|(_, t)| t.ne(&ClassType::Default));
self.add(&classes, 0, ClassType::Default);
}
ClassesOp::AddDefault => { ClassesOp::AddDefault => {
let pos = match self.0.iter().position(|(_, t)| t.eq(&ClassType::User)) { let pos = match self.0.iter().position(|(_, t)| t.eq(&ClassType::User)) {
Some(pos) => pos, Some(pos) => pos,