diff --git a/frontend/assets/js/historico-partida.js b/frontend/assets/js/historico-partida.js index ae353dc..616d4cb 100644 --- a/frontend/assets/js/historico-partida.js +++ b/frontend/assets/js/historico-partida.js @@ -85,6 +85,7 @@ function renderScoreboardDetail(item, { mapName, serverName }) { const winner = String(item.winner || result.winner || "").toLowerCase(); const isAlliedWinner = winner === "allies" || winner === "allied"; const isAxisWinner = winner === "axis"; + const factions = resolveMatchFactions(item, mapName); const metadata = [ ["Servidor", serverName], ["Mapa", mapName], @@ -97,26 +98,55 @@ function renderScoreboardDetail(item, { mapName, serverName }) { } return ` -
-
- Bando aliado - Aliados - ${isAlliedWinner ? "Ganador" : ""} +
+
+ ${renderScoreboardSide({ + sideClass: "historical-scoreboard-side--allied", + emblem: factions.allied.emblem, + sideLabel: "Aliados", + factionLabel: factions.allied.label, + isWinner: isAlliedWinner, + })} +
+ ${escapeHtml(formatDuration(item.duration_seconds))} + ${escapeHtml(alliedScore)} : ${escapeHtml(axisScore)} + ${escapeHtml(mapName)} + ${escapeHtml(formatGameMode(item.game_mode || item.gamestate?.game_mode))} + ${escapeHtml(formatWinner(winner))} +
+ ${renderScoreboardSide({ + sideClass: "historical-scoreboard-side--axis", + emblem: factions.axis.emblem, + sideLabel: "Eje", + factionLabel: factions.axis.label, + isWinner: isAxisWinner, + })}
-
- Marcador - ${escapeHtml(alliedScore)} - ${escapeHtml(axisScore)} - ${escapeHtml(formatWinner(winner))} -
-
- Bando eje - Eje - ${isAxisWinner ? "Ganador" : ""} +
+ ${metadata.map(([label, value]) => renderCompactMeta(label, value)).join("")}
-
- ${metadata.map(([label, value]) => renderCompactMeta(label, value)).join("")} -
+ `; +} + +function renderScoreboardSide({ sideClass, emblem, sideLabel, factionLabel, isWinner }) { + return ` +
+ ${escapeHtml(factionLabel)} +
+ ${escapeHtml(sideLabel)} + ${escapeHtml(factionLabel)} + ${isWinner ? "Ganador" : ""} +
+
`; } @@ -197,6 +227,60 @@ function renderActions(item, actionsNode) { actionsNode.hidden = false; } +function resolveMatchFactions(item, mapName) { + const normalizedMap = normalizeLookupText( + `${item.map?.name || ""} ${item.map?.pretty_name || ""} ${mapName || ""}`, + ); + + if (/(kursk|stalingrad|kharkov)/.test(normalizedMap)) { + return { + allied: { + label: "Ejercito sovietico", + emblem: "./assets/img/factions/soviets.svg", + }, + axis: { + label: "Ejercito aleman", + emblem: "./assets/img/factions/germany.svg", + }, + }; + } + + if (/(driel|elalamein|el alamein|tobruk)/.test(normalizedMap)) { + return { + allied: { + label: "Fuerzas britanicas", + emblem: "./assets/img/factions/britain.svg", + }, + axis: { + label: normalizedMap.includes("tobruk") || normalizedMap.includes("elalamein") + ? "Afrika Korps" + : "Ejercito aleman", + emblem: "./assets/img/factions/germany.svg", + }, + }; + } + + return { + allied: { + label: "Fuerzas estadounidenses", + emblem: "./assets/img/factions/us.svg", + }, + axis: { + label: "Ejercito aleman", + emblem: "./assets/img/factions/germany.svg", + }, + }; +} + +function normalizeLookupText(value) { + return String(value || "") + .normalize("NFD") + .replace(/[\u0300-\u036f]/g, "") + .toLowerCase() + .replace(/[^a-z0-9]+/g, " ") + .trim(); +} + function formatDetailSubtitle(item) { if (item.capture_basis === "rcon-materialized-admin-log") { return "Partida RCON materializada";