-
Notifications
You must be signed in to change notification settings - Fork 14
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
feat(a11y): added support in the CloudImageEditor #671
Merged
Merged
Changes from all commits
Commits
Show all changes
12 commits
Select commit
Hold shift + click to select a range
511075b
feat(a11y): added support in the CloudImageEditor
893ef36
feat(a11y): added support in the SourceBtn
f652761
feat(a11y): added title to button in the FileItem
b6a654e
feat(a11y): added fields to locale
a516f13
feat(a11y): added zIndex if it wasn't there
dc138e8
feat(a11y): navigating with the keyboard
14f05e1
fix(a11y): fixed style in the SourceBtn
c3f4cc7
fix(a11y): updated styles after PR with theme
c4538c4
fix(a11y): scope keyux events to the uploader-related DOM
nd0ut 8d5ad54
refactor(a11y): register a11y scopes ondemand
nd0ut 497f742
fix(a11y): destroy listeners
nd0ut 4ade6ab
feat(a11y): added CustomEvent in the ScopedMinimalWindow and isolatio…
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,118 @@ | ||
// @ts-check | ||
import { startKeyUX, hiddenKeyUX, jumpKeyUX, focusGroupKeyUX, pressKeyUX } from 'keyux'; | ||
|
||
/** | ||
* MinimalWindow interface is not exported by keyux, so we import it here using tricky way. | ||
* | ||
* @typedef {Parameters<import('keyux').KeyUXModule>[0]} MinimalWindow | ||
*/ | ||
|
||
/** | ||
* This is global window wrapper that allows to scope event listeners to a specific part of the DOM. | ||
* | ||
* It is used to scope the key UX to the widget. | ||
* | ||
* @implements {MinimalWindow} | ||
*/ | ||
class ScopedMinimalWindow { | ||
/** | ||
* @private | ||
* @type {Map<Function, (event: Event) => void>} | ||
*/ | ||
_listeners = new Map(); | ||
|
||
/** | ||
* @private | ||
* @type {Node[]} | ||
*/ | ||
_scope = []; | ||
|
||
/** | ||
* @param {'keydown' | 'keyup'} type | ||
* @param {(event: Event) => void} listener | ||
*/ | ||
addEventListener(type, listener) { | ||
/** @param {Event} e */ | ||
const wrappedListener = (e) => { | ||
const target = e.target; | ||
if (!target) return; | ||
if (this._scope.some((el) => el === e.target || el.contains(/** @type {Node} */ (target)))) { | ||
listener(e); | ||
} | ||
}; | ||
this._listeners.set(listener, wrappedListener); | ||
window.addEventListener(type, wrappedListener); | ||
} | ||
|
||
/** | ||
* @param {'keydown' | 'keyup'} type | ||
* @param {(event: {}) => void} listener | ||
*/ | ||
removeEventListener(type, listener) { | ||
const wrappedListener = this._listeners.get(listener); | ||
if (wrappedListener) { | ||
window.removeEventListener(type, wrappedListener); | ||
} | ||
this._listeners.delete(listener); | ||
} | ||
|
||
get CustomEvent() { | ||
return window.CustomEvent; | ||
} | ||
|
||
get document() { | ||
return window.document; | ||
} | ||
|
||
get navigator() { | ||
return window.navigator; | ||
} | ||
|
||
/** @param {Node} scope */ | ||
registerScope(scope) { | ||
this._scope.push(scope); | ||
} | ||
|
||
destroy() { | ||
this._scope = []; | ||
this._listeners.forEach((listener, originalListener) => { | ||
window.removeEventListener('keydown', listener); | ||
window.removeEventListener('keyup', listener); | ||
this._listeners.delete(originalListener); | ||
}); | ||
} | ||
} | ||
|
||
export class A11y { | ||
/** | ||
* @private | ||
* @type {(() => void) | undefined} | ||
*/ | ||
_destroyKeyUX; | ||
|
||
/** | ||
* @private | ||
* @type {ScopedMinimalWindow} | ||
*/ | ||
_scopedWindow; | ||
|
||
constructor() { | ||
this._scopedWindow = new ScopedMinimalWindow(); | ||
this._destroyKeyUX = startKeyUX(this._scopedWindow, [ | ||
focusGroupKeyUX(), | ||
pressKeyUX('is-pressed'), | ||
jumpKeyUX(), | ||
hiddenKeyUX(), | ||
]); | ||
} | ||
|
||
/** @param {import('./Block.js').Block} scope */ | ||
registerBlock(scope) { | ||
this._scopedWindow.registerScope(scope); | ||
} | ||
|
||
destroy() { | ||
this._destroyKeyUX?.(); | ||
this._scopedWindow.destroy(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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.
Static method context issue needs resolution.
The static methods
set template
andget template
incorrectly usethis
to refer to instance properties, which is not valid in a static context. This could lead to runtime errors.Also applies to: 21-21
Tools
Biome