(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); } })();