@twobirds/microcomponents 0.0.27 → 0.0.28

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/public/test.html CHANGED
@@ -7,7 +7,6 @@
7
7
  <link rel="icon" type="image/svg+xml" sizes="any" href="MicroComponents.svg" />
8
8
  <link href="./my-tag.css" rel="stylesheet" />
9
9
  <script type="module" src="./test.js"></script>
10
- <script src="./customSelectors.min.js"></script>
11
10
  </head>
12
11
  <body>
13
12
  Open the debugger, read console, then:&nbsp;
package/public/test.js CHANGED
@@ -1,7 +1,8 @@
1
1
  "use strict";
2
- import { MC, DC } from "./MC.js";
3
- import { defineCE, getCE } from "./customElements.js";
4
- import { makeCO } from "./customObservables.js";
2
+ import { MC, DC, defineCE, getCE, makeCO } from "./microcomponents.js";
3
+ //import { MC, DC, McEvent } from "./MC.js";
4
+ //import { defineCE, getCE } from "./customElements.js";
5
+ //import { makeCO } from "./customObservables.js";
5
6
  //MC.debug = true;
6
7
  class Adder {
7
8
  constructor() { }
@@ -9,6 +10,15 @@ class Adder {
9
10
  return numbers.reduce((acc, curr) => acc + curr, 0);
10
11
  }
11
12
  }
13
+ class DeeplyNestedEvTarget extends MC {
14
+ constructor(target) {
15
+ super(target);
16
+ }
17
+ oneInit(ev) {
18
+ let logger = this.target?.target?.target?._mc?.logger;
19
+ logger?.warn("DeeplyNestedEvTarget .oneInit(ev)", ev);
20
+ }
21
+ }
12
22
  class EvTarget extends MC {
13
23
  constructor(target) {
14
24
  super(target);
@@ -18,8 +28,9 @@ class EvTarget extends MC {
18
28
  logger?.log("onCustomEvent", ev);
19
29
  }
20
30
  oneInit(ev) {
21
- let logger = this.target?.target?._mc?.logger;
31
+ let that = this, _mc = that._mc, logger = this.target?.target?._mc?.logger;
22
32
  logger?.warn("EvTarget .oneInit(ev)", ev);
33
+ _mc.deeplyNestedEvTarget = new DeeplyNestedEvTarget(that);
23
34
  }
24
35
  }
25
36
  class Logger extends DC {
@@ -1 +1 @@
1
- {"version":3,"file":"test.js","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":"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"}
package/src/MC.ts CHANGED
@@ -137,22 +137,94 @@ function trigger( target: unknown, ev: McEvent | string, data: any = {}) {
137
137
  return;
138
138
  }
139
139
 
140
+ // run the "init" lifecycle event on the completemcr structure
141
+ function init( element: MC | DC ){
142
+ let isDomMcInstance = element.constructor === DC;
143
+
144
+ setTimeout(
145
+ () => {
146
+ element.trigger('Init');
147
+ if ( !isDomMcInstance ) {
148
+ setTimeout(
149
+ () => {
150
+ let keys = Object.keys( element?._mc );
151
+ if ( keys.length ){
152
+ //console.log( 'inner Inits on [', mc.constructor.name, ']', keys );
153
+ keys?.forEach( (key: string) => {
154
+ let mc = element?._mc?.[key];
155
+ //console.log( key, typeof mc?.oneInit, mc );
156
+ if ( ( mc as any )['oneInit'] && typeof ( mc as any ).oneInit == 'function' ){
157
+ ( mc as any ).oneInit( new McEvent('Init') );
158
+ }
159
+ });
160
+ };
161
+ }
162
+ , 0
163
+ );
164
+ }
165
+ }
166
+ , 0
167
+ );
168
+
169
+ }
170
+
171
+ function autoAttachListeners( element: MC | DC ){
172
+ if ( !isBrowser() || element.constructor === DC ) return;
173
+
174
+ const target = element.target;
175
+
176
+ if ( target instanceof HTMLElement ){
177
+ let that: LooseObject = element;
178
+ Object
179
+ .getOwnPropertyNames( that.constructor.prototype )
180
+ .filter( key => /^on[A-Z]|one[A-Z]/.test(key) && typeof that.constructor.prototype[key] === 'function' )
181
+ .forEach( key => {
182
+ let
183
+ once = /^one/.test(key),
184
+ withoutOnOne = key.replace( /^on[e]{0,1}/, '' ), // preserves upper/lowercase for non-native events
185
+ nativeEventName = withoutOnOne.toLowerCase(),
186
+ listener = ( ev: McEvent | Event | CustomEvent ) => { that.trigger( withoutOnOne, ev ); };
187
+ ;
188
+
189
+ if ( once ){
190
+ // console.log( '...is only called once', that.constructor.prototype[key] );
191
+ Object.defineProperty(
192
+ element,
193
+ 'on' + withoutOnOne,
194
+ {
195
+ configurable: true,
196
+ enumerable: false,
197
+ writable: true,
198
+ value: (ev: any) => {
199
+ // console.log( 'onceHandler execute:', that.constructor.prototype[key] );
200
+ ( that.constructor.prototype[key] ).bind(that)(ev);
201
+ }
202
+ }
203
+ );
204
+ }
205
+
206
+ if ( nativeEventNames.has( 'on' + nativeEventName ) ){ // native event defined in HTMLElement
207
+ // console.log('added as native listener', target, nativeEventName );
208
+ addListener( target, nativeEventName, listener, false, once );
209
+ }
210
+ });
211
+ }
212
+ }
213
+
140
214
  class McBase {
141
215
 
142
216
  #target: WeakRef<any>; // avoid circular reference
143
217
 
144
- #_mc: { [key:string]: any } = {};
145
-
146
218
  constructor( target: { [key:string]: any } ) {
147
- let that = this;
219
+ let that: unknown = this,
220
+ element = (that as MC | DC );
148
221
 
149
222
  this.#target = new WeakRef( target );
150
223
 
151
- if ( this.constructor !== DC){
152
- Object.defineProperty( this, "_mc", {
153
- get(){ return this.#_mc }
154
- });
155
- };
224
+
225
+ init( element ); // async lifecycle event
226
+
227
+ autoAttachListeners( element );
156
228
  }
157
229
 
158
230
  get target(): any {
@@ -163,34 +235,10 @@ class McBase {
163
235
 
164
236
  class MC extends McBase {
165
237
 
238
+ _mc: { [key:string]: any } = {};
239
+
166
240
  constructor(target: any) {
167
241
  super(target);
168
- let that = this;
169
-
170
- setTimeout(
171
- () => {
172
- that.trigger('Init');
173
- setTimeout(
174
- () => {
175
- let keys = Object.keys( (that as any)?._mc );
176
- if ( keys.length ){
177
- //console.log( 'inner Inits on [', that.constructor.name, ']', keys );
178
- keys?.forEach( (key: string) => {
179
- let mc = (that as any)?._mc?.[key];
180
- //console.log( key, typeof mc?.oneInit, mc );
181
- if ( mc?.oneInit && typeof mc?.oneInit == 'function' ){
182
- mc.oneInit( new McEvent('Init') );
183
- }
184
- });
185
- };
186
- }
187
- , 0
188
- );
189
- }
190
- ,0
191
- );
192
-
193
- this.autoAttachListeners();
194
242
  }
195
243
 
196
244
  static trigger = trigger;
@@ -276,85 +324,14 @@ class MC extends McBase {
276
324
 
277
325
  }
278
326
 
279
- autoAttachListeners(){
280
- if ( !isBrowser() ) return;
281
-
282
- const target = this.target;
283
-
284
- if ( target instanceof HTMLElement ){
285
- let that: LooseObject = this;
286
- Object
287
- .getOwnPropertyNames( that.constructor.prototype )
288
- .filter( key => /^on[A-Z]|one[A-Z]/.test(key) && typeof that.constructor.prototype[key] === 'function' )
289
- .forEach( key => {
290
- let
291
- once = /^one/.test(key),
292
- withoutOnOne = key.replace( /^on[e]{0,1}/, '' ), // preserves upper/lowercase for non-native events
293
- nativeEventName = withoutOnOne.toLowerCase(),
294
- listener = ( ev: McEvent | Event | CustomEvent ) => { that.trigger( withoutOnOne, ev ); };
295
- ;
296
-
297
- if ( once ){
298
- // console.log( '...is only called once', that.constructor.prototype[key] );
299
- Object.defineProperty(
300
- this,
301
- 'on' + withoutOnOne,
302
- {
303
- configurable: true,
304
- enumerable: false,
305
- writable: true,
306
- value: (ev: any) => {
307
- // console.log( 'onceHandler execute:', that.constructor.prototype[key] );
308
- ( that.constructor.prototype[key] ).bind(that)(ev);
309
- }
310
- }
311
- );
312
- }
313
-
314
- if ( nativeEventNames.has( 'on' + nativeEventName ) ){ // native event defined in HTMLElement
315
- // console.log('added as native listener', target, nativeEventName );
316
- addListener( target, nativeEventName, listener, false, once );
317
- }
318
- });
319
- }
320
- }
321
-
322
327
  };
323
328
 
324
329
  class DC extends McBase {
325
330
 
331
+ protected __mc: { [key:string]: any } = {};
332
+
326
333
  constructor(target: HTMLElement ) {
327
334
  super(target);
328
-
329
- let that = this,
330
- isDomMcInstance = that.constructor === DC;
331
-
332
- setTimeout(
333
- () => {
334
- that.trigger('Init');
335
- if ( !isDomMcInstance ) {
336
- setTimeout(
337
- () => {
338
- let keys = Object.keys( (that as any)?._mc );
339
- if ( keys.length ){
340
- //console.log( 'inner Inits on [', that.constructor.name, ']', keys );
341
- keys?.forEach( (key: string) => {
342
- let mc = (that as any)?._mc?.[key];
343
- //console.log( key, typeof mc?.oneInit, mc );
344
- if ( mc?.oneInit && typeof mc?.oneInit == 'function' ){
345
- mc.oneInit( new McEvent('Init') );
346
- }
347
- });
348
- };
349
- }
350
- , 0
351
- );
352
- }
353
- }
354
- , 0
355
- );
356
-
357
- this.autoAttachListeners();
358
335
  }
359
336
 
360
337
  static debug: boolean = false;
@@ -364,17 +341,13 @@ class DC extends McBase {
364
341
  static trigger: Function = trigger;
365
342
 
366
343
  get _mc(): { [key:string]: any } {
367
- return this._mc;
344
+ return this.__mc;
368
345
  }
369
346
 
370
347
  trigger( ev: McEvent | string, data: any = {}, bubble?: string ) {
371
348
  MC.prototype.trigger.call( this, ev, data, bubble );
372
349
  };
373
350
 
374
- autoAttachListeners() {
375
- MC.prototype.autoAttachListeners.call( this );
376
- };
377
-
378
351
  parent(search: string = ''): any[] {
379
352
  let target: HTMLElement = (this as any).target;
380
353
  if (!isDOM(target)) return [];
package/src/test.ts CHANGED
@@ -1,8 +1,9 @@
1
1
  "use strict";
2
2
 
3
- import { MC, DC, McEvent } from "./MC.js";
4
- import { defineCE, getCE } from "./customElements.js";
5
- import { makeCO } from "./customObservables.js";
3
+ import { MC, DC, McEvent, defineCE, getCE, makeCO } from "./microcomponents.js";
4
+ //import { MC, DC, McEvent } from "./MC.js";
5
+ //import { defineCE, getCE } from "./customElements.js";
6
+ //import { makeCO } from "./customObservables.js";
6
7
 
7
8
  //MC.debug = true;
8
9
 
@@ -14,6 +15,17 @@ class Adder {
14
15
  }
15
16
  }
16
17
 
18
+ class DeeplyNestedEvTarget extends MC {
19
+ constructor(target: any) {
20
+ super(target);
21
+ }
22
+
23
+ oneInit(ev: McEvent) {
24
+ let logger = this.target?.target?.target?._mc?.logger;
25
+ logger?.warn("DeeplyNestedEvTarget .oneInit(ev)", ev);
26
+ }
27
+ }
28
+
17
29
  class EvTarget extends MC {
18
30
  constructor(target: any) {
19
31
  super(target);
@@ -25,8 +37,13 @@ class EvTarget extends MC {
25
37
  }
26
38
 
27
39
  oneInit(ev: McEvent) {
28
- let logger = this.target?.target?._mc?.logger;
40
+ let that = this,
41
+ _mc = that._mc!,
42
+ logger = this.target?.target?._mc?.logger;
43
+
29
44
  logger?.warn("EvTarget .oneInit(ev)", ev);
45
+
46
+ _mc.deeplyNestedEvTarget = new DeeplyNestedEvTarget( that );
30
47
  }
31
48
  }
32
49