mirror of
https://git.joinplu.me/Plume/Plume.git
synced 2024-11-14 07:51:01 +00:00
bdfad844d7
Also adds a parameter to `md_to_html` to only render inline elements (so that we don't have titles or images in blog descriptions). And moves the delete button for the blog on the edition page. I still have to update the SQLite migration once others PRs with migrations will be merged. Also, there will be a problem when you edit a blog while not owning its banner or icon: when validating they will be reset to their default values… I don't see a good solution to this until we have a better way to handle uploads with Rocket (the same is probably happening for articles btw). And the icon/banner are not federated yet, I don't know if I should add it to this PR or if it can come after? ![image](https://user-images.githubusercontent.com/16254623/53894510-7d853300-4030-11e9-8a2c-f5c0b0c7f512.png) ![image](https://user-images.githubusercontent.com/16254623/53894539-8b3ab880-4030-11e9-8113-685a27be8d7c.png) Fixes #453 Fixes #454
65 lines
2.9 KiB
HTML
65 lines
2.9 KiB
HTML
@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>
|
|
})
|