Aggiunge i tornei con hub, pagina pubblica e tabellone per semifinali e finali.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,124 @@
|
||||
(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);
|
||||
}
|
||||
})();
|
||||
Reference in New Issue
Block a user