import { createElement } from "../../lib/skeleton/index.js"; import rxjs from "../../lib/rx.js"; export function renderLeaf({ format, label, description, type }) { if (label === "banner") return createElement(` `); const $el = createElement(` `); if (type === "hidden") $el.classList.add("hidden"); if (description) $el.appendChild(createElement(`
${description}
`)); return $el; } function fromMarkdown(str = "") { str = str.replace(/\[([^\]]+)\]\(([^)]+)\)/g, "$1"); str = str.replaceAll("\n", "
"); return str; } export function useForm$($inputNodeList) { return rxjs.pipe( rxjs.mergeMap(() => $inputNodeList()), rxjs.mergeMap(($el) => rxjs.fromEvent($el, "input")), rxjs.mergeMap(($el) => { if ($el.target.checkValidity() === false) { $el.target.reportValidity(); return rxjs.EMPTY; } return rxjs.of($el); }), rxjs.map((e) => ({ name: e.target.getAttribute("name"), value: (function() { switch (e.target.getAttribute("type")) { case "checkbox": return e.target.checked; default: return e.target.value; } }()), })), rxjs.scan((store, keyValue) => { store[keyValue.name] = keyValue.value; return store; }, {}) ); } export function formObjToJSON$() { const formObjToJSON = (o, level = 0) => { const obj = Object.assign({}, o); Object.keys(obj).forEach((key) => { const t = obj[key]; if ("label" in t && "type" in t && "default" in t && "value" in t) { let value = obj[key].value; if (t.type === "number") value = parseInt(value); obj[key] = value; } else { obj[key] = formObjToJSON(obj[key], level + 1); } }); return obj; }; return rxjs.map(formObjToJSON); }