shindan_maker/
selectors.rs

1use scraper::Selector;
2use once_cell::sync::Lazy;
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
12    #[cfg(feature = "segments")]
13    pub(crate) post_display: Selector,
14
15    #[cfg(feature = "html")]
16    pub(crate) title_and_result: Selector,
17    #[cfg(feature = "html")]
18    pub(crate) script: Selector,
19    #[cfg(feature = "html")]
20    pub(crate) effects: Vec<Selector>,
21}
22
23impl Selectors {
24    fn new() -> Self {
25        Self {
26            shindan_title: Selector::parse("#shindanTitle").expect("Failed to parse selector"),
27            shindan_description_display: Selector::parse("#shindanDescriptionDisplay").expect("Failed to parse selector"),
28            form: vec![
29                Selector::parse("input[name=_token]").expect("Failed to parse selector"),
30                Selector::parse("input[name=randname]").expect("Failed to parse selector"),
31                Selector::parse("input[name=type]").expect("Failed to parse selector"),
32            ],
33
34            #[cfg(feature = "segments")]
35            post_display: Selector::parse("#post_display").expect("Invalid selector"),
36
37            #[cfg(feature = "html")]
38            title_and_result: Selector::parse("#title_and_result").expect("Failed to parse selector"),
39            #[cfg(feature = "html")]
40            script: Selector::parse("script").expect("Invalid script selector"),
41            #[cfg(feature = "html")]
42            effects: vec![
43                Selector::parse("span.shindanEffects[data-mode=ef_typing]").expect("Invalid script selector"),
44                Selector::parse("span.shindanEffects[data-mode=ef_shuffle]").expect("Invalid script selector"),
45            ],
46        }
47    }
48}