@twobirds/microcomponents 0.0.12 → 0.0.14

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 (37) hide show
  1. package/README.md +26 -44
  2. package/assets/documentation/ajaxian-1.png +0 -0
  3. package/assets/documentation/ajaxian-2.png +0 -0
  4. package/assets/documentation/ajaxian-3.png +0 -0
  5. package/assets/documentation/history.md +436 -0
  6. package/assets/documentation/how_tos.md +0 -0
  7. package/assets/documentation/introduction.md +0 -0
  8. package/{microcomponents_magic.md → assets/documentation/magic.md} +1 -1
  9. package/assets/documentation/rnd0023-1.jpg +0 -0
  10. package/assets/documentation/rnd0023-2.jpg +0 -0
  11. package/assets/documentation/rnd0023-3.jpg +0 -0
  12. package/assets/documentation/tB_react.md +369 -0
  13. package/package.json +2 -2
  14. package/public/documentation/ajaxian-1.png +0 -0
  15. package/public/documentation/ajaxian-2.png +0 -0
  16. package/public/documentation/ajaxian-3.png +0 -0
  17. package/public/documentation/functional_requirements.md +8 -0
  18. package/public/documentation/history.md +436 -0
  19. package/public/documentation/how_tos.md +0 -0
  20. package/public/documentation/introduction.md +0 -0
  21. package/public/documentation/magic.md +87 -0
  22. package/public/documentation/proposal_draft.md +37 -0
  23. package/public/documentation/rnd0023-1.jpg +0 -0
  24. package/public/documentation/rnd0023-2.jpg +0 -0
  25. package/public/documentation/rnd0023-3.jpg +0 -0
  26. package/public/documentation/tB_react.md +369 -0
  27. package/public/documentation/usage.md +142 -0
  28. package/public/documentation/why.md +25 -0
  29. package/public/test.js +20 -18
  30. package/src/test.js +22 -20
  31. package/dist/test.d.ts +0 -36
  32. package/dist/test.d.ts.map +0 -1
  33. package/dist/test.js +0 -214
  34. /package/{microcomponents_functional_requirements.md → assets/documentation/functional_requirements.md} +0 -0
  35. /package/{MicroComponentProposal_draft.md → assets/documentation/proposal_draft.md} +0 -0
  36. /package/{microcomponents_usage.md → assets/documentation/usage.md} +0 -0
  37. /package/{microcomponents_why.md → assets/documentation/why.md} +0 -0
package/src/test.js CHANGED
@@ -134,16 +134,18 @@ class MC {
134
134
  }
135
135
  }
136
136
 
137
- // create test page
138
- document.body.innerHTML = `<div class="level_1"><span><div class="level_2"><span><div class="level_3"><span><div class="level_4"><span><div class="level_5"></div></span></div></span></div></span></div></span></div>`;
137
+ // create test page if necessary, otherwise test what is present
138
+ if (window.location.hostname.indexOf("gitlab") > -1) {
139
+ document.body.innerHTML = `<div class="level_1"><span><div class="level_2"><span><div class="level_3"><span><div class="level_4"><span><div class="level_5"></div><div class="level_5"></div><div class="level_5"></div><div class="level_5"></div><div class="level_5"></div></span></div></span></div></span></div></span></div>`;
139
140
 
140
- let elements = [...document.querySelectorAll("div")].reverse();
141
- elements.forEach((e) => (e.innerHTML = e.innerHTML.repeat(5)));
141
+ let elements = [...document.querySelectorAll("div")].reverse();
142
+ elements.forEach((e) => (e.innerHTML = e.innerHTML.repeat(5)));
142
143
 
143
- document.body.innerHTML = document.body.innerHTML.repeat(5);
144
- document.body.innerHTML =
145
- document.body.innerHTML +
146
- "<span>F12 opens the debugger, console has some manual tests...</span>";
144
+ document.body.innerHTML = document.body.innerHTML.repeat(5);
145
+ document.body.innerHTML =
146
+ document.body.innerHTML +
147
+ "<span>F12 opens the debugger, console has some manual tests...</span>";
148
+ }
147
149
 
148
150
  // create an inner micro component class
149
151
  class MyInnerMC extends MC {
@@ -179,10 +181,10 @@ class MyMC extends MC {
179
181
 
180
182
  console.time("MC creation time");
181
183
  // get some element from the DOM
182
- const element = document.querySelector("div");
184
+ const domElement = document.querySelector("div");
183
185
 
184
186
  // Add the custom micro component instance to the target element
185
- let topLevelMC = MC.add(element, "myFirstMC", new MyMC(element));
187
+ MC.add(domElement, "myFirstMC", new MyMC(domElement));
186
188
 
187
189
  // Add the custom micro component instance to every div
188
190
  document.querySelectorAll("div").forEach((e) => {
@@ -201,20 +203,20 @@ console.info(
201
203
  "\nnumber of top level micro components:",
202
204
  c.length * 2 + 1, // TODO write reducer
203
205
  "\nnumber of top level & inner micro components:",
204
- c.length * 3 + 2 // TODO write reducer
206
+ c.length * 6 + 2 // TODO write reducer
205
207
  );
206
208
 
207
- console.log("ROOT element", element);
208
- console.log("-> ._mc", element._mc);
209
- console.log("-> _mc.myMC", element._mc.myMC);
209
+ console.warn("domElement = first DIV element:", domElement);
210
+ console.log("domElement\n ._mc", domElement._mc);
211
+ console.log("domElement\n ._mc\n .myFirstMC", domElement._mc.myFirstMC);
210
212
  console.log(
211
- "-> _mc.myFirstMC._mc (MC.debug = false)",
212
- element._mc.myFirstMC._mc
213
+ "domElement\n ._mc\n .myFirstMC\n ._mc (MC.debug = false)",
214
+ domElement._mc.myFirstMC._mc
213
215
  );
214
216
  MC.debug = true;
215
217
  console.log(
216
- "-> _mc.myFirstMC._mc (MC.debug = true)",
217
- element._mc.myFirstMC._mc
218
+ "domElement\n ._mc\n .myFirstMC\n ._mc (MC.debug = true)",
219
+ domElement._mc.myFirstMC._mc
218
220
  );
219
221
  MC.debug = false;
220
222
 
@@ -223,7 +225,7 @@ test selectors
223
225
  */
224
226
 
225
227
  let sc = c[2]._mc.myPublicMC1; // 3rd level DIV micro component
226
- console.info("sc", sc);
228
+ console.warn("sc = some div in the middle of the tree, level 3 of 5", sc);
227
229
 
228
230
  console.log("number of sc parents (expect 5)", sc.parents());
229
231
  console.log("number of sc parent (expect 2)", sc.parent());
@@ -242,4 +244,4 @@ console.log(
242
244
  );
243
245
  MC.debug = false;
244
246
  console.log("number of sc children (expect 10)", sc.children());
245
- console.log("number of sc descendants (expect 60)", sc.descendants());
247
+ console.log("number of sc descendants (expect 260)", sc.descendants());
package/dist/test.d.ts DELETED
@@ -1,36 +0,0 @@
1
- declare function getMicroComponents(elements: any, search: any): any[];
2
- declare function traverseNodes(node: any, search: any, firstonly?: boolean): any[];
3
- declare function isDOM(element: any): any;
4
- declare class MC {
5
- static add(target: any, key: any, element?: {}): {};
6
- static remove(target: any, key: any): void;
7
- static debug: boolean;
8
- static siblings(target: any, search?: string): any;
9
- constructor(target: any);
10
- constructor(target: any);
11
- get _mc(): {} | undefined;
12
- get target(): {};
13
- add(key: any, element: any, target: any): any;
14
- remove(key: any, target: any): void;
15
- siblings(search?: string): any[];
16
- parent(search?: string): any[];
17
- parents(search?: string): any[];
18
- children(search?: string): any[];
19
- descendants(search?: string): any[];
20
- #private;
21
- }
22
- declare let elements: HTMLDivElement[];
23
- declare class MyInnerMC extends MC {
24
- constructor(target: any);
25
- doSomething(): void;
26
- }
27
- declare class MyMC extends MC {
28
- constructor(target: any);
29
- doSomething(): void;
30
- #private;
31
- }
32
- declare const element: HTMLDivElement | null;
33
- declare let topLevelMC: {};
34
- declare let c: NodeListOf<Element>;
35
- declare let sc: any;
36
- //# sourceMappingURL=test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../src/test.js"],"names":[],"mappings":"AAAA,uEAeC;AACD,mFAcC;AACD,0CAEC;AACD;IA0BC,oDAaC;IACD,2CAcC;IAnDD,sBAAqB;IAYrB,mDAUC;IArBD,yBAGC;;IACD,0BAGC;IACD,iBAEC;IAyCD,8CAOC;IACD,oCAOC;IACD,iCAKC;IACD,+BAGC;IACD,gCAGC;IACD,iCASC;IACD,oCAIC;;CACD;AAKD,uCAA+D;AAS/D;IACC,yBAEC;IAED,oBAGC;CACD;AAGD;IAGC,yBAQC;IAED,oBAGC;;CACD;AAID,6CAA8C;AAG9C,2BAAiE;AAUjE,mCAA2C;AA8B3C,oBAA8B"}
package/dist/test.js DELETED
@@ -1,214 +0,0 @@
1
- "use strict";
2
- function getMicroComponents(elements, search) {
3
- let mcValues = [];
4
- elements.forEach((e) => {
5
- if (e) {
6
- if (e instanceof HTMLElement) {
7
- const _mc = e?._mc;
8
- if (!search && _mc) {
9
- mcValues = mcValues.concat(Object.values(e._mc));
10
- }
11
- else if (search && _mc && _mc[search]) {
12
- mcValues.push(_mc[search]);
13
- }
14
- }
15
- }
16
- });
17
- return mcValues;
18
- }
19
- function traverseNodes(node, search, firstonly = true) {
20
- let mcValues = [];
21
- while (node) {
22
- if (node._mc) {
23
- if (!search) {
24
- mcValues = mcValues.concat(Object.values(node._mc));
25
- }
26
- else if (search && node._mc[search]) {
27
- mcValues.push(node._mc[search]);
28
- }
29
- if (firstonly)
30
- return mcValues;
31
- }
32
- node = node.parentNode;
33
- }
34
- return mcValues;
35
- }
36
- function isDOM(element) {
37
- return element && element instanceof HTMLElement;
38
- }
39
- class MC {
40
- #target = {};
41
- #_mc = {};
42
- static debug = false;
43
- constructor(target) {
44
- this.#target = target;
45
- this.#_mc = {};
46
- }
47
- get _mc() {
48
- if (!MC.debug)
49
- return undefined;
50
- return this.#_mc;
51
- }
52
- get target() {
53
- return this.#target;
54
- }
55
- static siblings(target, search = "") {
56
- const mc = target;
57
- if (!mc._mc) {
58
- return [];
59
- }
60
- const _mc = mc._mc;
61
- if (search.length) {
62
- return _mc?.[search] || [];
63
- }
64
- return [...Object.values(_mc)];
65
- }
66
- static add(target, key, element = {}) {
67
- let node = target;
68
- if (!node._mc) {
69
- node._mc = new MC(target);
70
- }
71
- const _mc = node._mc;
72
- if (key.length && !_mc[key]) {
73
- _mc[key] = element;
74
- if (target instanceof HTMLElement) {
75
- target.setAttribute("_mc", "");
76
- }
77
- }
78
- return element;
79
- }
80
- static remove(target, key) {
81
- if (!key)
82
- return;
83
- const _mc = target?._mc || {};
84
- if (_mc && _mc[key]) {
85
- delete _mc[key];
86
- }
87
- if (!Object.keys(_mc).length &&
88
- target instanceof HTMLElement &&
89
- target.hasAttribute("_mc")) {
90
- target.removeAttribute("_mc");
91
- }
92
- return;
93
- }
94
- add(key, element, target) {
95
- if (this.#_mc[key])
96
- return;
97
- if (target) {
98
- MC.add(target, key, element);
99
- }
100
- this.#_mc[key] = element;
101
- return element;
102
- }
103
- remove(key, target) {
104
- const _mc = this.#_mc;
105
- const t = target;
106
- if (target) {
107
- MC.remove(t, key);
108
- }
109
- delete _mc?.[key];
110
- }
111
- siblings(search = "") {
112
- const _mc = this.#_mc;
113
- if (!_mc)
114
- return [];
115
- const result = _mc[search || ""];
116
- return search && result ? [result] : [...Object.values(_mc)];
117
- }
118
- parent(search = "") {
119
- if (!isDOM(this.#target))
120
- return [];
121
- return traverseNodes(this.#target.parentNode, search, true);
122
- }
123
- parents(search = "") {
124
- if (!isDOM(this.#target))
125
- return [];
126
- return traverseNodes(this.#target.parentNode, search, false);
127
- }
128
- children(search = "") {
129
- if (!isDOM(this.#target))
130
- return [];
131
- const id = Math.random().toString().replace(".", "");
132
- const selector = '[_mc]:not([temp_id="' + id + '"] [_mc] [_mc])';
133
- this.#target.setAttribute("temp_id", id);
134
- const myDomElements = this.#target.querySelectorAll(selector);
135
- const mcValues = getMicroComponents([...myDomElements], search);
136
- this.#target.removeAttribute("temp-id");
137
- return mcValues;
138
- }
139
- descendants(search = "") {
140
- if (!isDOM(this.#target))
141
- return [];
142
- const myDomElements = this.#target.querySelectorAll("*[_mc]");
143
- return getMicroComponents([...myDomElements], search);
144
- }
145
- }
146
- // create test page
147
- document.body.innerHTML = `<div class="level_1"><span><div class="level_2"><span><div class="level_3"><span><div class="level_4"><span><div class="level_5"></div></span></div></span></div></span></div></span></div>`;
148
- let elements = [...document.querySelectorAll("div")].reverse();
149
- elements.forEach((e) => (e.innerHTML = e.innerHTML.repeat(5)));
150
- document.body.innerHTML = document.body.innerHTML.repeat(5);
151
- document.body.innerHTML =
152
- document.body.innerHTML +
153
- "<span>F12 opens the debugger, console has some manual tests...</span>";
154
- // create an inner micro component class
155
- class MyInnerMC extends MC {
156
- constructor(target) {
157
- super(target);
158
- }
159
- doSomething() {
160
- console.log(this, " myInnerMC something done");
161
- console.log(this.siblings());
162
- }
163
- }
164
- // create a custom micro component class
165
- class MyMC extends MC {
166
- #myInner;
167
- constructor(target) {
168
- super(target);
169
- //add a micro component
170
- this.add("myInnerMC", new MyInnerMC(target));
171
- // add a private MC
172
- this.#myInner = new MyInnerMC(target);
173
- }
174
- doSomething() {
175
- console.log(this, "myMC something done");
176
- this.#myInner.doSomething();
177
- }
178
- }
179
- console.time("MC creation time");
180
- // get some element from the DOM
181
- const element = document.querySelector("div");
182
- // Add the custom micro component instance to the target element
183
- let topLevelMC = MC.add(element, "myFirstMC", new MyMC(element));
184
- // Add the custom micro component instance to every div
185
- document.querySelectorAll("div").forEach((e) => {
186
- MC.add(e, "myPublicMC1", new MyMC(e));
187
- MC.add(e, "myPublicMC2", new MyMC(e));
188
- });
189
- console.timeEnd("MC creation time");
190
- let c = document.querySelectorAll("[_mc]");
191
- console.info("number of DOM nodes:", document.querySelectorAll("*").length, "\nnumber of DOM nodes containing micro components:", c.length, "\nnumber of top level micro components:", c.length * 2 + 1, // TODO write reducer
192
- "\nnumber of top level & inner micro components:", c.length * 3 + 2 // TODO write reducer
193
- );
194
- console.log("ROOT element", element);
195
- console.log("-> ._mc", element._mc);
196
- console.log("-> _mc.myMC", element._mc.myMC);
197
- console.log("-> _mc.myFirstMC._mc (MC.debug = false)", element._mc.myFirstMC._mc);
198
- MC.debug = true;
199
- console.log("-> _mc.myFirstMC._mc (MC.debug = true)", element._mc.myFirstMC._mc);
200
- MC.debug = false;
201
- /*
202
- test selectors
203
- */
204
- let sc = c[2]._mc.myPublicMC1; // 3rd level DIV micro component
205
- console.info("sc", sc);
206
- console.log("number of sc parents (expect 5)", sc.parents());
207
- console.log("number of sc parent (expect 2)", sc.parent());
208
- console.log("sc PUBLIC siblings (expect 2)", sc.target.className, Object.keys(sc.target._mc), sc.target._mc);
209
- console.log("sc PRIVATE siblings (MC.debug = false, expect undefined)", sc._mc);
210
- MC.debug = true;
211
- console.log("sc PRIVATE siblings (MC.debug = true, expect 1)", Object.keys(sc._mc).length, sc._mc);
212
- MC.debug = false;
213
- console.log("number of sc children (expect 10)", sc.children());
214
- console.log("number of sc descendants (expect 60)", sc.descendants());