shindan_maker/
selectors.rs

1use once_cell::sync::Lazy;
2use scraper::Selector;
3
4pub(crate) static SELECTORS: Lazy<Selectors> = Lazy::new(Selectors::new);
5
6#[derive(Clone)]
7pub(crate) struct Selectors {
8    pub(crate) shindan_title: Selector,
9    pub(crate) shindan_description_display: Selector,
10    pub(crate) form: Vec<Selector>,
11    pub(crate) input_parts: Selector,
12
13    #[cfg(feature = "segments")]
14    pub(crate) post_display: Selector,
15
16    #[cfg(feature = "html")]
17    pub(crate) title_and_result: Selector,
18    #[cfg(feature = "html")]
19    pub(crate) script: Selector,
20    #[cfg(feature = "html")]
21    pub(crate) effects: Vec<Selector>,
22}
23
24impl Selectors {
25    fn new() -> Self {
26        Self {
27            shindan_title: Selector::parse("#shindanTitle").expect("Failed to parse selector"),
28            shindan_description_display: Selector::parse("#shindanDescriptionDisplay")
29                .expect("Failed to parse selector"),
30            form: vec![
31                Selector::parse("input[name=_token]").expect("Failed to parse selector"),
32                Selector::parse("input[name=randname]").expect("Failed to parse selector"),
33                Selector::parse("input[name=type]").expect("Failed to parse selector"),
34            ],
35            input_parts: Selector::parse(r#"input[name^="parts["]"#)
36                .expect("Failed to parse selector"),
37
38            #[cfg(feature = "segments")]
39            post_display: Selector::parse("#post_display").expect("Invalid selector"),
40
41            #[cfg(feature = "html")]
42            title_and_result: Selector::parse("#title_and_result")
43                .expect("Failed to parse selector"),
44            #[cfg(feature = "html")]
45            script: Selector::parse("script").expect("Invalid script selector"),
46            #[cfg(feature = "html")]
47            effects: vec![
48                Selector::parse("span.shindanEffects[data-mode=ef_typing]")
49                    .expect("Invalid script selector"),
50                Selector::parse("span.shindanEffects[data-mode=ef_shuffle]")
51                    .expect("Invalid script selector"),
52            ],
53        }
54    }
55}