peryl 1.5.2 → 1.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/README.md +30 -16
  2. package/demo/hsml-app-form-validation_demo.ts +22 -23
  3. package/demo/hsml-app-form_demo.ts +24 -20
  4. package/demo/hsml-app-test_demo.ts +35 -36
  5. package/demo/hsml-app-tictactoe_demo.ts +16 -15
  6. package/demo/hsml-app_demo.ts +20 -12
  7. package/demo/hsml-appel_demo.html +7 -0
  8. package/demo/hsml-appel_demo.ts +33 -25
  9. package/demo/hsml-appi_demo.ts +9 -9
  10. package/demo/hsml_demo.ts +27 -22
  11. package/demo/js/hsml-app-js-happi_demo.html +16 -8
  12. package/demo/js/hsml-app-js_demo.html +15 -15
  13. package/dist/browser-esmodule/encode.js.map +1 -1
  14. package/dist/browser-esmodule/hsml-app.js +67 -73
  15. package/dist/browser-esmodule/hsml-app.js.map +1 -1
  16. package/dist/browser-esmodule/hsml-convert.js.map +1 -1
  17. package/dist/browser-esmodule/hsml-dom.js +3 -3
  18. package/dist/browser-esmodule/hsml-dom.js.map +1 -1
  19. package/dist/browser-esmodule/hsml-h.js.map +1 -1
  20. package/dist/browser-esmodule/hsml-html.js +2 -2
  21. package/dist/browser-esmodule/hsml-html.js.map +1 -1
  22. package/dist/browser-esmodule/hsml-idom.js +5 -5
  23. package/dist/browser-esmodule/hsml-idom.js.map +1 -1
  24. package/dist/browser-esmodule/hsml.js.map +1 -1
  25. package/dist/browser-esmodule/http.js.map +1 -1
  26. package/dist/browser-esmodule/index.js +71 -77
  27. package/dist/browser-esmodule/index.js.map +1 -1
  28. package/dist/browser-esmodule/router.js.map +1 -1
  29. package/dist/browser-umd/encode.js +1 -1
  30. package/dist/browser-umd/encode.js.map +1 -1
  31. package/dist/browser-umd/hsml-app.js +1 -1
  32. package/dist/browser-umd/hsml-app.js.map +1 -1
  33. package/dist/browser-umd/hsml-convert.js.map +1 -1
  34. package/dist/browser-umd/hsml-dom.js +1 -1
  35. package/dist/browser-umd/hsml-dom.js.map +1 -1
  36. package/dist/browser-umd/hsml-h.js.map +1 -1
  37. package/dist/browser-umd/hsml-html.js +1 -1
  38. package/dist/browser-umd/hsml-html.js.map +1 -1
  39. package/dist/browser-umd/hsml-idom.js +1 -1
  40. package/dist/browser-umd/hsml-idom.js.map +1 -1
  41. package/dist/browser-umd/hsml.js.map +1 -1
  42. package/dist/browser-umd/http.js +1 -1
  43. package/dist/browser-umd/http.js.map +1 -1
  44. package/dist/browser-umd/index.js +1 -1
  45. package/dist/browser-umd/index.js.map +1 -1
  46. package/dist/browser-umd/router.js +1 -1
  47. package/dist/browser-umd/router.js.map +1 -1
  48. package/dist/browser-umd/validators-moment.js +1 -1
  49. package/dist/browser-umd/validators-moment.js.map +1 -1
  50. package/dist/browser-umd/validators-numeral.js.map +1 -1
  51. package/dist/demo/encode_demo.ce182166.js.map +1 -1
  52. package/dist/demo/encode_demo.f40a44eb.js.map +1 -1
  53. package/dist/demo/hsml-app-form-validation_demo.a9e2c583.js +2 -0
  54. package/dist/demo/hsml-app-form-validation_demo.a9e2c583.js.map +1 -0
  55. package/dist/demo/hsml-app-form-validation_demo.bb392ab0.js +2 -0
  56. package/dist/demo/hsml-app-form-validation_demo.bb392ab0.js.map +1 -0
  57. package/dist/demo/hsml-app-form-validation_demo.c6856b02.js +2 -0
  58. package/dist/demo/hsml-app-form-validation_demo.c6856b02.js.map +1 -0
  59. package/dist/demo/hsml-app-form-validation_demo.fdcc0b2d.js +2 -0
  60. package/dist/demo/hsml-app-form-validation_demo.fdcc0b2d.js.map +1 -0
  61. package/dist/demo/hsml-app-form-validation_demo.html +1 -1
  62. package/dist/demo/hsml-app-form_demo.e36ef1e9.js +2 -0
  63. package/dist/demo/hsml-app-form_demo.e36ef1e9.js.map +1 -0
  64. package/dist/demo/hsml-app-form_demo.fd22dfcf.js +2 -0
  65. package/dist/demo/hsml-app-form_demo.fd22dfcf.js.map +1 -0
  66. package/dist/demo/hsml-app-form_demo.html +1 -1
  67. package/dist/demo/hsml-app-test_demo.ba5f166c.js +2 -0
  68. package/dist/demo/hsml-app-test_demo.ba5f166c.js.map +1 -0
  69. package/dist/demo/hsml-app-test_demo.e8b5e4b2.js +2 -0
  70. package/dist/demo/hsml-app-test_demo.e8b5e4b2.js.map +1 -0
  71. package/dist/demo/hsml-app-test_demo.html +1 -1
  72. package/dist/demo/hsml-app-tictactoe_demo.03d8363f.js +2 -0
  73. package/dist/demo/hsml-app-tictactoe_demo.03d8363f.js.map +1 -0
  74. package/dist/demo/hsml-app-tictactoe_demo.399f8e69.js +2 -0
  75. package/dist/demo/hsml-app-tictactoe_demo.399f8e69.js.map +1 -0
  76. package/dist/demo/hsml-app-tictactoe_demo.html +1 -1
  77. package/dist/demo/hsml-app_demo.44aa1072.js +2 -0
  78. package/dist/demo/hsml-app_demo.44aa1072.js.map +1 -0
  79. package/dist/demo/hsml-app_demo.70ef3e7a.js +2 -0
  80. package/dist/demo/hsml-app_demo.70ef3e7a.js.map +1 -0
  81. package/dist/demo/hsml-app_demo.html +1 -1
  82. package/dist/demo/hsml-appel_demo.2a9f7f3f.js +2 -0
  83. package/dist/demo/hsml-appel_demo.2a9f7f3f.js.map +1 -0
  84. package/dist/demo/hsml-appel_demo.bea7849a.js +2 -0
  85. package/dist/demo/hsml-appel_demo.bea7849a.js.map +1 -0
  86. package/dist/demo/hsml-appel_demo.html +1 -1
  87. package/dist/demo/hsml-appi_demo.3dc5de90.js +2 -0
  88. package/dist/demo/hsml-appi_demo.3dc5de90.js.map +1 -0
  89. package/dist/demo/hsml-appi_demo.bfc7056a.js +2 -0
  90. package/dist/demo/hsml-appi_demo.bfc7056a.js.map +1 -0
  91. package/dist/demo/hsml-appi_demo.html +1 -1
  92. package/dist/demo/hsml-convert_demo.0ea1fa3b.js.map +1 -1
  93. package/dist/demo/hsml-convert_demo.63e3e7b5.js.map +1 -1
  94. package/dist/demo/{hsml_demo.ff950ba1.js → hsml_demo.a248689a.js} +2 -2
  95. package/dist/demo/hsml_demo.a248689a.js.map +1 -0
  96. package/dist/demo/hsml_demo.eb3b08be.js +2 -0
  97. package/dist/demo/hsml_demo.eb3b08be.js.map +1 -0
  98. package/dist/demo/hsml_demo.html +1 -1
  99. package/dist/demo/http_demo.3e7da3d8.js.map +1 -1
  100. package/dist/demo/http_demo.8e435f23.js.map +1 -1
  101. package/dist/demo/i18n_demo.html +1 -1
  102. package/dist/demo/router_demo.3cfa03aa.js.map +1 -1
  103. package/dist/demo/router_demo.89ab1681.js.map +1 -1
  104. package/dist/demo/{validators_demo.252e13a6.js → validators_demo.90ff6001.js} +2 -2
  105. package/dist/demo/validators_demo.90ff6001.js.map +1 -0
  106. package/dist/demo/{validators_demo.66893723.js → validators_demo.ef5b2dea.js} +2 -2
  107. package/dist/demo/validators_demo.ef5b2dea.js.map +1 -0
  108. package/dist/demo/validators_demo.html +1 -1
  109. package/dist/encode.js +1 -1
  110. package/dist/encode.js.map +1 -1
  111. package/dist/hsml-app.d.ts +38 -37
  112. package/dist/hsml-app.js +60 -62
  113. package/dist/hsml-app.js.map +1 -1
  114. package/dist/hsml-convert.d.ts +3 -3
  115. package/dist/hsml-convert.js.map +1 -1
  116. package/dist/hsml-dom.d.ts +2 -2
  117. package/dist/hsml-dom.js +3 -3
  118. package/dist/hsml-dom.js.map +1 -1
  119. package/dist/hsml-h.d.ts +8 -8
  120. package/dist/hsml-h.js.map +1 -1
  121. package/dist/hsml-html.d.ts +4 -4
  122. package/dist/hsml-html.js +2 -2
  123. package/dist/hsml-html.js.map +1 -1
  124. package/dist/hsml-idom.d.ts +2 -2
  125. package/dist/hsml-idom.js +5 -5
  126. package/dist/hsml-idom.js.map +1 -1
  127. package/dist/hsml.d.ts +26 -27
  128. package/dist/hsml.js.map +1 -1
  129. package/dist/http.js +1 -1
  130. package/dist/http.js.map +1 -1
  131. package/dist/router.js +1 -1
  132. package/dist/router.js.map +1 -1
  133. package/package.json +8 -8
  134. package/src/hsml-app.ts +209 -144
  135. package/src/hsml-convert.ts +8 -8
  136. package/src/hsml-dom.ts +18 -18
  137. package/src/hsml-h.ts +10 -10
  138. package/src/hsml-html.ts +19 -19
  139. package/src/hsml-idom.ts +25 -25
  140. package/src/hsml.ts +46 -143
  141. package/demo/hsml-appc_demo.html +0 -16
  142. package/demo/hsml-appc_demo.ts +0 -49
  143. package/dist/demo/hsml-app-form-validation_demo.0b03b743.js +0 -2
  144. package/dist/demo/hsml-app-form-validation_demo.0b03b743.js.map +0 -1
  145. package/dist/demo/hsml-app-form-validation_demo.b3a5c810.js +0 -2
  146. package/dist/demo/hsml-app-form-validation_demo.b3a5c810.js.map +0 -1
  147. package/dist/demo/hsml-app-form-validation_demo.d3925067.js +0 -2
  148. package/dist/demo/hsml-app-form-validation_demo.d3925067.js.map +0 -1
  149. package/dist/demo/hsml-app-form-validation_demo.f757d763.js +0 -2
  150. package/dist/demo/hsml-app-form-validation_demo.f757d763.js.map +0 -1
  151. package/dist/demo/hsml-app-form_demo.007ffcaa.js +0 -2
  152. package/dist/demo/hsml-app-form_demo.007ffcaa.js.map +0 -1
  153. package/dist/demo/hsml-app-form_demo.a034239d.js +0 -2
  154. package/dist/demo/hsml-app-form_demo.a034239d.js.map +0 -1
  155. package/dist/demo/hsml-app-test_demo.35c14dc9.js +0 -2
  156. package/dist/demo/hsml-app-test_demo.35c14dc9.js.map +0 -1
  157. package/dist/demo/hsml-app-test_demo.3c7e16ae.js +0 -2
  158. package/dist/demo/hsml-app-test_demo.3c7e16ae.js.map +0 -1
  159. package/dist/demo/hsml-app-tictactoe_demo.5f4861c1.js +0 -2
  160. package/dist/demo/hsml-app-tictactoe_demo.5f4861c1.js.map +0 -1
  161. package/dist/demo/hsml-app-tictactoe_demo.7deeabad.js +0 -2
  162. package/dist/demo/hsml-app-tictactoe_demo.7deeabad.js.map +0 -1
  163. package/dist/demo/hsml-app_demo.87d83c29.js +0 -2
  164. package/dist/demo/hsml-app_demo.87d83c29.js.map +0 -1
  165. package/dist/demo/hsml-app_demo.941a13a6.js +0 -2
  166. package/dist/demo/hsml-app_demo.941a13a6.js.map +0 -1
  167. package/dist/demo/hsml-appc_demo.0234ff15.js +0 -2
  168. package/dist/demo/hsml-appc_demo.0234ff15.js.map +0 -1
  169. package/dist/demo/hsml-appc_demo.f5783031.js +0 -2
  170. package/dist/demo/hsml-appc_demo.f5783031.js.map +0 -1
  171. package/dist/demo/hsml-appc_demo.html +0 -1
  172. package/dist/demo/hsml-appel_demo.0e8a4d4c.js +0 -2
  173. package/dist/demo/hsml-appel_demo.0e8a4d4c.js.map +0 -1
  174. package/dist/demo/hsml-appel_demo.1a5c2c26.js +0 -2
  175. package/dist/demo/hsml-appel_demo.1a5c2c26.js.map +0 -1
  176. package/dist/demo/hsml-appi_demo.2c3fb511.js +0 -2
  177. package/dist/demo/hsml-appi_demo.2c3fb511.js.map +0 -1
  178. package/dist/demo/hsml-appi_demo.427fdebd.js +0 -2
  179. package/dist/demo/hsml-appi_demo.427fdebd.js.map +0 -1
  180. package/dist/demo/hsml_demo.33f28c29.js +0 -2
  181. package/dist/demo/hsml_demo.33f28c29.js.map +0 -1
  182. package/dist/demo/hsml_demo.ff950ba1.js.map +0 -1
  183. package/dist/demo/validators_demo.252e13a6.js.map +0 -1
  184. package/dist/demo/validators_demo.66893723.js.map +0 -1
@@ -1,10 +1,12 @@
1
1
  import { HApp, HDispatcher, HState, HView } from "../src/hsml-app";
2
2
 
3
3
  // Actions definition
4
- enum Action {
5
- say = "say",
6
- fetch = "fetch"
7
- }
4
+ // enum Actions {
5
+ // say = "say",
6
+ // fetch = "fetch"
7
+ // }
8
+
9
+ type Actions = "say" | "fetch";
8
10
 
9
11
  interface State {
10
12
  message: string;
@@ -20,33 +22,39 @@ const state: HState<State> = function () {
20
22
  };
21
23
 
22
24
  // Template function, returns HSML markup generated from app state
23
- const view: HView<State> = function (state) {
25
+ const view: HView<State, Actions> = function (state) {
24
26
  return [
25
27
  ["p", [
26
28
  "Greeting: ", state.message
27
29
  ]],
28
30
  ["p", [
29
31
  // On button event "click" dispatch Action.say type with data "Hello"
30
- ["button", { on: ["click", Action.say, "Hello"] }, "Say Hello"],
32
+ ["button", { on: ["click", "say", "Hello"] }, "Say Hello"],
31
33
  " ",
32
- ["button", { on: ["click", Action.say, "Hi"] }, "Say Hi"],
34
+ ["button", { on: ["click", "say", "Hi"] }, "Say Hi"],
33
35
  ]],
34
36
  ["p", [
35
- ["button", { on: ["click", Action.fetch] }, "Server fetch time"],
37
+ ["button", { on: ["click", "fetch"] }, "Server fetch time"],
36
38
  ["pre", state.json]
37
39
  ]]
38
40
  ];
39
41
  };
40
42
 
41
43
  // Action dispatcher, app logic
42
- const dispatcher: HDispatcher<State> = async function (action, state, dispatch) {
44
+ const dispatcher: HDispatcher<State, Actions> = async function (action, state, dispatch) {
43
45
  switch (action.type) {
46
+ case "init":
47
+ case "mount":
48
+ case "umount":
49
+ case "action":
50
+ case "elementAttr":
51
+ break;
44
52
  // Dispatch action "say"
45
- case Action.say:
53
+ case "say":
46
54
  // Change app state message by action data (3. parameter of on click action)
47
55
  state.message = action.data;
48
56
  break;
49
- case Action.fetch:
57
+ case "fetch":
50
58
  // Server async call
51
59
  try {
52
60
  const res = await fetch("http://date.jsontest.com");
@@ -63,4 +71,4 @@ const dispatcher: HDispatcher<State> = async function (action, state, dispatch)
63
71
  HApp.debug = true;
64
72
 
65
73
  // Run application
66
- (window as any).app = new HApp(state, view, dispatcher);
74
+ (window as any).app = new HApp<State, Actions>(state, view, dispatcher);
@@ -12,6 +12,13 @@
12
12
  <happ-app></happ-app>
13
13
 
14
14
  <script type="module" src="hsml-appel_demo.ts"></script>
15
+ <script type="module">
16
+ document.getElementsByTagName("happ-app")[0]
17
+ .addEventListener("action",
18
+ function (e) {
19
+ console.log("EventListener action", e.detail);
20
+ });
21
+ </script>
15
22
  </body>
16
23
 
17
24
  </html>
@@ -1,11 +1,10 @@
1
- import { HElements } from "../src/hsml";
2
- import { HAction, HAppAction, happel, HDispatch, HDispatcher, HState, HView } from "../src/hsml-app";
1
+ import { HAction, HAppActions, happel, HDispatcher, HDispatchScopes, HState, HView } from "../src/hsml-app";
3
2
 
4
3
  interface CounterState {
5
4
  count: number;
6
5
  }
7
6
 
8
- enum CounterAction {
7
+ enum CounterActions {
9
8
  dec = "counter-dec",
10
9
  inc = "counter-inc",
11
10
  count = "counter-count"
@@ -17,57 +16,57 @@ const counterState: HState<CounterState> = function () {
17
16
  }
18
17
  };
19
18
 
20
- const counterView: HView<CounterState> = function (state: CounterState): HElements {
19
+ const counterView: HView<CounterState, CounterActions> = function (state) {
21
20
  return [
22
21
  ["h3", ["Counter"]],
23
22
  ["p", [
24
23
  ["em", ["Count"]], ": ", state.count,
25
24
  " ",
26
- ["button", { on: ["click", CounterAction.dec, 1] }, ["-"]],
27
- ["button", { on: ["click", CounterAction.inc, 2] }, ["+"]]
25
+ ["button", { on: ["click", CounterActions.dec, 1] }, ["-"]],
26
+ ["button", { on: ["click", CounterActions.inc, 2] }, ["+"]]
28
27
  ]]
29
28
  ];
30
29
  };
31
30
 
32
- const counterDispatcher: HDispatcher<CounterState> = async function (action: HAction, state: CounterState, dispatch: HDispatch) {
31
+ const counterDispatcher: HDispatcher<CounterState, CounterActions> = async function (action, state, dispatch) {
33
32
  console.log("action counter:", action);
34
33
  // console.log("state counter:", state);
35
34
  // console.log("happ counter:", this);
36
35
 
37
36
  switch (action.type) {
38
- case HAppAction._init:
39
- case HAppAction._mount:
40
- case HAppAction._umount:
37
+ case HAppActions.init:
38
+ case HAppActions.mount:
39
+ case HAppActions.umount:
41
40
  break;
42
41
 
43
- case HAppAction._element:
42
+ case HAppActions.elementAttr:
44
43
  if (action.data.attrName === "count") {
45
44
  state.count = Number(action.data.newVal);
46
45
  }
47
46
  break;
48
47
 
49
- case CounterAction.inc:
48
+ case CounterActions.inc:
50
49
  state.count = state.count + action.data as number;
51
- setTimeout(() => dispatch(CounterAction.dec, 1), 1e3); // async call
52
- dispatch(CounterAction.count, state.count);
50
+ setTimeout(() => dispatch(CounterActions.dec, 1), 1e3); // async call
51
+ dispatch(CounterActions.count, state.count, HDispatchScopes.element);
53
52
  break;
54
53
 
55
- case CounterAction.dec:
54
+ case CounterActions.dec:
56
55
  state.count = state.count - action.data as number;
57
- dispatch(CounterAction.count, state.count);
56
+ dispatch(CounterActions.count, state.count, HDispatchScopes.element);
58
57
  break;
59
58
  }
60
59
  };
61
60
 
62
- happel("happ-counter", ["count"], counterState, counterView, counterDispatcher);
61
+ happel<CounterState, CounterActions>("happ-counter", ["count"], counterState, counterView, counterDispatcher);
63
62
 
64
63
 
65
64
  interface AppState {
66
65
  count: number;
67
66
  }
68
67
 
69
- enum AppAction {
70
- count = "app-count"
68
+ enum AppActions {
69
+ action = "app-action"
71
70
  }
72
71
 
73
72
  const appState: HState<AppState> = function () {
@@ -76,29 +75,38 @@ const appState: HState<AppState> = function () {
76
75
  }
77
76
  };
78
77
 
79
- const appView: HView<AppState> = function (state: AppState): HElements {
78
+ const appView: HView<AppState, AppActions> = function (state) {
80
79
  return [
81
80
  ["h2", ["App count: ", state.count]],
82
81
  ["happ-counter", {
83
82
  count: 33,
84
- on: [CounterAction.count, AppAction.count]
83
+ on: [HAppActions.action, AppActions.action]
85
84
  }]
86
85
  ];
87
86
  };
88
87
 
89
- const appDispatcher: HDispatcher<CounterState> = async function (action, state, dispatch) {
88
+ const appDispatcher: HDispatcher<AppState, AppActions | CounterActions> = async function (action, state, dispatch) {
90
89
  console.log("action:", action);
91
90
  // console.log("state:", state);
92
91
  // console.log("happ:", this);
93
92
 
94
93
  switch (action.type) {
95
- case AppAction.count:
96
- state.count = action.data as number;
94
+ case AppActions.action:
95
+ const a = action.data as HAction<AppActions | CounterActions>;
96
+ switch (a.type) {
97
+ case CounterActions.count:
98
+ state.count = a.data as number;
99
+ dispatch(CounterActions.count, state.count, HDispatchScopes.element);
100
+ break;
101
+ default:
102
+ console.log(a);
103
+ break;
104
+ }
97
105
  break;
98
106
  }
99
107
  };
100
108
 
101
- happel("happ-app", [], appState, appView, appDispatcher);
109
+ happel<AppState, AppActions | CounterActions>("happ-app", [], appState, appView, appDispatcher);
102
110
 
103
111
  // HApp.debug = true;
104
112
  // HApp.debug = window.location.hostname === "localhost";
@@ -1,7 +1,7 @@
1
1
  import { HElements } from "../src/hsml";
2
- import { HAction, HApp, HAppAction, happi, HAppI, HDispatch } from "../src/hsml-app";
2
+ import { HAction, HApp, HAppActions, happi, HAppI, HDispatch } from "../src/hsml-app";
3
3
 
4
- enum Action {
4
+ enum Actions {
5
5
  name = "name"
6
6
  }
7
7
 
@@ -9,19 +9,19 @@ interface State {
9
9
  name: string;
10
10
  }
11
11
 
12
- class App implements HAppI<State> {
12
+ class App implements HAppI<State, Actions> {
13
13
 
14
14
  state(): State {
15
15
  return { name: "" };
16
16
  }
17
17
 
18
- view(state: State): HElements {
18
+ view(state: State): HElements<Actions> {
19
19
  return [
20
20
  ["h1", "Hello"],
21
21
  ["input~focus", {
22
22
  type: "text",
23
23
  placeholder: "name",
24
- on: ["input", Action.name]
24
+ on: ["input", Actions.name]
25
25
  }],
26
26
  ["p",
27
27
  state.name
@@ -31,17 +31,17 @@ class App implements HAppI<State> {
31
31
  ];
32
32
  }
33
33
 
34
- async dispatcher(this: HApp<State>, action: HAction, state: State, dispatch: HDispatch): Promise<void> {
34
+ async dispatcher(this: HApp<State, Actions>, action: HAction<Actions>, state: State, dispatch: HDispatch<Actions>): Promise<void> {
35
35
  console.log(action);
36
36
  // console.log(this);
37
37
 
38
38
  switch (action.type) {
39
39
 
40
- case HAppAction._mount:
40
+ case HAppActions.mount:
41
41
  this.refs["focus"].focus();
42
42
  break;
43
43
 
44
- case Action.name:
44
+ case Actions.name:
45
45
  state.name = action.data;
46
46
  break;
47
47
  }
@@ -53,6 +53,6 @@ class App implements HAppI<State> {
53
53
  // HApp.debug = true;
54
54
  // HApp.debug = window.location.hostname === "localhost";
55
55
 
56
- const app = happi(App);
56
+ const app = happi<State, Actions>(App);
57
57
 
58
58
  (self as any).app = app;
package/demo/hsml_demo.ts CHANGED
@@ -1,16 +1,16 @@
1
1
  import { hsmls2idomPatch } from "../src/hsml-idom";
2
2
  import { HElements, HElement } from "../src/hsml";
3
3
 
4
- type View<STATE> = (state: STATE, dispatch: Dispatch) => HElements;
4
+ type View<State, Actions extends string> = (state: State, dispatch: Dispatch<Actions>) => HElements<Actions>;
5
5
 
6
- type Dispatch = (event: string, data?: any) => void;
6
+ type Dispatch<Actions extends string> = (action: Actions, data?: any) => void;
7
7
 
8
- type Dispatcher<STATE> = (event: string, data: any, state: STATE, dispatch: Dispatch) => STATE;
8
+ type Dispatcher<State, Actions extends string> = (action: Actions, data: any, state: State, dispatch: Dispatch<Actions>) => State;
9
9
 
10
- function render<STATE>(element: HTMLElement,
11
- view: View<STATE>,
12
- state: STATE,
13
- dispatch: Dispatch): void {
10
+ function render<State, Actions extends string>(element: HTMLElement,
11
+ view: View<State, Actions>,
12
+ state: State,
13
+ dispatch: Dispatch<Actions>): void {
14
14
  (render as any).scheduled || ((render as any).scheduled = null);
15
15
  if (!state) {
16
16
  return;
@@ -19,29 +19,34 @@ function render<STATE>(element: HTMLElement,
19
19
  (render as any).scheduled = setTimeout(() => {
20
20
  const hsml = view(state, dispatch);
21
21
  // console.log("render", hsml);
22
- hsmls2idomPatch(element, hsml);
22
+ hsmls2idomPatch<Actions>(element, hsml);
23
23
  (render as any).scheduled = null;
24
24
  }, 0);
25
25
  }
26
26
  }
27
27
 
28
- const dispatch: Dispatch = (event: string, data?: any): void => {
29
- // console.log("dispatch", event, data);
30
- const state = dispatcher(event, data, appState, dispatch);
28
+ const dispatch: Dispatch<Actions> = (action, data): void => {
29
+ // console.log("dispatch", action, data);
30
+ const state = dispatcher(action, data, appState, dispatch);
31
31
  // console.log("state", state);
32
32
  render(appElement!, view, state, dispatch);
33
33
  };
34
34
 
35
- // ----------------------------------------------------------------------------
36
-
37
35
  const appState = {
38
36
  title: "Counter",
39
37
  count: 0
40
38
  };
41
39
 
42
- type AppState = typeof appState;
40
+ type State = typeof appState;
41
+
42
+ type Actions =
43
+ | "inc"
44
+ | "dec"
45
+ | "dec_async"
46
+ | "action"
47
+ | "xxx";
43
48
 
44
- const view: View<AppState> = (state: AppState, dispatch: Dispatch): HElements => {
49
+ const view: View<State, Actions> = (state, dispatch): HElements<Actions> => {
45
50
  return [
46
51
  ["h2", [state.title]],
47
52
  ["p", [
@@ -50,18 +55,18 @@ const view: View<AppState> = (state: AppState, dispatch: Dispatch): HElements =>
50
55
  button("-", () => dispatch("dec", 1)),
51
56
  button("+", () => dispatch("inc", 2)),
52
57
  " ",
53
- button("xxx", () => dispatch("xxx")),
58
+ button("xxx", () => dispatch("xxx"))
54
59
  ]],
55
60
  ];
56
61
  }
57
62
 
58
- function button(label: string, cb: (e: Event) => void): HElement {
63
+ function button(label: string, cb: (e: Event) => void): HElement<Actions> {
59
64
  return ["button", { click: cb }, [label]];
60
65
  }
61
66
 
62
- const dispatcher: Dispatcher<AppState> = (event: string, data: any, state: AppState, dispatch: Dispatch): AppState => {
63
- // console.log("reduce", event, data);
64
- switch (event) {
67
+ const dispatcher: Dispatcher<State, Actions> = (action, data, state, dispatch) => {
68
+ console.log("action:", action, data);
69
+ switch (action) {
65
70
  case "inc":
66
71
  state.count += data;
67
72
  break;
@@ -73,7 +78,7 @@ const dispatcher: Dispatcher<AppState> = (event: string, data: any, state: AppSt
73
78
  state.count -= data;
74
79
  break;
75
80
  default:
76
- console.warn("unhandled event", event, data);
81
+ console.warn("unhandled action:", action, data);
77
82
  }
78
83
  return state;
79
84
  }
@@ -82,4 +87,4 @@ const appElement = document.getElementById("app");
82
87
 
83
88
  render(appElement!, view, appState, dispatch);
84
89
 
85
- dispatch("event", {});
90
+ dispatch("action", {});
@@ -16,7 +16,7 @@
16
16
  // import { HApp, happi } from "../../dist/browser-esmodule/hsml-app.js";
17
17
  // import { HApp, happi } from "https://unpkg.com/peryl/dist/browser-esmodule/hsml-app.js";
18
18
 
19
- const Action = {
19
+ const Actions = {
20
20
  change: "change",
21
21
  reset: "reset"
22
22
  };
@@ -30,8 +30,16 @@
30
30
  view(state) {
31
31
  return [
32
32
  ["h1", ["Hello ", state.name]],
33
- ["input", { type: "text", placeholder: "Name", value: state.name, on: ["input", Action.change] }],
34
- ["button", { type: "button", on: ["click", Action.reset] }, "Reset"]
33
+ ["input", {
34
+ type: "text",
35
+ placeholder: "Name",
36
+ value: state.name,
37
+ on: ["input", Actions.change]
38
+ }],
39
+ ["button", {
40
+ type: "button",
41
+ on: ["click", Actions.reset]
42
+ }, "Reset"]
35
43
  ];
36
44
  }
37
45
 
@@ -41,16 +49,16 @@
41
49
  console.log("happ:", this);
42
50
 
43
51
  switch (action.type) {
44
- case HAppAction._init:
45
- case HAppAction._mount:
46
- case HAppAction._umount:
52
+ case HAppActions.init:
53
+ case HAppActions.mount:
54
+ case HAppActions.umount:
47
55
  break;
48
56
 
49
- case Action.change:
57
+ case Actions.change:
50
58
  state.name = action.data;
51
59
  break;
52
60
 
53
- case Action.reset:
61
+ case Actions.reset:
54
62
  state.name = new String();
55
63
  break;
56
64
  }
@@ -18,10 +18,10 @@
18
18
  <script src="../../dist/browser-umd/hsml-app.js"></script>
19
19
  <!-- <script src="https://unpkg.com/peryl/dist/browser-umd/hsml-app.js"></script> -->
20
20
  <script type="module">
21
- // import { HApp, HAppAction } from "../../dist/browser-esmodule/hsml-app.js";
22
- // import { HApp, HAppAction } from "https://unpkg.com/peryl/dist/browser-esmodule/hsml-app.js";
21
+ // import { HApp, HAppActions } from "../../dist/browser-esmodule/hsml-app.js";
22
+ // import { HApp, HAppActions } from "https://unpkg.com/peryl/dist/browser-esmodule/hsml-app.js";
23
23
 
24
- const Action = {
24
+ const Actions = {
25
25
  title: "title",
26
26
  dec: "dec",
27
27
  inc: "inc",
@@ -47,12 +47,12 @@
47
47
  type: "text",
48
48
  name: "title",
49
49
  value: new String(state.title),
50
- on: ["input", Action.title]
50
+ on: ["input", Actions.title]
51
51
  }]
52
52
  ]],
53
53
  ["p", [
54
54
  ["button.w3-button.w3-blue",
55
- { on: ["click", Action.clear] },
55
+ { on: ["click", Actions.clear] },
56
56
  "Clear title"
57
57
  ]
58
58
  ]],
@@ -71,12 +71,12 @@
71
71
  ]
72
72
  ]],
73
73
  ["button.w3-button.w3-blue",
74
- { on: ["click", Action.dec, 1] },
74
+ { on: ["click", Actions.dec, 1] },
75
75
  [["i.fa.fa-chevron-left"]]
76
76
  ],
77
77
  " ",
78
78
  ["button.w3-button.w3-blue",
79
- { on: ["click", Action.inc, 2] },
79
+ { on: ["click", Actions.inc, 2] },
80
80
  [["i.fa.fa-chevron-right"]]
81
81
  ]
82
82
  ]]
@@ -89,26 +89,26 @@
89
89
  console.log("happ:", this);
90
90
 
91
91
  switch (action.type) {
92
- case HAppAction._init:
93
- case HAppAction._mount:
94
- case HAppAction._umount:
92
+ case HAppActions.init:
93
+ case HAppActions.mount:
94
+ case HAppActions.umount:
95
95
  break;
96
96
 
97
- case Action.title:
97
+ case Actions.title:
98
98
  state.title = action.data.title;
99
99
  break;
100
100
 
101
- case Action.inc:
101
+ case Actions.inc:
102
102
  state.count = state.count + action.data;
103
103
  // async action call
104
- setTimeout(() => dispatch(Action.dec, 1), 1e3);
104
+ setTimeout(() => dispatch(Actions.dec, 1), 1e3);
105
105
  break;
106
106
 
107
- case Action.dec:
107
+ case Actions.dec:
108
108
  state.count = state.count - action.data;
109
109
  break;
110
110
 
111
- case Action.clear:
111
+ case Actions.clear:
112
112
  state.title = "";
113
113
  break;
114
114
 
@@ -1 +1 @@
1
- {"mappings":"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","sources":["src/encode.ts"],"sourcesContent":["\nexport class UrlEncodedData {\n\n static encode(data: any, prefix = \"\"): string {\n let str: string;\n if (typeof data !== \"object\") {\n str = data;\n } else {\n const params: string[] = [];\n let size = 0;\n for (let key in data) {\n if (data.hasOwnProperty(key)) {\n let value = data[key];\n if (!(value instanceof Array)) {\n value = [value];\n }\n const valueLength = value.length;\n for (let i = 0; i < valueLength; i++) {\n const val = value[i];\n if ((typeof val === \"object\") && (val != null)) {\n params[size++] = arguments.callee(val, prefix + key + \".\");\n } else { // list\n params[size] = encodeURIComponent(prefix + key);\n if (val != null) {\n params[size] += \"=\" + encodeURIComponent(val);\n }\n size++;\n }\n }\n }\n }\n str = params.join(\"&\");\n }\n return str;\n }\n\n static decode(str: string): any {\n const data: any = {};\n if (str) {\n const params = str.split(\"&\");\n const paramsLength = params.length;\n for (let j = 0; j < paramsLength; j++) {\n const parameter = params[j].split(\"=\");\n const key = decodeURIComponent(parameter[0]);\n if (parameter.length > 1) {\n const value = decodeURIComponent(parameter[1]);\n const path = key.split(\".\");\n const size = path.length;\n let obj = data;\n for (let i = 0; i < size; i++) {\n const property = path[i];\n const o = obj[property];\n if (i === (size - 1)) { // list\n if (!o) {\n obj[property] = value;\n } else if (o instanceof Array) {\n obj[property].push(value);\n } else { // create array\n obj[property] = [o];\n obj[property][1] = value;\n }\n } else {\n if (!o) {\n obj[property] = {};\n }\n obj = obj[property];\n }\n }\n } else {\n data[key] = null;\n }\n }\n }\n return data;\n }\n\n}\n\nexport class Base64 {\n\n private static _keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\n static encode(e: string): string {\n let t = \"\";\n let n: any, r: any, i: any, s: any, o: any, u: any, a: any;\n let f = 0;\n e = Base64._utf8_encode(e);\n while (f < e.length) {\n n = e.charCodeAt(f++);\n r = e.charCodeAt(f++);\n i = e.charCodeAt(f++);\n s = n >> 2;\n o = (n & 3) << 4 | r >> 4;\n u = (r & 15) << 2 | i >> 6;\n a = i & 63;\n if (isNaN(r)) {\n u = a = 64;\n } else if (isNaN(i)) {\n a = 64;\n }\n t = t + Base64._keyStr.charAt(s) + Base64._keyStr.charAt(o) + Base64._keyStr.charAt(u) + Base64._keyStr.charAt(a);\n }\n return t;\n }\n\n static decode(e: string): string {\n let t = \"\";\n let n: any, r: any, i: any;\n let s: any, o: any, u: any, a: any;\n let f = 0;\n e = e.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\n while (f < e.length) {\n s = this._keyStr.indexOf(e.charAt(f++));\n o = this._keyStr.indexOf(e.charAt(f++));\n u = this._keyStr.indexOf(e.charAt(f++));\n a = this._keyStr.indexOf(e.charAt(f++));\n n = s << 2 | o >> 4;\n r = (o & 15) << 4 | u >> 2;\n i = (u & 3) << 6 | a;\n t = t + String.fromCharCode(n);\n if (u !== 64) {\n t = t + String.fromCharCode(r);\n }\n if (a !== 64) {\n t = t + String.fromCharCode(i);\n }\n }\n t = Base64._utf8_decode(t);\n return t;\n }\n\n private static _utf8_encode(e: string): string {\n e = e.replace(/\\r\\n/g, \"\\n\");\n let t = \"\";\n for (let n = 0; n < e.length; n++) {\n const r = e.charCodeAt(n);\n if (r < 128) {\n t += String.fromCharCode(r);\n } else if (r > 127 && r < 2048) {\n t += String.fromCharCode(r >> 6 | 192);\n t += String.fromCharCode(r & 63 | 128);\n } else {\n t += String.fromCharCode(r >> 12 | 224);\n t += String.fromCharCode(r >> 6 & 63 | 128);\n t += String.fromCharCode(r & 63 | 128);\n }\n }\n return t;\n }\n\n private static _utf8_decode(e: string): string {\n let t = \"\";\n let n = 0;\n let r = 0;\n let c1 = 0;\n let c2 = 0;\n while (n < e.length) {\n r = e.charCodeAt(n);\n if (r < 128) {\n t += String.fromCharCode(r);\n n++;\n } else if (r > 191 && r < 224) {\n c1 = e.charCodeAt(n + 1);\n t += String.fromCharCode((r & 31) << 6 | c1 & 63);\n n += 2;\n } else {\n c1 = e.charCodeAt(n + 1);\n c2 = e.charCodeAt(n + 2);\n t += String.fromCharCode((r & 15) << 12 | (c1 & 63) << 6 | c2 & 63);\n n += 3;\n }\n }\n return t;\n }\n}\n"],"names":[],"version":3,"file":"encode.js.map"}
1
+ {"mappings":"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","sources":["src/encode.ts"],"sourcesContent":["\nexport class UrlEncodedData {\n\n static encode(data: any, prefix = \"\"): string {\n let str: string;\n if (typeof data !== \"object\") {\n str = data;\n } else {\n const params: string[] = [];\n let size = 0;\n for (let key in data) {\n if (data.hasOwnProperty(key)) {\n let value = data[key];\n if (!(value instanceof Array)) {\n value = [value];\n }\n const valueLength = value.length;\n for (let i = 0; i < valueLength; i++) {\n const val = value[i];\n if ((typeof val === \"object\") && (val != null)) {\n params[size++] = arguments.callee(val, prefix + key + \".\");\n } else { // list\n params[size] = encodeURIComponent(prefix + key);\n if (val != null) {\n params[size] += \"=\" + encodeURIComponent(val);\n }\n size++;\n }\n }\n }\n }\n str = params.join(\"&\");\n }\n return str;\n }\n\n static decode(str: string): any {\n const data: any = {};\n if (str) {\n const params = str.split(\"&\");\n const paramsLength = params.length;\n for (let j = 0; j < paramsLength; j++) {\n const parameter = params[j].split(\"=\");\n const key = decodeURIComponent(parameter[0]);\n if (parameter.length > 1) {\n const value = decodeURIComponent(parameter[1]);\n const path = key.split(\".\");\n const size = path.length;\n let obj = data;\n for (let i = 0; i < size; i++) {\n const property = path[i];\n const o = obj[property];\n if (i === (size - 1)) { // list\n if (!o) {\n obj[property] = value;\n } else if (o instanceof Array) {\n obj[property].push(value);\n } else { // create array\n obj[property] = [o];\n obj[property][1] = value;\n }\n } else {\n if (!o) {\n obj[property] = {};\n }\n obj = obj[property];\n }\n }\n } else {\n data[key] = null;\n }\n }\n }\n return data;\n }\n\n}\n\nexport class Base64 {\n\n private static _keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\n static encode(e: string): string {\n let t = \"\";\n let n: any, r: any, i: any, s: any, o: any, u: any, a: any;\n let f = 0;\n e = Base64._utf8_encode(e);\n while (f < e.length) {\n n = e.charCodeAt(f++);\n r = e.charCodeAt(f++);\n i = e.charCodeAt(f++);\n s = n >> 2;\n o = (n & 3) << 4 | r >> 4;\n u = (r & 15) << 2 | i >> 6;\n a = i & 63;\n if (isNaN(r)) {\n u = a = 64;\n } else if (isNaN(i)) {\n a = 64;\n }\n t = t + Base64._keyStr.charAt(s) + Base64._keyStr.charAt(o) + Base64._keyStr.charAt(u) + Base64._keyStr.charAt(a);\n }\n return t;\n }\n\n static decode(e: string): string {\n let t = \"\";\n let n: any, r: any, i: any;\n let s: any, o: any, u: any, a: any;\n let f = 0;\n e = e.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\n while (f < e.length) {\n s = this._keyStr.indexOf(e.charAt(f++));\n o = this._keyStr.indexOf(e.charAt(f++));\n u = this._keyStr.indexOf(e.charAt(f++));\n a = this._keyStr.indexOf(e.charAt(f++));\n n = s << 2 | o >> 4;\n r = (o & 15) << 4 | u >> 2;\n i = (u & 3) << 6 | a;\n t = t + String.fromCharCode(n);\n if (u !== 64) {\n t = t + String.fromCharCode(r);\n }\n if (a !== 64) {\n t = t + String.fromCharCode(i);\n }\n }\n t = Base64._utf8_decode(t);\n return t;\n }\n\n private static _utf8_encode(e: string): string {\n e = e.replace(/\\r\\n/g, \"\\n\");\n let t = \"\";\n for (let n = 0; n < e.length; n++) {\n const r = e.charCodeAt(n);\n if (r < 128) {\n t += String.fromCharCode(r);\n } else if (r > 127 && r < 2048) {\n t += String.fromCharCode(r >> 6 | 192);\n t += String.fromCharCode(r & 63 | 128);\n } else {\n t += String.fromCharCode(r >> 12 | 224);\n t += String.fromCharCode(r >> 6 & 63 | 128);\n t += String.fromCharCode(r & 63 | 128);\n }\n }\n return t;\n }\n\n private static _utf8_decode(e: string): string {\n let t = \"\";\n let n = 0;\n let r = 0;\n let c1 = 0;\n let c2 = 0;\n while (n < e.length) {\n r = e.charCodeAt(n);\n if (r < 128) {\n t += String.fromCharCode(r);\n n++;\n } else if (r > 191 && r < 224) {\n c1 = e.charCodeAt(n + 1);\n t += String.fromCharCode((r & 31) << 6 | c1 & 63);\n n += 2;\n } else {\n c1 = e.charCodeAt(n + 1);\n c2 = e.charCodeAt(n + 2);\n t += String.fromCharCode((r & 15) << 12 | (c1 & 63) << 6 | c2 & 63);\n n += 3;\n }\n }\n return t;\n }\n}\n"],"names":[],"version":3,"file":"encode.js.map"}