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.
- package/demo/hash_demo.ts +6 -1
- package/demo/hsml-appel_demo.html +1 -1
- package/demo/hsml-appel_demo.ts +14 -10
- package/dist/browser-esmodule/hash.js +2 -2
- package/dist/browser-esmodule/hash.js.map +1 -1
- package/dist/browser-esmodule/hsml-app.js +24 -25
- package/dist/browser-esmodule/hsml-app.js.map +1 -1
- package/dist/browser-esmodule/index.js +26 -27
- package/dist/browser-esmodule/index.js.map +1 -1
- package/dist/browser-umd/hash.js +1 -1
- package/dist/browser-umd/hash.js.map +1 -1
- package/dist/browser-umd/hsml-app.js +1 -1
- package/dist/browser-umd/hsml-app.js.map +1 -1
- package/dist/browser-umd/index.js +1 -1
- package/dist/browser-umd/index.js.map +1 -1
- package/dist/demo/{hash_demo.1cbbc47a.js → hash_demo.57b93f2a.js} +2 -2
- package/dist/demo/hash_demo.57b93f2a.js.map +1 -0
- package/dist/demo/{hash_demo.80f80384.js → hash_demo.7e0ef005.js} +2 -2
- package/dist/demo/hash_demo.7e0ef005.js.map +1 -0
- package/dist/demo/hash_demo.html +1 -1
- package/dist/demo/hsml-app-bysquare_demo.html +1 -1
- package/dist/demo/hsml-app-form-validation_demo.html +1 -1
- package/dist/demo/hsml-app-form_demo.html +1 -1
- package/dist/demo/hsml-app-test_demo.html +1 -1
- package/dist/demo/hsml-app-tictactoe_demo.html +1 -1
- package/dist/demo/hsml-app_demo.html +1 -1
- package/dist/demo/hsml-appel_demo.39c5c95a.js +2 -0
- package/dist/demo/hsml-appel_demo.39c5c95a.js.map +1 -0
- package/dist/demo/hsml-appel_demo.fd0c6348.js +2 -0
- package/dist/demo/hsml-appel_demo.fd0c6348.js.map +1 -0
- package/dist/demo/hsml-appel_demo.html +1 -1
- package/dist/demo/hsml-appi_demo.64f70501.js +2 -0
- package/dist/demo/hsml-appi_demo.64f70501.js.map +1 -0
- package/dist/demo/hsml-appi_demo.9a157181.js +2 -0
- package/dist/demo/hsml-appi_demo.9a157181.js.map +1 -0
- package/dist/demo/hsml-appi_demo.html +1 -1
- package/dist/hash.d.ts +2 -2
- package/dist/hash.js +2 -2
- package/dist/hash.js.map +1 -1
- package/dist/hsml-app.d.ts +8 -8
- package/dist/hsml-app.js +44 -37
- package/dist/hsml-app.js.map +1 -1
- package/package.json +1 -1
- package/src/hash.ts +4 -5
- package/src/hsml-app.ts +92 -67
- package/dist/browser-esmodule/google-analytics.js +0 -50
- package/dist/browser-esmodule/google-analytics.js.map +0 -1
- package/dist/browser-umd/google-analytics.js +0 -2
- package/dist/browser-umd/google-analytics.js.map +0 -1
- package/dist/demo/hash_demo.1cbbc47a.js.map +0 -1
- package/dist/demo/hash_demo.80f80384.js.map +0 -1
- package/dist/demo/hsml-appel_demo.1da052b6.js +0 -2
- package/dist/demo/hsml-appel_demo.1da052b6.js.map +0 -1
- package/dist/demo/hsml-appel_demo.7fcc74a6.js +0 -2
- package/dist/demo/hsml-appel_demo.7fcc74a6.js.map +0 -1
- package/dist/demo/hsml-appi_demo.3d3d0e4e.js +0 -2
- package/dist/demo/hsml-appi_demo.3d3d0e4e.js.map +0 -1
- package/dist/demo/hsml-appi_demo.eac28520.js +0 -2
- package/dist/demo/hsml-appi_demo.eac28520.js.map +0 -1
- package/dist/google-analytics.d.ts +0 -21
- package/dist/google-analytics.js +0 -63
- package/dist/google-analytics.js.map +0 -1
- 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
|
-
}
|
package/dist/google-analytics.js
DELETED
|
@@ -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"}
|
package/src/google-analytics.ts
DELETED
|
@@ -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");
|