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

Side by Side Diff: chrome/browser/resources/options2/chromeos/network_list.js

Issue 9317064: Stub in class for layout of network controls on the main settings page. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 10 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2012 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('options.network', function() {
6
7 var ArrayDataModel = cr.ui.ArrayDataModel;
8 var List = cr.ui.List;
9 var ListItem = cr.ui.ListItem;
10
11 /**
12 * Network settings constants. These enums usually match their C++
13 * counterparts.
14 */
15 function Constants() {}
16
17 // Network types:
18 Constants.TYPE_UNKNOWN = 0;
19 Constants.TYPE_ETHERNET = 1;
20 Constants.TYPE_WIFI = 2;
21 Constants.TYPE_WIMAX = 3;
22 Constants.TYPE_BLUETOOTH = 4;
23 Constants.TYPE_CELLULAR = 5;
24 Constants.TYPE_VPN = 6;
25
26 /**
27 * Create an element in the network list for controlling network
28 * connectivity.
29 * @constructor
30 */
31 function NetworkListItem(data) {
32 var el = cr.doc.createElement('li');
33 el.data_ = {};
34 for (var key in data)
35 el.data_[key] = data[key];
36 NetworkListItem.decorate(el);
37 return el;
38 }
39
40 /**
41 * Decorates an element as a NetworkList.
42 * @param{!Element} el The element to decorate.
43 */
44 NetworkListItem.decorate = function(el) {
45 el.__proto__ = NetworkListItem.prototype;
46 el.decorate();
47 };
48
49 NetworkListItem.prototype = {
50 __proto__: ListItem.prototype,
51
52 /**
53 * Description of the network.
54 * @type {{key: string,
55 * networkList: Array}}
56 * @private
57 */
58 data_: null,
59
60 /* @inheritDoc */
61 decorate: function() {
62 ListItem.prototype.decorate.call(this);
63 this.className = 'network-group';
64 var networkIcon = this.ownerDocument.createElement('div');
65 networkIcon.className = 'network-icon';
66 this.appendChild(networkIcon);
67 var textContent = this.ownerDocument.createElement('div');
68 this.appendChild(textContent);
69 var categoryLabel = this.ownerDocument.createElement('div');
70 var title = this.data_.key + 'Title';
71 categoryLabel.className = 'network-title';
72 categoryLabel.textContent = templateData[title];
73 textContent.appendChild(categoryLabel);
74 var selector = this.ownerDocument.createElement('span');
75 selector.className = 'network-selector';
76 textContent.appendChild(selector);
77 if (this.data_.networkList) {
78 // TODO(kevers): Generalize method of setting default label.
79 var defaultMessage = this.data_.key == 'wifi' ?
80 'networkOffline' : 'joinNetwork';
81 selector.textContent = templateData[defaultMessage];
82 var list = this.data_.networkList;
83 for (var i = 0; i < list.length; i++) {
84 var networkDetails = list[i];
85 if (networkDetails.connected || networkDetails.connecting) {
86 selector.textContent = networkDetails.networkName;
87 networkIcon.style.backgroundImage = url(networkDetails.iconURL);
88 break;
89 }
90 }
91 }
92 // TODO(kevers): Create popup menu for network lists.
93 // TODO(kevers): Add default icon when no network is connected or
94 // connecting.
95 // TODO(kevers): Add support for other types of list items including a
96 // toggle control for airplane mode, and a control for a new conenction
97 // dialog.
98 },
99
100 };
101
102 /**
103 * A list of controls for manipulating network connectivity.
104 * @constructor
105 */
106 var NetworkList = cr.ui.define('list');
107
108 NetworkList.prototype = {
109 __proto__: List.prototype,
110
111 /** @inheritDoc */
112 decorate: function() {
113 List.prototype.decorate.call(this);
114 this.addEventListener('blur', this.onBlur_);
115 this.dataModel = new ArrayDataModel([]);
116 },
117
118 /**
119 * When the list loses focus, unselect all items in the list.
120 * @private
121 */
122 onBlur_: function() {
123 this.selectionModel.unselectAll();
124 },
125
126 /**
127 * Finds the index of a network item within the data model based on
128 * category.
129 * @param {string} key Unique key for the item in the list.
130 * @return {number|undefined}
131 */
132 indexOf: function(key) {
133 var size = this.dataModel.length;
134 for (var i = 0; i < size; i++) {
135 var entry = this.dataModel.item(i);
136 if (entry.key == key)
137 return i;
138 }
139 },
140
141 /**
142 * Updates a network control.
143 * @param{Object.<string,string>} data Description of the entry.
144 */
145 update: function(data) {
146 var index = this.indexOf(data.key);
147 if (index == undefined) {
148 this.dataModel.push(data);
149 this.redraw();
150 } else {
151 this.dataModel.splice(index, 1, data);
152 this.redrawItem(index);
153 }
154 },
155
156 /** @inheritDoc */
157 createItem: function(entry) {
158 return new NetworkListItem(entry);
159 },
160 };
161
162 /**
163 * Chrome callback for updating network controls.
164 * @param{Object} data Description of available network devices and their
165 * corresponding state.
166 */
167 NetworkList.refreshNetworkData = function (data) {
csilv 2012/02/03 19:54:30 nit: remove space before paren
kevers 2012/02/06 17:24:43 Done.
168 loadData_('wifi',
169 data.wirelessList,
170 function(data) {
171 return data.networkType == Constants.TYPE_WIFI;
172 });
173 loadData_('cellular',
174 data.wirelessList,
175 function(data) {
176 return data.networkType == Constants.TYPE_CELLULAR;
177 });
178 loadData_('vpn', data.vpnList);
179 };
180
181 /**
182 * Updates the list of available networks and their status filtered by
183 * network type.
184 * @param{string} category The type of network.
185 * @param{Array} list The list of networks and their status.
186 * @param{function(Object)=} opt_filter Optional filter for pruning the list
187 * of networks.
188 */
189 function loadData_(category, list, opt_filter) {
190 var data = {key: category, networkList: list};
191 if (opt_filter) {
192 var filteredList = [];
193 for (var i = 0; i < list.length; i++) {
194 if (opt_filter(list[i]))
195 filteredList.push(list[i]);
196 }
197 data.networkList = filteredList;
198 }
199 $('network-list').update(data);
200 }
201
202 // Export
203 return {
204 NetworkList: NetworkList
205 };
206
207 });
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698