- Make it possible to insert new paragraphs in the article body - Make it impossible to copy formatted HTML (to make media insertion from markdown code work correctly) TODO: - [x] make it possible to escape draft mode - [x] display errors from the server - [x] button to go back to the "normal" editor - [x] Avoid publishing placeholders
		
			
				
	
	
		
			67 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			3.0 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>
 | |
|         <a href="#" id="close-editor">@i18n!(ctx.1, "Classic editor (any changes will be lost)")</a>
 | |
|       </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 media to your gallery, and then copy their Markdown code into 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>
 | |
| })
 |