workflow_html/
interface.rs1use crate::WebElement;
2use crate::render::{Render, Renderables};
3pub use crate::utils::{Element, ElementResult, document};
4use std::collections::BTreeMap;
5pub type Hooks = BTreeMap<String, Element>;
7#[derive(Clone)]
13pub struct Html {
14 pub roots: Vec<Element>,
16 pub hooks: Hooks,
18 pub renderables: Renderables,
20}
21
22impl Html {
23 pub fn new(roots: Vec<Element>, hooks: Hooks, renderables: Renderables) -> ElementResult<Html> {
26 let html = Html {
27 roots,
28 hooks,
29 renderables,
30 };
31 Ok(html)
32 }
33
34 pub fn roots(&self) -> &Vec<Element> {
36 &self.roots
37 }
38
39 pub fn hooks(&self) -> &Hooks {
41 &self.hooks
42 }
43
44 pub fn inject_into(&self, element: &Element) -> ElementResult<()> {
46 for root in self.roots.iter() {
47 element.append_child(root)?;
48 }
49 Ok(())
50 }
51 pub fn remove_event_listeners(&self) -> ElementResult<()> {
54 for root in &self.renderables {
55 root.remove_event_listeners()?;
56 }
57 Ok(())
58 }
59}
60
61impl Render for Html {
62 fn render_node(
63 mut self,
64 parent: &mut WebElement,
65 map: &mut Hooks,
66 renderables: &mut Renderables,
67 ) -> ElementResult<()> {
68 renderables.append(self.renderables.as_mut());
69 let mut hooks = self.hooks().clone();
70 map.append(&mut hooks);
71 self.inject_into(parent)?;
72 Ok(())
73 }
74
75 fn render(&self, _w: &mut Vec<String>) -> ElementResult<()> {
76 Ok(())
77 }
78
79 fn remove_event_listeners(&self) -> ElementResult<()> {
80 for root in &self.renderables {
81 root.remove_event_listeners()?;
82 }
83 Ok(())
84 }
85}
86
87