mirror of
https://github.com/squidfunk/mkdocs-material.git
synced 2024-06-14 11:52:32 +03:00
81a13f6bc6
The number of calls to sub-templates when rendering the navigation is O(n^2) relative to the number of pages. This is the only such instance, which is why I think this is worth optimizing. The optimization here doesn't improve the complexity, it just removes the overhead of instantiating a new Jinja template for each of these calls. E.g. for 710 pages on the site, the number of calls to Jinja's `get_template` (implying `new_context` and others) crosses a million ==(710**2)*2. They're not expensive but also not super cheap, and add up to a big percentage of overall site build times.
69 lines
2.5 KiB
HTML
69 lines
2.5 KiB
HTML
{#-
|
|
This file was automatically generated - do not edit
|
|
-#}
|
|
{% set features = config.theme.features or [] %}
|
|
{% macro do_nav_item(nav_item, path, level) %}
|
|
{% set class = "md-nav__item" %}
|
|
{% if nav_item.active %}
|
|
{% set class = class ~ " md-nav__item--active" %}
|
|
{% endif %}
|
|
{% if nav_item.children %}
|
|
{% if "navigation.sections" in features and level == 1 + (
|
|
"navigation.tabs" in features
|
|
) %}
|
|
{% set class = class ~ " md-nav__item--section" %}
|
|
{% endif %}
|
|
<li class="{{ class }} md-nav__item--nested">
|
|
{% set checked = "checked" if nav_item.active %}
|
|
{% if "navigation.expand" in features and not checked %}
|
|
<input class="md-nav__toggle md-toggle" data-md-toggle="{{ path }}" data-md-state="indeterminate" type="checkbox" id="{{ path }}" checked>
|
|
{% else %}
|
|
<input class="md-nav__toggle md-toggle" data-md-toggle="{{ path }}" type="checkbox" id="{{ path }}" {{ checked }}>
|
|
{% endif %}
|
|
<label class="md-nav__link" for="{{ path }}">
|
|
{{ nav_item.title }}
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
<nav class="md-nav" aria-label="{{ nav_item.title }}" data-md-level="{{ level }}">
|
|
<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>
|
|
{% set base = path %}
|
|
{% for nav_item in nav_item.children %}
|
|
{{ do_nav_item(nav_item, path = base ~ "-" ~ loop.index, level = level + 1) }}
|
|
{% endfor %}
|
|
</ul>
|
|
</nav>
|
|
</li>
|
|
{% elif nav_item == page %}
|
|
<li class="{{ class }}">
|
|
{% set toc = page.toc %}
|
|
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
|
|
{% if toc | first is defined and "\x3ch1 id=" in page.content %}
|
|
{% set toc = (toc | first).children %}
|
|
{% endif %}
|
|
{% if toc | first is defined %}
|
|
<label class="md-nav__link md-nav__link--active" for="__toc">
|
|
{{ nav_item.title }}
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
{% endif %}
|
|
<a href="{{ nav_item.url | url }}" class="md-nav__link md-nav__link--active">
|
|
{{ nav_item.title }}
|
|
</a>
|
|
{% if toc | first is defined %}
|
|
{% include "partials/toc.html" %}
|
|
{% endif %}
|
|
</li>
|
|
{% else %}
|
|
<li class="{{ class }}">
|
|
<a href="{{ nav_item.url | url }}" class="md-nav__link">
|
|
{{ nav_item.title }}
|
|
</a>
|
|
</li>
|
|
{% endif %}
|
|
{% endmacro %}
|
|
{{ do_nav_item(nav_item, path, level) }}
|