Chromium Code Reviews| Index: ui/webui/resources/js/cr/ui/tabs.js |
| diff --git a/ui/webui/resources/js/cr/ui/tabs.js b/ui/webui/resources/js/cr/ui/tabs.js |
| index 6afa5663133d325dc80161f6fa9b98cb5314e712..e6374482b77d6bab0bb2ac314b8eb7c495db9d3d 100644 |
| --- a/ui/webui/resources/js/cr/ui/tabs.js |
| +++ b/ui/webui/resources/js/cr/ui/tabs.js |
| @@ -10,7 +10,13 @@ cr.define('cr.ui', function() { |
| * @return {TabBox} The tab box if found. |
| */ |
| function getTabBox(el) { |
| - return el.parentElement && el.parentElement.parentElement; |
| + while (el != null) { |
|
Dan Beam
2013/05/23 23:06:48
nit: while (el) {
dvh
2013/05/24 04:33:42
Used findAncestor() instead.
|
| + if (el.nodeName == 'TABBOX') { |
|
Dan Beam
2013/05/23 23:06:48
nit: no curlies
dvh
2013/05/24 04:33:42
Used findAncestor() instead.
|
| + break; |
| + } |
| + el = el.parentElement; |
| + } |
| + return el; |
|
Dan Beam
2013/05/23 23:06:48
use https://code.google.com/p/chromium/codesearch#
dvh
2013/05/24 04:33:42
Done.
|
| } |
| /** |
| @@ -39,12 +45,46 @@ cr.define('cr.ui', function() { |
| TABPANEL: TabPanel |
| }; |
| - var child; |
| - for (var i = 0; child = this.children[i]; i++) { |
| - var constr = map[child.tagName]; |
| - if (constr) |
| + var mainThis = this; |
| + var tagNames = Object.keys(map); |
| + tagNames.forEach(function(tagName) { |
| + var children = getElementsByTagNameFromRoot.call(mainThis, tagName); |
| + var constr = map[tagName]; |
| + for (var i = 0; child = children[i]; i++) { |
| cr.ui.decorate(child, constr); |
| + } |
| + }); |
|
Dan Beam
2013/05/23 23:06:48
}.bind(this); (and get rid of mainThis)
dvh
2013/05/24 04:33:42
Done.
|
| + } |
| + |
| + /** |
| + * Returns all elements that match a given tagName in the set of the |
| + * elements and its descendents. |
| + * @tagName {string} |
| + * @this {HTMLElement} |
| + * @return {array} An array of HTMLElement. |
| + */ |
| + function getElementsByTagNameFromRoot(tagName) { |
| + if (this.tagName == tagName) { |
|
Dan Beam
2013/05/23 23:06:48
nit: no curlies
dvh
2013/05/24 04:33:42
Done.
|
| + return [this]; |
| } |
| + var elements = this.getElementsByTagName(tagName); |
| + return Array.prototype.slice.call(elements); |
| + } |
| + |
| + /** |
| + * Returns the first element that matches a given tagName in the set of the |
| + * elements and its descendents. |
| + * @tagName {string} |
| + * @this {HTMLElement} |
| + * @return {HTMLElement} The element that matches the tagName. |
| + */ |
| + function getFirstElementByTagNameFromRoot(tagName) { |
|
Dan Beam
2013/05/23 23:06:48
don't use |this| as the root, change to this pass
|
| + var result = null; |
| + var elements = getElementsByTagNameFromRoot.call(this, tagName); |
| + if (elements.length > 0) { |
|
Dan Beam
2013/05/23 23:06:48
nit: no curlies
dvh
2013/05/24 04:33:42
Done.
|
| + result = elements[0]; |
|
Dan Beam
2013/05/23 23:06:48
return elements[0];
dvh
2013/05/24 04:33:42
Done.
|
| + } |
| + return result; |
|
Dan Beam
2013/05/23 23:06:48
return null;
dvh
2013/05/24 04:33:42
Done.
|
| } |
| /** |
| @@ -53,10 +93,18 @@ cr.define('cr.ui', function() { |
| * @this {TabBox} |
| */ |
| function selectedIndexSetHook(selectedIndex) { |
| - var child, tabChild; |
| - for (var i = 0; child = this.children[i]; i++) { |
| - for (var j = 0; tabChild = child.children[j]; j++) { |
| - tabChild.selected = j == selectedIndex; |
| + var child, tabChild, element; |
| + element = getFirstElementByTagNameFromRoot.call(this, 'TABS'); |
| + if (element != null) { |
|
Dan Beam
2013/05/23 23:06:48
if (element) {
dvh
2013/05/24 04:33:42
Done.
|
| + for (var i = 0; child = element.children[i]; i++) { |
| + child.selected = i == selectedIndex; |
|
Dan Beam
2013/05/23 23:06:48
is this a dom attribute? if so, you can probably
dvh
2013/05/24 04:33:42
Actually, it needs to add the selected attribute o
Dan Beam
2013/05/24 04:40:20
oh, yeah, you're setting it on them... sorry, yeah
|
| + } |
| + } |
| + |
| + element = getFirstElementByTagNameFromRoot.call(this, 'TABPANELS'); |
| + if (element != null) { |
|
Dan Beam
2013/05/23 23:06:48
if (element) {
dvh
2013/05/24 04:33:42
Done.
|
| + for (var i = 0; child = element.children[i]; i++) { |
| + child.selected = i == selectedIndex; |
| } |
| } |
| } |
| @@ -113,7 +161,7 @@ cr.define('cr.ui', function() { |
| decorate: function() { |
| decorateChildren.call(this); |
| - // Make the Tabs element fousable. |
| + // Make the Tabs element focusable. |
| this.tabIndex = 0; |
| this.addEventListener('keydown', this.handleKeyDown_.bind(this)); |
| @@ -149,8 +197,9 @@ cr.define('cr.ui', function() { |
| delta *= -1; |
| var count = this.children.length; |
| - var index = this.parentElement.selectedIndex; |
| - this.parentElement.selectedIndex = (index + delta + count) % count; |
| + var tabbox = getTabBox(this); |
| + var index = tabbox.selectedIndex; |
| + tabbox.selectedIndex = (index + delta + count) % count; |
| // Show focus outline since we used the keyboard. |
| this.focusOutlineManager_.visible = true; |