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

Side by Side Diff: chrome/browser/resources/downloads/focus_row.js

Issue 977473002: downloads: break downloads.js into more classes/files. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: remove NOTREACHED for testing code Created 5 years, 9 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 cr.define('downloads', function() {
6 /**
7 * Provides an implementation for a single column grid.
8 * @constructor
9 * @extends {cr.ui.FocusRow}
10 */
11 function FocusRow() {}
12
13 /**
14 * Decorates |focusRow| so that it can be treated as a FocusRow.
15 * @param {Element} focusRow The element that has all the columns represented
16 * by |itemView|.
17 * @param {!downloads.ItemView} itemView The item view this row cares about.
18 * @param {Node} boundary Focus events are ignored outside of this node.
19 */
20 FocusRow.decorate = function(focusRow, itemView, boundary) {
21 focusRow.__proto__ = FocusRow.prototype;
22 focusRow.decorate(boundary);
23
24 // Add all clickable elements as a row into the grid.
25 focusRow.addElementIfFocusable_(itemView.fileLink, 'name');
26 focusRow.addElementIfFocusable_(itemView.srcUrl, 'url');
27 focusRow.addElementIfFocusable_(itemView.show, 'show');
28 focusRow.addElementIfFocusable_(itemView.retry, 'retry');
29 focusRow.addElementIfFocusable_(itemView.pause, 'pause');
30 focusRow.addElementIfFocusable_(itemView.resume, 'resume');
31 focusRow.addElementIfFocusable_(itemView.safeRemove, 'remove');
32 focusRow.addElementIfFocusable_(itemView.cancel, 'cancel');
33 focusRow.addElementIfFocusable_(itemView.restore, 'save');
34 focusRow.addElementIfFocusable_(itemView.save, 'save');
35 focusRow.addElementIfFocusable_(itemView.dangerRemove, 'discard');
36 focusRow.addElementIfFocusable_(itemView.discard, 'discard');
37 focusRow.addElementIfFocusable_(itemView.controlledBy, 'extension');
38 };
39
40 FocusRow.prototype = {
41 __proto__: cr.ui.FocusRow.prototype,
42
43 /** @override */
44 getEquivalentElement: function(element) {
45 if (this.focusableElements.indexOf(element) > -1)
46 return assert(element);
47
48 // All elements default to another element with the same type.
49 var columnType = element.getAttribute('column-type');
50 var equivalent = this.querySelector('[column-type=' + columnType + ']');
51
52 if (this.focusableElements.indexOf(equivalent) < 0) {
53 var equivalentTypes =
54 ['show', 'retry', 'pause', 'resume', 'remove', 'cancel'];
55 if (equivalentTypes.indexOf(columnType) != -1) {
56 var allTypes = equivalentTypes.map(function(type) {
57 return '[column-type=' + type + ']:not([hidden])';
58 }).join(', ');
59 equivalent = this.querySelector(allTypes);
60 }
61 }
62
63 // Return the first focusable element if no equivalent element is found.
64 return assert(equivalent || this.focusableElements[0]);
65 },
66
67 /**
68 * @param {Element} element The element that should be added.
69 * @param {string} type The column type to use for the element.
70 * @private
71 */
72 addElementIfFocusable_: function(element, type) {
73 if (this.shouldFocus_(element)) {
74 this.addFocusableElement(element);
75 element.setAttribute('column-type', type);
asanka 2015/03/10 04:15:51 Rather than using [column-type], can we code the c
Dan Beam 2015/03/10 05:41:02 i copied the code from here: https://code.google.c
asanka 2015/03/11 19:57:49 SG.
76 }
77 },
78
79 /**
80 * Determines if element should be focusable.
81 * @param {Element} element
82 * @return {boolean}
83 * @private
84 */
85 shouldFocus_: function(element) {
asanka 2015/03/10 04:15:50 Doesn't cr.ui.FocusRow deal with visibility?
Dan Beam 2015/03/10 05:41:02 no, https://code.google.com/p/chromium/codesearch#
86 if (!element)
87 return false;
88
89 // Hidden elements are not focusable.
90 var style = window.getComputedStyle(element);
91 if (style.visibility == 'hidden' || style.display == 'none')
92 return false;
93
94 // Verify all ancestors are focusable.
95 return !element.parentElement || this.shouldFocus_(element.parentElement);
96 },
97 };
98
99 return {FocusRow: FocusRow};
100 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698