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

Unified Diff: chrome/browser/resources/chromeos/login/oobe_screen_network.js

Issue 7520037: [cros] Network dropdown button in WebUI. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: remove debug Created 9 years, 4 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
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..9321f493855ff4046b24b870b941d2a794f392f7 100644
--- a/chrome/browser/resources/chromeos/login/oobe_screen_network.js
+++ b/chrome/browser/resources/chromeos/login/oobe_screen_network.js
@@ -8,6 +8,145 @@
cr.define('oobe', function() {
/**
+ * Creates a new DropDown div.
+ * @constructor
+ * @extends {HTMLDivElement}
+ */
+ var DropDown = cr.ui.define('div');
+
+ DropDown.ITEM_DIVIDER_ID = -2;
+
+ DropDown.prototype = {
+ __proto__: HTMLDivElement.prototype,
+
+ /** @inheritDoc */
+ decorate: function() {
+ this.appendChild(this.createTitle_());
+
+ // Create menu items container.
+ var container = this.ownerDocument.createElement('div')
+ container.classList.add('dropdown-container');
+ this.appendChild(container);
+ this.isShown = false;
+ },
+
+ /**
+ * Returns true if dropdown menu is shown.
+ * @type {bool} Whether menu element is shown.
+ */
+ get isShown() {
+ return !this.lastElementChild.hidden;
+ },
+
+ /**
+ * Sets dropdown menu visibility.
+ * @param {bool} show New visibility state for dropdown menu.
+ */
+ set isShown(show) {
+ this.lastElementChild.hidden = !show;
+ },
+
+ /**
+ * 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.
+ this.firstElementChild.textContent = title;
+ },
+
+ /**
+ * Sets dropdown items.
+ * @param {Array} items Dropdown items array.
+ */
+ setItems: function(items) {
+ var container = this.lastElementChild;
+ 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 == DropDown.ITEM_DIVIDER_ID) {
+ className = 'dropdown-divider';
+ itemContentElement = this.ownerDocument.createElement('hr');
+ } else {
+ var span = this.ownerDocument.createElement('span');
+ itemContentElement = span;
+ span.textContent = item.label;
+ if ('bold' in item && item.bold)
+ span.classList.add('bold');
+ var image = this.ownerDocument.createElement('img');
+ if (item.icon)
+ image.src = item.icon;
+ }
+
+ var itemElement = this.ownerDocument.createElement('div');
+ 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 = this.ownerDocument.createElement('div');
+ wrapperDiv.classList.add('dropdown-item-container');
+ var imageDiv = this.ownerDocument.createElement('div');
+ imageDiv.classList.add('dropdown-image');
+ imageDiv.appendChild(image);
+ wrapperDiv.appendChild(imageDiv);
+ wrapperDiv.appendChild(itemElement);
+ wrapperDiv.addEventListener('click', function f(e) {
+ var item = this.lastElementChild;
+ if (item.iid < -1 || item.classList.contains('disabled-item'))
+ return;
+ item.controller.isShown = !item.controller.isShown;
+ 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 = this.ownerDocument.createElement('button');
+ el.classList.add('dropdown-title');
+ el.iid = -1;
+ el.controller = this;
+ el.addEventListener('click', function f(e) {
+ this.controller.isShown = !this.controller.isShown;
+ });
+ return el;
+ }
+ };
+
+ /**
* Creates a new oobe screen div.
* @constructor
* @extends {HTMLDivElement}
@@ -26,6 +165,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 +179,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 +228,14 @@ cr.define('oobe', function() {
}
};
+ NetworkScreen.updateNetworks = function(data) {
+ $('connect').updateNetworks(data);
+ };
+
+ NetworkScreen.updateNetworkTitle = function(title, icon) {
+ $('connect').updateNetworkTitle(title, icon);
+ };
+
return {
NetworkScreen: NetworkScreen
};

Powered by Google App Engine
This is Rietveld 408576698