This commit is contained in:
2026-04-21 16:49:12 +03:00
parent c4faace06a
commit f62c48ccc3

View File

@@ -999,94 +999,37 @@ data-role="{{ p.position_full or p.position or '' }}"
</div> </div>
<script> <script>
(function () { window.MATCH_DATA = {
const matchId = window.MATCH_DATA?.matchId; teamNames: {
const sessionToken = window.MATCH_DATA?.sessionToken; home: {{ session[14] | tojson }},
const teamLogos = window.MATCH_DATA?.teamLogos || {}; away: {{ session[17] | tojson }}
},
teamLogos: {
home: {{ session[15] | tojson }},
away: {{ session[18] | tojson }}
},
sessionToken: {{ session[3] | tojson }},
matchId: {{ session[1] | tojson }},
if (!matchId || !sessionToken) { homeFormations: {{ home_formations | tojson }},
return; awayFormations: {{ away_formations | tojson }},
}
function formatCoachName(rawName) { homeStarting: {{ lineups.home_starting | tojson }},
const parts = String(rawName || "").trim().split(/\s+/).filter(Boolean); awayStarting: {{ lineups.away_starting | tojson }},
if (parts.length >= 2) { homeBench: {{ lineups.home_bench | tojson }},
return `${parts[1]} ${parts[0]}`; awayBench: {{ lineups.away_bench | tojson }},
}
return String(rawName || "").trim();
}
function formatPlayerName(firstName, lastName, fallbackName) { homeCoaches: {{ coaches.home | tojson }},
const result = `${String(firstName || "").trim()} ${String(lastName || "").trim()}`.trim(); awayCoaches: {{ coaches.away | tojson }},
return result || String(fallbackName || "").trim();
}
async function sendNeutralPersonTitle(name, role, logoUrl) { referees: {{ referees | tojson }},
const inputName = "ИГРОК - НЕЙТРАЛЬНЫЙ"; refereePool: {{ referee_pool | tojson }},
const commands = [ homeSquadPool: [],
`/api/?Function=SetText&Input=${encodeURIComponent(inputName)}&SelectedName=${encodeURIComponent("Тренер.Text")}&Value=${encodeURIComponent(name || "")}`, awaySquadPool: [],
`/api/?Function=SetText&Input=${encodeURIComponent(inputName)}&SelectedName=${encodeURIComponent("Должность.Text")}&Value=${encodeURIComponent(role || "")}`, homeCoachPool: [],
`/api/?Function=SetImage&Input=${encodeURIComponent(inputName)}&SelectedName=${encodeURIComponent("Лого.Source")}&Value=${encodeURIComponent(logoUrl || "")}`, awayCoachPool: []
`/api/?Function=PreviewInput&Input=${encodeURIComponent(inputName)}` };
];
try {
const response = await fetch("/api/vmix/publish-command", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Accept": "application/json",
"X-Requested-With": "XMLHttpRequest"
},
credentials: "same-origin",
body: JSON.stringify({
match_id: matchId,
session_token: sessionToken,
commands,
meta: {
source: "person_click",
title_input: inputName,
person_name: name,
person_role: role,
logo_url: logoUrl
}
})
});
if (!response.ok) {
console.error("Ошибка отправки титра в vMix:", response.status);
}
} catch (error) {
console.error("Не удалось отправить титр в vMix:", error);
}
}
document.addEventListener("click", function (event) {
const trigger = event.target.closest(".vmix-person-trigger");
if (!trigger) return;
const personType = String(trigger.dataset.vmixPersonType || "").trim();
const side = String(trigger.dataset.side || "").trim();
const rawName = String(trigger.dataset.name || "").trim();
const firstName = String(trigger.dataset.firstName || "").trim();
const lastName = String(trigger.dataset.lastName || "").trim();
const role = String(trigger.dataset.role || "").trim();
const logoUrl = side === "away" ? teamLogos.away : teamLogos.home;
let formattedName = "";
if (personType === "coach") {
formattedName = formatCoachName(rawName);
} else {
formattedName = formatPlayerName(firstName, lastName, rawName);
}
if (!formattedName) return;
sendNeutralPersonTitle(formattedName, role, logoUrl);
});
})();
</script> </script>
<div class="formation-modal" id="formationAssignModal"> <div class="formation-modal" id="formationAssignModal">
<div <div
@@ -1316,16 +1259,19 @@ data-role="{{ p.position_full or p.position or '' }}"
return; return;
} }
function swapNameParts(rawName) { function formatCoachName(rawName) {
const parts = String(rawName || "").trim().split(/\s+/).filter(Boolean); const parts = String(rawName || "").trim().split(/\s+/).filter(Boolean);
if (parts.length >= 2) { if (parts.length >= 2) {
return `${parts[1]} ${parts[0]}`; return `${parts[1]} ${parts[0]}`;
} }
return String(rawName || "").trim(); return String(rawName || "").trim();
} }
function formatPlayerName(firstName, lastName, fallbackName) {
const result = `${String(firstName || "").trim()} ${String(lastName || "").trim()}`.trim();
return result || String(fallbackName || "").trim();
}
async function sendNeutralPersonTitle(name, role, logoUrl) { async function sendNeutralPersonTitle(name, role, logoUrl) {
const inputName = "ИГРОК - НЕЙТРАЛЬНЫЙ"; const inputName = "ИГРОК - НЕЙТРАЛЬНЫЙ";
@@ -1371,20 +1317,28 @@ data-role="{{ p.position_full or p.position or '' }}"
const trigger = event.target.closest(".vmix-person-trigger"); const trigger = event.target.closest(".vmix-person-trigger");
if (!trigger) return; if (!trigger) return;
const personType = String(trigger.dataset.vmixPersonType || "").trim();
const side = String(trigger.dataset.side || "").trim(); const side = String(trigger.dataset.side || "").trim();
const rawName = String(trigger.dataset.name || "").trim(); const rawName = String(trigger.dataset.name || "").trim();
const firstName = String(trigger.dataset.firstName || "").trim();
const lastName = String(trigger.dataset.lastName || "").trim();
const role = String(trigger.dataset.role || "").trim(); const role = String(trigger.dataset.role || "").trim();
const logoUrl = side === "away" ? teamLogos.away : teamLogos.home; const logoUrl = side === "away" ? teamLogos.away : teamLogos.home;
if (!rawName) return; let formattedName = "";
const formattedName = rawName; if (personType === "coach") {
formattedName = formatCoachName(rawName);
} else {
formattedName = formatPlayerName(firstName, lastName, rawName);
}
if (!formattedName) return;
sendNeutralPersonTitle(formattedName, role, logoUrl); sendNeutralPersonTitle(formattedName, role, logoUrl);
}); });
})(); })();
</script> </script>
<script src="/static/script.js"></script> <script src="/static/script.js"></script>
<div id="matrixLoader" class="matrix-loader" aria-hidden="true"> <div id="matrixLoader" class="matrix-loader" aria-hidden="true">
<canvas id="matrixCanvas" class="matrix-canvas"></canvas> <canvas id="matrixCanvas" class="matrix-canvas"></canvas>