Skip to content

Commit fd68fa6

Browse files
committed
add basics
1 parent 2e615c0 commit fd68fa6

File tree

3 files changed

+43
-6
lines changed

3 files changed

+43
-6
lines changed

src/vs/workbench/contrib/accessibility/browser/accessibleView.ts

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ import { IOpenerService } from 'vs/platform/opener/common/opener';
2525
import { alert } from 'vs/base/browser/ui/aria/aria';
2626
import { getSimpleEditorOptions } from 'vs/workbench/contrib/codeEditor/browser/simpleEditorOptions';
2727
import { SelectionClipboardContributionID } from 'vs/workbench/contrib/codeEditor/browser/selectionClipboard';
28+
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
29+
import { AccessibilityVerbositySettingId, AccessibleViewAction, AccessibleViewNextAction } from 'vs/workbench/contrib/accessibility/browser/accessibilityContribution';
2830

2931
const enum DEFAULT {
3032
WIDTH = 800,
@@ -48,6 +50,8 @@ export interface IAccessibleViewService {
4850
show(provider: IAccessibleContentProvider): void;
4951
next(): void;
5052
previous(): void;
53+
getOpenAriaHint(verbositySettingKey: AccessibilityVerbositySettingId): string;
54+
getNavigationAriaHint(verbositySettingKey: AccessibilityVerbositySettingId): string;
5155
}
5256

5357
export const enum AccessibleViewType {
@@ -242,7 +246,9 @@ export class AccessibleViewService extends Disposable implements IAccessibleView
242246
private _accessibleView: AccessibleView | undefined;
243247

244248
constructor(
245-
@IInstantiationService private readonly _instantiationService: IInstantiationService
249+
@IInstantiationService private readonly _instantiationService: IInstantiationService,
250+
@IConfigurationService private readonly _configurationService: IConfigurationService,
251+
@IKeybindingService private readonly _keybindingService: IKeybindingService
246252
) {
247253
super();
248254
}
@@ -259,4 +265,20 @@ export class AccessibleViewService extends Disposable implements IAccessibleView
259265
previous(): void {
260266
this._accessibleView?.previous();
261267
}
268+
getOpenAriaHint(verbositySettingKey: AccessibilityVerbositySettingId): string {
269+
let hint = '';
270+
const keybinding = this._keybindingService.lookupKeybinding(AccessibleViewAction.id)?.getAriaLabel();
271+
if (this._configurationService.getValue(verbositySettingKey)) {
272+
hint = keybinding ? localize('chatAccessibleViewHint', "Inspect the response in the accessible view with {0}", keybinding) : localize('chatAccessibleViewHintNoKb', "Inspect the response in the accessible view via the command Open Accessible View which is currently not triggerable via keybinding");
273+
}
274+
return hint;
275+
}
276+
getNavigationAriaHint(verbositySettingKey: AccessibilityVerbositySettingId): string {
277+
let hint = '';
278+
const nextKeybinding = this._keybindingService.lookupKeybinding(AccessibleViewNextAction.id)?.getAriaLabel();
279+
if (this._configurationService.getValue(verbositySettingKey)) {
280+
hint = nextKeybinding ? localize('chatAccessibleViewHint', "Inspect the response in the accessible view with {0}", nextKeybinding) : localize('chatAccessibleViewHintNoKb', "Inspect the response in the accessible view via the command Open Accessible View which is currently not triggerable via keybinding");
281+
}
282+
return hint;
283+
}
262284
}

src/vs/workbench/contrib/chat/browser/chatListRenderer.ts

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ import { ServiceCollection } from 'vs/platform/instantiation/common/serviceColle
5050
import { ILogService } from 'vs/platform/log/common/log';
5151
import { defaultButtonStyles } from 'vs/platform/theme/browser/defaultStyles';
5252
import { AccessibilityVerbositySettingId } from 'vs/workbench/contrib/accessibility/browser/accessibilityContribution';
53+
import { IAccessibleViewService } from 'vs/workbench/contrib/accessibility/browser/accessibleView';
5354
import { IChatCodeBlockActionContext } from 'vs/workbench/contrib/chat/browser/actions/chatCodeblockActions';
5455
import { ChatTreeItem, IChatCodeBlockInfo } from 'vs/workbench/contrib/chat/browser/chat';
5556
import { ChatFollowups } from 'vs/workbench/contrib/chat/browser/chatFollowups';
@@ -513,6 +514,12 @@ export class ChatListDelegate implements IListVirtualDelegate<ChatTreeItem> {
513514
}
514515

515516
export class ChatAccessibilityProvider implements IListAccessibilityProvider<ChatTreeItem> {
517+
518+
constructor(
519+
@IAccessibleViewService private readonly _accessibleViewService: IAccessibleViewService
520+
) {
521+
522+
}
516523
getWidgetRole(): AriaRole {
517524
return 'list';
518525
}
@@ -542,15 +549,22 @@ export class ChatAccessibilityProvider implements IListAccessibilityProvider<Cha
542549
}
543550

544551
private _getLabelWithCodeBlockCount(element: IChatResponseViewModel): string {
552+
const accessibleViewHint = this._accessibleViewService.getOpenAriaHint(AccessibilityVerbositySettingId.Chat);
553+
let label: string = '';
545554
const codeBlockCount = marked.lexer(element.response.value).filter(token => token.type === 'code')?.length ?? 0;
546555
switch (codeBlockCount) {
547556
case 0:
548-
return element.response.value;
557+
label = localize('noCodeBlocks', "{0} {1}", element.response.value, accessibleViewHint);
558+
break;
549559
case 1:
550-
return localize('singleCodeBlock', "1 code block: {0}", element.response.value);
560+
label = localize('singleCodeBlock', "1 code block: {0} {1}", element.response.value, accessibleViewHint);
561+
break;
551562
default:
552-
return localize('multiCodeBlock', "{0} code blocks: {1}", codeBlockCount, element.response.value);
563+
label = localize('multiCodeBlock', "{0} code blocks: {1}", codeBlockCount, element.response.value, accessibleViewHint);
564+
break;
553565
}
566+
label = label.trim();
567+
return label;
554568
}
555569
}
556570

src/vs/workbench/contrib/chat/browser/chatWidget.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,8 @@ export class ChatWidget extends Disposable implements IChatWidget {
114114
@IChatService private readonly chatService: IChatService,
115115
@IChatWidgetService chatWidgetService: IChatWidgetService,
116116
@IContextMenuService private readonly contextMenuService: IContextMenuService,
117-
@IChatAccessibilityService private readonly _chatAccessibilityService: IChatAccessibilityService
117+
@IChatAccessibilityService private readonly _chatAccessibilityService: IChatAccessibilityService,
118+
@IInstantiationService private readonly _instantiationService: IInstantiationService
118119
) {
119120
super();
120121
CONTEXT_IN_CHAT_SESSION.bindTo(contextKeyService).set(true);
@@ -274,7 +275,7 @@ export class ChatWidget extends Disposable implements IChatWidget {
274275
horizontalScrolling: false,
275276
supportDynamicHeights: true,
276277
hideTwistiesOfChildlessElements: true,
277-
accessibilityProvider: new ChatAccessibilityProvider(),
278+
accessibilityProvider: this._instantiationService.createInstance(ChatAccessibilityProvider),
278279
keyboardNavigationLabelProvider: { getKeyboardNavigationLabel: (e: ChatTreeItem) => isRequestVM(e) ? e.message : isResponseVM(e) ? e.response.value : '' }, // TODO
279280
setRowLineHeight: false,
280281
overrideStyles: {

0 commit comments

Comments
 (0)