1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
| | {% comment %}
SPDX-License-Identifier: GPL-3.0-or-later
SPDX-FileCopyrightText: 2026 Valentin Gagarin <valentin@gagarin.work>
Render a nested sitemap rooted at a given URL prefix. Hierarchy is
derived from URL structure: a page is a direct child of prefix P iff
its URL starts with P, is not P itself, and contains no further path
segments below P.
{% endcomment %}
{%- assign default_root = "/" -%}
{% comment %}
`prefix` is the URL of the section to list children of. It must end with "/",
which we assume if it is constructed by a directory and contains an index file.
{% endcomment %}
{%- assign prefix = include.prefix | default: default_root -%}
{%- capture inner -%}
{%- assign candidates = site.html_pages
| where_exp: "p", "p.url contains prefix"
| where_exp: "p", "p.url != prefix" -%}
{%- if prefix == default_root -%}
{%- assign list_with_root_page = site.html_pages | where: "url", prefix -%}
{%- assign candidates = list_with_root_page | concat: candidates -%}
{%- endif -%}
{%- comment %}
Ordered pages first, ascending. The rest after, in URL order, so output is deterministic.
{%- endcomment %}
{%- assign ordered = candidates | where_exp: "p", "p.nav_order" | sort: "nav_order" -%}
{%- assign unordered = candidates | where_exp: "p", "p.nav_order == nil" | sort: "url" -%}
{%- assign sorted = ordered | concat: unordered -%}
{%- for p in sorted -%}
{%- comment %}
`assign` is page-global. A recursive include below may have overwritten `prefix`.
{%- endcomment %}
{%- assign prefix = include.prefix | default: default_root -%}
{%- assign suffix = p.url | remove_first: prefix -%}
{%- assign without_slashes = suffix | replace: "/", "" -%}
{%- assign slashes = suffix.size | minus: without_slashes.size -%}
{%- assign is_index = false -%}
{%- if p.name == "index.adoc" or p.name == "index.html" -%}{%- assign is_index = true -%}{%- endif -%}
{%- assign is_page = false -%}
{%- if is_index == false and slashes == 0 -%}{%- assign is_page = true -%}{%- endif -%}
{%- if is_index and suffix == "" -%}{%- assign is_page = true -%}{%- endif -%}
{%- assign is_section = false -%}
{%- if is_index and slashes == 1 -%}{%- assign is_section = true -%}{%- endif -%}
{%- if is_page or is_section %}
<li>
<a href="{{ p.url | relative_url }}">{{ p.title }}</a>
{%- if is_section -%}
{%- include sitemap.html prefix=p.url -%}
{%- endif -%}
</li>
{%- endif -%}
{%- endfor -%}
{%- endcapture -%}
{%- assign trimmed = inner | strip -%}
{%- if trimmed != "" %}
<ul>{{ inner }}
</ul>
{%- endif -%}
|