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