From ca3930a258b4225a745495d51852db8508eeb2e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n=20Bolonio?= Date: Thu, 28 Jul 2022 14:20:58 +0000 Subject: [PATCH 1/4] Add new a11y rubocop rule: NoPositiveTabindex --- .../cop/github/rails_no_positive_tabindex.rb | 32 +++++++++++++++++++ test/test_rails_no_positive_tabindex.rb | 28 ++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 lib/rubocop/cop/github/rails_no_positive_tabindex.rb create mode 100644 test/test_rails_no_positive_tabindex.rb diff --git a/lib/rubocop/cop/github/rails_no_positive_tabindex.rb b/lib/rubocop/cop/github/rails_no_positive_tabindex.rb new file mode 100644 index 00000000..2a63fbe1 --- /dev/null +++ b/lib/rubocop/cop/github/rails_no_positive_tabindex.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: true + +require "rubocop" + +module RuboCop + module Cop + module GitHub + module Accessibility + class NoPositiveTabindex < Base + MSG = "Positive tabindex is error-prone and often inaccessible." + + def on_send(node) + receiver, method_name, *args = *node + if receiver.nil? + args.select do |arg| + arg.type == :hash + end.each do |hash| + hash.each_pair do |key, value| + next if key.type == :dsym + next unless key.respond_to?(:value) + if key.value == :tabindex && value.source.to_i > 0 + add_offense(hash) + end + end + end + end + end + end + end + end + end +end diff --git a/test/test_rails_no_positive_tabindex.rb b/test/test_rails_no_positive_tabindex.rb new file mode 100644 index 00000000..db174acf --- /dev/null +++ b/test/test_rails_no_positive_tabindex.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true + +require_relative "./cop_test" +require "minitest/autorun" +require "rubocop/cop/github/rails_no_positive_tabindex" + +class NoPositiveTabindex < CopTest + def cop_class + RuboCop::Cop::GitHub::Accessibility::NoPositiveTabindex + end + + def test_no_positive_tabindex_alt_offense + offenses = erb_investigate cop, <<-ERB, "app/views/products/index.html.erb" + <%= button_tag "Continue", :tabindex => 3 %> + ERB + + assert_equal 1, offenses.count + assert_equal "Positive tabindex is error-prone and often inaccessible.", offenses[0].message + end + + def test_no_positive_tabindex_alt_no_offense + offenses = erb_investigate cop, <<-ERB, "app/views/products/index.html.erb" + <%= button_tag "Continue", :tabindex => -1 %> + ERB + + assert_equal 0, offenses.count + end +end From 41721c30eeda4f8eeadee35ced822cd541dc28a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n=20Bolonio?= Date: Mon, 1 Aug 2022 09:18:22 +0000 Subject: [PATCH 2/4] Add documentation, Move to accessibility folder, Add config --- config/accessibility.yml | 5 ++- guides/no-positive-tabindex.md | 24 ++++++++++++++ .../accessibility/no_positive_tabindex.rb | 32 +++++++++++++++++++ .../test_no_positive_tabindex.rb | 28 ++++++++++++++++ 4 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 guides/no-positive-tabindex.md create mode 100644 lib/rubocop/cop/github/accessibility/no_positive_tabindex.rb create mode 100644 test/accessibility/test_no_positive_tabindex.rb diff --git a/config/accessibility.yml b/config/accessibility.yml index 00f871c6..69a1e5b1 100644 --- a/config/accessibility.yml +++ b/config/accessibility.yml @@ -3,4 +3,7 @@ require: GitHub/Accessibility/ImageHasAlt: Enabled: true - StyleGuide: https://github.com/github/rubocop-github/blob/master/guides/image-has-alt.md \ No newline at end of file + StyleGuide: https://github.com/github/rubocop-github/blob/master/guides/image-has-alt.md +GitHub/Accessibility/NoPositiveTabindex: + Enabled: true + StyleGuide: https://github.com/github/rubocop-github/blob/master/guides/no-positive-tabindex.md \ No newline at end of file diff --git a/guides/no-positive-tabindex.md b/guides/no-positive-tabindex.md new file mode 100644 index 00000000..e51af7d8 --- /dev/null +++ b/guides/no-positive-tabindex.md @@ -0,0 +1,24 @@ +# GitHub/Accessibility/NoPositiveTabindex + +## Rule Details + +Positive tabindex is error-prone and often inaccessible. + +## Resources + +- [F44: Failure of Success Criterion 2.4.3 due to using tabindex to create a tab order that does not preserve meaning and operability](https://www.w3.org/TR/WCAG20-TECHS/F44.html) +- [Deque University: Avoid Using Tabindex with Positive Numbers](https://dequeuniversity.com/tips/tabindex-positive-numbers) + +## Examples +### **Incorrect** code for this rule 👎 + +```erb +<%= button_tag "Continue", :tabindex => 3 %> +``` + +### **Correct** code for this rule 👍 + +```erb + +<%= button_tag "Continue", :tabindex => -1 %> +``` diff --git a/lib/rubocop/cop/github/accessibility/no_positive_tabindex.rb b/lib/rubocop/cop/github/accessibility/no_positive_tabindex.rb new file mode 100644 index 00000000..2a63fbe1 --- /dev/null +++ b/lib/rubocop/cop/github/accessibility/no_positive_tabindex.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: true + +require "rubocop" + +module RuboCop + module Cop + module GitHub + module Accessibility + class NoPositiveTabindex < Base + MSG = "Positive tabindex is error-prone and often inaccessible." + + def on_send(node) + receiver, method_name, *args = *node + if receiver.nil? + args.select do |arg| + arg.type == :hash + end.each do |hash| + hash.each_pair do |key, value| + next if key.type == :dsym + next unless key.respond_to?(:value) + if key.value == :tabindex && value.source.to_i > 0 + add_offense(hash) + end + end + end + end + end + end + end + end + end +end diff --git a/test/accessibility/test_no_positive_tabindex.rb b/test/accessibility/test_no_positive_tabindex.rb new file mode 100644 index 00000000..482c9c42 --- /dev/null +++ b/test/accessibility/test_no_positive_tabindex.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true + +require_relative "./cop_test" +require "minitest/autorun" +require "rubocop/cop/github/accessibility/no_positive_tabindex" + +class NoPositiveTabindex < CopTest + def cop_class + RuboCop::Cop::GitHub::Accessibility::NoPositiveTabindex + end + + def test_no_positive_tabindex_alt_offense + offenses = erb_investigate cop, <<-ERB, "app/views/products/index.html.erb" + <%= button_tag "Continue", :tabindex => 3 %> + ERB + + assert_equal 1, offenses.count + assert_equal "Positive tabindex is error-prone and often inaccessible.", offenses[0].message + end + + def test_no_positive_tabindex_alt_no_offense + offenses = erb_investigate cop, <<-ERB, "app/views/products/index.html.erb" + <%= button_tag "Continue", :tabindex => -1 %> + ERB + + assert_equal 0, offenses.count + end +end From 4054a2f273d4596b9ce84c32eb384f776230379b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n=20Bolonio?= Date: Mon, 1 Aug 2022 09:38:07 +0000 Subject: [PATCH 3/4] Move tests --- .../no_positive_tabindex.rb | 0 .../cop/github/rails_no_positive_tabindex.rb | 32 ------------------- .../test_no_positive_tabindex.rb | 0 test/test_rails_no_positive_tabindex.rb | 28 ---------------- 4 files changed, 60 deletions(-) rename lib/rubocop/cop/github/{accessibility => }/no_positive_tabindex.rb (100%) delete mode 100644 lib/rubocop/cop/github/rails_no_positive_tabindex.rb rename test/{accessibility => }/test_no_positive_tabindex.rb (100%) delete mode 100644 test/test_rails_no_positive_tabindex.rb diff --git a/lib/rubocop/cop/github/accessibility/no_positive_tabindex.rb b/lib/rubocop/cop/github/no_positive_tabindex.rb similarity index 100% rename from lib/rubocop/cop/github/accessibility/no_positive_tabindex.rb rename to lib/rubocop/cop/github/no_positive_tabindex.rb diff --git a/lib/rubocop/cop/github/rails_no_positive_tabindex.rb b/lib/rubocop/cop/github/rails_no_positive_tabindex.rb deleted file mode 100644 index 2a63fbe1..00000000 --- a/lib/rubocop/cop/github/rails_no_positive_tabindex.rb +++ /dev/null @@ -1,32 +0,0 @@ -# frozen_string_literal: true - -require "rubocop" - -module RuboCop - module Cop - module GitHub - module Accessibility - class NoPositiveTabindex < Base - MSG = "Positive tabindex is error-prone and often inaccessible." - - def on_send(node) - receiver, method_name, *args = *node - if receiver.nil? - args.select do |arg| - arg.type == :hash - end.each do |hash| - hash.each_pair do |key, value| - next if key.type == :dsym - next unless key.respond_to?(:value) - if key.value == :tabindex && value.source.to_i > 0 - add_offense(hash) - end - end - end - end - end - end - end - end - end -end diff --git a/test/accessibility/test_no_positive_tabindex.rb b/test/test_no_positive_tabindex.rb similarity index 100% rename from test/accessibility/test_no_positive_tabindex.rb rename to test/test_no_positive_tabindex.rb diff --git a/test/test_rails_no_positive_tabindex.rb b/test/test_rails_no_positive_tabindex.rb deleted file mode 100644 index db174acf..00000000 --- a/test/test_rails_no_positive_tabindex.rb +++ /dev/null @@ -1,28 +0,0 @@ -# frozen_string_literal: true - -require_relative "./cop_test" -require "minitest/autorun" -require "rubocop/cop/github/rails_no_positive_tabindex" - -class NoPositiveTabindex < CopTest - def cop_class - RuboCop::Cop::GitHub::Accessibility::NoPositiveTabindex - end - - def test_no_positive_tabindex_alt_offense - offenses = erb_investigate cop, <<-ERB, "app/views/products/index.html.erb" - <%= button_tag "Continue", :tabindex => 3 %> - ERB - - assert_equal 1, offenses.count - assert_equal "Positive tabindex is error-prone and often inaccessible.", offenses[0].message - end - - def test_no_positive_tabindex_alt_no_offense - offenses = erb_investigate cop, <<-ERB, "app/views/products/index.html.erb" - <%= button_tag "Continue", :tabindex => -1 %> - ERB - - assert_equal 0, offenses.count - end -end From db3bad5487c79821ae4a5b6ea83f1cb5be6c2d19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n=20Bolonio?= Date: Mon, 1 Aug 2022 09:38:51 +0000 Subject: [PATCH 4/4] Move rule --- .../cop/github/{ => accessibility}/no_positive_tabindex.rb | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename lib/rubocop/cop/github/{ => accessibility}/no_positive_tabindex.rb (100%) diff --git a/lib/rubocop/cop/github/no_positive_tabindex.rb b/lib/rubocop/cop/github/accessibility/no_positive_tabindex.rb similarity index 100% rename from lib/rubocop/cop/github/no_positive_tabindex.rb rename to lib/rubocop/cop/github/accessibility/no_positive_tabindex.rb pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy