- _data: switch to cachedFetch wrapper (10s timeout + 4h watch cache) - js/webmentions.js: owner reply threading, platform provenance badges, DOM dedup, Micropub reply support - js/comments.js: owner detection, reply system, Alpine.store integration - _includes/components/webmentions.njk: data-wm-* attrs, provenance badge slots, reply buttons - _includes/components/comments.njk: owner-aware comment form, threaded replies - widgets/toc.njk: Alpine.js tocScanner upgrade (replaces is-land/inline-JS) - lib/og.js + og-cli.js: OG card v3 (light theme, avatar, batched spawn, DESIGN_VERSION=3) - eleventy.config.js: hasOgImage cache, memoized date filters, batched OG/unfurl, post-build GC, YouTube check opt - base.njk: Inter font preloads + toc-scanner.js script - critical.css: font-face declarations (font-display:optional) - tailwind.css: font-display swap→optional - tailwind.config.js: prose link colors -700→-600 - Color design system: accent-700/300 → accent-600/400 across components Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
28 lines
1.0 KiB
Plaintext
28 lines
1.0 KiB
Plaintext
{# Recent Comments Widget — sidebar #}
|
|
{% if recentComments and recentComments.length %}
|
|
<is-land on:visible>
|
|
<div class="widget">
|
|
<h3 class="widget-title">Recent Comments</h3>
|
|
<ul class="space-y-3">
|
|
{% for comment in recentComments %}
|
|
<li class="text-sm">
|
|
<div class="flex items-start gap-2">
|
|
{% if comment.author and comment.author.photo %}
|
|
<img src="{{ comment.author.photo }}" alt="{{ comment.author.name }}"
|
|
class="w-6 h-6 rounded-full flex-shrink-0 mt-0.5 shadow-lg" loading="lazy">
|
|
{% endif %}
|
|
<div>
|
|
<span class="font-medium">{{ comment.author.name or "Anonymous" }}</span>
|
|
<p class="text-surface-600 dark:text-surface-400 line-clamp-2">{{ comment.content.text | truncate(80) }}</p>
|
|
{% if comment["comment-target"] %}
|
|
<a href="{{ comment['comment-target'] }}" class="text-xs text-accent-600 dark:text-accent-400 hover:underline">View post</a>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
</li>
|
|
{% endfor %}
|
|
</ul>
|
|
</div>
|
|
</is-land>
|
|
{% endif %}
|