diff options
| author | 2023-10-07 06:48:07 +0800 | |
|---|---|---|
| committer | 2023-10-07 06:48:07 +0800 | |
| commit | 991fd7a6d67ee017c57beaaa21fc31c4bee7944d (patch) | |
| tree | e895202203fcaa50b0052f60ef6fc7d6d2928cf9 /src/templates/partials/nav-item.html | |
| parent | d62900046bb6f754a8e6e7e670a66a90134055d9 (diff) | |
| download | infini-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.html | 249 |
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 %} |
