From e06d55a8aadd83370cf70188ac3d05d276bd05c0 Mon Sep 17 00:00:00 2001 From: Brayden Date: Sun, 16 Aug 2026 11:57:55 -0400 Subject: [PATCH] New Dashboard Submit Integration MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - The **Submit** button no longer pops up a form modal. Clicking it now opens the **OpenFront Dashboard Submission Form Page** in a new tab with your pattern already filled in — ready to fill out, review and submit. --- CHANGELOG.md | 3 ++ src/app.ts | 16 +++--- src/app/submissionModal.ts | 105 ------------------------------------- 3 files changed, 9 insertions(+), 115 deletions(-) delete mode 100644 src/app/submissionModal.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 47bd9f1..54917e6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,9 @@ *Note: some changes may be undocumented prior to September 2026 because I didn't keep track ¯\_(ツ)_/¯* +## August 16, 2026 — New Dashboard Submit +- The **Submit** button no longer pops up a form modal. Clicking it now opens the **OpenFront Dashboard Submission Form Page** in a new tab with your pattern already filled in — ready to fill out, review and submit. + ## August 16, 2026 — Simulate In-Game Map & Team Colors Three big additions to the Preview panel: diff --git a/src/app.ts b/src/app.ts index 83a3371..e81e6ee 100644 --- a/src/app.ts +++ b/src/app.ts @@ -19,7 +19,6 @@ import { import { createPatternLoader } from "./app/patternLoader.js"; import { initPaneResizeControls } from "./app/paneResizeControls.js"; import { createPreviewRenderer } from "./app/previewRenderer.js"; -import { initSubmissionModal } from "./app/submissionModal.js"; import { createToolState } from "./app/toolState.js"; import { createHistoryManager } from "./app/undoRedo.js"; import { initWorkspaceControls } from "./app/workspaceControls.js"; @@ -967,16 +966,13 @@ document.addEventListener("DOMContentLoaded", () => { }, }); - // ── Submission modal ────────────────────────────────────────────────────── - const submissionModal = initSubmissionModal({ - getPrimaryColor: () => previewPrimaryColor.value, - getSecondaryColor: () => previewSecondaryColor.value, - getPatternUrl: () => { - const b64 = getOutputBase64(); - return buildPreviewLink(window.location.href, b64, previewPrimaryColor.value, previewSecondaryColor.value); - } + // ── Submission ──────────────────────────────────────────────────────────── + submitPatternBtn.addEventListener("click", () => { + const b64 = getOutputBase64(); + const submitUrl = new URL("https://dashboard.openfront.io/submit"); + submitUrl.searchParams.set("pattern", b64); + window.open(submitUrl.toString(), "_blank"); }); - submitPatternBtn.addEventListener("click", () => submissionModal.open()); // ── URL hash load + initial state ───────────────────────────────────────── const normalizeHex = (v: string | null) => { diff --git a/src/app/submissionModal.ts b/src/app/submissionModal.ts deleted file mode 100644 index f2427c1..0000000 --- a/src/app/submissionModal.ts +++ /dev/null @@ -1,105 +0,0 @@ -const STORAGE_KEY_PLAYER_NAME = "pu-submit-player-name"; -const STORAGE_KEY_PLAYER_ID = "pu-submit-player-id"; -const STORAGE_KEY_PATTERN_NAME = "pu-submit-pattern-name"; - -export function initSubmissionModal(options: { - getPrimaryColor: () => string; - getSecondaryColor: () => string; - getPatternUrl: () => string; -}) { - const { getPrimaryColor, getSecondaryColor, getPatternUrl } = options; - - // ── Build DOM ──────────────────────────────────────────────────────────── - const overlay = document.createElement("div"); - overlay.className = "modal-overlay"; - overlay.hidden = true; - overlay.setAttribute("role", "dialog"); - overlay.setAttribute("aria-modal", "true"); - overlay.setAttribute("aria-labelledby", "submissionModalTitle"); - - overlay.innerHTML = ` - - `; - - document.body.appendChild(overlay); - - const playerNameInput = overlay.querySelector("#submitPlayerName")!; - const playerIdInput = overlay.querySelector("#submitPlayerId")!; - const patternNameInput = overlay.querySelector("#submitPatternName")!; - const closeBtn = overlay.querySelector("#submitModalCloseBtn")!; - const cancelBtn = overlay.querySelector("#submitCancelBtn")!; - const confirmBtn = overlay.querySelector("#submitConfirmBtn")!; - - // ── Restore saved values ───────────────────────────────────────────────── - playerNameInput.value = localStorage.getItem(STORAGE_KEY_PLAYER_NAME) ?? ""; - playerIdInput.value = localStorage.getItem(STORAGE_KEY_PLAYER_ID) ?? ""; - patternNameInput.value = localStorage.getItem(STORAGE_KEY_PATTERN_NAME) ?? ""; - - // ── Open / Close ───────────────────────────────────────────────────────── - const open = () => { - overlay.hidden = false; - playerNameInput.focus(); - }; - const close = () => { - overlay.hidden = true; - }; - - closeBtn.addEventListener("click", close); - cancelBtn.addEventListener("click", close); - overlay.addEventListener("click", (e) => { - if (e.target === overlay) close(); - }); - - // ── Confirm / Open Google Form ─────────────────────────────────────────── - confirmBtn.addEventListener("click", () => { - const playerName = playerNameInput.value.trim(); - const playerId = playerIdInput.value.trim(); - const patternName = patternNameInput.value.trim(); - if (!playerName || !playerId || !patternName) { - alert("Please fill in Artist Name, Player ID, and Pattern Name."); - return; - } - // Save to localStorage - localStorage.setItem(STORAGE_KEY_PLAYER_NAME, playerName); - localStorage.setItem(STORAGE_KEY_PLAYER_ID, playerId); - localStorage.setItem(STORAGE_KEY_PATTERN_NAME, patternName); - - // Build URL parameters (replace entry.X with actual form fields once known) - // For now, this is a placeholder structure - const patternUrl = getPatternUrl(); - const formUrl = new URL("https://docs.google.com/forms/d/e/1FAIpQLSdLM4XkX7nUfBzPP2-HcD3tTNbCP-Mxkh9ZlIdqFrMxvgsMYw/viewform"); - formUrl.searchParams.set("usp", "pp_url"); - formUrl.searchParams.set("entry.1988213389", playerName); - formUrl.searchParams.set("entry.1054945945", playerId); - formUrl.searchParams.set("entry.625728051", patternName); - formUrl.searchParams.set("entry.907386368", patternUrl); - - window.open(formUrl.toString(), "_blank"); - close(); - }); - - return { open }; -}