// 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', function() {
var OptionsPage = options.OptionsPage;
var Preferences = options.Preferences;
/////////////////////////////////////////////////////////////////////////////
// ProxyOptions class:
/**
* Encapsulated handling of ChromeOS proxy options page.
* @constructor
*/
function ProxyOptions(model) {
OptionsPage.call(this, 'proxy', localStrings.getString('proxyPage'),
'proxyPage');
}
cr.addSingletonGetter(ProxyOptions);
/**
* UI pref change handler.
*/
function handlePrefUpdate(e) {
ProxyOptions.getInstance().updateControls();
}
/**
* Monitor pref change of given element.
*/
function observePrefsUI(el) {
Preferences.getInstance().addEventListener(el.pref, handlePrefUpdate);
}
ProxyOptions.prototype = {
// Inherit ProxyOptions from OptionsPage.
__proto__: OptionsPage.prototype,
/**
* Initializes ProxyOptions page.
*/
initializePage: function() {
// Call base class implementation to starts preference initialization.
OptionsPage.prototype.initializePage.call(this);
// Set up ignored page.
options.proxyexceptions.ProxyExceptions.decorate($('ignoredHostList'));
this.addEventListener('visibleChange', this.handleVisibleChange_);
$('removeHost').addEventListener('click', this.handleRemoveExceptions_);
$('addHost').addEventListener('click', this.handleAddException_);
$('directProxy').addEventListener('click', this.disableManual_);
$('manualProxy').addEventListener('click', this.enableManual_);
$('autoProxy').addEventListener('click', this.disableManual_);
$('proxyAllProtocols').addEventListener('click', this.toggleSingle_);
observePrefsUI($('directProxy'));
observePrefsUI($('manualProxy'));
observePrefsUI($('autoProxy'));
observePrefsUI($('proxyAllProtocols'));
},
proxyListInitalized_: false,
/**
* Update controls state.
* @public
*/
updateControls: function() {
this.toggleSingle_();
if ($('manualProxy').checked) {
this.enableManual_();
} else {
this.disableManual_();
}
if (!this.proxyListInitalized_ && this.visible) {
this.proxyListInitalized_ = true;
$('ignoredHostList').redraw();
}
},
/**
* Handler for OptionsPage's visible property change event.
* @private
* @param {Event} e Property change event.
*/
handleVisibleChange_: function(e) {
this.updateControls();
},
/**
* Handler for when the user clicks on the checkbox to allow a
* single proxy usage.
* @private
* @param {Event} e Click Event.
*/
toggleSingle_: function(e) {
if($('proxyAllProtocols').value) {
$('multiProxy').style.display = 'none';
$('singleProxy').style.display = 'block';
} else {
$('multiProxy').style.display = 'block';
$('singleProxy').style.display = 'none';
}
},
/**
* Handler for selecting a radio button that will disable the manual
* controls.
* @private
* @param {Event} e Click event.
*/
disableManual_: function(e) {
$('proxyAllProtocols').disabled = true;
$('proxyHostName').disabled = true;
$('proxyHostPort').disabled = true;
$('proxyHostSingleName').disabled = true;
$('proxyHostSinglePort').disabled = true;
$('secureProxyHostName').disabled = true;
$('secureProxyPort').disabled = true;
$('ftpProxy').disabled = true;
$('ftpProxyPort').disabled = true;
$('socksHost').disabled = true;
$('socksPort').disabled = true;
$('newHost').disabled = true;
$('removeHost').disabled = true;
$('addHost').disabled = true;
$('advancedConfig').style.display = 'none';
},
/**
* Handler for selecting a radio button that will enable the manual
* controls.
* @private
* @param {Event} e Click event.
*/
enableManual_: function(e) {
$('proxyAllProtocols').disabled = false;
$('proxyHostName').disabled = false;
$('proxyHostPort').disabled = false;
$('proxyHostSingleName').disabled = false;
$('proxyHostSinglePort').disabled = false;
$('secureProxyHostName').disabled = false;
$('secureProxyPort').disabled = false;
$('ftpProxy').disabled = false;
$('ftpProxyPort').disabled = false;
$('socksHost').disabled = false;
$('socksPort').disabled = false;
$('newHost').disabled = false;
$('removeHost').disabled = false;
$('addHost').disabled = false;
$('advancedConfig').style.display = '-webkit-box';
$('ignoredHostList').redraw();
},
/**
* Handler for "add" event fired from userNameEdit.
* @private
* @param {Event} e Add event fired from userNameEdit.
*/
handleAddException_: function(e) {
var exception = $('newHost').value;
$('newHost').value = '';
exception = exception.trim();
if (exception)
$('ignoredHostList').addException(exception);
},
/**
* Handler for when the remove button is clicked
* @private
*/
handleRemoveExceptions_: function(e) {
var selectedItems = $('ignoredHostList').selectedItems;
for (var x = 0; x < selectedItems.length; x++) {
$('ignoredHostList').removeException(selectedItems[x]);
}
}
};
// Export
return {
ProxyOptions: ProxyOptions
};
});