diff --git a/src/routes/comments.rs b/src/routes/comments.rs index 1ccfc9d..73c4085 100644 --- a/src/routes/comments.rs +++ b/src/routes/comments.rs @@ -20,11 +20,12 @@ use plume_models::{ users::User }; -#[derive(FromForm, Debug, Validate)] +#[derive(FromForm, Debug, Validate, Serialize)] struct NewCommentForm { pub responding_to: Option, #[validate(length(min = "1", message = "Your comment can't be empty"))] - pub content: String + pub content: String, + pub warning: String, } #[post("/~///comment", data = "")] @@ -42,8 +43,8 @@ fn create(blog_name: String, slug: String, data: LenientForm, us post_id: post.id, author_id: user.id, ap_url: None, - sensitive: false, - spoiler_text: String::new() + sensitive: form.warning.len() > 0, + spoiler_text: form.warning.clone() }).update_ap_url(&*conn); let new_comment = comm.create_activity(&*conn); @@ -77,7 +78,8 @@ fn create(blog_name: String, slug: String, data: LenientForm, us "date": &post.creation_date.timestamp(), "previous": form.responding_to.and_then(|r| Comment::get(&*conn, r)).map(|r| r.to_json(&*conn, &vec![])), "user_fqn": user.get_fqn(&*conn), - "errors": errors + "comment_form": form, + "comment_errors": errors, }))) }) } diff --git a/src/routes/posts.rs b/src/routes/posts.rs index 02413fa..ad8c4de 100644 --- a/src/routes/posts.rs +++ b/src/routes/posts.rs @@ -44,6 +44,8 @@ fn details_response(blog: String, slug: String, conn: DbConn, user: Option let comments = Comment::list_by_post(&*conn, post.id); let comms = comments.clone(); + let previous = query.and_then(|q| q.responding_to.map(|r| Comment::get(&*conn, r) + .expect("posts::details_reponse: Error retrieving previous comment").to_json(&*conn, &vec![]))); Template::render("posts/details", json!({ "author": post.get_authors(&*conn)[0].to_json(&*conn), "article": post.to_json(&*conn), @@ -59,11 +61,15 @@ fn details_response(blog: String, slug: String, conn: DbConn, user: Option "has_reshared": user.clone().map(|u| u.has_reshared(&*conn, &post)).unwrap_or(false), "account": &user.clone().map(|u| u.to_json(&*conn)), "date": &post.creation_date.timestamp(), - "previous": query.and_then(|q| q.responding_to.map(|r| Comment::get(&*conn, r) - .expect("posts::details_reponse: Error retrieving previous comment").to_json(&*conn, &vec![]))), + "previous": previous, + "default": { + "warning": previous.map(|p| p["spoiler_text"].clone()) + }, "user_fqn": user.clone().map(|u| u.get_fqn(&*conn)).unwrap_or(String::new()), "is_author": user.clone().map(|u| post.get_authors(&*conn).into_iter().any(|a| u.id == a.id)).unwrap_or(false), - "is_following": user.map(|u| u.is_following(&*conn, post.get_authors(&*conn)[0].id)).unwrap_or(false) + "is_following": user.map(|u| u.is_following(&*conn, post.get_authors(&*conn)[0].id)).unwrap_or(false), + "comment_form": null, + "comment_errors": null, })) } else { Template::render("errors/403", json!({ diff --git a/static/css/main.css b/static/css/main.css index fa3563c..c6bd39e 100644 --- a/static/css/main.css +++ b/static/css/main.css @@ -389,6 +389,10 @@ main .article-meta .tags li a { font-weight: 600; } +summary { + cursor: pointer; +} + /* New comment */ main .article-meta .comments form input[type="submit"] diff --git a/templates/macros.html.tera b/templates/macros.html.tera index f7065a7..b00b62e 100644 --- a/templates/macros.html.tera +++ b/templates/macros.html.tera @@ -60,7 +60,16 @@ {{ comm.author.name }} @{{ comm.author.fqn }} -
{{ comm.content | safe }}
+
+ {% if comm.sensitive %} +
+ {{ comm.spoiler_text }} + {% endif %} + {{ comm.content | safe }} + {% if comm.sensitive %} +
+ {% endif %} +
{{ "Respond" | _ }} {% for res in comm.responses %} {{ self::comment(comm=res) }} diff --git a/templates/posts/details.html.tera b/templates/posts/details.html.tera index b2e231f..0ab060a 100644 --- a/templates/posts/details.html.tera +++ b/templates/posts/details.html.tera @@ -119,6 +119,15 @@ {% if account %}
+ {{ macros::input( + name="warning", + label="Content warning", + optional=true, + form=comment_form, + errors=comment_errors, + default=default) + }} + {% if previous %}