Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / resources / options / chromeos / preferred_networks.js
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.exportPath('options');
6
7 /**
8  * @typedef {{Name: string, Type: string, servicePath: string}}
9  */
10 options.PreferredNetwork;
11
12 cr.define('options', function() {
13
14   var Page = cr.ui.pageManager.Page;
15   var PageManager = cr.ui.pageManager.PageManager;
16   var ArrayDataModel = cr.ui.ArrayDataModel;
17   var DeletableItem = options.DeletableItem;
18   var DeletableItemList = options.DeletableItemList;
19
20   /////////////////////////////////////////////////////////////////////////////
21   // NetworkPreferences class:
22
23   /**
24    * Encapsulated handling of ChromeOS network preferences page.
25    * @constructor
26    * @extends {cr.ui.pageManager.Page}
27    */
28   function PreferredNetworks(model) {
29     Page.call(this, 'preferredNetworksPage', '', 'preferredNetworksPage');
30   }
31
32   cr.addSingletonGetter(PreferredNetworks);
33
34   PreferredNetworks.prototype = {
35     __proto__: Page.prototype,
36
37     /** @override */
38     initializePage: function() {
39       Page.prototype.initializePage.call(this);
40       PreferredNetworkList.decorate($('remembered-network-list'));
41       $('preferred-networks-confirm').onclick =
42           PageManager.closeOverlay.bind(PageManager);
43     },
44
45     update: function(rememberedNetworks) {
46       var list = $('remembered-network-list');
47       list.clear();
48       for (var i = 0; i < rememberedNetworks.length; i++) {
49         list.append(rememberedNetworks[i]);
50       }
51       list.redraw();
52     }
53
54   };
55
56   /**
57    * Creates a list entry for a remembered network.
58    * @param {options.PreferredNetwork} data Description of the network.
59    * @constructor
60    * @extends {options.DeletableItem}
61    */
62   function PreferredNetworkListItem(data) {
63     var el = cr.doc.createElement('div');
64     el.__proto__ = PreferredNetworkListItem.prototype;
65     el.data = {};
66     for (var key in data)
67       el.data[key] = data[key];
68     el.decorate();
69     return el;
70   }
71
72   PreferredNetworkListItem.prototype = {
73     __proto__: DeletableItem.prototype,
74
75     /**
76      * Description of the network.
77      * @type {?options.PreferredNetwork}
78      */
79     data: null,
80
81     /** @override */
82     decorate: function() {
83       DeletableItem.prototype.decorate.call(this);
84       var label = this.ownerDocument.createElement('div');
85       label.textContent = this.data.Name;
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     /** @override */
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     /**
118      * @override
119      * @param {options.PreferredNetwork} entry
120      */
121     createItem: function(entry) {
122       return new PreferredNetworkListItem(entry);
123     },
124
125     /** @override */
126     deleteItemAtIndex: function(index) {
127       var item = this.dataModel.item(index);
128       if (item) {
129         // Inform the network library that we are forgetting this network.
130         chrome.send('networkCommand',
131                     [item.Type,
132                     item.servicePath,
133                     'forget']);
134       }
135       this.dataModel.splice(index, 1);
136       // Invalidate the list since it has a stale cache after a splice
137       // involving a deletion.
138       this.invalidate();
139       this.redraw();
140     },
141
142     /**
143      * Purges all networks from the list.
144      */
145     clear: function() {
146       this.dataModel = new ArrayDataModel([]);
147       this.redraw();
148     },
149
150     /**
151      * Adds a remembered network to the list.
152      * @param {options.PreferredNetwork} data 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 });