- Add skip-to-main-content link and main content ID target - Add prefers-reduced-motion media queries for all animations - Enhance visible focus indicators (2px offset, high-contrast ring) - Replace ~160 text-surface-500 instances with text-surface-600/dark:text-surface-400 for 4.5:1+ contrast ratio compliance - Add aria-hidden="true" to ~30+ decorative SVG icons across sidebars/widgets - Convert facepile containers from div to semantic ul/li with role="list" - Add aria-label to icon-only buttons (share, sort controls) - Add sr-only labels to form inputs (webmention, search) - Add aria-live="polite" to dynamically loaded webmentions - Add aria-label with relative+absolute date to time-difference component - Add keyboard handlers (Enter/Space) to custom interactive elements - Add aria-label to nav landmarks (table of contents) - Fix modal focus trap and dialog accessibility - Fix lightbox keyboard navigation and screen reader announcements Confab-Link: http://localhost:8080/sessions/edb1b7b0-da66-4486-bd9c-d1cfa7553b88
85 lines
3.7 KiB
Plaintext
85 lines
3.7 KiB
Plaintext
---
|
|
layout: layouts/base.njk
|
|
title: Weekly Digest
|
|
withSidebar: true
|
|
pagefindIgnore: true
|
|
eleventyExcludeFromCollections: true
|
|
eleventyImport:
|
|
collections:
|
|
- weeklyDigests
|
|
pagination:
|
|
data: collections.weeklyDigests
|
|
size: 20
|
|
alias: paginatedDigests
|
|
permalink: "digest/{% if pagination.pageNumber > 0 %}page/{{ pagination.pageNumber + 1 }}/{% endif %}"
|
|
---
|
|
<div>
|
|
<h1 class="text-2xl sm:text-3xl font-bold text-surface-900 dark:text-surface-100 mb-2">Weekly Digest</h1>
|
|
<p class="text-surface-600 dark:text-surface-400 mb-6 sm:mb-8">
|
|
A weekly summary of all posts. Subscribe via <a href="/digest/feed.xml" class="text-amber-600 dark:text-amber-400 hover:underline">RSS</a> for one update per week.
|
|
</p>
|
|
|
|
{% if paginatedDigests.length > 0 %}
|
|
<ul class="space-y-4">
|
|
{% for d in paginatedDigests %}
|
|
<li class="p-4 bg-surface-50 dark:bg-surface-800 border border-surface-200 dark:border-surface-700 rounded-lg hover:border-amber-400 dark:hover:border-amber-600 transition-colors shadow-sm">
|
|
<a href="/digest/{{ d.slug }}/" class="block">
|
|
<h2 class="font-semibold text-surface-900 dark:text-surface-100 hover:text-accent-600 dark:hover:text-accent-400">
|
|
{{ d.label }}
|
|
</h2>
|
|
<p class="text-sm text-surface-600 dark:text-surface-400 mt-1">
|
|
<time class="font-mono" datetime="{{ d.startDate | isoDate }}">{{ d.startDate | dateDisplay }}</time> – <time class="font-mono" datetime="{{ d.endDate | isoDate }}">{{ d.endDate | dateDisplay }}</time>
|
|
· {{ d.posts.length }} post{% if d.posts.length != 1 %}s{% endif %}
|
|
</p>
|
|
{% set typeLabels = [] %}
|
|
{% for key, posts in d.byType %}
|
|
{% set typeLabels = (typeLabels.push(key + " (" + posts.length + ")"), typeLabels) %}
|
|
{% endfor %}
|
|
{% if typeLabels.length %}
|
|
<p class="text-xs text-surface-600 dark:text-surface-400 mt-1">
|
|
{{ typeLabels | join(", ") }}
|
|
</p>
|
|
{% endif %}
|
|
</a>
|
|
</li>
|
|
{% endfor %}
|
|
</ul>
|
|
|
|
{% if pagination.pages.length > 1 %}
|
|
<nav class="pagination mt-8" aria-label="Digest pagination">
|
|
<div class="pagination-info">
|
|
Page {{ pagination.pageNumber + 1 }} of {{ pagination.pages.length }}
|
|
</div>
|
|
<div class="pagination-links">
|
|
{% if pagination.href.previous %}
|
|
<a href="{{ pagination.href.previous }}" class="pagination-link" aria-label="Previous page">
|
|
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 19l-7-7 7-7"></path></svg>
|
|
Previous
|
|
</a>
|
|
{% else %}
|
|
<span class="pagination-link disabled" aria-disabled="true">
|
|
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 19l-7-7 7-7"></path></svg>
|
|
Previous
|
|
</span>
|
|
{% endif %}
|
|
|
|
{% if pagination.href.next %}
|
|
<a href="{{ pagination.href.next }}" class="pagination-link" aria-label="Next page">
|
|
Next
|
|
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"></path></svg>
|
|
</a>
|
|
{% else %}
|
|
<span class="pagination-link disabled" aria-disabled="true">
|
|
Next
|
|
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"></path></svg>
|
|
</span>
|
|
{% endif %}
|
|
</div>
|
|
</nav>
|
|
{% endif %}
|
|
|
|
{% else %}
|
|
<p class="text-surface-600 dark:text-surface-400">No digests yet. Posts will be grouped into weekly digests automatically.</p>
|
|
{% endif %}
|
|
</div>
|