perspective_viewer/custom_elements/
debug_plugin.rs1use wasm_bindgen::prelude::*;
14
15use crate::utils::*;
16use crate::*;
17
18#[wasm_bindgen]
33pub struct PerspectiveDebugPluginElement {
34 elem: web_sys::HtmlElement,
35}
36
37impl CustomElementMetadata for PerspectiveDebugPluginElement {
38 const CUSTOM_ELEMENT_NAME: &'static str = "perspective-viewer-plugin";
39}
40
41#[wasm_bindgen]
42impl PerspectiveDebugPluginElement {
43 #[wasm_bindgen(constructor)]
44 pub fn new(elem: web_sys::HtmlElement) -> Self {
45 Self { elem }
46 }
47
48 #[wasm_bindgen(getter)]
49 pub fn name(&self) -> String {
50 "Debug".to_owned()
51 }
52
53 #[wasm_bindgen(getter)]
54 pub fn select_mode(&self) -> String {
55 "select".to_owned()
56 }
57
58 #[wasm_bindgen(getter)]
59 pub fn min_config_columns(&self) -> JsValue {
60 JsValue::UNDEFINED
61 }
62
63 #[wasm_bindgen(getter)]
64 pub fn config_column_names(&self) -> JsValue {
65 JsValue::UNDEFINED
66 }
67
68 pub fn update(&self, view: &perspective_js::View) -> ApiFuture<()> {
71 clone!(self.elem, view);
72 ApiFuture::new(async move {
73 let draw = js_sys::Reflect::get(&elem, &JsValue::from_str("draw"))?
74 .dyn_into::<js_sys::Function>()?;
75
76 let task = draw.call1(&elem, &JsValue::from(view))?;
77 wasm_bindgen_futures::JsFuture::from(js_sys::Promise::resolve(&task)).await?;
78 Ok(())
79 })
80 }
81
82 pub fn draw(&self, view: &perspective_js::View) -> ApiFuture<()> {
88 let css = "margin:0;overflow:scroll;position:absolute;width:100%;height:100%";
89 clone!(self.elem, view);
90 ApiFuture::new(async move {
91 let csv = view.to_csv(None).await?;
92 elem.style().set_property("background-color", "#fff")?;
93 elem.set_inner_html(&format!("<pre style='{css}'>{csv}</pre>"));
94 Ok(())
95 })
96 }
97
98 pub fn clear(&self) -> ApiFuture<()> {
99 ApiFuture::default()
100 }
101
102 pub fn resize(&self) -> ApiFuture<()> {
103 ApiFuture::default()
104 }
105
106 pub fn restyle(&self) {}
107
108 pub fn save(&self) -> ApiResult<JsValue> {
109 Ok(JsValue::null())
110 }
111
112 pub fn restore(&self, _config: Option<JsValue>) -> ApiResult<()> {
113 Ok(())
114 }
115
116 pub fn delete(&self) -> ApiFuture<()> {
117 ApiFuture::default()
118 }
119
120 #[wasm_bindgen(js_name = "connectedCallback")]
121 pub fn connected_callback(&self) {}
122}