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-tictactoe_demo.ts"],"sourcesContent":["import { HAttrOnData, HAttrOnDataFnc, HElement, HElements, HHandlerCtx } from \"./hsml\";\nimport { hsmls2idomPatch } from \"./hsml-idom\";\n\nconst log = console.log;\nconst error = console.error;\nconst warn = console.warn;\n\nexport type HState<STATE> = () => STATE;\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 { HAction, happ, HDispatch } from \"../src/hsml-app\";\n\nconst NBSP = \"\\u00A0\";\nconst CIRC = \"\\u25EF\";\nconst CROS = \"\\u2A2F\";\n\ninterface TicTacToeState {\n board: string[][];\n turn: number;\n}\n\nconst enum TicTacToeActions {\n mark = \"mark\",\n reset = \"reset\"\n}\n\nconst boardInit = () => [\n [NBSP, NBSP, NBSP],\n [NBSP, NBSP, NBSP],\n [NBSP, NBSP, NBSP]\n];\n\nfunction state(): TicTacToeState {\n return {\n board: boardInit(),\n turn: 0\n };\n}\n\nfunction view(state: TicTacToeState): HElements {\n return [\n [\"div.w3-content\", [\n [\"h1\", [\"Tic-Tac-Toe Demo\"]],\n [\"div.w3-center\", [\n [\"p.w3-xlarge\", [\n \"Player: \", state.turn ? CROS : CIRC,\n ]],\n [\"div\", state.board.map<HElement>((row, y) =>\n [\"div\", row.map<HElement>((col, x) =>\n [\"button.w3-button.w3-white.w3-border.w3-border-gray\",\n {\n styles: {\n fontFamily: \"monospace\",\n fontSize: \"300%\",\n display: \"inline-block\",\n width: \"2em\",\n height: \"2em\"\n },\n on: (col === NBSP)\n ? [\"click\", TicTacToeActions.mark, { x, y, turn: state.turn }]\n : [\"click\", \"noop\"]\n },\n col\n ])\n ])\n ],\n [\"p\", [\n [\"button.w3-button.w3-blue\", { on: [\"click\", TicTacToeActions.reset] }, \"Reset\"]\n ]]\n ]]\n ]]\n ];\n}\n\nasync function dispatcher(action: HAction, state: TicTacToeState, dispatch: HDispatch): Promise<void> {\n console.log(\"action\", action);\n\n switch (action.type) {\n\n case TicTacToeActions.reset:\n state.board = boardInit();\n break;\n\n case TicTacToeActions.mark:\n state.board[action.data.y][action.data.x] = action.data.turn ? CROS : CIRC;\n state.turn = action.data.turn ? 0 : 1;\n break;\n }\n}\n\nconst app = happ<TicTacToeState>(state, view, dispatcher);\n\n(self as any).app = app;\n\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","$94175cc66aed1527$var$NBSP","$94175cc66aed1527$var$TicTacToeActions","TicTacToeActions","$94175cc66aed1527$var$boardInit","$94175cc66aed1527$var$app","$a85519cc1b20a4af$exports","board","turn","row","y","col","x","styles","fontFamily","fontSize","display","width","height","on","mark","reset","self","app"],"version":3,"file":"hsml-app-tictactoe_demo.5f4861c1.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 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("hrCkK"),c=function(t,e,n,i){return new(n||(n=Promise))((function(o,s){function a(t){try{r(i.next(t))}catch(t){s(t)}}function c(t){try{r(i.throw(t))}catch(t){s(t)}}function r(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,c)}r((i=i.apply(t,e||[])).next())}))};const r=console.log,d=console.error,u=console.warn;var h,l;(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&&C(this.dom,k,{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(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=T(n[t]);if("object"==typeof e){const o=Object.keys(e);if(o.length){const s=o[0],a=e[s];void 0===i[s]?i[s]=a:"string"==typeof i[s]||i[s]instanceof String?i[s]=a instanceof Array?[i[s],...a]:[i[s],a]:i[s]instanceof Array?a instanceof Array?i[s]=i[s].concat(a):i[s].push(a):i[s]=a instanceof Array?[i[s],...a]:[i[s],a],i[s]instanceof Array&&(i[s]=i[s].filter((t=>null!==t)),"radio"===n[t].type&&(i[s]=i[s].length?i[s][0]:null))}}}return i}return T(e)}(n)),this.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 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 T(t){let e=null;switch(t.nodeName){case"INPUT":const n=t;switch(n.type){case"text":case"hidden":case"password":case"email":case"number":case"search":case"url":case"tel":case"color":case"date":case"datetime-local":case"month":case"range":case"time":case"week":case"submit":case"button":e=n.name?{[n.name]:n.value}:n.value;break;case"radio":e=n.name?{[n.name]:n.checked?n.value:null}:n.checked?n.value:null;break;case"checkbox":e="on"===n.value?n.name?{[n.name]:n.checked}:n.checked:n.name?{[n.name]:n.checked?String(n.value):null}:n.checked?String(n.value):null}break;case"SELECT":const i=t;if(i.multiple){const t=Array.from(i.selectedOptions).map((t=>t.value));e=i.name?{[i.name]:t}:t}else e=i.name?{[i.name]:i.value}:i.value;break;case"TEXTAREA":const o=t;e=o.name?{[o.name]:o.value}:o.value;break;case"BUTTON":const s=t;e=s.name?{[s.name]:s.value}:s.value}return e}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.7deeabad.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":"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","sources":["src/hsml-app.ts","demo/hsml-app-tictactoe_demo.ts"],"sourcesContent":["import { HAttrOnData, HAttrOnDataFnc, HElement, HElements, HHandlerCtx } from \"./hsml\";\nimport { hsmls2idomPatch } from \"./hsml-idom\";\n\nconst log = console.log;\nconst error = console.error;\nconst warn = console.warn;\n\nexport type HState<STATE> = () => STATE;\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 { HAction, happ, HDispatch } from \"../src/hsml-app\";\n\nconst NBSP = \"\\u00A0\";\nconst CIRC = \"\\u25EF\";\nconst CROS = \"\\u2A2F\";\n\ninterface TicTacToeState {\n board: string[][];\n turn: number;\n}\n\nconst enum TicTacToeActions {\n mark = \"mark\",\n reset = \"reset\"\n}\n\nconst boardInit = () => [\n [NBSP, NBSP, NBSP],\n [NBSP, NBSP, NBSP],\n [NBSP, NBSP, NBSP]\n];\n\nfunction state(): TicTacToeState {\n return {\n board: boardInit(),\n turn: 0\n };\n}\n\nfunction view(state: TicTacToeState): HElements {\n return [\n [\"div.w3-content\", [\n [\"h1\", [\"Tic-Tac-Toe Demo\"]],\n [\"div.w3-center\", [\n [\"p.w3-xlarge\", [\n \"Player: \", state.turn ? CROS : CIRC,\n ]],\n [\"div\", state.board.map<HElement>((row, y) =>\n [\"div\", row.map<HElement>((col, x) =>\n [\"button.w3-button.w3-white.w3-border.w3-border-gray\",\n {\n styles: {\n fontFamily: \"monospace\",\n fontSize: \"300%\",\n display: \"inline-block\",\n width: \"2em\",\n height: \"2em\"\n },\n on: (col === NBSP)\n ? [\"click\", TicTacToeActions.mark, { x, y, turn: state.turn }]\n : [\"click\", \"noop\"]\n },\n col\n ])\n ])\n ],\n [\"p\", [\n [\"button.w3-button.w3-blue\", { on: [\"click\", TicTacToeActions.reset] }, \"Reset\"]\n ]]\n ]]\n ]]\n ];\n}\n\nasync function dispatcher(action: HAction, state: TicTacToeState, dispatch: HDispatch): Promise<void> {\n console.log(\"action\", action);\n\n switch (action.type) {\n\n case TicTacToeActions.reset:\n state.board = boardInit();\n break;\n\n case TicTacToeActions.mark:\n state.board[action.data.y][action.data.x] = action.data.turn ? CROS : CIRC;\n state.turn = action.data.turn ? 0 : 1;\n break;\n }\n}\n\nconst app = happ<TicTacToeState>(state, view, dispatcher);\n\n(self as any).app = app;\n\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","$28c4e665e35b51d0$var$NBSP","$28c4e665e35b51d0$var$TicTacToeActions","TicTacToeActions","$28c4e665e35b51d0$var$boardInit","$28c4e665e35b51d0$var$app","$fe5fa9c04fc86188$exports","board","turn","row","y","col","x","styles","fontFamily","fontSize","display","width","height","on","mark","reset","self","app"],"version":3,"file":"hsml-app-tictactoe_demo.7deeabad.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 k}),(function(t){return k=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,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:",w="HApp render:";function y(t,e,n,i=document.body){return new k(t,e,n,i)}function b(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 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]):d("no controller for action",e)}))}}const E="happ";class k{_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&&S(this.dom,E,{type:t,data:e,event:n}),this.customElement&&S(this.customElement,t,e),!this.customElement&&this.dom&&S(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(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)=>c(this,void 0,void 0,(function*(){if(k.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(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){u(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){u(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[E]){n[E].umount()}if(!this.dom){this.dom=n,n[E]=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(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();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=>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(k.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 S(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}k.debug=!1;var H,T,L=function(t,e,n,i){return new(n||(n=Promise))((function(o,s){function a(t){try{r(i.next(t))}catch(t){s(t)}}function c(t){try{r(i.throw(t))}catch(t){s(t)}}function r(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,c)}r((i=i.apply(t,e||[])).next())}))};(T=H||(H={})).say="say",T.fetch="fetch";s.HApp.debug=!0,window.app=new(0,s.HApp)((function(){return{message:"",json:""}}),(function(t){return[["p",["Greeting: ",t.message]],["p",[["button",{on:["click",H.say,"Hello"]},"Say Hello"]," ",["button",{on:["click",H.say,"Hi"]},"Say Hi"]]],["p",[["button",{on:["click",H.fetch]},"Server fetch time"],["pre",t.json]]]]}),(function(t,e,n){return L(this,void 0,void 0,(function*(){switch(t.type){case H.say:e.message=t.data;break;case H.fetch:try{const t=yield fetch("http://date.jsontest.com"),n=yield t.json();e.json=JSON.stringify(n,null,4)}catch(t){e.json=String(t)}}}))}))}();
|
|
2
|
-
//# sourceMappingURL=hsml-app_demo.87d83c29.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":"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","sources":["src/hsml-app.ts","demo/hsml-app_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 { HApp, HDispatcher, HState, HView } from \"../src/hsml-app\";\n\n// Actions definition\nenum Action {\n say = \"say\",\n fetch = \"fetch\"\n}\n\ninterface State {\n message: string;\n json: string;\n}\n\n// App state definition and initialization\nconst state: HState<State> = function () {\n return {\n message: \"\",\n json: \"\"\n };\n};\n\n// Template function, returns HSML markup generated from app state\nconst view: HView<State> = function (state) {\n return [\n [\"p\", [\n \"Greeting: \", state.message\n ]],\n [\"p\", [\n // On button event \"click\" dispatch Action.say type with data \"Hello\"\n [\"button\", { on: [\"click\", Action.say, \"Hello\"] }, \"Say Hello\"],\n \" \",\n [\"button\", { on: [\"click\", Action.say, \"Hi\"] }, \"Say Hi\"],\n ]],\n [\"p\", [\n [\"button\", { on: [\"click\", Action.fetch] }, \"Server fetch time\"],\n [\"pre\", state.json]\n ]]\n ];\n};\n\n// Action dispatcher, app logic\nconst dispatcher: HDispatcher<State> = async function (action, state, dispatch) {\n switch (action.type) {\n // Dispatch action \"say\"\n case Action.say:\n // Change app state message by action data (3. parameter of on click action)\n state.message = action.data;\n break;\n case Action.fetch:\n // Server async call\n try {\n const res = await fetch(\"http://date.jsontest.com\");\n const data = await res.json();\n state.json = JSON.stringify(data, null, 4);\n } catch (error) {\n state.json = String(error);\n }\n break;\n }\n};\n\n// Debug mode logging HApp actions, rendering, dispatching info\nHApp.debug = true;\n\n// Run application\n(window as any).app = new HApp(state, view, dispatcher);\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","$5a015c3502db65db$var$Action","Action","$a85519cc1b20a4af$exports","HApp","app","message","json","on","say","fetch","res","JSON","stringify"],"version":3,"file":"hsml-app_demo.87d83c29.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 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 u}),(function(t){return u=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 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("hrCkK"),c=function(t,e,n,i){return new(n||(n=Promise))((function(o,s){function a(t){try{r(i.next(t))}catch(t){s(t)}}function c(t){try{r(i.throw(t))}catch(t){s(t)}}function r(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,c)}r((i=i.apply(t,e||[])).next())}))};const r=console.log,d=console.error,h=console.warn;var u,l;(l=u||(u={}))._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:",w="HApp render:";function y(t,e,n,i=document.body){return new k(t,e,n,i)}function b(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(u._element,{attrName:t,oldVal:e,newVal:n})}constructor(){super(),this._happel=new k(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]):h("no controller for action",e)}))}}const E="happ";class k{_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&&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(v,t)}}))}windowDispatchOn(){this._windowEventListener?h("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)=>c(this,void 0,void 0,(function*(){if(k.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(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(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=S(n[t]);if("object"==typeof e){const o=Object.keys(e);if(o.length){const s=o[0],a=e[s];void 0===i[s]?i[s]=a:"string"==typeof i[s]||i[s]instanceof String?i[s]=a instanceof Array?[i[s],...a]:[i[s],a]:i[s]instanceof Array?a instanceof Array?i[s]=i[s].concat(a):i[s].push(a):i[s]=a instanceof Array?[i[s],...a]:[i[s],a],i[s]instanceof Array&&(i[s]=i[s].filter((t=>null!==t)),"radio"===n[t].type&&(i[s]=i[s].length?i[s][0]:null))}}}return i}return S(e)}(n)),this.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;A(n,this.render(),this),this.dispatch(u._mount,this.dom)}return this},this.umount=()=>{if(this.dom){this.dispatch(u._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();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(u._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(u._init,this).then((()=>this.mount(i)))}}function A(t,e,n){if(k.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 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 S(t){let e=null;switch(t.nodeName){case"INPUT":const n=t;switch(n.type){case"text":case"hidden":case"password":case"email":case"number":case"search":case"url":case"tel":case"color":case"date":case"datetime-local":case"month":case"range":case"time":case"week":case"submit":case"button":e=n.name?{[n.name]:n.value}:n.value;break;case"radio":e=n.name?{[n.name]:n.checked?n.value:null}:n.checked?n.value:null;break;case"checkbox":e="on"===n.value?n.name?{[n.name]:n.checked}:n.checked:n.name?{[n.name]:n.checked?String(n.value):null}:n.checked?String(n.value):null}break;case"SELECT":const i=t;if(i.multiple){const t=Array.from(i.selectedOptions).map((t=>t.value));e=i.name?{[i.name]:t}:t}else e=i.name?{[i.name]:i.value}:i.value;break;case"TEXTAREA":const o=t;e=o.name?{[o.name]:o.value}:o.value;break;case"BUTTON":const s=t;e=s.name?{[s.name]:s.value}:s.value}return e}k.debug=!1;var H,L,T=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())}))};(L=H||(H={})).say="say",L.fetch="fetch";s.HApp.debug=!0,window.app=new(0,s.HApp)((function(){return{message:"",json:""}}),(function(t){return[["p",["Greeting: ",t.message]],["p",[["button",{on:["click",H.say,"Hello"]},"Say Hello"]," ",["button",{on:["click",H.say,"Hi"]},"Say Hi"]]],["p",[["button",{on:["click",H.fetch]},"Server fetch time"],["pre",t.json]]]]}),(function(t,e,n){return T(this,void 0,void 0,(function*(){switch(t.type){case H.say:e.message=t.data;break;case H.fetch:try{const t=yield fetch("http://date.jsontest.com"),n=yield t.json();e.json=JSON.stringify(n,null,4)}catch(t){e.json=String(t)}}}))}));
|
|
2
|
-
//# sourceMappingURL=hsml-app_demo.941a13a6.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":"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","sources":["src/hsml-app.ts","demo/hsml-app_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 { HApp, HDispatcher, HState, HView } from \"../src/hsml-app\";\n\n// Actions definition\nenum Action {\n say = \"say\",\n fetch = \"fetch\"\n}\n\ninterface State {\n message: string;\n json: string;\n}\n\n// App state definition and initialization\nconst state: HState<State> = function () {\n return {\n message: \"\",\n json: \"\"\n };\n};\n\n// Template function, returns HSML markup generated from app state\nconst view: HView<State> = function (state) {\n return [\n [\"p\", [\n \"Greeting: \", state.message\n ]],\n [\"p\", [\n // On button event \"click\" dispatch Action.say type with data \"Hello\"\n [\"button\", { on: [\"click\", Action.say, \"Hello\"] }, \"Say Hello\"],\n \" \",\n [\"button\", { on: [\"click\", Action.say, \"Hi\"] }, \"Say Hi\"],\n ]],\n [\"p\", [\n [\"button\", { on: [\"click\", Action.fetch] }, \"Server fetch time\"],\n [\"pre\", state.json]\n ]]\n ];\n};\n\n// Action dispatcher, app logic\nconst dispatcher: HDispatcher<State> = async function (action, state, dispatch) {\n switch (action.type) {\n // Dispatch action \"say\"\n case Action.say:\n // Change app state message by action data (3. parameter of on click action)\n state.message = action.data;\n break;\n case Action.fetch:\n // Server async call\n try {\n const res = await fetch(\"http://date.jsontest.com\");\n const data = await res.json();\n state.json = JSON.stringify(data, null, 4);\n } catch (error) {\n state.json = String(error);\n }\n break;\n }\n};\n\n// Debug mode logging HApp actions, rendering, dispatching info\nHApp.debug = true;\n\n// Run application\n(window as any).app = new HApp(state, view, dispatcher);\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","$f21569018d4331f7$var$Action","Action","$fe5fa9c04fc86188$exports","HApp","app","message","json","on","say","fetch","res","JSON","stringify"],"version":3,"file":"hsml-app_demo.941a13a6.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 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 u}),(function(t){return u=t})),t(s,"happ",(function(){return y}),(function(t){return y=t})),t(s,"HApp",(function(){return A}),(function(t){return A=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("hrCkK"),c=function(t,e,n,i){return new(n||(n=Promise))((function(o,s){function a(t){try{r(i.next(t))}catch(t){s(t)}}function c(t){try{r(i.throw(t))}catch(t){s(t)}}function r(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,c)}r((i=i.apply(t,e||[])).next())}))};const r=console.log,d=console.error,h=console.warn;var u,l;(l=u||(u={}))._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 A(t,e,n,i)}function b(t,e=document.body){const n=new t;return new A(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(u._element,{attrName:t,oldVal:e,newVal:n})}constructor(){super(),this._happel=new A(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]):h("no controller for action",e)}))}}const E="happ";class A{_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&&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(v,t)}}))}windowDispatchOn(){this._windowEventListener?h("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)=>c(this,void 0,void 0,(function*(){if(A.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(E,{detail:{type:t,data:e}}))})),this.render=()=>{if(A.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=L(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 L(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;k(n,this.render(),this),this.dispatch(u._mount,this.dom)}return this},this.umount=()=>{if(this.dom){this.dispatch(u._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=m((()=>{if(this.dom){const t=this.render();k(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(u._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(u._init,this).then((()=>this.mount(i)))}}function k(t,e,n){if(A.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 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 L(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}var T;A.debug=!1,(T||(T={})).name="name";const H=(0,s.happ)((function(){return{name:""}}),(function(t){return[["h1","Hello"],["input~focus",{type:"text",placeholder:"name",on:["input",T.name]}],["p",t.name?["Hello ",["b",t.name],"!"]:"Greeting"]]}),(0,s.controllersDdispatcher)({_mount:function(t){this.refs.focus.focus()},name:function(t){this.state.name=t}}));self.app=H;
|
|
2
|
-
//# sourceMappingURL=hsml-appc_demo.0234ff15.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":"wwCAGA,MAAMA,EAAMC,QAAQC,IACdC,EAAQF,QAAQG,MAChBC,EAAOJ,QAAQK,KAqBrB,IAAYC,EAAAC,KAAAD,MAAU,KAClB,cACAC,EAAA,gBACAA,EAAA,kBACAA,EAAA,oBAGJ,MAAMC,EAAWC,OAAOC,uBAKpB,SAAUC,GAAsBF,OAAOG,WAAWD,EAAU,IAAO,GAAK,EAEtEE,EAAaJ,OAAOK,sBAKtB,SAAUC,GAAkBN,OAAOO,aAAaD,EAAS,EAEvDE,EAAY,eACZC,EAAc,iBACdC,EAAY,eAGZ,SAAUC,EAAYC,EACAC,EACAC,EACAC,EAAmCC,SAASC,MACpE,OAAO,IAAIC,EAAYN,EAAOC,EAAMC,EAAYC,EACpD,CAaM,SAAUI,EAAaC,EAA4BC,EAA6BL,SAASC,MAC3F,MAAMK,EAAO,IAAIF,EACjB,OAAO,IAAIF,EAAYI,EAAKV,MAAOU,EAAKT,KAAMS,EAAKR,WAAYO,EACnE,CAIM,SAAUE,EAAcC,EACAC,EACAb,EACAC,EACAC,GAC1BY,eAAeC,OAAOH,EAAa,cAA0BI,YAE9CC,gCACP,OAAOJ,CACX,CAUAK,oBAEIC,KAAKC,aAAa,CAAEC,KAAM,SAC1BF,KAAKG,QAAQC,MAAMJ,KAAKK,WAC5B,CAEAC,uBACIN,KAAKG,QAAQI,QACjB,CAEAC,kBACIR,KAAKG,QAAQM,QACjB,CAEAC,yBAAyBC,EAAkBC,EAAuBC,GAC9Db,KAAKG,QAAQW,SAAShD,EAAWiD,SAAU,C,SAAEJ,E,OAAUC,E,OAAQC,GACnE,CAtBAG,cACIC,QACAjB,KAAKG,QAAU,IAAIhB,EAAYN,EAAOC,EAAMC,GAC3CiB,KAAKG,QAAgBe,cAAgBlB,IAC1C,GAqBR,CAUM,SAAUmB,EAAiDC,GAC7D,OAAO,SAAmCC,G,yCACtC,MAAMC,EAAaF,EAAYC,EAAOE,MAClCD,EACAA,EAAWE,MAAyCxB,KAAM,CAACqB,EAAOI,KAAMJ,EAAOK,QAE/E9D,EAAK,2BAA4ByD,EAEzC,GAAC,CACL,CAEA,MAAMM,EAAO,OAEP,MAAOxC,EA0BKyC,UAAUL,EAAcE,EAAWC,G,+CAC7C,UACU1B,KAAKjB,WAAW,C,KAAEwC,E,KAAME,E,MAAMC,GAAS1B,KAAKnB,MAAOmB,KAAKc,UAC9C,QAAhBe,EAAA7B,KAAK8B,mBAAW,IAAAD,KAAAE,KAAA/B,KAAG,C,KAAEuB,E,KAAME,E,MAAMC,GAAS1B,KAAKnB,MAAOmB,KAAKc,UAC3Dd,KAAKgC,KAAOC,EAA2BjC,KAAKgC,IAAKL,EAAM,C,KAAEJ,E,KAAME,E,MAAMC,IACrE1B,KAAKkB,eAAiBe,EAA2BjC,KAAKkB,cAAeK,EAAME,IAC1EzB,KAAKkB,eAAiBlB,KAAKgC,KAAOC,EAA2BjC,KAAKgC,IAAKT,EAAME,GAC9EzB,KAAKS,QAGR,CAFC,MAAOnB,GACL5B,EAAMgB,EAAaY,EACtB,C,GACJ,CAuBD4C,mBACSlC,KAAKmC,qBAONvE,EAAK,uCANLoC,KAAKmC,qBAAwBT,IACzB,MAAML,EAAUK,EAAsBU,OACtCpC,KAAKc,SAASO,EAAOE,KAAMF,EAAOI,KAAMC,EAAA,EAE5CzD,OAAOoE,iBAAiBV,EAAM3B,KAAKmC,sBAI3C,CAEAG,oBACQtC,KAAKmC,sBACLlE,OAAOsE,oBAAoBZ,EAAM3B,KAAKmC,qBAE9C,CAzDAnB,YAAYnC,EAAsBC,EAAoBC,EAAiCO,EAA6BL,SAASC,MARpHc,KAAAwC,KAAuC,GA4BhDxC,KAAAyC,WAAc1D,IACViB,KAAK8B,YAAc/C,EACZiB,MAGXA,KAAAc,SAAuB,CAAOS,EAAcE,EAAYC,IAAxDgB,EAAA1C,UAAA,sBACI,GAAIb,EAAKwD,MAAO,CACZpF,EAAIkB,EAAW,C,KAAE8C,E,KAAME,E,MAAMC,IAC7B,MAAMkB,EAAKC,YAAYC,YACjB9C,KAAK4B,UAAUL,EAAME,EAAMC,GACjC,MAAMqB,EAAKF,YAAYC,MACvBvF,EAAImB,EAAgBqE,EAAKH,EAAR,MAAiB5C,KAAKnB,MAC1C,YACSmB,KAAK4B,UAAUL,EAAME,EAAMC,EAEzC,IAEA1B,KAAAgD,eAA6B,CAAOzB,EAAcE,EAAYC,IAA9DgB,EAAA1C,UAAA,sBACI/B,OAAOgF,cAAc,IAAIC,YAAYvB,EAAM,CAAES,OAAQ,C,KAAEb,E,KAAME,KACjE,IAoBAzB,KAAAmD,OAAS,KACL,GAAIhE,EAAKwD,MAAO,CACZ,MAAMC,EAAKC,YAAYC,MACvB,IAAIM,EACJ,IACIA,EAAQpD,KAAKlB,KAAKkB,KAAKnB,MAG1B,CAFC,MAAOS,GACL5B,EAAMiB,EAAWW,EACpB,CACD,MAAMyD,EAAKF,YAAYC,MAEvB,OADAvF,EAAIoB,EAAcoE,EAAKH,EAAR,MAAiBQ,GACzBA,UAAS,EACnB,CAAM,CACH,IAAIA,EACJ,IACIA,EAAQpD,KAAKlB,KAAKkB,KAAKnB,MAG1B,CAFC,MAAOS,GACL5B,EAAMiB,EAAWW,EACpB,CACD,OAAO8D,UAAS,EACnB,GAGLpD,KAAAqD,SAAW,CAAChC,EAAgBI,EAAmBC,UAI9B4B,KAHb7B,GAAQA,aAAI,EAAJA,EAAMT,eAAgBuC,SACvB9B,EAAwBC,GACzBD,IACoBC,IAElBD,EADAC,aAAiBwB,YACVxB,EAAMU,OAsG7B,SAAkB9C,GACd,MAAMkE,EAAKlE,EAAEmE,OACb,GACS,SADDD,EAAGE,SACP,CACKpE,EAAYqE,iBACb,MAAMC,EAAOJ,EAAuBK,SAC9BpC,EAAO,GACb,IAAK,IAAIqC,EAAI,EAAGA,EAAIF,EAAIG,OAAQD,IAAK,CACjC,MAAME,EAAIC,EAAcL,EAAIE,IAC5B,GAAiB,iBAANE,EAAgB,CACvB,MAAME,EAAQC,OAAOC,KAAKJ,GAC1B,GAAIE,EAAMH,OAAQ,CACd,MAAMM,EAAOH,EAAM,GACbI,EAASN,EAAUK,QACNf,IAAf7B,EAAK4C,GACL5C,EAAK4C,GAAQC,EACgB,iBAAf7C,EAAK4C,IAAsB5C,EAAK4C,aAAiBE,OAE3D9C,EAAK4C,GADLC,aAAiBE,MACJ,CAAC/C,EAAK4C,MAAoBC,GAE1B,CAAC7C,EAAK4C,GAAiBC,GAEjC7C,EAAK4C,aAAiBG,MACzBF,aAAiBE,MACjB/C,EAAK4C,GAAS5C,EAAK4C,GAA+BI,OAAOH,GAExD7C,EAAK4C,GAA+BK,KAAKJ,GAI1C7C,EAAK4C,GADLC,aAAiBE,MACJ,CAAC/C,EAAK4C,MAAoBC,GAE1B,CAAC7C,EAAK4C,GAAiBC,GAGxC7C,EAAK4C,aAAiBG,QACtB/C,EAAK4C,GAAS5C,EAAK4C,GACdM,QAAOX,GAAW,OAANA,IACyB,UAArCJ,EAAIE,GAAwBvC,OAC7BE,EAAK4C,GAAS5C,EAAK4C,GAA+BN,OAC3CtC,EAAK4C,GAA+B,GACrC,MAGjB,CACJ,CACJ,CACD,OAAO5C,CAAA,CAEP,OAAOwC,EAAcT,EAEjC,CAvJuBoB,CAASlD,IAGxB1B,KAAKc,SAASO,EAAQI,EAAMC,EAAA,EAGhC1B,KAAAI,MAAQ,CAACd,EAA6BL,SAASC,Q,MAC3C,MAAMsE,EAAmB,iBAANlE,EACa,QAA1BuC,EAAA5C,SAAS4F,eAAevF,UAAE,IAAAuC,IAAI5C,SAASC,KACvCI,UAAKL,SAASC,KACpB,GAAKsE,EAAW7B,GAAO,CACR6B,EAAW7B,GACpBpB,QACL,CACD,IAAKP,KAAKgC,IAAK,CACVhC,KAAagC,IAAMwB,EACnBA,EAAW7B,GAAQ3B,KAEpB8E,EAAUtB,EADKxD,KAAamD,SACPnD,MACrBA,KAAKc,SAAShD,EAAWiH,OAAQ/E,KAAKgC,IACzC,CACD,OAAOhC,IAAI,EAGfA,KAAAO,OAAS,KACL,GAAIP,KAAKgC,IAAK,CACVhC,KAAKc,SAAShD,EAAWkH,QAAShF,KAAKgC,KACnChC,KAAKgC,IAAIiD,aAAatD,IACtB3B,KAAKgC,IAAIkD,gBAAgBvD,GAE7B,MAAMwD,EAASnF,KAAKgC,IAAIoD,iBAAiB,IAAIzD,MAC7C,IAAK,IAAImC,EAAI,EAAGA,EAAIqB,EAAOpB,OAAQD,IAAK,CACpC,MAAMuB,EAAKF,EAAOrB,GAAWwB,KAC7BD,WAAG9E,QACN,CACD,KAAOP,KAAKgC,IAAIuD,YACZvF,KAAKgC,IAAIwD,YAAYxF,KAAKgC,IAAIuD,mBAE1BvF,KAAKgC,IAAYsD,KACxBtF,KAAagC,SAAMsB,CACvB,CACD,OAAOtD,IAAI,EAGfA,KAAAS,OAAS,KACDT,KAAKgC,MAAQhC,KAAKyF,eAClBzF,KAAKyF,aAAezH,GAAS,KACzB,GAAIgC,KAAKgC,IAAK,CACV,MAAMoB,EAAQpD,KAAKmD,SACnB2B,EAAU9E,KAAKgC,IAAKoB,EAAOpD,KAC9B,CACDA,KAAKyF,kBAAenC,CAAA,KAGrBtD,MAGXA,KAAA0F,OAAS,KACL,GAAI1F,KAAKgC,IAAK,CACV,IAAIhC,KAAKyF,aAIL,MAAO,CAAC,MAAO,CAAEE,OAAO,IAHxBtH,EAAW2B,KAAKyF,cAChBzF,KAAKyF,kBAAenC,CAI3B,CACD,MAAMF,EAAQpD,KAAKmD,SASnB,OARAC,EAAMsB,MACDpF,IACQU,KAAKgC,MACLhC,KAAagC,IAAM1C,EACnBA,EAAUgG,KAAOtF,KAClBA,KAAKc,SAAShD,EAAWiH,OAAQ/E,KAAKgC,KACzC,IAEF,CAAC,MAAOoB,EAAM,EAGzBpD,KAAA4F,OAAS,IACE5F,KAAKgC,IAAMhC,KAAKgC,IAAI6D,UAAY,GAxKvC7F,KAAKnB,MAAQA,IACbmB,KAAKlB,KAAOA,EACZkB,KAAKjB,WAAaA,UAAsBsG,GAAK3C,EAAA1C,UAAA,sBAAC,OAAAzC,EAAIkB,EAAW4G,EAAE9D,KAAM8D,EAAE5D,KAAK,IAC5EzB,KAAKc,SAAShD,EAAWgI,MAAO9F,MAAM+F,MAAK,IAAM/F,KAAKI,MAAMd,IAChE,EAyKJ,SAASwF,EAAUtB,EAAawC,EAAiBC,GAC7C,GAAI9G,EAAKwD,MAAO,CACZ,MAAMC,EAAKC,YAAYC,OACvB,EAAAoD,EAAAC,iBAAgB3C,EAAIwC,EAAMC,GAC1B,MAAMlD,EAAKF,YAAYC,MACvBvF,EA9RU,eA8RQwF,EAAKH,EAAR,MAAiBY,EACnC,MACG,EAAA0C,EAAAC,iBAAgB3C,EAAIwC,EAAMC,EAElC,CAEA,SAAShE,EAA2BuB,EAAiBjC,EAAcE,G,QAC/D+B,WAAIP,cAAc,IAAIC,YAAY3B,EAAM,CAAEa,OAAQX,KACZ,QAAtC2E,GAAAvE,EAAC2B,GAAW,KAAKjC,EAAK8E,wBAAgB,IAAAD,KAAArE,KAAAF,EAAG,IAAIqB,YAAY3B,EAAM,CAAEa,OAAQX,IAC7E,CAuDA,SAASwC,EAAcT,GACnB,IAAI/B,EAA2I,KAC/I,OAAQ+B,EAAGE,UACP,IAAK,QACD,MAAM4C,EAAM9C,EACZ,OAAQ8C,EAAI/E,MACR,IAAK,OACL,IAAK,SACL,IAAK,WACL,IAAK,QACL,IAAK,SACL,IAAK,SACL,IAAK,MACL,IAAK,MACL,IAAK,QACL,IAAK,OACL,IAAK,iBACL,IAAK,QACL,IAAK,QACL,IAAK,OACL,IAAK,OACL,IAAK,SACL,IAAK,SAEGE,EADA6E,EAAIjC,KACG,CAAE,CAACiC,EAAIjC,MAAOiC,EAAIhC,OAElBgC,EAAIhC,MAEf,MACJ,IAAK,QAEG7C,EADA6E,EAAIjC,KACG,CAAE,CAACiC,EAAIjC,MAAOiC,EAAIC,QAAUD,EAAIhC,MAAQ,MAExCgC,EAAIC,QAAUD,EAAIhC,MAAQ,KAErC,MACJ,IAAK,WAGO7C,EAFU,OAAd6E,EAAIhC,MACAgC,EAAIjC,KACG,CAAE,CAACiC,EAAIjC,MAAOiC,EAAIC,SAElBD,EAAIC,QAGXD,EAAIjC,KACG,CAAE,CAACiC,EAAIjC,MAAOiC,EAAIC,QACnBhC,OAAO+B,EAAIhC,OACX,MAECgC,EAAIC,QACLhC,OAAO+B,EAAIhC,OACX,KAKtB,MACJ,IAAK,SACD,MAAMkC,EAAMhD,EACZ,GAAIgD,EAAIC,SAAU,CACd,MAAMC,EAASlC,MAAMmC,KAAKH,EAAII,iBAAiBC,KAAIC,GAAKA,EAAExC,QAEtD7C,EADA+E,EAAInC,KACG,CAAE,CAACmC,EAAInC,MAAOqC,GAEdA,CAEd,MAEOjF,EADA+E,EAAInC,KACG,CAAE,CAACmC,EAAInC,MAAOmC,EAAIlC,OAElBkC,EAAIlC,MAGnB,MACJ,IAAK,WACD,MAAMyC,EAAMvD,EAER/B,EADAsF,EAAI1C,KACG,CAAE,CAAC0C,EAAI1C,MAAO0C,EAAIzC,OAElByC,EAAIzC,MAEf,MACJ,IAAK,SACD,MAAM0C,EAAMxD,EAER/B,EADAuF,EAAI3C,KACG,CAAE,CAAC2C,EAAI3C,MAAO2C,EAAI1C,OAElB0C,EAAI1C,MAIvB,OAAO7C,CACX,CCzeA,IAAKwF,EDyIM9H,EAAAwD,OAAQ,GCzIdsE,MAAM,KACP,YA2BJ,MAeMC,GAAM,EAAAC,EAAA7B,OAnCZ,WACI,MAAO,CAAEjB,KAAM,GACnB,IAEA,SAAcxF,GACV,MAAO,CACH,CAAC,KAAM,SACP,CAAC,cAAe,CACZ0C,KAAM,OACN6F,YAAa,OACbC,GAAI,CAAC,QAASJ,EAAO5C,QAEzB,CAAC,IACGxF,EAAMwF,KACA,CAAC,SAAU,CAAC,IAAKxF,EAAMwF,MAAO,KAC9B,YAGlB,IAiBqC,EAAA8C,EAAAG,wBAfuC,CAIxEvC,OAAQ,SAAUtD,GACdzB,KAAKwC,KAAK,MAAS+E,OACvB,EACAlD,KAAM,SAAU5C,GACZzB,KAAKnB,MAAMwF,KAAO5C,CACtB,KAQH+F,KAAaC,IAAMP","sources":["src/hsml-app.ts","demo/hsml-appc_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 { HElements } from \"../src/hsml\";\nimport { controllersDdispatcher, happ, HAppAction, HControllers } from \"../src/hsml-app\";\n\nenum Action {\n name = \"name\"\n}\n\ninterface State {\n name: string;\n}\n\nfunction state(): State {\n return { name: \"\" };\n}\n\nfunction view(state: State): HElements {\n return [\n [\"h1\", \"Hello\"],\n [\"input~focus\", {\n type: \"text\",\n placeholder: \"name\",\n on: [\"input\", Action.name]\n }],\n [\"p\",\n state.name\n ? [\"Hello \", [\"b\", state.name], \"!\"]\n : \"Greeting\"\n ]\n ];\n}\n\nconst controllers: HControllers<State, typeof Action & typeof HAppAction> = {\n // _init: function (data) {\n // console.log(data);\n // },\n _mount: function (data) {\n this.refs[\"focus\"].focus();\n },\n name: function (data) {\n this.state.name = data;\n }\n};\n\n// HApp.debug = true;\n// HApp.debug = window.location.hostname === \"localhost\";\n\nconst app = happ<State>(state, view, controllersDdispatcher<State, typeof Action>(controllers));\n\n(self as any).app = app;\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","$2730007357a4c561$var$Action","$2730007357a4c561$var$app","$fe5fa9c04fc86188$exports","placeholder","on","controllersDdispatcher","focus","self","app"],"version":3,"file":"hsml-appc_demo.0234ff15.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 A}),(function(t){return A=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 A(t,e,n,i)}function b(t,e=document.body){const n=new t;return new A(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 A(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 E="happ";class A{_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&&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(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(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)=>c(this,void 0,void 0,(function*(){if(A.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(E,{detail:{type:t,data:e}}))})),this.render=()=>{if(A.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=T(n[t]);if("object"==typeof e){const o=Object.keys(e);if(o.length){const s=o[0],a=e[s];void 0===i[s]?i[s]=a:"string"==typeof i[s]||i[s]instanceof String?i[s]=a instanceof Array?[i[s],...a]:[i[s],a]:i[s]instanceof Array?a instanceof Array?i[s]=i[s].concat(a):i[s].push(a):i[s]=a instanceof Array?[i[s],...a]:[i[s],a],i[s]instanceof Array&&(i[s]=i[s].filter((t=>null!==t)),"radio"===n[t].type&&(i[s]=i[s].length?i[s][0]:null))}}}return i}return T(e)}(n)),this.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;k(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=m((()=>{if(this.dom){const t=this.render();k(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 k(t,e,n){if(A.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 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 T(t){let e=null;switch(t.nodeName){case"INPUT":const n=t;switch(n.type){case"text":case"hidden":case"password":case"email":case"number":case"search":case"url":case"tel":case"color":case"date":case"datetime-local":case"month":case"range":case"time":case"week":case"submit":case"button":e=n.name?{[n.name]:n.value}:n.value;break;case"radio":e=n.name?{[n.name]:n.checked?n.value:null}:n.checked?n.value:null;break;case"checkbox":e="on"===n.value?n.name?{[n.name]:n.checked}:n.checked:n.name?{[n.name]:n.checked?String(n.value):null}:n.checked?String(n.value):null}break;case"SELECT":const i=t;if(i.multiple){const t=Array.from(i.selectedOptions).map((t=>t.value));e=i.name?{[i.name]:t}:t}else e=i.name?{[i.name]:i.value}:i.value;break;case"TEXTAREA":const o=t;e=o.name?{[o.name]:o.value}:o.value;break;case"BUTTON":const s=t;e=s.name?{[s.name]:s.value}:s.value}return e}var L;A.debug=!1,(L||(L={})).name="name";const H=(0,s.happ)((function(){return{name:""}}),(function(t){return[["h1","Hello"],["input~focus",{type:"text",placeholder:"name",on:["input",L.name]}],["p",t.name?["Hello ",["b",t.name],"!"]:"Greeting"]]}),(0,s.controllersDdispatcher)({_mount:function(t){this.refs.focus.focus()},name:function(t){this.state.name=t}}));self.app=H}();
|
|
2
|
-
//# sourceMappingURL=hsml-appc_demo.f5783031.js.map
|