- Mejora la legibilidad del código. - Simplifica las alteraciones de clases en los componentes `Container`, `Dropdown`, `Image`, `Nav`, `Navbar` y `Offcanvas` usando métodos dedicados para generar clases en función de sus propiedades. - Mejora los enums añadiendo métodos que devuelven sus clases asociadas, reduciendo código repetitivo. - Elimina el trait `JoinClasses` y su implementación, integrando la lógica de unión de clases directamente en los componentes.
104 lines
3 KiB
Rust
104 lines
3 KiB
Rust
use pagetop::prelude::*;
|
|
|
|
// **< ScaleSize >**********************************************************************************
|
|
|
|
/// Escala discreta de tamaños para definir clases utilitarias.
|
|
#[derive(AutoDefault, Clone, Copy, Debug, PartialEq)]
|
|
pub enum ScaleSize {
|
|
/// Sin tamaño (no define ninguna clase).
|
|
#[default]
|
|
None,
|
|
/// Tamaño automático.
|
|
Auto,
|
|
/// Escala cero.
|
|
Zero,
|
|
/// Escala uno.
|
|
One,
|
|
/// Escala dos.
|
|
Two,
|
|
/// Escala tres.
|
|
Three,
|
|
/// Escala cuatro.
|
|
Four,
|
|
/// Escala cinco.
|
|
Five,
|
|
}
|
|
|
|
impl ScaleSize {
|
|
// Devuelve el sufijo para el tamaño (`"-0"`, `"-1"`, etc.), o `None` si no define ninguna
|
|
// clase, o `""` para el tamaño automático.
|
|
#[rustfmt::skip]
|
|
#[inline]
|
|
const fn suffix(self) -> Option<&'static str> {
|
|
match self {
|
|
Self::None => None,
|
|
Self::Auto => Some(""),
|
|
Self::Zero => Some("-0"),
|
|
Self::One => Some("-1"),
|
|
Self::Two => Some("-2"),
|
|
Self::Three => Some("-3"),
|
|
Self::Four => Some("-4"),
|
|
Self::Five => Some("-5"),
|
|
}
|
|
}
|
|
|
|
// Añade el tamaño a la cadena de clases usando el prefijo dado.
|
|
#[inline]
|
|
pub(crate) fn push_class(self, classes: &mut String, prefix: &str) {
|
|
if !prefix.is_empty() {
|
|
if let Some(suffix) = self.suffix() {
|
|
if !classes.is_empty() {
|
|
classes.push(' ');
|
|
}
|
|
classes.push_str(prefix);
|
|
classes.push_str(suffix);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* Devuelve la clase del tamaño para el prefijo, o una cadena vacía si no aplica (reservado).
|
|
//
|
|
// # Ejemplo
|
|
//
|
|
// ```rust
|
|
// # use pagetop_bootsier::prelude::*;
|
|
// assert_eq!(ScaleSize::Auto.class_with("border"), "border");
|
|
// assert_eq!(ScaleSize::Zero.class_with("m"), "m-0");
|
|
// assert_eq!(ScaleSize::Three.class_with("p"), "p-3");
|
|
// assert_eq!(ScaleSize::None.class_with("border"), "");
|
|
// ```
|
|
#[inline]
|
|
pub(crate) fn class_with(self, prefix: &str) -> String {
|
|
if !prefix.is_empty() {
|
|
if let Some(suffix) = self.suffix() {
|
|
let mut class = String::with_capacity(prefix.len() + suffix.len());
|
|
class.push_str(prefix);
|
|
class.push_str(suffix);
|
|
return class;
|
|
}
|
|
}
|
|
String::new()
|
|
} */
|
|
}
|
|
|
|
// **< Side >***************************************************************************************
|
|
|
|
/// Lados sobre los que aplicar una clase utilitaria (respetando LTR/RTL).
|
|
#[derive(AutoDefault, Clone, Copy, Debug, PartialEq)]
|
|
pub enum Side {
|
|
/// Todos los lados.
|
|
#[default]
|
|
All,
|
|
/// Lado superior.
|
|
Top,
|
|
/// Lado inferior.
|
|
Bottom,
|
|
/// Lado lógico de inicio (respetando RTL).
|
|
Start,
|
|
/// Lado lógico de fin (respetando RTL).
|
|
End,
|
|
/// Lados lógicos laterales (abreviatura *x*).
|
|
LeftAndRight,
|
|
/// Lados superior e inferior (abreviatura *y*).
|
|
TopAndBottom,
|
|
}
|