@twobirds/microcomponents 0.1.0 → 0.1.2

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 (326) hide show
  1. package/dist/MC.js +1 -1
  2. package/dist/MC.min.js +34 -53
  3. package/dist/MC.ts +3 -3
  4. package/dist/elements.min.js +1 -1
  5. package/dist/formValues.min.js +1 -1
  6. package/dist/microcomponents.min.js +1 -1
  7. package/dist/observables.min.js +1 -1
  8. package/package.json +11 -2
  9. package/.gitlab-ci.yml +0 -18
  10. package/.vscode/settings.json +0 -3
  11. package/MicroComponents.svg +0 -15
  12. package/assets/documentation/MC.md +0 -547
  13. package/assets/documentation/MicroComponents.svg +0 -15
  14. package/assets/documentation/ajaxian-1.png +0 -0
  15. package/assets/documentation/ajaxian-2.png +0 -0
  16. package/assets/documentation/ajaxian-3.png +0 -0
  17. package/assets/documentation/elements.md +0 -277
  18. package/assets/documentation/formvalues.md +0 -25
  19. package/assets/documentation/functional_requirements.md +0 -8
  20. package/assets/documentation/history.md +0 -436
  21. package/assets/documentation/klemmstein.png +0 -0
  22. package/assets/documentation/magic.md +0 -29
  23. package/assets/documentation/observables.md +0 -187
  24. package/assets/documentation/rnd0023-1.jpg +0 -0
  25. package/assets/documentation/rnd0023-2.jpg +0 -0
  26. package/assets/documentation/rnd0023-3.jpg +0 -0
  27. package/assets/documentation/tB_react.md +0 -207
  28. package/assets/documentation/usage.md +0 -142
  29. package/assets/documentation/why.md +0 -25
  30. package/assets/fiddle/MicroComponents.svg +0 -15
  31. package/assets/fiddle/fiddle.css +0 -0
  32. package/assets/fiddle/fiddle.js +0 -0
  33. package/assets/fiddle/index.html +0 -0
  34. package/assets/test/MicroComponents.svg +0 -15
  35. package/assets/test/grandparent.css +0 -16
  36. package/assets/test/myButton.css +0 -19
  37. package/assets/test/style.css +0 -8
  38. package/assets/test/test.html +0 -29
  39. package/assets/test/testform.json +0 -27
  40. package/public/.nojekyll +0 -1
  41. package/public/MC.d.ts +0 -39
  42. package/public/MC.d.ts.map +0 -1
  43. package/public/MC.js +0 -287
  44. package/public/MC.js.map +0 -1
  45. package/public/MC.min.js +0 -348
  46. package/public/MC.ts +0 -431
  47. package/public/MicroComponents.svg +0 -15
  48. package/public/documentation/MC.md +0 -547
  49. package/public/documentation/MicroComponents.svg +0 -15
  50. package/public/documentation/ajaxian-1.png +0 -0
  51. package/public/documentation/ajaxian-2.png +0 -0
  52. package/public/documentation/ajaxian-3.png +0 -0
  53. package/public/documentation/elements.md +0 -277
  54. package/public/documentation/formvalues.md +0 -25
  55. package/public/documentation/functional_requirements.md +0 -8
  56. package/public/documentation/history.md +0 -436
  57. package/public/documentation/klemmstein.png +0 -0
  58. package/public/documentation/magic.md +0 -29
  59. package/public/documentation/observables.md +0 -187
  60. package/public/documentation/rnd0023-1.jpg +0 -0
  61. package/public/documentation/rnd0023-2.jpg +0 -0
  62. package/public/documentation/rnd0023-3.jpg +0 -0
  63. package/public/documentation/tB_react.md +0 -207
  64. package/public/documentation/usage.md +0 -142
  65. package/public/documentation/why.md +0 -25
  66. package/public/elements.d.ts +0 -5
  67. package/public/elements.d.ts.map +0 -1
  68. package/public/elements.js +0 -68
  69. package/public/elements.js.map +0 -1
  70. package/public/elements.min.js +0 -1
  71. package/public/elements.ts +0 -119
  72. package/public/fiddle/MicroComponents.svg +0 -15
  73. package/public/fiddle/fiddle.css +0 -0
  74. package/public/fiddle/fiddle.js +0 -0
  75. package/public/fiddle/index.html +0 -0
  76. package/public/formValues.d.ts +0 -3
  77. package/public/formValues.d.ts.map +0 -1
  78. package/public/formValues.js +0 -162
  79. package/public/formValues.js.map +0 -1
  80. package/public/formValues.min.js +0 -1
  81. package/public/formValues.ts +0 -225
  82. package/public/helpers.d.ts +0 -14
  83. package/public/helpers.d.ts.map +0 -1
  84. package/public/helpers.js +0 -113
  85. package/public/helpers.js.map +0 -1
  86. package/public/helpers.ts +0 -149
  87. package/public/microcomponents.d.ts +0 -6
  88. package/public/microcomponents.d.ts.map +0 -1
  89. package/public/microcomponents.js +0 -7
  90. package/public/microcomponents.js.map +0 -1
  91. package/public/microcomponents.min.js +0 -1
  92. package/public/microcomponents.ts +0 -8
  93. package/public/observables.d.ts +0 -11
  94. package/public/observables.d.ts.map +0 -1
  95. package/public/observables.js +0 -244
  96. package/public/observables.js.map +0 -1
  97. package/public/observables.min.js +0 -1
  98. package/public/observables.ts +0 -416
  99. package/public/selectors._ts +0 -1269
  100. package/public/src/MC.d.ts +0 -39
  101. package/public/src/MC.d.ts.map +0 -1
  102. package/public/src/MC.js +0 -287
  103. package/public/src/MC.js.map +0 -1
  104. package/public/src/MC.ts +0 -431
  105. package/public/src/elements.d.ts +0 -5
  106. package/public/src/elements.d.ts.map +0 -1
  107. package/public/src/elements.js +0 -68
  108. package/public/src/elements.js.map +0 -1
  109. package/public/src/elements.ts +0 -119
  110. package/public/src/formValues.d.ts +0 -3
  111. package/public/src/formValues.d.ts.map +0 -1
  112. package/public/src/formValues.js +0 -162
  113. package/public/src/formValues.js.map +0 -1
  114. package/public/src/formValues.ts +0 -225
  115. package/public/src/helpers.d.ts +0 -14
  116. package/public/src/helpers.d.ts.map +0 -1
  117. package/public/src/helpers.js +0 -113
  118. package/public/src/helpers.js.map +0 -1
  119. package/public/src/helpers.ts +0 -149
  120. package/public/src/microcomponents.d.ts +0 -6
  121. package/public/src/microcomponents.d.ts.map +0 -1
  122. package/public/src/microcomponents.js +0 -7
  123. package/public/src/microcomponents.js.map +0 -1
  124. package/public/src/microcomponents.ts +0 -8
  125. package/public/src/observables.d.ts +0 -11
  126. package/public/src/observables.d.ts.map +0 -1
  127. package/public/src/observables.js +0 -244
  128. package/public/src/observables.js.map +0 -1
  129. package/public/src/observables.ts +0 -416
  130. package/public/src/selectors._ts +0 -1269
  131. package/public/src/test/grandparent.css +0 -14
  132. package/public/src/test/test/child.d.ts +0 -2
  133. package/public/src/test/test/child.d.ts.map +0 -1
  134. package/public/src/test/test/child.js +0 -26
  135. package/public/src/test/test/child.js.map +0 -1
  136. package/public/src/test/test/child.ts +0 -36
  137. package/public/src/test/test/grandchild.d.ts +0 -2
  138. package/public/src/test/test/grandchild.d.ts.map +0 -1
  139. package/public/src/test/test/grandchild.js +0 -22
  140. package/public/src/test/test/grandchild.js.map +0 -1
  141. package/public/src/test/test/grandchild.ts +0 -31
  142. package/public/src/test/test/grandparent.d.ts +0 -2
  143. package/public/src/test/test/grandparent.d.ts.map +0 -1
  144. package/public/src/test/test/grandparent.js +0 -1
  145. package/public/src/test/test/grandparent.js.map +0 -1
  146. package/public/src/test/test/grandparent.ts +0 -43
  147. package/public/src/test/test/greatgrandchild.d.ts +0 -2
  148. package/public/src/test/test/greatgrandchild.d.ts.map +0 -1
  149. package/public/src/test/test/greatgrandchild.js +0 -36
  150. package/public/src/test/test/greatgrandchild.js.map +0 -1
  151. package/public/src/test/test/greatgrandchild.ts +0 -51
  152. package/public/src/test/test/parent.d.ts +0 -2
  153. package/public/src/test/test/parent.d.ts.map +0 -1
  154. package/public/src/test/test/parent.js +0 -25
  155. package/public/src/test/test/parent.js.map +0 -1
  156. package/public/src/test/test/parent.ts +0 -35
  157. package/public/src/test/test/testform.d.ts +0 -2
  158. package/public/src/test/test/testform.d.ts.map +0 -1
  159. package/public/src/test/test/testform.js +0 -1
  160. package/public/src/test/test/testform.js.map +0 -1
  161. package/public/src/test/test/testform.ts +0 -153
  162. package/public/src/test/test/testfunction.d.ts +0 -3
  163. package/public/src/test/test/testfunction.d.ts.map +0 -1
  164. package/public/src/test/test/testfunction.js +0 -7
  165. package/public/src/test/test/testfunction.js.map +0 -1
  166. package/public/src/test/test/testfunction.ts +0 -12
  167. package/public/src/test/test/testmc.d.ts +0 -3
  168. package/public/src/test/test/testmc.d.ts.map +0 -1
  169. package/public/src/test/test/testmc.js +0 -10
  170. package/public/src/test/test/testmc.js.map +0 -1
  171. package/public/src/test/test/testmc.ts +0 -16
  172. package/public/src/test/test/testsimpleclass.d.ts +0 -3
  173. package/public/src/test/test/testsimpleclass.d.ts.map +0 -1
  174. package/public/src/test/test/testsimpleclass.js +0 -9
  175. package/public/src/test/test/testsimpleclass.js.map +0 -1
  176. package/public/src/test/test/testsimpleclass.ts +0 -15
  177. package/public/src/test/test.d.ts +0 -2
  178. package/public/src/test/test.d.ts.map +0 -1
  179. package/public/src/test/test.js +0 -72
  180. package/public/src/test/test.js.map +0 -1
  181. package/public/src/test/test.ts +0 -176
  182. package/public/src/test/testform.css +0 -47
  183. package/public/src/test/testform.html +0 -56
  184. package/public/src/test/testform.json +0 -27
  185. package/public/test/MC.d.ts +0 -39
  186. package/public/test/MC.d.ts.map +0 -1
  187. package/public/test/MC.js +0 -287
  188. package/public/test/MC.min.js +0 -348
  189. package/public/test/MC.ts +0 -431
  190. package/public/test/MicroComponents.svg +0 -15
  191. package/public/test/elements.d.ts +0 -5
  192. package/public/test/elements.d.ts.map +0 -1
  193. package/public/test/elements.js +0 -68
  194. package/public/test/elements.min.js +0 -1
  195. package/public/test/elements.ts +0 -119
  196. package/public/test/formValues.d.ts +0 -3
  197. package/public/test/formValues.d.ts.map +0 -1
  198. package/public/test/formValues.js +0 -162
  199. package/public/test/formValues.min.js +0 -1
  200. package/public/test/formValues.ts +0 -225
  201. package/public/test/grandparent.css +0 -14
  202. package/public/test/helpers.d.ts +0 -14
  203. package/public/test/helpers.d.ts.map +0 -1
  204. package/public/test/helpers.js +0 -113
  205. package/public/test/helpers.ts +0 -149
  206. package/public/test/microcomponents.d.ts +0 -6
  207. package/public/test/microcomponents.d.ts.map +0 -1
  208. package/public/test/microcomponents.js +0 -7
  209. package/public/test/microcomponents.min.js +0 -1
  210. package/public/test/microcomponents.ts +0 -8
  211. package/public/test/myButton.css +0 -19
  212. package/public/test/observables.d.ts +0 -11
  213. package/public/test/observables.d.ts.map +0 -1
  214. package/public/test/observables.js +0 -244
  215. package/public/test/observables.min.js +0 -1
  216. package/public/test/observables.ts +0 -416
  217. package/public/test/style.css +0 -8
  218. package/public/test/test/child.d.ts +0 -2
  219. package/public/test/test/child.d.ts.map +0 -1
  220. package/public/test/test/child.js +0 -26
  221. package/public/test/test/child.js.map +0 -1
  222. package/public/test/test/child.ts +0 -36
  223. package/public/test/test/grandchild.d.ts +0 -2
  224. package/public/test/test/grandchild.d.ts.map +0 -1
  225. package/public/test/test/grandchild.js +0 -22
  226. package/public/test/test/grandchild.js.map +0 -1
  227. package/public/test/test/grandchild.ts +0 -31
  228. package/public/test/test/grandparent.d.ts +0 -2
  229. package/public/test/test/grandparent.d.ts.map +0 -1
  230. package/public/test/test/grandparent.js +0 -1
  231. package/public/test/test/grandparent.js.map +0 -1
  232. package/public/test/test/grandparent.ts +0 -43
  233. package/public/test/test/greatgrandchild.d.ts +0 -2
  234. package/public/test/test/greatgrandchild.d.ts.map +0 -1
  235. package/public/test/test/greatgrandchild.js +0 -36
  236. package/public/test/test/greatgrandchild.js.map +0 -1
  237. package/public/test/test/greatgrandchild.ts +0 -51
  238. package/public/test/test/parent.d.ts +0 -2
  239. package/public/test/test/parent.d.ts.map +0 -1
  240. package/public/test/test/parent.js +0 -25
  241. package/public/test/test/parent.js.map +0 -1
  242. package/public/test/test/parent.ts +0 -35
  243. package/public/test/test/testform.d.ts +0 -2
  244. package/public/test/test/testform.d.ts.map +0 -1
  245. package/public/test/test/testform.js +0 -1
  246. package/public/test/test/testform.js.map +0 -1
  247. package/public/test/test/testform.ts +0 -153
  248. package/public/test/test/testfunction.d.ts +0 -3
  249. package/public/test/test/testfunction.d.ts.map +0 -1
  250. package/public/test/test/testfunction.js +0 -7
  251. package/public/test/test/testfunction.js.map +0 -1
  252. package/public/test/test/testfunction.ts +0 -12
  253. package/public/test/test/testmc.d.ts +0 -3
  254. package/public/test/test/testmc.d.ts.map +0 -1
  255. package/public/test/test/testmc.js +0 -10
  256. package/public/test/test/testmc.js.map +0 -1
  257. package/public/test/test/testmc.ts +0 -16
  258. package/public/test/test/testsimpleclass.d.ts +0 -3
  259. package/public/test/test/testsimpleclass.d.ts.map +0 -1
  260. package/public/test/test/testsimpleclass.js +0 -9
  261. package/public/test/test/testsimpleclass.js.map +0 -1
  262. package/public/test/test/testsimpleclass.ts +0 -15
  263. package/public/test/test.d.ts +0 -2
  264. package/public/test/test.d.ts.map +0 -1
  265. package/public/test/test.html +0 -29
  266. package/public/test/test.js +0 -72
  267. package/public/test/test.js.map +0 -1
  268. package/public/test/test.ts +0 -176
  269. package/public/test/testform.css +0 -47
  270. package/public/test/testform.html +0 -56
  271. package/public/test/testform.json +0 -27
  272. package/public/typedoc/.nojekyll +0 -1
  273. package/public/typedoc/assets/highlight.css +0 -106
  274. package/public/typedoc/assets/icons.js +0 -18
  275. package/public/typedoc/assets/icons.svg +0 -1
  276. package/public/typedoc/assets/main.js +0 -60
  277. package/public/typedoc/assets/navigation.js +0 -1
  278. package/public/typedoc/assets/search.js +0 -1
  279. package/public/typedoc/assets/style.css +0 -1493
  280. package/public/typedoc/classes/MC.DC.html +0 -13
  281. package/public/typedoc/classes/MC.MC.html +0 -3
  282. package/public/typedoc/classes/MC.McBase.html +0 -3
  283. package/public/typedoc/functions/MC.autoload.html +0 -1
  284. package/public/typedoc/functions/MC.off.html +0 -1
  285. package/public/typedoc/functions/MC.on.html +0 -1
  286. package/public/typedoc/functions/MC.one.html +0 -1
  287. package/public/typedoc/functions/MC.trigger.html +0 -1
  288. package/public/typedoc/functions/elements.defineCE.html +0 -1
  289. package/public/typedoc/functions/elements.getCE.html +0 -1
  290. package/public/typedoc/functions/formValues.formValues.html +0 -1
  291. package/public/typedoc/functions/observables.observe.html +0 -1
  292. package/public/typedoc/hierarchy.html +0 -1
  293. package/public/typedoc/index.html +0 -122
  294. package/public/typedoc/interfaces/MC.HTMLMcElement.html +0 -758
  295. package/public/typedoc/media/MicroComponents.svg +0 -15
  296. package/public/typedoc/modules/MC.html +0 -10
  297. package/public/typedoc/modules/elements.html +0 -3
  298. package/public/typedoc/modules/formValues.html +0 -2
  299. package/public/typedoc/modules/observables.html +0 -3
  300. package/public/typedoc/modules.html +0 -5
  301. package/public/typedoc/types/observables.Observable.html +0 -1
  302. package/src/MC.ts +0 -431
  303. package/src/elements.ts +0 -119
  304. package/src/formValues.ts +0 -225
  305. package/src/helpers.ts +0 -149
  306. package/src/microcomponents.ts +0 -8
  307. package/src/observables.ts +0 -416
  308. package/src/selectors._ts +0 -1269
  309. package/src/test/grandparent.css +0 -14
  310. package/src/test/test/child.ts +0 -36
  311. package/src/test/test/grandchild.ts +0 -31
  312. package/src/test/test/grandparent.ts +0 -43
  313. package/src/test/test/greatgrandchild.ts +0 -51
  314. package/src/test/test/parent.ts +0 -35
  315. package/src/test/test/testform.ts +0 -153
  316. package/src/test/test/testfunction.ts +0 -12
  317. package/src/test/test/testmc.ts +0 -16
  318. package/src/test/test/testsimpleclass.ts +0 -15
  319. package/src/test/test.ts +0 -176
  320. package/src/test/testform.css +0 -47
  321. package/src/test/testform.html +0 -56
  322. package/src/test/testform.json +0 -27
  323. package/tasks.md +0 -36
  324. package/tsconfig.json +0 -107
  325. package/typedoc.json +0 -7
  326. package/webpack.config.js +0 -346
package/src/elements.ts DELETED
@@ -1,119 +0,0 @@
1
- 'use strict';
2
-
3
- import { DC, McBase } from './MC.js';
4
- import { kebabToPascal } from './helpers.js';
5
-
6
- class CeBaseClass extends HTMLElement {
7
- constructor() {
8
- super();
9
- }
10
-
11
- connectedCallback() {
12
- this.dispatchEvent( new CustomEvent('_mcConnected') );
13
- }
14
-
15
- connectedMoveCallback() {
16
- this.dispatchEvent( new CustomEvent('_mcConnectedMove') );
17
- }
18
-
19
- disconnectedCallback() {
20
- this.dispatchEvent( new CustomEvent('_mcDisconnected') );
21
- }
22
-
23
- adoptedCallback() {
24
- this.dispatchEvent( new CustomEvent('_mcAdopted') );
25
- }
26
-
27
- attributeChangedCallback(name: string, oldValue: any, newValue: any) {
28
- this.dispatchEvent(
29
- new CustomEvent(
30
- '_mcAttributeChanged',
31
- { detail: { name, oldValue, newValue } }
32
- )
33
- );
34
- }
35
-
36
- formResetCallback(){
37
- this.dispatchEvent( new CustomEvent('_mcFormReset') );
38
- }
39
- }
40
-
41
- function createNamedClass(
42
- name: string,
43
- ClassBody: { new (...args: any[]): any }
44
- ) {
45
- return Object.defineProperty(ClassBody, 'name', { value: name });
46
- }
47
-
48
- function isClass(func: any) {
49
- return typeof func === 'function'
50
- && /^class\s/.test(Function.prototype.toString.call(func));
51
- }
52
-
53
- export function defineCE(
54
- tagName: string,
55
- DefinitionClass: { new (...args: any[]): any } | Function,
56
- observedAttributes: string[] = []
57
- ) {
58
- if (customElements.get(tagName)) {
59
- console.warn(`IGNORED: Custom element "${tagName}" is already defined!`);
60
- return;
61
- }
62
-
63
- if (!tagName.includes('-')) {
64
- throw new Error(
65
- 'createCustomElement: tagName must contain at least one hyphen ("-").'
66
- );
67
- }
68
-
69
- let name = kebabToPascal(tagName);
70
-
71
- // not a class, but a function
72
- if ( !isClass( DefinitionClass.prototype.constructor ) ){
73
- customElements.define(
74
- tagName,
75
- // @ts-ignore
76
- DefinitionClass
77
- );
78
- return;
79
- }
80
-
81
- // a class, but not a MC
82
- if ( !( DefinitionClass.prototype instanceof McBase ) ){
83
- customElements.define(
84
- tagName,
85
- // @ts-ignore
86
- DefinitionClass
87
- );
88
- return;
89
- }
90
-
91
- // a MC
92
- customElements.define(
93
- tagName,
94
- createNamedClass(
95
- name,
96
- class extends CeBaseClass {
97
- instance: any;
98
-
99
- constructor(data?: any) {
100
- super();
101
- // @ts-ignore
102
- const instance = isClass( DefinitionClass )
103
- // @ts-ignore
104
- ? new DefinitionClass(this, data)
105
- : DefinitionClass;
106
- DC.add(this, name, instance);
107
- }
108
-
109
- static get observedAttributes() {
110
- return observedAttributes;
111
- }
112
- }
113
- )
114
- );
115
- }
116
-
117
- export function getCE(tagName: string): CustomElementConstructor | undefined {
118
- return customElements.get(tagName);
119
- }
package/src/formValues.ts DELETED
@@ -1,225 +0,0 @@
1
- 'use strict';
2
-
3
- import { LooseObject, copyGettersSetters } from './helpers.js';
4
- import { DC, on } from './MC.js';
5
- import { observe } from './observables.js';
6
-
7
- type inputTypes = HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;
8
-
9
- const getInputName = (
10
- e: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement
11
- ): string => {
12
- return e.tagName.toLowerCase();
13
- };
14
-
15
- abstract class InputBase {
16
- constructor(e: inputTypes) {}
17
-
18
- abstract get val(): any;
19
-
20
- abstract set val(value: any);
21
- }
22
-
23
- class RadioHandler extends InputBase {
24
- #e: HTMLInputElement;
25
-
26
- constructor(e: HTMLInputElement) {
27
- super(e);
28
- this.#e = e;
29
- }
30
-
31
- get val(): string {
32
- let ret = new FormData(this.#e.form as HTMLFormElement).get(this.#e.name);
33
-
34
- //console.log('radio[', this.#e.name, '] = "' + ret + '"');
35
- return ret as string;
36
- }
37
-
38
- set val(value: string) {
39
- let arr = [
40
- ...(this.#e.form as HTMLFormElement).querySelectorAll(
41
- `input[type="radio"][name="${this.#e.name}"]`
42
- ),
43
- ] as HTMLInputElement[];
44
-
45
- (
46
- arr
47
- .filter((e) => e.getAttribute('value') === value)
48
- .shift() as HTMLInputElement
49
- ).checked = true;
50
- }
51
- }
52
-
53
- class CheckboxHandler extends InputBase {
54
- #e: HTMLInputElement;
55
-
56
- constructor(e: HTMLInputElement) {
57
- super(e);
58
- this.#e = e;
59
- }
60
-
61
- get val(): boolean {
62
- return this.#e.checked;
63
- }
64
-
65
- set val(value: boolean) {
66
- this.#e.checked = value;
67
- }
68
- }
69
-
70
- class InputHandler extends InputBase {
71
- #e: HTMLInputElement;
72
-
73
- constructor(e: HTMLInputElement) {
74
- super(e);
75
- this.#e = e;
76
- }
77
-
78
- get val(): string {
79
- return this.#e.value;
80
- }
81
-
82
- set val(value: string) {
83
- this.#e.value = value;
84
- }
85
- }
86
-
87
- class SelectHandler extends InputBase {
88
- #e: HTMLSelectElement;
89
- #multi: boolean = false;
90
-
91
- constructor(e: HTMLSelectElement) {
92
- super(e);
93
- this.#e = e;
94
- this.#multi = e.multiple;
95
- }
96
-
97
- get val(): string[] | string {
98
- const that = this,
99
- ret: string[] = [];
100
-
101
- // get all options
102
- [...that.#e.querySelectorAll('option')]
103
- .filter((o) => o.selected)
104
- .forEach((o) => {
105
- ret.push(o.value);
106
- });
107
-
108
- if (this.#multi) return ret;
109
- return ret.length ? ret[0] : '';
110
- }
111
-
112
- set val(value: string[] | string) {
113
- const that = this;
114
-
115
- value = typeof value === 'string' ? [value] : value;
116
-
117
- // set all options
118
- [...that.#e.querySelectorAll('option')].forEach((o) => {
119
- if (value.indexOf(o.value) > -1) {
120
- o.selected = true;
121
- } else {
122
- o.selected = false;
123
- }
124
- });
125
- }
126
- }
127
-
128
- class TextAreaHandler extends InputBase {
129
- #e: HTMLTextAreaElement;
130
- constructor(e: HTMLTextAreaElement) {
131
- super(e);
132
- this.#e = e;
133
- }
134
-
135
- get val(): string {
136
- return this.#e.value || '';
137
- }
138
-
139
- set val(value: string) {
140
- this.#e.value = value;
141
- }
142
- }
143
-
144
- const getInputHandlers = (e: HTMLElement | ShadowRoot): LooseObject => {
145
- let inputList = [
146
- ...(e || document).querySelectorAll('input,select,textarea'),
147
- ],
148
- handlers: LooseObject = {};
149
-
150
- inputList.forEach((input) => {
151
- const name: string | null = (input as inputTypes).getAttribute('name');
152
- if (name) {
153
- let handler: any = false;
154
- switch (getInputName(input as inputTypes)) {
155
- case 'input':
156
- switch ((input as HTMLInputElement).type) {
157
- case 'radio':
158
- handler = new RadioHandler(input as HTMLInputElement);
159
- break;
160
- case 'checkbox':
161
- handler = new CheckboxHandler(input as HTMLInputElement);
162
- break;
163
- default:
164
- handler = new InputHandler(input as HTMLInputElement);
165
- }
166
- break;
167
- case 'select':
168
- handler = new SelectHandler(input as HTMLSelectElement);
169
- break;
170
- case 'textarea':
171
- handler = new TextAreaHandler(input as HTMLTextAreaElement);
172
- break;
173
- default:
174
- console.warn(
175
- 'handler missing:',
176
- name,
177
- 'for',
178
- input.tagName.toLowerCase(),
179
- input
180
- );
181
- break;
182
- }
183
-
184
- if (handler) {
185
- DC.add(input as HTMLElement, name, handler);
186
- Object.defineProperty(handlers, name, {
187
- enumerable: true,
188
- configurable: true,
189
- get: (): any => {
190
- return handler.val;
191
- },
192
- set: (value: any) => {
193
- if (handler.val !== value) {
194
- handler.val = value;
195
- }
196
- },
197
- });
198
- }
199
- }
200
- });
201
-
202
- return handlers;
203
- };
204
-
205
- export function formValues(
206
- targetObject: LooseObject,
207
- propertyName: string,
208
- dom: HTMLElement | ShadowRoot
209
- ) {
210
- let handlers = getInputHandlers(dom);
211
-
212
- targetObject[propertyName] = Object.assign({}, handlers);
213
-
214
- observe(targetObject, propertyName);
215
-
216
- copyGettersSetters(handlers, targetObject[propertyName]);
217
-
218
- [...dom.querySelectorAll('input, textarea, select')].forEach((input) => {
219
- input.addEventListener('input', (ev) => {
220
- //console.log('input event', input, ev);
221
- targetObject[propertyName].notify();
222
- });
223
- });
224
- }
225
-
package/src/helpers.ts DELETED
@@ -1,149 +0,0 @@
1
- 'use strict';
2
-
3
- export interface LooseObject {
4
- [key: string | symbol]: any;
5
- }
6
-
7
- export function isNativeObject(value: any): boolean {
8
- return value && value['constructor'] && value.constructor === Object;
9
- }
10
-
11
- export function sortObject(o: LooseObject): LooseObject {
12
- let result: LooseObject = {},
13
- keys = [...Object.keys(o)].sort();
14
-
15
- keys.forEach((key) => {
16
- if (isNativeObject(o[key])) {
17
- result[key] = sortObject(o[key]);
18
- } else {
19
- result[key] = o[key];
20
- }
21
- });
22
-
23
- return result;
24
- }
25
-
26
- export function flattenObject(
27
- o: LooseObject,
28
- doSort: boolean = true
29
- ): LooseObject {
30
- let result: LooseObject = {};
31
-
32
- [...Object.getOwnPropertyNames(o)].forEach((propName) => {
33
- if (
34
- o[propName] &&
35
- o[propName]['constructor'] &&
36
- o[propName].constructor === Object
37
- ) {
38
- const temp = flattenObject(o[propName], false);
39
- for (const j in temp) {
40
- result[propName + '.' + j] = temp[j];
41
- }
42
- } else {
43
- result[propName] = o[propName];
44
- }
45
- });
46
-
47
- return doSort ? sortObject(result) : result;
48
- }
49
-
50
- export function deepEqual(o1: LooseObject, o2: LooseObject): boolean {
51
- return (
52
- JSON.stringify(flattenObject(o1)) === JSON.stringify(flattenObject(o2))
53
- );
54
- }
55
-
56
- export function nameSpace(ns: string | string[], obj: LooseObject = {}): any {
57
- let nsa = ns.constructor === String ? ns.split('.') : ns;
58
-
59
- if (!obj || !nsa[0] || !obj[nsa[0]]) {
60
- console.warn('ns', nsa[0], 'not in', obj);
61
- return;
62
- }
63
- if (obj[nsa[0]].constructor === Object && nsa.length > 1) {
64
- return nameSpace((nsa as string[]).splice(1), obj[nsa[0]]);
65
- }
66
- return obj[nsa[0]];
67
- }
68
-
69
- export function parse(what: string | Object | any[], parseThis: Object) {
70
- var args = Array.from(arguments);
71
-
72
- if (args.length > 2) {
73
- while (args.length > 1) {
74
- args[0] = parse(args[0], args[1]);
75
- args.splice(1, 1);
76
- }
77
- return args[0];
78
- }
79
-
80
- if (typeof what === 'string') {
81
- what.match(/\{[^\{\}]*\}/g)?.forEach(function (pPropname) {
82
- var propname = pPropname.substring(1, pPropname.length - 1),
83
- value = nameSpace(propname, parseThis);
84
- //console.log(propname, value);
85
- if (typeof value !== 'undefined') {
86
- what = (what as string).replace(pPropname, value);
87
- }
88
- });
89
- } else if (isNativeObject(what)) {
90
- switch (what.constructor) {
91
- case Object:
92
- Object.keys(what).forEach(function (pKey) {
93
- if (what.hasOwnProperty(pKey)) {
94
- (what as LooseObject)[pKey] = parse(
95
- (what as LooseObject)[pKey],
96
- parseThis
97
- );
98
- }
99
- });
100
- break;
101
- case Array:
102
- (what as Array<any>).forEach(function (pValue, pKey, original) {
103
- original[pKey] = parse((what as any)[pKey], parseThis);
104
- });
105
- break;
106
- }
107
- }
108
-
109
- return what;
110
- }
111
-
112
- export function kebabToPascal(str: string) {
113
- return str
114
- .split('-') // Split by hyphens
115
- .map((word) => word.charAt(0).toUpperCase() + word.slice(1)) // Capitalize each part
116
- .join(''); // Join without spaces
117
- }
118
-
119
- export function debounce(func: Function, milliseconds: number): Function {
120
- let timeout: any;
121
- return () => {
122
- clearTimeout(timeout);
123
-
124
- timeout = setTimeout(function () {
125
- func(...arguments);
126
- }, milliseconds);
127
- };
128
- }
129
-
130
- export function htmlToElements(html: string): HTMLElement[] {
131
- let template = document.createElement('template');
132
-
133
- html = html.replace(/<([A-Za-z0-9\-]*)([^>\/]*)(\/>)/gi, '<$1$2></$1>'); // replace XHTML closing tags by full closing tags
134
-
135
- template.innerHTML = html;
136
-
137
- template.content.normalize();
138
-
139
- return Array.from(template.content.childNodes) as HTMLElement[];
140
- }
141
-
142
- export function copyGettersSetters(source: LooseObject, target: LooseObject) {
143
- const descriptors = Object.getOwnPropertyDescriptors(source);
144
- for (const [key, descriptor] of Object.entries(descriptors)) {
145
- if ('get' in descriptor || 'set' in descriptor) {
146
- Object.defineProperty(target, key, descriptor);
147
- }
148
- }
149
- }
@@ -1,8 +0,0 @@
1
- "use strict";
2
- export * from './helpers.js';
3
- export * from './MC.js';
4
- //export * from './McEvent.js';
5
- export * from './elements.js';
6
- export * from './observables.js';
7
- //export * from './selectors.js';
8
- export * from './formValues.js';