@twobirds/microcomponents 0.0.82 → 0.0.84

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 (268) hide show
  1. package/assets/documentation/MC.md +0 -1
  2. package/assets/test/test.html +1 -1
  3. package/dist/MC.d.ts +11 -10
  4. package/dist/MC.d.ts.map +1 -1
  5. package/dist/MC.js +137 -200
  6. package/dist/MC.min.js +157 -296
  7. package/dist/MC.ts +202 -337
  8. package/dist/elements.d.ts +1 -1
  9. package/dist/elements.d.ts.map +1 -1
  10. package/dist/elements.js +26 -6
  11. package/dist/elements.min.js +1 -1
  12. package/dist/elements.ts +50 -7
  13. package/dist/formValues.js +2 -2
  14. package/dist/formValues.min.js +1 -1
  15. package/dist/formValues.ts +3 -3
  16. package/dist/microcomponents.d.ts +0 -1
  17. package/dist/microcomponents.d.ts.map +1 -1
  18. package/dist/microcomponents.js +0 -1
  19. package/dist/microcomponents.min.js +1 -1
  20. package/dist/microcomponents.ts +1 -1
  21. package/dist/observables.d.ts.map +1 -1
  22. package/dist/observables.js +52 -57
  23. package/dist/observables.min.js +1 -1
  24. package/dist/observables.ts +68 -73
  25. package/package.json +6 -5
  26. package/public/MC.d.ts +11 -10
  27. package/public/MC.d.ts.map +1 -1
  28. package/public/MC.js +137 -200
  29. package/public/MC.js.map +1 -1
  30. package/public/MC.min.js +157 -296
  31. package/public/MC.ts +202 -337
  32. package/public/documentation/MC.md +0 -1
  33. package/public/elements.d.ts +1 -1
  34. package/public/elements.d.ts.map +1 -1
  35. package/public/elements.js +26 -6
  36. package/public/elements.js.map +1 -1
  37. package/public/elements.min.js +1 -1
  38. package/public/elements.ts +50 -7
  39. package/public/formValues.js +2 -2
  40. package/public/formValues.js.map +1 -1
  41. package/public/formValues.min.js +1 -1
  42. package/public/formValues.ts +3 -3
  43. package/public/microcomponents.d.ts +0 -1
  44. package/public/microcomponents.d.ts.map +1 -1
  45. package/public/microcomponents.js +0 -1
  46. package/public/microcomponents.js.map +1 -1
  47. package/public/microcomponents.min.js +1 -1
  48. package/public/microcomponents.ts +1 -1
  49. package/public/observables.d.ts.map +1 -1
  50. package/public/observables.js +52 -57
  51. package/public/observables.js.map +1 -1
  52. package/public/observables.min.js +1 -1
  53. package/public/observables.ts +68 -73
  54. package/public/{test/selectors.ts → selectors._ts} +2 -367
  55. package/public/src/MC.d.ts +37 -0
  56. package/public/src/MC.d.ts.map +1 -0
  57. package/public/src/MC.js +316 -0
  58. package/public/src/MC.js.map +1 -0
  59. package/public/src/MC.ts +202 -337
  60. package/public/src/elements.d.ts +5 -0
  61. package/public/src/elements.d.ts.map +1 -0
  62. package/public/src/elements.js +68 -0
  63. package/public/src/elements.js.map +1 -0
  64. package/public/src/elements.ts +50 -7
  65. package/public/src/formValues.d.ts +3 -0
  66. package/public/src/formValues.d.ts.map +1 -0
  67. package/public/src/formValues.js +162 -0
  68. package/public/src/formValues.js.map +1 -0
  69. package/public/src/formValues.ts +3 -3
  70. package/public/src/helpers.d.ts +14 -0
  71. package/public/src/helpers.d.ts.map +1 -0
  72. package/public/src/helpers.js +113 -0
  73. package/public/src/microcomponents.d.ts +6 -0
  74. package/public/src/microcomponents.d.ts.map +1 -0
  75. package/public/src/microcomponents.js +7 -0
  76. package/public/src/microcomponents.js.map +1 -0
  77. package/public/src/microcomponents.ts +1 -1
  78. package/public/src/observables.d.ts +11 -0
  79. package/public/src/observables.d.ts.map +1 -0
  80. package/public/src/observables.js +244 -0
  81. package/public/src/observables.js.map +1 -0
  82. package/public/src/observables.ts +68 -73
  83. package/public/{selectors.ts → src/selectors._ts} +2 -367
  84. package/public/src/test/grandparent.css +11 -0
  85. package/public/src/test/test/child.d.ts +2 -0
  86. package/public/src/test/test/child.d.ts.map +1 -0
  87. package/public/src/test/test/child.js +15 -0
  88. package/public/src/test/test/child.js.map +1 -0
  89. package/public/src/test/test/child.ts +21 -0
  90. package/public/src/test/test/grandchild.d.ts +2 -0
  91. package/public/src/test/test/grandchild.d.ts.map +1 -0
  92. package/public/src/test/test/grandchild.js +15 -0
  93. package/public/src/test/test/grandchild.js.map +1 -0
  94. package/public/src/test/test/grandchild.ts +21 -0
  95. package/public/src/test/test/grandparent.d.ts +2 -0
  96. package/public/src/test/test/grandparent.d.ts.map +1 -0
  97. package/public/src/test/test/grandparent.js +1 -0
  98. package/public/src/test/test/grandparent.js.map +1 -0
  99. package/public/src/test/test/grandparent.ts +29 -0
  100. package/public/src/test/test/greatgrandchild.d.ts +2 -0
  101. package/public/src/test/test/greatgrandchild.d.ts.map +1 -0
  102. package/public/src/test/test/greatgrandchild.js +29 -0
  103. package/public/src/test/test/greatgrandchild.js.map +1 -0
  104. package/public/src/test/test/greatgrandchild.ts +42 -0
  105. package/public/src/test/test/parent.d.ts +2 -0
  106. package/public/src/test/test/parent.d.ts.map +1 -0
  107. package/public/src/test/test/parent.js +15 -0
  108. package/public/src/test/test/parent.js.map +1 -0
  109. package/public/src/test/test/parent.ts +21 -0
  110. package/public/src/test/test/testform.d.ts +2 -0
  111. package/public/src/test/test/testform.d.ts.map +1 -0
  112. package/public/src/test/test/testform.js +1 -0
  113. package/public/src/test/test/testform.js.map +1 -0
  114. package/public/src/test/test/testform.ts +153 -0
  115. package/public/src/test/test/testfunction.d.ts +3 -0
  116. package/public/src/test/test/testfunction.d.ts.map +1 -0
  117. package/public/src/test/test/testfunction.js +7 -0
  118. package/public/src/test/test/testfunction.js.map +1 -0
  119. package/public/src/test/test/testfunction.ts +12 -0
  120. package/public/src/test/test/testmc.d.ts +3 -0
  121. package/public/src/test/test/testmc.d.ts.map +1 -0
  122. package/public/src/test/test/testmc.js +10 -0
  123. package/public/src/test/test/testmc.js.map +1 -0
  124. package/public/src/test/test/testmc.ts +16 -0
  125. package/public/src/test/test/testsimpleclass.d.ts +3 -0
  126. package/public/src/test/test/testsimpleclass.d.ts.map +1 -0
  127. package/public/src/test/test/testsimpleclass.js +9 -0
  128. package/public/src/test/test/testsimpleclass.js.map +1 -0
  129. package/public/src/test/test/testsimpleclass.ts +15 -0
  130. package/public/src/test/test.d.ts +2 -0
  131. package/public/src/test/test.d.ts.map +1 -0
  132. package/public/src/test/test.js +80 -0
  133. package/public/src/test/test.js.map +1 -0
  134. package/public/src/test/test.ts +188 -0
  135. package/public/src/test/testform.css +47 -0
  136. package/public/src/test/testform.html +56 -0
  137. package/public/src/test/testform.json +27 -0
  138. package/public/test/MC.d.ts +11 -10
  139. package/public/test/MC.d.ts.map +1 -1
  140. package/public/test/MC.js +137 -200
  141. package/public/test/MC.min.js +377 -0
  142. package/public/test/MC.ts +202 -337
  143. package/public/test/elements.d.ts +1 -1
  144. package/public/test/elements.d.ts.map +1 -1
  145. package/public/test/elements.js +26 -6
  146. package/public/test/elements.min.js +1 -0
  147. package/public/test/elements.ts +50 -7
  148. package/public/test/formValues.js +2 -2
  149. package/public/test/formValues.min.js +1 -0
  150. package/public/test/formValues.ts +3 -3
  151. package/public/test/grandparent.css +1 -3
  152. package/public/test/microcomponents.d.ts +0 -1
  153. package/public/test/microcomponents.d.ts.map +1 -1
  154. package/public/test/microcomponents.js +0 -1
  155. package/public/test/microcomponents.min.js +1 -1
  156. package/public/test/microcomponents.ts +1 -1
  157. package/public/test/observables.d.ts.map +1 -1
  158. package/public/test/observables.js +52 -57
  159. package/public/test/observables.min.js +1 -0
  160. package/public/test/observables.ts +68 -73
  161. package/public/test/test/child.ts +21 -0
  162. package/public/test/test/grandchild.ts +21 -0
  163. package/public/test/test/grandparent.d.ts.map +1 -1
  164. package/public/test/test/grandparent.js +1 -1
  165. package/public/test/test/grandparent.js.map +1 -1
  166. package/public/test/test/grandparent.ts +29 -0
  167. package/public/test/test/greatgrandchild.ts +42 -0
  168. package/public/test/test/parent.ts +21 -0
  169. package/public/test/test/testform.js +1 -1
  170. package/public/test/test/testform.js.map +1 -1
  171. package/public/test/test/testform.ts +153 -0
  172. package/public/test/test/testfunction.d.ts +3 -0
  173. package/public/test/test/testfunction.d.ts.map +1 -0
  174. package/public/test/test/testfunction.js +7 -0
  175. package/public/test/test/testfunction.js.map +1 -0
  176. package/public/test/test/testfunction.ts +12 -0
  177. package/public/test/test/testmc.d.ts +2 -5
  178. package/public/test/test/testmc.d.ts.map +1 -1
  179. package/public/test/test/testmc.js +4 -4
  180. package/public/test/test/testmc.js.map +1 -1
  181. package/public/test/test/testmc.ts +16 -0
  182. package/public/test/test/testsimpleclass.d.ts +3 -0
  183. package/public/test/test/testsimpleclass.d.ts.map +1 -0
  184. package/public/test/test/testsimpleclass.js +9 -0
  185. package/public/test/test/testsimpleclass.js.map +1 -0
  186. package/public/test/test/testsimpleclass.ts +15 -0
  187. package/public/test/test.html +1 -1
  188. package/public/test/test.js +5 -6
  189. package/public/test/test.js.map +1 -1
  190. package/public/test/test.ts +188 -0
  191. package/public/test/testform.css +47 -0
  192. package/public/test/testform.html +56 -0
  193. package/public/test/testform.json +3 -3
  194. package/public/typedoc/assets/navigation.js +1 -1
  195. package/public/typedoc/assets/search.js +1 -1
  196. package/public/typedoc/classes/MC.DC.html +6 -4
  197. package/public/typedoc/classes/MC.MC.html +3 -4
  198. package/public/typedoc/classes/MC.McBase.html +2 -2
  199. package/public/typedoc/functions/MC.autoload.html +1 -1
  200. package/public/typedoc/functions/MC.off.html +1 -0
  201. package/public/typedoc/functions/MC.on.html +1 -0
  202. package/public/typedoc/functions/MC.one.html +1 -0
  203. package/public/typedoc/functions/elements.defineCE.html +1 -1
  204. package/public/typedoc/functions/elements.getCE.html +1 -1
  205. package/public/typedoc/functions/formValues.formValues.html +1 -1
  206. package/public/typedoc/functions/observables.observe.html +1 -1
  207. package/public/typedoc/interfaces/MC.HTMLMcElement.html +2 -2
  208. package/public/typedoc/modules/MC.html +7 -6
  209. package/public/typedoc/modules/elements.html +1 -1
  210. package/public/typedoc/modules/formValues.html +1 -1
  211. package/public/typedoc/modules/observables.html +1 -1
  212. package/public/typedoc/types/observables.Observable.html +1 -1
  213. package/src/MC.ts +202 -337
  214. package/src/elements.ts +50 -7
  215. package/src/formValues.ts +3 -3
  216. package/src/microcomponents.ts +1 -1
  217. package/src/observables.ts +68 -73
  218. package/{dist/selectors.ts → src/selectors._ts} +2 -367
  219. package/src/test/test/grandparent.ts +12 -4
  220. package/src/test/test/testform.ts +13 -11
  221. package/src/test/test/testfunction.ts +12 -0
  222. package/src/test/test/testmc.ts +13 -9
  223. package/src/test/test/testsimpleclass.ts +15 -0
  224. package/src/test/test.ts +8 -20
  225. package/tasks.md +36 -0
  226. package/tsconfig.json +2 -2
  227. package/typedoc.json +1 -1
  228. package/webpack.config.js +2 -2
  229. package/dist/McEvent.d.ts +0 -15
  230. package/dist/McEvent.d.ts.map +0 -1
  231. package/dist/McEvent.js +0 -71
  232. package/dist/selectors.d.ts +0 -108
  233. package/dist/selectors.d.ts.map +0 -1
  234. package/dist/selectors.js +0 -971
  235. package/dist/selectors.min.js +0 -1
  236. package/public/McEvent.d.ts +0 -15
  237. package/public/McEvent.d.ts.map +0 -1
  238. package/public/McEvent.js +0 -71
  239. package/public/McEvent.js.map +0 -1
  240. package/public/selectors.d.ts +0 -108
  241. package/public/selectors.d.ts.map +0 -1
  242. package/public/selectors.js +0 -971
  243. package/public/selectors.js.map +0 -1
  244. package/public/selectors.min.js +0 -1
  245. package/public/src/selectors.ts +0 -1634
  246. package/public/test/MC.js.map +0 -1
  247. package/public/test/McEvent.d.ts +0 -15
  248. package/public/test/McEvent.d.ts.map +0 -1
  249. package/public/test/McEvent.js +0 -71
  250. package/public/test/McEvent.js.map +0 -1
  251. package/public/test/McEvent.ts +0 -96
  252. package/public/test/elements.js.map +0 -1
  253. package/public/test/formValues.js.map +0 -1
  254. package/public/test/microcomponents.js.map +0 -1
  255. package/public/test/observables.js.map +0 -1
  256. package/public/test/selectors.d.ts +0 -108
  257. package/public/test/selectors.d.ts.map +0 -1
  258. package/public/test/selectors.js +0 -971
  259. package/public/test/selectors.js.map +0 -1
  260. package/public/typedoc/classes/MC.McEvent.html +0 -9
  261. package/public/typedoc/functions/MC.addListener.html +0 -1
  262. package/public/typedoc/functions/MC.removeListener.html +0 -1
  263. package/src/McEvent.ts +0 -96
  264. package/src/selectors.ts +0 -1634
  265. /package/{dist/McEvent.ts → public/McEvent._ts} +0 -0
  266. /package/public/{McEvent.ts → src/McEvent._ts} +0 -0
  267. /package/public/{test → src}/helpers.js.map +0 -0
  268. /package/{public/src/McEvent.ts → src/McEvent._ts} +0 -0
package/src/elements.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- import { DC } from './MC.js';
3
+ import { DC, McBase } from './MC.js';
4
4
  import { kebabToPascal } from './helpers.js';
5
5
 
6
6
  class CeBaseClass extends HTMLElement {
@@ -9,19 +9,32 @@ class CeBaseClass extends HTMLElement {
9
9
  }
10
10
 
11
11
  connectedCallback() {
12
- (DC as any).trigger(this, 'Connected');
12
+ this.dispatchEvent( new CustomEvent('_mcConnected') );
13
+ }
14
+
15
+ connectedMoveCallback() {
16
+ this.dispatchEvent( new CustomEvent('_mcConnectedMove') );
13
17
  }
14
18
 
15
19
  disconnectedCallback() {
16
- (DC as any).trigger(this, 'Disconnected');
20
+ this.dispatchEvent( new CustomEvent('_mcDisconnected') );
17
21
  }
18
22
 
19
23
  adoptedCallback() {
20
- (DC as any).trigger(this, 'Adopted');
24
+ this.dispatchEvent( new CustomEvent('_mcAdopted') );
21
25
  }
22
26
 
23
27
  attributeChangedCallback(name: string, oldValue: any, newValue: any) {
24
- (DC as any).trigger(this, 'AttributeChanged', { name, oldValue, newValue });
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') );
25
38
  }
26
39
  }
27
40
 
@@ -32,9 +45,14 @@ function createNamedClass(
32
45
  return Object.defineProperty(ClassBody, 'name', { value: name });
33
46
  }
34
47
 
48
+ function isClass(func: any) {
49
+ return typeof func === 'function'
50
+ && /^class\s/.test(Function.prototype.toString.call(func));
51
+ }
52
+
35
53
  export function defineCE(
36
54
  tagName: string,
37
- DefinitionClass: { new (...args: any[]): any },
55
+ DefinitionClass: { new (...args: any[]): any } | Function,
38
56
  observedAttributes: string[] = []
39
57
  ) {
40
58
  if (customElements.get(tagName)) {
@@ -50,6 +68,27 @@ export function defineCE(
50
68
 
51
69
  let name = kebabToPascal(tagName);
52
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
53
92
  customElements.define(
54
93
  tagName,
55
94
  createNamedClass(
@@ -59,7 +98,11 @@ export function defineCE(
59
98
 
60
99
  constructor(data?: any) {
61
100
  super();
62
- let instance = new DefinitionClass(this, data);
101
+ // @ts-ignore
102
+ const instance = isClass( DefinitionClass )
103
+ // @ts-ignore
104
+ ? new DefinitionClass(this, data)
105
+ : DefinitionClass;
63
106
  DC.add(this, name, instance);
64
107
  }
65
108
 
package/src/formValues.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  import { LooseObject, copyGettersSetters } from './helpers.js';
4
- import { DC, addListener } from './MC.js';
4
+ import { DC, on } from './MC.js';
5
5
  import { observe } from './observables.js';
6
6
 
7
7
  type inputTypes = HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;
@@ -216,8 +216,8 @@ export function formValues(
216
216
  copyGettersSetters(handlers, targetObject[propertyName]);
217
217
 
218
218
  [...dom.querySelectorAll('input, textarea, select')].forEach((input) => {
219
- addListener(input as inputTypes, 'input', (ev: Event) => {
220
- //console.log('keyup', ev);
219
+ input.addEventListener('input', (ev) => {
220
+ //console.log('input event', input, ev);
221
221
  targetObject[propertyName].notify();
222
222
  });
223
223
  });
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  export * from './helpers.js';
3
3
  export * from './MC.js';
4
- export * from './McEvent.js';
4
+ //export * from './McEvent.js';
5
5
  export * from './elements.js';
6
6
  export * from './observables.js';
7
7
  //export * from './selectors.js';
@@ -8,7 +8,7 @@ import {
8
8
  copyGettersSetters,
9
9
  } from './helpers.js';
10
10
 
11
- import { DC, HTMLMcElement, McEvent } from './MC.js';
11
+ import { DC, HTMLMcElement, trigger } from './MC.js';
12
12
 
13
13
  function isObservableObject(value: any): boolean {
14
14
  return value != null && typeof value === 'object';
@@ -21,12 +21,11 @@ function getPlaceholders(target: HTMLElement): string[] {
21
21
  regEx = /\{[^\{\}]*\}/g;
22
22
 
23
23
  // scan attributes
24
- target
25
- .getAttributeNames()
24
+ ( !!target.getAttributeNames ? target.getAttributeNames() : [] )
26
25
  .filter((attr) => target.getAttribute(attr)?.match(regEx)) // extract placeholder(s)
27
26
  .forEach((attr) => {
28
- let phs: Set<string> = new Set(target.getAttribute(attr)?.match(regEx));
29
- phs.forEach((placeholder) =>
27
+ let placeholders: Set<string> = new Set(target.getAttribute(attr)?.match(regEx));
28
+ placeholders.forEach((placeholder) =>
30
29
  placeholders.add(placeholder.replace(/[\{\}]/g, ''))
31
30
  );
32
31
  });
@@ -62,35 +61,31 @@ class Placeholders extends DC {
62
61
 
63
62
  constructor(target: HTMLElement) {
64
63
  super(target);
65
- let that = this;
66
- getPlaceholders(target).forEach((property) => (that.data[property] = ''));
67
- observe(that);
68
- that.#attachCallbacks();
69
- delete that._mc; // cleanup, not needed
64
+ getPlaceholders(target).forEach((property) => (this.data[property] = ''));
65
+ observe(this);
66
+ this.#attachCallbacks();
70
67
  }
71
68
 
72
69
  #attachCallbacks() {
73
- let that = this,
74
- target = that.target,
70
+ let target = this.target,
75
71
  hide: boolean = false;
76
72
 
77
- //console.log('attachCallbacks', that.target);
73
+ //console.log('attachCallbacks', this.target);
78
74
 
79
75
  // scan attributes
80
- target
81
- .getAttributeNames()
76
+ ( !!target.getAttributeNames ? target.getAttributeNames() : [] )
82
77
  .filter((attr: string) =>
83
78
  target.getAttribute(attr)?.match(/\{[^\{\}]*\}/g)
84
79
  ) // extract placeholder(s)
85
80
  .forEach((attr: string) => {
86
- let phs: Set<string> = new Set(
81
+ let placeholders: Set<string> = new Set(
87
82
  target.getAttribute(attr)?.match(/\{[^\{\}]*\}/g)
88
83
  );
89
84
  // attach callback
90
- that.data.observe(
85
+ this.data.observe(
91
86
  ((template: string) => (data: LooseObject) => {
92
87
  let result: string = template;
93
- phs.forEach((placeholder) => {
88
+ placeholders.forEach((placeholder) => {
94
89
  result = result.replace(
95
90
  placeholder,
96
91
  data[placeholder.replace(/[\{\}]/g, '')]
@@ -108,44 +103,41 @@ class Placeholders extends DC {
108
103
  return (
109
104
  // is text node and has placeholders
110
105
  childNode.nodeType === 3 &&
111
- ((childNode as any).nodeValue || '').match(/\{[^\{\}]*\}/g)
106
+ ((childNode as Node).nodeValue || '').match(/\{[^\{\}]*\}/g)
112
107
  );
113
108
  })
114
109
  .forEach((childNode) => {
115
110
  hide = true;
116
- let phs: Set<string> = new Set(
111
+ let placeholders: Set<string> = new Set(
117
112
  childNode.nodeValue.match(/\{[^\{\}]*\}/g)
118
113
  );
119
114
 
120
115
  // attach callback
121
- that.data.observe(
116
+ this.data.observe(
122
117
  ((template: string) => (data: LooseObject) => {
123
118
  let result: string = template;
124
- //console.log('text node "', template, '" callbach data:', data);
125
- phs.forEach((placeholder) => {
119
+ //console.log('text node "', template, '" callback data:', data);
120
+ placeholders.forEach((placeholder) => {
126
121
  result = result.replace(
127
122
  placeholder,
128
123
  data[placeholder.replace(/[\{\}]/g, '')]
129
124
  );
130
125
  });
131
- if (
132
- Object.keys(data).some((key) => {
133
- return !!data[key];
134
- })
135
- ) {
136
- if (!!that.oldDisplay) {
137
- target.style = that.oldDisplay;
138
- } else {
139
- target.removeAttribute('style');
140
- }
141
- delete that.oldDisplay;
126
+
127
+ if (!!this.oldDisplay) {
128
+ target.style = this.oldDisplay;
129
+ } else {
130
+ target.removeAttribute('style');
142
131
  }
132
+ delete this.oldDisplay;
133
+
143
134
  childNode.nodeValue = result;
144
135
  })(childNode.nodeValue)
145
136
  );
146
137
 
147
138
  // hide for now
148
- that.oldDisplay = target.getAttribute('style)') || '';
139
+ this.oldDisplay = target.getAttribute('style') || ''; // TBD allow null to indicate there was no old style attribute
140
+
149
141
  if (
150
142
  hide &&
151
143
  !inputs.includes((target as any).constructor) &&
@@ -156,27 +148,25 @@ class Placeholders extends DC {
156
148
  });
157
149
  }
158
150
 
159
- onData(ev: McEvent) {
160
- let that = this,
161
- data: LooseObject = {};
162
- Object.keys(ev.data).forEach((key) => {
163
- if (that.data.hasOwnProperty(key)) data[key] = ev.data[key];
151
+ onData(ev: CustomEvent) {
152
+ let data: LooseObject = {};
153
+ Object.keys(ev.detail.data).forEach((key) => {
154
+ if (this.data.hasOwnProperty(key)) data[key] = ev.detail.data[key];
164
155
  });
165
- //console.log('onData()', ev, data, that.data);
166
- if (JSON.stringify(data) !== JSON.stringify(that.data))
167
- Object.assign(that.data, data); // will trigger callbacks
156
+ //console.log( 'Placeholder onData', ev, data );
157
+ if (JSON.stringify(data) !== JSON.stringify(this.data))
158
+ Object.assign(this.data, data); // will trigger callbacks
168
159
  }
169
160
  }
170
161
 
171
162
  function getPlaceholderElements(
172
163
  target: HTMLElement | DocumentFragment | ShadowRoot
173
164
  ): HTMLElement[] {
174
- let elements: Array<HTMLElement> = (
175
- target instanceof HTMLElement ? [target] : []
176
- )
165
+ let elements: Array<Node> = [target]
177
166
  .concat([...(target.querySelectorAll('*') as unknown as HTMLElement[])])
178
167
  .filter((e) => !!getPlaceholders(e as HTMLElement).length)
179
- .filter((e) => e.tagName !== 'STYLE');
168
+ .filter((e) => (e as HTMLElement)?.tagName !== 'STYLE')
169
+ .reverse(); // to start with inner elements
180
170
  //console.log('getPlaceholderElements', elements);
181
171
  return elements as HTMLElement[];
182
172
  }
@@ -232,40 +222,46 @@ function makeObservable(val: any): Class<typeof val>{
232
222
  this.#callbacks = callbacks
233
223
  }
234
224
 
235
- observe(f: Function) {
225
+ observe( callback: Function ) {
236
226
  //console.log('observe');
237
- this.#callbacks.push(f);
227
+ this.#callbacks.push( callback );
238
228
  return this;
239
229
  }
240
230
 
241
231
  bind(target: HTMLElement | DocumentFragment | ShadowRoot) {
242
- const that = this,
243
- iso = isObservableObject(that.valueOf());
232
+ const iso = isObservableObject(this.valueOf());
244
233
  //console.log('bind', iso, target);
245
234
 
246
235
  if (iso) {
247
236
  makePlaceholders(target);
248
- const placeholders: unknown = [
249
- ...target.querySelectorAll('[_mc]'),
250
- ].filter((e) => !!(e as LooseObject)?._mc?._placeholders);
237
+ const placeholders: unknown =
238
+ [
239
+ target,
240
+ ...target.querySelectorAll('[data-mc]'),
241
+ ]
242
+ .filter(
243
+ (e) => !!(e as LooseObject)?._mc?._placeholders
244
+ );
245
+
251
246
  //console.log('placeholders:', target, placeholders);
247
+
252
248
  const func = function callback(data: LooseObject) {
253
249
  // avoid bubbling for speed
254
- let d = flattenObject(data);
255
- //console.log('inside callback', target, d);
256
- (placeholders as DC[]).forEach((e) => {
250
+ let flattenedData = flattenObject(data);
251
+ //console.log('inside placeholder callback', target, flattenedData);
252
+ (placeholders as Node[]).forEach((node) => {
257
253
  // console.log('trigger callback', e);
258
- if (!e) return;
259
- (e as any)._mc.trigger('data', d);
254
+ if (!node) return;
255
+ trigger(node as HTMLMcElement, 'data', flattenedData);
260
256
  });
261
257
  };
262
- (that as any).#callbacks.push(func);
263
- that.notify();
258
+ (this as any).#callbacks.push(func);
259
+ this.notify();
264
260
  } else {
265
261
  console.warn(
266
262
  'IGNORED - cannot bind a non-Object to the dom, IS:',
267
- typeof that.valueOf(),
268
- that
263
+ typeof this.valueOf(),
264
+ this
269
265
  );
270
266
  }
271
267
 
@@ -273,20 +269,19 @@ function makeObservable(val: any): Class<typeof val>{
273
269
  }
274
270
 
275
271
  notify(notify?: boolean) {
276
- let that = this,
277
- data =
278
- isObservableObject(that.valueOf()) &&
279
- that.valueOf() instanceof Array === false
280
- ? structuredClone(Object.assign({}, that))
281
- : that.valueOf();
272
+ let data =
273
+ isObservableObject(this.valueOf()) &&
274
+ this.valueOf() instanceof Array === false
275
+ ? structuredClone(Object.assign({}, this))
276
+ : this.valueOf();
282
277
 
283
278
  if (notify !== undefined) {
284
- that.#notify = notify;
279
+ this.#notify = notify;
285
280
  // return;
286
281
  }
287
282
 
288
- //if (that.#notify) console.log('notify', this, data);
289
- (that as any).#callbacks.forEach((f: Function) => {
283
+ //if (this.#notify) console.log('notify', this, data);
284
+ (this as any).#callbacks.forEach((f: Function) => {
290
285
  // console.log(
291
286
  // (this.constructor as any).callbacks,
292
287
  // 'notify: exec callback',
@@ -296,7 +291,7 @@ function makeObservable(val: any): Class<typeof val>{
296
291
  f(data);
297
292
  });
298
293
 
299
- return that;
294
+ return this;
300
295
  }
301
296
  };
302
297