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');
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)';
let listUrl = s.url || (s.wpSite ? s.wpSite + ' (WP)' : '');
listUrl = listUrl.replace(':9191', '');
const url = document.createElement('div'); url.className = 'url';
const url = document.createElement('div');
url.className = 'url';
url.textContent = listUrl;
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 maxPlayers = d.max_players;
let newPlayersText = String(playersCount);
if (maxPlayers) newPlayersText += ` / ${maxPlayers}`;
if (maxPlayers && maxPlayers !== '-1') {
newPlayersText += ` / ${maxPlayers}`;
}
if (force || detailPlayers.textContent !== newPlayersText) {
detailPlayers.textContent = newPlayersText;
@@ -218,7 +222,7 @@ function updateDetailForServer(srv, force = false) {
}
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;
if (force) {
@@ -245,18 +249,27 @@ function updatePlayerList(players) {
for (const p of players) {
const li = document.createElement('li');
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');
img.src = p.avatar;
img.className = 'player-avatar';
img.title = name;
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);
}
}
// --- Update List (Fix: Syntaxfehler behoben) ---
// --- Update Server List Statuses ---
function updateServerListStatuses() {
const items = serversContainer.querySelectorAll('.server-item');
items.forEach(item => {
@@ -280,7 +293,6 @@ function updateServerListStatuses() {
item.statusBubble.style.backgroundColor = 'var(--online)';
} else {
item.statusBubble.textContent = 'Offline';
// Klammerfehler korrigiert: ')' zu '}'
item.statusBubble.style.backgroundColor = 'var(--offline)';
}
@@ -294,10 +306,12 @@ async function handleAdd() {
const url = inputUrl.value.trim();
const wpSite = inputWpSite.value.trim();
const wpServerId = inputWpServerId.value.trim();
if (!url && !wpSite) {
alert('Bitte URL oder WP Site angeben');
return;
}
const s = {
id: uid(),
name: name || url || wpSite,
@@ -305,42 +319,59 @@ async function handleAdd() {
wpSite: wpSite || null,
wpServerId: wpServerId || null
};
servers.push(s);
await saveServersToStorage();
inputName.value=''; inputUrl.value=''; inputWpSite.value=''; inputWpServerId.value='';
inputName.value = '';
inputUrl.value = '';
inputWpSite.value = '';
inputWpServerId.value = '';
renderServerList();
}
async function handleEdit() {
if(!selectedId) return;
const srv=servers.find(s=>s.id===selectedId);
if(!srv) return;
const newName=prompt('Name:',srv.name)||srv.name;
const newUrl=prompt('URL:',srv.url||'')||srv.url;
const newWpSite=prompt('WP Site:',srv.wpSite||'')||srv.wpSite;
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();
if (!selectedId) return;
const srv = servers.find(s => s.id === selectedId);
if (!srv) return;
const newName = prompt('Name:', srv.name) || srv.name;
const newUrl = prompt('URL:', srv.url || '') || srv.url;
const newWpSite = prompt('WP Site:', srv.wpSite || '') || srv.wpSite;
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();
await saveServersToStorage();
renderServerList();
renderDetail(selectedId);
}
async function handleDelete() {
if(!selectedId) return;
if(!confirm('Server wirklich löschen?')) return;
servers = servers.filter(s=>s.id!==selectedId);
selectedId=null;
if (!selectedId) return;
if (!confirm('Server wirklich löschen?')) return;
servers = servers.filter(s => s.id !== selectedId);
selectedId = null;
await saveServersToStorage();
renderServerList();
renderDetail(null);
}
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) => {
if (area === 'local' && changes.serverStatuses) {
statuses = changes.serverStatuses.newValue || {};