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', function() { | |
6 | |
7 var OptionsPage = options.OptionsPage; | |
8 var ArrayDataModel = cr.ui.ArrayDataModel; | |
9 var DeletableItem = options.DeletableItem; | |
10 var DeletableItemList = options.DeletableItemList; | |
11 | |
12 ///////////////////////////////////////////////////////////////////////////// | |
13 // NetworkPreferences class: | |
14 | |
15 /** | |
16 * Encapsulated handling of ChromeOS network preferences page. | |
17 * @constructor | |
18 */ | |
19 function PreferredNetworks(model) { | |
20 OptionsPage.call(this, | |
21 'preferredNetworksPage', | |
22 null, | |
23 'preferredNetworksPage'); | |
24 } | |
25 | |
26 cr.addSingletonGetter(PreferredNetworks); | |
27 | |
28 PreferredNetworks.prototype = { | |
29 __proto__: OptionsPage.prototype, | |
30 | |
31 /** | |
32 * Initializes the preferred networks page. | |
33 */ | |
34 initializePage: function() { | |
35 OptionsPage.prototype.initializePage.call(this); | |
36 PreferredNetworkList.decorate($('remembered-network-list')); | |
37 $('preferred-networks-confirm').onclick = | |
38 OptionsPage.closeOverlay.bind(OptionsPage); | |
39 }, | |
40 | |
41 update: function(rememberedNetworks) { | |
42 var list = $('remembered-network-list'); | |
43 list.clear(); | |
44 for (var i = 0; i < rememberedNetworks.length; i++) { | |
45 list.append(rememberedNetworks[i]); | |
46 } | |
47 list.redraw(); | |
48 } | |
49 | |
50 }; | |
51 | |
52 /** | |
53 * Creates a list entry for a remembered network. | |
54 * @param{{networkName: string, | |
55 networkType: string, | |
56 servicePath: string}} data | |
57 * Description of the network. | |
58 * @constructor | |
59 */ | |
60 function PreferredNetworkListItem(data) { | |
61 var el = cr.doc.createElement('div'); | |
62 el.__proto__ = PreferredNetworkListItem.prototype; | |
63 el.data = {}; | |
64 for (var key in data) | |
65 el.data[key] = data[key]; | |
66 el.decorate(); | |
67 return el; | |
68 } | |
69 | |
70 PreferredNetworkListItem.prototype = { | |
71 __proto__: DeletableItem.prototype, | |
72 | |
73 /** | |
74 * Description of the network. | |
75 * @type {{networkName: string, | |
76 * networkType: string, | |
77 * servicePath: string}} | |
78 */ | |
79 data: null, | |
80 | |
81 /** @inheritDoc */ | |
82 decorate: function() { | |
83 DeletableItem.prototype.decorate.call(this); | |
84 var label = this.ownerDocument.createElement('div'); | |
85 label.textContent = this.data.networkName; | |
86 if (this.data.policyManaged) | |
87 this.deletable = false; | |
88 this.contentElement.appendChild(label); | |
89 } | |
90 }; | |
91 | |
92 /** | |
93 * Class for displaying a list of preferred networks. | |
94 * @constructor | |
95 * @extends {options.DeletableItemList} | |
96 */ | |
97 var PreferredNetworkList = cr.ui.define('list'); | |
98 | |
99 PreferredNetworkList.prototype = { | |
100 __proto__: DeletableItemList.prototype, | |
101 | |
102 /** @inheritDoc */ | |
103 decorate: function() { | |
104 DeletableItemList.prototype.decorate.call(this); | |
105 this.addEventListener('blur', this.onBlur_); | |
106 this.clear(); | |
107 }, | |
108 | |
109 /** | |
110 * When the list loses focus, unselect all items in the list. | |
111 * @private | |
112 */ | |
113 onBlur_: function() { | |
114 this.selectionModel.unselectAll(); | |
115 }, | |
116 | |
117 /** @inheritDoc */ | |
118 createItem: function(entry) { | |
119 return new PreferredNetworkListItem(entry); | |
120 }, | |
121 | |
122 /** @inheritDoc */ | |
123 deleteItemAtIndex: function(index) { | |
124 var item = this.dataModel.item(index); | |
125 if (item) { | |
126 // Inform the network library that we are forgetting this network. | |
127 chrome.send('networkCommand', | |
128 [String(item.networkType), | |
129 item.servicePath, | |
130 'forget']); | |
131 } | |
132 this.dataModel.splice(index, 1); | |
133 // Invalidate the list since it has a stale cache after a splice | |
134 // involving a deletion. | |
135 this.invalidate(); | |
136 this.redraw(); | |
137 }, | |
138 | |
139 /** | |
140 * Purges all networks from the list. | |
141 */ | |
142 clear: function() { | |
143 this.dataModel = new ArrayDataModel([]); | |
144 this.redraw(); | |
145 }, | |
146 | |
147 /** | |
148 * Adds a remembered network to the list. | |
149 * @param {{networkName: string, | |
150 networkType: string, | |
151 servicePath: string} data | |
152 * Description of the network. | |
153 */ | |
154 append: function(data) { | |
155 this.dataModel.push(data); | |
156 } | |
157 }; | |
158 | |
159 // Export | |
160 return { | |
161 PreferredNetworks: PreferredNetworks | |
162 }; | |
163 | |
164 }); | |
165 | |
OLD | NEW |