Chromium Code Reviews| Index: chrome/browser/resources/chromeos/login/oobe_screen_network.js |
| diff --git a/chrome/browser/resources/chromeos/login/oobe_screen_network.js b/chrome/browser/resources/chromeos/login/oobe_screen_network.js |
| index 179c1fbfd5b9b841f9ce996127201d886a148a3c..0729e383569f4aa5f0154e3a940efb481112f420 100644 |
| --- a/chrome/browser/resources/chromeos/login/oobe_screen_network.js |
| +++ b/chrome/browser/resources/chromeos/login/oobe_screen_network.js |
| @@ -8,6 +8,136 @@ |
| cr.define('oobe', function() { |
| /** |
| + * Creates a new DropDown div. |
| + * @constructor |
| + * @extends {HTMLDivElement} |
| + */ |
| + var DropDown = cr.ui.define('div'); |
| + |
| + DropDown.prototype = { |
| + __proto__: HTMLDivElement.prototype, |
| + |
| + /** @inheritDoc */ |
| + decorate: function() { |
| + this.isShown = false; |
| + this.appendChild(this.createTitle_()); |
| + |
| + // Create menu items container. |
| + var container = document.createElement('div') |
|
xiyuan
2011/08/06 00:16:34
nit: document -> this.ownerDocument
Nikita (slow)
2011/08/06 16:41:16
Done.
|
| + container.id = 'dropdownMenu'; |
| + container.classList.add('dropdown-container'); |
| + container.hidden = !this.isShown; |
| + this.appendChild(container); |
| + }, |
| + |
| + /** |
| + * Sets title and icon. |
| + * @param {string} title Text on dropdown. |
| + * @param {string} icon Icon in dataURL format. |
| + */ |
| + setTitle: function(title, icon) { |
| + // TODO(nkostylev): Icon support for dropdown title. |
| + $('dropdownTitle').innerText = title; |
|
xiyuan
2011/08/06 00:16:34
nit: innerText -> textContent
Nikita (slow)
2011/08/06 16:41:16
Done.
|
| + }, |
| + |
| + /** |
| + * Sets dropdown items. |
| + * @param {Array} items Dropdown items array. |
| + */ |
| + setItems: function(items) { |
| + var container = $('dropdownMenu'); |
|
xiyuan
2011/08/06 00:16:34
nit: container = this.lastElementChild; And if we
Nikita (slow)
2011/08/06 16:41:16
Done.
|
| + container.innerHTML = ''; |
| + for (var i = 0; i < items.length; ++i) { |
| + var item = items[i]; |
| + if ('sub' in item) { |
| + // Workaround for submenus, add items on top level. |
| + // TODO(altimofeev): support submenus. |
| + for (var j = 0; j < item.sub.length; ++j) |
| + this.createItem_(container, item.sub[j]); |
| + continue; |
| + } |
| + this.createItem_(container, item); |
| + } |
| + }, |
| + |
| + /** |
| + * Creates dropdown item element and adds into container. |
| + * @param {HTMLElement} container Container where item is added. |
| + * @param {!Object} item Item to be added. |
| + * @private |
| + */ |
| + createItem_ : function(container, item) { |
| + var itemContentElement; |
| + var className = 'dropdown-item'; |
| + if (item.id == -2) { |
|
xiyuan
2011/08/06 00:16:34
nit: give -2 a constant name?
Nikita (slow)
2011/08/06 16:41:16
Done.
|
| + className = 'dropdown-divider'; |
| + itemContentElement = document.createElement('hr'); |
|
xiyuan
2011/08/06 00:16:34
nit: document -> this.ownerDocument
Nikita (slow)
2011/08/06 16:41:16
Done.
|
| + } else { |
| + var span = document.createElement('span'); |
|
xiyuan
2011/08/06 00:16:34
ditto
Nikita (slow)
2011/08/06 16:41:16
Done.
|
| + if ('bold' in item && item.bold) { |
| + var bold = document.createElement('b'); |
|
xiyuan
2011/08/06 00:16:34
nit: I would prefer to use CSS instead of create a
Nikita (slow)
2011/08/06 16:41:16
Done.
|
| + bold.textContent = item.label; |
| + span.appendChild(bold); |
| + } else { |
| + span.textContent = item.label; |
| + } |
| + itemContentElement = span; |
| + var image = document.createElement('img'); |
| + if (item.icon) |
| + image.src = item.icon; |
| + } |
| + |
| + var itemElement = document.createElement('div'); |
|
xiyuan
2011/08/06 00:16:34
nit: document -> this.ownerDocument
Nikita (slow)
2011/08/06 16:41:16
Done.
|
| + itemElement.classList.add(className); |
| + itemElement.appendChild(itemContentElement); |
| + itemElement.iid = item.id; |
| + itemElement.controller = this; |
| + var enabled = 'enabled' in item && item.enabled; |
| + if (!enabled) |
| + itemElement.classList.add('disabled-item'); |
| + |
| + if (item.id > 0) { |
| + var wrapperDiv = document.createElement('div'); |
|
xiyuan
2011/08/06 00:16:34
nit: document -> this.ownerDocument
Nikita (slow)
2011/08/06 16:41:16
Done.
|
| + wrapperDiv.classList.add('dropdown-item-container'); |
| + var imageDiv = document.createElement('div'); |
|
xiyuan
2011/08/06 00:16:34
nit: document -> this.ownerDocument
Nikita (slow)
2011/08/06 16:41:16
Done.
|
| + imageDiv.classList.add('dropdown-image'); |
| + imageDiv.appendChild(image); |
| + wrapperDiv.appendChild(imageDiv); |
| + wrapperDiv.appendChild(itemElement); |
| + wrapperDiv.addEventListener('click', function f(e) { |
| + var item = this.childNodes[1]; |
| + if (item.iid < -1 || item.classList.contains('disabled-item')) |
| + return; |
| + item.controller.isShown = !item.controller.isShown; |
| + item.controller.childNodes[1].hidden = !item.controller.isShown; |
|
xiyuan
2011/08/06 00:16:34
seems like we can make isShown a property.
get is
Nikita (slow)
2011/08/06 16:41:16
Done.
|
| + if (item.iid >= 0) |
| + chrome.send('networkItemChosen', [item.iid]); |
| + }); |
| + itemElement = wrapperDiv; |
| + } |
| + container.appendChild(itemElement); |
| + }, |
| + |
| + /** |
| + * Creates dropdown title element. |
| + * @type {HTMLElement} |
| + * @private |
| + */ |
| + createTitle_: function() { |
| + var el = document.createElement('button'); |
|
xiyuan
2011/08/06 00:16:34
nit: document -> this.ownerDocument
Nikita (slow)
2011/08/06 16:41:16
Done.
|
| + el.id = 'dropdownTitle'; |
| + el.classList.add('dropdown-title'); |
| + el.iid = -1; |
| + el.controller = this; |
| + el.addEventListener('click', function f(e) { |
| + this.controller.isShown = !this.controller.isShown; |
| + this.controller.childNodes[1].hidden = !this.controller.isShown; |
| + }); |
| + return el; |
| + } |
| + }; |
| + |
| + /** |
| * Creates a new oobe screen div. |
| * @constructor |
| * @extends {HTMLDivElement} |
| @@ -26,6 +156,11 @@ cr.define('oobe', function() { |
| NetworkScreen.prototype = { |
| __proto__: HTMLDivElement.prototype, |
| + /** |
| + * Dropdown element for networks selection. |
| + */ |
| + dropdown_: null, |
| + |
| /** @inheritDoc */ |
| decorate: function() { |
| Oobe.setupSelect($('language-select'), |
| @@ -35,7 +170,27 @@ cr.define('oobe', function() { |
| Oobe.setupSelect($('keyboard-select'), |
| templateData.inputMethodsList, |
| 'networkOnInputMethodChanged'); |
| - }, |
| + |
| + this.dropdown_ = $('networks-list'); |
| + DropDown.decorate(this.dropdown_); |
| + }, |
| + |
| + /** |
| + * Updates network list in dropdown. |
| + * @param {Array} items Dropdown items array. |
| + */ |
| + updateNetworks: function(data) { |
| + this.dropdown_.setItems(data); |
| + }, |
| + |
| + /** |
| + * Updates dropdown title and icon. |
| + * @param {string} title Text on dropdown. |
| + * @param {string} icon Icon in dataURL format. |
| + */ |
| + updateNetworkTitle: function(title, icon) { |
| + this.dropdown_.setTitle(title, icon); |
| + }, |
| /** |
| * Header text of the screen. |
| @@ -64,6 +219,14 @@ cr.define('oobe', function() { |
| } |
| }; |
| + NetworkScreen.updateNetworks = function(data) { |
| + $('connect').updateNetworks(data); |
| + }; |
| + |
| + NetworkScreen.updateNetworkTitle = function(title, icon) { |
| + $('connect').updateNetworkTitle(title, icon); |
| + }; |
| + |
| return { |
| NetworkScreen: NetworkScreen |
| }; |