feat(handlers/templates): Add "New Thread" handler and template
This commit is contained in:
parent
fb7df7a346
commit
103a59485f
3 changed files with 62 additions and 1 deletions
|
@ -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,
|
||||
|
|
|
@ -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
52
templates/new-thread.html
Normal 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>
|
Loading…
Reference in a new issue