-
-
Notifications
You must be signed in to change notification settings - Fork 5.6k
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
a11y: Improve accessibility of dropdown menus #8638
Conversation
Please address the lint errors from the build: https://drone.gitea.io/go-gitea/gitea/14488/1/7 You do the checks locally using:
|
I'll fix the lint errors that are mine, but a lot are from Semantic's dropdown.js. What should be done about that? |
That's a good question. We normally use the /vendor directory to place external libraries, which are exempt from linting. But only when they are untouched (e.g. right from npm). Is that the case here, or you had to edit it to make it work? (I can imagine the answer). |
The semantic.dropdown.js is taken from Semantic UI then edited to add accessibility features, so it's definitely not from upstream- in commit #2 of this patch series I explicitly added a note at the top of the file that it's been modified for Gitea. |
I've found a bug in this: aria-expanded and aria-activedescendant are set regardless of the current role, so I'll have to fix that too. |
I also realized I use double quotes instead of single quotes in a lot of places, and more style fixes. |
@Jookia No problem. You can edit the title and prefix it with |
Okay, I think all my issues are fixed. Linting shows no errors from my lines of code either, aside from one issue that matches the rest of the Sementic code base. |
Codecov Report
@@ Coverage Diff @@
## master #8638 +/- ##
==========================================
- Coverage 41.23% 41.22% -0.01%
==========================================
Files 544 544
Lines 70002 70002
==========================================
- Hits 28865 28859 -6
- Misses 37445 37450 +5
- Partials 3692 3693 +1
Continue to review full report at Codecov.
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I guess all drop-down boxes will be affected by this. What Gitea UI operations would you suggest we can test to see the differences in behavior?
templates/user/dashboard/navbar.tmpl
Outdated
@@ -11,18 +11,16 @@ | |||
<div class="ui header"> | |||
{{.i18n.Tr "home.switch_dashboard_context"}} | |||
</div> | |||
<div class="scrolling menu items"> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I didn't remove just the scrolling, I removed the entire sub container. How would I test to see if it's large enough to fill the screen?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just create more organizations
public/js/semantic.dropdown.js
Outdated
* | ||
*/ | ||
|
||
/* This version has been modified for Gitea */ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
/* This version has been modified for Gitea */ | |
/* | |
* Copyright 2019 The Gitea Authors. All rights reserved. | |
* This version has been modified by Gitea to improve accessibility. | |
*/ |
I'm not sure why the first comment starts with /*!
instead of /*
, though.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can I leave out the 'All rights reserved.'? Seems a bit weird given it's under the MIT license
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think you have to still put it as it's standard boilerplate. I'd probably put the comment before the copyright so as to make it clear that only the modifications are Gitea's but it's ok
Finally had time to run this. There's an issue with using the keyboard on any of the dropdowns in that the visible label of dropdown changes including losing the down arrow. You probably need to set the aria-label instead. |
@guillep2k This should only affect dropdown menus, meaning dropdown items that you can't search, select multiple values, or store a value for a form. So in practice, just the menus that you click on that perform an action instead of setting a value, like navigation or setting repository collaborator. I would suggest testing that you can tab past these menus properly, and hear them on a screen reader (if you have one installed.) @zeripath I do set the aria-label appropriately. The problem you're noticing is present in the existing codebase and not introduced by these commits. It's strange behavior, but that's how Semantic works. |
@Jookia Ugh I think that needs fixing too! If it's too hard to get sorted then maybe we can fix it later(?) |
I don't think it's a fix for this PR, since it requires a lot more research of the code base. To elaborate: Semantic doesn't understand what an actual 'menu' is, it just knows about dropdowns and some mixins like having it be a form or have the items search, etc. So when used for navigation menus, it changes the value on the actual item just as you would when selecting an element in a list box. Sometimes it does this when you click on some dropdown menus too, such as the languages at the bottom of the screen. It doesn't do it other times when you click on things such as sort buttons or the navigation buttons. The logic behind this is something I would have to dig in to. We could just say 'dropdowns that don't set a value (aka menus) shouldn't remember their currently selected item', which would reflect them being used for menus better- after all, if they don't set a value they're likely going to contain links or actions instead. But sometimes you want them to remember their value when you use the menus for things like repository collaboration permissions which is a plain 'menu' but its actions don't take you away from the page so you want its selection to stay. |
To be clear: I really don't want to change any user visible behavior in this PR, just make it accessible. I feel like changes to behavior would need long discussion about what the right behavior is in an issue, and I don't want that to impede this PR's goal of just having the menus accessible to keyboards and screen readers. If you want I can do up an issue explaining what UI problems dropdown menus have an open the discussion there. |
No worries - I understand what you're saying. The menus changing their title when you tap through them is a problem for accessibility (but not all of our dropdowns act as menus.) However I think there's enough in the pr already - it doesn't need to fix everything! I was just worried that was a regression but as it's not that's great. |
I agree with @guilep2k comments. I'll have another play to see if I can break anything but if you address those and I can't break anything then I would approve |
Setting tabindex=-1 on focusable elements within dropdown menus allows the user to treat dropdown menus as a single focusable item with its own internal navigation using arrow keys.
Menu items are often <a> elements, which jQuery refuses to trigger click events on. Instead it just bubbles up to the menu. Using HTMLElement's click method fixes this and makes menu items clickable from the keyboard using dropdown menus.
Setting role= makes assistive technology aware there is a widget here. In this case, Orca will now exit browse mode and allow us to capture keydown events when focused on a dropdown menu. It will also inform the user that there's a menu focused. Since dropdowns can be used in multiple elements each with different ARIA roles, a guessRole method is used to find the correct role. All roles I consider possible are listed, but only menu is implemented.
This is deliberately done before the transition finishes so that screen readers get immediate feedback.
This makes dropdown menu buttons screen reader accessible. aria-labelledby refers to an element using an ID, so the chosen labels are now assigned a unique ID- This ID is not stable, do not refer to it with user scripts.
As the menus grab focus and navigate by tracking a 'selected' div class, assistive technology has no idea that what the current selection is. Assign IDs to each menu item and set aria-activedescendant to the ID of the currently selected menu item. When the menu is unfocused, remove aria-activedescendant- This isn't neccessary but in my experience it triggers Orca to remind the user of their current selection when re-focusing the menu.
This file is taken from Semantic UI which isn't linted upstream. Ignore it as we won't fix these issues.
What is submodule |
Good catch, that was a mistake as I had it checked out there on my dev machine. Removed. |
So this is short another approval. I asked @guillep2k but frontend isn't his speciality, so it looks like it might be @silverwind or some other maintainer that will have to do it. |
To be clearer to help people discover the differences between semantic 2.3.1's dropdown and @Jookia s changes. Here's a unified diff: --- semanti.dropdown.js.original 2018-03-19 04:04:27.000000000 +0000
+++ semantic.dropdown.js 2019-11-03 20:24:41.929563833 +0000
@@ -8,6 +8,13 @@
*
*/
+/*
+ * Copyright 2019 The Gitea Authors
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ * This version has been modified by Gitea to improve accessibility.
+ */
+
;(function ($, window, document, undefined) {
'use strict';
@@ -33,6 +40,7 @@
query = arguments[0],
methodInvoked = (typeof query == 'string'),
queryArguments = [].slice.call(arguments, 1),
+ lastAriaID = 1,
returnedValue
;
@@ -114,6 +122,8 @@
module.observeChanges();
module.instantiate();
+
+ module.aria.setup();
}
},
@@ -296,6 +306,86 @@
}
},
+ aria: {
+ setup: function() {
+ var role = module.aria.guessRole();
+ if( role !== 'menu' ) {
+ return;
+ }
+ $module.attr('aria-busy', 'true');
+ $module.attr('role', 'menu');
+ $module.attr('aria-haspopup', 'menu');
+ $module.attr('aria-expanded', 'false');
+ $menu.find('.divider').attr('role', 'separator');
+ $item.attr('role', 'menuitem');
+ $item.each(function (index, item) {
+ if( !item.id ) {
+ item.id = module.aria.nextID('menuitem');
+ }
+ });
+ $text = $module
+ .find('> .text')
+ .eq(0)
+ ;
+ if( $module.data('content') ) {
+ $text.attr('aria-hidden');
+ $module.attr('aria-label', $module.data('content'));
+ }
+ else {
+ $text.attr('id', module.aria.nextID('menutext'));
+ $module.attr('aria-labelledby', $text.attr('id'));
+ }
+ $module.attr('aria-busy', 'false');
+ },
+ nextID: function(prefix) {
+ var nextID;
+ do {
+ nextID = prefix + '_' + lastAriaID++;
+ } while( document.getElementById(nextID) );
+ return nextID;
+ },
+ setExpanded: function(expanded) {
+ if( $module.attr('aria-haspopup') ) {
+ $module.attr('aria-expanded', expanded);
+ }
+ },
+ refreshDescendant: function() {
+ if( $module.attr('aria-haspopup') !== 'menu' ) {
+ return;
+ }
+ var
+ $currentlySelected = $item.not(selector.unselectable).filter('.' + className.selected).eq(0),
+ $activeItem = $menu.children('.' + className.active).eq(0),
+ $selectedItem = ($currentlySelected.length > 0)
+ ? $currentlySelected
+ : $activeItem
+ ;
+ if( $selectedItem ) {
+ $module.attr('aria-activedescendant', $selectedItem.attr('id'));
+ }
+ else {
+ module.aria.removeDescendant();
+ }
+ },
+ removeDescendant: function() {
+ if( $module.attr('aria-haspopup') == 'menu' ) {
+ $module.removeAttr('aria-activedescendant');
+ }
+ },
+ guessRole: function() {
+ var
+ isIcon = $module.hasClass('icon'),
+ hasSearch = module.has.search(),
+ hasInput = ($input.length > 0),
+ isMultiple = module.is.multiple()
+ ;
+ if ( !isIcon && !hasSearch && !hasInput && !isMultiple ) {
+ return 'menu';
+ }
+ return 'unknown';
+ }
+ },
+
setup: {
api: function() {
var
@@ -335,6 +425,7 @@
if(settings.allowTab) {
module.set.tabbable();
}
+ $item.attr('tabindex', '-1');
},
select: function() {
var
@@ -477,6 +568,8 @@
return true;
}
if(settings.onShow.call(element) !== false) {
+ module.aria.setExpanded(true);
+ module.aria.refreshDescendant();
module.animate.show(function() {
if( module.can.click() ) {
module.bind.intent();
@@ -499,6 +592,8 @@
if( module.is.active() && !module.is.animatingOutward() ) {
module.debug('Hiding dropdown');
if(settings.onHide.call(element) !== false) {
+ module.aria.setExpanded(false);
+ module.aria.removeDescendant();
module.animate.hide(function() {
module.remove.visible();
callback.call(element);
@@ -902,7 +997,7 @@
;
if(hasSelected && !module.is.multiple()) {
module.debug('Forcing partial selection to selected item', $selectedItem);
- module.event.item.click.call($selectedItem, {}, true);
+ $selectedItem[0].click();
return;
}
else {
@@ -1363,7 +1458,7 @@
// allow selection with menu closed
if(isAdditionWithoutMenu) {
module.verbose('Selecting item from keyboard shortcut', $selectedItem);
- module.event.item.click.call($selectedItem, event);
+ $selectedItem[0].click();
if(module.is.searchSelection()) {
module.remove.searchTerm();
}
@@ -1380,7 +1475,7 @@
}
else if(selectedIsSelectable) {
module.verbose('Selecting item from keyboard shortcut', $selectedItem);
- module.event.item.click.call($selectedItem, event);
+ $selectedItem[0].click();
if(module.is.searchSelection()) {
module.remove.searchTerm();
}
@@ -1405,6 +1500,7 @@
.closest(selector.item)
.addClass(className.selected)
;
+ module.aria.refreshDescendant();
event.preventDefault();
}
}
@@ -1421,6 +1517,7 @@
.find(selector.item).eq(0)
.addClass(className.selected)
;
+ module.aria.refreshDescendant();
event.preventDefault();
}
}
@@ -1445,6 +1542,7 @@
$nextItem
.addClass(className.selected)
;
+ module.aria.refreshDescendant();
module.set.scrollPosition($nextItem);
if(settings.selectOnKeydown && module.is.single()) {
module.set.selectedItem($nextItem);
@@ -1472,6 +1570,7 @@
$nextItem
.addClass(className.selected)
;
+ module.aria.refreshDescendant();
module.set.scrollPosition($nextItem);
if(settings.selectOnKeydown && module.is.single()) {
module.set.selectedItem($nextItem);
@@ -2399,6 +2498,7 @@
module.set.scrollPosition($nextValue);
$selectedItem.removeClass(className.selected);
$nextValue.addClass(className.selected);
+ module.aria.refreshDescendant();
if(settings.selectOnKeydown && module.is.single()) {
module.set.selectedItem($nextValue);
} |
Doesn't look like this is going to get reviewed, so I'm closing this PR and keeping these changes local. |
re-opening as I'm reviewing it right now (I've been travelling for the past while so I haven't been able to get to bigger reviews) |
Oh, thanks! |
@Jookia thank you so much for your PR, we really appreciate it. |
I'm glad to hear that. Thanks everyone here. Hopefully I'll find time to do some more accessibility PRs. :) |
* BREAKING * Remove unused endpoints (go-gitea#9538) * Prefix all user-generated IDs in markup (go-gitea#9477) * Enforce Gitea environment for pushes (go-gitea#8982) * Hide some user information via API if user have no enough permission (go-gitea#8655) * Move startpage/homepage translation to crowdin (go-gitea#8596) * FEATURES * Webhooks should only show sender if it makes sense (go-gitea#9601) * Provide Default messages for merges (go-gitea#9393) * Add description to labels on create issue (go-gitea#9392) * Graceful Queues: Issue Indexing and Tasks (go-gitea#9363) * Default NO_REPLY_ADDRESS to DOMAIN (go-gitea#9325) * Allow FCGI over unix sockets (go-gitea#9298) * Graceful: Xorm, RepoIndexer, Cron and Others (go-gitea#9282) * Add API for Reactions (go-gitea#9220) * Graceful: Cancel Process on monitor pages & HammerTime (go-gitea#9213) * Graceful: Allow graceful restart for unix sockets (go-gitea#9113) * Graceful: Allow graceful restart for fcgi (go-gitea#9112) * Sign protected branches (go-gitea#8993) * Add Graceful shutdown for Windows and hooks for shutdown of goroutines (go-gitea#8964) * Add Gitea icon to Emojis (go-gitea#8950) * Expand/Collapse Files and Blob Excerpt while Reviewing/Comparing code (go-gitea#8924) * Allow Custom Reactions (go-gitea#8886) * Close/reopen issues by keywords in titles and comments (go-gitea#8866) * Allow incompletely specified Time Formats (go-gitea#8816) * Prevent upload (overwrite) of lfs locked file (go-gitea#8769) * Template Repositories (go-gitea#8768) * Add /milestones endpoint (go-gitea#8733) * Make repository management section handle lfs locks (go-gitea#8726) * Respect LFS File Lock on UI (go-gitea#8719) * Add team option to grant rights for all organization repositories (go-gitea#8688) * Enabling and disabling the commit button to prevent empty commits (web editor) (go-gitea#8590) * Add setting to disable BASIC authentication (go-gitea#8586) * Expose db.SetMaxOpenConns and allow non MySQL dbs to set conn pool params (go-gitea#8528) * Allow Protected Branches to Whitelist Deploy Keys (go-gitea#8483) * Push to create repo (go-gitea#8419) * Sign merges, CRUD, Wiki and Repository initialisation with gpg key (go-gitea#7631) * Add basic repository lfs management (go-gitea#7199) * BUGFIXES * Disable remove button on repository teams when have access to all (go-gitea#9640) * Clean up old references on branch delete (go-gitea#9614) * Hide public repos owned by private orgs (go-gitea#9609) * Fix access issues on milestone and issue overview pages. (go-gitea#9603) * Fix error logged when repos qs is empty (go-gitea#9591) * Dont trigger notification twice on issue assignee change (go-gitea#9582) * Fix mirror pushed commit actions (go-gitea#9572) * Allow only specific columns to be updated on issue via API (go-gitea#9189) (go-gitea#9539) * Fix default avatar for ghost user (go-gitea#9536) * Fix download of release attachments with same name (go-gitea#9529) * Resolve deprecated INI conversion (go-gitea#9525) * Ignore empty avatars during database migration (go-gitea#9520) * Fix deleted branch isn't removed when push the branch again (go-gitea#9516) * Fix repository issues pagination bug when there are more than one label filter (go-gitea#9512) * Fix SetExpr failed (go-gitea#9506) * Remove obsolete file private/push_update.go (go-gitea#9503) * When recreating hooks, delete them first so they are recreated with the umask (go-gitea#9502) * Properly enforce gitea environment for pushes (go-gitea#9501) * Fix datarace on repo indexer queue (go-gitea#9490) * Add call to load repo prior to redirect in add/remove dependency code (go-gitea#9484) * Wrap the code indexer (go-gitea#9476) * Use Req.URL.RequestURI() to cope with FCGI urls (go-gitea#9473) * Set default ssh.minimum_key_sizes (go-gitea#9466) * Fixed issue with paging in /repos/{owner}/{repo}/git/trees/{sha} api (go-gitea#9459) * Fix wrong notification on merge (go-gitea#9450) * Issue with Migration rule v111 (go-gitea#9449) * Trigger webhook when deleting a branch after merging a PR (go-gitea#9424) * Add migration to sanitize repository original_url (go-gitea#9423) * Use OriginalURL instead of CloneAddr in migration logging (go-gitea#9418) * Push update after branch is restored (go-gitea#9416) * Fix wrong migration (go-gitea#9381) * Fix show repositories filter (go-gitea#9234) (go-gitea#9379) * Fix Slack webhook payload title generation to work with Mattermost (go-gitea#9378) * Fix double webhook for new PR (go-gitea#9375) * AuthorizedKeysCommand should not query db directly (go-gitea#9371) * Fix missed change to GetManager() (go-gitea#9361) * Fix cache problem on dashboard (go-gitea#9358) * RepoIndexer: DefaultBranch needs to be prefixed by BranchPrefix (go-gitea#9356) * Fix protected branch using IssueID (go-gitea#9348) * Fix nondeterministic behavior (go-gitea#9341) * Fix PR/issue redirects when having external tracker (go-gitea#9339) * Remove release attachments which repository has been deleted (go-gitea#9334) * Fix issue indexer not triggered when migrating a repository (go-gitea#9332) * Add SyncTags to uploader interface (go-gitea#9326) * Fix bug that release attachment files not deleted when deleting repository (go-gitea#9322) * Only sync tags after all migration release batches are completed (go-gitea#9319) * File Edit: Author/Committer interchanged (go-gitea#9297) * prebuild CSS/JS before xgo release binaries (go-gitea#9293) * Log: Ensure FLAGS=none shows no flags (go-gitea#9287) * Make Diff Detail on Pull Request Changed File UI always on Top (go-gitea#9280) * Switch CSS minifier to cssnano (go-gitea#9260) * Fix latest docker image haven't include static files. (go-gitea#9252) * Don't link wiki revision to commit (go-gitea#9244) * Change review content column to type text in db (go-gitea#9229) * Fixed topic regex pattern and added search by topic links after save (go-gitea#9219) * Add language to user API responce (go-gitea#9215) * Correct tooltip message blocked by dependencies (go-gitea#9211) * Add SimpleMDE and Fix Image Paste for Issue/Comment Editor (go-gitea#9197) * Fix panic when diff (go-gitea#9187) * Fix go-gitea#9151 - smtp logger configuration sendTos should be an array (go-gitea#9154) * Fix max length check and limit in multiple repo forms (go-gitea#9148) * Always Show Password Field on Link Account Sign-in Page (go-gitea#9147) * Properly fix displaying virtual session provider in admin panel (go-gitea#9137) * Fix race condition on indexer (go-gitea#9136) * Fix team links in HTML rendering (go-gitea#9127) * Fix race condition in ReplaceSanitizer (go-gitea#9123) * Fix what information is shown about user in API (go-gitea#9115) * Fix nil context user for template repositories (go-gitea#9099) * Hide given credentials for migrated repos. (go-gitea#9097) * Fix reCAPTCHA API URL (go-gitea#9083) * Fix password checks on admin create/edit user (go-gitea#9076) * Update golang.org/x/crypto vendor to use acme v2 (go-gitea#9056) * Ensure Written is set in GZIP ProxyResponseWriter (go-gitea#9018) * Fix wrong system notice when repository is empty (go-gitea#9010) * Fix broken link to branch from issue list (go-gitea#9003) * Fix bug when pack js (go-gitea#8992) * New review approvals shouldn't require a message (go-gitea#8991) * Shadow password correctly for session config (go-gitea#8984) * Don't send notification on pending reviews (go-gitea#8943) * Fix Notify Create Ref Error on tag creation (go-gitea#8936) * Convert EOL to UNIX-style to render MD properly (go-gitea#8925) * Migrate temp_repo.go to use git.NewCommand (go-gitea#8918) * Fix issue with user.fullname (go-gitea#8902) * Add Close() method to gogitRepository (go-gitea#8901) * Enable punctuations ending mentions (go-gitea#8889) * Fix password complexity check on registration (go-gitea#8887) * Fix require external registration password (go-gitea#8885) * Fix edit content button on migrated issue content (go-gitea#8877) * Fix permission checks for close/reopen from commit (go-gitea#8875) * Fix API Bug (fail on empty assignees) (go-gitea#8873) * Stop using git count-objects and use raw directory size for repository (go-gitea#8848) * Fix count for commit graph last page (go-gitea#8843) * Fix to close opened io resources as soon as not needed (go-gitea#8839) * Improve notification (go-gitea#8835) * Fix new user form for non-local users (go-gitea#8826) * Fix: remove duplicated signed commit icons (go-gitea#8820) * Fix (open/closed) issue count when label excluded (go-gitea#8815) * Fix SSH2 conditional in key parsing code (go-gitea#8806) * Fix 500 when edit hook (go-gitea#8782) * On windows set core.longpaths true (go-gitea#8776) * Fix commit expand button to not go to commit link (go-gitea#8745) * Avoid re-issuing redundant cross-references. (go-gitea#8734) * Fix milestone close timestamp function (go-gitea#8728) * Move webhook codes from service to webhook notification (go-gitea#8712) * Show zero lines on the line counter if the file empty (go-gitea#8700) * Fix deadline on update issue or PR via API (go-gitea#8696) * make call createMilestoneComment on newIssue func (go-gitea#8678) * Send tag create and push webhook when release created on UI (go-gitea#8671) * Prevent chrome download page as html with alt + click (go-gitea#8669) * Fix 500 when getting user as unauthenticated user (go-gitea#8653) * Graceful fixes (go-gitea#8645) * Add SubURL to redirect path (go-gitea#8632) (go-gitea#8634) * Fix extra columns from `label` table (go-gitea#8633) * Add SubURL to redirect path for transferred/renamed repos (go-gitea#8632) * Fix bug when migrate from API (go-gitea#8631) * Allow to merge if file path contains " or \ (go-gitea#8629) * Prevent removal of non-empty emoji panel following selection of duplicate (go-gitea#8609) * Ensure default gpg settings not nil and found commits have reference to repo (go-gitea#8604) * Set webhook Content-Type for application/x-www-form-urlencoded (go-gitea#8599) * Fix go-gitea#8582 by handling empty repos (go-gitea#8587) * Fix of the diff statistics view on pull request's (go-gitea#8581) * Fix bug on pull requests when transfer head repository (go-gitea#8564) * Fix template error on account page (go-gitea#8562) * Allow externalID to be UUID (go-gitea#8551) * Fix ignored error on editorconfig api (go-gitea#8550) * Fix user avatar name (go-gitea#8547) * Ensure that GitRepo is set on Empty repositories (go-gitea#8539) * Add missed close in ServeBlobLFS (go-gitea#8527) * Fix migrate mirror 500 bug (go-gitea#8526) * Fix password complexity regex for special characters (on master) (go-gitea#8525) * ENHANCEMENTS * Add a /user/login landing page option (go-gitea#9622) * Some more e-mail notification fixes (go-gitea#9596) * Add branch protection option to block merge on requested changes. (go-gitea#9592) * Add footer extra links template (go-gitea#9576) * Fix for a wrong URL in activity page of repository. (go-gitea#9571) * Update default issue template (go-gitea#9568) * Change markdown rendering from blackfriday to goldmark (go-gitea#9533) * Extend file create api with dates (go-gitea#9464) * Add ActionCommentPull action (go-gitea#9456) * Response for context on retry database connection (go-gitea#9444) * Refactor webhooks to reduce code duplication (go-gitea#9422) * update couchbase deps for new license (go-gitea#9419) * Add .ignore file for search tools (go-gitea#9417) * Remove unsued struct (go-gitea#9405) * Hide not allowed Reactions (go-gitea#9387) * Remove text from action-only webhooks (go-gitea#9377) * Move PushToBaseRepo from models to services/pull (go-gitea#9352) * Site admin could view org's members (go-gitea#9346) * Sleep longer if request speed is over github limitation (go-gitea#9335) * Refactor comment (go-gitea#9330) * Refactor code indexer (go-gitea#9313) * Remove SavePatch and generate patches on the fly (go-gitea#9302) * Move some pull request functions from models to services (go-gitea#9266) * Update JS dependencies (go-gitea#9255) * Show label list on label set (go-gitea#9251) * Redirect issue if repo has configured external tracker. (go-gitea#9247) * Allow kbd tags (go-gitea#9245) * Remove unused comment actions (go-gitea#9222) * Fixed errors logging in dump.go (go-gitea#9218) * Expose release counter to repo API response (go-gitea#9214) * Make consistent links to repository in the Slack/Mattermost notificiations (go-gitea#9205) * Expose pull request counter to repo API response (go-gitea#9202) * Extend TrackedTimes API (go-gitea#9200) * Extend StopWatch API (go-gitea#9196) * Move code indexer related code to a new package (go-gitea#9191) * Docker: ask s6 to stop all service when gitea stop (go-gitea#9171) * Variable expansion in repository templates (go-gitea#9163) * Add avatar and issue labels to template repositories (go-gitea#9149) * Show single review comments in the PR conversation tab (go-gitea#9143) * Extract createComment (go-gitea#9125) * Move PushUpdateOptions from models to repofiles (go-gitea#9124) * Alternate syntax for cross references (go-gitea#9116) * Add USE_SERVICE_WORKER setting (go-gitea#9110) * Only show part of members on orgnization dashboard and add paging for orgnization members page (go-gitea#9092) * Explore page: Add topic param to pagination (go-gitea#9077) (go-gitea#9078) * Markdown: Sanitizier Configuration (go-gitea#9075) * Add password requirement info on error (go-gitea#9074) * Allow authors to use act keywords in PR content (go-gitea#9059) * Move modules/gzip to gitea.com/macaron/gzip (go-gitea#9058) * Branch protection: Possibility to not use whitelist but allow anyone with write access (go-gitea#9055) * Context menus for comments, add quote reply (go-gitea#9043) * Update branch API endpoint to show effective branch protection. (go-gitea#9031) * Move git graph from models to modules/graph (go-gitea#9027) * Move merge actions to notification (go-gitea#9024) * Move mirror sync actions to notification (go-gitea#9022) * Add retry for migration http/https requests (go-gitea#9019) * Rewrite delivery of issue and comment mails (go-gitea#9009) * Add review comments to mail notifications (go-gitea#8996) * Refactor pull request review (go-gitea#8954) * Githook highlighter (go-gitea#8932) * Add git hooks and webhooks to template repositories; move to services (go-gitea#8926) * Only view branch or tag if it match refType requested. (go-gitea#8899) * Drop Admin attribute based on LDAP when login (continue go-gitea#1743) (go-gitea#8849) * Add additional periods to activity page (go-gitea#8829) * Update go-org to optimize code (go-gitea#8824) * Move some actions to notification/action (go-gitea#8779) * Webhook support custom proxy (go-gitea#8760) * Fix API deadline removal (go-gitea#8759) * Mark review comment as invalidated when file is deleted (go-gitea#8751) * Move pull list code to a separate file (go-gitea#8748) * Move webhook to a standalone package under modules (go-gitea#8747) * Multi repo select on issue page (go-gitea#8741) * apply exclude label on milestone issue list (go-gitea#8739) * Move issue notifications and assignee man (go-gitea#8713) * Move issue change content from models to service (go-gitea#8711) * Move issue change status from models to service (go-gitea#8691) * Move more issue assignee code from models to issue service (go-gitea#8690) * Create PR on Current Repository by Default (go-gitea#8670) * Improve Open Graph Protocol (go-gitea#8637) * Batch hook pre- and post-receive calls (go-gitea#8602) * Improve webhooks (go-gitea#8583) * Move transfer repository and rename repository on a service package and start action notification (go-gitea#8573) * Implement/Fix PR review webhooks (go-gitea#8570) * Rewrite markdown rendering to blackfriday v2 and rewrite orgmode rendering to go-org (go-gitea#8560) * Move some repositories' operations to a standalone service package (go-gitea#8557) * Allow more than 255 characters for tokens in external_login_user table (go-gitea#8554) * Move issue label operations to issue service package (go-gitea#8553) * Adjust error reporting from merge failures and use LC_ALL=C for git (go-gitea#8548) * Mail assignee when issue/pull request is assigned (go-gitea#8546) * Allow committing / adding empty files using the web ui (go-gitea#8420) (go-gitea#8532) * Move sync mirror actions to mirror service package (go-gitea#8518) * Remove arrows on numeric inputs (go-gitea#8516) * Support inline rendering of CUSTOM_URL_SCHEMES (go-gitea#8496) * Recalculate repository access only for specific user (go-gitea#8481) * Add download button for rull request diff- and patch-file (go-gitea#8470) * Add single sign-on support via SSPI on Windows (go-gitea#8463) * Move change issue title from models to issue service package (go-gitea#8456) * Add included tag on branch view (go-gitea#8449) * Make static resouces web browser cache time customized on app.ini (go-gitea#8442) * Enable Uploading/Removing Attachments When Editing an Issue/Comment (go-gitea#8426) * Add pagination to commit graph page (go-gitea#8360) * Use templates for issue e-mail subject and body (go-gitea#8329) * Move clearlabels from models to issue service (go-gitea#8326) * Move AddTestPullRequestTask to pull service package from models (go-gitea#8324) * Team permission to create repository in organization (go-gitea#8312) * Allows external rendering of other filetypes (go-gitea#8300) * Add 'Alt + click' feature to exclude labels (go-gitea#8199) * Configurable close and reopen keywords for PRs (go-gitea#8120) * Configurable URL for static resources (go-gitea#7911) * Unifies commit list in repository commit table and wiki revision page (go-gitea#7907) * Allow cross-repository dependencies on issues (go-gitea#7901) * Auto-subscribe user to repository when they commit/tag to it (go-gitea#7657) * Restore Graceful Restarting & Socket Activation (go-gitea#7274) * wiki - add 'write' 'preview' buttons to wiki edit like in issues (go-gitea#7241) * Change target branch for pull request (go-gitea#6488) * Display PR commits and diffs using base repo rather than forked (go-gitea#3648) * SECURITY * Swagger hide search field (go-gitea#9554) * Add "search" to reserved usernames (go-gitea#9063) * Switch to fomantic-ui (go-gitea#9374) * Only serve attachments when linked to issue/release and if accessible by user (go-gitea#9340) * Hide credentials when submitting migration through API (go-gitea#9102) * TESTING * Add debug option to serv to help debug problems (go-gitea#9492) * Fix the intermittent TestGPGGit failures (go-gitea#9360) * Testing: Update postgres sequences (go-gitea#9304) * Missed defer prepareTestEnv (go-gitea#9285) * Fix "data race" in testlogger (go-gitea#9159) * Yet another attempt to fix the intermittent failure of gpg git test (go-gitea#9146) * integrations: Fix Dropped Test Errors (go-gitea#9040) * services/mirror: fix dropped test errors (go-gitea#9007) * Fix intermittent GPG Git test failure (go-gitea#8968) * Update Github Migration Tests (go-gitea#8893) (go-gitea#8938) * Update heatmap fixtures to restore tests (go-gitea#8615) * TRANSLATION * Fix placeholders in the error message (go-gitea#9060) * Fix spelling of admin.users.max_repo_creation (go-gitea#8934) * Improve german translation of homepage (go-gitea#8549) * BUILD * Update gitea.com/macaron to 1.4.0 (go-gitea#9608) * Upgrade lato fonts to v16. (go-gitea#9498) * Update alpine to 3.11 (go-gitea#9440) * Upgrade blevesearch (go-gitea#9177) * Remove built js/css files from git (go-gitea#9114) * Move semantic.dropdown.custom.js to webpack (go-gitea#9064) * Check compiled files during build (go-gitea#9042) * Enable lazy-loading of gitgraph.js (go-gitea#9036) * Pack web_src/js/draw.js to public/js/index.js (go-gitea#8975) * Modernize js and use babel (go-gitea#8973) * Move index.js to web_src and use webpack to pack them (go-gitea#8598) * Restrict modules/graceful to non-windows build and shim IsChild (go-gitea#8537) * Upgrade gopkg.in/editorconfig/editorconfig-core-go.v1 (go-gitea#8501) * DOCS * Swagger info corrections (go-gitea#9441) (go-gitea#9558) * Add ALLOW_ONLY_EXTERNAL_REGISTRATION to config cheat sheet (go-gitea#8986) * Rephrase comment about RuntimeDirectory option in systemd config (go-gitea#8912) * Explicitly indicate the socket unit to use the service unit "gitea.service" (go-gitea#8804) * Adjust the must-change-password help (go-gitea#8755) * Add notice to docs for migrating from more recent versions of Gogs (go-gitea#8724) * Add explicit info about customization of homepage (go-gitea#8694) * Change external asciidoctor tool to embedded mode (go-gitea#8677) * Add Docker fail2ban configuration (go-gitea#8642) * Correct some outdated statements in the contributing guidelines (go-gitea#8612) * Basic Design guidelines (describing different parts of the code) (go-gitea#8601) * Display Gitea logo in Readme (go-gitea#8592) * Fix building from source docs to ref AppWorkPath (go-gitea#8567) * Update the provided gitea.service to mention socket activation (go-gitea#8531) * Doc added how to setup email (go-gitea#8520) * MISC * Add translatable Powered by Gitea text in footer (go-gitea#9600) * Add contrib/environment-to-ini (go-gitea#9519) * Remove unnecessary loading of settings in update hook (go-gitea#9496) * Update gitignore list (go-gitea#9437) * Update license list (go-gitea#9436) * Fix background reactions in the arc-green theme (go-gitea#9421) * Update and fix chardet import (go-gitea#9351) * Ensure LF on checkouts and in editors (go-gitea#9259) * Fixed topics margin (go-gitea#9248) * Add comment to exported function WindowsServiceName (make revive) (go-gitea#9241) * Remove empty lines on issues/pulls page (go-gitea#9232) * Fix Add Comment Button's "+" Position (go-gitea#9140) * Add first issue comment hashtag (go-gitea#9052) * Change some label colors (go-gitea#9051) * Fix double scroll in branch dropdown (go-gitea#9048) * Add comment highlight when target from url (go-gitea#9047) * Update display of reactions to issues and comments (go-gitea#9038) * Button tooltip formatting under Branches (go-gitea#9034) * Allow setting default branch via API (go-gitea#9030) * Update dashboard context for PR reviews (go-gitea#8995) * Show repository size in repo home page and settings (go-gitea#8940) * Allow to add and remove all repositories to/from team. (go-gitea#8867) * Show due date in dashboard issues list (go-gitea#8860) * Theme arc-green: reverse heatmap colors (go-gitea#8840) * Project files table style update (go-gitea#8757) * gitignore debugging file from vscode (go-gitea#8740) * Add API for Issue set Subscription (go-gitea#8729) * Make 100% width search bar (go-gitea#8710) * Update color theme for heatmap (go-gitea#8709) * Add margin to title_wip_desc (go-gitea#8705) * Improve visibility of "Pending" indicator (go-gitea#8685) * Improve accessibility of dropdown menus (go-gitea#8638) * Make /users/{username}/repos list private repos the current user has access to (go-gitea#8621) * Prevent .code-view from overriding font on icon fonts (go-gitea#8614) * Add id references on all issue events to allow internal linking (go-gitea#8608) * Upgrade xorm to v0.8.0 (go-gitea#8536) * Upgrade gopkg.in/ini.v1 (go-gitea#8500) * Update CodeMirror to version 5.49.0 (go-gitea#8381) * Wiki editor: enable side-by-side button (go-gitea#7242)
@Jookia did you file the PR to Fomantic UI's dropdown.js yet? I could have a look but would prefer if you as the author do it. We're now using Fomantic UI and I'm evaluating dropping our custom file because we're already missing out on recent changes to the module. |
@silverwind you could apply the patch in #8638 (comment) |
@silverwind : I have stopped all work on accessibility in Gitea, and consider that dropdown.js patch unmaintained and probably done the wrong way |
@Jookia Er ... It is maintained. It is in our repo and we will maintain it. It might be incorrect but there's plenty of code in Gitea that's incorrect. If you're not interested in pushing it up - one of us will do it. I'm not sure what happened that has made you give up on us but I'm sorry that you have. |
I don't think I understand enough of this patch to submit it to Fomantic myself. I'm thinking it might be better to just drop the customization. We're loading a old version of dropdown.js on top of Fomantic's updated version. I'm pretty certain this will eventually break it in one of the next Fomanic updates and it already impacts page loading performance as it is an extraneous ~150kb file to be parsed/loaded. |
Fine I'll do it myself. |
This patch set fixes keyboard and screen reader accessibility for dropdown menus and lays the groundwork for improvements to other dropdown-related components such as list boxes and search menus.
Note that this doesn't change any behaviour of the dropdown menus themselves outside focusing, but the dropdown menus do seem a little strange compared to dropdown menus on other sites as they automatically open and retain their selected item between focuses.
To test this patch, just verify that: