From 960d347f687aa75a6a0d6ec8ecb43d206da9be6d Mon Sep 17 00:00:00 2001
From: Patrick Marsceill <patrick.marsceill@gmail.com>
Date: Mon, 19 Nov 2018 13:28:59 -0500
Subject: [PATCH] Support 3 levels of pages

---
 _includes/nav.html                  | 56 +++++++++++++++++++----------
 _layouts/default.html               |  9 +++--
 _sass/navigation.scss               | 10 ++++++
 docs/ui-components/ui-components.md |  5 ++-
 docs/utilities/layout.md            |  1 +
 docs/utilities/utilities.md         |  3 +-
 6 files changed, 58 insertions(+), 26 deletions(-)

diff --git a/_includes/nav.html b/_includes/nav.html
index 170fcfbd..4ebd91f3 100644
--- a/_includes/nav.html
+++ b/_includes/nav.html
@@ -1,26 +1,44 @@
 <nav>
   <ul class="navigation-list">
-  {% assign pages_list = site.html_pages | sort:"nav_order" %}
+    {% assign pages_list = site.html_pages | sort:"nav_order" %}
     {% for node in pages_list %}
-    {% unless node.nav_exclude %}
-      <li class="navigation-list-item{% if page.url == node.url %} active{% endif %} js-side-nav-item">
-        {% if node.parent == nil or node.has_children == true %}
-        <a href="{{ node.url | absolute_url }}" class="navigation-list-link{% if page.url == node.url or (page.parent != nil and page.parent == node.parent) %} active{% endif %}">{{ node.title }}</a>
-          {% if (node.has_children == true and node.parent == page.parent) %}
-            {% assign children_list = site.html_pages | sort:"nav_order" %}
-            <ul class="navigation-list-child-list">
-              {% for child in children_list %}
-                {% if child.parent == node.parent and child.title != node.title %}
-                <li class="navigation-list-item {% if page.url == child.url %} active{% endif %}">
-                  <a href="{{ child.url | absolute_url }}" class="navigation-list-link{% if page.url == child.url %} active{% endif %}">{{ child.title }}</a>
-                </li>
-                {% endif %}
-              {% endfor %}
-            </ul>
-          {% endif %}
+      {% unless node.nav_exclude %}
+        {% if node.parent == nil %}
+          <li class="navigation-list-item{% if page.url == node.url or page.parent == node.title or page.grand_parent == node.title %} active{% endif %}">
+            {% if page.parent == node.title or page.grand_parent == node.title %}
+              {% assign first_level_url = node.url | absolute_url %}
+            {% endif %}
+            <a href="{{ node.url | absolute_url }}" class="navigation-list-link{% if page.url == node.url %} active{% endif %}">{{ node.title }}</a>
+            {% if node.has_children %}
+              {% assign children_list = site.html_pages | sort:"nav_order" %}
+              <ul class="navigation-list-child-list ">
+                {% for child in children_list %}
+                  {% if child.parent == node.title %}
+                    <li class="navigation-list-item {% if page.url == child.url or page.parent == child.title %} active{% endif %}">
+                      {% if page.url == child.url or page.parent == child.title %}
+                        {% assign second_level_url = child.url | absolute_url %}
+                      {% endif %}
+                      <a href="{{ child.url | absolute_url }}" class="navigation-list-link{% if page.url == child.url %} active{% endif %}">{{ child.title }}</a>
+                      {% if child.has_children %}
+                        {% assign grand_children_list = site.html_pages | sort:"nav_order" %}
+                        <ul class="navigation-list-child-list">
+                          {% for grand_child in grand_children_list %}
+                            {% if grand_child.parent == child.title %}
+                              <li class="navigation-list-item {% if page.url == grand_child.url %} active{% endif %}">
+                                <a href="{{ grand_child.url | absolute_url }}" class="navigation-list-link{% if page.url == grand_child.url %} active{% endif %}">{{ grand_child.title }}</a>
+                              </li>
+                            {% endif %}
+                          {% endfor %}
+                        </ul>
+                      {% endif %}
+                    </li>
+                  {% endif %}
+                {% endfor %}
+              </ul>
+            {% endif %}
+          </li>
         {% endif %}
-      </li>
-    {% endunless %}
+      {% endunless %}
     {% endfor %}
   </ul>
 </nav>
diff --git a/_layouts/default.html b/_layouts/default.html
index 016725a1..d6e61059 100644
--- a/_layouts/default.html
+++ b/_layouts/default.html
@@ -37,10 +37,15 @@
       </div>
       <div class="main-content">
         {% unless page.url == "/" %}
-          {% if page.parent != nil and page.parent != page.title %}
+          {% if page.parent %}
             <nav class="breadcrumb-nav">
               <ol class="breadcrumb-nav-list">
-                <li class="breadcrumb-nav-list-item"><a href="{{ site.url }}{{ site.baseurl }}/{{ page.parent | slugify }}">{{ page.parent }}</a></li>
+                {% if page.grand_parent %}
+                  <li class="breadcrumb-nav-list-item"><a href="{{ first_level_url }}">{{ page.grand_parent }}</a></li>
+                  <li class="breadcrumb-nav-list-item"><a href="{{ second_level_url }}">{{ page.parent }}</a></li>
+                {% else %}
+                  <li class="breadcrumb-nav-list-item"><a href="{{ first_level_url }}">{{ page.parent }}</a></li>
+                {% endif %}
                 <li class="breadcrumb-nav-list-item"><span>{{ page.title }}</span></li>
               </ol>
             </nav>
diff --git a/_sass/navigation.scss b/_sass/navigation.scss
index 0a5fb7d3..12dedbdf 100644
--- a/_sass/navigation.scss
+++ b/_sass/navigation.scss
@@ -64,6 +64,16 @@
   @include mq(md) {
     @include fs-3;
   }
+
+  .navigation-list-child-list {
+    display: none;
+  }
+
+  &.active {
+    .navigation-list-child-list {
+      display: block;
+    }
+  }
 }
 
 .navigation-list-link {
diff --git a/docs/ui-components/ui-components.md b/docs/ui-components/ui-components.md
index 00e34b84..56ecf9ea 100644
--- a/docs/ui-components/ui-components.md
+++ b/docs/ui-components/ui-components.md
@@ -1,10 +1,9 @@
 ---
 layout: default
-title: UI Components
+title: "UI Components"
 nav_order: 3
 has_children: true
-parent: UI Components
-permalink: /ui-components
+permalink: /docs/ui-components
 ---
 
 # UI Components
diff --git a/docs/utilities/layout.md b/docs/utilities/layout.md
index 33f49516..a1b564ef 100644
--- a/docs/utilities/layout.md
+++ b/docs/utilities/layout.md
@@ -3,6 +3,7 @@ layout: default
 title: Layout
 nav_order: 2
 parent: Utilities
+has_children: true
 ---
 
 # Layout Utilities
diff --git a/docs/utilities/utilities.md b/docs/utilities/utilities.md
index 58cdf018..b3683375 100644
--- a/docs/utilities/utilities.md
+++ b/docs/utilities/utilities.md
@@ -2,9 +2,8 @@
 layout: default
 title: Utilities
 nav_order: 4
-parent: Utilities
 has_children: true
-permalink: /utilities
+permalink: docs/utilities
 ---
 
 # Utilities
-- 
GitLab