From 9ace9db63cfaae96cf6217fc50690ab869f80223 Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Thu, 4 Feb 2016 08:15:02 +0100 Subject: [PATCH] Search: no a11y feedback for search results and search progress (fixes #2644) --- src/vs/base/browser/ui/aria/aria.ts | 5 +++++ .../workbench/parts/search/browser/searchViewlet.ts | 12 ++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/vs/base/browser/ui/aria/aria.ts b/src/vs/base/browser/ui/aria/aria.ts index a4f05100621..bd783895942 100644 --- a/src/vs/base/browser/ui/aria/aria.ts +++ b/src/vs/base/browser/ui/aria/aria.ts @@ -6,6 +6,7 @@ 'use strict'; import 'vs/css!./aria'; +import nls = require('vs/nls'); import {Builder, $} from 'vs/base/browser/builder'; let ariaContainer: Builder; @@ -38,6 +39,10 @@ function insertMessage(target: Builder, msg: string): void { return; } + if (target.getHTMLElement().textContent === msg) { + msg = nls.localize('repeated', "{0} (occurred again)", msg); + } + $(target).empty(); $(target).text(msg); } \ No newline at end of file diff --git a/src/vs/workbench/parts/search/browser/searchViewlet.ts b/src/vs/workbench/parts/search/browser/searchViewlet.ts index aa541917a09..81dc432e8c6 100644 --- a/src/vs/workbench/parts/search/browser/searchViewlet.ts +++ b/src/vs/workbench/parts/search/browser/searchViewlet.ts @@ -12,6 +12,7 @@ import {EditorType} from 'vs/editor/common/editorCommon'; import lifecycle = require('vs/base/common/lifecycle'); import errors = require('vs/base/common/errors'); import assert = require('vs/base/common/assert'); +import aria = require('vs/base/browser/ui/aria/aria'); import {IExpression, splitGlobAware} from 'vs/base/common/glob'; import {isFunction} from 'vs/base/common/types'; import URI from 'vs/base/common/uri'; @@ -1278,6 +1279,9 @@ export class SearchViewlet extends Viewlet { message = nls.localize('noResultsFound', "No results found. Review your settings for configured exclusions - "); } + // Indicate as status to ARIA + aria.status(message); + this.tree.onHidden(); this.results.hide(); let div = this.messages.empty().show().asContainer().div({ 'class': 'message', text: message }); @@ -1294,6 +1298,7 @@ export class SearchViewlet extends Viewlet { } else if (hasIncludes || hasExcludes) { $(div).a({ 'class': ['pointer', 'prominent'], + 'tabindex': '0', text: nls.localize('rerunSearchInAll.message', "Search again in all files") }).on(dom.EventType.CLICK, (e: MouseEvent) => { dom.EventHelper.stop(e, false); @@ -1306,6 +1311,7 @@ export class SearchViewlet extends Viewlet { } else { $(div).a({ 'class': ['pointer', 'prominent'], + 'tabindex': '0', text: nls.localize('openSettings.message', "Open Settings") }).on(dom.EventType.CLICK, (e: MouseEvent) => { dom.EventHelper.stop(e, false); @@ -1315,8 +1321,10 @@ export class SearchViewlet extends Viewlet { }); } } else { - // show highlights - this.viewModel.toggleHighlights(true); + this.viewModel.toggleHighlights(true); // show highlights + + // Indicate as status to ARIA + aria.status(nls.localize('ariaSearchResultsStatus', "Search returned {0} results in {1} files", this.viewModel.count(), this.viewModel.fileCount())); } doneTimer.stop();