diff --git a/core/config/schema/core.data_types.schema.yml b/core/config/schema/core.data_types.schema.yml
index 354cf2e..3615197 100644
--- a/core/config/schema/core.data_types.schema.yml
+++ b/core/config/schema/core.data_types.schema.yml
@@ -161,12 +161,6 @@ theme_settings:
node_user_picture:
type: boolean
label: 'User pictures in posts'
- main_menu:
- type: boolean
- label: 'Main menu'
- secondary_menu:
- type: boolean
- label: 'Secondary menu'
slogan:
type: boolean
label: 'Site slogan'
diff --git a/core/includes/.theme.inc.swp b/core/includes/.theme.inc.swp
new file mode 100644
index 0000000..6477958
Binary files /dev/null and b/core/includes/.theme.inc.swp differ
diff --git a/core/includes/common.inc b/core/includes/common.inc
index fde8b06..3f7b3aa 100644
--- a/core/includes/common.inc
+++ b/core/includes/common.inc
@@ -2501,20 +2501,6 @@ function drupal_prepare_page($page) {
\Drupal::moduleHandler()->alter('page', $page);
\Drupal::theme()->alter('page', $page);
- // The "main" and "secondary" menus are never part of the page-level render
- // array and therefore their cache tags will never bubble up into the page
- // cache, even though they should be. This happens because they're rendered
- // directly by the theme system.
- // @todo Remove this once https://drupal.org/node/1869476 lands.
- if (theme_get_setting('features.main_menu') && count(menu_main_menu())) {
- $main_links_source = _menu_get_links_source('main_links', 'main');
- $page['page_top']['#cache']['tags']['menu'][$main_links_source] = $main_links_source;
- }
- if (theme_get_setting('features.secondary_menu') && count(menu_secondary_menu())) {
- $secondary_links_source = _menu_get_links_source('secondary_links', 'account');
- $page['page_top']['#cache']['tags']['menu'][$secondary_links_source] = $secondary_links_source;
- }
-
// If no module has taken care of the main content, add it to the page now.
// This allows the site to still be usable even if no modules that
// control page regions (for example, the Block module) are enabled.
diff --git a/core/includes/menu.inc b/core/includes/menu.inc
index 51dcd9a..2afdaa9 100644
--- a/core/includes/menu.inc
+++ b/core/includes/menu.inc
@@ -311,23 +311,6 @@
* Implements template_preprocess_HOOK() for theme_menu_tree().
*/
function template_preprocess_menu_tree(&$variables) {
- if (isset($variables['tree']['#heading'])) {
- $variables['heading'] = $variables['tree']['#heading'];
- $heading = &$variables['heading'];
- // Convert a string heading into an array, using a H2 tag by default.
- if (is_string($heading)) {
- $heading = array('text' => $heading);
- }
- // Merge in default array properties into $heading.
- $heading += array(
- 'level' => 'h2',
- 'attributes' => array(),
- );
- // Convert the attributes array into an Attribute object.
- $heading['attributes'] = new Attribute($heading['attributes']);
- $heading['text'] = String::checkPlain($heading['text']);
- }
-
if (isset($variables['tree']['#attributes'])) {
$variables['attributes'] = new Attribute($variables['tree']['#attributes']);
}
@@ -337,7 +320,6 @@ function template_preprocess_menu_tree(&$variables) {
if (!isset($variables['attributes']['class'])) {
$variables['attributes']['class'] = array();
}
- $variables['attributes']['class'][] = 'menu';
$variables['tree'] = $variables['tree']['#children'];
}
@@ -472,72 +454,6 @@ function menu_list_system_menus() {
}
/**
- * Returns an array of links to be rendered as the Main menu.
- */
-function menu_main_menu() {
- $main_links_source = _menu_get_links_source('main_links', 'main');
- return menu_navigation_links($main_links_source);
-}
-
-/**
- * Returns an array of links to be rendered as the Secondary links.
- */
-function menu_secondary_menu() {
- $main_links_source = _menu_get_links_source('main_links', 'main');
- $secondary_links_source = _menu_get_links_source('secondary_links', 'account');
-
- // If the secondary menu source is set as the primary menu, we display the
- // second level of the primary menu.
- if ($secondary_links_source == $main_links_source) {
- return menu_navigation_links($main_links_source, 1);
- }
- else {
- return menu_navigation_links($secondary_links_source, 0);
- }
-}
-
-/**
- * Returns the source of links of a menu.
- *
- * @param string $name
- * A string configuration key of menu link source.
- * @param string $default
- * Default menu name.
- *
- * @return string
- * Returns menu name, if exist
- */
-function _menu_get_links_source($name, $default) {
- $config = \Drupal::config('menu_ui.settings');
- return \Drupal::moduleHandler()->moduleExists('menu_ui') ? $config->get($name) : $default;
-}
-
-/**
- * Builds a renderable array for a navigation menu.
- *
- * @param string $menu_name
- * The name of the menu.
- * @param int $level
- * Optional, the depth of the menu to be returned.
- *
- * @return array
- * A renderable array.
- */
-function menu_navigation_links($menu_name, $level = 0) {
- $menu_tree = \Drupal::menuTree();
- $parameters = $menu_tree->getCurrentRouteMenuTreeParameters($menu_name);
- $parameters->setMaxDepth($level + 1);
- $tree = $menu_tree->load($menu_name, $parameters);
- $manipulators = array(
- array('callable' => 'menu.default_tree_manipulators:checkAccess'),
- array('callable' => 'menu.default_tree_manipulators:generateIndexAndSort'),
- array('callable' => 'menu.default_tree_manipulators:extractSubtreeOfActiveTrail', 'args' => array($level)),
- );
- $tree = $menu_tree->transform($tree, $manipulators);
- return $menu_tree->build($tree);
-}
-
-/**
* Collects the local tasks (tabs), action links, and the root path.
*
* @param int $level
diff --git a/core/includes/theme.inc b/core/includes/theme.inc
index 3f6d623..f49c169 100644
--- a/core/includes/theme.inc
+++ b/core/includes/theme.inc
@@ -1784,8 +1784,6 @@ function template_preprocess_page(&$variables) {
$variables['site_slogan'] = (theme_get_setting('features.slogan') ? Xss::filterAdmin($site_config->get('slogan')) : '');
if (!defined('MAINTENANCE_MODE')) {
- $variables['main_menu'] = theme_get_setting('features.main_menu') ? menu_main_menu() : array();
- $variables['secondary_menu'] = theme_get_setting('features.secondary_menu') ? menu_secondary_menu() : array();
$variables['action_links'] = menu_get_local_actions();
$variables['tabs'] = menu_local_tabs();
@@ -1803,33 +1801,11 @@ function template_preprocess_page(&$variables) {
}
}
else {
- $variables['main_menu'] = array();
- $variables['secondary_menu'] = array();
$variables['action_links'] = array();
$variables['tabs'] = array();
$variables['feed_icons'] = '';
}
- // Pass the main menu and secondary menu to the template as render arrays.
- if (!empty($variables['main_menu'])) {
- $variables['main_menu']['#heading'] = array(
- 'text' => t('Main menu'),
- 'attributes' => array(
- 'id' => 'links__system_main_menu',
- 'class' => array('visually-hidden'),
- ),
- );
- }
- if (!empty($variables['secondary_menu'])) {
- $variables['secondary_menu']['#heading'] = array(
- 'text' => t('Secondary menu'),
- 'attributes' => array(
- 'id' => 'links__system_secondary_menu',
- 'class' => array('visually-hidden'),
- ),
- );
- }
-
if ($node = \Drupal::routeMatch()->getParameter('node')) {
$variables['node'] = $node;
}
diff --git a/core/lib/Drupal/Core/Extension/ThemeHandler.php b/core/lib/Drupal/Core/Extension/ThemeHandler.php
index f42f1bd..4a5160d 100644
--- a/core/lib/Drupal/Core/Extension/ThemeHandler.php
+++ b/core/lib/Drupal/Core/Extension/ThemeHandler.php
@@ -35,8 +35,6 @@ class ThemeHandler implements ThemeHandlerInterface {
'node_user_picture',
'comment_user_picture',
'comment_user_verification',
- 'main_menu',
- 'secondary_menu',
);
/**
diff --git a/core/lib/Drupal/Core/Menu/DefaultMenuLinkTreeManipulators.php b/core/lib/Drupal/Core/Menu/DefaultMenuLinkTreeManipulators.php
index 0d6c995..29fa9bc 100644
--- a/core/lib/Drupal/Core/Menu/DefaultMenuLinkTreeManipulators.php
+++ b/core/lib/Drupal/Core/Menu/DefaultMenuLinkTreeManipulators.php
@@ -234,31 +234,4 @@ public function flatten(array $tree) {
return $tree;
}
- /**
- * Extracts a subtree of the active trail.
- *
- * @param \Drupal\Core\Menu\MenuLinkTreeElement[] $tree
- * The menu link tree to manipulate.
- * @param int $level
- * The level in the active trail to extract.
- *
- * @return \Drupal\Core\Menu\MenuLinkTreeElement[]
- * The manipulated menu link tree.
- */
- public function extractSubtreeOfActiveTrail(array $tree, $level) {
- // Go down the active trail until the right level is reached.
- while ($level-- > 0 && $tree) {
- // Loop through the current level's elements until we find one that is in
- // the active trail.
- while ($element = array_shift($tree)) {
- if ($element->inActiveTrail) {
- // If the element is in the active trail, we continue in the subtree.
- $tree = $element->subtree;
- break;
- }
- }
- }
- return $tree;
- }
-
}
diff --git a/core/modules/block/src/Tests/BlockHtmlTest.php b/core/modules/block/src/Tests/BlockHtmlTest.php
index b6cb078..955955a 100644
--- a/core/modules/block/src/Tests/BlockHtmlTest.php
+++ b/core/modules/block/src/Tests/BlockHtmlTest.php
@@ -48,7 +48,7 @@ function testHtml() {
$this->assertFieldByXPath('//div[@id="block-test-html-block" and @data-custom-attribute="foo"]', NULL, 'HTML ID and attributes for test block are valid and on the same DOM element.');
// Ensure expected markup for a menu block.
- $elements = $this->xpath('//div[contains(@class, :div-class)]/div/ul[contains(@class, :ul-class)]/li', array(':div-class' => 'block-system', ':ul-class' => 'menu'));
+ $elements = $this->xpath('//nav[contains(@class, :nav-class)]/div/ul[contains(@class, :ul-class)]/li', array(':nav-class' => 'block-menu', ':ul-class' => 'menu'));
$this->assertTrue(!empty($elements), 'The proper block markup was found.');
}
diff --git a/core/modules/menu_ui/config/install/menu_ui.settings.yml b/core/modules/menu_ui/config/install/menu_ui.settings.yml
index a79ac97..c3ee6fb 100644
--- a/core/modules/menu_ui/config/install/menu_ui.settings.yml
+++ b/core/modules/menu_ui/config/install/menu_ui.settings.yml
@@ -1,3 +1 @@
-main_links: main
-secondary_links: account
override_parent_selector: false
diff --git a/core/modules/menu_ui/config/schema/menu_ui.schema.yml b/core/modules/menu_ui/config/schema/menu_ui.schema.yml
index 7855ba3..ed1fef8 100644
--- a/core/modules/menu_ui/config/schema/menu_ui.schema.yml
+++ b/core/modules/menu_ui/config/schema/menu_ui.schema.yml
@@ -4,12 +4,6 @@ menu_ui.settings:
type: mapping
label: 'Menu settings'
mapping:
- main_links:
- type: string
- label: 'Main links'
- secondary_links:
- type: string
- label: 'Source for secondary links'
override_parent_selector:
type: boolean
label: 'Override parent selector'
diff --git a/core/modules/menu_ui/menu_ui.links.task.yml b/core/modules/menu_ui/menu_ui.links.task.yml
index d9f1937..10dd8d0 100644
--- a/core/modules/menu_ui/menu_ui.links.task.yml
+++ b/core/modules/menu_ui/menu_ui.links.task.yml
@@ -7,9 +7,3 @@ menu_ui.overview_page:
title: 'List'
route_name: menu_ui.overview_page
base_route: menu_ui.overview_page
-
-menu_ui.settings:
- title: 'Settings'
- route_name: menu_ui.settings
- base_route: menu_ui.overview_page
- weight: 100
diff --git a/core/modules/menu_ui/menu_ui.routing.yml b/core/modules/menu_ui/menu_ui.routing.yml
index 1b431e9..97fd744 100644
--- a/core/modules/menu_ui/menu_ui.routing.yml
+++ b/core/modules/menu_ui/menu_ui.routing.yml
@@ -1,11 +1,3 @@
-menu_ui.settings:
- path: '/admin/structure/menu/settings'
- defaults:
- _form: 'Drupal\menu_ui\MenuSettingsForm'
- _title: 'Menus'
- requirements:
- _permission: 'administer menu'
-
menu_ui.overview_page:
path: '/admin/structure/menu'
defaults:
diff --git a/core/modules/menu_ui/src/MenuSettingsForm.php b/core/modules/menu_ui/src/MenuSettingsForm.php
deleted file mode 100644
index 9037bb5..0000000
--- a/core/modules/menu_ui/src/MenuSettingsForm.php
+++ /dev/null
@@ -1,73 +0,0 @@
-config('menu_ui.settings');
- $form['intro'] = array(
- '#type' => 'item',
- '#markup' => t('The Menu UI module allows on-the-fly creation of menu links in the content authoring forms. To configure these settings for a particular content type, visit the Content types page, click the edit link for the content type, and go to the Menu settings section.', array('@content-types' => url('admin/structure/types'))),
- );
-
- $menu_options = menu_ui_get_menus();
-
- $main = $config->get('main_links');
- $form['menu_main_links_source'] = array(
- '#type' => 'select',
- '#title' => t('Source for the Main links'),
- '#default_value' => $main,
- '#empty_option' => t('No Main links'),
- '#options' => $menu_options,
- '#tree' => FALSE,
- '#description' => t('Select what should be displayed as the Main links (typically at the top of the page).'),
- );
-
- $form['menu_secondary_links_source'] = array(
- '#type' => 'select',
- '#title' => t('Source for the Secondary links'),
- '#default_value' => $config->get('secondary_links'),
- '#empty_option' => t('No Secondary links'),
- '#options' => $menu_options,
- '#tree' => FALSE,
- '#description' => t('Select the source for the Secondary links. An advanced option allows you to use the same source for both Main links (currently %main) and Secondary links: if your source menu has two levels of hierarchy, the top level menu links will appear in the Main links, and the children of the active link will appear in the Secondary links.', array('%main' => $main ? $menu_options[$main] : t('none'))),
- );
-
- return parent::buildForm($form, $form_state);
- }
-
- /**
- * {@inheritdoc}
- */
- public function submitForm(array &$form, FormStateInterface $form_state) {
- $this->config('menu_ui.settings')
- ->set('main_links', $form_state->getValue('menu_main_links_source'))
- ->set('secondary_links', $form_state->getValue('menu_secondary_links_source'))
- ->save();
-
- parent::submitForm($form, $form_state);
- }
-
-}
diff --git a/core/modules/menu_ui/src/Tests/MenuNodeTest.php b/core/modules/menu_ui/src/Tests/MenuNodeTest.php
index 11a1aca..fdd0e71 100644
--- a/core/modules/menu_ui/src/Tests/MenuNodeTest.php
+++ b/core/modules/menu_ui/src/Tests/MenuNodeTest.php
@@ -22,10 +22,13 @@ class MenuNodeTest extends WebTestBase {
*
* @var array
*/
- public static $modules = array('menu_ui', 'test_page_test', 'node');
+ public static $modules = array('menu_ui', 'test_page_test', 'node', 'block');
protected function setUp() {
parent::setUp();
+
+ $this->drupalPlaceBlock('system_menu_block:main');
+
$this->drupalCreateContentType(array('type' => 'page', 'name' => 'Basic page'));
$this->admin_user = $this->drupalCreateUser(array(
diff --git a/core/modules/menu_ui/src/Tests/MenuTest.php b/core/modules/menu_ui/src/Tests/MenuTest.php
index 09bc6f4..c35d0d1 100644
--- a/core/modules/menu_ui/src/Tests/MenuTest.php
+++ b/core/modules/menu_ui/src/Tests/MenuTest.php
@@ -839,13 +839,6 @@ private function verifyAccess($response = 200) {
$this->assertText(t('Edit menu item'), 'Menu edit page was displayed');
}
- // View menu settings page.
- $this->drupalGet('admin/structure/menu/settings');
- $this->assertResponse($response);
- if ($response == 200) {
- $this->assertText(t('Menus'), 'Menu settings page was displayed');
- }
-
// View add menu page.
$this->drupalGet('admin/structure/menu/add');
$this->assertResponse($response);
diff --git a/core/modules/migrate_drupal/src/Tests/Dump/Drupal6MenuSettings.php b/core/modules/migrate_drupal/src/Tests/Dump/Drupal6MenuSettings.php
index 752614a..a5ac43f 100644
--- a/core/modules/migrate_drupal/src/Tests/Dump/Drupal6MenuSettings.php
+++ b/core/modules/migrate_drupal/src/Tests/Dump/Drupal6MenuSettings.php
@@ -23,14 +23,6 @@ public function load() {
'value',
))
->values(array(
- 'name' => 'menu_primary_links_source',
- 'value' => 's:13:"primary-links";',
- ))
- ->values(array(
- 'name' => 'menu_secondary_links_source',
- 'value' => 's:15:"secondary-links";',
- ))
- ->values(array(
'name' => 'menu_override_parent_selector',
'value' => 'b:0;',
))
diff --git a/core/modules/migrate_drupal/src/Tests/d6/MigrateMenuConfigsTest.php b/core/modules/migrate_drupal/src/Tests/d6/MigrateMenuConfigsTest.php
index aa4fd0c..cc8a89d 100644
--- a/core/modules/migrate_drupal/src/Tests/d6/MigrateMenuConfigsTest.php
+++ b/core/modules/migrate_drupal/src/Tests/d6/MigrateMenuConfigsTest.php
@@ -46,8 +46,6 @@ protected function setUp() {
*/
public function testMenuSettings() {
$config = \Drupal::config('menu_ui.settings');
- $this->assertIdentical($config->get('main_links'), 'primary-links');
- $this->assertIdentical($config->get('secondary_links'), 'secondary-links');
$this->assertIdentical($config->get('override_parent_selector'), FALSE);
$this->assertConfigSchema(\Drupal::service('config.typed'), 'menu_ui.settings', $config->get());
}
diff --git a/core/modules/system/config/install/system.theme.global.yml b/core/modules/system/config/install/system.theme.global.yml
index 13036bf..5ee6cc7 100644
--- a/core/modules/system/config/install/system.theme.global.yml
+++ b/core/modules/system/config/install/system.theme.global.yml
@@ -10,8 +10,6 @@ features:
logo: true
name: true
node_user_picture: true
- main_menu: true
- secondary_menu: true
slogan: true
logo:
path: ''
diff --git a/core/modules/system/src/Form/ThemeSettingsForm.php b/core/modules/system/src/Form/ThemeSettingsForm.php
index 383f7ac..054f44b 100644
--- a/core/modules/system/src/Form/ThemeSettingsForm.php
+++ b/core/modules/system/src/Form/ThemeSettingsForm.php
@@ -106,8 +106,6 @@ public function buildForm(array $form, FormStateInterface $form_state, $theme =
'comment_user_picture' => t('User pictures in comments'),
'comment_user_verification' => t('User verification status in comments'),
'favicon' => t('Shortcut icon'),
- 'main_menu' => t('Main menu'),
- 'secondary_menu' => t('Secondary menu'),
);
// Some features are not always available
diff --git a/core/modules/system/src/Tests/Cache/PageCacheTagsIntegrationTest.php b/core/modules/system/src/Tests/Cache/PageCacheTagsIntegrationTest.php
index 9c41eb8..cc91286 100644
--- a/core/modules/system/src/Tests/Cache/PageCacheTagsIntegrationTest.php
+++ b/core/modules/system/src/Tests/Cache/PageCacheTagsIntegrationTest.php
@@ -77,7 +77,11 @@ function testPageCacheTags() {
'block:bartik_login',
'block:bartik_footer',
'block:bartik_powered',
+ 'block:bartik_main_menu',
+ 'block:bartik_account_menu',
'block_plugin:system_main_block',
+ 'block_plugin:system_menu_block__account',
+ 'block_plugin:system_menu_block__main',
'block_plugin:system_menu_block__tools',
'block_plugin:user_login_block',
'block_plugin:system_menu_block__footer',
@@ -86,6 +90,7 @@ function testPageCacheTags() {
'node:' . $node_1->id(),
'user:' . $author_1->id(),
'filter_format:basic_html',
+ 'menu:account',
'menu:tools',
'menu:footer',
'menu:main',
@@ -103,7 +108,11 @@ function testPageCacheTags() {
'block:' . $block->id(),
'block:bartik_footer',
'block:bartik_powered',
+ 'block:bartik_main_menu',
+ 'block:bartik_account_menu',
'block_plugin:system_main_block',
+ 'block_plugin:system_menu_block__account',
+ 'block_plugin:system_menu_block__main',
'block_plugin:system_menu_block__tools',
'block_plugin:user_login_block',
'block_plugin:views_block__comments_recent-block_1',
@@ -113,6 +122,7 @@ function testPageCacheTags() {
'node:' . $node_2->id(),
'user:' . $author_2->id(),
'filter_format:full_html',
+ 'menu:account',
'menu:tools',
'menu:footer',
'menu:main',
diff --git a/core/modules/system/src/Tests/Menu/BreadcrumbTest.php b/core/modules/system/src/Tests/Menu/BreadcrumbTest.php
index ea55662..cf5ab1a 100644
--- a/core/modules/system/src/Tests/Menu/BreadcrumbTest.php
+++ b/core/modules/system/src/Tests/Menu/BreadcrumbTest.php
@@ -278,7 +278,7 @@ function testBreadCrumbs() {
// untranslated menu links automatically generated from menu router items
// ('taxonomy/term/%') should never be translated and appear in any menu
// other than the breadcrumb trail.
- $elements = $this->xpath('//div[@id=:menu]/descendant::a[@href=:href]', array(
+ $elements = $this->xpath('//nav[@id=:menu]/descendant::a[@href=:href]', array(
':menu' => 'block-bartik-tools',
':href' => url($link_path),
));
diff --git a/core/modules/system/src/Tests/System/PageTitleTest.php b/core/modules/system/src/Tests/System/PageTitleTest.php
index 6b2d249..4516a57 100644
--- a/core/modules/system/src/Tests/System/PageTitleTest.php
+++ b/core/modules/system/src/Tests/System/PageTitleTest.php
@@ -75,8 +75,6 @@ function testTitleXSS() {
$edit = array(
'toggle_name' => TRUE,
'toggle_slogan' => TRUE,
- 'toggle_main_menu' => TRUE,
- 'toggle_secondary_menu' => TRUE,
);
$this->drupalPostForm('admin/appearance/settings', $edit, t('Save configuration'));
diff --git a/core/modules/system/system.module b/core/modules/system/system.module
index 54deb65..31b9232 100644
--- a/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -154,13 +154,18 @@ function system_help($route_name, RouteMatchInterface $route_match) {
function system_theme() {
return array_merge(drupal_common_theme(), array(
// Normally theme suggestion templates are only picked up when they are in
- // themes. We explicitly define the block__system_branding_block theme
- // suggestion here so that the template in core/modules/system/templates
- // is picked up.
+ // themes. We explicitly define theme suggestions here so that the block
+ // templates in core/modules/system/templates are picked up.
'block__system_branding_block' => array(
+ 'render element' => 'elements',
'base hook' => 'block',
'template' => 'block--system-branding-block',
),
+ 'block__system_menu_block' => array(
+ 'render element' => 'elements',
+ 'base hook' => 'block',
+ 'template' => 'block--system-menu-block',
+ ),
'system_themes_page' => array(
'variables' => array(
'theme_groups' => array(),
@@ -672,13 +677,6 @@ function system_preprocess_block(&$variables) {
$variables['attributes']['role'] = 'complementary';
break;
- case 'system_menu_block':
- $menus = menu_list_system_menus();
- if (isset($menus[$variables['derivative_plugin_id']])) {
- $variables['attributes']['role'] = 'navigation';
- $variables['attributes']['class'][] = 'block-menu';
- }
- break;
}
}
@@ -926,8 +924,6 @@ function _system_default_theme_features() {
'node_user_picture',
'comment_user_picture',
'comment_user_verification',
- 'main_menu',
- 'secondary_menu',
);
}
diff --git a/core/modules/system/templates/block--system-menu-block.html.twig b/core/modules/system/templates/block--system-menu-block.html.twig
new file mode 100644
index 0000000..2510883
--- /dev/null
+++ b/core/modules/system/templates/block--system-menu-block.html.twig
@@ -0,0 +1,71 @@
+{#
+/**
+ * @file
+ * Default theme implementation for a menu block.
+ *
+ * Available variables:
+ * - plugin_id: The ID of the block implementation.
+ * - label: The configured label of the block if visible.
+ * - configuration: A list of the block's configuration values.
+ * - label: The configured label for the block.
+ * - label_display: The display settings for the label.
+ * - module: The module that provided this block plugin.
+ * - cache: The cache settings.
+ * - Block plugin specific settings will also be stored here.
+ * - block - The full block entity.
+ * - label_hidden: The hidden block title value if the block was
+ * configured to hide the title ('label' is empty in this case).
+ * - module: The module that generated the block.
+ * - delta: An ID for the block, unique within each module.
+ * - region: The block region embedding the current block.
+ * - content: The content of this block.
+ * - attributes: HTML attributes for the containing element.
+ * - id: A valid HTML ID and guaranteed unique.
+ * - title_attributes: HTML attributes for the title element.
+ * - content_attributes: HTML attributes for the content element.
+ * - title_prefix: Additional output populated by modules, intended to be
+ * displayed in front of the main title tag that appears in the template.
+ * - title_suffix: Additional output populated by modules, intended to be
+ * displayed after the main title tag that appears in the template.
+ *
+ * Headings should be used on navigation menus that consistently appears on
+ * multiple pages. When this menu block's label is configured to not be
+ * displayed, it is automatically made invisible using the 'visually-hidden' CSS
+ * class, which still keeps it visible for screen-readers and assistive
+ * technology. Headings allow screen-reader and keyboard only users to navigate
+ * to or skip the links.
+ * See http://juicystudio.com/article/screen-readers-display-none.php and
+ * http://www.w3.org/TR/WCAG-TECHS/H42.html for more information.
+ *
+ * @ingroup themeable
+ */
+#}
+{%
+ set classes = [
+ 'block',
+ 'block-menu',
+ 'navigation',
+ 'menu--' ~ derivative_plugin_id|clean_class,
+ ]
+%}
+{% set heading_id = attributes.id ~ '-menu'|clean_id %}
+