@twobirds/microcomponents 0.0.82 → 0.0.83
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/assets/documentation/MC.md +0 -1
- package/dist/MC.d.ts +3 -3
- package/dist/MC.d.ts.map +1 -1
- package/dist/MC.js +43 -74
- package/dist/MC.min.js +43 -74
- package/dist/MC.ts +67 -143
- package/dist/elements.d.ts +1 -1
- package/dist/elements.d.ts.map +1 -1
- package/dist/elements.js +16 -2
- package/dist/elements.min.js +1 -1
- package/dist/elements.ts +33 -3
- package/dist/formValues.min.js +1 -1
- package/dist/microcomponents.min.js +1 -1
- package/dist/observables.d.ts.map +1 -1
- package/dist/observables.js +40 -47
- package/dist/observables.min.js +1 -1
- package/dist/observables.ts +54 -59
- package/dist/selectors.d.ts +2 -4
- package/dist/selectors.d.ts.map +1 -1
- package/dist/selectors.js +2 -214
- package/dist/selectors.min.js +1 -1
- package/dist/selectors.ts +2 -367
- package/package.json +6 -5
- package/public/MC.d.ts +3 -3
- package/public/MC.d.ts.map +1 -1
- package/public/MC.js +43 -74
- package/public/MC.js.map +1 -1
- package/public/MC.min.js +43 -74
- package/public/MC.ts +67 -143
- package/public/documentation/MC.md +0 -1
- package/public/elements.d.ts +1 -1
- package/public/elements.d.ts.map +1 -1
- package/public/elements.js +16 -2
- package/public/elements.js.map +1 -1
- package/public/elements.min.js +1 -1
- package/public/elements.ts +33 -3
- package/public/formValues.min.js +1 -1
- package/public/microcomponents.min.js +1 -1
- package/public/observables.d.ts.map +1 -1
- package/public/observables.js +40 -47
- package/public/observables.js.map +1 -1
- package/public/observables.min.js +1 -1
- package/public/observables.ts +54 -59
- package/public/selectors.d.ts +2 -4
- package/public/selectors.d.ts.map +1 -1
- package/public/selectors.js +2 -214
- package/public/selectors.js.map +1 -1
- package/public/selectors.min.js +1 -1
- package/public/selectors.ts +2 -367
- package/public/src/MC.d.ts +36 -0
- package/public/src/MC.d.ts.map +1 -0
- package/public/src/MC.js +348 -0
- package/public/src/MC.js.map +1 -0
- package/public/src/MC.ts +67 -143
- package/public/src/McEvent.d.ts +15 -0
- package/public/src/McEvent.d.ts.map +1 -0
- package/public/src/McEvent.js +71 -0
- package/public/src/elements.d.ts +5 -0
- package/public/src/elements.d.ts.map +1 -0
- package/public/src/elements.js +62 -0
- package/public/src/elements.js.map +1 -0
- package/public/src/elements.ts +33 -3
- package/public/src/formValues.d.ts +3 -0
- package/public/src/formValues.d.ts.map +1 -0
- package/public/src/formValues.js +162 -0
- package/public/src/helpers.d.ts +14 -0
- package/public/src/helpers.d.ts.map +1 -0
- package/public/src/helpers.js +113 -0
- package/public/src/microcomponents.d.ts +7 -0
- package/public/src/microcomponents.d.ts.map +1 -0
- package/public/src/microcomponents.js +8 -0
- package/public/src/observables.d.ts +11 -0
- package/public/src/observables.d.ts.map +1 -0
- package/public/src/observables.js +242 -0
- package/public/src/observables.js.map +1 -0
- package/public/src/observables.ts +54 -59
- package/public/src/selectors.d.ts +106 -0
- package/public/src/selectors.d.ts.map +1 -0
- package/public/src/selectors.js +759 -0
- package/public/src/selectors.js.map +1 -0
- package/public/src/selectors.ts +2 -367
- package/public/src/test/grandparent.css +11 -0
- package/public/src/test/test/child.d.ts +2 -0
- package/public/src/test/test/child.d.ts.map +1 -0
- package/public/src/test/test/child.js +15 -0
- package/public/src/test/test/child.js.map +1 -0
- package/public/src/test/test/child.ts +21 -0
- package/public/src/test/test/grandchild.d.ts +2 -0
- package/public/src/test/test/grandchild.d.ts.map +1 -0
- package/public/src/test/test/grandchild.js +15 -0
- package/public/src/test/test/grandchild.js.map +1 -0
- package/public/src/test/test/grandchild.ts +21 -0
- package/public/src/test/test/grandparent.d.ts +2 -0
- package/public/src/test/test/grandparent.d.ts.map +1 -0
- package/public/src/test/test/grandparent.js +1 -0
- package/public/src/test/test/grandparent.js.map +1 -0
- package/public/src/test/test/grandparent.ts +21 -0
- package/public/src/test/test/greatgrandchild.d.ts +2 -0
- package/public/src/test/test/greatgrandchild.d.ts.map +1 -0
- package/public/src/test/test/greatgrandchild.js +29 -0
- package/public/src/test/test/greatgrandchild.js.map +1 -0
- package/public/src/test/test/greatgrandchild.ts +42 -0
- package/public/src/test/test/parent.d.ts +2 -0
- package/public/src/test/test/parent.d.ts.map +1 -0
- package/public/src/test/test/parent.js +15 -0
- package/public/src/test/test/parent.js.map +1 -0
- package/public/src/test/test/parent.ts +21 -0
- package/public/src/test/test/testform.d.ts +2 -0
- package/public/src/test/test/testform.d.ts.map +1 -0
- package/public/src/test/test/testform.js +1 -0
- package/public/src/test/test/testform.js.map +1 -0
- package/public/src/test/test/testform.ts +155 -0
- package/public/src/test/test/testfunction.d.ts +3 -0
- package/public/src/test/test/testfunction.d.ts.map +1 -0
- package/public/src/test/test/testfunction.js +7 -0
- package/public/src/test/test/testfunction.js.map +1 -0
- package/public/src/test/test/testfunction.ts +12 -0
- package/public/src/test/test/testmc.d.ts +3 -0
- package/public/src/test/test/testmc.d.ts.map +1 -0
- package/public/src/test/test/testmc.js +10 -0
- package/public/src/test/test/testmc.js.map +1 -0
- package/public/src/test/test/testmc.ts +16 -0
- package/public/src/test/test/testsimpleclass.d.ts +3 -0
- package/public/src/test/test/testsimpleclass.d.ts.map +1 -0
- package/public/src/test/test/testsimpleclass.js +9 -0
- package/public/src/test/test/testsimpleclass.js.map +1 -0
- package/public/src/test/test/testsimpleclass.ts +15 -0
- package/public/src/test/test.d.ts +2 -0
- package/public/src/test/test.d.ts.map +1 -0
- package/public/src/test/test.js +79 -0
- package/public/src/test/test.js.map +1 -0
- package/public/src/test/test.ts +188 -0
- package/public/src/test/testform.css +47 -0
- package/public/src/test/testform.html +56 -0
- package/public/src/test/testform.json +27 -0
- package/public/test/MC.d.ts +3 -3
- package/public/test/MC.d.ts.map +1 -1
- package/public/test/MC.js +43 -74
- package/public/test/MC.min.js +485 -0
- package/public/test/MC.ts +67 -143
- package/public/test/elements.d.ts +1 -1
- package/public/test/elements.d.ts.map +1 -1
- package/public/test/elements.js +16 -2
- package/public/test/elements.min.js +1 -0
- package/public/test/elements.ts +33 -3
- package/public/test/formValues.min.js +1 -0
- package/public/test/grandparent.css +1 -3
- package/public/test/microcomponents.min.js +1 -1
- package/public/test/observables.d.ts.map +1 -1
- package/public/test/observables.js +40 -47
- package/public/test/observables.min.js +1 -0
- package/public/test/observables.ts +54 -59
- package/public/test/selectors.d.ts +2 -4
- package/public/test/selectors.d.ts.map +1 -1
- package/public/test/selectors.js +2 -214
- package/public/test/selectors.min.js +1 -0
- package/public/test/selectors.ts +2 -367
- package/public/test/test/child.ts +21 -0
- package/public/test/test/grandchild.ts +21 -0
- package/public/test/test/grandparent.js +1 -1
- package/public/test/test/grandparent.ts +21 -0
- package/public/test/test/greatgrandchild.ts +42 -0
- package/public/test/test/parent.ts +21 -0
- package/public/test/test/testform.js +1 -1
- package/public/test/test/testform.js.map +1 -1
- package/public/test/test/testform.ts +155 -0
- package/public/test/test/testfunction.d.ts +3 -0
- package/public/test/test/testfunction.d.ts.map +1 -0
- package/public/test/test/testfunction.js +7 -0
- package/public/test/test/testfunction.js.map +1 -0
- package/public/test/test/testfunction.ts +12 -0
- package/public/test/test/testmc.d.ts +2 -5
- package/public/test/test/testmc.d.ts.map +1 -1
- package/public/test/test/testmc.js +4 -4
- package/public/test/test/testmc.js.map +1 -1
- package/public/test/test/testmc.ts +16 -0
- package/public/test/test/testsimpleclass.d.ts +3 -0
- package/public/test/test/testsimpleclass.d.ts.map +1 -0
- package/public/test/test/testsimpleclass.js +9 -0
- package/public/test/test/testsimpleclass.js.map +1 -0
- package/public/test/test/testsimpleclass.ts +15 -0
- package/public/test/test.js +0 -2
- package/public/test/test.js.map +1 -1
- package/public/test/test.ts +188 -0
- package/public/test/testform.css +47 -0
- package/public/test/testform.html +56 -0
- package/public/test/testform.json +3 -3
- package/public/typedoc/assets/navigation.js +1 -1
- package/public/typedoc/assets/search.js +1 -1
- package/public/typedoc/classes/MC.DC.html +5 -5
- package/public/typedoc/classes/MC.MC.html +5 -5
- package/public/typedoc/classes/MC.McBase.html +4 -3
- package/public/typedoc/classes/MC.McEvent.html +2 -2
- package/public/typedoc/functions/MC.addListener.html +1 -1
- package/public/typedoc/functions/MC.autoload.html +1 -1
- package/public/typedoc/functions/MC.removeListener.html +1 -1
- package/public/typedoc/functions/elements.defineCE.html +1 -1
- package/public/typedoc/functions/elements.getCE.html +1 -1
- package/public/typedoc/functions/formValues.formValues.html +1 -1
- package/public/typedoc/functions/observables.observe.html +1 -1
- package/public/typedoc/functions/selectors._d.html +1 -0
- package/public/typedoc/functions/selectors._t.html +1 -0
- package/public/typedoc/interfaces/MC.HTMLMcElement.html +2 -2
- package/public/typedoc/interfaces/selectors.DSelector.html +48 -0
- package/public/typedoc/interfaces/selectors.TSelector.html +34 -0
- package/public/typedoc/modules/MC.html +1 -1
- package/public/typedoc/modules/elements.html +1 -1
- package/public/typedoc/modules/formValues.html +1 -1
- package/public/typedoc/modules/observables.html +1 -1
- package/public/typedoc/modules/selectors.html +7 -0
- package/public/typedoc/modules.html +1 -0
- package/public/typedoc/types/observables.Observable.html +1 -1
- package/public/typedoc/types/selectors.selection.html +1 -0
- package/public/typedoc/types/selectors.singleSelector.html +1 -0
- package/src/MC.ts +67 -143
- package/src/elements.ts +33 -3
- package/src/observables.ts +54 -59
- package/src/selectors.ts +2 -367
- package/src/test/test/testform.ts +7 -3
- package/src/test/test/testfunction.ts +12 -0
- package/src/test/test/testmc.ts +13 -9
- package/src/test/test/testsimpleclass.ts +15 -0
- package/src/test/test.ts +0 -12
- package/tasks.md +36 -0
- package/typedoc.json +1 -1
- package/public/test/MC.js.map +0 -1
- package/public/test/elements.js.map +0 -1
- package/public/test/observables.js.map +0 -1
- package/public/test/selectors.js.map +0 -1
- /package/public/{test → src}/McEvent.js.map +0 -0
- /package/public/{test → src}/formValues.js.map +0 -0
- /package/public/{test → src}/helpers.js.map +0 -0
- /package/public/{test → src}/microcomponents.js.map +0 -0
package/dist/selectors.ts
CHANGED
|
@@ -29,249 +29,6 @@ const words = ( classes: Array<string> ): Array<string> => {
|
|
|
29
29
|
return classes;
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
type inputTypes = HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;
|
|
33
|
-
|
|
34
|
-
const getInputName = ( e: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement ): string => {
|
|
35
|
-
|
|
36
|
-
let ret = e instanceof HTMLInputElement
|
|
37
|
-
? 'input'
|
|
38
|
-
: e instanceof HTMLSelectElement
|
|
39
|
-
? 'select'
|
|
40
|
-
: e instanceof HTMLTextAreaElement
|
|
41
|
-
? 'textarea'
|
|
42
|
-
: ''
|
|
43
|
-
;
|
|
44
|
-
|
|
45
|
-
return ret;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
const getInputHandlers = ( e: HTMLElement | ShadowRoot ): LooseObject => {
|
|
50
|
-
|
|
51
|
-
let
|
|
52
|
-
//inputList = ( Array.from( e.querySelectorAll('*') ) as HTMLElement[] ).filter( i => isInputElement(i) ),
|
|
53
|
-
inputList = $d('input,select,textarea', e).array,
|
|
54
|
-
handlers: LooseObject = {};
|
|
55
|
-
|
|
56
|
-
inputList.forEach( (i) => {
|
|
57
|
-
const
|
|
58
|
-
name: string = ( i as inputTypes ).getAttribute('name') || 'undefined';
|
|
59
|
-
|
|
60
|
-
if ( name ){
|
|
61
|
-
let h: InputBase;
|
|
62
|
-
switch ( getInputName( i as inputTypes ) ){
|
|
63
|
-
case 'input':
|
|
64
|
-
//console.log( i, 'is HTMLInputElement');
|
|
65
|
-
h = new InputHandler( i as HTMLInputElement, e ); // e = element to search radios in = radioBase
|
|
66
|
-
Object.defineProperty( handlers, name, {
|
|
67
|
-
enumerable: true,
|
|
68
|
-
configurable: true,
|
|
69
|
-
get: (): any => { return h.val },
|
|
70
|
-
set: ( value: any ) => { h.val = value }
|
|
71
|
-
});
|
|
72
|
-
break;
|
|
73
|
-
case 'select':
|
|
74
|
-
//console.log( i, 'is HTMLSelectElement');
|
|
75
|
-
h = new SelectHandler( i as HTMLSelectElement );
|
|
76
|
-
Object.defineProperty( handlers, name, {
|
|
77
|
-
enumerable: true,
|
|
78
|
-
configurable: true,
|
|
79
|
-
get: (): any => { return h.val },
|
|
80
|
-
set: ( value: any ) => { h.val = value }
|
|
81
|
-
});
|
|
82
|
-
break;
|
|
83
|
-
case 'textarea':
|
|
84
|
-
//console.log( i, 'is HTMLTextAreaElement');
|
|
85
|
-
h = new TextAreaHandler( i as HTMLTextAreaElement );
|
|
86
|
-
Object.defineProperty( handlers, name, {
|
|
87
|
-
enumerable: true,
|
|
88
|
-
configurable: true,
|
|
89
|
-
get: (): any => { return h.val },
|
|
90
|
-
set: ( value: any ) => { h.val = value }
|
|
91
|
-
});
|
|
92
|
-
break;
|
|
93
|
-
default:
|
|
94
|
-
console.warn('handler missing:', name, 'for', i);
|
|
95
|
-
break;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
});
|
|
99
|
-
|
|
100
|
-
return handlers;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
abstract class InputBase{
|
|
104
|
-
constructor( e: any ){
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
abstract get val(): any;
|
|
108
|
-
|
|
109
|
-
abstract set val( value: any );
|
|
110
|
-
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
class InputHandler extends InputBase {
|
|
114
|
-
|
|
115
|
-
#e: HTMLInputElement;
|
|
116
|
-
#type: string;
|
|
117
|
-
#radioBase: any;
|
|
118
|
-
|
|
119
|
-
constructor( e: HTMLInputElement, radioBase?: HTMLElement | ShadowRoot ){
|
|
120
|
-
super( e );
|
|
121
|
-
this.#e = e;
|
|
122
|
-
this.#type = e.type;
|
|
123
|
-
this.#radioBase = radioBase;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
get val(): any{
|
|
127
|
-
let that = this,
|
|
128
|
-
type = that.#type,
|
|
129
|
-
ret: any;
|
|
130
|
-
|
|
131
|
-
switch (type){
|
|
132
|
-
case 'radio':
|
|
133
|
-
const check = $d( `input[type="radio"][name="${ this.#e.getAttribute('name') }"]`, this.#radioBase )
|
|
134
|
-
.filter( e => e.checked );
|
|
135
|
-
if ( !check.length ) return '';
|
|
136
|
-
ret = check.array[0];
|
|
137
|
-
return ret.value;
|
|
138
|
-
case 'checkbox':
|
|
139
|
-
return that.#e.checked;
|
|
140
|
-
default:
|
|
141
|
-
return that.#e.value;
|
|
142
|
-
break;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
return '';
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
set val( value: any ){
|
|
149
|
-
let that = this,
|
|
150
|
-
type = that.#type,
|
|
151
|
-
ret: any;
|
|
152
|
-
|
|
153
|
-
switch (type){
|
|
154
|
-
case 'radio':
|
|
155
|
-
const
|
|
156
|
-
selection = `input[type="radio"][name="${ this.#e.getAttribute('name') }"]`,
|
|
157
|
-
radios = $d( selection, this.#radioBase );
|
|
158
|
-
|
|
159
|
-
// console.log('set radios', selection, this.#radioBase, radios.array );
|
|
160
|
-
|
|
161
|
-
if ( !radios.length ) return;
|
|
162
|
-
|
|
163
|
-
if ( value === '' ){ // uncheck all
|
|
164
|
-
radios.forEach( r => { if (r.checked) r.checked = false } );
|
|
165
|
-
//console.log('unset all radios', radios.array );
|
|
166
|
-
return;
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
const setRadioElement = radios.filter( r => r.getAttribute('value') === value );
|
|
170
|
-
|
|
171
|
-
if ( !setRadioElement.length ) return;
|
|
172
|
-
|
|
173
|
-
// console.log('set this radio', setRadioElement.array );
|
|
174
|
-
|
|
175
|
-
(setRadioElement.array[0] as HTMLInputElement).checked = true;
|
|
176
|
-
|
|
177
|
-
// console.log('done', setRadioElement.array );
|
|
178
|
-
return;
|
|
179
|
-
break;
|
|
180
|
-
case 'checkbox':
|
|
181
|
-
that.#e.checked = value;
|
|
182
|
-
break;
|
|
183
|
-
default:
|
|
184
|
-
that.#e.value = value;
|
|
185
|
-
break;
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
return;
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
class SelectHandler extends InputBase {
|
|
194
|
-
|
|
195
|
-
#e: HTMLSelectElement;
|
|
196
|
-
#multi: boolean = false;
|
|
197
|
-
|
|
198
|
-
constructor( e: HTMLSelectElement ){
|
|
199
|
-
super( e );
|
|
200
|
-
this.#e = e;
|
|
201
|
-
this.#multi = e.type === 'select-multiple';
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
get val(): string[] | string{
|
|
205
|
-
const
|
|
206
|
-
that = this,
|
|
207
|
-
ret: string[] = [];
|
|
208
|
-
|
|
209
|
-
// get all options
|
|
210
|
-
const options = $d( that.#e.querySelectorAll('option') )
|
|
211
|
-
.filter( o => o.selected )
|
|
212
|
-
.forEach( o => { if ( o.selected ) ret.push( o.value ) } );
|
|
213
|
-
|
|
214
|
-
if ( this.#multi ) return ret;
|
|
215
|
-
return ret.length ? ret[0] : '';
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
set val( value: string[] | string ){
|
|
219
|
-
const
|
|
220
|
-
that = this;
|
|
221
|
-
|
|
222
|
-
value = typeof value === 'string' ? [ value ] : value;
|
|
223
|
-
|
|
224
|
-
//console.log('set values', value );
|
|
225
|
-
|
|
226
|
-
// set all options
|
|
227
|
-
const options = $d( that.#e.querySelectorAll('option') )
|
|
228
|
-
.forEach( o => {
|
|
229
|
-
if ( value.indexOf( o.value ) > -1 ) {
|
|
230
|
-
o.setAttribute( 'selected', true )
|
|
231
|
-
o.selected = true;
|
|
232
|
-
} else {
|
|
233
|
-
o.removeAttribute( 'selected' )
|
|
234
|
-
o.selected = false;
|
|
235
|
-
}
|
|
236
|
-
});
|
|
237
|
-
|
|
238
|
-
/*
|
|
239
|
-
if (pOption.selected) {
|
|
240
|
-
if (
|
|
241
|
-
!pOption.disabled &&
|
|
242
|
-
(!pOption.parentNode.disabled ||
|
|
243
|
-
pOption.parentNode.nodeName !==
|
|
244
|
-
'optgroup')
|
|
245
|
-
) {
|
|
246
|
-
var value = pOption.value;
|
|
247
|
-
|
|
248
|
-
ret.push(value);
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
*/
|
|
252
|
-
return;
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
class TextAreaHandler extends InputBase {
|
|
258
|
-
#e: HTMLTextAreaElement
|
|
259
|
-
constructor( e: HTMLTextAreaElement ){
|
|
260
|
-
super(e);
|
|
261
|
-
this.#e = e;
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
get val(): string{
|
|
265
|
-
return this.#e.value;
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
set val( value: string ){
|
|
269
|
-
this.#e.value = value;
|
|
270
|
-
return;
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
}
|
|
274
|
-
|
|
275
32
|
/*
|
|
276
33
|
selector classes
|
|
277
34
|
*/
|
|
@@ -303,28 +60,9 @@ class DomSelector{
|
|
|
303
60
|
that = this,
|
|
304
61
|
undefinedTags: Set<any> = new Set();
|
|
305
62
|
|
|
306
|
-
// // console.log('DomSelector constructor', ...arguments);
|
|
307
|
-
|
|
308
63
|
if ( !selection ) {
|
|
309
64
|
return that;
|
|
310
65
|
}
|
|
311
|
-
|
|
312
|
-
/* autoloading disabled !
|
|
313
|
-
if ( selection instanceof Array ){
|
|
314
|
-
selection.forEach( (select) => {
|
|
315
|
-
_getElementList( select, element ).forEach( (e) => {
|
|
316
|
-
if ( e.localName?.indexOf('-') !== -1 || e.getAttribute?.('is') ) _loadRequirements( e );
|
|
317
|
-
that.#set.add( e );
|
|
318
|
-
});
|
|
319
|
-
});
|
|
320
|
-
} else {
|
|
321
|
-
_getElementList( selection, element ).forEach( (e) => {
|
|
322
|
-
if ( e.localName?.indexOf('-') !== -1 || e.getAttribute?.('is') ) _loadRequirements( e );
|
|
323
|
-
that.#set.add( e );
|
|
324
|
-
});
|
|
325
|
-
}
|
|
326
|
-
*/
|
|
327
|
-
|
|
328
66
|
}
|
|
329
67
|
|
|
330
68
|
$t( nameSpace?: string ): TSelector {
|
|
@@ -652,20 +390,6 @@ class DomSelector{
|
|
|
652
390
|
return that;
|
|
653
391
|
}
|
|
654
392
|
|
|
655
|
-
/*
|
|
656
|
-
load(): DSelector{
|
|
657
|
-
let that = this;
|
|
658
|
-
|
|
659
|
-
if( !that.length ){
|
|
660
|
-
that.add( document.body );
|
|
661
|
-
}
|
|
662
|
-
|
|
663
|
-
that.forEach( e => _loadRequirements( e ) );
|
|
664
|
-
|
|
665
|
-
return that;
|
|
666
|
-
}
|
|
667
|
-
*/
|
|
668
|
-
|
|
669
393
|
next( selection?: selection, rootNode?: HTMLElement ): DSelector{
|
|
670
394
|
let
|
|
671
395
|
that: DomSelector = this,
|
|
@@ -805,7 +529,7 @@ class DomSelector{
|
|
|
805
529
|
return that;
|
|
806
530
|
}
|
|
807
531
|
|
|
808
|
-
|
|
532
|
+
ancestors( selection?: selection, rootNode?: HTMLElement ): DSelector {
|
|
809
533
|
let
|
|
810
534
|
that: DomSelector = this,
|
|
811
535
|
set: Set<HTMLElement> = new Set()
|
|
@@ -948,95 +672,6 @@ class DomSelector{
|
|
|
948
672
|
return that;
|
|
949
673
|
}
|
|
950
674
|
|
|
951
|
-
// INFO:
|
|
952
|
-
// val(): LooseObject; // no param: get all as LooseObject
|
|
953
|
-
// val( p1: string ): Array<string> | number | string; // get from input name
|
|
954
|
-
// val( p1: object ): DomSelector; // set from object
|
|
955
|
-
// val( p1: string, p2: any ): DomSelector; // set from name and value
|
|
956
|
-
val( p1?: any, p2?: any ): any {
|
|
957
|
-
|
|
958
|
-
if ( !this.length ) return this;
|
|
959
|
-
|
|
960
|
-
const
|
|
961
|
-
that = this
|
|
962
|
-
;
|
|
963
|
-
|
|
964
|
-
let result: any,
|
|
965
|
-
handlers: LooseObject = getInputHandlers( that.array[0] );
|
|
966
|
-
|
|
967
|
-
// work with it
|
|
968
|
-
if ( !p1 ){ // get all inputs as LooseObject
|
|
969
|
-
result = Object.assign( {}, handlers );
|
|
970
|
-
// Object.keys( handlers ).forEach( ( key ) => result[key] = handlers.hasOwnProperty(key) ? handlers[key].val : undefined );
|
|
971
|
-
} else {
|
|
972
|
-
if ( isObject(p1) ){ // set inputs from Object
|
|
973
|
-
Object.assign( handlers, p1 );
|
|
974
|
-
// Object.keys( p1 ).forEach( ( key ) => !!handlers[key] ? handlers[key].val = p1[key] : false );
|
|
975
|
-
result = that;
|
|
976
|
-
} else if ( typeof p1 === 'string' ){
|
|
977
|
-
if ( p2 === undefined ){ // get a single input
|
|
978
|
-
result = handlers[p1];
|
|
979
|
-
} else { // set a single input
|
|
980
|
-
handlers[p1] = p2;
|
|
981
|
-
result = that;
|
|
982
|
-
}
|
|
983
|
-
}
|
|
984
|
-
}
|
|
985
|
-
|
|
986
|
-
return result;
|
|
987
|
-
}
|
|
988
|
-
|
|
989
|
-
values( values?: LooseObject ): LooseObject {
|
|
990
|
-
const
|
|
991
|
-
that = this,
|
|
992
|
-
holder: LooseObject = {};
|
|
993
|
-
|
|
994
|
-
let
|
|
995
|
-
data: LooseObject = {};
|
|
996
|
-
|
|
997
|
-
//console.log( '$d().values()', values );
|
|
998
|
-
|
|
999
|
-
if ( !that.length ) {
|
|
1000
|
-
console.warn('no dom selection to search inputs in');
|
|
1001
|
-
return {};
|
|
1002
|
-
}
|
|
1003
|
-
|
|
1004
|
-
let handlers = getInputHandlers( that.array[0] );
|
|
1005
|
-
|
|
1006
|
-
//console.log( 'handlers', Object.keys(handlers), handlers['cb1'] );
|
|
1007
|
-
|
|
1008
|
-
// let values = that.val();
|
|
1009
|
-
|
|
1010
|
-
// console.log( 'values', values );
|
|
1011
|
-
|
|
1012
|
-
Object.keys( handlers ).forEach( (key: string) => {
|
|
1013
|
-
//console.log(key);
|
|
1014
|
-
data[key] = handlers[key];
|
|
1015
|
-
});
|
|
1016
|
-
|
|
1017
|
-
// data = Object.assign( {}, that.val() )
|
|
1018
|
-
//console.log( 'data', that.array[0], data, Object.keys( data ) );
|
|
1019
|
-
|
|
1020
|
-
if ( Object.keys( data ).length === 0 ) {
|
|
1021
|
-
console.warn('no inputs in this dom selection', that.array[0], data );
|
|
1022
|
-
}
|
|
1023
|
-
|
|
1024
|
-
//console.log( '$d val()', data );
|
|
1025
|
-
if (values) {
|
|
1026
|
-
Object
|
|
1027
|
-
.keys( values )
|
|
1028
|
-
.forEach( key => {
|
|
1029
|
-
if ( handlers.hasOwnProperty(key) ) {
|
|
1030
|
-
console.log( 'key found', key );
|
|
1031
|
-
handlers[key] = values[key];
|
|
1032
|
-
}
|
|
1033
|
-
});
|
|
1034
|
-
// .forEach( key => handlers[key] = values[key] )
|
|
1035
|
-
}
|
|
1036
|
-
|
|
1037
|
-
return structuredClone( Object.assign( handlers ) );
|
|
1038
|
-
}
|
|
1039
|
-
|
|
1040
675
|
/*
|
|
1041
676
|
array method mapping
|
|
1042
677
|
*/
|
|
@@ -1434,7 +1069,7 @@ class TbSelector{
|
|
|
1434
1069
|
return that;
|
|
1435
1070
|
}
|
|
1436
1071
|
|
|
1437
|
-
|
|
1072
|
+
ancestors( nameSpace?: string ): TSelector {
|
|
1438
1073
|
|
|
1439
1074
|
let
|
|
1440
1075
|
that: TbSelector = this,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@twobirds/microcomponents",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.83",
|
|
4
4
|
"description": "Micro Components Organization Class",
|
|
5
5
|
"main": "./dist/microcomponents.ts",
|
|
6
6
|
"types": "./dist/microcomponents.d.ts",
|
|
@@ -9,10 +9,11 @@
|
|
|
9
9
|
"typedoc": "typedoc",
|
|
10
10
|
"webpack": "webpack",
|
|
11
11
|
"clean": "rm -rf build/*; rm -rf dist/*; rm -rf public/*;",
|
|
12
|
-
"prep": "cp src/* build || true; mkdir public || true;",
|
|
13
|
-
"
|
|
14
|
-
"
|
|
15
|
-
"
|
|
12
|
+
"prep": "cp -R src/* build || true; mkdir public || true; npm run typedoc;",
|
|
13
|
+
"copyToDist": "cp build/*.js dist; cp public/microcomponents.min.js public/test; cp -R build/*.ts* dist; cp *.svg dist;",
|
|
14
|
+
"copyToPublic1": "cp -R assets/* public || true; cp dist/*.* public; cp dist/*.* public/test; mkdir public/src || true; cp -R build/* public/src || true; cp -R build/* public || true;",
|
|
15
|
+
"copyToPublic2": "cp -R build/test/* public/test; cp dist/MicroComponents.svg public; cp public/MicroComponents.svg public/test;",
|
|
16
|
+
"build": "npm run clean; npm run prep; tsc; npm run webpack; npm run copyToDist; npm run copyToPublic1; npm run copyToPublic2;"
|
|
16
17
|
},
|
|
17
18
|
"author": "",
|
|
18
19
|
"license": "ISC",
|
package/public/MC.d.ts
CHANGED
|
@@ -7,20 +7,20 @@ declare function addListener(domNode: Node, eventName: string, handler: EventLis
|
|
|
7
7
|
declare function removeListener(domNode: Node, eventName: string, handler: EventListenerOrEventListenerObject | null): void;
|
|
8
8
|
declare function trigger(target: HTMLElement, ev: McEvent | string, data?: any, bubble?: string): void;
|
|
9
9
|
declare class McBase {
|
|
10
|
-
|
|
10
|
+
private _target;
|
|
11
|
+
private __mc;
|
|
11
12
|
constructor(target?: {
|
|
12
13
|
[key: string]: any;
|
|
13
14
|
}, debug?: boolean);
|
|
14
15
|
get target(): any;
|
|
16
|
+
get _mc(): any;
|
|
15
17
|
}
|
|
16
18
|
declare class MC extends McBase {
|
|
17
|
-
_mc?: LooseObject;
|
|
18
19
|
constructor(target?: any);
|
|
19
20
|
static trigger: typeof trigger;
|
|
20
21
|
trigger(ev: McEvent | string, data?: any, bubble?: string): this | undefined;
|
|
21
22
|
}
|
|
22
23
|
declare class DC extends McBase {
|
|
23
|
-
_mc?: LooseObject;
|
|
24
24
|
constructor(target: HTMLElement, debug?: boolean);
|
|
25
25
|
static add: Function;
|
|
26
26
|
static remove: Function;
|
package/public/MC.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MC.d.ts","sourceRoot":"","sources":["../src/MC.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAevC,MAAM,WAAW,aAAc,SAAQ,WAAW;IACjD,GAAG,EAAE,WAAW,CAAC;CACjB;AA8CD,iBAAS,WAAW,CACnB,OAAO,EAAE,IAAI,EACb,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,kCAAkC,GAAG,IAAI,EAClD,OAAO,GAAE,OAAe,EACxB,IAAI,GAAE,OAAe,QAarB;AAED,iBAAS,cAAc,CACtB,OAAO,EAAE,IAAI,EACb,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,kCAAkC,GAAG,IAAI,QAGlD;AAmDD,iBAAS,OAAO,CACf,MAAM,EAAE,WAAW,EACnB,EAAE,EAAE,OAAO,GAAG,MAAM,EACpB,IAAI,GAAE,GAAQ,EACd,MAAM,GAAE,MAAY,QAwBpB;AAiGD,cAAM,MAAM
|
|
1
|
+
{"version":3,"file":"MC.d.ts","sourceRoot":"","sources":["../src/MC.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAevC,MAAM,WAAW,aAAc,SAAQ,WAAW;IACjD,GAAG,EAAE,WAAW,CAAC;CACjB;AA8CD,iBAAS,WAAW,CACnB,OAAO,EAAE,IAAI,EACb,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,kCAAkC,GAAG,IAAI,EAClD,OAAO,GAAE,OAAe,EACxB,IAAI,GAAE,OAAe,QAarB;AAED,iBAAS,cAAc,CACtB,OAAO,EAAE,IAAI,EACb,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,kCAAkC,GAAG,IAAI,QAGlD;AAmDD,iBAAS,OAAO,CACf,MAAM,EAAE,WAAW,EACnB,EAAE,EAAE,OAAO,GAAG,MAAM,EACpB,IAAI,GAAE,GAAQ,EACd,MAAM,GAAE,MAAY,QAwBpB;AAiGD,cAAM,MAAM;IACX,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,IAAI,CAAmB;gBAEnB,MAAM,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,EAAE,KAAK,GAAE,OAAe;IAWnE,IAAI,MAAM,IAAI,GAAG,CAEhB;IAED,IAAI,GAAG,IAAI,GAAG,CAEb;CACD;AAED,cAAM,EAAG,SAAQ,MAAM;gBACV,MAAM,CAAC,EAAE,GAAG;IAIxB,MAAM,CAAC,OAAO,iBAAW;IAEzB,OAAO,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,EAAE,IAAI,GAAE,GAAQ,EAAE,MAAM,GAAE,MAAY;CAmElE;AAED,cAAM,EAAG,SAAQ,MAAM;gBACV,MAAM,EAAE,WAAW,EAAE,KAAK,GAAE,OAAe;IAIvD,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAO;IAC3B,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAU;IACjC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAW;IAEnC,OAAO,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,EAAE,IAAI,GAAE,GAAQ,EAAE,MAAM,CAAC,EAAE,MAAM;IAI7D,MAAM,CAAC,MAAM,GAAE,MAAW,GAAG,GAAG,EAAE;IAMlC,SAAS,CAAC,MAAM,GAAE,MAAW,GAAG,GAAG,EAAE;IAMrC,QAAQ,CAAC,MAAM,GAAE,MAAW,GAAG,GAAG,EAAE;IAYpC,WAAW,CAAC,MAAM,GAAE,MAAW,GAAG,GAAG,EAAE;CAMvC;AAgGD,iBAAS,QAAQ,CAAC,MAAM,GAAE,OAAc,GAAG,OAAO,CAmBjD;AAID,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC"}
|
package/public/MC.js
CHANGED
|
@@ -166,19 +166,22 @@ function bubbleEvent(target, ev) {
|
|
|
166
166
|
}
|
|
167
167
|
}
|
|
168
168
|
class McBase {
|
|
169
|
-
|
|
169
|
+
_target;
|
|
170
|
+
__mc = {};
|
|
170
171
|
constructor(target, debug = false) {
|
|
171
172
|
let that = this, element = that;
|
|
172
|
-
this
|
|
173
|
+
this._target = new WeakRef(target || {});
|
|
173
174
|
init(element);
|
|
174
175
|
autoAttachListeners(element);
|
|
175
176
|
}
|
|
176
177
|
get target() {
|
|
177
|
-
return this
|
|
178
|
+
return this._target.deref();
|
|
179
|
+
}
|
|
180
|
+
get _mc() {
|
|
181
|
+
return this.__mc;
|
|
178
182
|
}
|
|
179
183
|
}
|
|
180
184
|
class MC extends McBase {
|
|
181
|
-
_mc = {};
|
|
182
185
|
constructor(target) {
|
|
183
186
|
super(target);
|
|
184
187
|
}
|
|
@@ -225,7 +228,6 @@ class MC extends McBase {
|
|
|
225
228
|
}
|
|
226
229
|
}
|
|
227
230
|
class DC extends McBase {
|
|
228
|
-
_mc = {};
|
|
229
231
|
constructor(target, debug = false) {
|
|
230
232
|
super(target);
|
|
231
233
|
}
|
|
@@ -267,93 +269,60 @@ class DC extends McBase {
|
|
|
267
269
|
return getMicroComponents([...myDomElements], search);
|
|
268
270
|
}
|
|
269
271
|
}
|
|
270
|
-
const
|
|
271
|
-
const MCs = new Map();
|
|
272
|
+
const loadingMCs = new Set();
|
|
272
273
|
function makeLoadScript(element) {
|
|
274
|
+
if (loadingMCs.has(element))
|
|
275
|
+
return;
|
|
276
|
+
loadingMCs.add(element);
|
|
273
277
|
const fileName = './' + element.split('-').join('/') + '.js';
|
|
274
278
|
const se = document.createElement('script');
|
|
275
279
|
se.setAttribute('src', fileName);
|
|
276
280
|
se.setAttribute('blocking', 'render');
|
|
277
281
|
se.async = true;
|
|
278
282
|
se.setAttribute('type', 'module');
|
|
279
|
-
se.setAttribute('name', element);
|
|
283
|
+
se.setAttribute('data-name', element);
|
|
280
284
|
se.setAttribute('loading', '');
|
|
285
|
+
const loadedPromise = customElements.whenDefined(element);
|
|
286
|
+
loadedPromise.then(() => {
|
|
287
|
+
const elements = Array
|
|
288
|
+
.from(document.querySelectorAll(`[_mc*="${element}"]`))
|
|
289
|
+
.filter(element => element instanceof HTMLElement);
|
|
290
|
+
if (elements.length === 0)
|
|
291
|
+
return;
|
|
292
|
+
const klass = customElements.get(element);
|
|
293
|
+
elements.forEach((node) => {
|
|
294
|
+
DC.add(node, klass.name, new klass(node));
|
|
295
|
+
const new_mc = node
|
|
296
|
+
.getAttribute('_mc')
|
|
297
|
+
.split(' ')
|
|
298
|
+
.filter((name) => name !== element && name !== '')
|
|
299
|
+
.join(' ');
|
|
300
|
+
node.setAttribute('_mc', new_mc);
|
|
301
|
+
});
|
|
302
|
+
document.head.querySelector('script[data-name="${elementName}]"')?.remove();
|
|
303
|
+
});
|
|
281
304
|
addListener(se, 'load', (ev) => {
|
|
282
|
-
|
|
283
|
-
se.setAttribute('loaded', '');
|
|
305
|
+
loadingMCs.delete(element);
|
|
284
306
|
});
|
|
285
307
|
addListener(se, 'error', (ev) => {
|
|
286
|
-
console.error('could not load
|
|
308
|
+
console.error('could not load MC code from', fileName);
|
|
287
309
|
});
|
|
288
|
-
|
|
310
|
+
document.head.append(se);
|
|
289
311
|
}
|
|
290
|
-
function
|
|
291
|
-
setTimeout(function () {
|
|
292
|
-
const importFileName = script.getAttribute('src');
|
|
293
|
-
const elementName = script.getAttribute('name');
|
|
294
|
-
const se = document.createElement('script');
|
|
295
|
-
se.async = true;
|
|
296
|
-
se.setAttribute('type', 'module');
|
|
297
|
-
const code = `
|
|
298
|
-
|
|
299
|
-
import _ from "${importFileName}";
|
|
300
|
-
import { DC } from "./microcomponents.js";
|
|
301
|
-
|
|
302
|
-
const elements = Array.from(document.querySelectorAll('[_mc*="${elementName}"]')).filter( element => element instanceof HTMLElement );
|
|
303
|
-
|
|
304
|
-
elements.forEach((element) => {
|
|
305
|
-
// add class to MCs repository
|
|
306
|
-
autoload.state.MCs.set( '${elementName}', _ );
|
|
307
|
-
// add instance to HTMLElement
|
|
308
|
-
DC.add(element, _.name, new _(element));
|
|
309
|
-
// remove instance name from elements "_mc" attribute
|
|
310
|
-
element.setAttribute('_mc', element.getAttribute('_mc').replace('${elementName}', '').replace( /\w\w/g, ' ').trim());
|
|
311
|
-
});
|
|
312
|
-
|
|
313
|
-
setTimeout( () => {
|
|
314
|
-
document.body.querySelector('script[name="${elementName}]"')?.remove();
|
|
315
|
-
},0);
|
|
316
|
-
|
|
317
|
-
`;
|
|
318
|
-
se.innerHTML = code;
|
|
319
|
-
document.body.append(se);
|
|
320
|
-
}, 0);
|
|
321
|
-
}
|
|
322
|
-
function loadUndefinedMicroComponents() {
|
|
312
|
+
function loadUndefinedMCs() {
|
|
323
313
|
[...document.querySelectorAll(':not(:defined)')]
|
|
324
314
|
.filter((element) => !!element
|
|
325
315
|
&& !customElements.get(element.tagName.toLowerCase())
|
|
326
|
-
&& !
|
|
316
|
+
&& !loadingMCs.has(element.tagName.toLowerCase()))
|
|
327
317
|
.forEach((el) => {
|
|
328
|
-
|
|
329
|
-
const se = makeLoadScript(elementName);
|
|
330
|
-
addListener(se, 'load', () => {
|
|
331
|
-
CEs.set(elementName, customElements.get(el.tagName.toLowerCase()));
|
|
332
|
-
});
|
|
333
|
-
CEs.set(elementName, 'loading');
|
|
334
|
-
document.head.append(se);
|
|
318
|
+
makeLoadScript(el.tagName.toLowerCase());
|
|
335
319
|
});
|
|
336
320
|
[...document.querySelectorAll('[_mc]:not([_mc=""]')]
|
|
337
321
|
.filter((element) => !!element)
|
|
338
322
|
.forEach((el) => {
|
|
339
|
-
const
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
const se = makeLoadScript(elementName);
|
|
343
|
-
addListener(se, 'load', () => onLoadCallback(document.head.querySelector(`script[name="${elementName}"]`)));
|
|
344
|
-
MCs.set(elementName, 'loading');
|
|
345
|
-
document.head.append(se);
|
|
346
|
-
});
|
|
347
|
-
const elementsAlreadyLoaded = elements.filter(m => MCs.has(m) && !MCs.get(m).length);
|
|
348
|
-
elementsAlreadyLoaded?.forEach(elementName => {
|
|
349
|
-
setTimeout(() => {
|
|
350
|
-
DC.add(el, elementName, new (autoload.state.MCs.get(elementName))(el));
|
|
351
|
-
const newAttribute = el.getAttribute('_mc')
|
|
352
|
-
.replace('${elementName}', '')
|
|
353
|
-
.replace(/\w\w/g, ' ')
|
|
354
|
-
.trim() || '_mc';
|
|
355
|
-
el.setAttribute('_mc');
|
|
356
|
-
}, 5);
|
|
323
|
+
const _mc = el.getAttribute('_mc')?.split(' ').filter(name => name !== '');
|
|
324
|
+
_mc?.forEach(dc => {
|
|
325
|
+
makeLoadScript(dc);
|
|
357
326
|
});
|
|
358
327
|
});
|
|
359
328
|
}
|
|
@@ -366,14 +335,14 @@ function autoload(enable = true) {
|
|
|
366
335
|
return autoloadEnabled;
|
|
367
336
|
}
|
|
368
337
|
autoloadEnabled = enable;
|
|
369
|
-
observer = new MutationObserver(
|
|
338
|
+
observer = new MutationObserver(loadUndefinedMCs);
|
|
370
339
|
setTimeout(() => {
|
|
371
340
|
observer.observe(document.body, { childList: true, subtree: true });
|
|
372
|
-
|
|
341
|
+
loadUndefinedMCs();
|
|
373
342
|
}, 5);
|
|
374
343
|
window.autoload = window.autoload || autoload;
|
|
375
344
|
return autoloadEnabled;
|
|
376
345
|
}
|
|
377
|
-
autoload.state = {
|
|
346
|
+
autoload.state = { loadingMCs };
|
|
378
347
|
export { addListener, removeListener, McBase, MC, DC, McEvent, autoload };
|
|
379
348
|
//# sourceMappingURL=MC.js.map
|