peryl 1.5.2 → 1.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -16
- package/demo/hsml-app-form-validation_demo.ts +22 -23
- package/demo/hsml-app-form_demo.ts +24 -20
- package/demo/hsml-app-test_demo.ts +35 -36
- package/demo/hsml-app-tictactoe_demo.ts +16 -15
- package/demo/hsml-app_demo.ts +20 -12
- package/demo/hsml-appel_demo.html +7 -0
- package/demo/hsml-appel_demo.ts +33 -25
- package/demo/hsml-appi_demo.ts +9 -9
- package/demo/hsml_demo.ts +27 -22
- package/demo/js/hsml-app-js-happi_demo.html +16 -8
- package/demo/js/hsml-app-js_demo.html +15 -15
- package/dist/browser-esmodule/encode.js.map +1 -1
- package/dist/browser-esmodule/hsml-app.js +67 -73
- package/dist/browser-esmodule/hsml-app.js.map +1 -1
- package/dist/browser-esmodule/hsml-convert.js.map +1 -1
- package/dist/browser-esmodule/hsml-dom.js +3 -3
- package/dist/browser-esmodule/hsml-dom.js.map +1 -1
- package/dist/browser-esmodule/hsml-h.js.map +1 -1
- package/dist/browser-esmodule/hsml-html.js +2 -2
- package/dist/browser-esmodule/hsml-html.js.map +1 -1
- package/dist/browser-esmodule/hsml-idom.js +5 -5
- package/dist/browser-esmodule/hsml-idom.js.map +1 -1
- package/dist/browser-esmodule/hsml.js.map +1 -1
- package/dist/browser-esmodule/http.js.map +1 -1
- package/dist/browser-esmodule/index.js +71 -77
- package/dist/browser-esmodule/index.js.map +1 -1
- package/dist/browser-esmodule/router.js.map +1 -1
- package/dist/browser-umd/encode.js +1 -1
- package/dist/browser-umd/encode.js.map +1 -1
- package/dist/browser-umd/hsml-app.js +1 -1
- package/dist/browser-umd/hsml-app.js.map +1 -1
- package/dist/browser-umd/hsml-convert.js.map +1 -1
- package/dist/browser-umd/hsml-dom.js +1 -1
- package/dist/browser-umd/hsml-dom.js.map +1 -1
- package/dist/browser-umd/hsml-h.js.map +1 -1
- package/dist/browser-umd/hsml-html.js +1 -1
- package/dist/browser-umd/hsml-html.js.map +1 -1
- package/dist/browser-umd/hsml-idom.js +1 -1
- package/dist/browser-umd/hsml-idom.js.map +1 -1
- package/dist/browser-umd/hsml.js.map +1 -1
- package/dist/browser-umd/http.js +1 -1
- package/dist/browser-umd/http.js.map +1 -1
- package/dist/browser-umd/index.js +1 -1
- package/dist/browser-umd/index.js.map +1 -1
- package/dist/browser-umd/router.js +1 -1
- package/dist/browser-umd/router.js.map +1 -1
- package/dist/browser-umd/validators-moment.js +1 -1
- package/dist/browser-umd/validators-moment.js.map +1 -1
- package/dist/browser-umd/validators-numeral.js.map +1 -1
- package/dist/demo/encode_demo.ce182166.js.map +1 -1
- package/dist/demo/encode_demo.f40a44eb.js.map +1 -1
- package/dist/demo/hsml-app-form-validation_demo.a9e2c583.js +2 -0
- package/dist/demo/hsml-app-form-validation_demo.a9e2c583.js.map +1 -0
- package/dist/demo/hsml-app-form-validation_demo.bb392ab0.js +2 -0
- package/dist/demo/hsml-app-form-validation_demo.bb392ab0.js.map +1 -0
- package/dist/demo/hsml-app-form-validation_demo.c6856b02.js +2 -0
- package/dist/demo/hsml-app-form-validation_demo.c6856b02.js.map +1 -0
- package/dist/demo/hsml-app-form-validation_demo.fdcc0b2d.js +2 -0
- package/dist/demo/hsml-app-form-validation_demo.fdcc0b2d.js.map +1 -0
- package/dist/demo/hsml-app-form-validation_demo.html +1 -1
- package/dist/demo/hsml-app-form_demo.e36ef1e9.js +2 -0
- package/dist/demo/hsml-app-form_demo.e36ef1e9.js.map +1 -0
- package/dist/demo/hsml-app-form_demo.fd22dfcf.js +2 -0
- package/dist/demo/hsml-app-form_demo.fd22dfcf.js.map +1 -0
- package/dist/demo/hsml-app-form_demo.html +1 -1
- package/dist/demo/hsml-app-test_demo.ba5f166c.js +2 -0
- package/dist/demo/hsml-app-test_demo.ba5f166c.js.map +1 -0
- package/dist/demo/hsml-app-test_demo.e8b5e4b2.js +2 -0
- package/dist/demo/hsml-app-test_demo.e8b5e4b2.js.map +1 -0
- package/dist/demo/hsml-app-test_demo.html +1 -1
- package/dist/demo/hsml-app-tictactoe_demo.03d8363f.js +2 -0
- package/dist/demo/hsml-app-tictactoe_demo.03d8363f.js.map +1 -0
- package/dist/demo/hsml-app-tictactoe_demo.399f8e69.js +2 -0
- package/dist/demo/hsml-app-tictactoe_demo.399f8e69.js.map +1 -0
- package/dist/demo/hsml-app-tictactoe_demo.html +1 -1
- package/dist/demo/hsml-app_demo.44aa1072.js +2 -0
- package/dist/demo/hsml-app_demo.44aa1072.js.map +1 -0
- package/dist/demo/hsml-app_demo.70ef3e7a.js +2 -0
- package/dist/demo/hsml-app_demo.70ef3e7a.js.map +1 -0
- package/dist/demo/hsml-app_demo.html +1 -1
- package/dist/demo/hsml-appel_demo.2a9f7f3f.js +2 -0
- package/dist/demo/hsml-appel_demo.2a9f7f3f.js.map +1 -0
- package/dist/demo/hsml-appel_demo.bea7849a.js +2 -0
- package/dist/demo/hsml-appel_demo.bea7849a.js.map +1 -0
- package/dist/demo/hsml-appel_demo.html +1 -1
- package/dist/demo/hsml-appi_demo.3dc5de90.js +2 -0
- package/dist/demo/hsml-appi_demo.3dc5de90.js.map +1 -0
- package/dist/demo/hsml-appi_demo.bfc7056a.js +2 -0
- package/dist/demo/hsml-appi_demo.bfc7056a.js.map +1 -0
- package/dist/demo/hsml-appi_demo.html +1 -1
- package/dist/demo/hsml-convert_demo.0ea1fa3b.js.map +1 -1
- package/dist/demo/hsml-convert_demo.63e3e7b5.js.map +1 -1
- package/dist/demo/{hsml_demo.ff950ba1.js → hsml_demo.a248689a.js} +2 -2
- package/dist/demo/hsml_demo.a248689a.js.map +1 -0
- package/dist/demo/hsml_demo.eb3b08be.js +2 -0
- package/dist/demo/hsml_demo.eb3b08be.js.map +1 -0
- package/dist/demo/hsml_demo.html +1 -1
- package/dist/demo/http_demo.3e7da3d8.js.map +1 -1
- package/dist/demo/http_demo.8e435f23.js.map +1 -1
- package/dist/demo/i18n_demo.html +1 -1
- package/dist/demo/router_demo.3cfa03aa.js.map +1 -1
- package/dist/demo/router_demo.89ab1681.js.map +1 -1
- package/dist/demo/{validators_demo.252e13a6.js → validators_demo.90ff6001.js} +2 -2
- package/dist/demo/validators_demo.90ff6001.js.map +1 -0
- package/dist/demo/{validators_demo.66893723.js → validators_demo.ef5b2dea.js} +2 -2
- package/dist/demo/validators_demo.ef5b2dea.js.map +1 -0
- package/dist/demo/validators_demo.html +1 -1
- package/dist/encode.js +1 -1
- package/dist/encode.js.map +1 -1
- package/dist/hsml-app.d.ts +38 -37
- package/dist/hsml-app.js +60 -62
- package/dist/hsml-app.js.map +1 -1
- package/dist/hsml-convert.d.ts +3 -3
- package/dist/hsml-convert.js.map +1 -1
- package/dist/hsml-dom.d.ts +2 -2
- package/dist/hsml-dom.js +3 -3
- package/dist/hsml-dom.js.map +1 -1
- package/dist/hsml-h.d.ts +8 -8
- package/dist/hsml-h.js.map +1 -1
- package/dist/hsml-html.d.ts +4 -4
- package/dist/hsml-html.js +2 -2
- package/dist/hsml-html.js.map +1 -1
- package/dist/hsml-idom.d.ts +2 -2
- package/dist/hsml-idom.js +5 -5
- package/dist/hsml-idom.js.map +1 -1
- package/dist/hsml.d.ts +26 -27
- package/dist/hsml.js.map +1 -1
- package/dist/http.js +1 -1
- package/dist/http.js.map +1 -1
- package/dist/router.js +1 -1
- package/dist/router.js.map +1 -1
- package/package.json +8 -8
- package/src/hsml-app.ts +209 -144
- package/src/hsml-convert.ts +8 -8
- package/src/hsml-dom.ts +18 -18
- package/src/hsml-h.ts +10 -10
- package/src/hsml-html.ts +19 -19
- package/src/hsml-idom.ts +25 -25
- package/src/hsml.ts +46 -143
- package/demo/hsml-appc_demo.html +0 -16
- package/demo/hsml-appc_demo.ts +0 -49
- package/dist/demo/hsml-app-form-validation_demo.0b03b743.js +0 -2
- package/dist/demo/hsml-app-form-validation_demo.0b03b743.js.map +0 -1
- package/dist/demo/hsml-app-form-validation_demo.b3a5c810.js +0 -2
- package/dist/demo/hsml-app-form-validation_demo.b3a5c810.js.map +0 -1
- package/dist/demo/hsml-app-form-validation_demo.d3925067.js +0 -2
- package/dist/demo/hsml-app-form-validation_demo.d3925067.js.map +0 -1
- package/dist/demo/hsml-app-form-validation_demo.f757d763.js +0 -2
- package/dist/demo/hsml-app-form-validation_demo.f757d763.js.map +0 -1
- package/dist/demo/hsml-app-form_demo.007ffcaa.js +0 -2
- package/dist/demo/hsml-app-form_demo.007ffcaa.js.map +0 -1
- package/dist/demo/hsml-app-form_demo.a034239d.js +0 -2
- package/dist/demo/hsml-app-form_demo.a034239d.js.map +0 -1
- package/dist/demo/hsml-app-test_demo.35c14dc9.js +0 -2
- package/dist/demo/hsml-app-test_demo.35c14dc9.js.map +0 -1
- package/dist/demo/hsml-app-test_demo.3c7e16ae.js +0 -2
- package/dist/demo/hsml-app-test_demo.3c7e16ae.js.map +0 -1
- package/dist/demo/hsml-app-tictactoe_demo.5f4861c1.js +0 -2
- package/dist/demo/hsml-app-tictactoe_demo.5f4861c1.js.map +0 -1
- package/dist/demo/hsml-app-tictactoe_demo.7deeabad.js +0 -2
- package/dist/demo/hsml-app-tictactoe_demo.7deeabad.js.map +0 -1
- package/dist/demo/hsml-app_demo.87d83c29.js +0 -2
- package/dist/demo/hsml-app_demo.87d83c29.js.map +0 -1
- package/dist/demo/hsml-app_demo.941a13a6.js +0 -2
- package/dist/demo/hsml-app_demo.941a13a6.js.map +0 -1
- package/dist/demo/hsml-appc_demo.0234ff15.js +0 -2
- package/dist/demo/hsml-appc_demo.0234ff15.js.map +0 -1
- package/dist/demo/hsml-appc_demo.f5783031.js +0 -2
- package/dist/demo/hsml-appc_demo.f5783031.js.map +0 -1
- package/dist/demo/hsml-appc_demo.html +0 -1
- package/dist/demo/hsml-appel_demo.0e8a4d4c.js +0 -2
- package/dist/demo/hsml-appel_demo.0e8a4d4c.js.map +0 -1
- package/dist/demo/hsml-appel_demo.1a5c2c26.js +0 -2
- package/dist/demo/hsml-appel_demo.1a5c2c26.js.map +0 -1
- package/dist/demo/hsml-appi_demo.2c3fb511.js +0 -2
- package/dist/demo/hsml-appi_demo.2c3fb511.js.map +0 -1
- package/dist/demo/hsml-appi_demo.427fdebd.js +0 -2
- package/dist/demo/hsml-appi_demo.427fdebd.js.map +0 -1
- package/dist/demo/hsml_demo.33f28c29.js +0 -2
- package/dist/demo/hsml_demo.33f28c29.js.map +0 -1
- package/dist/demo/hsml_demo.ff950ba1.js.map +0 -1
- package/dist/demo/validators_demo.252e13a6.js.map +0 -1
- package/dist/demo/validators_demo.66893723.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"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","sources":["src/hsml-convert.ts"],"sourcesContent":["import { HElement, HElements } from \"./hsml\";\n\nconst dataRegex = /data-(.+)/;\n\nexport function dom2hsmlStr(node: Node, depth = 0): string {\n let out = \"\";\n if (node.nodeType === Node.TEXT_NODE) {\n const t = node?.textContent?.trim();\n out += `${indent(depth)}${JSON.stringify(t)}`;\n return out;\n }\n if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as HTMLElement;\n const attributes = Array.from(element.attributes)\n .reduce((a, v, i) => (a[v.nodeName] = v.nodeValue, a), {} as any);\n const attrKeys = Object.keys(attributes);\n let id;\n let classes = [] as string[];\n const attrs = {} as {[key: string]: any};\n const attrData = {} as {[key: string]: any};\n if (attrKeys.length) {\n attrKeys.forEach(key => {\n const value = attributes[key] as string;\n if (key.toLowerCase() === \"id\") {\n id = value;\n } else if (key.toLowerCase() === \"class\") {\n const clss = value.split(\" \");\n classes = classes.concat(clss);\n } else if (dataRegex.test(key.toLowerCase())) {\n const g = dataRegex.exec(key);\n attrData[g![1].toLowerCase()] = value;\n } else {\n attrs[key.toLowerCase()] = value;\n }\n });\n }\n let name = element.tagName.toLowerCase();\n if (id) {\n name += \"#\" + id;\n }\n if (classes.length) {\n name += \".\" + classes.join(\".\");\n }\n if (Object.keys(attrData).length) {\n attrs[\"data\"] = attrData;\n }\n out += `${indent(depth)}[\"${name.toLowerCase()}\"`;\n if (Object.keys(attrs).length) {\n out += `,\\n${indent(depth + 1)}${attrsFormat(attrs)}`;\n }\n if (element.hasChildNodes()) {\n out += `,\\n${indent(depth + 1)}[`;\n }\n }\n let i = 0;\n if (node.hasChildNodes()) {\n let child = node.firstChild;\n while (child) {\n out += `${i ? \",\" : \"\"}\\n${dom2hsmlStr(child, depth + 2)}`;\n child = child.nextSibling;\n i++;\n }\n }\n if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as HTMLElement;\n if (element.hasChildNodes()) {\n out += `\\n${indent(depth + 1)}]`;\n }\n out += `\\n${indent(depth)}]`;\n }\n if (!depth) {\n // condense\n out = out.replace(/\\[\\s+\\\"\\\"\\s+\\]$/mg, \"[]\");\n out = out.replace(/\\[\\s+\\\"\\\",?$/mg, \"[\");\n out = out.replace(/,\\s+\\\"\\\"(,?)$/mg, \"$1\");\n out = out.replace(/,\\s+\\[\\](\\s+],?)$/mg, \"$1\");\n out = out.replace(/(},\\s+)\\[\\s+(\\\".+\\\")\\s+\\](,?)$/mg, \"$1$2$3\");\n out = out.replace(/(\\[\\\"[a-zA-Z0-9_\\#\\.-]+\\\",)\\s+\\[\\s+(\\\".+\\\")\\s+\\]\\s+(\\],?)$/mg, \"$1 $2$3\");\n out = out.replace(/(\\[\\\"[a-zA-Z0-9_\\#\\.-]+\\\")\\s+(\\],?)$/mg, \"$1$2\");\n }\n return out;\n}\n\nfunction indent(count: number): string {\n let indent = \"\";\n for (let i = 0; i < count; i++) {\n indent += \" \";\n }\n return indent;\n}\n\nfunction attrsFormat(o: any): string {\n if (typeof o !== \"object\" || Array.isArray(o)) {\n return JSON.stringify(o);\n }\n let props = Object\n .keys(o)\n .map(k => `${k}: ${attrsFormat(o[k])}`)\n .join(\", \");\n return `{ ${props} }`;\n}\n\nexport function html2hsmlStr(html: string): string {\n const node = new DOMParser()\n .parseFromString(html, \"text/html\")\n .getElementsByTagName(\"body\")[0]\n .firstChild;\n return node ? dom2hsmlStr(node) : \"\";\n}\n\ninterface Handler {\n text(text: string): void;\n open(node: { name: string; attributes: any }): void;\n close(tag: string): void;\n}\n\nclass HsmlHandler implements Handler {\n\n private _root = [[]] as HElements[];\n private _nodePath = [] as any; // path that consist of previous hsml nodes\n private _pointer = this._root;\n private _dataRegex = /data-(.+)/;\n\n root(): HElement {\n return this._root[0][0];\n }\n\n text(text: string): void {\n // console.log(\"text:\\t\", JSON.stringify(text));\n // console.log(hsml, hsmlNode, hsmlPath);\n const textTrimmed = text.trim().replace(/\\s+/mg, \" \");\n // console.log(\"text:\\t\", JSON.stringify(textTrimmed));\n if (textTrimmed) {\n this._pointer[this._pointer.length - 1].push(textTrimmed);\n }\n }\n\n open(node: { name: string; attributes: any }): void {\n // console.log(\"open:\\t\", JSON.stringify(node));\n const attrKeys = Object.keys(node.attributes);\n let id;\n let classes = [] as string[];\n const attrs = {} as {[key: string]: any};\n const attrData = {} as {[key: string]: any};\n if (attrKeys.length) {\n attrKeys.forEach(key => {\n const value = node.attributes[key] as string;\n if (key === \"id\") {\n id = value;\n } else if (key === \"class\") {\n const clss = value.split(\" \");\n classes = classes.concat(clss);\n } else if (this._dataRegex.test(key)) {\n const g = this._dataRegex.exec(key);\n attrData[g![1]] = value;\n } else {\n attrs[key] = value;\n }\n });\n }\n let name = node.name;\n if (id) {\n name += \"#\" + id;\n }\n if (classes.length) {\n name += \".\" + classes.join(\".\");\n }\n if (Object.keys(attrData).length) {\n attrs[\"data\"] = attrData;\n }\n const hsmlNode = [name] as any[];\n if (Object.keys(attrs).length) {\n hsmlNode.push(attrs);\n }\n const children: any[] = [];\n hsmlNode.push(children);\n\n this._pointer[this._pointer.length - 1].push(hsmlNode as HElement);\n this._nodePath.push(hsmlNode);\n this._pointer = hsmlNode;\n // console.log(\">>>\", hsmlPath.map(x => x[0]));\n }\n\n close(tag: string): void {\n // console.log(\"close:\\t\", JSON.stringify(tag));\n const currentNode = this._nodePath.pop();\n\n let children = currentNode[currentNode.length - 1];\n if (children.length === 0) {\n currentNode.pop(); // remove children\n // } else if (children.length === 1) {\n // if (typeof children[0] === \"string\") {\n // currentNode[currentNode.length - 1] = children[0];\n // }\n }\n this._pointer = this._nodePath[this._nodePath.length - 1];\n // console.log(\">>>\", hsmlPath.map(x => x[0]));\n }\n}\n\nfunction domTraverse(node: Node, handler: Handler ): void {\n if (node.nodeType === Node.TEXT_NODE) {\n const t = node?.textContent?.trim();\n t && handler.text(t);\n }\n if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as HTMLElement;\n const attributes = Array.from(element.attributes)\n .reduce((a, v, i) => (a[v.nodeName] = v.nodeValue, a), {} as any);\n handler.open({ name: element.tagName.toLowerCase(), attributes });\n }\n if (node.hasChildNodes()) {\n let child = node.firstChild;\n while (child) {\n domTraverse(child, handler);\n child = child.nextSibling;\n }\n }\n if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as HTMLElement;\n handler.close(element.tagName);\n }\n}\n\nexport function dom2hsml(node: Node): HElement {\n const h = new HsmlHandler();\n node && domTraverse(node, h);\n return h.root();\n}\n\nexport function html2hsml(html: string): HElement {\n const node = new DOMParser()\n .parseFromString(html, \"text/html\")\n .getElementsByTagName(\"body\")[0]\n .firstChild;\n return node && dom2hsml(node);\n}\n\nexport function hsml2str(hsml: HElement, condense = true): HElement {\n let str = JSON.stringify(hsml, undefined, 4);\n if (condense) {\n str = str.replace(/(\\[)\\s+(\\\"[a-zA-Z0-9_\\#\\.-]+\\\")\\s+(\\],?)$/mg, \"$1$2$3\");\n str = str.replace(/(\\[)\\s+(\\\"[a-zA-Z0-9_\\#\\.-]+\\\",\\s+(\\[|{),?)$/mg, \"$1$2\");\n str = str.replace(/(\\[)\\s+(\\\"[a-zA-Z0-9_\\#\\.-]+\\\",)\\s+(\\[\\s*\\\".+\\\"\\s*\\])\\s+(\\],?)$/mg, \"$1$2 $3$4\");\n str = str.replace(/(\\[\\\"[a-zA-Z0-9_\\#\\.-]+\\\",\\s+)({\\s+(.*)\\s+})(,?)$/mg,\n (a, b, c, d, e) => b + attrsFormat(JSON.parse(c)) + e);\n str = str.replace(/(},\\s+)\\[\\s+(\\\".+\\\")\\s+\\](,?)$/mg, \"$1$2$3\");\n }\n return str;\n}\n"],"names":[],"version":3,"file":"hsml-convert.js.map"}
|
|
1
|
+
{"mappings":"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","sources":["src/hsml-convert.ts"],"sourcesContent":["import { HElement, HElements } from \"./hsml\";\n\nconst dataRegex = /data-(.+)/;\n\nexport function dom2hsmlStr(node: Node, depth = 0): string {\n let out = \"\";\n if (node.nodeType === Node.TEXT_NODE) {\n const t = node?.textContent?.trim();\n out += `${indent(depth)}${JSON.stringify(t)}`;\n return out;\n }\n if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as HTMLElement;\n const attributes = Array.from(element.attributes)\n .reduce((a, v, i) => (a[v.nodeName] = v.nodeValue, a), {} as any);\n const attrKeys = Object.keys(attributes);\n let id;\n let classes = [] as string[];\n const attrs = {} as {[key: string]: any};\n const attrData = {} as {[key: string]: any};\n if (attrKeys.length) {\n attrKeys.forEach(key => {\n const value = attributes[key] as string;\n if (key.toLowerCase() === \"id\") {\n id = value;\n } else if (key.toLowerCase() === \"class\") {\n const clss = value.split(\" \");\n classes = classes.concat(clss);\n } else if (dataRegex.test(key.toLowerCase())) {\n const g = dataRegex.exec(key);\n attrData[g![1].toLowerCase()] = value;\n } else {\n attrs[key.toLowerCase()] = value;\n }\n });\n }\n let name = element.tagName.toLowerCase();\n if (id) {\n name += \"#\" + id;\n }\n if (classes.length) {\n name += \".\" + classes.join(\".\");\n }\n if (Object.keys(attrData).length) {\n attrs[\"data\"] = attrData;\n }\n out += `${indent(depth)}[\"${name.toLowerCase()}\"`;\n if (Object.keys(attrs).length) {\n out += `,\\n${indent(depth + 1)}${attrsFormat(attrs)}`;\n }\n if (element.hasChildNodes()) {\n out += `,\\n${indent(depth + 1)}[`;\n }\n }\n let i = 0;\n if (node.hasChildNodes()) {\n let child = node.firstChild;\n while (child) {\n out += `${i ? \",\" : \"\"}\\n${dom2hsmlStr(child, depth + 2)}`;\n child = child.nextSibling;\n i++;\n }\n }\n if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as HTMLElement;\n if (element.hasChildNodes()) {\n out += `\\n${indent(depth + 1)}]`;\n }\n out += `\\n${indent(depth)}]`;\n }\n if (!depth) {\n // condense\n out = out.replace(/\\[\\s+\\\"\\\"\\s+\\]$/mg, \"[]\");\n out = out.replace(/\\[\\s+\\\"\\\",?$/mg, \"[\");\n out = out.replace(/,\\s+\\\"\\\"(,?)$/mg, \"$1\");\n out = out.replace(/,\\s+\\[\\](\\s+],?)$/mg, \"$1\");\n out = out.replace(/(},\\s+)\\[\\s+(\\\".+\\\")\\s+\\](,?)$/mg, \"$1$2$3\");\n out = out.replace(/(\\[\\\"[a-zA-Z0-9_\\#\\.-]+\\\",)\\s+\\[\\s+(\\\".+\\\")\\s+\\]\\s+(\\],?)$/mg, \"$1 $2$3\");\n out = out.replace(/(\\[\\\"[a-zA-Z0-9_\\#\\.-]+\\\")\\s+(\\],?)$/mg, \"$1$2\");\n }\n return out;\n}\n\nfunction indent(count: number): string {\n let indent = \"\";\n for (let i = 0; i < count; i++) {\n indent += \" \";\n }\n return indent;\n}\n\nfunction attrsFormat(o: any): string {\n if (typeof o !== \"object\" || Array.isArray(o)) {\n return JSON.stringify(o);\n }\n let props = Object\n .keys(o)\n .map(k => `${k}: ${attrsFormat(o[k])}`)\n .join(\", \");\n return `{ ${props} }`;\n}\n\nexport function html2hsmlStr(html: string): string {\n const node = new DOMParser()\n .parseFromString(html, \"text/html\")\n .getElementsByTagName(\"body\")[0]\n .firstChild;\n return node ? dom2hsmlStr(node) : \"\";\n}\n\ninterface Handler {\n text(text: string): void;\n open(node: { name: string; attributes: any }): void;\n close(tag: string): void;\n}\n\nclass HsmlHandler<HActionType extends string> implements Handler {\n\n private _root = [[]] as HElements<HActionType>[];\n private _nodePath = [] as any; // path that consist of previous hsml nodes\n private _pointer = this._root;\n private _dataRegex = /data-(.+)/;\n\n root(): HElement<HActionType> {\n return this._root[0][0];\n }\n\n text(text: string): void {\n // console.log(\"text:\\t\", JSON.stringify(text));\n // console.log(hsml, hsmlNode, hsmlPath);\n const textTrimmed = text.trim().replace(/\\s+/mg, \" \");\n // console.log(\"text:\\t\", JSON.stringify(textTrimmed));\n if (textTrimmed) {\n this._pointer[this._pointer.length - 1].push(textTrimmed);\n }\n }\n\n open(node: { name: string; attributes: any }): void {\n // console.log(\"open:\\t\", JSON.stringify(node));\n const attrKeys = Object.keys(node.attributes);\n let id;\n let classes = [] as string[];\n const attrs = {} as {[key: string]: any};\n const attrData = {} as {[key: string]: any};\n if (attrKeys.length) {\n attrKeys.forEach(key => {\n const value = node.attributes[key] as string;\n if (key === \"id\") {\n id = value;\n } else if (key === \"class\") {\n const clss = value.split(\" \");\n classes = classes.concat(clss);\n } else if (this._dataRegex.test(key)) {\n const g = this._dataRegex.exec(key);\n attrData[g![1]] = value;\n } else {\n attrs[key] = value;\n }\n });\n }\n let name = node.name;\n if (id) {\n name += \"#\" + id;\n }\n if (classes.length) {\n name += \".\" + classes.join(\".\");\n }\n if (Object.keys(attrData).length) {\n attrs[\"data\"] = attrData;\n }\n const hsmlNode = [name] as any[];\n if (Object.keys(attrs).length) {\n hsmlNode.push(attrs);\n }\n const children: any[] = [];\n hsmlNode.push(children);\n\n this._pointer[this._pointer.length - 1].push(hsmlNode as HElement<HActionType>);\n this._nodePath.push(hsmlNode);\n this._pointer = hsmlNode;\n // console.log(\">>>\", hsmlPath.map(x => x[0]));\n }\n\n close(tag: string): void {\n // console.log(\"close:\\t\", JSON.stringify(tag));\n const currentNode = this._nodePath.pop();\n\n let children = currentNode[currentNode.length - 1];\n if (children.length === 0) {\n currentNode.pop(); // remove children\n // } else if (children.length === 1) {\n // if (typeof children[0] === \"string\") {\n // currentNode[currentNode.length - 1] = children[0];\n // }\n }\n this._pointer = this._nodePath[this._nodePath.length - 1];\n // console.log(\">>>\", hsmlPath.map(x => x[0]));\n }\n}\n\nfunction domTraverse(node: Node, handler: Handler ): void {\n if (node.nodeType === Node.TEXT_NODE) {\n const t = node?.textContent?.trim();\n t && handler.text(t);\n }\n if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as HTMLElement;\n const attributes = Array.from(element.attributes)\n .reduce((a, v, i) => (a[v.nodeName] = v.nodeValue, a), {} as any);\n handler.open({ name: element.tagName.toLowerCase(), attributes });\n }\n if (node.hasChildNodes()) {\n let child = node.firstChild;\n while (child) {\n domTraverse(child, handler);\n child = child.nextSibling;\n }\n }\n if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as HTMLElement;\n handler.close(element.tagName);\n }\n}\n\nexport function dom2hsml<HActionType extends string>(node: Node): HElement<HActionType> {\n const h = new HsmlHandler<HActionType>();\n node && domTraverse(node, h);\n return h.root();\n}\n\nexport function html2hsml<HActionType extends string>(html: string): HElement<HActionType> {\n const node = new DOMParser()\n .parseFromString(html, \"text/html\")\n .getElementsByTagName(\"body\")[0]\n .firstChild;\n return node && dom2hsml(node);\n}\n\nexport function hsml2str<HActionType extends string>(hsml: HElement<HActionType>, condense = true): HElement<HActionType> {\n let str = JSON.stringify(hsml, undefined, 4);\n if (condense) {\n str = str.replace(/(\\[)\\s+(\\\"[a-zA-Z0-9_\\#\\.-]+\\\")\\s+(\\],?)$/mg, \"$1$2$3\");\n str = str.replace(/(\\[)\\s+(\\\"[a-zA-Z0-9_\\#\\.-]+\\\",\\s+(\\[|{),?)$/mg, \"$1$2\");\n str = str.replace(/(\\[)\\s+(\\\"[a-zA-Z0-9_\\#\\.-]+\\\",)\\s+(\\[\\s*\\\".+\\\"\\s*\\])\\s+(\\],?)$/mg, \"$1$2 $3$4\");\n str = str.replace(/(\\[\\\"[a-zA-Z0-9_\\#\\.-]+\\\",\\s+)({\\s+(.*)\\s+})(,?)$/mg,\n (a, b, c, d, e) => b + attrsFormat(JSON.parse(c)) + e);\n str = str.replace(/(},\\s+)\\[\\s+(\\\".+\\\")\\s+\\](,?)$/mg, \"$1$2$3\");\n }\n return str;\n}\n"],"names":[],"version":3,"file":"hsml-convert.js.map"}
|
|
@@ -113,9 +113,9 @@ class $870bc263ac7a2220$var$HsmlDomHandler {
|
|
|
113
113
|
case "_id":
|
|
114
114
|
case "_classes":
|
|
115
115
|
case "_ref":
|
|
116
|
-
case "_key":
|
|
117
|
-
case "_skip":
|
|
118
116
|
case "_hObj":
|
|
117
|
+
case "key":
|
|
118
|
+
case "skip":
|
|
119
119
|
break;
|
|
120
120
|
case "id":
|
|
121
121
|
id = attrs[a];
|
|
@@ -164,7 +164,7 @@ class $870bc263ac7a2220$var$HsmlDomHandler {
|
|
|
164
164
|
}
|
|
165
165
|
if (ctx && ref) ctx.refs[ref] = this._current;
|
|
166
166
|
if (hObj && hObj.mount && hObj.mount.constructor === Function) hObj.mount(e);
|
|
167
|
-
return attrs.
|
|
167
|
+
return attrs.skip ? true : false;
|
|
168
168
|
}
|
|
169
169
|
close(tag, children, ctx) {
|
|
170
170
|
var _a;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"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","sources":["src/hsml-dom.ts","src/hsml.ts"],"sourcesContent":["import {\n HAttrClasses,\n HAttrData, HAttrOn, HAttrOnAct,\n HAttrOnAction, HAttrOnCb, HAttrOnData, HAttrStyles, HElement,\n HElements, HFnc, HHandler,\n HHandlerCtx, HObj, hsml, HTagAttrs, HTagHeadName\n} from \"./hsml\";\n\nfunction ctxActionCb(ctx: HHandlerCtx | undefined, attrOn: HAttrOn, e: Event) {\n ctx &&\n ctx.actionCb &&\n typeof ctx.actionCb === \"function\" &&\n ctx.actionCb(attrOn[1] as HAttrOnAction, attrOn[2] as HAttrOnData, e);\n}\n\nclass HsmlDomHandler implements HHandler<HHandlerCtx> {\n\n element?: HTMLElement;\n\n private _current?: HTMLElement;\n\n open(tag: HTagHeadName, attrs: HTagAttrs, children: HElements, ctx?: HHandlerCtx): boolean {\n const e = document.createElement(tag);\n let id = attrs._id;\n let classes: string[] = attrs._classes ? attrs._classes : [];\n let ref = attrs._ref;\n let hObj: any = attrs._hObj;\n for (const a in attrs) {\n if (attrs.hasOwnProperty(a)) {\n switch (a) {\n case \"_id\":\n case \"_classes\":\n case \"_ref\":\n case \"_key\":\n case \"_skip\":\n case \"_hObj\":\n break;\n case \"id\":\n id = attrs[a] as string;\n break;\n case \"classes\":\n const attrClasses = attrs[a] as HAttrClasses;\n classes = classes.concat(attrClasses\n ? attrClasses\n .map(c =>\n c.constructor === String\n ? c as string\n : (c[1] ? c[0] as string : undefined))\n .filter((c): c is string => c !== undefined)\n : [] as string[]);\n break;\n case \"class\":\n classes = classes.concat((attrs[a] as string).split(\" \"));\n break;\n case \"data\":\n const attrData = attrs[a] as HAttrData;\n for (const d in attrData) {\n if (attrData.hasOwnProperty(d)) {\n if (attrData[d].constructor === String) {\n e.dataset[d] = attrData[d] as string;\n } else {\n e.dataset[d] = JSON.stringify(attrData[d]);\n }\n }\n }\n break;\n case \"styles\":\n const attrStyles = attrs[a] as HAttrStyles;\n for (const d in attrStyles) {\n if (attrStyles.hasOwnProperty(d)) {\n (e.style as any)[d] = attrStyles[d];\n }\n }\n break;\n case \"on\":\n const attrOn = attrs[a] as HAttrOn;\n if (typeof attrOn[0] === \"string\") {\n if (typeof attrOn[1] === \"function\") {\n e.addEventListener(attrOn[0] as string, attrOn[1] as (e: Event) => void);\n } else {\n e.addEventListener(attrOn[0] as string,\n (e: Event) => ctxActionCb(ctx, attrOn, e));\n }\n } else {\n (attrOn as Array<HAttrOnCb | HAttrOnAct>)\n .forEach(attr => {\n if (typeof attr[1] === \"function\") {\n e.addEventListener(attr[0] as string, attr[1] as (e: Event) => void);\n } else {\n e.addEventListener(attr[0] as string,\n (e: Event) => ctxActionCb(ctx, attr, e));\n }\n });\n }\n break;\n default:\n if (typeof attrs[a] === \"function\") {\n e.addEventListener(a, attrs[a] as (e: Event) => void);\n } else if (typeof attrs[a] === \"boolean\") {\n attrs[a] && e.setAttribute(a, \"\");\n } else {\n e.setAttribute(a, attrs[a] as string);\n }\n }\n }\n }\n if (id) {\n e.setAttribute(\"id\", id);\n }\n if (classes.length) {\n e.classList.add(...classes);\n }\n if (this._current) {\n this._current.appendChild(e);\n this._current = e;\n } else {\n this.element = e;\n this._current = e;\n }\n if (ctx && ref) {\n ctx.refs[ref] = this._current;\n }\n if (hObj && hObj.mount && hObj.mount.constructor === Function) {\n hObj.mount(e);\n }\n return attrs._skip ? true : false;\n }\n\n close(tag: HTagHeadName, children: HElements, ctx?: HHandlerCtx): void {\n if (this._current !== this.element) {\n this._current && (this._current = this._current.parentElement ?? undefined);\n }\n }\n\n text(text: string, ctx?: HHandlerCtx): void {\n this._current && this._current.appendChild(document.createTextNode(text));\n }\n\n fnc(fnc: HFnc, ctx?: HHandlerCtx): void {\n this._current && fnc(this._current);\n }\n\n obj(obj: HObj, ctx?: HHandlerCtx): void {\n if (\"toHsml\" in obj) {\n obj.toHsml && hsml(obj.toHsml(), this, obj as HHandlerCtx);\n } else {\n this.text(\"\" + obj, ctx);\n }\n }\n\n}\n\nexport function hsml2dom(hml: HElement, ctx?: HHandlerCtx): HTMLElement | undefined {\n const handler = new HsmlDomHandler();\n hsml(hml, handler, ctx);\n return handler.element;\n}\n\nexport function hsmls2dom(hmls: HElements, ctx?: HHandlerCtx): Node[] {\n const elems: Node[] = [];\n for (const hml of hmls) {\n if (hml === undefined || hml === null) {\n continue;\n }\n if (hml.constructor === String) {\n elems.push(document.createTextNode(hml as string));\n } else if (\"toHsml\" in (hml as object)) {\n const obj = hml as HHandlerCtx;\n if (obj.toHsml) {\n elems.push(hsml2dom(obj.toHsml(), obj)!);\n }\n } else {\n elems.push(hsml2dom(hml, ctx)!);\n }\n }\n return elems;\n}\n","// HSML tag head format \"tag#id.class1.class2~handler\"\n\nexport type HTagHeadName = keyof HTMLElementTagNameMap;\nexport type HTagHeadAttr = \".\" | \"#\" | \"~\";\n\nexport type HTagHead<T extends string = string> = `${HTagHeadName}` | `${HTagHeadName}${HTagHeadAttr}${T}`;\n\nexport type HAttrClasses = Array<string | [string, boolean]>;\n\nexport type HAttrStyles = { [key: string]: string };\n\nexport type HAttrData = {\n [key: string]:\n | string\n | String\n | number\n | Number\n | boolean\n | Boolean\n | Date\n | Array<any>\n | Object;\n};\n\nexport type HAttrOnAction = string;\n\nexport type HAttrOnDataFnc = (e: Event) => any;\n\nexport type HAttrOnData =\n | string\n | String\n | number\n | Number\n | boolean\n | Boolean\n | Date\n | Array<any>\n | Object\n | HAttrOnDataFnc\n | null;\n\nexport type HAttrOnCb = [keyof HTMLElementEventMap, EventListener];\n\nexport type HAttrOnAct = [\n keyof HTMLElementEventMap | string,\n HAttrOnAction,\n HAttrOnData?\n];\n\nexport type HAttrOn = HAttrOnCb | HAttrOnAct | Array<HAttrOnCb | HAttrOnAct>;\n\nexport interface HTagAttrs {\n readonly _id?: string;\n readonly _classes?: string[];\n readonly _ref?: string;\n readonly _key?: string;\n readonly _skip?: boolean;\n readonly _hObj?: HObj;\n readonly classes?: HAttrClasses;\n readonly styles?: HAttrStyles;\n readonly data?: HAttrData;\n readonly on?: HAttrOn;\n readonly [key: string]:\n | string\n | String\n | string[]\n | String[]\n | number\n | Number\n | boolean\n | Boolean\n | Date\n | HAttrClasses\n | HAttrStyles\n // | HsmlAttrData\n | HAttrOn\n | EventListener\n | HObj\n | undefined;\n}\n\nexport type HFnc = (e: Element) => boolean | void;\n\nexport interface HObj {\n toHsml?(): HElement;\n}\n\nexport interface HElements extends Array<HElement> {}\n\nexport type HTagChildren =\n | HElements\n | HFnc\n | HObj\n | string\n | String\n | boolean\n | Boolean\n | number\n | Number\n | Date\n | undefined\n | null;\n\nexport type HTagNoAttr = [HTagHead, HTagChildren?];\nexport type HTagWithAttr = [HTagHead, HTagAttrs, HTagChildren?];\n\nexport type HTag = HTagNoAttr | HTagWithAttr;\n\nexport type HElement =\n | HFnc\n | HObj\n | HTag\n | string\n | String\n | boolean\n | Boolean\n | number\n | Number\n | Date\n | undefined\n | null;\n\nexport interface HHandlerCtx extends HObj {\n refs: { [name: string]: Element };\n actionCb(action: HAttrOnAction, data: HAttrOnData, e: Event): void;\n}\n\nexport interface HHandler<C extends HHandlerCtx> {\n open(tag: HTagHeadName, attrs: HTagAttrs, children: HElements, ctx?: C): boolean;\n close(tag: HTagHeadName, children: HElements, ctx?: C): void;\n text(text: string, ctx?: C): void;\n fnc(fnc: HFnc, ctx?: C): void;\n obj(obj: HObj, ctx?: C): void;\n}\n\nexport const NBSP = \"\\u00a0 \";\n\nexport function hsml<C extends HHandlerCtx>(hml: HElement,\n handler: HHandler<C>,\n ctx?: C): void {\n // console.log(\"hsml\", hsml);\n if (hml === undefined || hml === null) {\n return;\n }\n switch (hml.constructor) {\n case Array:\n // const tag = hml as HTag;\n // if (\n // (\n // tag.length === 1 &&\n // tag[0].constructor === String\n // ) ||\n // (\n // tag.length === 2 &&\n // (\n // tag[0].constructor === String &&\n // (tag[1]!.constructor === Array || tag[1]!.constructor === Function)\n // ) ||\n // (\n // tag[0].constructor === String &&\n // tag[1]!.constructor === Object\n // )\n // ) ||\n // (\n // tag.length === 3 &&\n // tag[0].constructor === String &&\n // tag[1].constructor === Object &&\n // tag[2]!.constructor === Array\n // )\n // ) {\n // hsmlTag(hml as HTag, handler, ctx);\n // } else {\n // console.error(\"hsml parse error:\", hml);\n // // console.error(\"hsml parse error:\", JSON.stringify(hml, null, 4));\n // // throw Error(`hsml parse error: ${JSON.stringify(hml)}`);\n // }\n hsmlTag(hml as HTag, handler, ctx);\n break;\n case Function:\n handler.fnc(hml as HFnc, ctx);\n break;\n case String:\n handler.text(hml as string, ctx);\n break;\n case Boolean:\n handler.text(\"\" + hml, ctx);\n break;\n case Number:\n const n = hml as number;\n const ns = n.toLocaleString ? n.toLocaleString() : n.toString();\n handler.text(ns, ctx);\n break;\n case Date:\n const d = hml as Date;\n const ds = d.toLocaleString ? d.toLocaleString() : d.toString();\n handler.text(ds, ctx);\n break;\n default: // HObj\n handler.obj(hml as HObj, ctx);\n }\n\n function hsmlTag(hmlTag: HTag, handler: HHandler<C>, ctx?: C): void {\n // console.log(\"hsml tag\", hmlTag);\n\n if (typeof hmlTag[0] !== \"string\") {\n console.error(\"HSML tag head not string:\", hmlTag);\n return;\n }\n\n const head = hmlTag[0] as HTagHead;\n const attrsObj = hmlTag[1] as any;\n const hasAttrs = attrsObj && attrsObj.constructor === Object;\n const childIdx = hasAttrs ? 2 : 1;\n\n let children: HElements = [];\n let hFnc: HFnc | undefined;\n let hObj: HObj | undefined;\n\n const htc = hmlTag[childIdx];\n switch (htc != null && htc.constructor) { // switch ((typeof htc !== \"undefined\" || htc !== null) && htc.constructor) {\n case Array:\n children = htc as HElements;\n break;\n case Function:\n hFnc = htc as HFnc;\n break;\n case String:\n case Boolean:\n case Number:\n case Date:\n children = [htc as string | boolean | number | Date];\n break;\n default: // HObj\n hObj = htc as HObj;\n break;\n }\n\n const refSplit = head.split(\"~\");\n const ref = refSplit[1];\n const dotSplit = refSplit[0].split(\".\");\n const hashSplit = dotSplit[0].split(\"#\");\n const tag = (hashSplit[0] ?? \"div\") as HTagHeadName;\n const id = hashSplit[1];\n const classes = dotSplit.slice(1);\n\n let attrs: HTagAttrs;\n if (hasAttrs) {\n attrs = attrsObj as HTagAttrs;\n } else {\n attrs = {} as HTagAttrs;\n }\n\n if (id) {\n (attrs as any)._id = id;\n }\n if (classes.length) {\n (attrs as any)._classes = classes;\n }\n if (ref) {\n (attrs as any)._ref = ref;\n }\n if (hObj) {\n (attrs as any)._hObj = hObj;\n }\n\n const skip = handler.open(tag, attrs, children, ctx);\n\n if (hFnc) {\n handler.fnc(hFnc, ctx);\n }\n\n if (!skip) {\n children.forEach(jml => hsml(jml, handler, ctx));\n }\n\n handler.close(tag, children, ctx);\n }\n}\n\nexport function hjoin(hsmls: HElements, sep: string | HElement): HElements {\n const r = hsmls.reduce<HElements>(\n (p, c) => (p.push(c, sep), p),\n [] as HElements\n );\n r.splice(-1);\n return r;\n}\n\n// Test\n\n// const hsmls: Hsmls = [\n// \"text\",\n// [\"tag\", [\n// \"d\",\n// [\"\"]\n// ]],\n// [\"taga\", { attr: \"attr\", classes: [\"class\"] }, [\n// \"text\",\n// 123,\n// true\n// ]]\n// ];\n\n// const hml: Hsml = [\"xxx\", {}, [\n// \"types\", \" \", 1235.456, \" \", new Date(), \" \",\n// ...hsmls,\n// [\"t\", [\"t\", \"a\", \"\"]],\n// [\"t\", {}, [\"t\", \"a\", \"\"]],\n// [\"t\"]\n// ]];\n\n// console.log(hsmls, hml);\n\n// const hml1: Hsml = [\"div\", null, [\n// [\"span\", null, [\n// [\"a\",\n// {\n// href: \"https://gitlab.com/peter-rybar/diasheet\",\n// title: \"GitLab\",\n// target: \"_blank\"\n// },\n// [[\"i.fa.fa-gitlab\"]]\n// ]\n// ]],\n// [\"span\"]\n// ]];\n// console.log(hml1);\n\n// const hml2: Hsml = [\"div\", [\n// [\"h2\", [\"title\"]],\n// [\"div.w3-card-12\", [\n// [\"header.w3-container w3-light-grey\", [\n// [\"h3\", [\"Account: \", \"User\"]]\n// ]],\n// [\"div.w3-container.w3-light-grey\", [\n// [\"p\", [\"Balance: 4 DCT\"]],\n// [\"br\"]\n// ]],\n// [\"h4\", [\"Your account spending\"]],\n// [\"div#piechart\"],\n// [\"h4\", [\"Your account balance\"]],\n// [\"div#linechart\"],\n// [\"button.w3-button.w3-block.w3-dark-grey\", [\"Refresh\"]]\n// ]],\n// [\"br\"]\n// ]];\n// console.log(hml2);\n\n// TEST\n\n// import { hsmls2htmls } from \"./hsml-html\";\n// import { HDispatch } from \"./hsml-app\";\n\n// const dispatch: HDispatch = (type: string, data?: any, event?: Event): void => {\n// console.log(\"action:\", type, data, event);\n// };\n\n// const data = { attr: \"action-data\" };\n\n// const hmls: HElements = [\n// [\"button\", { on: [\"click\", \"action\", data] }, \"send\"],\n// [\"h1\", \"aaa\"],\n// [\"input\",\n// {\n// type: \"text\",\n// on: [\n// [\"mouseover\", \"hover-action\", data],\n// [\"change\", \"click-action\", e => (e.target as HTMLInputElement).value],\n// [\"click\", e => dispatch(\"action\", data, e)],\n// ],\n// click: e => dispatch(\"action\", data, e)\n// }\n// ],\n// [\"button\",\n// {\n// on: [\"click\", e => dispatch(\"action\", data, e)],\n// click: e => dispatch(\"action\", data, e)\n// },\n// [\"Send\"]\n// ]\n// ];\n\n// console.log(hsmls2htmls(hmls, true).join(\"\"));\n"],"names":[],"version":3,"file":"hsml-dom.js.map"}
|
|
1
|
+
{"mappings":"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","sources":["src/hsml-dom.ts","src/hsml.ts"],"sourcesContent":["import {\n HAttrClasses,\n HAttrData, HAttrOn, HAttrOnAct,\n HAttrOnCb, HAttrOnData, HAttrStyles, HElement,\n HElements, HFnc, HHandler,\n HHandlerCtx, HObj, hsml, HTagAttrs, HTagHeadName\n} from \"./hsml\";\n\nfunction ctxActionCb<HAttrOnActType extends string>(ctx: HHandlerCtx<HAttrOnActType> | undefined, attrOn: HAttrOn<HAttrOnActType>, e: Event) {\n ctx &&\n ctx.actionCb &&\n typeof ctx.actionCb === \"function\" &&\n ctx.actionCb(attrOn[1] as HAttrOnActType, attrOn[2] as HAttrOnData, e);\n}\n\nclass HsmlDomHandler<HAttrOnActType extends string> implements HHandler<HAttrOnActType, HHandlerCtx<HAttrOnActType>> {\n\n element?: HTMLElement;\n\n private _current?: HTMLElement;\n\n open(tag: HTagHeadName, attrs: HTagAttrs<HAttrOnActType>, children: HElements<HAttrOnActType>, ctx?: HHandlerCtx<HAttrOnActType>): boolean {\n const e = document.createElement(tag);\n let id = attrs._id;\n let classes: string[] = attrs._classes ? attrs._classes : [];\n let ref = attrs._ref;\n let hObj: any = attrs._hObj;\n for (const a in attrs) {\n if (attrs.hasOwnProperty(a)) {\n switch (a) {\n case \"_id\":\n case \"_classes\":\n case \"_ref\":\n case \"_hObj\":\n case \"key\":\n case \"skip\":\n break;\n case \"id\":\n id = attrs[a] as string;\n break;\n case \"classes\":\n const attrClasses = attrs[a] as HAttrClasses;\n classes = classes.concat(attrClasses\n ? attrClasses\n .map(c =>\n c.constructor === String\n ? c as string\n : (c[1] ? c[0] as string : undefined))\n .filter((c): c is string => c !== undefined)\n : [] as string[]);\n break;\n case \"class\":\n classes = classes.concat((attrs[a] as string).split(\" \"));\n break;\n case \"data\":\n const attrData = attrs[a] as HAttrData;\n for (const d in attrData) {\n if (attrData.hasOwnProperty(d)) {\n if (attrData[d].constructor === String) {\n e.dataset[d] = attrData[d] as string;\n } else {\n e.dataset[d] = JSON.stringify(attrData[d]);\n }\n }\n }\n break;\n case \"styles\":\n const attrStyles = attrs[a] as HAttrStyles;\n for (const d in attrStyles) {\n if (attrStyles.hasOwnProperty(d)) {\n (e.style as any)[d] = attrStyles[d];\n }\n }\n break;\n case \"on\":\n const attrOn = attrs[a] as HAttrOn<HAttrOnActType>;\n if (typeof attrOn[0] === \"string\") {\n if (typeof attrOn[1] === \"function\") {\n e.addEventListener(attrOn[0] as string, attrOn[1] as (e: Event) => void);\n } else {\n e.addEventListener(attrOn[0] as string,\n (e: Event) => ctxActionCb(ctx, attrOn, e));\n }\n } else {\n (attrOn as Array<HAttrOnCb | HAttrOnAct<HAttrOnActType>>)\n .forEach(attr => {\n if (typeof attr[1] === \"function\") {\n e.addEventListener(attr[0] as string, attr[1] as (e: Event) => void);\n } else {\n e.addEventListener(attr[0] as string,\n (e: Event) => ctxActionCb(ctx, attr, e));\n }\n });\n }\n break;\n default:\n if (typeof attrs[a] === \"function\") {\n e.addEventListener(a, attrs[a] as (e: Event) => void);\n } else if (typeof attrs[a] === \"boolean\") {\n attrs[a] && e.setAttribute(a, \"\");\n } else {\n e.setAttribute(a, attrs[a] as string);\n }\n }\n }\n }\n if (id) {\n e.setAttribute(\"id\", id);\n }\n if (classes.length) {\n e.classList.add(...classes);\n }\n if (this._current) {\n this._current.appendChild(e);\n this._current = e;\n } else {\n this.element = e;\n this._current = e;\n }\n if (ctx && ref) {\n ctx.refs[ref] = this._current;\n }\n if (hObj && hObj.mount && hObj.mount.constructor === Function) {\n hObj.mount(e);\n }\n return attrs.skip ? true : false;\n }\n\n close(tag: HTagHeadName, children: HElements<HAttrOnActType>, ctx?: HHandlerCtx<HAttrOnActType>): void {\n if (this._current !== this.element) {\n this._current && (this._current = this._current.parentElement ?? undefined);\n }\n }\n\n text(text: string, ctx?: HHandlerCtx<HAttrOnActType>): void {\n this._current && this._current.appendChild(document.createTextNode(text));\n }\n\n fnc(fnc: HFnc, ctx?: HHandlerCtx<HAttrOnActType>): void {\n this._current && fnc(this._current);\n }\n\n obj(obj: HObj<HAttrOnActType>, ctx?: HHandlerCtx<HAttrOnActType>): void {\n if (\"toHsml\" in obj) {\n obj.toHsml && hsml(obj.toHsml(), this, obj as HHandlerCtx<HAttrOnActType>);\n } else {\n this.text(\"\" + obj, ctx);\n }\n }\n\n}\n\nexport function hsml2dom<HAttrOnActType extends string>(hml: HElement<HAttrOnActType>, ctx?: HHandlerCtx<HAttrOnActType>): HTMLElement | undefined {\n const handler = new HsmlDomHandler();\n hsml(hml, handler, ctx);\n return handler.element;\n}\n\nexport function hsmls2dom<HAttrOnActType extends string>(hmls: HElements<HAttrOnActType>, ctx?: HHandlerCtx<HAttrOnActType>): Node[] {\n const elems: Node[] = [];\n for (const hml of hmls) {\n if (hml === undefined || hml === null) {\n continue;\n }\n if (hml.constructor === String) {\n elems.push(document.createTextNode(hml as string));\n } else if (\"toHsml\" in (hml as object)) {\n const obj = hml as HHandlerCtx<HAttrOnActType>;\n if (obj.toHsml) {\n elems.push(hsml2dom(obj.toHsml(), obj)!);\n }\n } else {\n elems.push(hsml2dom(hml, ctx)!);\n }\n }\n return elems;\n}\n","// HSML tag head format \"tag#id.class1.class2~handler\"\n\nexport type HTagHeadName = keyof HTMLElementTagNameMap | `${string}${\"-\"}${string}`;\nexport type HTagHeadAttr = \".\" | \"#\" | \"~\";\n\nexport type HTagHead<T extends string = string> = `${HTagHeadName}` | `${HTagHeadName}${HTagHeadAttr}${T}`;\n\nexport type HAttrClasses = Array<string | [string, boolean]>;\n\nexport type HAttrStyles = { [key: string]: string };\n\nexport type HAttrData = {\n [key: string]:\n | string\n | String\n | number\n | Number\n | boolean\n | Boolean\n | Date\n | Array<any>\n | Object;\n};\n\nexport type HAttrOnDataFnc = (e: Event) => any;\n\nexport type HAttrOnData =\n | string\n | String\n | number\n | Number\n | boolean\n | Boolean\n | Date\n | Array<any>\n | Object\n | HAttrOnDataFnc\n | null;\n\nexport type HAttrOnCb = [keyof HTMLElementEventMap, EventListener];\n\nexport type HAttrOnAct<HAttrOnActType extends string> = [\n keyof HTMLElementEventMap | string,\n HAttrOnActType,\n HAttrOnData?\n];\n\nexport type HAttrOn<HAttrOnActType extends string> = HAttrOnCb | HAttrOnAct<HAttrOnActType> | Array<HAttrOnCb | HAttrOnAct<HAttrOnActType>>;\n\nexport interface HTagAttrs<HAttrOnActType extends string> {\n readonly _id?: string;\n readonly _classes?: string[];\n readonly _ref?: string;\n readonly _hObj?: HObj<HAttrOnActType>;\n readonly key?: string;\n readonly skip?: boolean;\n readonly classes?: HAttrClasses;\n readonly styles?: HAttrStyles;\n readonly data?: HAttrData;\n readonly on?: HAttrOn<HAttrOnActType>;\n readonly [key: string]:\n | string\n | String\n | string[]\n | String[]\n | number\n | Number\n | boolean\n | Boolean\n | Date\n | HAttrClasses\n | HAttrStyles\n // | HsmlAttrData\n | HAttrOn<HAttrOnActType>\n | EventListener\n | HObj<HAttrOnActType>\n | undefined;\n}\n\nexport type HFnc = (e: Element) => boolean | void;\n\nexport interface HObj<HAttrOnActType extends string> {\n toHsml?(): HElement<HAttrOnActType>;\n}\n\nexport interface HElements<HAttrOnActType extends string> extends Array<HElement<HAttrOnActType>> {}\n\nexport type HTagChildren<HAttrOnActType extends string> =\n | HElements<HAttrOnActType>\n | HFnc\n | HObj<HAttrOnActType>\n | string\n | String\n | boolean\n | Boolean\n | number\n | Number\n | Date\n | undefined\n | null;\n\nexport type HTagNoAttr<HAttrOnActType extends string> = [HTagHead, HTagChildren<HAttrOnActType>?];\nexport type HTagWithAttr<HAttrOnActType extends string> = [HTagHead, HTagAttrs<HAttrOnActType>, HTagChildren<HAttrOnActType>?];\n\nexport type HTag<HAttrOnActType extends string> = HTagNoAttr<HAttrOnActType> | HTagWithAttr<HAttrOnActType>;\n\nexport type HElement<HAttrOnActType extends string> =\n | HFnc\n | HObj<HAttrOnActType>\n | HTag<HAttrOnActType>\n | string\n | String\n | boolean\n | Boolean\n | number\n | Number\n | Date\n | undefined\n | null;\n\nexport interface HHandlerCtx<HAttrOnActType extends string> extends HObj<HAttrOnActType> {\n refs: { [name: string]: Element };\n actionCb(action: HAttrOnActType, data: HAttrOnData, e: Event): void;\n}\n\nexport interface HHandler<HAttrOnActType extends string, C extends HHandlerCtx<HAttrOnActType>> {\n open(tag: HTagHeadName, attrs: HTagAttrs<HAttrOnActType>, children: HElements<HAttrOnActType>, ctx?: C): boolean;\n close(tag: HTagHeadName, children: HElements<HAttrOnActType>, ctx?: C): void;\n text(text: string, ctx?: C): void;\n fnc(fnc: HFnc, ctx?: C): void;\n obj(obj: HObj<HAttrOnActType>, ctx?: C): void;\n}\n\nexport const NBSP = \"\\u00a0 \";\n\nexport function hsml<HAttrOnActType extends string, C extends HHandlerCtx<HAttrOnActType>>(\n hml: HElement<HAttrOnActType>,\n handler: HHandler<HAttrOnActType, C>,\n ctx?: C): void {\n // console.log(\"hsml\", hsml);\n if (hml === undefined || hml === null) {\n return;\n }\n switch (hml.constructor) {\n case Array:\n // const tag = hml as HTag;\n // if (\n // (\n // tag.length === 1 &&\n // tag[0].constructor === String\n // ) ||\n // (\n // tag.length === 2 &&\n // (\n // tag[0].constructor === String &&\n // (tag[1]!.constructor === Array || tag[1]!.constructor === Function)\n // ) ||\n // (\n // tag[0].constructor === String &&\n // tag[1]!.constructor === Object\n // )\n // ) ||\n // (\n // tag.length === 3 &&\n // tag[0].constructor === String &&\n // tag[1].constructor === Object &&\n // tag[2]!.constructor === Array\n // )\n // ) {\n // hsmlTag(hml as HTag, handler, ctx);\n // } else {\n // console.error(\"hsml parse error:\", hml);\n // // console.error(\"hsml parse error:\", JSON.stringify(hml, null, 4));\n // // throw Error(`hsml parse error: ${JSON.stringify(hml)}`);\n // }\n hsmlTag(hml as HTag<HAttrOnActType>, handler, ctx);\n break;\n case Function:\n handler.fnc(hml as HFnc, ctx);\n break;\n case String:\n handler.text(hml as string, ctx);\n break;\n case Boolean:\n handler.text(\"\" + hml, ctx);\n break;\n case Number:\n const n = hml as number;\n const ns = n.toLocaleString ? n.toLocaleString() : n.toString();\n handler.text(ns, ctx);\n break;\n case Date:\n const d = hml as Date;\n const ds = d.toLocaleString ? d.toLocaleString() : d.toString();\n handler.text(ds, ctx);\n break;\n default: // HObj\n handler.obj(hml as HObj<HAttrOnActType>, ctx);\n }\n\n function hsmlTag(hmlTag: HTag<HAttrOnActType>, handler: HHandler<HAttrOnActType, C>, ctx?: C): void {\n // console.log(\"hsml tag\", hmlTag);\n\n if (typeof hmlTag[0] !== \"string\") {\n console.error(\"HSML tag head not string:\", hmlTag);\n return;\n }\n\n const head = hmlTag[0] as HTagHead;\n const attrsObj = hmlTag[1] as any;\n const hasAttrs = attrsObj && attrsObj.constructor === Object;\n const childIdx = hasAttrs ? 2 : 1;\n\n let children: HElements<HAttrOnActType> = [];\n let hFnc: HFnc | undefined;\n let hObj: HObj<HAttrOnActType> | undefined;\n\n const htc = hmlTag[childIdx];\n switch (htc != null && htc.constructor) { // switch ((typeof htc !== \"undefined\" || htc !== null) && htc.constructor) {\n case Array:\n children = htc as HElements<HAttrOnActType>;\n break;\n case Function:\n hFnc = htc as HFnc;\n break;\n case String:\n case Boolean:\n case Number:\n case Date:\n children = [htc as string | boolean | number | Date];\n break;\n default: // HObj\n hObj = htc as HObj<HAttrOnActType>;\n break;\n }\n\n const refSplit = head.split(\"~\");\n const ref = refSplit[1];\n const dotSplit = refSplit[0].split(\".\");\n const hashSplit = dotSplit[0].split(\"#\");\n const tag = (hashSplit[0] ?? \"div\") as HTagHeadName;\n const id = hashSplit[1];\n const classes = dotSplit.slice(1);\n\n let attrs: HTagAttrs<HAttrOnActType>;\n if (hasAttrs) {\n attrs = attrsObj as HTagAttrs<HAttrOnActType>;\n } else {\n attrs = {} as HTagAttrs<HAttrOnActType>;\n }\n\n if (id) {\n (attrs as any)._id = id;\n }\n if (classes.length) {\n (attrs as any)._classes = classes;\n }\n if (ref) {\n (attrs as any)._ref = ref;\n }\n if (hObj) {\n (attrs as any)._hObj = hObj;\n }\n\n const skip = handler.open(tag, attrs, children, ctx);\n\n if (hFnc) {\n handler.fnc(hFnc, ctx);\n }\n\n if (!skip) {\n children.forEach(jml => hsml(jml, handler, ctx));\n }\n\n handler.close(tag, children, ctx);\n }\n}\n\nexport function hjoin<HAttrOnActType extends string>(hsmls: HElements<HAttrOnActType>, sep: string | HElement<HAttrOnActType>): HElements<HAttrOnActType> {\n const r = hsmls.reduce<HElements<HAttrOnActType>>(\n (p, c) => (p.push(c, sep), p),\n [] as HElements<HAttrOnActType>\n );\n r.splice(-1);\n return r;\n}\n"],"names":[],"version":3,"file":"hsml-dom.js.map"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":";;;;;;AAUM,SAAU,
|
|
1
|
+
{"mappings":";;;;;;AAUM,SAAU,0CAA6B,GAAa,EAAE,MAAyD,EAAE,KAAwD,EAA/K;IACI,MAAM,SAA6B;QAAC;KAAI;IACxC,IAAI,QAAQ;QACR,IAAI,OAAO,WAAW,YAAY,OAAO,WAAW,UAChD,OAAO,IAAI,CAAC;YAAC;SAAO;aACjB,IAAI,MAAM,OAAO,CAAC,WAAW,OAAO,WAAW,YAClD,OAAO,IAAI,CAAC;aAGZ,OAAO,IAAI,CAAC;IAEnB,CAAA;IACD,IAAI,OAAO;QACP,IAAI,OAAO,UAAU,YAAY,OAAO,UAAU,UAC9C,OAAO,IAAI,CAAC;YAAC;SAAM;aAChB,IAAI,MAAM,OAAO,CAAC,UAAU,OAAO,UAAU,YAChD,OAAO,IAAI,CAAC;IAEnB,CAAA;IACD,OAAO;AACX","sources":["src/hsml-h.ts"],"sourcesContent":["import { HElement, HTagAttrs, HTagHead, HFnc, HTagChildren } from \"./hsml\";\n\nexport function h<ActionType extends string>(tag: HTagHead): HElement<ActionType>;\nexport function h<ActionType extends string>(tag: HTagHead, text: string | number): HElement<ActionType>;\nexport function h<ActionType extends string>(tag: HTagHead, children: HTagChildren<ActionType>): HElement<ActionType>;\nexport function h<ActionType extends string>(tag: HTagHead, fnc: HFnc): HElement<ActionType>;\nexport function h<ActionType extends string>(tag: HTagHead, attrs: HTagAttrs<ActionType>): HElement<ActionType>;\nexport function h<ActionType extends string>(tag: HTagHead, attrs: HTagAttrs<ActionType>, text: string | number): HElement<ActionType>;\nexport function h<ActionType extends string>(tag: HTagHead, attrs: HTagAttrs<ActionType>, children: HElement<ActionType>[]): HElement<ActionType>;\nexport function h<ActionType extends string>(tag: HTagHead, attrs: HTagAttrs<ActionType>, fnc: HFnc): HElement<ActionType>;\nexport function h<ActionType extends string>(tag: HTagHead, second?: HTagAttrs<ActionType> | HTagChildren<ActionType>, third?: HTagAttrs<ActionType> | HTagChildren<ActionType>): HElement<ActionType> {\n const result: [string, ...any[]] = [tag];\n if (second) {\n if (typeof second === \"string\" || typeof second === \"number\") {\n result.push([second]);\n } else if (Array.isArray(second) || typeof second === \"function\") {\n result.push(second);\n } else {\n // element has attributes\n result.push(second);\n }\n }\n if (third) {\n if (typeof third === \"string\" || typeof third === \"number\") {\n result.push([third]);\n } else if (Array.isArray(third) || typeof third === \"function\") {\n result.push(third);\n }\n }\n return result as HElement<ActionType>;\n}\n"],"names":[],"version":3,"file":"hsml-h.js.map"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"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","sources":["src/hsml-html.ts","src/hsml.ts"],"sourcesContent":["import {\n HAttrClasses,\n HAttrData,\n HAttrStyles, HElement,\n HElements, HFnc, HHandler,\n HHandlerCtx, HObj, hsml, HTagAttrs, HTagHeadName\n} from \"./hsml\";\n\nclass HsmlHtmlHandler implements HHandler<HHandlerCtx> {\n\n private static _pairTags = [\n \"script\", \"iframe\",\n \"html\", \"head\", \"body\", \"title\", \"div\",\n \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\",\n \"p\", \"a\", \"pre\", \"blockquote\", \"i\", \"b\", \"em\", \"strong\", \"tt\", \"cite\",\n \"ol\", \"ul\", \"li\", \"dl\", \"dt\", \"dd\", \"table\", \"tr\", \"td\",\n \"textarea\", \"select\", \"option\"];\n\n private _onHtml: (html: string) => void;\n private _pretty: boolean;\n private _indent: string;\n private _depth: number = 0;\n\n constructor(onHtml: (html: string) => void,\n pretty: boolean = false,\n indent: string = \" \") {\n this._onHtml = onHtml;\n this._pretty = pretty;\n this._indent = indent;\n }\n\n open(tag: HTagHeadName, attrs: HTagAttrs, children: HElements, ctx?: HHandlerCtx): boolean {\n const props: any[] = [];\n let id = attrs._id;\n let classes: string[] = attrs._classes ? attrs._classes : [];\n let hObj: any = attrs._hObj;\n for (const a in attrs) {\n if (attrs.hasOwnProperty(a)) {\n switch (a) {\n case \"_id\":\n case \"_classes\":\n case \"_ref\":\n case \"_key\":\n case \"_skip\":\n case \"_hObj\":\n break;\n case \"id\":\n id = attrs[a] as string;\n break;\n case \"classes\":\n const attrClasses = attrs[a] as HAttrClasses;\n classes = classes.concat(attrClasses\n ? attrClasses\n .map(c =>\n c.constructor === String\n ? c as string\n : (c[1] ? c[0] as string : undefined))\n .filter((c): c is string => c !== undefined)\n : [] as string[]);\n break;\n case \"class\":\n classes = classes.concat((attrs[a] as string).split(\" \"));\n break;\n case \"data\":\n const attrData = attrs[a] as HAttrData;\n for (const d in attrData) {\n if (attrData.hasOwnProperty(d)) {\n if (attrData[d].constructor === String) {\n props.push([\"data-\" + d, attrData[d]]);\n } else {\n props.push([\"data-\" + d, JSON.stringify(attrData[d])]);\n }\n }\n }\n break;\n case \"styles\":\n const attrStyles = attrs[a] as HAttrStyles;\n let style = \"\";\n for (const d in attrStyles) {\n if (attrStyles.hasOwnProperty(d)) {\n const dd = d.replace(/([a-z])([A-Z])/g, \"$1-$2\").toLowerCase();\n style += dd + \":\" + attrStyles[d] + \";\";\n }\n }\n props.push([\"style\", style]);\n break;\n case \"styles\":\n break;\n case \"on\":\n break;\n default:\n if (typeof attrs[a] === \"function\") {\n // ignore\n } else if (typeof attrs[a] === \"boolean\") {\n attrs[a] && props.push([a, \"\"]);\n } else {\n props.push([a, attrs[a]]);\n }\n }\n }\n }\n if (classes.length) {\n props.unshift([\"class\", classes.join(\" \")]);\n }\n if (id) {\n props.unshift([\"id\", id]);\n }\n if (hObj && \"type\" in hObj) {\n props.unshift([\"hObj\", hObj.type]);\n }\n const args = props.map(p => `${p[0]}=\"${escapeHtml(p[1])}\"`).join(\" \");\n let html = \"\";\n if (this._pretty) {\n html += this._mkIndent(this._depth);\n this._depth++;\n }\n const pairTag = (children.length || HsmlHtmlHandler._pairTags.indexOf(tag) !== -1);\n html += \"<\" + tag + (args ? \" \" + args : \"\") + (pairTag ? \">\" : \"/>\");\n if (this._pretty) {\n html += \"\\n\";\n }\n this._onHtml(html);\n if (hObj && \"render\" in hObj && hObj.render.constructor === Function) {\n const hsmls = hObj.render() as HElements;\n for (const hml of hsmls) {\n if (hml === undefined || hml === null) {\n continue;\n }\n if (hml.constructor === String) {\n this._onHtml(hml + (this._pretty ? \"\\n\" : \"\"));\n } else if (\"toHsml\" in (hml as any)) {\n const obj = hml as HObj;\n obj.toHsml && hsml(obj.toHsml(), this);\n } else {\n hsml(hml as HElement, this);\n }\n }\n }\n return false;\n }\n\n close(tag: HTagHeadName, children: HElements, ctx?: HHandlerCtx): void {\n let html = \"\";\n const pairTag = (children.length || HsmlHtmlHandler._pairTags.indexOf(tag) !== -1);\n if (this._pretty) {\n this._depth--;\n if (pairTag) {\n html += this._mkIndent(this._depth);\n }\n }\n if (pairTag) {\n html += \"</\" + tag + \">\";\n if (this._pretty) {\n html += \"\\n\";\n }\n this._onHtml(html);\n }\n }\n\n text(text: string, ctx?: HHandlerCtx): void {\n let html = \"\";\n if (this._pretty) {\n html += this._mkIndent(this._depth);\n }\n html += (text as any) instanceof String\n ? text\n : escapeHtml(text);\n if (this._pretty) {\n html += \"\\n\";\n }\n this._onHtml(html);\n }\n\n fnc(fnc: HFnc, ctx?: HHandlerCtx): void {\n }\n\n obj(obj: HObj, ctx?: HHandlerCtx): void {\n if (\"toHsml\" in obj) {\n obj.toHsml && hsml(obj.toHsml(), this, obj as HHandlerCtx);\n } else {\n this.text(\"\" + obj, ctx);\n }\n }\n\n private _mkIndent(count: number): string {\n let indent = \"\";\n for (let i = 0; i < count; i++) {\n indent += this._indent;\n }\n return indent;\n }\n\n}\n\nexport function hsml2html(hsmlEl: HElement, onHtml: (html: string) => void, pretty = false): void {\n const handler = new HsmlHtmlHandler(onHtml, pretty);\n hsml(hsmlEl, handler);\n}\n\nexport function hsmls2html(hsmls: HElements, onHtml: (html: string) => void, pretty = false): void {\n for (const hml of hsmls) {\n if (hml === undefined || hml === null) {\n continue;\n }\n if (hml.constructor === String) {\n onHtml(hml + (pretty ? \"\\n\" : \"\"));\n } else if (\"toHsml\" in (hml as any)) {\n const obj = hml as HObj;\n obj.toHsml && hsml2html(obj.toHsml(), onHtml, pretty);\n } else {\n hsml2html(hml as HElement, onHtml, pretty);\n }\n }\n}\n\nexport function hsml2htmls(hsml: HElement, pretty = false): string[] {\n const htmls: string[] = [];\n hsml2html(hsml, html => htmls.push(html), pretty);\n return htmls;\n}\n\nexport function hsmls2htmls(hsmls: HElements, pretty = false): string[] {\n const htmls: string[] = [];\n hsmls2html(hsmls, html => htmls.push(html), pretty);\n return htmls;\n}\n\nconst escapeHtmlRegExp = /[\"'&<>]/;\n\n// TODO: check performance\n// const escapeHTML = (html: string) => html.replace(/[&<>'\"]/g,\n// tag => (({\n// '&': '&',\n// '<': '<',\n// '>': '>',\n// \"'\": ''',\n// '\"': '"'\n// } as any)[tag]));\n\nfunction escapeHtml(html: string): string {\n const str = \"\" + html;\n const m = escapeHtmlRegExp.exec(str);\n if (!m) {\n return str;\n }\n let esc;\n let escHtml = \"\";\n let idx = 0;\n let lastIdx = 0;\n for (idx = m.index; idx < str.length; idx++) {\n switch (str.charCodeAt(idx)) {\n case 34: // \"\n esc = \""\";\n break;\n case 38: // &\n esc = \"&\";\n break;\n case 39: // '\n esc = \"'\";\n break;\n case 60: // <\n esc = \"<\";\n break;\n case 62: // >\n esc = \">\";\n break;\n default:\n continue;\n }\n if (lastIdx !== idx) {\n escHtml += str.substring(lastIdx, idx);\n }\n lastIdx = idx + 1;\n escHtml += esc;\n }\n return lastIdx !== idx\n ? escHtml + str.substring(lastIdx, idx)\n : escHtml;\n}\n\n// Test\n\n// const hsmls: HElements = [\n// \"text\",\n// [\"tag\", [\n// \"d\",\n// [\"\"]\n// ]],\n// [\"taga\",\n// {\n// attr: \"escape html attr entities: \\\" ' & < >\",\n// classes: [\"class\"]\n// },\n// [\n// \"text\",\n// \"escape html entities: \\\" ' & < >\",\n// new String(\"escape html entities: \\\" ' & < >\"),\n// 123,\n// true\n// ]\n// ]\n// ];\n\n// const hml: HElement = [\"xxx\", {}, [\n// \"types\", \" \", 1235.456, \" \", new Date(), \" \",\n// ...hsmls,\n// [\"t\", [\"t\", \"a\", \"\"]],\n// [\"t\", {}, [\"t\", \"a\", \"\"]],\n// [\"a\", { href: \"url\", onclick: \"return confirm('Confirm please')\" }, \"link\"]\n// ]];\n\n// console.log(hsmls, hml);\n\n// const html = hsml2htmls(hml, true);\n// console.log(html.join(\"\"));\n","// HSML tag head format \"tag#id.class1.class2~handler\"\n\nexport type HTagHeadName = keyof HTMLElementTagNameMap;\nexport type HTagHeadAttr = \".\" | \"#\" | \"~\";\n\nexport type HTagHead<T extends string = string> = `${HTagHeadName}` | `${HTagHeadName}${HTagHeadAttr}${T}`;\n\nexport type HAttrClasses = Array<string | [string, boolean]>;\n\nexport type HAttrStyles = { [key: string]: string };\n\nexport type HAttrData = {\n [key: string]:\n | string\n | String\n | number\n | Number\n | boolean\n | Boolean\n | Date\n | Array<any>\n | Object;\n};\n\nexport type HAttrOnAction = string;\n\nexport type HAttrOnDataFnc = (e: Event) => any;\n\nexport type HAttrOnData =\n | string\n | String\n | number\n | Number\n | boolean\n | Boolean\n | Date\n | Array<any>\n | Object\n | HAttrOnDataFnc\n | null;\n\nexport type HAttrOnCb = [keyof HTMLElementEventMap, EventListener];\n\nexport type HAttrOnAct = [\n keyof HTMLElementEventMap | string,\n HAttrOnAction,\n HAttrOnData?\n];\n\nexport type HAttrOn = HAttrOnCb | HAttrOnAct | Array<HAttrOnCb | HAttrOnAct>;\n\nexport interface HTagAttrs {\n readonly _id?: string;\n readonly _classes?: string[];\n readonly _ref?: string;\n readonly _key?: string;\n readonly _skip?: boolean;\n readonly _hObj?: HObj;\n readonly classes?: HAttrClasses;\n readonly styles?: HAttrStyles;\n readonly data?: HAttrData;\n readonly on?: HAttrOn;\n readonly [key: string]:\n | string\n | String\n | string[]\n | String[]\n | number\n | Number\n | boolean\n | Boolean\n | Date\n | HAttrClasses\n | HAttrStyles\n // | HsmlAttrData\n | HAttrOn\n | EventListener\n | HObj\n | undefined;\n}\n\nexport type HFnc = (e: Element) => boolean | void;\n\nexport interface HObj {\n toHsml?(): HElement;\n}\n\nexport interface HElements extends Array<HElement> {}\n\nexport type HTagChildren =\n | HElements\n | HFnc\n | HObj\n | string\n | String\n | boolean\n | Boolean\n | number\n | Number\n | Date\n | undefined\n | null;\n\nexport type HTagNoAttr = [HTagHead, HTagChildren?];\nexport type HTagWithAttr = [HTagHead, HTagAttrs, HTagChildren?];\n\nexport type HTag = HTagNoAttr | HTagWithAttr;\n\nexport type HElement =\n | HFnc\n | HObj\n | HTag\n | string\n | String\n | boolean\n | Boolean\n | number\n | Number\n | Date\n | undefined\n | null;\n\nexport interface HHandlerCtx extends HObj {\n refs: { [name: string]: Element };\n actionCb(action: HAttrOnAction, data: HAttrOnData, e: Event): void;\n}\n\nexport interface HHandler<C extends HHandlerCtx> {\n open(tag: HTagHeadName, attrs: HTagAttrs, children: HElements, ctx?: C): boolean;\n close(tag: HTagHeadName, children: HElements, ctx?: C): void;\n text(text: string, ctx?: C): void;\n fnc(fnc: HFnc, ctx?: C): void;\n obj(obj: HObj, ctx?: C): void;\n}\n\nexport const NBSP = \"\\u00a0 \";\n\nexport function hsml<C extends HHandlerCtx>(hml: HElement,\n handler: HHandler<C>,\n ctx?: C): void {\n // console.log(\"hsml\", hsml);\n if (hml === undefined || hml === null) {\n return;\n }\n switch (hml.constructor) {\n case Array:\n // const tag = hml as HTag;\n // if (\n // (\n // tag.length === 1 &&\n // tag[0].constructor === String\n // ) ||\n // (\n // tag.length === 2 &&\n // (\n // tag[0].constructor === String &&\n // (tag[1]!.constructor === Array || tag[1]!.constructor === Function)\n // ) ||\n // (\n // tag[0].constructor === String &&\n // tag[1]!.constructor === Object\n // )\n // ) ||\n // (\n // tag.length === 3 &&\n // tag[0].constructor === String &&\n // tag[1].constructor === Object &&\n // tag[2]!.constructor === Array\n // )\n // ) {\n // hsmlTag(hml as HTag, handler, ctx);\n // } else {\n // console.error(\"hsml parse error:\", hml);\n // // console.error(\"hsml parse error:\", JSON.stringify(hml, null, 4));\n // // throw Error(`hsml parse error: ${JSON.stringify(hml)}`);\n // }\n hsmlTag(hml as HTag, handler, ctx);\n break;\n case Function:\n handler.fnc(hml as HFnc, ctx);\n break;\n case String:\n handler.text(hml as string, ctx);\n break;\n case Boolean:\n handler.text(\"\" + hml, ctx);\n break;\n case Number:\n const n = hml as number;\n const ns = n.toLocaleString ? n.toLocaleString() : n.toString();\n handler.text(ns, ctx);\n break;\n case Date:\n const d = hml as Date;\n const ds = d.toLocaleString ? d.toLocaleString() : d.toString();\n handler.text(ds, ctx);\n break;\n default: // HObj\n handler.obj(hml as HObj, ctx);\n }\n\n function hsmlTag(hmlTag: HTag, handler: HHandler<C>, ctx?: C): void {\n // console.log(\"hsml tag\", hmlTag);\n\n if (typeof hmlTag[0] !== \"string\") {\n console.error(\"HSML tag head not string:\", hmlTag);\n return;\n }\n\n const head = hmlTag[0] as HTagHead;\n const attrsObj = hmlTag[1] as any;\n const hasAttrs = attrsObj && attrsObj.constructor === Object;\n const childIdx = hasAttrs ? 2 : 1;\n\n let children: HElements = [];\n let hFnc: HFnc | undefined;\n let hObj: HObj | undefined;\n\n const htc = hmlTag[childIdx];\n switch (htc != null && htc.constructor) { // switch ((typeof htc !== \"undefined\" || htc !== null) && htc.constructor) {\n case Array:\n children = htc as HElements;\n break;\n case Function:\n hFnc = htc as HFnc;\n break;\n case String:\n case Boolean:\n case Number:\n case Date:\n children = [htc as string | boolean | number | Date];\n break;\n default: // HObj\n hObj = htc as HObj;\n break;\n }\n\n const refSplit = head.split(\"~\");\n const ref = refSplit[1];\n const dotSplit = refSplit[0].split(\".\");\n const hashSplit = dotSplit[0].split(\"#\");\n const tag = (hashSplit[0] ?? \"div\") as HTagHeadName;\n const id = hashSplit[1];\n const classes = dotSplit.slice(1);\n\n let attrs: HTagAttrs;\n if (hasAttrs) {\n attrs = attrsObj as HTagAttrs;\n } else {\n attrs = {} as HTagAttrs;\n }\n\n if (id) {\n (attrs as any)._id = id;\n }\n if (classes.length) {\n (attrs as any)._classes = classes;\n }\n if (ref) {\n (attrs as any)._ref = ref;\n }\n if (hObj) {\n (attrs as any)._hObj = hObj;\n }\n\n const skip = handler.open(tag, attrs, children, ctx);\n\n if (hFnc) {\n handler.fnc(hFnc, ctx);\n }\n\n if (!skip) {\n children.forEach(jml => hsml(jml, handler, ctx));\n }\n\n handler.close(tag, children, ctx);\n }\n}\n\nexport function hjoin(hsmls: HElements, sep: string | HElement): HElements {\n const r = hsmls.reduce<HElements>(\n (p, c) => (p.push(c, sep), p),\n [] as HElements\n );\n r.splice(-1);\n return r;\n}\n\n// Test\n\n// const hsmls: Hsmls = [\n// \"text\",\n// [\"tag\", [\n// \"d\",\n// [\"\"]\n// ]],\n// [\"taga\", { attr: \"attr\", classes: [\"class\"] }, [\n// \"text\",\n// 123,\n// true\n// ]]\n// ];\n\n// const hml: Hsml = [\"xxx\", {}, [\n// \"types\", \" \", 1235.456, \" \", new Date(), \" \",\n// ...hsmls,\n// [\"t\", [\"t\", \"a\", \"\"]],\n// [\"t\", {}, [\"t\", \"a\", \"\"]],\n// [\"t\"]\n// ]];\n\n// console.log(hsmls, hml);\n\n// const hml1: Hsml = [\"div\", null, [\n// [\"span\", null, [\n// [\"a\",\n// {\n// href: \"https://gitlab.com/peter-rybar/diasheet\",\n// title: \"GitLab\",\n// target: \"_blank\"\n// },\n// [[\"i.fa.fa-gitlab\"]]\n// ]\n// ]],\n// [\"span\"]\n// ]];\n// console.log(hml1);\n\n// const hml2: Hsml = [\"div\", [\n// [\"h2\", [\"title\"]],\n// [\"div.w3-card-12\", [\n// [\"header.w3-container w3-light-grey\", [\n// [\"h3\", [\"Account: \", \"User\"]]\n// ]],\n// [\"div.w3-container.w3-light-grey\", [\n// [\"p\", [\"Balance: 4 DCT\"]],\n// [\"br\"]\n// ]],\n// [\"h4\", [\"Your account spending\"]],\n// [\"div#piechart\"],\n// [\"h4\", [\"Your account balance\"]],\n// [\"div#linechart\"],\n// [\"button.w3-button.w3-block.w3-dark-grey\", [\"Refresh\"]]\n// ]],\n// [\"br\"]\n// ]];\n// console.log(hml2);\n\n// TEST\n\n// import { hsmls2htmls } from \"./hsml-html\";\n// import { HDispatch } from \"./hsml-app\";\n\n// const dispatch: HDispatch = (type: string, data?: any, event?: Event): void => {\n// console.log(\"action:\", type, data, event);\n// };\n\n// const data = { attr: \"action-data\" };\n\n// const hmls: HElements = [\n// [\"button\", { on: [\"click\", \"action\", data] }, \"send\"],\n// [\"h1\", \"aaa\"],\n// [\"input\",\n// {\n// type: \"text\",\n// on: [\n// [\"mouseover\", \"hover-action\", data],\n// [\"change\", \"click-action\", e => (e.target as HTMLInputElement).value],\n// [\"click\", e => dispatch(\"action\", data, e)],\n// ],\n// click: e => dispatch(\"action\", data, e)\n// }\n// ],\n// [\"button\",\n// {\n// on: [\"click\", e => dispatch(\"action\", data, e)],\n// click: e => dispatch(\"action\", data, e)\n// },\n// [\"Send\"]\n// ]\n// ];\n\n// console.log(hsmls2htmls(hmls, true).join(\"\"));\n"],"names":[],"version":3,"file":"hsml-html.js.map"}
|
|
1
|
+
{"mappings":"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","sources":["src/hsml-html.ts","src/hsml.ts"],"sourcesContent":["import {\n HAttrClasses,\n HAttrData,\n HAttrStyles, HElement,\n HElements, HFnc, HHandler,\n HHandlerCtx, HObj, hsml, HTagAttrs, HTagHeadName\n} from \"./hsml\";\n\nclass HsmlHtmlHandler<HAttrOnActType extends string> implements HHandler<HAttrOnActType, HHandlerCtx<HAttrOnActType>> {\n\n private static _pairTags = [\n \"script\", \"iframe\",\n \"html\", \"head\", \"body\", \"title\", \"div\",\n \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\",\n \"p\", \"a\", \"pre\", \"blockquote\", \"i\", \"b\", \"em\", \"strong\", \"tt\", \"cite\",\n \"ol\", \"ul\", \"li\", \"dl\", \"dt\", \"dd\", \"table\", \"tr\", \"td\",\n \"textarea\", \"select\", \"option\"];\n\n private _onHtml: (html: string) => void;\n private _pretty: boolean;\n private _indent: string;\n private _depth: number = 0;\n\n constructor(onHtml: (html: string) => void,\n pretty: boolean = false,\n indent: string = \" \") {\n this._onHtml = onHtml;\n this._pretty = pretty;\n this._indent = indent;\n }\n\n open(tag: HTagHeadName, attrs: HTagAttrs<HAttrOnActType>, children: HElements<HAttrOnActType>, ctx?: HHandlerCtx<HAttrOnActType>): boolean {\n const props: any[] = [];\n let id = attrs._id;\n let classes: string[] = attrs._classes ? attrs._classes : [];\n let hObj: any = attrs._hObj;\n for (const a in attrs) {\n if (attrs.hasOwnProperty(a)) {\n switch (a) {\n case \"_id\":\n case \"_classes\":\n case \"_ref\":\n case \"_hObj\":\n case \"key\":\n case \"skip\":\n break;\n case \"id\":\n id = attrs[a] as string;\n break;\n case \"classes\":\n const attrClasses = attrs[a] as HAttrClasses;\n classes = classes.concat(attrClasses\n ? attrClasses\n .map(c =>\n c.constructor === String\n ? c as string\n : (c[1] ? c[0] as string : undefined))\n .filter((c): c is string => c !== undefined)\n : [] as string[]);\n break;\n case \"class\":\n classes = classes.concat((attrs[a] as string).split(\" \"));\n break;\n case \"data\":\n const attrData = attrs[a] as HAttrData;\n for (const d in attrData) {\n if (attrData.hasOwnProperty(d)) {\n if (attrData[d].constructor === String) {\n props.push([\"data-\" + d, attrData[d]]);\n } else {\n props.push([\"data-\" + d, JSON.stringify(attrData[d])]);\n }\n }\n }\n break;\n case \"styles\":\n const attrStyles = attrs[a] as HAttrStyles;\n let style = \"\";\n for (const d in attrStyles) {\n if (attrStyles.hasOwnProperty(d)) {\n const dd = d.replace(/([a-z])([A-Z])/g, \"$1-$2\").toLowerCase();\n style += dd + \":\" + attrStyles[d] + \";\";\n }\n }\n props.push([\"style\", style]);\n break;\n case \"styles\":\n break;\n case \"on\":\n break;\n default:\n if (typeof attrs[a] === \"function\") {\n // ignore\n } else if (typeof attrs[a] === \"boolean\") {\n attrs[a] && props.push([a, \"\"]);\n } else {\n props.push([a, attrs[a]]);\n }\n }\n }\n }\n if (classes.length) {\n props.unshift([\"class\", classes.join(\" \")]);\n }\n if (id) {\n props.unshift([\"id\", id]);\n }\n if (hObj && \"type\" in hObj) {\n props.unshift([\"hObj\", hObj.type]);\n }\n const args = props.map(p => `${p[0]}=\"${escapeHtml(p[1])}\"`).join(\" \");\n let html = \"\";\n if (this._pretty) {\n html += this._mkIndent(this._depth);\n this._depth++;\n }\n const pairTag = (children.length || HsmlHtmlHandler._pairTags.indexOf(tag) !== -1);\n html += \"<\" + tag + (args ? \" \" + args : \"\") + (pairTag ? \">\" : \"/>\");\n if (this._pretty) {\n html += \"\\n\";\n }\n this._onHtml(html);\n if (hObj && \"render\" in hObj && hObj.render.constructor === Function) {\n const hsmls = hObj.render() as HElements<HAttrOnActType>;\n for (const hml of hsmls) {\n if (hml === undefined || hml === null) {\n continue;\n }\n if (hml.constructor === String) {\n this._onHtml(hml + (this._pretty ? \"\\n\" : \"\"));\n } else if (\"toHsml\" in (hml as any)) {\n const obj = hml as HObj<HAttrOnActType>;\n obj.toHsml && hsml(obj.toHsml(), this);\n } else {\n hsml(hml as HElement<HAttrOnActType>, this);\n }\n }\n }\n return false;\n }\n\n close(tag: HTagHeadName, children: HElements<HAttrOnActType>, ctx?: HHandlerCtx<HAttrOnActType>): void {\n let html = \"\";\n const pairTag = (children.length || HsmlHtmlHandler._pairTags.indexOf(tag) !== -1);\n if (this._pretty) {\n this._depth--;\n if (pairTag) {\n html += this._mkIndent(this._depth);\n }\n }\n if (pairTag) {\n html += \"</\" + tag + \">\";\n if (this._pretty) {\n html += \"\\n\";\n }\n this._onHtml(html);\n }\n }\n\n text(text: string, ctx?: HHandlerCtx<HAttrOnActType>): void {\n let html = \"\";\n if (this._pretty) {\n html += this._mkIndent(this._depth);\n }\n html += (text as any) instanceof String\n ? text\n : escapeHtml(text);\n if (this._pretty) {\n html += \"\\n\";\n }\n this._onHtml(html);\n }\n\n fnc(fnc: HFnc, ctx?: HHandlerCtx<HAttrOnActType>): void {\n }\n\n obj(obj: HObj<HAttrOnActType>, ctx?: HHandlerCtx<HAttrOnActType>): void {\n if (\"toHsml\" in obj) {\n obj.toHsml && hsml(obj.toHsml(), this, obj as HHandlerCtx<HAttrOnActType>);\n } else {\n this.text(\"\" + obj, ctx);\n }\n }\n\n private _mkIndent(count: number): string {\n let indent = \"\";\n for (let i = 0; i < count; i++) {\n indent += this._indent;\n }\n return indent;\n }\n\n}\n\nexport function hsml2html<HAttrOnActType extends string>(hsmlEl: HElement<HAttrOnActType>, onHtml: (html: string) => void, pretty = false): void {\n const handler = new HsmlHtmlHandler(onHtml, pretty);\n hsml(hsmlEl, handler);\n}\n\nexport function hsmls2html<HAttrOnActType extends string>(hsmls: HElements<HAttrOnActType>, onHtml: (html: string) => void, pretty = false): void {\n for (const hml of hsmls) {\n if (hml === undefined || hml === null) {\n continue;\n }\n if (hml.constructor === String) {\n onHtml(hml + (pretty ? \"\\n\" : \"\"));\n } else if (\"toHsml\" in (hml as any)) {\n const obj = hml as HObj<HAttrOnActType>;\n obj.toHsml && hsml2html(obj.toHsml(), onHtml, pretty);\n } else {\n hsml2html(hml as HElement<HAttrOnActType>, onHtml, pretty);\n }\n }\n}\n\nexport function hsml2htmls<HAttrOnActType extends string>(hsml: HElement<HAttrOnActType>, pretty = false): string[] {\n const htmls: string[] = [];\n hsml2html(hsml, html => htmls.push(html), pretty);\n return htmls;\n}\n\nexport function hsmls2htmls<HAttrOnActType extends string>(hsmls: HElements<HAttrOnActType>, pretty = false): string[] {\n const htmls: string[] = [];\n hsmls2html(hsmls, html => htmls.push(html), pretty);\n return htmls;\n}\n\nconst escapeHtmlRegExp = /[\"'&<>]/;\n\n// TODO: check performance\n// const escapeHTML = (html: string) => html.replace(/[&<>'\"]/g,\n// tag => (({\n// '&': '&',\n// '<': '<',\n// '>': '>',\n// \"'\": ''',\n// '\"': '"'\n// } as any)[tag]));\n\nfunction escapeHtml(html: string): string {\n const str = \"\" + html;\n const m = escapeHtmlRegExp.exec(str);\n if (!m) {\n return str;\n }\n let esc;\n let escHtml = \"\";\n let idx = 0;\n let lastIdx = 0;\n for (idx = m.index; idx < str.length; idx++) {\n switch (str.charCodeAt(idx)) {\n case 34: // \"\n esc = \""\";\n break;\n case 38: // &\n esc = \"&\";\n break;\n case 39: // '\n esc = \"'\";\n break;\n case 60: // <\n esc = \"<\";\n break;\n case 62: // >\n esc = \">\";\n break;\n default:\n continue;\n }\n if (lastIdx !== idx) {\n escHtml += str.substring(lastIdx, idx);\n }\n lastIdx = idx + 1;\n escHtml += esc;\n }\n return lastIdx !== idx\n ? escHtml + str.substring(lastIdx, idx)\n : escHtml;\n}\n\n// Test\n\n// const hsmls: HElements = [\n// \"text\",\n// [\"tag\", [\n// \"d\",\n// [\"\"]\n// ]],\n// [\"taga\",\n// {\n// attr: \"escape html attr entities: \\\" ' & < >\",\n// classes: [\"class\"]\n// },\n// [\n// \"text\",\n// \"escape html entities: \\\" ' & < >\",\n// new String(\"escape html entities: \\\" ' & < >\"),\n// 123,\n// true\n// ]\n// ]\n// ];\n\n// const hml: HElement = [\"xxx\", {}, [\n// \"types\", \" \", 1235.456, \" \", new Date(), \" \",\n// ...hsmls,\n// [\"t\", [\"t\", \"a\", \"\"]],\n// [\"t\", {}, [\"t\", \"a\", \"\"]],\n// [\"a\", { href: \"url\", onclick: \"return confirm('Confirm please')\" }, \"link\"]\n// ]];\n\n// console.log(hsmls, hml);\n\n// const html = hsml2htmls(hml, true);\n// console.log(html.join(\"\"));\n","// HSML tag head format \"tag#id.class1.class2~handler\"\n\nexport type HTagHeadName = keyof HTMLElementTagNameMap | `${string}${\"-\"}${string}`;\nexport type HTagHeadAttr = \".\" | \"#\" | \"~\";\n\nexport type HTagHead<T extends string = string> = `${HTagHeadName}` | `${HTagHeadName}${HTagHeadAttr}${T}`;\n\nexport type HAttrClasses = Array<string | [string, boolean]>;\n\nexport type HAttrStyles = { [key: string]: string };\n\nexport type HAttrData = {\n [key: string]:\n | string\n | String\n | number\n | Number\n | boolean\n | Boolean\n | Date\n | Array<any>\n | Object;\n};\n\nexport type HAttrOnDataFnc = (e: Event) => any;\n\nexport type HAttrOnData =\n | string\n | String\n | number\n | Number\n | boolean\n | Boolean\n | Date\n | Array<any>\n | Object\n | HAttrOnDataFnc\n | null;\n\nexport type HAttrOnCb = [keyof HTMLElementEventMap, EventListener];\n\nexport type HAttrOnAct<HAttrOnActType extends string> = [\n keyof HTMLElementEventMap | string,\n HAttrOnActType,\n HAttrOnData?\n];\n\nexport type HAttrOn<HAttrOnActType extends string> = HAttrOnCb | HAttrOnAct<HAttrOnActType> | Array<HAttrOnCb | HAttrOnAct<HAttrOnActType>>;\n\nexport interface HTagAttrs<HAttrOnActType extends string> {\n readonly _id?: string;\n readonly _classes?: string[];\n readonly _ref?: string;\n readonly _hObj?: HObj<HAttrOnActType>;\n readonly key?: string;\n readonly skip?: boolean;\n readonly classes?: HAttrClasses;\n readonly styles?: HAttrStyles;\n readonly data?: HAttrData;\n readonly on?: HAttrOn<HAttrOnActType>;\n readonly [key: string]:\n | string\n | String\n | string[]\n | String[]\n | number\n | Number\n | boolean\n | Boolean\n | Date\n | HAttrClasses\n | HAttrStyles\n // | HsmlAttrData\n | HAttrOn<HAttrOnActType>\n | EventListener\n | HObj<HAttrOnActType>\n | undefined;\n}\n\nexport type HFnc = (e: Element) => boolean | void;\n\nexport interface HObj<HAttrOnActType extends string> {\n toHsml?(): HElement<HAttrOnActType>;\n}\n\nexport interface HElements<HAttrOnActType extends string> extends Array<HElement<HAttrOnActType>> {}\n\nexport type HTagChildren<HAttrOnActType extends string> =\n | HElements<HAttrOnActType>\n | HFnc\n | HObj<HAttrOnActType>\n | string\n | String\n | boolean\n | Boolean\n | number\n | Number\n | Date\n | undefined\n | null;\n\nexport type HTagNoAttr<HAttrOnActType extends string> = [HTagHead, HTagChildren<HAttrOnActType>?];\nexport type HTagWithAttr<HAttrOnActType extends string> = [HTagHead, HTagAttrs<HAttrOnActType>, HTagChildren<HAttrOnActType>?];\n\nexport type HTag<HAttrOnActType extends string> = HTagNoAttr<HAttrOnActType> | HTagWithAttr<HAttrOnActType>;\n\nexport type HElement<HAttrOnActType extends string> =\n | HFnc\n | HObj<HAttrOnActType>\n | HTag<HAttrOnActType>\n | string\n | String\n | boolean\n | Boolean\n | number\n | Number\n | Date\n | undefined\n | null;\n\nexport interface HHandlerCtx<HAttrOnActType extends string> extends HObj<HAttrOnActType> {\n refs: { [name: string]: Element };\n actionCb(action: HAttrOnActType, data: HAttrOnData, e: Event): void;\n}\n\nexport interface HHandler<HAttrOnActType extends string, C extends HHandlerCtx<HAttrOnActType>> {\n open(tag: HTagHeadName, attrs: HTagAttrs<HAttrOnActType>, children: HElements<HAttrOnActType>, ctx?: C): boolean;\n close(tag: HTagHeadName, children: HElements<HAttrOnActType>, ctx?: C): void;\n text(text: string, ctx?: C): void;\n fnc(fnc: HFnc, ctx?: C): void;\n obj(obj: HObj<HAttrOnActType>, ctx?: C): void;\n}\n\nexport const NBSP = \"\\u00a0 \";\n\nexport function hsml<HAttrOnActType extends string, C extends HHandlerCtx<HAttrOnActType>>(\n hml: HElement<HAttrOnActType>,\n handler: HHandler<HAttrOnActType, C>,\n ctx?: C): void {\n // console.log(\"hsml\", hsml);\n if (hml === undefined || hml === null) {\n return;\n }\n switch (hml.constructor) {\n case Array:\n // const tag = hml as HTag;\n // if (\n // (\n // tag.length === 1 &&\n // tag[0].constructor === String\n // ) ||\n // (\n // tag.length === 2 &&\n // (\n // tag[0].constructor === String &&\n // (tag[1]!.constructor === Array || tag[1]!.constructor === Function)\n // ) ||\n // (\n // tag[0].constructor === String &&\n // tag[1]!.constructor === Object\n // )\n // ) ||\n // (\n // tag.length === 3 &&\n // tag[0].constructor === String &&\n // tag[1].constructor === Object &&\n // tag[2]!.constructor === Array\n // )\n // ) {\n // hsmlTag(hml as HTag, handler, ctx);\n // } else {\n // console.error(\"hsml parse error:\", hml);\n // // console.error(\"hsml parse error:\", JSON.stringify(hml, null, 4));\n // // throw Error(`hsml parse error: ${JSON.stringify(hml)}`);\n // }\n hsmlTag(hml as HTag<HAttrOnActType>, handler, ctx);\n break;\n case Function:\n handler.fnc(hml as HFnc, ctx);\n break;\n case String:\n handler.text(hml as string, ctx);\n break;\n case Boolean:\n handler.text(\"\" + hml, ctx);\n break;\n case Number:\n const n = hml as number;\n const ns = n.toLocaleString ? n.toLocaleString() : n.toString();\n handler.text(ns, ctx);\n break;\n case Date:\n const d = hml as Date;\n const ds = d.toLocaleString ? d.toLocaleString() : d.toString();\n handler.text(ds, ctx);\n break;\n default: // HObj\n handler.obj(hml as HObj<HAttrOnActType>, ctx);\n }\n\n function hsmlTag(hmlTag: HTag<HAttrOnActType>, handler: HHandler<HAttrOnActType, C>, ctx?: C): void {\n // console.log(\"hsml tag\", hmlTag);\n\n if (typeof hmlTag[0] !== \"string\") {\n console.error(\"HSML tag head not string:\", hmlTag);\n return;\n }\n\n const head = hmlTag[0] as HTagHead;\n const attrsObj = hmlTag[1] as any;\n const hasAttrs = attrsObj && attrsObj.constructor === Object;\n const childIdx = hasAttrs ? 2 : 1;\n\n let children: HElements<HAttrOnActType> = [];\n let hFnc: HFnc | undefined;\n let hObj: HObj<HAttrOnActType> | undefined;\n\n const htc = hmlTag[childIdx];\n switch (htc != null && htc.constructor) { // switch ((typeof htc !== \"undefined\" || htc !== null) && htc.constructor) {\n case Array:\n children = htc as HElements<HAttrOnActType>;\n break;\n case Function:\n hFnc = htc as HFnc;\n break;\n case String:\n case Boolean:\n case Number:\n case Date:\n children = [htc as string | boolean | number | Date];\n break;\n default: // HObj\n hObj = htc as HObj<HAttrOnActType>;\n break;\n }\n\n const refSplit = head.split(\"~\");\n const ref = refSplit[1];\n const dotSplit = refSplit[0].split(\".\");\n const hashSplit = dotSplit[0].split(\"#\");\n const tag = (hashSplit[0] ?? \"div\") as HTagHeadName;\n const id = hashSplit[1];\n const classes = dotSplit.slice(1);\n\n let attrs: HTagAttrs<HAttrOnActType>;\n if (hasAttrs) {\n attrs = attrsObj as HTagAttrs<HAttrOnActType>;\n } else {\n attrs = {} as HTagAttrs<HAttrOnActType>;\n }\n\n if (id) {\n (attrs as any)._id = id;\n }\n if (classes.length) {\n (attrs as any)._classes = classes;\n }\n if (ref) {\n (attrs as any)._ref = ref;\n }\n if (hObj) {\n (attrs as any)._hObj = hObj;\n }\n\n const skip = handler.open(tag, attrs, children, ctx);\n\n if (hFnc) {\n handler.fnc(hFnc, ctx);\n }\n\n if (!skip) {\n children.forEach(jml => hsml(jml, handler, ctx));\n }\n\n handler.close(tag, children, ctx);\n }\n}\n\nexport function hjoin<HAttrOnActType extends string>(hsmls: HElements<HAttrOnActType>, sep: string | HElement<HAttrOnActType>): HElements<HAttrOnActType> {\n const r = hsmls.reduce<HElements<HAttrOnActType>>(\n (p, c) => (p.push(c, sep), p),\n [] as HElements<HAttrOnActType>\n );\n r.splice(-1);\n return r;\n}\n"],"names":[],"version":3,"file":"hsml-html.js.map"}
|
|
@@ -838,9 +838,9 @@ class $32c8c7b45dace799$var$HsmlIDomHandler {
|
|
|
838
838
|
case "_id":
|
|
839
839
|
case "_classes":
|
|
840
840
|
case "_ref":
|
|
841
|
-
case "_key":
|
|
842
|
-
case "_skip":
|
|
843
841
|
case "_hObj":
|
|
842
|
+
case "key":
|
|
843
|
+
case "skip":
|
|
844
844
|
break;
|
|
845
845
|
case "id":
|
|
846
846
|
id = attrs[a];
|
|
@@ -890,14 +890,14 @@ class $32c8c7b45dace799$var$HsmlIDomHandler {
|
|
|
890
890
|
}
|
|
891
891
|
if (classes.length) props.unshift("class", classes.join(" "));
|
|
892
892
|
if (id) props.unshift("id", id);
|
|
893
|
-
(0, $820cd2154730c00b$export$c08238b528ee4605)(tag, attrs.
|
|
894
|
-
if (attrs.
|
|
893
|
+
(0, $820cd2154730c00b$export$c08238b528ee4605)(tag, attrs.key, undefined, ...props);
|
|
894
|
+
if (attrs.skip) (0, $f070ae32bf01fca2$export$955fc4a6c4be454d)();
|
|
895
895
|
if (ctx && ref) ctx.refs[ref] = (0, $f070ae32bf01fca2$export$910f131cbf8f9c16)();
|
|
896
896
|
if (hObj && hObj.mount && hObj.mount.constructor === Function) {
|
|
897
897
|
hObj.mount((0, $f070ae32bf01fca2$export$910f131cbf8f9c16)());
|
|
898
898
|
(0, $f070ae32bf01fca2$export$955fc4a6c4be454d)();
|
|
899
899
|
}
|
|
900
|
-
return attrs.
|
|
900
|
+
return attrs.skip ? true : false;
|
|
901
901
|
}
|
|
902
902
|
close(tag, children, ctx) {
|
|
903
903
|
(0, $820cd2154730c00b$export$5a9f50133313a819)(tag);
|