{# ================================================================================ Track List Page Template (Kida-Native) ================================================================================ Beautiful grid layout for displaying all available learning tracks. KIDA FEATURES USED: - {% let %} for template-scoped variables - Optional chaining (?.) for null-safe access - Null coalescing (??) for smart defaults - {% def %} for reusable track card component - Pipeline operator (|>) for filter chains USAGE: Set `template: tracks/list.html` in frontmatter ================================================================================ #} {% extends "base.html" %} {# ============================================================================= TRACK CARD COMPONENT (Compact LMS Style) ============================================================================= #} {% def track_card(id, track, track_page) %} {% let track_title = track?.title ?? 'Track' %} {% let track_desc = track?.description ?? 'Start your learning journey with this comprehensive track.' %} {% let track_items = track?.items ?? [] %} {% let items_count = track_items | length %} {% let preview_limit = 2 %}
{# Card Header - Title + Lesson Count Inline #}
{{ icon('graduation-cap', size=20) }}

{% if track_page %} {{ track_title }} {% else %} {{ track_title }} {% end %}

{{ items_count }} lesson{{ 's' if items_count != 1 else '' }}
{# Card Content #}

{{ track_desc }}

{# Track Preview Items - Horizontal Chips #} {% if items_count > 0 %}
{% for item_slug in track_items[:preview_limit] %} {% let item_page = get_page(item_slug) %} {% let item_title = item_page?.title ?? item_slug %} {{ loop.index }} {{ item_title }} {% end %} {% if items_count > preview_limit %} +{{ items_count - preview_limit }} more {% end %}
{% end %}
{# Card Footer #}
{% end %} {# ============================================================================= MAIN TEMPLATE ============================================================================= #} {% block content %} {# Template-scoped variables #} {% let page_title = page?.title ?? 'Learning Tracks' %} {% let page_desc = page?.description ?? '' %} {% let tracks_data = site?.data?.tracks ?? {} %} {# PRE-COMPUTE track_id → page mapping ONCE (O(n) instead of O(n×m)) #} {% let site_pages = site?.pages ?? [] %} {% let track_page_map = {} %} {% for p in site_pages %} {% let tid = p?.metadata?.track_id ?? '' %} {% if tid %} {% let track_page_map = track_page_map | merge({tid: p}) %} {% end %} {% end %}
{# Minimal Header - Title + optional description #}

{{ page_title }}

{% if page_desc %}

{{ page_desc }}

{% end %}
{# Tracks Grid #} {% if tracks_data | length > 0 %}
{% for id, track in tracks_data | items %} {# O(1) lookup from pre-computed map #} {% let track_page = track_page_map[id] if id in track_page_map else none %} {{ track_card(id, track, track_page) }} {% end %}
{% else %} {# Empty State #}
{{ icon('graduation-cap', size=64) }}

No tracks defined

Please define your learning tracks in site/data/tracks.yaml.

{% end %}
{% end %}