Improve featured servers layout with Discord integration

- Add Discord button to server cards when discord link is present in API data
- Remove HF2P Servers section to use full width for featured servers
- Increase server card size (300x180px banner, larger fonts and spacing)
- Simplify layout from 2-column grid to single full-width container
- Discord button opens external browser with server invite link
This commit is contained in:
AMIAY
2026-02-01 18:01:58 +01:00
parent b1d01a2f34
commit d5da9ecb6d
3 changed files with 92 additions and 63 deletions

View File

@@ -217,8 +217,7 @@
</div>
<div id="featured-page" class="page">
<div class="featured-layout">
<div class="featured-left">
<div class="featured-container">
<div class="featured-header">
<h2 class="featured-title">
<i class="fas fa-star mr-2"></i>
@@ -231,21 +230,6 @@
</div>
</div>
</div>
<div class="featured-right">
<div class="featured-header">
<h2 class="featured-title">
<i class="fas fa-server mr-2"></i>
<span>HF2P SERVERS</span>
</h2>
</div>
<div id="myServersList" class="featured-list">
<div class="loading-spinner">
<i class="fas fa-spinner fa-spin fa-2x"></i>
</div>
</div>
</div>
</div>
</div>
<div id="mods-page" class="page">

View File

@@ -15,7 +15,6 @@ function escapeHtml(text) {
*/
async function loadFeaturedServers() {
const featuredContainer = document.getElementById('featuredServersList');
const myServersContainer = document.getElementById('myServersList');
try {
console.log('[FeaturedServers] Fetching from', FEATURED_SERVERS_API);
@@ -54,6 +53,15 @@ async function loadFeaturedServers() {
const escapedName = escapeHtml(server.Name || 'Unknown Server');
const escapedAddress = escapeHtml(server.Address || '');
const bannerUrl = server.img_Banner || 'https://via.placeholder.com/400x240/1e293b/ffffff?text=Server+Banner';
const discordUrl = server.discord || '';
// Build Discord button HTML if discord link exists
const discordButton = discordUrl ? `
<button class="server-discord-btn" onclick="openServerDiscord('${discordUrl}')">
<i class="fab fa-discord"></i>
<span>Discord</span>
</button>
` : '';
return `
<div class="featured-server-card">
@@ -67,10 +75,13 @@ async function loadFeaturedServers() {
<h3 class="featured-server-name">${escapedName}</h3>
<div class="featured-server-address">
<span class="server-address-text">${escapedAddress}</span>
<div class="server-action-buttons">
<button class="copy-address-btn" onclick="copyServerAddress('${escapedAddress}', this)">
<i class="fas fa-copy"></i>
<span>Copy</span>
</button>
${discordButton}
</div>
</div>
</div>
</div>
@@ -80,13 +91,6 @@ async function loadFeaturedServers() {
featuredContainer.innerHTML = featuredHTML;
}
// Show "Coming Soon" for my servers
myServersContainer.innerHTML = `
<div style="display: flex; align-items: center; justify-content: center; height: 100%; color: #94a3b8; font-size: 1.2rem;">
<p>Coming Soon</p>
</div>
`;
} catch (error) {
console.error('[FeaturedServers] Error loading servers:', error);
featuredContainer.innerHTML = `
@@ -96,11 +100,6 @@ async function loadFeaturedServers() {
<p style="font-size: 0.9rem; color: #64748b;">${error.message}</p>
</div>
`;
myServersContainer.innerHTML = `
<div style="display: flex; align-items: center; justify-content: center; height: 100%; color: #94a3b8; font-size: 1.2rem;">
<p>Coming Soon</p>
</div>
`;
}
}
@@ -151,6 +150,22 @@ async function copyServerAddress(address, button) {
}
}
/**
* Open server Discord in external browser
*/
function openServerDiscord(discordUrl) {
try {
console.log('[FeaturedServers] Opening Discord:', discordUrl);
if (window.electronAPI && window.electronAPI.openExternal) {
window.electronAPI.openExternal(discordUrl);
} else {
window.open(discordUrl, '_blank');
}
} catch (error) {
console.error('[FeaturedServers] Failed to open Discord link:', error);
}
}
// Load featured servers when the featured page becomes visible
document.addEventListener('DOMContentLoaded', () => {
const observer = new MutationObserver((mutations) => {

View File

@@ -1005,20 +1005,12 @@ body {
}
/* Featured Servers Styles */
.featured-layout {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 2rem;
height: calc(100vh - 180px);
overflow: hidden;
}
.featured-left,
.featured-right {
.featured-container {
display: flex;
flex-direction: column;
height: calc(100vh - 180px);
overflow: hidden;
min-height: 0;
padding: 0 2rem;
}
.featured-header {
@@ -1074,8 +1066,8 @@ body {
transition: all 0.3s ease;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
display: grid;
grid-template-columns: 200px 1fr;
min-height: 120px;
grid-template-columns: 300px 1fr;
min-height: 180px;
flex-shrink: 0;
}
@@ -1086,24 +1078,24 @@ body {
}
.featured-server-banner {
width: 200px;
width: 300px;
height: 100%;
min-height: 120px;
min-height: 180px;
object-fit: cover;
background: linear-gradient(135deg, #1e293b, #334155);
flex-shrink: 0;
}
.featured-server-content {
padding: 1.25rem;
padding: 1.5rem 2rem;
display: flex;
flex-direction: column;
justify-content: center;
gap: 0.75rem;
gap: 1rem;
}
.featured-server-name {
font-size: 1.15rem;
font-size: 1.35rem;
font-weight: 600;
color: white;
line-height: 1.4;
@@ -1118,27 +1110,40 @@ body {
padding: 0.625rem 1rem;
border-radius: 6px;
border: 1px solid rgba(255, 255, 255, 0.1);
gap: 1rem;
}
.server-address-text {
font-family: 'JetBrains Mono', monospace;
color: #94a3b8;
font-size: 0.9rem;
flex: 1;
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.server-action-buttons {
display: flex;
align-items: center;
gap: 0.5rem;
flex-shrink: 0;
}
.copy-address-btn {
background: linear-gradient(135deg, #9333ea, #7c3aed);
color: white;
border: none;
padding: 0.5rem 1rem;
padding: 0.5rem 0.875rem;
border-radius: 6px;
cursor: pointer;
font-size: 0.875rem;
font-size: 0.8125rem;
font-weight: 500;
transition: all 0.2s ease;
display: flex;
align-items: center;
gap: 0.5rem;
gap: 0.375rem;
white-space: nowrap;
}
@@ -1155,6 +1160,31 @@ body {
background: linear-gradient(135deg, #10b981, #059669);
}
.server-discord-btn {
background: linear-gradient(135deg, #5865F2, #4752C4);
color: white;
border: none;
padding: 0.5rem 0.875rem;
border-radius: 6px;
cursor: pointer;
font-size: 0.8125rem;
font-weight: 500;
transition: all 0.2s ease;
display: flex;
align-items: center;
gap: 0.375rem;
white-space: nowrap;
}
.server-discord-btn:hover {
background: linear-gradient(135deg, #4752C4, #3c45a5);
transform: scale(1.05);
}
.server-discord-btn:active {
transform: scale(0.95);
}
.loading-spinner {
display: flex;
flex-direction: column;