All the template are now compiled at compile-time with the `ructe` crate.
I preferred to use it instead of askama because it allows more complex Rust expressions, where askama only supports a small subset of expressions and doesn't allow them everywhere (for instance, `{{ macro!() | filter }}` would result in a parsing error).
The diff is quite huge, but there is normally no changes in functionality.
Fixes #161 and unblocks #110 and #273
		
	
			
		
			
				
	
	
		
			30 lines
		
	
	
		
			884 B
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			30 lines
		
	
	
		
			884 B
		
	
	
	
		
			HTML
		
	
	
	
	
	
| @use templates::base;
 | |
| @use template_utils::*;
 | |
| @use plume_models::medias::Media;
 | |
| 
 | |
| @(ctx: BaseContext, medias: Vec<Media>)
 | |
| 
 | |
| @:base(ctx, "Your media", {}, {}, {
 | |
|     <h1>@i18n!(ctx.1, "Your media")</h1>
 | |
|     <div>
 | |
|         <a href="/medias/new" class="inline-block button">@i18n!(ctx.1, "Upload")</a>
 | |
|     </div>
 | |
| 
 | |
|     <section>
 | |
|         @if medias.is_empty() {
 | |
|             <p>@i18n!(ctx.1, "You don't have any media yet.")</p>
 | |
|         }
 | |
|         <div class="list">
 | |
|             @for media in medias {
 | |
|                 <div class="card flex">
 | |
|                     @Html(media.preview_html(ctx.0))
 | |
|                     <main class="grow">
 | |
|                         <p><a href="/medias/@media.id">@media.alt_text</a></p>
 | |
|                     </main>
 | |
|                     <a href="/medias/@media.id/delete">@i18n!(ctx.1, "Delete")</a>
 | |
|                 </div>
 | |
|             }
 | |
|         </div>
 | |
|     </section>
 | |
| })
 |