use std::time::Duration;
use super::{Behavior, marker};
use crate::markup::{Attributes, common, millis};
#[derive(Debug, Clone, Default, PartialEq, Eq)]
#[must_use]
pub struct AutoSubmit {
on_input: bool,
delay: Option<Duration>,
extra: Attributes,
}
impl AutoSubmit {
pub const fn new() -> Self {
Self {
on_input: false,
delay: None,
extra: Vec::new(),
}
}
pub const fn on_input(mut self) -> Self {
self.on_input = true;
self
}
pub const fn delay(mut self, duration: Duration) -> Self {
self.delay = Some(duration);
self
}
#[must_use]
pub fn attributes(&self) -> Attributes {
let mut attributes = vec![marker(Behavior::AutoSubmit)];
if self.on_input {
attributes.push(("data-vanilla-autosubmit-on", "input".to_owned()));
}
if let Some(delay) = self.delay {
attributes.push(("data-vanilla-autosubmit-delay", millis(delay).to_string()));
}
attributes.extend(self.extra.iter().cloned());
attributes
}
}
common!(AutoSubmit, wrap);