diff --git a/src/HookHandler/PreprocessPatternNavbar.php b/src/HookHandler/PreprocessPatternNavbar.php deleted file mode 100644 index fb4c33b2b7bacb8745ac6615a940bf35e5269e62..0000000000000000000000000000000000000000 --- a/src/HookHandler/PreprocessPatternNavbar.php +++ /dev/null @@ -1,65 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Drupal\ui_suite_bootstrap\HookHandler; - -use Drupal\Core\Render\Element; - -/** - * Handle variables needed for the pattern. - */ -class PreprocessPatternNavbar { - - /** - * Length of the word dark. - */ - public const DARK_LENGTH = 4; - - /** - * Pattern fields where render elements will be injected. - */ - public const REGIONS_FIELDS = [ - 'navigation', - 'navigation_collapsible', - ]; - - /** - * Handle variables needed for the pattern. - * - * @param array $variables - * The preprocessed variables. - */ - public function preprocess(array &$variables): void { - if (\substr($variables['variant'], 0, self::DARK_LENGTH) === 'dark') { - foreach (self::REGIONS_FIELDS as $region) { - if (isset($variables[$region])) { - $this->addDarkSetting($variables[$region]); - } - } - } - } - - /** - * Add dark setting to navbar_nav pattern. - * - * @param array $item - * The render element to parse. - */ - protected function addDarkSetting(array &$item): void { - if (isset($item['#type']) - && \in_array($item['#type'], ['pattern', 'pattern_preview'], TRUE) - && $item['#id'] == 'navbar_nav' - ) { - $item['#dark'] = TRUE; - // Stop recursion when a navbar_nav is found, no need to enter in it. - return; - } - - $children = Element::children($item); - foreach ($children as $key) { - $this->addDarkSetting($item[$key]); - } - } - -} diff --git a/templates/patterns/carousel/pattern-carousel.html.twig b/templates/patterns/carousel/pattern-carousel.html.twig index 380b6631329f91de1a05c1677fea67d0bd9866a3..ea989014427744c254763e6fb283dc0b8a4bbf4a 100644 --- a/templates/patterns/carousel/pattern-carousel.html.twig +++ b/templates/patterns/carousel/pattern-carousel.html.twig @@ -2,6 +2,7 @@ {% set variants = variant|split('__')|map(v => v|lower|replace({(v): 'carousel-' ~ v})|replace({'_': '-'})) %} {% set attributes = attributes.addClass(variants) %} {% endif %} +{% set attributes = 'dark' in variant|lower ? attributes.setAttribute('data-bs-theme', 'dark') : attributes %} {% if not with_touch %} {% set attributes = attributes.setAttribute('data-bs-touch', 'false') %} diff --git a/templates/patterns/dropdown/pattern-dropdown.html.twig b/templates/patterns/dropdown/pattern-dropdown.html.twig index be4c49c147cd8f9ce0fbbe2c69b246ec19820805..44775c354d6807a2e6cf8d32f80b9ddfc753efd7 100644 --- a/templates/patterns/dropdown/pattern-dropdown.html.twig +++ b/templates/patterns/dropdown/pattern-dropdown.html.twig @@ -24,7 +24,7 @@ {% set dropdown_menu_attributes = create_attribute() %} {% set dropdown_menu_attributes = dropdown_menu_attributes.addClass('dropdown-menu') %} -{% set dropdown_menu_attributes = dark ? dropdown_menu_attributes.addClass('dropdown-menu-dark') : dropdown_menu_attributes %} +{% set dropdown_menu_attributes = dark ? dropdown_menu_attributes.setAttribute('data-bs-theme', 'dark') : dropdown_menu_attributes %} {% set dropdown_menu_attributes = dropdown_menu_attributes.addClass([dropdown_menu_start, dropdown_menu_end]) %} {% set dropdown_menu_attributes = dropdown_menu_attributes.setAttribute('aria-labelledby', dropdown_id) %} diff --git a/templates/patterns/navbar/pattern-navbar.html.twig b/templates/patterns/navbar/pattern-navbar.html.twig index 7055f7cf4c69b7843cdea7da67b6e1c26ad8e484..7916599ad4508e8a9e71ae18af6c36c0f7fc4a29 100644 --- a/templates/patterns/navbar/pattern-navbar.html.twig +++ b/templates/patterns/navbar/pattern-navbar.html.twig @@ -4,6 +4,7 @@ {% endif %} {% set attributes = attributes.addClass('navbar') %} +{% set attributes = 'dark' in variant|lower ? attributes.setAttribute('data-bs-theme', 'dark') : attributes %} {% set navbar_id = navbar_id|default("navbar-" ~ random()) %} {% set placement = placement|default('default') %} diff --git a/templates/patterns/navbar_nav/navbar_nav.ui_patterns.yml b/templates/patterns/navbar_nav/navbar_nav.ui_patterns.yml index dc2e5e8f9ce84afa4543d4c4d7622dfcbbe2dfa3..6ad967b6025ecdb7c037b309c01a54ac5465e3f7 100644 --- a/templates/patterns/navbar_nav/navbar_nav.ui_patterns.yml +++ b/templates/patterns/navbar_nav/navbar_nav.ui_patterns.yml @@ -10,13 +10,6 @@ navbar_nav: scroll: label: "Scroll" settings: - dark: - type: "boolean" - label: "Dark (deprecated)" - description: "Activate dropdown dark menu." - preview: false - allow_expose: true - allow_token: true dropdown_id: type: "textfield" label: "ID" diff --git a/templates/patterns/navbar_nav/pattern-navbar-nav.html.twig b/templates/patterns/navbar_nav/pattern-navbar-nav.html.twig index a96abadf140ad0c72c7ec41a6440c1f66c235f6c..47c10b0288c86012604b029eb698e6e6dfae899a 100644 --- a/templates/patterns/navbar_nav/pattern-navbar-nav.html.twig +++ b/templates/patterns/navbar_nav/pattern-navbar-nav.html.twig @@ -3,17 +3,34 @@ {% endif %} {% set attributes = attributes.addClass('navbar-nav') %} +{% set list_opened = false %} {% if items %} - <ul{{ attributes }}> {% for item in items %} + {# + When finding a text item. it should be outside the list. So handle text + items by opening/closing lists around if needed. + #} + {% set item_is_link = false %} + {% if item.below or item.url %} + {% set item_is_link = true %} + {% endif %} + + {% if item_is_link and not list_opened %} + {% set list_opened = true %} + <ul{{ attributes }}> + {% elseif not item_is_link and list_opened %} + {% set list_opened = false %} + </ul> + {% endif %} + + {% set item_attributes = item.attributes|default(create_attribute()) %} {% set link_attributes = item.link_attributes|default(create_attribute()) %} {% if item.below %} {{ pattern('dropdown', { 'title': item.title, 'content': item.below, 'dropdown_id': dropdown_id|default("dropdown-" ~ random()) ~ "-" ~ loop.index, - 'dark': dark, 'auto_close': 'true', 'dropdown_navbar': true, 'attributes': create_attribute({ @@ -21,15 +38,16 @@ }), 'button_attributes': link_attributes }, 'dropdown') }} - {% else %} - <li{{ item.attributes.addClass('nav-item') }}> - {% if item.url %} - <a{{ link_attributes.setAttribute('href', item.url).addClass('nav-link') }}>{{ item.title }}</a> - {% else %} - <span{{ link_attributes }}>{{ item.title }}</span> - {% endif %} + {% elseif item.url %} + <li{{ item_attributes.addClass('nav-item') }}> + <a{{ link_attributes.setAttribute('href', item.url).addClass('nav-link') }}>{{ item.title }}</a> </li> + {% else %} + <span{{ link_attributes.addClass('navbar-text') }}>{{ item.title }}</span> + {% endif %} + + {% if loop.last and list_opened %} + </ul> {% endif %} {% endfor %} - </ul> {% endif %} diff --git a/ui_suite_bootstrap.theme b/ui_suite_bootstrap.theme index d0a41d4300e63444a1d8fca1cee6ad2f1c613573..511d3115a292984d2b29868d1f029a92158eb414 100644 --- a/ui_suite_bootstrap.theme +++ b/ui_suite_bootstrap.theme @@ -25,7 +25,6 @@ use Drupal\ui_suite_bootstrap\HookHandler\PreprocessMenuLocalTask; use Drupal\ui_suite_bootstrap\HookHandler\PreprocessPage; use Drupal\ui_suite_bootstrap\HookHandler\PreprocessPager; use Drupal\ui_suite_bootstrap\HookHandler\PreprocessPatternCard; -use Drupal\ui_suite_bootstrap\HookHandler\PreprocessPatternNavbar; use Drupal\ui_suite_bootstrap\HookHandler\PreprocessSelect; use Drupal\ui_suite_bootstrap\HookHandler\PreprocessTextarea; use Drupal\ui_suite_bootstrap\HookHandler\PreprocessViewsMiniPager; @@ -216,16 +215,6 @@ function ui_suite_bootstrap_preprocess_pattern_card(array &$variables): void { $instance->preprocess($variables); } -/** - * Implements hook_preprocess_HOOK() for 'pattern_navbar'. - */ -function ui_suite_bootstrap_preprocess_pattern_navbar(array &$variables): void { - /** @var \Drupal\ui_suite_bootstrap\HookHandler\PreprocessPatternNavbar $instance */ - $instance = \Drupal::service('class_resolver') - ->getInstanceFromDefinition(PreprocessPatternNavbar::class); - $instance->preprocess($variables); -} - /** * Implements hook_preprocess_HOOK() for 'select'. */