From 0cece5f7a3dac419c83d55349c307d7106370991 Mon Sep 17 00:00:00 2001 From: Frank Tovar Date: Wed, 4 Feb 2026 14:50:49 +0100 Subject: [PATCH] Move suggest form into modal --- wwwroot/app.js | 42 +++-------- wwwroot/index.html | 58 ++------------- wwwroot/js/i18n.js | 4 + wwwroot/js/ui.js | 177 +++++++++++++++++++++++++++++---------------- wwwroot/styles.css | 5 ++ 5 files changed, 140 insertions(+), 146 deletions(-) diff --git a/wwwroot/app.js b/wwwroot/app.js index 396343b..3757254 100644 --- a/wwwroot/app.js +++ b/wwwroot/app.js @@ -2,7 +2,6 @@ import { api, adminApi } from "./js/api.js"; import { t, setLanguage, getLanguage, initI18n, onLanguageChange } from "./js/i18n.js"; import { state, clearUserState, getSavedUsername, setSavedUsername } from "./js/state.js"; import { $, toast } from "./js/dom.js"; -import { triggerCelebration } from "./js/effects.js"; import { setAuthUI, setAuthMode, @@ -16,7 +15,7 @@ import { syncVoteScores, renderResults, renderPhaseTitles, - normalizeSuggestionForm, + openNewSuggestionModal, } from "./js/ui.js"; import { loadState, @@ -117,24 +116,14 @@ function setupHandlers() { }); } - $("suggest-form").addEventListener("submit", async (e) => { - e.preventDefault(); - const form = e.target; - const data = normalizeSuggestionForm(new FormData(form)); - if (!data.name) return toast(t("toast.nameRequired"), true); - if (data.screenshotUrl && !isValidImageUrl(data.screenshotUrl)) { - return toast(t("toast.invalidImageUrl"), true); - } - try { - await api.createSuggestion(data); - form.reset(); - toast(t("toast.suggestionAdded")); - triggerCelebration(form.querySelector("button[type=submit]")); - await loadSuggestData(); - } catch (err) { - toast(err.message, true); - } - }); + const openSuggestBtn = $("open-suggest-modal"); + if (openSuggestBtn) { + openSuggestBtn.addEventListener("click", (e) => { + e.preventDefault(); + if (state.phase !== "Suggest") return; + openNewSuggestionModal(); + }); + } $("set-phase").addEventListener("click", async () => { const phase = $("phase-select").value; @@ -223,16 +212,3 @@ async function main() { } main(); - -function isValidImageUrl(url) { - if (!url) return true; - try { - const u = new URL(url); - const allowed = ["http:", "https:"]; - if (!allowed.includes(u.protocol)) return false; - const path = u.pathname.toLowerCase(); - return [".png", ".jpg", ".jpeg", ".gif", ".webp", ".avif"].some((ext) => path.endsWith(ext)); - } catch { - return false; - } -} diff --git a/wwwroot/index.html b/wwwroot/index.html index 780add1..1997845 100644 --- a/wwwroot/index.html +++ b/wwwroot/index.html @@ -86,57 +86,15 @@