Disable view source for Developer Tools.
[chromium-blink-merge.git] / chrome / browser / resources / options / chromeos / preferred_networks.js
blobb6b461be94c3c18a712a4fbf014ae7339d1ebf85
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.
5 cr.define('options', function() {
7   var OptionsPage = options.OptionsPage;
8   var ArrayDataModel = cr.ui.ArrayDataModel;
9   var DeletableItem = options.DeletableItem;
10   var DeletableItemList = options.DeletableItemList;
12   /////////////////////////////////////////////////////////////////////////////
13   // NetworkPreferences class:
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   }
26   cr.addSingletonGetter(PreferredNetworks);
28   PreferredNetworks.prototype = {
29     __proto__: OptionsPage.prototype,
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     },
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     }
50   };
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   }
70   PreferredNetworkListItem.prototype = {
71     __proto__: DeletableItem.prototype,
73     /**
74      * Description of the network.
75      * @type {{networkName: string,
76      *         networkType: string,
77      *         servicePath: string}}
78      */
79     data: null,
81     /** @override */
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   };
92   /**
93    * Class for displaying a list of preferred networks.
94    * @constructor
95    * @extends {options.DeletableItemList}
96    */
97   var PreferredNetworkList = cr.ui.define('list');
99   PreferredNetworkList.prototype = {
100     __proto__: DeletableItemList.prototype,
102     /** @override */
103     decorate: function() {
104       DeletableItemList.prototype.decorate.call(this);
105       this.addEventListener('blur', this.onBlur_);
106       this.clear();
107     },
109     /**
110      * When the list loses focus, unselect all items in the list.
111      * @private
112      */
113     onBlur_: function() {
114       this.selectionModel.unselectAll();
115     },
117     /** @override */
118     createItem: function(entry) {
119       return new PreferredNetworkListItem(entry);
120     },
122     /** @override */
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                     [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     },
139     /**
140      * Purges all networks from the list.
141      */
142     clear: function() {
143       this.dataModel = new ArrayDataModel([]);
144       this.redraw();
145     },
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   };
159   // Export
160   return {
161     PreferredNetworks: PreferredNetworks
162   };