summaryrefslogtreecommitdiffstats
path: root/vendor/handlebars/examples/render
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--vendor/handlebars/examples/render.rs135
-rw-r--r--vendor/handlebars/examples/render/template.hbs18
-rw-r--r--vendor/handlebars/examples/render_cli/simple.hbs1
-rw-r--r--vendor/handlebars/examples/render_file.rs140
-rw-r--r--vendor/handlebars/examples/render_file/template.hbs19
5 files changed, 313 insertions, 0 deletions
diff --git a/vendor/handlebars/examples/render.rs b/vendor/handlebars/examples/render.rs
new file mode 100644
index 000000000..112ec504d
--- /dev/null
+++ b/vendor/handlebars/examples/render.rs
@@ -0,0 +1,135 @@
+extern crate env_logger;
+extern crate handlebars;
+
+#[macro_use]
+extern crate serde_derive;
+extern crate serde_json;
+
+use serde_json::value::{Map, Value as Json};
+use std::error::Error;
+
+use handlebars::{
+ to_json, Context, Handlebars, Helper, JsonRender, Output, RenderContext, RenderError,
+};
+
+// define a custom helper
+fn format_helper(
+ h: &Helper,
+ _: &Handlebars,
+ _: &Context,
+ _: &mut RenderContext,
+ out: &mut dyn Output,
+) -> Result<(), RenderError> {
+ // get parameter from helper or throw an error
+ let param = h
+ .param(0)
+ .ok_or(RenderError::new("Param 0 is required for format helper."))?;
+ let rendered = format!("{} pts", param.value().render());
+ out.write(rendered.as_ref())?;
+ Ok(())
+}
+
+// another custom helper
+fn rank_helper(
+ h: &Helper,
+ _: &Handlebars,
+ _: &Context,
+ _: &mut RenderContext,
+ out: &mut dyn Output,
+) -> Result<(), RenderError> {
+ let rank = h
+ .param(0)
+ .and_then(|v| v.value().as_u64())
+ .ok_or(RenderError::new(
+ "Param 0 with u64 type is required for rank helper.",
+ ))? as usize;
+ let total = h
+ .param(1)
+ .as_ref()
+ .and_then(|v| v.value().as_array())
+ .map(|arr| arr.len())
+ .ok_or(RenderError::new(
+ "Param 1 with array type is required for rank helper",
+ ))?;
+ if rank == 0 {
+ out.write("champion")?;
+ } else if rank >= total - 2 {
+ out.write("relegation")?;
+ } else if rank <= 2 {
+ out.write("acl")?;
+ }
+ Ok(())
+}
+
+static TYPES: &'static str = "serde_json";
+
+// define some data
+#[derive(Serialize)]
+pub struct Team {
+ name: String,
+ pts: u16,
+}
+
+// produce some data
+pub fn make_data() -> Map<String, Json> {
+ let mut data = Map::new();
+
+ data.insert("year".to_string(), to_json("2015"));
+
+ let teams = vec![
+ Team {
+ name: "Jiangsu Suning".to_string(),
+ pts: 43u16,
+ },
+ Team {
+ name: "Shanghai SIPG".to_string(),
+ pts: 39u16,
+ },
+ Team {
+ name: "Hebei CFFC".to_string(),
+ pts: 27u16,
+ },
+ Team {
+ name: "Guangzhou Evergrand".to_string(),
+ pts: 22u16,
+ },
+ Team {
+ name: "Shandong Luneng".to_string(),
+ pts: 12u16,
+ },
+ Team {
+ name: "Beijing Guoan".to_string(),
+ pts: 7u16,
+ },
+ Team {
+ name: "Hangzhou Greentown".to_string(),
+ pts: 7u16,
+ },
+ Team {
+ name: "Shanghai Shenhua".to_string(),
+ pts: 4u16,
+ },
+ ];
+
+ data.insert("teams".to_string(), to_json(&teams));
+ data.insert("engine".to_string(), to_json(TYPES));
+ data
+}
+
+fn main() -> Result<(), Box<dyn Error>> {
+ env_logger::init();
+ // create the handlebars registry
+ let mut handlebars = Handlebars::new();
+
+ // register template from a file and assign a name to it
+ handlebars.register_template_file("table", "./examples/render/template.hbs")?;
+
+ // register some custom helpers
+ handlebars.register_helper("format", Box::new(format_helper));
+ handlebars.register_helper("ranking_label", Box::new(rank_helper));
+
+ // make data and render it
+ let data = make_data();
+ println!("{}", handlebars.render("table", &data)?);
+ Ok(())
+}
diff --git a/vendor/handlebars/examples/render/template.hbs b/vendor/handlebars/examples/render/template.hbs
new file mode 100644
index 000000000..2a62d014f
--- /dev/null
+++ b/vendor/handlebars/examples/render/template.hbs
@@ -0,0 +1,18 @@
+<html>
+ <head>
+ <title>中超联赛 {{year}}</title>
+ </head>
+ <body>
+ <h1>CSL {{year}}</h1>
+ <ul>
+ {{#each teams as |t|}}
+ <li class="{{ranking_label @index ../teams}}">
+ {{~log @index~}}
+ <b>{{t.name}}</b>: {{format t.pts ~}}
+ </li>
+ {{/each}}
+ </ul>
+
+ <p>Rendered by Handlebars from {{engine}} data.</p>
+ </body>
+</html>
diff --git a/vendor/handlebars/examples/render_cli/simple.hbs b/vendor/handlebars/examples/render_cli/simple.hbs
new file mode 100644
index 000000000..6b9e01247
--- /dev/null
+++ b/vendor/handlebars/examples/render_cli/simple.hbs
@@ -0,0 +1 @@
+Data: {{ . }}
diff --git a/vendor/handlebars/examples/render_file.rs b/vendor/handlebars/examples/render_file.rs
new file mode 100644
index 000000000..7b7599672
--- /dev/null
+++ b/vendor/handlebars/examples/render_file.rs
@@ -0,0 +1,140 @@
+#![allow(unused_imports, dead_code)]
+extern crate env_logger;
+extern crate handlebars;
+extern crate serde;
+#[macro_use]
+extern crate serde_derive;
+extern crate serde_json;
+use serde::Serialize;
+use serde_json::value::{self, Map, Value as Json};
+
+use std::error::Error;
+use std::fs::File;
+use std::io::{Read, Write};
+
+use handlebars::{
+ to_json, Context, Handlebars, Helper, JsonRender, Output, RenderContext, RenderError,
+};
+
+// define a custom helper
+fn format_helper(
+ h: &Helper,
+ _: &Handlebars,
+ _: &Context,
+ _: &mut RenderContext,
+ out: &mut dyn Output,
+) -> Result<(), RenderError> {
+ let param = h
+ .param(0)
+ .ok_or(RenderError::new("Param 0 is required for format helper."))?;
+ let rendered = format!("{} pts", param.value().render());
+ out.write(rendered.as_ref())?;
+ Ok(())
+}
+
+// another custom helper
+fn rank_helper(
+ h: &Helper,
+ _: &Handlebars,
+ _: &Context,
+ _: &mut RenderContext,
+ out: &mut dyn Output,
+) -> Result<(), RenderError> {
+ let rank = h
+ .param(0)
+ .and_then(|ref v| v.value().as_u64())
+ .ok_or(RenderError::new(
+ "Param 0 with u64 type is required for rank helper.",
+ ))? as usize;
+ let total = h
+ .param(1)
+ .as_ref()
+ .and_then(|v| v.value().as_array())
+ .map(|arr| arr.len())
+ .ok_or(RenderError::new(
+ "Param 1 with array type is required for rank helper",
+ ))?;
+ if rank == 0 {
+ out.write("champion")?;
+ } else if rank >= total - 2 {
+ out.write("relegation")?;
+ } else if rank <= 2 {
+ out.write("acl")?;
+ }
+ Ok(())
+}
+
+static TYPES: &'static str = "serde_json";
+
+// define some data
+#[derive(Serialize)]
+pub struct Team {
+ name: String,
+ pts: u16,
+}
+
+// produce some data
+pub fn make_data() -> Map<String, Json> {
+ let mut data = Map::new();
+
+ data.insert("year".to_string(), to_json("2015"));
+
+ let teams = vec![
+ Team {
+ name: "Jiangsu Suning".to_string(),
+ pts: 43u16,
+ },
+ Team {
+ name: "Shanghai SIPG".to_string(),
+ pts: 39u16,
+ },
+ Team {
+ name: "Hebei CFFC".to_string(),
+ pts: 27u16,
+ },
+ Team {
+ name: "Guangzhou Evergrand".to_string(),
+ pts: 22u16,
+ },
+ Team {
+ name: "Shandong Luneng".to_string(),
+ pts: 12u16,
+ },
+ Team {
+ name: "Beijing Guoan".to_string(),
+ pts: 7u16,
+ },
+ Team {
+ name: "Hangzhou Greentown".to_string(),
+ pts: 7u16,
+ },
+ Team {
+ name: "Shanghai Shenhua".to_string(),
+ pts: 4u16,
+ },
+ ];
+
+ data.insert("teams".to_string(), to_json(&teams));
+ data.insert("engine".to_string(), to_json(TYPES));
+ data
+}
+
+fn main() -> Result<(), Box<dyn Error>> {
+ env_logger::init();
+ let mut handlebars = Handlebars::new();
+
+ handlebars.register_helper("format", Box::new(format_helper));
+ handlebars.register_helper("ranking_label", Box::new(rank_helper));
+ // handlebars.register_helper("format", Box::new(FORMAT_HELPER));
+
+ let data = make_data();
+
+ handlebars
+ .register_template_file("template", "./examples/render_file/template.hbs")
+ .unwrap();
+
+ let mut output_file = File::create("target/table.html")?;
+ handlebars.render_to_write("template", &data, &mut output_file)?;
+ println!("target/table.html generated");
+ Ok(())
+}
diff --git a/vendor/handlebars/examples/render_file/template.hbs b/vendor/handlebars/examples/render_file/template.hbs
new file mode 100644
index 000000000..84a0d6bc0
--- /dev/null
+++ b/vendor/handlebars/examples/render_file/template.hbs
@@ -0,0 +1,19 @@
+<html>
+ <head>
+ <title>中超联赛 {{year}}</title>
+ </head>
+ <body>
+ <h1>CSL {{year}}</h1>
+ <ul>
+ {{#each teams as |t| }}
+ <li class="{{ranking_label @index ../teams}}">
+ {{~log @index~}}
+ {{!-- I'm comment --}}
+ <b>{{t.name}}</b>: {{format t.pts ~}}
+ </li>
+ {{/each}}
+ </ul>
+
+ <p>Rendered by Handlebars from {{engine}} data.</p>
+ </body>
+</html>