_includes/components/breadcrumbs.html in just-the-docs-0.7.0 vs _includes/components/breadcrumbs.html in just-the-docs-0.8.0
- old
+ new
@@ -6,12 +6,95 @@
node, pages_list, parent_page, grandparent_page.
{%- endcomment -%}
{%- if page.url != "/" and page.parent -%}
- {%- assign pages_list = site[page.collection] | default: site.html_pages -%}
+{%- capture nav_list_link -%}
+<a href="{{ page.url | relative_url }}" class="nav-list-link">
+{%- endcapture -%}
+{%- capture site_nav -%}
+{%- include_cached components/site_nav.html -%}
+{%- 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] | trim -%}
+
+ {%- 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 -%}
+
+ {%- assign nav_parent_link = nav_breadcrumbs[-1] -%}
+ {%- assign nav_grandparent_link = nav_breadcrumbs[-2] -%}
+
+{%- else -%}
+
+ {%- 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 pages_list = site[page.collection] | default: site.html_pages -%}
+
{%- assign parent_page = nil -%}
{%- assign grandparent_page = nil -%}
{%- for node in pages_list -%}
@@ -33,18 +116,28 @@
{%- break -%}
{%- endif -%}
{%- 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 -%}
+
<nav aria-label="Breadcrumb" class="breadcrumb-nav">
<ol class="breadcrumb-nav-list">
- {% if page.parent -%}
- {%- if page.grand_parent %}
- <li class="breadcrumb-nav-list-item"><a href="{{ grandparent_page.url | relative_url }}">{{ page.grand_parent }}</a></li>
+ {%- if nav_grandparent_link %}
+ <li class="breadcrumb-nav-list-item">{{ nav_grandparent_link }}</li>
{%- endif %}
- <li class="breadcrumb-nav-list-item"><a href="{{ parent_page.url | relative_url }}">{{ page.parent }}</a></li>
- {% endif -%}
+ <li class="breadcrumb-nav-list-item">{{ nav_parent_link }}</li>
<li class="breadcrumb-nav-list-item"><span>{{ page.title }}</span></li>
</ol>
</nav>
{%- endif -%}