Index: chrome/browser/resources/options2/chromeos/internet_network_element.js |
diff --git a/chrome/browser/resources/options2/chromeos/internet_network_element.js b/chrome/browser/resources/options2/chromeos/internet_network_element.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..bba5a54fcdd071432e35df5c177b89945479bb83 |
--- /dev/null |
+++ b/chrome/browser/resources/options2/chromeos/internet_network_element.js |
@@ -0,0 +1,316 @@ |
+// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+cr.define('options.internet', function() { |
+ |
+ /** |
+ * Network settings constants. These enums usually match their C++ |
+ * counterparts. |
+ */ |
+ function Constants() {} |
+ // Minimum length for wireless network password. |
+ Constants.MIN_WIRELESS_PASSWORD_LENGTH = 5; |
+ // Minimum length for SSID name. |
+ Constants.MIN_WIRELESS_SSID_LENGTH = 1; |
+ // Cellular activation states: |
+ Constants.ACTIVATION_STATE_UNKNOWN = 0; |
+ Constants.ACTIVATION_STATE_ACTIVATED = 1; |
+ Constants.ACTIVATION_STATE_ACTIVATING = 2; |
+ Constants.ACTIVATION_STATE_NOT_ACTIVATED = 3; |
+ Constants.ACTIVATION_STATE_PARTIALLY_ACTIVATED = 4; |
+ // Network types: |
+ Constants.TYPE_UNKNOWN = 0; |
+ Constants.TYPE_ETHERNET = 1; |
+ Constants.TYPE_WIFI = 2; |
+ Constants.TYPE_WIMAX = 3; |
+ Constants.TYPE_BLUETOOTH = 4; |
+ Constants.TYPE_CELLULAR = 5; |
+ Constants.TYPE_VPN = 6; |
+ // ONC sources: |
+ Constants.ONC_SOURCE_USER_IMPORT = 1; |
+ Constants.ONC_SOURCE_DEVICE_POLICY = 2; |
+ Constants.ONC_SOURCE_USER_POLICY = 3; |
+ |
+ /** |
+ * Creates a new network list div. |
+ * @param {Object=} opt_propertyBag Optional properties. |
+ * @constructor |
+ * @extends {HTMLDivElement} |
+ */ |
+ var NetworkElement = cr.ui.define('div'); |
+ |
+ NetworkElement.prototype = { |
+ __proto__: HTMLDivElement.prototype, |
+ |
+ /** @inheritDoc */ |
+ decorate: function() { |
+ this.addEventListener('click', this.handleClick_); |
+ }, |
+ |
+ /** |
+ * Loads given network list. |
+ * @param {Array} networks An array of network object. |
+ */ |
+ load: function(networks) { |
+ this.textContent = ''; |
+ |
+ for (var i = 0; i < networks.length; ++i) { |
+ this.appendChild(new NetworkItem(networks[i])); |
+ } |
+ }, |
+ |
+ /** |
+ * Handles click on network list and triggers actions when clicked on |
+ * a NetworkListItem button. |
+ * @private |
+ * @param {!Event} e The click event object. |
+ */ |
+ handleClick_: function(e) { |
+ // We shouldn't respond to click events selecting an input, |
+ // so return on those. |
+ if (e.target.tagName == 'INPUT') { |
+ return; |
+ } |
+ // Handle left button click |
+ if (e.button == 0) { |
+ var el = e.target; |
+ // If click is on action buttons of a network item. |
+ if (!(el.buttonType && el.networkType && el.servicePath)) { |
+ if (el.buttonType) { |
+ return; |
+ } |
+ // If click is on a network item or its label, walk up the DOM tree |
+ // to find the network item. |
+ var item = el; |
+ while (item && !item.data) { |
+ item = item.parentNode; |
+ } |
+ if (item.connecting) |
+ return; |
+ |
+ if (item) { |
+ var data = item.data; |
+ // Don't try to connect to Ethernet or unactivated Cellular. |
+ if (data && (data.networkType == 1 || |
+ (data.networkType == 5 && data.activation_state != 1))) |
+ return; |
+ // If clicked on other networks item. |
+ if (data && data.servicePath == '?') { |
+ chrome.send('buttonClickCallback', |
+ [String(data.networkType), |
+ data.servicePath, |
+ 'connect']); |
+ } |
+ } |
+ } |
+ } |
+ } |
+ }; |
+ |
+ /** |
+ * Creates a new network item. |
+ * @param {Object} network The network this represents. |
+ * @constructor |
+ * @extends {HTMLDivElement} |
+ */ |
+ function NetworkItem(network) { |
+ var el = cr.doc.createElement('div'); |
+ el.data = network; |
+ NetworkItem.decorate(el); |
+ return el; |
+ } |
+ |
+ |
+ /** |
+ * Decorates an element as a network item. |
+ * @param {!HTMLElement} el The element to decorate. |
+ */ |
+ NetworkItem.decorate = function(el) { |
+ el.__proto__ = NetworkItem.prototype; |
+ el.decorate(); |
+ }; |
+ |
+ NetworkItem.prototype = { |
+ __proto__: HTMLDivElement.prototype, |
+ |
+ /** @inheritDoc */ |
+ decorate: function() { |
+ this.className = 'network-item'; |
+ this.connectable = this.data.connectable; |
+ this.connected = this.data.connected; |
+ this.connecting = this.data.connecting; |
+ this.other = this.data.servicePath == '?'; |
+ this.id = this.data.servicePath; |
+ |
+ // Insert a div holding the policy-managed indicator. |
+ var policyIndicator = this.ownerDocument.createElement('div'); |
+ policyIndicator.className = 'controlled-setting-indicator'; |
+ cr.ui.decorate(policyIndicator, options.ControlledSettingIndicator); |
+ |
+ if (this.data.policyManaged) { |
+ policyIndicator.controlledBy = 'policy'; |
+ policyIndicator.setAttribute('textPolicy', |
+ localStrings.getString('managedNetwork')); |
+ } |
+ this.appendChild(policyIndicator); |
+ |
+ // textDiv holds icon, name and status text. |
+ var textDiv = this.ownerDocument.createElement('div'); |
+ textDiv.className = 'network-item-text'; |
+ if (this.data.iconURL) { |
+ textDiv.style.backgroundImage = url(this.data.iconURL); |
+ } |
+ |
+ var nameEl = this.ownerDocument.createElement('div'); |
+ nameEl.className = 'network-name-label'; |
+ nameEl.textContent = this.data.networkName; |
+ textDiv.appendChild(nameEl); |
+ |
+ if (this.other) { |
+ // No status and buttons for "Other..." |
+ this.appendChild(textDiv); |
+ return; |
+ } |
+ |
+ // Only show status text if not empty. |
+ if (this.data.networkStatus) { |
+ var statusEl = this.ownerDocument.createElement('div'); |
+ statusEl.className = 'network-status-label'; |
+ statusEl.textContent = this.data.networkStatus; |
+ textDiv.appendChild(statusEl); |
+ } |
+ |
+ this.appendChild(textDiv); |
+ |
+ var spacerDiv = this.ownerDocument.createElement('div'); |
+ spacerDiv.className = 'network-item-box-spacer'; |
+ this.appendChild(spacerDiv); |
+ |
+ var buttonsDiv = this.ownerDocument.createElement('div'); |
+ var self = this; |
+ if (!this.data.remembered) { |
+ var no_plan = |
+ this.data.networkType == Constants.TYPE_CELLULAR && |
+ this.data.needs_new_plan; |
+ var show_activate = |
+ (this.data.networkType == Constants.TYPE_CELLULAR && |
+ this.data.activation_state != |
+ Constants.ACTIVATION_STATE_ACTIVATED && |
+ this.data.activation_state != |
+ Constants.ACTIVATION_STATE_ACTIVATING); |
+ |
+ // Show [Activate] button for non-activated Cellular network. |
+ if (show_activate || no_plan) { |
+ var button_name = no_plan ? 'buyplan_button' : 'activate_button'; |
+ buttonsDiv.appendChild( |
+ this.createButton_(button_name, 'activate', |
+ function(e) { |
+ chrome.send('buttonClickCallback', |
+ [String(self.data.networkType), |
+ self.data.servicePath, |
+ 'activate']); |
+ })); |
+ } |
+ // Show disconnect button if not ethernet. |
+ if (this.data.networkType != Constants.TYPE_ETHERNET && |
+ this.data.connected) { |
+ buttonsDiv.appendChild( |
+ this.createButton_('disconnect_button', 'disconnect', |
+ function(e) { |
+ chrome.send('buttonClickCallback', |
+ [String(self.data.networkType), |
+ self.data.servicePath, |
+ 'disconnect']); |
+ })); |
+ } |
+ if (!this.data.connected && !this.data.connecting) { |
+ // connect button (if not ethernet and not showing activate button) |
+ if (this.data.networkType != Constants.TYPE_ETHERNET && |
+ !show_activate && !no_plan) { |
+ buttonsDiv.appendChild( |
+ this.createButton_('connect_button', 'connect', |
+ function(e) { |
+ chrome.send('buttonClickCallback', |
+ [String(self.data.networkType), |
+ self.data.servicePath, |
+ 'connect']); |
+ })); |
+ } |
+ } |
+ if (this.data.connected || |
+ this.data.networkType == Constants.TYPE_ETHERNET || |
+ this.data.networkType == Constants.TYPE_VPN || |
+ this.data.networkType == Constants.TYPE_WIFI || |
+ this.data.networkType == Constants.TYPE_CELLULAR) { |
+ buttonsDiv.appendChild( |
+ this.createButton_('options_button', 'options', |
+ function(e) { |
+ options.ProxyOptions.getInstance().setNetworkName( |
+ self.data.networkName); |
+ chrome.send('buttonClickCallback', |
+ [String(self.data.networkType), |
+ self.data.servicePath, |
+ 'options']); |
+ })); |
+ } |
+ } else { |
+ // Put "Forget this network" button. |
+ var button = this.createButton_('forget_button', 'forget', |
+ function(e) { |
+ chrome.send('buttonClickCallback', |
+ [String(self.data.networkType), |
+ self.data.servicePath, |
+ 'forget']); |
+ }); |
+ button.disabled = this.data.policyManaged; |
+ buttonsDiv.appendChild(button); |
+ } |
+ this.appendChild(buttonsDiv); |
+ }, |
+ |
+ /** |
+ * Creates a button for interacting with a network. |
+ * @param {Object} name The name of the localStrings to use for the text. |
+ * @param {Object} type The type of button. |
+ */ |
+ createButton_: function(name, type, callback) { |
+ var buttonEl = this.ownerDocument.createElement('button'); |
+ buttonEl.buttonType = type; |
+ buttonEl.textContent = localStrings.getString(name); |
+ buttonEl.addEventListener('click', callback); |
+ return buttonEl; |
+ } |
+ }; |
+ |
+ /** |
+ * Whether the underlying network is connected. Only used for display purpose. |
+ * @type {boolean} |
+ */ |
+ cr.defineProperty(NetworkItem, 'connected', cr.PropertyKind.BOOL_ATTR); |
+ |
+ /** |
+ * Whether the underlying network is currently connecting. |
+ * Only used for display purpose. |
+ * @type {boolean} |
+ */ |
+ cr.defineProperty(NetworkItem, 'connecting', cr.PropertyKind.BOOL_ATTR); |
+ |
+ /** |
+ * Whether the underlying network is an other network for adding networks. |
+ * Only used for display purpose. |
+ * @type {boolean} |
+ */ |
+ cr.defineProperty(NetworkItem, 'other', cr.PropertyKind.BOOL_ATTR); |
+ |
+ /** |
+ * Whether the underlying network is connectable. |
+ * @type {boolean} |
+ */ |
+ cr.defineProperty(NetworkItem, 'connectable', cr.PropertyKind.BOOL_ATTR); |
+ |
+ return { |
+ Constants: Constants, |
+ NetworkElement: NetworkElement |
+ }; |
+}); |