nouislider/
lib.rs

1use wasm_bindgen::prelude::*;
2use wasm_bindgen::JsCast;
3use web_sys::HtmlDivElement;
4use web_sys::HtmlElement;
5
6pub fn get_tooltips(slider: &NoUiSlider) -> Vec<HtmlDivElement> {
7    match js_sys::try_iter(&slider.get_tooltips()) {
8        Ok(Some(iter)) => iter
9            .map(|i| i.unwrap().dyn_into().unwrap())
10            .collect::<Vec<HtmlDivElement>>(),
11        _ => vec![],
12    }
13}
14
15pub fn get_origins(slider: &NoUiSlider) -> Vec<HtmlDivElement> {
16    match js_sys::try_iter(&slider.get_origins()) {
17        Ok(Some(iter)) => iter
18            .map(|i| i.unwrap().dyn_into().unwrap())
19            .collect::<Vec<HtmlDivElement>>(),
20        _ => vec![],
21    }
22}
23
24pub fn get(slider: &NoUiSlider) -> Vec<f64> {
25    slider
26        .get()
27        .into_iter()
28        .map(|i| i.as_string().unwrap().parse::<f64>().unwrap())
29        .collect::<Vec<f64>>()
30}
31
32#[wasm_bindgen]
33extern "C" {
34    #[derive(Debug)]
35    #[wasm_bindgen(js_name = create)]
36    pub type NoUiSlider;
37
38    // Create a new slider on target HtmlElement. Required options are 'start' and 'range'
39    #[wasm_bindgen(constructor, js_class = create, js_namespace = noUiSlider)]
40    pub fn new(target: &HtmlElement, options: &JsValue) -> NoUiSlider;
41
42    // Removes classes from the root HtmlElement and empties it
43    #[wasm_bindgen(method)]
44    pub fn destroy(this: &NoUiSlider);
45
46    // Set slider values
47    #[wasm_bindgen(method)]
48    pub fn set(this: &NoUiSlider, values: &JsValue);
49
50    // Get slider values
51    #[wasm_bindgen(method)]
52    pub fn get(this: &NoUiSlider) -> Vec<JsValue>;
53
54    // Get non-formatted values
55    #[wasm_bindgen(method, js_name = get)]
56    pub fn get_with_options(this: &NoUiSlider, no_formatting: bool) -> Vec<JsValue>;
57
58    // Set callbacks for events: start, slide, drag, update, change, set, end
59    #[wasm_bindgen(method)]
60    pub fn on(this: &NoUiSlider, event_name: &str, handler: &JsValue);
61
62    // Remove callbacks for events: start, slide, drag, update, change, set, end
63    #[wasm_bindgen(method)]
64    pub fn off(this: &NoUiSlider, event_name: &str);
65
66    // Get slider handle origin HtmlDivElement
67    #[wasm_bindgen(method, js_name = getOrigins)]
68    pub fn get_origins(this: &NoUiSlider) -> JsValue;
69
70    // Get slider positions
71    #[wasm_bindgen(method, js_name = getPositions)]
72    pub fn get_positions(this: &NoUiSlider) -> JsValue;
73
74    // Get tooltips HtmlDivElements
75    #[wasm_bindgen(method, js_name = getTooltips)]
76    pub fn get_tooltips(this: &NoUiSlider) -> JsValue;
77
78    // Remove tooltips
79    #[wasm_bindgen(method, js_name = removeTooltips)]
80    pub fn remove_tooltips(this: &NoUiSlider) -> JsValue;
81
82    // Update options
83    #[wasm_bindgen(method, js_name = updateOptions)]
84    pub fn update_options(this: &NoUiSlider, option: &JsValue);
85
86    // Set slider handle value, if 'set' event should fire, if stepping should be applied
87    #[wasm_bindgen(method, js_name = setHandle)]
88    pub fn set_handle(
89        this: &NoUiSlider,
90        handle_number: i64,
91        value: f64,
92        set_event: bool,
93        stepping: bool,
94    );
95
96    // Set slider pips, return the HtmlDivElement
97    #[wasm_bindgen(method, js_name = pips)]
98    pub fn pips(this: &NoUiSlider, options: &JsValue) -> JsValue;
99
100    // Remove pips
101    #[wasm_bindgen(method, js_name = removePips)]
102    pub fn remove_pips(this: &NoUiSlider);
103
104    // Reset slider values
105    #[wasm_bindgen(method)]
106    pub fn reset(this: &NoUiSlider) -> JsValue;
107}