aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/templates/partials/nav-item.html
diff options
context:
space:
mode:
author简律纯 <i@jyunko.cn>2023-10-07 06:48:07 +0800
committer简律纯 <i@jyunko.cn>2023-10-07 06:48:07 +0800
commit991fd7a6d67ee017c57beaaa21fc31c4bee7944d (patch)
treee895202203fcaa50b0052f60ef6fc7d6d2928cf9 /src/templates/partials/nav-item.html
parentd62900046bb6f754a8e6e7e670a66a90134055d9 (diff)
downloadinfini-991fd7a6d67ee017c57beaaa21fc31c4bee7944d.tar.gz
infini-991fd7a6d67ee017c57beaaa21fc31c4bee7944d.zip
feat(version): versions
Diffstat (limited to 'src/templates/partials/nav-item.html')
-rw-r--r--src/templates/partials/nav-item.html249
1 files changed, 249 insertions, 0 deletions
diff --git a/src/templates/partials/nav-item.html b/src/templates/partials/nav-item.html
new file mode 100644
index 00000000..24d74a1a
--- /dev/null
+++ b/src/templates/partials/nav-item.html
@@ -0,0 +1,249 @@
+<!--
+ Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to
+ deal in the Software without restriction, including without limitation the
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ IN THE SOFTWARE.
+-->
+
+<!-- Render navigation link status -->
+{% macro render_status(nav_item, type) %}
+ {% set class = "md-status md-status--" ~ type %}
+
+ <!-- Render icon with title (or tooltip), if given -->
+ {% if config.extra.status and config.extra.status[type] %}
+ <span
+ class="{{ class }}"
+ title="{{ config.extra.status[type] }}"
+ >
+ </span>
+
+ <!-- Render icon only -->
+ {% else %}
+ <span class="{{ class }}"></span>
+ {% endif %}
+{% endmacro %}
+
+<!-- Render navigation link content -->
+{% macro render_content(nav_item, ref = nav_item) %}
+
+ <!-- Navigation link icon -->
+ {% if nav_item.is_page and nav_item.meta.icon %}
+ {% include ".icons/" ~ nav_item.meta.icon ~ ".svg" %}
+ {% endif %}
+
+ <!-- Navigation link title -->
+ <span class="md-ellipsis">
+ {{ ref.title }}
+ </span>
+
+ <!-- Navigation link status -->
+ {% if nav_item.is_page and nav_item.meta.status %}
+ {{ render_status(nav_item, nav_item.meta.status) }}
+ {% endif %}
+{% endmacro %}
+
+<!-- Render navigation item (pruned) -->
+{% macro render_pruned(nav_item, ref = nav_item) %}
+ {% set first = nav_item.children | first %}
+
+ <!-- Recurse, if the first item has further nested items -->
+ {% if first and first.children %}
+ {{ render_pruned(first, ref) }}
+
+ <!-- Navigation link -->
+ {% else %}
+ <a href="{{ first.url | url }}" class="md-nav__link">
+ {{ render_content(ref) }}
+
+ <!-- Only render toggle if there's at least one nested item -->
+ {% if nav_item.children | length > 0 %}
+ <span class="md-nav__icon md-icon"></span>
+ {% endif %}
+ </a>
+ {% endif %}
+{% endmacro %}
+
+<!-- Render navigation item -->
+{% macro render(nav_item, path, level) %}
+
+ <!-- Determine classes -->
+ {% set class = "md-nav__item" %}
+ {% if nav_item.active %}
+ {% set class = class ~ " md-nav__item--active" %}
+ {% endif %}
+
+ <!-- Navigation item with nested items -->
+ {% if nav_item.children %}
+
+ <!-- Determine all nested items that are index pages -->
+ {% set indexes = [] %}
+ {% if "navigation.indexes" in features %}
+ {% for nav_item in nav_item.children %}
+ {% if nav_item.is_index and not index is defined %}
+ {% set _ = indexes.append(nav_item) %}
+ {% endif %}
+ {% endfor %}
+ {% endif %}
+
+ <!-- Determine whether to render item as a section -->
+ {% set tabs = "navigation.tabs" in features %}
+ {% set sections = "navigation.sections" in features %}
+ {% if tabs and level == 1 or sections and tabs >= level - 1 %}
+ {% set class = class ~ " md-nav__item--section" %}
+ {% set is_section = true %}
+
+ <!-- Determine whether to prune inactive item -->
+ {% elif not nav_item.active and "navigation.prune" in features %}
+ {% set class = class ~ " md-nav__item--pruned" %}
+ {% set is_pruned = true %}
+ {% endif %}
+
+ <!-- Nested navigation item -->
+ <li class="{{ class }} md-nav__item--nested">
+ {% if not is_pruned %}
+ {% set checked = "checked" if nav_item.active %}
+
+ <!-- Determine checked and indeterminate state -->
+ {% set is_expanded = "navigation.expand" in features %}
+ {% if is_expanded and not checked %}
+ {% set indeterminate = "md-toggle--indeterminate" %}
+ {% endif %}
+
+ <!-- Active checkbox expands items contained within nested section -->
+ <input
+ class="md-nav__toggle md-toggle {{ indeterminate }}"
+ type="checkbox"
+ id="{{ path }}"
+ {{ checked }}
+ />
+
+ <!-- Toggle to expand nested items -->
+ {% if not indexes %}
+ {% set tabindex = "0" if not is_section %}
+ <label
+ class="md-nav__link"
+ for="{{ path }}"
+ id="{{ path }}_label"
+ tabindex="{{ tabindex }}"
+ >
+ {{ render_content(nav_item) }}
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <!-- Toggle to expand nested items with link to index page -->
+ {% else %}
+ {% set index = indexes | first %}
+ {% set class = "md-nav__link--active" if index == page %}
+ <div class="md-nav__link md-nav__container">
+ <a
+ href="{{ index.url | url }}"
+ class="md-nav__link {{ class }}"
+ >
+ {{ render_content(index, nav_item) }}
+ </a>
+
+ <!-- Only render toggle if there's at least one more page -->
+ {% if nav_item.children | length > 1 %}
+ {% set tabindex = "0" if not is_section %}
+ <label
+ class="md-nav__link {{ class }}"
+ for="{{ path }}"
+ id="{{ path }}_label"
+ tabindex="{{ tabindex }}"
+ >
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+ {% endif %}
+ </div>
+ {% endif %}
+
+ <!-- Nested navigation -->
+ <nav
+ class="md-nav"
+ data-md-level="{{ level }}"
+ aria-labelledby="{{ path }}_label"
+ aria-expanded="{{ nav_item.active | tojson }}"
+ >
+ <label class="md-nav__title" for="{{ path }}">
+ <span class="md-nav__icon md-icon"></span>
+ {{ nav_item.title }}
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+ <!-- Nested navigation item -->
+ {% for nav_item in nav_item.children %}
+ {% if not indexes or nav_item != indexes | first %}
+ {{ render(nav_item, path ~ "_" ~ loop.index, level + 1) }}
+ {% endif %}
+ {% endfor %}
+ </ul>
+ </nav>
+
+ <!-- Pruned navigation item -->
+ {% else %}
+ {{ render_pruned(nav_item) }}
+ {% endif %}
+ </li>
+
+ <!-- Currently active page -->
+ {% elif nav_item == page %}
+ <li class="{{ class }}">
+ {% set toc = page.toc %}
+
+ <!-- State toggle -->
+ <input
+ class="md-nav__toggle md-toggle"
+ type="checkbox"
+ id="__toc"
+ />
+
+ <!-- Hack: see partials/toc.html for more information -->
+ {% set first = toc | first %}
+ {% if first and first.level == 1 %}
+ {% set toc = first.children %}
+ {% endif %}
+
+ <!-- Navigation link to table of contents -->
+ {% if toc %}
+ <label class="md-nav__link md-nav__link--active" for="__toc">
+ {{ render_content(nav_item) }}
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+ {% endif %}
+ <a
+ href="{{ nav_item.url | url }}"
+ class="md-nav__link md-nav__link--active"
+ >
+ {{ render_content(nav_item) }}
+ </a>
+
+ <!-- Table of contents -->
+ {% if toc %}
+ {% include "partials/toc.html" %}
+ {% endif %}
+ </li>
+
+ <!-- Navigation item -->
+ {% else %}
+ <li class="{{ class }}">
+ <a href="{{ nav_item.url | url }}" class="md-nav__link">
+ {{ render_content(nav_item) }}
+ </a>
+ </li>
+ {% endif %}
+{% endmacro %}