Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore(grants): add eslint-plugin-vuejs-accessibility and disable errors flagged #3634

Merged
merged 5 commits into from
Nov 21, 2024

Conversation

lsr-explore
Copy link
Contributor

@lsr-explore lsr-explore commented Oct 14, 2024

Note: If this is approved, I will create issues and update the disable comments w/ issue numbers before merging

Ticket #

Description

Part of a Design Record to add support for

eslint-plugin-vuejs-accessibility

  • Add the plugin
  • Disable rules flagged

Screenshots / Demo Video

Rules flagged
image

Testing

Automated and Unit Tests

  • Added Unit tests

Manual tests for Reviewer

  • Added steps to test feature/functionality manually

Checklist

  • Provided ticket and description
  • Provided screenshots/demo
  • Provided testing information
  • Provided adequate test coverage for all new code
  • Added PR reviewers

@github-actions github-actions bot added dependencies Pull requests that update a dependency file javascript Pull requests that update Javascript code labels Oct 14, 2024
Copy link

github-actions bot commented Oct 14, 2024

QA Summary

QA Check Result
🌐 Client Tests
🔗 Server Tests
🤝 E2E Tests
📏 ESLint
🧹 TFLint

Test Coverage

Coverage report for `packages/client`
St File % Stmts % Branch % Funcs % Lines Uncovered Line #s
🔴 All files 35.81 34.5 32.55 37.39
🔴  src 0 100 100 0
🔴   App.vue 0 100 100 0 2-9
🔴  src/arpa_reporter 0 100 100 0
🔴   App.vue 0 100 100 0 2-13
🟡  ...ter/components 58.58 48 46.8 59.78
🟡   AlertBox.vue 80 75 50 80 13
🔴   ...oadButton.vue 20 0 0 20 2-7,38-67
🟢   ...ileButton.vue 100 100 100 100
🟢   ...ttonSmall.vue 100 100 100 100
🟢   ...mplateBtn.vue 100 100 100 100
🟡   ...avigation.vue 67.74 63.63 52.63 67.74 ...14-220,229-236
🔴   StandardForm.vue 45 50 41.66 45.45 ...25-129,136-158
🟢  ...porter/helpers 84.61 79.48 87.5 84.61
🟢   form-helpers.js 84.21 79.48 85.71 84.21 7,16,25,81-83
🟢   short-uuid.js 100 100 100 100
🔴  ...eporter/router 0 0 0 0
🔴   index.js 0 0 0 0 20-131
🔴  ...reporter/store 3.92 0 2.17 4.12
🔴   index.js 3.92 0 2.17 4.12 11-14,32-261
🔴  ...reporter/views 40.98 25.13 41.37 42.91
🟢   AgenciesView.vue 100 0 100 100 16
🔴   AgencyView.vue 40.74 36.36 50 45.83 53-62,70-96
🔴   HomeView.vue 26.66 34.14 36.36 26.66 36-66,113,137-207
🔴   LoginView.vue 29.62 36.36 20 30.76 1,6,21-36,74-102
🔴   ...plateView.vue 27.02 35.71 45.45 25 ...2,30-37,69-113
🔴   ...ploadView.vue 24.24 16.66 33.33 26.66 1,30-31,116-144
🔴   ...eriodView.vue 48 18.18 75 52.17 64-90
🟡   ...riodsView.vue 57.57 28.57 60 59.37 101,132,149-171
🔴   ...pientView.vue 40 10.52 30.76 41.02 73-93,110-152
🔴   ...ientsView.vue 48.48 8.33 46.66 53.33 ...46,165-190,203
🟡   UploadView.vue 61.53 43.75 62.5 61.36 ...41-442,448-449
🔴   UploadsView.vue 16.66 0 0 18.18 61,112-289
🔴   UserView.vue 46.34 33.33 68.75 48.64 84,97-137
🟡   UsersView.vue 60 7.69 62.5 66.66 91-92,105-107,123
🔴   ...ationView.vue 37.03 18.18 26.66 41.66 ...20,239,247-271
🟡  src/components 55.3 44.6 56.64 56.06
🔴   ...vityTable.vue 18.75 0 28.57 19.35 115-185
🟡   BaseLayout.vue 69.56 53.84 60 69.56 172,219-231
🔴   CopyButton.vue 30 33.33 40 30 6,54-63
🟢   ...tActivity.vue 80.76 62.85 83.33 80.76 ...31-136,179,201
🟢   GrantNotes.vue 90 78.26 85 89.79 ...87,207,216-217
🔴   GrantsTable.vue 45.03 38.77 45 46.85 ...52-456,464-544
🔴   ...dUploader.vue 24.24 33.33 37.5 24.24 16,25,74-111
🔴   SearchFilter.vue 40.74 28 37.5 40 ...52,64,67,72-82
🔴   ShareGrant.vue 38.7 64.28 23.07 40 ...08-112,131-152
🟢   ...ivityItem.vue 96.15 90.9 100 96.15 64
🟡   UserAvatar.vue 70 75 100 62.5 35-37
🟢   ...eaderText.vue 100 100 100 100
🔴  ...ponents/Modals 29.21 44.34 33.1 32.94
🔴   ...anization.vue 17.39 65.62 30 22.22 1-14,149-178
🔴   AddTeam.vue 45.45 55.55 61.53 57.69 ...06,212,224-247
🔴   AddUser.vue 36.66 66.66 60 37.5 ...40,145,148-176
🔴   ...anization.vue 15.38 64.28 14.28 16.66 1-17,60-80
🔴   EditTeam.vue 18.18 26.43 33.33 20.83 ...32,211,219-304
🔴   EditUser.vue 21.05 66.66 25 22.22 1,102-129
🔴   ...ilsLegacy.vue 22.03 0 0 24.07 131,177,205-369
🟢   ...Followers.vue 83.33 88.88 57.14 83.33 10,114-115
🟡   ImportTeams.vue 50 41.17 50 53.33 28,64-69,81-82
🔴   ImportUsers.vue 42.85 60 40 46.15 29,65-80
🔴   ...archPanel.vue 27.9 15.78 23.52 28.57 ...68-178,211-255
🔴   SearchPanel.vue 21.62 63.26 32 27.58 ...77-380,386-458
🔴  src/helpers 18.12 17.92 18.6 18.88
🟢   constants.js 100 100 100 100
🟢   currency.js 100 100 100 100
🟡   dates.js 66.66 100 33.33 100
🔴   fetchApi.js 6 13.79 5.26 6.12 10-12,20-132
🔴   filters.js 4 0 0 4.54 19-51
🔴   form-helpers.js 0 0 0 0 5-82
🟡   gtag.js 77.77 90 75 77.77 12,51
🟢   testHelpers.js 100 100 100 100
🔴   ...patWarning.js 0 0 0 0 39-61
🟢  ...s/featureFlags 84.61 100 71.42 84.61
🟡   index.js 60 100 60 60 8,16
🟢   utils.js 100 100 100 100
🔴  src/mixin 20 0 28.57 20
🔴   ...zableTable.js 20 0 28.57 20 16-31,36-37,42
🔴  src/router 18.91 14.28 11.11 18.91
🔴   index.js 18.91 14.28 11.11 18.91 ...76-177,181-200
🟢  src/store 100 100 100 100
🟢   index.js 100 100 100 100
🔴  src/store/modules 2.82 0 4.48 2.94
🔴   agencies.js 5.26 100 8.33 5.55 13-70
🔴   alerts.js 20 100 20 20 10-24
🔴   grants.js 0.99 0 0.97 1.03 61-456
🔴   organization.js 33.33 100 33.33 33.33 21-25
🔴   roles.js 20 100 20 25 13-22
🔴   tenants.js 11.11 100 14.28 12.5 13-32
🔴   users.js 2.43 0 4.76 2.5 17-100
🔴  src/views 44.73 37.22 33.77 46.55
🔴   ...orterView.vue 25.58 51.85 18.18 26.82 ...,64,87,112-154
🟡   ...boardView.vue 50 17.64 50 52 89-98,114-125
🔴   ...tailsView.vue 32.97 14.28 17.07 33.69 ...98-437,443-464
🟢   GrantsView.vue 100 100 100 100
🟡   LoginView.vue 56 38.88 44.44 58.33 25,140-162
🟡   MyGrantsView.vue 77.77 66.66 66.66 77.77 1,69
🟡   ...ofileView.vue 78.26 80 42.85 78.26 1,32,63,136-140
🟢   NotFoundView.vue 100 100 100 100
🔴   ...tionsView.vue 47.05 57.14 41.66 53.33 ...97-100,114-118
🔴   ...ivityView.vue 46.42 23.8 43.75 46.42 ...01,114,120-134
🔴   TeamsView.vue 44.44 88.88 41.66 53.33 1,58,142,156-163
🟡   UsersView.vue 50 66.66 36.36 53.84 ...16-121,133-139
Coverage report for `packages/server`
St File % Stmts % Branch % Funcs % Lines Uncovered Line #s
🟡 All files 59.98 53.39 55.88 60.07
🟢  src 81.81 0 50 81.81
🟢   configure.js 81.81 0 50 81.81 47-54,83-85
🟢  src/arpa_reporter 100 71.42 100 100
🟢   configure.js 100 33.33 100 100 34-41
🟢   environment.js 100 100 100 100
🟢   use-request.js 100 100 100 100
🟡  src/arpa_reporter/db 50.73 45.88 50 51.9
🟡   arpa-subrecipients.js 53.19 50 38.46 54.54 23-60,101,113-122
🔴   reporting-periods.js 37.2 46.87 40 38.09 46,77-156
🟢   settings.js 100 83.33 100 100 13
🟡   uploads.js 50 28.57 52.38 51.42 18-29,84,99-124,141-150
🔴  src/arpa_reporter/lib 29.57 33.08 34.56 28.46
🟢   arpa-ec-codes.js 100 100 100 100
🔴   audit-report.js 21.44 19.35 24.19 21.32 ...28-529,554-684,732-758
🟡   ensure-async-context.js 75 100 50 100
🟢   format.js 90.62 90 90 91.3 41-42
🟡   log.js 75 50 50 75 13,25
🟡   preconditions.js 66.66 33.33 100 66.66 3
🔴   spreadsheet.js 9.09 0 0 9.09 15-32
🟢   validation-error.js 85.71 100 50 85.71 16
🔴  src/arpa_reporter/routes 40 14.92 14.28 40.6
🔴   agencies.js 22.58 0 0 23.33 13-21,26-53
🟡   application_settings.js 75 100 0 75 10-11
🟡   audit-report.js 68.91 58.33 100 68.91 57-58,64-78,100-116
🟢   exports.js 81.42 83.33 100 81.42 61-75,98-99
🔴   reporting-periods.js 20 0 0 20.43 ...25-137,143-149,154-180
🔴   subrecipients.js 23.8 0 0 23.8 12-13,17-27,31-48,52-63
🔴   uploads.js 28.28 7.89 9.09 29.16 ...33-154,164-166,173-180
🔴   users.js 19.6 0 0 20 15-35,39-44,48-81
🔴  src/arpa_reporter/services 44.55 34.79 47.55 44.83
🔴   generate-arpa-report.js 36.86 2.77 50 37.24 ...-975,984-997,1071-1138
🔴   get-template.js 21.62 0 0 21.62 18-79
🟡   persist-upload.js 69.66 90 73.07 69.76 ...64-206,227-241,279-301
🔴   records.js 20.75 0 11.11 21.15 38-204,221-276
🔴   revalidate-uploads.js 37.5 100 0 37.5 5-14
🔴   validate-upload.js 43.56 58.51 37.03 44.2 ...52,371,393,411-688,703
🟢   validation-rules.js 98.18 90 90.9 100 157,173
🟡  src/db 74.26 71.42 68.42 74.29
🟢   connection.js 100 50 100 100 6
🟢   constants.js 100 100 100 100
🟡   helpers.js 75 83.33 50 75 5,21-22
🟢   index.js 82.4 78.54 82.08 82.35 ...56-1422,1604-1605,1612
🟢   saved_search_migration.js 92 88.23 71.42 93.61 5,69,134
🔴   tenant_creation.js 10.58 2.7 0 11.11 15-40,[...[Comment body truncated]

Copy link

github-actions bot commented Oct 14, 2024

Terraform Summary

Step Result
🖌 Terraform Format & Style
⚙️ Terraform Initialization
🤖 Terraform Validation
📖 Terraform Plan

Hint: If "Terraform Format & Style" failed, run terraform fmt -recursive from the terraform/ directory and commit the results.

Output

Validation Output
stdout:
Success! The configuration is valid.


-------------------------------------
stderr:

Plan Summary
CHANGE RESOURCE
add module.website.aws_s3_object.origin_dist_artifact["assets/ActivityTable-C-fNyvid.js"]
module.website.aws_s3_object.origin_dist_artifact["assets/ActivityTable-C-fNyvid.js.map"]
module.website.aws_s3_object.origin_dist_artifact["assets/ArpaAnnualPerformanceReporterView-DIo_wwNv.css"]
module.website.aws_s3_object.origin_dist_artifact["assets/ArpaAnnualPerformanceReporterView-Dj53tT-d.js"]
module.website.aws_s3_object.origin_dist_artifact["assets/ArpaAnnualPerformanceReporterView-Dj53tT-d.js.map"]
module.website.aws_s3_object.origin_dist_artifact["assets/DashboardView-DmBzPaTb.js"]
module.website.aws_s3_object.origin_dist_artifact["assets/DashboardView-DmBzPaTb.js.map"]
module.website.aws_s3_object.origin_dist_artifact["assets/GrantDetailsLegacy-CJuZ0j3K.js"]
module.website.aws_s3_object.origin_dist_artifact["assets/GrantDetailsLegacy-CJuZ0j3K.js.map"]
module.website.aws_s3_object.origin_dist_artifact["assets/GrantDetailsView-DEdiTBLV.js"]
module.website.aws_s3_object.origin_dist_artifact["assets/GrantDetailsView-DEdiTBLV.js.map"]
module.website.aws_s3_object.origin_dist_artifact["assets/GrantsTable-D8Ygx9co.js"]
module.website.aws_s3_object.origin_dist_artifact["assets/GrantsTable-D8Ygx9co.js.map"]
module.website.aws_s3_object.origin_dist_artifact["assets/GrantsView-KehfO6Xu.js"]
module.website.aws_s3_object.origin_dist_artifact["assets/GrantsView-KehfO6Xu.js.map"]
module.website.aws_s3_object.origin_dist_artifact["assets/MyGrantsView-zGiiXYpG.js"]
module.website.aws_s3_object.origin_dist_artifact["assets/MyGrantsView-zGiiXYpG.js.map"]
module.website.aws_s3_object.origin_dist_artifact["assets/MyProfileView-BolnzwlJ.js"]
module.website.aws_s3_object.origin_dist_artifact["assets/MyProfileView-BolnzwlJ.js.map"]
module.website.aws_s3_object.origin_dist_artifact["assets/NotFoundView-BNjo2bz7.js"]
module.website.aws_s3_object.origin_dist_artifact["assets/NotFoundView-BNjo2bz7.js.map"]
module.website.aws_s3_object.origin_dist_artifact["assets/OrganizationsView-C8uGq3hZ.js"]
module.website.aws_s3_object.origin_dist_artifact["assets/OrganizationsView-C8uGq3hZ.js.map"]
module.website.aws_s3_object.origin_dist_artifact["assets/RecentActivityView-BxgXZOBV.js"]
module.website.aws_s3_object.origin_dist_artifact["assets/RecentActivityView-BxgXZOBV.js.map"]
module.website.aws_s3_object.origin_dist_artifact["assets/RecordUploader-DYH3QSlH.js"]
module.website.aws_s3_object.origin_dist_artifact["assets/RecordUploader-DYH3QSlH.js.map"]
module.website.aws_s3_object.origin_dist_artifact["assets/TeamsView-DhUscaHf.js"]
module.website.aws_s3_object.origin_dist_artifact["assets/TeamsView-DhUscaHf.js.map"]
module.website.aws_s3_object.origin_dist_artifact["assets/UsersView-DrdWOVeS.js"]
module.website.aws_s3_object.origin_dist_artifact["assets/UsersView-DrdWOVeS.js.map"]
module.website.aws_s3_object.origin_dist_artifact["assets/arpa_reporter-9TQYtVmD.js"]
module.website.aws_s3_object.origin_dist_artifact["assets/arpa_reporter-9TQYtVmD.js.map"]
module.website.aws_s3_object.origin_dist_artifact["assets/form-helpers-DlUFpH9K.js"]
module.website.aws_s3_object.origin_dist_artifact["assets/form-helpers-DlUFpH9K.js.map"]
module.website.aws_s3_object.origin_dist_artifact["assets/main-DG-R3pZ3.js"]
module.website.aws_s3_object.origin_dist_artifact["assets/main-DG-R3pZ3.js.map"]
module.website.aws_s3_object.origin_dist_artifact["assets/style-C_Ko3h6y.js"]
module.website.aws_s3_object.origin_dist_artifact["assets/style-C_Ko3h6y.js.map"]
update module.api.aws_ecs_service.default[0]
module.api.module.grant_digest_scheduled_task.aws_iam_role_policy.default[0]
module.api.module.grant_digest_scheduled_task.aws_scheduler_schedule.default[0]
module.arpa_audit_report.aws_ecs_service.default
module.arpa_treasury_report.aws_ecs_service.default
module.consume_grants.aws_ecs_service.default
module.website.aws_s3_object.deploy-config[0]
module.website.aws_s3_object.origin_dist_artifact["arpa_reporter/index.html"]
module.website.aws_s3_object.origin_dist_artifact["index.html"]
recreate module.api.aws_ecs_task_definition.default[0]
module.arpa_audit_report.aws_ecs_task_definition.consumer
module.arpa_treasury_report.aws_ecs_task_definition.consumer
module.consume_grants.aws_ecs_task_definition.consume_grants
delete module.website.aws_s3_object.origin_dist_artifact["assets/ActivityTable-Bllyp-ei.js"]
module.website.aws_s3_object.origin_dist_artifact["assets/ActivityTable-Bllyp-ei.js.map"]
module.website.aws_s3_object.origin_dist_artifact["assets/ArpaAnnualPerformanceReporterView-BstdfYaY.css"]
module.website.aws_s3_object.origin_dist_artifact["assets/ArpaAnnualPerformanceReporterView-DntV6oys.js"]
module.website.aws_s3_object.origin_dist_artifact["assets/ArpaAnnualPerformanceReporterView-DntV6oys.js.map"]
module.website.aws_s3_object.origin_dist_artifact["assets/DashboardView-CpCkzYfL.js"]
module.website.aws_s3_object.origin_dist_artifact["assets/DashboardView-CpCkzYfL.js.map"]
module.website.aws_s3_object.origin_dist_artifact["assets/GrantDetailsLegacy-BV1PPHgo.js"]
module.website.aws_s3_object.origin_dist_artifact["assets/GrantDetailsLegacy-BV1PPHgo.js.map"]
module.website.aws_s3_object.origin_dist_artifact["assets/GrantDetailsView-Dssa49ZQ.js"]
module.website.aws_s3_object.origin_dist_artifact["assets/GrantDetailsView-Dssa49ZQ.js.map"]
module.website.aws_s3_object.origin_dist_artifact["assets/GrantsTable-Bdl3RgqK.js"]
module.website.aws_s3_object.origin_dist_artifact["assets/GrantsTable-Bdl3RgqK.js.map"]
module.website.aws_s3_object.origin_dist_artifact["assets/GrantsView-DfobLrOr.js"]
module.website.aws_s3_object.origin_dist_artifact["assets/GrantsView-DfobLrOr.js.map"]
module.website.aws_s3_object.origin_dist_artifact["assets/MyGrantsView-Csj8rqXP.js"]
module.website.aws_s3_object.origin_dist_artifact["assets/MyGrantsView-Csj8rqXP.js.map"]
module.website.aws_s3_object.origin_dist_artifact["assets/MyProfileView-DlHAwjOJ.js"]
module.website.aws_s3_object.origin_dist_artifact["assets/MyProfileView-DlHAwjOJ.js.map"]
module.website.aws_s3_object.origin_dist_artifact["assets/NotFoundView-DvpKI7Ho.js"]
module.website.aws_s3_object.origin_dist_artifact["assets/NotFoundView-DvpKI7Ho.js.map"]
module.website.aws_s3_object.origin_dist_artifact["assets/OrganizationsView-DsS1GSl7.js"]
module.website.aws_s3_object.origin_dist_artifact["assets/OrganizationsView-DsS1GSl7.js.map"]
module.website.aws_s3_object.origin_dist_artifact["assets/RecentActivityView-CZ_s48mh.js"]
module.website.aws_s3_object.origin_dist_artifact["assets/RecentActivityView-CZ_s48mh.js.map"]
module.website.aws_s3_object.origin_dist_artifact["assets/RecordUploader-g40O-8OH.js"]
module.website.aws_s3_object.origin_dist_artifact["assets/RecordUploader-g40O-8OH.js.map"]
module.website.aws_s3_object.origin_dist_artifact["assets/TeamsView-CMFH1J__.js"]
module.website.aws_s3_object.origin_dist_artifact["assets/TeamsView-CMFH1J__.js.map"]
module.website.aws_s3_object.origin_dist_artifact["assets/UsersView-D4l6Kb0F.js"]
module.website.aws_s3_object.origin_dist_artifact["assets/UsersView-D4l6Kb0F.js.map"]
module.website.aws_s3_object.origin_dist_artifact["assets/arpa_reporter-Cs_fIPCu.js"]
module.website.aws_s3_object.origin_dist_artifact["assets/arpa_reporter-Cs_fIPCu.js.map"]
module.website.aws_s3_object.origin_dist_artifact["assets/form-helpers-vzBjUpst.js"]
module.website.aws_s3_object.origin_dist_artifact["assets/form-helpers-vzBjUpst.js.map"]
module.website.aws_s3_object.origin_dist_artifact["assets/main-DpeM1uNX.js"]
module.website.aws_s3_object.origin_dist_artifact["assets/main-DpeM1uNX.js.map"]
module.website.aws_s3_object.origin_dist_artifact["assets/style-CGJKJiiD.js"]
module.website.aws_s3_object.origin_dist_artifact["assets/style-CGJKJiiD.js.map"]

Pusher: @TylerHendrickson, Action: pull_request_target, Workflow: Continuous Integration

@github-actions github-actions bot added the documentation Improvements or additions to documentation label Oct 14, 2024
@lsr-explore lsr-explore force-pushed the chore/eslint-plugin-accessibility branch from 00897f2 to 8f4f747 Compare October 14, 2024 02:58
@lsr-explore lsr-explore force-pushed the chore/eslint-plugin-accessibility branch 2 times, most recently from 0014b5b to 4713d4c Compare October 14, 2024 21:31
@lsr-explore lsr-explore force-pushed the chore/eslint-plugin-accessibility branch from 4713d4c to a0ad3a8 Compare October 14, 2024 21:34
Copy link
Member

@TylerHendrickson TylerHendrickson left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@lsr-explore Adding a few comments/considerations to the discussion. Thanks for putting this together!


### Negative Consequences <!-- optional -->

- Some devs may not know how to fix accessibility issues in Vue.js applications, and this may cause some friction in development or result in a number of rules being disabled.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it's likely that we could encounter this from time to time, although IMO that's certainly not a deal-breaker. That said, I'm wondering if we might be able to mitigate issues for newcomers by providing documentation – do you think there are any useful resource(s) that would be worth linking to from our docs/ directory, as a starting point?

Copy link
Contributor Author

@lsr-explore lsr-explore Oct 17, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If this was adopted, I would write up some introductory documentation. The package has some documentation, but their solution isn't always the most optimal for accessibility.

https://vue-a11y.github.io/eslint-plugin-vuejs-accessibility/rules/click-events-have-key-events.html


There is a ton of resources - will need to look for something that would be not overwhelming.

I like your idea of creating issues if items need to be temporarily disabled, and we can use a common tag, so devs can see examples from the code.


I can also put together an introduction to Accessibility to be reviewed during onboarding.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That would be excellent – thank you!


[Changes are in this PR with the Decision Record - #3634](https://github.com/usdigitalresponse/usdr-gost/pull/3634/files)

I can separate out the changes into separate PR if needed.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Assuming we end up adopting at least one of the recommended linters, I don't think it should be necessary to separate the code changes from this PR into a separate PR. However, I do think that we should make a plan to address the newly-introduced eslint-disable directives, which might entail having individual issues (either per-file, or else something more aligned with perceived level of effort) along with a parent issue we can use to track burn-down progress.

Copy link
Contributor Author

@lsr-explore lsr-explore Oct 17, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sounds good. If this is adopted, I plan to work on addressing the issues. Before merging, I'll create tech debt tickets and add them to the disable lines. I agree with your suggestion of one ticket per page.

One of the findings - autofocus would need to be reviewed w/ UX as it would change the behavior of the application. I don't know if this behavior was added by devs or specified by UX.

Accessibility concerns
Automatically focusing a form control can confuse visually-impaired people using screen-reading technology and people with cognitive impairments. When autofocus is assigned, screen-readers "teleport" their user to the form control without warning them beforehand.

Use careful consideration for accessibility when applying the autofocus attribute. Automatically focusing on a control can cause the page to scroll on load. The focus can also cause dynamic keyboards to display on some touch devices. While a screen reader will announce the label of the form control receiving focus, the screen reader will not announce anything before the label, and the sighted user on a small device will equally miss the context created by the preceding content.


label has for - I thought was an easy coding fix, but I ran into an conflict with the vue linter not allowing self closing elements - need to look into it a bit more


Key events and static interactions - This is generally fixed by using a semantic element - button, or link, but then the styles may need to be adjusted to match the current look and feel.

@lsr-explore lsr-explore marked this pull request as ready for review October 19, 2024 00:29
Copy link
Member

@TylerHendrickson TylerHendrickson left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@lsr-explore I think this proposal is in a good place and we haven't received any other concerns/pushback from the rest of the team, so I think we can consider this "Accepted" and move on with the items discussed in the comments. Thanks again for putting this together!


### Negative Consequences <!-- optional -->

- Some devs may not know how to fix accessibility issues in Vue.js applications, and this may cause some friction in development or result in a number of rules being disabled.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That would be excellent – thank you!

@TylerHendrickson TylerHendrickson enabled auto-merge (squash) November 21, 2024 20:10
@TylerHendrickson TylerHendrickson merged commit a6bb196 into main Nov 21, 2024
19 checks passed
@TylerHendrickson TylerHendrickson deleted the chore/eslint-plugin-accessibility branch November 21, 2024 20:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
dependencies Pull requests that update a dependency file documentation Improvements or additions to documentation javascript Pull requests that update Javascript code
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants