🔥 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 => {
let h = component_as_mut::<Heading>(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::<Paragraph>(component);

View file

@ -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 {

View file

@ -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 {

View file

@ -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 {

View file

@ -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 {

View file

@ -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 {

View file

@ -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")
}

View file

@ -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))
}

View file

@ -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
}

View file

@ -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))
}

View file

@ -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
}

View file

@ -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 (<https://stackoverflow.com/a/1321712>), 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,