diff --git a/server/frontend/public/js/connect/main.js b/server/frontend/public/js/connect/main.js index c2dbea8..1882e26 100644 --- a/server/frontend/public/js/connect/main.js +++ b/server/frontend/public/js/connect/main.js @@ -23,7 +23,7 @@ document.body.innerHTML = `
@@ -60,4 +60,4 @@ socket.run()

Connection errored

`; - }); \ No newline at end of file + }); diff --git a/server/frontend/public/js/main.js b/server/frontend/public/js/main.js index c1916a5..096a2e6 100644 --- a/server/frontend/public/js/main.js +++ b/server/frontend/public/js/main.js @@ -96,6 +96,7 @@ fl.bindLoad("/connect", () => { const portSelected = +(address.value.match(/:[0-9]{1,5}$/).at(0).slice(1,)); address.value = address.value.slice(0, -1 * (":"+portSelected).length); port.value = portSelected; + document.getElementById("custom-conn-port").focus(); } if (!port.value) { @@ -141,6 +142,7 @@ fl.bindLoad("/connect", () => { const servers = localServers.concat(JSON.parse(xhr.response).result.map(x => { x.fromLocal = false; return x })); const serversByItemID = new Object(); + const serversByAddress = new Object(); const items = []; const itemIDs = []; const mp = servers.map(async serverItem => { @@ -155,15 +157,19 @@ fl.bindLoad("/connect", () => { data.tls = serverItem.tls; itemIDs.push({ ...data, - itemID: `con-btn-to:${data.tag}:${serverItem.address}:${serverItem.port}` + itemID: `con-btn-to:${data.tag}:${serverItem.address}:${serverItem.port}`, + deleteID: `remove-con:${serverItem.address}:${serverItem.port}`, + address: `${serverItem.address}:${serverItem.port}`, }); serversByItemID[`con-btn-to:${data.tag}:${serverItem.address}:${serverItem.port}`] = { data, serverItem }; + serversByAddress[`${serverItem.address}:${serverItem.port}`] = { data, serverItem }; resolve(items.push(` ${data.name} ${serverItem.address}:${serverItem.port} ${!data.tls ? '' : ''} ${ping} + `)); }; socket.send(JSON.stringify({ @@ -172,12 +178,18 @@ fl.bindLoad("/connect", () => { }; socket.onerror = (err) => { console.error(err); + itemIDs.push({ + deleteID: `remove-con:${serverItem.address}:${serverItem.port}`, + address: `${serverItem.address}:${serverItem.port}`, + }); + serversByAddress[`${serverItem.address}:${serverItem.port}`] = { serverItem }; resolve(items.push(` ${tr("/connect", "offline-server") ?? "Offline"} ${serverItem.address}:${serverItem.port} ${tr("/connect", "offline-server") ?? "Offline"} + `)); }; }); @@ -185,7 +197,7 @@ fl.bindLoad("/connect", () => { }); await Promise.all(mp); - items.push(`
`); + items.push(`
`); document.getElementById("loading-servers").innerHTML = ` @@ -193,6 +205,7 @@ fl.bindLoad("/connect", () => { + ${items.join("\n")} @@ -200,11 +213,24 @@ fl.bindLoad("/connect", () => {
${tr("/connect", "server-name-tbl") ?? "Name"}${tr("/connect", "server-encryption") ?? "Encrypted"} ${tr("/connect", "server-ping") ?? "Ping"} ${tr("/connect", "server-action") ?? "Action"}
`; itemIDs.forEach(btn => { - document.getElementById(btn.itemID).onclick = () => { - checkContentWarning(() => { - const serverInfo = serversByItemID[btn.itemID].serverItem; - window.open(`/connect-area?server=${serverInfo.address}:${serverInfo.port}&encrypted=${serverInfo.tls ? "true" : "false"}`); - }); + //console.log("btn:", btn); + if (btn.itemID) + document.getElementById(btn.itemID).onclick = () => { + checkContentWarning(() => { + const serverInfo = serversByItemID[btn.itemID].serverItem; + window.open(`/connect-area?server=${serverInfo.address}:${serverInfo.port}&encrypted=${serverInfo.tls ? "true" : "false"}`); + }); + }; + + document.getElementById(btn.deleteID).onclick = () => { + const serverInfo = serversByAddress[btn.address].serverItem; + console.log("serverInfo:", serverInfo); + const savedServers = (JSON.parse(localStorage.getItem("savedServers") ?? "null") ?? []) + .filter(server => { + return !(server.address === serverInfo.address && server.port === serverInfo.port) + }); + localStorage.setItem("savedServers", JSON.stringify(savedServers)); + connectServers(); }; });