import { escapeHtml, page } from "../../lib/fixtures.mjs"; import { describeSeed } from "../../lib/seeded-generator.mjs"; function nest(content, depth) { let nested = content; for (let index = 0; index < depth; index += 1) { nested = `
${nested}
`; } return nested; } function textField(dimensions) { const id = `matrix-text-${dimensions.idSuffix}`; const input = ``; if (dimensions.labelMode === "wrapped") return ``; if (dimensions.labelMode === "for") return `${input}`; return `Text input`; } function formMarkup(dimensions, runId) { const text = textField(dimensions); const select = ``; const fields = dimensions.fieldOrder === "text-first" ? `${text}${select}` : `${select}${text}`; const decoy = dimensions.decoy === "disabled-input" ? `` : dimensions.decoy === "duplicate-text" ? `

Text input is intentionally repeated in helper copy.

` : ""; return nest( `
${decoy}${fields}
`, dimensions.nestingDepth, ); } export default { id: "generated-form", routes: ["/matrix/generated-form", "/matrix/generated-result"], render({ pathname, runId, query, record }) { const dimensions = describeSeed(query.get("seed") ?? 1); if (pathname === "/matrix/generated-form") { const markup = JSON.stringify(formMarkup(dimensions, runId)); const dimensionsJson = JSON.stringify(dimensions); return page({ title: "Seeded Matrix Form", body: `

Seeded Matrix Form

SEED-${dimensions.seed}

Hydrating…
`, script: ` const hydrate = () => { const root = document.querySelector("#matrix-root"); root.innerHTML = ${markup}; root.querySelector("button[type=submit]").addEventListener("keydown", (event) => { if (event.key === "Enter") browserEval.send("matrix.enter_pressed"); }); browserEval.send("matrix.ready", ${dimensionsJson}); }; setTimeout(hydrate, ${dimensions.hydrationDelayMs}); `, }); } const values = { seed: dimensions.seed, text: query.get("text") ?? "", choice: query.get("choice") ?? "", }; record("matrix.submitted", values, { path: pathname }); return page({ title: "Matrix Result", body: `

Matrix Result

MATRIX-OK

${escapeHtml(values.text)} | ${escapeHtml(values.choice)} | seed ${values.seed}

`, }); }, };