import { createElement } from "../lib/skeleton/index.js"; import { safe } from "../lib/dom.js"; import { gid } from "../lib/random.js"; export function formTmpl(withAutocomplete) { return { renderNode: ({ label }) => { return createElement(`
${format(label)}
`); }, renderLeaf: ({ label }) => { return createElement(` `); }, renderInput: $renderInput, formatLabel: format, }; }; export async function $renderInput(props) { const { id = null, type, value = null, placeholder = "", required = false, readonly = false, path = [], autocomplete = false, datalist = null, options = null, } = props let attr = `name="${path.join(".")}" `; if (value) attr += `value="${value}" `; if (id) attr += `id=${id} `; if (placeholder) attr += `placeholder=${placeholder} `; if (!autocomplete) attr += `autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="off" `; if (required) attr += "required "; if (readonly) attr += "readonly "; switch(type) { case "text": // TODO const dataListId = gid("list_"); const $input = createElement(` `); if (!datalist) return $input; const $wrapper = window.document.createElement("span"); const $datalist = window.document.createElement("datalist") $wrapper.appendChild($input); $datalist.setAttribute("id", dataListId); // const filtered = function(multi, datalist, currentValue) { // if (multi !== true || currentValue == null) return datalist; // return autocomplete( // currentValue // .split(",") // .map((t) => t.trim()) // .filter((t) => t), // datalist, // ); // }; // fitlered() return $wrapper; case "number": return createElement(` `); case "password": // TODO: click eye return createElement(`
`); // case "long_password": // // TODO // case "long_text": // return // TODO // case "bcrypt": import("./bcrypt.js") // // TODO case "hidden": return createElement(` `); case "boolean": return createElement(`
`); case "select": const renderOption = (name) => ``; return createElement(` `); case "date": return createElement(` `); case "datetime": return createElement(` `); case "image": return createElement(` `); // case "file": // return createElement() // TODO default: return createElement(` `); } } export function format(name) { if (typeof name !== "string") { return "N/A"; } return name .split("_") .map((word) => { if (word.length < 1) { return word; } return word[0].toUpperCase() + word.substring(1); }) .join(" "); };