{% extends "base.html" %} {# Changelog/Release Notes Template Used for changelog and release notes sections. Displays releases in a timeline format with version numbers, dates, and categorized changes. Usage: Set `type: changelog` in section _index.md Context variables: - section: Section object with release notes - pages: List of release pages (individual releases) - changelog: Changelog data from site.data.changelog (optional) Supports two modes: 1. Data-driven: All releases in data/changelog.yaml 2. Page-driven: Each release as a separate markdown file #} {% from 'partials/navigation-components.html' import breadcrumbs %} {% block content %} {{ breadcrumbs(page if page is defined else section) }} {# Load changelog data from site.data (preferred) or use pages (fallback) #} {% set changelog_data = site.data.get('changelog') if site.data is defined and site.data else none %}

📋 {{ section.title if section else title | default('Changelog') }}

{% if section and section.metadata.get('description', '') %}

{{ section.metadata.get('description', '') }}

{% elif description %}

{{ description }}

{% endif %}
{# Data-driven mode: Use changelog.yaml #} {% if changelog_data and changelog_data.get('releases') %}
{% for release in changelog_data.get('releases') %}

{% if release.get('url') %} {{ release.get('version') }} {% else %} {{ release.get('version') }} {% endif %}

{% if release.get('name') %}

{{ release.get('name') }}

{% endif %}
{% if release.get('date') %} {{ release.get('date') }} {% endif %} {% if release.get('status') %} {{ release.get('status') }} {% endif %}
{% if release.get('summary') %}

{{ release.get('summary') }}

{% endif %} {# Added Features #} {% if release.get('added') and release.get('added') is iterable and release.get('added') is not string %}

✨ Added

    {% for item in release.get('added') %}
  • {{ item }}
  • {% endfor %}
{% endif %} {# Changed/Improved #} {% if release.get('changed') and release.get('changed') is iterable and release.get('changed') is not string %}

🔄 Changed

    {% for item in release.get('changed') %}
  • {{ item }}
  • {% endfor %}
{% endif %} {# Fixed Bugs #} {% if release.get('fixed') and release.get('fixed') is iterable and release.get('fixed') is not string %}

🐛 Fixed

    {% for item in release.get('fixed') %}
  • {{ item }}
  • {% endfor %}
{% endif %} {# Deprecated #} {% if release.get('deprecated') and release.get('deprecated') is iterable and release.get('deprecated') is not string %}

⚠️ Deprecated

    {% for item in release.get('deprecated') %}
  • {{ item }}
  • {% endfor %}
{% endif %} {# Removed #} {% if release.get('removed') and release.get('removed') is iterable and release.get('removed') is not string %}

🗑️ Removed

    {% for item in release.get('removed') %}
  • {{ item }}
  • {% endfor %}
{% endif %} {# Security #} {% if release.get('security') and release.get('security') is iterable and release.get('security') is not string %}

🔒 Security

    {% for item in release.get('security') %}
  • {{ item }}
  • {% endfor %}
{% endif %} {# Breaking Changes #} {% if release.get('breaking') and release.get('breaking') is iterable and release.get('breaking') is not string %}

⚡ Breaking Changes

    {% for item in release.get('breaking') %}
  • {{ item }}
  • {% endfor %}
{% endif %}
{% endfor %}
{# Page-driven mode: Use individual release pages #} {% elif pages %}
{% for release in pages %}

{{ release.title }}

{% if release.metadata.get('name') %}

{{ release.metadata.get('name') }}

{% endif %}
{% if release.date %} {% endif %} {% if release.metadata.get('status') %} {{ release.metadata.get('status') }} {% endif %}
{% if release.metadata.get('summary') or release.excerpt %}

{{ release.metadata.get('summary') | default(release.excerpt) }}

{% endif %} {# Show categories if in metadata #} {% if release.metadata.get('added') %}

✨ Added

    {% for item in release.metadata.get('added') %}
  • {{ item }}
  • {% endfor %}
{% endif %} {% if release.metadata.get('changed') %}

🔄 Changed

    {% for item in release.metadata.get('changed') %}
  • {{ item }}
  • {% endfor %}
{% endif %} {% if release.metadata.get('fixed') %}

🐛 Fixed

    {% for item in release.metadata.get('fixed') %}
  • {{ item }}
  • {% endfor %}
{% endif %} View full release notes →
{% endfor %}
{% else %} {# Empty State #}

No releases yet. Check back soon!

{% endif %} {# Page content (optional intro text) #} {% if content and content.strip() %}
{{ content | safe }}
{% endif %}
{% endblock %}