@ -7,33 +7,36 @@
@use plume_models::users::User;
@use validator::ValidationErrors;
@use routes::comments::NewCommentForm;
@use routes::*;
@(ctx: BaseContext, article: Post, blog: Blog, comment_form: & NewCommentForm, comment_errors: ValidationErrors, tags: Vec< Tag > , comments: Vec< Comment > , previous_comment: Option< Comment > , n_likes: usize, n_reshares: usize, has_liked: bool, has_reshared: bool, is_following: bool, author: User)
@:base(ctx, & article.title.clone(), {
< meta property = "og:title" content = " article.title"/ >
< meta property = "og:title" content = " @ article.title"/ >
< meta property = "og:type" content = "article" / >
@if article.cover_id.is_some() {
< meta property = "og:image" content = "@Html(article.cover_url(ctx.0).unwrap_or_default())" / >
}
< meta property = "og:url" content = "@ Html(article.url(ctx.0) )"/ >
< meta property = "og:url" content = "@ uri!(posts::details: blog = blog.get_fqn(ctx.0), slug = &article.slug )"/ >
< meta property = "og:description" content = "@article.subtitle" / >
}, {
< a href = " /~/ @blog.get_fqn(ctx.0)"> @blog.title< / a >
< a href = " @uri!(blogs::details: name = blog.get_fqn(ctx.0) )"> @blog.title< / a >
}, {
< h1 class = "article" > @& article.title< / h1 >
< h2 class = "article" > @& article.subtitle< / h2 >
< div class = "article-info" >
< span class = "author" >
@Html(i18n!(ctx.1, "Written by {0}"; format!("< a href = \"/@/{}/\" > {}< / a > ", escape(& author.get_fqn(ctx.0)), escape(& author.name(ctx.0)))))
@Html(i18n!(ctx.1, "Written by {0}"; format!("< a href = \"{}\" > {}< / a > ",
uri!(user::details: name = & author.get_fqn(ctx.0)),
escape(& author.name(ctx.0)))))
< / span >
—
< span class = "date" > @article.creation_date.format("%B %e, %Y")< / span >
@if ctx.2.clone().map(|u| u.id == author.id).unwrap_or(false) {
—
< a href = "@ article.url(ctx.0)/edit "> @i18n!(ctx.1, "Edit")< / a >
< a href = "@ uri!(posts::edit: blog = blog.get_fqn(ctx.0), slug = &article.slug) "> @i18n!(ctx.1, "Edit")< / a >
—
< form class = "inline" method = "post" action = "@ article.url(ctx.0)/delete ">
< form class = "inline" method = "post" action = "@ uri!(posts::delete: blog_name = blog.get_fqn(ctx.0), slug = &article.slug) ">
< input onclick = "return confirm('Are you sure you?')" type = "submit" value = "@i18n!(ctx.1, " Delete this article " ) " >
< / form >
}
@ -53,39 +56,37 @@
< ul class = "tags" >
@for tag in tags {
@if !tag.is_hashtag {
< li > < a href = " /tag/@tag.tag "> @tag.tag< / a > < / li >
< li > < a href = " @uri!(tags::tag: name = &tag.tag) "> @tag.tag< / a > < / li >
}
}
< / ul >
< div class = "flex" >
@avatar(ctx.0, & author, Size::Medium, true, ctx.1)
< div class = "grow" >
< h2 > < a href = " /@@/ @author.get_fqn(ctx.0)"> @author.name(ctx.0)< / a > < / h2 >
< h2 > < a href = " @uri!(user::details: name = author.get_fqn(ctx.0) )"> @author.name(ctx.0)< / a > < / h2 >
< p > @Html(& author.summary)< / h2 >
< / div >
< a href = "/@@/@author.get_fqn(ctx.0)/follow" class = "button" >
@if is_following {
@i18n!(ctx.1, "Unfollow")
} else {
@i18n!(ctx.1, "Follow")
}
< / a >
@if !ctx.2.as_ref().map(|u| u.id == author.id).unwrap_or(false) {
< form action = "@uri!(user::follow: name = author.get_fqn(ctx.0))" method = "POST" >
< input type = "submit" class = "button" value = "@if is_following {@i18n!(ctx.1, " Unfollow " ) } else { @ i18n ! ( ctx . 1 , " Follow " ) } " >
< / form >
}
< / div >
@if ctx.2.is_some() {
< div class = "actions" >
< form class = "likes" action = "@ article.url(ctx.0)/like " method = "POST" >
< form class = "likes" action = "@ uri!(likes::create: blog = blog.get_fqn(ctx.0), slug = &article.slug) " method = "POST" >
< p aria-label = "@i18n!(ctx.1, " One like " , " { 0 } likes " , & n_likes ) " title = "@i18n!(ctx.1, " One like " , " { 0 } likes " , n_likes ) " >
@n_likes
< / p >
@if has_liked {
< button type = "submit" class = "action liked" > @icon!("heart") @i18n!(ctx.1, "I don't like this anymore")< / button >
} else {
} else {
< button type = "submit" class = "action" > @icon!("heart") @i18n!(ctx.1, "Add yours")< / button >
}
< / form >
< form class = "reshares" action = "@ article.url(ctx.0)/reshare " method = "POST" >
< form class = "reshares" action = "@ uri!(reshares::create: blog = blog.get_fqn(ctx.0), slug = &article.slug) " method = "POST" >
< p aria-label = "@i18n!(ctx.1, " One boost " , " { 0 } boost " , & n_reshares ) " title = "@i18n!(ctx.1, " One boost " , " { 0 } boosts " , n_reshares ) " >
@n_reshares
< / p >
@ -104,14 +105,14 @@
< p aria-label = "@i18n!(ctx.1, " One like " , " { 0 } likes " , & n_likes ) " title = "@i18n!(ctx.1, " One like " , " { 0 } likes " , n_likes ) " >
@n_likes
< / p >
< a href = "/login?m=Login%20to%20like " class = "action" > @icon!("heart") @i18n!(ctx.1, "Add yours")< / a >
< a href = "@uri!(session::new_message: m = i18n!(ctx.1, " Login to like " ) ) " class = "action" > @icon!("heart") @i18n!(ctx.1, "Add yours")< / a >
< / div >
< div class = "reshares" >
< p aria-label = "@i18n!(ctx.1, " One boost " , " { 0 } boost " , & n_reshares ) " title = "@i18n!(ctx.1, " One boost " , " { 0 } boosts " , n_reshares ) " >
@n_reshares
< / p >
< a href = " /login?m=Login%20to%20boost " class = "action" > @icon!("repeat") @i18n!(ctx.1, "Boost")< / a >
< a href = " @uri!(session::new_message: m = i18n!(ctx.1, "Login to boost " ) ) " class = "action" > @icon!("repeat") @i18n!(ctx.1, "Boost")< / a >
< / div >
< / div >
}
@ -120,7 +121,7 @@
< h2 > @i18n!(ctx.1, "Comments")< / h2 >
@if ctx.2.is_some() {
< form method = "post" action = "@ article.url(ctx.0)/comment ">
< form method = "post" action = "@ uri!(comments::create: blog_name = blog.get_fqn(ctx.0), slug = &article.slug) ">
@input!(ctx.1, warning (optional text), "Content warning", comment_form, comment_errors, "")
< label for = "plume-editor" > @i18n!(ctx.1, "Your comment")< / label >