consecuit_html/interfaces/
track.rs

1use crate::elem::{HtmlProp, HtmlProps};
2use std::borrow::Cow;
3use web_sys::HtmlTrackElement;
4
5#[allow(non_camel_case_types)]
6#[derive(Clone, PartialEq)]
7pub enum TrackProp {
8    kind(Cow<'static, str>),
9    src(Cow<'static, str>),
10    srclang(Cow<'static, str>),
11    label(Cow<'static, str>),
12    default(bool),
13}
14
15#[sealed::sealed]
16impl crate::elem::HtmlComponent for HtmlTrackElement {
17    type PropEnum = TrackProp;
18}
19#[sealed::sealed]
20impl crate::elem::PropEnum<HtmlTrackElement> for TrackProp {
21    fn unset_on(&self, elem: &HtmlTrackElement) {
22        match self {
23            TrackProp::kind(_) => elem.remove_attribute("kind").unwrap(),
24            TrackProp::src(_) => elem.remove_attribute("src").unwrap(),
25            TrackProp::srclang(_) => elem.remove_attribute("srclang").unwrap(),
26            TrackProp::label(_) => elem.remove_attribute("label").unwrap(),
27            TrackProp::default(_) => elem.remove_attribute("default").unwrap(),
28        }
29    }
30
31    fn set_on(&self, elem: &HtmlTrackElement) {
32        match self {
33            TrackProp::kind(v) => elem.set_kind(v),
34            TrackProp::src(v) => elem.set_src(v),
35            TrackProp::srclang(v) => elem.set_srclang(v),
36            TrackProp::label(v) => elem.set_label(v),
37            TrackProp::default(v) => elem.set_default(*v),
38        }
39    }
40}
41
42impl HtmlProps<HtmlTrackElement> {
43    pub fn kind(mut self, val: impl Into<Cow<'static, str>>) -> Self {
44        let val = val.into();
45        self.0.push_back(HtmlProp::Own(TrackProp::kind(val)));
46        self
47    }
48
49    pub fn src(mut self, val: impl Into<Cow<'static, str>>) -> Self {
50        let val = val.into();
51        self.0.push_back(HtmlProp::Own(TrackProp::src(val)));
52        self
53    }
54
55    pub fn srclang(mut self, val: impl Into<Cow<'static, str>>) -> Self {
56        let val = val.into();
57        self.0.push_back(HtmlProp::Own(TrackProp::srclang(val)));
58        self
59    }
60
61    pub fn label(mut self, val: impl Into<Cow<'static, str>>) -> Self {
62        let val = val.into();
63        self.0.push_back(HtmlProp::Own(TrackProp::label(val)));
64        self
65    }
66
67    pub fn default(mut self, val: bool) -> Self {
68        self.0.push_back(HtmlProp::Own(TrackProp::default(val)));
69        self
70    }
71}