peryl 1.5.2 → 1.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -16
- package/demo/hsml-app-form-validation_demo.ts +22 -23
- package/demo/hsml-app-form_demo.ts +24 -20
- package/demo/hsml-app-test_demo.ts +35 -36
- package/demo/hsml-app-tictactoe_demo.ts +16 -15
- package/demo/hsml-app_demo.ts +20 -12
- package/demo/hsml-appel_demo.html +7 -0
- package/demo/hsml-appel_demo.ts +33 -25
- package/demo/hsml-appi_demo.ts +9 -9
- package/demo/hsml_demo.ts +27 -22
- package/demo/js/hsml-app-js-happi_demo.html +16 -8
- package/demo/js/hsml-app-js_demo.html +15 -15
- package/dist/browser-esmodule/encode.js.map +1 -1
- package/dist/browser-esmodule/hsml-app.js +67 -73
- package/dist/browser-esmodule/hsml-app.js.map +1 -1
- package/dist/browser-esmodule/hsml-convert.js.map +1 -1
- package/dist/browser-esmodule/hsml-dom.js +3 -3
- package/dist/browser-esmodule/hsml-dom.js.map +1 -1
- package/dist/browser-esmodule/hsml-h.js.map +1 -1
- package/dist/browser-esmodule/hsml-html.js +2 -2
- package/dist/browser-esmodule/hsml-html.js.map +1 -1
- package/dist/browser-esmodule/hsml-idom.js +5 -5
- package/dist/browser-esmodule/hsml-idom.js.map +1 -1
- package/dist/browser-esmodule/hsml.js.map +1 -1
- package/dist/browser-esmodule/http.js.map +1 -1
- package/dist/browser-esmodule/index.js +71 -77
- package/dist/browser-esmodule/index.js.map +1 -1
- package/dist/browser-esmodule/router.js.map +1 -1
- package/dist/browser-umd/encode.js +1 -1
- package/dist/browser-umd/encode.js.map +1 -1
- package/dist/browser-umd/hsml-app.js +1 -1
- package/dist/browser-umd/hsml-app.js.map +1 -1
- package/dist/browser-umd/hsml-convert.js.map +1 -1
- package/dist/browser-umd/hsml-dom.js +1 -1
- package/dist/browser-umd/hsml-dom.js.map +1 -1
- package/dist/browser-umd/hsml-h.js.map +1 -1
- package/dist/browser-umd/hsml-html.js +1 -1
- package/dist/browser-umd/hsml-html.js.map +1 -1
- package/dist/browser-umd/hsml-idom.js +1 -1
- package/dist/browser-umd/hsml-idom.js.map +1 -1
- package/dist/browser-umd/hsml.js.map +1 -1
- package/dist/browser-umd/http.js +1 -1
- package/dist/browser-umd/http.js.map +1 -1
- package/dist/browser-umd/index.js +1 -1
- package/dist/browser-umd/index.js.map +1 -1
- package/dist/browser-umd/router.js +1 -1
- package/dist/browser-umd/router.js.map +1 -1
- package/dist/browser-umd/validators-moment.js +1 -1
- package/dist/browser-umd/validators-moment.js.map +1 -1
- package/dist/browser-umd/validators-numeral.js.map +1 -1
- package/dist/demo/encode_demo.ce182166.js.map +1 -1
- package/dist/demo/encode_demo.f40a44eb.js.map +1 -1
- package/dist/demo/hsml-app-form-validation_demo.a9e2c583.js +2 -0
- package/dist/demo/hsml-app-form-validation_demo.a9e2c583.js.map +1 -0
- package/dist/demo/hsml-app-form-validation_demo.bb392ab0.js +2 -0
- package/dist/demo/hsml-app-form-validation_demo.bb392ab0.js.map +1 -0
- package/dist/demo/hsml-app-form-validation_demo.c6856b02.js +2 -0
- package/dist/demo/hsml-app-form-validation_demo.c6856b02.js.map +1 -0
- package/dist/demo/hsml-app-form-validation_demo.fdcc0b2d.js +2 -0
- package/dist/demo/hsml-app-form-validation_demo.fdcc0b2d.js.map +1 -0
- package/dist/demo/hsml-app-form-validation_demo.html +1 -1
- package/dist/demo/hsml-app-form_demo.e36ef1e9.js +2 -0
- package/dist/demo/hsml-app-form_demo.e36ef1e9.js.map +1 -0
- package/dist/demo/hsml-app-form_demo.fd22dfcf.js +2 -0
- package/dist/demo/hsml-app-form_demo.fd22dfcf.js.map +1 -0
- package/dist/demo/hsml-app-form_demo.html +1 -1
- package/dist/demo/hsml-app-test_demo.ba5f166c.js +2 -0
- package/dist/demo/hsml-app-test_demo.ba5f166c.js.map +1 -0
- package/dist/demo/hsml-app-test_demo.e8b5e4b2.js +2 -0
- package/dist/demo/hsml-app-test_demo.e8b5e4b2.js.map +1 -0
- package/dist/demo/hsml-app-test_demo.html +1 -1
- package/dist/demo/hsml-app-tictactoe_demo.03d8363f.js +2 -0
- package/dist/demo/hsml-app-tictactoe_demo.03d8363f.js.map +1 -0
- package/dist/demo/hsml-app-tictactoe_demo.399f8e69.js +2 -0
- package/dist/demo/hsml-app-tictactoe_demo.399f8e69.js.map +1 -0
- package/dist/demo/hsml-app-tictactoe_demo.html +1 -1
- package/dist/demo/hsml-app_demo.44aa1072.js +2 -0
- package/dist/demo/hsml-app_demo.44aa1072.js.map +1 -0
- package/dist/demo/hsml-app_demo.70ef3e7a.js +2 -0
- package/dist/demo/hsml-app_demo.70ef3e7a.js.map +1 -0
- package/dist/demo/hsml-app_demo.html +1 -1
- package/dist/demo/hsml-appel_demo.2a9f7f3f.js +2 -0
- package/dist/demo/hsml-appel_demo.2a9f7f3f.js.map +1 -0
- package/dist/demo/hsml-appel_demo.bea7849a.js +2 -0
- package/dist/demo/hsml-appel_demo.bea7849a.js.map +1 -0
- package/dist/demo/hsml-appel_demo.html +1 -1
- package/dist/demo/hsml-appi_demo.3dc5de90.js +2 -0
- package/dist/demo/hsml-appi_demo.3dc5de90.js.map +1 -0
- package/dist/demo/hsml-appi_demo.bfc7056a.js +2 -0
- package/dist/demo/hsml-appi_demo.bfc7056a.js.map +1 -0
- package/dist/demo/hsml-appi_demo.html +1 -1
- package/dist/demo/hsml-convert_demo.0ea1fa3b.js.map +1 -1
- package/dist/demo/hsml-convert_demo.63e3e7b5.js.map +1 -1
- package/dist/demo/{hsml_demo.ff950ba1.js → hsml_demo.a248689a.js} +2 -2
- package/dist/demo/hsml_demo.a248689a.js.map +1 -0
- package/dist/demo/hsml_demo.eb3b08be.js +2 -0
- package/dist/demo/hsml_demo.eb3b08be.js.map +1 -0
- package/dist/demo/hsml_demo.html +1 -1
- package/dist/demo/http_demo.3e7da3d8.js.map +1 -1
- package/dist/demo/http_demo.8e435f23.js.map +1 -1
- package/dist/demo/i18n_demo.html +1 -1
- package/dist/demo/router_demo.3cfa03aa.js.map +1 -1
- package/dist/demo/router_demo.89ab1681.js.map +1 -1
- package/dist/demo/{validators_demo.252e13a6.js → validators_demo.90ff6001.js} +2 -2
- package/dist/demo/validators_demo.90ff6001.js.map +1 -0
- package/dist/demo/{validators_demo.66893723.js → validators_demo.ef5b2dea.js} +2 -2
- package/dist/demo/validators_demo.ef5b2dea.js.map +1 -0
- package/dist/demo/validators_demo.html +1 -1
- package/dist/encode.js +1 -1
- package/dist/encode.js.map +1 -1
- package/dist/hsml-app.d.ts +38 -37
- package/dist/hsml-app.js +60 -62
- package/dist/hsml-app.js.map +1 -1
- package/dist/hsml-convert.d.ts +3 -3
- package/dist/hsml-convert.js.map +1 -1
- package/dist/hsml-dom.d.ts +2 -2
- package/dist/hsml-dom.js +3 -3
- package/dist/hsml-dom.js.map +1 -1
- package/dist/hsml-h.d.ts +8 -8
- package/dist/hsml-h.js.map +1 -1
- package/dist/hsml-html.d.ts +4 -4
- package/dist/hsml-html.js +2 -2
- package/dist/hsml-html.js.map +1 -1
- package/dist/hsml-idom.d.ts +2 -2
- package/dist/hsml-idom.js +5 -5
- package/dist/hsml-idom.js.map +1 -1
- package/dist/hsml.d.ts +26 -27
- package/dist/hsml.js.map +1 -1
- package/dist/http.js +1 -1
- package/dist/http.js.map +1 -1
- package/dist/router.js +1 -1
- package/dist/router.js.map +1 -1
- package/package.json +8 -8
- package/src/hsml-app.ts +209 -144
- package/src/hsml-convert.ts +8 -8
- package/src/hsml-dom.ts +18 -18
- package/src/hsml-h.ts +10 -10
- package/src/hsml-html.ts +19 -19
- package/src/hsml-idom.ts +25 -25
- package/src/hsml.ts +46 -143
- package/demo/hsml-appc_demo.html +0 -16
- package/demo/hsml-appc_demo.ts +0 -49
- package/dist/demo/hsml-app-form-validation_demo.0b03b743.js +0 -2
- package/dist/demo/hsml-app-form-validation_demo.0b03b743.js.map +0 -1
- package/dist/demo/hsml-app-form-validation_demo.b3a5c810.js +0 -2
- package/dist/demo/hsml-app-form-validation_demo.b3a5c810.js.map +0 -1
- package/dist/demo/hsml-app-form-validation_demo.d3925067.js +0 -2
- package/dist/demo/hsml-app-form-validation_demo.d3925067.js.map +0 -1
- package/dist/demo/hsml-app-form-validation_demo.f757d763.js +0 -2
- package/dist/demo/hsml-app-form-validation_demo.f757d763.js.map +0 -1
- package/dist/demo/hsml-app-form_demo.007ffcaa.js +0 -2
- package/dist/demo/hsml-app-form_demo.007ffcaa.js.map +0 -1
- package/dist/demo/hsml-app-form_demo.a034239d.js +0 -2
- package/dist/demo/hsml-app-form_demo.a034239d.js.map +0 -1
- package/dist/demo/hsml-app-test_demo.35c14dc9.js +0 -2
- package/dist/demo/hsml-app-test_demo.35c14dc9.js.map +0 -1
- package/dist/demo/hsml-app-test_demo.3c7e16ae.js +0 -2
- package/dist/demo/hsml-app-test_demo.3c7e16ae.js.map +0 -1
- package/dist/demo/hsml-app-tictactoe_demo.5f4861c1.js +0 -2
- package/dist/demo/hsml-app-tictactoe_demo.5f4861c1.js.map +0 -1
- package/dist/demo/hsml-app-tictactoe_demo.7deeabad.js +0 -2
- package/dist/demo/hsml-app-tictactoe_demo.7deeabad.js.map +0 -1
- package/dist/demo/hsml-app_demo.87d83c29.js +0 -2
- package/dist/demo/hsml-app_demo.87d83c29.js.map +0 -1
- package/dist/demo/hsml-app_demo.941a13a6.js +0 -2
- package/dist/demo/hsml-app_demo.941a13a6.js.map +0 -1
- package/dist/demo/hsml-appc_demo.0234ff15.js +0 -2
- package/dist/demo/hsml-appc_demo.0234ff15.js.map +0 -1
- package/dist/demo/hsml-appc_demo.f5783031.js +0 -2
- package/dist/demo/hsml-appc_demo.f5783031.js.map +0 -1
- package/dist/demo/hsml-appc_demo.html +0 -1
- package/dist/demo/hsml-appel_demo.0e8a4d4c.js +0 -2
- package/dist/demo/hsml-appel_demo.0e8a4d4c.js.map +0 -1
- package/dist/demo/hsml-appel_demo.1a5c2c26.js +0 -2
- package/dist/demo/hsml-appel_demo.1a5c2c26.js.map +0 -1
- package/dist/demo/hsml-appi_demo.2c3fb511.js +0 -2
- package/dist/demo/hsml-appi_demo.2c3fb511.js.map +0 -1
- package/dist/demo/hsml-appi_demo.427fdebd.js +0 -2
- package/dist/demo/hsml-appi_demo.427fdebd.js.map +0 -1
- package/dist/demo/hsml_demo.33f28c29.js +0 -2
- package/dist/demo/hsml_demo.33f28c29.js.map +0 -1
- package/dist/demo/hsml_demo.ff950ba1.js.map +0 -1
- package/dist/demo/validators_demo.252e13a6.js.map +0 -1
- package/dist/demo/validators_demo.66893723.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"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","sources":["src/hsml-app.ts","demo/hsml-app-test_demo.ts"],"sourcesContent":["import { HAttrOnData, HAttrOnDataFnc, HElement, HElements, HHandlerCtx } from \"./hsml\";\nimport { hsmls2idomPatch } from \"./hsml-idom\";\n\nconst log = console.log;\nconst error = console.error;\nconst warn = console.warn;\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 HAppActionType =\n | \"init\"\n | \"mount\"\n | \"umount\"\n | \"action\"\n | \"elementAttr\";\n\nexport enum HAppActions {\n init = \"init\",\n mount = \"mount\",\n umount = \"umount\",\n action = \"action\",\n elementAttr = \"elementAttr\"\n}\n\nexport interface HAction<HActionType extends string> {\n type: HActionType | HAppActionType | HAppActions;\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>,\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 = \"HApp action:\";\nconst msgDispatch = \"HApp dispatch:\";\nconst msgRender = \"HApp render:\";\nconst msgUpdate = \"HApp update:\";\n\nexport function happ<State, HActionType extends string>(\n state: HState<State>,\n view: HView<State, HActionType>,\n dispatcher: HDispatcher<State, HActionType>,\n element: Element | string | null = document.body\n) {\n return new HApp<State, HActionType>(state, view, dispatcher, element);\n}\n\n// HAppI\n\nexport type Class<T = object> = new (...args: any[]) => T;\n\nexport interface HAppI<State, HActionType extends string> {\n state(): State;\n view(state: State): HElements<HActionType>;\n dispatcher(\n // this: HApp<State, HActionType>,\n action: HAction<HActionType>,\n state: State,\n dispatch: HDispatch<HActionType>\n ): Promise<void>;\n}\n\nexport function happi<State, HActionType extends string>(\n hAppI: Class<HAppI<State, HActionType>>,\n element: Element | string | null = document.body\n) {\n const hapi = new hAppI();\n return new HApp<State, HActionType>(\n hapi.state,\n hapi.view,\n hapi.dispatcher,\n element\n );\n}\n\n// HAppEl\n\nexport function happel<State, HActionType extends string>(\n elementName: string,\n elementAttrs: string[],\n state: HState<State>,\n view: HView<State, HActionType>,\n dispatcher: HDispatcher<State, HActionType>\n): void {\n customElements.define(\n elementName,\n class HAppElement extends HTMLElement {\n static get observedAttributes() {\n return elementAttrs;\n }\n\n private _happel: HApp<State, HActionType>;\n\n constructor() {\n super();\n this._happel = new HApp<State, HActionType>(\n state,\n view,\n dispatcher\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(\"elementAttr\", {\n attrName,\n oldVal,\n newVal,\n });\n }\n }\n );\n}\n\nconst HAPP = \"happ\";\n\nexport class HApp<State, HActionType extends string> implements HHandlerCtx<HActionType> {\n static debug = false;\n\n readonly state: State;\n readonly view: HView<State, HActionType>;\n readonly dispatcher: HDispatcher<State, HActionType>;\n\n readonly customElement?: HTMLElement; // happ custom html element\n\n readonly dom?: HTMLElement;\n readonly refs: { [key: string]: HTMLElement } = {};\n\n private _updateSched?: number;\n\n // private _onDispatch?: HDispatcher<State>;\n\n private _windowEventListener?: (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 = document.body\n ) {\n this.state = state();\n this.view = view;\n this.dispatcher = dispatcher ?? (async (a) => log(msgAction, a.type, a.data));\n this._dispatchAction(\"init\", this).then(() => this.mount(element));\n }\n\n dispatch: HDispatch<HActionType> = async (\n type: HActionType | HAppActionType,\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 | HAppActionType,\n data?: any,\n event?: Event,\n scope?: HDispatchScope\n ): Promise<void> {\n if (HApp.debug) {\n log(msgAction, { type, data, event });\n const t0 = performance.now();\n await this._dispatch(type, data, event, scope);\n const t1 = performance.now();\n log(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 | HAppActionType,\n data: any,\n event?: Event,\n scope?: HDispatchScope\n ) {\n try {\n await this.dispatcher(\n { type: type as HActionType, data, event },\n this.state,\n this.dispatch\n );\n this.update();\n scope === \"element\" && this._dispatchElement(type, data);\n scope === \"window\" && this._dispatchWindow(type, data);\n } catch (e) {\n error(msgDispatch, e);\n }\n }\n\n private _dispatchElement: HDispatch<HActionType> = async (\n type: HActionType | HAppActionType,\n data?: any\n ): Promise<void> => {\n this.customElement && elementDispatchCustomEvent(this.customElement, \"action\", { type, data });\n !this.customElement && this.dom && elementDispatchCustomEvent(this.dom, \"action\", { type, data });\n // this.customElement && elementDispatchCustomEvent(this.customElement, type, data);\n // !this.customElement && this.dom && elementDispatchCustomEvent(this.dom, type, data);\n // this._onDispatch?.({ type, data, event }, this.state, this.dispatch);\n }\n\n private _dispatchWindow: HDispatch<HActionType> = async (\n type: HActionType | HAppActionType,\n data?: any): Promise<void> => {\n window.dispatchEvent(new CustomEvent(\"action\", { detail: { type, data } }));\n }\n\n windowDispatchOn() {\n if (!this._windowEventListener) {\n this._windowEventListener = (event: Event) => {\n const action = (event as CustomEvent).detail as HAction<HActionType>;\n this._dispatchAction(action.type, action.data);\n };\n window.addEventListener(\"action\", this._windowEventListener);\n } else {\n warn(\"windowEventListener olready setted\");\n }\n }\n\n windowDispatchOff() {\n if (this._windowEventListener) {\n window.removeEventListener(\"action\", this._windowEventListener);\n }\n }\n\n render = (): HElements<HActionType> => {\n if (HApp.debug) {\n const t0 = performance.now();\n let hsmls;\n try {\n hsmls = this.view(this.state);\n } catch (e) {\n error(msgRender, e);\n }\n const t1 = performance.now();\n log(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 error(msgRender, e);\n }\n return hsmls ?? [];\n }\n }\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);\n }\n }\n this._dispatchAction(actionType, data, event);\n }\n\n mount = (e: Element | string | null = document.body): this => {\n const el = (typeof e === \"string\")\n ? document.getElementById(e) ?? document.body\n : e ?? document.body;\n if ((el as any)[HAPP]) {\n const a = (el as any)[HAPP] as HApp<State, HActionType>;\n a.umount();\n }\n if (!this.dom) {\n (this as any).dom = el;\n (el as any)[HAPP] = this;\n const hsmls = (this as any).render();\n updateDom<HActionType>(el, hsmls, this);\n this._dispatchAction(\"mount\", this.dom);\n }\n return this;\n }\n\n umount = (): this => {\n if (this.dom) {\n this._dispatchAction(\"umount\", this.dom);\n if (this.dom.hasAttribute(HAPP)) {\n this.dom.removeAttribute(HAPP);\n }\n const aNodes = this.dom.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.dom.firstChild /*.hasChildNodes()*/) {\n this.dom.removeChild(this.dom.firstChild);\n }\n delete (this.dom as any).happ;\n (this as any).dom = undefined;\n }\n return this;\n }\n\n update = (): this => {\n if (this.dom && !this._updateSched) {\n this._updateSched = schedule(() => {\n if (this.dom) {\n const hsmls = this.render();\n updateDom<HActionType>(this.dom, hsmls, this);\n }\n this._updateSched = undefined;\n });\n }\n return this;\n }\n\n toHsml = (): HElement<HActionType> => {\n if (this.dom) {\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.dom) {\n (this as any).dom = e;\n (e as any).happ = this;\n this._dispatchAction(\"mount\", this.dom);\n }\n });\n return [\"div\", hsmls];\n }\n\n toHtml = (): string => {\n return this.dom ? this.dom.outerHTML : \"\";\n }\n\n}\n\nfunction updateDom<HActionType extends string>(\n el: Element,\n hsml: HElements<HActionType>,\n ctx: HHandlerCtx<HActionType>\n): void {\n if (HApp.debug) {\n const t0 = performance.now();\n hsmls2idomPatch(el, hsml, ctx);\n const t1 = performance.now();\n log(msgUpdate, `${t1 - t0} ms`, el);\n } else {\n hsmls2idomPatch(el, hsml, ctx);\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\nfunction formData(e: Event): { [k: string]: string | number | boolean | null | Array<string | null> } | string | number | boolean | null | Array<string | null> {\n const el = e.target as HTMLElement;\n switch (el.nodeName) {\n case \"FORM\":\n (e as Event).preventDefault();\n const els = (el as HTMLFormElement).elements;\n const data = {} as { [k: string]: string | null | Array<string | null> };\n for (let i = 0; i < els.length; i++) {\n const d = formInputData(els[i]);\n if (typeof d === \"object\") {\n const names = Object.keys(d as object);\n if (names.length) {\n const name = names[0];\n const value = (d as any)[name];\n if (data[name] === undefined) {\n data[name] = value;\n } else if (typeof data[name] === \"string\" || data[name] instanceof String) {\n if (value instanceof Array) {\n data[name] = [data[name] as string, ...value];\n } else {\n data[name] = [data[name] as string, value as string];\n }\n } else if (data[name] instanceof Array) {\n if (value instanceof Array) {\n data[name] = (data[name] as Array<string | null>).concat(value);\n } else {\n (data[name] as Array<string | null>).push(value);\n }\n } else {\n if (value instanceof Array) {\n data[name] = [data[name] as string, ...value];\n } else {\n data[name] = [data[name] as string, value];\n }\n }\n if (data[name] instanceof Array) {\n data[name] = (data[name] as Array<string | null>)\n .filter(d => d !== null);\n if ((els[i] as HTMLInputElement).type === \"radio\") {\n data[name] = (data[name] as Array<string | null>).length\n ? (data[name] as Array<string | null>)[0]\n : null;\n }\n }\n }\n }\n }\n return data;\n default:\n return formInputData(el);\n }\n}\n\nfunction formInputData(el: Element): { [k: string]: string | number | boolean | null | Array<string | null> } | string | number | boolean | null | Array<string | null> {\n let data: { [k: string]: string | number | boolean | null | Array<string | null> } | string | number | boolean | null | Array<string | null> = null;\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 \"number\":\n case \"search\":\n case \"url\":\n case \"tel\":\n case \"color\":\n case \"date\":\n case \"datetime-local\":\n case \"month\":\n case \"range\":\n case \"time\":\n case \"week\":\n case \"submit\":\n case \"button\":\n if (iel.name) {\n data = { [iel.name]: iel.value };\n } else {\n data = iel.value;\n }\n break;\n case \"radio\":\n if (iel.name) {\n data = { [iel.name]: iel.checked ? iel.value : null };\n } else {\n data = iel.checked ? iel.value : null;\n }\n break;\n case \"checkbox\":\n if (iel.value === \"on\") { // value not set in element\n if (iel.name) {\n data = { [iel.name]: iel.checked };\n } else {\n data = iel.checked;\n }\n } else {\n if (iel.name) {\n data = { [iel.name]: iel.checked\n ? String(iel.value)\n : null };\n } else {\n data = iel.checked\n ? String(iel.value)\n : null;\n }\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 if (sel.name) {\n data = { [sel.name]: values };\n } else {\n data = values;\n }\n } else {\n if (sel.name) {\n data = { [sel.name]: sel.value };\n } else {\n data = sel.value;\n }\n }\n break;\n case \"TEXTAREA\":\n const tel = el as HTMLTextAreaElement;\n if (tel.name) {\n data = { [tel.name]: tel.value };\n } else {\n data = tel.value;\n }\n break;\n case \"BUTTON\":\n const bel = el as HTMLButtonElement;\n if (bel.name) {\n data = { [bel.name]: bel.value };\n } else {\n data = bel.value;\n }\n break;\n }\n return data;\n}\n","import { HElement } from \"../src/hsml\";\nimport { HApp, HAppActions, HDispatcher, HState, HView, HView1, happ } from \"../src/hsml-app\";\n\ninterface CounterState {\n count: number;\n}\n\nenum CounterActions {\n dec = \"counter-dec\",\n inc = \"counter-inc\"\n}\n\nconst counterView: HView1<CounterState, CounterActions> = (state) => {\n return [\"div~reference\", [\n [\"h2\", [\"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 (this: HApp<CounterState, CounterActions>, 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.mount:\n this.windowDispatchOn();\n break;\n case HAppActions.umount:\n this.windowDispatchOff();\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 break;\n case CounterActions.dec:\n state.count = state.count - action.data as number;\n break;\n }\n};\n\ninterface State {\n title: string;\n counter: CounterState;\n x?: boolean | Boolean;\n}\n\nenum Actions {\n title = \"title\",\n clear = \"clear\",\n formSubmit = \"formSubmit\",\n formChange = \"formChange\",\n xXx = \"xXx\",\n x = \"x\"\n}\n\nconst state: HState<State> = function () {\n return {\n title: \"Title\",\n counter: {\n count: 77\n }\n };\n};\n\nconst view: HView<State, Actions | CounterActions> = function (state) {\n return [\n [\"h2\", [state.title]],\n [\"p\", [\n \"Title: \",\n [\"input\",\n {\n type: \"text\",\n // name: \"title\",\n value: new String(state.title),\n on: [\"input\", Actions.title]\n }\n ], \" \",\n [\"button.w3-button.w3-blue\",\n {\n type: \"button\",\n on: [\"click\", Actions.clear]\n },\n [\"Clear title\"]\n ]\n ]],\n counterView(state.counter),\n [\"h2\", [\"Form\"]],\n [\"form\",\n {\n on: [\n [\"submit\", Actions.formSubmit],\n [\"change\", Actions.formChange]\n ]\n },\n [\n \"xy \",\n [\"input\",\n {\n type: \"text\",\n name: \"xy\",\n value: \"x\"\n }\n ],\n [\"input\",\n {\n type: \"text\",\n name: \"xy\",\n value: \"y\"\n }\n ],\n [\"br\"],\n \"a \",\n [\"input\", {type: \"checkbox\", name: \"a\"}],\n [\"br\"],\n \"b \",\n [\"input\", {type: \"checkbox\", name: \"b\", value: \"b\"}],\n [\"br\"],\n \"c \",\n [\"input\", {type: \"checkbox\", name: \"c\"}],\n [\"input\", {type: \"checkbox\", name: \"c\"}],\n [\"br\"],\n \"d \",\n [\"input\", {type: \"checkbox\", name: \"d\", value: \"d1\"}],\n [\"input\", {type: \"checkbox\", name: \"d\", value: \"d2\"}],\n [\"br\"],\n \"r \",\n [\"input\", {type: \"radio\", name: \"r\", value: \"r1\"}],\n [\"input\", {type: \"radio\", name: \"r\", value: \"r2\"}],\n [\"br\"],\n \"s \",\n [\"select\", { name: \"s\" },\n [\"s1\", \"s2\", \"s3\"]\n .map<HElement<Actions>>(l => [\"option\", { value: l }, [l]])\n ],\n [\"br\"],\n \"sm \",\n [\"select\", { name: \"sm\", multiple: true },\n [\"sm1\", \"sm2\", \"sm3\"]\n .map<HElement<Actions>>(l => [\"option\", { value: l }, [l]])\n ],\n [\"br\"],\n [\"textarea\", { name: \"ta\" },\n \"text area\"\n ],\n [\"br\"],\n [\"button.w3-button.w3-blue\",\n [\"submit\"]\n ]\n ]\n ],\n [\"h2\", [\"Action event\"]],\n [\"p\", [\n [\"button\", { on: [\"click\", Actions.xXx] }, [\"xXx\"]]\n ]],\n [\"h2\", [\"Props update\"]],\n [\"input\", { type: \"checkbox\", name: \"x\", on: [\"change\", Actions.x] }],\n [\"input\", { type: \"checkbox\", checked: state.x }],\n [\"input\", { type: \"radio\", name: \"y\", checked: state.x }],\n [\"input\", { type: \"radio\", name: \"y\", checked: !state.x }],\n [\"input\", { type: \"button\", value: \"x\", disabled: state.x }]\n ];\n};\n\nconst dispatcher: HDispatcher<State, Actions | CounterActions> = async function (this: HApp<State, Actions>, action, state, dispatch) {\n console.log(\"action:\", action);\n // console.log(\"state:\", state);\n // console.log(\"happ:\", this);\n\n counterDispatcher.call(this, action, state.counter, dispatch);\n\n switch (action.type) {\n case HAppActions.init:\n case HAppActions.mount:\n case HAppActions.umount:\n break;\n case Actions.title:\n state.title = action.data;\n break;\n case Actions.clear:\n state.title = \"\";\n break;\n case Actions.formSubmit:\n console.log(\"FormSubmit:\", JSON.stringify(action.data));\n const fe = action.event!.target as HTMLFormElement;\n const fd = new FormData(fe);\n console.log(\"FormData:\", JSON.stringify([...fd.entries()]));\n break;\n case Actions.formChange:\n console.log(\"FormChange:\", JSON.stringify(action.data));\n break;\n case Actions.xXx:\n dispatch(CounterActions.dec, 1, \"window\");\n break;\n case Actions.x:\n console.log(\"data.x\", typeof action.data.x, action.data.x);\n // state.x = new Boolean(action.data.x === \"true\");\n // state.x = action.data.x === \"true\";\n state.x = new Boolean(action.data.x);\n // state.x = action.data.x;\n break;\n // default:\n // console.warn(\"action unhandled:\", action);\n }\n};\n\n// HApp.debug = true;\nHApp.debug = window.location.hostname === \"localhost\";\n\nconst app = happ<State, Actions | CounterActions>(state, view, dispatcher)\n // .onDispatch(async (action, state, dispatch) => console.log(\"onDspatch:\", action, state))\n .mount(document.getElementById(\"app\"));\n\n(self as any).app = app;\n\n\n// const html = app.toHtml();\n// console.log(html);\n"],"names":["$a85519cc1b20a4af$var$log","console","log","$a85519cc1b20a4af$var$error","error","$a85519cc1b20a4af$var$warn","warn","$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$msgUpdate","$a85519cc1b20a4af$export$eb8950696418f795","state","view","dispatcher","element","document","body","$a85519cc1b20a4af$export$8cfef5dc37c46888","$a85519cc1b20a4af$export$e905700d74a7763f","hAppI","hapi","$a85519cc1b20a4af$export$1cfc54b3834d3c50","elementName","elementAttrs","customElements","define","HTMLElement","observedAttributes","connectedCallback","this","attachShadow","mode","_happel","mount","shadowRoot","disconnectedCallback","umount","adoptedCallback","update","attributeChangedCallback","attrName","oldVal","newVal","dispatch","constructor","super","customElement","$a85519cc1b20a4af$var$HAPP","_dispatchAction","type","data","event","scope","debug","t0","performance","now","_dispatch","t1","_dispatchElement","_dispatchWindow","e","windowDispatchOn","_windowEventListener","action","detail","addEventListener","windowDispatchOff","removeEventListener","refs","$a85519cc1b20a4af$var$__awaiter","undefined","$a85519cc1b20a4af$var$elementDispatchCustomEvent","dom","dispatchEvent","CustomEvent","render","hsmls","actionCb","actionType","Function","el","target","nodeName","preventDefault","els","elements","i","length","d","$a85519cc1b20a4af$var$formInputData","names","Object","keys","name","value","String","Array","concat","push","filter","$a85519cc1b20a4af$var$formData","_a","getElementById","$a85519cc1b20a4af$var$updateDom","hasAttribute","removeAttribute","aNodes","querySelectorAll","a","happ","firstChild","removeChild","_updateSched","toHsml","skip","toHtml","outerHTML","then","hsml","ctx","$8IJ2T","hsmls2idomPatch","_b","call","iel","checked","sel","multiple","values","from","selectedOptions","map","o","tel","bel","$4d311c4ad8ed9451$var$CounterActions","CounterActions","$4d311c4ad8ed9451$var$counterView","count","on","dec","inc","$4d311c4ad8ed9451$var$counterDispatcher","$a85519cc1b20a4af$exports","$4d311c4ad8ed9451$var$Actions","Actions","HApp","location","hostname","$4d311c4ad8ed9451$var$app","title","counter","clear","formSubmit","formChange","l","xXx","x","disabled","init","JSON","stringify","fe","fd","FormData","entries","Boolean","self","app"],"version":3,"file":"hsml-app-test_demo.ba5f166c.js.map"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function t(t,e,n,i){Object.defineProperty(t,e,{get:n,set:i,enumerable:!0,configurable:!0})}var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},n={},i={},o=e.parcelRequirede31;null==o&&((o=function(t){if(t in n)return n[t].exports;if(t in i){var e=i[t];delete i[t];var o={id:t,exports:{}};return n[t]=o,e.call(o.exports,o,o.exports),o.exports}var a=new Error("Cannot find module '"+t+"'");throw a.code="MODULE_NOT_FOUND",a}).register=function(t,e){i[t]=e},e.parcelRequirede31=o);var a={};t(a,"HAppActions",(function(){return h}),(function(t){return h=t})),t(a,"HDispatchScopes",(function(){return p}),(function(t){return p=t})),t(a,"happ",(function(){return g}),(function(t){return g=t})),t(a,"HApp",(function(){return E}),(function(t){return E=t})),t(a,"happi",(function(){return k}),(function(t){return k=t})),t(a,"happel",(function(){return A}),(function(t){return A=t}));var c=o("hrCkK"),s=function(t,e,n,i){return new(n||(n=Promise))((function(o,a){function c(t){try{r(i.next(t))}catch(t){a(t)}}function s(t){try{r(i.throw(t))}catch(t){a(t)}}function r(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(c,s)}r((i=i.apply(t,e||[])).next())}))};const r=console.log,u=console.error,d=console.warn;var h,l,p,m;(l=h||(h={})).init="init",l.mount="mount",l.umount="umount",l.action="action",l.elementAttr="elementAttr",(m=p||(p={})).element="element",m.window="window";const f=window.requestAnimationFrame||function(t){window.setTimeout(t,1e3/60)},v=window.cancelAnimationFrame||function(t){window.clearTimeout(t)},w="HApp action:",b="HApp dispatch:",y="HApp render:",x="HApp update:";function g(t,e,n,i=document.body){return new E(t,e,n,i)}function k(t,e=document.body){const n=new t;return new E(n.state,n.view,n.dispatcher,e)}function A(t,e,n,i,o){customElements.define(t,class extends HTMLElement{static get observedAttributes(){return e}connectedCallback(){this.attachShadow({mode:"open"}),this._happel.mount(this.shadowRoot)}disconnectedCallback(){this._happel.umount()}adoptedCallback(){this._happel.update()}attributeChangedCallback(t,e,n){this._happel.dispatch("elementAttr",{attrName:t,oldVal:e,newVal:n})}constructor(){super(),this._happel=new E(n,i,o),this._happel.customElement=this}})}const _="happ";class E{_dispatchAction(t,e,n,i){return s(this,void 0,void 0,(function*(){if(E.debug){r(w,{type:t,data:e,event:n});const o=performance.now();yield this._dispatch(t,e,n,i);const a=performance.now();r(b,a-o+" ms",this.state)}else yield this._dispatch(t,e,n,i)}))}_dispatch(t,e,n,i){return s(this,void 0,void 0,(function*(){try{yield this.dispatcher({type:t,data:e,event:n},this.state,this.dispatch),this.update(),"element"===i&&this._dispatchElement(t,e),"window"===i&&this._dispatchWindow(t,e)}catch(t){u(b,t)}}))}windowDispatchOn(){this._windowEventListener?d("windowEventListener olready setted"):(this._windowEventListener=t=>{const e=t.detail;this._dispatchAction(e.type,e.data)},window.addEventListener("action",this._windowEventListener))}windowDispatchOff(){this._windowEventListener&&window.removeEventListener("action",this._windowEventListener)}constructor(t,e,n,i=document.body){this.refs={},this.dispatch=(t,e,n)=>s(this,void 0,void 0,(function*(){return this._dispatchAction(t,e,void 0,n)})),this._dispatchElement=(t,e)=>s(this,void 0,void 0,(function*(){this.customElement&&S(this.customElement,"action",{type:t,data:e}),!this.customElement&&this.dom&&S(this.dom,"action",{type:t,data:e})})),this._dispatchWindow=(t,e)=>s(this,void 0,void 0,(function*(){window.dispatchEvent(new CustomEvent("action",{detail:{type:t,data:e}}))})),this.render=()=>{if(E.debug){const t=performance.now();let e;try{e=this.view(this.state)}catch(t){u(y,t)}const n=performance.now();return r(y,n-t+" ms",e),null!=e?e:[]}{let t;try{t=this.view(this.state)}catch(t){u(y,t)}return null!=t?t:[]}},this.actionCb=(t,e,n)=>{void 0===(e=(null==e?void 0:e.constructor)===Function?e(n):e)&&n&&(e=n instanceof CustomEvent?n.detail:function(t){const e=t.target;if("FORM"===e.nodeName){t.preventDefault();const n=e.elements,i={};for(let t=0;t<n.length;t++){const e=H(n[t]);if("object"==typeof e){const o=Object.keys(e);if(o.length){const a=o[0],c=e[a];void 0===i[a]?i[a]=c:"string"==typeof i[a]||i[a]instanceof String?i[a]=c instanceof Array?[i[a],...c]:[i[a],c]:i[a]instanceof Array?c instanceof Array?i[a]=i[a].concat(c):i[a].push(c):i[a]=c instanceof Array?[i[a],...c]:[i[a],c],i[a]instanceof Array&&(i[a]=i[a].filter((t=>null!==t)),"radio"===n[t].type&&(i[a]=i[a].length?i[a][0]:null))}}}return i}return H(e)}(n)),this._dispatchAction(t,e,n)},this.mount=(t=document.body)=>{var e;const n="string"==typeof t?null!==(e=document.getElementById(t))&&void 0!==e?e:document.body:null!=t?t:document.body;if(n[_]){n[_].umount()}if(!this.dom){this.dom=n,n[_]=this;C(n,this.render(),this),this._dispatchAction("mount",this.dom)}return this},this.umount=()=>{if(this.dom){this._dispatchAction("umount",this.dom),this.dom.hasAttribute(_)&&this.dom.removeAttribute(_);const t=this.dom.querySelectorAll(`[${_}]`);for(let e=0;e<t.length;e++){const n=t[e].happ;null==n||n.umount()}for(;this.dom.firstChild;)this.dom.removeChild(this.dom.firstChild);delete this.dom.happ,this.dom=void 0}return this},this.update=()=>(this.dom&&!this._updateSched&&(this._updateSched=f((()=>{if(this.dom){const t=this.render();C(this.dom,t,this)}this._updateSched=void 0}))),this),this.toHsml=()=>{if(this.dom){if(!this._updateSched)return["div",{skip:!0}];v(this._updateSched),this._updateSched=void 0}const t=this.render();return t.push((t=>{this.dom||(this.dom=t,t.happ=this,this._dispatchAction("mount",this.dom))})),["div",t]},this.toHtml=()=>this.dom?this.dom.outerHTML:"",this.state=t(),this.view=e,this.dispatcher=null!=n?n:t=>s(this,void 0,void 0,(function*(){return r(w,t.type,t.data)})),this._dispatchAction("init",this).then((()=>this.mount(i)))}}function C(t,e,n){if(E.debug){const i=performance.now();(0,c.hsmls2idomPatch)(t,e,n);const o=performance.now();r(x,o-i+" ms",t)}else(0,c.hsmls2idomPatch)(t,e,n)}function S(t,e,n){var i,o;null==t||t.dispatchEvent(new CustomEvent(e,{detail:n})),null===(o=(i=t)[`on${e}`])||void 0===o||o.call(i,new CustomEvent(e,{detail:n}))}function H(t){let e=null;switch(t.nodeName){case"INPUT":const n=t;switch(n.type){case"text":case"hidden":case"password":case"email":case"number":case"search":case"url":case"tel":case"color":case"date":case"datetime-local":case"month":case"range":case"time":case"week":case"submit":case"button":e=n.name?{[n.name]:n.value}:n.value;break;case"radio":e=n.name?{[n.name]:n.checked?n.value:null}:n.checked?n.value:null;break;case"checkbox":e="on"===n.value?n.name?{[n.name]:n.checked}:n.checked:n.name?{[n.name]:n.checked?String(n.value):null}:n.checked?String(n.value):null}break;case"SELECT":const i=t;if(i.multiple){const t=Array.from(i.selectedOptions).map((t=>t.value));e=i.name?{[i.name]:t}:t}else e=i.name?{[i.name]:i.value}:i.value;break;case"TEXTAREA":const o=t;e=o.name?{[o.name]:o.value}:o.value;break;case"BUTTON":const a=t;e=a.name?{[a.name]:a.value}:a.value}return e}E.debug=!1;var T,O,L=function(t,e,n,i){return new(n||(n=Promise))((function(o,a){function c(t){try{r(i.next(t))}catch(t){a(t)}}function s(t){try{r(i.throw(t))}catch(t){a(t)}}function r(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(c,s)}r((i=i.apply(t,e||[])).next())}))};(O=T||(T={})).dec="counter-dec",O.inc="counter-inc";const D=t=>["div~reference",[["h2",["Counter"]],["p",[["em",["Count"]],": ",t.count," ",["button",{on:["click",T.dec,1]},["-"]],["button",{on:["click",T.inc,2]},["+"]]]]]],F=function(t,e,n){return L(this,void 0,void 0,(function*(){switch(console.log("action counter:",t),t.type){case a.HAppActions.mount:this.windowDispatchOn();break;case a.HAppActions.umount:this.windowDispatchOff();break;case T.inc:e.count=e.count+t.data,setTimeout((()=>n(T.dec,1)),1e3);break;case T.dec:e.count=e.count-t.data}}))};var N,P;(P=N||(N={})).title="title",P.clear="clear",P.formSubmit="formSubmit",P.formChange="formChange",P.xXx="xXx",P.x="x";a.HApp.debug="localhost"===window.location.hostname;const X=(0,a.happ)((function(){return{title:"Title",counter:{count:77}}}),(function(t){return[["h2",[t.title]],["p",["Title: ",["input",{type:"text",value:new String(t.title),on:["input",N.title]}]," ",["button.w3-button.w3-blue",{type:"button",on:["click",N.clear]},["Clear title"]]]],D(t.counter),["h2",["Form"]],["form",{on:[["submit",N.formSubmit],["change",N.formChange]]},["xy ",["input",{type:"text",name:"xy",value:"x"}],["input",{type:"text",name:"xy",value:"y"}],["br"],"a ",["input",{type:"checkbox",name:"a"}],["br"],"b ",["input",{type:"checkbox",name:"b",value:"b"}],["br"],"c ",["input",{type:"checkbox",name:"c"}],["input",{type:"checkbox",name:"c"}],["br"],"d ",["input",{type:"checkbox",name:"d",value:"d1"}],["input",{type:"checkbox",name:"d",value:"d2"}],["br"],"r ",["input",{type:"radio",name:"r",value:"r1"}],["input",{type:"radio",name:"r",value:"r2"}],["br"],"s ",["select",{name:"s"},["s1","s2","s3"].map((t=>["option",{value:t},[t]]))],["br"],"sm ",["select",{name:"sm",multiple:!0},["sm1","sm2","sm3"].map((t=>["option",{value:t},[t]]))],["br"],["textarea",{name:"ta"},"text area"],["br"],["button.w3-button.w3-blue",["submit"]]]],["h2",["Action event"]],["p",[["button",{on:["click",N.xXx]},["xXx"]]]],["h2",["Props update"]],["input",{type:"checkbox",name:"x",on:["change",N.x]}],["input",{type:"checkbox",checked:t.x}],["input",{type:"radio",name:"y",checked:t.x}],["input",{type:"radio",name:"y",checked:!t.x}],["input",{type:"button",value:"x",disabled:t.x}]]}),(function(t,e,n){return L(this,void 0,void 0,(function*(){switch(console.log("action:",t),F.call(this,t,e.counter,n),t.type){case a.HAppActions.init:case a.HAppActions.mount:case a.HAppActions.umount:break;case N.title:e.title=t.data;break;case N.clear:e.title="";break;case N.formSubmit:console.log("FormSubmit:",JSON.stringify(t.data));const i=t.event.target,o=new FormData(i);console.log("FormData:",JSON.stringify([...o.entries()]));break;case N.formChange:console.log("FormChange:",JSON.stringify(t.data));break;case N.xXx:n(T.dec,1,"window");break;case N.x:console.log("data.x",typeof t.data.x,t.data.x),e.x=new Boolean(t.data.x)}}))})).mount(document.getElementById("app"));self.app=X;
|
|
2
|
+
//# sourceMappingURL=hsml-app-test_demo.e8b5e4b2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"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","sources":["src/hsml-app.ts","demo/hsml-app-test_demo.ts"],"sourcesContent":["import { HAttrOnData, HAttrOnDataFnc, HElement, HElements, HHandlerCtx } from \"./hsml\";\nimport { hsmls2idomPatch } from \"./hsml-idom\";\n\nconst log = console.log;\nconst error = console.error;\nconst warn = console.warn;\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 HAppActionType =\n | \"init\"\n | \"mount\"\n | \"umount\"\n | \"action\"\n | \"elementAttr\";\n\nexport enum HAppActions {\n init = \"init\",\n mount = \"mount\",\n umount = \"umount\",\n action = \"action\",\n elementAttr = \"elementAttr\"\n}\n\nexport interface HAction<HActionType extends string> {\n type: HActionType | HAppActionType | HAppActions;\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>,\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 = \"HApp action:\";\nconst msgDispatch = \"HApp dispatch:\";\nconst msgRender = \"HApp render:\";\nconst msgUpdate = \"HApp update:\";\n\nexport function happ<State, HActionType extends string>(\n state: HState<State>,\n view: HView<State, HActionType>,\n dispatcher: HDispatcher<State, HActionType>,\n element: Element | string | null = document.body\n) {\n return new HApp<State, HActionType>(state, view, dispatcher, element);\n}\n\n// HAppI\n\nexport type Class<T = object> = new (...args: any[]) => T;\n\nexport interface HAppI<State, HActionType extends string> {\n state(): State;\n view(state: State): HElements<HActionType>;\n dispatcher(\n // this: HApp<State, HActionType>,\n action: HAction<HActionType>,\n state: State,\n dispatch: HDispatch<HActionType>\n ): Promise<void>;\n}\n\nexport function happi<State, HActionType extends string>(\n hAppI: Class<HAppI<State, HActionType>>,\n element: Element | string | null = document.body\n) {\n const hapi = new hAppI();\n return new HApp<State, HActionType>(\n hapi.state,\n hapi.view,\n hapi.dispatcher,\n element\n );\n}\n\n// HAppEl\n\nexport function happel<State, HActionType extends string>(\n elementName: string,\n elementAttrs: string[],\n state: HState<State>,\n view: HView<State, HActionType>,\n dispatcher: HDispatcher<State, HActionType>\n): void {\n customElements.define(\n elementName,\n class HAppElement extends HTMLElement {\n static get observedAttributes() {\n return elementAttrs;\n }\n\n private _happel: HApp<State, HActionType>;\n\n constructor() {\n super();\n this._happel = new HApp<State, HActionType>(\n state,\n view,\n dispatcher\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(\"elementAttr\", {\n attrName,\n oldVal,\n newVal,\n });\n }\n }\n );\n}\n\nconst HAPP = \"happ\";\n\nexport class HApp<State, HActionType extends string> implements HHandlerCtx<HActionType> {\n static debug = false;\n\n readonly state: State;\n readonly view: HView<State, HActionType>;\n readonly dispatcher: HDispatcher<State, HActionType>;\n\n readonly customElement?: HTMLElement; // happ custom html element\n\n readonly dom?: HTMLElement;\n readonly refs: { [key: string]: HTMLElement } = {};\n\n private _updateSched?: number;\n\n // private _onDispatch?: HDispatcher<State>;\n\n private _windowEventListener?: (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 = document.body\n ) {\n this.state = state();\n this.view = view;\n this.dispatcher = dispatcher ?? (async (a) => log(msgAction, a.type, a.data));\n this._dispatchAction(\"init\", this).then(() => this.mount(element));\n }\n\n dispatch: HDispatch<HActionType> = async (\n type: HActionType | HAppActionType,\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 | HAppActionType,\n data?: any,\n event?: Event,\n scope?: HDispatchScope\n ): Promise<void> {\n if (HApp.debug) {\n log(msgAction, { type, data, event });\n const t0 = performance.now();\n await this._dispatch(type, data, event, scope);\n const t1 = performance.now();\n log(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 | HAppActionType,\n data: any,\n event?: Event,\n scope?: HDispatchScope\n ) {\n try {\n await this.dispatcher(\n { type: type as HActionType, data, event },\n this.state,\n this.dispatch\n );\n this.update();\n scope === \"element\" && this._dispatchElement(type, data);\n scope === \"window\" && this._dispatchWindow(type, data);\n } catch (e) {\n error(msgDispatch, e);\n }\n }\n\n private _dispatchElement: HDispatch<HActionType> = async (\n type: HActionType | HAppActionType,\n data?: any\n ): Promise<void> => {\n this.customElement && elementDispatchCustomEvent(this.customElement, \"action\", { type, data });\n !this.customElement && this.dom && elementDispatchCustomEvent(this.dom, \"action\", { type, data });\n // this.customElement && elementDispatchCustomEvent(this.customElement, type, data);\n // !this.customElement && this.dom && elementDispatchCustomEvent(this.dom, type, data);\n // this._onDispatch?.({ type, data, event }, this.state, this.dispatch);\n }\n\n private _dispatchWindow: HDispatch<HActionType> = async (\n type: HActionType | HAppActionType,\n data?: any): Promise<void> => {\n window.dispatchEvent(new CustomEvent(\"action\", { detail: { type, data } }));\n }\n\n windowDispatchOn() {\n if (!this._windowEventListener) {\n this._windowEventListener = (event: Event) => {\n const action = (event as CustomEvent).detail as HAction<HActionType>;\n this._dispatchAction(action.type, action.data);\n };\n window.addEventListener(\"action\", this._windowEventListener);\n } else {\n warn(\"windowEventListener olready setted\");\n }\n }\n\n windowDispatchOff() {\n if (this._windowEventListener) {\n window.removeEventListener(\"action\", this._windowEventListener);\n }\n }\n\n render = (): HElements<HActionType> => {\n if (HApp.debug) {\n const t0 = performance.now();\n let hsmls;\n try {\n hsmls = this.view(this.state);\n } catch (e) {\n error(msgRender, e);\n }\n const t1 = performance.now();\n log(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 error(msgRender, e);\n }\n return hsmls ?? [];\n }\n }\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);\n }\n }\n this._dispatchAction(actionType, data, event);\n }\n\n mount = (e: Element | string | null = document.body): this => {\n const el = (typeof e === \"string\")\n ? document.getElementById(e) ?? document.body\n : e ?? document.body;\n if ((el as any)[HAPP]) {\n const a = (el as any)[HAPP] as HApp<State, HActionType>;\n a.umount();\n }\n if (!this.dom) {\n (this as any).dom = el;\n (el as any)[HAPP] = this;\n const hsmls = (this as any).render();\n updateDom<HActionType>(el, hsmls, this);\n this._dispatchAction(\"mount\", this.dom);\n }\n return this;\n }\n\n umount = (): this => {\n if (this.dom) {\n this._dispatchAction(\"umount\", this.dom);\n if (this.dom.hasAttribute(HAPP)) {\n this.dom.removeAttribute(HAPP);\n }\n const aNodes = this.dom.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.dom.firstChild /*.hasChildNodes()*/) {\n this.dom.removeChild(this.dom.firstChild);\n }\n delete (this.dom as any).happ;\n (this as any).dom = undefined;\n }\n return this;\n }\n\n update = (): this => {\n if (this.dom && !this._updateSched) {\n this._updateSched = schedule(() => {\n if (this.dom) {\n const hsmls = this.render();\n updateDom<HActionType>(this.dom, hsmls, this);\n }\n this._updateSched = undefined;\n });\n }\n return this;\n }\n\n toHsml = (): HElement<HActionType> => {\n if (this.dom) {\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.dom) {\n (this as any).dom = e;\n (e as any).happ = this;\n this._dispatchAction(\"mount\", this.dom);\n }\n });\n return [\"div\", hsmls];\n }\n\n toHtml = (): string => {\n return this.dom ? this.dom.outerHTML : \"\";\n }\n\n}\n\nfunction updateDom<HActionType extends string>(\n el: Element,\n hsml: HElements<HActionType>,\n ctx: HHandlerCtx<HActionType>\n): void {\n if (HApp.debug) {\n const t0 = performance.now();\n hsmls2idomPatch(el, hsml, ctx);\n const t1 = performance.now();\n log(msgUpdate, `${t1 - t0} ms`, el);\n } else {\n hsmls2idomPatch(el, hsml, ctx);\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\nfunction formData(e: Event): { [k: string]: string | number | boolean | null | Array<string | null> } | string | number | boolean | null | Array<string | null> {\n const el = e.target as HTMLElement;\n switch (el.nodeName) {\n case \"FORM\":\n (e as Event).preventDefault();\n const els = (el as HTMLFormElement).elements;\n const data = {} as { [k: string]: string | null | Array<string | null> };\n for (let i = 0; i < els.length; i++) {\n const d = formInputData(els[i]);\n if (typeof d === \"object\") {\n const names = Object.keys(d as object);\n if (names.length) {\n const name = names[0];\n const value = (d as any)[name];\n if (data[name] === undefined) {\n data[name] = value;\n } else if (typeof data[name] === \"string\" || data[name] instanceof String) {\n if (value instanceof Array) {\n data[name] = [data[name] as string, ...value];\n } else {\n data[name] = [data[name] as string, value as string];\n }\n } else if (data[name] instanceof Array) {\n if (value instanceof Array) {\n data[name] = (data[name] as Array<string | null>).concat(value);\n } else {\n (data[name] as Array<string | null>).push(value);\n }\n } else {\n if (value instanceof Array) {\n data[name] = [data[name] as string, ...value];\n } else {\n data[name] = [data[name] as string, value];\n }\n }\n if (data[name] instanceof Array) {\n data[name] = (data[name] as Array<string | null>)\n .filter(d => d !== null);\n if ((els[i] as HTMLInputElement).type === \"radio\") {\n data[name] = (data[name] as Array<string | null>).length\n ? (data[name] as Array<string | null>)[0]\n : null;\n }\n }\n }\n }\n }\n return data;\n default:\n return formInputData(el);\n }\n}\n\nfunction formInputData(el: Element): { [k: string]: string | number | boolean | null | Array<string | null> } | string | number | boolean | null | Array<string | null> {\n let data: { [k: string]: string | number | boolean | null | Array<string | null> } | string | number | boolean | null | Array<string | null> = null;\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 \"number\":\n case \"search\":\n case \"url\":\n case \"tel\":\n case \"color\":\n case \"date\":\n case \"datetime-local\":\n case \"month\":\n case \"range\":\n case \"time\":\n case \"week\":\n case \"submit\":\n case \"button\":\n if (iel.name) {\n data = { [iel.name]: iel.value };\n } else {\n data = iel.value;\n }\n break;\n case \"radio\":\n if (iel.name) {\n data = { [iel.name]: iel.checked ? iel.value : null };\n } else {\n data = iel.checked ? iel.value : null;\n }\n break;\n case \"checkbox\":\n if (iel.value === \"on\") { // value not set in element\n if (iel.name) {\n data = { [iel.name]: iel.checked };\n } else {\n data = iel.checked;\n }\n } else {\n if (iel.name) {\n data = { [iel.name]: iel.checked\n ? String(iel.value)\n : null };\n } else {\n data = iel.checked\n ? String(iel.value)\n : null;\n }\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 if (sel.name) {\n data = { [sel.name]: values };\n } else {\n data = values;\n }\n } else {\n if (sel.name) {\n data = { [sel.name]: sel.value };\n } else {\n data = sel.value;\n }\n }\n break;\n case \"TEXTAREA\":\n const tel = el as HTMLTextAreaElement;\n if (tel.name) {\n data = { [tel.name]: tel.value };\n } else {\n data = tel.value;\n }\n break;\n case \"BUTTON\":\n const bel = el as HTMLButtonElement;\n if (bel.name) {\n data = { [bel.name]: bel.value };\n } else {\n data = bel.value;\n }\n break;\n }\n return data;\n}\n","import { HElement } from \"../src/hsml\";\nimport { HApp, HAppActions, HDispatcher, HState, HView, HView1, happ } from \"../src/hsml-app\";\n\ninterface CounterState {\n count: number;\n}\n\nenum CounterActions {\n dec = \"counter-dec\",\n inc = \"counter-inc\"\n}\n\nconst counterView: HView1<CounterState, CounterActions> = (state) => {\n return [\"div~reference\", [\n [\"h2\", [\"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 (this: HApp<CounterState, CounterActions>, 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.mount:\n this.windowDispatchOn();\n break;\n case HAppActions.umount:\n this.windowDispatchOff();\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 break;\n case CounterActions.dec:\n state.count = state.count - action.data as number;\n break;\n }\n};\n\ninterface State {\n title: string;\n counter: CounterState;\n x?: boolean | Boolean;\n}\n\nenum Actions {\n title = \"title\",\n clear = \"clear\",\n formSubmit = \"formSubmit\",\n formChange = \"formChange\",\n xXx = \"xXx\",\n x = \"x\"\n}\n\nconst state: HState<State> = function () {\n return {\n title: \"Title\",\n counter: {\n count: 77\n }\n };\n};\n\nconst view: HView<State, Actions | CounterActions> = function (state) {\n return [\n [\"h2\", [state.title]],\n [\"p\", [\n \"Title: \",\n [\"input\",\n {\n type: \"text\",\n // name: \"title\",\n value: new String(state.title),\n on: [\"input\", Actions.title]\n }\n ], \" \",\n [\"button.w3-button.w3-blue\",\n {\n type: \"button\",\n on: [\"click\", Actions.clear]\n },\n [\"Clear title\"]\n ]\n ]],\n counterView(state.counter),\n [\"h2\", [\"Form\"]],\n [\"form\",\n {\n on: [\n [\"submit\", Actions.formSubmit],\n [\"change\", Actions.formChange]\n ]\n },\n [\n \"xy \",\n [\"input\",\n {\n type: \"text\",\n name: \"xy\",\n value: \"x\"\n }\n ],\n [\"input\",\n {\n type: \"text\",\n name: \"xy\",\n value: \"y\"\n }\n ],\n [\"br\"],\n \"a \",\n [\"input\", {type: \"checkbox\", name: \"a\"}],\n [\"br\"],\n \"b \",\n [\"input\", {type: \"checkbox\", name: \"b\", value: \"b\"}],\n [\"br\"],\n \"c \",\n [\"input\", {type: \"checkbox\", name: \"c\"}],\n [\"input\", {type: \"checkbox\", name: \"c\"}],\n [\"br\"],\n \"d \",\n [\"input\", {type: \"checkbox\", name: \"d\", value: \"d1\"}],\n [\"input\", {type: \"checkbox\", name: \"d\", value: \"d2\"}],\n [\"br\"],\n \"r \",\n [\"input\", {type: \"radio\", name: \"r\", value: \"r1\"}],\n [\"input\", {type: \"radio\", name: \"r\", value: \"r2\"}],\n [\"br\"],\n \"s \",\n [\"select\", { name: \"s\" },\n [\"s1\", \"s2\", \"s3\"]\n .map<HElement<Actions>>(l => [\"option\", { value: l }, [l]])\n ],\n [\"br\"],\n \"sm \",\n [\"select\", { name: \"sm\", multiple: true },\n [\"sm1\", \"sm2\", \"sm3\"]\n .map<HElement<Actions>>(l => [\"option\", { value: l }, [l]])\n ],\n [\"br\"],\n [\"textarea\", { name: \"ta\" },\n \"text area\"\n ],\n [\"br\"],\n [\"button.w3-button.w3-blue\",\n [\"submit\"]\n ]\n ]\n ],\n [\"h2\", [\"Action event\"]],\n [\"p\", [\n [\"button\", { on: [\"click\", Actions.xXx] }, [\"xXx\"]]\n ]],\n [\"h2\", [\"Props update\"]],\n [\"input\", { type: \"checkbox\", name: \"x\", on: [\"change\", Actions.x] }],\n [\"input\", { type: \"checkbox\", checked: state.x }],\n [\"input\", { type: \"radio\", name: \"y\", checked: state.x }],\n [\"input\", { type: \"radio\", name: \"y\", checked: !state.x }],\n [\"input\", { type: \"button\", value: \"x\", disabled: state.x }]\n ];\n};\n\nconst dispatcher: HDispatcher<State, Actions | CounterActions> = async function (this: HApp<State, Actions>, action, state, dispatch) {\n console.log(\"action:\", action);\n // console.log(\"state:\", state);\n // console.log(\"happ:\", this);\n\n counterDispatcher.call(this, action, state.counter, dispatch);\n\n switch (action.type) {\n case HAppActions.init:\n case HAppActions.mount:\n case HAppActions.umount:\n break;\n case Actions.title:\n state.title = action.data;\n break;\n case Actions.clear:\n state.title = \"\";\n break;\n case Actions.formSubmit:\n console.log(\"FormSubmit:\", JSON.stringify(action.data));\n const fe = action.event!.target as HTMLFormElement;\n const fd = new FormData(fe);\n console.log(\"FormData:\", JSON.stringify([...fd.entries()]));\n break;\n case Actions.formChange:\n console.log(\"FormChange:\", JSON.stringify(action.data));\n break;\n case Actions.xXx:\n dispatch(CounterActions.dec, 1, \"window\");\n break;\n case Actions.x:\n console.log(\"data.x\", typeof action.data.x, action.data.x);\n // state.x = new Boolean(action.data.x === \"true\");\n // state.x = action.data.x === \"true\";\n state.x = new Boolean(action.data.x);\n // state.x = action.data.x;\n break;\n // default:\n // console.warn(\"action unhandled:\", action);\n }\n};\n\n// HApp.debug = true;\nHApp.debug = window.location.hostname === \"localhost\";\n\nconst app = happ<State, Actions | CounterActions>(state, view, dispatcher)\n // .onDispatch(async (action, state, dispatch) => console.log(\"onDspatch:\", action, state))\n .mount(document.getElementById(\"app\"));\n\n(self as any).app = app;\n\n\n// const html = app.toHtml();\n// console.log(html);\n"],"names":["$fe5fa9c04fc86188$var$log","console","log","$fe5fa9c04fc86188$var$error","error","$fe5fa9c04fc86188$var$warn","warn","$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$msgUpdate","$fe5fa9c04fc86188$export$eb8950696418f795","state","view","dispatcher","element","document","body","$fe5fa9c04fc86188$export$8cfef5dc37c46888","$fe5fa9c04fc86188$export$e905700d74a7763f","hAppI","hapi","$fe5fa9c04fc86188$export$1cfc54b3834d3c50","elementName","elementAttrs","customElements","define","HTMLElement","observedAttributes","connectedCallback","this","attachShadow","mode","_happel","mount","shadowRoot","disconnectedCallback","umount","adoptedCallback","update","attributeChangedCallback","attrName","oldVal","newVal","dispatch","constructor","super","customElement","$fe5fa9c04fc86188$var$HAPP","_dispatchAction","type","data","event","scope","debug","t0","performance","now","_dispatch","t1","_dispatchElement","_dispatchWindow","e","windowDispatchOn","_windowEventListener","action","detail","addEventListener","windowDispatchOff","removeEventListener","refs","$fe5fa9c04fc86188$var$__awaiter","undefined","$fe5fa9c04fc86188$var$elementDispatchCustomEvent","dom","dispatchEvent","CustomEvent","render","hsmls","actionCb","actionType","Function","el","target","nodeName","preventDefault","els","elements","i","length","d","$fe5fa9c04fc86188$var$formInputData","names","Object","keys","name","value","String","Array","concat","push","filter","$fe5fa9c04fc86188$var$formData","_a","getElementById","$fe5fa9c04fc86188$var$updateDom","hasAttribute","removeAttribute","aNodes","querySelectorAll","a","happ","firstChild","removeChild","_updateSched","toHsml","skip","toHtml","outerHTML","then","hsml","ctx","$hrCkK","hsmls2idomPatch","_b","call","iel","checked","sel","multiple","values","from","selectedOptions","map","o","tel","bel","$7a40690ab54246c9$var$CounterActions","CounterActions","$7a40690ab54246c9$var$counterView","count","on","dec","inc","$7a40690ab54246c9$var$counterDispatcher","$fe5fa9c04fc86188$exports","$7a40690ab54246c9$var$Actions","Actions","HApp","location","hostname","$7a40690ab54246c9$var$app","title","counter","clear","formSubmit","formChange","l","xXx","x","disabled","init","JSON","stringify","fe","fd","FormData","entries","Boolean","self","app"],"version":3,"file":"hsml-app-test_demo.e8b5e4b2.js.map"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="en"><head><script nomodule defer src="hsml-app-form-validation_demo.
|
|
1
|
+
<!DOCTYPE html><html lang="en"><head><script nomodule defer src="hsml-app-form-validation_demo.fdcc0b2d.js"></script><script type="module" src="hsml-app-form-validation_demo.c6856b02.js"></script><meta charset="utf-8"><title>PeRyL hsml app demo</title></head><body> <h1>PeRyL hsml app demo</h1> <div id="app"></div> <script type="module" src="hsml-app-test_demo.e8b5e4b2.js"></script><script src="hsml-app-test_demo.ba5f166c.js" nomodule defer></script> </body></html>
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
!function(){function t(t,e,n,i){Object.defineProperty(t,e,{get:n,set:i,enumerable:!0,configurable:!0})}var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},n={},i={},o=e.parcelRequirede31;null==o&&((o=function(t){if(t in n)return n[t].exports;if(t in i){var e=i[t];delete i[t];var o={id:t,exports:{}};return n[t]=o,e.call(o.exports,o,o.exports),o.exports}var s=new Error("Cannot find module '"+t+"'");throw s.code="MODULE_NOT_FOUND",s}).register=function(t,e){i[t]=e},e.parcelRequirede31=o);var s={};t(s,"HAppActions",(function(){return h}),(function(t){return h=t})),t(s,"HDispatchScopes",(function(){return m}),(function(t){return m=t})),t(s,"happ",(function(){return A}),(function(t){return A=t})),t(s,"HApp",(function(){return T}),(function(t){return T=t})),t(s,"happi",(function(){return g}),(function(t){return g=t})),t(s,"happel",(function(){return E}),(function(t){return E=t}));var a=o("8IJ2T"),c=function(t,e,n,i){return new(n||(n=Promise))((function(o,s){function a(t){try{r(i.next(t))}catch(t){s(t)}}function c(t){try{r(i.throw(t))}catch(t){s(t)}}function r(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,c)}r((i=i.apply(t,e||[])).next())}))};const r=console.log,d=console.error,u=console.warn;var h,l,m,p;(l=h||(h={})).init="init",l.mount="mount",l.umount="umount",l.action="action",l.elementAttr="elementAttr",(p=m||(m={})).element="element",p.window="window";const f=window.requestAnimationFrame||function(t){window.setTimeout(t,1e3/60)},w=window.cancelAnimationFrame||function(t){window.clearTimeout(t)},v="HApp action:",y="HApp dispatch:",b="HApp render:",_="HApp update:";function A(t,e,n,i=document.body){return new T(t,e,n,i)}function g(t,e=document.body){const n=new t;return new T(n.state,n.view,n.dispatcher,e)}function E(t,e,n,i,o){customElements.define(t,class extends HTMLElement{static get observedAttributes(){return e}connectedCallback(){this.attachShadow({mode:"open"}),this._happel.mount(this.shadowRoot)}disconnectedCallback(){this._happel.umount()}adoptedCallback(){this._happel.update()}attributeChangedCallback(t,e,n){this._happel.dispatch("elementAttr",{attrName:t,oldVal:e,newVal:n})}constructor(){super(),this._happel=new T(n,i,o),this._happel.customElement=this}})}const k="happ";class T{_dispatchAction(t,e,n,i){return c(this,void 0,void 0,(function*(){if(T.debug){r(v,{type:t,data:e,event:n});const o=performance.now();yield this._dispatch(t,e,n,i);const s=performance.now();r(y,s-o+" ms",this.state)}else yield this._dispatch(t,e,n,i)}))}_dispatch(t,e,n,i){return c(this,void 0,void 0,(function*(){try{yield this.dispatcher({type:t,data:e,event:n},this.state,this.dispatch),this.update(),"element"===i&&this._dispatchElement(t,e),"window"===i&&this._dispatchWindow(t,e)}catch(t){d(y,t)}}))}windowDispatchOn(){this._windowEventListener?u("windowEventListener olready setted"):(this._windowEventListener=t=>{const e=t.detail;this._dispatchAction(e.type,e.data)},window.addEventListener("action",this._windowEventListener))}windowDispatchOff(){this._windowEventListener&&window.removeEventListener("action",this._windowEventListener)}constructor(t,e,n,i=document.body){this.refs={},this.dispatch=(t,e,n)=>c(this,void 0,void 0,(function*(){return this._dispatchAction(t,e,void 0,n)})),this._dispatchElement=(t,e)=>c(this,void 0,void 0,(function*(){this.customElement&&C(this.customElement,"action",{type:t,data:e}),!this.customElement&&this.dom&&C(this.dom,"action",{type:t,data:e})})),this._dispatchWindow=(t,e)=>c(this,void 0,void 0,(function*(){window.dispatchEvent(new CustomEvent("action",{detail:{type:t,data:e}}))})),this.render=()=>{if(T.debug){const t=performance.now();let e;try{e=this.view(this.state)}catch(t){d(b,t)}const n=performance.now();return r(b,n-t+" ms",e),null!=e?e:[]}{let t;try{t=this.view(this.state)}catch(t){d(b,t)}return null!=t?t:[]}},this.actionCb=(t,e,n)=>{void 0===(e=(null==e?void 0:e.constructor)===Function?e(n):e)&&n&&(e=n instanceof CustomEvent?n.detail:function(t){const e=t.target;if("FORM"===e.nodeName){t.preventDefault();const n=e.elements,i={};for(let t=0;t<n.length;t++){const e=S(n[t]);if("object"==typeof e){const o=Object.keys(e);if(o.length){const s=o[0],a=e[s];void 0===i[s]?i[s]=a:"string"==typeof i[s]||i[s]instanceof String?i[s]=a instanceof Array?[i[s],...a]:[i[s],a]:i[s]instanceof Array?a instanceof Array?i[s]=i[s].concat(a):i[s].push(a):i[s]=a instanceof Array?[i[s],...a]:[i[s],a],i[s]instanceof Array&&(i[s]=i[s].filter((t=>null!==t)),"radio"===n[t].type&&(i[s]=i[s].length?i[s][0]:null))}}}return i}return S(e)}(n)),this._dispatchAction(t,e,n)},this.mount=(t=document.body)=>{var e;const n="string"==typeof t?null!==(e=document.getElementById(t))&&void 0!==e?e:document.body:null!=t?t:document.body;if(n[k]){n[k].umount()}if(!this.dom){this.dom=n,n[k]=this;x(n,this.render(),this),this._dispatchAction("mount",this.dom)}return this},this.umount=()=>{if(this.dom){this._dispatchAction("umount",this.dom),this.dom.hasAttribute(k)&&this.dom.removeAttribute(k);const t=this.dom.querySelectorAll(`[${k}]`);for(let e=0;e<t.length;e++){const n=t[e].happ;null==n||n.umount()}for(;this.dom.firstChild;)this.dom.removeChild(this.dom.firstChild);delete this.dom.happ,this.dom=void 0}return this},this.update=()=>(this.dom&&!this._updateSched&&(this._updateSched=f((()=>{if(this.dom){const t=this.render();x(this.dom,t,this)}this._updateSched=void 0}))),this),this.toHsml=()=>{if(this.dom){if(!this._updateSched)return["div",{skip:!0}];w(this._updateSched),this._updateSched=void 0}const t=this.render();return t.push((t=>{this.dom||(this.dom=t,t.happ=this,this._dispatchAction("mount",this.dom))})),["div",t]},this.toHtml=()=>this.dom?this.dom.outerHTML:"",this.state=t(),this.view=e,this.dispatcher=null!=n?n:t=>c(this,void 0,void 0,(function*(){return r(v,t.type,t.data)})),this._dispatchAction("init",this).then((()=>this.mount(i)))}}function x(t,e,n){if(T.debug){const i=performance.now();(0,a.hsmls2idomPatch)(t,e,n);const o=performance.now();r(_,o-i+" ms",t)}else(0,a.hsmls2idomPatch)(t,e,n)}function C(t,e,n){var i,o;null==t||t.dispatchEvent(new CustomEvent(e,{detail:n})),null===(o=(i=t)[`on${e}`])||void 0===o||o.call(i,new CustomEvent(e,{detail:n}))}function S(t){let e=null;switch(t.nodeName){case"INPUT":const n=t;switch(n.type){case"text":case"hidden":case"password":case"email":case"number":case"search":case"url":case"tel":case"color":case"date":case"datetime-local":case"month":case"range":case"time":case"week":case"submit":case"button":e=n.name?{[n.name]:n.value}:n.value;break;case"radio":e=n.name?{[n.name]:n.checked?n.value:null}:n.checked?n.value:null;break;case"checkbox":e="on"===n.value?n.name?{[n.name]:n.checked}:n.checked:n.name?{[n.name]:n.checked?String(n.value):null}:n.checked?String(n.value):null}break;case"SELECT":const i=t;if(i.multiple){const t=Array.from(i.selectedOptions).map((t=>t.value));e=i.name?{[i.name]:t}:t}else e=i.name?{[i.name]:i.value}:i.value;break;case"TEXTAREA":const o=t;e=o.name?{[o.name]:o.value}:o.value;break;case"BUTTON":const s=t;e=s.name?{[s.name]:s.value}:s.value}return e}T.debug=!1;var L=function(t,e,n,i){return new(n||(n=Promise))((function(o,s){function a(t){try{r(i.next(t))}catch(t){s(t)}}function c(t){try{r(i.throw(t))}catch(t){s(t)}}function r(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,c)}r((i=i.apply(t,e||[])).next())}))};const H=" ",O="◯",D="⨯";var N,P;(P=N||(N={})).mark="mark",P.reset="reset",P.noop="noop";const F=()=>[[H,H,H],[H,H,H],[H,H,H]];const R=(0,s.happ)((function(){return{board:F(),turn:0}}),(function(t){return[["div.w3-content",[["h1",["Tic-Tac-Toe Demo"]],["div.w3-center",[["p.w3-xlarge",["Player: ",t.turn?D:O]],["div",t.board.map(((e,n)=>["div",e.map(((e,i)=>["button.w3-button.w3-white.w3-border.w3-border-gray",{styles:{fontFamily:"monospace",fontSize:"300%",display:"inline-block",width:"2em",height:"2em"},on:e===H?["click",N.mark,{x:i,y:n,turn:t.turn}]:["click",N.noop]},e]))]))],["p",[["button.w3-button.w3-blue",{on:["click",N.reset]},"Reset"]]]]]]]]}),(function(t,e,n){return L(this,void 0,void 0,(function*(){switch(console.log("action",t),t.type){case N.reset:e.board=F();break;case N.mark:e.board[t.data.y][t.data.x]=t.data.turn?D:O,e.turn=t.data.turn?0:1}}))}));self.app=R}();
|
|
2
|
+
//# sourceMappingURL=hsml-app-tictactoe_demo.03d8363f.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"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","sources":["src/hsml-app.ts","demo/hsml-app-tictactoe_demo.ts"],"sourcesContent":["import { HAttrOnData, HAttrOnDataFnc, HElement, HElements, HHandlerCtx } from \"./hsml\";\nimport { hsmls2idomPatch } from \"./hsml-idom\";\n\nconst log = console.log;\nconst error = console.error;\nconst warn = console.warn;\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 HAppActionType =\n | \"init\"\n | \"mount\"\n | \"umount\"\n | \"action\"\n | \"elementAttr\";\n\nexport enum HAppActions {\n init = \"init\",\n mount = \"mount\",\n umount = \"umount\",\n action = \"action\",\n elementAttr = \"elementAttr\"\n}\n\nexport interface HAction<HActionType extends string> {\n type: HActionType | HAppActionType | HAppActions;\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>,\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 = \"HApp action:\";\nconst msgDispatch = \"HApp dispatch:\";\nconst msgRender = \"HApp render:\";\nconst msgUpdate = \"HApp update:\";\n\nexport function happ<State, HActionType extends string>(\n state: HState<State>,\n view: HView<State, HActionType>,\n dispatcher: HDispatcher<State, HActionType>,\n element: Element | string | null = document.body\n) {\n return new HApp<State, HActionType>(state, view, dispatcher, element);\n}\n\n// HAppI\n\nexport type Class<T = object> = new (...args: any[]) => T;\n\nexport interface HAppI<State, HActionType extends string> {\n state(): State;\n view(state: State): HElements<HActionType>;\n dispatcher(\n // this: HApp<State, HActionType>,\n action: HAction<HActionType>,\n state: State,\n dispatch: HDispatch<HActionType>\n ): Promise<void>;\n}\n\nexport function happi<State, HActionType extends string>(\n hAppI: Class<HAppI<State, HActionType>>,\n element: Element | string | null = document.body\n) {\n const hapi = new hAppI();\n return new HApp<State, HActionType>(\n hapi.state,\n hapi.view,\n hapi.dispatcher,\n element\n );\n}\n\n// HAppEl\n\nexport function happel<State, HActionType extends string>(\n elementName: string,\n elementAttrs: string[],\n state: HState<State>,\n view: HView<State, HActionType>,\n dispatcher: HDispatcher<State, HActionType>\n): void {\n customElements.define(\n elementName,\n class HAppElement extends HTMLElement {\n static get observedAttributes() {\n return elementAttrs;\n }\n\n private _happel: HApp<State, HActionType>;\n\n constructor() {\n super();\n this._happel = new HApp<State, HActionType>(\n state,\n view,\n dispatcher\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(\"elementAttr\", {\n attrName,\n oldVal,\n newVal,\n });\n }\n }\n );\n}\n\nconst HAPP = \"happ\";\n\nexport class HApp<State, HActionType extends string> implements HHandlerCtx<HActionType> {\n static debug = false;\n\n readonly state: State;\n readonly view: HView<State, HActionType>;\n readonly dispatcher: HDispatcher<State, HActionType>;\n\n readonly customElement?: HTMLElement; // happ custom html element\n\n readonly dom?: HTMLElement;\n readonly refs: { [key: string]: HTMLElement } = {};\n\n private _updateSched?: number;\n\n // private _onDispatch?: HDispatcher<State>;\n\n private _windowEventListener?: (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 = document.body\n ) {\n this.state = state();\n this.view = view;\n this.dispatcher = dispatcher ?? (async (a) => log(msgAction, a.type, a.data));\n this._dispatchAction(\"init\", this).then(() => this.mount(element));\n }\n\n dispatch: HDispatch<HActionType> = async (\n type: HActionType | HAppActionType,\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 | HAppActionType,\n data?: any,\n event?: Event,\n scope?: HDispatchScope\n ): Promise<void> {\n if (HApp.debug) {\n log(msgAction, { type, data, event });\n const t0 = performance.now();\n await this._dispatch(type, data, event, scope);\n const t1 = performance.now();\n log(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 | HAppActionType,\n data: any,\n event?: Event,\n scope?: HDispatchScope\n ) {\n try {\n await this.dispatcher(\n { type: type as HActionType, data, event },\n this.state,\n this.dispatch\n );\n this.update();\n scope === \"element\" && this._dispatchElement(type, data);\n scope === \"window\" && this._dispatchWindow(type, data);\n } catch (e) {\n error(msgDispatch, e);\n }\n }\n\n private _dispatchElement: HDispatch<HActionType> = async (\n type: HActionType | HAppActionType,\n data?: any\n ): Promise<void> => {\n this.customElement && elementDispatchCustomEvent(this.customElement, \"action\", { type, data });\n !this.customElement && this.dom && elementDispatchCustomEvent(this.dom, \"action\", { type, data });\n // this.customElement && elementDispatchCustomEvent(this.customElement, type, data);\n // !this.customElement && this.dom && elementDispatchCustomEvent(this.dom, type, data);\n // this._onDispatch?.({ type, data, event }, this.state, this.dispatch);\n }\n\n private _dispatchWindow: HDispatch<HActionType> = async (\n type: HActionType | HAppActionType,\n data?: any): Promise<void> => {\n window.dispatchEvent(new CustomEvent(\"action\", { detail: { type, data } }));\n }\n\n windowDispatchOn() {\n if (!this._windowEventListener) {\n this._windowEventListener = (event: Event) => {\n const action = (event as CustomEvent).detail as HAction<HActionType>;\n this._dispatchAction(action.type, action.data);\n };\n window.addEventListener(\"action\", this._windowEventListener);\n } else {\n warn(\"windowEventListener olready setted\");\n }\n }\n\n windowDispatchOff() {\n if (this._windowEventListener) {\n window.removeEventListener(\"action\", this._windowEventListener);\n }\n }\n\n render = (): HElements<HActionType> => {\n if (HApp.debug) {\n const t0 = performance.now();\n let hsmls;\n try {\n hsmls = this.view(this.state);\n } catch (e) {\n error(msgRender, e);\n }\n const t1 = performance.now();\n log(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 error(msgRender, e);\n }\n return hsmls ?? [];\n }\n }\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);\n }\n }\n this._dispatchAction(actionType, data, event);\n }\n\n mount = (e: Element | string | null = document.body): this => {\n const el = (typeof e === \"string\")\n ? document.getElementById(e) ?? document.body\n : e ?? document.body;\n if ((el as any)[HAPP]) {\n const a = (el as any)[HAPP] as HApp<State, HActionType>;\n a.umount();\n }\n if (!this.dom) {\n (this as any).dom = el;\n (el as any)[HAPP] = this;\n const hsmls = (this as any).render();\n updateDom<HActionType>(el, hsmls, this);\n this._dispatchAction(\"mount\", this.dom);\n }\n return this;\n }\n\n umount = (): this => {\n if (this.dom) {\n this._dispatchAction(\"umount\", this.dom);\n if (this.dom.hasAttribute(HAPP)) {\n this.dom.removeAttribute(HAPP);\n }\n const aNodes = this.dom.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.dom.firstChild /*.hasChildNodes()*/) {\n this.dom.removeChild(this.dom.firstChild);\n }\n delete (this.dom as any).happ;\n (this as any).dom = undefined;\n }\n return this;\n }\n\n update = (): this => {\n if (this.dom && !this._updateSched) {\n this._updateSched = schedule(() => {\n if (this.dom) {\n const hsmls = this.render();\n updateDom<HActionType>(this.dom, hsmls, this);\n }\n this._updateSched = undefined;\n });\n }\n return this;\n }\n\n toHsml = (): HElement<HActionType> => {\n if (this.dom) {\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.dom) {\n (this as any).dom = e;\n (e as any).happ = this;\n this._dispatchAction(\"mount\", this.dom);\n }\n });\n return [\"div\", hsmls];\n }\n\n toHtml = (): string => {\n return this.dom ? this.dom.outerHTML : \"\";\n }\n\n}\n\nfunction updateDom<HActionType extends string>(\n el: Element,\n hsml: HElements<HActionType>,\n ctx: HHandlerCtx<HActionType>\n): void {\n if (HApp.debug) {\n const t0 = performance.now();\n hsmls2idomPatch(el, hsml, ctx);\n const t1 = performance.now();\n log(msgUpdate, `${t1 - t0} ms`, el);\n } else {\n hsmls2idomPatch(el, hsml, ctx);\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\nfunction formData(e: Event): { [k: string]: string | number | boolean | null | Array<string | null> } | string | number | boolean | null | Array<string | null> {\n const el = e.target as HTMLElement;\n switch (el.nodeName) {\n case \"FORM\":\n (e as Event).preventDefault();\n const els = (el as HTMLFormElement).elements;\n const data = {} as { [k: string]: string | null | Array<string | null> };\n for (let i = 0; i < els.length; i++) {\n const d = formInputData(els[i]);\n if (typeof d === \"object\") {\n const names = Object.keys(d as object);\n if (names.length) {\n const name = names[0];\n const value = (d as any)[name];\n if (data[name] === undefined) {\n data[name] = value;\n } else if (typeof data[name] === \"string\" || data[name] instanceof String) {\n if (value instanceof Array) {\n data[name] = [data[name] as string, ...value];\n } else {\n data[name] = [data[name] as string, value as string];\n }\n } else if (data[name] instanceof Array) {\n if (value instanceof Array) {\n data[name] = (data[name] as Array<string | null>).concat(value);\n } else {\n (data[name] as Array<string | null>).push(value);\n }\n } else {\n if (value instanceof Array) {\n data[name] = [data[name] as string, ...value];\n } else {\n data[name] = [data[name] as string, value];\n }\n }\n if (data[name] instanceof Array) {\n data[name] = (data[name] as Array<string | null>)\n .filter(d => d !== null);\n if ((els[i] as HTMLInputElement).type === \"radio\") {\n data[name] = (data[name] as Array<string | null>).length\n ? (data[name] as Array<string | null>)[0]\n : null;\n }\n }\n }\n }\n }\n return data;\n default:\n return formInputData(el);\n }\n}\n\nfunction formInputData(el: Element): { [k: string]: string | number | boolean | null | Array<string | null> } | string | number | boolean | null | Array<string | null> {\n let data: { [k: string]: string | number | boolean | null | Array<string | null> } | string | number | boolean | null | Array<string | null> = null;\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 \"number\":\n case \"search\":\n case \"url\":\n case \"tel\":\n case \"color\":\n case \"date\":\n case \"datetime-local\":\n case \"month\":\n case \"range\":\n case \"time\":\n case \"week\":\n case \"submit\":\n case \"button\":\n if (iel.name) {\n data = { [iel.name]: iel.value };\n } else {\n data = iel.value;\n }\n break;\n case \"radio\":\n if (iel.name) {\n data = { [iel.name]: iel.checked ? iel.value : null };\n } else {\n data = iel.checked ? iel.value : null;\n }\n break;\n case \"checkbox\":\n if (iel.value === \"on\") { // value not set in element\n if (iel.name) {\n data = { [iel.name]: iel.checked };\n } else {\n data = iel.checked;\n }\n } else {\n if (iel.name) {\n data = { [iel.name]: iel.checked\n ? String(iel.value)\n : null };\n } else {\n data = iel.checked\n ? String(iel.value)\n : null;\n }\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 if (sel.name) {\n data = { [sel.name]: values };\n } else {\n data = values;\n }\n } else {\n if (sel.name) {\n data = { [sel.name]: sel.value };\n } else {\n data = sel.value;\n }\n }\n break;\n case \"TEXTAREA\":\n const tel = el as HTMLTextAreaElement;\n if (tel.name) {\n data = { [tel.name]: tel.value };\n } else {\n data = tel.value;\n }\n break;\n case \"BUTTON\":\n const bel = el as HTMLButtonElement;\n if (bel.name) {\n data = { [bel.name]: bel.value };\n } else {\n data = bel.value;\n }\n break;\n }\n return data;\n}\n","import { HElement, HElements } from \"../src/hsml\";\nimport { HAction, happ, HDispatch } from \"../src/hsml-app\";\n\nconst NBSP = \"\\u00A0\";\nconst CIRC = \"\\u25EF\";\nconst CROS = \"\\u2A2F\";\n\ninterface State {\n board: string[][];\n turn: number;\n}\n\nconst enum Actions {\n mark = \"mark\",\n reset = \"reset\",\n noop = \"noop\"\n}\n\nconst boardInit = () => [\n [NBSP, NBSP, NBSP],\n [NBSP, NBSP, NBSP],\n [NBSP, NBSP, NBSP]\n];\n\nfunction state(): State {\n return {\n board: boardInit(),\n turn: 0\n };\n}\n\nfunction view(state: State): HElements<Actions> {\n return [\n [\"div.w3-content\", [\n [\"h1\", [\"Tic-Tac-Toe Demo\"]],\n [\"div.w3-center\", [\n [\"p.w3-xlarge\", [\n \"Player: \", state.turn ? CROS : CIRC,\n ]],\n [\"div\", state.board.map<HElement<Actions>>((row, y) =>\n [\"div\", row.map<HElement<Actions>>((col, x) =>\n [\"button.w3-button.w3-white.w3-border.w3-border-gray\",\n {\n styles: {\n fontFamily: \"monospace\",\n fontSize: \"300%\",\n display: \"inline-block\",\n width: \"2em\",\n height: \"2em\"\n },\n on: (col === NBSP)\n ? [\"click\", Actions.mark, { x, y, turn: state.turn }]\n : [\"click\", Actions.noop]\n },\n col\n ])\n ])\n ],\n [\"p\", [\n [\"button.w3-button.w3-blue\", { on: [\"click\", Actions.reset] }, \"Reset\"]\n ]]\n ]]\n ]]\n ];\n}\n\n\nasync function dispatcher(action: HAction<Actions>, state: State, dispatch: HDispatch<Actions>): Promise<void> {\n console.log(\"action\", action);\n\n switch (action.type) {\n\n case Actions.reset:\n state.board = boardInit();\n break;\n\n case Actions.mark:\n state.board[action.data.y][action.data.x] = action.data.turn ? CROS : CIRC;\n state.turn = action.data.turn ? 0 : 1;\n break;\n }\n}\n\nconst app = happ<State, Actions>(state, view, dispatcher);\n\n(self as any).app = app;\n"],"names":["$a85519cc1b20a4af$var$log","console","log","$a85519cc1b20a4af$var$error","error","$a85519cc1b20a4af$var$warn","warn","$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$msgUpdate","$a85519cc1b20a4af$export$eb8950696418f795","state","view","dispatcher","element","document","body","$a85519cc1b20a4af$export$8cfef5dc37c46888","$a85519cc1b20a4af$export$e905700d74a7763f","hAppI","hapi","$a85519cc1b20a4af$export$1cfc54b3834d3c50","elementName","elementAttrs","customElements","define","HTMLElement","observedAttributes","connectedCallback","this","attachShadow","mode","_happel","mount","shadowRoot","disconnectedCallback","umount","adoptedCallback","update","attributeChangedCallback","attrName","oldVal","newVal","dispatch","constructor","super","customElement","$a85519cc1b20a4af$var$HAPP","_dispatchAction","type","data","event","scope","debug","t0","performance","now","_dispatch","t1","_dispatchElement","_dispatchWindow","e","windowDispatchOn","_windowEventListener","action","detail","addEventListener","windowDispatchOff","removeEventListener","refs","$a85519cc1b20a4af$var$__awaiter","undefined","$a85519cc1b20a4af$var$elementDispatchCustomEvent","dom","dispatchEvent","CustomEvent","render","hsmls","actionCb","actionType","Function","el","target","nodeName","preventDefault","els","elements","i","length","d","$a85519cc1b20a4af$var$formInputData","names","Object","keys","name","value","String","Array","concat","push","filter","$a85519cc1b20a4af$var$formData","_a","getElementById","$a85519cc1b20a4af$var$updateDom","hasAttribute","removeAttribute","aNodes","querySelectorAll","a","happ","firstChild","removeChild","_updateSched","toHsml","skip","toHtml","outerHTML","then","hsml","ctx","$8IJ2T","hsmls2idomPatch","_b","call","iel","checked","sel","multiple","values","from","selectedOptions","map","o","tel","bel","$94175cc66aed1527$var$NBSP","$94175cc66aed1527$var$CIRC","$94175cc66aed1527$var$CROS","$94175cc66aed1527$var$Actions","Actions","$94175cc66aed1527$var$boardInit","$94175cc66aed1527$var$app","$a85519cc1b20a4af$exports","board","turn","row","y","col","x","styles","fontFamily","fontSize","display","width","height","on","mark","noop","reset","self","app"],"version":3,"file":"hsml-app-tictactoe_demo.03d8363f.js.map"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function t(t,e,n,i){Object.defineProperty(t,e,{get:n,set:i,enumerable:!0,configurable:!0})}var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},n={},i={},o=e.parcelRequirede31;null==o&&((o=function(t){if(t in n)return n[t].exports;if(t in i){var e=i[t];delete i[t];var o={id:t,exports:{}};return n[t]=o,e.call(o.exports,o,o.exports),o.exports}var s=new Error("Cannot find module '"+t+"'");throw s.code="MODULE_NOT_FOUND",s}).register=function(t,e){i[t]=e},e.parcelRequirede31=o);var s={};t(s,"HAppActions",(function(){return h}),(function(t){return h=t})),t(s,"HDispatchScopes",(function(){return m}),(function(t){return m=t})),t(s,"happ",(function(){return A}),(function(t){return A=t})),t(s,"HApp",(function(){return C}),(function(t){return C=t})),t(s,"happi",(function(){return g}),(function(t){return g=t})),t(s,"happel",(function(){return k}),(function(t){return k=t}));var a=o("hrCkK"),c=function(t,e,n,i){return new(n||(n=Promise))((function(o,s){function a(t){try{r(i.next(t))}catch(t){s(t)}}function c(t){try{r(i.throw(t))}catch(t){s(t)}}function r(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,c)}r((i=i.apply(t,e||[])).next())}))};const r=console.log,d=console.error,u=console.warn;var h,l,m,p;(l=h||(h={})).init="init",l.mount="mount",l.umount="umount",l.action="action",l.elementAttr="elementAttr",(p=m||(m={})).element="element",p.window="window";const f=window.requestAnimationFrame||function(t){window.setTimeout(t,1e3/60)},w=window.cancelAnimationFrame||function(t){window.clearTimeout(t)},v="HApp action:",y="HApp dispatch:",b="HApp render:",_="HApp update:";function A(t,e,n,i=document.body){return new C(t,e,n,i)}function g(t,e=document.body){const n=new t;return new C(n.state,n.view,n.dispatcher,e)}function k(t,e,n,i,o){customElements.define(t,class extends HTMLElement{static get observedAttributes(){return e}connectedCallback(){this.attachShadow({mode:"open"}),this._happel.mount(this.shadowRoot)}disconnectedCallback(){this._happel.umount()}adoptedCallback(){this._happel.update()}attributeChangedCallback(t,e,n){this._happel.dispatch("elementAttr",{attrName:t,oldVal:e,newVal:n})}constructor(){super(),this._happel=new C(n,i,o),this._happel.customElement=this}})}const E="happ";class C{_dispatchAction(t,e,n,i){return c(this,void 0,void 0,(function*(){if(C.debug){r(v,{type:t,data:e,event:n});const o=performance.now();yield this._dispatch(t,e,n,i);const s=performance.now();r(y,s-o+" ms",this.state)}else yield this._dispatch(t,e,n,i)}))}_dispatch(t,e,n,i){return c(this,void 0,void 0,(function*(){try{yield this.dispatcher({type:t,data:e,event:n},this.state,this.dispatch),this.update(),"element"===i&&this._dispatchElement(t,e),"window"===i&&this._dispatchWindow(t,e)}catch(t){d(y,t)}}))}windowDispatchOn(){this._windowEventListener?u("windowEventListener olready setted"):(this._windowEventListener=t=>{const e=t.detail;this._dispatchAction(e.type,e.data)},window.addEventListener("action",this._windowEventListener))}windowDispatchOff(){this._windowEventListener&&window.removeEventListener("action",this._windowEventListener)}constructor(t,e,n,i=document.body){this.refs={},this.dispatch=(t,e,n)=>c(this,void 0,void 0,(function*(){return this._dispatchAction(t,e,void 0,n)})),this._dispatchElement=(t,e)=>c(this,void 0,void 0,(function*(){this.customElement&&x(this.customElement,"action",{type:t,data:e}),!this.customElement&&this.dom&&x(this.dom,"action",{type:t,data:e})})),this._dispatchWindow=(t,e)=>c(this,void 0,void 0,(function*(){window.dispatchEvent(new CustomEvent("action",{detail:{type:t,data:e}}))})),this.render=()=>{if(C.debug){const t=performance.now();let e;try{e=this.view(this.state)}catch(t){d(b,t)}const n=performance.now();return r(b,n-t+" ms",e),null!=e?e:[]}{let t;try{t=this.view(this.state)}catch(t){d(b,t)}return null!=t?t:[]}},this.actionCb=(t,e,n)=>{void 0===(e=(null==e?void 0:e.constructor)===Function?e(n):e)&&n&&(e=n instanceof CustomEvent?n.detail:function(t){const e=t.target;if("FORM"===e.nodeName){t.preventDefault();const n=e.elements,i={};for(let t=0;t<n.length;t++){const e=S(n[t]);if("object"==typeof e){const o=Object.keys(e);if(o.length){const s=o[0],a=e[s];void 0===i[s]?i[s]=a:"string"==typeof i[s]||i[s]instanceof String?i[s]=a instanceof Array?[i[s],...a]:[i[s],a]:i[s]instanceof Array?a instanceof Array?i[s]=i[s].concat(a):i[s].push(a):i[s]=a instanceof Array?[i[s],...a]:[i[s],a],i[s]instanceof Array&&(i[s]=i[s].filter((t=>null!==t)),"radio"===n[t].type&&(i[s]=i[s].length?i[s][0]:null))}}}return i}return S(e)}(n)),this._dispatchAction(t,e,n)},this.mount=(t=document.body)=>{var e;const n="string"==typeof t?null!==(e=document.getElementById(t))&&void 0!==e?e:document.body:null!=t?t:document.body;if(n[E]){n[E].umount()}if(!this.dom){this.dom=n,n[E]=this;T(n,this.render(),this),this._dispatchAction("mount",this.dom)}return this},this.umount=()=>{if(this.dom){this._dispatchAction("umount",this.dom),this.dom.hasAttribute(E)&&this.dom.removeAttribute(E);const t=this.dom.querySelectorAll(`[${E}]`);for(let e=0;e<t.length;e++){const n=t[e].happ;null==n||n.umount()}for(;this.dom.firstChild;)this.dom.removeChild(this.dom.firstChild);delete this.dom.happ,this.dom=void 0}return this},this.update=()=>(this.dom&&!this._updateSched&&(this._updateSched=f((()=>{if(this.dom){const t=this.render();T(this.dom,t,this)}this._updateSched=void 0}))),this),this.toHsml=()=>{if(this.dom){if(!this._updateSched)return["div",{skip:!0}];w(this._updateSched),this._updateSched=void 0}const t=this.render();return t.push((t=>{this.dom||(this.dom=t,t.happ=this,this._dispatchAction("mount",this.dom))})),["div",t]},this.toHtml=()=>this.dom?this.dom.outerHTML:"",this.state=t(),this.view=e,this.dispatcher=null!=n?n:t=>c(this,void 0,void 0,(function*(){return r(v,t.type,t.data)})),this._dispatchAction("init",this).then((()=>this.mount(i)))}}function T(t,e,n){if(C.debug){const i=performance.now();(0,a.hsmls2idomPatch)(t,e,n);const o=performance.now();r(_,o-i+" ms",t)}else(0,a.hsmls2idomPatch)(t,e,n)}function x(t,e,n){var i,o;null==t||t.dispatchEvent(new CustomEvent(e,{detail:n})),null===(o=(i=t)[`on${e}`])||void 0===o||o.call(i,new CustomEvent(e,{detail:n}))}function S(t){let e=null;switch(t.nodeName){case"INPUT":const n=t;switch(n.type){case"text":case"hidden":case"password":case"email":case"number":case"search":case"url":case"tel":case"color":case"date":case"datetime-local":case"month":case"range":case"time":case"week":case"submit":case"button":e=n.name?{[n.name]:n.value}:n.value;break;case"radio":e=n.name?{[n.name]:n.checked?n.value:null}:n.checked?n.value:null;break;case"checkbox":e="on"===n.value?n.name?{[n.name]:n.checked}:n.checked:n.name?{[n.name]:n.checked?String(n.value):null}:n.checked?String(n.value):null}break;case"SELECT":const i=t;if(i.multiple){const t=Array.from(i.selectedOptions).map((t=>t.value));e=i.name?{[i.name]:t}:t}else e=i.name?{[i.name]:i.value}:i.value;break;case"TEXTAREA":const o=t;e=o.name?{[o.name]:o.value}:o.value;break;case"BUTTON":const s=t;e=s.name?{[s.name]:s.value}:s.value}return e}C.debug=!1;var L=function(t,e,n,i){return new(n||(n=Promise))((function(o,s){function a(t){try{r(i.next(t))}catch(t){s(t)}}function c(t){try{r(i.throw(t))}catch(t){s(t)}}function r(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,c)}r((i=i.apply(t,e||[])).next())}))};const H=" ",O="◯",D="⨯";var N,P;(P=N||(N={})).mark="mark",P.reset="reset",P.noop="noop";const F=()=>[[H,H,H],[H,H,H],[H,H,H]];const R=(0,s.happ)((function(){return{board:F(),turn:0}}),(function(t){return[["div.w3-content",[["h1",["Tic-Tac-Toe Demo"]],["div.w3-center",[["p.w3-xlarge",["Player: ",t.turn?D:O]],["div",t.board.map(((e,n)=>["div",e.map(((e,i)=>["button.w3-button.w3-white.w3-border.w3-border-gray",{styles:{fontFamily:"monospace",fontSize:"300%",display:"inline-block",width:"2em",height:"2em"},on:e===H?["click",N.mark,{x:i,y:n,turn:t.turn}]:["click",N.noop]},e]))]))],["p",[["button.w3-button.w3-blue",{on:["click",N.reset]},"Reset"]]]]]]]]}),(function(t,e,n){return L(this,void 0,void 0,(function*(){switch(console.log("action",t),t.type){case N.reset:e.board=F();break;case N.mark:e.board[t.data.y][t.data.x]=t.data.turn?D:O,e.turn=t.data.turn?0:1}}))}));self.app=R;
|
|
2
|
+
//# sourceMappingURL=hsml-app-tictactoe_demo.399f8e69.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"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","sources":["src/hsml-app.ts","demo/hsml-app-tictactoe_demo.ts"],"sourcesContent":["import { HAttrOnData, HAttrOnDataFnc, HElement, HElements, HHandlerCtx } from \"./hsml\";\nimport { hsmls2idomPatch } from \"./hsml-idom\";\n\nconst log = console.log;\nconst error = console.error;\nconst warn = console.warn;\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 HAppActionType =\n | \"init\"\n | \"mount\"\n | \"umount\"\n | \"action\"\n | \"elementAttr\";\n\nexport enum HAppActions {\n init = \"init\",\n mount = \"mount\",\n umount = \"umount\",\n action = \"action\",\n elementAttr = \"elementAttr\"\n}\n\nexport interface HAction<HActionType extends string> {\n type: HActionType | HAppActionType | HAppActions;\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>,\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 = \"HApp action:\";\nconst msgDispatch = \"HApp dispatch:\";\nconst msgRender = \"HApp render:\";\nconst msgUpdate = \"HApp update:\";\n\nexport function happ<State, HActionType extends string>(\n state: HState<State>,\n view: HView<State, HActionType>,\n dispatcher: HDispatcher<State, HActionType>,\n element: Element | string | null = document.body\n) {\n return new HApp<State, HActionType>(state, view, dispatcher, element);\n}\n\n// HAppI\n\nexport type Class<T = object> = new (...args: any[]) => T;\n\nexport interface HAppI<State, HActionType extends string> {\n state(): State;\n view(state: State): HElements<HActionType>;\n dispatcher(\n // this: HApp<State, HActionType>,\n action: HAction<HActionType>,\n state: State,\n dispatch: HDispatch<HActionType>\n ): Promise<void>;\n}\n\nexport function happi<State, HActionType extends string>(\n hAppI: Class<HAppI<State, HActionType>>,\n element: Element | string | null = document.body\n) {\n const hapi = new hAppI();\n return new HApp<State, HActionType>(\n hapi.state,\n hapi.view,\n hapi.dispatcher,\n element\n );\n}\n\n// HAppEl\n\nexport function happel<State, HActionType extends string>(\n elementName: string,\n elementAttrs: string[],\n state: HState<State>,\n view: HView<State, HActionType>,\n dispatcher: HDispatcher<State, HActionType>\n): void {\n customElements.define(\n elementName,\n class HAppElement extends HTMLElement {\n static get observedAttributes() {\n return elementAttrs;\n }\n\n private _happel: HApp<State, HActionType>;\n\n constructor() {\n super();\n this._happel = new HApp<State, HActionType>(\n state,\n view,\n dispatcher\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(\"elementAttr\", {\n attrName,\n oldVal,\n newVal,\n });\n }\n }\n );\n}\n\nconst HAPP = \"happ\";\n\nexport class HApp<State, HActionType extends string> implements HHandlerCtx<HActionType> {\n static debug = false;\n\n readonly state: State;\n readonly view: HView<State, HActionType>;\n readonly dispatcher: HDispatcher<State, HActionType>;\n\n readonly customElement?: HTMLElement; // happ custom html element\n\n readonly dom?: HTMLElement;\n readonly refs: { [key: string]: HTMLElement } = {};\n\n private _updateSched?: number;\n\n // private _onDispatch?: HDispatcher<State>;\n\n private _windowEventListener?: (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 = document.body\n ) {\n this.state = state();\n this.view = view;\n this.dispatcher = dispatcher ?? (async (a) => log(msgAction, a.type, a.data));\n this._dispatchAction(\"init\", this).then(() => this.mount(element));\n }\n\n dispatch: HDispatch<HActionType> = async (\n type: HActionType | HAppActionType,\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 | HAppActionType,\n data?: any,\n event?: Event,\n scope?: HDispatchScope\n ): Promise<void> {\n if (HApp.debug) {\n log(msgAction, { type, data, event });\n const t0 = performance.now();\n await this._dispatch(type, data, event, scope);\n const t1 = performance.now();\n log(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 | HAppActionType,\n data: any,\n event?: Event,\n scope?: HDispatchScope\n ) {\n try {\n await this.dispatcher(\n { type: type as HActionType, data, event },\n this.state,\n this.dispatch\n );\n this.update();\n scope === \"element\" && this._dispatchElement(type, data);\n scope === \"window\" && this._dispatchWindow(type, data);\n } catch (e) {\n error(msgDispatch, e);\n }\n }\n\n private _dispatchElement: HDispatch<HActionType> = async (\n type: HActionType | HAppActionType,\n data?: any\n ): Promise<void> => {\n this.customElement && elementDispatchCustomEvent(this.customElement, \"action\", { type, data });\n !this.customElement && this.dom && elementDispatchCustomEvent(this.dom, \"action\", { type, data });\n // this.customElement && elementDispatchCustomEvent(this.customElement, type, data);\n // !this.customElement && this.dom && elementDispatchCustomEvent(this.dom, type, data);\n // this._onDispatch?.({ type, data, event }, this.state, this.dispatch);\n }\n\n private _dispatchWindow: HDispatch<HActionType> = async (\n type: HActionType | HAppActionType,\n data?: any): Promise<void> => {\n window.dispatchEvent(new CustomEvent(\"action\", { detail: { type, data } }));\n }\n\n windowDispatchOn() {\n if (!this._windowEventListener) {\n this._windowEventListener = (event: Event) => {\n const action = (event as CustomEvent).detail as HAction<HActionType>;\n this._dispatchAction(action.type, action.data);\n };\n window.addEventListener(\"action\", this._windowEventListener);\n } else {\n warn(\"windowEventListener olready setted\");\n }\n }\n\n windowDispatchOff() {\n if (this._windowEventListener) {\n window.removeEventListener(\"action\", this._windowEventListener);\n }\n }\n\n render = (): HElements<HActionType> => {\n if (HApp.debug) {\n const t0 = performance.now();\n let hsmls;\n try {\n hsmls = this.view(this.state);\n } catch (e) {\n error(msgRender, e);\n }\n const t1 = performance.now();\n log(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 error(msgRender, e);\n }\n return hsmls ?? [];\n }\n }\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);\n }\n }\n this._dispatchAction(actionType, data, event);\n }\n\n mount = (e: Element | string | null = document.body): this => {\n const el = (typeof e === \"string\")\n ? document.getElementById(e) ?? document.body\n : e ?? document.body;\n if ((el as any)[HAPP]) {\n const a = (el as any)[HAPP] as HApp<State, HActionType>;\n a.umount();\n }\n if (!this.dom) {\n (this as any).dom = el;\n (el as any)[HAPP] = this;\n const hsmls = (this as any).render();\n updateDom<HActionType>(el, hsmls, this);\n this._dispatchAction(\"mount\", this.dom);\n }\n return this;\n }\n\n umount = (): this => {\n if (this.dom) {\n this._dispatchAction(\"umount\", this.dom);\n if (this.dom.hasAttribute(HAPP)) {\n this.dom.removeAttribute(HAPP);\n }\n const aNodes = this.dom.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.dom.firstChild /*.hasChildNodes()*/) {\n this.dom.removeChild(this.dom.firstChild);\n }\n delete (this.dom as any).happ;\n (this as any).dom = undefined;\n }\n return this;\n }\n\n update = (): this => {\n if (this.dom && !this._updateSched) {\n this._updateSched = schedule(() => {\n if (this.dom) {\n const hsmls = this.render();\n updateDom<HActionType>(this.dom, hsmls, this);\n }\n this._updateSched = undefined;\n });\n }\n return this;\n }\n\n toHsml = (): HElement<HActionType> => {\n if (this.dom) {\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.dom) {\n (this as any).dom = e;\n (e as any).happ = this;\n this._dispatchAction(\"mount\", this.dom);\n }\n });\n return [\"div\", hsmls];\n }\n\n toHtml = (): string => {\n return this.dom ? this.dom.outerHTML : \"\";\n }\n\n}\n\nfunction updateDom<HActionType extends string>(\n el: Element,\n hsml: HElements<HActionType>,\n ctx: HHandlerCtx<HActionType>\n): void {\n if (HApp.debug) {\n const t0 = performance.now();\n hsmls2idomPatch(el, hsml, ctx);\n const t1 = performance.now();\n log(msgUpdate, `${t1 - t0} ms`, el);\n } else {\n hsmls2idomPatch(el, hsml, ctx);\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\nfunction formData(e: Event): { [k: string]: string | number | boolean | null | Array<string | null> } | string | number | boolean | null | Array<string | null> {\n const el = e.target as HTMLElement;\n switch (el.nodeName) {\n case \"FORM\":\n (e as Event).preventDefault();\n const els = (el as HTMLFormElement).elements;\n const data = {} as { [k: string]: string | null | Array<string | null> };\n for (let i = 0; i < els.length; i++) {\n const d = formInputData(els[i]);\n if (typeof d === \"object\") {\n const names = Object.keys(d as object);\n if (names.length) {\n const name = names[0];\n const value = (d as any)[name];\n if (data[name] === undefined) {\n data[name] = value;\n } else if (typeof data[name] === \"string\" || data[name] instanceof String) {\n if (value instanceof Array) {\n data[name] = [data[name] as string, ...value];\n } else {\n data[name] = [data[name] as string, value as string];\n }\n } else if (data[name] instanceof Array) {\n if (value instanceof Array) {\n data[name] = (data[name] as Array<string | null>).concat(value);\n } else {\n (data[name] as Array<string | null>).push(value);\n }\n } else {\n if (value instanceof Array) {\n data[name] = [data[name] as string, ...value];\n } else {\n data[name] = [data[name] as string, value];\n }\n }\n if (data[name] instanceof Array) {\n data[name] = (data[name] as Array<string | null>)\n .filter(d => d !== null);\n if ((els[i] as HTMLInputElement).type === \"radio\") {\n data[name] = (data[name] as Array<string | null>).length\n ? (data[name] as Array<string | null>)[0]\n : null;\n }\n }\n }\n }\n }\n return data;\n default:\n return formInputData(el);\n }\n}\n\nfunction formInputData(el: Element): { [k: string]: string | number | boolean | null | Array<string | null> } | string | number | boolean | null | Array<string | null> {\n let data: { [k: string]: string | number | boolean | null | Array<string | null> } | string | number | boolean | null | Array<string | null> = null;\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 \"number\":\n case \"search\":\n case \"url\":\n case \"tel\":\n case \"color\":\n case \"date\":\n case \"datetime-local\":\n case \"month\":\n case \"range\":\n case \"time\":\n case \"week\":\n case \"submit\":\n case \"button\":\n if (iel.name) {\n data = { [iel.name]: iel.value };\n } else {\n data = iel.value;\n }\n break;\n case \"radio\":\n if (iel.name) {\n data = { [iel.name]: iel.checked ? iel.value : null };\n } else {\n data = iel.checked ? iel.value : null;\n }\n break;\n case \"checkbox\":\n if (iel.value === \"on\") { // value not set in element\n if (iel.name) {\n data = { [iel.name]: iel.checked };\n } else {\n data = iel.checked;\n }\n } else {\n if (iel.name) {\n data = { [iel.name]: iel.checked\n ? String(iel.value)\n : null };\n } else {\n data = iel.checked\n ? String(iel.value)\n : null;\n }\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 if (sel.name) {\n data = { [sel.name]: values };\n } else {\n data = values;\n }\n } else {\n if (sel.name) {\n data = { [sel.name]: sel.value };\n } else {\n data = sel.value;\n }\n }\n break;\n case \"TEXTAREA\":\n const tel = el as HTMLTextAreaElement;\n if (tel.name) {\n data = { [tel.name]: tel.value };\n } else {\n data = tel.value;\n }\n break;\n case \"BUTTON\":\n const bel = el as HTMLButtonElement;\n if (bel.name) {\n data = { [bel.name]: bel.value };\n } else {\n data = bel.value;\n }\n break;\n }\n return data;\n}\n","import { HElement, HElements } from \"../src/hsml\";\nimport { HAction, happ, HDispatch } from \"../src/hsml-app\";\n\nconst NBSP = \"\\u00A0\";\nconst CIRC = \"\\u25EF\";\nconst CROS = \"\\u2A2F\";\n\ninterface State {\n board: string[][];\n turn: number;\n}\n\nconst enum Actions {\n mark = \"mark\",\n reset = \"reset\",\n noop = \"noop\"\n}\n\nconst boardInit = () => [\n [NBSP, NBSP, NBSP],\n [NBSP, NBSP, NBSP],\n [NBSP, NBSP, NBSP]\n];\n\nfunction state(): State {\n return {\n board: boardInit(),\n turn: 0\n };\n}\n\nfunction view(state: State): HElements<Actions> {\n return [\n [\"div.w3-content\", [\n [\"h1\", [\"Tic-Tac-Toe Demo\"]],\n [\"div.w3-center\", [\n [\"p.w3-xlarge\", [\n \"Player: \", state.turn ? CROS : CIRC,\n ]],\n [\"div\", state.board.map<HElement<Actions>>((row, y) =>\n [\"div\", row.map<HElement<Actions>>((col, x) =>\n [\"button.w3-button.w3-white.w3-border.w3-border-gray\",\n {\n styles: {\n fontFamily: \"monospace\",\n fontSize: \"300%\",\n display: \"inline-block\",\n width: \"2em\",\n height: \"2em\"\n },\n on: (col === NBSP)\n ? [\"click\", Actions.mark, { x, y, turn: state.turn }]\n : [\"click\", Actions.noop]\n },\n col\n ])\n ])\n ],\n [\"p\", [\n [\"button.w3-button.w3-blue\", { on: [\"click\", Actions.reset] }, \"Reset\"]\n ]]\n ]]\n ]]\n ];\n}\n\n\nasync function dispatcher(action: HAction<Actions>, state: State, dispatch: HDispatch<Actions>): Promise<void> {\n console.log(\"action\", action);\n\n switch (action.type) {\n\n case Actions.reset:\n state.board = boardInit();\n break;\n\n case Actions.mark:\n state.board[action.data.y][action.data.x] = action.data.turn ? CROS : CIRC;\n state.turn = action.data.turn ? 0 : 1;\n break;\n }\n}\n\nconst app = happ<State, Actions>(state, view, dispatcher);\n\n(self as any).app = app;\n"],"names":["$fe5fa9c04fc86188$var$log","console","log","$fe5fa9c04fc86188$var$error","error","$fe5fa9c04fc86188$var$warn","warn","$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$msgUpdate","$fe5fa9c04fc86188$export$eb8950696418f795","state","view","dispatcher","element","document","body","$fe5fa9c04fc86188$export$8cfef5dc37c46888","$fe5fa9c04fc86188$export$e905700d74a7763f","hAppI","hapi","$fe5fa9c04fc86188$export$1cfc54b3834d3c50","elementName","elementAttrs","customElements","define","HTMLElement","observedAttributes","connectedCallback","this","attachShadow","mode","_happel","mount","shadowRoot","disconnectedCallback","umount","adoptedCallback","update","attributeChangedCallback","attrName","oldVal","newVal","dispatch","constructor","super","customElement","$fe5fa9c04fc86188$var$HAPP","_dispatchAction","type","data","event","scope","debug","t0","performance","now","_dispatch","t1","_dispatchElement","_dispatchWindow","e","windowDispatchOn","_windowEventListener","action","detail","addEventListener","windowDispatchOff","removeEventListener","refs","$fe5fa9c04fc86188$var$__awaiter","undefined","$fe5fa9c04fc86188$var$elementDispatchCustomEvent","dom","dispatchEvent","CustomEvent","render","hsmls","actionCb","actionType","Function","el","target","nodeName","preventDefault","els","elements","i","length","d","$fe5fa9c04fc86188$var$formInputData","names","Object","keys","name","value","String","Array","concat","push","filter","$fe5fa9c04fc86188$var$formData","_a","getElementById","$fe5fa9c04fc86188$var$updateDom","hasAttribute","removeAttribute","aNodes","querySelectorAll","a","happ","firstChild","removeChild","_updateSched","toHsml","skip","toHtml","outerHTML","then","hsml","ctx","$hrCkK","hsmls2idomPatch","_b","call","iel","checked","sel","multiple","values","from","selectedOptions","map","o","tel","bel","$28c4e665e35b51d0$var$NBSP","$28c4e665e35b51d0$var$CIRC","$28c4e665e35b51d0$var$CROS","$28c4e665e35b51d0$var$Actions","Actions","$28c4e665e35b51d0$var$boardInit","$28c4e665e35b51d0$var$app","$fe5fa9c04fc86188$exports","board","turn","row","y","col","x","styles","fontFamily","fontSize","display","width","height","on","mark","noop","reset","self","app"],"version":3,"file":"hsml-app-tictactoe_demo.399f8e69.js.map"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="en"><head><script nomodule defer src="hsml-app-form-validation_demo.
|
|
1
|
+
<!DOCTYPE html><html lang="en"><head><script nomodule defer src="hsml-app-form-validation_demo.fdcc0b2d.js"></script><script type="module" src="hsml-app-form-validation_demo.c6856b02.js"></script><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>hsml tictactoe demo</title><link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css"><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Raleway"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"></head><body> <div id="app"></div> <script type="module" src="hsml-app-tictactoe_demo.399f8e69.js"></script><script src="hsml-app-tictactoe_demo.03d8363f.js" nomodule defer></script> </body></html>
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
!function(){function t(t,e,n,i){Object.defineProperty(t,e,{get:n,set:i,enumerable:!0,configurable:!0})}var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},n={},i={},o=e.parcelRequirede31;null==o&&((o=function(t){if(t in n)return n[t].exports;if(t in i){var e=i[t];delete i[t];var o={id:t,exports:{}};return n[t]=o,e.call(o.exports,o,o.exports),o.exports}var s=new Error("Cannot find module '"+t+"'");throw s.code="MODULE_NOT_FOUND",s}).register=function(t,e){i[t]=e},e.parcelRequirede31=o);var s={};t(s,"HAppActions",(function(){return h}),(function(t){return h=t})),t(s,"HDispatchScopes",(function(){return m}),(function(t){return m=t})),t(s,"happ",(function(){return _}),(function(t){return _=t})),t(s,"HApp",(function(){return S}),(function(t){return S=t})),t(s,"happi",(function(){return g}),(function(t){return g=t})),t(s,"happel",(function(){return E}),(function(t){return E=t}));var a=o("8IJ2T"),c=function(t,e,n,i){return new(n||(n=Promise))((function(o,s){function a(t){try{r(i.next(t))}catch(t){s(t)}}function c(t){try{r(i.throw(t))}catch(t){s(t)}}function r(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,c)}r((i=i.apply(t,e||[])).next())}))};const r=console.log,d=console.error,u=console.warn;var h,l,m,p;(l=h||(h={})).init="init",l.mount="mount",l.umount="umount",l.action="action",l.elementAttr="elementAttr",(p=m||(m={})).element="element",p.window="window";const f=window.requestAnimationFrame||function(t){window.setTimeout(t,1e3/60)},v=window.cancelAnimationFrame||function(t){window.clearTimeout(t)},w="HApp action:",y="HApp dispatch:",b="HApp render:",A="HApp update:";function _(t,e,n,i=document.body){return new S(t,e,n,i)}function g(t,e=document.body){const n=new t;return new S(n.state,n.view,n.dispatcher,e)}function E(t,e,n,i,o){customElements.define(t,class extends HTMLElement{static get observedAttributes(){return e}connectedCallback(){this.attachShadow({mode:"open"}),this._happel.mount(this.shadowRoot)}disconnectedCallback(){this._happel.umount()}adoptedCallback(){this._happel.update()}attributeChangedCallback(t,e,n){this._happel.dispatch("elementAttr",{attrName:t,oldVal:e,newVal:n})}constructor(){super(),this._happel=new S(n,i,o),this._happel.customElement=this}})}const k="happ";class S{_dispatchAction(t,e,n,i){return c(this,void 0,void 0,(function*(){if(S.debug){r(w,{type:t,data:e,event:n});const o=performance.now();yield this._dispatch(t,e,n,i);const s=performance.now();r(y,s-o+" ms",this.state)}else yield this._dispatch(t,e,n,i)}))}_dispatch(t,e,n,i){return c(this,void 0,void 0,(function*(){try{yield this.dispatcher({type:t,data:e,event:n},this.state,this.dispatch),this.update(),"element"===i&&this._dispatchElement(t,e),"window"===i&&this._dispatchWindow(t,e)}catch(t){d(y,t)}}))}windowDispatchOn(){this._windowEventListener?u("windowEventListener olready setted"):(this._windowEventListener=t=>{const e=t.detail;this._dispatchAction(e.type,e.data)},window.addEventListener("action",this._windowEventListener))}windowDispatchOff(){this._windowEventListener&&window.removeEventListener("action",this._windowEventListener)}constructor(t,e,n,i=document.body){this.refs={},this.dispatch=(t,e,n)=>c(this,void 0,void 0,(function*(){return this._dispatchAction(t,e,void 0,n)})),this._dispatchElement=(t,e)=>c(this,void 0,void 0,(function*(){this.customElement&&C(this.customElement,"action",{type:t,data:e}),!this.customElement&&this.dom&&C(this.dom,"action",{type:t,data:e})})),this._dispatchWindow=(t,e)=>c(this,void 0,void 0,(function*(){window.dispatchEvent(new CustomEvent("action",{detail:{type:t,data:e}}))})),this.render=()=>{if(S.debug){const t=performance.now();let e;try{e=this.view(this.state)}catch(t){d(b,t)}const n=performance.now();return r(b,n-t+" ms",e),null!=e?e:[]}{let t;try{t=this.view(this.state)}catch(t){d(b,t)}return null!=t?t:[]}},this.actionCb=(t,e,n)=>{void 0===(e=(null==e?void 0:e.constructor)===Function?e(n):e)&&n&&(e=n instanceof CustomEvent?n.detail:function(t){const e=t.target;if("FORM"===e.nodeName){t.preventDefault();const n=e.elements,i={};for(let t=0;t<n.length;t++){const e=T(n[t]);if("object"==typeof e){const o=Object.keys(e);if(o.length){const s=o[0],a=e[s];void 0===i[s]?i[s]=a:"string"==typeof i[s]||i[s]instanceof String?i[s]=a instanceof Array?[i[s],...a]:[i[s],a]:i[s]instanceof Array?a instanceof Array?i[s]=i[s].concat(a):i[s].push(a):i[s]=a instanceof Array?[i[s],...a]:[i[s],a],i[s]instanceof Array&&(i[s]=i[s].filter((t=>null!==t)),"radio"===n[t].type&&(i[s]=i[s].length?i[s][0]:null))}}}return i}return T(e)}(n)),this._dispatchAction(t,e,n)},this.mount=(t=document.body)=>{var e;const n="string"==typeof t?null!==(e=document.getElementById(t))&&void 0!==e?e:document.body:null!=t?t:document.body;if(n[k]){n[k].umount()}if(!this.dom){this.dom=n,n[k]=this;H(n,this.render(),this),this._dispatchAction("mount",this.dom)}return this},this.umount=()=>{if(this.dom){this._dispatchAction("umount",this.dom),this.dom.hasAttribute(k)&&this.dom.removeAttribute(k);const t=this.dom.querySelectorAll(`[${k}]`);for(let e=0;e<t.length;e++){const n=t[e].happ;null==n||n.umount()}for(;this.dom.firstChild;)this.dom.removeChild(this.dom.firstChild);delete this.dom.happ,this.dom=void 0}return this},this.update=()=>(this.dom&&!this._updateSched&&(this._updateSched=f((()=>{if(this.dom){const t=this.render();H(this.dom,t,this)}this._updateSched=void 0}))),this),this.toHsml=()=>{if(this.dom){if(!this._updateSched)return["div",{skip:!0}];v(this._updateSched),this._updateSched=void 0}const t=this.render();return t.push((t=>{this.dom||(this.dom=t,t.happ=this,this._dispatchAction("mount",this.dom))})),["div",t]},this.toHtml=()=>this.dom?this.dom.outerHTML:"",this.state=t(),this.view=e,this.dispatcher=null!=n?n:t=>c(this,void 0,void 0,(function*(){return r(w,t.type,t.data)})),this._dispatchAction("init",this).then((()=>this.mount(i)))}}function H(t,e,n){if(S.debug){const i=performance.now();(0,a.hsmls2idomPatch)(t,e,n);const o=performance.now();r(A,o-i+" ms",t)}else(0,a.hsmls2idomPatch)(t,e,n)}function C(t,e,n){var i,o;null==t||t.dispatchEvent(new CustomEvent(e,{detail:n})),null===(o=(i=t)[`on${e}`])||void 0===o||o.call(i,new CustomEvent(e,{detail:n}))}function T(t){let e=null;switch(t.nodeName){case"INPUT":const n=t;switch(n.type){case"text":case"hidden":case"password":case"email":case"number":case"search":case"url":case"tel":case"color":case"date":case"datetime-local":case"month":case"range":case"time":case"week":case"submit":case"button":e=n.name?{[n.name]:n.value}:n.value;break;case"radio":e=n.name?{[n.name]:n.checked?n.value:null}:n.checked?n.value:null;break;case"checkbox":e="on"===n.value?n.name?{[n.name]:n.checked}:n.checked:n.name?{[n.name]:n.checked?String(n.value):null}:n.checked?String(n.value):null}break;case"SELECT":const i=t;if(i.multiple){const t=Array.from(i.selectedOptions).map((t=>t.value));e=i.name?{[i.name]:t}:t}else e=i.name?{[i.name]:i.value}:i.value;break;case"TEXTAREA":const o=t;e=o.name?{[o.name]:o.value}:o.value;break;case"BUTTON":const s=t;e=s.name?{[s.name]:s.value}:s.value}return e}S.debug=!1;var x=function(t,e,n,i){return new(n||(n=Promise))((function(o,s){function a(t){try{r(i.next(t))}catch(t){s(t)}}function c(t){try{r(i.throw(t))}catch(t){s(t)}}function r(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,c)}r((i=i.apply(t,e||[])).next())}))};s.HApp.debug=!0,window.app=new(0,s.HApp)((function(){return{message:"",json:""}}),(function(t){return[["p",["Greeting: ",t.message]],["p",[["button",{on:["click","say","Hello"]},"Say Hello"]," ",["button",{on:["click","say","Hi"]},"Say Hi"]]],["p",[["button",{on:["click","fetch"]},"Server fetch time"],["pre",t.json]]]]}),(function(t,e,n){return x(this,void 0,void 0,(function*(){switch(t.type){case"init":case"mount":case"umount":case"action":case"elementAttr":break;case"say":e.message=t.data;break;case"fetch":try{const t=yield fetch("http://date.jsontest.com"),n=yield t.json();e.json=JSON.stringify(n,null,4)}catch(t){e.json=String(t)}}}))}))}();
|
|
2
|
+
//# sourceMappingURL=hsml-app_demo.44aa1072.js.map
|