workflow_d3/
d3.rs

1use js_sys::{Array, Function, Object};
2use wasm_bindgen::prelude::*;
3
4#[wasm_bindgen]
5extern "C" {
6
7    #[wasm_bindgen(extends = Object, js_name = d3)]
8    pub type D3;
9
10    /// (Internal) Get the filtered command line arguments when starting the app.
11    /// In NW.js, some command line arguments are used by NW.js,
12    /// which should not be interested of your app. App.argv will filter out
13    /// those arguments and return the ones left. You can get filtered patterns
14    /// from [app::filtered_argv](self::filtered_argv) and the full arguments from [app::full_argv](self::full_argv).
15    ///
16    /// ⧉ [NWJS Documentation](https://docs.nwjs.io/en/latest/References/App/#appargv)
17    ///
18    #[wasm_bindgen(static_method_of=D3, js_class=d3, js_name = scaleTime)]
19    pub fn scale_time() -> ScaleTime;
20
21    #[wasm_bindgen(static_method_of=D3, js_class=d3, js_name = scaleLinear)]
22    pub fn scale_linear() -> ScaleLinear;
23
24    #[wasm_bindgen(static_method_of=D3, js_class=d3, js_name = area)]
25    pub fn area() -> Area;
26
27    #[wasm_bindgen(static_method_of=D3, js_class=d3, js_name = extent)]
28    pub fn extent(data: &Array, cb: Function) -> Array;
29}
30
31#[wasm_bindgen]
32extern "C" {
33    #[wasm_bindgen(extends = Function)]
34    pub type ScaleTime;
35
36    #[wasm_bindgen(method, js_name=range)]
37    pub fn range_impl(this: &ScaleTime, range: Array) -> ScaleTime;
38
39    #[wasm_bindgen(method, js_name=domain)]
40    pub fn set_domain_array(this: &ScaleTime, domain: Array) -> ScaleTime;
41
42    #[wasm_bindgen(method)]
43    pub fn ticks(this: &ScaleTime, count: u32) -> Array;
44
45    #[wasm_bindgen(method, js_name=tickFormat)]
46    pub fn tick_format(this: &ScaleTime) -> Function;
47
48    #[wasm_bindgen(method, js_name=clamp)]
49    pub fn set_clamp(this: &ScaleTime, clamp: bool);
50
51    // #[wasm_bindgen(method, js_name=tickFormat)]
52    // pub fn call1(this: &ScaleTime, value: JsValue) -> f64;
53
54}
55
56impl ScaleTime {
57    pub fn range(&self, range: [f32; 2]) -> &Self {
58        let range_value = Array::new();
59        range_value.push(&range[0].into());
60        range_value.push(&range[1].into());
61        self.range_impl(range_value);
62        self
63    }
64}
65
66#[wasm_bindgen]
67extern "C" {
68    #[wasm_bindgen(extends = Function)]
69    pub type ScaleLinear;
70
71    #[wasm_bindgen(method, js_name=range)]
72    pub fn range_impl(this: &ScaleLinear, range: Array) -> ScaleLinear;
73
74    #[wasm_bindgen(method, js_name=domain)]
75    pub fn set_domain_array(this: &ScaleLinear, domain: Array) -> ScaleLinear;
76
77    #[wasm_bindgen(method)]
78    pub fn ticks(this: &ScaleLinear, count: u32) -> Array;
79
80    #[wasm_bindgen(method, js_name=tickFormat)]
81    pub fn tick_format(this: &ScaleLinear) -> Function;
82}
83
84impl ScaleLinear {
85    pub fn range(&self, range: [f32; 2]) -> &Self {
86        let range_value = Array::new();
87        range_value.push(&range[0].into());
88        range_value.push(&range[1].into());
89        self.range_impl(range_value);
90        self
91    }
92
93    pub fn set_domain(&self, min: u32, max: u32) -> &Self {
94        let domain = Array::new();
95        domain.push(&min.into());
96        domain.push(&max.into());
97        self.set_domain_array(domain);
98        self
99    }
100}
101
102#[wasm_bindgen]
103extern "C" {
104    #[wasm_bindgen(extends = Function)]
105    pub type Area;
106
107    #[wasm_bindgen(method)]
108    pub fn x(this: &Area, cb: &Function) -> Area;
109
110    #[wasm_bindgen(method)]
111    pub fn y0(this: &Area, value: f32) -> Area;
112
113    #[wasm_bindgen(method)]
114    pub fn y1(this: &Area, cb: &Function) -> Area;
115
116    #[wasm_bindgen(method)]
117    pub fn context(this: &Area, ctx: &web_sys::CanvasRenderingContext2d) -> Area;
118}