workflow_html/
interface.rs1use 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#[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