forked from just-the-docs/just-the-docs
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'just-the-docs:main' into a11y-specs
- Loading branch information
Showing
57 changed files
with
1,232 additions
and
937 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,144 +1,96 @@ | ||
{%- comment -%} | ||
Include as: {%- include components/breadcrumbs.html -%} | ||
Depends on: page, site. | ||
Includes: components/site_nav.html. | ||
Results in: HTML for the breadcrumbs component. | ||
Overwrites: | ||
node, pages_list, parent_page, grandparent_page. | ||
nav_list_link, site_nav, nav_list_simple, nav_list_link_class, nav_category, | ||
nav_anchor_splits, nav_breadcrumbs, nav_split, nav_split_next, nav_split_test, | ||
nav_breadcrumb_link, nav_list_end_less, nav_list_end_count, nav_end_index, nav_breadcrumb. | ||
{%- endcomment -%} | ||
|
||
{%- if page.url != "/" and page.parent -%} | ||
{%- if page.url != "/" and page.parent and page.title -%} | ||
|
||
{%- capture nav_list_link -%} | ||
<a href="{{ page.url | relative_url }}" class="nav-list-link"> | ||
{%- endcapture -%} | ||
|
||
{%- capture site_nav -%} | ||
{%- include_cached components/site_nav.html -%} | ||
{%- include_cached components/site_nav.html all=true -%} | ||
{%- endcapture -%} | ||
|
||
{%- if site_nav contains nav_list_link -%} | ||
|
||
{%- capture nav_list_simple -%} | ||
<ul class="nav-list"> | ||
{%- endcapture -%} | ||
|
||
{%- capture nav_list_link_class %} class="nav-list-link"> | ||
{%- endcapture -%} | ||
|
||
{%- capture nav_category -%} | ||
<div class="nav-category"> | ||
{%- endcapture -%} | ||
|
||
{%- assign nav_anchor_splits = | ||
site_nav | split: nav_list_link | | ||
first | split: nav_category | | ||
last | split: "</a>" -%} | ||
|
||
{%- comment -%} | ||
The ordinary pages (if any) and the collections pages (if any) are separated by | ||
occurrences of nav_category. | ||
|
||
Any ancestor nav-links of the page are contained in the last group of pages, | ||
immediately preceding nav-lists. After splitting at "</a>", the anchor that | ||
was split is a potential ancestor link when the following split starts with | ||
a nav-list. | ||
|
||
The array nav_breadcrumbs is the stack of current potential ancestors of the | ||
current page. A split that contains one or more "</ul>"s requires that number | ||
of potential ancestors to be popped from the stack. | ||
|
||
The number of occurrences of a string in nav_split_next is computed by removing | ||
them all, then dividing the resulting size difference by the length of the string. | ||
{%- endcomment %} | ||
|
||
{%- assign nav_breadcrumbs = "" | split: "" -%} | ||
|
||
{%- for nav_split in nav_anchor_splits -%} | ||
{%- unless forloop.last -%} | ||
|
||
{%- assign nav_split_next = nav_anchor_splits[forloop.index] | strip -%} | ||
|
||
{%- assign nav_split_test = | ||
nav_split_next | remove_first: nav_list_simple | prepend: nav_list_simple -%} | ||
{%- if nav_split_test == nav_split_next -%} | ||
{%- assign nav_breadcrumb_link = | ||
nav_split | split: "<a " | last | prepend: "<a " | | ||
replace: nav_list_link_class, ">" | append: "</a>" -%} | ||
{%- assign nav_breadcrumbs = nav_breadcrumbs | push: nav_breadcrumb_link -%} | ||
{%- endif -%} | ||
|
||
{%- if nav_split_next contains "</ul>" -%} | ||
{%- assign nav_list_end_less = nav_split_next | remove: "</ul>" -%} | ||
{%- assign nav_list_end_count = | ||
nav_split_next.size | minus: nav_list_end_less.size | divided_by: 5 -%} | ||
{% for nav_end_index in (1..nav_list_end_count) %} | ||
{%- assign nav_breadcrumbs = nav_breadcrumbs | pop -%} | ||
{%- endfor -%} | ||
{%- endif -%} | ||
|
||
{%- endunless -%} | ||
{%- endfor -%} | ||
{%- capture nav_list_simple -%} | ||
<ul class="nav-list"> | ||
{%- endcapture -%} | ||
|
||
{%- assign nav_parent_link = nav_breadcrumbs[-1] -%} | ||
{%- assign nav_grandparent_link = nav_breadcrumbs[-2] -%} | ||
{%- capture nav_list_link_class %} class="nav-list-link"> | ||
{%- endcapture -%} | ||
|
||
{%- else -%} | ||
{%- capture nav_category -%} | ||
<div class="nav-category"> | ||
{%- endcapture -%} | ||
|
||
{%- comment -%} | ||
Pages whose links are excluded from the main navigation may still have | ||
breadcrumbs. Determining them appears to require inspecting the front matter | ||
of all the pages in the same group. For sites with 100s of pages, this is too | ||
inefficient in Jekyll 3 (also when the for-loop is replaced by where-filters). | ||
{%- endcomment -%} | ||
{%- assign nav_anchor_splits = | ||
site_nav | split: nav_list_link | | ||
first | split: nav_category | | ||
last | split: "</a>" -%} | ||
|
||
{%- assign pages_list = site[page.collection] | default: site.html_pages -%} | ||
{%- comment -%} | ||
The ordinary pages (if any) and the collections pages (if any) are separated by | ||
occurrences of nav_category. | ||
|
||
{%- assign parent_page = nil -%} | ||
{%- assign grandparent_page = nil -%} | ||
|
||
{%- for node in pages_list -%} | ||
Any ancestor nav-links of the page are contained in the last group of pages, | ||
immediately preceding nav-lists. After splitting at "</a>", the anchor that | ||
was split is a potential ancestor link when the following split starts with | ||
a nav-list. | ||
|
||
The array nav_breadcrumbs is the stack of current potential ancestors of the | ||
current page. A split that contains one or more "</ul>"s requires that number | ||
of potential ancestors to be popped from the stack. | ||
|
||
{%- if node.has_children and page.grand_parent -%} | ||
The number of occurrences of a string in nav_split_next is computed by removing | ||
them all, then dividing the resulting size difference by the length of the string. | ||
{%- endcomment %} | ||
|
||
{%- if node.title == page.parent and node.parent == page.grand_parent -%} | ||
{%- assign parent_page = node -%} | ||
{%- endif -%} | ||
{%- if node.title == page.grand_parent -%} | ||
{%- assign grandparent_page = node -%} | ||
{%- endif -%} | ||
{%- if parent_page and grandparent_page -%} | ||
{%- break -%} | ||
{%- endif -%} | ||
{%- assign nav_breadcrumbs = "" | split: "" -%} | ||
|
||
{%- elsif node.has_children and node.title == page.parent and node.parent == nil -%} | ||
{%- for nav_split in nav_anchor_splits -%} | ||
{%- unless forloop.last -%} | ||
|
||
{%- assign parent_page = node -%} | ||
{%- break -%} | ||
{%- assign nav_split_next = nav_anchor_splits[forloop.index] | strip -%} | ||
|
||
{%- endif -%} | ||
{%- assign nav_split_test = | ||
nav_split_next | remove_first: nav_list_simple | prepend: nav_list_simple -%} | ||
{%- if nav_split_test == nav_split_next -%} | ||
{%- assign nav_breadcrumb_link = | ||
nav_split | split: "<a " | last | prepend: "<a " | | ||
replace: nav_list_link_class, ">" | append: "</a>" -%} | ||
{%- assign nav_breadcrumbs = nav_breadcrumbs | push: nav_breadcrumb_link -%} | ||
{%- endif -%} | ||
|
||
{%- if nav_split_next contains "</ul>" -%} | ||
{%- assign nav_list_end_less = nav_split_next | remove: "</ul>" -%} | ||
{%- assign nav_list_end_count = | ||
nav_split_next.size | minus: nav_list_end_less.size | divided_by: 5 -%} | ||
{% for nav_end_index in (1..nav_list_end_count) %} | ||
{%- assign nav_breadcrumbs = nav_breadcrumbs | pop -%} | ||
{%- endfor -%} | ||
|
||
{%- capture nav_parent_link -%} | ||
<a href="{{ parent_page.url | relative_url }}">{{ page.parent }}</a> | ||
{%- endcapture -%} | ||
|
||
{%- if page.grand_parent %} | ||
{%- capture nav_grandparent_link -%} | ||
<a href="{{ grandparent_page.url | relative_url }}">{{ page.grand_parent }}</a> | ||
{%- endcapture -%} | ||
{%- endif -%} | ||
|
||
{%- endif -%} | ||
|
||
{%- endunless -%} | ||
{%- endfor -%} | ||
|
||
<nav aria-label="Breadcrumb" class="breadcrumb-nav"> | ||
<ol class="breadcrumb-nav-list"> | ||
{%- if nav_grandparent_link %} | ||
<li class="breadcrumb-nav-list-item">{{ nav_grandparent_link }}</li> | ||
{%- endif %} | ||
<li class="breadcrumb-nav-list-item">{{ nav_parent_link }}</li> | ||
{%- for nav_breadcrumb in nav_breadcrumbs %} | ||
<li class="breadcrumb-nav-list-item">{{ nav_breadcrumb }}</li> | ||
{%- endfor %} | ||
<li class="breadcrumb-nav-list-item"><span>{{ page.title }}</span></li> | ||
</ol> | ||
</nav> | ||
|
||
{% if site.nav_error_report %} | ||
{{ nav_error_report }} | ||
{% endif %} | ||
|
||
{%- endif -%} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,33 +1,89 @@ | ||
{%- comment -%} | ||
Include as: {%- include components/children_nav.html -%} | ||
Depends on: page, site. | ||
Depends on: page, site, nav_breadcrumbs. | ||
Results in: HTML for the children-navigation component. | ||
Includes: | ||
sorted_pages.html | ||
toc_heading_custom.html | ||
Includes: components/nav/sorted.html, toc_heading_custom.html. | ||
Overwrites: | ||
child_pages. | ||
nav_ancestor_links, nav_top_node_titles, nav_child_candidates, nav_children, | ||
nav_child, nav_child_ok, nav_child_ancestor, nav_sorted. | ||
{%- endcomment -%} | ||
|
||
{%- if page.has_children == true and page.has_toc != false -%} | ||
{%- assign child_pages = site[page.collection] | ||
| default: site.html_pages | ||
| where: "parent", page.title | ||
| where: "grand_parent", page.parent -%} | ||
{%- comment -%} | ||
Whether a page has any children is checked efficiently by inspecting the cached | ||
site_nav. If the page has no children, nav_children is set to an empty array; | ||
otherwise nav_children is left unset. | ||
{%- endcomment -%} | ||
|
||
{%- include sorted_pages.html pages = child_pages -%} | ||
{%- if page.has_children == false -%} | ||
{%- assign nav_children = "" | split: "" -%} | ||
{%- else -%} | ||
|
||
{%- if page.child_nav_order == 'desc' or page.child_nav_order == 'reversed' -%} | ||
{%- assign sorted_pages = sorted_pages | reverse -%} | ||
{%- assign nav_children = nil -%} | ||
|
||
{%- capture nav_list_link -%} | ||
<a href="{{ page.url | relative_url }}" class="nav-list-link"> | ||
{%- endcapture -%} | ||
|
||
{%- capture site_nav -%} | ||
{%- include_cached components/site_nav.html all=true -%} | ||
{%- endcapture -%} | ||
|
||
{%- capture nav_list_simple -%} | ||
<ul class="nav-list"> | ||
{%- endcapture -%} | ||
|
||
{%- assign nav_child_start = site_nav | ||
| split: nav_list_link | last | ||
| split: "</a>" | slice: 1 | first -%} | ||
|
||
{%- assign nav_child_test = nav_child_start | ||
| remove_first: nav_list_simple | prepend: nav_list_simple -%} | ||
|
||
{%- if nav_child_start != nav_child_test -%} | ||
{%- assign nav_children = "" | split: "" -%} | ||
{%- endif -%} | ||
|
||
{%- endif -%} | ||
|
||
{%- unless nav_children -%} | ||
|
||
{%- comment -%} | ||
The layout is assumed to include components/breadcrumbs.html before this file, | ||
otherwise it needs to be included here. | ||
{%- endcomment -%} | ||
|
||
{%- assign nav_ancestors = "" | split: "" -%} | ||
{%- for nav_link in nav_breadcrumbs -%} | ||
{%- assign nav_title = nav_link | split: ">" | slice: 1 | first | append: ">" | remove: "</a>" -%} | ||
{%- assign nav_ancestors = nav_ancestors | push: nav_title -%} | ||
{%- endfor -%} | ||
|
||
{%- assign nav_parenthood = site[page.collection] | default: site.html_pages | ||
| where_exp: "item", "item.title != nil" | group_by: "parent" -%} | ||
|
||
{%- assign nav_top_nodes = nav_parenthood | ||
| where_exp: "item", "item.name == ''" | map: "items" | first -%} | ||
|
||
{% assign nav_top_node_titles = nav_top_nodes | map: "title" -%} | ||
|
||
{%- include components/nav/children.html node=page ancestors=nav_ancestors all=true -%} | ||
|
||
{%- endunless -%} | ||
|
||
{%- if nav_children.size >= 1 -%} | ||
|
||
{%- if page.child_nav_order == 'desc' or page.child_nav_order == 'reversed' -%} | ||
{%- assign nav_children = nav_children | reverse -%} | ||
{%- endif -%} | ||
|
||
<hr> | ||
{% include toc_heading_custom.html %} | ||
<ul> | ||
{% for child in sorted_pages %} | ||
{% for nav_child in nav_children %} | ||
<li> | ||
<a href="{{ child.url | relative_url }}">{{ child.title }}</a>{% if child.summary %} - {{ child.summary }}{% endif %} | ||
<a href="{{ nav_child.url | relative_url }}">{{ nav_child.title }}</a>{% if nav_child.summary %} - {{ nav_child.summary }}{% endif %} | ||
</li> | ||
{% endfor %} | ||
{% endfor %} | ||
</ul> | ||
|
||
{%- endif -%} |
Oops, something went wrong.