提交 99f4caf3 编写于 作者: I isidor

list: accessibilityProvider.getWidgetRole

上级 86161ffb
...@@ -822,7 +822,6 @@ export interface IListOptions<T> { ...@@ -822,7 +822,6 @@ export interface IListOptions<T> {
readonly automaticKeyboardNavigation?: boolean; readonly automaticKeyboardNavigation?: boolean;
readonly keyboardNavigationLabelProvider?: IKeyboardNavigationLabelProvider<T>; readonly keyboardNavigationLabelProvider?: IKeyboardNavigationLabelProvider<T>;
readonly keyboardNavigationDelegate?: IKeyboardNavigationDelegate; readonly keyboardNavigationDelegate?: IKeyboardNavigationDelegate;
readonly ariaRole?: string;
readonly keyboardSupport?: boolean; readonly keyboardSupport?: boolean;
readonly multipleSelectionSupport?: boolean; readonly multipleSelectionSupport?: boolean;
readonly multipleSelectionController?: IMultipleSelectionController<T>; readonly multipleSelectionController?: IMultipleSelectionController<T>;
...@@ -1186,7 +1185,8 @@ export class List<T> implements ISpliceable<T>, IDisposable { ...@@ -1186,7 +1185,8 @@ export class List<T> implements ISpliceable<T>, IDisposable {
renderers: IListRenderer<any /* TODO@joao */, any>[], renderers: IListRenderer<any /* TODO@joao */, any>[],
private _options: IListOptions<T> = DefaultOptions private _options: IListOptions<T> = DefaultOptions
) { ) {
this.selection = new SelectionTrait(this._options.ariaRole !== 'listbox'); const role = this._options.accessibilityProvider && this._options.accessibilityProvider.getWidgetRole ? this._options.accessibilityProvider?.getWidgetRole() : 'list';
this.selection = new SelectionTrait(role !== 'listbox');
this.focus = new Trait('focused'); this.focus = new Trait('focused');
mixin(_options, defaultStyles, false); mixin(_options, defaultStyles, false);
...@@ -1211,7 +1211,7 @@ export class List<T> implements ISpliceable<T>, IDisposable { ...@@ -1211,7 +1211,7 @@ export class List<T> implements ISpliceable<T>, IDisposable {
}; };
this.view = new ListView(container, virtualDelegate, renderers, viewOptions); this.view = new ListView(container, virtualDelegate, renderers, viewOptions);
this.view.domNode.setAttribute('role', _options.ariaRole ?? 'list'); this.view.domNode.setAttribute('role', role);
if (_options.styleController) { if (_options.styleController) {
this.styleController = _options.styleController(this.view.domId); this.styleController = _options.styleController(this.view.domId);
......
...@@ -20,6 +20,7 @@ import { ISelectBoxDelegate, ISelectOptionItem, ISelectBoxOptions, ISelectBoxSty ...@@ -20,6 +20,7 @@ import { ISelectBoxDelegate, ISelectOptionItem, ISelectBoxOptions, ISelectBoxSty
import { isMacintosh } from 'vs/base/common/platform'; import { isMacintosh } from 'vs/base/common/platform';
import { renderMarkdown } from 'vs/base/browser/markdownRenderer'; import { renderMarkdown } from 'vs/base/browser/markdownRenderer';
import { IContentActionHandler } from 'vs/base/browser/formattedTextRenderer'; import { IContentActionHandler } from 'vs/base/browser/formattedTextRenderer';
import { localize } from 'vs/nls';
const $ = dom.$; const $ = dom.$;
...@@ -723,7 +724,13 @@ export class SelectBoxList extends Disposable implements ISelectBoxDelegate, ILi ...@@ -723,7 +724,13 @@ export class SelectBoxList extends Disposable implements ISelectBoxDelegate, ILi
useShadows: false, useShadows: false,
verticalScrollMode: ScrollbarVisibility.Visible, verticalScrollMode: ScrollbarVisibility.Visible,
keyboardSupport: false, keyboardSupport: false,
mouseSupport: false mouseSupport: false,
accessibilityProvider: {
getAriaLabel: (element) => element.text,
getWidgetAriaLabel: () => localize('selectBox', "Select Box"),
getRole: () => 'option',
getWidgetRole: () => 'listbox'
}
}); });
if (this.selectBoxOptions.ariaLabel) { if (this.selectBoxOptions.ariaLabel) {
this.selectList.ariaLabel = this.selectBoxOptions.ariaLabel; this.selectList.ariaLabel = this.selectBoxOptions.ariaLabel;
......
...@@ -192,6 +192,7 @@ function asListOptions<T, TFilterData, TRef>(modelProvider: () => ITreeModel<T, ...@@ -192,6 +192,7 @@ function asListOptions<T, TFilterData, TRef>(modelProvider: () => ITreeModel<T,
getWidgetAriaLabel() { getWidgetAriaLabel() {
return options.accessibilityProvider!.getWidgetAriaLabel(); return options.accessibilityProvider!.getWidgetAriaLabel();
}, },
getWidgetRole: options.accessibilityProvider && options.accessibilityProvider.getWidgetRole ? () => options.accessibilityProvider!.getWidgetRole!() : () => 'tree',
getAriaLevel(node) { getAriaLevel(node) {
return node.depth; return node.depth;
}, },
...@@ -205,8 +206,7 @@ function asListOptions<T, TFilterData, TRef>(modelProvider: () => ITreeModel<T, ...@@ -205,8 +206,7 @@ function asListOptions<T, TFilterData, TRef>(modelProvider: () => ITreeModel<T,
return options.keyboardNavigationLabelProvider!.getKeyboardNavigationLabel(node.element); return options.keyboardNavigationLabelProvider!.getKeyboardNavigationLabel(node.element);
} }
}, },
enableKeyboardNavigation: options.simpleKeyboardNavigation, enableKeyboardNavigation: options.simpleKeyboardNavigation
ariaRole: 'tree'
}; };
} }
......
...@@ -245,6 +245,7 @@ function asObjectTreeOptions<TInput, T, TFilterData>(options?: IAsyncDataTreeOpt ...@@ -245,6 +245,7 @@ function asObjectTreeOptions<TInput, T, TFilterData>(options?: IAsyncDataTreeOpt
getWidgetAriaLabel() { getWidgetAriaLabel() {
return options.accessibilityProvider!.getWidgetAriaLabel(); return options.accessibilityProvider!.getWidgetAriaLabel();
}, },
getWidgetRole: options.accessibilityProvider!.getWidgetRole ? () => options.accessibilityProvider!.getWidgetRole!() : () => 'tree',
getAriaLevel: options.accessibilityProvider!.getAriaLevel && (node => { getAriaLevel: options.accessibilityProvider!.getAriaLevel && (node => {
return options.accessibilityProvider!.getAriaLevel!(node.element as T); return options.accessibilityProvider!.getAriaLevel!(node.element as T);
}), }),
...@@ -269,7 +270,6 @@ function asObjectTreeOptions<TInput, T, TFilterData>(options?: IAsyncDataTreeOpt ...@@ -269,7 +270,6 @@ function asObjectTreeOptions<TInput, T, TFilterData>(options?: IAsyncDataTreeOpt
e => (options.expandOnlyOnTwistieClick as ((e: T) => boolean))(e.element as T) e => (options.expandOnlyOnTwistieClick as ((e: T) => boolean))(e.element as T)
) )
), ),
ariaRole: 'tree',
additionalScrollHeight: options.additionalScrollHeight additionalScrollHeight: options.additionalScrollHeight
}; };
} }
......
...@@ -287,8 +287,7 @@ export class QuickInputList { ...@@ -287,8 +287,7 @@ export class QuickInputList {
setRowLineHeight: false, setRowLineHeight: false,
multipleSelectionSupport: false, multipleSelectionSupport: false,
horizontalScrolling: false, horizontalScrolling: false,
accessibilityProvider, accessibilityProvider
ariaRole: 'listbox'
} as IListOptions<ListElement>); } as IListOptions<ListElement>);
this.list.getHTMLElement().id = id; this.list.getHTMLElement().id = id;
this.disposables.push(this.list); this.disposables.push(this.list);
...@@ -723,6 +722,10 @@ class QuickInputAccessibilityProvider implements IListAccessibilityProvider<List ...@@ -723,6 +722,10 @@ class QuickInputAccessibilityProvider implements IListAccessibilityProvider<List
return element.saneAriaLabel; return element.saneAriaLabel;
} }
getWidgetRole() {
return 'listbox';
}
getRole() { getRole() {
return 'option'; return 'option';
} }
......
...@@ -607,7 +607,6 @@ export class SuggestWidget implements IContentWidget, IListVirtualDelegate<Compl ...@@ -607,7 +607,6 @@ export class SuggestWidget implements IContentWidget, IListVirtualDelegate<Compl
useShadows: false, useShadows: false,
openController: { shouldOpen: () => false }, openController: { shouldOpen: () => false },
mouseSupport: false, mouseSupport: false,
ariaRole: 'listbox',
accessibilityProvider: { accessibilityProvider: {
getRole: () => 'option', getRole: () => 'option',
getAriaLabel: (item: CompletionItem) => { getAriaLabel: (item: CompletionItem) => {
...@@ -624,7 +623,8 @@ export class SuggestWidget implements IContentWidget, IListVirtualDelegate<Compl ...@@ -624,7 +623,8 @@ export class SuggestWidget implements IContentWidget, IListVirtualDelegate<Compl
return textLabel; return textLabel;
} }
}, },
getWidgetAriaLabel: () => nls.localize('suggest', "Suggest") getWidgetAriaLabel: () => nls.localize('suggest', "Suggest"),
getWidgetRole: () => 'listbox'
} }
}); });
......
...@@ -1558,12 +1558,23 @@ export class SettingsTree extends ObjectTree<SettingsTreeElement> { ...@@ -1558,12 +1558,23 @@ export class SettingsTree extends ObjectTree<SettingsTreeElement> {
renderers, renderers,
{ {
supportDynamicHeights: true, supportDynamicHeights: true,
ariaRole: 'form',
identityProvider: { identityProvider: {
getId(e) { getId(e) {
return e.id; return e.id;
} }
}, },
accessibilityProvider: {
getWidgetRole() {
return 'form';
},
getAriaLabel() {
// TODO@roblourens https://github.com/microsoft/vscode/issues/95862
return '';
},
getWidgetAriaLabel() {
return localize('settings', "Settings");
}
},
styleController: id => new DefaultStyleController(DOM.createStyleSheet(container), id), styleController: id => new DefaultStyleController(DOM.createStyleSheet(container), id),
filter: instantiationService.createInstance(SettingsTreeFilter, viewState) filter: instantiationService.createInstance(SettingsTreeFilter, viewState)
}); });
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册