From 932d4cd6987092d6017e186a3167d1d8b1cc97da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20Mart=C3=ADn?= Date: Sun, 23 Feb 2025 22:55:14 +0100 Subject: [PATCH] Fix wrong ARIA attribute in dashboard actions form Using a `data-toggle` attribute, which we do since commit 07fd5084f, made Foundation generate an `aria-expanded` attribute to a radio button, but this attribute can't be present in radio buttons. This makes sense, since the main purpose of a radio button in a form is to choose an option, not to show/hide content. This resulted in the following error when checking the page with Axe: ``` Found 1 accessibility violation: aria-allowed-attr: Elements must only use supported ARIA attributes (critical) https://dequeuniversity.com/rules/axe/4.10/aria-allowed-attr?application=axeAPI The following 2 nodes violate this rule: Selector: #dashboard_action_action_type_proposed_action HTML: Fix all of the following: - ARIA attribute is not allowed: aria-expanded="true" Selector: #dashboard_action_action_type_resource HTML: Fix all of the following: - ARIA attribute is not allowed: aria-expanded="true" ``` So we're using custom JavaScript instead. We're also making the `short_description` field act as intended; since the changes in commit 07fd5084f it was never shown because it had the `hide` HTML class and it didn't have a `data-toggler` attribute. --- .../admin/dashboard/actions/form.js | 21 +++++++++++++++++++ app/assets/javascripts/application.js | 1 + .../proposal_dashboard_actions_helper.rb | 4 ---- .../admin/dashboard/actions/_form.html.erb | 10 +++------ spec/system/admin/dashboard/actions_spec.rb | 10 +++++++++ 5 files changed, 35 insertions(+), 11 deletions(-) create mode 100644 app/assets/javascripts/admin/dashboard/actions/form.js diff --git a/app/assets/javascripts/admin/dashboard/actions/form.js b/app/assets/javascripts/admin/dashboard/actions/form.js new file mode 100644 index 000000000..1ef7f4dc1 --- /dev/null +++ b/app/assets/javascripts/admin/dashboard/actions/form.js @@ -0,0 +1,21 @@ +(function() { + "use strict"; + App.AdminDashboardActionsForm = { + initialize: function() { + $("input[name='dashboard_action[action_type]']").on({ + change: function() { + switch ($(this).val()) { + case "proposed_action": + $("#request_to_administrators").hide(); + $("#short_description").hide(); + break; + case "resource": + $("#request_to_administrators").show(); + $("#short_description").show(); + } + } + }).filter("[checked]").trigger("change"); + } + }; +}).call(this); + diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index c2c3c8cfa..d1070d56a 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -169,6 +169,7 @@ var initialize_modules = function() { App.ColumnsSelector.initialize(); } App.AdminBudgetsWizardCreationStep.initialize(); + App.AdminDashboardActionsForm.initialize(); App.AdminMachineLearningScripts.initialize(); App.AdminPollShiftsForm.initialize(); App.AdminTenantsForm.initialize(); diff --git a/app/helpers/admin/proposal_dashboard_actions_helper.rb b/app/helpers/admin/proposal_dashboard_actions_helper.rb index 2b0cbddf2..17efbd100 100644 --- a/app/helpers/admin/proposal_dashboard_actions_helper.rb +++ b/app/helpers/admin/proposal_dashboard_actions_helper.rb @@ -8,8 +8,4 @@ module Admin::ProposalDashboardActionsHelper def default_actions %w[polls email poster] end - - def css_for_resource(action) - "hide" if action == "proposed_action" - end end diff --git a/app/views/admin/dashboard/actions/_form.html.erb b/app/views/admin/dashboard/actions/_form.html.erb index 3dd147172..a3a4301ea 100644 --- a/app/views/admin/dashboard/actions/_form.html.erb +++ b/app/views/admin/dashboard/actions/_form.html.erb @@ -5,9 +5,7 @@ <%= f.label :action_type %> <% ::Dashboard::Action.action_types.keys.each do |action_type_value| %> - <%= f.radio_button :action_type, - action_type_value, - data: { toggle: "request_to_administrators short_description" } %> + <%= f.radio_button :action_type, action_type_value %> <% end %> @@ -16,9 +14,7 @@ <%= f.check_box :active %> -
+
<%= f.check_box :request_to_administrators %>
@@ -28,7 +24,7 @@
<%= f.text_field :title %> -
+
<%= f.text_field :short_description %>
diff --git a/spec/system/admin/dashboard/actions_spec.rb b/spec/system/admin/dashboard/actions_spec.rb index 645ceea0a..302f2edc4 100644 --- a/spec/system/admin/dashboard/actions_spec.rb +++ b/spec/system/admin/dashboard/actions_spec.rb @@ -73,7 +73,17 @@ describe "Admin dashboard actions", :admin do end scenario "Updates the action" do + expect(page).to have_checked_field "Proposed action" + expect(page).to have_unchecked_field "Resource" + expect(page).not_to have_field "Short description" + expect(page).not_to have_field "Include in the resource a button to " \ + "request the resource from administrators" + + choose "Resource" + check "Include in the resource a button to request the resource from administrators" + fill_in "Title", with: "Great action!" + fill_in "Short description", with: "And awesome too!" click_button "Save" expect(page).to have_content "Great action!"