feat: randomize community clans section
This commit is contained in:
@@ -790,6 +790,14 @@ h2 {
|
||||
background: linear-gradient(180deg, rgba(19, 24, 16, 0.82), rgba(10, 13, 9, 0.66));
|
||||
}
|
||||
|
||||
.clan-card__logo--wide {
|
||||
padding-inline: 8px;
|
||||
}
|
||||
|
||||
.clan-card__logo--shield {
|
||||
padding-inline: 18px;
|
||||
}
|
||||
|
||||
.clan-card__logo img {
|
||||
width: auto;
|
||||
height: auto;
|
||||
@@ -798,6 +806,29 @@ h2 {
|
||||
object-fit: contain;
|
||||
}
|
||||
|
||||
.clan-card__logo-placeholder {
|
||||
width: 100%;
|
||||
min-height: 84px;
|
||||
display: grid;
|
||||
place-items: center;
|
||||
border: 1px dashed rgba(210, 182, 118, 0.22);
|
||||
border-radius: 14px;
|
||||
background:
|
||||
linear-gradient(180deg, rgba(28, 32, 24, 0.88), rgba(12, 15, 11, 0.7)),
|
||||
repeating-linear-gradient(
|
||||
135deg,
|
||||
rgba(255, 255, 255, 0.02) 0,
|
||||
rgba(255, 255, 255, 0.02) 10px,
|
||||
transparent 10px,
|
||||
transparent 20px
|
||||
);
|
||||
color: var(--accent-warm);
|
||||
font-size: 0.88rem;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.18em;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.clan-card__copy {
|
||||
display: grid;
|
||||
gap: 8px;
|
||||
@@ -831,6 +862,14 @@ h2 {
|
||||
min-width: 180px;
|
||||
}
|
||||
|
||||
.server-action-link--disabled {
|
||||
border-color: rgba(159, 168, 141, 0.18);
|
||||
background: linear-gradient(180deg, rgba(42, 46, 39, 0.5), rgba(19, 22, 17, 0.7));
|
||||
color: var(--muted);
|
||||
cursor: default;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
@media (max-width: 1120px) {
|
||||
.hero__brand {
|
||||
grid-template-columns: 1fr;
|
||||
@@ -947,6 +986,10 @@ h2 {
|
||||
justify-items: start;
|
||||
}
|
||||
|
||||
.clan-card__logo {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.clan-card__link {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
BIN
frontend/assets/img/clans/250hispania-shield.png
Normal file
BIN
frontend/assets/img/clans/250hispania-shield.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 8.2 KiB |
BIN
frontend/assets/img/clans/250hispania.png
Normal file
BIN
frontend/assets/img/clans/250hispania.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 18 KiB |
BIN
frontend/assets/img/clans/7dv.png
Normal file
BIN
frontend/assets/img/clans/7dv.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.0 MiB |
BIN
frontend/assets/img/clans/bxb.png
Normal file
BIN
frontend/assets/img/clans/bxb.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 362 KiB |
BIN
frontend/assets/img/clans/la129.png
Normal file
BIN
frontend/assets/img/clans/la129.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 80 KiB |
BIN
frontend/assets/img/clans/lcm.png
Normal file
BIN
frontend/assets/img/clans/lcm.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 8.6 MiB |
@@ -6,13 +6,70 @@ const SERVER_HISTORY_URLS = Object.freeze({
|
||||
});
|
||||
const COMMUNITY_CLANS = Object.freeze([
|
||||
{
|
||||
name: "Comunidad Hispana HLL Vietnam",
|
||||
badge: "Comunidad anfitriona",
|
||||
name: "LCM",
|
||||
badge: "Comunidad aliada",
|
||||
description:
|
||||
"Punto principal de reunion para escuadras, anuncios y acceso directo al Discord del proyecto.",
|
||||
logoSrc: "./assets/img/logo.png",
|
||||
logoAlt: "Logo de Comunidad Hispana HLL Vietnam",
|
||||
discordUrl: "https://discord.com/invite/PedEqZ2Xsa",
|
||||
"Clan visible dentro de la red comunitaria hispana con acceso confirmado a Discord.",
|
||||
logoSrc: "./assets/img/clans/lcm.png",
|
||||
logoAlt: "Logo de LCM",
|
||||
logoClassName: "",
|
||||
discordUrl: "https://discord.gg/9F9S353QZv",
|
||||
discordLabel: "Abrir Discord",
|
||||
},
|
||||
{
|
||||
name: "La 129",
|
||||
badge: "Discord pendiente",
|
||||
description:
|
||||
"Presencia confirmada para la seccion comunitaria mientras se publica su acceso definitivo.",
|
||||
logoSrc: "./assets/img/clans/la129.png",
|
||||
logoAlt: "Logo de La 129",
|
||||
logoClassName: "clan-card__logo--wide",
|
||||
discordUrl: "",
|
||||
discordLabel: "Proximamente",
|
||||
},
|
||||
{
|
||||
name: "250 Hispania",
|
||||
badge: "Comunidad aliada",
|
||||
description:
|
||||
"Entrada mostrada con su emblema principal y acceso confirmado al Discord compartido.",
|
||||
logoSrc: "./assets/img/clans/250hispania-shield.png",
|
||||
logoAlt: "Escudo de 250 Hispania",
|
||||
logoClassName: "clan-card__logo--shield",
|
||||
discordUrl: "https://discord.gg/3E62Yb6Aw3",
|
||||
discordLabel: "Abrir Discord",
|
||||
},
|
||||
{
|
||||
name: "H9H",
|
||||
badge: "Logo pendiente",
|
||||
description:
|
||||
"Comunidad incluida en la rotacion mientras se incorpora su identidad visual final.",
|
||||
logoSrc: "",
|
||||
logoAlt: "",
|
||||
logoClassName: "",
|
||||
discordUrl: "https://discord.gg/tYnXK7MQjB",
|
||||
discordLabel: "Abrir Discord",
|
||||
placeholderLabel: "H9H",
|
||||
},
|
||||
{
|
||||
name: "BxB",
|
||||
badge: "Discord pendiente",
|
||||
description:
|
||||
"Clan incorporado a la red visible con su emblema actual y enlace aun por confirmar.",
|
||||
logoSrc: "./assets/img/clans/bxb.png",
|
||||
logoAlt: "Logo de BxB",
|
||||
logoClassName: "",
|
||||
discordUrl: "",
|
||||
discordLabel: "Proximamente",
|
||||
},
|
||||
{
|
||||
name: "7dv",
|
||||
badge: "Comunidad aliada",
|
||||
description:
|
||||
"Entrada activa dentro de la seccion con acceso disponible a su Discord comunitario.",
|
||||
logoSrc: "./assets/img/clans/7dv.png",
|
||||
logoAlt: "Logo de 7dv",
|
||||
logoClassName: "",
|
||||
discordUrl: "https://discord.gg/3sxNQZwrg6",
|
||||
discordLabel: "Abrir Discord",
|
||||
},
|
||||
]);
|
||||
@@ -246,37 +303,78 @@ function hydrateCommunityClans(listNode) {
|
||||
return;
|
||||
}
|
||||
|
||||
listNode.innerHTML = COMMUNITY_CLANS.map((clan) => renderCommunityClanCard(clan)).join("");
|
||||
listNode.innerHTML = shuffleItems(COMMUNITY_CLANS)
|
||||
.map((clan) => renderCommunityClanCard(clan))
|
||||
.join("");
|
||||
}
|
||||
|
||||
function renderCommunityClanCard(clan) {
|
||||
const logoMarkup = renderClanLogo(clan);
|
||||
const discordMarkup = renderClanDiscordLink(clan);
|
||||
|
||||
return `
|
||||
<article class="clan-card">
|
||||
<div class="clan-card__brand">
|
||||
<div class="clan-card__logo">
|
||||
<img
|
||||
src="${escapeHtml(clan.logoSrc)}"
|
||||
alt="${escapeHtml(clan.logoAlt)}"
|
||||
width="1024"
|
||||
height="1044"
|
||||
decoding="async"
|
||||
/>
|
||||
</div>
|
||||
${logoMarkup}
|
||||
<div class="clan-card__copy">
|
||||
<p class="clan-card__eyebrow">${escapeHtml(clan.badge)}</p>
|
||||
<h3>${escapeHtml(clan.name)}</h3>
|
||||
<p>${escapeHtml(clan.description)}</p>
|
||||
</div>
|
||||
</div>
|
||||
<a
|
||||
class="server-action-link clan-card__link"
|
||||
href="${escapeHtml(clan.discordUrl)}"
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
${discordMarkup}
|
||||
</article>
|
||||
`;
|
||||
}
|
||||
|
||||
function renderClanLogo(clan) {
|
||||
const logoClassNames = ["clan-card__logo"];
|
||||
if (clan.logoClassName) {
|
||||
logoClassNames.push(clan.logoClassName);
|
||||
}
|
||||
|
||||
if (clan.logoSrc) {
|
||||
return `
|
||||
<div class="${escapeHtml(logoClassNames.join(" "))}">
|
||||
<img
|
||||
src="${escapeHtml(clan.logoSrc)}"
|
||||
alt="${escapeHtml(clan.logoAlt)}"
|
||||
decoding="async"
|
||||
/>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
|
||||
return `
|
||||
<div class="${escapeHtml(logoClassNames.join(" "))}">
|
||||
<div class="clan-card__logo-placeholder" aria-label="Logo pendiente de ${escapeHtml(clan.name)}">
|
||||
${escapeHtml(clan.placeholderLabel || clan.name)}
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
|
||||
function renderClanDiscordLink(clan) {
|
||||
if (!clan.discordUrl) {
|
||||
return `
|
||||
<span
|
||||
class="server-action-link server-action-link--disabled clan-card__link"
|
||||
aria-disabled="true"
|
||||
>
|
||||
${escapeHtml(clan.discordLabel)}
|
||||
</a>
|
||||
</article>
|
||||
</span>
|
||||
`;
|
||||
}
|
||||
|
||||
return `
|
||||
<a
|
||||
class="server-action-link clan-card__link"
|
||||
href="${escapeHtml(clan.discordUrl)}"
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
>
|
||||
${escapeHtml(clan.discordLabel)}
|
||||
</a>
|
||||
`;
|
||||
}
|
||||
|
||||
@@ -384,6 +482,19 @@ async function fetchJson(url) {
|
||||
return response.json();
|
||||
}
|
||||
|
||||
function shuffleItems(items) {
|
||||
const shuffledItems = [...items];
|
||||
for (let currentIndex = shuffledItems.length - 1; currentIndex > 0; currentIndex -= 1) {
|
||||
const randomIndex = Math.floor(Math.random() * (currentIndex + 1));
|
||||
[shuffledItems[currentIndex], shuffledItems[randomIndex]] = [
|
||||
shuffledItems[randomIndex],
|
||||
shuffledItems[currentIndex],
|
||||
];
|
||||
}
|
||||
|
||||
return shuffledItems;
|
||||
}
|
||||
|
||||
function escapeHtml(value) {
|
||||
return String(value)
|
||||
.replaceAll("&", "&")
|
||||
|
||||
@@ -172,40 +172,10 @@
|
||||
<h2 id="clans-title">Red de comunidad</h2>
|
||||
</div>
|
||||
<p class="panel__intro">
|
||||
Espacio para mantener visibles las comunidades y clanes con los que
|
||||
compartimos actividad, eventos o coordinacion en Discord.
|
||||
Clanes y comunidades activas de la escena hispana con presencia
|
||||
confirmada o en preparacion para esta red compartida.
|
||||
</p>
|
||||
<div class="clans-grid" id="community-clans-list">
|
||||
<article class="clan-card">
|
||||
<div class="clan-card__brand">
|
||||
<div class="clan-card__logo">
|
||||
<img
|
||||
src="./assets/img/logo.png"
|
||||
alt="Logo de Comunidad Hispana HLL Vietnam"
|
||||
width="1024"
|
||||
height="1044"
|
||||
decoding="async"
|
||||
/>
|
||||
</div>
|
||||
<div class="clan-card__copy">
|
||||
<p class="clan-card__eyebrow">Comunidad anfitriona</p>
|
||||
<h3>Comunidad Hispana HLL Vietnam</h3>
|
||||
<p>
|
||||
Punto principal de reunion para escuadras, anuncios y acceso
|
||||
directo al Discord del proyecto.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<a
|
||||
class="server-action-link clan-card__link"
|
||||
href="https://discord.com/invite/PedEqZ2Xsa"
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
>
|
||||
Abrir Discord
|
||||
</a>
|
||||
</article>
|
||||
</div>
|
||||
<div class="clans-grid" id="community-clans-list"></div>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
Reference in New Issue
Block a user