add accessible-view Scheme and register provider for that (#230159)

fix #229545
This commit is contained in:
Megan Rogge
2024-09-30 14:06:32 -07:00
committed by GitHub
parent 5ddd3d2cc1
commit 27d54aa27a
2 changed files with 15 additions and 2 deletions

View File

@@ -134,6 +134,11 @@ export namespace Schemas {
* Scheme used for output panel resources
*/
export const outputChannel = 'output';
/**
* Scheme used for the accessible view
*/
export const accessibleView = 'accessible-view';
}
export function matchesScheme(target: URI | string, scheme: string): boolean {

View File

@@ -46,6 +46,8 @@ import { AccessibilityCommandId } from '../common/accessibilityCommands.js';
import { IChatCodeBlockContextProviderService } from '../../chat/browser/chat.js';
import { ICodeBlockActionContext } from '../../chat/browser/codeBlockPart.js';
import { getSimpleEditorOptions } from '../../codeEditor/browser/simpleEditorOptions.js';
import { Schemas } from '../../../../base/common/network.js';
import { ITextModelContentProvider, ITextModelService } from '../../../../editor/common/services/resolverService.js';
const enum DIMENSIONS {
MAX_WIDTH = 600
@@ -60,7 +62,7 @@ interface ICodeBlock {
languageId?: string;
}
export class AccessibleView extends Disposable {
export class AccessibleView extends Disposable implements ITextModelContentProvider {
private _editorWidget: CodeEditorWidget;
private _accessiblityHelpIsShown: IContextKey<boolean>;
@@ -105,6 +107,7 @@ export class AccessibleView extends Disposable {
@ICommandService private readonly _commandService: ICommandService,
@IChatCodeBlockContextProviderService private readonly _codeBlockContextProviderService: IChatCodeBlockContextProviderService,
@IStorageService private readonly _storageService: IStorageService,
@ITextModelService private readonly textModelResolverService: ITextModelService,
@IQuickInputService private readonly _quickInputService: IQuickInputService
) {
super();
@@ -158,6 +161,8 @@ export class AccessibleView extends Disposable {
readOnly: true,
fontFamily: 'var(--monaco-monospace-font)'
};
this.textModelResolverService.registerTextModelContentProvider(Schemas.accessibleView, this);
this._editorWidget = this._register(this._instantiationService.createInstance(CodeEditorWidget, this._container, editorOptions, codeEditorWidgetOptions));
this._register(this._accessibilityService.onDidChangeScreenReaderOptimized(() => {
if (this._currentProvider && this._accessiblityHelpIsShown.get()) {
@@ -188,6 +193,9 @@ export class AccessibleView extends Disposable {
}
}));
}
provideTextContent(resource: URI): Promise<ITextModel | null> | null {
return this._getTextModel(resource);
}
private _resetContextKeys(): void {
this._accessiblityHelpIsShown.reset();
@@ -555,7 +563,7 @@ export class AccessibleView extends Disposable {
this.calculateCodeBlocks(this._currentContent);
this._updateContextKeys(provider, true);
const widgetIsFocused = this._editorWidget.hasTextFocus() || this._editorWidget.hasWidgetFocus();
this._getTextModel(URI.from({ path: `accessible-view-${provider.id}`, scheme: 'accessible-view', fragment: this._currentContent })).then((model) => {
this._getTextModel(URI.from({ path: `accessible-view-${provider.id}`, scheme: Schemas.accessibleView, fragment: this._currentContent })).then((model) => {
if (!model) {
return;
}