diff --git a/extensions/pagetop-aliner/README.md b/extensions/pagetop-aliner/README.md index 09a337eb..65f91f94 100644 --- a/extensions/pagetop-aliner/README.md +++ b/extensions/pagetop-aliner/README.md @@ -25,7 +25,7 @@ Igual que con otras extensiones, **añade la dependencia** a tu `Cargo.toml`: ```toml [dependencies] -pagetop-aliner = { ... } +pagetop-aliner = "..." ``` **Declara la extensión** en tu aplicación (o extensión que la requiera). Recuerda que el orden en diff --git a/extensions/pagetop-aliner/src/lib.rs b/extensions/pagetop-aliner/src/lib.rs index 95f22196..e0421305 100644 --- a/extensions/pagetop-aliner/src/lib.rs +++ b/extensions/pagetop-aliner/src/lib.rs @@ -26,7 +26,7 @@ Igual que con otras extensiones, **añade la dependencia** a tu `Cargo.toml`: ```toml [dependencies] -pagetop-aliner = { ... } +pagetop-aliner = "..." ``` **Declara la extensión** en tu aplicación (o extensión que la requiera). Recuerda que el orden en diff --git a/extensions/pagetop-bootsier/README.md b/extensions/pagetop-bootsier/README.md index b34eeb51..a48bfd82 100644 --- a/extensions/pagetop-bootsier/README.md +++ b/extensions/pagetop-bootsier/README.md @@ -25,7 +25,7 @@ Igual que con otras extensiones, **añade la dependencia** a tu `Cargo.toml`: ```toml [dependencies] -pagetop-bootsier = { ... } +pagetop-bootsier = "..." ``` **Declara la extensión** en tu aplicación (o extensión que la requiera). Recuerda que el orden en diff --git a/extensions/pagetop-bootsier/src/lib.rs b/extensions/pagetop-bootsier/src/lib.rs index d562ec09..e23b391f 100644 --- a/extensions/pagetop-bootsier/src/lib.rs +++ b/extensions/pagetop-bootsier/src/lib.rs @@ -26,7 +26,7 @@ Igual que con otras extensiones, **añade la dependencia** a tu `Cargo.toml`: ```toml [dependencies] -pagetop-bootsier = { ... } +pagetop-bootsier = "..." ``` **Declara la extensión** en tu aplicación (o extensión que la requiera). Recuerda que el orden en diff --git a/extensions/pagetop-bootsier/src/theme/aux/button.rs b/extensions/pagetop-bootsier/src/theme/aux/button.rs index 876e8f87..b32bd17d 100644 --- a/extensions/pagetop-bootsier/src/theme/aux/button.rs +++ b/extensions/pagetop-bootsier/src/theme/aux/button.rs @@ -33,7 +33,7 @@ impl ButtonColor { classes.push(' '); } match self { - Self::Default => {} + Self::Default => unreachable!(), Self::Background(c) => { classes.push_str(Self::BTN_PREFIX); classes.push_str(c.as_str()); @@ -66,9 +66,24 @@ impl ButtonColor { /// assert_eq!(ButtonColor::Default.to_class(), ""); /// ``` pub fn to_class(self) -> String { - let mut class = String::new(); - self.push_class(&mut class); - class + match self { + Self::Default => String::new(), + Self::Background(c) => { + let color = c.as_str(); + let mut class = String::with_capacity(Self::BTN_PREFIX.len() + color.len()); + class.push_str(Self::BTN_PREFIX); + class.push_str(color); + class + } + Self::Outline(c) => { + let color = c.as_str(); + let mut class = String::with_capacity(Self::BTN_OUTLINE_PREFIX.len() + color.len()); + class.push_str(Self::BTN_OUTLINE_PREFIX); + class.push_str(color); + class + } + Self::Link => Self::BTN_LINK.to_string(), + } } } @@ -93,15 +108,17 @@ impl ButtonSize { /// Añade la clase de tamaño `btn-sm` o `btn-lg` a la cadena de clases. #[inline] pub(crate) fn push_class(self, classes: &mut String) { - let class = match self { - Self::Default => return, - Self::Small => Self::BTN_SM, - Self::Large => Self::BTN_LG, - }; + if let Self::Default = self { + return; + } if !classes.is_empty() { classes.push(' '); } - classes.push_str(class); + match self { + Self::Default => unreachable!(), + Self::Small => classes.push_str(Self::BTN_SM), + Self::Large => classes.push_str(Self::BTN_LG), + } } /// Devuelve la clase `btn-sm` o `btn-lg` correspondiente al tamaño del botón. @@ -115,8 +132,10 @@ impl ButtonSize { /// assert_eq!(ButtonSize::Default.to_class(), ""); /// ``` pub fn to_class(self) -> String { - let mut class = String::new(); - self.push_class(&mut class); - class + match self { + Self::Default => String::new(), + Self::Small => Self::BTN_SM.to_string(), + Self::Large => Self::BTN_LG.to_string(), + } } } diff --git a/extensions/pagetop-bootsier/src/theme/aux/color.rs b/extensions/pagetop-bootsier/src/theme/aux/color.rs index a56d9db2..f49c36b6 100644 --- a/extensions/pagetop-bootsier/src/theme/aux/color.rs +++ b/extensions/pagetop-bootsier/src/theme/aux/color.rs @@ -5,9 +5,9 @@ use pagetop::prelude::*; /// Paleta de colores temáticos. /// /// Equivalen a los nombres estándar definidos por Bootstrap (`primary`, `secondary`, `success`, -/// etc.). Este tipo enumerado sirve de referencia para componer las clases de color para el fondo -/// ([`classes::Background`](crate::theme::classes::Background)), los bordes -/// ([`classes::Border`](crate::theme::classes::Border)) o para el texto +/// etc.). Este tipo enumerado sirve de base para componer las clases de color para fondo +/// ([`classes::Background`](crate::theme::classes::Background)), bordes +/// ([`classes::Border`](crate::theme::classes::Border)) y texto /// ([`classes::Text`](crate::theme::classes::Text)). #[derive(AutoDefault, Clone, Copy, Debug, PartialEq)] pub enum Color { @@ -39,6 +39,15 @@ impl Color { } } + /* Añade el nombre del color a la cadena de clases (reservado). + #[inline] + pub(crate) fn push_class(self, classes: &mut String) { + if !classes.is_empty() { + classes.push(' '); + } + classes.push_str(self.as_str()); + } */ + /// Devuelve la clase correspondiente al color. /// /// # Ejemplos @@ -245,9 +254,23 @@ impl ColorBg { /// assert_eq!(ColorBg::Default.to_class(), ""); /// ``` pub fn to_class(self) -> String { - let mut class = String::new(); - self.push_class(&mut class); - class + if let Some(suffix) = self.suffix() { + let base_len = match self { + Self::Theme(c) | Self::Subtle(c) => Self::BG_PREFIX.len() + c.as_str().len(), + _ => Self::BG.len(), + }; + let mut class = String::with_capacity(base_len + suffix.len()); + match self { + Self::Theme(c) | Self::Subtle(c) => { + class.push_str(Self::BG_PREFIX); + class.push_str(c.as_str()); + } + _ => class.push_str(Self::BG), + } + class.push_str(suffix); + return class; + } + String::new() } } @@ -329,8 +352,22 @@ impl ColorText { /// assert_eq!(ColorText::Default.to_class(), ""); /// ``` pub fn to_class(self) -> String { - let mut class = String::new(); - self.push_class(&mut class); - class + if let Some(suffix) = self.suffix() { + let base_len = match self { + Self::Theme(c) | Self::Emphasis(c) => Self::TEXT_PREFIX.len() + c.as_str().len(), + _ => Self::TEXT.len(), + }; + let mut class = String::with_capacity(base_len + suffix.len()); + match self { + Self::Theme(c) | Self::Emphasis(c) => { + class.push_str(Self::TEXT_PREFIX); + class.push_str(c.as_str()); + } + _ => class.push_str(Self::TEXT), + } + class.push_str(suffix); + return class; + } + String::new() } } diff --git a/extensions/pagetop-bootsier/src/theme/classes/layout.rs b/extensions/pagetop-bootsier/src/theme/classes/layout.rs index 8b53cf15..1f388450 100644 --- a/extensions/pagetop-bootsier/src/theme/classes/layout.rs +++ b/extensions/pagetop-bootsier/src/theme/classes/layout.rs @@ -79,6 +79,18 @@ impl Margin { } } + /* Añade la clase de **margin** a la cadena de clases (reservado). + /// + /// No añade nada si `size` es `ScaleSize::None`. + #[inline] + pub(crate) fn push_class(self, classes: &mut String) { + let Some(size) = self.size_suffix() else { + return; + }; + self.breakpoint + .push_class(classes, self.side_prefix(), size); + } */ + /// Devuelve la clase de **margin** como cadena (`"mt-3"`, `"ms-lg-auto"`, etc.). /// /// Si `size` es `ScaleSize::None`, devuelve `""`. @@ -168,6 +180,17 @@ impl Padding { } } + /* Añade la clase de **padding** a la cadena de clases (reservado). + /// + /// No añade nada si `size` es `ScaleSize::None` o `ScaleSize::Auto`. + #[inline] + pub(crate) fn push_class(self, classes: &mut String) { + let Some(size) = self.suffix() else { + return; + }; + self.breakpoint.push_class(classes, self.prefix(), size); + } */ + /// Devuelve la clase de **padding** como cadena (`"px-2"`, `"pe-sm-4"`, etc.). /// /// Si `size` es `ScaleSize::None` o `ScaleSize::Auto`, devuelve `""`.