feat(handlers/templates): Add "New Thread" handler and template

This commit is contained in:
Vincent Ambo 2018-04-09 23:37:41 +02:00
parent fb7df7a346
commit 103a59485f
3 changed files with 62 additions and 1 deletions

View file

@ -81,6 +81,15 @@ pub fn forum_thread(state: State<AppState>, thread_id: Path<i32>) -> ConverseRes
.responder()
}
/// This handler presents the user with the "New Thread" form.
pub fn new_thread(state: State<AppState>) -> Result<HttpResponse> {
let ctx = tera::Context::new();
let body = state.tera.render("new-thread.html", &ctx)?;
Ok(HttpResponse::Ok()
.content_type("text/html")
.body(body))
}
#[derive(Deserialize)]
pub struct NewThreadForm {
pub title: String,

View file

@ -109,10 +109,10 @@ fn main() {
App::with_state(state)
.middleware(Logger::default())
// TODO: Configure session backend with more secure settings.
.middleware(sessions)
.middleware(RequireLogin)
.resource("/", |r| r.method(Method::GET).with(forum_index))
.resource("/thread/new", |r| r.method(Method::GET).with(new_thread))
.resource("/thread/submit", |r| r.method(Method::POST).with3(submit_thread))
.resource("/thread/reply", |r| r.method(Method::POST).with3(reply_thread))
.resource("/thread/{id}", |r| r.method(Method::GET).with2(forum_thread))

52
templates/new-thread.html Normal file
View file

@ -0,0 +1,52 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<title>Converse Index</title>
</head>
<body>
<header>
<nav class="navbar navbar-light bg-light justify-content-between mb-3">
<a class="navbar-brand" href="/">
<h2>Converse: New Thread</h2>
</a>
<form class="form-inline">
<a class="btn btn-outline-secondary my-2" href="/">Back to index</a>
</form>
</nav>
</header>
<div class="container border rounded">
<div class="col-8">
<p class="mt-3">Make <i>your own thread</i> on these here forums!</p>
<p>Remember that you can use <strong>Markdown</strong> when
writing your posts.</p>
<form action="/thread/submit" method="post">
<div class="row">
<div class="col-8 input-group m-3">
<div class="input-group-prepend">
<span class="input-group-text" id="title-text">Title:</span>
</div>
<input type="text" class="form-control" id="title" name="title" aria-describedby="title-text">
</div>
</div>
<div class="row">
<div class="col-8 input-group m-3">
<div class="input-group-prepend">
<span class="input-group-text" id="body-text">Body:</span>
</div>
<textarea class="form-control" id="body" name="body" aria-label="thread body"></textarea>
</div>
</div>
<div class="row">
<div class="col-2 m-3">
<button class="btn btn-outline-primary" type="submit">Post!</button>
</div>
</div>
</form>
</div>
</div>
</body>
</html>