Files
MatchLiveTv/backend/public/tournament-calendar.js
T

125 lines
3.6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
(function () {
document.addEventListener(
"submit",
function (event) {
var form = event.target;
if (!(form instanceof HTMLFormElement)) return;
if (!form.classList.contains("tournament-match-swap__form")) return;
event.preventDefault();
event.stopImmediatePropagation();
if (form.dataset.swapBusy === "1") return;
var row = form.closest("tr");
if (!row) return;
form.dataset.swapBusy = "1";
var btn = form.querySelector("button");
if (btn) btn.disabled = true;
swapRowSides(row);
var token = document.querySelector('meta[name="csrf-token"]');
fetch(form.action, {
method: "POST",
headers: {
Accept: "application/json",
"X-Requested-With": "XMLHttpRequest",
"X-CSRF-Token": token ? token.content : ""
},
body: new FormData(form),
credentials: "same-origin"
})
.then(function (res) {
return res
.json()
.then(function (data) {
return { ok: res.ok && data && data.ok !== false, data: data || {} };
})
.catch(function () {
return { ok: false, data: {} };
});
})
.then(function (result) {
if (!result.ok) {
swapRowSides(row);
showSwapError(form, result.data.error);
return;
}
if (result.data.matchup_label) {
var del = row.querySelector(".tournament-match-delete-form");
if (del) {
del.setAttribute("data-turbo-confirm", result.data.matchup_label);
del.setAttribute("data-confirm", result.data.matchup_label);
}
}
})
.catch(function () {
swapRowSides(row);
showSwapError(form, null);
})
.finally(function () {
delete form.dataset.swapBusy;
if (btn) btn.disabled = false;
});
},
true
);
function swapRowSides(row) {
var home = row.querySelector("[data-swap-side='home']");
var away = row.querySelector("[data-swap-side='away']");
if (home && away) {
var tmp = home.innerHTML;
home.innerHTML = away.innerHTML;
away.innerHTML = tmp;
pulse(home);
pulse(away);
}
var homeScore = row.querySelector("[data-swap-score='home']");
var awayScore = row.querySelector("[data-swap-score='away']");
if (homeScore && awayScore) {
var hv = homeScore.value;
homeScore.value = awayScore.value;
awayScore.value = hv;
}
var played = row.querySelector("[data-swap-played-score]");
if (played) {
var parts = played.textContent.trim().split(/\s*[-]\s*/);
if (parts.length === 2) {
played.textContent = parts[1] + "" + parts[0];
}
}
}
function pulse(el) {
el.classList.remove("is-swapped");
void el.offsetWidth;
el.classList.add("is-swapped");
}
function showSwapError(form, message) {
var table = form.closest(".tournament-match-table");
var text =
message ||
(table && table.getAttribute("data-swap-error")) ||
"Impossibile invertire casa e ospite.";
var host = document.querySelector(".tournament-hub") || document.querySelector("main");
if (!host) return;
var prev = host.querySelector(".flash.alert[data-swap-flash]");
if (prev) prev.remove();
var el = document.createElement("div");
el.className = "flash alert";
el.setAttribute("data-swap-flash", "1");
el.textContent = text;
host.insertBefore(el, host.firstChild);
window.setTimeout(function () {
if (el.parentNode) el.remove();
}, 5000);
}
})();