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
		
	
	
		
			937 B
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			30 lines
		
	
	
		
			937 B
		
	
	
	
		
			HTML
		
	
	
	
	
	
| @use template_utils::*;
 | |
| @use plume_models::posts::Post;
 | |
| 
 | |
| @(ctx: BaseContext, article: Post)
 | |
| 
 | |
| <div class="card">
 | |
|     @if article.cover_id.is_some() {
 | |
|         <div class="cover" style="background-image: url('@Html(article.cover_url(ctx.0).unwrap_or_default())')"></div>
 | |
|     }
 | |
|     <h3><a href="@article.url(ctx.0)">@article.title</a></h3>
 | |
|     <main>
 | |
|         <p>@article.subtitle</p>
 | |
|     </main>
 | |
|     <p class="author">
 | |
|         @Html(i18n!(ctx.1, "By {0}"; format!(
 | |
|             "<a href=\"/@/{}/\">{}</a>",
 | |
|             escape(&article.get_authors(ctx.0)[0].get_fqn(ctx.0)),
 | |
|             escape(&article.get_authors(ctx.0)[0].name(ctx.0))
 | |
|         )))
 | |
|         @if article.published {
 | |
|         ⋅ @article.creation_date.format("%B %e, %Y")
 | |
|         }
 | |
|         ⋅ <a href="/~/@article.get_blog(ctx.0).get_fqn(ctx.0)/">@article.get_blog(ctx.0).title</a>
 | |
|         @if !article.published {
 | |
|         ⋅ @i18n!(ctx.1, "Draft")
 | |
|         }
 | |
|     </p>
 | |
| </div>
 | |
| 
 |