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