navigation-menu.html.twig

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

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