about summary refs log tree commit diff
path: root/src/render.rs
diff options
context:
space:
mode:
authorVincent Ambo <tazjin@gmail.com>2018-04-15T19·13+0200
committerVincent Ambo <tazjin@gmail.com>2018-04-15T19·13+0200
commitec712cc4c0e12329f51d10d9bd626d1859a011b8 (patch)
treee5b51d31c4bfb66eaca5c29e9d796b1a7599dee5 /src/render.rs
parent4c0e6552e80e70de55fa0ab4310dfec0078b18b9 (diff)
refactor(templates/render): Add generic post editing template
Adds a generic template that can be used for submitting, responding to
and editing posts.
Diffstat (limited to 'src/render.rs')
-rw-r--r--src/render.rs49
1 files changed, 43 insertions, 6 deletions
diff --git a/src/render.rs b/src/render.rs
index 9cc9efd4d10e..d95fb693478b 100644
--- a/src/render.rs
+++ b/src/render.rs
@@ -159,6 +159,41 @@ impl Handler<ThreadPage> for Renderer {
     }
 }
 
+/// The different types of editing modes supported by the editing
+/// template:
+#[derive(Debug, Serialize)]
+pub enum EditingMode {
+    NewThread,
+    PostReply,
+    EditPost,
+}
+
+impl Default for EditingMode {
+    fn default() -> EditingMode { EditingMode::NewThread }
+}
+
+/// This struct represents the context submitted to the template used
+/// for rendering the new thread, edit post and reply to thread forms.
+#[derive(Default, Serialize)]
+pub struct FormContext {
+    /// Which editing mode is to be used by the template?
+    pub mode: EditingMode,
+
+    /// Potential alerts to display to the user (e.g. input validation
+    /// results)
+    pub alerts: Vec<&'static str>,
+
+    /// Either the title to be used in the subject field or the title
+    /// of the thread the user is responding to.
+    pub title: Option<String>,
+
+    /// Body of the post being edited, if present.
+    pub post: Option<String>,
+
+    /// ID of the thread being replied to or the post being edited.
+    pub id: Option<i32>,
+}
+
 /// Message used to render new thread page.
 ///
 /// It can optionally contain a vector of warnings to display to the
@@ -167,7 +202,7 @@ impl Handler<ThreadPage> for Renderer {
 pub struct NewThreadPage {
     pub alerts: Vec<&'static str>,
     pub title: Option<String>,
-    pub body: Option<String>,
+    pub post: Option<String>,
 }
 
 impl Message for NewThreadPage {
@@ -178,11 +213,13 @@ impl Handler<NewThreadPage> for Renderer {
     type Result = Result<String>;
 
     fn handle(&mut self, msg: NewThreadPage, _: &mut Self::Context) -> Self::Result {
-        let mut ctx = Context::new();
-        ctx.add("alerts", &msg.alerts);
-        ctx.add("title", &msg.title.map(|s| escape_html(&s)));
-        ctx.add("body", &msg.body.map(|s| escape_html(&s)));
-        Ok(self.tera.render("new-thread.html", &ctx)?)
+        let ctx: FormContext = FormContext {
+            alerts: msg.alerts,
+            title: msg.title,
+            post: msg.post,
+            ..Default::default()
+        };
+        Ok(self.tera.render("post.html", &ctx)?)
     }
 }