@use templates::base; @use templates::partials::image_select; @use template_utils::*; @use validator::{ValidationErrors, ValidationErrorsKind}; @use std::borrow::Cow; @use plume_models::medias::*; @use plume_models::blogs::Blog; @use plume_models::posts::Post; @use routes::posts::NewPostForm; @use routes::*; @(ctx: BaseContext, title: String, blog: Blog, editing: bool, form: &NewPostForm, is_draft: bool, article: Option<Post>, errors: ValidationErrors, medias: Vec<Media>, content_len: u64) @:base(ctx, title.clone(), {}, {}, { <h1 id="plume-editor-title">@title</h1> <div id="plume-editor" style="display: none;"> <header> <button id="publish" class="button">@i18n!(ctx.1, "Publish")</button> <p id="char-count">@content_len</p> </header> </div> @if let Some(article) = article { <form id="plume-fallback-editor" class="new-post" method="post" action="@uri!(posts::update: blog = blog.actor_id, slug = &article.slug)" content-size="@content_len"> } else { <form id="plume-fallback-editor" class="new-post" method="post" action="@uri!(posts::new: blog = blog.actor_id)" content-size="@content_len"> } @input!(ctx.1, title (text), "Title", form, errors.clone(), "required") @input!(ctx.1, subtitle (optional text), "Subtitle", form, errors.clone(), "") @if let Some(ValidationErrorsKind::Field(errs)) = errors.clone().errors().get("content") { @format!(r#"<p class="error">{}</p>"#, errs[0].message.clone().unwrap_or_else(|| Cow::from("Unknown error"))) } <label for="editor-content">@i18n!(ctx.1, "Content")<small>@i18n!(ctx.1, "Markdown syntax is supported")</small></label> <textarea id="editor-content" name="content" rows="20">@Html(&form.content)</textarea> <small id="editor-left">@content_len</small> <p> @i18n!(ctx.1, "You can upload medias to your gallery, and copy their Markdown code in your articles to insert them.") <a href="@uri!(medias::new)">@i18n!(ctx.1, "Upload media")</a> </p> @input!(ctx.1, tags (optional text), "Tags, separated by commas", form, errors.clone(), "") @input!(ctx.1, license (optional text), "License", "Leave it empty to reserve all rights", form, errors, "") @:image_select(ctx, "cover", i18n!(ctx.1, "Illustration"), true, medias, form.cover) @if is_draft { <label for="draft"> <input type="checkbox" name="draft" id="draft" checked> @i18n!(ctx.1, "This is a draft, don't publish it yet.") </label> } @if editing { <input type="submit" value="@i18n!(ctx.1, "Update")" /> } else { @if is_draft { <input type="submit" value="@i18n!(ctx.1, "Update, or publish")" /> } else { <input type="submit" value="@i18n!(ctx.1, "Publish your post")" /> } } </form> })