Move suggest form into modal
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user