OLD | NEW |
---|---|
(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 }); | |
OLD | NEW |