Index: chrome/browser/resources/shared/js/cr/ui/tabs.js |
=================================================================== |
--- chrome/browser/resources/shared/js/cr/ui/tabs.js (revision 177292) |
+++ chrome/browser/resources/shared/js/cr/ui/tabs.js (working copy) |
@@ -1,220 +0,0 @@ |
-// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-cr.define('cr.ui', function() { |
- |
- /** |
- * Returns the TabBox for a Tab or a TabPanel. |
- * @param {Tab|TabPanel} el The tab or tabpanel element. |
- * @return {TabBox} The tab box if found. |
- */ |
- function getTabBox(el) { |
- return el.parentElement && el.parentElement.parentElement; |
- } |
- |
- /** |
- * Set hook for the selected property for Tab and TabPanel. |
- * This sets the selectedIndex on the parent TabBox. |
- * @param {boolean} newValue The new selected value |
- * @param {boolean} oldValue The old selected value. (This is ignored atm.) |
- * @this {Tab|TabPanel} |
- */ |
- function selectedSetHook(newValue, oldValue) { |
- var tabBox; |
- if (newValue && (tabBox = getTabBox(this))) |
- tabBox.selectedIndex = Array.prototype.indexOf.call(p.children, this); |
- } |
- |
- /** |
- * Decorates all the children of an element. |
- * @this {HTMLElement} |
- */ |
- function decorateChildren() { |
- var map = { |
- TABBOX: TabBox, |
- TABS: Tabs, |
- TAB: Tab, |
- TABPANELS: TabPanels, |
- TABPANEL: TabPanel |
- }; |
- |
- var child; |
- for (var i = 0; child = this.children[i]; i++) { |
- var constr = map[child.tagName]; |
- if (constr) |
- cr.ui.decorate(child, constr); |
- } |
- } |
- |
- /** |
- * Set hook for TabBox selectedIndex. |
- * @param {number} selectedIndex The new selected index. |
- * @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; |
- } |
- } |
- } |
- |
- /** |
- * Creates a new tabbox element. |
- * @param {Object=} opt_propertyBag Optional properties. |
- * @constructor |
- * @extends {HTMLElement} |
- */ |
- var TabBox = cr.ui.define('tabbox'); |
- |
- TabBox.prototype = { |
- __proto__: HTMLElement.prototype, |
- decorate: function() { |
- decorateChildren.call(this); |
- this.addEventListener('selectedChange', this.handleSelectedChange_, true); |
- this.selectedIndex = 0; |
- }, |
- |
- /** |
- * Callback for when a Tab or TabPanel changes its selected property. |
- * @param {Event} e The property change event. |
- * @private |
- */ |
- handleSelectedChange_: function(e) { |
- var target = e.target; |
- if (e.newValue && getTabBox(target) == this) { |
- var index = Array.prototype.indexOf.call(target.parentElement.children, |
- target); |
- this.selectedIndex = index; |
- } |
- }, |
- |
- selectedIndex_: -1 |
- }; |
- |
- /** |
- * The index of the selected tab or -1 if no tab is selected. |
- * @type {number} |
- */ |
- cr.defineProperty(TabBox, 'selectedIndex', cr.PropertyKind.JS_PROP, |
- selectedIndexSetHook); |
- |
- /** |
- * Creates a new tabs element. |
- * @param {string} opt_label The text label for the item. |
- * @constructor |
- * @extends {HTMLElement} |
- */ |
- var Tabs = cr.ui.define('tabs'); |
- Tabs.prototype = { |
- __proto__: HTMLElement.prototype, |
- decorate: function() { |
- decorateChildren.call(this); |
- |
- // Make the Tabs element fousable. |
- this.tabIndex = 0; |
- this.addEventListener('keydown', this.handleKeyDown_.bind(this)); |
- |
- // Get (and initializes a focus outline manager. |
- this.focusOutlineManager_ = |
- cr.ui.FocusOutlineManager.forDocument(this.ownerDocument); |
- }, |
- |
- /** |
- * Handle keydown to change the selected tab when the user presses the |
- * arrow keys. |
- * @param {Event} e The keyboard event. |
- * @private |
- */ |
- handleKeyDown_: function(e) { |
- var delta = 0; |
- switch (e.keyIdentifier) { |
- case 'Left': |
- case 'Up': |
- delta = -1; |
- break; |
- case 'Right': |
- case 'Down': |
- delta = 1; |
- break; |
- } |
- |
- if (!delta) |
- return; |
- |
- var cs = this.ownerDocument.defaultView.getComputedStyle(this); |
- if (cs.direction == 'rtl') |
- delta *= -1; |
- |
- var count = this.children.length; |
- var index = this.parentElement.selectedIndex; |
- this.parentElement.selectedIndex = (index + delta + count) % count; |
- |
- // Show focus outline since we used the keyboard. |
- this.focusOutlineManager_.visible = true; |
- } |
- }; |
- |
- /** |
- * Creates a new tab element. |
- * @param {string} opt_label The text label for the item. |
- * @constructor |
- * @extends {HTMLElement} |
- */ |
- var Tab = cr.ui.define('tab'); |
- Tab.prototype = { |
- __proto__: HTMLElement.prototype, |
- decorate: function() { |
- var self = this; |
- this.addEventListener(cr.isMac ? 'click' : 'mousedown', function() { |
- self.selected = true; |
- }); |
- } |
- }; |
- |
- /** |
- * Whether the tab is selected. |
- * @type {boolean} |
- */ |
- cr.defineProperty(Tab, 'selected', cr.PropertyKind.BOOL_ATTR); |
- |
- /** |
- * Creates a new tabpanels element. |
- * @param {string} opt_label The text label for the item. |
- * @constructor |
- * @extends {HTMLElement} |
- */ |
- var TabPanels = cr.ui.define('tabpanels'); |
- TabPanels.prototype = { |
- __proto__: HTMLElement.prototype, |
- decorate: decorateChildren |
- }; |
- |
- /** |
- * Creates a new tabpanel element. |
- * @param {string} opt_label The text label for the item. |
- * @constructor |
- * @extends {HTMLElement} |
- */ |
- var TabPanel = cr.ui.define('tabpanel'); |
- TabPanel.prototype = { |
- __proto__: HTMLElement.prototype, |
- decorate: function() {} |
- }; |
- |
- /** |
- * Whether the tab is selected. |
- * @type {boolean} |
- */ |
- cr.defineProperty(TabPanel, 'selected', cr.PropertyKind.BOOL_ATTR); |
- |
- return { |
- TabBox: TabBox, |
- Tabs: Tabs, |
- Tab: Tab, |
- TabPanels: TabPanels, |
- TabPanel: TabPanel |
- }; |
-}); |