{% 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 %} {# 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 %}
{# Action Bar: Breadcrumbs + Share #} {% include 'partials/action-bar.html' %} {# For section pages (like changelog list), we might need to ensure 'page' refers to the section #} {# The action-bar partial expects 'page' variable. In list templates, 'section' is the main object #} {# We'll let the partial handle it if page is defined, or we might need to alias section to page #} {% if not page is defined and section is defined %} {% set page = section %} {% endif %} {% if content and content.strip() %}
{{ content | safe }}
{% endif %} {# Check if any releases have structured metadata for filtering #} {% set has_structured_data = false %} {% if changelog_data and changelog_data.get('releases') %} {% for release in changelog_data.get('releases') %} {% if release.get('added') or release.get('changed') or release.get('fixed') or release.get('breaking') or release.get('security') %} {% set has_structured_data = true %} {% endif %} {% endfor %} {% elif pages %} {% for release in pages %} {% if release.metadata.get('added') or release.metadata.get('changed') or release.metadata.get('fixed') or release.metadata.get('breaking') or release.metadata.get('security') %} {% set has_structured_data = true %} {% endif %} {% endfor %} {% endif %} {# Filter UI - Only show if structured data exists #} {% if has_structured_data %}
{% endif %} {# Data-driven mode: Use changelog.yaml #} {% if changelog_data and changelog_data.get('releases') %}
{% for release in changelog_data.get('releases') %} {# Build list of change types for filtering #} {% set change_types = [] %} {% if release.get('added') %} {% set _ = change_types.append('added') %} {% endif %} {% if release.get('changed') %} {% set _ = change_types.append('changed') %} {% endif %} {% if release.get('fixed') %} {% set _ = change_types.append('fixed') %} {% endif %} {% if release.get('breaking') %} {% set _ = change_types.append('breaking') %} {% endif %} {% if release.get('security') %} {% set _ = change_types.append('security') %} {% endif %}

{% 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 %} {# Build list of change types for filtering #} {# If no structured metadata, leave empty - JavaScript will show for all filters #} {% set change_types = [] %} {% if release.metadata.get('added') %} {% set _ = change_types.append('added') %} {% endif %} {% if release.metadata.get('changed') %} {% set _ = change_types.append('changed') %} {% endif %} {% if release.metadata.get('fixed') %} {% set _ = change_types.append('fixed') %} {% endif %} {% if release.metadata.get('breaking') %} {% set _ = change_types.append('breaking') %} {% endif %} {% if release.metadata.get('security') %} {% set _ = change_types.append('security') %} {% endif %}

{{ 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 %}
{% set release_description = release.metadata.get('description') or release.metadata.get('summary') or release.excerpt %} {% if release_description %}

{{ release_description }}

{% 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 %}
{% endblock %}