тест2
This commit is contained in:
@@ -2037,12 +2037,14 @@ function renderLineupRow(row) {
|
|||||||
const side = row.dataset.side;
|
const side = row.dataset.side;
|
||||||
const role = row.dataset.role;
|
const role = row.dataset.role;
|
||||||
const player = getRowPlayer(row);
|
const player = getRowPlayer(row);
|
||||||
|
|
||||||
const fullName = (player.name || `${player.lastName || ""} ${player.firstName || ""}`).trim();
|
const fullName = (player.name || `${player.lastName || ""} ${player.firstName || ""}`).trim();
|
||||||
const displayName = buildPersonDisplayName(
|
const displayName = buildPersonDisplayName(
|
||||||
player.firstName,
|
player.firstName,
|
||||||
player.lastName,
|
player.lastName,
|
||||||
player.name || fullName
|
player.name || fullName
|
||||||
);
|
);
|
||||||
|
|
||||||
const gkBadge = isGoalkeeperPosition(player.position) ? '<span class="gk-badge">ВР</span>' : '';
|
const gkBadge = isGoalkeeperPosition(player.position) ? '<span class="gk-badge">ВР</span>' : '';
|
||||||
const captainBadge = player.isCaptain ? '<span class="captain-badge">К</span>' : '';
|
const captainBadge = player.isCaptain ? '<span class="captain-badge">К</span>' : '';
|
||||||
const disciplineBadge = player.disciplineType === "yellow_red"
|
const disciplineBadge = player.disciplineType === "yellow_red"
|
||||||
@@ -2050,7 +2052,11 @@ function renderLineupRow(row) {
|
|||||||
: (player.disciplineType === "red"
|
: (player.disciplineType === "red"
|
||||||
? '<span class="discipline-badge-red">КК</span>'
|
? '<span class="discipline-badge-red">КК</span>'
|
||||||
: '');
|
: '');
|
||||||
const firstNameHtml = player.firstName ? `<span class="first-name"> ${escapeHtml(player.firstName)}</span>` : '';
|
|
||||||
|
const firstNameHtml = player.firstName
|
||||||
|
? `<span class="first-name"> ${escapeHtml(player.firstName)}</span>`
|
||||||
|
: '';
|
||||||
|
|
||||||
const idJs = JSON.stringify(player.id || player.number || "");
|
const idJs = JSON.stringify(player.id || player.number || "");
|
||||||
const nameJs = JSON.stringify(displayName);
|
const nameJs = JSON.stringify(displayName);
|
||||||
|
|
||||||
@@ -2084,19 +2090,31 @@ function renderLineupRow(row) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
row.innerHTML = `
|
row.innerHTML = `
|
||||||
<td class="num-cell">${escapeHtml(player.number)}</td>
|
<td class="num-cell">${escapeHtml(player.number || "")}</td>
|
||||||
<td class="player-cell">
|
<td class="player-cell" title="Показать титр игрока">
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
class="player-link-btn vmix-person-trigger"
|
||||||
|
data-vmix-person-type="player"
|
||||||
|
data-side="${escapeHtml(side)}"
|
||||||
|
data-name="${escapeHtml(displayName)}"
|
||||||
|
data-role="${escapeHtml(player.position || "")}"
|
||||||
|
>
|
||||||
<div class="player-inline">
|
<div class="player-inline">
|
||||||
<div class="player-inline-text">
|
<div class="player-inline-text">
|
||||||
<span class="last-name">${escapeHtml(player.lastName || player.name)}</span>${firstNameHtml}
|
<span class="last-name">${escapeHtml(player.lastName || player.name || "")}</span>${firstNameHtml}
|
||||||
</div>
|
</div>
|
||||||
<span class="badges">${gkBadge}${captainBadge}${disciplineBadge}</span>
|
<span class="badges">
|
||||||
|
${gkBadge}
|
||||||
|
${captainBadge}
|
||||||
|
${disciplineBadge}
|
||||||
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
</button>
|
||||||
</td>
|
</td>
|
||||||
<td class="actions-col">${actionsHtml}</td>
|
<td class="actions-col">${actionsHtml}</td>
|
||||||
`;
|
`;
|
||||||
}
|
}
|
||||||
|
|
||||||
function makeDraggable(el) {
|
function makeDraggable(el) {
|
||||||
let dragging = false;
|
let dragging = false;
|
||||||
|
|
||||||
@@ -3199,10 +3217,18 @@ function renderLiveCoachBlockForSide(side) {
|
|||||||
|
|
||||||
block.innerHTML = source.map(c => `
|
block.innerHTML = source.map(c => `
|
||||||
<div class="coach-line">
|
<div class="coach-line">
|
||||||
<div class="coach-left">
|
<button
|
||||||
|
type="button"
|
||||||
|
class="coach-left vmix-person-trigger player-link-btn coach-link-btn"
|
||||||
|
data-vmix-person-type="coach"
|
||||||
|
data-side="${escapeHtml(side)}"
|
||||||
|
data-name="${escapeHtml(c.coach_name || "")}"
|
||||||
|
data-role="${escapeHtml(c.role || "")}"
|
||||||
|
title="Показать титр тренера"
|
||||||
|
>
|
||||||
<span class="coach-name">${escapeHtml(c.coach_name || "")}</span>
|
<span class="coach-name">${escapeHtml(c.coach_name || "")}</span>
|
||||||
${c.role ? `<span class="coach-badge">${escapeHtml(c.role)}</span>` : ""}
|
${c.role ? `<span class="coach-badge">${escapeHtml(c.role)}</span>` : ""}
|
||||||
</div>
|
</button>
|
||||||
<div class="coach-actions">
|
<div class="coach-actions">
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
|
|||||||
@@ -1249,13 +1249,37 @@
|
|||||||
(function () {
|
(function () {
|
||||||
const matchId = window.MATCH_DATA?.matchId;
|
const matchId = window.MATCH_DATA?.matchId;
|
||||||
const sessionToken = window.MATCH_DATA?.sessionToken;
|
const sessionToken = window.MATCH_DATA?.sessionToken;
|
||||||
|
const teamLogos = window.MATCH_DATA?.teamLogos || {};
|
||||||
|
|
||||||
if (!matchId || !sessionToken) {
|
if (!matchId || !sessionToken) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function sendVmixPreviewInput(inputName) {
|
function formatCoachName(rawName) {
|
||||||
if (!inputName) return;
|
const parts = String(rawName || "").trim().split(/\s+/).filter(Boolean);
|
||||||
|
if (parts.length >= 2) {
|
||||||
|
return `${parts[1]} ${parts[0]}`;
|
||||||
|
}
|
||||||
|
return String(rawName || "").trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
function formatPlayerName(rawName) {
|
||||||
|
const parts = String(rawName || "").trim().split(/\s+/).filter(Boolean);
|
||||||
|
if (parts.length >= 2) {
|
||||||
|
return `${parts[1]} ${parts[0]}`;
|
||||||
|
}
|
||||||
|
return String(rawName || "").trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
async function sendNeutralPersonTitle(name, role, logoUrl) {
|
||||||
|
const inputName = "ИГРОК - НЕЙТРАЛЬНЫЙ";
|
||||||
|
|
||||||
|
const commands = [
|
||||||
|
`/api/?Function=SetText&Input=${encodeURIComponent(inputName)}&SelectedName=${encodeURIComponent("Тренер.Text")}&Value=${encodeURIComponent(name || "")}`,
|
||||||
|
`/api/?Function=SetText&Input=${encodeURIComponent(inputName)}&SelectedName=${encodeURIComponent("Должность.Text")}&Value=${encodeURIComponent(role || "")}`,
|
||||||
|
`/api/?Function=SetImage&Input=${encodeURIComponent(inputName)}&SelectedName=${encodeURIComponent("Лого.Source")}&Value=${encodeURIComponent(logoUrl || "")}`,
|
||||||
|
`/api/?Function=PreviewInput&Input=${encodeURIComponent(inputName)}`
|
||||||
|
];
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const response = await fetch("/api/vmix/publish-command", {
|
const response = await fetch("/api/vmix/publish-command", {
|
||||||
@@ -1269,30 +1293,42 @@
|
|||||||
body: JSON.stringify({
|
body: JSON.stringify({
|
||||||
match_id: matchId,
|
match_id: matchId,
|
||||||
session_token: sessionToken,
|
session_token: sessionToken,
|
||||||
commands: [
|
commands,
|
||||||
`/api/?Function=PreviewInput&Input=${encodeURIComponent(inputName)}`
|
|
||||||
],
|
|
||||||
meta: {
|
meta: {
|
||||||
source: "tab_click",
|
source: "person_click",
|
||||||
input_name: inputName
|
title_input: inputName,
|
||||||
|
person_name: name,
|
||||||
|
person_role: role,
|
||||||
|
logo_url: logoUrl
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!response.ok) {
|
if (!response.ok) {
|
||||||
console.error("Ошибка отправки команды в vMix:", response.status);
|
console.error("Ошибка отправки титра в vMix:", response.status);
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("Не удалось отправить команду в vMix:", error);
|
console.error("Не удалось отправить титр в vMix:", error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
document.addEventListener("click", function (event) {
|
document.addEventListener("click", function (event) {
|
||||||
const link = event.target.closest(".tab-link[data-vmix-title]");
|
const trigger = event.target.closest(".vmix-person-trigger");
|
||||||
if (!link) return;
|
if (!trigger) return;
|
||||||
|
|
||||||
const inputName = link.dataset.vmixTitle;
|
const personType = (trigger.dataset.vmixPersonType || "").trim();
|
||||||
sendVmixPreviewInput(inputName);
|
const side = (trigger.dataset.side || "").trim();
|
||||||
|
const rawName = (trigger.dataset.name || "").trim();
|
||||||
|
const role = (trigger.dataset.role || "").trim();
|
||||||
|
const logoUrl = side === "away" ? teamLogos.away : teamLogos.home;
|
||||||
|
|
||||||
|
if (!rawName) return;
|
||||||
|
|
||||||
|
const formattedName = personType === "coach"
|
||||||
|
? formatCoachName(rawName)
|
||||||
|
: formatPlayerName(rawName);
|
||||||
|
|
||||||
|
sendNeutralPersonTitle(formattedName, role, logoUrl);
|
||||||
});
|
});
|
||||||
})();
|
})();
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
Reference in New Issue
Block a user