navigation-menu.html.twig

Same filename in other branches
  1. 10 core/modules/navigation/templates/navigation-menu.html.twig
{% import _self as menus %}
<div class="admin-toolbar__item">
  <h4 class="visually-hidden focusable">{{ title }}</h4>
  <ul class="toolbar-block__list">
    {{ menus.menu_items(items, attributes, 0) }}
  </ul>
</div>

{% macro menu_items(items, attributes, menu_level) %}
  {% for item in items %}
    {% set item_id = ('navigation-link--' ~ item.original_link.pluginId)|clean_unique_id %}
    {% if menu_level == 0 %}
      {% if item.below is empty  %}
        <li id="{{ item_id }}" class="toolbar-block__list-item">
          {% include '@navigation/toolbar-button.html.twig' with {
            attributes: create_attribute({ 'href': item.url|render, 'data-drupal-tooltip': item.title, 'data-drupal-tooltip-class': 'admin-toolbar__tooltip' }),
            icon: item.class|clean_class,
            html_tag: 'a',
            text: item.title,
            extra_classes: 'toolbar-button--collapsible',
          } only %}
        </li>
      {% else %}
        <li id="{{ item_id }}" class="toolbar-block__list-item toolbar-popover" data-toolbar-popover>
          {% include '@navigation/toolbar-button.html.twig' with {
            action: true,
            attributes: create_attribute({'aria-expanded': 'false', 'aria-controls': item_id, 'data-toolbar-popover-control': true}),
            icon: item.class|clean_class,
            text: item.title,
            extra_classes: 'toolbar-button--expand--side toolbar-button--collapsible toolbar-popover__control',
            has_safe_triangle: TRUE,
          } only %}
          <div class="toolbar-popover__wrapper" data-toolbar-popover-wrapper inert>
            {% if item.url %}
              {{ link(item.title, item.url, create_attribute({'class': ['toolbar-popover__header', 'toolbar-button', 'toolbar-button--large', 'toolbar-button--dark']})) }}
            {% else %}
              <span class="toolbar-popover__header toolbar-button toolbar-button--large toolbar-button--dark toolbar-button--non-interactive">{{ item.title }}</span>
            {% endif %}
            <ul class="toolbar-menu toolbar-popover__menu">
              {{ menus.menu_items(item.below, attributes, 1) }}
            </ul>
          </div>
        </li>
      {% endif %}

    {% elseif menu_level == 1 %}
      <li class="toolbar-menu__item toolbar-menu__item--level-{{ menu_level }}">
        {% if item.below is empty  %}
          <a
            href="{{ item.url }}"
            class="toolbar-button"
            data-index-text="{{ item.title|first|lower }}"
          >{{ item.title }}</a>
        {% else %}
          <button
            class="toolbar-button toolbar-button--expand--down"
            data-toolbar-menu-trigger="{{ menu_level }}"
            aria-expanded="false"
            data-index-text="{{ item.title|first|lower }}"
          >
            <span class="toolbar-menu__link-action visually-hidden">{{ 'Extend'|t }}</span>
            <span class="toolbar-menu__link-title">{{ item.title }}</span>
          </button>
          <ul class="toolbar-menu toolbar-menu--level-{{ menu_level + 1 }}" inert>
            {{ menus.menu_items(item.below, attributes, menu_level + 1) }}
          </ul>
        {% endif %}
      </li>
    {% else %}
      <li class="toolbar-menu__item toolbar-menu__item--level-{{ menu_level }}">
        {% if item.below is empty  %}
          <a
            href="{{ item.url }}"
            class="toolbar-menu__link toolbar-menu__link--{{ menu_level }}"
            data-index-text="{{ item.title|first|lower }}"
          >{{ item.title }}</a>
        {% else %}
          <button
            class="toolbar-menu__link toolbar-menu__link--{{ menu_level }}"
            data-toolbar-menu-trigger="{{ menu_level }}"
            aria-expanded="false"
            data-index-text="{{ item.title|first|lower }}"
          >
            <span class="toolbar-menu__link-action visually-hidden">{{ 'Extend'|t }}</span>
            <span class="toolbar-menu__link-title">{{ item.title }}</span>
          </button>
          <ul class="toolbar-menu toolbar-menu--level-{{ menu_level + 1 }}" inert>
            {{ menus.menu_items(item.below, attributes, menu_level + 1) }}
          </ul>
        {% endif %}
      </li>
    {% endif %}
  {% endfor %}
{% endmacro %}
1 theme call to navigation-menu.html.twig
ShortcutLazyBuilder::lazyLinks in core/modules/navigation/src/ShortcutLazyBuilder.php
The #lazy_builder callback; builds shortcut navigation links.

File

core/modules/navigation/templates/navigation-menu.html.twig

View source
  1. {% import _self as menus %}
  2. <div class="admin-toolbar__item">
  3. <h4 class="visually-hidden focusable">{{ title }}</h4>
  4. <ul class="toolbar-block__list">
  5. {{ menus.menu_items(items, attributes, 0) }}
  6. </ul>
  7. </div>
  8. {% macro menu_items(items, attributes, menu_level) %}
  9. {% for item in items %}
  10. {% set item_id = ('navigation-link--' ~ item.original_link.pluginId)|clean_unique_id %}
  11. {% if menu_level == 0 %}
  12. {% if item.below is empty %}
  13. <li id="{{ item_id }}" class="toolbar-block__list-item">
  14. {% include '@navigation/toolbar-button.html.twig' with {
  15. attributes: create_attribute({ 'href': item.url|render, 'data-drupal-tooltip': item.title, 'data-drupal-tooltip-class': 'admin-toolbar__tooltip' }),
  16. icon: item.class|clean_class,
  17. html_tag: 'a',
  18. text: item.title,
  19. extra_classes: 'toolbar-button--collapsible',
  20. } only %}
  21. </li>
  22. {% else %}
  23. <li id="{{ item_id }}" class="toolbar-block__list-item toolbar-popover" data-toolbar-popover>
  24. {% include '@navigation/toolbar-button.html.twig' with {
  25. action: true,
  26. attributes: create_attribute({'aria-expanded': 'false', 'aria-controls': item_id, 'data-toolbar-popover-control': true}),
  27. icon: item.class|clean_class,
  28. text: item.title,
  29. extra_classes: 'toolbar-button--expand--side toolbar-button--collapsible toolbar-popover__control',
  30. has_safe_triangle: TRUE,
  31. } only %}
  32. <div class="toolbar-popover__wrapper" data-toolbar-popover-wrapper inert>
  33. {% if item.url %}
  34. {{ link(item.title, item.url, create_attribute({'class': ['toolbar-popover__header', 'toolbar-button', 'toolbar-button--large', 'toolbar-button--dark']})) }}
  35. {% else %}
  36. <span class="toolbar-popover__header toolbar-button toolbar-button--large toolbar-button--dark toolbar-button--non-interactive">{{ item.title }}</span>
  37. {% endif %}
  38. <ul class="toolbar-menu toolbar-popover__menu">
  39. {{ menus.menu_items(item.below, attributes, 1) }}
  40. </ul>
  41. </div>
  42. </li>
  43. {% endif %}
  44. {% elseif menu_level == 1 %}
  45. <li class="toolbar-menu__item toolbar-menu__item--level-{{ menu_level }}">
  46. {% if item.below is empty %}
  47. <a
  48. href="{{ item.url }}"
  49. class="toolbar-button"
  50. data-index-text="{{ item.title|first|lower }}"
  51. >{{ item.title }}</a>
  52. {% else %}
  53. <button
  54. class="toolbar-button toolbar-button--expand--down"
  55. data-toolbar-menu-trigger="{{ menu_level }}"
  56. aria-expanded="false"
  57. data-index-text="{{ item.title|first|lower }}"
  58. >
  59. <span class="toolbar-menu__link-action visually-hidden">{{ 'Extend'|t }}</span>
  60. <span class="toolbar-menu__link-title">{{ item.title }}</span>
  61. </button>
  62. <ul class="toolbar-menu toolbar-menu--level-{{ menu_level + 1 }}" inert>
  63. {{ menus.menu_items(item.below, attributes, menu_level + 1) }}
  64. </ul>
  65. {% endif %}
  66. </li>
  67. {% else %}
  68. <li class="toolbar-menu__item toolbar-menu__item--level-{{ menu_level }}">
  69. {% if item.below is empty %}
  70. <a
  71. href="{{ item.url }}"
  72. class="toolbar-menu__link toolbar-menu__link--{{ menu_level }}"
  73. data-index-text="{{ item.title|first|lower }}"
  74. >{{ item.title }}</a>
  75. {% else %}
  76. <button
  77. class="toolbar-menu__link toolbar-menu__link--{{ menu_level }}"
  78. data-toolbar-menu-trigger="{{ menu_level }}"
  79. aria-expanded="false"
  80. data-index-text="{{ item.title|first|lower }}"
  81. >
  82. <span class="toolbar-menu__link-action visually-hidden">{{ 'Extend'|t }}</span>
  83. <span class="toolbar-menu__link-title">{{ item.title }}</span>
  84. </button>
  85. <ul class="toolbar-menu toolbar-menu--level-{{ menu_level + 1 }}" inert>
  86. {{ menus.menu_items(item.below, attributes, menu_level + 1) }}
  87. </ul>
  88. {% endif %}
  89. </li>
  90. {% endif %}
  91. {% endfor %}
  92. {% endmacro %}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.