@use plume_models::blogs::Blog; @use plume_models::instance::Instance; @use plume_models::posts::Post; @use plume_models::users::User; @use std::path::Path; @use crate::templates::{base, partials::post_card}; @use crate::template_utils::*; @use crate::routes::*; @(ctx: BaseContext, blog: Blog, authors: &[User], page: i32, n_pages: i32, posts: Vec<Post>) @:base(ctx, blog.title.clone(), { <meta content="profile" property="og:type" /> <meta content="120" property="og:image:width" /> <meta content="120" property="og:image:height" /> <meta content="summary" property="twitter:card" /> <meta content="'@Instance::get_local().unwrap().name" property="og:site_name" /> <meta content="@blog.ap_url" property="og:url" /> <meta content="@blog.fqn" property="profile:username" /> <meta content="@blog.title" property="og:title" /> <meta content="@blog.summary_html" name="description"> <meta content="@blog.summary_html" property="og:description" /> <meta content="@blog.icon_url(ctx.0)" property="og:image" /> <link href='@Instance::get_local().unwrap().compute_box("~", &blog.fqn, "atom.xml")' rel='alternate' type='application/atom+xml'> <link href='@blog.ap_url' rel='alternate' type='application/activity+json'> <link href='@blog.ap_url' rel='canonical'> @if !ctx.2.clone().map(|u| u.hide_custom_css).unwrap_or(false) { @if let Some(ref theme) = blog.theme { <link rel="stylesheet" href="@uri!(plume_static_files: file = Path::new("css").join(theme).join("theme.css"), build_id = CACHE_NAME)"> } } }, { <a href="@uri!(blogs::details: name = &blog.fqn, page = _)" dir="auto">@blog.title</a> }, { <div class="hidden"> @for author in authors { <div class="h-card"> <span class="p-name">@author.name()</span> <a class="u-url" href="@author.ap_url"></a> </div> } </div> <div class="h-feed"> @if let Some(banner_url) = blog.banner_url(ctx.0) { <div class="cover" style="background-image: url('@Html(banner_url.clone())')"></div> <img class="hidden u-photo" src="@banner_url"/> } <div class="h-card"> <div class="user"> <div class="flex wrap" dir="auto"> <div class="avatar medium" style="background-image: url('@blog.icon_url(ctx.0)');" aria-label="@i18n!(ctx.1, "{}'s icon"; &blog.title)"></div> <img class="hidden u-photo" src="@blog.icon_url(ctx.0)"/> <h1 class="grow flex vertical"> <span class="p-name">@blog.title</span> <small dir="auto">~@blog.fqn</small> </h1> @if ctx.2.clone().and_then(|u| u.is_author_in(ctx.0, &blog).ok()).unwrap_or(false) { <a href="@uri!(posts::new: blog = &blog.fqn)" class="button" dir="auto">@i18n!(ctx.1, "New article")</a> <a href="@uri!(blogs::edit: name = &blog.fqn)" class="button" dir="auto">@i18n!(ctx.1, "Edit")</a> } </div> <main class="user-summary" dir="auto"> <p> @i18n!(ctx.1, "There's one author on this blog: ", "There are {0} authors on this blog: "; authors.len()) @for (i, author) in authors.iter().enumerate() {@if i >= 1 {, } <a class="author p-author" href="@uri!(user::details: name = &author.fqn)" dir="auto">@author.name()</a>} </p> @Html(blog.summary_html.clone()) </main> </div> <section> <h2 dir="auto"> @i18n!(ctx.1, "Latest articles") <small><a href="@uri!(blogs::atom_feed: name = &blog.fqn)" title="Atom feed">@icon!("rss")</a></small> </h2> @if posts.is_empty() { <p dir="auto">@i18n!(ctx.1, "No posts to see here yet.")</p> } <div class="cards"> @for article in posts { @:post_card(ctx, article) } </div> @paginate(ctx.1, page, n_pages) </section> </div> })