summaryrefslogtreecommitdiffstats
path: root/comm/suite/chatzilla/xul/content/networks-edit.js
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 17:32:43 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 17:32:43 +0000
commit6bf0a5cb5034a7e684dcc3500e841785237ce2dd (patch)
treea68f146d7fa01f0134297619fbe7e33db084e0aa /comm/suite/chatzilla/xul/content/networks-edit.js
parentInitial commit. (diff)
downloadthunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.tar.xz
thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.zip
Adding upstream version 1:115.7.0.upstream/1%115.7.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'comm/suite/chatzilla/xul/content/networks-edit.js')
-rw-r--r--comm/suite/chatzilla/xul/content/networks-edit.js390
1 files changed, 390 insertions, 0 deletions
diff --git a/comm/suite/chatzilla/xul/content/networks-edit.js b/comm/suite/chatzilla/xul/content/networks-edit.js
new file mode 100644
index 0000000000..4952783cc9
--- /dev/null
+++ b/comm/suite/chatzilla/xul/content/networks-edit.js
@@ -0,0 +1,390 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+var ASSERT = function(cond, msg) { if (!cond) { alert(msg); } return cond; }
+var client;
+
+// To be able to load static.js, we need a few things defined first:
+function CIRCNetwork() {}
+function CIRCServer() {}
+function CIRCChannel() {}
+function CIRCUser() {}
+function CIRCChanUser() {}
+function CIRCDCCUser() {}
+function CIRCDCCChat() {}
+function CIRCDCCFile() {}
+function CIRCDCCFileTransfer() {}
+function CIRCSTS() {}
+
+// Actual network window itself.
+var gNetworkWindow = {
+ mBundle: null,
+ mServerList: null,
+ mNetworkList: null,
+
+ /* Stores all the network and server objects we're using.
+ */
+ networkList: null,
+
+ alert: function(aSubject, aVar) {
+ let title = this.mBundle.getString(aSubject + "Title");
+ let msg = this.mBundle.getFormattedString(aSubject, [aVar]);
+ Services.prompt.alert(window, title, msg);
+ },
+
+ confirmEx: function(aSubject, aVar) {
+ let title = this.mBundle.getString(aSubject + "Title");
+ let msg = aVar ? this.mBundle.getFormattedString(aSubject, [aVar])
+ : this.mBundle.getString(aSubject);
+ return Services.prompt.confirmEx(window, title, msg,
+ Services.prompt.STD_YES_NO_BUTTONS, null,
+ null, null, null, { });
+ },
+
+ prompt: function(aSubject, aInitial) {
+ let title = this.mBundle.getString(aSubject + "Title");
+ let msg = this.mBundle.getString(aSubject);
+ let rv = { value: aInitial };
+
+ if (!Services.prompt.prompt(window, title, msg, rv, null, {value: null})) {
+ return null;
+ }
+
+ return rv.value.toLowerCase().trim();
+ },
+
+ refreshNetworks: function(aNetwork) {
+ // Remove all children.
+ while (this.mNetworkList.hasChildNodes()) {
+ this.mNetworkList.lastChild.remove();
+ }
+
+ let hasChildren = false;
+ let network;
+ // Populate the network item list.
+ for (let name in this.networkList) {
+ let label = document.createElement("label");
+ label.setAttribute("value", name);
+ let listitem = document.createElement("listitem");
+ listitem.appendChild(label);
+ listitem.id = name;
+ if (aNetwork && (aNetwork == name)) {
+ network = listitem;
+ }
+ this.mNetworkList.appendChild(listitem);
+ hasChildren = true;
+ }
+
+ if (hasChildren) {
+ // If a network name was given and found select it,
+ // otherwise select the first item.
+ this.mNetworkList.selectItem(network || this.mNetworkList.firstChild);
+ } else {
+ this.onSelectNetwork();
+ }
+ this.updateNetworkButtons(hasChildren);
+ },
+
+ updateNetworkButtons: function(aSelected) {
+ let editButton = document.getElementById("networkListEditButton");
+ let removeButton = document.getElementById("networkListRemoveButton");
+ if (!aSelected) {
+ editButton.setAttribute("disabled", "true");
+ removeButton.setAttribute("disabled", "true");
+ } else {
+ editButton.removeAttribute("disabled");
+ removeButton.removeAttribute("disabled");
+ }
+ },
+
+ // Loads the networks list.
+ onLoad: function() {
+ client = window.arguments[0];
+
+ // Needed for ASSERT.
+ initMessages();
+
+ this.mBundle = document.getElementById("bundle_networks");
+ this.mServerList = document.getElementById("serverList");
+ this.mNetworkList = document.getElementById("networkList");
+
+ // The list of objects we're tracking.
+ this.networkList = networksToNetworkList();
+ this.refreshNetworks();
+
+ // Force the window to be the right size now, not later.
+ window.sizeToContent();
+ },
+
+ // Closing the window. Clean up.
+ onClose: function() {
+ },
+
+ // OK button.
+ onOK: function() {
+ // Save the list and update client.networks
+ try {
+ networksSaveList(this.networkList);
+ }
+ catch (e) {
+ this.alert("network-saveError", e);
+ return false;
+ }
+
+ networksSyncFromList(this.networkList);
+ window.close();
+ client.updateHeader();
+ client.dispatch("networks");
+ return true;
+ },
+
+ // Cancel button.
+ onCancel: function() {
+ window.close();
+ return true;
+ },
+
+ // Restore Defaults button.
+ onRestore: function() {
+ // Ask for confirmation.
+ if (this.confirmEx("network-confirmRestoreDefaults") != 0) {
+ return;
+ }
+
+ // Repopulate the network list.
+ this.networkList = networksGetDefaults();
+ this.refreshNetworks();
+ },
+
+ // Connect to Network button.
+ onConnect: function() {
+ let selection = this.mNetworkList.selectedItem;
+ if (!selection)
+ return;
+
+ let network = this.networkList[selection.id];
+ if (this.onOK()) {
+ if (networkHasSecure(network.servers)) {
+ client.dispatch("sslserver " + network.name);
+ } else {
+ client.dispatch("server " + network.name);
+ }
+ }
+ },
+
+ // Select a network listitem.
+ onSelectNetwork: function(aId = 0) {
+ let header = document.getElementById("network-header");
+
+ // Remove all children.
+ while (this.mServerList.hasChildNodes()) {
+ this.mServerList.lastChild.remove();
+ }
+
+ let selection = this.mNetworkList.selectedItem;
+ if (!selection) {
+ header.setAttribute("title",
+ this.mBundle.getString("network-headerDefault"));
+ this.updateServerButtons(null, true);
+ return;
+ }
+
+ // Make sure selected network item is visible.
+ this.mNetworkList.ensureElementIsVisible(selection);
+
+ let hasChildren = false;
+ let network = this.networkList[selection.id];
+ for (let i = 0; i < network.servers.length; i++) {
+ let server = network.servers[i];
+ let label = document.createElement("label");
+ label.setAttribute("value", server.hostname + ":" + server.port);
+ let listitem = document.createElement("listitem");
+ listitem.appendChild(label);
+ listitem.setAttribute("server_id", i);
+ listitem.id = network.name + "-" + i;
+ this.mServerList.appendChild(listitem);
+ hasChildren = true;
+ }
+
+ if (hasChildren) {
+ // Select the given id if it exists otherwise the first item.
+ this.mServerList.selectedIndex = aId;
+ } else {
+ this.onSelectServer();
+ }
+
+ header.setAttribute("title",
+ this.mBundle.getFormattedString("network-headerName",
+ [network.name]));
+ },
+
+ // Network Add button.
+ onAddNetwork: function() {
+ let name = this.prompt("network-add");
+ if (!name) {
+ return;
+ }
+
+ if (name in this.networkList) {
+ this.alert("network-nameError", name);
+ return;
+ }
+
+ // Create new network entry.
+ this.networkList[name] = { name: name, displayName: name, servers: [] };
+
+ this.refreshNetworks(name);
+ },
+
+ // Network Edit button.
+ onEditNetwork: function() {
+ let oldName = this.mNetworkList.selectedItem.id;
+ let name = this.prompt("network-edit", oldName);
+ if (!name || (name == oldName)) {
+ return;
+ }
+
+ if (name in this.networkList) {
+ this.alert("network-nameError", name);
+ return;
+ }
+
+ // Create new network entry.
+ this.networkList[name] = { name: name, displayName: name,
+ servers: this.networkList[oldName].servers };
+ // Remove old network entry.
+ delete this.networkList[oldName];
+
+ this.refreshNetworks(name);
+ },
+
+ // Network Remove button.
+ onRemoveNetwork: function() {
+ let selected = this.mNetworkList.selectedItem;
+
+ // Confirm definitely want to remove this network.
+ if (this.confirmEx("network-remove", selected.id) != 0) {
+ return;
+ }
+
+ // Remove network entry.
+ delete this.networkList[selected.id];
+
+ this.refreshNetworks();
+ },
+
+ // Move up / down buttons.
+ onMoveServer: function(aDir) {
+ let item = this.mServerList.selectedItem;
+ let network = this.mNetworkList.selectedItem.id;
+ let id = parseInt(item.getAttribute("server_id"));
+ let server = this.networkList[network].servers[id];
+ this.networkList[network].servers.splice(id, 1);
+ this.networkList[network].servers.splice(id + aDir, 0, server);
+
+ // Refresh the server list and select the server that has been moved.
+ this.onSelectNetwork(id + aDir);
+ },
+
+ // Add Server button.
+ onAddServer: function() {
+ this.openServerEditor(null);
+ },
+
+ // Edit Server button.
+ onEditServer: function() {
+ let item = this.mServerList.selectedItem;
+ if (!item) {
+ return;
+ }
+ this.openServerEditor(item);
+ },
+
+ // Remove Server button.
+ onRemoveServer: function() {
+ let item = this.mServerList.selectedItem;
+ let network = this.mNetworkList.selectedItem.id;
+ let id = item.getAttribute("server_id");
+ let server = this.networkList[network].servers[id];
+ let name = server.hostname + ":" + server.port;
+
+ // Confirm definitely want to remove this network.
+ if (this.confirmEx("server-remove", name) != 0) {
+ return;
+ }
+
+ this.networkList[network].servers.splice(id, 1);
+ this.onSelectNetwork();
+ },
+
+ onSelectServer: function() {
+ let server = this.mServerList.selectedItem;
+ this.updateServerButtons(server, false);
+ this.updateServerInfoBox(server);
+ },
+
+ openServerEditor: function(aItem) {
+ let network = this.mNetworkList.selectedItem.id;
+ let id;
+ let server;
+ if (aItem) {
+ id = aItem.getAttribute("server_id");
+ server = this.networkList[network].servers[id];
+ }
+
+ let args = { server: server, result: false };
+ window.openDialog("chrome://chatzilla/content/networks-server.xul",
+ "serverEdit", "chrome,titlebar,modal,centerscreen", args);
+ // Now update the server which was just added / edited and select it.
+ if (args.result) {
+ if (server) {
+ this.networkList[network].servers[id] = args.server;
+ } else {
+ id = this.networkList[network].servers.length;
+ this.networkList[network].servers.push(args.server);
+ }
+ this.refreshNetworks(network);
+ this.mServerList.selectedIndex = id;
+ }
+ },
+
+ updateServerButtons: function(aServer, aNone) {
+ this.disableButton("serverListUpButton", aNone || !aServer ||
+ !aServer.previousSibling);
+ this.disableButton("serverListDownButton", aNone || !aServer ||
+ !aServer.nextSibling);
+ this.disableButton("serverListAddButton", aNone);
+ this.disableButton("serverListEditButton", aNone || !aServer);
+ this.disableButton("serverListRemoveButton", aNone || !aServer);
+ },
+
+ disableButton: function(aButtonId, aDisable) {
+ let button = document.getElementById(aButtonId);
+ if (aDisable) {
+ button.setAttribute("disabled", "true");
+ } else {
+ button.removeAttribute("disabled");
+ }
+ },
+
+ updateServerInfoBox: function(aServer) {
+ let name = document.getElementById("nameValue");
+ let port = document.getElementById("portValue");
+ let connection = document.getElementById("connectionSecurityValue");
+ if (!aServer) {
+ name.value = "";
+ port.value = "";
+ connection.value = "";
+ return;
+ }
+
+ let network = this.mNetworkList.selectedItem.id;
+ let id = aServer.getAttribute("server_id");
+ let server = this.networkList[network].servers[id];
+ let type = "server-ConnectionSecurityType-" + (server.isSecure ? "3" : "0");
+ name.value = server.hostname;
+ port.value = server.port;
+ connection.value = this.mBundle.getString(type);
+ },
+};