diff options
author | Vincent Ambo <tazjin@gmail.com> | 2018-04-15T19·13+0200 |
---|---|---|
committer | Vincent Ambo <tazjin@gmail.com> | 2018-04-15T19·13+0200 |
commit | ec712cc4c0e12329f51d10d9bd626d1859a011b8 (patch) | |
tree | e5b51d31c4bfb66eaca5c29e9d796b1a7599dee5 /src/render.rs | |
parent | 4c0e6552e80e70de55fa0ab4310dfec0078b18b9 (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.rs | 49 |
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)?) } } |