peryl 1.5.2 → 1.5.4
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 +31 -17
- package/demo/hsml-app-form-validation_demo.html +1 -0
- package/demo/hsml-app-form-validation_demo.ts +22 -23
- package/demo/hsml-app-form_demo.html +1 -0
- package/demo/hsml-app-form_demo.ts +24 -20
- package/demo/hsml-app-test_demo.ts +36 -41
- package/demo/hsml-app-tictactoe_demo.ts +17 -16
- package/demo/hsml-app_demo.html +1 -0
- package/demo/hsml-app_demo.ts +16 -16
- package/demo/hsml-appel_demo.html +7 -0
- package/demo/hsml-appel_demo.ts +47 -27
- package/demo/hsml-appi_demo.ts +15 -22
- package/demo/hsml_demo.ts +27 -22
- package/demo/js/hsml-app-js-happi_demo.html +28 -21
- package/demo/js/hsml-app-js_demo.html +15 -17
- package/dist/browser-esmodule/encode.js.map +1 -1
- package/dist/browser-esmodule/hsml-app.js +114 -123
- 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 +118 -127
- 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.8e406f15.js +2 -0
- package/dist/demo/hsml-app-form-validation_demo.8e406f15.js.map +1 -0
- package/dist/demo/hsml-app-form-validation_demo.9a95cff3.js +2 -0
- package/dist/demo/hsml-app-form-validation_demo.9a95cff3.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.950b2a09.js +2 -0
- package/dist/demo/hsml-app-form_demo.950b2a09.js.map +1 -0
- package/dist/demo/hsml-app-form_demo.ea3af725.js +2 -0
- package/dist/demo/hsml-app-form_demo.ea3af725.js.map +1 -0
- package/dist/demo/hsml-app-form_demo.html +1 -1
- package/dist/demo/hsml-app-test_demo.36a210b8.js +2 -0
- package/dist/demo/hsml-app-test_demo.36a210b8.js.map +1 -0
- package/dist/demo/hsml-app-test_demo.6ab4ea94.js +2 -0
- package/dist/demo/hsml-app-test_demo.6ab4ea94.js.map +1 -0
- package/dist/demo/hsml-app-test_demo.html +1 -1
- package/dist/demo/hsml-app-tictactoe_demo.7a91c368.js +2 -0
- package/dist/demo/hsml-app-tictactoe_demo.7a91c368.js.map +1 -0
- package/dist/demo/hsml-app-tictactoe_demo.97905c2f.js +2 -0
- package/dist/demo/hsml-app-tictactoe_demo.97905c2f.js.map +1 -0
- package/dist/demo/hsml-app-tictactoe_demo.html +1 -1
- package/dist/demo/hsml-app_demo.b5c1d27d.js +2 -0
- package/dist/demo/hsml-app_demo.b5c1d27d.js.map +1 -0
- package/dist/demo/hsml-app_demo.bbebbbcf.js +2 -0
- package/dist/demo/hsml-app_demo.bbebbbcf.js.map +1 -0
- package/dist/demo/hsml-app_demo.html +1 -1
- package/dist/demo/hsml-appel_demo.4d9e135c.js +2 -0
- package/dist/demo/hsml-appel_demo.4d9e135c.js.map +1 -0
- package/dist/demo/hsml-appel_demo.7ddb6fb3.js +2 -0
- package/dist/demo/hsml-appel_demo.7ddb6fb3.js.map +1 -0
- package/dist/demo/hsml-appel_demo.html +1 -1
- package/dist/demo/hsml-appi_demo.e5e28a65.js +2 -0
- package/dist/demo/hsml-appi_demo.e5e28a65.js.map +1 -0
- package/dist/demo/hsml-appi_demo.fef950c1.js +2 -0
- package/dist/demo/hsml-appi_demo.fef950c1.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 +63 -42
- package/dist/hsml-app.js +110 -117
- 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 +305 -197
- package/src/hsml-convert.ts +8 -8
- package/src/hsml-dom.ts +18 -18
- package/src/hsml-h.ts +10 -10
- package/src/hsml-html.ts +19 -19
- package/src/hsml-idom.ts +25 -25
- package/src/hsml.ts +46 -143
- package/demo/hsml-appc_demo.html +0 -16
- package/demo/hsml-appc_demo.ts +0 -49
- package/dist/demo/hsml-app-form-validation_demo.0b03b743.js +0 -2
- package/dist/demo/hsml-app-form-validation_demo.0b03b743.js.map +0 -1
- package/dist/demo/hsml-app-form-validation_demo.b3a5c810.js +0 -2
- package/dist/demo/hsml-app-form-validation_demo.b3a5c810.js.map +0 -1
- package/dist/demo/hsml-app-form-validation_demo.d3925067.js +0 -2
- package/dist/demo/hsml-app-form-validation_demo.d3925067.js.map +0 -1
- package/dist/demo/hsml-app-form-validation_demo.f757d763.js +0 -2
- package/dist/demo/hsml-app-form-validation_demo.f757d763.js.map +0 -1
- package/dist/demo/hsml-app-form_demo.007ffcaa.js +0 -2
- package/dist/demo/hsml-app-form_demo.007ffcaa.js.map +0 -1
- package/dist/demo/hsml-app-form_demo.a034239d.js +0 -2
- package/dist/demo/hsml-app-form_demo.a034239d.js.map +0 -1
- package/dist/demo/hsml-app-test_demo.35c14dc9.js +0 -2
- package/dist/demo/hsml-app-test_demo.35c14dc9.js.map +0 -1
- package/dist/demo/hsml-app-test_demo.3c7e16ae.js +0 -2
- package/dist/demo/hsml-app-test_demo.3c7e16ae.js.map +0 -1
- package/dist/demo/hsml-app-tictactoe_demo.5f4861c1.js +0 -2
- package/dist/demo/hsml-app-tictactoe_demo.5f4861c1.js.map +0 -1
- package/dist/demo/hsml-app-tictactoe_demo.7deeabad.js +0 -2
- package/dist/demo/hsml-app-tictactoe_demo.7deeabad.js.map +0 -1
- package/dist/demo/hsml-app_demo.87d83c29.js +0 -2
- package/dist/demo/hsml-app_demo.87d83c29.js.map +0 -1
- package/dist/demo/hsml-app_demo.941a13a6.js +0 -2
- package/dist/demo/hsml-app_demo.941a13a6.js.map +0 -1
- package/dist/demo/hsml-appc_demo.0234ff15.js +0 -2
- package/dist/demo/hsml-appc_demo.0234ff15.js.map +0 -1
- package/dist/demo/hsml-appc_demo.f5783031.js +0 -2
- package/dist/demo/hsml-appc_demo.f5783031.js.map +0 -1
- package/dist/demo/hsml-appc_demo.html +0 -1
- package/dist/demo/hsml-appel_demo.0e8a4d4c.js +0 -2
- package/dist/demo/hsml-appel_demo.0e8a4d4c.js.map +0 -1
- package/dist/demo/hsml-appel_demo.1a5c2c26.js +0 -2
- package/dist/demo/hsml-appel_demo.1a5c2c26.js.map +0 -1
- package/dist/demo/hsml-appi_demo.2c3fb511.js +0 -2
- package/dist/demo/hsml-appi_demo.2c3fb511.js.map +0 -1
- package/dist/demo/hsml-appi_demo.427fdebd.js +0 -2
- package/dist/demo/hsml-appi_demo.427fdebd.js.map +0 -1
- package/dist/demo/hsml_demo.33f28c29.js +0 -2
- package/dist/demo/hsml_demo.33f28c29.js.map +0 -1
- package/dist/demo/hsml_demo.ff950ba1.js.map +0 -1
- package/dist/demo/validators_demo.252e13a6.js.map +0 -1
- package/dist/demo/validators_demo.66893723.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":"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","sources":["src/hsml-app.ts","demo/hsml-app-form_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;\nexport type HView<STATE> = (state: STATE) => HElements;\nexport type HView1<STATE> = (state: STATE) => HElement;\n\nexport interface HAction {\n type: string;\n data?: any;\n event?: Event;\n}\n\nexport type HDispatch = (type: HAction[\"type\"],\n data?: HAction[\"data\"],\n event?: HAction[\"event\"]) => Promise<void>;\n\nexport type HUpdate = () => void;\n\nexport type HDispatcher<STATE> = (action: HAction, state: STATE, dispatch: HDispatch) => Promise<void>;\n// export type HDispatcher<STATE> = (this: HApp<STATE>, action: HAction, state: STATE, dispatch: HDispatch) => Promise<void>;\n\nexport enum HAppAction {\n _init = \"_init\",\n _mount = \"_mount\",\n _umount = \"_umount\",\n _element = \"_element\"\n}\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>(state: HState<STATE>,\n view: HView<STATE>,\n dispatcher: HDispatcher<STATE>,\n element: Element | string | null = document.body) {\n return new HApp<STATE>(state, view, dispatcher, element);\n}\n\n// HAppI\n\nexport type Class<T = object> = new (...args: any[]) => T;\n\nexport interface HAppI<STATE> {\n state(): STATE;\n view(state: STATE): HElements;\n dispatcher(action: HAction, state: STATE, dispatch: HDispatch): Promise<void>;\n // dispatcher(this: HApp<STATE>, action: HAction, state: STATE, dispatch: HDispatch): Promise<void>;\n}\n\nexport function happi<STATE>(hAppI: Class<HAppI<STATE>>, e: Element | string | null = document.body) {\n const hapi = new hAppI();\n return new HApp<STATE>(hapi.state, hapi.view, hapi.dispatcher, e);\n}\n\n// HAppEl\n\nexport function happel<STATE>(elementName: string,\n elementAttrs: string[],\n state: HState<STATE>,\n view: HView<STATE>,\n dispatcher: HDispatcher<STATE>): void {\n customElements.define(elementName, class HAppElement extends HTMLElement {\n\n static get observedAttributes() {\n return elementAttrs;\n }\n\n private _happel: HApp<STATE>;\n\n constructor() {\n super();\n this._happel = new HApp<STATE>(state, view, dispatcher);\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(attrName: string, oldVal: string | null, newVal: string | null) {\n this._happel.dispatch(HAppAction._element, { attrName, oldVal, newVal });\n }\n\n });\n}\n\n// HAppC\n\nexport type HController<State> = (this: HApp<State>,\n data?: HAction[\"data\"],\n event?: HAction[\"event\"]) => void;\n\nexport type HControllers<State, TypeofActionEnum> = { [actionType in keyof TypeofActionEnum]?: HController<State>; };\n\nexport function controllersDdispatcher<State, TyopeofActionEnum>(controllers: HControllers<State, TyopeofActionEnum>): HDispatcher<State> {\n return async function (this: HApp<State>, action) {\n const controller = controllers[action.type as keyof TyopeofActionEnum];\n if (controller) {\n controller.apply<HApp<State>, [any?, Event?], void>(this, [action.data, action.event]);\n } else {\n warn(\"no controller for action\", action);\n }\n };\n}\n\nconst HAPP = \"happ\";\n\nexport class HApp<STATE> implements HHandlerCtx {\n\n static debug = false;\n\n readonly state: STATE;\n readonly view: HView<STATE>;\n readonly dispatcher: HDispatcher<STATE>;\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(state: HState<STATE>, view: HView<STATE>, dispatcher?: HDispatcher<STATE>, e: Element | string | null = document.body) {\n this.state = state();\n this.view = view;\n this.dispatcher = dispatcher ?? (async (a) => log(msgAction, a.type, a.data));\n this.dispatch(HAppAction._init, this).then(() => this.mount(e));\n }\n\n private async _dispatch(type: string, data: any, event: Event | undefined) {\n try {\n await this.dispatcher({ type, data, event }, this.state, this.dispatch);\n this._onDispatch?.({ type, data, event }, this.state, this.dispatch);\n this.dom && elementDispatchCustomEvent(this.dom, HAPP, { type, data, event });\n this.customElement && elementDispatchCustomEvent(this.customElement, type, data);\n !this.customElement && this.dom && elementDispatchCustomEvent(this.dom, type, data);\n this.update();\n } catch (e) {\n error(msgDispatch, e);\n }\n }\n\n onDispatch = (dispatcher: HDispatcher<STATE>): this => {\n this._onDispatch = dispatcher;\n return this;\n }\n\n dispatch: HDispatch = async (type: string, data?: any, event?: Event): Promise<void> => {\n if (HApp.debug) {\n log(msgAction, { type, data, event });\n const t0 = performance.now();\n await this._dispatch(type, data, event);\n const t1 = performance.now();\n log(msgDispatch, `${t1 - t0} ms`, this.state);\n } else {\n await this._dispatch(type, data, event);\n }\n }\n\n windowDispatch: HDispatch = async (type: string, data?: any, event?: Event): Promise<void> => {\n window.dispatchEvent(new CustomEvent(HAPP, { 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;\n this.dispatch(action.type, action.data, event);\n };\n window.addEventListener(HAPP, this._windowEventListener);\n } else {\n warn(\"windowEventListener olready setted\");\n }\n }\n\n windowDispatchOff() {\n if (this._windowEventListener) {\n window.removeEventListener(HAPP, this._windowEventListener);\n }\n }\n\n render = (): HElements => {\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 = (action: string, 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.dispatch(action, 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>;\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(el, hsmls, this);\n this.dispatch(HAppAction._mount, this.dom);\n }\n return this;\n }\n\n umount = (): this => {\n if (this.dom) {\n this.dispatch(HAppAction._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>;\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(this.dom, hsmls, this);\n }\n this._updateSched = undefined;\n });\n }\n return this;\n }\n\n toHsml = (): HElement => {\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.dispatch(HAppAction._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(el: Element, hsml: HElements, ctx: HHandlerCtx): 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(el: HTMLElement, type: string, data: any) {\n el?.dispatchEvent(new CustomEvent(type, { detail: data }));\n (el as any)[`on${type.toLowerCase()}`]?.(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\n// export const formInputData = <STATE>(dispatcher: Actions<STATE>): Actions<STATE> =>\n// (app: App<STATE>, action: string | number, data?: any, event?: Event): void => {\n// if (data === undefined && event) {\n// data = inputEventData(event);\n// }\n// dispatcher(app, action, data, event);\n// };\n\n// // Decorator\n// export function FormInputData() {\n// return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {\n// const method = descriptor.value;\n// descriptor.value = formInputData(method);\n// return descriptor;\n// };\n// }\n","import { HElement, HElements, hjoin } from \"../src/hsml\";\nimport { happ, HAppAction, HDispatcher, HState, HView } from \"../src/hsml-app\";\n\ninterface FormData {\n name: string;\n born: string;\n children: number;\n married: boolean;\n gender: string;\n sport: string;\n}\n\ninterface FormState {\n title: string;\n data: FormData;\n genders: {\n label: string;\n value: string;\n }[];\n sports: string[];\n}\n\nconst formState: HState<FormState> = function () {\n return {\n title: \"HSML App Form\",\n data: {\n name: \"Ema\",\n // born: \"\",\n born: datetimeLocal(new Date()),\n children: 0,\n married: false,\n gender: \"female\",\n sport: \"gymnastics\"\n },\n genders: [\n { label: \"Male\", value: \"male\" },\n { label: \"Female\", value: \"female\" }\n ],\n sports: [\"football\", \"gymnastics\"]\n };\n};\n\nenum FormAction {\n change = \"form-change\",\n submit = \"form-submit\"\n}\n\nconst formView: HView<FormState> = function (state): HElements {\n return [\n [\"div.w3-content.w3-light-gray\", [\n [\"div.w3-container\", [\n [\"h1\", state.title],\n [\"form.w3-panel\",\n {\n on: [\n [\"change\", FormAction.change],\n [\"submit\", FormAction.submit]\n ]\n },\n [\n [\"p\", [\n [\"label\", [\"Name\",\n [\"input.w3-input\", {\n type: \"text\",\n name: \"name\",\n required: true,\n minlength: 3,\n maxlength: 5,\n value: state.data.name\n }]\n ]]\n ]],\n [\"p\", [\n [\"label\", [\"Born\",\n [\"input.w3-input\", {\n type: \"datetime-local\",\n name: \"born\",\n required: true,\n max: datetimeLocal(new Date()),\n value: state.data.born,\n }]\n ]]\n ]],\n [\"p\", [\n [\"label\", [\"Children\",\n [\"input.w3-input\", {\n type: \"number\",\n name: \"children\",\n min: 0,\n max: 10,\n value: state.data.children\n }]\n ]]\n ]],\n [\"p\", [\n [\"label\", [\n [\"input#ch.w3-check\", {\n type: \"checkbox\",\n name: \"married\",\n checked: state.data.married ?? false\n }],\n \" Married\"\n ]]\n ]],\n [\"p\",\n hjoin(\n state.genders.map<HElement>(gender => (\n [\"label\", [\n [\"input.w3-radio\", {\n type: \"radio\",\n name: \"gender\",\n value: gender.value,\n checked: state.data.gender === gender.value\n }],\n \" \", gender.label\n ]]\n )),\n [\"br\"]\n )\n ],\n [\"p\", [\n [\"select.w3-select\", { name: \"sport\" },\n [\n [\"option\",\n {\n value: \"\",\n disabled: true,\n selected: true\n },\n \"Sport\"\n ],\n ...state.sports.map<HElement>(sport => (\n [\"option\",\n {\n value: sport,\n selected: sport === state.data.sport\n },\n sport\n ])\n )\n ]\n ]\n ]],\n [\"button.w3-btn.w3-blue\", \"Submit\"]\n ]\n ]\n ]]\n ]]\n ];\n};\n\nconst formDispatcher: HDispatcher<FormState> = async function (action, state) {\n switch (action.type) {\n\n case HAppAction._init:\n case HAppAction._mount:\n case HAppAction._umount:\n case HAppAction._element:\n break;\n\n case FormAction.change:\n console.log(\"FormAction.change\", JSON.stringify(action.data, null, 4));\n break;\n\n case FormAction.submit:\n console.log(\"FormAction.submit\", JSON.stringify(action.data, null, 4));\n const formData = JSON.stringify(action.data, null, 4);\n alert(`Form submit: \\n${formData}`);\n state.data = { ...state.data, ...action.data };\n console.log(\"state\", JSON.stringify(state, null, 4));\n break;\n }\n};\n\nfunction datetimeLocal(date: Date) {\n date.setMinutes(date.getMinutes() - date.getTimezoneOffset());\n return date.toISOString().slice(0, 16);\n}\n\nhapp<FormState>(formState, formView, formDispatcher);\n"],"names":["$fe5fa9c04fc86188$var$log","console","log","$fe5fa9c04fc86188$var$error","error","$fe5fa9c04fc86188$var$warn","warn","$fe5fa9c04fc86188$export$15cfcbba5b21308e","HAppAction","$fe5fa9c04fc86188$var$schedule","window","requestAnimationFrame","callback","setTimeout","$fe5fa9c04fc86188$var$unschedule","cancelAnimationFrame","handle","clearTimeout","$fe5fa9c04fc86188$var$msgAction","$fe5fa9c04fc86188$var$msgDispatch","$fe5fa9c04fc86188$var$msgRender","$fe5fa9c04fc86188$export$eb8950696418f795","state","view","dispatcher","element","document","body","$fe5fa9c04fc86188$export$8cfef5dc37c46888","$fe5fa9c04fc86188$export$e905700d74a7763f","hAppI","e","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","_element","constructor","super","customElement","$fe5fa9c04fc86188$export$dd8a94d3c5ec9827","controllers","action","controller","type","apply","data","event","$fe5fa9c04fc86188$var$HAPP","_dispatch","_a","_onDispatch","call","dom","$fe5fa9c04fc86188$var$elementDispatchCustomEvent","windowDispatchOn","_windowEventListener","detail","addEventListener","windowDispatchOff","removeEventListener","refs","onDispatch","$fe5fa9c04fc86188$var$__awaiter","debug","t0","performance","now","t1","windowDispatch","dispatchEvent","CustomEvent","render","hsmls","actionCb","undefined","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","getElementById","$fe5fa9c04fc86188$var$updateDom","_mount","_umount","hasAttribute","removeAttribute","aNodes","querySelectorAll","a","happ","firstChild","removeChild","_updateSched","toHsml","_skip","toHtml","outerHTML","_init","then","hsml","ctx","$hrCkK","hsmls2idomPatch","_b","toLowerCase","iel","checked","sel","multiple","values","from","selectedOptions","map","o","tel","bel","$a8f75ae49400c21a$var$FormAction","FormAction","$a8f75ae49400c21a$var$datetimeLocal","date","setMinutes","getMinutes","getTimezoneOffset","toISOString","slice","$fe5fa9c04fc86188$exports","title","born","Date","children","married","gender","sport","genders","label","sports","on","change","submit","required","minlength","maxlength","max","min","$enc1X","hjoin","disabled","selected","JSON","stringify","formData","alert","assign"],"version":3,"file":"hsml-app-form_demo.007ffcaa.js.map"}
|
|
@@ -1,2 +0,0 @@
|
|
|
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 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=o("g7NCG"),s={};t(s,"HAppAction",(function(){return h}),(function(t){return h=t})),t(s,"happ",(function(){return y}),(function(t){return y=t})),t(s,"HApp",(function(){return k}),(function(t){return k=t})),t(s,"happi",(function(){return g}),(function(t){return g=t})),t(s,"happel",(function(){return _}),(function(t){return _=t})),t(s,"controllersDdispatcher",(function(){return A}),(function(t){return A=t}));var c=o("8IJ2T"),r=function(t,e,n,i){return new(n||(n=Promise))((function(o,a){function s(t){try{r(i.next(t))}catch(t){a(t)}}function c(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(s,c)}r((i=i.apply(t,e||[])).next())}))};const u=console.log,d=console.error,l=console.warn;var h,m;(m=h||(h={}))._init="_init",m._mount="_mount",m._umount="_umount",m._element="_element";const p=window.requestAnimationFrame||function(t){window.setTimeout(t,1e3/60)},f=window.cancelAnimationFrame||function(t){window.clearTimeout(t)},v="HApp action:",w="HApp dispatch:",b="HApp render:";function y(t,e,n,i=document.body){return new k(t,e,n,i)}function g(t,e=document.body){const n=new t;return new k(n.state,n.view,n.dispatcher,e)}function _(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(h._element,{attrName:t,oldVal:e,newVal:n})}constructor(){super(),this._happel=new k(n,i,o),this._happel.customElement=this}})}function A(t){return function(e){return r(this,void 0,void 0,(function*(){const n=t[e.type];n?n.apply(this,[e.data,e.event]):l("no controller for action",e)}))}}const E="happ";class k{_dispatch(t,e,n){var i;return r(this,void 0,void 0,(function*(){try{yield this.dispatcher({type:t,data:e,event:n},this.state,this.dispatch),null===(i=this._onDispatch)||void 0===i||i.call(this,{type:t,data:e,event:n},this.state,this.dispatch),this.dom&&C(this.dom,E,{type:t,data:e,event:n}),this.customElement&&C(this.customElement,t,e),!this.customElement&&this.dom&&C(this.dom,t,e),this.update()}catch(t){d(w,t)}}))}windowDispatchOn(){this._windowEventListener?l("windowEventListener olready setted"):(this._windowEventListener=t=>{const e=t.detail;this.dispatch(e.type,e.data,t)},window.addEventListener(E,this._windowEventListener))}windowDispatchOff(){this._windowEventListener&&window.removeEventListener(E,this._windowEventListener)}constructor(t,e,n,i=document.body){this.refs={},this.onDispatch=t=>(this._onDispatch=t,this),this.dispatch=(t,e,n)=>r(this,void 0,void 0,(function*(){if(k.debug){u(v,{type:t,data:e,event:n});const i=performance.now();yield this._dispatch(t,e,n);const o=performance.now();u(w,o-i+" ms",this.state)}else yield this._dispatch(t,e,n)})),this.windowDispatch=(t,e,n)=>r(this,void 0,void 0,(function*(){window.dispatchEvent(new CustomEvent(E,{detail:{type:t,data:e}}))})),this.render=()=>{if(k.debug){const t=performance.now();let e;try{e=this.view(this.state)}catch(t){d(b,t)}const n=performance.now();return u(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=O(n[t]);if("object"==typeof e){const o=Object.keys(e);if(o.length){const a=o[0],s=e[a];void 0===i[a]?i[a]=s:"string"==typeof i[a]||i[a]instanceof String?i[a]=s instanceof Array?[i[a],...s]:[i[a],s]:i[a]instanceof Array?s instanceof Array?i[a]=i[a].concat(s):i[a].push(s):i[a]=s instanceof Array?[i[a],...s]:[i[a],s],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 O(e)}(n)),this.dispatch(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;S(n,this.render(),this),this.dispatch(h._mount,this.dom)}return this},this.umount=()=>{if(this.dom){this.dispatch(h._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=p((()=>{if(this.dom){const t=this.render();S(this.dom,t,this)}this._updateSched=void 0}))),this),this.toHsml=()=>{if(this.dom){if(!this._updateSched)return["div",{_skip:!0}];f(this._updateSched),this._updateSched=void 0}const t=this.render();return t.push((t=>{this.dom||(this.dom=t,t.happ=this,this.dispatch(h._mount,this.dom))})),["div",t]},this.toHtml=()=>this.dom?this.dom.outerHTML:"",this.state=t(),this.view=e,this.dispatcher=null!=n?n:t=>r(this,void 0,void 0,(function*(){return u(v,t.type,t.data)})),this.dispatch(h._init,this).then((()=>this.mount(i)))}}function S(t,e,n){if(k.debug){const i=performance.now();(0,c.hsmls2idomPatch)(t,e,n);const o=performance.now();u("HApp update:",o-i+" ms",t)}else(0,c.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.toLowerCase()}`])||void 0===o||o.call(i,new CustomEvent(e,{detail:n}))}function O(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}k.debug=!1;var x=function(t,e,n,i){return new(n||(n=Promise))((function(o,a){function s(t){try{r(i.next(t))}catch(t){a(t)}}function c(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(s,c)}r((i=i.apply(t,e||[])).next())}))};var H,T;(T=H||(H={})).change="form-change",T.submit="form-submit";function L(t){return t.setMinutes(t.getMinutes()-t.getTimezoneOffset()),t.toISOString().slice(0,16)}(0,s.happ)((function(){return{title:"HSML App Form",data:{name:"Ema",born:L(new Date),children:0,married:!1,gender:"female",sport:"gymnastics"},genders:[{label:"Male",value:"male"},{label:"Female",value:"female"}],sports:["football","gymnastics"]}}),(function(t){var e;return[["div.w3-content.w3-light-gray",[["div.w3-container",[["h1",t.title],["form.w3-panel",{on:[["change",H.change],["submit",H.submit]]},[["p",[["label",["Name",["input.w3-input",{type:"text",name:"name",required:!0,minlength:3,maxlength:5,value:t.data.name}]]]]],["p",[["label",["Born",["input.w3-input",{type:"datetime-local",name:"born",required:!0,max:L(new Date),value:t.data.born}]]]]],["p",[["label",["Children",["input.w3-input",{type:"number",name:"children",min:0,max:10,value:t.data.children}]]]]],["p",[["label",[["input#ch.w3-check",{type:"checkbox",name:"married",checked:null!==(e=t.data.married)&&void 0!==e&&e}]," Married"]]]],["p",(0,a.hjoin)(t.genders.map((e=>["label",[["input.w3-radio",{type:"radio",name:"gender",value:e.value,checked:t.data.gender===e.value}]," ",e.label]])),["br"])],["p",[["select.w3-select",{name:"sport"},[["option",{value:"",disabled:!0,selected:!0},"Sport"],...t.sports.map((e=>["option",{value:e,selected:e===t.data.sport},e]))]]]],["button.w3-btn.w3-blue","Submit"]]]]]]]]}),(function(t,e){return x(this,void 0,void 0,(function*(){switch(t.type){case s.HAppAction._init:case s.HAppAction._mount:case s.HAppAction._umount:case s.HAppAction._element:break;case H.change:console.log("FormAction.change",JSON.stringify(t.data,null,4));break;case H.submit:console.log("FormAction.submit",JSON.stringify(t.data,null,4));const n=JSON.stringify(t.data,null,4);alert(`Form submit: \n${n}`),e.data=Object.assign(Object.assign({},e.data),t.data),console.log("state",JSON.stringify(e,null,4))}}))}))}();
|
|
2
|
-
//# sourceMappingURL=hsml-app-form_demo.a034239d.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":"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","sources":["src/hsml-app.ts","demo/hsml-app-form_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;\nexport type HView<STATE> = (state: STATE) => HElements;\nexport type HView1<STATE> = (state: STATE) => HElement;\n\nexport interface HAction {\n type: string;\n data?: any;\n event?: Event;\n}\n\nexport type HDispatch = (type: HAction[\"type\"],\n data?: HAction[\"data\"],\n event?: HAction[\"event\"]) => Promise<void>;\n\nexport type HUpdate = () => void;\n\nexport type HDispatcher<STATE> = (action: HAction, state: STATE, dispatch: HDispatch) => Promise<void>;\n// export type HDispatcher<STATE> = (this: HApp<STATE>, action: HAction, state: STATE, dispatch: HDispatch) => Promise<void>;\n\nexport enum HAppAction {\n _init = \"_init\",\n _mount = \"_mount\",\n _umount = \"_umount\",\n _element = \"_element\"\n}\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>(state: HState<STATE>,\n view: HView<STATE>,\n dispatcher: HDispatcher<STATE>,\n element: Element | string | null = document.body) {\n return new HApp<STATE>(state, view, dispatcher, element);\n}\n\n// HAppI\n\nexport type Class<T = object> = new (...args: any[]) => T;\n\nexport interface HAppI<STATE> {\n state(): STATE;\n view(state: STATE): HElements;\n dispatcher(action: HAction, state: STATE, dispatch: HDispatch): Promise<void>;\n // dispatcher(this: HApp<STATE>, action: HAction, state: STATE, dispatch: HDispatch): Promise<void>;\n}\n\nexport function happi<STATE>(hAppI: Class<HAppI<STATE>>, e: Element | string | null = document.body) {\n const hapi = new hAppI();\n return new HApp<STATE>(hapi.state, hapi.view, hapi.dispatcher, e);\n}\n\n// HAppEl\n\nexport function happel<STATE>(elementName: string,\n elementAttrs: string[],\n state: HState<STATE>,\n view: HView<STATE>,\n dispatcher: HDispatcher<STATE>): void {\n customElements.define(elementName, class HAppElement extends HTMLElement {\n\n static get observedAttributes() {\n return elementAttrs;\n }\n\n private _happel: HApp<STATE>;\n\n constructor() {\n super();\n this._happel = new HApp<STATE>(state, view, dispatcher);\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(attrName: string, oldVal: string | null, newVal: string | null) {\n this._happel.dispatch(HAppAction._element, { attrName, oldVal, newVal });\n }\n\n });\n}\n\n// HAppC\n\nexport type HController<State> = (this: HApp<State>,\n data?: HAction[\"data\"],\n event?: HAction[\"event\"]) => void;\n\nexport type HControllers<State, TypeofActionEnum> = { [actionType in keyof TypeofActionEnum]?: HController<State>; };\n\nexport function controllersDdispatcher<State, TyopeofActionEnum>(controllers: HControllers<State, TyopeofActionEnum>): HDispatcher<State> {\n return async function (this: HApp<State>, action) {\n const controller = controllers[action.type as keyof TyopeofActionEnum];\n if (controller) {\n controller.apply<HApp<State>, [any?, Event?], void>(this, [action.data, action.event]);\n } else {\n warn(\"no controller for action\", action);\n }\n };\n}\n\nconst HAPP = \"happ\";\n\nexport class HApp<STATE> implements HHandlerCtx {\n\n static debug = false;\n\n readonly state: STATE;\n readonly view: HView<STATE>;\n readonly dispatcher: HDispatcher<STATE>;\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(state: HState<STATE>, view: HView<STATE>, dispatcher?: HDispatcher<STATE>, e: Element | string | null = document.body) {\n this.state = state();\n this.view = view;\n this.dispatcher = dispatcher ?? (async (a) => log(msgAction, a.type, a.data));\n this.dispatch(HAppAction._init, this).then(() => this.mount(e));\n }\n\n private async _dispatch(type: string, data: any, event: Event | undefined) {\n try {\n await this.dispatcher({ type, data, event }, this.state, this.dispatch);\n this._onDispatch?.({ type, data, event }, this.state, this.dispatch);\n this.dom && elementDispatchCustomEvent(this.dom, HAPP, { type, data, event });\n this.customElement && elementDispatchCustomEvent(this.customElement, type, data);\n !this.customElement && this.dom && elementDispatchCustomEvent(this.dom, type, data);\n this.update();\n } catch (e) {\n error(msgDispatch, e);\n }\n }\n\n onDispatch = (dispatcher: HDispatcher<STATE>): this => {\n this._onDispatch = dispatcher;\n return this;\n }\n\n dispatch: HDispatch = async (type: string, data?: any, event?: Event): Promise<void> => {\n if (HApp.debug) {\n log(msgAction, { type, data, event });\n const t0 = performance.now();\n await this._dispatch(type, data, event);\n const t1 = performance.now();\n log(msgDispatch, `${t1 - t0} ms`, this.state);\n } else {\n await this._dispatch(type, data, event);\n }\n }\n\n windowDispatch: HDispatch = async (type: string, data?: any, event?: Event): Promise<void> => {\n window.dispatchEvent(new CustomEvent(HAPP, { 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;\n this.dispatch(action.type, action.data, event);\n };\n window.addEventListener(HAPP, this._windowEventListener);\n } else {\n warn(\"windowEventListener olready setted\");\n }\n }\n\n windowDispatchOff() {\n if (this._windowEventListener) {\n window.removeEventListener(HAPP, this._windowEventListener);\n }\n }\n\n render = (): HElements => {\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 = (action: string, 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.dispatch(action, 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>;\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(el, hsmls, this);\n this.dispatch(HAppAction._mount, this.dom);\n }\n return this;\n }\n\n umount = (): this => {\n if (this.dom) {\n this.dispatch(HAppAction._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>;\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(this.dom, hsmls, this);\n }\n this._updateSched = undefined;\n });\n }\n return this;\n }\n\n toHsml = (): HElement => {\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.dispatch(HAppAction._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(el: Element, hsml: HElements, ctx: HHandlerCtx): 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(el: HTMLElement, type: string, data: any) {\n el?.dispatchEvent(new CustomEvent(type, { detail: data }));\n (el as any)[`on${type.toLowerCase()}`]?.(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\n// export const formInputData = <STATE>(dispatcher: Actions<STATE>): Actions<STATE> =>\n// (app: App<STATE>, action: string | number, data?: any, event?: Event): void => {\n// if (data === undefined && event) {\n// data = inputEventData(event);\n// }\n// dispatcher(app, action, data, event);\n// };\n\n// // Decorator\n// export function FormInputData() {\n// return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {\n// const method = descriptor.value;\n// descriptor.value = formInputData(method);\n// return descriptor;\n// };\n// }\n","import { HElement, HElements, hjoin } from \"../src/hsml\";\nimport { happ, HAppAction, HDispatcher, HState, HView } from \"../src/hsml-app\";\n\ninterface FormData {\n name: string;\n born: string;\n children: number;\n married: boolean;\n gender: string;\n sport: string;\n}\n\ninterface FormState {\n title: string;\n data: FormData;\n genders: {\n label: string;\n value: string;\n }[];\n sports: string[];\n}\n\nconst formState: HState<FormState> = function () {\n return {\n title: \"HSML App Form\",\n data: {\n name: \"Ema\",\n // born: \"\",\n born: datetimeLocal(new Date()),\n children: 0,\n married: false,\n gender: \"female\",\n sport: \"gymnastics\"\n },\n genders: [\n { label: \"Male\", value: \"male\" },\n { label: \"Female\", value: \"female\" }\n ],\n sports: [\"football\", \"gymnastics\"]\n };\n};\n\nenum FormAction {\n change = \"form-change\",\n submit = \"form-submit\"\n}\n\nconst formView: HView<FormState> = function (state): HElements {\n return [\n [\"div.w3-content.w3-light-gray\", [\n [\"div.w3-container\", [\n [\"h1\", state.title],\n [\"form.w3-panel\",\n {\n on: [\n [\"change\", FormAction.change],\n [\"submit\", FormAction.submit]\n ]\n },\n [\n [\"p\", [\n [\"label\", [\"Name\",\n [\"input.w3-input\", {\n type: \"text\",\n name: \"name\",\n required: true,\n minlength: 3,\n maxlength: 5,\n value: state.data.name\n }]\n ]]\n ]],\n [\"p\", [\n [\"label\", [\"Born\",\n [\"input.w3-input\", {\n type: \"datetime-local\",\n name: \"born\",\n required: true,\n max: datetimeLocal(new Date()),\n value: state.data.born,\n }]\n ]]\n ]],\n [\"p\", [\n [\"label\", [\"Children\",\n [\"input.w3-input\", {\n type: \"number\",\n name: \"children\",\n min: 0,\n max: 10,\n value: state.data.children\n }]\n ]]\n ]],\n [\"p\", [\n [\"label\", [\n [\"input#ch.w3-check\", {\n type: \"checkbox\",\n name: \"married\",\n checked: state.data.married ?? false\n }],\n \" Married\"\n ]]\n ]],\n [\"p\",\n hjoin(\n state.genders.map<HElement>(gender => (\n [\"label\", [\n [\"input.w3-radio\", {\n type: \"radio\",\n name: \"gender\",\n value: gender.value,\n checked: state.data.gender === gender.value\n }],\n \" \", gender.label\n ]]\n )),\n [\"br\"]\n )\n ],\n [\"p\", [\n [\"select.w3-select\", { name: \"sport\" },\n [\n [\"option\",\n {\n value: \"\",\n disabled: true,\n selected: true\n },\n \"Sport\"\n ],\n ...state.sports.map<HElement>(sport => (\n [\"option\",\n {\n value: sport,\n selected: sport === state.data.sport\n },\n sport\n ])\n )\n ]\n ]\n ]],\n [\"button.w3-btn.w3-blue\", \"Submit\"]\n ]\n ]\n ]]\n ]]\n ];\n};\n\nconst formDispatcher: HDispatcher<FormState> = async function (action, state) {\n switch (action.type) {\n\n case HAppAction._init:\n case HAppAction._mount:\n case HAppAction._umount:\n case HAppAction._element:\n break;\n\n case FormAction.change:\n console.log(\"FormAction.change\", JSON.stringify(action.data, null, 4));\n break;\n\n case FormAction.submit:\n console.log(\"FormAction.submit\", JSON.stringify(action.data, null, 4));\n const formData = JSON.stringify(action.data, null, 4);\n alert(`Form submit: \\n${formData}`);\n state.data = { ...state.data, ...action.data };\n console.log(\"state\", JSON.stringify(state, null, 4));\n break;\n }\n};\n\nfunction datetimeLocal(date: Date) {\n date.setMinutes(date.getMinutes() - date.getTimezoneOffset());\n return date.toISOString().slice(0, 16);\n}\n\nhapp<FormState>(formState, formView, formDispatcher);\n"],"names":["$a85519cc1b20a4af$var$log","console","log","$a85519cc1b20a4af$var$error","error","$a85519cc1b20a4af$var$warn","warn","$a85519cc1b20a4af$export$15cfcbba5b21308e","HAppAction","$a85519cc1b20a4af$var$schedule","window","requestAnimationFrame","callback","setTimeout","$a85519cc1b20a4af$var$unschedule","cancelAnimationFrame","handle","clearTimeout","$a85519cc1b20a4af$var$msgAction","$a85519cc1b20a4af$var$msgDispatch","$a85519cc1b20a4af$var$msgRender","$a85519cc1b20a4af$export$eb8950696418f795","state","view","dispatcher","element","document","body","$a85519cc1b20a4af$export$8cfef5dc37c46888","$a85519cc1b20a4af$export$e905700d74a7763f","hAppI","e","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","_element","constructor","super","customElement","$a85519cc1b20a4af$export$dd8a94d3c5ec9827","controllers","action","controller","type","apply","data","event","$a85519cc1b20a4af$var$HAPP","_dispatch","_a","_onDispatch","call","dom","$a85519cc1b20a4af$var$elementDispatchCustomEvent","windowDispatchOn","_windowEventListener","detail","addEventListener","windowDispatchOff","removeEventListener","refs","onDispatch","$a85519cc1b20a4af$var$__awaiter","debug","t0","performance","now","t1","windowDispatch","dispatchEvent","CustomEvent","render","hsmls","actionCb","undefined","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","getElementById","$a85519cc1b20a4af$var$updateDom","_mount","_umount","hasAttribute","removeAttribute","aNodes","querySelectorAll","a","happ","firstChild","removeChild","_updateSched","toHsml","_skip","toHtml","outerHTML","_init","then","hsml","ctx","$8IJ2T","hsmls2idomPatch","_b","toLowerCase","iel","checked","sel","multiple","values","from","selectedOptions","map","o","tel","bel","$ab92c11cdcadab5c$var$FormAction","FormAction","$ab92c11cdcadab5c$var$datetimeLocal","date","setMinutes","getMinutes","getTimezoneOffset","toISOString","slice","$a85519cc1b20a4af$exports","title","born","Date","children","married","gender","sport","genders","label","sports","on","change","submit","required","minlength","maxlength","max","min","$g7NCG","hjoin","disabled","selected","JSON","stringify","formData","alert","assign"],"version":3,"file":"hsml-app-form_demo.a034239d.js.map"}
|
|
@@ -1,2 +0,0 @@
|
|
|
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 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,"HAppAction",(function(){return h}),(function(t){return h=t})),t(a,"happ",(function(){return w}),(function(t){return w=t})),t(a,"HApp",(function(){return _}),(function(t){return _=t})),t(a,"happi",(function(){return y}),(function(t){return y=t})),t(a,"happel",(function(){return x}),(function(t){return x=t})),t(a,"controllersDdispatcher",(function(){return g}),(function(t){return g=t}));var c=o("8IJ2T"),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;(l=h||(h={}))._init="_init",l._mount="_mount",l._umount="_umount",l._element="_element";const p=window.requestAnimationFrame||function(t){window.setTimeout(t,1e3/60)},m=window.cancelAnimationFrame||function(t){window.clearTimeout(t)},f="HApp action:",v="HApp dispatch:",b="HApp render:";function w(t,e,n,i=document.body){return new _(t,e,n,i)}function y(t,e=document.body){const n=new t;return new _(n.state,n.view,n.dispatcher,e)}function x(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(h._element,{attrName:t,oldVal:e,newVal:n})}constructor(){super(),this._happel=new _(n,i,o),this._happel.customElement=this}})}function g(t){return function(e){return s(this,void 0,void 0,(function*(){const n=t[e.type];n?n.apply(this,[e.data,e.event]):d("no controller for action",e)}))}}const k="happ";class _{_dispatch(t,e,n){var i;return s(this,void 0,void 0,(function*(){try{yield this.dispatcher({type:t,data:e,event:n},this.state,this.dispatch),null===(i=this._onDispatch)||void 0===i||i.call(this,{type:t,data:e,event:n},this.state,this.dispatch),this.dom&&E(this.dom,k,{type:t,data:e,event:n}),this.customElement&&E(this.customElement,t,e),!this.customElement&&this.dom&&E(this.dom,t,e),this.update()}catch(t){u(v,t)}}))}windowDispatchOn(){this._windowEventListener?d("windowEventListener olready setted"):(this._windowEventListener=t=>{const e=t.detail;this.dispatch(e.type,e.data,t)},window.addEventListener(k,this._windowEventListener))}windowDispatchOff(){this._windowEventListener&&window.removeEventListener(k,this._windowEventListener)}constructor(t,e,n,i=document.body){this.refs={},this.onDispatch=t=>(this._onDispatch=t,this),this.dispatch=(t,e,n)=>s(this,void 0,void 0,(function*(){if(_.debug){r(f,{type:t,data:e,event:n});const i=performance.now();yield this._dispatch(t,e,n);const o=performance.now();r(v,o-i+" ms",this.state)}else yield this._dispatch(t,e,n)})),this.windowDispatch=(t,e,n)=>s(this,void 0,void 0,(function*(){window.dispatchEvent(new CustomEvent(k,{detail:{type:t,data:e}}))})),this.render=()=>{if(_.debug){const t=performance.now();let e;try{e=this.view(this.state)}catch(t){u(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){u(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=C(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 C(e)}(n)),this.dispatch(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;A(n,this.render(),this),this.dispatch(h._mount,this.dom)}return this},this.umount=()=>{if(this.dom){this.dispatch(h._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=p((()=>{if(this.dom){const t=this.render();A(this.dom,t,this)}this._updateSched=void 0}))),this),this.toHsml=()=>{if(this.dom){if(!this._updateSched)return["div",{_skip:!0}];m(this._updateSched),this._updateSched=void 0}const t=this.render();return t.push((t=>{this.dom||(this.dom=t,t.happ=this,this.dispatch(h._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(f,t.type,t.data)})),this.dispatch(h._init,this).then((()=>this.mount(i)))}}function A(t,e,n){if(_.debug){const i=performance.now();(0,c.hsmls2idomPatch)(t,e,n);const o=performance.now();r("HApp update:",o-i+" ms",t)}else(0,c.hsmls2idomPatch)(t,e,n)}function E(t,e,n){var i,o;null==t||t.dispatchEvent(new CustomEvent(e,{detail:n})),null===(o=(i=t)[`on${e.toLowerCase()}`])||void 0===o||o.call(i,new CustomEvent(e,{detail:n}))}function C(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}_.debug=!1;var S,D,T=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())}))};(D=S||(S={})).dec="counter-dec",D.inc="counter-inc";const H=t=>["div~reference",[["h2",["Counter"]],["p",[["em",["Count"]],": ",t.count," ",["button",{on:["click",S.dec,1]},["-"]],["button",{on:["click",S.inc,2]},["+"]]]]]],O=function(t,e,n){return T(this,void 0,void 0,(function*(){switch(console.log("action counter:",t),t.type){case a.HAppAction._mount:this.windowDispatchOn();break;case a.HAppAction._umount:this.windowDispatchOff();break;case S.inc:e.count=e.count+t.data,setTimeout((()=>n(S.dec,1)),1e3);break;case S.dec:e.count=e.count-t.data}}))};var L,F;(F=L||(L={})).title="title",F.clear="clear",F.formSubmit="formSubmit",F.formChange="formChange",F.xXx="xXx",F.x="x";a.HApp.debug="localhost"===window.location.hostname;const N=(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",L.title]}]," ",["button.w3-button.w3-blue",{type:"button",on:["click",L.clear]},["Clear title"]]]],H(t.counter),["h2",["Form"]],["form",{on:[["submit",L.formSubmit],["change",L.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",L.xXx]},["xXx"]]]],["h2",["Props update"]],["input",{type:"checkbox",name:"x",on:["change",L.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 T(this,void 0,void 0,(function*(){switch(console.log("action:",t),O.call(this,t,e.counter,n),t.type){case a.HAppAction._init:case a.HAppAction._mount:case a.HAppAction._umount:break;case L.title:e.title=t.data;break;case L.clear:e.title="";break;case L.formSubmit:console.log("FormSubmit:",JSON.stringify(t.data));const n=t.event.target,i=new FormData(n);console.log("FormData:",JSON.stringify([...i.entries()]));break;case L.formChange:console.log("FormChange:",JSON.stringify(t.data));break;case L.xXx:this.windowDispatch(S.dec,1);break;case L.x:console.log("data.x",typeof t.data.x,t.data.x),e.x=new Boolean(t.data.x)}}))})).onDispatch(((t,e,n)=>T(void 0,void 0,void 0,(function*(){return console.log("onDspatch:",t,e)})))).mount(document.getElementById("app"));self.app=N}();
|
|
2
|
-
//# sourceMappingURL=hsml-app-test_demo.35c14dc9.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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;\nexport type HView<STATE> = (state: STATE) => HElements;\nexport type HView1<STATE> = (state: STATE) => HElement;\n\nexport interface HAction {\n type: string;\n data?: any;\n event?: Event;\n}\n\nexport type HDispatch = (type: HAction[\"type\"],\n data?: HAction[\"data\"],\n event?: HAction[\"event\"]) => Promise<void>;\n\nexport type HUpdate = () => void;\n\nexport type HDispatcher<STATE> = (action: HAction, state: STATE, dispatch: HDispatch) => Promise<void>;\n// export type HDispatcher<STATE> = (this: HApp<STATE>, action: HAction, state: STATE, dispatch: HDispatch) => Promise<void>;\n\nexport enum HAppAction {\n _init = \"_init\",\n _mount = \"_mount\",\n _umount = \"_umount\",\n _element = \"_element\"\n}\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>(state: HState<STATE>,\n view: HView<STATE>,\n dispatcher: HDispatcher<STATE>,\n element: Element | string | null = document.body) {\n return new HApp<STATE>(state, view, dispatcher, element);\n}\n\n// HAppI\n\nexport type Class<T = object> = new (...args: any[]) => T;\n\nexport interface HAppI<STATE> {\n state(): STATE;\n view(state: STATE): HElements;\n dispatcher(action: HAction, state: STATE, dispatch: HDispatch): Promise<void>;\n // dispatcher(this: HApp<STATE>, action: HAction, state: STATE, dispatch: HDispatch): Promise<void>;\n}\n\nexport function happi<STATE>(hAppI: Class<HAppI<STATE>>, e: Element | string | null = document.body) {\n const hapi = new hAppI();\n return new HApp<STATE>(hapi.state, hapi.view, hapi.dispatcher, e);\n}\n\n// HAppEl\n\nexport function happel<STATE>(elementName: string,\n elementAttrs: string[],\n state: HState<STATE>,\n view: HView<STATE>,\n dispatcher: HDispatcher<STATE>): void {\n customElements.define(elementName, class HAppElement extends HTMLElement {\n\n static get observedAttributes() {\n return elementAttrs;\n }\n\n private _happel: HApp<STATE>;\n\n constructor() {\n super();\n this._happel = new HApp<STATE>(state, view, dispatcher);\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(attrName: string, oldVal: string | null, newVal: string | null) {\n this._happel.dispatch(HAppAction._element, { attrName, oldVal, newVal });\n }\n\n });\n}\n\n// HAppC\n\nexport type HController<State> = (this: HApp<State>,\n data?: HAction[\"data\"],\n event?: HAction[\"event\"]) => void;\n\nexport type HControllers<State, TypeofActionEnum> = { [actionType in keyof TypeofActionEnum]?: HController<State>; };\n\nexport function controllersDdispatcher<State, TyopeofActionEnum>(controllers: HControllers<State, TyopeofActionEnum>): HDispatcher<State> {\n return async function (this: HApp<State>, action) {\n const controller = controllers[action.type as keyof TyopeofActionEnum];\n if (controller) {\n controller.apply<HApp<State>, [any?, Event?], void>(this, [action.data, action.event]);\n } else {\n warn(\"no controller for action\", action);\n }\n };\n}\n\nconst HAPP = \"happ\";\n\nexport class HApp<STATE> implements HHandlerCtx {\n\n static debug = false;\n\n readonly state: STATE;\n readonly view: HView<STATE>;\n readonly dispatcher: HDispatcher<STATE>;\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(state: HState<STATE>, view: HView<STATE>, dispatcher?: HDispatcher<STATE>, e: Element | string | null = document.body) {\n this.state = state();\n this.view = view;\n this.dispatcher = dispatcher ?? (async (a) => log(msgAction, a.type, a.data));\n this.dispatch(HAppAction._init, this).then(() => this.mount(e));\n }\n\n private async _dispatch(type: string, data: any, event: Event | undefined) {\n try {\n await this.dispatcher({ type, data, event }, this.state, this.dispatch);\n this._onDispatch?.({ type, data, event }, this.state, this.dispatch);\n this.dom && elementDispatchCustomEvent(this.dom, HAPP, { type, data, event });\n this.customElement && elementDispatchCustomEvent(this.customElement, type, data);\n !this.customElement && this.dom && elementDispatchCustomEvent(this.dom, type, data);\n this.update();\n } catch (e) {\n error(msgDispatch, e);\n }\n }\n\n onDispatch = (dispatcher: HDispatcher<STATE>): this => {\n this._onDispatch = dispatcher;\n return this;\n }\n\n dispatch: HDispatch = async (type: string, data?: any, event?: Event): Promise<void> => {\n if (HApp.debug) {\n log(msgAction, { type, data, event });\n const t0 = performance.now();\n await this._dispatch(type, data, event);\n const t1 = performance.now();\n log(msgDispatch, `${t1 - t0} ms`, this.state);\n } else {\n await this._dispatch(type, data, event);\n }\n }\n\n windowDispatch: HDispatch = async (type: string, data?: any, event?: Event): Promise<void> => {\n window.dispatchEvent(new CustomEvent(HAPP, { 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;\n this.dispatch(action.type, action.data, event);\n };\n window.addEventListener(HAPP, this._windowEventListener);\n } else {\n warn(\"windowEventListener olready setted\");\n }\n }\n\n windowDispatchOff() {\n if (this._windowEventListener) {\n window.removeEventListener(HAPP, this._windowEventListener);\n }\n }\n\n render = (): HElements => {\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 = (action: string, 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.dispatch(action, 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>;\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(el, hsmls, this);\n this.dispatch(HAppAction._mount, this.dom);\n }\n return this;\n }\n\n umount = (): this => {\n if (this.dom) {\n this.dispatch(HAppAction._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>;\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(this.dom, hsmls, this);\n }\n this._updateSched = undefined;\n });\n }\n return this;\n }\n\n toHsml = (): HElement => {\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.dispatch(HAppAction._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(el: Element, hsml: HElements, ctx: HHandlerCtx): 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(el: HTMLElement, type: string, data: any) {\n el?.dispatchEvent(new CustomEvent(type, { detail: data }));\n (el as any)[`on${type.toLowerCase()}`]?.(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\n// export const formInputData = <STATE>(dispatcher: Actions<STATE>): Actions<STATE> =>\n// (app: App<STATE>, action: string | number, data?: any, event?: Event): void => {\n// if (data === undefined && event) {\n// data = inputEventData(event);\n// }\n// dispatcher(app, action, data, event);\n// };\n\n// // Decorator\n// export function FormInputData() {\n// return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {\n// const method = descriptor.value;\n// descriptor.value = formInputData(method);\n// return descriptor;\n// };\n// }\n","import { HElement, HElements } from \"../src/hsml\";\nimport { HApp, happ, HAppAction, HDispatcher, HState, HView, HView1 } from \"../src/hsml-app\";\n\ninterface CounterState {\n count: number;\n}\n\nenum CounterAction {\n dec = \"counter-dec\",\n inc = \"counter-inc\"\n}\n\nconst counterView: HView1<CounterState> = (state: CounterState): HElement => {\n return [\"div~reference\", [\n [\"h2\", [\"Counter\"]],\n [\"p\", [\n [\"em\", [\"Count\"]], \": \", state.count,\n \" \",\n [\"button\", { on: [\"click\", CounterAction.dec, 1] }, [\"-\"]],\n [\"button\", { on: [\"click\", CounterAction.inc, 2] }, [\"+\"]]\n ]]\n ]];\n};\n\nconst counterDispatcher: HDispatcher<CounterState> = async function (this: HApp<CounterState>, 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 HAppAction._mount:\n this.windowDispatchOn();\n break;\n case HAppAction._umount:\n this.windowDispatchOff();\n break;\n\n case CounterAction.inc:\n state.count = state.count + action.data as number;\n setTimeout(() => dispatch(CounterAction.dec, 1), 1e3); // async call\n break;\n case CounterAction.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 Action {\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> = function (state: State): HElements {\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\", Action.title]\n }\n ], \" \",\n [\"button.w3-button.w3-blue\",\n {\n type: \"button\",\n on: [\"click\", Action.clear]\n },\n [\"Clear title\"]\n ]\n ]],\n counterView(state.counter),\n [\"h2\", [\"Form\"]],\n [\"form\",\n {\n on: [\n [\"submit\", Action.formSubmit],\n [\"change\", Action.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>(l => [\"option\", { value: l }, [l]])\n ],\n [\"br\"],\n \"sm \",\n [\"select\", { name: \"sm\", multiple: true },\n [\"sm1\", \"sm2\", \"sm3\"]\n .map<HElement>(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\", Action.xXx] }, [\"xXx\"]]\n ]],\n [\"h2\", [\"Props update\"]],\n [\"input\", { type: \"checkbox\", name: \"x\", on: [\"change\", Action.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> = async function (this: HApp<State>, 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 HAppAction._init:\n case HAppAction._mount:\n case HAppAction._umount:\n break;\n case Action.title:\n state.title = action.data;\n break;\n case Action.clear:\n state.title = \"\";\n break;\n case Action.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 Action.formChange:\n console.log(\"FormChange:\", JSON.stringify(action.data));\n break;\n case Action.xXx:\n // this.windowDispatch(\"global-type\", \"global-data\");\n this.windowDispatch(CounterAction.dec, 1);\n break;\n case Action.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>(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$15cfcbba5b21308e","HAppAction","$a85519cc1b20a4af$var$schedule","window","requestAnimationFrame","callback","setTimeout","$a85519cc1b20a4af$var$unschedule","cancelAnimationFrame","handle","clearTimeout","$a85519cc1b20a4af$var$msgAction","$a85519cc1b20a4af$var$msgDispatch","$a85519cc1b20a4af$var$msgRender","$a85519cc1b20a4af$export$eb8950696418f795","state","view","dispatcher","element","document","body","$a85519cc1b20a4af$export$8cfef5dc37c46888","$a85519cc1b20a4af$export$e905700d74a7763f","hAppI","e","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","_element","constructor","super","customElement","$a85519cc1b20a4af$export$dd8a94d3c5ec9827","controllers","action","controller","type","apply","data","event","$a85519cc1b20a4af$var$HAPP","_dispatch","_a","_onDispatch","call","dom","$a85519cc1b20a4af$var$elementDispatchCustomEvent","windowDispatchOn","_windowEventListener","detail","addEventListener","windowDispatchOff","removeEventListener","refs","onDispatch","$a85519cc1b20a4af$var$__awaiter","debug","t0","performance","now","t1","windowDispatch","dispatchEvent","CustomEvent","render","hsmls","actionCb","undefined","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","getElementById","$a85519cc1b20a4af$var$updateDom","_mount","_umount","hasAttribute","removeAttribute","aNodes","querySelectorAll","a","happ","firstChild","removeChild","_updateSched","toHsml","_skip","toHtml","outerHTML","_init","then","hsml","ctx","$8IJ2T","hsmls2idomPatch","_b","toLowerCase","iel","checked","sel","multiple","values","from","selectedOptions","map","o","tel","bel","$4d311c4ad8ed9451$var$CounterAction","CounterAction","$4d311c4ad8ed9451$var$counterView","count","on","dec","inc","$4d311c4ad8ed9451$var$counterDispatcher","$a85519cc1b20a4af$exports","$4d311c4ad8ed9451$var$Action","Action","HApp","location","hostname","$4d311c4ad8ed9451$var$app","title","counter","clear","formSubmit","formChange","l","xXx","x","disabled","JSON","stringify","fe","fd","FormData","entries","Boolean","$4d311c4ad8ed9451$var$__awaiter","self","app"],"version":3,"file":"hsml-app-test_demo.35c14dc9.js.map"}
|
|
@@ -1,2 +0,0 @@
|
|
|
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,"HAppAction",(function(){return h}),(function(t){return h=t})),t(a,"happ",(function(){return w}),(function(t){return w=t})),t(a,"HApp",(function(){return _}),(function(t){return _=t})),t(a,"happi",(function(){return y}),(function(t){return y=t})),t(a,"happel",(function(){return x}),(function(t){return x=t})),t(a,"controllersDdispatcher",(function(){return g}),(function(t){return g=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;(l=h||(h={}))._init="_init",l._mount="_mount",l._umount="_umount",l._element="_element";const p=window.requestAnimationFrame||function(t){window.setTimeout(t,1e3/60)},m=window.cancelAnimationFrame||function(t){window.clearTimeout(t)},f="HApp action:",v="HApp dispatch:",b="HApp render:";function w(t,e,n,i=document.body){return new _(t,e,n,i)}function y(t,e=document.body){const n=new t;return new _(n.state,n.view,n.dispatcher,e)}function x(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(h._element,{attrName:t,oldVal:e,newVal:n})}constructor(){super(),this._happel=new _(n,i,o),this._happel.customElement=this}})}function g(t){return function(e){return s(this,void 0,void 0,(function*(){const n=t[e.type];n?n.apply(this,[e.data,e.event]):d("no controller for action",e)}))}}const k="happ";class _{_dispatch(t,e,n){var i;return s(this,void 0,void 0,(function*(){try{yield this.dispatcher({type:t,data:e,event:n},this.state,this.dispatch),null===(i=this._onDispatch)||void 0===i||i.call(this,{type:t,data:e,event:n},this.state,this.dispatch),this.dom&&E(this.dom,k,{type:t,data:e,event:n}),this.customElement&&E(this.customElement,t,e),!this.customElement&&this.dom&&E(this.dom,t,e),this.update()}catch(t){u(v,t)}}))}windowDispatchOn(){this._windowEventListener?d("windowEventListener olready setted"):(this._windowEventListener=t=>{const e=t.detail;this.dispatch(e.type,e.data,t)},window.addEventListener(k,this._windowEventListener))}windowDispatchOff(){this._windowEventListener&&window.removeEventListener(k,this._windowEventListener)}constructor(t,e,n,i=document.body){this.refs={},this.onDispatch=t=>(this._onDispatch=t,this),this.dispatch=(t,e,n)=>s(this,void 0,void 0,(function*(){if(_.debug){r(f,{type:t,data:e,event:n});const i=performance.now();yield this._dispatch(t,e,n);const o=performance.now();r(v,o-i+" ms",this.state)}else yield this._dispatch(t,e,n)})),this.windowDispatch=(t,e,n)=>s(this,void 0,void 0,(function*(){window.dispatchEvent(new CustomEvent(k,{detail:{type:t,data:e}}))})),this.render=()=>{if(_.debug){const t=performance.now();let e;try{e=this.view(this.state)}catch(t){u(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){u(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=C(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 C(e)}(n)),this.dispatch(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;A(n,this.render(),this),this.dispatch(h._mount,this.dom)}return this},this.umount=()=>{if(this.dom){this.dispatch(h._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=p((()=>{if(this.dom){const t=this.render();A(this.dom,t,this)}this._updateSched=void 0}))),this),this.toHsml=()=>{if(this.dom){if(!this._updateSched)return["div",{_skip:!0}];m(this._updateSched),this._updateSched=void 0}const t=this.render();return t.push((t=>{this.dom||(this.dom=t,t.happ=this,this.dispatch(h._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(f,t.type,t.data)})),this.dispatch(h._init,this).then((()=>this.mount(i)))}}function A(t,e,n){if(_.debug){const i=performance.now();(0,c.hsmls2idomPatch)(t,e,n);const o=performance.now();r("HApp update:",o-i+" ms",t)}else(0,c.hsmls2idomPatch)(t,e,n)}function E(t,e,n){var i,o;null==t||t.dispatchEvent(new CustomEvent(e,{detail:n})),null===(o=(i=t)[`on${e.toLowerCase()}`])||void 0===o||o.call(i,new CustomEvent(e,{detail:n}))}function C(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}_.debug=!1;var S,D,H=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())}))};(D=S||(S={})).dec="counter-dec",D.inc="counter-inc";const T=t=>["div~reference",[["h2",["Counter"]],["p",[["em",["Count"]],": ",t.count," ",["button",{on:["click",S.dec,1]},["-"]],["button",{on:["click",S.inc,2]},["+"]]]]]],O=function(t,e,n){return H(this,void 0,void 0,(function*(){switch(console.log("action counter:",t),t.type){case a.HAppAction._mount:this.windowDispatchOn();break;case a.HAppAction._umount:this.windowDispatchOff();break;case S.inc:e.count=e.count+t.data,setTimeout((()=>n(S.dec,1)),1e3);break;case S.dec:e.count=e.count-t.data}}))};var L,F;(F=L||(L={})).title="title",F.clear="clear",F.formSubmit="formSubmit",F.formChange="formChange",F.xXx="xXx",F.x="x";a.HApp.debug="localhost"===window.location.hostname;const N=(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",L.title]}]," ",["button.w3-button.w3-blue",{type:"button",on:["click",L.clear]},["Clear title"]]]],T(t.counter),["h2",["Form"]],["form",{on:[["submit",L.formSubmit],["change",L.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",L.xXx]},["xXx"]]]],["h2",["Props update"]],["input",{type:"checkbox",name:"x",on:["change",L.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 H(this,void 0,void 0,(function*(){switch(console.log("action:",t),O.call(this,t,e.counter,n),t.type){case a.HAppAction._init:case a.HAppAction._mount:case a.HAppAction._umount:break;case L.title:e.title=t.data;break;case L.clear:e.title="";break;case L.formSubmit:console.log("FormSubmit:",JSON.stringify(t.data));const n=t.event.target,i=new FormData(n);console.log("FormData:",JSON.stringify([...i.entries()]));break;case L.formChange:console.log("FormChange:",JSON.stringify(t.data));break;case L.xXx:this.windowDispatch(S.dec,1);break;case L.x:console.log("data.x",typeof t.data.x,t.data.x),e.x=new Boolean(t.data.x)}}))})).onDispatch(((t,e,n)=>H(void 0,void 0,void 0,(function*(){return console.log("onDspatch:",t,e)})))).mount(document.getElementById("app"));self.app=N;
|
|
2
|
-
//# sourceMappingURL=hsml-app-test_demo.3c7e16ae.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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;\nexport type HView<STATE> = (state: STATE) => HElements;\nexport type HView1<STATE> = (state: STATE) => HElement;\n\nexport interface HAction {\n type: string;\n data?: any;\n event?: Event;\n}\n\nexport type HDispatch = (type: HAction[\"type\"],\n data?: HAction[\"data\"],\n event?: HAction[\"event\"]) => Promise<void>;\n\nexport type HUpdate = () => void;\n\nexport type HDispatcher<STATE> = (action: HAction, state: STATE, dispatch: HDispatch) => Promise<void>;\n// export type HDispatcher<STATE> = (this: HApp<STATE>, action: HAction, state: STATE, dispatch: HDispatch) => Promise<void>;\n\nexport enum HAppAction {\n _init = \"_init\",\n _mount = \"_mount\",\n _umount = \"_umount\",\n _element = \"_element\"\n}\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>(state: HState<STATE>,\n view: HView<STATE>,\n dispatcher: HDispatcher<STATE>,\n element: Element | string | null = document.body) {\n return new HApp<STATE>(state, view, dispatcher, element);\n}\n\n// HAppI\n\nexport type Class<T = object> = new (...args: any[]) => T;\n\nexport interface HAppI<STATE> {\n state(): STATE;\n view(state: STATE): HElements;\n dispatcher(action: HAction, state: STATE, dispatch: HDispatch): Promise<void>;\n // dispatcher(this: HApp<STATE>, action: HAction, state: STATE, dispatch: HDispatch): Promise<void>;\n}\n\nexport function happi<STATE>(hAppI: Class<HAppI<STATE>>, e: Element | string | null = document.body) {\n const hapi = new hAppI();\n return new HApp<STATE>(hapi.state, hapi.view, hapi.dispatcher, e);\n}\n\n// HAppEl\n\nexport function happel<STATE>(elementName: string,\n elementAttrs: string[],\n state: HState<STATE>,\n view: HView<STATE>,\n dispatcher: HDispatcher<STATE>): void {\n customElements.define(elementName, class HAppElement extends HTMLElement {\n\n static get observedAttributes() {\n return elementAttrs;\n }\n\n private _happel: HApp<STATE>;\n\n constructor() {\n super();\n this._happel = new HApp<STATE>(state, view, dispatcher);\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(attrName: string, oldVal: string | null, newVal: string | null) {\n this._happel.dispatch(HAppAction._element, { attrName, oldVal, newVal });\n }\n\n });\n}\n\n// HAppC\n\nexport type HController<State> = (this: HApp<State>,\n data?: HAction[\"data\"],\n event?: HAction[\"event\"]) => void;\n\nexport type HControllers<State, TypeofActionEnum> = { [actionType in keyof TypeofActionEnum]?: HController<State>; };\n\nexport function controllersDdispatcher<State, TyopeofActionEnum>(controllers: HControllers<State, TyopeofActionEnum>): HDispatcher<State> {\n return async function (this: HApp<State>, action) {\n const controller = controllers[action.type as keyof TyopeofActionEnum];\n if (controller) {\n controller.apply<HApp<State>, [any?, Event?], void>(this, [action.data, action.event]);\n } else {\n warn(\"no controller for action\", action);\n }\n };\n}\n\nconst HAPP = \"happ\";\n\nexport class HApp<STATE> implements HHandlerCtx {\n\n static debug = false;\n\n readonly state: STATE;\n readonly view: HView<STATE>;\n readonly dispatcher: HDispatcher<STATE>;\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(state: HState<STATE>, view: HView<STATE>, dispatcher?: HDispatcher<STATE>, e: Element | string | null = document.body) {\n this.state = state();\n this.view = view;\n this.dispatcher = dispatcher ?? (async (a) => log(msgAction, a.type, a.data));\n this.dispatch(HAppAction._init, this).then(() => this.mount(e));\n }\n\n private async _dispatch(type: string, data: any, event: Event | undefined) {\n try {\n await this.dispatcher({ type, data, event }, this.state, this.dispatch);\n this._onDispatch?.({ type, data, event }, this.state, this.dispatch);\n this.dom && elementDispatchCustomEvent(this.dom, HAPP, { type, data, event });\n this.customElement && elementDispatchCustomEvent(this.customElement, type, data);\n !this.customElement && this.dom && elementDispatchCustomEvent(this.dom, type, data);\n this.update();\n } catch (e) {\n error(msgDispatch, e);\n }\n }\n\n onDispatch = (dispatcher: HDispatcher<STATE>): this => {\n this._onDispatch = dispatcher;\n return this;\n }\n\n dispatch: HDispatch = async (type: string, data?: any, event?: Event): Promise<void> => {\n if (HApp.debug) {\n log(msgAction, { type, data, event });\n const t0 = performance.now();\n await this._dispatch(type, data, event);\n const t1 = performance.now();\n log(msgDispatch, `${t1 - t0} ms`, this.state);\n } else {\n await this._dispatch(type, data, event);\n }\n }\n\n windowDispatch: HDispatch = async (type: string, data?: any, event?: Event): Promise<void> => {\n window.dispatchEvent(new CustomEvent(HAPP, { 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;\n this.dispatch(action.type, action.data, event);\n };\n window.addEventListener(HAPP, this._windowEventListener);\n } else {\n warn(\"windowEventListener olready setted\");\n }\n }\n\n windowDispatchOff() {\n if (this._windowEventListener) {\n window.removeEventListener(HAPP, this._windowEventListener);\n }\n }\n\n render = (): HElements => {\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 = (action: string, 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.dispatch(action, 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>;\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(el, hsmls, this);\n this.dispatch(HAppAction._mount, this.dom);\n }\n return this;\n }\n\n umount = (): this => {\n if (this.dom) {\n this.dispatch(HAppAction._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>;\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(this.dom, hsmls, this);\n }\n this._updateSched = undefined;\n });\n }\n return this;\n }\n\n toHsml = (): HElement => {\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.dispatch(HAppAction._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(el: Element, hsml: HElements, ctx: HHandlerCtx): 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(el: HTMLElement, type: string, data: any) {\n el?.dispatchEvent(new CustomEvent(type, { detail: data }));\n (el as any)[`on${type.toLowerCase()}`]?.(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\n// export const formInputData = <STATE>(dispatcher: Actions<STATE>): Actions<STATE> =>\n// (app: App<STATE>, action: string | number, data?: any, event?: Event): void => {\n// if (data === undefined && event) {\n// data = inputEventData(event);\n// }\n// dispatcher(app, action, data, event);\n// };\n\n// // Decorator\n// export function FormInputData() {\n// return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {\n// const method = descriptor.value;\n// descriptor.value = formInputData(method);\n// return descriptor;\n// };\n// }\n","import { HElement, HElements } from \"../src/hsml\";\nimport { HApp, happ, HAppAction, HDispatcher, HState, HView, HView1 } from \"../src/hsml-app\";\n\ninterface CounterState {\n count: number;\n}\n\nenum CounterAction {\n dec = \"counter-dec\",\n inc = \"counter-inc\"\n}\n\nconst counterView: HView1<CounterState> = (state: CounterState): HElement => {\n return [\"div~reference\", [\n [\"h2\", [\"Counter\"]],\n [\"p\", [\n [\"em\", [\"Count\"]], \": \", state.count,\n \" \",\n [\"button\", { on: [\"click\", CounterAction.dec, 1] }, [\"-\"]],\n [\"button\", { on: [\"click\", CounterAction.inc, 2] }, [\"+\"]]\n ]]\n ]];\n};\n\nconst counterDispatcher: HDispatcher<CounterState> = async function (this: HApp<CounterState>, 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 HAppAction._mount:\n this.windowDispatchOn();\n break;\n case HAppAction._umount:\n this.windowDispatchOff();\n break;\n\n case CounterAction.inc:\n state.count = state.count + action.data as number;\n setTimeout(() => dispatch(CounterAction.dec, 1), 1e3); // async call\n break;\n case CounterAction.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 Action {\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> = function (state: State): HElements {\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\", Action.title]\n }\n ], \" \",\n [\"button.w3-button.w3-blue\",\n {\n type: \"button\",\n on: [\"click\", Action.clear]\n },\n [\"Clear title\"]\n ]\n ]],\n counterView(state.counter),\n [\"h2\", [\"Form\"]],\n [\"form\",\n {\n on: [\n [\"submit\", Action.formSubmit],\n [\"change\", Action.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>(l => [\"option\", { value: l }, [l]])\n ],\n [\"br\"],\n \"sm \",\n [\"select\", { name: \"sm\", multiple: true },\n [\"sm1\", \"sm2\", \"sm3\"]\n .map<HElement>(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\", Action.xXx] }, [\"xXx\"]]\n ]],\n [\"h2\", [\"Props update\"]],\n [\"input\", { type: \"checkbox\", name: \"x\", on: [\"change\", Action.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> = async function (this: HApp<State>, 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 HAppAction._init:\n case HAppAction._mount:\n case HAppAction._umount:\n break;\n case Action.title:\n state.title = action.data;\n break;\n case Action.clear:\n state.title = \"\";\n break;\n case Action.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 Action.formChange:\n console.log(\"FormChange:\", JSON.stringify(action.data));\n break;\n case Action.xXx:\n // this.windowDispatch(\"global-type\", \"global-data\");\n this.windowDispatch(CounterAction.dec, 1);\n break;\n case Action.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>(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$15cfcbba5b21308e","HAppAction","$fe5fa9c04fc86188$var$schedule","window","requestAnimationFrame","callback","setTimeout","$fe5fa9c04fc86188$var$unschedule","cancelAnimationFrame","handle","clearTimeout","$fe5fa9c04fc86188$var$msgAction","$fe5fa9c04fc86188$var$msgDispatch","$fe5fa9c04fc86188$var$msgRender","$fe5fa9c04fc86188$export$eb8950696418f795","state","view","dispatcher","element","document","body","$fe5fa9c04fc86188$export$8cfef5dc37c46888","$fe5fa9c04fc86188$export$e905700d74a7763f","hAppI","e","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","_element","constructor","super","customElement","$fe5fa9c04fc86188$export$dd8a94d3c5ec9827","controllers","action","controller","type","apply","data","event","$fe5fa9c04fc86188$var$HAPP","_dispatch","_a","_onDispatch","call","dom","$fe5fa9c04fc86188$var$elementDispatchCustomEvent","windowDispatchOn","_windowEventListener","detail","addEventListener","windowDispatchOff","removeEventListener","refs","onDispatch","$fe5fa9c04fc86188$var$__awaiter","debug","t0","performance","now","t1","windowDispatch","dispatchEvent","CustomEvent","render","hsmls","actionCb","undefined","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","getElementById","$fe5fa9c04fc86188$var$updateDom","_mount","_umount","hasAttribute","removeAttribute","aNodes","querySelectorAll","a","happ","firstChild","removeChild","_updateSched","toHsml","_skip","toHtml","outerHTML","_init","then","hsml","ctx","$hrCkK","hsmls2idomPatch","_b","toLowerCase","iel","checked","sel","multiple","values","from","selectedOptions","map","o","tel","bel","$7a40690ab54246c9$var$CounterAction","CounterAction","$7a40690ab54246c9$var$counterView","count","on","dec","inc","$7a40690ab54246c9$var$counterDispatcher","$fe5fa9c04fc86188$exports","$7a40690ab54246c9$var$Action","Action","HApp","location","hostname","$7a40690ab54246c9$var$app","title","counter","clear","formSubmit","formChange","l","xXx","x","disabled","JSON","stringify","fe","fd","FormData","entries","Boolean","$7a40690ab54246c9$var$__awaiter","self","app"],"version":3,"file":"hsml-app-test_demo.3c7e16ae.js.map"}
|
|
@@ -1,2 +0,0 @@
|
|
|
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,"HAppAction",(function(){return h}),(function(t){return h=t})),t(s,"happ",(function(){return y}),(function(t){return y=t})),t(s,"HApp",(function(){return E}),(function(t){return E=t})),t(s,"happi",(function(){return b}),(function(t){return b=t})),t(s,"happel",(function(){return _}),(function(t){return _=t})),t(s,"controllersDdispatcher",(function(){return g}),(function(t){return g=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;(l=h||(h={}))._init="_init",l._mount="_mount",l._umount="_umount",l._element="_element";const m=window.requestAnimationFrame||function(t){window.setTimeout(t,1e3/60)},p=window.cancelAnimationFrame||function(t){window.clearTimeout(t)},f="HApp action:",v="HApp dispatch:",w="HApp render:";function y(t,e,n,i=document.body){return new E(t,e,n,i)}function b(t,e=document.body){const n=new t;return new E(n.state,n.view,n.dispatcher,e)}function _(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(h._element,{attrName:t,oldVal:e,newVal:n})}constructor(){super(),this._happel=new E(n,i,o),this._happel.customElement=this}})}function g(t){return function(e){return c(this,void 0,void 0,(function*(){const n=t[e.type];n?n.apply(this,[e.data,e.event]):u("no controller for action",e)}))}}const k="happ";class E{_dispatch(t,e,n){var i;return c(this,void 0,void 0,(function*(){try{yield this.dispatcher({type:t,data:e,event:n},this.state,this.dispatch),null===(i=this._onDispatch)||void 0===i||i.call(this,{type:t,data:e,event:n},this.state,this.dispatch),this.dom&&T(this.dom,k,{type:t,data:e,event:n}),this.customElement&&T(this.customElement,t,e),!this.customElement&&this.dom&&T(this.dom,t,e),this.update()}catch(t){d(v,t)}}))}windowDispatchOn(){this._windowEventListener?u("windowEventListener olready setted"):(this._windowEventListener=t=>{const e=t.detail;this.dispatch(e.type,e.data,t)},window.addEventListener(k,this._windowEventListener))}windowDispatchOff(){this._windowEventListener&&window.removeEventListener(k,this._windowEventListener)}constructor(t,e,n,i=document.body){this.refs={},this.onDispatch=t=>(this._onDispatch=t,this),this.dispatch=(t,e,n)=>c(this,void 0,void 0,(function*(){if(E.debug){r(f,{type:t,data:e,event:n});const i=performance.now();yield this._dispatch(t,e,n);const o=performance.now();r(v,o-i+" ms",this.state)}else yield this._dispatch(t,e,n)})),this.windowDispatch=(t,e,n)=>c(this,void 0,void 0,(function*(){window.dispatchEvent(new CustomEvent(k,{detail:{type:t,data:e}}))})),this.render=()=>{if(E.debug){const t=performance.now();let e;try{e=this.view(this.state)}catch(t){d(w,t)}const n=performance.now();return r(w,n-t+" ms",e),null!=e?e:[]}{let t;try{t=this.view(this.state)}catch(t){d(w,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=C(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 C(e)}(n)),this.dispatch(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;A(n,this.render(),this),this.dispatch(h._mount,this.dom)}return this},this.umount=()=>{if(this.dom){this.dispatch(h._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=m((()=>{if(this.dom){const t=this.render();A(this.dom,t,this)}this._updateSched=void 0}))),this),this.toHsml=()=>{if(this.dom){if(!this._updateSched)return["div",{_skip:!0}];p(this._updateSched),this._updateSched=void 0}const t=this.render();return t.push((t=>{this.dom||(this.dom=t,t.happ=this,this.dispatch(h._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(f,t.type,t.data)})),this.dispatch(h._init,this).then((()=>this.mount(i)))}}function A(t,e,n){if(E.debug){const i=performance.now();(0,a.hsmls2idomPatch)(t,e,n);const o=performance.now();r("HApp update:",o-i+" ms",t)}else(0,a.hsmls2idomPatch)(t,e,n)}function T(t,e,n){var i,o;null==t||t.dispatchEvent(new CustomEvent(e,{detail:n})),null===(o=(i=t)[`on${e.toLowerCase()}`])||void 0===o||o.call(i,new CustomEvent(e,{detail:n}))}function C(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}E.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())}))};const L=" ";var S,D;(D=S||(S={})).mark="mark",D.reset="reset";const H=()=>[[L,L,L],[L,L,L],[L,L,L]];const O=(0,s.happ)((function(){return{board:H(),turn:0}}),(function(t){return[["div.w3-content",[["h1",["Tic-Tac-Toe Demo"]],["div.w3-center",[["p.w3-xlarge",["Player: ",t.turn?"⨯":"◯"]],["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===L?["click",S.mark,{x:i,y:n,turn:t.turn}]:["click","noop"]},e]))]))],["p",[["button.w3-button.w3-blue",{on:["click",S.reset]},"Reset"]]]]]]]]}),(function(t,e,n){return x(this,void 0,void 0,(function*(){switch(console.log("action",t),t.type){case S.reset:e.board=H();break;case S.mark:e.board[t.data.y][t.data.x]=t.data.turn?"⨯":"◯",e.turn=t.data.turn?0:1}}))}));self.app=O}();
|
|
2
|
-
//# sourceMappingURL=hsml-app-tictactoe_demo.5f4861c1.js.map
|