shindan_maker/
selectors.rs1use 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}