提交 29666ed6 编写于 作者: B Benjamin Pasero

more specific aria labels for various quick open handlers

上级 4bb65a5b
......@@ -71,6 +71,13 @@ export class QuickOpenEntry {
return null;
}
/**
* The label of the entry to use when a screen reader wants to read about the entry
*/
public getAriaLabel(): string {
return this.getLabel();
}
/**
* Detail information about the entry that is optional and can be shown below the label
*/
......@@ -368,6 +375,10 @@ export class QuickOpenEntryGroup extends QuickOpenEntry {
return this.entry ? this.entry.getLabel() : super.getLabel();
}
public getAriaLabel(): string {
return this.entry ? this.entry.getAriaLabel() : super.getAriaLabel();
}
public getDetail(): string {
return this.entry ? this.entry.getDetail() : super.getDetail();
}
......@@ -650,7 +661,6 @@ export class QuickOpenModel implements
IFilter<QuickOpenEntry>,
IRunner<QuickOpenEntry>
{
private _entries: QuickOpenEntry[];
private _dataSource: IDataSource<QuickOpenEntry>;
private _renderer: IRenderer<QuickOpenEntry>;
......@@ -718,7 +728,12 @@ export class QuickOpenModel implements
}
getAriaLabel(entry: QuickOpenEntry): string {
return nls.localize('quickOpenAriaLabel', "{0}, quick picker", entry.getLabel());
const ariaLabel = entry.getAriaLabel();
if (ariaLabel) {
return nls.localize('quickOpenAriaLabelEntry', "{0}, picker", entry.getAriaLabel());
}
return nls.localize('quickOpenAriaLabel', "picker");
}
isVisible<T>(entry: QuickOpenEntry): boolean {
......
......@@ -23,11 +23,11 @@ interface ParseResult {
export class GotoLineEntry extends QuickOpenModel.QuickOpenEntry {
private _parseResult:ParseResult;
private decorator:EditorQuickOpen.IDecorator;
private editor:EditorCommon.IEditor;
private _parseResult: ParseResult;
private decorator: EditorQuickOpen.IDecorator;
private editor: EditorCommon.IEditor;
constructor(line:string, editor:EditorCommon.IEditor, decorator:EditorQuickOpen.IDecorator) {
constructor(line: string, editor: EditorCommon.IEditor, decorator: EditorQuickOpen.IDecorator) {
super();
this.editor = editor;
......@@ -36,37 +36,37 @@ export class GotoLineEntry extends QuickOpenModel.QuickOpenEntry {
}
private _parseInput(line:string):ParseResult {
private _parseInput(line: string): ParseResult {
var numbers = line.split(',').map(part => parseInt(part, 10)).filter(part => !isNaN(part)),
let numbers = line.split(',').map(part => parseInt(part, 10)).filter(part => !isNaN(part)),
position: EditorCommon.IPosition;
if(numbers.length === 0) {
if (numbers.length === 0) {
position = { lineNumber: -1, column: -1 };
} else if(numbers.length === 1) {
} else if (numbers.length === 1) {
position = { lineNumber: numbers[0], column: 1 };
} else {
position = { lineNumber: numbers[0], column: numbers[1] };
}
var editorType = (<EditorBrowser.ICodeEditor> this.editor).getEditorType(),
model:EditorCommon.IModel;
let editorType = (<EditorBrowser.ICodeEditor>this.editor).getEditorType(),
model: EditorCommon.IModel;
switch(editorType) {
switch (editorType) {
case EditorCommon.EditorType.IDiffEditor:
model = (<EditorBrowser.IDiffEditor> this.editor).getModel().modified;
model = (<EditorBrowser.IDiffEditor>this.editor).getModel().modified;
break;
case EditorCommon.EditorType.ICodeEditor:
model = (<EditorBrowser.ICodeEditor> this.editor).getModel();
model = (<EditorBrowser.ICodeEditor>this.editor).getModel();
break;
default:
throw new Error();
}
var isValid = model.validatePosition(position).equals(position),
label:string;
let isValid = model.validatePosition(position).equals(position),
label: string;
if (isValid) {
if (position.column && position.column > 1) {
......@@ -74,7 +74,7 @@ export class GotoLineEntry extends QuickOpenModel.QuickOpenEntry {
} else {
label = nls.localize('gotoLineLabelValidLine', "Go to line {0}", position.lineNumber, position.column);
}
} else if(position.lineNumber < 1 || position.lineNumber > model.getLineCount()) {
} else if (position.lineNumber < 1 || position.lineNumber > model.getLineCount()) {
label = nls.localize('gotoLineLabelEmptyWithLineLimit', "Type a line number between 1 and {0} to navigate to", model.getLineCount());
} else {
label = nls.localize('gotoLineLabelEmptyWithLineAndColumnLimit', "Type a column between 1 and {0} to navigate to", model.getLineMaxColumn(position.lineNumber));
......@@ -91,7 +91,11 @@ export class GotoLineEntry extends QuickOpenModel.QuickOpenEntry {
return this._parseResult.label;
}
public run(mode:QuickOpen.Mode, context:QuickOpenModel.IContext):boolean {
public getAriaLabel(): string {
return nls.localize('gotoLineAriaLabel', "Go to line {0}", this._parseResult.label);
}
public run(mode: QuickOpen.Mode, context: QuickOpenModel.IContext): boolean {
if (mode === QuickOpen.Mode.OPEN) {
return this.runOpen();
}
......@@ -99,7 +103,7 @@ export class GotoLineEntry extends QuickOpenModel.QuickOpenEntry {
return this.runPreview();
}
public runOpen():boolean {
public runOpen(): boolean {
// No-op if range is not valid
if (!this._parseResult.isValid) {
......@@ -107,7 +111,7 @@ export class GotoLineEntry extends QuickOpenModel.QuickOpenEntry {
}
// Apply selection and focus
var range = this.toSelection();
let range = this.toSelection();
(<EditorBrowser.ICodeEditor>this.editor).setSelection(range);
(<EditorBrowser.ICodeEditor>this.editor).revealRangeInCenter(range);
this.editor.focus();
......@@ -115,7 +119,7 @@ export class GotoLineEntry extends QuickOpenModel.QuickOpenEntry {
return true;
}
public runPreview():boolean{
public runPreview(): boolean {
// No-op if range is not valid
if (!this._parseResult.isValid) {
......@@ -124,7 +128,7 @@ export class GotoLineEntry extends QuickOpenModel.QuickOpenEntry {
}
// Select Line Position
var range = this.toSelection();
let range = this.toSelection();
this.editor.revealRangeInCenter(range);
// Decorate if possible
......@@ -133,7 +137,7 @@ export class GotoLineEntry extends QuickOpenModel.QuickOpenEntry {
return false;
}
private toSelection():EditorCommon.IRange {
private toSelection(): EditorCommon.IRange {
return {
startLineNumber: this._parseResult.position.lineNumber,
startColumn: this._parseResult.position.column,
......@@ -147,19 +151,15 @@ export class GotoLineAction extends EditorQuickOpen.BaseEditorQuickOpenAction {
public static ID = 'editor.action.gotoLine';
constructor(descriptor:EditorCommon.IEditorActionDescriptorData, editor:EditorCommon.ICommonCodeEditor, @INullService ns) {
constructor(descriptor: EditorCommon.IEditorActionDescriptorData, editor: EditorCommon.ICommonCodeEditor, @INullService ns) {
super(descriptor, editor, nls.localize('GotoLineAction.label', "Go to Line..."));
}
_getModel(value:string):QuickOpenModel.QuickOpenModel {
var model = new QuickOpenModel.QuickOpenModel();
var entries = [new GotoLineEntry(value, this.editor, this)];
model.addEntries(entries);
return model;
_getModel(value: string): QuickOpenModel.QuickOpenModel {
return new QuickOpenModel.QuickOpenModel([new GotoLineEntry(value, this.editor, this)]);
}
_getAutoFocus(searchValue:string):QuickOpen.IAutoFocus {
_getAutoFocus(searchValue: string): QuickOpen.IAutoFocus {
return {
autoFocusFirstEntry: searchValue.length > 0
};
......
......@@ -20,11 +20,11 @@ import EditorQuickOpen = require('./editorQuickOpen');
import {IKeybindingService} from 'vs/platform/keybinding/common/keybindingService';
export class EditorActionCommandEntry extends QuickOpenModel.QuickOpenEntryGroup {
private key:string;
private action:Actions.IAction;
private editor:EditorCommon.IEditor;
private key: string;
private action: Actions.IAction;
private editor: EditorCommon.IEditor;
constructor(key:string, highlights:QuickOpenModel.IHighlight[], action:Actions.IAction, editor:EditorCommon.IEditor) {
constructor(key: string, highlights: QuickOpenModel.IHighlight[], action: Actions.IAction, editor: EditorCommon.IEditor) {
super();
this.key = key;
......@@ -33,26 +33,30 @@ export class EditorActionCommandEntry extends QuickOpenModel.QuickOpenEntryGroup
this.editor = editor;
}
public getLabel():string {
public getLabel(): string {
return this.action.label;
}
public getGroupLabel():string {
public getAriaLabel(): string {
return nls.localize('ariaLabelEntry', "{0}, commands", this.getLabel());
}
public getGroupLabel(): string {
return this.key;
}
public run(mode:QuickOpen.Mode, context:QuickOpenModel.IContext):boolean {
public run(mode: QuickOpen.Mode, context: QuickOpenModel.IContext): boolean {
if (mode === QuickOpen.Mode.OPEN) {
// Use a timeout to give the quick open widget a chance to close itself first
TPromise.timeout(50).done(()=>{
TPromise.timeout(50).done(() => {
// Some actions are enabled only when editor has focus
this.editor.focus();
if (this.action.enabled) {
try {
var promise = this.action.run() || TPromise.as(null);
let promise = this.action.run() || TPromise.as(null);
promise.done(null, Errors.onUnexpectedError);
} catch (error) {
Errors.onUnexpectedError(error);
......@@ -73,49 +77,42 @@ export class QuickCommandAction extends EditorQuickOpen.BaseEditorQuickOpenActio
private _keybindingService: IKeybindingService;
constructor(descriptor:EditorCommon.IEditorActionDescriptorData, editor:EditorCommon.ICommonCodeEditor, @IKeybindingService keybindingService: IKeybindingService) {
constructor(descriptor: EditorCommon.IEditorActionDescriptorData, editor: EditorCommon.ICommonCodeEditor, @IKeybindingService keybindingService: IKeybindingService) {
super(descriptor, editor, nls.localize('QuickCommandAction.label', "Command Palette"), Behaviour.WidgetFocus | Behaviour.ShowInContextMenu);
this._keybindingService = keybindingService;
}
_getModel(value:string):QuickOpenModel.QuickOpenModel {
var model = new QuickOpenModel.QuickOpenModel();
var editorActions = this.editor.getActions();
var entries = this._editorActionsToEntries(editorActions, value);
model.addEntries(entries);
return model;
_getModel(value: string): QuickOpenModel.QuickOpenModel {
return new QuickOpenModel.QuickOpenModel(this._editorActionsToEntries(this.editor.getActions(), value));
}
public getGroupId(): string {
return '4_tools/1_commands';
}
_sort(elementA:QuickOpenModel.QuickOpenEntryGroup, elementB:QuickOpenModel.QuickOpenEntryGroup):number {
var elementAName = elementA.getLabel().toLowerCase();
var elementBName = elementB.getLabel().toLowerCase();
_sort(elementA: QuickOpenModel.QuickOpenEntryGroup, elementB: QuickOpenModel.QuickOpenEntryGroup): number {
let elementAName = elementA.getLabel().toLowerCase();
let elementBName = elementB.getLabel().toLowerCase();
return Strings.localeCompare(elementAName, elementBName);
}
_editorActionsToEntries(actions:Actions.IAction[], searchValue:string):EditorActionCommandEntry[] {
var entries:EditorActionCommandEntry[] = [];
_editorActionsToEntries(actions: Actions.IAction[], searchValue: string): EditorActionCommandEntry[] {
let entries: EditorActionCommandEntry[] = [];
for (var i = 0; i < actions.length; i++) {
var action = actions[i];
for (let i = 0; i < actions.length; i++) {
let action = actions[i];
var editorAction = <EditorAction>action;
let editorAction = <EditorAction>action;
if (!editorAction.isSupported()) {
continue; // do not show actions that are not supported in this context
}
var keys = this._keybindingService.lookupKeybindings(editorAction.id).map(k => this._keybindingService.getLabelFor(k));
let keys = this._keybindingService.lookupKeybindings(editorAction.id).map(k => this._keybindingService.getLabelFor(k));
if (action.label) {
var highlights = Filters.matchesFuzzy(searchValue, action.label);
let highlights = Filters.matchesFuzzy(searchValue, action.label);
if (highlights) {
entries.push(new EditorActionCommandEntry(keys.length > 0 ? keys.join(', ') : '', highlights, action, this.editor));
}
......@@ -128,7 +125,7 @@ export class QuickCommandAction extends EditorQuickOpen.BaseEditorQuickOpenActio
return entries;
}
_getAutoFocus(searchValue:string):QuickOpen.IAutoFocus {
_getAutoFocus(searchValue: string): QuickOpen.IAutoFocus {
return {
autoFocusFirstEntry: true,
autoFocusPrefixMatch: searchValue
......
......@@ -22,17 +22,17 @@ import EditorQuickOpen = require('./editorQuickOpen');
import {Behaviour} from 'vs/editor/common/editorAction';
import {INullService} from 'vs/platform/instantiation/common/instantiation';
var SCOPE_PREFIX = ':';
let SCOPE_PREFIX = ':';
class SymbolEntry extends QuickOpenModel.QuickOpenEntryGroup {
private name:string;
private name: string;
private type: string;
private description: string;
private range:EditorCommon.IRange;
private editor:EditorCommon.ICommonCodeEditor;
private decorator:EditorQuickOpen.IDecorator;
private range: EditorCommon.IRange;
private editor: EditorCommon.ICommonCodeEditor;
private decorator: EditorQuickOpen.IDecorator;
constructor(name:string, type:string, description:string, range:EditorCommon.IRange, highlights:QuickOpenModel.IHighlight[], editor:EditorCommon.ICommonCodeEditor, decorator:EditorQuickOpen.IDecorator) {
constructor(name: string, type: string, description: string, range: EditorCommon.IRange, highlights: QuickOpenModel.IHighlight[], editor: EditorCommon.ICommonCodeEditor, decorator: EditorQuickOpen.IDecorator) {
super();
this.name = name;
......@@ -44,27 +44,31 @@ class SymbolEntry extends QuickOpenModel.QuickOpenEntryGroup {
this.decorator = decorator;
}
public getLabel():string {
public getLabel(): string {
return this.name;
}
public getIcon():string {
public getAriaLabel(): string {
return nls.localize('entryAriaLabel', "{0}, symbols", this.name);
}
public getIcon(): string {
return this.type;
}
public getDescription():string {
public getDescription(): string {
return this.description;
}
public getType():string {
public getType(): string {
return this.type;
}
public getRange():EditorCommon.IRange {
public getRange(): EditorCommon.IRange {
return this.range;
}
public run(mode:QuickOpen.Mode, context:QuickOpenModel.IContext):boolean {
public run(mode: QuickOpen.Mode, context: QuickOpenModel.IContext): boolean {
if (mode === QuickOpen.Mode.OPEN) {
return this.runOpen(context);
}
......@@ -72,10 +76,10 @@ class SymbolEntry extends QuickOpenModel.QuickOpenEntryGroup {
return this.runPreview();
}
private runOpen(context:QuickOpenModel.IContext):boolean {
private runOpen(context: QuickOpenModel.IContext): boolean {
// Apply selection and focus
var range = this.toSelection();
let range = this.toSelection();
this.editor.setSelection(range);
this.editor.revealRangeInCenter(range);
this.editor.focus();
......@@ -83,10 +87,10 @@ class SymbolEntry extends QuickOpenModel.QuickOpenEntryGroup {
return true;
}
private runPreview():boolean {
private runPreview(): boolean {
// Select Outline Position
var range = this.toSelection();
let range = this.toSelection();
this.editor.revealRangeInCenter(range);
// Decorate if possible
......@@ -95,7 +99,7 @@ class SymbolEntry extends QuickOpenModel.QuickOpenEntryGroup {
return false;
}
private toSelection():EditorCommon.IRange {
private toSelection(): EditorCommon.IRange {
return {
startLineNumber: this.range.startLineNumber,
startColumn: this.range.startColumn || 1,
......@@ -106,20 +110,20 @@ class SymbolEntry extends QuickOpenModel.QuickOpenEntryGroup {
}
interface OutlineNode {
label:string;
type:string;
range:EditorCommon.IRange;
children?:OutlineNode[];
parentScope?:string[];
label: string;
type: string;
range: EditorCommon.IRange;
children?: OutlineNode[];
parentScope?: string[];
}
export class QuickOutlineAction extends EditorQuickOpen.BaseEditorQuickOpenAction {
public static ID = 'editor.action.quickOutline';
private cachedResult:Modes.IOutlineEntry[];
private cachedResult: Modes.IOutlineEntry[];
constructor(descriptor:EditorCommon.IEditorActionDescriptorData, editor:EditorCommon.ICommonCodeEditor, @INullService ns) {
constructor(descriptor: EditorCommon.IEditorActionDescriptorData, editor: EditorCommon.ICommonCodeEditor, @INullService ns) {
super(descriptor, editor, nls.localize('QuickOutlineAction.label', "Go to Symbol..."), Behaviour.WidgetFocus | Behaviour.ShowInContextMenu);
}
......@@ -128,24 +132,24 @@ export class QuickOutlineAction extends EditorQuickOpen.BaseEditorQuickOpenActio
}
public isSupported(): boolean {
var mode = this.editor.getModel().getMode();
let mode = this.editor.getModel().getMode();
return !!mode && !!mode.outlineSupport && super.isSupported();
}
public run():TPromise<boolean> {
var model = this.editor.getModel();
var mode = model.getMode();
var outlineSupport = mode.outlineSupport;
public run(): TPromise<boolean> {
let model = this.editor.getModel();
let mode = model.getMode();
let outlineSupport = mode.outlineSupport;
// Only works for models with outline support
if(!outlineSupport) {
if (!outlineSupport) {
return null;
}
// Resolve outline
var promise = outlineSupport.getOutline(model.getAssociatedResource());
return promise.then((result:Modes.IOutlineEntry[])=>{
let promise = outlineSupport.getOutline(model.getAssociatedResource());
return promise.then((result: Modes.IOutlineEntry[]) => {
if (Array.isArray(result) && result.length > 0) {
// Cache result
......@@ -155,21 +159,17 @@ export class QuickOutlineAction extends EditorQuickOpen.BaseEditorQuickOpenActio
}
return TPromise.as(true);
}, (err)=>{
}, (err) => {
Errors.onUnexpectedError(err);
return false;
});
}
_getModel(value:string):QuickOpenModel.QuickOpenModel {
var model = new QuickOpenModel.QuickOpenModel();
var entries = this.toQuickOpenEntries(this.cachedResult, value);
model.addEntries(entries);
return model;
_getModel(value: string): QuickOpenModel.QuickOpenModel {
return new QuickOpenModel.QuickOpenModel(this.toQuickOpenEntries(this.cachedResult, value));
}
_getAutoFocus(searchValue:string):QuickOpen.IAutoFocus {
_getAutoFocus(searchValue: string): QuickOpen.IAutoFocus {
// Remove any type pattern (:) from search value as needed
if (searchValue.indexOf(SCOPE_PREFIX) === 0) {
......@@ -186,31 +186,31 @@ export class QuickOutlineAction extends EditorQuickOpen.BaseEditorQuickOpenActio
return nls.localize('quickOutlineActionInput', "Type the name of an identifier you wish to navigate to");
}
private toQuickOpenEntries(outline:OutlineNode[], searchValue:string):SymbolEntry[] {
var results:SymbolEntry[] = [];
private toQuickOpenEntries(outline: OutlineNode[], searchValue: string): SymbolEntry[] {
let results: SymbolEntry[] = [];
// Flatten
var flattened:OutlineNode[] = [];
let flattened: OutlineNode[] = [];
if (outline) {
this.flatten(outline, flattened);
}
// Convert to Entries
var normalizedSearchValue = searchValue;
let normalizedSearchValue = searchValue;
if (searchValue.indexOf(SCOPE_PREFIX) === 0) {
normalizedSearchValue = normalizedSearchValue.substr(SCOPE_PREFIX.length);
}
for (var i = 0; i < flattened.length; i++) {
var element = flattened[i];
var label = Strings.trim(element.label);
for (let i = 0; i < flattened.length; i++) {
let element = flattened[i];
let label = Strings.trim(element.label);
// Check for meatch
var highlights = Filters.matchesFuzzy(normalizedSearchValue, label);
let highlights = Filters.matchesFuzzy(normalizedSearchValue, label);
if (highlights) {
// Show parent scope as description
var description:string = null;
let description: string = null;
if (element.parentScope) {
description = Arrays.tail(element.parentScope);
}
......@@ -231,12 +231,12 @@ export class QuickOutlineAction extends EditorQuickOpen.BaseEditorQuickOpenActio
// Mark all type groups
if (results.length > 0 && searchValue.indexOf(SCOPE_PREFIX) === 0) {
var currentType:string = null;
var currentResult:SymbolEntry = null;
var typeCounter = 0;
let currentType: string = null;
let currentResult: SymbolEntry = null;
let typeCounter = 0;
for (var i = 0; i < results.length; i++) {
var result = results[i];
for (let i = 0; i < results.length; i++) {
let result = results[i];
// Found new type
if (currentType !== result.getType()) {
......@@ -273,8 +273,8 @@ export class QuickOutlineAction extends EditorQuickOpen.BaseEditorQuickOpenActio
return results;
}
private typeToLabel(type:string, count:number):string {
switch(type) {
private typeToLabel(type: string, count: number): string {
switch (type) {
case 'module': return nls.localize('modules', "modules ({0})", count);
case 'class': return nls.localize('class', "classes ({0})", count);
case 'interface': return nls.localize('interface', "interfaces ({0})", count);
......@@ -290,9 +290,9 @@ export class QuickOutlineAction extends EditorQuickOpen.BaseEditorQuickOpenActio
return type;
}
private flatten(outline:OutlineNode[], flattened:OutlineNode[], parentScope?:string[]):void {
for (var i = 0; i < outline.length; i++) {
var element = outline[i];
private flatten(outline: OutlineNode[], flattened: OutlineNode[], parentScope?: string[]): void {
for (let i = 0; i < outline.length; i++) {
let element = outline[i];
flattened.push(element);
if (parentScope) {
......@@ -300,7 +300,7 @@ export class QuickOutlineAction extends EditorQuickOpen.BaseEditorQuickOpenActio
}
if (element.children) {
var elementScope:string[] = [];
let elementScope: string[] = [];
if (parentScope) {
elementScope = parentScope.slice(0);
}
......@@ -311,54 +311,54 @@ export class QuickOutlineAction extends EditorQuickOpen.BaseEditorQuickOpenActio
}
}
private sortNormal(searchValue:string, elementA:SymbolEntry, elementB:SymbolEntry):number {
var elementAName = elementA.getLabel().toLowerCase();
var elementBName = elementB.getLabel().toLowerCase();
private sortNormal(searchValue: string, elementA: SymbolEntry, elementB: SymbolEntry): number {
let elementAName = elementA.getLabel().toLowerCase();
let elementBName = elementB.getLabel().toLowerCase();
// Compare by name
var r = Strings.localeCompare(elementAName, elementBName);
let r = Strings.localeCompare(elementAName, elementBName);
if (r !== 0) {
return r;
}
// If name identical sort by range instead
var elementARange = elementA.getRange();
var elementBRange = elementB.getRange();
let elementARange = elementA.getRange();
let elementBRange = elementB.getRange();
return elementARange.startLineNumber - elementBRange.startLineNumber;
}
private sortScoped(searchValue:string, elementA:SymbolEntry, elementB:SymbolEntry):number {
private sortScoped(searchValue: string, elementA: SymbolEntry, elementB: SymbolEntry): number {
// Remove scope char
searchValue = searchValue.substr(SCOPE_PREFIX.length);
// Sort by type first if scoped search
var elementAType = elementA.getType();
var elementBType = elementB.getType();
var r = Strings.localeCompare(elementAType, elementBType);
let elementAType = elementA.getType();
let elementBType = elementB.getType();
let r = Strings.localeCompare(elementAType, elementBType);
if (r !== 0) {
return r;
}
// Special sort when searching in scoped mode
if (searchValue) {
var elementAName = elementA.getLabel().toLowerCase();
var elementBName = elementB.getLabel().toLowerCase();
let elementAName = elementA.getLabel().toLowerCase();
let elementBName = elementB.getLabel().toLowerCase();
// Compare by name
var r = Strings.localeCompare(elementAName, elementBName);
let r = Strings.localeCompare(elementAName, elementBName);
if (r !== 0) {
return r;
}
}
// Default to sort by range
var elementARange = elementA.getRange();
var elementBRange = elementB.getRange();
let elementARange = elementA.getRange();
let elementBRange = elementB.getRange();
return elementARange.startLineNumber - elementBRange.startLineNumber;
}
_onClose(canceled:boolean):void {
_onClose(canceled: boolean): void {
super._onClose(canceled);
// Clear Cache
......
......@@ -2,8 +2,10 @@
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
'use strict';
import nls = require('vs/nls');
import {Registry} from 'vs/platform/platform';
import filters = require('vs/base/common/filters');
import types = require('vs/base/common/types');
......@@ -61,6 +63,10 @@ export class EditorHistoryEntry extends EditorQuickOpenEntry {
return this.input.getName();
}
public getAriaLabel(): string {
return nls.localize('entryAriaLabel', "{0}, editor history", this.getLabel());
}
public getDescription(): string {
return this.input.getDescription();
}
......
......@@ -347,9 +347,7 @@ export class QuickOpenController extends WorkbenchComponent implements IQuickOpe
// Model
let model = new QuickOpenModel();
let entries = picks.map((e) => {
let entry = (<IPickOpenEntryItem>e);
if (entry.height && entry.render) {
return new PickOpenItem(entry.label, entry.description, entry.height, entry.render.bind(entry), () => progress(e));
}
......@@ -807,7 +805,6 @@ export class QuickOpenController extends WorkbenchComponent implements IQuickOpe
if (!result || !result.entries.length) {
const model = new QuickOpenModel([new PlaceholderQuickOpenEntry(resolvedHandler.getEmptyLabel(value))]);
this.showModel(model, resolvedHandler.getAutoFocus(value));
} else {
this.showModel(result, resolvedHandler.getAutoFocus(value));
}
......
......@@ -281,6 +281,10 @@ class CommandEntry extends QuickOpenEntry {
return this.command.aliases[0];
}
public getAriaLabel(): string {
return nls.localize('entryAriaLabel', "{0}, command", this.getLabel());
}
public run(mode: Mode, context: IContext): boolean {
if (mode === Mode.PREVIEW) {
return false;
......
......@@ -133,6 +133,7 @@ export class Repl extends Panel {
this.tree = new treeimpl.Tree(this.treeContainer, {
dataSource: new viewer.ReplExpressionsDataSource(this.debugService),
renderer: this.renderer,
accessibilityProvider: new viewer.ReplExpressionsAccessibilityProvider(),
controller: new viewer.ReplExpressionsController(this.debugService, this.contextMenuService, new viewer.ReplExpressionsActionProvider(this.instantiationService), this.replInput, false)
}, replTreeOptions);
......
......@@ -416,6 +416,26 @@ export class ReplExpressionsRenderer implements tree.IRenderer {
}
}
export class ReplExpressionsAccessibilityProvider implements tree.IAccessibilityProvider {
public getAriaLabel(tree: tree.ITree, element: any): string {
if (element instanceof model.Variable) {
return nls.localize('replVariableAriaLabel', "Variable {0} has value {1}, read eval print loop, debug", (<model.Variable>element).name, (<model.Variable>element).value);
}
if (element instanceof model.Expression) {
return nls.localize('replExpressionAriaLabel', "Expression {0} has value {1}, read eval print loop, debug", (<model.Expression>element).name, (<model.Expression>element).value);
}
if (element instanceof model.ValueOutputElement) {
return nls.localize('replValueOutputAriaLabel', "{0}, read eval print loop, debug", (<model.ValueOutputElement>element).value);
}
if (element instanceof model.KeyValueOutputElement) {
return nls.localize('replKeyValueOutputAriaLabel', "Output variable {0} has value {1}, read eval print loop, debug", (<model.KeyValueOutputElement>element).key, (<model.KeyValueOutputElement>element).value);
}
return null;
}
}
export class ReplExpressionsActionProvider implements renderer.IActionProvider {
constructor(private instantiationService: IInstantiationService) {
......
......@@ -39,6 +39,7 @@ class AbstractRefEntry extends model.QuickOpenEntry {
public getIcon(): string { return 'git'; }
public getLabel(): string { return this.head.name; }
public getDescription(): string { return ''; }
public getAriaLabel(): string { return nls.localize('refAriaLabel', "{0}, git", this.getLabel()); }
public run(mode: quickopen.Mode, context: model.IContext):boolean {
if (mode === quickopen.Mode.PREVIEW) {
......@@ -97,6 +98,7 @@ class BranchEntry extends model.QuickOpenEntry {
public getIcon(): string { return 'git'; }
public getLabel(): string { return this.name; }
public getAriaLabel(): string { return nls.localize('branchAriaLabel', "{0}, git branch", this.getLabel()); }
public getDescription(): string { return nls.localize('createBranch', "Create branch {0}", this.name); }
public run(mode: quickopen.Mode, context: model.IContext):boolean {
......
......@@ -65,6 +65,10 @@ class BaseCommandEntry extends QuickOpenEntryGroup {
return this.description;
}
public getAriaLabel(): string {
return nls.localize('entryAriaLabel', "{0}, commands", this.getLabel());
}
public getGroupLabel(): string {
return this.key;
}
......
......@@ -270,6 +270,10 @@ class SymbolEntry extends EditorQuickOpenEntryGroup {
return this.name;
}
public getAriaLabel(): string {
return nls.localize('entryAriaLabel', "{0}, symbols", this.getLabel());
}
public getIcon(): string {
return this.icon;
}
......
......@@ -38,6 +38,10 @@ class HelpEntry extends QuickOpenEntryItem {
return this.prefix;
}
public getAriaLabel(): string {
return nls.localize('entryAriaLabel', "{0}, picker help", this.getLabel());
}
public getDescription(): string {
return this.description;
}
......
......@@ -50,6 +50,10 @@ export class FileEntry extends EditorQuickOpenEntry {
return this.name;
}
public getAriaLabel(): string {
return nls.localize('entryAriaLabel', "{0}, file picker", this.getLabel());
}
public getDescription(): string {
return this.description;
}
......
......@@ -46,6 +46,10 @@ class SymbolEntry extends EditorQuickOpenEntry {
return this.name + this.parameters;
}
public getAriaLabel(): string {
return nls.localize('entryAriaLabel', "{0}, symbols picker", this.getLabel());
}
public getName(): string {
return this.name;
}
......
......@@ -32,6 +32,10 @@ class TaskEntry extends Model.QuickOpenEntry {
return this.task.name;
}
public getAriaLabel(): string {
return nls.localize('entryAriaLabel', "{0}, tasks", this.getLabel());
}
public run(mode:QuickOpen.Mode, context:Model.IContext):boolean {
if (mode === QuickOpen.Mode.PREVIEW) {
return false;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册