提交 37edc037 编写于 作者: I isidor

editor: introduce setAria api

上级 780d875d
......@@ -29,6 +29,7 @@ import { RenderingContext, RestrictedRenderingContext, HorizontalPosition } from
import { ViewContext } from 'vs/editor/common/view/viewContext';
import * as viewEvents from 'vs/editor/common/view/viewEvents';
import { AccessibilitySupport } from 'vs/platform/accessibility/common/accessibility';
import { IEditorAriaOptions } from 'vs/editor/browser/editorBrowser';
export interface ITextAreaHandlerHelper {
visibleRangeForPositionRelativeToEditor(lineNumber: number, column: number): HorizontalPosition | null;
......@@ -424,6 +425,18 @@ export class TextAreaHandler extends ViewPart {
return this._lastRenderPosition;
}
public setAria(options: IEditorAriaOptions): void {
if (options.activeDescendent) {
this.textArea.setAttribute('aria-haspopup', 'true');
this.textArea.setAttribute('aria-autocomplete', 'list');
this.textArea.setAttribute('aria-activedescendant', options.activeDescendent);
} else {
this.textArea.setAttribute('aria-haspopup', 'false');
this.textArea.setAttribute('aria-autocomplete', 'both');
this.textArea.removeAttribute('aria-activedescendant');
}
}
// --- end view API
private _primaryCursorPosition: Position = new Position(1, 1);
......
......@@ -319,6 +319,13 @@ export interface IOverviewRuler {
setLayout(position: OverviewRulerPosition): void;
}
/**
* Editor aria options.
*/
export interface IEditorAriaOptions {
activeDescendent: string | undefined;
}
/**
* A rich code editor.
*/
......@@ -689,6 +696,12 @@ export interface ICodeEditor extends editorCommon.IEditor {
*/
setHiddenAreas(ranges: IRange[]): void;
/**
* Sets the editor aria options, primarily the active descendent.
* @internal
*/
setAria(options: IEditorAriaOptions): void;
/**
* @internal
*/
......
......@@ -11,7 +11,7 @@ import { IDisposable } from 'vs/base/common/lifecycle';
import { IPointerHandlerHelper } from 'vs/editor/browser/controller/mouseHandler';
import { PointerHandler } from 'vs/editor/browser/controller/pointerHandler';
import { ITextAreaHandlerHelper, TextAreaHandler } from 'vs/editor/browser/controller/textAreaHandler';
import { IContentWidget, IContentWidgetPosition, IOverlayWidget, IOverlayWidgetPosition, IMouseTarget, IViewZoneChangeAccessor } from 'vs/editor/browser/editorBrowser';
import { IContentWidget, IContentWidgetPosition, IOverlayWidget, IOverlayWidgetPosition, IMouseTarget, IViewZoneChangeAccessor, IEditorAriaOptions } from 'vs/editor/browser/editorBrowser';
import { ICommandDelegate, ViewController } from 'vs/editor/browser/view/viewController';
import { ViewOutgoingEvents } from 'vs/editor/browser/view/viewOutgoingEvents';
import { ContentViewOverlays, MarginViewOverlays } from 'vs/editor/browser/view/viewOverlays';
......@@ -510,6 +510,10 @@ export class View extends ViewEventHandler {
this._textAreaHandler.refreshFocusState();
}
public setAria(options: IEditorAriaOptions): void {
this._textAreaHandler.setAria(options);
}
public addContentWidget(widgetData: IContentWidgetData): void {
this.contentWidgets.addWidget(widgetData.widget);
this.layoutContentWidget(widgetData);
......@@ -559,4 +563,3 @@ function safeInvokeNoArg(func: Function): any {
onUnexpectedError(e);
}
}
......@@ -1311,6 +1311,13 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE
this._modelData.view.render(true, forceRedraw);
}
public setAria(options: editorBrowser.IEditorAriaOptions): void {
if (!this._modelData || !this._modelData.hasRealView) {
return;
}
this._modelData.view.setAria(options);
}
public applyFontInfo(target: HTMLElement): void {
Configuration.applyFontInfoSlow(target, this._configuration.options.get(EditorOption.fontInfo));
}
......
......@@ -3726,6 +3726,13 @@ declare namespace monaco.editor {
readonly target: IMouseTarget | null;
}
/**
* Editor aria options.
*/
export interface IEditorAriaOptions {
activeDescendent: string | undefined;
}
/**
* A rich code editor.
*/
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册