b4e4b497ee
Use uri! to generate links instead of hardcoded urls Fix #110 Fix invalid links needing to be POST forms Translate login message for boost and like directly from template Put js for search in its own file
75 lines
3.2 KiB
HTML
75 lines
3.2 KiB
HTML
@use templates::base;
|
|
@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, blog: Blog, editing: bool, form: &NewPostForm, is_draft: bool, article: Option<Post>, errors: ValidationErrors, default_license: String, medias: Vec<Media>)
|
|
|
|
@:base(ctx, &i18n!(ctx.1, if editing { "Edit {0}" } else { "New post" }; &form.title), {}, {}, {
|
|
<h1>
|
|
@if editing {
|
|
@i18n!(ctx.1, "Edit {0}"; &form.title)
|
|
} else {
|
|
@i18n!(ctx.1, "Create a new post")
|
|
}
|
|
</h1>
|
|
@if let Some(article) = article {
|
|
<form class="new-post" method="post" action="@uri!(posts::update: blog = blog.actor_id, slug = &article.slug)">
|
|
} else {
|
|
<form class="new-post" method="post" action="@uri!(posts::new: blog = blog.actor_id)">
|
|
}
|
|
@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>"#, i18n!(ctx.1, &*errs[0].message.clone().unwrap_or(Cow::from("Unknown error"))))
|
|
}
|
|
|
|
<label for="plume-editor">@i18n!(ctx.1, "Content")<small>@i18n!(ctx.1, "Markdown is supported")</small></label>
|
|
<textarea id="plume-editor" name="content" rows="20">@form.content</textarea>
|
|
|
|
@input!(ctx.1, tags (optional text), "Tags, separated by commas", form, errors.clone(), "")
|
|
|
|
@input!(ctx.1, license (optional text), "License", &i18n!(ctx.1, "Default license will be {0}"; &default_license), form, errors, "")
|
|
|
|
<label for="cover">@i18n!(ctx.1, "Illustration")<small>@i18n!(ctx.1, "Optional")</small></label>
|
|
<select id="cover" name="cover">
|
|
<option value="none" @if form.cover.is_none() { selected }>@i18n!(ctx.1, "None")</option>
|
|
@for media in medias {
|
|
@if media.category() == MediaCategory::Image {
|
|
<option value="@media.id" @if form.cover.map(|c| c == media.id).unwrap_or(false) { selected }>
|
|
@if !media.alt_text.is_empty() {
|
|
@media.alt_text
|
|
} else {
|
|
@media.content_warning.unwrap_or_default()
|
|
}
|
|
</option>
|
|
}
|
|
}
|
|
</select>
|
|
|
|
@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")" />
|
|
}
|
|
}
|
|
</form>
|
|
<script src="@uri!(static_files: file = "js/autoExpand.js")"></script>
|
|
})
|