tabi/templates/archive.html
welpo 13a65ac741
💥 feat(archive)!: enforce chronological sorting
Previously, the archive template respected individual section sorting configurations,
leading to potentially inconsistent timeline display.
This change enforces strict chronological
sorting (by publication date) across all
archive posts and adds an `archive_reverse` option
in section.extra to control sort direction.

BREAKING CHANGE: Archive now ignores section-specific sort_by settings in favour
of publication date ordering.
2025-02-09 20:36:43 +01:00

71 lines
2.6 KiB
HTML

{% extends "base.html" %}
{% block main_content %}
{{ macros_page_header::page_header(title=section.title) }}
{# Set locale for date #}
{% set date_locale = macros_translate::translate(key="date_locale", default="en_GB", language_strings=language_strings) %}
<div class="archive">
<ul class="list-with-title">
{%- set source_paths = section.extra.section_path | default(value="blog/") -%}
{%- if source_paths is iterable -%}
{%- set paths = source_paths -%}
{%- else -%}
{%- set paths = [source_paths] -%}
{%- endif %}
{%- set all_posts = [] -%}
{%- for path in paths -%}
{%- if lang == config.default_language %}
{%- set section_item = get_section(path=path ~ "_index.md") -%}
{%- else %}
{%- set section_item = get_section(path=path ~ "_index." ~ lang ~ ".md") -%}
{%- endif %}
{%- set_global all_posts = all_posts | concat(with=section_item.pages) -%}
{%- endfor %}
{# Sort all posts by date #}
{%- set archive_reverse = section.extra.archive_reverse | default(value=false) -%}
{%- set all_posts = all_posts | sort(attribute="date") -%}
{%- if not archive_reverse -%}
{%- set all_posts = all_posts | reverse -%}
{%- endif -%}
{# Group posts by year. #}
{% set posts_by_year = all_posts | group_by(attribute="year") %}
{% set years = [] %}
{% for year, ignored in posts_by_year %}
{% set_global years = years | concat(with=[year]) %}
{% endfor %}
{# Iterate over years #}
{% set years = years | sort %}
{%- if not archive_reverse -%}
{%- set years = years | reverse -%}
{%- endif -%}
{% for year in years %}
{% set posts = posts_by_year[year] %}
{% if posts | length > 0 %}
<li>
<h2 class="listing-title">{{ year }}</h2>
<ul class="listing">
{% for post in posts %}
<li class="listing-item">
<div class="post-time">
<span class="date">
{{ post.date | date(format="%d %b", locale=date_locale) }}
</span>
</div>
<a href="{{ post.permalink }}" title="{{ post.title }}">{{ post.title }}</a>
</li>
{% endfor %}
</ul>
</li>
{% endif %}
{% endfor %}
</ul>
</div>
{% endblock main_content %}