@twobirds/microcomponents 0.0.12 → 0.0.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +28 -44
- package/assets/documentation/ajaxian-1.png +0 -0
- package/assets/documentation/ajaxian-2.png +0 -0
- package/assets/documentation/ajaxian-3.png +0 -0
- package/assets/documentation/history.md +436 -0
- package/assets/documentation/how_tos.md +0 -0
- package/assets/documentation/introduction.md +0 -0
- package/{microcomponents_magic.md → assets/documentation/magic.md} +1 -1
- package/assets/documentation/rnd0023-1.jpg +0 -0
- package/assets/documentation/rnd0023-2.jpg +0 -0
- package/assets/documentation/rnd0023-3.jpg +0 -0
- package/assets/documentation/tB_react.md +204 -0
- package/package.json +2 -2
- package/public/documentation/ajaxian-1.png +0 -0
- package/public/documentation/ajaxian-2.png +0 -0
- package/public/documentation/ajaxian-3.png +0 -0
- package/public/documentation/functional_requirements.md +8 -0
- package/public/documentation/history.md +436 -0
- package/public/documentation/how_tos.md +0 -0
- package/public/documentation/introduction.md +0 -0
- package/public/documentation/magic.md +87 -0
- package/public/documentation/proposal_draft.md +37 -0
- package/public/documentation/rnd0023-1.jpg +0 -0
- package/public/documentation/rnd0023-2.jpg +0 -0
- package/public/documentation/rnd0023-3.jpg +0 -0
- package/public/documentation/tB_react.md +233 -0
- package/public/documentation/usage.md +142 -0
- package/public/documentation/why.md +25 -0
- package/public/test.js +20 -18
- package/src/test.js +22 -20
- package/dist/test.d.ts +0 -36
- package/dist/test.d.ts.map +0 -1
- package/dist/test.js +0 -214
- /package/{microcomponents_functional_requirements.md → assets/documentation/functional_requirements.md} +0 -0
- /package/{MicroComponentProposal_draft.md → assets/documentation/proposal_draft.md} +0 -0
- /package/{microcomponents_usage.md → assets/documentation/usage.md} +0 -0
- /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
|
-
|
|
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
|
-
|
|
146
|
-
|
|
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
|
|
184
|
+
const domElement = document.querySelector("div");
|
|
183
185
|
|
|
184
186
|
// Add the custom micro component instance to the target element
|
|
185
|
-
|
|
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 *
|
|
206
|
+
c.length * 6 + 2 // TODO write reducer
|
|
205
207
|
);
|
|
206
208
|
|
|
207
|
-
console.
|
|
208
|
-
console.log("
|
|
209
|
-
console.log("
|
|
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
|
-
"
|
|
212
|
-
|
|
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
|
-
"
|
|
217
|
-
|
|
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.
|
|
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
|
|
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
|
package/dist/test.d.ts.map
DELETED
|
@@ -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());
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|