mod autosubmit;
mod confirm;
mod copy;
mod count;
mod dismiss;
mod local_time;
mod toggle;
use std::fmt;
use autumn_web::Markup;
pub use autosubmit::AutoSubmit;
pub use confirm::Confirm;
pub use copy::CopyText;
pub use count::{Count, CountMode, OutputSlot};
pub use dismiss::Dismiss;
pub use local_time::{LocalTime, TimeFormat};
pub use toggle::Toggle;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[non_exhaustive]
pub enum Behavior {
AutoSubmit,
Confirm,
Copy,
Count,
Dismiss,
LocalTime,
Toggle,
}
impl Behavior {
pub const ALL: &'static [Self] = &[
Self::AutoSubmit,
Self::Confirm,
Self::Copy,
Self::Count,
Self::Dismiss,
Self::LocalTime,
Self::Toggle,
];
#[must_use]
pub const fn name(self) -> &'static str {
match self {
Self::AutoSubmit => "autosubmit",
Self::Confirm => "confirm",
Self::Copy => "copy",
Self::Count => "count",
Self::Dismiss => "dismiss",
Self::LocalTime => "local-time",
Self::Toggle => "toggle",
}
}
}
impl fmt::Display for Behavior {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str(self.name())
}
}
impl maud::Render for Behavior {
fn render_to(&self, buffer: &mut String) {
buffer.push_str(self.name());
}
}
fn marker(behavior: Behavior) -> (&'static str, String) {
("data-vanilla", behavior.name().to_owned())
}
fn button(attributes: Vec<(&'static str, String)>, content: Markup) -> Markup {
let mut all = Vec::with_capacity(attributes.len() + 1);
all.push(("type", "button".to_owned()));
all.extend(attributes);
crate::markup::element("button", &all, content)
}