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 `Text input${input} `;
if (dimensions.labelMode === "for") return `Text input ${input}`;
return `Text input `;
}
function formMarkup(dimensions, runId) {
const text = textField(dimensions);
const select = `DropdownOne Two Three `;
const fields = dimensions.fieldOrder === "text-first" ? `${text}${select}` : `${select}${text}`;
const decoy =
dimensions.decoy === "disabled-input"
? `Text input `
: dimensions.decoy === "duplicate-text"
? `Text input is intentionally repeated in helper copy.
`
: "";
return nest(
``,
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}
`,
});
},
};