diff --git a/src/html/opt_classes.rs b/src/html/opt_classes.rs
index abb3ba4..a985762 100644
--- a/src/html/opt_classes.rs
+++ b/src/html/opt_classes.rs
@@ -25,6 +25,7 @@ pub enum ClassesOp {
///
/// - El [orden de las clases no es relevante](https://stackoverflow.com/a/1321712) en CSS.
/// - No se permiten clases duplicadas.
+/// - Las clases se convierten a minúsculas.
/// - Las clases vacías se ignoran.
///
/// # Ejemplo
@@ -32,8 +33,8 @@ pub enum ClassesOp {
/// ```rust
/// use pagetop::prelude::*;
///
-/// let classes = OptionClasses::new("btn btn-primary")
-/// .with_value(ClassesOp::Add, "active")
+/// let classes = OptionClasses::new("Btn btn-primary")
+/// .with_value(ClassesOp::Add, "Active")
/// .with_value(ClassesOp::Remove, "btn-primary");
///
/// assert_eq!(classes.get(), Some(String::from("btn active")));
@@ -51,7 +52,7 @@ impl OptionClasses {
#[builder_fn]
pub fn with_value(mut self, op: ClassesOp, classes: impl AsRef) -> Self {
- let classes: &str = classes.as_ref();
+ let classes = classes.as_ref().to_ascii_lowercase();
let classes: Vec<&str> = classes.split_ascii_whitespace().collect();
if classes.is_empty() {
diff --git a/src/html/opt_id.rs b/src/html/opt_id.rs
index 893ac6d..139fdcd 100644
--- a/src/html/opt_id.rs
+++ b/src/html/opt_id.rs
@@ -7,6 +7,7 @@ use crate::{builder_fn, AutoDefault};
/// # Normalización
///
/// - Se eliminan los espacios al principio y al final.
+/// - Se convierte a minúsculas.
/// - Se sustituyen los espacios intermedios por guiones bajos (`_`).
/// - Si el resultado es una cadena vacía, se guarda `None`.
///
@@ -15,7 +16,7 @@ use crate::{builder_fn, AutoDefault};
/// ```rust
/// use pagetop::prelude::*;
///
-/// let id = OptionId::new("main section");
+/// let id = OptionId::new(" main Section ");
/// assert_eq!(id.get(), Some(String::from("main_section")));
///
/// let empty = OptionId::default();
@@ -39,7 +40,7 @@ impl OptionId {
/// El valor se normaliza automáticamente.
#[builder_fn]
pub fn with_value(mut self, value: impl AsRef) -> Self {
- let value = value.as_ref().trim().replace(' ', "_");
+ let value = value.as_ref().trim().to_ascii_lowercase().replace(' ', "_");
self.0 = (!value.is_empty()).then_some(value);
self
}
diff --git a/src/html/opt_name.rs b/src/html/opt_name.rs
index aa74e3b..ffb0b98 100644
--- a/src/html/opt_name.rs
+++ b/src/html/opt_name.rs
@@ -7,6 +7,7 @@ use crate::{builder_fn, AutoDefault};
/// # Normalización
///
/// - Se eliminan los espacios al principio y al final.
+/// - Se convierte a minúsculas.
/// - Se sustituyen los espacios intermedios por guiones bajos (`_`).
/// - Si el resultado es una cadena vacía, se guarda `None`.
///
@@ -15,7 +16,7 @@ use crate::{builder_fn, AutoDefault};
/// ```rust
/// use pagetop::prelude::*;
///
-/// let name = OptionName::new(" display name ");
+/// let name = OptionName::new(" DISplay name ");
/// assert_eq!(name.get(), Some(String::from("display_name")));
///
/// let empty = OptionName::default();
@@ -39,7 +40,7 @@ impl OptionName {
/// El valor se normaliza automáticamente.
#[builder_fn]
pub fn with_value(mut self, value: impl AsRef) -> Self {
- let value = value.as_ref().trim().replace(' ', "_");
+ let value = value.as_ref().trim().to_ascii_lowercase().replace(' ', "_");
self.0 = (!value.is_empty()).then_some(value);
self
}