Skip to content

Commit 86161ff

Browse files
committed
list: introduce accessibilityProvider.getWidgetAriaLabel
1 parent 07bd3ff commit 86161ff

41 files changed

Lines changed: 162 additions & 29 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

src/vs/base/browser/ui/list/listPaging.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,10 @@ class PagedAccessibilityProvider<T> implements IListAccessibilityProvider<number
7878
private accessibilityProvider: IListAccessibilityProvider<T>
7979
) { }
8080

81+
getWidgetAriaLabel(): string {
82+
return this.accessibilityProvider.getWidgetAriaLabel();
83+
}
84+
8185
getAriaLabel(index: number): string | null {
8286
const model = this.modelProvider();
8387

src/vs/base/browser/ui/list/listWidget.ts

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -688,6 +688,8 @@ export interface IStyleController {
688688

689689
export interface IListAccessibilityProvider<T> extends IListViewAccessibilityProvider<T> {
690690
getAriaLabel(element: T): string | null;
691+
getWidgetAriaLabel(): string;
692+
getWidgetRole?(): string;
691693
getAriaLevel?(element: T): number | undefined;
692694
onDidChangeActiveDescendant?: Event<void>;
693695
getActiveDescendantId?(element: T): string | undefined;
@@ -821,7 +823,6 @@ export interface IListOptions<T> {
821823
readonly keyboardNavigationLabelProvider?: IKeyboardNavigationLabelProvider<T>;
822824
readonly keyboardNavigationDelegate?: IKeyboardNavigationDelegate;
823825
readonly ariaRole?: string;
824-
readonly ariaLabel?: string;
825826
readonly keyboardSupport?: boolean;
826827
readonly multipleSelectionSupport?: boolean;
827828
readonly multipleSelectionController?: IMultipleSelectionController<T>;
@@ -1106,6 +1107,7 @@ export class List<T> implements ISpliceable<T>, IDisposable {
11061107
private styleController: IStyleController;
11071108
private typeLabelController?: TypeLabelController<T>;
11081109
private accessibilityProvider?: IListAccessibilityProvider<T>;
1110+
private _ariaLabel: string = '';
11091111

11101112
protected readonly disposables = new DisposableStore();
11111113

@@ -1250,8 +1252,8 @@ export class List<T> implements ISpliceable<T>, IDisposable {
12501252
this.onDidChangeFocus(this._onFocusChange, this, this.disposables);
12511253
this.onDidChangeSelection(this._onSelectionChange, this, this.disposables);
12521254

1253-
if (_options.ariaLabel) {
1254-
this.view.domNode.setAttribute('aria-label', localize('aria list', "{0}. Use the navigation keys to navigate.", _options.ariaLabel));
1255+
if (this.accessibilityProvider) {
1256+
this.ariaLabel = this.accessibilityProvider.getWidgetAriaLabel();
12551257
}
12561258
if (_options.multipleSelectionSupport) {
12571259
this.view.domNode.setAttribute('aria-multiselectable', 'true');
@@ -1354,6 +1356,15 @@ export class List<T> implements ISpliceable<T>, IDisposable {
13541356
return this.view.lastVisibleIndex;
13551357
}
13561358

1359+
get ariaLabel(): string {
1360+
return this._ariaLabel;
1361+
}
1362+
1363+
set ariaLabel(value: string) {
1364+
this._ariaLabel = value;
1365+
this.view.domNode.setAttribute('aria-label', localize('aria list', "{0}. Use the navigation keys to navigate.", value));
1366+
}
1367+
13571368
domFocus(): void {
13581369
this.view.domNode.focus();
13591370
}

src/vs/base/browser/ui/selectBox/selectBoxCustom.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -720,12 +720,14 @@ export class SelectBoxList extends Disposable implements ISelectBoxDelegate, ILi
720720
this.listRenderer = new SelectListRenderer();
721721

722722
this.selectList = new List('SelectBoxCustom', this.selectDropDownListContainer, this, [this.listRenderer], {
723-
ariaLabel: this.selectBoxOptions.ariaLabel,
724723
useShadows: false,
725724
verticalScrollMode: ScrollbarVisibility.Visible,
726725
keyboardSupport: false,
727726
mouseSupport: false
728727
});
728+
if (this.selectBoxOptions.ariaLabel) {
729+
this.selectList.ariaLabel = this.selectBoxOptions.ariaLabel;
730+
}
729731

730732
// SetUp list keyboard controller - control navigation, disabled items, focus
731733
const onSelectDropDownKeyDown = Event.chain(domEvent(this.selectDropDownListContainer, 'keydown'))

src/vs/base/browser/ui/tree/abstractTree.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,9 @@ function asListOptions<T, TFilterData, TRef>(modelProvider: () => ITreeModel<T,
189189
getAriaLabel(e) {
190190
return options.accessibilityProvider!.getAriaLabel(e.element);
191191
},
192+
getWidgetAriaLabel() {
193+
return options.accessibilityProvider!.getWidgetAriaLabel();
194+
},
192195
getAriaLevel(node) {
193196
return node.depth;
194197
},
@@ -1454,6 +1457,14 @@ export abstract class AbstractTree<T, TFilterData, TRef> implements IDisposable
14541457
return node.element;
14551458
}
14561459

1460+
get ariaLabel(): string {
1461+
return this.view.ariaLabel;
1462+
}
1463+
1464+
set ariaLabel(value: string) {
1465+
this.view.ariaLabel = value;
1466+
}
1467+
14571468
domFocus(): void {
14581469
this.view.domFocus();
14591470
}

src/vs/base/browser/ui/tree/asyncDataTree.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,9 @@ function asObjectTreeOptions<TInput, T, TFilterData>(options?: IAsyncDataTreeOpt
242242
getAriaLabel(e) {
243243
return options.accessibilityProvider!.getAriaLabel(e.element as T);
244244
},
245+
getWidgetAriaLabel() {
246+
return options.accessibilityProvider!.getWidgetAriaLabel();
247+
},
245248
getAriaLevel: options.accessibilityProvider!.getAriaLevel && (node => {
246249
return options.accessibilityProvider!.getAriaLevel!(node.element as T);
247250
}),
@@ -442,6 +445,14 @@ export class AsyncDataTree<TInput, T, TFilterData = void> implements IDisposable
442445
return this.tree.lastVisibleElement!.element as T;
443446
}
444447

448+
get ariaLabel(): string {
449+
return this.tree.ariaLabel;
450+
}
451+
452+
set ariaLabel(value: string) {
453+
this.tree.ariaLabel = value;
454+
}
455+
445456
domFocus(): void {
446457
this.tree.domFocus();
447458
}

src/vs/base/parts/quickinput/browser/quickInputList.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import { withNullAsUndefined } from 'vs/base/common/types';
2727
import { IQuickInputOptions } from 'vs/base/parts/quickinput/browser/quickInput';
2828
import { IListOptions, List, IListStyles, IListAccessibilityProvider } from 'vs/base/browser/ui/list/listWidget';
2929
import { KeybindingLabel } from 'vs/base/browser/ui/keybindingLabel/keybindingLabel';
30+
import { localize } from 'vs/nls';
3031

3132
const $ = dom.$;
3233

@@ -714,6 +715,10 @@ function compareEntries(elementA: ListElement, elementB: ListElement, lookFor: s
714715

715716
class QuickInputAccessibilityProvider implements IListAccessibilityProvider<ListElement> {
716717

718+
getWidgetAriaLabel(): string {
719+
return localize('quickInput', "Quick Input");
720+
}
721+
717722
getAriaLabel(element: ListElement): string | null {
718723
return element.saneAriaLabel;
719724
}

src/vs/editor/contrib/documentSymbols/outlineTree.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,12 @@ export class OutlineNavigationLabelProvider implements IKeyboardNavigationLabelP
4242

4343
export class OutlineAccessibilityProvider implements IListAccessibilityProvider<OutlineItem> {
4444

45+
constructor(private readonly ariaLabel: string) { }
46+
47+
getWidgetAriaLabel(): string {
48+
return this.ariaLabel;
49+
}
50+
4551
getAriaLabel(element: OutlineItem): string | null {
4652
if (element instanceof OutlineGroup) {
4753
return element.label;

src/vs/editor/contrib/gotoSymbol/peek/referencesTree.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,10 @@ export class OneReferenceRenderer implements ITreeRenderer<OneReference, FuzzySc
215215

216216
export class AccessibilityProvider implements IListAccessibilityProvider<FileReferences | OneReference> {
217217

218+
getWidgetAriaLabel(): string {
219+
return localize('treeAriaLabel', "References");
220+
}
221+
218222
getAriaLabel(element: FileReferences | OneReference): string | null {
219223
return element.ariaMessage;
220224
}

src/vs/editor/contrib/gotoSymbol/peek/referencesWidget.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,6 @@ export class ReferenceWidget extends peekView.PeekViewWidget {
311311
// tree
312312
this._treeContainer = dom.append(containerElement, dom.$('div.ref-tree.inline'));
313313
const treeOptions: IWorkbenchAsyncDataTreeOptions<TreeElement, FuzzyScore> = {
314-
ariaLabel: nls.localize('treeAriaLabel', "References"),
315314
keyboardSupport: this._defaultTreeKeyboardSupport,
316315
accessibilityProvider: new AccessibilityProvider(),
317316
keyboardNavigationLabelProvider: this._instantiationService.createInstance(StringRepresentationProvider),

src/vs/editor/contrib/suggest/suggestWidget.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -623,7 +623,8 @@ export class SuggestWidget implements IContentWidget, IListVirtualDelegate<Compl
623623
} else {
624624
return textLabel;
625625
}
626-
}
626+
},
627+
getWidgetAriaLabel: () => nls.localize('suggest', "Suggest")
627628
}
628629
});
629630

0 commit comments

Comments
 (0)