• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
5cr.exportPath('options');
6
7/**
8 * @typedef {{Name: string, Type: string, servicePath: string}}
9 */
10options.PreferredNetwork;
11
12cr.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});
165