пинг при загрузке и disable конфига
This commit is contained in:
parent
e4d289b9a3
commit
846df4fd0b
72
index.html
72
index.html
@ -20,6 +20,7 @@
|
||||
--shadow: 0 20px 60px rgba(0, 0, 0, 0.36);
|
||||
--upload: #a78bfa;
|
||||
--warning: #f59e0b;
|
||||
--danger: #ef4444;
|
||||
}
|
||||
|
||||
[data-theme="light"] {
|
||||
@ -194,6 +195,17 @@
|
||||
box-shadow: 0 14px 34px var(--accent-soft);
|
||||
}
|
||||
|
||||
.server-card:disabled {
|
||||
cursor: not-allowed;
|
||||
opacity: 0.62;
|
||||
transform: none;
|
||||
box-shadow: var(--shadow);
|
||||
}
|
||||
|
||||
.server-card:disabled:hover {
|
||||
border-color: var(--border);
|
||||
}
|
||||
|
||||
.flag {
|
||||
display: grid;
|
||||
place-items: center;
|
||||
@ -245,6 +257,11 @@
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.ping.is-offline {
|
||||
color: var(--danger);
|
||||
font-weight: 800;
|
||||
}
|
||||
|
||||
.pill {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
@ -729,13 +746,20 @@
|
||||
elements.serverGrid.innerHTML = "";
|
||||
|
||||
servers.forEach((server) => {
|
||||
const ping = pingResults.get(server.id);
|
||||
const isCheckingPing = !pingResults.has(server.id);
|
||||
const isOffline = ping === null;
|
||||
const button = document.createElement("button");
|
||||
button.type = "button";
|
||||
button.disabled = isOffline;
|
||||
button.className = `server-card${server.id === selectedServerId ? " is-selected" : ""}`;
|
||||
button.addEventListener("click", () => selectServer(server.id));
|
||||
|
||||
const ping = pingResults.get(server.id);
|
||||
const pingText = ping == null ? "пинг: --" : `пинг: ${Math.round(ping)} мс`;
|
||||
const pingText = isCheckingPing
|
||||
? "проверка..."
|
||||
: isOffline
|
||||
? "нет ответа"
|
||||
: `пинг: ${Math.round(ping)} мс`;
|
||||
const flagContent = server.flagUrl
|
||||
? `<img src="${server.flagUrl}" alt="Флаг ${server.country}" loading="lazy" onerror="this.remove()" />`
|
||||
: (server.countryCode || "--").toUpperCase();
|
||||
@ -746,7 +770,7 @@
|
||||
<span class="server-name">${escapeHtml(server.name)}</span>
|
||||
<span class="server-meta">${escapeHtml(server.country)} · ${escapeHtml(server.address)}</span>
|
||||
</span>
|
||||
<span class="ping">${pingText}</span>
|
||||
<span class="ping${isOffline ? " is-offline" : ""}">${pingText}</span>
|
||||
`;
|
||||
|
||||
elements.serverGrid.appendChild(button);
|
||||
@ -766,6 +790,8 @@
|
||||
}
|
||||
|
||||
function selectServer(serverId) {
|
||||
if (pingResults.get(serverId) === null) return;
|
||||
|
||||
selectedServerId = serverId;
|
||||
localStorage.setItem("selected-server-id", serverId);
|
||||
renderServers();
|
||||
@ -778,9 +804,19 @@
|
||||
|
||||
function updateSelectedServerText() {
|
||||
const server = getSelectedServer();
|
||||
elements.targetServerText.textContent = server
|
||||
? `Тест будет запущен через ${server.name} (${server.country}).`
|
||||
: "Выберите сервер для теста.";
|
||||
if (!server) {
|
||||
elements.targetServerText.textContent = "Выберите сервер для теста.";
|
||||
return;
|
||||
}
|
||||
|
||||
if (pingResults.get(server.id) === null) {
|
||||
elements.targetServerText.textContent =
|
||||
`${server.name} не отвечает. Выберите другой сервер.`;
|
||||
return;
|
||||
}
|
||||
|
||||
elements.targetServerText.textContent =
|
||||
`Тест будет запущен через ${server.name} (${server.country}).`;
|
||||
}
|
||||
|
||||
async function refreshAllPings() {
|
||||
@ -794,9 +830,27 @@
|
||||
renderServers();
|
||||
}),
|
||||
);
|
||||
ensureSelectableServer();
|
||||
renderServers();
|
||||
updateSelectedServerText();
|
||||
elements.refreshPingBtn.disabled = false;
|
||||
}
|
||||
|
||||
function ensureSelectableServer() {
|
||||
if (selectedServerId && pingResults.get(selectedServerId) !== null) {
|
||||
return;
|
||||
}
|
||||
|
||||
const firstOnlineServer = servers.find((server) => pingResults.get(server.id) !== null);
|
||||
selectedServerId = firstOnlineServer?.id || null;
|
||||
|
||||
if (selectedServerId) {
|
||||
localStorage.setItem("selected-server-id", selectedServerId);
|
||||
} else {
|
||||
localStorage.removeItem("selected-server-id");
|
||||
}
|
||||
}
|
||||
|
||||
async function measurePing(server) {
|
||||
const attempts = 3;
|
||||
const values = [];
|
||||
@ -1153,6 +1207,12 @@
|
||||
return;
|
||||
}
|
||||
|
||||
if (pingResults.get(server.id) === null) {
|
||||
elements.serverStatus.textContent =
|
||||
"Выбранный сервер не отвечает. Запуск теста отключен.";
|
||||
return;
|
||||
}
|
||||
|
||||
elements.startBtn.disabled = true;
|
||||
resetMetrics();
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user