Compare commits

..

No commits in common. "318d7de2b659c196eb419902e1739f4b6aa16fb5" and "f1295c74dfd286f16b5ff07727ff8ad01b5bf487" have entirely different histories.

7 changed files with 105 additions and 26 deletions

View file

@ -25,7 +25,7 @@ Igual que con otras extensiones, **añade la dependencia** a tu `Cargo.toml`:
```toml ```toml
[dependencies] [dependencies]
pagetop-aliner = { ... } pagetop-aliner = "..."
``` ```
**Declara la extensión** en tu aplicación (o extensión que la requiera). Recuerda que el orden en **Declara la extensión** en tu aplicación (o extensión que la requiera). Recuerda que el orden en

View file

@ -26,7 +26,7 @@ Igual que con otras extensiones, **añade la dependencia** a tu `Cargo.toml`:
```toml ```toml
[dependencies] [dependencies]
pagetop-aliner = { ... } pagetop-aliner = "..."
``` ```
**Declara la extensión** en tu aplicación (o extensión que la requiera). Recuerda que el orden en **Declara la extensión** en tu aplicación (o extensión que la requiera). Recuerda que el orden en

View file

@ -25,7 +25,7 @@ Igual que con otras extensiones, **añade la dependencia** a tu `Cargo.toml`:
```toml ```toml
[dependencies] [dependencies]
pagetop-bootsier = { ... } pagetop-bootsier = "..."
``` ```
**Declara la extensión** en tu aplicación (o extensión que la requiera). Recuerda que el orden en **Declara la extensión** en tu aplicación (o extensión que la requiera). Recuerda que el orden en

View file

@ -26,7 +26,7 @@ Igual que con otras extensiones, **añade la dependencia** a tu `Cargo.toml`:
```toml ```toml
[dependencies] [dependencies]
pagetop-bootsier = { ... } pagetop-bootsier = "..."
``` ```
**Declara la extensión** en tu aplicación (o extensión que la requiera). Recuerda que el orden en **Declara la extensión** en tu aplicación (o extensión que la requiera). Recuerda que el orden en

View file

@ -33,7 +33,7 @@ impl ButtonColor {
classes.push(' '); classes.push(' ');
} }
match self { match self {
Self::Default => {} Self::Default => unreachable!(),
Self::Background(c) => { Self::Background(c) => {
classes.push_str(Self::BTN_PREFIX); classes.push_str(Self::BTN_PREFIX);
classes.push_str(c.as_str()); classes.push_str(c.as_str());
@ -66,9 +66,24 @@ impl ButtonColor {
/// assert_eq!(ButtonColor::Default.to_class(), ""); /// assert_eq!(ButtonColor::Default.to_class(), "");
/// ``` /// ```
pub fn to_class(self) -> String { pub fn to_class(self) -> String {
let mut class = String::new(); match self {
self.push_class(&mut class); Self::Default => String::new(),
class 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. /// Añade la clase de tamaño `btn-sm` o `btn-lg` a la cadena de clases.
#[inline] #[inline]
pub(crate) fn push_class(self, classes: &mut String) { pub(crate) fn push_class(self, classes: &mut String) {
let class = match self { if let Self::Default = self {
Self::Default => return, return;
Self::Small => Self::BTN_SM, }
Self::Large => Self::BTN_LG,
};
if !classes.is_empty() { if !classes.is_empty() {
classes.push(' '); 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. /// 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(), ""); /// assert_eq!(ButtonSize::Default.to_class(), "");
/// ``` /// ```
pub fn to_class(self) -> String { pub fn to_class(self) -> String {
let mut class = String::new(); match self {
self.push_class(&mut class); Self::Default => String::new(),
class Self::Small => Self::BTN_SM.to_string(),
Self::Large => Self::BTN_LG.to_string(),
}
} }
} }

View file

@ -5,9 +5,9 @@ use pagetop::prelude::*;
/// Paleta de colores temáticos. /// Paleta de colores temáticos.
/// ///
/// Equivalen a los nombres estándar definidos por Bootstrap (`primary`, `secondary`, `success`, /// 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 /// etc.). Este tipo enumerado sirve de base para componer las clases de color para fondo
/// ([`classes::Background`](crate::theme::classes::Background)), los bordes /// ([`classes::Background`](crate::theme::classes::Background)), bordes
/// ([`classes::Border`](crate::theme::classes::Border)) o para el texto /// ([`classes::Border`](crate::theme::classes::Border)) y texto
/// ([`classes::Text`](crate::theme::classes::Text)). /// ([`classes::Text`](crate::theme::classes::Text)).
#[derive(AutoDefault, Clone, Copy, Debug, PartialEq)] #[derive(AutoDefault, Clone, Copy, Debug, PartialEq)]
pub enum Color { 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. /// Devuelve la clase correspondiente al color.
/// ///
/// # Ejemplos /// # Ejemplos
@ -245,9 +254,23 @@ impl ColorBg {
/// assert_eq!(ColorBg::Default.to_class(), ""); /// assert_eq!(ColorBg::Default.to_class(), "");
/// ``` /// ```
pub fn to_class(self) -> String { pub fn to_class(self) -> String {
let mut class = String::new(); if let Some(suffix) = self.suffix() {
self.push_class(&mut class); let base_len = match self {
class 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(), ""); /// assert_eq!(ColorText::Default.to_class(), "");
/// ``` /// ```
pub fn to_class(self) -> String { pub fn to_class(self) -> String {
let mut class = String::new(); if let Some(suffix) = self.suffix() {
self.push_class(&mut class); let base_len = match self {
class 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()
} }
} }

View file

@ -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.). /// Devuelve la clase de **margin** como cadena (`"mt-3"`, `"ms-lg-auto"`, etc.).
/// ///
/// Si `size` es `ScaleSize::None`, devuelve `""`. /// 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.). /// Devuelve la clase de **padding** como cadena (`"px-2"`, `"pe-sm-4"`, etc.).
/// ///
/// Si `size` es `ScaleSize::None` o `ScaleSize::Auto`, devuelve `""`. /// Si `size` es `ScaleSize::None` o `ScaleSize::Auto`, devuelve `""`.