{%- comment -%} Include as: {%- include components/breadcrumbs.html -%} Depends on: page, site. Results in: HTML for the breadcrumbs component. Overwrites: node, pages_list, parent_page, grandparent_page. {%- endcomment -%} {%- if page.url != "/" and page.parent -%} {%- capture 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 -%} "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: "" | append: "" -%} {%- assign nav_breadcrumbs = nav_breadcrumbs | push: nav_breadcrumb_link -%} {%- endif -%} {%- if nav_split_next contains "" -%} {%- assign nav_list_end_less = nav_split_next | remove: "" -%} {%- 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 -%} {%- if node.has_children and page.grand_parent -%} {%- 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 -%} {%- elsif node.has_children and node.title == page.parent and node.parent == nil -%} {%- assign parent_page = node -%} {%- break -%} {%- endif -%} {%- endfor -%} {%- capture nav_parent_link -%} {{ page.parent }} {%- endcapture -%} {%- if page.grand_parent %} {%- capture nav_grandparent_link -%} {{ page.grand_parent }} {%- endcapture -%} {%- endif -%} {%- endif -%} {%- endif -%}