Files
andwati.com/templates/partials/post-card.html
T
andwati e992baf2d2 Migrate templates to Zola 0.23 / Tera v2
bin/update-zola always installs the latest release, which as of
v0.23.0 rewrote the template engine to Tera v2. That broke the whole
site: removed filters (slice, concat, escape), test calls now require
named args, shortcodes are gone in favor of Tera components, and
content itself is now Tera-templated before markdown runs.

- slice(end=n) -> native [:n] slicing; concat(with=x) -> spread [...arr, x]
- escape -> escape_html; starting_with/containing -> named `pat` arg
- get_taxonomy_url `name` -> `term` (old name is deprecated)
- %+ date format no longer recognized; replaced with explicit RFC3339 pattern
- shortcodes (note/tip/warning/danger/youtube) rewritten as components;
  content call sites updated to component invocation syntax
- {% include %} no longer inherits for-loop-local variables (only ambient
  page/section context) - post-card.html converted to a component that
  takes page/index explicitly instead of relying on implicit `page`/`loop`
- two content code blocks with literal Jinja-style {{ }} syntax (Netlify
  CMS config, a Flask template snippet) wrapped in {% raw %} so Tera
  doesn't try to render them, since content is now templated too
- fixed a real content corruption bug along the way: the youtube
  shortcode's multi-line <iframe> tag had a conditional that could
  collapse to a whitespace-only line, which prematurely closed the
  HTML block under CommonMark rules and got the rest of the tag
  syntax-highlighted as code instead of rendered

Verified with a clean `zola build` and `zola serve` on v0.23.1, plus a
spot-check of the rendered HTML for both callouts and the video embed.
`zola check` only reports pre-existing external link rot, unrelated to
this change.
2026-08-07 10:46:09 +03:00

40 lines
1.2 KiB
HTML

{% component post_card(page, index) %}
<article class="feed-item card hover-scale">
<span class="item-index">{% if index < 10 %}0{{ index }}{% else %}{{ index }}{% endif %}</span>
<div class="item-body">
<h2 class="item-title">
<a href="{{ page.permalink }}">{{ page.title }}</a>
</h2>
<div class="item-meta">
<span>{{ page.date | date(format="%Y-%m-%d") }}</span>
{% if page.reading_time %}
<span class="item-meta-sep">&middot;</span>
<span>{{ page.reading_time }} min read</span>
{% endif %}
</div>
<div class="item-snippet">
{% if page.description %}
<p>{{ page.description }}</p>
{% else %}
<p>{{ page.content | striptags | truncate(length=120) | safe }}</p>
{% endif %}
</div>
<div class="item-footer">
<a href="{{ page.permalink }}" class="item-readmore">Read more<span class="readmore-arrow">→</span></a>
{% if page.taxonomies.tags %}
<div class="item-tags">
{% for tag in page.taxonomies.tags %}
<a href="{{ get_taxonomy_url(kind="tags", term=tag) }}" class="tag">{{ tag }}</a>
{% endfor %}
</div>
{% endif %}
</div>
</div>
</article>
{% endcomponent post_card %}