Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3662)

Unified Diff: chrome/browser/resources/history/history.js

Issue 392803003: a11y/history: don't change focus when a user clicks on bookmark star icon. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: add title Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/app/generated_resources.grd ('k') | chrome/browser/ui/webui/history_ui.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/resources/history/history.js
diff --git a/chrome/browser/resources/history/history.js b/chrome/browser/resources/history/history.js
index 7d35211293897859fd0102b1d48c729ae608b336..a6f288b6a1ae8f24ac590d0277a0fbb5b44df24e 100644
--- a/chrome/browser/resources/history/history.js
+++ b/chrome/browser/resources/history/history.js
@@ -187,6 +187,7 @@ Visit.prototype.getResultDOM = function(propertyBag) {
var bookmarkSection = createElementWithClassName('div', 'bookmark-section');
if (this.starred_) {
+ bookmarkSection.title = loadTimeData.getString('removeBookmark');
bookmarkSection.classList.add('starred');
bookmarkSection.addEventListener('click', function f(e) {
recordUmaAction('HistoryPage_BookmarkStarClicked');
@@ -291,13 +292,9 @@ Visit.prototype.removeFromHistory = function() {
Visit.prototype.setIsLead = function(isLead) {
this.domNode_.querySelector('.entry-box').classList.toggle('lead', isLead);
if (!isLead) {
- if (this.checkBox)
- this.checkBox.tabIndex = -1;
-
- this.titleLink.tabIndex = -1;
-
- if (this.dropDown)
- this.dropDown.tabIndex = -1;
+ this.getFocusableControls_().forEach(function(control) {
+ control.tabIndex = -1;
+ });
}
};
@@ -305,14 +302,7 @@ Visit.prototype.setIsLead = function(isLead) {
* @param {Element} control A control element to focus.
*/
Visit.prototype.focusControl = function(control) {
- var controls = [this.titleLink];
-
- if (this.checkBox)
- controls.push(this.checkBox);
-
- if (this.dropDown)
- controls.push(this.dropDown);
-
+ var controls = this.getFocusableControls_();
assert(controls.indexOf(control) >= 0);
for (var i = 0; i < controls.length; ++i) {
@@ -329,6 +319,12 @@ Object.defineProperty(Visit.prototype, 'checkBox', {
},
});
+Object.defineProperty(Visit.prototype, 'bookmarkStar', {
+ get: function() {
+ return this.domNode_.querySelector('.bookmark-section.starred');
+ },
+});
+
Object.defineProperty(Visit.prototype, 'titleLink', {
get: function() {
return this.domNode_.querySelector('.title a');
@@ -459,6 +455,27 @@ Visit.prototype.showMoreFromSite_ = function() {
};
/**
+ * @return {Array.<Element>} A list of focusable controls.
+ * @private
+ */
+Visit.prototype.getFocusableControls_ = function() {
+ var controls = [];
+
+ if (this.checkBox)
+ controls.push(this.checkBox);
+
+ if (this.bookmarkStar)
+ controls.push(this.bookmarkStar);
+
+ controls.push(this.titleLink);
+
+ if (this.dropDown)
+ controls.push(this.dropDown);
+
+ return controls;
+};
+
+/**
* @param {Event} e A keydown event to handle.
* @private
*/
@@ -471,21 +488,22 @@ Visit.prototype.handleKeydown_ = function(e) {
}
var target = e.target;
- if (target != document.activeElement ||
- !(keyCode == 37 || keyCode == 39) || // Left or right.
- (keyCode == 37 && target == this.checkBox) ||
- (keyCode == 39 && target == this.dropDown)) {
+ if (target != document.activeElement || !(keyCode == 37 || keyCode == 39)) {
+ // Handling key code for inactive element or key wasn't left or right.
return;
}
- var toFocus;
- if (e.keyCode == 37) // Left.
- toFocus = target == this.dropDown ? this.titleLink : this.checkBox;
- else // Right.
- toFocus = target == this.checkBox ? this.titleLink : this.dropDown;
-
- this.focusControl(toFocus);
- e.preventDefault();
+ var controls = this.getFocusableControls_();
+ for (var i = 0; i < controls.length; ++i) {
+ if (controls[i].contains(target)) {
+ var toFocus = e.keyCode == 37 ? controls[i - 1] : controls[i + 1];
dmazzoni 2014/07/22 16:59:16 Add back a comment for 37 == "left" or use a const
Dan Beam 2014/07/22 18:10:06 Done.
+ if (toFocus) {
+ this.focusControl(toFocus);
+ e.preventDefault();
+ }
+ break;
+ }
+ }
};
/**
@@ -1627,16 +1645,32 @@ HistoryView.prototype.swapFocusedVisit_ = function(visit) {
if (!visit)
return;
- var control;
var activeVisit = findAncestorByClass(document.activeElement, 'entry').visit;
- if (document.activeElement == activeVisit.checkBox)
- control = visit.checkBox;
- else if (document.activeElement == activeVisit.titleLink)
- control = visit.titleLink;
- else if (document.activeElement == activeVisit.dropDown)
- control = visit.dropDown;
-
- visit.focusControl(control);
+ var controls = activeVisit.getFocusableControls_();
+
+ for (var i = 0; i < controls.length; ++i) {
+ var control = controls[i];
+ if (!control.contains(document.activeElement))
+ continue;
+
+ // Try to focus the same type of control if the new visit has it.
+ if (control == activeVisit.checkBox && visit.checkBox) {
+ visit.focusControl(visit.checkBox);
+ } else if (control == activeVisit.bookmarkStar && visit.bookmarkStar) {
+ visit.focusControl(visit.bookmarkStar);
+ } else if (control == activeVisit.titleLink) {
+ visit.focusControl(visit.titleLink);
+ } else if (control == activeVisit.dropDown && visit.dropDown) {
+ visit.focusControl(visit.dropDown);
+ } else {
+ // Otherwise, just focus something that might be in a similar column.
+ var controlsToFocus = visit.getFocusableControls_();
+ var indexToFocus = Math.min(i, controlsToFocus.length - 1);
+ visit.focusControl(controlsToFocus[indexToFocus]);
+ }
+ break;
+ }
+
activeVisit.setIsLead(false);
};
@@ -1667,6 +1701,9 @@ HistoryView.prototype.handleMousedown_ = function(e) {
return;
var visit = entry.visit;
+ if (visit.bookmarkStar && visit.bookmarkStar.contains(target))
+ return;
+
if (visit.titleLink.contains(target))
visit.focusControl(visit.titleLink);
else if (visit.dropDown && visit.dropDown.contains(target))
« no previous file with comments | « chrome/app/generated_resources.grd ('k') | chrome/browser/ui/webui/history_ui.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698