diff --git a/frontend/assets/css/historico.css b/frontend/assets/css/historico.css index c4b24f7..950c54d 100644 --- a/frontend/assets/css/historico.css +++ b/frontend/assets/css/historico.css @@ -766,3 +766,43 @@ min-width: 540px; } } + +.historical-match-card--clean { + gap: 12px; +} + +.historical-match-card__top--clean { + display: block; +} + +.historical-match-meta--clean { + grid-template-columns: minmax(180px, 1.3fr) minmax(120px, 0.8fr) minmax(110px, 0.7fr) minmax(110px, 0.7fr) auto; + align-items: end; +} + +.historical-match-card__actions-cell { + display: flex; + align-items: end; + justify-content: flex-end; + min-width: 250px; +} + +.historical-match-card__actions-cell .historical-match-card__actions { + align-items: center; + justify-content: flex-end; +} + +@media (max-width: 920px) { + .historical-match-meta--clean { + grid-template-columns: repeat(auto-fit, minmax(min(100%, 180px), 1fr)); + } + + .historical-match-card__actions-cell { + justify-content: flex-start; + min-width: 0; + } + + .historical-match-card__actions-cell .historical-match-card__actions { + justify-content: flex-start; + } +} diff --git a/frontend/assets/js/historico-recent-live.js b/frontend/assets/js/historico-recent-live.js index c382fbe..fe3c1cb 100644 --- a/frontend/assets/js/historico-recent-live.js +++ b/frontend/assets/js/historico-recent-live.js @@ -78,33 +78,86 @@ } function renderDynamicRecentMatchCard(item) { - if (typeof window.renderRecentMatchCard === "function") { - return window.renderRecentMatchCard(item); - } const mapName = item?.map?.pretty_name || item?.map?.name || "Mapa no disponible"; const serverName = item?.server?.name || "Servidor no disponible"; const closedAt = item?.closed_at || item?.ended_at || item?.started_at; + const detailUrl = buildDynamicInternalMatchDetailUrl(item); + const externalUrl = normalizeDynamicExternalMatchUrl(item?.match_url); + + const actions = [ + `${escapeDynamicHtml(formatDynamicResultLabel(item?.result))}`, + detailUrl + ? `Ver detalles` + : "", + externalUrl + ? `Ver partida` + : "", + ].join(""); + return ` -
-
-
-

Partida ${escapeDynamicHtml(item?.match_id || "sin id")}

-

${escapeDynamicHtml(mapName)}

-
-
- ${escapeDynamicHtml(formatDynamicScore(item?.result))} -
+
+
+

${escapeDynamicHtml(mapName)}

-
-

Servidor

${escapeDynamicHtml(serverName)}
-

Cierre

${escapeDynamicHtml(formatDynamicTimestamp(closedAt))}
-

Jugadores

${escapeDynamicHtml(formatDynamicNumber(item?.player_count))}
-

Marcador

${escapeDynamicHtml(formatDynamicScore(item?.result))}
+
+
+

Servidor

+ ${escapeDynamicHtml(serverName)} +
+
+

Cierre

+ ${escapeDynamicHtml(formatDynamicTimestamp(closedAt))} +
+
+

Jugadores

+ ${escapeDynamicHtml(formatDynamicNumber(item?.player_count))} +
+
+

Marcador

+ ${escapeDynamicHtml(formatDynamicScore(item?.result))} +
+
+
+ ${actions} +
+
`; } + function formatDynamicResultLabel(result) { + const winner = String(result?.winner || "").toLowerCase(); + if (winner === "allies" || winner === "allied") { + return "Victoria aliada"; + } + if (winner === "axis") { + return "Victoria axis"; + } + return "Empate"; + } + + function buildDynamicInternalMatchDetailUrl(item) { + const serverSlug = item?.server?.slug; + const matchId = item?.internal_detail_match_id || item?.match_id; + if (!serverSlug || matchId === undefined || matchId === null) { + return ""; + } + return `./historico-partida.html?server=${encodeURIComponent(String(serverSlug))}&match=${encodeURIComponent(String(matchId))}`; + } + + function normalizeDynamicExternalMatchUrl(value) { + if (typeof value !== "string" || !value.trim()) { + return ""; + } + try { + const url = new URL(value.trim()); + return ["http:", "https:"].includes(url.protocol) ? url.href : ""; + } catch (error) { + return ""; + } + } + function buildDynamicRecentMeta(data, items) { const newest = items[0]?.closed_at || items[0]?.ended_at || items[0]?.started_at; const source = data.selected_source || data.source || "rcon";