提交 9a7ccb51 编写于 作者: S Sandeep Somavarapu

#6679 Accessibility

上级 5dfa0e03
......@@ -109,6 +109,8 @@ export class MarkersPanel extends Panel {
if (this.markersModel.hasFilteredResources()) {
this.tree.DOMFocus();
this.revealProblemsForCurrentActiveEditor(true);
} else {
this.messageBox.focus();
}
}
......@@ -135,7 +137,8 @@ export class MarkersPanel extends Panel {
private createMessageBox(parent: HTMLElement): void {
this.messageBoxContainer = dom.append(parent, dom.emmet('.message-box-container'));
this.messageBox = dom.append(this.messageBoxContainer, dom.emmet('p'));
this.messageBox = dom.append(this.messageBoxContainer, dom.emmet('span'));
this.messageBox.setAttribute('tabindex', '0');
}
private createTree(parent: HTMLElement): void {
......@@ -146,7 +149,8 @@ export class MarkersPanel extends Panel {
this.tree = new TreeImpl.Tree(this.treeContainer, {
dataSource: new Viewer.DataSource(),
renderer: renderer,
controller: controller
controller: controller,
accessibilityProvider: new Viewer.ProblemsTreeAccessibilityProvider()
}, {
indentPixels: 0,
twistiePixels: 20,
......@@ -260,6 +264,9 @@ export class MarkersPanel extends Panel {
this.tree.setSelection([currentActiveResource]);
}
}
} else if (focus) {
this.tree.setSelection([]);
this.tree.focusFirst();
}
}
......
......@@ -6,7 +6,7 @@
import {TPromise, Promise} from 'vs/base/common/winjs.base';
import * as dom from 'vs/base/browser/dom';
import {IDataSource, ITree, IRenderer} from 'vs/base/parts/tree/browser/tree';
import {IDataSource, ITree, IRenderer, IAccessibilityProvider} from 'vs/base/parts/tree/browser/tree';
import { IActionRunner } from 'vs/base/common/actions';
import Severity from 'vs/base/common/severity';
import {IWorkspaceContextService} from 'vs/workbench/services/workspace/common/contextService';
......@@ -174,4 +174,18 @@ export class Renderer implements IRenderer {
public disposeTemplate(tree: ITree, templateId: string, templateData: any): void {
}
}
export class ProblemsTreeAccessibilityProvider implements IAccessibilityProvider {
public getAriaLabel(tree: ITree, element: any): string {
if (element instanceof Resource) {
return Messages.PROBLEMS_TREE_ARIA_LABEL_RESOURCE(element.name, element.markers.length);
}
if (element instanceof Marker) {
return Messages.PROBLEMS_TREE_ARIA_LABEL_MARKER(element.marker);
}
return null;
}
}
\ No newline at end of file
......@@ -27,7 +27,11 @@
}
.markers-panel .markers-panel-container .message-box-container {
padding-left: 20px;
padding: 20px 0 0 20px;
}
.markers-panel .markers-panel-container .message-box-container span:focus {
outline: none;
}
.markers-panel .markers-panel-container .hidden {
......
......@@ -5,6 +5,8 @@
'use strict';
import nls = require('vs/nls');
import Severity from 'vs/base/common/severity';
import { IMarker } from 'vs/platform/markers/common/markers';
export default class Messages {
......@@ -16,7 +18,7 @@ export default class Messages {
public static MARKERS_PANEL_TITLE_NO_PROBLEMS:string= nls.localize('markers.panel.title.no.problems', "No problems");
public static MARKERS_PANEL_NO_PROBLEMS_BUILT:string= nls.localize('markers.panel.no.problems.build', "No errors have been detected in the workspace so far.");
public static MARKERS_PANEL_NO_PROBLEMS_BUILT:string= nls.localize('markers.panel.no.problems.build', "No problems have been detected in the workspace so far.");
public static MARKERS_PANEL_NO_PROBLEMS_FILTERS:string= nls.localize('markers.panel.no.problems.filters', "No results found with provided filter criteria");
public static MARKERS_PANEL_ACTION_TOOLTIP_FILTER:string= nls.localize('markers.panel.action.filter', "Filter Problems");
......@@ -37,4 +39,23 @@ export default class Messages {
public static MARKERS_PANEL_AT_LINE_COL_NUMBER= (ln: number, col: number):string=>{return nls.localize('markers.panel.at.ln.col.number', "({0}, {1})", '' + ln, '' + col);}
public static MARKERS_PANEL_TITLE_AT_LINE_COL_NUMBER= (ln: number, col: number):string=>{return nls.localize('markers.panel.title.at.ln.col.number', "At line {0}, column {1}", '' + ln, '' + col);}
public static MARKERS_PANEL_TITLE_SOURCE= (source: string):string=>{return nls.localize('markers.panel.title.source', "Built by {0}", source);}
public static PROBLEMS_TREE_ARIA_LABEL_RESOURCE= (fileName, noOfProblems):string => {return nls.localize('problems.tree.aria.label.resource', "{0} with {1} problems", fileName, noOfProblems);}
public static PROBLEMS_TREE_ARIA_LABEL_MARKER= (marker: IMarker):string => {
switch (marker.severity) {
case Severity.Error:
return marker.source ? nls.localize('problems.tree.aria.label.error.marker', "Error generated by {0}: {1} at line {2} and column {3}", marker.source, marker.message, marker.startLineNumber, marker.startColumn)
: nls.localize('problems.tree.aria.label.error.marker.nosource', "Error: {0} at line {1} and column {2}", marker.message, marker.startLineNumber, marker.startColumn);
case Severity.Warning:
return marker.source ? nls.localize('problems.tree.aria.label.warning.marker', "Warning generated by {0}: {1} at line {2} and column {3}", marker.source, marker.message, marker.startLineNumber, marker.startColumn)
: nls.localize('problems.tree.aria.label.warning.marker.nosource', "Warning: {0} at line {1} and column {2}", marker.message, marker.startLineNumber, marker.startColumn);
case Severity.Info:
return marker.source ? nls.localize('problems.tree.aria.label.info.marker', "Info generated by {0}: {1} at line {2} and column {3}", marker.source, marker.message, marker.startLineNumber, marker.startColumn)
: nls.localize('problems.tree.aria.label.info.marker.nosource', "Info: {0} at line {1} and column {2}", marker.message, marker.startLineNumber, marker.startColumn);
default:
return marker.source ? nls.localize('problems.tree.aria.label.marker', "Problem generated by {0}: {1} at line {2} and column {3}", marker.source, marker.message, marker.startLineNumber, marker.startColumn)
: nls.localize('problems.tree.aria.label.marker.nosource', "Problem: {0} at line {1} and column {2}", marker.message, marker.startLineNumber, marker.startColumn);
}
}
}
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册