From f5bf093808abfeafe04ed9f21e963a67de57146c Mon Sep 17 00:00:00 2001
From: Pierre Dureau <31905-pdureau@users.noreply.drupalcode.org>
Date: Mon, 27 Mar 2023 07:44:46 +0000
Subject: [PATCH] Issue #3347943 by pdureau, Grimreaper: Better variants to
 HTML class conversions

---
 .../patterns/accordion/pattern-accordion.html.twig     |  7 ++-----
 templates/patterns/alert/pattern-alert.html.twig       |  7 ++-----
 templates/patterns/button/pattern-button.html.twig     | 10 ++++------
 .../button_group/pattern-button-group.html.twig        |  4 ++--
 templates/patterns/carousel/pattern-carousel.html.twig |  8 +++-----
 templates/patterns/dropdown/pattern-dropdown.html.twig |  8 +++-----
 .../dropdown_item/pattern-dropdown-item.html.twig      |  7 ++-----
 templates/patterns/list/pattern-list.html.twig         |  2 +-
 .../patterns/list_group/pattern-list-group.html.twig   |  2 +-
 .../list_group_item/pattern-list-group-item.html.twig  |  7 ++-----
 templates/patterns/nav/pattern-nav.html.twig           |  8 +++-----
 templates/patterns/navbar/pattern-navbar.html.twig     |  9 ++++-----
 .../patterns/navbar_nav/pattern-navbar-nav.html.twig   |  8 +++-----
 .../patterns/pagination/pattern-pagination.html.twig   |  4 ++--
 templates/patterns/progress/pattern-progress.html.twig |  8 +++-----
 templates/patterns/table/pattern-table.html.twig       | 10 ++++------
 16 files changed, 41 insertions(+), 68 deletions(-)

diff --git a/templates/patterns/accordion/pattern-accordion.html.twig b/templates/patterns/accordion/pattern-accordion.html.twig
index ce6739a3..d6a8c296 100644
--- a/templates/patterns/accordion/pattern-accordion.html.twig
+++ b/templates/patterns/accordion/pattern-accordion.html.twig
@@ -1,8 +1,5 @@
-{% if variant != '' and variant|lower != 'default' %}
-  {% set variants = variant|split('__') %}
-  {% for variant in variants %}
-    {% set attributes = attributes.addClass('accordion-' ~ variant|lower|replace({'_': '-'})) %}
-  {% endfor %}
+{% if variant and variant|lower != 'default' %}
+  {% set attributes = attributes.addClass('accordion-' ~ variant|lower|replace({'_': '-'})) %}
 {% endif %}
 {% set attributes = attributes.addClass('accordion') %}
 {% set attributes = accordion_id ? attributes.setAttribute('id', accordion_id) : attributes %}
diff --git a/templates/patterns/alert/pattern-alert.html.twig b/templates/patterns/alert/pattern-alert.html.twig
index 3c6a3bd2..5e883166 100644
--- a/templates/patterns/alert/pattern-alert.html.twig
+++ b/templates/patterns/alert/pattern-alert.html.twig
@@ -1,8 +1,5 @@
-{% if variant != '' and variant|lower != 'default' %}
-  {% set variants = variant|split('__') %}
-  {% for variant in variants %}
-    {% set attributes = attributes.addClass('alert-' ~ variant|lower|replace({'_': '-'})) %}
-  {% endfor %}
+{% if variant and variant|lower != 'default' %}
+  {% set attributes = attributes.addClass('alert-' ~ variant|lower|replace({'_': '-'})) %}
 {% endif %}
 
 {% if dismissible %}
diff --git a/templates/patterns/button/pattern-button.html.twig b/templates/patterns/button/pattern-button.html.twig
index 8b0e4feb..5a0f47b6 100644
--- a/templates/patterns/button/pattern-button.html.twig
+++ b/templates/patterns/button/pattern-button.html.twig
@@ -1,12 +1,10 @@
-{% if variant != '' and variant|lower != 'default' and variant|lower != 'dropdown_item' %}
-  {% set variants = variant|split('__') %}
-  {% for variant in variants %}
-    {% set attributes = attributes.addClass('btn-' ~ variant|lower|replace({'_': '-'})) %}
-  {% endfor %}
+{% if variant and variant|lower != 'default' and variant|lower != 'dropdown_item' %}
+  {% set variants = variant|split('__')|map(v => v|lower|replace({(v): 'btn-' ~ v})|replace({'_': '-'})) %}
+  {% set attributes = attributes.addClass(variants) %}
   {% set attributes = attributes.addClass('btn') %}
 {% endif %}
 
-{% set attributes = variant|lower == 'dropdown_item' ? attributes.addClass('dropdown-item') : attributes %}
+{% set attributes = (variant|lower == 'dropdown_item') ? attributes.addClass('dropdown-item') : attributes %}
 
 {% if label_visually_hidden %}
   {% set label %}
diff --git a/templates/patterns/button_group/pattern-button-group.html.twig b/templates/patterns/button_group/pattern-button-group.html.twig
index 3034edf6..d88c731f 100644
--- a/templates/patterns/button_group/pattern-button-group.html.twig
+++ b/templates/patterns/button_group/pattern-button-group.html.twig
@@ -1,8 +1,8 @@
-{% if variant != '' and variant|lower != 'default' %}
+{% if variant and variant|lower != 'default' %}
   {% set attributes = attributes.addClass('btn-group-' ~ variant|lower|replace({'_': '-'})) %}
 {% endif %}
 
-{% if variant != '' and variant|lower != 'vertical' %}
+{% if variant and variant|lower != 'vertical' %}
   {% set attributes = attributes.addClass('btn-group') %}
 {% endif %}
 
diff --git a/templates/patterns/carousel/pattern-carousel.html.twig b/templates/patterns/carousel/pattern-carousel.html.twig
index 79e2e6d6..9ef0a99e 100644
--- a/templates/patterns/carousel/pattern-carousel.html.twig
+++ b/templates/patterns/carousel/pattern-carousel.html.twig
@@ -1,8 +1,6 @@
-{% if variant != '' and variant|lower != 'default' %}
-  {% set variants = variant|split('__') %}
-  {% for variant in variants %}
-    {% set attributes = attributes.addClass('carousel-' ~ variant|lower|replace({'_': '-'})) %}
-  {% endfor %}
+{% if variant and variant|lower != 'default' %}
+  {% set variants = variant|split('__')|map(v => v|lower|replace({(v): 'carousel-' ~ v})|replace({'_': '-'})) %}
+  {% set attributes = attributes.addClass(variants) %}
 {% endif %}
 
 {% if not with_touch %}
diff --git a/templates/patterns/dropdown/pattern-dropdown.html.twig b/templates/patterns/dropdown/pattern-dropdown.html.twig
index 52d964a1..e6cb3473 100644
--- a/templates/patterns/dropdown/pattern-dropdown.html.twig
+++ b/templates/patterns/dropdown/pattern-dropdown.html.twig
@@ -1,8 +1,6 @@
-{% if variant != '' and variant|lower != 'default' %}
-  {% set variants = variant|split('__') %}
-  {% for variant in variants %}
-    {% set attributes = attributes.addClass(variant|lower|replace({'_': '-'})) %}
-  {% endfor %}
+{% if variant and variant|lower != 'default' %}
+  {% set variants = variant|split('__')|map(v => v|lower|replace({'_': '-'})) %}
+  {% set attributes = attributes.addClass(variants) %}
 {% endif %}
 
 {% set button_type = button_type|default('button') %}
diff --git a/templates/patterns/dropdown_item/pattern-dropdown-item.html.twig b/templates/patterns/dropdown_item/pattern-dropdown-item.html.twig
index 213fa4d5..9e87fc98 100644
--- a/templates/patterns/dropdown_item/pattern-dropdown-item.html.twig
+++ b/templates/patterns/dropdown_item/pattern-dropdown-item.html.twig
@@ -1,8 +1,5 @@
-{% if variant != '' and variant|lower != 'default' %}
-  {% set variants = variant|split('__') %}
-  {% for variant in variants %}
-    {% set attributes = attributes.addClass(variant|lower|replace({'_': '-'})) %}
-  {% endfor %}
+{% if variant and variant|lower != 'default' %}
+  {% set attributes = attributes.addClass(variant|lower|replace({'_': '-'})) %}
 {% endif %}
 
 {% if variant|lower == 'dropdown_divider' %}
diff --git a/templates/patterns/list/pattern-list.html.twig b/templates/patterns/list/pattern-list.html.twig
index 2c923755..f6de36cf 100644
--- a/templates/patterns/list/pattern-list.html.twig
+++ b/templates/patterns/list/pattern-list.html.twig
@@ -1,4 +1,4 @@
-{% if variant != '' and variant|lower != 'default' %}
+{% if variant and variant|lower != 'default' %}
   {% set attributes = attributes.addClass('list-' ~ variant|lower|replace({'_': '-'})) %}
 {% endif %}
 
diff --git a/templates/patterns/list_group/pattern-list-group.html.twig b/templates/patterns/list_group/pattern-list-group.html.twig
index 96a189e9..d248b00c 100644
--- a/templates/patterns/list_group/pattern-list-group.html.twig
+++ b/templates/patterns/list_group/pattern-list-group.html.twig
@@ -1,4 +1,4 @@
-{% if variant != '' and variant|lower != 'default' %}
+{% if variant and variant|lower != 'default' %}
   {% set attributes = attributes.addClass('list-group-' ~ variant|lower|replace({'_': '-'})) %}
 {% endif %}
 
diff --git a/templates/patterns/list_group_item/pattern-list-group-item.html.twig b/templates/patterns/list_group_item/pattern-list-group-item.html.twig
index 866828e0..aa6a02d8 100644
--- a/templates/patterns/list_group_item/pattern-list-group-item.html.twig
+++ b/templates/patterns/list_group_item/pattern-list-group-item.html.twig
@@ -1,8 +1,5 @@
-{% if variant != '' and variant|lower != 'default' %}
-  {% set variants = variant|split('__') %}
-  {% for variant in variants %}
-    {% set attributes = attributes.addClass('list-group-item-' ~ variant|lower|replace({'_': '-'})) %}
-  {% endfor %}
+{% if variant and variant|lower != 'default' %}
+  {% set attributes = attributes.addClass('list-group-item-' ~ variant|lower|replace({'_': '-'})) %}
 {% endif %}
 
 {% set attributes = attributes.addClass('list-group-item') %}
diff --git a/templates/patterns/nav/pattern-nav.html.twig b/templates/patterns/nav/pattern-nav.html.twig
index 27d90388..9a6eee59 100644
--- a/templates/patterns/nav/pattern-nav.html.twig
+++ b/templates/patterns/nav/pattern-nav.html.twig
@@ -1,8 +1,6 @@
-{% if variant != '' and variant|lower != 'default' %}
-  {% set variants = variant|split('__') %}
-  {% for variant in variants %}
-    {% set attributes = attributes.addClass('nav-' ~ variant|lower|replace({'_': '-'})) %}
-  {% endfor %}
+{% if variant and variant|lower != 'default' %}
+  {% set variants = variant|split('__')|map(v => v|lower|replace({(v): 'nav-' ~ v})|replace({'_': '-'})) %}
+  {% set attributes = attributes.addClass(variants) %}
 {% endif %}
 
 {% set nav_type = nav_type|default('ul') %}
diff --git a/templates/patterns/navbar/pattern-navbar.html.twig b/templates/patterns/navbar/pattern-navbar.html.twig
index fedb27aa..f8bc667a 100644
--- a/templates/patterns/navbar/pattern-navbar.html.twig
+++ b/templates/patterns/navbar/pattern-navbar.html.twig
@@ -1,9 +1,8 @@
-{% if variant != '' and variant|lower != 'default' %}
-  {% set variants = variant|split('__') %}
-  {% for variant in variants %}
-    {% set attributes = attributes.addClass('navbar-' ~ variant|lower|replace({'_': '-'})) %}
-  {% endfor %}
+{% if variant and variant|lower != 'default' %}
+  {% set variants = variant|split('__')|map(v => v|lower|replace({(v): 'navbar-' ~ v})|replace({'_': '-'})) %}
+  {% set attributes = attributes.addClass(variants) %}
 {% endif %}
+
 {% set attributes = attributes.addClass('navbar') %}
 
 {% set placement = placement|default('default') %}
diff --git a/templates/patterns/navbar_nav/pattern-navbar-nav.html.twig b/templates/patterns/navbar_nav/pattern-navbar-nav.html.twig
index 40d48f0b..4c575938 100644
--- a/templates/patterns/navbar_nav/pattern-navbar-nav.html.twig
+++ b/templates/patterns/navbar_nav/pattern-navbar-nav.html.twig
@@ -1,9 +1,7 @@
-{% if variant != '' and variant|lower != 'default' %}
-  {% set variants = variant|split('__') %}
-  {% for variant in variants %}
-    {% set attributes = attributes.addClass('navbar-nav-' ~ variant|lower|replace({'_': '-'})) %}
-  {% endfor %}
+{% if variant and variant|lower != 'default' %}
+  {% set attributes = attributes.addClass('navbar-nav-' ~ variant|lower|replace({'_': '-'})) %}
 {% endif %}
+
 {% set attributes = attributes.addClass('navbar-nav') %}
 
 {% set dark = dark|default(false) %}
diff --git a/templates/patterns/pagination/pattern-pagination.html.twig b/templates/patterns/pagination/pattern-pagination.html.twig
index 6da16997..790b8da8 100644
--- a/templates/patterns/pagination/pattern-pagination.html.twig
+++ b/templates/patterns/pagination/pattern-pagination.html.twig
@@ -1,4 +1,4 @@
-{% if variant != '' and variant|lower != 'default' %}
+{% if variant and variant|lower != 'default' %}
   {% set attributes = attributes.addClass('pagination-' ~ variant|lower|replace({'_': '-'})) %}
 {% endif %}
 
@@ -49,7 +49,7 @@
   {% set attributes = attributes ?: create_attribute() %}
   {% set attributes = aria_label ? attributes.setAttribute('aria-label', aria_label) : attributes %}
   <a{{ attributes.addClass('page-link').setAttribute('href', href) }}>
-    {% if aria_label is not empty %}
+    {% if aria_label %}
     <span aria-hidden="true">{{ text }}</span>
     {% else %}
     {{ text }}
diff --git a/templates/patterns/progress/pattern-progress.html.twig b/templates/patterns/progress/pattern-progress.html.twig
index 9429babd..b7bc09f6 100644
--- a/templates/patterns/progress/pattern-progress.html.twig
+++ b/templates/patterns/progress/pattern-progress.html.twig
@@ -1,8 +1,6 @@
-{% if variant != '' and variant|lower != 'default' %}
-  {% set variants = variant|split('__') %}
-  {% for variant in variants %}
-    {% set attributes = attributes.addClass('progress-bar-' ~ variant|lower|replace({'_': '-'})) %}
-  {% endfor %}
+{% if variant and variant|lower != 'default' %}
+  {% set variants = variant|split('__')|map(v => v|lower|replace({(v): 'progress-bar-' ~ v})|replace({'_': '-'})) %}
+  {% set attributes = attributes.addClass(variants) %}
 {% endif %}
 
 {% set wrapper_attributes = create_attribute() %}
diff --git a/templates/patterns/table/pattern-table.html.twig b/templates/patterns/table/pattern-table.html.twig
index 88de5219..66cf21bb 100644
--- a/templates/patterns/table/pattern-table.html.twig
+++ b/templates/patterns/table/pattern-table.html.twig
@@ -4,11 +4,9 @@
 {% set tfoot_attributes = create_attribute() %}
 
 {% set attributes = attributes.addClass('table') %}
-{% if variant != '' and variant|lower != 'default' %}
-  {% set variants = variant|split('__') %}
-  {% for variant in variants %}
-    {% set attributes = attributes.addClass('table-' ~ variant|lower|replace({'_': '-'})) %}
-  {% endfor %}
+{% if variant and variant|lower != 'default' %}
+  {% set variants = variant|split('__')|map(v => v|lower|replace({(v): 'table-' ~ v})|replace({'_': '-'})) %}
+  {% set attributes = attributes.addClass(variants) %}
 {% endif %}
 
 {% if stripes %}
@@ -44,7 +42,7 @@
  * be applied to the correct table group.
  */
 #}
-{% if divider is not empty %}
+{% if divider %}
   {% if 'thead' in divider %}
     {% set thead_attributes = thead_attributes.addClass('table-group-divider') %}
   {% endif %}
-- 
GitLab