Alpha v1.1

This commit is contained in:
Flatlogic Bot 2026-02-26 00:40:09 +00:00
parent 8b56494400
commit 65093ca0b5
5 changed files with 100 additions and 16 deletions

View File

@ -41,6 +41,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['
$slug = $_POST['slug']; $slug = $_POST['slug'];
$icon = $_POST['icon']; $icon = $_POST['icon'];
$description = $_POST['description']; $description = $_POST['description'];
$is_blinking = isset($_POST['is_blinking']) ? 1 : 0;
$modifier_ids = isset($_POST['modifiers']) ? $_POST['modifiers'] : []; $modifier_ids = isset($_POST['modifiers']) ? $_POST['modifiers'] : [];
$image_url = null; $image_url = null;
@ -98,13 +99,14 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['
$slug = $_POST['slug']; $slug = $_POST['slug'];
$color = $_POST['color']; $color = $_POST['color'];
$description = $_POST['description']; $description = $_POST['description'];
$is_blinking = isset($_POST['is_blinking']) ? 1 : 0;
if ($id > 0) { if ($id > 0) {
$stmt = $db->prepare("UPDATE celestial_object_statuses SET name = ?, slug = ?, color = ?, description = ? WHERE id = ?"); $stmt = $db->prepare("UPDATE celestial_object_statuses SET name = ?, slug = ?, color = ?, description = ?, is_blinking = ? WHERE id = ?");
$stmt->execute([$name, $slug, $color, $description, $id]); $stmt->execute([$name, $slug, $color, $description, $is_blinking, $id]);
} else { } else {
$stmt = $db->prepare("INSERT INTO celestial_object_statuses (name, slug, color, description) VALUES (?, ?, ?, ?)"); $stmt = $db->prepare("INSERT INTO celestial_object_statuses (name, slug, color, description, is_blinking) VALUES (?, ?, ?, ?, ?)");
$stmt->execute([$name, $slug, $color, $description]); $stmt->execute([$name, $slug, $color, $description, $is_blinking]);
} }
header("Location: admin.php?tab=statuses&success=1"); header("Location: admin.php?tab=statuses&success=1");
exit; exit;
@ -123,6 +125,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['
$name = $_POST['name']; $name = $_POST['name'];
$slug = $_POST['slug']; $slug = $_POST['slug'];
$description = $_POST['description']; $description = $_POST['description'];
$is_blinking = isset($_POST['is_blinking']) ? 1 : 0;
if ($id > 0) { if ($id > 0) {
$stmt = $db->prepare("UPDATE settlement_types SET name = ?, slug = ?, description = ? WHERE id = ?"); $stmt = $db->prepare("UPDATE settlement_types SET name = ?, slug = ?, description = ? WHERE id = ?");
@ -149,6 +152,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['
$slug = $_POST['slug']; $slug = $_POST['slug'];
$type = $_POST['type']; $type = $_POST['type'];
$description = $_POST['description']; $description = $_POST['description'];
$is_blinking = isset($_POST['is_blinking']) ? 1 : 0;
if ($id > 0) { if ($id > 0) {
$stmt = $db->prepare("UPDATE modifiers SET name = ?, slug = ?, type = ?, description = ? WHERE id = ?"); $stmt = $db->prepare("UPDATE modifiers SET name = ?, slug = ?, type = ?, description = ? WHERE id = ?");
@ -175,6 +179,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['
$slug = $_POST['slug']; $slug = $_POST['slug'];
$fa_icon = $_POST['fa_icon']; $fa_icon = $_POST['fa_icon'];
$color = $_POST['color']; $color = $_POST['color'];
$is_playable = isset($_POST['is_playable']) ? 1 : 0;
$image_url = null; $image_url = null;
$alliance_ids = isset($_POST['alliances']) ? $_POST['alliances'] : []; $alliance_ids = isset($_POST['alliances']) ? $_POST['alliances'] : [];
@ -192,11 +197,11 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['
} }
} }
if ($id > 0) { if ($id > 0) {
$stmt = $db->prepare("UPDATE factions SET name = ?, slug = ?, image_url = ?, fa_icon = ?, color = ? WHERE id = ?"); $stmt = $db->prepare("UPDATE factions SET name = ?, slug = ?, image_url = ?, fa_icon = ?, color = ?, is_playable = ? WHERE id = ?");
$stmt->execute([$name, $slug, $image_url, $fa_icon, $color, $id]); $stmt->execute([$name, $slug, $image_url, $fa_icon, $color, $is_playable, $id]);
} else { } else {
$stmt = $db->prepare("INSERT INTO factions (name, slug, image_url, fa_icon, color) VALUES (?, ?, ?, ?, ?)"); $stmt = $db->prepare("INSERT INTO factions (name, slug, image_url, fa_icon, color, is_playable) VALUES (?, ?, ?, ?, ?, ?)");
$stmt->execute([$name, $slug, $image_url, $fa_icon, $color]); $stmt->execute([$name, $slug, $image_url, $fa_icon, $color, $is_playable]);
$id = $db->lastInsertId(); $id = $db->lastInsertId();
} }
@ -227,6 +232,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['
$slug = $_POST['slug']; $slug = $_POST['slug'];
$icon = $_POST['icon']; $icon = $_POST['icon'];
$description = $_POST['description']; $description = $_POST['description'];
$is_blinking = isset($_POST['is_blinking']) ? 1 : 0;
$show_in_header = isset($_POST["show_in_header"]) ? 1 : 0; $show_in_header = isset($_POST["show_in_header"]) ? 1 : 0;
$image_url = null; $image_url = null;
@ -273,6 +279,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['
$name = $_POST['name']; $name = $_POST['name'];
$slug = $_POST['slug']; $slug = $_POST['slug'];
$description = $_POST['description']; $description = $_POST['description'];
$is_blinking = isset($_POST['is_blinking']) ? 1 : 0;
if ($id > 0) { if ($id > 0) {
$stmt = $db->prepare("UPDATE lootboxes SET name = ?, slug = ?, description = ? WHERE id = ?"); $stmt = $db->prepare("UPDATE lootboxes SET name = ?, slug = ?, description = ? WHERE id = ?");
@ -414,6 +421,7 @@ if ($tab === 'users') {
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet"> <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet">
<link href="assets/css/custom.css?v=<?php echo time(); ?>" rel="stylesheet"> <link href="assets/css/custom.css?v=<?php echo time(); ?>" rel="stylesheet">
<style> <style>
.blink { animation: blinker 1s linear infinite; } @keyframes blinker { 50% { opacity: 0; } }
body { background: #000; color: #fff; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; margin: 0; } body { background: #000; color: #fff; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; margin: 0; }
header { background: #1a202c; padding: 10px 20px; border-bottom: 2px solid #2d3545; display: flex; justify-content: space-between; align-items: center; } header { background: #1a202c; padding: 10px 20px; border-bottom: 2px solid #2d3545; display: flex; justify-content: space-between; align-items: center; }
.nav-links a { color: #88c0d0; text-decoration: none; margin-right: 20px; font-weight: bold; font-size: 14px; } .nav-links a { color: #88c0d0; text-decoration: none; margin-right: 20px; font-weight: bold; font-size: 14px; }
@ -710,6 +718,11 @@ if ($tab === 'users') {
<label>Couleur</label> <label>Couleur</label>
<div class="color-group"> <div class="color-group">
<input type="color" id="st_color_picker" class="color-picker-input" oninput="document.getElementById('st_color').value = this.value"> <input type="color" id="st_color_picker" class="color-picker-input" oninput="document.getElementById('st_color').value = this.value">
<div style="margin-top: 5px;">
<label style="display: flex; align-items: center; gap: 8px; cursor: pointer; font-size: 0.9em;">
<input type="checkbox" name="is_blinking" id="st_is_blinking" value="1"> Clignotement
</label>
</div>
<input type="text" name="color" id="st_color" required placeholder="#ef4444" oninput="document.getElementById('st_color_picker').value = this.value"> <input type="text" name="color" id="st_color" required placeholder="#ef4444" oninput="document.getElementById('st_color_picker').value = this.value">
</div> </div>
</div> </div>
@ -728,7 +741,7 @@ if ($tab === 'users') {
<tbody> <tbody>
<?php foreach ($statuses_list as $s): ?> <?php foreach ($statuses_list as $s): ?>
<tr> <tr>
<td><div style="width: 20px; height: 20px; background: <?php echo $s['color']; ?>; border: 1px solid #fff;"></div></td> <td><div style="width: 20px; height: 20px; background: <?php echo $s['color']; ?>; border: 1px solid #fff;" class="<?php echo ($s['is_blinking'] ?? 0) ? 'blink' : ''; ?>"></div></td>
<td><strong><?php echo htmlspecialchars($s['name']); ?></strong></td> <td><strong><?php echo htmlspecialchars($s['name']); ?></strong></td>
<td><code><?php echo htmlspecialchars($s['slug']); ?></code></td> <td><code><?php echo htmlspecialchars($s['slug']); ?></code></td>
<td> <td>
@ -815,6 +828,13 @@ if ($tab === 'users') {
<input type="file" name="image" accept="image/png"> <input type="file" name="image" accept="image/png">
</div> </div>
</div> </div>
<div style="display: flex; gap: 20px; margin-bottom: 15px; background: rgba(0,0,0,0.2); padding: 10px; border-radius: 4px; border: 1px solid #334155;">
<div style="flex: 1; display: flex; align-items: center; gap: 10px;">
<input type="checkbox" name="is_playable" id="fac_is_playable" style="width: auto;">
<label for="fac_is_playable" style="margin-bottom: 0; cursor: pointer;">Accessible aux joueurs (Jouable)</label>
</div>
</div>
<div class="form-group"> <div class="form-group">
<label style="font-size: 12px; color: #8c92a3;">Alliances (Réciprocité automatique)</label> <label style="font-size: 12px; color: #8c92a3;">Alliances (Réciprocité automatique)</label>
@ -836,7 +856,7 @@ if ($tab === 'users') {
</div> </div>
<table> <table>
<thead><tr><th>Couleur</th><th>Visuel</th><th>Nom</th><th>Slug</th><th>Alliances</th><th>Actions</th></tr></thead> <thead><tr><th>Couleur</th><th>Visuel</th><th>Nom</th><th>Slug</th><th>Jouable</th><th>Alliances</th><th>Actions</th></tr></thead>
<tbody> <tbody>
<?php foreach ($factions_list as $f): ?> <?php foreach ($factions_list as $f): ?>
<tr> <tr>
@ -852,6 +872,13 @@ if ($tab === 'users') {
</td> </td>
<td><strong><?php echo htmlspecialchars($f['name']); ?></strong></td> <td><strong><?php echo htmlspecialchars($f['name']); ?></strong></td>
<td><code><?php echo htmlspecialchars($f['slug']); ?></code></td> <td><code><?php echo htmlspecialchars($f['slug']); ?></code></td>
<td style="text-align: center;">
<?php if ($f['is_playable']): ?>
<span style="color: #a3be8c; font-weight: bold;">Oui</span>
<?php else: ?>
<span style="color: #bf616a; font-weight: bold;">Non</span>
<?php endif; ?>
</td>
<td> <td>
<small> <small>
<?php <?php
@ -1173,12 +1200,14 @@ if ($tab === 'users') {
document.getElementById('st_color_picker').value = data.color.startsWith('#') ? data.color : '#000000'; document.getElementById('st_color_picker').value = data.color.startsWith('#') ? data.color : '#000000';
} }
document.getElementById('st_desc').value = data.description; document.getElementById('st_desc').value = data.description;
document.getElementById('st_is_blinking').checked = data.is_blinking == 1;
window.scrollTo(0,0); window.scrollTo(0,0);
} }
function resetStatusForm() { function resetStatusForm() {
document.getElementById('statusForm').reset(); document.getElementById('statusForm').reset();
document.getElementById('st_id').value = 0; document.getElementById('st_id').value = 0;
document.getElementById('st_color_picker').value = '#000000'; document.getElementById('st_color_picker').value = '#000000';
document.getElementById('st_is_blinking').checked = false;
} }
function editSettlementType(data) { function editSettlementType(data) {
@ -1210,6 +1239,7 @@ if ($tab === 'users') {
document.getElementById('fac_color_picker').value = color.startsWith('#') ? color : '#808080'; document.getElementById('fac_color_picker').value = color.startsWith('#') ? color : '#808080';
} }
document.getElementById('fac_fa_icon').value = data.fa_icon || ''; document.getElementById('fac_fa_icon').value = data.fa_icon || '';
document.getElementById('fac_is_playable').checked = data.is_playable == 1;
// Handle Alliances // Handle Alliances
document.querySelectorAll('.alliance-checkbox').forEach(cb => cb.checked = false); document.querySelectorAll('.alliance-checkbox').forEach(cb => cb.checked = false);
@ -1232,6 +1262,7 @@ if ($tab === 'users') {
document.getElementById('fac_id').value = 0; document.getElementById('fac_id').value = 0;
document.getElementById('fac_color').value = '#808080'; document.getElementById('fac_color').value = '#808080';
document.getElementById('fac_color_picker').value = '#808080'; document.getElementById('fac_color_picker').value = '#808080';
document.getElementById('fac_is_playable').checked = false;
document.querySelectorAll('.alliance-checkbox').forEach(cb => cb.checked = false); document.querySelectorAll('.alliance-checkbox').forEach(cb => cb.checked = false);
document.querySelectorAll('.alliance-label').forEach(lbl => lbl.style.display = 'flex'); document.querySelectorAll('.alliance-label').forEach(lbl => lbl.style.display = 'flex');
} }
@ -1343,4 +1374,4 @@ if ($tab === 'users') {
<?php endif; ?> <?php endif; ?>
</script> </script>
</body> </body>
</html> </html>

View File

@ -0,0 +1,11 @@
<?php
require_once __DIR__ . '/config.php';
try {
$db = db();
$db->exec("ALTER TABLE celestial_object_statuses ADD COLUMN is_blinking TINYINT(1) DEFAULT 0");
echo "Column 'is_blinking' added successfully to 'celestial_object_statuses'.\n";
} catch (PDOException $e) {
echo "Error adding column: " . $e->getMessage() . "\n";
}

View File

@ -0,0 +1,11 @@
<?php
require_once __DIR__ . '/config.php';
$db = db();
try {
$db->exec("ALTER TABLE factions ADD COLUMN is_playable TINYINT(1) DEFAULT 0");
echo "Column 'is_playable' added successfully to 'factions' table.\n";
} catch (PDOException $e) {
echo "Error: " . $e->getMessage() . "\n";
}

View File

@ -269,8 +269,24 @@ if ($view === 'sector') {
} }
function getStatusColor($status, $type, $statuses_map, $object_types_map) { function getStatusColor($status, $type, $statuses_map, $object_types_map) {
function isStatusBlinking($status, $statuses_map) {
return ($statuses_map[$status]["is_blinking"] ?? 0) == 1;
}
if ($type === 'empty') return 'rgba(255,255,255,0.05)'; if ($type === 'empty') return 'rgba(255,255,255,0.05)';
function isStatusBlinking($status, $statuses_map) {
return ($statuses_map[$status]["is_blinking"] ?? 0) == 1;
}
return $statuses_map[$status]['color'] ?? 'rgba(255,255,255,0.05)'; return $statuses_map[$status]['color'] ?? 'rgba(255,255,255,0.05)';
function isStatusBlinking($status, $statuses_map) {
return ($statuses_map[$status]["is_blinking"] ?? 0) == 1;
}
}
function isStatusBlinking($status, $statuses_map) {
return ($statuses_map[$status]["is_blinking"] ?? 0) == 1;
} }
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
@ -281,6 +297,7 @@ function getStatusColor($status, $type, $statuses_map, $object_types_map) {
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet"> <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet">
<link href="assets/css/custom.css?v=<?php echo time(); ?>" rel="stylesheet"> <link href="assets/css/custom.css?v=<?php echo time(); ?>" rel="stylesheet">
<style> <style>
.blink { animation: blinker 1s linear infinite; } @keyframes blinker { 50% { opacity: 0; } }
body { background: #0b0f19; color: #fff; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; margin: 0; } body { background: #0b0f19; color: #fff; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; margin: 0; }
header { background: #1a202c; padding: 10px 20px; border-bottom: 2px solid #2d3545; display: flex; justify-content: space-between; align-items: center; } header { background: #1a202c; padding: 10px 20px; border-bottom: 2px solid #2d3545; display: flex; justify-content: space-between; align-items: center; }
.container { padding: 40px; display: flex; flex-direction: column; align-items: center; } .container { padding: 40px; display: flex; flex-direction: column; align-items: center; }
@ -442,7 +459,7 @@ function getStatusColor($status, $type, $statuses_map, $object_types_map) {
$dotColor = 'rgba(255,255,255,0.05)'; $dotColor = 'rgba(255,255,255,0.05)';
if (isset($sector_data[$s][$p])) { $dotColor = getStatusColor($sector_data[$s][$p]['status'], $sector_data[$s][$p]['type'], $statuses_map, $object_types_map); } if (isset($sector_data[$s][$p])) { $dotColor = getStatusColor($sector_data[$s][$p]['status'], $sector_data[$s][$p]['type'], $statuses_map, $object_types_map); }
?> ?>
<div class="mini-dot" style="background-color: <?php echo $dotColor; ?>;"></div> <div class="mini-dot <?php echo isStatusBlinking($sector_data[$s][$p]['status'], $statuses_map) ? 'blink' : ''; ?>" style="background-color: <?php echo $dotColor; ?>;"></div>
<?php endfor; ?> <?php endfor; ?>
</div> </div>
<div style="font-size: 14px; font-weight: bold; margin-top: 5px;">SECTEUR <?php echo $s; ?></div> <div style="font-size: 14px; font-weight: bold; margin-top: 5px;">SECTEUR <?php echo $s; ?></div>
@ -494,7 +511,7 @@ function getStatusColor($status, $type, $statuses_map, $object_types_map) {
<?php if ($imageUrl): ?> <?php if ($imageUrl): ?>
<img src="<?php echo htmlspecialchars($imageUrl); ?>?v=<?php echo time(); ?>" class="object-image"> <img src="<?php echo htmlspecialchars($imageUrl); ?>?v=<?php echo time(); ?>" class="object-image">
<?php else: ?> <?php else: ?>
<i class="fa-solid <?php echo $icon; ?>" style="color: <?php echo $color; ?>;"></i> <i class="fa-solid <?php echo $icon; ?> <?php echo isStatusBlinking($obj['status'], $statuses_map) ? 'blink' : ''; ?>" style="color: <?php echo $color; ?>;"></i>
<?php endif; ?> <?php endif; ?>
</div> </div>
<span class="object-name"><?php echo htmlspecialchars($obj['name']); ?></span> <span class="object-name"><?php echo htmlspecialchars($obj['name']); ?></span>

View File

@ -139,7 +139,19 @@ if ($view === 'sector') {
} }
function getStatusColor($status, $statuses_map) { function getStatusColor($status, $statuses_map) {
function isStatusBlinking($status, $statuses_map) {
return ($statuses_map[$status]["is_blinking"] ?? 0) == 1;
}
return $statuses_map[$status]['color'] ?? 'rgba(255,255,255,0.05)'; return $statuses_map[$status]['color'] ?? 'rgba(255,255,255,0.05)';
function isStatusBlinking($status, $statuses_map) {
return ($statuses_map[$status]["is_blinking"] ?? 0) == 1;
}
}
function isStatusBlinking($status, $statuses_map) {
return ($statuses_map[$status]["is_blinking"] ?? 0) == 1;
} }
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
@ -150,6 +162,7 @@ function getStatusColor($status, $statuses_map) {
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet"> <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet">
<link href="assets/css/custom.css?v=<?php echo time(); ?>" rel="stylesheet"> <link href="assets/css/custom.css?v=<?php echo time(); ?>" rel="stylesheet">
<style> <style>
.blink { animation: blinker 1s linear infinite; } @keyframes blinker { 50% { opacity: 0; } }
body { background: #000; color: #fff; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; margin: 0; } body { background: #000; color: #fff; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; margin: 0; }
#main-wrapper { display: flex; flex-direction: column; min-height: 100vh; } #main-wrapper { display: flex; flex-direction: column; min-height: 100vh; }
.user-auth-bar { display: flex; justify-content: flex-end; gap: 20px; font-size: 11px; color: #8c92a3; margin-bottom: 10px; } .user-auth-bar { display: flex; justify-content: flex-end; gap: 20px; font-size: 11px; color: #8c92a3; margin-bottom: 10px; }
@ -593,7 +606,7 @@ function getStatusColor($status, $statuses_map) {
<?php if ($imageUrl): ?> <?php if ($imageUrl): ?>
<img src="<?php echo htmlspecialchars($imageUrl); ?>?v=<?php echo time(); ?>" class="object-image"> <img src="<?php echo htmlspecialchars($imageUrl); ?>?v=<?php echo time(); ?>" class="object-image">
<?php else: ?> <?php else: ?>
<i class="fa-solid <?php echo $icon; ?>" style="color: <?php echo $color; ?>;"></i> <i class="fa-solid <?php echo $icon; ?> <?php echo isStatusBlinking($obj['status'], $statuses_map) ? 'blink' : ''; ?>" style="color: <?php echo $color; ?>;"></i>
<?php endif; ?> <?php endif; ?>
</div> </div>
<span class="object-name"><?php echo htmlspecialchars($obj['name']); ?></span> <span class="object-name"><?php echo htmlspecialchars($obj['name']); ?></span>
@ -612,7 +625,7 @@ function getStatusColor($status, $statuses_map) {
$dotColor = 'rgba(255,255,255,0.05)'; $dotColor = 'rgba(255,255,255,0.05)';
if (isset($sector_data[$s][$p])) { $dotColor = getStatusColor($sector_data[$s][$p]['status'], $statuses_map); } if (isset($sector_data[$s][$p])) { $dotColor = getStatusColor($sector_data[$s][$p]['status'], $statuses_map); }
?> ?>
<div class="mini-dot" style="background-color: <?php echo $dotColor; ?>;"></div> <div class="mini-dot <?php echo isStatusBlinking($sector_data[$s][$p]['status'], $statuses_map) ? 'blink' : ''; ?>" style="background-color: <?php echo $dotColor; ?>;"></div>
<?php endfor; ?> <?php endfor; ?>
</div> </div>
<div style="font-size: 10px; color: #88c0d0;">SECTEUR</div> <div style="font-size: 10px; color: #88c0d0;">SECTEUR</div>
@ -627,7 +640,7 @@ function getStatusColor($status, $statuses_map) {
<div class="legend"> <div class="legend">
<?php foreach($statuses_db as $s): ?> <?php foreach($statuses_db as $s): ?>
<div class="legend-item"><span class="dot" style="background: <?php echo $s['color']; ?>;"></span> <?php echo $s['name']; ?></div> <div class="legend-item"><span class="dot <?php echo ($s['is_blinking'] ?? 0) ? 'blink' : ''; ?>" style="background: <?php echo $s['color']; ?>;"></span> <?php echo $s['name']; ?></div>
<?php endforeach; ?> <?php endforeach; ?>
</div> </div>
</main> </main>
@ -696,6 +709,7 @@ function getStatusColor($status, $statuses_map) {
document.getElementById('m-planet-img').src = typeInfo.image_url || ''; document.getElementById('m-planet-img').src = typeInfo.image_url || '';
document.getElementById('m-planet-status').innerText = statusInfo.name || data.status; document.getElementById('m-planet-status').innerText = statusInfo.name || data.status;
document.getElementById('m-planet-status').style.background = statusInfo.color || 'rgba(255,255,255,0.1)'; document.getElementById('m-planet-status').style.background = statusInfo.color || 'rgba(255,255,255,0.1)';
document.getElementById('m-planet-status').classList.toggle('blink', statusInfo.is_blinking == 1);
document.getElementById('m-planet-faction').innerText = 'Faction dominante: ' + factionInfo.name; document.getElementById('m-planet-faction').innerText = 'Faction dominante: ' + factionInfo.name;
document.getElementById('m-planet-faction').style.color = factionInfo.color || '#fff'; document.getElementById('m-planet-faction').style.color = factionInfo.color || '#fff';