diff options
author | Jovansonlee Cesar <ivanceras@gmail.com> | 2020-02-29 01:25:05 +0800 |
---|---|---|
committer | Jovansonlee Cesar <ivanceras@gmail.com> | 2020-02-29 01:25:05 +0800 |
commit | ec2beec5c585b776fe0f31b33fc0493e52c53061 (patch) | |
tree | 49eebb8a22be53a12ec9bcf8e9e0f9113ff871b8 /svgbob | |
parent | 0fb7a8d352b3e1facd6b9092bec0449f1f3e5d4a (diff) |
Make functions that return Node<()> into a return generics Node<MSG> to allow usage of Node<MSG> generics in sauron apps
Diffstat (limited to 'svgbob')
-rw-r--r-- | svgbob/Cargo.toml | 2 | ||||
-rw-r--r-- | svgbob/src/buffer/cell_buffer.rs | 34 | ||||
-rw-r--r-- | svgbob/src/buffer/fragment_buffer/fragment.rs | 4 | ||||
-rw-r--r-- | svgbob/src/buffer/fragment_buffer/fragment/arc.rs | 4 | ||||
-rw-r--r-- | svgbob/src/buffer/fragment_buffer/fragment/circle.rs | 4 | ||||
-rw-r--r-- | svgbob/src/buffer/fragment_buffer/fragment/line.rs | 4 | ||||
-rw-r--r-- | svgbob/src/buffer/fragment_buffer/fragment/marker_line.rs | 6 | ||||
-rw-r--r-- | svgbob/src/buffer/fragment_buffer/fragment/polygon.rs | 4 | ||||
-rw-r--r-- | svgbob/src/buffer/fragment_buffer/fragment/rect.rs | 4 | ||||
-rw-r--r-- | svgbob/src/buffer/fragment_buffer/fragment/text.rs | 11 | ||||
-rw-r--r-- | svgbob/src/buffer/fragment_buffer/fragment_tree.rs | 6 | ||||
-rw-r--r-- | svgbob/src/lib.rs | 6 |
12 files changed, 49 insertions, 40 deletions
diff --git a/svgbob/Cargo.toml b/svgbob/Cargo.toml index 287b509..b110a82 100644 --- a/svgbob/Cargo.toml +++ b/svgbob/Cargo.toml @@ -13,7 +13,7 @@ license = "Apache-2.0" nalgebra = "0.18.0" ncollide2d = "0.19.1" lazy_static = "1.3.0" -sauron = { version = "0.21.0", default-features = false} +sauron = { version = "0.22.0", default-features = false, features = ["with-dom"]} unicode-width = "0.1.5" itertools = "0.8.0" pom = { version = "3.1.0" } diff --git a/svgbob/src/buffer/cell_buffer.rs b/svgbob/src/buffer/cell_buffer.rs index c2f9239..d4cda46 100644 --- a/svgbob/src/buffer/cell_buffer.rs +++ b/svgbob/src/buffer/cell_buffer.rs @@ -131,7 +131,7 @@ impl CellBuffer { } /// get the svg node of this cell buffer, using the default settings for the sizes - pub fn get_node(&self) -> Node<()> { + pub fn get_node<MSG>(&self) -> Node<MSG> { let (node, _w, _h) = self.get_node_with_size(&Settings::default()); node } @@ -146,7 +146,7 @@ impl CellBuffer { } /// get all nodes of this cell buffer - pub fn get_node_with_size(&self, settings: &Settings) -> (Node<()>, f32, f32) { + pub fn get_node_with_size<MSG>(&self, settings: &Settings) -> (Node<MSG>, f32, f32) { let (w, h) = self.get_size(&settings); // vec_fragments are the fragment result of successful endorsement // @@ -170,14 +170,18 @@ impl CellBuffer { .flat_map(|contact| contact.0) .collect(); - let group_nodes: Vec<Node<()>> = vec_groups + let group_nodes: Vec<Node<MSG>> = vec_groups .into_iter() .map(|contact| contact.0) .map(move |contacts| { let mut group_members = contacts .iter() - .map(move |gfrag| gfrag.scale(settings.scale).into()) - .collect::<Vec<_>>(); + .map(move |gfrag| { + let scaled = gfrag.scale(settings.scale); + let node: Node<MSG> = scaled.into(); + node + }) + .collect::<Vec<Node<MSG>>>(); g(vec![], group_members) }) .collect(); @@ -199,7 +203,7 @@ impl CellBuffer { classes.join("\n") } - fn get_style(settings: &Settings, legend_css: String) -> Node<()> { + fn get_style<MSG>(settings: &Settings, legend_css: String) -> Node<MSG> { html::tags::style( vec![], vec![text(format!( @@ -287,18 +291,18 @@ impl CellBuffer { /// convert the fragments into svg nodes using the supplied settings, with size for the /// dimension - pub(crate) fn fragments_to_node( + pub(crate) fn fragments_to_node<MSG>( fragments: Vec<Fragment>, legend_css: String, settings: &Settings, w: f32, h: f32, - ) -> Node<()> { + ) -> Node<MSG> { let fragments_scaled: Vec<Fragment> = fragments .into_iter() .map(|frag| frag.scale(settings.scale)) .collect(); - let fragment_nodes: Vec<Node<()>> = FragmentTree::fragments_to_node(fragments_scaled); + let fragment_nodes: Vec<Node<MSG>> = FragmentTree::fragments_to_node(fragments_scaled); let svg_node = svg( vec![xmlns("http://www.w3.org/2000/svg"), width(w), height(h)], @@ -315,7 +319,7 @@ impl CellBuffer { svg_node } - fn get_defs() -> Node<()> { + fn get_defs<MSG>() -> Node<MSG> { defs( vec![], vec![ @@ -328,7 +332,7 @@ impl CellBuffer { ) } - fn arrow_marker() -> Node<()> { + fn arrow_marker<MSG>() -> Node<MSG> { marker( vec![ id("arrow"), @@ -343,7 +347,7 @@ impl CellBuffer { ) } - fn diamond_marker() -> Node<()> { + fn diamond_marker<MSG>() -> Node<MSG> { marker( vec![ id("diamond"), @@ -358,7 +362,7 @@ impl CellBuffer { ) } - fn open_circle_marker() -> Node<()> { + fn open_circle_marker<MSG>() -> Node<MSG> { marker( vec![ id("open_circle"), @@ -376,7 +380,7 @@ impl CellBuffer { ) } - fn circle_marker() -> Node<()> { + fn circle_marker<MSG>() -> Node<MSG> { marker( vec![ id("circle"), @@ -394,7 +398,7 @@ impl CellBuffer { ) } - fn big_open_circle_marker() -> Node<()> { + fn big_open_circle_marker<MSG>() -> Node<MSG> { marker( vec![ id("big_open_circle"), diff --git a/svgbob/src/buffer/fragment_buffer/fragment.rs b/svgbob/src/buffer/fragment_buffer/fragment.rs index a968e1e..3329315 100644 --- a/svgbob/src/buffer/fragment_buffer/fragment.rs +++ b/svgbob/src/buffer/fragment_buffer/fragment.rs @@ -450,8 +450,8 @@ impl Bounds for Fragment { } } -impl Into<Node<()>> for Fragment { - fn into(self) -> Node<()> { +impl<MSG> Into<Node<MSG>> for Fragment { + fn into(self) -> Node<MSG> { match self { Fragment::Line(line) => line.into(), Fragment::MarkerLine(marker_line) => marker_line.into(), diff --git a/svgbob/src/buffer/fragment_buffer/fragment/arc.rs b/svgbob/src/buffer/fragment_buffer/fragment/arc.rs index d37a1c5..12a477e 100644 --- a/svgbob/src/buffer/fragment_buffer/fragment/arc.rs +++ b/svgbob/src/buffer/fragment_buffer/fragment/arc.rs @@ -156,8 +156,8 @@ impl fmt::Display for Arc { } } -impl Into<Node<()>> for Arc { - fn into(self) -> Node<()> { +impl<MSG> Into<Node<MSG>> for Arc { + fn into(self) -> Node<MSG> { let dv = format!( "M {},{} A {},{} {},{},{} {},{}", self.start.x, diff --git a/svgbob/src/buffer/fragment_buffer/fragment/circle.rs b/svgbob/src/buffer/fragment_buffer/fragment/circle.rs index 585de64..03a7e65 100644 --- a/svgbob/src/buffer/fragment_buffer/fragment/circle.rs +++ b/svgbob/src/buffer/fragment_buffer/fragment/circle.rs @@ -61,8 +61,8 @@ impl fmt::Display for Circle { } } -impl Into<Node<()>> for Circle { - fn into(self) -> Node<()> { +impl<MSG> Into<Node<MSG>> for Circle { + fn into(self) -> Node<MSG> { circle( vec![ cx(self.center.x), diff --git a/svgbob/src/buffer/fragment_buffer/fragment/line.rs b/svgbob/src/buffer/fragment_buffer/fragment/line.rs index a69b5d4..f51eb27 100644 --- a/svgbob/src/buffer/fragment_buffer/fragment/line.rs +++ b/svgbob/src/buffer/fragment_buffer/fragment/line.rs @@ -558,8 +558,8 @@ impl fmt::Display for Line { } } -impl Into<Node<()>> for Line { - fn into(self) -> Node<()> { +impl<MSG> Into<Node<MSG>> for Line { + fn into(self) -> Node<MSG> { svg::tags::line( vec![ x1(self.start.x), diff --git a/svgbob/src/buffer/fragment_buffer/fragment/marker_line.rs b/svgbob/src/buffer/fragment_buffer/fragment/marker_line.rs index 7e57490..423612f 100644 --- a/svgbob/src/buffer/fragment_buffer/fragment/marker_line.rs +++ b/svgbob/src/buffer/fragment_buffer/fragment/marker_line.rs @@ -175,9 +175,9 @@ impl fmt::Display for MarkerLine { } } -impl Into<Node<()>> for MarkerLine { - fn into(self) -> Node<()> { - let mut node: Node<()> = self.line.into(); +impl<MSG> Into<Node<MSG>> for MarkerLine { + fn into(self) -> Node<MSG> { + let mut node: Node<MSG> = self.line.into(); let mut classes = vec![]; if let Some(start_marker) = self.start_marker { classes.push(class(format!("start_marked_{}", start_marker))); diff --git a/svgbob/src/buffer/fragment_buffer/fragment/polygon.rs b/svgbob/src/buffer/fragment_buffer/fragment/polygon.rs index b1a9239..ce82ae4 100644 --- a/svgbob/src/buffer/fragment_buffer/fragment/polygon.rs +++ b/svgbob/src/buffer/fragment_buffer/fragment/polygon.rs @@ -159,8 +159,8 @@ impl fmt::Display for Polygon { } } -impl Into<Node<()>> for Polygon { - fn into(self) -> Node<()> { +impl<MSG> Into<Node<MSG>> for Polygon { + fn into(self) -> Node<MSG> { polygon( vec![ points( diff --git a/svgbob/src/buffer/fragment_buffer/fragment/rect.rs b/svgbob/src/buffer/fragment_buffer/fragment/rect.rs index d716dc7..97a15e0 100644 --- a/svgbob/src/buffer/fragment_buffer/fragment/rect.rs +++ b/svgbob/src/buffer/fragment_buffer/fragment/rect.rs @@ -107,8 +107,8 @@ impl fmt::Display for Rect { } } -impl Into<Node<()>> for Rect { - fn into(self) -> Node<()> { +impl<MSG> Into<Node<MSG>> for Rect { + fn into(self) -> Node<MSG> { rect( vec![ x(self.start.x), diff --git a/svgbob/src/buffer/fragment_buffer/fragment/text.rs b/svgbob/src/buffer/fragment_buffer/fragment/text.rs index b5ce261..039e6d7 100644 --- a/svgbob/src/buffer/fragment_buffer/fragment/text.rs +++ b/svgbob/src/buffer/fragment_buffer/fragment/text.rs @@ -95,8 +95,8 @@ impl Into<Text> for CellText { } } -impl Into<Node<()>> for CellText { - fn into(self) -> Node<()> { +impl<MSG> Into<Node<MSG>> for CellText { + fn into(self) -> Node<MSG> { let text: Text = self.into(); text.into() } @@ -162,11 +162,14 @@ impl fmt::Display for Text { } } -impl Into<Node<()>> for Text { - fn into(self) -> Node<()> { +impl<MSG> Into<Node<MSG>> for Text { + fn into(self) -> Node<MSG> { svg::tags::text( vec![x(self.start.x), y(self.start.y)], + #[cfg(not(feature = "with-dom"))] vec![text(escape_html_text(&self.text))], + #[cfg(feature = "with-dom")] + vec![text(&self.text)], ) } } diff --git a/svgbob/src/buffer/fragment_buffer/fragment_tree.rs b/svgbob/src/buffer/fragment_buffer/fragment_tree.rs index 863dfad..e3f476b 100644 --- a/svgbob/src/buffer/fragment_buffer/fragment_tree.rs +++ b/svgbob/src/buffer/fragment_buffer/fragment_tree.rs @@ -99,9 +99,9 @@ impl FragmentTree { } /// convert back into fragments - fn into_nodes(self) -> Vec<Node<()>> { + fn into_nodes<MSG>(self) -> Vec<Node<MSG>> { let mut nodes = vec![]; - let mut fragment_node: Node<()> = self.fragment.into(); + let mut fragment_node: Node<MSG> = self.fragment.into(); fragment_node = fragment_node.add_attributes(vec![classes(self.css_tag)]); nodes.push(fragment_node); for child in self.enclosing { @@ -112,7 +112,7 @@ impl FragmentTree { /// convert fragments to node, where cell_text and text may become /// css class of the contain fragment - pub(crate) fn fragments_to_node(fragments: Vec<Fragment>) -> Vec<Node<()>> { + pub(crate) fn fragments_to_node<MSG>(fragments: Vec<Fragment>) -> Vec<Node<MSG>> { let fragment_trees: Vec<FragmentTree> = Self::enclose_fragments(fragments); fragment_trees .into_iter() diff --git a/svgbob/src/lib.rs b/svgbob/src/lib.rs index 1d9e836..dff232c 100644 --- a/svgbob/src/lib.rs +++ b/svgbob/src/lib.rs @@ -13,16 +13,18 @@ pub use buffer::{ Signal, }; pub use point::Point; +use sauron::Node; /// convert svgbob ascii art to svg pub fn to_svg(ascii: &str) -> String { let cb = CellBuffer::from(ascii); - cb.get_node().to_string() + let node: Node<()> = cb.get_node(); + node.to_string() } /// convert ascii art into an svg pub fn to_svg_with_settings(ascii: &str, settings: &Settings) -> String { let cb = CellBuffer::from(ascii); - let (node, _w, _h) = cb.get_node_with_size(settings); + let (node, _w, _h): (Node<()>, f32, f32) = cb.get_node_with_size(settings); node.to_string() } |