diff --git a/core/includes/menu.inc b/core/includes/menu.inc index bf94563..96a88f7 100644 --- a/core/includes/menu.inc +++ b/core/includes/menu.inc @@ -1793,37 +1793,6 @@ function menu_list_system_menus() { } /** - * Returns an array of links to be rendered as the Main menu. - */ -function menu_main_menu() { - $config = config('menu.settings'); - $menu_enabled = module_exists('menu'); - // When menu module is not enabled, we need a hardcoded default value. - $main_links_source = $menu_enabled ? $config->get('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() { - $config = config('menu.settings'); - $menu_enabled = module_exists('menu'); - // When menu module is not enabled, we need a hardcoded default value. - $main_links_source = $menu_enabled ? $config->get('main_links') : 'main'; - $secondary_links_source = $menu_enabled ? $config->get('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 an array of links for a navigation menu. * * @param $menu_name @@ -1833,6 +1802,8 @@ function menu_secondary_menu() { * * @return * An array of links of the specified menu and level. + * + * @todo this should become a service. */ function menu_navigation_links($menu_name, $level = 0) { // Don't even bother querying the menu table if no menu is specified. diff --git a/core/includes/theme.inc b/core/includes/theme.inc index 011db8d..ebf0364 100644 --- a/core/includes/theme.inc +++ b/core/includes/theme.inc @@ -2824,8 +2824,6 @@ function template_preprocess_page(&$variables) { $variables['language'] = $language_interface; $variables['language']->dir = $language_interface->direction ? 'rtl' : 'ltr'; $variables['logo'] = theme_get_setting('logo.url'); - $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['site_name'] = (theme_get_setting('features.name') ? check_plain($site_config->get('name')) : ''); $variables['site_slogan'] = (theme_get_setting('features.slogan') ? filter_xss_admin($site_config->get('slogan')) : ''); diff --git a/core/modules/block/tests/block_test.info.yml b/core/modules/block/tests/block_test.info.yml index d6e4137..2b69d83 100644 --- a/core/modules/block/tests/block_test.info.yml +++ b/core/modules/block/tests/block_test.info.yml @@ -5,3 +5,6 @@ package: Testing version: VERSION core: 8.x hidden: true +regions: + secondary_menu: 'Secondary Menu' + main_menu: 'Main menu' diff --git a/core/modules/block/tests/themes/block_test_theme/block_test_theme.info.yml b/core/modules/block/tests/themes/block_test_theme/block_test_theme.info.yml index 7b9f6e1..081e6b8 100644 --- a/core/modules/block/tests/themes/block_test_theme/block_test_theme.info.yml +++ b/core/modules/block/tests/themes/block_test_theme/block_test_theme.info.yml @@ -11,6 +11,8 @@ regions: footer: Footer highlighted: Highlighted help: Help + main_menu: 'Main Menu' + secondary_menu: 'Secondary Menu' regions_hidden: - sidebar_first - sidebar_second diff --git a/core/modules/menu/config/menu.settings.yml b/core/modules/menu/config/menu.settings.yml index bd3574e..0b617f8 100644 --- a/core/modules/menu/config/menu.settings.yml +++ b/core/modules/menu/config/menu.settings.yml @@ -1,3 +1 @@ -main_links: main -secondary_links: account override_parent_selector: '0' diff --git a/core/modules/menu/config/schema/menu.schema.yml b/core/modules/menu/config/schema/menu.schema.yml index e91b4d7..2752c28 100644 --- a/core/modules/menu/config/schema/menu.schema.yml +++ b/core/modules/menu/config/schema/menu.schema.yml @@ -4,12 +4,6 @@ menu.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/lib/Drupal/menu/MenuSettingsForm.php b/core/modules/menu/lib/Drupal/menu/MenuSettingsForm.php deleted file mode 100644 index 6bcbba2..0000000 --- a/core/modules/menu/lib/Drupal/menu/MenuSettingsForm.php +++ /dev/null @@ -1,72 +0,0 @@ -configFactory->get('menu.settings'); - $form['intro'] = array( - '#type' => 'item', - '#markup' => t('The menu 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_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); - } - - /** - * Implements \Drupal\Core\Form\FormInterface::submitForm(). - */ - public function submitForm(array &$form, array &$form_state) { - $this->configFactory->get('menu.settings') - ->set('main_links', $form_state['values']['menu_main_links_source']) - ->set('secondary_links', $form_state['values']['menu_secondary_links_source']) - ->save(); - - parent::submitForm($form, $form_state); - } - -} diff --git a/core/modules/menu/lib/Drupal/menu/Plugin/Block/MenuNavigation.php b/core/modules/menu/lib/Drupal/menu/Plugin/Block/MenuNavigation.php new file mode 100644 index 0000000..9938dca --- /dev/null +++ b/core/modules/menu/lib/Drupal/menu/Plugin/Block/MenuNavigation.php @@ -0,0 +1,98 @@ + 'main', + 'level' => 0, + ); + } + + /** + * {@inheritdoc} + */ + public function blockForm($form, &$form_state) { + $form['menu'] = array( + '#type' => 'select', + '#title' => t('Source menu'), + '#default_value' => $this->configuration['menu'], + '#options' => menu_get_menus(), + '#required' => TRUE, + ); + $form['level'] = array( + '#type' => 'select', + '#title' => t('Starting level'), + '#default_value' => $this->configuration['level'], + '#options' => drupal_map_assoc(array(0, 1, 2, 3, 4, 5, 6, 7, 8)), + '#required' => TRUE, + ); + + return $form; + } + + /** + * {@inheritdoc} + */ + public function blockSubmit($form, &$form_state) { + $this->setConfig('menu', $form_state['values']['menu']); + $this->setConfig('level', $form_state['values']['level']); + } + + /** + * {@inheritdoc} + */ + protected function blockBuild() { + // @todo BlockManager fails to merge default settings. + $this->configuration += $this->settings(); + + $menu_name = $this->configuration['menu']; + $level = $this->configuration['level']; + // @todo menu_nagivation_links should be migrated to a menu link service and + // that should be injected here. + $links = menu_navigation_links($menu_name, $level); + // Do not output this entire block if there are no visible/accessible links. + // Filter the links to remove those with #access set to FALSE. + array_filter($links, function($link) { + if (isset($link['#access']) && $link['#access'] === FALSE) { + return FALSE; + } + return TRUE; + }); + if (empty($links)) { + return array(); + } + $build = array( + '#theme' => 'links', + '#links' => $links, + ); + if (!empty($this->configuration['id'])) { + $build['#attributes']['id'] = drupal_html_id($this->configuration['id']); + } + return $build; + } + +} diff --git a/core/modules/menu/lib/Drupal/menu/Plugin/block/block/MenuNavigation.php b/core/modules/menu/lib/Drupal/menu/Plugin/block/block/MenuNavigation.php new file mode 100644 index 0000000..1c9d14f --- /dev/null +++ b/core/modules/menu/lib/Drupal/menu/Plugin/block/block/MenuNavigation.php @@ -0,0 +1,98 @@ + 'main', + 'level' => 0, + ); + } + + /** + * {@inheritdoc} + */ + public function blockForm($form, &$form_state) { + $form['menu'] = array( + '#type' => 'select', + '#title' => t('Source menu'), + '#default_value' => $this->configuration['menu'], + '#options' => menu_get_menus(), + '#required' => TRUE, + ); + $form['level'] = array( + '#type' => 'select', + '#title' => t('Starting level'), + '#default_value' => $this->configuration['level'], + '#options' => drupal_map_assoc(array(0, 1, 2, 3, 4, 5, 6, 7, 8)), + '#required' => TRUE, + ); + + return $form; + } + + /** + * {@inheritdoc} + */ + public function blockSubmit($form, &$form_state) { + $this->setConfig('menu', $form_state['values']['menu']); + $this->setConfig('level', $form_state['values']['level']); + } + + /** + * {@inheritdoc} + */ + protected function blockBuild() { + // @todo BlockManager fails to merge default settings. + $this->configuration += $this->settings(); + + $menu_name = $this->configuration['menu']; + $level = $this->configuration['level']; + // @todo menu_nagivation_links should be migrated to a menu link service and + // that should be injected here. + $links = menu_navigation_links($menu_name, $level); + // Do not output this entire block if there are no visible/accessible links. + // Filter the links to remove those with #access set to FALSE. + array_filter($links, function($link) { + if (isset($link['#access']) && $link['#access'] === FALSE) { + return FALSE; + } + return TRUE; + }); + if (empty($links)) { + return array(); + } + $build = array( + '#theme' => 'links', + '#links' => $links, + ); + if (!empty($this->configuration['id'])) { + $build['#attributes']['id'] = drupal_html_id($this->configuration['id']); + } + return $build; + } + +} diff --git a/core/modules/menu/lib/Drupal/menu/Tests/MenuTest.php b/core/modules/menu/lib/Drupal/menu/Tests/MenuTest.php index 106ac64..a653e98 100644 --- a/core/modules/menu/lib/Drupal/menu/Tests/MenuTest.php +++ b/core/modules/menu/lib/Drupal/menu/Tests/MenuTest.php @@ -34,6 +34,8 @@ public static function getInfo() { function setUp() { parent::setUp(); + $this->drupalPlaceBlock('menu_navigation', array('region' => 'secondary_menu'), array('menu' => 'account')); + $this->drupalCreateContentType(array('type' => 'article', 'name' => 'Article')); // Create users. @@ -163,7 +165,9 @@ function addCustomMenu() { $this->drupalGet('admin/structure/block/list/block_plugin_ui:' . config('system.theme')->get('default') . '/add'); $this->assertText($label); - // Enable the block. + // Enable the block after flushing the plugin definitions to ensure the + // new menu is found by the plugin manager. + $this->container->get('plugin.manager.block')->clearCachedDefinitions(); $this->drupalPlaceBlock('menu_menu_block:' . $menu_name); return menu_load($menu_name); } @@ -654,13 +658,6 @@ private function verifyAccess($response = 200, $menu_name = 'tools') { $this->assertText(t('Edit menu item'), 'Menu edit node was displayed'); } - // View menu settings node. - $this->drupalGet('admin/structure/menu/settings'); - $this->assertResponse($response); - if ($response == 200) { - $this->assertText(t('Menus'), 'Menu settings node was displayed'); - } - // View add menu node. $this->drupalGet('admin/structure/menu/add'); $this->assertResponse($response); diff --git a/core/modules/menu/menu.module b/core/modules/menu/menu.module index 14c41b0..08e91e2 100644 --- a/core/modules/menu/menu.module +++ b/core/modules/menu/menu.module @@ -89,13 +89,6 @@ function menu_menu() { 'type' => MENU_LOCAL_ACTION, 'file' => 'menu.admin.inc', ); - $items['admin/structure/menu/settings'] = array( - 'title' => 'Settings', - 'route_name' => 'menu_settings', - 'access arguments' => array('administer menu'), - 'type' => MENU_LOCAL_TASK, - 'weight' => 100, - ); $items['admin/structure/menu/manage/%menu'] = array( 'title' => 'Edit menu', 'page callback' => 'menu_menu_edit', @@ -735,6 +728,12 @@ function menu_preprocess_block(&$variables) { if ($variables['configuration']['module'] == 'menu') { $variables['attributes']['role'] = 'navigation'; } + if ($variables['block']->id == 'menu_navigation') { + $variables['attributes']['class'][] = 'links'; + $variables['attributes']['class'][] = 'inline'; + $variables['attributes']['class'][] = 'clearfix'; + $variables['title_attributes']['class'][] = 'element-invisible'; + } } /** diff --git a/core/modules/menu/menu.routing.yml b/core/modules/menu/menu.routing.yml index aafe5c3..c6862c4 100644 --- a/core/modules/menu/menu.routing.yml +++ b/core/modules/menu/menu.routing.yml @@ -1,10 +1,3 @@ -menu_settings: - pattern: '/admin/structure/menu/settings' - defaults: - _form: 'Drupal\menu\MenuSettingsForm' - requirements: - _permission: 'administer menu' - menu_link_reset: pattern: 'admin/structure/menu/item/{menu_link}/reset' defaults: diff --git a/core/modules/openid/lib/Drupal/openid/Tests/OpenIDFunctionalTest.php b/core/modules/openid/lib/Drupal/openid/Tests/OpenIDFunctionalTest.php index 0479793..de640a4 100644 --- a/core/modules/openid/lib/Drupal/openid/Tests/OpenIDFunctionalTest.php +++ b/core/modules/openid/lib/Drupal/openid/Tests/OpenIDFunctionalTest.php @@ -19,7 +19,7 @@ class OpenIDFunctionalTest extends OpenIDTestBase { * * @var array */ - public static $modules = array('openid_test'); + public static $modules = array('block', 'openid', 'test_page_test', 'menu', 'openid_test'); protected $web_user; diff --git a/core/modules/openid/lib/Drupal/openid/Tests/OpenIDRegistrationTest.php b/core/modules/openid/lib/Drupal/openid/Tests/OpenIDRegistrationTest.php index 7389580..3b6baf9 100644 --- a/core/modules/openid/lib/Drupal/openid/Tests/OpenIDRegistrationTest.php +++ b/core/modules/openid/lib/Drupal/openid/Tests/OpenIDRegistrationTest.php @@ -21,7 +21,7 @@ class OpenIDRegistrationTest extends OpenIDTestBase { * * @var array */ - public static $modules = array('openid_test', 'language'); + public static $modules = array('block', 'openid', 'test_page_test', 'menu', 'openid_test', 'language'); public static function getInfo() { return array( @@ -122,6 +122,7 @@ function testRegisterUserWithoutEmailVerification() { $this->assertLink(t('Log out'), 0, 'User was logged in.'); $user = user_load_by_name('john'); + $this->assertTrue($user, 'User was registered with right username.'); $this->assertEqual($user->mail, 'john@example.com', 'User was registered with right email address.'); $this->assertEqual($user->timezone, 'Europe/London', 'User was registered with right timezone.'); @@ -263,6 +264,7 @@ function testRegisterUserWithAXButNoSREG() { $this->assertLink(t('Log out'), 0, 'User was logged in.'); $user = user_load_by_name('john'); + $this->assertTrue($user, 'User was registered with right username.'); $this->assertEqual($user->mail, 'john@example.com', 'User was registered with right email address.'); $this->assertEqual($user->timezone, 'Europe/London', 'User was registered with right timezone.'); diff --git a/core/modules/openid/lib/Drupal/openid/Tests/OpenIDTestBase.php b/core/modules/openid/lib/Drupal/openid/Tests/OpenIDTestBase.php index 3110d88..9b9feb5 100644 --- a/core/modules/openid/lib/Drupal/openid/Tests/OpenIDTestBase.php +++ b/core/modules/openid/lib/Drupal/openid/Tests/OpenIDTestBase.php @@ -15,11 +15,18 @@ abstract class OpenIDTestBase extends WebTestBase { /** + * The user account links block placed in the content region. + * + * @var \Drupal\block\Plugin\Core\Entity\Block + */ + protected $block; + + /** * Modules to enable. * * @var array */ - public static $modules = array('block', 'openid', 'test_page_test'); + public static $modules = array('block', 'openid', 'test_page_test', 'menu'); function setUp() { parent::setUp(); @@ -28,6 +35,12 @@ function setUp() { $this->admin_user = $this->drupalCreateUser(array('administer blocks')); $this->drupalLogin($this->admin_user); $this->drupalPlaceBlock('user_login_block'); + // Place the user links block in the content region. + $this->block = $this->drupalPlaceBlock('menu_navigation', array('region' => 'content'), array( + 'menu' => 'account', + 'level' => 0, + 'id' => 'secondary-menu', + )); $this->drupalLogout(); // Use a different front page than login page for testing OpenID login from diff --git a/core/modules/system/lib/Drupal/system/Tests/Menu/MenuRouterTest.php b/core/modules/system/lib/Drupal/system/Tests/Menu/MenuRouterTest.php index 3b666a0..5cec845 100644 --- a/core/modules/system/lib/Drupal/system/Tests/Menu/MenuRouterTest.php +++ b/core/modules/system/lib/Drupal/system/Tests/Menu/MenuRouterTest.php @@ -282,6 +282,8 @@ function testThemeCallbackHookCustomTheme() { * Tests for menu_link_maintain(). */ function testMenuLinkMaintain() { + $this->drupalPlaceBlock('menu_navigation', array('region' => 'main_menu'), array('menu' => 'main')); + $admin_user = $this->drupalCreateUser(array('access content', 'administer site configuration')); $this->drupalLogin($admin_user); diff --git a/core/modules/system/system.module b/core/modules/system/system.module index 54ae84b..23801ba 100644 --- a/core/modules/system/system.module +++ b/core/modules/system/system.module @@ -2988,6 +2988,8 @@ function _system_rebuild_theme_data() { $defaults = array( 'engine' => 'twig', 'regions' => array( + 'secondary_menu' => 'Secondary menu', + 'main_menu' => 'Main navigation', 'sidebar_first' => 'Left sidebar', 'sidebar_second' => 'Right sidebar', 'content' => 'Content', diff --git a/core/modules/system/templates/page.html.twig b/core/modules/system/templates/page.html.twig index ff7c010..ab732dc 100644 --- a/core/modules/system/templates/page.html.twig +++ b/core/modules/system/templates/page.html.twig @@ -26,9 +26,6 @@ * slogan has been disabled in theme settings. * * Navigation: - * - main_menu: The Main menu links for the site, if they have been configured. - * - secondary_menu: The Secondary menu links for the site, if they have been - * configured. * - breadcrumb: The breadcrumb trail for the current page. * * Page content (in order of occurrence in the default page.html.twig): @@ -50,6 +47,9 @@ * * Regions: * - page.header: Items for the header region. + * - page.main_menu: The Main menu links for the site, if they have been configured. + * - page.secondary_menu: The Secondary menu links for the site, if they have been + * configured. * - page.highlighted: Items for the highlighted content region. * - page.help: Dynamic help text, mostly for admin pages. * - page.content: The main content of the current page. @@ -97,14 +97,19 @@ {% endif %} + {% if page.secondary_menu %} + + {% endif %} + {{ page.header }} - {% if main_menu or secondary_menu %} + {% if page.main_menu %} {% endif %} diff --git a/core/modules/user/lib/Drupal/user/Tests/UserAccountLinksTests.php b/core/modules/user/lib/Drupal/user/Tests/UserAccountLinksTests.php index deec20e..ef1934d 100644 --- a/core/modules/user/lib/Drupal/user/Tests/UserAccountLinksTests.php +++ b/core/modules/user/lib/Drupal/user/Tests/UserAccountLinksTests.php @@ -15,6 +15,13 @@ class UserAccountLinksTests extends WebTestBase { /** + * The user account links block placed in the secondary menu region. + * + * @var \Drupal\block\Plugin\Core\Entity\Block + */ + protected $block; + + /** * Modules to enable. * * @var array @@ -29,6 +36,15 @@ public static function getInfo() { ); } + protected function setUp() { + parent::setUp(); + $this->block = $this->drupalPlaceBlock('menu_navigation', array('region' => 'secondary_menu'), array( + 'menu' => 'account', + 'level' => 0, + 'id' => 'secondary-menu', + )); + } + /** * Tests the secondary menu. */ @@ -63,6 +79,11 @@ function testSecondaryMenu() { // For a logged-out user, expect no secondary links. $element = $this->xpath('//ul[@id=:menu_id]', array(':menu_id' => 'secondary-menu')); $this->assertEqual(count($element), 0, 'No secondary-menu for logged-out users.'); + // The wrapping list should not appear either. + $settings = $this->block->get('settings'); + $this->assertNoRaw($settings['id']); + // The entire menu block should not appear either. + $this->assertNoRaw(check_plain($this->block->label())); } /** diff --git a/core/modules/user/lib/Drupal/user/Tests/UserPasswordResetTest.php b/core/modules/user/lib/Drupal/user/Tests/UserPasswordResetTest.php index 68c28bb..f435c03 100644 --- a/core/modules/user/lib/Drupal/user/Tests/UserPasswordResetTest.php +++ b/core/modules/user/lib/Drupal/user/Tests/UserPasswordResetTest.php @@ -13,6 +13,14 @@ * Tests resetting a user password. */ class UserPasswordResetTest extends WebTestBase { + + /** + * Modules to enable. + * + * @var array + */ + public static $modules = array('menu', 'block'); + /** * The user object to test password resetting. * @@ -20,6 +28,13 @@ class UserPasswordResetTest extends WebTestBase { */ protected $account; + /** + * The user account links block placed in the content region. + * + * @var \Drupal\block\Plugin\Core\Entity\Block + */ + protected $block; + public static function getInfo() { return array( 'name' => 'Reset password', @@ -30,7 +45,12 @@ public static function getInfo() { public function setUp() { parent::setUp(); - + // Place the user links block in the content region. + $this->block = $this->drupalPlaceBlock('menu_navigation', array('region' => 'content'), array( + 'menu' => 'account', + 'level' => 0, + 'id' => 'secondary-menu', + )); // Create a user. $account = $this->drupalCreateUser(); diff --git a/core/modules/views/lib/Drupal/views/Tests/Wizard/MenuTest.php b/core/modules/views/lib/Drupal/views/Tests/Wizard/MenuTest.php index 5903552..b49359d 100644 --- a/core/modules/views/lib/Drupal/views/Tests/Wizard/MenuTest.php +++ b/core/modules/views/lib/Drupal/views/Tests/Wizard/MenuTest.php @@ -12,6 +12,13 @@ */ class MenuTest extends WizardTestBase { + /** + * Modules to enable. + * + * @var array + */ + public static $modules = array('block', 'menu'); + public static function getInfo() { return array( 'name' => 'Menu functionality', @@ -20,6 +27,11 @@ public static function getInfo() { ); } + protected function setUp() { + parent::setUp(); + $this->drupalPlaceBlock('menu_navigation', array('region' => 'main_menu'), array('menu' => 'main')); + } + /** * Tests the menu functionality. */ diff --git a/core/modules/views/lib/Drupal/views/Tests/Wizard/WizardTestBase.php b/core/modules/views/lib/Drupal/views/Tests/Wizard/WizardTestBase.php index 0abb524..2dc2522 100644 --- a/core/modules/views/lib/Drupal/views/Tests/Wizard/WizardTestBase.php +++ b/core/modules/views/lib/Drupal/views/Tests/Wizard/WizardTestBase.php @@ -21,7 +21,7 @@ */ public static $modules = array('views_ui', 'block'); - function setUp() { + protected function setUp() { parent::setUp(); // Create and log in a user with administer views permission. diff --git a/core/profiles/standard/config/block.block.bartik.account_links.yml b/core/profiles/standard/config/block.block.bartik.account_links.yml new file mode 100644 index 0000000..64bdb5f --- /dev/null +++ b/core/profiles/standard/config/block.block.bartik.account_links.yml @@ -0,0 +1,13 @@ +id: bartik.account_links +label: 'Account links' +region: secondary_menu +weight: '0' +module: menu +status: '1' +plugin: menu_navigation +settings: + menu: account + level: '0' + id: secondary-menu + subject: 'Menu Navigation' +langcode: und diff --git a/core/profiles/standard/config/block.block.bartik.main_menu.yml b/core/profiles/standard/config/block.block.bartik.main_menu.yml new file mode 100644 index 0000000..895c255 --- /dev/null +++ b/core/profiles/standard/config/block.block.bartik.main_menu.yml @@ -0,0 +1,13 @@ +id: bartik.main_menu +label: 'Main menu' +region: main_menu +weight: '0' +module: menu +status: '1' +plugin: menu_navigation +settings: + menu: main + level: '0' + id: main-menu + subject: 'Menu Navigation' +langcode: und diff --git a/core/profiles/standard/standard.install b/core/profiles/standard/standard.install index 741f857..0168407 100644 --- a/core/profiles/standard/standard.install +++ b/core/profiles/standard/standard.install @@ -3,6 +3,7 @@ * @file * Install, update and uninstall functions for the standard installation profile. */ +use Drupal\Component\Uuid\Uuid; /** * Implements hook_install(). @@ -149,3 +150,51 @@ function standard_install() { config('system.theme')->set('admin', 'seven')->save(); variable_set('node_admin_theme', '1'); } + +/** + * Place and create the main menu and secondary links menu navigation blocks. + * + * @ingroup config_upgrade + */ +function standard_update_8000() { + // Place main-menu. + $block = config('block.block.bartik.main_menu'); + $uuid = new Uuid(); + $block + ->set('id', 'bartik.main_menu') + ->set('uuid', $uuid->generate()) + ->set('plugin', 'menu_navigation') + ->set('module', 'menu') + ->set('region', 'main_menu') + ->set('weight', 0) + ->set('status', 1) + ->set('visibility', array()) + ->set('label', 'Main menu') + ->set('settings', array( + 'menu' => 'main', + 'level' => 0, + 'id' => 'main-menu', + 'subject' => 'Menu Navigation', + )); + $block->save(); + // Place secondary-menu (account links). + $block = config('block.block.bartik.account_links'); + $uuid = new Uuid(); + $block + ->set('id', 'bartik.account_links') + ->set('uuid', $uuid->generate()) + ->set('plugin', 'menu_navigation') + ->set('module', 'menu') + ->set('region', 'secondary_menu') + ->set('weight', 0) + ->set('status', 1) + ->set('visibility', array()) + ->set('label', 'Account links') + ->set('settings', array( + 'menu' => 'account', + 'level' => 0, + 'id' => 'secondary-menu', + 'subject' => 'Menu Navigation', + )); + $block->save(); +} diff --git a/core/themes/bartik/bartik.info.yml b/core/themes/bartik/bartik.info.yml index 43e3e9c..2d0146d 100644 --- a/core/themes/bartik/bartik.info.yml +++ b/core/themes/bartik/bartik.info.yml @@ -29,6 +29,8 @@ regions: footer_thirdcolumn: 'Footer third column' footer_fourthcolumn: 'Footer fourth column' footer: Footer + secondary_menu: 'Secondary menu' + main_menu: 'Main menu' # @todo D8: Remove once themes have to be installed. settings: shortcut_module_link: '0' diff --git a/core/themes/bartik/bartik.theme b/core/themes/bartik/bartik.theme index 0593a3c..6036b12 100644 --- a/core/themes/bartik/bartik.theme +++ b/core/themes/bartik/bartik.theme @@ -5,6 +5,8 @@ * Functions to support theming in the Bartik theme. */ +use Drupal\block\Plugin\Core\Entity\Block; + /** * Implements hook_preprocess_HOOK() for html.tpl.php. * @@ -40,20 +42,6 @@ function bartik_process_html(&$variables) { } /** - * Implements hook_preprocess_HOOK() for page.html.twig. - */ -function bartik_preprocess_page(&$variables) { - // Pass the main menu and secondary menu to the template as render arrays. - if (!empty($variables['main_menu'])) { - $variables['main_menu']['#attributes']['id'] = 'main-menu-links'; - $variables['main_menu']['#attributes']['class'] = array('links', 'clearfix'); - } - if (!empty($variables['secondary_menu'])) { - $variables['secondary_menu']['#attributes']['id'] = 'secondary-menu-links'; - } -} - -/** * Implements hook_process_HOOK() for page.html.twig. */ function bartik_process_page(&$variables) { @@ -166,3 +154,32 @@ function bartik_field__taxonomy_term_reference($variables) { return $output; } + +/** + * Implements hook_block_view_alter(). + */ +function bartik_block_view_alter(array &$build, Block $block) { + if ($block->getPluginId() == 'bartik.main_menu') { + $build['#prefix'] = ''; + $build['#theme'] = 'links__system_main_menu'; + $build['content']['#attributes']['id'] = 'main-menu-links'; + $build['#heading'] = array( + 'text' => t('Main menu'), + 'level' => 'h2', + 'class' => array('element-invisible'), + ); + } + if ($block->getPluginId() == 'bartik.account_links') { + $build['#prefix'] = ''; + $build['#theme'] = 'links__system_secondary_menu'; + $build['content']['#attributes']['id'] = 'secondary-menu-links'; + $build['content']['#attributes']['class'][] = 'inline'; + $build['#heading'] = array( + 'text' => t('Secondary menu'), + 'level' => 'h2', + 'class' => array('element-invisible'), + ); + } +} diff --git a/core/themes/bartik/css/colors.css b/core/themes/bartik/css/colors.css index 96f3877..6a12fa1 100644 --- a/core/themes/bartik/css/colors.css +++ b/core/themes/bartik/css/colors.css @@ -9,8 +9,8 @@ body.overlay { } #page, #main-wrapper, -#main-menu-links li a.active, -#main-menu-links li.active-trail a { +#main-menu li a.active, +#main-menu li.active-trail a { background: #ffffff; } .tabs ul.primary li a.active { @@ -56,6 +56,6 @@ a:active, .region-header li a.active, #name-and-slogan, #name-and-slogan a, -#secondary-menu-links li a { +#secondary-menu li a { color: #fffeff; } diff --git a/core/themes/bartik/css/style-rtl.css b/core/themes/bartik/css/style-rtl.css index dc7c2a4..800fc08 100644 --- a/core/themes/bartik/css/style-rtl.css +++ b/core/themes/bartik/css/style-rtl.css @@ -77,7 +77,7 @@ ul.tips { /* --------------- Secondary Menu ------------ */ -#secondary-menu-links { +#secondary-menu { float: left; } diff --git a/core/themes/bartik/css/style.css b/core/themes/bartik/css/style.css index 89e4fd4..3912901 100644 --- a/core/themes/bartik/css/style.css +++ b/core/themes/bartik/css/style.css @@ -484,20 +484,20 @@ h1#site-name { #main-menu { clear: both; } -#main-menu-links { +#main-menu { font-size: 0.929em; margin: 0 5px; padding: 0; text-align: left; } -#main-menu-links li { +#main-menu li { float: none; list-style: none; margin: 0; padding: 0; width: 100%; } -#main-menu-links a { +#main-menu a { color: #333; background: #ccc; background: rgba(255, 255, 255, 0.7); @@ -509,36 +509,41 @@ h1#site-name { margin-bottom: 4px; padding: 0.9em 0 0.9em 10px; } -#main-menu-links a:hover, -#main-menu-links a:focus { +#main-menu a:hover, +#main-menu a:focus { background: #f6f6f2; background: rgba(255, 255, 255, 0.95); } -#main-menu-links a:active { +#main-menu a:active { background: #b3b3b3; background: rgba(255, 255, 255, 1); } -#main-menu-links li a.active { +#main-menu li a.active { border-bottom: none; } /* --------------- Secondary Menu ------------ */ -#secondary-menu-links { +.region-secondary-menu .content { + margin-top: 0; +} + +#secondary-menu { float: right; /* LTR */ font-size: 0.929em; - margin: 0 10px; + margin: 10px 10px 0; + text-align: right; } -#secondary-menu-links li{ +#secondary-menu li { margin: 0; padding: 0; -} -#secondary-menu-links a { display: inline-block; +} +#secondary-menu a { padding: 0.8em; } -#secondary-menu-links a:hover, -#secondary-menu-links a:focus { +#secondary-menu a:hover, +#secondary-menu a:focus { text-decoration: underline; } @@ -1553,22 +1558,22 @@ div.admin-panel .description { #name-and-slogan { padding: 10px 10px 8px; } - #main-menu-links { + #main-menu { margin: 0 5px; padding: 0; text-align: center; } - #main-menu-links li { + #main-menu li { float: left; margin-right: 5px; padding: 0; display: inline-block; width: 32.75%; } - #main-menu-links li:nth-child(3n) { + #main-menu li:nth-child(3n) { margin-right: -5px; } - #main-menu-links a { + #main-menu a { float: none; display: block; border-radius: 8px; @@ -1592,27 +1597,30 @@ div.admin-panel .description { #site-name { font-size: 1.821em; } - #main-menu-links { + #main-menu { font-size: 0.929em; margin: 0; padding: 0 15px; } - #main-menu-links li { + #main-menu ul { + padding: 0px 0px 35px 15px; + } + #main-menu li { float: left; /* LTR */ list-style: none; padding: 0 1px; margin: 0 1px; width: auto; } - #main-menu-links a { + #main-menu a { float: left; /* LTR */ padding: 0.7em 0.8em; margin-bottom: 0; border-bottom-left-radius: 0; border-bottom-right-radius: 0; } - .featured #main-menu-links li a:active, - .featured #main-menu-links li a.active { + .featured #main-menu li a:active, + .featured #main-menu li a.active { background: #f0f0f0; background: rgba(240, 240, 240, 1.0); } diff --git a/core/themes/bartik/templates/page.html.twig b/core/themes/bartik/templates/page.html.twig index 1af8907..c0cd40a 100644 --- a/core/themes/bartik/templates/page.html.twig +++ b/core/themes/bartik/templates/page.html.twig @@ -33,9 +33,6 @@ * added to make the site slogan visually hidden, but still accessible. * * Navigation: - * - main_menu: The Main menu links for the site, if they have been configured. - * - secondary_menu: The Secondary menu links for the site, if they have been - * configured. * - breadcrumb: The breadcrumb trail for the current page. * * Page content (in order of occurrence in the default page.html.twig): @@ -57,6 +54,9 @@ * * Regions: * - page.header: Items for the header region. + * - page.main_menu: The Main menu links for the site, if they have been configured. + * - page.secondary_menu: The Secondary menu links for the site, if they have been + * configured. * - page.featured: Items for the featured region. * - page.highlighted: Items for the highlighted content region. * - page.help: Dynamic help text, mostly for admin pages. @@ -85,11 +85,9 @@ #}
-