zotero/chrome/content/zotero/preferences/proxyEditor.js
2009-12-28 09:47:49 +00:00

146 lines
No EOL
4.7 KiB
JavaScript

/*
***** BEGIN LICENSE BLOCK *****
Copyright © 2009 Center for History and New Media
George Mason University, Fairfax, Virginia, USA
http://zotero.org
This file is part of Zotero.
Zotero is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Zotero is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Zotero. If not, see <http://www.gnu.org/licenses/>.
***** END LICENSE BLOCK *****
*/
var Zotero_ProxyEditor = new function() {
var treechildren;
var tree;
var treecol;
var multiSite;
/**
* Called when this window is first opened. Sets values if necessary
*/
this.load = function() {
treechildren = document.getElementById("zotero-proxies-hostname-multiSite-tree-children");
tree = document.getElementById("zotero-proxies-hostname-multiSite-tree");
multiSite = document.getElementById("zotero-proxies-multiSite");
if(window.arguments && window.arguments[0]) {
var proxy = window.arguments[0];
document.getElementById("zotero-proxies-scheme").value = proxy.scheme;
document.getElementById("zotero-proxies-multiSite").checked = !!proxy.multiHost;
if(proxy.hosts) {
if(proxy.multiHost) {
this.multiSiteChanged();
for (var i=0; i<proxy.hosts.length; i++) {
_addTreeElement(proxy.hosts[i]);
}
document.getElementById("zotero-proxies-autoAssociate").checked = proxy.autoAssociate;
} else {
document.getElementById("zotero-proxies-hostname-text").value = proxy.hosts[0];
}
}
}
window.sizeToContent();
}
/**
* Called when a user checks/unchecks the Multi-Site checkbox. Shows or hides multi-site
* hostname specification box as necessary.
*/
this.multiSiteChanged = function() {
document.getElementById("zotero-proxies-hostname-multiSite").hidden = !multiSite.checked;
document.getElementById("zotero-proxies-hostname-multiSite-description").hidden = !multiSite.checked;
document.getElementById("zotero-proxies-hostname").hidden = multiSite.checked;
window.sizeToContent();
}
/**
* Called when a row is selected
*/
this.select = function() {
document.getElementById("zotero-proxies-delete").disabled = tree.selectedIndex == -1;
}
/**
* Adds a host when in multi-host mode
*/
this.addHost = function() {
_addTreeElement();
tree.startEditing(treechildren.childNodes.length-1, tree.columns.getFirstColumn());
}
/**
* Deletes a host when in multi-host mode
*/
this.deleteHost = function() {
if(tree.currentIndex == -1) return;
treechildren.removeChild(treechildren.childNodes[tree.currentIndex]);
document.getElementById("zotero-proxies-delete").disabled = true;
}
/**
* Called when the user clicks "OK." Updates proxy for Zotero.Proxy.
*/
this.accept = function() {
var proxy = window.arguments && window.arguments[0] ? window.arguments[0] : new Zotero.Proxy();
proxy.scheme = document.getElementById("zotero-proxies-scheme").value;
proxy.multiHost = multiSite.checked;
if(proxy.multiHost) {
proxy.hosts = [];
var treecol = tree.columns.getFirstColumn();
for(var i=0; i<tree.view.rowCount; i++) {
var host = tree.view.getCellText(i, treecol);
if(host) proxy.hosts.push(host);
}
proxy.autoAssociate = document.getElementById("zotero-proxies-autoAssociate").checked;
} else {
proxy.hosts = [document.getElementById("zotero-proxies-hostname-text").value];
}
var hasErrors = proxy.validate();
if(hasErrors) {
error = hasErrors.shift();
var promptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
.getService(Components.interfaces.nsIPromptService);
promptService.alert(
window, Zotero.getString("proxies.error"),
Zotero.getString("proxies.error." + error, hasErrors)
);
if(window.arguments && window.arguments[0]) proxy.revert();
return false;
}
proxy.save(true);
return true;
}
/**
* Adds an element to the tree
*/
function _addTreeElement(label) {
var treeitem = document.createElement('treeitem');
var treerow = document.createElement('treerow');
var treecell = document.createElement('treecell');
if(label) treecell.setAttribute('label', label);
treerow.appendChild(treecell);
treeitem.appendChild(treerow);
treechildren.appendChild(treeitem);
}
}