108 lines
2.1 KiB
Rust
108 lines
2.1 KiB
Rust
use std::str::FromStr;
|
|
|
|
use chrono::Locale;
|
|
use gloo::utils::document;
|
|
use wasm_bindgen::prelude::*;
|
|
use web_sys::Element;
|
|
|
|
pub trait SelectorExt {
|
|
fn selector<T>(&self, selectors: &str) -> T
|
|
where
|
|
T: JsCast;
|
|
|
|
fn selector_all<T>(&self, selectors: &str) -> Vec<T>
|
|
where
|
|
T: JsCast;
|
|
|
|
fn deep_clone(&self) -> Self;
|
|
}
|
|
|
|
impl SelectorExt for Element {
|
|
fn selector<T>(&self, selectors: &str) -> T
|
|
where
|
|
T: JsCast,
|
|
{
|
|
self.query_selector(selectors)
|
|
.unwrap()
|
|
.unwrap()
|
|
.dyn_into::<T>()
|
|
.unwrap()
|
|
}
|
|
|
|
fn selector_all<T>(&self, selectors: &str) -> Vec<T>
|
|
where
|
|
T: JsCast,
|
|
{
|
|
self.query_selector_all(selectors)
|
|
.unwrap()
|
|
.values()
|
|
.into_iter()
|
|
.map(|e| e.unwrap().dyn_into::<T>().unwrap())
|
|
.collect()
|
|
}
|
|
|
|
fn deep_clone(&self) -> Self {
|
|
self.clone_node_with_deep(true)
|
|
.unwrap()
|
|
.dyn_into::<Element>()
|
|
.unwrap()
|
|
}
|
|
}
|
|
|
|
pub fn selector<T>(selectors: &str) -> T
|
|
where
|
|
T: JsCast,
|
|
{
|
|
document()
|
|
.query_selector(selectors)
|
|
.unwrap()
|
|
.unwrap()
|
|
.dyn_into::<T>()
|
|
.unwrap()
|
|
}
|
|
|
|
pub fn selector_all<T>(selectors: &str) -> Vec<T>
|
|
where
|
|
T: JsCast,
|
|
{
|
|
document()
|
|
.query_selector_all(selectors)
|
|
.unwrap()
|
|
.values()
|
|
.into_iter()
|
|
.map(|e| e.unwrap().dyn_into::<T>().unwrap())
|
|
.collect()
|
|
}
|
|
|
|
pub fn selector_and_clone<T>(selectors: &str) -> T
|
|
where
|
|
T: JsCast,
|
|
{
|
|
document()
|
|
.query_selector(selectors)
|
|
.unwrap()
|
|
.unwrap()
|
|
.clone_node_with_deep(true)
|
|
.unwrap()
|
|
.dyn_into::<T>()
|
|
.unwrap()
|
|
}
|
|
|
|
pub fn by_id<T>(element_id: &str) -> T
|
|
where
|
|
T: JsCast,
|
|
{
|
|
document()
|
|
.get_element_by_id(element_id)
|
|
.unwrap()
|
|
.dyn_into::<T>()
|
|
.unwrap()
|
|
}
|
|
|
|
pub fn get_locale() -> Locale {
|
|
let lang_and_territory = selector::<Element>("html")
|
|
.get_attribute("lang")
|
|
.unwrap()
|
|
.replace("-", "_");
|
|
Locale::from_str(&lang_and_territory).unwrap_or_default()
|
|
}
|