70af57c6e1
All the template are now compiled at compile-time with the `ructe` crate. I preferred to use it instead of askama because it allows more complex Rust expressions, where askama only supports a small subset of expressions and doesn't allow them everywhere (for instance, `{{ macro!() | filter }}` would result in a parsing error). The diff is quite huge, but there is normally no changes in functionality. Fixes #161 and unblocks #110 and #273
50 lines
1.7 KiB
HTML
50 lines
1.7 KiB
HTML
@use plume_models::blogs::Blog;
|
|
@use plume_models::posts::Post;
|
|
@use plume_models::users::User;
|
|
@use templates::{base, partials::post_card};
|
|
@use template_utils::*;
|
|
|
|
@(ctx: BaseContext, blog: Blog, fqn: String, authors: &Vec<User>, total_articles: usize, page: i32, n_pages: i32, is_author: bool, posts: Vec<Post>)
|
|
|
|
@:base(ctx, blog.title.as_ref(), {}, {
|
|
<a href="/~/@fqn">@blog.title</a>
|
|
}, {
|
|
<h1>@blog.title <small>~@fqn</small></h1>
|
|
<p>@blog.summary</p>
|
|
<p>
|
|
@i18n!(ctx.1, "One author in this blog: ", "{0} authors in this blog: ", authors.len())
|
|
@for author in authors {
|
|
<a class="author" href="/@@/@author.get_fqn(ctx.0)">@author.name(ctx.0)</a>
|
|
}
|
|
</p>
|
|
<p>
|
|
@i18n!(ctx.1, "One article in this blog", "{0} articles in this blog", total_articles)
|
|
</p>
|
|
|
|
<section>
|
|
<h2>
|
|
@i18n!(ctx.1, "Latest articles")
|
|
<small><a href="/~/@fqn/atom.xml" title="Atom feed">@icon!("rss")</a></small>
|
|
</h2>
|
|
@if posts.len() < 1 {
|
|
<p>@i18n!(ctx.1, "No posts to see here yet.")</p>
|
|
}
|
|
@if is_author {
|
|
<a href="/~/@fqn/new/" class="button inline-block">@i18n!(ctx.1, "New article")</a>
|
|
}
|
|
<div class="cards">
|
|
@for article in posts {
|
|
@:post_card(ctx, article)
|
|
}
|
|
</div>
|
|
@paginate(ctx.1, page, n_pages)
|
|
</section>
|
|
@if is_author {
|
|
<h2>@i18n!(ctx.1, "Danger zone")</h2>
|
|
<p>@i18n!(ctx.1, "Be very careful, any action taken here can't be cancelled.")</p>
|
|
<form method="post" action="/~/@fqn/delete">
|
|
<input type="submit" class="inline-block button destructive" value="@i18n!(ctx.1, "Delete this blog")">
|
|
</form>
|
|
}
|
|
})
|