workflow_html/
interface.rs

1use crate::render::{Render, Renderables};
2pub use crate::utils::{document, Element, ElementResult};
3use crate::WebElement;
4use std::collections::BTreeMap;
5pub type Hooks = BTreeMap<String, Element>;
6//use workflow_log::log_trace;
7
8#[derive(Clone)]
9pub struct Html {
10    pub roots: Vec<Element>,
11    pub hooks: Hooks,
12    pub renderables: Renderables,
13}
14
15impl Html {
16    pub fn new(roots: Vec<Element>, hooks: Hooks, renderables: Renderables) -> ElementResult<Html> {
17        let html = Html {
18            roots,
19            hooks,
20            renderables,
21        };
22        Ok(html)
23    }
24
25    pub fn roots(&self) -> &Vec<Element> {
26        &self.roots
27    }
28
29    pub fn hooks(&self) -> &Hooks {
30        &self.hooks
31    }
32
33    pub fn inject_into(&self, element: &Element) -> ElementResult<()> {
34        for root in self.roots.iter() {
35            element.append_child(root)?;
36        }
37        Ok(())
38    }
39    pub fn remove_event_listeners(&self) -> ElementResult<()> {
40        for root in &self.renderables {
41            root.remove_event_listeners()?;
42        }
43        Ok(())
44    }
45}
46
47impl Render for Html {
48    fn render_node(
49        mut self,
50        parent: &mut WebElement,
51        map: &mut Hooks,
52        renderables: &mut Renderables,
53    ) -> ElementResult<()> {
54        renderables.append(self.renderables.as_mut());
55        let mut hooks = self.hooks().clone();
56        map.append(&mut hooks);
57        self.inject_into(parent)?;
58        Ok(())
59    }
60
61    fn render(&self, _w: &mut Vec<String>) -> ElementResult<()> {
62        Ok(())
63    }
64
65    fn remove_event_listeners(&self) -> ElementResult<()> {
66        for root in &self.renderables {
67            root.remove_event_listeners()?;
68        }
69        Ok(())
70    }
71}
72
73/*
74impl Drop for Html{
75    fn drop(&mut self) {
76        log_trace!("HTML Drop: {:?}", self.roots[0].get_attribute("class"));
77    }
78}
79*/