From 7c281fc6003a15f54e1c628beb0d927ef19553b6 Mon Sep 17 00:00:00 2001
From: Arnaud Levy <contact@arnaudlevy.com>
Date: Tue, 27 Jun 2023 10:08:28 +0200
Subject: [PATCH] groups

---
 app/models/concerns/with_accessibility.rb     | 20 +++++++++++++++++++
 .../admin/application/a11y/_widget.html.erb   | 20 +++++++++++++------
 2 files changed, 34 insertions(+), 6 deletions(-)

diff --git a/app/models/concerns/with_accessibility.rb b/app/models/concerns/with_accessibility.rb
index 0e24f40f3..9656a9b3a 100644
--- a/app/models/concerns/with_accessibility.rb
+++ b/app/models/concerns/with_accessibility.rb
@@ -26,12 +26,32 @@ module WithAccessibility
     @accessibility_errors
   end
 
+  def accessibility_errors_grouped
+    @accessibility_errors_grouped ||= accessibility_create_groups(accessibility_errors)
+  end
+
   def accessibility_warnings
     check_accessibility_if_necessary
     @accessibility_warnings
   end
 
+  def accessibility_warnings_grouped
+    @accessibility_warnings_grouped ||= accessibility_create_groups(accessibility_warnings)
+  end
+  
   protected
+  
+  def accessibility_create_groups(identifiers)
+    hash = {}
+    identifiers.each do |identifier|
+      if hash.has_key?(identifier)
+        hash[identifier] += 1
+      else
+        hash[identifier] = 1
+      end
+    end
+    hash
+  end
 
   def check_accessibility_if_necessary
     unless @accessibility_checked
diff --git a/app/views/admin/application/a11y/_widget.html.erb b/app/views/admin/application/a11y/_widget.html.erb
index b1eb19a3a..4ebbb90fc 100644
--- a/app/views/admin/application/a11y/_widget.html.erb
+++ b/app/views/admin/application/a11y/_widget.html.erb
@@ -7,15 +7,19 @@ action = "<i class=\"#{ Icon::A11Y } #{ if_appstack 'fa-2x' } h4 float-end #{ co
   <% if horizontal %>
     <div class="row"><div class="offset-lg-4 col-lg-8 mt-lg-n4">
   <% end %>
-  <% if about.accessibility_errors.any? %>
+  <% if about.accessibility_errors_grouped.any? %>
     <p class="text-danger">
       <i class="<%= Icon::A11Y %>"></i>
       <%= t('accessibility.errors', count: about.accessibility_errors.count) %>
     </p>
     <ol class="list-unstyled">
-      <% about.accessibility_errors.each do |key| %>
+      <% about.accessibility_errors_grouped.each do |key, quantity| %>
         <li>
-          <%= osuny_label t("#{key}.title"), classes: 'text-danger' %>
+          <%
+          label =  t("#{key}.title")
+          label += " (× #{quantity})" if quantity > 1
+          %>
+          <%= osuny_label label, classes: 'text-danger' %>
           <p><%= t "#{key}.text_html" %></p>
         </li>
       <% end %>
@@ -26,12 +30,16 @@ action = "<i class=\"#{ Icon::A11Y } #{ if_appstack 'fa-2x' } h4 float-end #{ co
       <%= t 'accessibility.errors', count: 0 %>
     </p>
   <% end %>
-  <% if about.accessibility_warnings.any? %>
+  <% if about.accessibility_warnings_grouped.keys.any? %>
     <%= osuny_label t('accessibility.warnings', count: about.accessibility_warnings.count) %>
     <ul class="list-unstyled">
-      <% about.accessibility_warnings.each do |key| %>
+      <% about.accessibility_warnings_grouped.each do |key, quantity| %>
       <li>
-        <%= osuny_label t("#{key}.title") %>
+        <%
+        label =  t("#{key}.title")
+        label += " (× #{quantity})" if quantity > 1
+        %>
+        <%= osuny_label label %>
         <p>
           <%= t "#{key}.text_html" %>
         </p>
-- 
GitLab