peryl 1.5.21 → 1.5.23

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.
Files changed (63) hide show
  1. package/demo/hash_demo.ts +6 -1
  2. package/demo/hsml-appel_demo.html +1 -1
  3. package/demo/hsml-appel_demo.ts +14 -10
  4. package/dist/browser-esmodule/hash.js +2 -2
  5. package/dist/browser-esmodule/hash.js.map +1 -1
  6. package/dist/browser-esmodule/hsml-app.js +24 -25
  7. package/dist/browser-esmodule/hsml-app.js.map +1 -1
  8. package/dist/browser-esmodule/index.js +26 -27
  9. package/dist/browser-esmodule/index.js.map +1 -1
  10. package/dist/browser-umd/hash.js +1 -1
  11. package/dist/browser-umd/hash.js.map +1 -1
  12. package/dist/browser-umd/hsml-app.js +1 -1
  13. package/dist/browser-umd/hsml-app.js.map +1 -1
  14. package/dist/browser-umd/index.js +1 -1
  15. package/dist/browser-umd/index.js.map +1 -1
  16. package/dist/demo/{hash_demo.1cbbc47a.js → hash_demo.57b93f2a.js} +2 -2
  17. package/dist/demo/hash_demo.57b93f2a.js.map +1 -0
  18. package/dist/demo/{hash_demo.80f80384.js → hash_demo.7e0ef005.js} +2 -2
  19. package/dist/demo/hash_demo.7e0ef005.js.map +1 -0
  20. package/dist/demo/hash_demo.html +1 -1
  21. package/dist/demo/hsml-app-bysquare_demo.html +1 -1
  22. package/dist/demo/hsml-app-form-validation_demo.html +1 -1
  23. package/dist/demo/hsml-app-form_demo.html +1 -1
  24. package/dist/demo/hsml-app-test_demo.html +1 -1
  25. package/dist/demo/hsml-app-tictactoe_demo.html +1 -1
  26. package/dist/demo/hsml-app_demo.html +1 -1
  27. package/dist/demo/hsml-appel_demo.39c5c95a.js +2 -0
  28. package/dist/demo/hsml-appel_demo.39c5c95a.js.map +1 -0
  29. package/dist/demo/hsml-appel_demo.fd0c6348.js +2 -0
  30. package/dist/demo/hsml-appel_demo.fd0c6348.js.map +1 -0
  31. package/dist/demo/hsml-appel_demo.html +1 -1
  32. package/dist/demo/hsml-appi_demo.64f70501.js +2 -0
  33. package/dist/demo/hsml-appi_demo.64f70501.js.map +1 -0
  34. package/dist/demo/hsml-appi_demo.9a157181.js +2 -0
  35. package/dist/demo/hsml-appi_demo.9a157181.js.map +1 -0
  36. package/dist/demo/hsml-appi_demo.html +1 -1
  37. package/dist/hash.d.ts +2 -2
  38. package/dist/hash.js +2 -2
  39. package/dist/hash.js.map +1 -1
  40. package/dist/hsml-app.d.ts +8 -8
  41. package/dist/hsml-app.js +44 -37
  42. package/dist/hsml-app.js.map +1 -1
  43. package/package.json +1 -1
  44. package/src/hash.ts +4 -5
  45. package/src/hsml-app.ts +92 -67
  46. package/dist/browser-esmodule/google-analytics.js +0 -50
  47. package/dist/browser-esmodule/google-analytics.js.map +0 -1
  48. package/dist/browser-umd/google-analytics.js +0 -2
  49. package/dist/browser-umd/google-analytics.js.map +0 -1
  50. package/dist/demo/hash_demo.1cbbc47a.js.map +0 -1
  51. package/dist/demo/hash_demo.80f80384.js.map +0 -1
  52. package/dist/demo/hsml-appel_demo.1da052b6.js +0 -2
  53. package/dist/demo/hsml-appel_demo.1da052b6.js.map +0 -1
  54. package/dist/demo/hsml-appel_demo.7fcc74a6.js +0 -2
  55. package/dist/demo/hsml-appel_demo.7fcc74a6.js.map +0 -1
  56. package/dist/demo/hsml-appi_demo.3d3d0e4e.js +0 -2
  57. package/dist/demo/hsml-appi_demo.3d3d0e4e.js.map +0 -1
  58. package/dist/demo/hsml-appi_demo.eac28520.js +0 -2
  59. package/dist/demo/hsml-appi_demo.eac28520.js.map +0 -1
  60. package/dist/google-analytics.d.ts +0 -21
  61. package/dist/google-analytics.js +0 -63
  62. package/dist/google-analytics.js.map +0 -1
  63. package/src/google-analytics.ts +0 -79
@@ -1 +0,0 @@
1
- {"mappings":"AACM,MAAO;IAIT,OAAO,KAAK,UAAkB,EAAE,UAAmB,EAAnD;QACI,0CAAG,EAAE,GAAG,IAAI,0CAAG,YAAY;IAC/B;IAEA,OAAO,SAAS,IAAY,EAAE,KAAc,EAA5C;QACI,IAAI,0CAAG,EAAE,EACL,0CAAG,EAAE,CAAC,QAAQ,CAAC,MAAM;IAE7B;IAEA,OAAO,MAAM,IAAY,EAAE,UAAoC,EAA/D;QACI,IAAI,0CAAG,EAAE,EACL,0CAAG,EAAE,CAAC,KAAK,CAAC,MAAM;IAE1B;IAEA,OAAO,IAAI,UAAmC,EAA9C;QACI,IAAI,0CAAG,EAAE,EACL,0CAAG,EAAE,CAAC,GAAG,CAAC;IAElB;IAIA,YAAY,UAAkB,EAAE,UAAmB,CAAnD;QACI,IAAI,CAAC,WAAW,GAAG;QACnB,IAAI,CAAC,KAAK;IACd;IAEA,SAAS,IAAY,EAAE,KAAc,EAArC;QACI,IAAI,IAAI,CAAC,WAAW,EACf,KAAa,IAAI,CAAC,UAAU,IAAI,CAAC,WAAW,EACzC;YACI,WAAW;YACX,YAAY;QACf;IAEb;IAEA,MAAM,IAAY,EAAE,UAAoC,EAAxD;QACI,IAAI,IAAI,CAAC,WAAW,EACf,KAAa,IAAI,CAAC,SAAS,MAAM;IAE1C;IAEA,IAAI,UAAmC,EAAvC;QACI,IAAI,IAAI,CAAC,WAAW,EACf,KAAa,IAAI,CAAC,OAAO;IAElC;IAEQ,QAAA;QACJ,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,MAAM,SAAS,SAAS,aAAa,CAAC;YACtC,OAAO,KAAK,GAAG,IAAI;YACnB,OAAO,GAAG,GAAG,CAAA,4CAAA,EAA+C,IAAI,CAAC,WAAW,CAAA,CAAE;YAC9E,SAAS,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC;YAErD,MAAM,UAAU,SAAS,aAAa,CAAC;YACvC,QAAQ,WAAW,GAAG,CAAtB;;;;gCAIsB,EAAA,IAAI,CAAC,WAAW,CAAhB;YACrB,CAAA;YACD,SAAS,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC;QACxD,CAAA;IACL;AAEH","sources":["src/google-analytics.ts"],"sourcesContent":["\nexport class GA {\n\n static ga: GA;\n\n static init(trackingId: string, dimensions?: Object) {\n GA.ga = new GA(trackingId, dimensions);\n }\n\n static pageview(path: string, title?: string): void {\n if (GA.ga) {\n GA.ga.pageview(path, title);\n }\n }\n\n static event(name: string, parameters?: { [k: string]: string }): void {\n if (GA.ga) {\n GA.ga.event(name, parameters);\n }\n }\n\n static set(parameters: { [k: string]: string }): void {\n if (GA.ga) {\n GA.ga.set(parameters);\n }\n }\n\n private _trackingId: string;\n\n constructor(trackingId: string, dimensions?: Object) {\n this._trackingId = trackingId;\n this._load();\n }\n\n pageview(path: string, title?: string): void {\n if (this._trackingId) {\n (self as any).gtag(\"config\", this._trackingId,\n {\n page_path: path,\n page_title: title\n });\n }\n }\n\n event(name: string, parameters?: { [k: string]: string }): void {\n if (this._trackingId) {\n (self as any).gtag(\"event\", name, parameters);\n }\n }\n\n set(parameters: { [k: string]: string }): void {\n if (this._trackingId) {\n (self as any).gtag(\"set\", parameters);\n }\n }\n\n private _load(): void {\n if (this._trackingId) {\n const script = document.createElement(\"script\");\n script.async = true;\n script.src = `https://www.googletagmanager.com/gtag/js?id=${this._trackingId}`;\n document.getElementsByTagName(\"head\")[0].appendChild(script);\n\n const script1 = document.createElement(\"script\");\n script1.textContent = `\n window.dataLayer = window.dataLayer || [];\n function gtag(){dataLayer.push(arguments);}\n gtag('js', new Date());\n gtag('config', '${this._trackingId}');\n `;\n document.getElementsByTagName(\"head\")[0].appendChild(script1);\n }\n }\n\n}\n\n// const ga = new GA(\"track-id\");\n// GA.ga = ga;\n// ga.pageview(\"my-page\");\n"],"names":[],"version":3,"file":"google-analytics.js.map"}
@@ -1,2 +0,0 @@
1
- !function(t,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var a=e();for(var n in a)("object"==typeof exports?exports:t)[n]=a[n]}}(self,(function(){return function(){"use strict";var t={};return function(){var e=t;Object.defineProperty(e,"__esModule",{value:!0}),e.GA=void 0;class a{static init(t,e){a.ga=new a(t,e)}static pageview(t,e){a.ga&&a.ga.pageview(t,e)}static event(t,e){a.ga&&a.ga.event(t,e)}static set(t){a.ga&&a.ga.set(t)}constructor(t,e){this._trackingId=t,this._load()}pageview(t,e){this._trackingId&&self.gtag("config",this._trackingId,{page_path:t,page_title:e})}event(t,e){this._trackingId&&self.gtag("event",t,e)}set(t){this._trackingId&&self.gtag("set",t)}_load(){if(this._trackingId){const t=document.createElement("script");t.async=!0,t.src=`https://www.googletagmanager.com/gtag/js?id=${this._trackingId}`,document.getElementsByTagName("head")[0].appendChild(t);const e=document.createElement("script");e.textContent=`\n window.dataLayer = window.dataLayer || [];\n function gtag(){dataLayer.push(arguments);}\n gtag('js', new Date());\n gtag('config', '${this._trackingId}');\n `,document.getElementsByTagName("head")[0].appendChild(e)}}}e.GA=a}(),t}()}));
2
- //# sourceMappingURL=google-analytics.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"google-analytics.js","mappings":"CAAA,SAA2CA,EAAMC,GAChD,GAAsB,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,SACb,GAAqB,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,GAAIH,OACP,CACJ,IAAIK,EAAIL,IACR,IAAI,IAAIM,KAAKD,GAAuB,iBAAZJ,QAAuBA,QAAUF,GAAMO,GAAKD,EAAEC,EACvE,CACA,CATD,CASGC,MAAM,WACT,O,wHCTA,MAAaC,EAITC,YAAYC,EAAoBC,GAC5BH,EAAGI,GAAK,IAAIJ,EAAGE,EAAYC,EAC/B,CAEAF,gBAAgBI,EAAcC,GACtBN,EAAGI,IACHJ,EAAGI,GAAGG,SAASF,EAAMC,EAE7B,CAEAL,aAAaO,EAAcC,GACnBT,EAAGI,IACHJ,EAAGI,GAAGM,MAAMF,EAAMC,EAE1B,CAEAR,WAAWQ,GACHT,EAAGI,IACHJ,EAAGI,GAAGO,IAAIF,EAElB,CAIAG,YAAYV,EAAoBC,GAC5BU,KAAKC,YAAcZ,EACnBW,KAAKE,OACT,CAEAR,SAASF,EAAcC,GACfO,KAAKC,aACJf,KAAaiB,KAAK,SAAUH,KAAKC,YAC9B,CACIG,UAAWZ,EACXa,WAAYZ,GAG5B,CAEAI,MAAMF,EAAcC,GACZI,KAAKC,aACJf,KAAaiB,KAAK,QAASR,EAAMC,EAE1C,CAEAE,IAAIF,GACII,KAAKC,aACJf,KAAaiB,KAAK,MAAOP,EAElC,CAEQM,QACJ,GAAIF,KAAKC,YAAa,CAClB,MAAMK,EAASC,SAASC,cAAc,UACtCF,EAAOG,OAAQ,EACfH,EAAOI,IAAM,+CAA+CV,KAAKC,cACjEM,SAASI,qBAAqB,QAAQ,GAAGC,YAAYN,GAErD,MAAMO,EAAUN,SAASC,cAAc,UACvCK,EAAQC,YAAc,uMAIAd,KAAKC,+BAE3BM,SAASI,qBAAqB,QAAQ,GAAGC,YAAYC,E,CAE7D,EAvEJ,M","sources":["webpack://peryl/webpack/universalModuleDefinition","webpack://peryl/./src/google-analytics.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, function() {\nreturn ","\nexport class GA {\n\n static ga: GA;\n\n static init(trackingId: string, dimensions?: Object) {\n GA.ga = new GA(trackingId, dimensions);\n }\n\n static pageview(path: string, title?: string): void {\n if (GA.ga) {\n GA.ga.pageview(path, title);\n }\n }\n\n static event(name: string, parameters?: { [k: string]: string }): void {\n if (GA.ga) {\n GA.ga.event(name, parameters);\n }\n }\n\n static set(parameters: { [k: string]: string }): void {\n if (GA.ga) {\n GA.ga.set(parameters);\n }\n }\n\n private _trackingId: string;\n\n constructor(trackingId: string, dimensions?: Object) {\n this._trackingId = trackingId;\n this._load();\n }\n\n pageview(path: string, title?: string): void {\n if (this._trackingId) {\n (self as any).gtag(\"config\", this._trackingId,\n {\n page_path: path,\n page_title: title\n });\n }\n }\n\n event(name: string, parameters?: { [k: string]: string }): void {\n if (this._trackingId) {\n (self as any).gtag(\"event\", name, parameters);\n }\n }\n\n set(parameters: { [k: string]: string }): void {\n if (this._trackingId) {\n (self as any).gtag(\"set\", parameters);\n }\n }\n\n private _load(): void {\n if (this._trackingId) {\n const script = document.createElement(\"script\");\n script.async = true;\n script.src = `https://www.googletagmanager.com/gtag/js?id=${this._trackingId}`;\n document.getElementsByTagName(\"head\")[0].appendChild(script);\n\n const script1 = document.createElement(\"script\");\n script1.textContent = `\n window.dataLayer = window.dataLayer || [];\n function gtag(){dataLayer.push(arguments);}\n gtag('js', new Date());\n gtag('config', '${this._trackingId}');\n `;\n document.getElementsByTagName(\"head\")[0].appendChild(script1);\n }\n }\n\n}\n\n// const ga = new GA(\"track-id\");\n// GA.ga = ga;\n// ga.pageview(\"my-page\");\n"],"names":["root","factory","exports","module","define","amd","a","i","self","GA","static","trackingId","dimensions","ga","path","title","pageview","name","parameters","event","set","constructor","this","_trackingId","_load","gtag","page_path","page_title","script","document","createElement","async","src","getElementsByTagName","appendChild","script1","textContent"],"sourceRoot":""}
@@ -1 +0,0 @@
1
- {"mappings":"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","sources":["src/hash.ts","src/dom.ts","demo/hash_demo.ts"],"sourcesContent":["\nexport interface HashUrlData <QueryKeys extends string = string> {\n path: string[];\n query: {\n [key in QueryKeys]?: string | string[];\n };\n}\n\nexport const hashJsonEncode = (data: any) => data ? encodeURIComponent(JSON.stringify(data)) : \"\";\nexport const hashJsonDecode = (str: string) => str ? JSON.parse(decodeURIComponent(str)) : undefined;\n\nexport const hashUrlEncode = <QueryKeys extends string = string>(data: HashUrlData<QueryKeys>): string => {\n // console.log(data);\n const d = typeof data === \"string\"\n ? hashUrlDecode(data)\n : data as HashUrlData;\n const dpath = d.path ?? [];\n const dquery = d.query ?? {};\n const path = dpath.map(p => encodeURIComponent(p)).join(\"/\");\n // const params = new URLSearchParams();\n const query = Object.entries(dquery)\n .reduce(\n (p, c) => {\n if (typeof c[1] === \"string\") {\n p.append(c[0], c[1]);\n } else if (c[1] && typeof c[1].length === \"number\") {\n (c[1] as Array<any>).forEach(v => p.append(c[0], v));\n }\n return p;\n },\n new URLSearchParams())\n .toString();\n const str = `${path}${query ? \"?\" : \"\"}${query}`;\n // console.log(str);\n return str;\n};\n\nexport const hashUrlDecode = <QueryKeys extends string = string>(str: string): HashUrlData<QueryKeys> => {\n // console.log(str);\n const [pathStr, queryStr] = str.split(\"?\");\n // const pathStr = str.substring(0, str.indexOf(\"?\"));\n // const queryStr = str.substring(str.indexOf(\"?\") + 1);\n const path = pathStr.split(\"/\").map(p => decodeURIComponent(p));\n const query = {} as any;\n for (const e of new URLSearchParams(queryStr).entries()) {\n const [k, v] = e;\n if (k in query) {\n if (typeof query[k] === \"string\") {\n query[k] = [query[k], v];\n } else {\n query[k].push(v);\n }\n } else {\n query[k] = v;\n }\n }\n const data = { path, query };\n // console.log(data);\n return data;\n};\n\nexport class Hash<T = string> {\n\n private _cb?: (data: T) => void;\n\n private _emitWritten: boolean;\n private _writtenDataJson?: string;\n\n private _encode = (data: T) => String(data);\n private _decode = (str: string) => str as any as T;\n\n constructor(emitWritten = true) {\n this._emitWritten = emitWritten;\n }\n\n onChange(cb: (data: T) => void): this {\n this._cb = cb;\n return this;\n }\n\n coders(encode: (data: T) => string,\n decode: (data: string) => T): this {\n this._encode = encode;\n this._decode = decode;\n return this;\n }\n\n listen(): this {\n this._cb && this._cb(this.read());\n if (\"onhashchange\" in window) {\n onhashchange = () => {\n const data = this.read();\n // console.log(\"onhashchange\", location.hash, data);\n if (!this._emitWritten) {\n const written = this._writtenDataJson === JSON.stringify(data);\n this._writtenDataJson = undefined;\n if (!written) {\n this._cb && this._cb(data);\n }\n } else {\n this._cb && this._cb(data);\n }\n };\n } else {\n alert(`Browser \"window.onhashchange\" not implemented`);\n // let prevHash = location.hash;\n // if (this._iId) {\n // clearInterval(this._iId);\n // }\n // this._iId = setInterval(() => {\n // if (location.hash !== prevHash) {\n // prevHash = location.hash;\n // const written = this._dataJson === location.hash;\n // this._dataJson = undefined;\n // if (this._emitWritten || !written) {\n // this._cb && this._cb(data);\n // }\n // }\n // }, 500);\n }\n return this;\n }\n\n read(): T {\n return this._decode(location.hash.slice(1));\n }\n\n write(data: T): this {\n location.hash = \"#\" + this._encode(data);\n // location.hash = \"#\" + this._encode(data);\n if (!this._emitWritten) {\n this._writtenDataJson = JSON.stringify(data);\n this._cb && this._cb(data);\n }\n return this;\n }\n\n}\n","\nexport function selectAll(selector: string, element?: HTMLElement): HTMLElement[] {\n const e = element ?? document;\n const qsa = e.querySelectorAll(selector);\n const a: HTMLElement[] = [];\n for (let i = 0; i < qsa.length; i++) {\n a.push(qsa[i] as HTMLElement);\n }\n return a;\n}\n\nexport function select(selector: string, element?: HTMLElement): HTMLElement | null {\n const e = element ?? document;\n return e.querySelector(selector);\n}\n\nexport function append(element: HTMLElement, ...elements: HTMLElement[]): void {\n elements.forEach(e => element.appendChild(e));\n}\n\nexport function replace(oldElement: HTMLElement, newElement: HTMLElement): void {\n oldElement.parentElement &&\n oldElement.parentElement.replaceChild(newElement, oldElement);\n}\n\nexport function remove(element: HTMLElement): void {\n element.parentElement && element.parentElement.removeChild(element);\n}\n\nexport function empty(element: HTMLElement) {\n while (element.firstChild /*.hasChildNodes()*/) {\n element.removeChild(element.firstChild);\n }\n}\n\n\nexport function html(html: string): HTMLElement {\n html = html.trim();\n // const t = document.createElement(\"template\") as HTMLTemplateElement;\n // if (\"content\" in t) {\n // t.innerHTML = html;\n // return t.content.cloneNode(true) as HTMLElement;\n // } else {\n let wrapMap: any = {\n option: [1, \"<select multiple='multiple'>\", \"</select>\"],\n legend: [1, \"<fieldset>\", \"</fieldset>\"],\n area: [1, \"<map>\", \"</map>\"],\n param: [1, \"<object>\", \"</object>\"],\n thead: [1, \"<table>\", \"</table>\"],\n tr: [2, \"<table><tbody>\", \"</tbody></table>\"],\n col: [2, \"<table><tbody></tbody><colgroup>\", \"</colgroup></table>\"],\n td: [3, \"<table><tbody><tr>\", \"</tr></tbody></table>\"],\n body: [0, \"\", \"\"],\n _default: [1, \"<div>\", \"</div>\"]\n };\n wrapMap.optgroup = wrapMap.option;\n wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\n wrapMap.th = wrapMap.td;\n const match = /<\\s*\\w.*?>/g.exec(html);\n let el: HTMLElement = document.createElement(\"div\");\n if (match != null) {\n const tag = match[0].replace(/</g, \"\").replace(/>/g, \"\").split(\" \")[0];\n if (tag.toLowerCase() === \"body\") {\n const body = document.createElement(\"body\");\n // keeping the attributes\n el.innerHTML = html.replace(/<body/g, \"<div\").replace(/<\\/body>/g, \"</div>\");\n const attrs = (el.firstChild as Element).attributes;\n body.innerHTML = html;\n for (let i = 0; i < attrs.length; i++) {\n body.setAttribute(attrs[i].name, attrs[i].value);\n }\n return body;\n } else {\n const map = wrapMap[tag] ?? wrapMap._default;\n html = map[1] + html + map[2];\n el.innerHTML = html;\n // Descend through wrappers to the right content\n let j = map[0] + 1;\n while (j--) {\n el = el.lastChild as HTMLElement;\n }\n }\n } else {\n el.innerHTML = html;\n el = el.lastChild as HTMLElement;\n }\n return el;\n // }\n}\n\n\nif (!Element.prototype.matches) {\n Element.prototype.matches =\n (Element.prototype as any).matchesSelector ||\n (Element.prototype as any).mozMatchesSelector ||\n (Element.prototype as any).msMatchesSelector ||\n (Element.prototype as any).oMatchesSelector ||\n (Element.prototype as any).webkitMatchesSelector ||\n function(this: any, s: string) {\n const matches = (this.document ?? this.ownerDocument).querySelectorAll(s);\n let i = matches.length;\n while (--i >= 0 && matches.item(i) !== this) {}\n return i > -1;\n };\n}\n\nexport function addEventListener(element: HTMLElement,\n selector: string,\n event: string,\n listener: (target: HTMLElement, evt: Event) => void,\n useCapture: boolean = false) {\n element.addEventListener(\n event,\n function (e: Event) {\n const evt: Event = e ?? window.event;\n const target = (evt.target ?? e.srcElement) as HTMLElement;\n if (target && target.matches(selector)) {\n listener(target, evt);\n }\n },\n useCapture);\n}\n\nexport function removeEventListener(element: HTMLElement,\n event: string,\n listener: (evt: Event) => void,\n useCapture: boolean = false) {\n element.removeEventListener(event, listener, useCapture);\n}\n","import * as hash from \"../src/hash\";\nimport { select } from \"../src/dom\";\n\nconst out = select(\"#output\");\nout && (out.innerHTML = \"test\");\n\nconst emitWritten = true;\n\ninterface Query {\n a: string;\n b: string;\n c: string;\n time: string;\n}\n\nconst h = new hash.Hash<hash.HashUrlData<keyof Query>>(emitWritten)\n // .coders(hash.jsonEncode, hash.jsonDecode)\n .coders(hash.hashUrlEncode, hash.hashUrlDecode)\n .onChange(data => {\n console.log(\"hash:\", JSON.stringify(data));\n out && (out.innerHTML += \"<br/>\" + \"hash: \" + JSON.stringify(data));\n })\n .listen()\n // .write(\"hello\");\n // .write({ message: \"hello\" });\n .write({ path: [\"hello\", \"peter\"], query: { a: \"a?a\", b: \"b&b\", c: \" .%\" } });\n\n(self as any).h = h;\n\nconst el = select(\"#hash\");\n// el && (el.onclick = (e: MouseEvent) => h.write(new Date().getTime()));\n// el && (el.onclick = (e: MouseEvent) => h.write({ time: new Date().getTime(), x: \" &?\" }));\nel && (el.onclick = (e: MouseEvent) => h.write({ path: [\"hello\", \"pet/e r\"], query: { a: [\"aaá\", \"x/x x\"], b: \"b&b\", c: \" ?.%\", time: \"\" + new Date().getTime() } }));\n// el && (el.onclick = (e: MouseEvent) => h.write(\"hello/peter?a=aa%25C3%25A1&b=b%2526b&c=+%253F.%2525&time=\" + new Date().getTime()));\n// el && (el.onclick = (e: MouseEvent) => h.write(\"hello/peter\"));\n"],"names":["$244a252e71ebdf26$export$74e860f5d1acb08f","str","pathStr","queryStr","split","path","map","p","decodeURIComponent","query","e","URLSearchParams","entries","k","v","push","$73dcebb46a901692$export$2e6c959c16ff56b8","selector","element","document","querySelector","Element","prototype","matches","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","s","_a","this","ownerDocument","querySelectorAll","i","length","item","$4bde34cd03022cc7$var$out","innerHTML","$4bde34cd03022cc7$var$h","constructor","emitWritten","_encode","data","String","_decode","_emitWritten","onChange","cb","_cb","coders","encode","decode","listen","read","window","onhashchange","written","_writtenDataJson","JSON","stringify","undefined","alert","location","hash","slice","write","d","dpath","dquery","_b","encodeURIComponent","join","Object","reduce","c","append","forEach","toString","console","log","a","b","self","h","$4bde34cd03022cc7$var$el","onclick","time","Date","getTime"],"version":3,"file":"hash_demo.1cbbc47a.js.map"}
@@ -1 +0,0 @@
1
- {"mappings":"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","sources":["src/hash.ts","src/dom.ts","demo/hash_demo.ts"],"sourcesContent":["\nexport interface HashUrlData <QueryKeys extends string = string> {\n path: string[];\n query: {\n [key in QueryKeys]?: string | string[];\n };\n}\n\nexport const hashJsonEncode = (data: any) => data ? encodeURIComponent(JSON.stringify(data)) : \"\";\nexport const hashJsonDecode = (str: string) => str ? JSON.parse(decodeURIComponent(str)) : undefined;\n\nexport const hashUrlEncode = <QueryKeys extends string = string>(data: HashUrlData<QueryKeys>): string => {\n // console.log(data);\n const d = typeof data === \"string\"\n ? hashUrlDecode(data)\n : data as HashUrlData;\n const dpath = d.path ?? [];\n const dquery = d.query ?? {};\n const path = dpath.map(p => encodeURIComponent(p)).join(\"/\");\n // const params = new URLSearchParams();\n const query = Object.entries(dquery)\n .reduce(\n (p, c) => {\n if (typeof c[1] === \"string\") {\n p.append(c[0], c[1]);\n } else if (c[1] && typeof c[1].length === \"number\") {\n (c[1] as Array<any>).forEach(v => p.append(c[0], v));\n }\n return p;\n },\n new URLSearchParams())\n .toString();\n const str = `${path}${query ? \"?\" : \"\"}${query}`;\n // console.log(str);\n return str;\n};\n\nexport const hashUrlDecode = <QueryKeys extends string = string>(str: string): HashUrlData<QueryKeys> => {\n // console.log(str);\n const [pathStr, queryStr] = str.split(\"?\");\n // const pathStr = str.substring(0, str.indexOf(\"?\"));\n // const queryStr = str.substring(str.indexOf(\"?\") + 1);\n const path = pathStr.split(\"/\").map(p => decodeURIComponent(p));\n const query = {} as any;\n for (const e of new URLSearchParams(queryStr).entries()) {\n const [k, v] = e;\n if (k in query) {\n if (typeof query[k] === \"string\") {\n query[k] = [query[k], v];\n } else {\n query[k].push(v);\n }\n } else {\n query[k] = v;\n }\n }\n const data = { path, query };\n // console.log(data);\n return data;\n};\n\nexport class Hash<T = string> {\n\n private _cb?: (data: T) => void;\n\n private _emitWritten: boolean;\n private _writtenDataJson?: string;\n\n private _encode = (data: T) => String(data);\n private _decode = (str: string) => str as any as T;\n\n constructor(emitWritten = true) {\n this._emitWritten = emitWritten;\n }\n\n onChange(cb: (data: T) => void): this {\n this._cb = cb;\n return this;\n }\n\n coders(encode: (data: T) => string,\n decode: (data: string) => T): this {\n this._encode = encode;\n this._decode = decode;\n return this;\n }\n\n listen(): this {\n this._cb && this._cb(this.read());\n if (\"onhashchange\" in window) {\n onhashchange = () => {\n const data = this.read();\n // console.log(\"onhashchange\", location.hash, data);\n if (!this._emitWritten) {\n const written = this._writtenDataJson === JSON.stringify(data);\n this._writtenDataJson = undefined;\n if (!written) {\n this._cb && this._cb(data);\n }\n } else {\n this._cb && this._cb(data);\n }\n };\n } else {\n alert(`Browser \"window.onhashchange\" not implemented`);\n // let prevHash = location.hash;\n // if (this._iId) {\n // clearInterval(this._iId);\n // }\n // this._iId = setInterval(() => {\n // if (location.hash !== prevHash) {\n // prevHash = location.hash;\n // const written = this._dataJson === location.hash;\n // this._dataJson = undefined;\n // if (this._emitWritten || !written) {\n // this._cb && this._cb(data);\n // }\n // }\n // }, 500);\n }\n return this;\n }\n\n read(): T {\n return this._decode(location.hash.slice(1));\n }\n\n write(data: T): this {\n location.hash = \"#\" + this._encode(data);\n // location.hash = \"#\" + this._encode(data);\n if (!this._emitWritten) {\n this._writtenDataJson = JSON.stringify(data);\n this._cb && this._cb(data);\n }\n return this;\n }\n\n}\n","\nexport function selectAll(selector: string, element?: HTMLElement): HTMLElement[] {\n const e = element ?? document;\n const qsa = e.querySelectorAll(selector);\n const a: HTMLElement[] = [];\n for (let i = 0; i < qsa.length; i++) {\n a.push(qsa[i] as HTMLElement);\n }\n return a;\n}\n\nexport function select(selector: string, element?: HTMLElement): HTMLElement | null {\n const e = element ?? document;\n return e.querySelector(selector);\n}\n\nexport function append(element: HTMLElement, ...elements: HTMLElement[]): void {\n elements.forEach(e => element.appendChild(e));\n}\n\nexport function replace(oldElement: HTMLElement, newElement: HTMLElement): void {\n oldElement.parentElement &&\n oldElement.parentElement.replaceChild(newElement, oldElement);\n}\n\nexport function remove(element: HTMLElement): void {\n element.parentElement && element.parentElement.removeChild(element);\n}\n\nexport function empty(element: HTMLElement) {\n while (element.firstChild /*.hasChildNodes()*/) {\n element.removeChild(element.firstChild);\n }\n}\n\n\nexport function html(html: string): HTMLElement {\n html = html.trim();\n // const t = document.createElement(\"template\") as HTMLTemplateElement;\n // if (\"content\" in t) {\n // t.innerHTML = html;\n // return t.content.cloneNode(true) as HTMLElement;\n // } else {\n let wrapMap: any = {\n option: [1, \"<select multiple='multiple'>\", \"</select>\"],\n legend: [1, \"<fieldset>\", \"</fieldset>\"],\n area: [1, \"<map>\", \"</map>\"],\n param: [1, \"<object>\", \"</object>\"],\n thead: [1, \"<table>\", \"</table>\"],\n tr: [2, \"<table><tbody>\", \"</tbody></table>\"],\n col: [2, \"<table><tbody></tbody><colgroup>\", \"</colgroup></table>\"],\n td: [3, \"<table><tbody><tr>\", \"</tr></tbody></table>\"],\n body: [0, \"\", \"\"],\n _default: [1, \"<div>\", \"</div>\"]\n };\n wrapMap.optgroup = wrapMap.option;\n wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\n wrapMap.th = wrapMap.td;\n const match = /<\\s*\\w.*?>/g.exec(html);\n let el: HTMLElement = document.createElement(\"div\");\n if (match != null) {\n const tag = match[0].replace(/</g, \"\").replace(/>/g, \"\").split(\" \")[0];\n if (tag.toLowerCase() === \"body\") {\n const body = document.createElement(\"body\");\n // keeping the attributes\n el.innerHTML = html.replace(/<body/g, \"<div\").replace(/<\\/body>/g, \"</div>\");\n const attrs = (el.firstChild as Element).attributes;\n body.innerHTML = html;\n for (let i = 0; i < attrs.length; i++) {\n body.setAttribute(attrs[i].name, attrs[i].value);\n }\n return body;\n } else {\n const map = wrapMap[tag] ?? wrapMap._default;\n html = map[1] + html + map[2];\n el.innerHTML = html;\n // Descend through wrappers to the right content\n let j = map[0] + 1;\n while (j--) {\n el = el.lastChild as HTMLElement;\n }\n }\n } else {\n el.innerHTML = html;\n el = el.lastChild as HTMLElement;\n }\n return el;\n // }\n}\n\n\nif (!Element.prototype.matches) {\n Element.prototype.matches =\n (Element.prototype as any).matchesSelector ||\n (Element.prototype as any).mozMatchesSelector ||\n (Element.prototype as any).msMatchesSelector ||\n (Element.prototype as any).oMatchesSelector ||\n (Element.prototype as any).webkitMatchesSelector ||\n function(this: any, s: string) {\n const matches = (this.document ?? this.ownerDocument).querySelectorAll(s);\n let i = matches.length;\n while (--i >= 0 && matches.item(i) !== this) {}\n return i > -1;\n };\n}\n\nexport function addEventListener(element: HTMLElement,\n selector: string,\n event: string,\n listener: (target: HTMLElement, evt: Event) => void,\n useCapture: boolean = false) {\n element.addEventListener(\n event,\n function (e: Event) {\n const evt: Event = e ?? window.event;\n const target = (evt.target ?? e.srcElement) as HTMLElement;\n if (target && target.matches(selector)) {\n listener(target, evt);\n }\n },\n useCapture);\n}\n\nexport function removeEventListener(element: HTMLElement,\n event: string,\n listener: (evt: Event) => void,\n useCapture: boolean = false) {\n element.removeEventListener(event, listener, useCapture);\n}\n","import * as hash from \"../src/hash\";\nimport { select } from \"../src/dom\";\n\nconst out = select(\"#output\");\nout && (out.innerHTML = \"test\");\n\nconst emitWritten = true;\n\ninterface Query {\n a: string;\n b: string;\n c: string;\n time: string;\n}\n\nconst h = new hash.Hash<hash.HashUrlData<keyof Query>>(emitWritten)\n // .coders(hash.jsonEncode, hash.jsonDecode)\n .coders(hash.hashUrlEncode, hash.hashUrlDecode)\n .onChange(data => {\n console.log(\"hash:\", JSON.stringify(data));\n out && (out.innerHTML += \"<br/>\" + \"hash: \" + JSON.stringify(data));\n })\n .listen()\n // .write(\"hello\");\n // .write({ message: \"hello\" });\n .write({ path: [\"hello\", \"peter\"], query: { a: \"a?a\", b: \"b&b\", c: \" .%\" } });\n\n(self as any).h = h;\n\nconst el = select(\"#hash\");\n// el && (el.onclick = (e: MouseEvent) => h.write(new Date().getTime()));\n// el && (el.onclick = (e: MouseEvent) => h.write({ time: new Date().getTime(), x: \" &?\" }));\nel && (el.onclick = (e: MouseEvent) => h.write({ path: [\"hello\", \"pet/e r\"], query: { a: [\"aaá\", \"x/x x\"], b: \"b&b\", c: \" ?.%\", time: \"\" + new Date().getTime() } }));\n// el && (el.onclick = (e: MouseEvent) => h.write(\"hello/peter?a=aa%25C3%25A1&b=b%2526b&c=+%253F.%2525&time=\" + new Date().getTime()));\n// el && (el.onclick = (e: MouseEvent) => h.write(\"hello/peter\"));\n"],"names":["$20c91d5a1824f087$export$74e860f5d1acb08f","str","pathStr","queryStr","split","path","map","p","decodeURIComponent","query","e","URLSearchParams","entries","k","v","push","$54e3d9b32b079ed2$export$2e6c959c16ff56b8","selector","element","document","querySelector","Element","prototype","matches","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","s","_a","this","ownerDocument","querySelectorAll","i","length","item","$90d2da53528cc492$var$out","innerHTML","$90d2da53528cc492$var$h","constructor","emitWritten","_encode","data","String","_decode","_emitWritten","onChange","cb","_cb","coders","encode","decode","listen","read","window","onhashchange","written","_writtenDataJson","JSON","stringify","undefined","alert","location","hash","slice","write","d","dpath","dquery","_b","encodeURIComponent","join","Object","reduce","c","append","forEach","toString","console","log","a","b","self","h","$90d2da53528cc492$var$el","onclick","time","Date","getTime"],"version":3,"file":"hash_demo.80f80384.js.map"}
@@ -1,2 +0,0 @@
1
- !function(){var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},n={},e={},o=t.parcelRequirede31;null==o&&((o=function(t){if(t in n)return n[t].exports;if(t in e){var o=e[t];delete e[t];var c={id:t,exports:{}};return n[t]=c,o.call(c.exports,c,c.exports),c.exports}var u=new Error("Cannot find module '"+t+"'");throw u.code="MODULE_NOT_FOUND",u}).register=function(t,n){e[t]=n},t.parcelRequirede31=o);var c,u,i=o("es1PA"),a=function(t,n,e,o){return new(e||(e=Promise))((function(c,u){function i(t){try{r(o.next(t))}catch(t){u(t)}}function a(t){try{r(o.throw(t))}catch(t){u(t)}}function r(t){var n;t.done?c(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(i,a)}r((o=o.apply(t,n||[])).next())}))};(u=c||(c={})).dec="counter-dec",u.inc="counter-inc",u.count="counter-count";var r;(0,i.happel)({state:function(){return{count:77}},view:function(t){return[["h3",["Counter"]],["p",[["em",["Count"]],": ",t.count," ",["button",{on:["click",c.dec,1]},["-"]],["button",{on:["click",c.inc,2]},["+"]]]]]},dispatcher:function(t,n,e){return a(this,void 0,void 0,(function*(){switch(console.log("action counter:",t),t.type){case i.HAppActions.init:case i.HAppActions.mount:case i.HAppActions.umount:break;case i.HAppActions.attribute:"count"===t.data.attrName&&(n.count=Number(t.data.newVal));break;case c.inc:n.count=n.count+t.data,setTimeout((()=>e(c.dec,1)),1e3),e(c.count,n.count,i.HDispatchScopes.element);break;case c.dec:n.count=n.count-t.data,e(c.count,n.count,i.HDispatchScopes.element)}}))},name:"counter",attributes:["count"],debug:!0}),(r||(r={})).action="app-action";(0,i.happel)({state:function(){return{count:0}},view:function(t){return[["h2",["App count: ",t.count]],["happ-counter",{count:33,on:[i.HAppActions.action,r.action]}]]},dispatcher:function(t,n,e){return a(this,void 0,void 0,(function*(){if(console.log("action:",t),t.type===r.action){const o=t.data;if(o.type===c.count)n.count=o.data,e(c.count,n.count,i.HDispatchScopes.element);else console.log(o)}}))},name:"app",attributes:[],debug:!0})}();
2
- //# sourceMappingURL=hsml-appel_demo.1da052b6.js.map
@@ -1 +0,0 @@
1
- {"mappings":"ofAOKA,EAAAC,E,oTAAAA,EAAAD,MAAc,KACf,kBACAC,EAAA,kBACAA,EAAA,sBAiEJ,IAAKC,GAdL,EAAAC,EAAAC,QAAqC,CACjCC,MAjDuC,WACvC,MAAO,CACHC,MAAO,GAEf,EA8CIC,KA5CqD,SAAUF,GAC/D,MAAO,CACH,CAAC,KAAM,CAAC,YACR,CAAC,IAAK,CACF,CAAC,KAAM,CAAC,UAAW,KAAMA,EAAMC,MAC/B,IACA,CAAC,SAAU,CAAEE,GAAI,CAAC,QAASR,EAAeS,IAAK,IAAM,CAAC,MACtD,CAAC,SAAU,CAAED,GAAI,CAAC,QAASR,EAAeU,IAAK,IAAM,CAAC,QAGlE,EAmCIC,WAjCiE,SAAgBC,EAAQP,EAAOQ,G,yCAKhG,OAJAC,QAAQC,IAAI,kBAAmBH,GAIvBA,EAAOI,MACX,KAAKb,EAAAc,YAAYC,KACjB,KAAKf,EAAAc,YAAYE,MACjB,KAAKhB,EAAAc,YAAYG,OACb,MAEJ,KAAKjB,EAAAc,YAAYI,UACgB,UAAzBT,EAAOU,KAAKC,WACZlB,EAAMC,MAAQkB,OAAOZ,EAAOU,KAAKG,SAErC,MAEJ,KAAKzB,EAAeU,IAChBL,EAAMC,MAAQD,EAAMC,MAAQM,EAAOU,KACnCI,YAAW,IAAMb,EAASb,EAAeS,IAAK,IAAI,KAClDI,EAASb,EAAeM,MAAOD,EAAMC,MAAOH,EAAAwB,gBAAgBC,SAC5D,MAEJ,KAAK5B,EAAeS,IAChBJ,EAAMC,MAAQD,EAAMC,MAAQM,EAAOU,KACnCT,EAASb,EAAeM,MAAOD,EAAMC,MAAOH,EAAAwB,gBAAgBC,SAGxE,GAAC,EAMGC,KAAM,UACNC,WAAY,CAAC,SACbC,OAAO,KAQN7B,MAAU,KACX,qBAwCJ,EAAAC,EAAAC,QAA8C,CAC1CC,MAtC+B,WAC/B,MAAO,CACHC,MAAO,EAEf,EAmCIC,KAjCyC,SAAUF,GACnD,MAAO,CACH,CAAC,KAAM,CAAC,cAAeA,EAAMC,QAC7B,CAAC,eAAgB,CACbA,MAAO,GACPE,GAAI,CAACL,EAAAc,YAAYL,OAAQV,EAAWU,UAGhD,EA0BID,WAxBsE,SAAgBC,EAAQP,EAAOQ,G,yCAKrG,GAJAC,QAAQC,IAAI,UAAWH,GAIfA,EAAOI,OACNd,EAAWU,OAAhB,CACI,MAAMoB,EAAIpB,EAAOU,KACjB,GAAQU,EAAEhB,OACDhB,EAAeM,MAChBD,EAAMC,MAAQ0B,EAAEV,KAChBT,EAASb,EAAeM,MAAOD,EAAMC,MAAOH,EAAAwB,gBAAgBC,cAG5Dd,QAAQC,IAAIiB,EAGd,CAElB,GAAC,EAMGH,KAAM,MACNC,WAAY,GACZC,OAAO,G","sources":["demo/hsml-appel_demo.ts"],"sourcesContent":["import { HElements } from \"../src/hsml\";\nimport { HAction, HAppActions, happel, HDispatch, HDispatcher, HDispatchScopes, HState, HView } from \"../src/hsml-app\";\n\ninterface CounterState {\n count: number;\n}\n\nenum CounterActions {\n dec = \"counter-dec\",\n inc = \"counter-inc\",\n count = \"counter-count\"\n}\n\nconst counterState: HState<CounterState> = function () {\n return {\n count: 77\n }\n};\n\nconst counterView: HView<CounterState, CounterActions> = function (state) {\n return [\n [\"h3\", [\"Counter\"]],\n [\"p\", [\n [\"em\", [\"Count\"]], \": \", state.count,\n \" \",\n [\"button\", { on: [\"click\", CounterActions.dec, 1] }, [\"-\"]],\n [\"button\", { on: [\"click\", CounterActions.inc, 2] }, [\"+\"]]\n ]]\n ];\n};\n\nconst counterDispatcher: HDispatcher<CounterState, CounterActions> = async function (action, state, dispatch) {\n console.log(\"action counter:\", action);\n // console.log(\"state counter:\", state);\n // console.log(\"happ counter:\", this);\n\n switch (action.type) {\n case HAppActions.init:\n case HAppActions.mount:\n case HAppActions.umount:\n break;\n\n case HAppActions.attribute:\n if (action.data.attrName === \"count\") {\n state.count = Number(action.data.newVal);\n }\n break;\n\n case CounterActions.inc:\n state.count = state.count + action.data as number;\n setTimeout(() => dispatch(CounterActions.dec, 1), 1e3); // async call\n dispatch(CounterActions.count, state.count, HDispatchScopes.element);\n break;\n\n case CounterActions.dec:\n state.count = state.count - action.data as number;\n dispatch(CounterActions.count, state.count, HDispatchScopes.element);\n break;\n }\n};\n\nhappel<CounterState, CounterActions>({\n state: counterState,\n view: counterView,\n dispatcher: counterDispatcher,\n name: \"counter\",\n attributes: [\"count\"],\n debug: true\n});\n\n\ninterface AppState {\n count: number;\n}\n\nenum AppActions {\n action = \"app-action\"\n}\n\nconst appState: HState<AppState> = function () {\n return {\n count: 0\n }\n};\n\nconst appView: HView<AppState, AppActions> = function (state) {\n return [\n [\"h2\", [\"App count: \", state.count]],\n [\"happ-counter\", {\n count: 33,\n on: [HAppActions.action, AppActions.action]\n }]\n ];\n};\n\nconst appDispatcher: HDispatcher<AppState, AppActions | CounterActions> = async function (action, state, dispatch) {\n console.log(\"action:\", action);\n // console.log(\"state:\", state);\n // console.log(\"happ:\", this);\n\n switch (action.type) {\n case AppActions.action:\n const a = action.data as HAction<AppActions | CounterActions>;\n switch (a.type) {\n case CounterActions.count:\n state.count = a.data as number;\n dispatch(CounterActions.count, state.count, HDispatchScopes.element);\n break;\n default:\n console.log(a);\n break;\n }\n break;\n }\n};\n\nhappel<AppState, AppActions | CounterActions>({\n state: appState,\n view: appView,\n dispatcher: appDispatcher,\n name: \"app\",\n attributes: [],\n debug: true\n});\n"],"names":["$1adacf07b647a858$var$CounterActions","CounterActions","$1adacf07b647a858$var$AppActions","$es1PA","happel","state","count","view","on","dec","inc","dispatcher","action","dispatch","console","log","type","HAppActions","init","mount","umount","attribute","data","attrName","Number","newVal","setTimeout","HDispatchScopes","element","name","attributes","debug","a"],"version":3,"file":"hsml-appel_demo.1da052b6.js.map"}
@@ -1,2 +0,0 @@
1
- var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},n={},e={},o=t.parcelRequirede31;null==o&&((o=function(t){if(t in n)return n[t].exports;if(t in e){var o=e[t];delete e[t];var c={id:t,exports:{}};return n[t]=c,o.call(c.exports,c,c.exports),c.exports}var u=new Error("Cannot find module '"+t+"'");throw u.code="MODULE_NOT_FOUND",u}).register=function(t,n){e[t]=n},t.parcelRequirede31=o);var c,u,i=o("lQ1yG"),a=function(t,n,e,o){return new(e||(e=Promise))((function(c,u){function i(t){try{r(o.next(t))}catch(t){u(t)}}function a(t){try{r(o.throw(t))}catch(t){u(t)}}function r(t){var n;t.done?c(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(i,a)}r((o=o.apply(t,n||[])).next())}))};(u=c||(c={})).dec="counter-dec",u.inc="counter-inc",u.count="counter-count";var r;(0,i.happel)({state:function(){return{count:77}},view:function(t){return[["h3",["Counter"]],["p",[["em",["Count"]],": ",t.count," ",["button",{on:["click",c.dec,1]},["-"]],["button",{on:["click",c.inc,2]},["+"]]]]]},dispatcher:function(t,n,e){return a(this,void 0,void 0,(function*(){switch(console.log("action counter:",t),t.type){case i.HAppActions.init:case i.HAppActions.mount:case i.HAppActions.umount:break;case i.HAppActions.attribute:"count"===t.data.attrName&&(n.count=Number(t.data.newVal));break;case c.inc:n.count=n.count+t.data,setTimeout((()=>e(c.dec,1)),1e3),e(c.count,n.count,i.HDispatchScopes.element);break;case c.dec:n.count=n.count-t.data,e(c.count,n.count,i.HDispatchScopes.element)}}))},name:"counter",attributes:["count"],debug:!0}),(r||(r={})).action="app-action";(0,i.happel)({state:function(){return{count:0}},view:function(t){return[["h2",["App count: ",t.count]],["happ-counter",{count:33,on:[i.HAppActions.action,r.action]}]]},dispatcher:function(t,n,e){return a(this,void 0,void 0,(function*(){if(console.log("action:",t),t.type===r.action){const o=t.data;if(o.type===c.count)n.count=o.data,e(c.count,n.count,i.HDispatchScopes.element);else console.log(o)}}))},name:"app",attributes:[],debug:!0});
2
- //# sourceMappingURL=hsml-appel_demo.7fcc74a6.js.map
@@ -1 +0,0 @@
1
- {"mappings":"weAOKA,EAAAC,E,oTAAAA,EAAAD,MAAc,KACf,kBACAC,EAAA,kBACAA,EAAA,sBAiEJ,IAAKC,GAdL,EAAAC,EAAAC,QAAqC,CACjCC,MAjDuC,WACvC,MAAO,CACHC,MAAO,GAEf,EA8CIC,KA5CqD,SAAUF,GAC/D,MAAO,CACH,CAAC,KAAM,CAAC,YACR,CAAC,IAAK,CACF,CAAC,KAAM,CAAC,UAAW,KAAMA,EAAMC,MAC/B,IACA,CAAC,SAAU,CAAEE,GAAI,CAAC,QAASR,EAAeS,IAAK,IAAM,CAAC,MACtD,CAAC,SAAU,CAAED,GAAI,CAAC,QAASR,EAAeU,IAAK,IAAM,CAAC,QAGlE,EAmCIC,WAjCiE,SAAgBC,EAAQP,EAAOQ,G,yCAKhG,OAJAC,QAAQC,IAAI,kBAAmBH,GAIvBA,EAAOI,MACX,KAAKb,EAAAc,YAAYC,KACjB,KAAKf,EAAAc,YAAYE,MACjB,KAAKhB,EAAAc,YAAYG,OACb,MAEJ,KAAKjB,EAAAc,YAAYI,UACgB,UAAzBT,EAAOU,KAAKC,WACZlB,EAAMC,MAAQkB,OAAOZ,EAAOU,KAAKG,SAErC,MAEJ,KAAKzB,EAAeU,IAChBL,EAAMC,MAAQD,EAAMC,MAAQM,EAAOU,KACnCI,YAAW,IAAMb,EAASb,EAAeS,IAAK,IAAI,KAClDI,EAASb,EAAeM,MAAOD,EAAMC,MAAOH,EAAAwB,gBAAgBC,SAC5D,MAEJ,KAAK5B,EAAeS,IAChBJ,EAAMC,MAAQD,EAAMC,MAAQM,EAAOU,KACnCT,EAASb,EAAeM,MAAOD,EAAMC,MAAOH,EAAAwB,gBAAgBC,SAGxE,GAAC,EAMGC,KAAM,UACNC,WAAY,CAAC,SACbC,OAAO,KAQN7B,MAAU,KACX,qBAwCJ,EAAAC,EAAAC,QAA8C,CAC1CC,MAtC+B,WAC/B,MAAO,CACHC,MAAO,EAEf,EAmCIC,KAjCyC,SAAUF,GACnD,MAAO,CACH,CAAC,KAAM,CAAC,cAAeA,EAAMC,QAC7B,CAAC,eAAgB,CACbA,MAAO,GACPE,GAAI,CAACL,EAAAc,YAAYL,OAAQV,EAAWU,UAGhD,EA0BID,WAxBsE,SAAgBC,EAAQP,EAAOQ,G,yCAKrG,GAJAC,QAAQC,IAAI,UAAWH,GAIfA,EAAOI,OACNd,EAAWU,OAAhB,CACI,MAAMoB,EAAIpB,EAAOU,KACjB,GAAQU,EAAEhB,OACDhB,EAAeM,MAChBD,EAAMC,MAAQ0B,EAAEV,KAChBT,EAASb,EAAeM,MAAOD,EAAMC,MAAOH,EAAAwB,gBAAgBC,cAG5Dd,QAAQC,IAAIiB,EAGd,CAElB,GAAC,EAMGH,KAAM,MACNC,WAAY,GACZC,OAAO","sources":["demo/hsml-appel_demo.ts"],"sourcesContent":["import { HElements } from \"../src/hsml\";\nimport { HAction, HAppActions, happel, HDispatch, HDispatcher, HDispatchScopes, HState, HView } from \"../src/hsml-app\";\n\ninterface CounterState {\n count: number;\n}\n\nenum CounterActions {\n dec = \"counter-dec\",\n inc = \"counter-inc\",\n count = \"counter-count\"\n}\n\nconst counterState: HState<CounterState> = function () {\n return {\n count: 77\n }\n};\n\nconst counterView: HView<CounterState, CounterActions> = function (state) {\n return [\n [\"h3\", [\"Counter\"]],\n [\"p\", [\n [\"em\", [\"Count\"]], \": \", state.count,\n \" \",\n [\"button\", { on: [\"click\", CounterActions.dec, 1] }, [\"-\"]],\n [\"button\", { on: [\"click\", CounterActions.inc, 2] }, [\"+\"]]\n ]]\n ];\n};\n\nconst counterDispatcher: HDispatcher<CounterState, CounterActions> = async function (action, state, dispatch) {\n console.log(\"action counter:\", action);\n // console.log(\"state counter:\", state);\n // console.log(\"happ counter:\", this);\n\n switch (action.type) {\n case HAppActions.init:\n case HAppActions.mount:\n case HAppActions.umount:\n break;\n\n case HAppActions.attribute:\n if (action.data.attrName === \"count\") {\n state.count = Number(action.data.newVal);\n }\n break;\n\n case CounterActions.inc:\n state.count = state.count + action.data as number;\n setTimeout(() => dispatch(CounterActions.dec, 1), 1e3); // async call\n dispatch(CounterActions.count, state.count, HDispatchScopes.element);\n break;\n\n case CounterActions.dec:\n state.count = state.count - action.data as number;\n dispatch(CounterActions.count, state.count, HDispatchScopes.element);\n break;\n }\n};\n\nhappel<CounterState, CounterActions>({\n state: counterState,\n view: counterView,\n dispatcher: counterDispatcher,\n name: \"counter\",\n attributes: [\"count\"],\n debug: true\n});\n\n\ninterface AppState {\n count: number;\n}\n\nenum AppActions {\n action = \"app-action\"\n}\n\nconst appState: HState<AppState> = function () {\n return {\n count: 0\n }\n};\n\nconst appView: HView<AppState, AppActions> = function (state) {\n return [\n [\"h2\", [\"App count: \", state.count]],\n [\"happ-counter\", {\n count: 33,\n on: [HAppActions.action, AppActions.action]\n }]\n ];\n};\n\nconst appDispatcher: HDispatcher<AppState, AppActions | CounterActions> = async function (action, state, dispatch) {\n console.log(\"action:\", action);\n // console.log(\"state:\", state);\n // console.log(\"happ:\", this);\n\n switch (action.type) {\n case AppActions.action:\n const a = action.data as HAction<AppActions | CounterActions>;\n switch (a.type) {\n case CounterActions.count:\n state.count = a.data as number;\n dispatch(CounterActions.count, state.count, HDispatchScopes.element);\n break;\n default:\n console.log(a);\n break;\n }\n break;\n }\n};\n\nhappel<AppState, AppActions | CounterActions>({\n state: appState,\n view: appView,\n dispatcher: appDispatcher,\n name: \"app\",\n attributes: [],\n debug: true\n});\n"],"names":["$aba843136a874dd7$var$CounterActions","CounterActions","$aba843136a874dd7$var$AppActions","$lQ1yG","happel","state","count","view","on","dec","inc","dispatcher","action","dispatch","console","log","type","HAppActions","init","mount","umount","attribute","data","attrName","Number","newVal","setTimeout","HDispatchScopes","element","name","attributes","debug","a"],"version":3,"file":"hsml-appel_demo.7fcc74a6.js.map"}
@@ -1,2 +0,0 @@
1
- !function(){function e(e,t,i,n){Object.defineProperty(e,t,{get:i,set:n,enumerable:!0,configurable:!0})}var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},i={},n={},a=t.parcelRequirede31;null==a&&((a=function(e){if(e in i)return i[e].exports;if(e in n){var t=n[e];delete n[e];var a={id:e,exports:{}};return i[e]=a,t.call(a.exports,a,a.exports),a.exports}var s=new Error("Cannot find module '"+e+"'");throw s.code="MODULE_NOT_FOUND",s}).register=function(e,t){n[e]=t},t.parcelRequirede31=a),a.register("es1PA",(function(t,i){e(t.exports,"HAppActions",(function(){return n}),(function(e){return n=e})),e(t.exports,"HDispatchScopes",(function(){return l}),(function(e){return l=e})),e(t.exports,"happ",(function(){return f}),(function(e){return f=e})),e(t.exports,"HApp",(function(){return b}),(function(e){return b=e})),e(t.exports,"happel",(function(){return w}),(function(e){return w=e}));var n,s,l,o,u=a("8IJ2T"),d=function(e,t,i,n){return new(i||(i=Promise))((function(a,s){function l(e){try{u(n.next(e))}catch(e){s(e)}}function o(e){try{u(n.throw(e))}catch(e){s(e)}}function u(e){var t;e.done?a(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(l,o)}u((n=n.apply(e,t||[])).next())}))};(s=n||(n={})).init="happ-init",s.mount="happ-mount",s.umount="happ-umount",s.action="happ-action",s.attribute="happ-attribute",(o=l||(l={})).element="element",o.window="window";const r=window.requestAnimationFrame||function(e){window.setTimeout(e,1e3/60)},c=window.cancelAnimationFrame||function(e){window.clearTimeout(e)},h="action:",v="dispatch:",m="render:",p="happ";function f(e){return new b(e.state,e.view,e.dispatcher,e.element,e.debug,e.name)}function w(e){customElements.define(`${p}-${e.name}`,class extends HTMLElement{static get observedAttributes(){return e.attributes}constructor(){super(),this._happel=new b(e.state,e.view,e.dispatcher,void 0,e.debug,e.name,e.attributes),this._happel.customElement=this}connectedCallback(){this.attachShadow({mode:"open"}),this._happel.mount(this.shadowRoot)}disconnectedCallback(){this._happel.umount()}adoptedCallback(){this._happel.update()}attributeChangedCallback(e,t,i){this._happel.dispatch(n.attribute,{attrName:e,oldVal:t,newVal:i})}})}class b{constructor(e,t,i,a,s,l,o){this.refs={},this.dispatch=(e,t,i)=>d(this,void 0,void 0,(function*(){return this._dispatchAction(e,t,void 0,i)})),this.render=()=>{if(this.debug){const e=performance.now();let t;try{t=this.view(this.state)}catch(e){b.error(this.name,m,e)}const i=performance.now();return b.log(this.name,m,i-e+" ms",t),null!=t?t:[]}{let e;try{e=this.view(this.state)}catch(e){b.error(this.name,m,e)}return null!=e?e:[]}},this.actionCb=(e,t,i)=>{void 0===(t=(null==t?void 0:t.constructor)===Function?t(i):t)&&i&&(t=i instanceof CustomEvent?i.detail:function(e){const t=e.target;if("FORM"===t.nodeName){e.preventDefault();const i={data:{},validation:{},valid:!0},n=t.elements;for(let e=0;e<n.length;e++){const t=y(n[e]);if(t&&t.name){const a=i.data,s=t.name,l=t.value;void 0===a[s]?a[s]=l:"string"==typeof a[s]||a[s]instanceof String?a[s]=l instanceof Array?[a[s],...l]:[a[s],l]:a[s]instanceof Array?l instanceof Array?a[s]=a[s].concat(l):a[s].push(l):a[s]=l instanceof Array?[a[s],...l]:[a[s],l],a[s]instanceof Array&&(a[s]=a[s].filter((e=>null!==e)),"radio"===n[e].type&&(a[s]=a[s].length?a[s][0]:null)),t.validation&&(i.validation[s]=t.validation),t.valid||(i.valid=!1)}}return i}return y(t)}(i)),this._dispatchAction(e,t,i)},this.mount=e=>{const t="string"==typeof e?document.getElementById(e):e;if(t&&t[p]){t[p].umount()}if(t&&!this.element){this.element=t,t[p]=this;const e=this.render();this._updateDom(t,e,this),this._dispatchAction(n.mount,this.element)}return this},this.umount=()=>{if(this.element){this._dispatchAction(n.umount,this.element),this.element.hasAttribute(p)&&this.element.removeAttribute(p);const e=this.element.querySelectorAll(`[${p}]`);for(let t=0;t<e.length;t++){const i=e[t].happ;null==i||i.umount()}for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);delete this.element.happ,this.element=void 0}return this._windowActionListener&&window.removeEventListener(n.action,this._windowActionListener),this},this.update=()=>(this.element&&!this._updateSched&&(this._updateSched=r((()=>{if(this.element){const e=this.render();this._updateDom(this.element,e,this)}this._updateSched=void 0}))),this),this.toHsml=()=>{if(this.element){if(!this._updateSched)return["div",{skip:!0}];c(this._updateSched),this._updateSched=void 0}const e=this.render();return e.push((e=>{this.element||(this.element=e,e.happ=this,this._dispatchAction(n.mount,this.element))})),["div",e]},this.toHtml=()=>this.element?this.element.outerHTML:"",this.debug=null!=s&&s,this.name=null!=l?l:p,this.attributes=null!=o?o:[],this.state=e(),this.view=t,this.dispatcher=null!=i?i:e=>d(this,void 0,void 0,(function*(){return b.log(this.name,h,e.type,e.data)})),this._dispatchAction(n.init,this).then((()=>a&&this.mount(a)))}_dispatchAction(e,t,i,n){return d(this,void 0,void 0,(function*(){if(this.debug){b.log(this.name,h,{type:e,data:t,event:i});const a=performance.now();yield this._dispatch(e,t,i,n);const s=performance.now();b.log(this.name,v,s-a+" ms",this.state)}else yield this._dispatch(e,t,i,n)}))}_dispatch(e,t,i,n){return d(this,void 0,void 0,(function*(){if(!n){try{yield this.dispatcher({type:e,data:t,event:i},this.state,this.dispatch)}catch(e){b.error(this.name,v,e)}this.update()}"element"===n&&this._dispatchElement(e,t),"window"===n&&this._dispatchWindow(e,t)}))}_dispatchElement(e,t){return d(this,void 0,void 0,(function*(){this.customElement&&g(this.customElement,n.action,{type:e,data:t}),!this.customElement&&this.element&&g(this.element,n.action,{type:e,data:t})}))}_dispatchWindow(e,t){return d(this,void 0,void 0,(function*(){window.dispatchEvent(new CustomEvent(n.action,{detail:{type:e,data:t}}))}))}windowActionListen(){this._windowActionListener?b.warn("windowEventListener already added"):(this._windowActionListener=e=>{const t=e.detail;this._dispatchAction(n.action,t)},window.addEventListener(n.action,this._windowActionListener))}_updateDom(e,t,i){if(this.debug){const n=performance.now();(0,u.hsmls2idomPatch)(e,t,i);const a=performance.now();b.log(this.name,"update:",a-n+" ms",e)}else(0,u.hsmls2idomPatch)(e,t,i)}}function g(e,t,i){var n,a;null==e||e.dispatchEvent(new CustomEvent(t,{detail:i})),null===(a=(n=e)[`on${t}`])||void 0===a||a.call(n,new CustomEvent(t,{detail:i}))}function y(e){const t=e;if(t.willValidate){let e=!0;for(const i in t.validity)if("customError"!==i&&"valid"!==i&&t.validity[i]){const n=t.validation;if(n){const a=n[i];if(a){t.setCustomValidity(a),e=!1;break}t.setCustomValidity("");break}}e&&t.setCustomValidity("")}let i;switch(e.nodeName){case"INPUT":const t=e;switch(t.type){case"text":case"hidden":case"password":case"email":case"search":case"url":case"tel":case"color":case"submit":case"button":i={name:t.name,value:""===t.value?null:t.value,validation:t.validationMessage,valid:t.validity.valid};break;case"number":case"range":i={name:t.name,value:isNaN(t.valueAsNumber)?null:t.valueAsNumber,valueString:t.value,validation:t.validationMessage,valid:t.validity.valid};break;case"datetime-local":i={name:t.name,value:""===t.value?null:t.value,valueNumber:isNaN(t.valueAsNumber)?null:t.valueAsNumber,valueDate:isNaN(t.valueAsNumber)?null:new Date(t.valueAsNumber),validation:t.validationMessage,valid:t.validity.valid};break;case"date":case"month":case"time":case"week":i={name:t.name,value:""===t.value?null:t.value,valueNumber:isNaN(t.valueAsNumber)?null:t.valueAsNumber,valueDate:t.valueAsDate,validation:t.validationMessage,valid:t.validity.valid};break;case"radio":i={name:t.name,value:t.checked?t.value:null,valueString:t.value,validation:t.validationMessage,valid:t.validity.valid};break;case"checkbox":i="on"===t.value?{name:t.name,value:t.checked,valueString:t.value,validation:t.validationMessage,valid:t.validity.valid}:{name:t.name,value:t.checked?String(t.value):null,valueString:t.value,validation:t.validationMessage,valid:t.validity.valid};break;case"file":const e=t.files,n=t.multiple||1===e.length?e[0]:null;i={name:t.name,value:n,valueString:t.value,validation:t.validationMessage,valid:t.validity.valid}}break;case"SELECT":const n=e;if(n.multiple){const e=Array.from(n.selectedOptions).map((e=>e.value));i={name:n.name,value:e,valueString:n.value,validation:n.validationMessage,valid:n.validity.valid}}else i={name:n.name,value:""===n.value?null:n.value,validation:n.validationMessage,valid:n.validity.valid};break;case"TEXTAREA":const a=e;i={name:a.name,value:""===a.value?null:a.value,validation:a.validationMessage,valid:a.validity.valid};break;case"BUTTON":const s=e;i={name:s.name,value:""===s.value?null:s.value,validation:s.validationMessage,valid:s.validity.valid}}return i}b.log=console.log,b.error=console.error,b.warn=console.warn}))}();
2
- //# sourceMappingURL=hsml-appi_demo.3d3d0e4e.js.map
@@ -1 +0,0 @@
1
- {"mappings":"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","sources":["src/hsml-app.ts"],"sourcesContent":["import { HAttrOnData, HAttrOnDataFnc, HElement, HElements, HHandlerCtx } from \"./hsml\";\nimport { hsmls2idomPatch } from \"./hsml-idom\";\n\nexport type HState<State> = () => State;\n\nexport type HView<State, HActionType extends string> = (\n state: State\n) => HElements<HActionType>;\n\nexport type HView1<State, HActionType extends string> = (\n state: State\n) => HElement<HActionType>;\n\nexport type HAppAction =\n | \"happ-init\"\n | \"happ-mount\"\n | \"happ-umount\"\n | \"happ-action\"\n | \"happ-attribute\";\n\nexport enum HAppActions {\n init = \"happ-init\",\n mount = \"happ-mount\",\n umount = \"happ-umount\",\n action = \"happ-action\",\n attribute = \"happ-attribute\"\n}\n\nexport interface HAction<HActionType extends string> {\n type: HActionType;\n data?: any;\n event?: Event;\n}\n\nexport type HDispatchScope =\n | \"element\"\n | \"window\";\n\nexport enum HDispatchScopes {\n element = \"element\",\n window = \"window\"\n}\n\nexport type HDispatch<HActionType extends string> = (\n type: HAction<HActionType>[\"type\"],\n data?: HAction<HActionType>[\"data\"],\n scope?: HDispatchScope | HDispatchScopes\n) => Promise<void>;\n\nexport type HDispatcher<State, HActionType extends string> = (\n // this: HApp<State, HActionType>,\n action: HAction<HActionType | HAppAction | HAppActions>,\n state: State,\n dispatch: HDispatch<HActionType>\n) => Promise<void>;\n\nconst schedule = window.requestAnimationFrame ||\n // window.webkitRequestAnimationFrame ||\n // (window as any).mozRequestAnimationFrame ||\n // (window as any).oRequestAnimationFrame ||\n // (window as any).msRequestAnimationFrame ||\n function (callback: Function) { window.setTimeout(callback, 1000 / 60); };\n\nconst unschedule = window.cancelAnimationFrame ||\n // window.webkitCancelAnimationFrame ||\n // (window as any).mozCancelAnimationFrame ||\n // (window as any).oCancelAnimationFrame ||\n // (window as any).msCancelAnimationFrame ||\n function (handle: number) { window.clearTimeout(handle); };\n\nconst msgAction = \"action:\";\nconst msgDispatch = \"dispatch:\";\nconst msgRender = \"render:\";\nconst msgUpdate = \"update:\";\n\nconst HAPP = \"happ\";\n\nexport interface HAppI<State, HActionType extends string> {\n state: HState<State>;\n view: HView<State, HActionType>;\n dispatcher: HDispatcher<State, HActionType>;\n element?: Element | string | null;\n debug?: boolean;\n name?: string;\n attributes?: string[];\n}\n\n/**\n * HApp definition\n *\n * @param hAppI HApp definition\n * @returns HApp instance\n */\nexport function happ<State, HActionType extends string>(hAppI: {\n state: HState<State>;\n view: HView<State, HActionType>;\n dispatcher: HDispatcher<State, HActionType>;\n element: Element | string | null;\n debug?: boolean;\n name?: string;\n // attributes?: string[];\n}) {\n return new HApp<State, HActionType>(\n hAppI.state,\n hAppI.view,\n hAppI.dispatcher,\n hAppI.element,\n hAppI.debug,\n hAppI.name\n // hAppI!.attributes\n );\n}\n\n// export type Class<T = object> = new (...args: any[]) => T;\n\n// export function happi<State, HActionType extends string>(\n// hAppI: Class<HAppI<State, HActionType>>,\n// element?: Element | string | null,\n// debug? boolean,\n// name?: string,\n// attributes: string[]\n// ) {\n// const hapi = new hAppI();\n// return new HApp<State, HActionType>(\n// hapi.state,\n// hapi.view,\n// hapi.dispatcher,\n// element,\n// debug\n// );\n// }\n\n// HAppEl\n\n/**\n * HApp custom HTML element definition.\n *\n * @param hAppI HApp definition\n */\nexport function happel<State, HActionType extends string>(hAppI: {\n state: HState<State>;\n view: HView<State, HActionType>;\n dispatcher: HDispatcher<State, HActionType>;\n /** Element suffix name, element name patern is `happ-${name}` */\n name: string;\n /** Element attribute list */\n attributes: string[];\n debug?: boolean;\n}): void {\n customElements.define(\n `${HAPP}-${hAppI.name}`,\n class HAppElement extends HTMLElement {\n static get observedAttributes() {\n return hAppI.attributes;\n }\n\n private _happel: HApp<State, HActionType>;\n\n constructor() {\n super();\n this._happel = new HApp<State, HActionType>(\n hAppI.state,\n hAppI.view,\n hAppI.dispatcher,\n undefined,\n hAppI.debug,\n hAppI.name,\n hAppI.attributes\n );\n (this._happel as any).customElement = this;\n }\n\n connectedCallback() {\n // this._happel.mount(this);\n this.attachShadow({ mode: \"open\" });\n this._happel.mount(this.shadowRoot as any);\n }\n\n disconnectedCallback() {\n this._happel.umount();\n }\n\n adoptedCallback() {\n this._happel.update();\n }\n\n attributeChangedCallback(\n attrName: string,\n oldVal: string | null,\n newVal: string | null\n ) {\n this._happel.dispatch(\n HAppActions.attribute as any,\n { attrName, oldVal, newVal });\n }\n }\n );\n}\n\n/**\n * HSML App\n */\nexport class HApp<State, HActionType extends string> implements HHandlerCtx<HActionType> {\n\n static log = console.log;\n static error = console.error;\n static warn = console.warn;\n\n readonly state: State;\n readonly view: HView<State, HActionType>;\n readonly dispatcher: HDispatcher<State, HActionType>;\n\n debug: boolean;\n\n readonly name: string;\n readonly attributes: string[];\n\n readonly element?: HTMLElement;\n readonly refs: { [key: string]: HTMLElement } = {};\n\n readonly customElement?: HTMLElement; // happ custom html element\n\n private _updateSched?: number;\n\n // private _onDispatch?: HDispatcher<State>;\n\n private _windowActionListener?: (event: Event) => void;\n\n constructor(\n state: HState<State>,\n view: HView<State, HActionType>,\n dispatcher?: HDispatcher<State, HActionType>,\n element?: Element | string | null,\n debug?: boolean ,\n name?: string,\n attributes?: string[]\n ) {\n this.debug = debug ?? false;\n this.name = name ?? HAPP;\n this.attributes = attributes ?? [];\n this.state = state();\n this.view = view;\n this.dispatcher = dispatcher ?? (async (a) => HApp.log(this.name, msgAction, a.type, a.data));\n this._dispatchAction(HAppActions.init, this).then(() => element && this.mount(element));\n }\n\n /**\n * Dispatch app action.\n */\n dispatch: HDispatch<HActionType> = async (\n type: HActionType,\n data?: any,\n scope?: HDispatchScope\n ): Promise<void> => {\n return this._dispatchAction(type, data, undefined, scope);\n }\n\n // onDispatch = (dispatcher: HDispatcher<State>): this => {\n // this._onDispatch = dispatcher;\n // return this;\n // }\n\n private async _dispatchAction(\n type: HActionType | HAppAction | HAppActions,\n data?: any,\n event?: Event,\n scope?: HDispatchScope\n ): Promise<void> {\n if (this.debug) {\n HApp.log(this.name, msgAction, { type, data, event });\n const t0 = performance.now();\n await this._dispatch(type, data, event, scope);\n const t1 = performance.now();\n HApp.log(this.name, msgDispatch, `${t1 - t0} ms`, this.state);\n } else {\n await this._dispatch(type, data, event, scope);\n }\n }\n\n private async _dispatch(\n type: HActionType | HAppAction | HAppActions,\n data: any,\n event?: Event,\n scope?: HDispatchScope\n ): Promise<void> {\n if (!scope) {\n try {\n await this.dispatcher(\n { type: type as HActionType, data, event },\n this.state,\n this.dispatch\n );\n } catch (e) {\n HApp.error(this.name, msgDispatch, e);\n }\n this.update();\n }\n scope === \"element\" && this._dispatchElement(type, data);\n scope === \"window\" && this._dispatchWindow(type, data);\n }\n\n private async _dispatchElement(\n type: HActionType | HAppAction | HAppActions,\n data?: any\n ): Promise<void> {\n this.customElement && elementDispatchCustomEvent(this.customElement, HAppActions.action, { type, data });\n !this.customElement && this.element && elementDispatchCustomEvent(this.element, HAppActions.action, { type, data });\n // this._onDispatch?.({ type, data, event }, this.state, this.dispatch);\n }\n\n private async _dispatchWindow(\n type: HActionType | HAppAction | HAppActions,\n data?: any): Promise<void> {\n window.dispatchEvent(new CustomEvent(HAppActions.action, { detail: { type, data } }));\n }\n\n /**\n * Window action listen and route actions to dispatcher.\n * Call this method on app mount action.\n * Listening will be stopped on app umount automatically.\n */\n windowActionListen() {\n if (!this._windowActionListener) {\n this._windowActionListener = (event: Event) => {\n const action = (event as CustomEvent).detail as HAction<HActionType>;\n this._dispatchAction(HAppActions.action, action);\n };\n window.addEventListener(HAppActions.action, this._windowActionListener);\n } else {\n HApp.warn(\"windowEventListener already added\");\n }\n }\n\n /**\n * Render HSML based on app state.\n */\n render = (): HElements<HActionType> => {\n if (this.debug) {\n const t0 = performance.now();\n let hsmls;\n try {\n hsmls = this.view(this.state);\n } catch (e) {\n HApp.error(this.name, msgRender, e);\n }\n const t1 = performance.now();\n HApp.log(this.name, msgRender, `${t1 - t0} ms`, hsmls);\n return hsmls ?? [];\n } else {\n let hsmls;\n try {\n hsmls = this.view(this.state);\n } catch (e) {\n HApp.error(this.name, msgRender, e);\n }\n return hsmls ?? [];\n }\n }\n\n /**\n * HSML action callback.\n */\n actionCb = (actionType: HActionType, data: HAttrOnData, event: Event): void => {\n data = (data?.constructor === Function)\n ? (data as HAttrOnDataFnc)(event)\n : data;\n if (data === undefined && event) {\n if (event instanceof CustomEvent) {\n data = event.detail;\n } else {\n data = formData(event) as any;\n // TODO middlewares for data processing\n // const middlewares: ((data: any, event: Event) => any)[] = [];\n // data = middlewares.reduce(\n // (data, middleware) => middleware(data, event),\n // data\n // );\n }\n }\n this._dispatchAction(actionType, data, event);\n }\n\n private _updateDom<HActionType extends string>(\n el: Element,\n hsml: HElements<HActionType>,\n ctx: HHandlerCtx<HActionType>\n ): void {\n if (this.debug) {\n const t0 = performance.now();\n hsmls2idomPatch(el, hsml, ctx);\n const t1 = performance.now();\n HApp.log(this.name, msgUpdate, `${t1 - t0} ms`, el);\n } else {\n hsmls2idomPatch(el, hsml, ctx);\n }\n }\n\n /**\n * Mount app to DOM element.\n *\n * @param e DOM element\n */\n mount = (e: Element | string | null): this => {\n const el = (typeof e === \"string\") ? document.getElementById(e) : e;\n if (el && (el as any)[HAPP]) {\n const a = (el as any)[HAPP] as HApp<State, HActionType>;\n a.umount();\n }\n if (el && !this.element) {\n (this as any).element = el;\n (el as any)[HAPP] = this;\n const hsmls = (this as any).render();\n this._updateDom<HActionType>(el, hsmls, this);\n this._dispatchAction(HAppActions.mount, this.element);\n }\n return this;\n }\n\n /**\n * Umount app to DOM element.\n */\n umount = (): this => {\n if (this.element) {\n this._dispatchAction(HAppActions.umount, this.element);\n if (this.element.hasAttribute(HAPP)) {\n this.element.removeAttribute(HAPP);\n }\n const aNodes = this.element.querySelectorAll(`[${HAPP}]`);\n for (let i = 0; i < aNodes.length; i++) {\n const a = (aNodes[i] as any).happ as HApp<State, HActionType>;\n a?.umount();\n }\n while (this.element.firstChild /*.hasChildNodes()*/) {\n this.element.removeChild(this.element.firstChild);\n }\n delete (this.element as any).happ;\n (this as any).element = undefined;\n }\n if (this._windowActionListener) {\n window.removeEventListener(HAppActions.action, this._windowActionListener);\n }\n return this;\n }\n\n /**\n * Update DOM element based on app state.\n */\n update = (): this => {\n if (this.element && !this._updateSched) {\n this._updateSched = schedule(() => {\n if (this.element) {\n const hsmls = this.render();\n this._updateDom<HActionType>(this.element, hsmls, this);\n }\n this._updateSched = undefined;\n });\n }\n return this;\n }\n\n toHsml = (): HElement<HActionType> => {\n if (this.element) {\n if (this._updateSched) {\n unschedule(this._updateSched);\n this._updateSched = undefined;\n } else {\n return [\"div\", { skip: true }];\n }\n }\n const hsmls = this.render();\n hsmls.push(\n (e: Element) => {\n if (!this.element) {\n (this as any).element = e;\n (e as any).happ = this;\n this._dispatchAction(HAppActions.mount, this.element);\n }\n });\n return [\"div\", hsmls];\n }\n\n toHtml = (): string => {\n return this.element ? this.element.outerHTML : \"\";\n }\n\n}\n\nfunction elementDispatchCustomEvent<HActionType extends string>(\n el: HTMLElement,\n type: HActionType,\n data: any\n) {\n el?.dispatchEvent(new CustomEvent(type, { detail: data }));\n (el as any)[`on${type}`]?.(new CustomEvent(type, { detail: data }));\n}\n\ntype FormDataInputValue = string | number | boolean | null | Array<string | number | boolean | null>;\n\ntype FormInputData = {\n name?: string;\n value: FormDataInputValue;\n valueString?: string;\n valueNumber?: number | null;\n valueDate?: Date | null;\n validation: string;\n valid: boolean;\n};\n\ntype FormData = {\n data: {\n [name: string]: FormDataInputValue;\n };\n validation: { [name: string]: string };\n valid: boolean;\n};\n\nexport type HFormInputData<Value = FormDataInputValue> = {\n name?: string;\n value: Value;\n valueString?: string | null;\n valueNumber?: number | null;\n valueDate?: Date | null;\n validation: string;\n valid: boolean;\n};\n\nexport type HFormData<Data> = {\n data: Data;\n validation: { [name in keyof Data]?: string };\n valid?: boolean;\n};\n\nfunction formData(e: Event): FormData | FormInputData | undefined {\n const el = e.target as HTMLElement;\n switch (el.nodeName) {\n case \"FORM\":\n (e as Event).preventDefault();\n const form: FormData = {\n data: {},\n validation: {},\n valid: true\n };\n const els = (el as HTMLFormElement).elements;\n for (let i = 0; i < els.length; i++) {\n const inputData = formInputData(els[i]);\n if (inputData && inputData.name) {\n const formData = form.data;\n const name = inputData.name;\n const value = inputData.value;\n if (formData[name] === undefined) {\n formData[name] = value;\n } else if (typeof formData[name] === \"string\" || formData[name] instanceof String) {\n if (value instanceof Array) {\n formData[name] = [formData[name] as string, ...value];\n } else {\n formData[name] = [formData[name] as string, value as string];\n }\n } else if (formData[name] instanceof Array) {\n if (value instanceof Array) {\n formData[name] = (formData[name] as Array<any>).concat(value);\n } else {\n (formData[name] as Array<any>).push(value);\n }\n } else {\n if (value instanceof Array) {\n formData[name] = [formData[name] as string, ...value];\n } else {\n formData[name] = [formData[name] as string, value];\n }\n }\n if (formData[name] instanceof Array) {\n formData[name] = (formData[name] as Array<any>)\n .filter(d => d !== null);\n if ((els[i] as HTMLInputElement).type === \"radio\") {\n formData[name] = (formData[name] as Array<any>).length\n ? (formData[name] as Array<any>)[0]\n : null;\n }\n }\n if (inputData.validation) {\n form.validation[name] = inputData.validation;\n }\n if (!inputData.valid) {\n form.valid = false;\n }\n }\n }\n return form;\n default:\n return formInputData(el);\n }\n}\n\nfunction formInputData(el: Element): FormInputData | undefined {\n // Client-side form validation\n // https://developer.mozilla.org/en-US/docs/Learn/Forms/Form_validation\n const vel = el as HTMLInputElement;\n if (vel.willValidate) {\n let valid = true;\n for (const key in vel.validity) {\n if (key !== \"customError\" && key !== \"valid\") {\n if ((vel.validity as any)[key]) {\n const msgs = (vel as any)[\"validation\"];\n if (msgs) {\n const msg = (msgs as any)[key];\n if (msg) {\n vel.setCustomValidity(msg);\n // vel.reportValidity();\n valid = false;\n break;\n } else {\n vel.setCustomValidity(\"\");\n // vel.reportValidity();\n break;\n }\n }\n }\n }\n }\n if (valid) {\n vel.setCustomValidity(\"\");\n // vel.reportValidity();\n }\n }\n\n let data: FormInputData | undefined;\n switch (el.nodeName) {\n case \"INPUT\":\n const iel = el as HTMLInputElement;\n switch (iel.type) {\n case \"text\":\n case \"hidden\":\n case \"password\":\n case \"email\":\n case \"search\":\n case \"url\":\n case \"tel\":\n case \"color\":\n case \"submit\":\n case \"button\":\n data = {\n name: iel.name,\n value: iel.value === \"\" ? null : iel.value,\n validation: iel.validationMessage,\n valid: iel.validity.valid\n };\n break;\n case \"number\":\n case \"range\":\n data = {\n name: iel.name,\n value: isNaN(iel.valueAsNumber)\n ? null\n : iel.valueAsNumber,\n valueString: iel.value,\n validation: iel.validationMessage,\n valid: iel.validity.valid\n };\n break;\n case \"datetime-local\":\n data = {\n name: iel.name,\n value: iel.value === \"\" ? null : iel.value,\n valueNumber: isNaN(iel.valueAsNumber)\n ? null\n : iel.valueAsNumber,\n valueDate: isNaN(iel.valueAsNumber)\n ? null\n : new Date(iel.valueAsNumber),\n validation: iel.validationMessage,\n valid: iel.validity.valid\n };\n break;\n case \"date\":\n case \"month\":\n case \"time\":\n case \"week\":\n data = {\n name: iel.name,\n value: iel.value === \"\" ? null : iel.value,\n valueNumber: isNaN(iel.valueAsNumber)\n ? null\n : iel.valueAsNumber,\n valueDate: iel.valueAsDate,\n validation: iel.validationMessage,\n valid: iel.validity.valid\n };\n break;\n case \"radio\":\n data = {\n name: iel.name,\n value: iel.checked ? iel.value : null,\n valueString: iel.value,\n validation: iel.validationMessage,\n valid: iel.validity.valid\n };\n break;\n case \"checkbox\":\n if (iel.value === \"on\") { // value not set in element\n data = {\n name: iel.name,\n value: iel.checked,\n valueString: iel.value,\n validation: iel.validationMessage,\n valid: iel.validity.valid\n };\n } else {\n data = {\n name: iel.name,\n value: iel.checked ? String(iel.value) : null,\n valueString: iel.value,\n validation: iel.validationMessage,\n valid: iel.validity.valid\n };\n }\n break;\n case \"file\":\n const files = (iel as any).files as FileList;\n const value: any = iel.multiple\n ? files[0]\n : files.length === 1 ? files[0] : null;\n data = {\n name: iel.name,\n value,\n valueString: iel.value,\n validation: iel.validationMessage,\n valid: iel.validity.valid\n };\n break;\n }\n break;\n case \"SELECT\":\n const sel = el as HTMLSelectElement;\n if (sel.multiple) {\n const values = Array.from(sel.selectedOptions).map(o => o.value);\n data = {\n name: sel.name,\n value: values,\n valueString: sel.value,\n validation: sel.validationMessage,\n valid: sel.validity.valid\n };\n } else {\n data = {\n name: sel.name,\n value: sel.value === \"\" ? null : sel.value,\n validation: sel.validationMessage,\n valid: sel.validity.valid\n };\n }\n break;\n case \"TEXTAREA\":\n const tel = el as HTMLTextAreaElement;\n data = {\n name: tel.name,\n value: tel.value === \"\" ? null : tel.value,\n validation: tel.validationMessage,\n valid: tel.validity.valid\n };\n break;\n case \"BUTTON\":\n const bel = el as HTMLButtonElement;\n data = {\n name: bel.name,\n value: bel.value === \"\" ? null : bel.value,\n validation: bel.validationMessage,\n valid: bel.validity.valid\n };\n break;\n }\n return data;\n}\n"],"names":["$a85519cc1b20a4af$export$3dcd9fad60135c2c","HAppActions","$a85519cc1b20a4af$export$3d736e925369e0e4","HDispatchScopes","$a85519cc1b20a4af$var$schedule","window","requestAnimationFrame","callback","setTimeout","$a85519cc1b20a4af$var$unschedule","cancelAnimationFrame","handle","clearTimeout","$a85519cc1b20a4af$var$msgAction","$a85519cc1b20a4af$var$msgDispatch","$a85519cc1b20a4af$var$msgRender","$a85519cc1b20a4af$var$HAPP","$a85519cc1b20a4af$export$eb8950696418f795","hAppI","$a85519cc1b20a4af$export$8cfef5dc37c46888","state","view","dispatcher","element","debug","name","$a85519cc1b20a4af$export$1cfc54b3834d3c50","customElements","define","HTMLElement","observedAttributes","attributes","constructor","super","this","_happel","undefined","customElement","connectedCallback","attachShadow","mode","mount","shadowRoot","disconnectedCallback","umount","adoptedCallback","update","attributeChangedCallback","attrName","oldVal","newVal","dispatch","attribute","refs","type","data","scope","$a85519cc1b20a4af$var$__awaiter","_dispatchAction","render","t0","performance","now","hsmls","e","error","t1","log","actionCb","actionType","event","Function","CustomEvent","detail","el","target","nodeName","preventDefault","form","validation","valid","els","elements","i","length","inputData","$a85519cc1b20a4af$var$formInputData","formData","value","String","Array","concat","push","filter","d","$a85519cc1b20a4af$var$formData","document","getElementById","_updateDom","hasAttribute","removeAttribute","aNodes","querySelectorAll","a","happ","firstChild","removeChild","_windowActionListener","removeEventListener","action","_updateSched","toHsml","skip","toHtml","outerHTML","init","then","_dispatch","_dispatchElement","_dispatchWindow","$a85519cc1b20a4af$var$elementDispatchCustomEvent","dispatchEvent","windowActionListen","warn","addEventListener","hsml","ctx","$8IJ2T","hsmls2idomPatch","_b","_a","call","vel","willValidate","key","validity","msgs","msg","setCustomValidity","iel","validationMessage","isNaN","valueAsNumber","valueString","valueNumber","valueDate","Date","valueAsDate","checked","files","multiple","sel","values","from","selectedOptions","map","o","tel","bel","console"],"version":3,"file":"hsml-appi_demo.3d3d0e4e.js.map"}
@@ -1,2 +0,0 @@
1
- function e(e,t,i,n){Object.defineProperty(e,t,{get:i,set:n,enumerable:!0,configurable:!0})}var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},i={},n={},a=t.parcelRequirede31;null==a&&((a=function(e){if(e in i)return i[e].exports;if(e in n){var t=n[e];delete n[e];var a={id:e,exports:{}};return i[e]=a,t.call(a.exports,a,a.exports),a.exports}var s=new Error("Cannot find module '"+e+"'");throw s.code="MODULE_NOT_FOUND",s}).register=function(e,t){n[e]=t},t.parcelRequirede31=a),a.register("lQ1yG",(function(t,i){e(t.exports,"HAppActions",(function(){return n}),(function(e){return n=e})),e(t.exports,"HDispatchScopes",(function(){return l}),(function(e){return l=e})),e(t.exports,"happ",(function(){return f}),(function(e){return f=e})),e(t.exports,"HApp",(function(){return b}),(function(e){return b=e})),e(t.exports,"happel",(function(){return w}),(function(e){return w=e}));var n,s,l,o,r=a("hrCkK"),d=function(e,t,i,n){return new(i||(i=Promise))((function(a,s){function l(e){try{r(n.next(e))}catch(e){s(e)}}function o(e){try{r(n.throw(e))}catch(e){s(e)}}function r(e){var t;e.done?a(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(l,o)}r((n=n.apply(e,t||[])).next())}))};(s=n||(n={})).init="happ-init",s.mount="happ-mount",s.umount="happ-umount",s.action="happ-action",s.attribute="happ-attribute",(o=l||(l={})).element="element",o.window="window";const u=window.requestAnimationFrame||function(e){window.setTimeout(e,1e3/60)},c=window.cancelAnimationFrame||function(e){window.clearTimeout(e)},h="action:",v="dispatch:",m="render:",p="happ";function f(e){return new b(e.state,e.view,e.dispatcher,e.element,e.debug,e.name)}function w(e){customElements.define(`${p}-${e.name}`,class extends HTMLElement{static get observedAttributes(){return e.attributes}constructor(){super(),this._happel=new b(e.state,e.view,e.dispatcher,void 0,e.debug,e.name,e.attributes),this._happel.customElement=this}connectedCallback(){this.attachShadow({mode:"open"}),this._happel.mount(this.shadowRoot)}disconnectedCallback(){this._happel.umount()}adoptedCallback(){this._happel.update()}attributeChangedCallback(e,t,i){this._happel.dispatch(n.attribute,{attrName:e,oldVal:t,newVal:i})}})}class b{constructor(e,t,i,a,s,l,o){this.refs={},this.dispatch=(e,t,i)=>d(this,void 0,void 0,(function*(){return this._dispatchAction(e,t,void 0,i)})),this.render=()=>{if(this.debug){const e=performance.now();let t;try{t=this.view(this.state)}catch(e){b.error(this.name,m,e)}const i=performance.now();return b.log(this.name,m,i-e+" ms",t),null!=t?t:[]}{let e;try{e=this.view(this.state)}catch(e){b.error(this.name,m,e)}return null!=e?e:[]}},this.actionCb=(e,t,i)=>{void 0===(t=(null==t?void 0:t.constructor)===Function?t(i):t)&&i&&(t=i instanceof CustomEvent?i.detail:function(e){const t=e.target;if("FORM"===t.nodeName){e.preventDefault();const i={data:{},validation:{},valid:!0},n=t.elements;for(let e=0;e<n.length;e++){const t=y(n[e]);if(t&&t.name){const a=i.data,s=t.name,l=t.value;void 0===a[s]?a[s]=l:"string"==typeof a[s]||a[s]instanceof String?a[s]=l instanceof Array?[a[s],...l]:[a[s],l]:a[s]instanceof Array?l instanceof Array?a[s]=a[s].concat(l):a[s].push(l):a[s]=l instanceof Array?[a[s],...l]:[a[s],l],a[s]instanceof Array&&(a[s]=a[s].filter((e=>null!==e)),"radio"===n[e].type&&(a[s]=a[s].length?a[s][0]:null)),t.validation&&(i.validation[s]=t.validation),t.valid||(i.valid=!1)}}return i}return y(t)}(i)),this._dispatchAction(e,t,i)},this.mount=e=>{const t="string"==typeof e?document.getElementById(e):e;if(t&&t[p]){t[p].umount()}if(t&&!this.element){this.element=t,t[p]=this;const e=this.render();this._updateDom(t,e,this),this._dispatchAction(n.mount,this.element)}return this},this.umount=()=>{if(this.element){this._dispatchAction(n.umount,this.element),this.element.hasAttribute(p)&&this.element.removeAttribute(p);const e=this.element.querySelectorAll(`[${p}]`);for(let t=0;t<e.length;t++){const i=e[t].happ;null==i||i.umount()}for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);delete this.element.happ,this.element=void 0}return this._windowActionListener&&window.removeEventListener(n.action,this._windowActionListener),this},this.update=()=>(this.element&&!this._updateSched&&(this._updateSched=u((()=>{if(this.element){const e=this.render();this._updateDom(this.element,e,this)}this._updateSched=void 0}))),this),this.toHsml=()=>{if(this.element){if(!this._updateSched)return["div",{skip:!0}];c(this._updateSched),this._updateSched=void 0}const e=this.render();return e.push((e=>{this.element||(this.element=e,e.happ=this,this._dispatchAction(n.mount,this.element))})),["div",e]},this.toHtml=()=>this.element?this.element.outerHTML:"",this.debug=null!=s&&s,this.name=null!=l?l:p,this.attributes=null!=o?o:[],this.state=e(),this.view=t,this.dispatcher=null!=i?i:e=>d(this,void 0,void 0,(function*(){return b.log(this.name,h,e.type,e.data)})),this._dispatchAction(n.init,this).then((()=>a&&this.mount(a)))}_dispatchAction(e,t,i,n){return d(this,void 0,void 0,(function*(){if(this.debug){b.log(this.name,h,{type:e,data:t,event:i});const a=performance.now();yield this._dispatch(e,t,i,n);const s=performance.now();b.log(this.name,v,s-a+" ms",this.state)}else yield this._dispatch(e,t,i,n)}))}_dispatch(e,t,i,n){return d(this,void 0,void 0,(function*(){if(!n){try{yield this.dispatcher({type:e,data:t,event:i},this.state,this.dispatch)}catch(e){b.error(this.name,v,e)}this.update()}"element"===n&&this._dispatchElement(e,t),"window"===n&&this._dispatchWindow(e,t)}))}_dispatchElement(e,t){return d(this,void 0,void 0,(function*(){this.customElement&&g(this.customElement,n.action,{type:e,data:t}),!this.customElement&&this.element&&g(this.element,n.action,{type:e,data:t})}))}_dispatchWindow(e,t){return d(this,void 0,void 0,(function*(){window.dispatchEvent(new CustomEvent(n.action,{detail:{type:e,data:t}}))}))}windowActionListen(){this._windowActionListener?b.warn("windowEventListener already added"):(this._windowActionListener=e=>{const t=e.detail;this._dispatchAction(n.action,t)},window.addEventListener(n.action,this._windowActionListener))}_updateDom(e,t,i){if(this.debug){const n=performance.now();(0,r.hsmls2idomPatch)(e,t,i);const a=performance.now();b.log(this.name,"update:",a-n+" ms",e)}else(0,r.hsmls2idomPatch)(e,t,i)}}function g(e,t,i){var n,a;null==e||e.dispatchEvent(new CustomEvent(t,{detail:i})),null===(a=(n=e)[`on${t}`])||void 0===a||a.call(n,new CustomEvent(t,{detail:i}))}function y(e){const t=e;if(t.willValidate){let e=!0;for(const i in t.validity)if("customError"!==i&&"valid"!==i&&t.validity[i]){const n=t.validation;if(n){const a=n[i];if(a){t.setCustomValidity(a),e=!1;break}t.setCustomValidity("");break}}e&&t.setCustomValidity("")}let i;switch(e.nodeName){case"INPUT":const t=e;switch(t.type){case"text":case"hidden":case"password":case"email":case"search":case"url":case"tel":case"color":case"submit":case"button":i={name:t.name,value:""===t.value?null:t.value,validation:t.validationMessage,valid:t.validity.valid};break;case"number":case"range":i={name:t.name,value:isNaN(t.valueAsNumber)?null:t.valueAsNumber,valueString:t.value,validation:t.validationMessage,valid:t.validity.valid};break;case"datetime-local":i={name:t.name,value:""===t.value?null:t.value,valueNumber:isNaN(t.valueAsNumber)?null:t.valueAsNumber,valueDate:isNaN(t.valueAsNumber)?null:new Date(t.valueAsNumber),validation:t.validationMessage,valid:t.validity.valid};break;case"date":case"month":case"time":case"week":i={name:t.name,value:""===t.value?null:t.value,valueNumber:isNaN(t.valueAsNumber)?null:t.valueAsNumber,valueDate:t.valueAsDate,validation:t.validationMessage,valid:t.validity.valid};break;case"radio":i={name:t.name,value:t.checked?t.value:null,valueString:t.value,validation:t.validationMessage,valid:t.validity.valid};break;case"checkbox":i="on"===t.value?{name:t.name,value:t.checked,valueString:t.value,validation:t.validationMessage,valid:t.validity.valid}:{name:t.name,value:t.checked?String(t.value):null,valueString:t.value,validation:t.validationMessage,valid:t.validity.valid};break;case"file":const e=t.files,n=t.multiple||1===e.length?e[0]:null;i={name:t.name,value:n,valueString:t.value,validation:t.validationMessage,valid:t.validity.valid}}break;case"SELECT":const n=e;if(n.multiple){const e=Array.from(n.selectedOptions).map((e=>e.value));i={name:n.name,value:e,valueString:n.value,validation:n.validationMessage,valid:n.validity.valid}}else i={name:n.name,value:""===n.value?null:n.value,validation:n.validationMessage,valid:n.validity.valid};break;case"TEXTAREA":const a=e;i={name:a.name,value:""===a.value?null:a.value,validation:a.validationMessage,valid:a.validity.valid};break;case"BUTTON":const s=e;i={name:s.name,value:""===s.value?null:s.value,validation:s.validationMessage,valid:s.validity.valid}}return i}b.log=console.log,b.error=console.error,b.warn=console.warn}));
2
- //# sourceMappingURL=hsml-appi_demo.eac28520.js.map
@@ -1 +0,0 @@
1
- {"mappings":"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","sources":["src/hsml-app.ts"],"sourcesContent":["import { HAttrOnData, HAttrOnDataFnc, HElement, HElements, HHandlerCtx } from \"./hsml\";\nimport { hsmls2idomPatch } from \"./hsml-idom\";\n\nexport type HState<State> = () => State;\n\nexport type HView<State, HActionType extends string> = (\n state: State\n) => HElements<HActionType>;\n\nexport type HView1<State, HActionType extends string> = (\n state: State\n) => HElement<HActionType>;\n\nexport type HAppAction =\n | \"happ-init\"\n | \"happ-mount\"\n | \"happ-umount\"\n | \"happ-action\"\n | \"happ-attribute\";\n\nexport enum HAppActions {\n init = \"happ-init\",\n mount = \"happ-mount\",\n umount = \"happ-umount\",\n action = \"happ-action\",\n attribute = \"happ-attribute\"\n}\n\nexport interface HAction<HActionType extends string> {\n type: HActionType;\n data?: any;\n event?: Event;\n}\n\nexport type HDispatchScope =\n | \"element\"\n | \"window\";\n\nexport enum HDispatchScopes {\n element = \"element\",\n window = \"window\"\n}\n\nexport type HDispatch<HActionType extends string> = (\n type: HAction<HActionType>[\"type\"],\n data?: HAction<HActionType>[\"data\"],\n scope?: HDispatchScope | HDispatchScopes\n) => Promise<void>;\n\nexport type HDispatcher<State, HActionType extends string> = (\n // this: HApp<State, HActionType>,\n action: HAction<HActionType | HAppAction | HAppActions>,\n state: State,\n dispatch: HDispatch<HActionType>\n) => Promise<void>;\n\nconst schedule = window.requestAnimationFrame ||\n // window.webkitRequestAnimationFrame ||\n // (window as any).mozRequestAnimationFrame ||\n // (window as any).oRequestAnimationFrame ||\n // (window as any).msRequestAnimationFrame ||\n function (callback: Function) { window.setTimeout(callback, 1000 / 60); };\n\nconst unschedule = window.cancelAnimationFrame ||\n // window.webkitCancelAnimationFrame ||\n // (window as any).mozCancelAnimationFrame ||\n // (window as any).oCancelAnimationFrame ||\n // (window as any).msCancelAnimationFrame ||\n function (handle: number) { window.clearTimeout(handle); };\n\nconst msgAction = \"action:\";\nconst msgDispatch = \"dispatch:\";\nconst msgRender = \"render:\";\nconst msgUpdate = \"update:\";\n\nconst HAPP = \"happ\";\n\nexport interface HAppI<State, HActionType extends string> {\n state: HState<State>;\n view: HView<State, HActionType>;\n dispatcher: HDispatcher<State, HActionType>;\n element?: Element | string | null;\n debug?: boolean;\n name?: string;\n attributes?: string[];\n}\n\n/**\n * HApp definition\n *\n * @param hAppI HApp definition\n * @returns HApp instance\n */\nexport function happ<State, HActionType extends string>(hAppI: {\n state: HState<State>;\n view: HView<State, HActionType>;\n dispatcher: HDispatcher<State, HActionType>;\n element: Element | string | null;\n debug?: boolean;\n name?: string;\n // attributes?: string[];\n}) {\n return new HApp<State, HActionType>(\n hAppI.state,\n hAppI.view,\n hAppI.dispatcher,\n hAppI.element,\n hAppI.debug,\n hAppI.name\n // hAppI!.attributes\n );\n}\n\n// export type Class<T = object> = new (...args: any[]) => T;\n\n// export function happi<State, HActionType extends string>(\n// hAppI: Class<HAppI<State, HActionType>>,\n// element?: Element | string | null,\n// debug? boolean,\n// name?: string,\n// attributes: string[]\n// ) {\n// const hapi = new hAppI();\n// return new HApp<State, HActionType>(\n// hapi.state,\n// hapi.view,\n// hapi.dispatcher,\n// element,\n// debug\n// );\n// }\n\n// HAppEl\n\n/**\n * HApp custom HTML element definition.\n *\n * @param hAppI HApp definition\n */\nexport function happel<State, HActionType extends string>(hAppI: {\n state: HState<State>;\n view: HView<State, HActionType>;\n dispatcher: HDispatcher<State, HActionType>;\n /** Element suffix name, element name patern is `happ-${name}` */\n name: string;\n /** Element attribute list */\n attributes: string[];\n debug?: boolean;\n}): void {\n customElements.define(\n `${HAPP}-${hAppI.name}`,\n class HAppElement extends HTMLElement {\n static get observedAttributes() {\n return hAppI.attributes;\n }\n\n private _happel: HApp<State, HActionType>;\n\n constructor() {\n super();\n this._happel = new HApp<State, HActionType>(\n hAppI.state,\n hAppI.view,\n hAppI.dispatcher,\n undefined,\n hAppI.debug,\n hAppI.name,\n hAppI.attributes\n );\n (this._happel as any).customElement = this;\n }\n\n connectedCallback() {\n // this._happel.mount(this);\n this.attachShadow({ mode: \"open\" });\n this._happel.mount(this.shadowRoot as any);\n }\n\n disconnectedCallback() {\n this._happel.umount();\n }\n\n adoptedCallback() {\n this._happel.update();\n }\n\n attributeChangedCallback(\n attrName: string,\n oldVal: string | null,\n newVal: string | null\n ) {\n this._happel.dispatch(\n HAppActions.attribute as any,\n { attrName, oldVal, newVal });\n }\n }\n );\n}\n\n/**\n * HSML App\n */\nexport class HApp<State, HActionType extends string> implements HHandlerCtx<HActionType> {\n\n static log = console.log;\n static error = console.error;\n static warn = console.warn;\n\n readonly state: State;\n readonly view: HView<State, HActionType>;\n readonly dispatcher: HDispatcher<State, HActionType>;\n\n debug: boolean;\n\n readonly name: string;\n readonly attributes: string[];\n\n readonly element?: HTMLElement;\n readonly refs: { [key: string]: HTMLElement } = {};\n\n readonly customElement?: HTMLElement; // happ custom html element\n\n private _updateSched?: number;\n\n // private _onDispatch?: HDispatcher<State>;\n\n private _windowActionListener?: (event: Event) => void;\n\n constructor(\n state: HState<State>,\n view: HView<State, HActionType>,\n dispatcher?: HDispatcher<State, HActionType>,\n element?: Element | string | null,\n debug?: boolean ,\n name?: string,\n attributes?: string[]\n ) {\n this.debug = debug ?? false;\n this.name = name ?? HAPP;\n this.attributes = attributes ?? [];\n this.state = state();\n this.view = view;\n this.dispatcher = dispatcher ?? (async (a) => HApp.log(this.name, msgAction, a.type, a.data));\n this._dispatchAction(HAppActions.init, this).then(() => element && this.mount(element));\n }\n\n /**\n * Dispatch app action.\n */\n dispatch: HDispatch<HActionType> = async (\n type: HActionType,\n data?: any,\n scope?: HDispatchScope\n ): Promise<void> => {\n return this._dispatchAction(type, data, undefined, scope);\n }\n\n // onDispatch = (dispatcher: HDispatcher<State>): this => {\n // this._onDispatch = dispatcher;\n // return this;\n // }\n\n private async _dispatchAction(\n type: HActionType | HAppAction | HAppActions,\n data?: any,\n event?: Event,\n scope?: HDispatchScope\n ): Promise<void> {\n if (this.debug) {\n HApp.log(this.name, msgAction, { type, data, event });\n const t0 = performance.now();\n await this._dispatch(type, data, event, scope);\n const t1 = performance.now();\n HApp.log(this.name, msgDispatch, `${t1 - t0} ms`, this.state);\n } else {\n await this._dispatch(type, data, event, scope);\n }\n }\n\n private async _dispatch(\n type: HActionType | HAppAction | HAppActions,\n data: any,\n event?: Event,\n scope?: HDispatchScope\n ): Promise<void> {\n if (!scope) {\n try {\n await this.dispatcher(\n { type: type as HActionType, data, event },\n this.state,\n this.dispatch\n );\n } catch (e) {\n HApp.error(this.name, msgDispatch, e);\n }\n this.update();\n }\n scope === \"element\" && this._dispatchElement(type, data);\n scope === \"window\" && this._dispatchWindow(type, data);\n }\n\n private async _dispatchElement(\n type: HActionType | HAppAction | HAppActions,\n data?: any\n ): Promise<void> {\n this.customElement && elementDispatchCustomEvent(this.customElement, HAppActions.action, { type, data });\n !this.customElement && this.element && elementDispatchCustomEvent(this.element, HAppActions.action, { type, data });\n // this._onDispatch?.({ type, data, event }, this.state, this.dispatch);\n }\n\n private async _dispatchWindow(\n type: HActionType | HAppAction | HAppActions,\n data?: any): Promise<void> {\n window.dispatchEvent(new CustomEvent(HAppActions.action, { detail: { type, data } }));\n }\n\n /**\n * Window action listen and route actions to dispatcher.\n * Call this method on app mount action.\n * Listening will be stopped on app umount automatically.\n */\n windowActionListen() {\n if (!this._windowActionListener) {\n this._windowActionListener = (event: Event) => {\n const action = (event as CustomEvent).detail as HAction<HActionType>;\n this._dispatchAction(HAppActions.action, action);\n };\n window.addEventListener(HAppActions.action, this._windowActionListener);\n } else {\n HApp.warn(\"windowEventListener already added\");\n }\n }\n\n /**\n * Render HSML based on app state.\n */\n render = (): HElements<HActionType> => {\n if (this.debug) {\n const t0 = performance.now();\n let hsmls;\n try {\n hsmls = this.view(this.state);\n } catch (e) {\n HApp.error(this.name, msgRender, e);\n }\n const t1 = performance.now();\n HApp.log(this.name, msgRender, `${t1 - t0} ms`, hsmls);\n return hsmls ?? [];\n } else {\n let hsmls;\n try {\n hsmls = this.view(this.state);\n } catch (e) {\n HApp.error(this.name, msgRender, e);\n }\n return hsmls ?? [];\n }\n }\n\n /**\n * HSML action callback.\n */\n actionCb = (actionType: HActionType, data: HAttrOnData, event: Event): void => {\n data = (data?.constructor === Function)\n ? (data as HAttrOnDataFnc)(event)\n : data;\n if (data === undefined && event) {\n if (event instanceof CustomEvent) {\n data = event.detail;\n } else {\n data = formData(event) as any;\n // TODO middlewares for data processing\n // const middlewares: ((data: any, event: Event) => any)[] = [];\n // data = middlewares.reduce(\n // (data, middleware) => middleware(data, event),\n // data\n // );\n }\n }\n this._dispatchAction(actionType, data, event);\n }\n\n private _updateDom<HActionType extends string>(\n el: Element,\n hsml: HElements<HActionType>,\n ctx: HHandlerCtx<HActionType>\n ): void {\n if (this.debug) {\n const t0 = performance.now();\n hsmls2idomPatch(el, hsml, ctx);\n const t1 = performance.now();\n HApp.log(this.name, msgUpdate, `${t1 - t0} ms`, el);\n } else {\n hsmls2idomPatch(el, hsml, ctx);\n }\n }\n\n /**\n * Mount app to DOM element.\n *\n * @param e DOM element\n */\n mount = (e: Element | string | null): this => {\n const el = (typeof e === \"string\") ? document.getElementById(e) : e;\n if (el && (el as any)[HAPP]) {\n const a = (el as any)[HAPP] as HApp<State, HActionType>;\n a.umount();\n }\n if (el && !this.element) {\n (this as any).element = el;\n (el as any)[HAPP] = this;\n const hsmls = (this as any).render();\n this._updateDom<HActionType>(el, hsmls, this);\n this._dispatchAction(HAppActions.mount, this.element);\n }\n return this;\n }\n\n /**\n * Umount app to DOM element.\n */\n umount = (): this => {\n if (this.element) {\n this._dispatchAction(HAppActions.umount, this.element);\n if (this.element.hasAttribute(HAPP)) {\n this.element.removeAttribute(HAPP);\n }\n const aNodes = this.element.querySelectorAll(`[${HAPP}]`);\n for (let i = 0; i < aNodes.length; i++) {\n const a = (aNodes[i] as any).happ as HApp<State, HActionType>;\n a?.umount();\n }\n while (this.element.firstChild /*.hasChildNodes()*/) {\n this.element.removeChild(this.element.firstChild);\n }\n delete (this.element as any).happ;\n (this as any).element = undefined;\n }\n if (this._windowActionListener) {\n window.removeEventListener(HAppActions.action, this._windowActionListener);\n }\n return this;\n }\n\n /**\n * Update DOM element based on app state.\n */\n update = (): this => {\n if (this.element && !this._updateSched) {\n this._updateSched = schedule(() => {\n if (this.element) {\n const hsmls = this.render();\n this._updateDom<HActionType>(this.element, hsmls, this);\n }\n this._updateSched = undefined;\n });\n }\n return this;\n }\n\n toHsml = (): HElement<HActionType> => {\n if (this.element) {\n if (this._updateSched) {\n unschedule(this._updateSched);\n this._updateSched = undefined;\n } else {\n return [\"div\", { skip: true }];\n }\n }\n const hsmls = this.render();\n hsmls.push(\n (e: Element) => {\n if (!this.element) {\n (this as any).element = e;\n (e as any).happ = this;\n this._dispatchAction(HAppActions.mount, this.element);\n }\n });\n return [\"div\", hsmls];\n }\n\n toHtml = (): string => {\n return this.element ? this.element.outerHTML : \"\";\n }\n\n}\n\nfunction elementDispatchCustomEvent<HActionType extends string>(\n el: HTMLElement,\n type: HActionType,\n data: any\n) {\n el?.dispatchEvent(new CustomEvent(type, { detail: data }));\n (el as any)[`on${type}`]?.(new CustomEvent(type, { detail: data }));\n}\n\ntype FormDataInputValue = string | number | boolean | null | Array<string | number | boolean | null>;\n\ntype FormInputData = {\n name?: string;\n value: FormDataInputValue;\n valueString?: string;\n valueNumber?: number | null;\n valueDate?: Date | null;\n validation: string;\n valid: boolean;\n};\n\ntype FormData = {\n data: {\n [name: string]: FormDataInputValue;\n };\n validation: { [name: string]: string };\n valid: boolean;\n};\n\nexport type HFormInputData<Value = FormDataInputValue> = {\n name?: string;\n value: Value;\n valueString?: string | null;\n valueNumber?: number | null;\n valueDate?: Date | null;\n validation: string;\n valid: boolean;\n};\n\nexport type HFormData<Data> = {\n data: Data;\n validation: { [name in keyof Data]?: string };\n valid?: boolean;\n};\n\nfunction formData(e: Event): FormData | FormInputData | undefined {\n const el = e.target as HTMLElement;\n switch (el.nodeName) {\n case \"FORM\":\n (e as Event).preventDefault();\n const form: FormData = {\n data: {},\n validation: {},\n valid: true\n };\n const els = (el as HTMLFormElement).elements;\n for (let i = 0; i < els.length; i++) {\n const inputData = formInputData(els[i]);\n if (inputData && inputData.name) {\n const formData = form.data;\n const name = inputData.name;\n const value = inputData.value;\n if (formData[name] === undefined) {\n formData[name] = value;\n } else if (typeof formData[name] === \"string\" || formData[name] instanceof String) {\n if (value instanceof Array) {\n formData[name] = [formData[name] as string, ...value];\n } else {\n formData[name] = [formData[name] as string, value as string];\n }\n } else if (formData[name] instanceof Array) {\n if (value instanceof Array) {\n formData[name] = (formData[name] as Array<any>).concat(value);\n } else {\n (formData[name] as Array<any>).push(value);\n }\n } else {\n if (value instanceof Array) {\n formData[name] = [formData[name] as string, ...value];\n } else {\n formData[name] = [formData[name] as string, value];\n }\n }\n if (formData[name] instanceof Array) {\n formData[name] = (formData[name] as Array<any>)\n .filter(d => d !== null);\n if ((els[i] as HTMLInputElement).type === \"radio\") {\n formData[name] = (formData[name] as Array<any>).length\n ? (formData[name] as Array<any>)[0]\n : null;\n }\n }\n if (inputData.validation) {\n form.validation[name] = inputData.validation;\n }\n if (!inputData.valid) {\n form.valid = false;\n }\n }\n }\n return form;\n default:\n return formInputData(el);\n }\n}\n\nfunction formInputData(el: Element): FormInputData | undefined {\n // Client-side form validation\n // https://developer.mozilla.org/en-US/docs/Learn/Forms/Form_validation\n const vel = el as HTMLInputElement;\n if (vel.willValidate) {\n let valid = true;\n for (const key in vel.validity) {\n if (key !== \"customError\" && key !== \"valid\") {\n if ((vel.validity as any)[key]) {\n const msgs = (vel as any)[\"validation\"];\n if (msgs) {\n const msg = (msgs as any)[key];\n if (msg) {\n vel.setCustomValidity(msg);\n // vel.reportValidity();\n valid = false;\n break;\n } else {\n vel.setCustomValidity(\"\");\n // vel.reportValidity();\n break;\n }\n }\n }\n }\n }\n if (valid) {\n vel.setCustomValidity(\"\");\n // vel.reportValidity();\n }\n }\n\n let data: FormInputData | undefined;\n switch (el.nodeName) {\n case \"INPUT\":\n const iel = el as HTMLInputElement;\n switch (iel.type) {\n case \"text\":\n case \"hidden\":\n case \"password\":\n case \"email\":\n case \"search\":\n case \"url\":\n case \"tel\":\n case \"color\":\n case \"submit\":\n case \"button\":\n data = {\n name: iel.name,\n value: iel.value === \"\" ? null : iel.value,\n validation: iel.validationMessage,\n valid: iel.validity.valid\n };\n break;\n case \"number\":\n case \"range\":\n data = {\n name: iel.name,\n value: isNaN(iel.valueAsNumber)\n ? null\n : iel.valueAsNumber,\n valueString: iel.value,\n validation: iel.validationMessage,\n valid: iel.validity.valid\n };\n break;\n case \"datetime-local\":\n data = {\n name: iel.name,\n value: iel.value === \"\" ? null : iel.value,\n valueNumber: isNaN(iel.valueAsNumber)\n ? null\n : iel.valueAsNumber,\n valueDate: isNaN(iel.valueAsNumber)\n ? null\n : new Date(iel.valueAsNumber),\n validation: iel.validationMessage,\n valid: iel.validity.valid\n };\n break;\n case \"date\":\n case \"month\":\n case \"time\":\n case \"week\":\n data = {\n name: iel.name,\n value: iel.value === \"\" ? null : iel.value,\n valueNumber: isNaN(iel.valueAsNumber)\n ? null\n : iel.valueAsNumber,\n valueDate: iel.valueAsDate,\n validation: iel.validationMessage,\n valid: iel.validity.valid\n };\n break;\n case \"radio\":\n data = {\n name: iel.name,\n value: iel.checked ? iel.value : null,\n valueString: iel.value,\n validation: iel.validationMessage,\n valid: iel.validity.valid\n };\n break;\n case \"checkbox\":\n if (iel.value === \"on\") { // value not set in element\n data = {\n name: iel.name,\n value: iel.checked,\n valueString: iel.value,\n validation: iel.validationMessage,\n valid: iel.validity.valid\n };\n } else {\n data = {\n name: iel.name,\n value: iel.checked ? String(iel.value) : null,\n valueString: iel.value,\n validation: iel.validationMessage,\n valid: iel.validity.valid\n };\n }\n break;\n case \"file\":\n const files = (iel as any).files as FileList;\n const value: any = iel.multiple\n ? files[0]\n : files.length === 1 ? files[0] : null;\n data = {\n name: iel.name,\n value,\n valueString: iel.value,\n validation: iel.validationMessage,\n valid: iel.validity.valid\n };\n break;\n }\n break;\n case \"SELECT\":\n const sel = el as HTMLSelectElement;\n if (sel.multiple) {\n const values = Array.from(sel.selectedOptions).map(o => o.value);\n data = {\n name: sel.name,\n value: values,\n valueString: sel.value,\n validation: sel.validationMessage,\n valid: sel.validity.valid\n };\n } else {\n data = {\n name: sel.name,\n value: sel.value === \"\" ? null : sel.value,\n validation: sel.validationMessage,\n valid: sel.validity.valid\n };\n }\n break;\n case \"TEXTAREA\":\n const tel = el as HTMLTextAreaElement;\n data = {\n name: tel.name,\n value: tel.value === \"\" ? null : tel.value,\n validation: tel.validationMessage,\n valid: tel.validity.valid\n };\n break;\n case \"BUTTON\":\n const bel = el as HTMLButtonElement;\n data = {\n name: bel.name,\n value: bel.value === \"\" ? null : bel.value,\n validation: bel.validationMessage,\n valid: bel.validity.valid\n };\n break;\n }\n return data;\n}\n"],"names":["$fe5fa9c04fc86188$export$3dcd9fad60135c2c","HAppActions","$fe5fa9c04fc86188$export$3d736e925369e0e4","HDispatchScopes","$fe5fa9c04fc86188$var$schedule","window","requestAnimationFrame","callback","setTimeout","$fe5fa9c04fc86188$var$unschedule","cancelAnimationFrame","handle","clearTimeout","$fe5fa9c04fc86188$var$msgAction","$fe5fa9c04fc86188$var$msgDispatch","$fe5fa9c04fc86188$var$msgRender","$fe5fa9c04fc86188$var$HAPP","$fe5fa9c04fc86188$export$eb8950696418f795","hAppI","$fe5fa9c04fc86188$export$8cfef5dc37c46888","state","view","dispatcher","element","debug","name","$fe5fa9c04fc86188$export$1cfc54b3834d3c50","customElements","define","HTMLElement","observedAttributes","attributes","constructor","super","this","_happel","undefined","customElement","connectedCallback","attachShadow","mode","mount","shadowRoot","disconnectedCallback","umount","adoptedCallback","update","attributeChangedCallback","attrName","oldVal","newVal","dispatch","attribute","refs","type","data","scope","$fe5fa9c04fc86188$var$__awaiter","_dispatchAction","render","t0","performance","now","hsmls","e","error","t1","log","actionCb","actionType","event","Function","CustomEvent","detail","el","target","nodeName","preventDefault","form","validation","valid","els","elements","i","length","inputData","$fe5fa9c04fc86188$var$formInputData","formData","value","String","Array","concat","push","filter","d","$fe5fa9c04fc86188$var$formData","document","getElementById","_updateDom","hasAttribute","removeAttribute","aNodes","querySelectorAll","a","happ","firstChild","removeChild","_windowActionListener","removeEventListener","action","_updateSched","toHsml","skip","toHtml","outerHTML","init","then","_dispatch","_dispatchElement","_dispatchWindow","$fe5fa9c04fc86188$var$elementDispatchCustomEvent","dispatchEvent","windowActionListen","warn","addEventListener","hsml","ctx","$hrCkK","hsmls2idomPatch","_b","_a","call","vel","willValidate","key","validity","msgs","msg","setCustomValidity","iel","validationMessage","isNaN","valueAsNumber","valueString","valueNumber","valueDate","Date","valueAsDate","checked","files","multiple","sel","values","from","selectedOptions","map","o","tel","bel","console"],"version":3,"file":"hsml-appi_demo.eac28520.js.map"}
@@ -1,21 +0,0 @@
1
- export declare class GA {
2
- static ga: GA;
3
- static init(trackingId: string, dimensions?: Object): void;
4
- static pageview(path: string, title?: string): void;
5
- static event(name: string, parameters?: {
6
- [k: string]: string;
7
- }): void;
8
- static set(parameters: {
9
- [k: string]: string;
10
- }): void;
11
- private _trackingId;
12
- constructor(trackingId: string, dimensions?: Object);
13
- pageview(path: string, title?: string): void;
14
- event(name: string, parameters?: {
15
- [k: string]: string;
16
- }): void;
17
- set(parameters: {
18
- [k: string]: string;
19
- }): void;
20
- private _load;
21
- }
@@ -1,63 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.GA = void 0;
4
- class GA {
5
- static init(trackingId, dimensions) {
6
- GA.ga = new GA(trackingId, dimensions);
7
- }
8
- static pageview(path, title) {
9
- if (GA.ga) {
10
- GA.ga.pageview(path, title);
11
- }
12
- }
13
- static event(name, parameters) {
14
- if (GA.ga) {
15
- GA.ga.event(name, parameters);
16
- }
17
- }
18
- static set(parameters) {
19
- if (GA.ga) {
20
- GA.ga.set(parameters);
21
- }
22
- }
23
- constructor(trackingId, dimensions) {
24
- this._trackingId = trackingId;
25
- this._load();
26
- }
27
- pageview(path, title) {
28
- if (this._trackingId) {
29
- self.gtag("config", this._trackingId, {
30
- page_path: path,
31
- page_title: title
32
- });
33
- }
34
- }
35
- event(name, parameters) {
36
- if (this._trackingId) {
37
- self.gtag("event", name, parameters);
38
- }
39
- }
40
- set(parameters) {
41
- if (this._trackingId) {
42
- self.gtag("set", parameters);
43
- }
44
- }
45
- _load() {
46
- if (this._trackingId) {
47
- const script = document.createElement("script");
48
- script.async = true;
49
- script.src = `https://www.googletagmanager.com/gtag/js?id=${this._trackingId}`;
50
- document.getElementsByTagName("head")[0].appendChild(script);
51
- const script1 = document.createElement("script");
52
- script1.textContent = `
53
- window.dataLayer = window.dataLayer || [];
54
- function gtag(){dataLayer.push(arguments);}
55
- gtag('js', new Date());
56
- gtag('config', '${this._trackingId}');
57
- `;
58
- document.getElementsByTagName("head")[0].appendChild(script1);
59
- }
60
- }
61
- }
62
- exports.GA = GA;
63
- //# sourceMappingURL=google-analytics.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"google-analytics.js","sourceRoot":"","sources":["../src/google-analytics.ts"],"names":[],"mappings":";;;AACA,MAAa,EAAE;IAIX,MAAM,CAAC,IAAI,CAAC,UAAkB,EAAE,UAAmB;QAC/C,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,IAAY,EAAE,KAAc;QACxC,IAAI,EAAE,CAAC,EAAE,EAAE;YACP,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SAC/B;IACL,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,IAAY,EAAE,UAAoC;QAC3D,IAAI,EAAE,CAAC,EAAE,EAAE;YACP,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;SACjC;IACL,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,UAAmC;QAC1C,IAAI,EAAE,CAAC,EAAE,EAAE;YACP,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;SACzB;IACL,CAAC;IAID,YAAY,UAAkB,EAAE,UAAmB;QAC/C,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;IAED,QAAQ,CAAC,IAAY,EAAE,KAAc;QACjC,IAAI,IAAI,CAAC,WAAW,EAAE;YACjB,IAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,EACzC;gBACI,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,KAAK;aACpB,CAAC,CAAC;SACV;IACL,CAAC;IAED,KAAK,CAAC,IAAY,EAAE,UAAoC;QACpD,IAAI,IAAI,CAAC,WAAW,EAAE;YACjB,IAAY,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;SACjD;IACL,CAAC;IAED,GAAG,CAAC,UAAmC;QACnC,IAAI,IAAI,CAAC,WAAW,EAAE;YACjB,IAAY,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;SACzC;IACL,CAAC;IAEO,KAAK;QACT,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;YACpB,MAAM,CAAC,GAAG,GAAG,+CAA+C,IAAI,CAAC,WAAW,EAAE,CAAC;YAC/E,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAE7D,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YACjD,OAAO,CAAC,WAAW,GAAG;;;;kCAIA,IAAI,CAAC,WAAW;aACrC,CAAC;YACF,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;SACjE;IACL,CAAC;CAEJ;AAzED,gBAyEC"}
@@ -1,79 +0,0 @@
1
-
2
- export class GA {
3
-
4
- static ga: GA;
5
-
6
- static init(trackingId: string, dimensions?: Object) {
7
- GA.ga = new GA(trackingId, dimensions);
8
- }
9
-
10
- static pageview(path: string, title?: string): void {
11
- if (GA.ga) {
12
- GA.ga.pageview(path, title);
13
- }
14
- }
15
-
16
- static event(name: string, parameters?: { [k: string]: string }): void {
17
- if (GA.ga) {
18
- GA.ga.event(name, parameters);
19
- }
20
- }
21
-
22
- static set(parameters: { [k: string]: string }): void {
23
- if (GA.ga) {
24
- GA.ga.set(parameters);
25
- }
26
- }
27
-
28
- private _trackingId: string;
29
-
30
- constructor(trackingId: string, dimensions?: Object) {
31
- this._trackingId = trackingId;
32
- this._load();
33
- }
34
-
35
- pageview(path: string, title?: string): void {
36
- if (this._trackingId) {
37
- (self as any).gtag("config", this._trackingId,
38
- {
39
- page_path: path,
40
- page_title: title
41
- });
42
- }
43
- }
44
-
45
- event(name: string, parameters?: { [k: string]: string }): void {
46
- if (this._trackingId) {
47
- (self as any).gtag("event", name, parameters);
48
- }
49
- }
50
-
51
- set(parameters: { [k: string]: string }): void {
52
- if (this._trackingId) {
53
- (self as any).gtag("set", parameters);
54
- }
55
- }
56
-
57
- private _load(): void {
58
- if (this._trackingId) {
59
- const script = document.createElement("script");
60
- script.async = true;
61
- script.src = `https://www.googletagmanager.com/gtag/js?id=${this._trackingId}`;
62
- document.getElementsByTagName("head")[0].appendChild(script);
63
-
64
- const script1 = document.createElement("script");
65
- script1.textContent = `
66
- window.dataLayer = window.dataLayer || [];
67
- function gtag(){dataLayer.push(arguments);}
68
- gtag('js', new Date());
69
- gtag('config', '${this._trackingId}');
70
- `;
71
- document.getElementsByTagName("head")[0].appendChild(script1);
72
- }
73
- }
74
-
75
- }
76
-
77
- // const ga = new GA("track-id");
78
- // GA.ga = ga;
79
- // ga.pageview("my-page");