BungeeCord-Chrome/popup.js aktualisiert

This commit is contained in:
2026-01-01 22:28:35 +00:00
parent f0e197ee8a
commit 3be6b0b9a4

View File

@@ -110,13 +110,15 @@ function renderServerList() {
const meta = document.createElement('div'); const meta = document.createElement('div');
meta.className = 'meta'; meta.className = 'meta';
const name = document.createElement('div'); name.className = 'name'; const name = document.createElement('div');
name.className = 'name';
name.textContent = s.name || '(Kein Name)'; name.textContent = s.name || '(Kein Name)';
let listUrl = s.url || (s.wpSite ? s.wpSite + ' (WP)' : ''); let listUrl = s.url || (s.wpSite ? s.wpSite + ' (WP)' : '');
listUrl = listUrl.replace(':9191', ''); listUrl = listUrl.replace(':9191', '');
const url = document.createElement('div'); url.className = 'url'; const url = document.createElement('div');
url.className = 'url';
url.textContent = listUrl; url.textContent = listUrl;
meta.append(name, url); meta.append(name, url);
@@ -202,7 +204,9 @@ function updateDetailForServer(srv, force = false) {
const playersCount = Array.isArray(d.players) ? d.players.length : (typeof d.players === 'number' ? d.players : 0); const playersCount = Array.isArray(d.players) ? d.players.length : (typeof d.players === 'number' ? d.players : 0);
const maxPlayers = d.max_players; const maxPlayers = d.max_players;
let newPlayersText = String(playersCount); let newPlayersText = String(playersCount);
if (maxPlayers) newPlayersText += ` / ${maxPlayers}`; if (maxPlayers && maxPlayers !== '-1') {
newPlayersText += ` / ${maxPlayers}`;
}
if (force || detailPlayers.textContent !== newPlayersText) { if (force || detailPlayers.textContent !== newPlayersText) {
detailPlayers.textContent = newPlayersText; detailPlayers.textContent = newPlayersText;
@@ -218,7 +222,7 @@ function updateDetailForServer(srv, force = false) {
} }
const currentPlayers = Array.isArray(d.players) ? d.players : []; const currentPlayers = Array.isArray(d.players) ? d.players : [];
const prevPlayers = (prevSt && Array.isArray(prevSt.data.players)) ? prevSt.data.players : []; const prevPlayers = (prevSt && Array.isArray(prevSt.data?.players)) ? prevSt.data.players : [];
let playersChanged = false; let playersChanged = false;
if (force) { if (force) {
@@ -245,18 +249,27 @@ function updatePlayerList(players) {
for (const p of players) { for (const p of players) {
const li = document.createElement('li'); const li = document.createElement('li');
const name = typeof p === 'object' ? p.name || p.username || p.player || '' : String(p); const name = typeof p === 'object' ? p.name || p.username || p.player || '' : String(p);
if (p.avatar) {
if (typeof p === 'object' && p.avatar) {
const img = document.createElement('img'); const img = document.createElement('img');
img.src = p.avatar; img.src = p.avatar;
img.className = 'player-avatar'; img.className = 'player-avatar';
img.title = name; img.title = name;
li.appendChild(img); li.appendChild(img);
} else {
// Falls kein Avatar vorhanden, generiere einen von mc-heads.net
const img = document.createElement('img');
img.src = `https://mc-heads.net/avatar/${encodeURIComponent(name)}/32`;
img.className = 'player-avatar';
img.title = name;
li.appendChild(img);
} }
detailPlayerList.appendChild(li); detailPlayerList.appendChild(li);
} }
} }
// --- Update List (Fix: Syntaxfehler behoben) --- // --- Update Server List Statuses ---
function updateServerListStatuses() { function updateServerListStatuses() {
const items = serversContainer.querySelectorAll('.server-item'); const items = serversContainer.querySelectorAll('.server-item');
items.forEach(item => { items.forEach(item => {
@@ -280,7 +293,6 @@ function updateServerListStatuses() {
item.statusBubble.style.backgroundColor = 'var(--online)'; item.statusBubble.style.backgroundColor = 'var(--online)';
} else { } else {
item.statusBubble.textContent = 'Offline'; item.statusBubble.textContent = 'Offline';
// Klammerfehler korrigiert: ')' zu '}'
item.statusBubble.style.backgroundColor = 'var(--offline)'; item.statusBubble.style.backgroundColor = 'var(--offline)';
} }
@@ -294,10 +306,12 @@ async function handleAdd() {
const url = inputUrl.value.trim(); const url = inputUrl.value.trim();
const wpSite = inputWpSite.value.trim(); const wpSite = inputWpSite.value.trim();
const wpServerId = inputWpServerId.value.trim(); const wpServerId = inputWpServerId.value.trim();
if (!url && !wpSite) { if (!url && !wpSite) {
alert('Bitte URL oder WP Site angeben'); alert('Bitte URL oder WP Site angeben');
return; return;
} }
const s = { const s = {
id: uid(), id: uid(),
name: name || url || wpSite, name: name || url || wpSite,
@@ -305,9 +319,15 @@ async function handleAdd() {
wpSite: wpSite || null, wpSite: wpSite || null,
wpServerId: wpServerId || null wpServerId: wpServerId || null
}; };
servers.push(s); servers.push(s);
await saveServersToStorage(); await saveServersToStorage();
inputName.value=''; inputUrl.value=''; inputWpSite.value=''; inputWpServerId.value='';
inputName.value = '';
inputUrl.value = '';
inputWpSite.value = '';
inputWpServerId.value = '';
renderServerList(); renderServerList();
} }
@@ -315,12 +335,17 @@ async function handleEdit() {
if (!selectedId) return; if (!selectedId) return;
const srv = servers.find(s => s.id === selectedId); const srv = servers.find(s => s.id === selectedId);
if (!srv) return; if (!srv) return;
const newName = prompt('Name:', srv.name) || srv.name; const newName = prompt('Name:', srv.name) || srv.name;
const newUrl = prompt('URL:', srv.url || '') || srv.url; const newUrl = prompt('URL:', srv.url || '') || srv.url;
const newWpSite = prompt('WP Site:', srv.wpSite || '') || srv.wpSite; const newWpSite = prompt('WP Site:', srv.wpSite || '') || srv.wpSite;
const newWpServerId = prompt('WP Server ID:', srv.wpServerId || '') || srv.wpServerId; const newWpServerId = prompt('WP Server ID:', srv.wpServerId || '') || srv.wpServerId;
srv.name=newName.trim(); srv.url=newUrl.trim();
srv.wpSite=newWpSite.trim(); srv.wpServerId=newWpServerId.trim(); srv.name = newName.trim();
srv.url = newUrl.trim();
srv.wpSite = newWpSite.trim();
srv.wpServerId = newWpServerId.trim();
await saveServersToStorage(); await saveServersToStorage();
renderServerList(); renderServerList();
renderDetail(selectedId); renderDetail(selectedId);
@@ -329,18 +354,24 @@ async function handleEdit() {
async function handleDelete() { async function handleDelete() {
if (!selectedId) return; if (!selectedId) return;
if (!confirm('Server wirklich löschen?')) return; if (!confirm('Server wirklich löschen?')) return;
servers = servers.filter(s => s.id !== selectedId); servers = servers.filter(s => s.id !== selectedId);
selectedId = null; selectedId = null;
await saveServersToStorage(); await saveServersToStorage();
renderServerList(); renderServerList();
renderDetail(null); renderDetail(null);
} }
async function manualRefresh() { async function manualRefresh() {
try { chrome.runtime.sendMessage({ cmd: 'refreshNow' }); } catch(e) {} try {
chrome.runtime.sendMessage({ cmd: 'refreshNow' });
} catch(e) {
console.error('Refresh fehlgeschlagen:', e);
}
} }
// --- Listener --- // --- Storage Listener ---
chrome.storage.onChanged.addListener((changes, area) => { chrome.storage.onChanged.addListener((changes, area) => {
if (area === 'local' && changes.serverStatuses) { if (area === 'local' && changes.serverStatuses) {
statuses = changes.serverStatuses.newValue || {}; statuses = changes.serverStatuses.newValue || {};