spikijs 1.1.6 → 1.1.8
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 +1 -1
- package/package.json +1 -1
- package/spiki.esm.js +158 -175
- package/spiki.esm.min.js +1 -1
- package/spiki.js +158 -175
- package/spiki.min.js +1 -1
package/README.md
CHANGED
package/package.json
CHANGED
package/spiki.esm.js
CHANGED
|
@@ -18,15 +18,14 @@ var spiki = (() => {
|
|
|
18
18
|
if (!fn._q) {
|
|
19
19
|
fn._q = true;
|
|
20
20
|
scheduler.push(fn);
|
|
21
|
-
|
|
22
21
|
if (!isFlushing) {
|
|
23
22
|
isFlushing = true;
|
|
24
23
|
resolved.then(() => {
|
|
25
|
-
var queue = scheduler
|
|
24
|
+
var queue = scheduler;
|
|
26
25
|
scheduler = [];
|
|
27
26
|
isFlushing = false;
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
var i = queue.length;
|
|
28
|
+
while (i--) {
|
|
30
29
|
queue[i]._q = false;
|
|
31
30
|
queue[i]();
|
|
32
31
|
}
|
|
@@ -36,23 +35,17 @@ var spiki = (() => {
|
|
|
36
35
|
};
|
|
37
36
|
|
|
38
37
|
var evalPath = (scope, path) => {
|
|
39
|
-
if (path
|
|
40
|
-
return { val: scope[path]
|
|
38
|
+
if (typeof path === 'string') {
|
|
39
|
+
return { ctx: scope, val: scope ? scope[path] : undefined };
|
|
41
40
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
var ctx = scope;
|
|
46
|
-
|
|
47
|
-
for (var i = 0; i < parts.length; i++) {
|
|
48
|
-
if (val == null) {
|
|
49
|
-
console.warn('Property undefined: ' + path);
|
|
50
|
-
return { val: undefined, ctx: null };
|
|
51
|
-
}
|
|
52
|
-
ctx = val;
|
|
53
|
-
val = val[parts[i]];
|
|
41
|
+
var i = 0, len = path.length;
|
|
42
|
+
while (i < len - 1 && scope) {
|
|
43
|
+
scope = scope[path[i++]];
|
|
54
44
|
}
|
|
55
|
-
return {
|
|
45
|
+
return {
|
|
46
|
+
ctx: scope,
|
|
47
|
+
val: scope ? scope[path[len - 1]] : undefined
|
|
48
|
+
};
|
|
56
49
|
};
|
|
57
50
|
|
|
58
51
|
// -------------------------------------------------------------------------
|
|
@@ -62,24 +55,18 @@ var spiki = (() => {
|
|
|
62
55
|
var arrInst = {};
|
|
63
56
|
|
|
64
57
|
arrMethods.forEach(method => {
|
|
65
|
-
arrInst[method] = function() {
|
|
58
|
+
arrInst[method] = function(...args) {
|
|
66
59
|
pauseTracking = true;
|
|
67
|
-
try {
|
|
68
|
-
|
|
69
|
-
} finally {
|
|
70
|
-
pauseTracking = false;
|
|
71
|
-
trigger(this, 'length');
|
|
72
|
-
}
|
|
60
|
+
try { return Array.prototype[method].apply(this, args); }
|
|
61
|
+
finally { pauseTracking = false; trigger(this, 'length'); }
|
|
73
62
|
};
|
|
74
63
|
});
|
|
75
64
|
|
|
76
65
|
var track = (target, key) => {
|
|
77
66
|
if (activeEffect) {
|
|
78
67
|
var deps = target._d || (Object.defineProperty(target, '_d', {
|
|
79
|
-
value: Object.create(null),
|
|
80
|
-
writable: true
|
|
68
|
+
value: Object.create(null), writable: true
|
|
81
69
|
}), target._d);
|
|
82
|
-
|
|
83
70
|
var list = deps[key] || (deps[key] = []);
|
|
84
71
|
if (list.indexOf(activeEffect) === -1) {
|
|
85
72
|
list.push(activeEffect);
|
|
@@ -91,7 +78,8 @@ var spiki = (() => {
|
|
|
91
78
|
var trigger = (target, key) => {
|
|
92
79
|
if (!pauseTracking && target._d && target._d[key]) {
|
|
93
80
|
var effects = target._d[key].slice();
|
|
94
|
-
|
|
81
|
+
var i = 0, len = effects.length;
|
|
82
|
+
for (; i < len; i++) {
|
|
95
83
|
var effect = effects[i];
|
|
96
84
|
effect.sched ? effect.sched(effect) : effect();
|
|
97
85
|
}
|
|
@@ -99,7 +87,8 @@ var spiki = (() => {
|
|
|
99
87
|
};
|
|
100
88
|
|
|
101
89
|
var cleanup = (runner) => {
|
|
102
|
-
|
|
90
|
+
var i = runner.deps.length;
|
|
91
|
+
while (i--) {
|
|
103
92
|
var list = runner.deps[i];
|
|
104
93
|
var idx = list.indexOf(runner);
|
|
105
94
|
if (idx !== -1) {
|
|
@@ -115,11 +104,7 @@ var spiki = (() => {
|
|
|
115
104
|
cleanup(runner);
|
|
116
105
|
var prev = activeEffect;
|
|
117
106
|
activeEffect = runner;
|
|
118
|
-
try {
|
|
119
|
-
fn();
|
|
120
|
-
} finally {
|
|
121
|
-
activeEffect = prev;
|
|
122
|
-
}
|
|
107
|
+
try { fn(); } finally { activeEffect = prev; }
|
|
123
108
|
};
|
|
124
109
|
runner.deps = [];
|
|
125
110
|
runner.sched = sched;
|
|
@@ -136,20 +121,20 @@ var spiki = (() => {
|
|
|
136
121
|
if (key === '_y') return true;
|
|
137
122
|
if (key === '_d') return target._d;
|
|
138
123
|
if (Array.isArray(target) && arrInst.hasOwnProperty(key)) return arrInst[key];
|
|
139
|
-
|
|
124
|
+
var desc = Object.getOwnPropertyDescriptor(target, key);
|
|
125
|
+
if (desc && desc.get) {
|
|
126
|
+
var cacheKey = '_' + key;
|
|
127
|
+
if (!(cacheKey in target)) effect(() => receiver[cacheKey] = desc.get.call(receiver));
|
|
128
|
+
return receiver[cacheKey];
|
|
129
|
+
}
|
|
140
130
|
track(target, key);
|
|
141
131
|
var res = Reflect.get(target, key, receiver);
|
|
142
|
-
return (res && typeof res === 'object' && !(res instanceof Node))
|
|
143
|
-
? makeReactive(res)
|
|
144
|
-
: res;
|
|
132
|
+
return (res && typeof res === 'object' && !(res instanceof Node)) ? makeReactive(res) : res;
|
|
145
133
|
},
|
|
146
134
|
set: (target, key, val, receiver) => {
|
|
147
135
|
var old = target[key];
|
|
148
136
|
var isArr = Array.isArray(target);
|
|
149
|
-
var hadKey = isArr
|
|
150
|
-
? Number(key) < target.length
|
|
151
|
-
: Object.prototype.hasOwnProperty.call(target, key);
|
|
152
|
-
|
|
137
|
+
var hadKey = isArr ? Number(key) < target.length : Object.prototype.hasOwnProperty.call(target, key);
|
|
153
138
|
if (!isArr && !hadKey) {
|
|
154
139
|
var proto = Object.getPrototypeOf(target);
|
|
155
140
|
while (proto && proto !== Object.prototype) {
|
|
@@ -161,7 +146,6 @@ var spiki = (() => {
|
|
|
161
146
|
proto = Object.getPrototypeOf(proto);
|
|
162
147
|
}
|
|
163
148
|
}
|
|
164
|
-
|
|
165
149
|
var res = Reflect.set(target, key, val, receiver);
|
|
166
150
|
if (!pauseTracking && res) {
|
|
167
151
|
if (!hadKey || val !== old) {
|
|
@@ -197,53 +181,36 @@ var spiki = (() => {
|
|
|
197
181
|
// -------------------------------------------------------------------------
|
|
198
182
|
// 3. DOM & COMPONENT ENGINE
|
|
199
183
|
// -------------------------------------------------------------------------
|
|
200
|
-
var domOps =
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
if (
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
: el.classList.add(c);
|
|
231
|
-
}
|
|
232
|
-
} else if (val) {
|
|
233
|
-
for (var cls in val) {
|
|
234
|
-
var add = !!val[cls];
|
|
235
|
-
if (cls.indexOf(' ') !== -1) {
|
|
236
|
-
var parts = cls.split(/\s+/);
|
|
237
|
-
for (var j=0; j<parts.length; j++) {
|
|
238
|
-
if(parts[j]) el.classList.toggle(parts[j], add);
|
|
239
|
-
}
|
|
240
|
-
} else {
|
|
241
|
-
el.classList.toggle(cls, add);
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
},
|
|
246
|
-
effect: () => {}
|
|
184
|
+
var domOps = Object.create(null);
|
|
185
|
+
domOps.text = (el, val) => {
|
|
186
|
+
val = val == null ? '' : val;
|
|
187
|
+
if (el.textContent !== String(val)) el.textContent = val;
|
|
188
|
+
};
|
|
189
|
+
domOps.html = (el, val) => {
|
|
190
|
+
if (el.innerHTML != val) el.innerHTML = val == null ? '' : val;
|
|
191
|
+
};
|
|
192
|
+
domOps.value = (el, val) => {
|
|
193
|
+
if (el.type === 'checkbox') el.checked = !!val;
|
|
194
|
+
else if (el.type === 'radio') el.checked = (el.value == val);
|
|
195
|
+
else if (el.value != val) el.value = val == null ? '' : val;
|
|
196
|
+
};
|
|
197
|
+
domOps.attr = (el, val, name) => {
|
|
198
|
+
if (val == null || val === false) el.removeAttribute(name);
|
|
199
|
+
else {
|
|
200
|
+
var str = val === true ? '' : String(val);
|
|
201
|
+
if (el.getAttribute(name) !== str) el.setAttribute(name, str);
|
|
202
|
+
}
|
|
203
|
+
};
|
|
204
|
+
domOps.class = (el, val) => {
|
|
205
|
+
var base = el._n || '';
|
|
206
|
+
var dyn = '';
|
|
207
|
+
if (typeof val === 'string') {
|
|
208
|
+
dyn = val;
|
|
209
|
+
} else if (val) {
|
|
210
|
+
for (var k in val) if (val[k]) dyn += (dyn ? ' ' : '') + k;
|
|
211
|
+
}
|
|
212
|
+
var res = base + (base && dyn ? ' ' : '') + dyn;
|
|
213
|
+
if (el.className !== res) el.className = res;
|
|
247
214
|
};
|
|
248
215
|
|
|
249
216
|
var mount = (rootElement, parentScope) => {
|
|
@@ -267,19 +234,40 @@ var spiki = (() => {
|
|
|
267
234
|
|
|
268
235
|
var handle = (event) => {
|
|
269
236
|
var target = event.target;
|
|
270
|
-
|
|
271
|
-
|
|
237
|
+
if (event.type === 'input' && target._c) return;
|
|
238
|
+
var limit = rootElement.parentNode;
|
|
239
|
+
var type = event.type;
|
|
240
|
+
|
|
241
|
+
while (target && target !== limit) {
|
|
242
|
+
var handlers = target._h && target._h[type];
|
|
243
|
+
|
|
272
244
|
if (handlers) {
|
|
273
|
-
|
|
245
|
+
var scope = target._s;
|
|
246
|
+
var i = handlers.length;
|
|
247
|
+
while (i--) {
|
|
274
248
|
var handler = handlers[i];
|
|
249
|
+
var path = handler.p;
|
|
250
|
+
|
|
275
251
|
if (handler.model) {
|
|
276
252
|
var val = target.type === 'checkbox' ? target.checked : target.value;
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
253
|
+
if (typeof val === 'string') {
|
|
254
|
+
var clean = val.trim();
|
|
255
|
+
if (clean && isFinite(clean)) {
|
|
256
|
+
if (clean.charCodeAt(0) !== 48 || clean.length === 1 || clean.charCodeAt(1) === 46) {
|
|
257
|
+
val = Number(clean);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
if (typeof path === 'string') {
|
|
262
|
+
if (scope) scope[path] = val;
|
|
263
|
+
} else {
|
|
264
|
+
var ctx = scope;
|
|
265
|
+
var k = 0, kLen = path.length - 1;
|
|
266
|
+
while (k < kLen && ctx) ctx = ctx[path[k++]];
|
|
267
|
+
if (ctx) ctx[path[kLen]] = val;
|
|
280
268
|
}
|
|
281
269
|
} else {
|
|
282
|
-
var result = evalPath(
|
|
270
|
+
var result = evalPath(scope, path);
|
|
283
271
|
if (typeof result.val === 'function') result.val.call(result.ctx, event);
|
|
284
272
|
}
|
|
285
273
|
}
|
|
@@ -308,21 +296,22 @@ var spiki = (() => {
|
|
|
308
296
|
var directiveFor = !directiveIf && el.tagName === 'TEMPLATE' && el.getAttribute('s-for');
|
|
309
297
|
var bindings = [];
|
|
310
298
|
|
|
299
|
+
if (el.hasAttribute('class') && !el._n) el._n = el.className;
|
|
300
|
+
|
|
311
301
|
if (directiveIf) {
|
|
312
302
|
var end = document.createTextNode('');
|
|
313
303
|
var active = null;
|
|
314
304
|
var cBranch = [];
|
|
315
|
-
|
|
316
305
|
el.replaceWith(end);
|
|
317
306
|
var negate = directiveIf[0] === '!';
|
|
318
307
|
var path = negate ? directiveIf.slice(1) : directiveIf;
|
|
308
|
+
var p = path.indexOf('.') === -1 ? path : path.split('.');
|
|
319
309
|
|
|
320
|
-
parentCleanups.push(() => { cBranch.forEach(
|
|
310
|
+
parentCleanups.push(() => { cBranch.forEach(c => c()); });
|
|
321
311
|
|
|
322
312
|
return parentCleanups.push(effect(() => {
|
|
323
|
-
var show = evalPath(scope,
|
|
313
|
+
var show = evalPath(scope, p).val;
|
|
324
314
|
if (negate) show = !show;
|
|
325
|
-
|
|
326
315
|
if (show) {
|
|
327
316
|
if (!active) {
|
|
328
317
|
active = el.cloneNode(true);
|
|
@@ -331,40 +320,38 @@ var spiki = (() => {
|
|
|
331
320
|
end.parentNode.insertBefore(active, end);
|
|
332
321
|
}
|
|
333
322
|
} else if (active) {
|
|
334
|
-
cBranch.forEach(
|
|
335
|
-
cBranch = [];
|
|
336
|
-
active.remove();
|
|
337
|
-
active = null;
|
|
323
|
+
cBranch.forEach(c => c()); cBranch = []; active.remove(); active = null;
|
|
338
324
|
}
|
|
339
325
|
}, nextTick));
|
|
340
326
|
}
|
|
341
327
|
|
|
342
328
|
if (directiveFor) {
|
|
343
|
-
var
|
|
344
|
-
if (
|
|
345
|
-
var
|
|
346
|
-
var
|
|
347
|
-
var
|
|
348
|
-
var
|
|
329
|
+
var inIdx = directiveFor.indexOf(' in ');
|
|
330
|
+
if (inIdx !== -1) {
|
|
331
|
+
var leftSide = directiveFor.slice(0, inIdx).trim();
|
|
332
|
+
var listKey = directiveFor.slice(inIdx + 4).trim();
|
|
333
|
+
var leftParts = leftSide.replace(/[()]/g, '').split(',');
|
|
334
|
+
var alias = leftParts[0].trim();
|
|
335
|
+
var idxAlias = leftParts[1] ? leftParts[1].trim() : null;
|
|
336
|
+
var listPath = listKey.indexOf('.') === -1 ? listKey : listKey.split('.');
|
|
349
337
|
var keyAttr = el.getAttribute('s-key');
|
|
338
|
+
var keyPath = keyAttr ? (keyAttr.indexOf('.') === -1 ? keyAttr : keyAttr.split('.')) : null;
|
|
339
|
+
|
|
350
340
|
var end = document.createTextNode('');
|
|
351
341
|
var nodePool = Object.create(null);
|
|
352
342
|
var usedKeys;
|
|
353
|
-
|
|
354
343
|
el.replaceWith(end);
|
|
355
344
|
|
|
356
345
|
parentCleanups.push(() => {
|
|
357
|
-
for(var
|
|
346
|
+
for(var k in nodePool) nodePool[k].cleanups.forEach(c => c());
|
|
358
347
|
});
|
|
359
348
|
|
|
360
349
|
return parentCleanups.push(effect(() => {
|
|
361
|
-
var list = evalPath(scope,
|
|
350
|
+
var list = evalPath(scope, listPath).val || [];
|
|
362
351
|
if (Array.isArray(list)) track(list, 'length');
|
|
363
|
-
|
|
364
352
|
var frag = document.createDocumentFragment();
|
|
365
353
|
var cursor = end;
|
|
366
354
|
usedKeys = Object.create(null);
|
|
367
|
-
|
|
368
355
|
var isArr = Array.isArray(list);
|
|
369
356
|
var keys = isArr ? list : Object.keys(list);
|
|
370
357
|
var len = isArr ? list.length : keys.length;
|
|
@@ -372,18 +359,12 @@ var spiki = (() => {
|
|
|
372
359
|
for (var i = 0; i < len; i++) {
|
|
373
360
|
var key = isArr ? i : keys[i];
|
|
374
361
|
var item = isArr ? list[i] : list[key];
|
|
375
|
-
|
|
376
362
|
var unique;
|
|
377
|
-
if (item == null || typeof item !== 'object')
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
unique = evalPath(item, keyAttr).val;
|
|
381
|
-
} else {
|
|
382
|
-
unique = String(key) + '_o';
|
|
383
|
-
}
|
|
363
|
+
if (item == null || typeof item !== 'object') unique = String(item);
|
|
364
|
+
else if (keyPath) unique = evalPath(item, keyPath).val;
|
|
365
|
+
else unique = String(key) + '_o';
|
|
384
366
|
|
|
385
367
|
if (usedKeys[unique]) unique += '_' + i;
|
|
386
|
-
|
|
387
368
|
var row = nodePool[unique];
|
|
388
369
|
if (row) {
|
|
389
370
|
row.scope[alias] = item;
|
|
@@ -391,19 +372,13 @@ var spiki = (() => {
|
|
|
391
372
|
} else {
|
|
392
373
|
var clone = el.content.cloneNode(true);
|
|
393
374
|
var rowScope = makeReactive(Object.create(scope));
|
|
394
|
-
|
|
395
|
-
rowScope[alias] = item;
|
|
396
|
-
if (idxAlias) rowScope[idxAlias] = key;
|
|
397
|
-
|
|
375
|
+
rowScope[alias] = item; if (idxAlias) rowScope[idxAlias] = key;
|
|
398
376
|
var rowNodes = Array.prototype.slice.call(clone.childNodes);
|
|
399
377
|
var rowCleanups = [];
|
|
400
|
-
|
|
401
378
|
for(var n=0; n<rowNodes.length; n++) walk(rowNodes[n], rowScope, rowCleanups);
|
|
402
|
-
|
|
403
379
|
row = { nodes: rowNodes, scope: rowScope, cleanups: rowCleanups };
|
|
404
380
|
nodePool[unique] = row;
|
|
405
381
|
}
|
|
406
|
-
|
|
407
382
|
if (row.nodes[0] !== cursor.nextSibling) {
|
|
408
383
|
for(var n=0; n<row.nodes.length; n++) frag.appendChild(row.nodes[n]);
|
|
409
384
|
cursor.parentNode.insertBefore(frag, cursor.nextSibling);
|
|
@@ -411,13 +386,10 @@ var spiki = (() => {
|
|
|
411
386
|
cursor = row.nodes[row.nodes.length-1];
|
|
412
387
|
usedKeys[unique] = true;
|
|
413
388
|
}
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
for(var n=0; n<nodePool[key].nodes.length; n++) nodePool[key].nodes[n].remove();
|
|
419
|
-
delete nodePool[key];
|
|
420
|
-
}
|
|
389
|
+
for (var k in nodePool) if (!usedKeys[k]) {
|
|
390
|
+
nodePool[k].cleanups.forEach(c => c());
|
|
391
|
+
nodePool[k].nodes.forEach(n => n.remove());
|
|
392
|
+
delete nodePool[k];
|
|
421
393
|
}
|
|
422
394
|
}, nextTick));
|
|
423
395
|
}
|
|
@@ -425,45 +397,57 @@ var spiki = (() => {
|
|
|
425
397
|
|
|
426
398
|
if (el.hasAttributes()) {
|
|
427
399
|
var attrs = el.attributes;
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
var
|
|
400
|
+
var i = attrs.length;
|
|
401
|
+
while (i--) {
|
|
402
|
+
var attr = attrs[i];
|
|
403
|
+
var attrName = attr.name;
|
|
404
|
+
var attrValue = attr.value;
|
|
431
405
|
|
|
432
|
-
if (attrName
|
|
406
|
+
if (attrName.charCodeAt(0) === 58) {
|
|
433
407
|
var realName = attrName.slice(1);
|
|
434
|
-
var neg = attrValue
|
|
435
|
-
|
|
436
|
-
|
|
408
|
+
var neg = attrValue.charCodeAt(0) === 33;
|
|
409
|
+
var rawPath = neg ? attrValue.slice(1) : attrValue;
|
|
410
|
+
var p = rawPath.indexOf('.') === -1 ? rawPath : rawPath.split('.');
|
|
411
|
+
bindings.push({ type: 'attr', name: realName, path: p, neg: neg });
|
|
412
|
+
}
|
|
413
|
+
else if (attrName.charCodeAt(0) === 115 && attrName.charCodeAt(1) === 45) {
|
|
437
414
|
var type = attrName.slice(2);
|
|
415
|
+
var p = attrValue.indexOf('.') === -1 ? attrValue : attrValue.split('.');
|
|
416
|
+
|
|
438
417
|
if (type === 'init' || type === 'destroy') {
|
|
439
418
|
((type, path) => {
|
|
440
419
|
var result = evalPath(scope, path);
|
|
441
420
|
if (typeof result.val === 'function') {
|
|
442
|
-
if (type === 'init')
|
|
443
|
-
|
|
444
|
-
} else {
|
|
445
|
-
parentCleanups.push(() => result.val.call(result.ctx, el));
|
|
446
|
-
}
|
|
421
|
+
if (type === 'init') nextTick(() => result.val.call(result.ctx, el));
|
|
422
|
+
else parentCleanups.push(() => result.val.call(result.ctx, el));
|
|
447
423
|
}
|
|
448
|
-
})(type,
|
|
449
|
-
}
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
424
|
+
})(type, p);
|
|
425
|
+
}
|
|
426
|
+
else if (type === 'effect') {
|
|
427
|
+
parentCleanups.push(effect(() => {
|
|
428
|
+
var res = evalPath(scope, p);
|
|
429
|
+
if (typeof res.val === 'function') res.val.call(res.ctx, el);
|
|
430
|
+
}, nextTick));
|
|
431
|
+
}
|
|
432
|
+
else if (type === 'model') {
|
|
433
|
+
bindings.push({ type: 'value', path: p });
|
|
434
|
+
el._s = scope; el._h = el._h || {};
|
|
435
|
+
var evt = (el.type === 'checkbox' || el.type === 'radio' || el.tagName==='SELECT') ? 'change' : 'input';
|
|
436
|
+
|
|
437
|
+
if (evt === 'input') {
|
|
438
|
+
el.addEventListener('compositionstart', () => el._c = true);
|
|
439
|
+
el.addEventListener('compositionend', () => { el._c = false; handle({target: el, type: 'input'}); });
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
(el._h[evt] = el._h[evt] || []).unshift({ model: true, p: p });
|
|
458
443
|
addListen(evt);
|
|
459
444
|
} else if (type === 'ref') {
|
|
460
445
|
state.$refs[attrValue] = el;
|
|
461
446
|
} else if (domOps[type]) {
|
|
462
|
-
bindings.push({ type: type, path:
|
|
447
|
+
bindings.push({ type: type, path: p });
|
|
463
448
|
} else {
|
|
464
|
-
el._s = scope;
|
|
465
|
-
el._h = el._h || {};
|
|
466
|
-
(el._h[type] = el._h[type] || []).push({ path: attrValue });
|
|
449
|
+
el._s = scope; el._h = el._h || {};
|
|
450
|
+
(el._h[type] = el._h[type] || []).push({ p: p });
|
|
467
451
|
addListen(type);
|
|
468
452
|
}
|
|
469
453
|
}
|
|
@@ -472,18 +456,16 @@ var spiki = (() => {
|
|
|
472
456
|
|
|
473
457
|
if (bindings.length) {
|
|
474
458
|
parentCleanups.push(effect(() => {
|
|
475
|
-
|
|
459
|
+
var i = bindings.length;
|
|
460
|
+
while (i--) {
|
|
476
461
|
var binding = bindings[i];
|
|
477
462
|
var result = evalPath(scope, binding.path);
|
|
478
463
|
var val = (result.val && typeof result.val === 'function') ? result.val.call(result.ctx, el) : result.val;
|
|
479
464
|
|
|
480
465
|
if (binding.type === 'attr') {
|
|
481
466
|
if (binding.neg) val = !val;
|
|
482
|
-
if (binding.name === 'class')
|
|
483
|
-
|
|
484
|
-
} else {
|
|
485
|
-
domOps.attr(el, val, binding.name);
|
|
486
|
-
}
|
|
467
|
+
if (binding.name === 'class') domOps.class(el, val);
|
|
468
|
+
else domOps.attr(el, val, binding.name);
|
|
487
469
|
} else {
|
|
488
470
|
domOps[binding.type](el, val);
|
|
489
471
|
}
|
|
@@ -505,7 +487,7 @@ var spiki = (() => {
|
|
|
505
487
|
return {
|
|
506
488
|
unmount: () => {
|
|
507
489
|
if (state.destroy) state.destroy.call(state);
|
|
508
|
-
cleanups.forEach(
|
|
490
|
+
cleanups.forEach(c => c());
|
|
509
491
|
for(var k in listeners) rootElement.removeEventListener(k, handle);
|
|
510
492
|
rootElement._m = false;
|
|
511
493
|
}
|
|
@@ -516,7 +498,8 @@ var spiki = (() => {
|
|
|
516
498
|
data: (name, factory) => { cmpReg[name] = factory; },
|
|
517
499
|
start: () => {
|
|
518
500
|
var els = document.querySelectorAll('[s-data]');
|
|
519
|
-
|
|
501
|
+
var i = els.length;
|
|
502
|
+
while (i--) mount(els[i]);
|
|
520
503
|
},
|
|
521
504
|
store: (k, v) => v === undefined ? globalStore[k] : (globalStore[k] = v),
|
|
522
505
|
raw: (o) => (o && o._p) || o
|
package/spiki.esm.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var spiki=(()=>{var
|
|
1
|
+
var spiki=(()=>{var L=Object,$=Array,s=Reflect,r=Promise,o=Node,q=document,j="length",D="value",F="push",K="forEach",M="indexOf",B="split",H="slice",R="call",i="get",W="prototype",f="hasOwnProperty",p="getPrototypeOf",t="defineProperty",z="create",G="isArray",I="getAttribute",J="removeAttribute",Q="hasAttribute",U="tagName",V="type",X="name",c="checked",Y="parentNode",Z="nextSibling",a="textContent",n="innerHTML",rr="replaceWith",er="insertBefore",tr="cloneNode",ar="remove",nr="createTextNode",or="addEventListener",ir="input",lr="checkbox",vr="function",sr="class",fr="object",pr="unshift",ur="trim",cr="cleanups",dr="nodes",l="deps",_r="className",yr="destroy",hr="init",mr="charCodeAt",v="sched",u=L[z](null),d=[],_=!1,y=null,h=!1,e=r.resolve(),gr=r=>{r._q||(r._q=!0,d[F](r),_||(_=!0,e.then(()=>{var r=d;_=!(d=[]);for(var e=r[j];e--;)r[e]._q=!1,r[e]()})))},br=(r,e)=>{if("string"==typeof e)return{ctx:r,val:r?r[e]:void 0};for(var t=0,a=e[j];t<a-1&&r;)r=r[e[t++]];return{ctx:r,val:r?r[e[a-1]]:void 0}},m={};[F,"pop","shift",pr,"splice","sort","reverse"][K](r=>{m[r]=function(){h=!0;try{return $[W][r].apply(this,arguments)}finally{h=!1,g(this,j)}}});var xr=(r,e)=>{!y||-1===(e=(r=r._d||(L[t](r,"_d",{value:L[z](null),writable:!0}),r._d))[e]||(r[e]=[]))[M](y)&&(e[F](y),y[l][F](e))},g=(r,e)=>{if(!h&&r._d&&r._d[e])for(var t=r._d[e][H](),a=0,n=t[j];a<n;a++){var o=t[a];o[v]?o[v](o):o()}},b=r=>{for(var e=r[l][j];e--;){var t=r[l][e],a=t[M](r);-1!==a&&(t[a]=t[t[j]-1],t.pop())}r[l]=[]},Ar=(e,r)=>{var t=()=>{b(t);var r=y;y=t;try{e()}finally{y=r}};return t[l]=[],t[v]=r,t(),()=>b(t)},Pr=r=>{if(!r||typeof r!=fr||r._y||r instanceof o)return r;if(r._p)return r._p;var e=new Proxy(r,{get:(r,e,t)=>{if("_y"===e)return!0;if("_d"===e)return r._d;if($[G](r)&&m[f](e))return m[e];var a=L.getOwnPropertyDescriptor(r,e);if(a&&a[i]){var n="_"+e;return n in r||Ar(()=>t[n]=a[i][R](t)),t[n]}return xr(r,e),!(e=s[i](r,e,t))||typeof e!=fr||e instanceof o?e:Pr(e)},set:(r,e,t,a)=>{var n=r[e],o=$[G](r),i=o?Number(e)<r[j]:L[W][f][R](r,e);if(!o&&!i)for(var l=L[p](r);l&&l!==L[W];){if(L[W][f][R](l,e)){var v=s.set(l,e,t);return h||t===n||g(r,e),v}l=L[p](l)}return v=s.set(r,e,t,a),!h&&v&&(i&&t===n||(g(r,e),o?g(r,j):i||g(r,"_k"))),v},deleteProperty:(r,e)=>{var t=L[W][f][R](r,e),a=s.deleteProperty(r,e);return a&&t&&(g(r,e),$[G](r)?g(r,j):g(r,"_k")),a},ownKeys:r=>(xr(r,"_k"),s.ownKeys(r))});return L[t](r,"_p",{value:e,enumerable:!1}),e},x=Pr({}),wr=L[z](null);wr.text=(r,e)=>{e=null==e?"":e,r[a]!==String(e)&&(r[a]=e)},wr.html=(r,e)=>{r[n]!=e&&(r[n]=null==e?"":e)},wr[D]=(r,e)=>{r[V]===lr?r[c]=!!e:"radio"===r[V]?r[c]=r[D]==e:r[D]!=e&&(r[D]=null==e?"":e)},wr.attr=(r,e,t)=>{null==e||!1===e?r[J](t):(e=!0===e?"":String(e),r[I](t)!==e&&r.setAttribute(t,e))},wr[sr]=(r,e)=>{var t=r._n||"",a="";if("string"==typeof e)a=e;else if(e)for(var n in e)e[n]&&(a+=(a?" ":"")+n);t=t+(t&&a?" ":"")+a,r[_r]!==t&&(r[_r]=t)};var Nr=(E,r)=>{if(!E._m){var e=E[I]("s-data");if(u[e]){E._m=!0,e=u[e](),r&&L.setPrototypeOf(e,r);var S=Pr(e);S.$refs={},S.$root=E,S.$store=x,S.$parent=r;var t=[],a=L[z](null),O=r=>{var e=r.target;if(r[V]!==ir||!e._c)for(var t=E[Y],a=r[V];e&&e!==t;){var n=e._h&&e._h[a];if(n)for(var o=e._s,i=n[j];i--;){var l=n[i],v=l.p;if(l.model){var s=e[V]===lr?e[c]:e[D];if("string"!=typeof s||(l=s[ur]())&&isFinite(l)&&(48===l[mr](0)&&1!==l[j]&&46!==l[mr](1)||(s=Number(l))),"string"==typeof v)o&&(o[v]=s);else{for(var f=o,p=0,u=v[j]-1;p<u&&f;)f=f[v[p++]];f&&(f[v[u]]=s)}}else typeof(s=br(o,v)).val==vr&&s.val[R](s.ctx,r)}e=e[Y]}},T=r=>{a[r]||(a[r]=!0,E[or](r,O))},C=(h,m,t)=>{if(1===h.nodeType&&!h[Q]("s-ignore"))if(h!==E&&h[Q]("s-data"))(r=Nr(h,m))&&t[F](r.unmount);else{var r=!(v=h[I]("s-if"))&&"TEMPLATE"===h[U]&&h[I]("s-for"),a=[];if(h[Q](sr)&&!h._n&&(h._n=h[_r]),v){var g=q[nr](""),e=null,n=[];h[rr](g);var o="!"===v[0],i=-1===(l=o?v[H](1):v)[M](".")?l:l[B](".");return t[F](()=>{n[K](r=>r())}),t[F](Ar(()=>{var r=br(m,i).val;o&&(r=!r),r?e||((e=h[tr](!0))[J]("s-if"),C(e,m,n),g[Y][er](e,g)):e&&(n[K](r=>r()),n=[],e[ar](),e=null)},gr))}if(r&&-1!==(v=r[M](" in "))){var b,l=r[H](0,v)[ur](),v=r[H](v+4)[ur](),x=(l=l.replace(/[()]/g,"")[B](","))[0][ur](),A=l[1]?l[1][ur]():null,P=-1===v[M](".")?v:v[B]("."),w=(v=h[I]("s-key"))?-1===v[M](".")?v:v[B]("."):null,g=q[nr](""),N=L[z](null);return h[rr](g),t[F](()=>{for(var r in N)N[r][cr][K](r=>r())}),t[F](Ar(()=>{var r=br(m,P).val||[];$[G](r)&&xr(r,j);var e=q.createDocumentFragment(),t=g;b=L[z](null);for(var a,n=$[G](r),o=n?r:L.keys(r),i=(n?r:o)[j],l=0;l<i;l++){var v=n?l:o[l],s=n?r[l]:r[v],f=null==s||typeof s!=fr?String(s):w?br(s,w).val:String(v)+"_o";b[f]&&(f+="_"+l);var p=N[f];if(p)p.scope[x]=s,A&&(p.scope[A]=v);else{var u=h.content[tr](!0),c=Pr(L[z](m));c[x]=s,A&&(c[A]=v);for(var d=$[W][H][R](u.childNodes),_=[],y=0;y<d[j];y++)C(d[y],c,_);p={nodes:d,scope:c,cleanups:_},N[f]=p}if(p[dr][0]!==t[Z]){for(y=0;y<p[dr][j];y++)e.appendChild(p[dr][y]);t[Y][er](e,t[Z])}t=p[dr][p[dr][j]-1],b[f]=!0}for(a in N)b[a]||(N[a][cr][K](r=>r()),N[a][dr][K](r=>r[ar]()),delete N[a])},gr))}if(h.hasAttributes())for(var s=h.attributes,f=s[j];f--;){var p,u,c=s[f],d=c[X],_=c[D];58===d[mr](0)?(p=d[H](1),c=(u=33===_[mr](0))?_[H](1):_,i=-1===c[M](".")?c:c[B]("."),a[F]({type:"attr",name:p,path:i,neg:u})):115===d[mr](0)&&45===d[mr](1)&&(u=d[H](2),i=-1===_[M](".")?_:_[B]("."),u===hr||u===yr?(r=>{var e=br(m,i);typeof e.val==vr&&(r===hr?gr(()=>e.val[R](e.ctx,h)):t[F](()=>e.val[R](e.ctx,h)))})(u):"effect"===u?t[F](Ar(()=>{var r=br(m,i);typeof r.val==vr&&r.val[R](r.ctx,h)},gr)):"model"===u?(a[F]({type:D,path:i}),h._s=m,h._h=h._h||{},(d=h[V]===lr||"radio"===h[V]||"SELECT"===h[U]?"change":ir)==ir&&(h[or]("compositionstart",()=>h._c=!0),h[or]("compositionend",()=>{h._c=!1,O({target:h,type:ir})})),(h._h[d]=h._h[d]||[])[pr]({model:!0,p:i}),T(d)):"ref"===u?S.$refs[_]=h:wr[u]?a[F]({type:u,path:i}):(h._s=m,h._h=h._h||{},(h._h[u]=h._h[u]||[])[F]({p:i}),T(u)))}a[j]&&t[F](Ar(()=>{for(var r=a[j];r--;){var e=a[r],t=(t=br(m,e.path)).val&&typeof t.val==vr?t.val[R](t.ctx,h):t.val;"attr"===e[V]?(e.neg&&(t=!t),e[X]===sr?wr[sr](h,t):wr.attr(h,t,e[X])):wr[e[V]](h,t)}},gr));for(var y=h.firstChild;y;){var k=y[Z];C(y,m,t),y=k}}};return C(E,S,t),S[hr]&&S[hr](),{unmount:()=>{for(var r in S[yr]&&S[yr][R](S),t[K](r=>r()),a)E.removeEventListener(r,O);E._m=!1}}}}};return{data:(r,e)=>{u[r]=e},start:()=>{for(var r=q.querySelectorAll("[s-data]"),e=r[j];e--;)Nr(r[e])},store:(r,e)=>void 0===e?x[r]:x[r]=e,raw:r=>r&&r._p||r}})();export default spiki;
|
package/spiki.js
CHANGED
|
@@ -21,15 +21,14 @@ var spiki = (() => {
|
|
|
21
21
|
if (!fn._q) {
|
|
22
22
|
fn._q = true;
|
|
23
23
|
scheduler.push(fn);
|
|
24
|
-
|
|
25
24
|
if (!isFlushing) {
|
|
26
25
|
isFlushing = true;
|
|
27
26
|
resolved.then(() => {
|
|
28
|
-
var queue = scheduler
|
|
27
|
+
var queue = scheduler;
|
|
29
28
|
scheduler = [];
|
|
30
29
|
isFlushing = false;
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
var i = queue.length;
|
|
31
|
+
while (i--) {
|
|
33
32
|
queue[i]._q = false;
|
|
34
33
|
queue[i]();
|
|
35
34
|
}
|
|
@@ -39,23 +38,17 @@ var spiki = (() => {
|
|
|
39
38
|
};
|
|
40
39
|
|
|
41
40
|
var evalPath = (scope, path) => {
|
|
42
|
-
if (path
|
|
43
|
-
return { val: scope[path]
|
|
41
|
+
if (typeof path === 'string') {
|
|
42
|
+
return { ctx: scope, val: scope ? scope[path] : undefined };
|
|
44
43
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
var ctx = scope;
|
|
49
|
-
|
|
50
|
-
for (var i = 0; i < parts.length; i++) {
|
|
51
|
-
if (val == null) {
|
|
52
|
-
console.warn('Property undefined: ' + path);
|
|
53
|
-
return { val: undefined, ctx: null };
|
|
54
|
-
}
|
|
55
|
-
ctx = val;
|
|
56
|
-
val = val[parts[i]];
|
|
44
|
+
var i = 0, len = path.length;
|
|
45
|
+
while (i < len - 1 && scope) {
|
|
46
|
+
scope = scope[path[i++]];
|
|
57
47
|
}
|
|
58
|
-
return {
|
|
48
|
+
return {
|
|
49
|
+
ctx: scope,
|
|
50
|
+
val: scope ? scope[path[len - 1]] : undefined
|
|
51
|
+
};
|
|
59
52
|
};
|
|
60
53
|
|
|
61
54
|
// -------------------------------------------------------------------------
|
|
@@ -65,24 +58,18 @@ var spiki = (() => {
|
|
|
65
58
|
var arrInst = {};
|
|
66
59
|
|
|
67
60
|
arrMethods.forEach(method => {
|
|
68
|
-
arrInst[method] = function() {
|
|
61
|
+
arrInst[method] = function(...args) {
|
|
69
62
|
pauseTracking = true;
|
|
70
|
-
try {
|
|
71
|
-
|
|
72
|
-
} finally {
|
|
73
|
-
pauseTracking = false;
|
|
74
|
-
trigger(this, 'length');
|
|
75
|
-
}
|
|
63
|
+
try { return Array.prototype[method].apply(this, args); }
|
|
64
|
+
finally { pauseTracking = false; trigger(this, 'length'); }
|
|
76
65
|
};
|
|
77
66
|
});
|
|
78
67
|
|
|
79
68
|
var track = (target, key) => {
|
|
80
69
|
if (activeEffect) {
|
|
81
70
|
var deps = target._d || (Object.defineProperty(target, '_d', {
|
|
82
|
-
value: Object.create(null),
|
|
83
|
-
writable: true
|
|
71
|
+
value: Object.create(null), writable: true
|
|
84
72
|
}), target._d);
|
|
85
|
-
|
|
86
73
|
var list = deps[key] || (deps[key] = []);
|
|
87
74
|
if (list.indexOf(activeEffect) === -1) {
|
|
88
75
|
list.push(activeEffect);
|
|
@@ -94,7 +81,8 @@ var spiki = (() => {
|
|
|
94
81
|
var trigger = (target, key) => {
|
|
95
82
|
if (!pauseTracking && target._d && target._d[key]) {
|
|
96
83
|
var effects = target._d[key].slice();
|
|
97
|
-
|
|
84
|
+
var i = 0, len = effects.length;
|
|
85
|
+
for (; i < len; i++) {
|
|
98
86
|
var effect = effects[i];
|
|
99
87
|
effect.sched ? effect.sched(effect) : effect();
|
|
100
88
|
}
|
|
@@ -102,7 +90,8 @@ var spiki = (() => {
|
|
|
102
90
|
};
|
|
103
91
|
|
|
104
92
|
var cleanup = (runner) => {
|
|
105
|
-
|
|
93
|
+
var i = runner.deps.length;
|
|
94
|
+
while (i--) {
|
|
106
95
|
var list = runner.deps[i];
|
|
107
96
|
var idx = list.indexOf(runner);
|
|
108
97
|
if (idx !== -1) {
|
|
@@ -118,11 +107,7 @@ var spiki = (() => {
|
|
|
118
107
|
cleanup(runner);
|
|
119
108
|
var prev = activeEffect;
|
|
120
109
|
activeEffect = runner;
|
|
121
|
-
try {
|
|
122
|
-
fn();
|
|
123
|
-
} finally {
|
|
124
|
-
activeEffect = prev;
|
|
125
|
-
}
|
|
110
|
+
try { fn(); } finally { activeEffect = prev; }
|
|
126
111
|
};
|
|
127
112
|
runner.deps = [];
|
|
128
113
|
runner.sched = sched;
|
|
@@ -139,20 +124,20 @@ var spiki = (() => {
|
|
|
139
124
|
if (key === '_y') return true;
|
|
140
125
|
if (key === '_d') return target._d;
|
|
141
126
|
if (Array.isArray(target) && arrInst.hasOwnProperty(key)) return arrInst[key];
|
|
142
|
-
|
|
127
|
+
var desc = Object.getOwnPropertyDescriptor(target, key);
|
|
128
|
+
if (desc && desc.get) {
|
|
129
|
+
var cacheKey = '_' + key;
|
|
130
|
+
if (!(cacheKey in target)) effect(() => receiver[cacheKey] = desc.get.call(receiver));
|
|
131
|
+
return receiver[cacheKey];
|
|
132
|
+
}
|
|
143
133
|
track(target, key);
|
|
144
134
|
var res = Reflect.get(target, key, receiver);
|
|
145
|
-
return (res && typeof res === 'object' && !(res instanceof Node))
|
|
146
|
-
? makeReactive(res)
|
|
147
|
-
: res;
|
|
135
|
+
return (res && typeof res === 'object' && !(res instanceof Node)) ? makeReactive(res) : res;
|
|
148
136
|
},
|
|
149
137
|
set: (target, key, val, receiver) => {
|
|
150
138
|
var old = target[key];
|
|
151
139
|
var isArr = Array.isArray(target);
|
|
152
|
-
var hadKey = isArr
|
|
153
|
-
? Number(key) < target.length
|
|
154
|
-
: Object.prototype.hasOwnProperty.call(target, key);
|
|
155
|
-
|
|
140
|
+
var hadKey = isArr ? Number(key) < target.length : Object.prototype.hasOwnProperty.call(target, key);
|
|
156
141
|
if (!isArr && !hadKey) {
|
|
157
142
|
var proto = Object.getPrototypeOf(target);
|
|
158
143
|
while (proto && proto !== Object.prototype) {
|
|
@@ -164,7 +149,6 @@ var spiki = (() => {
|
|
|
164
149
|
proto = Object.getPrototypeOf(proto);
|
|
165
150
|
}
|
|
166
151
|
}
|
|
167
|
-
|
|
168
152
|
var res = Reflect.set(target, key, val, receiver);
|
|
169
153
|
if (!pauseTracking && res) {
|
|
170
154
|
if (!hadKey || val !== old) {
|
|
@@ -200,53 +184,36 @@ var spiki = (() => {
|
|
|
200
184
|
// -------------------------------------------------------------------------
|
|
201
185
|
// 3. DOM & COMPONENT ENGINE
|
|
202
186
|
// -------------------------------------------------------------------------
|
|
203
|
-
var domOps =
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
if (
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
: el.classList.add(c);
|
|
234
|
-
}
|
|
235
|
-
} else if (val) {
|
|
236
|
-
for (var cls in val) {
|
|
237
|
-
var add = !!val[cls];
|
|
238
|
-
if (cls.indexOf(' ') !== -1) {
|
|
239
|
-
var parts = cls.split(/\s+/);
|
|
240
|
-
for (var j=0; j<parts.length; j++) {
|
|
241
|
-
if(parts[j]) el.classList.toggle(parts[j], add);
|
|
242
|
-
}
|
|
243
|
-
} else {
|
|
244
|
-
el.classList.toggle(cls, add);
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
},
|
|
249
|
-
effect: () => {}
|
|
187
|
+
var domOps = Object.create(null);
|
|
188
|
+
domOps.text = (el, val) => {
|
|
189
|
+
val = val == null ? '' : val;
|
|
190
|
+
if (el.textContent !== String(val)) el.textContent = val;
|
|
191
|
+
};
|
|
192
|
+
domOps.html = (el, val) => {
|
|
193
|
+
if (el.innerHTML != val) el.innerHTML = val == null ? '' : val;
|
|
194
|
+
};
|
|
195
|
+
domOps.value = (el, val) => {
|
|
196
|
+
if (el.type === 'checkbox') el.checked = !!val;
|
|
197
|
+
else if (el.type === 'radio') el.checked = (el.value == val);
|
|
198
|
+
else if (el.value != val) el.value = val == null ? '' : val;
|
|
199
|
+
};
|
|
200
|
+
domOps.attr = (el, val, name) => {
|
|
201
|
+
if (val == null || val === false) el.removeAttribute(name);
|
|
202
|
+
else {
|
|
203
|
+
var str = val === true ? '' : String(val);
|
|
204
|
+
if (el.getAttribute(name) !== str) el.setAttribute(name, str);
|
|
205
|
+
}
|
|
206
|
+
};
|
|
207
|
+
domOps.class = (el, val) => {
|
|
208
|
+
var base = el._n || '';
|
|
209
|
+
var dyn = '';
|
|
210
|
+
if (typeof val === 'string') {
|
|
211
|
+
dyn = val;
|
|
212
|
+
} else if (val) {
|
|
213
|
+
for (var k in val) if (val[k]) dyn += (dyn ? ' ' : '') + k;
|
|
214
|
+
}
|
|
215
|
+
var res = base + (base && dyn ? ' ' : '') + dyn;
|
|
216
|
+
if (el.className !== res) el.className = res;
|
|
250
217
|
};
|
|
251
218
|
|
|
252
219
|
var mount = (rootElement, parentScope) => {
|
|
@@ -270,19 +237,40 @@ var spiki = (() => {
|
|
|
270
237
|
|
|
271
238
|
var handle = (event) => {
|
|
272
239
|
var target = event.target;
|
|
273
|
-
|
|
274
|
-
|
|
240
|
+
if (event.type === 'input' && target._c) return;
|
|
241
|
+
var limit = rootElement.parentNode;
|
|
242
|
+
var type = event.type;
|
|
243
|
+
|
|
244
|
+
while (target && target !== limit) {
|
|
245
|
+
var handlers = target._h && target._h[type];
|
|
246
|
+
|
|
275
247
|
if (handlers) {
|
|
276
|
-
|
|
248
|
+
var scope = target._s;
|
|
249
|
+
var i = handlers.length;
|
|
250
|
+
while (i--) {
|
|
277
251
|
var handler = handlers[i];
|
|
252
|
+
var path = handler.p;
|
|
253
|
+
|
|
278
254
|
if (handler.model) {
|
|
279
255
|
var val = target.type === 'checkbox' ? target.checked : target.value;
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
256
|
+
if (typeof val === 'string') {
|
|
257
|
+
var clean = val.trim();
|
|
258
|
+
if (clean && isFinite(clean)) {
|
|
259
|
+
if (clean.charCodeAt(0) !== 48 || clean.length === 1 || clean.charCodeAt(1) === 46) {
|
|
260
|
+
val = Number(clean);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
if (typeof path === 'string') {
|
|
265
|
+
if (scope) scope[path] = val;
|
|
266
|
+
} else {
|
|
267
|
+
var ctx = scope;
|
|
268
|
+
var k = 0, kLen = path.length - 1;
|
|
269
|
+
while (k < kLen && ctx) ctx = ctx[path[k++]];
|
|
270
|
+
if (ctx) ctx[path[kLen]] = val;
|
|
283
271
|
}
|
|
284
272
|
} else {
|
|
285
|
-
var result = evalPath(
|
|
273
|
+
var result = evalPath(scope, path);
|
|
286
274
|
if (typeof result.val === 'function') result.val.call(result.ctx, event);
|
|
287
275
|
}
|
|
288
276
|
}
|
|
@@ -311,21 +299,22 @@ var spiki = (() => {
|
|
|
311
299
|
var directiveFor = !directiveIf && el.tagName === 'TEMPLATE' && el.getAttribute('s-for');
|
|
312
300
|
var bindings = [];
|
|
313
301
|
|
|
302
|
+
if (el.hasAttribute('class') && !el._n) el._n = el.className;
|
|
303
|
+
|
|
314
304
|
if (directiveIf) {
|
|
315
305
|
var end = document.createTextNode('');
|
|
316
306
|
var active = null;
|
|
317
307
|
var cBranch = [];
|
|
318
|
-
|
|
319
308
|
el.replaceWith(end);
|
|
320
309
|
var negate = directiveIf[0] === '!';
|
|
321
310
|
var path = negate ? directiveIf.slice(1) : directiveIf;
|
|
311
|
+
var p = path.indexOf('.') === -1 ? path : path.split('.');
|
|
322
312
|
|
|
323
|
-
parentCleanups.push(() => { cBranch.forEach(
|
|
313
|
+
parentCleanups.push(() => { cBranch.forEach(c => c()); });
|
|
324
314
|
|
|
325
315
|
return parentCleanups.push(effect(() => {
|
|
326
|
-
var show = evalPath(scope,
|
|
316
|
+
var show = evalPath(scope, p).val;
|
|
327
317
|
if (negate) show = !show;
|
|
328
|
-
|
|
329
318
|
if (show) {
|
|
330
319
|
if (!active) {
|
|
331
320
|
active = el.cloneNode(true);
|
|
@@ -334,40 +323,38 @@ var spiki = (() => {
|
|
|
334
323
|
end.parentNode.insertBefore(active, end);
|
|
335
324
|
}
|
|
336
325
|
} else if (active) {
|
|
337
|
-
cBranch.forEach(
|
|
338
|
-
cBranch = [];
|
|
339
|
-
active.remove();
|
|
340
|
-
active = null;
|
|
326
|
+
cBranch.forEach(c => c()); cBranch = []; active.remove(); active = null;
|
|
341
327
|
}
|
|
342
328
|
}, nextTick));
|
|
343
329
|
}
|
|
344
330
|
|
|
345
331
|
if (directiveFor) {
|
|
346
|
-
var
|
|
347
|
-
if (
|
|
348
|
-
var
|
|
349
|
-
var
|
|
350
|
-
var
|
|
351
|
-
var
|
|
332
|
+
var inIdx = directiveFor.indexOf(' in ');
|
|
333
|
+
if (inIdx !== -1) {
|
|
334
|
+
var leftSide = directiveFor.slice(0, inIdx).trim();
|
|
335
|
+
var listKey = directiveFor.slice(inIdx + 4).trim();
|
|
336
|
+
var leftParts = leftSide.replace(/[()]/g, '').split(',');
|
|
337
|
+
var alias = leftParts[0].trim();
|
|
338
|
+
var idxAlias = leftParts[1] ? leftParts[1].trim() : null;
|
|
339
|
+
var listPath = listKey.indexOf('.') === -1 ? listKey : listKey.split('.');
|
|
352
340
|
var keyAttr = el.getAttribute('s-key');
|
|
341
|
+
var keyPath = keyAttr ? (keyAttr.indexOf('.') === -1 ? keyAttr : keyAttr.split('.')) : null;
|
|
342
|
+
|
|
353
343
|
var end = document.createTextNode('');
|
|
354
344
|
var nodePool = Object.create(null);
|
|
355
345
|
var usedKeys;
|
|
356
|
-
|
|
357
346
|
el.replaceWith(end);
|
|
358
347
|
|
|
359
348
|
parentCleanups.push(() => {
|
|
360
|
-
for(var
|
|
349
|
+
for(var k in nodePool) nodePool[k].cleanups.forEach(c => c());
|
|
361
350
|
});
|
|
362
351
|
|
|
363
352
|
return parentCleanups.push(effect(() => {
|
|
364
|
-
var list = evalPath(scope,
|
|
353
|
+
var list = evalPath(scope, listPath).val || [];
|
|
365
354
|
if (Array.isArray(list)) track(list, 'length');
|
|
366
|
-
|
|
367
355
|
var frag = document.createDocumentFragment();
|
|
368
356
|
var cursor = end;
|
|
369
357
|
usedKeys = Object.create(null);
|
|
370
|
-
|
|
371
358
|
var isArr = Array.isArray(list);
|
|
372
359
|
var keys = isArr ? list : Object.keys(list);
|
|
373
360
|
var len = isArr ? list.length : keys.length;
|
|
@@ -375,18 +362,12 @@ var spiki = (() => {
|
|
|
375
362
|
for (var i = 0; i < len; i++) {
|
|
376
363
|
var key = isArr ? i : keys[i];
|
|
377
364
|
var item = isArr ? list[i] : list[key];
|
|
378
|
-
|
|
379
365
|
var unique;
|
|
380
|
-
if (item == null || typeof item !== 'object')
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
unique = evalPath(item, keyAttr).val;
|
|
384
|
-
} else {
|
|
385
|
-
unique = String(key) + '_o';
|
|
386
|
-
}
|
|
366
|
+
if (item == null || typeof item !== 'object') unique = String(item);
|
|
367
|
+
else if (keyPath) unique = evalPath(item, keyPath).val;
|
|
368
|
+
else unique = String(key) + '_o';
|
|
387
369
|
|
|
388
370
|
if (usedKeys[unique]) unique += '_' + i;
|
|
389
|
-
|
|
390
371
|
var row = nodePool[unique];
|
|
391
372
|
if (row) {
|
|
392
373
|
row.scope[alias] = item;
|
|
@@ -394,19 +375,13 @@ var spiki = (() => {
|
|
|
394
375
|
} else {
|
|
395
376
|
var clone = el.content.cloneNode(true);
|
|
396
377
|
var rowScope = makeReactive(Object.create(scope));
|
|
397
|
-
|
|
398
|
-
rowScope[alias] = item;
|
|
399
|
-
if (idxAlias) rowScope[idxAlias] = key;
|
|
400
|
-
|
|
378
|
+
rowScope[alias] = item; if (idxAlias) rowScope[idxAlias] = key;
|
|
401
379
|
var rowNodes = Array.prototype.slice.call(clone.childNodes);
|
|
402
380
|
var rowCleanups = [];
|
|
403
|
-
|
|
404
381
|
for(var n=0; n<rowNodes.length; n++) walk(rowNodes[n], rowScope, rowCleanups);
|
|
405
|
-
|
|
406
382
|
row = { nodes: rowNodes, scope: rowScope, cleanups: rowCleanups };
|
|
407
383
|
nodePool[unique] = row;
|
|
408
384
|
}
|
|
409
|
-
|
|
410
385
|
if (row.nodes[0] !== cursor.nextSibling) {
|
|
411
386
|
for(var n=0; n<row.nodes.length; n++) frag.appendChild(row.nodes[n]);
|
|
412
387
|
cursor.parentNode.insertBefore(frag, cursor.nextSibling);
|
|
@@ -414,13 +389,10 @@ var spiki = (() => {
|
|
|
414
389
|
cursor = row.nodes[row.nodes.length-1];
|
|
415
390
|
usedKeys[unique] = true;
|
|
416
391
|
}
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
for(var n=0; n<nodePool[key].nodes.length; n++) nodePool[key].nodes[n].remove();
|
|
422
|
-
delete nodePool[key];
|
|
423
|
-
}
|
|
392
|
+
for (var k in nodePool) if (!usedKeys[k]) {
|
|
393
|
+
nodePool[k].cleanups.forEach(c => c());
|
|
394
|
+
nodePool[k].nodes.forEach(n => n.remove());
|
|
395
|
+
delete nodePool[k];
|
|
424
396
|
}
|
|
425
397
|
}, nextTick));
|
|
426
398
|
}
|
|
@@ -428,45 +400,57 @@ var spiki = (() => {
|
|
|
428
400
|
|
|
429
401
|
if (el.hasAttributes()) {
|
|
430
402
|
var attrs = el.attributes;
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
var
|
|
403
|
+
var i = attrs.length;
|
|
404
|
+
while (i--) {
|
|
405
|
+
var attr = attrs[i];
|
|
406
|
+
var attrName = attr.name;
|
|
407
|
+
var attrValue = attr.value;
|
|
434
408
|
|
|
435
|
-
if (attrName
|
|
409
|
+
if (attrName.charCodeAt(0) === 58) {
|
|
436
410
|
var realName = attrName.slice(1);
|
|
437
|
-
var neg = attrValue
|
|
438
|
-
|
|
439
|
-
|
|
411
|
+
var neg = attrValue.charCodeAt(0) === 33;
|
|
412
|
+
var rawPath = neg ? attrValue.slice(1) : attrValue;
|
|
413
|
+
var p = rawPath.indexOf('.') === -1 ? rawPath : rawPath.split('.');
|
|
414
|
+
bindings.push({ type: 'attr', name: realName, path: p, neg: neg });
|
|
415
|
+
}
|
|
416
|
+
else if (attrName.charCodeAt(0) === 115 && attrName.charCodeAt(1) === 45) {
|
|
440
417
|
var type = attrName.slice(2);
|
|
418
|
+
var p = attrValue.indexOf('.') === -1 ? attrValue : attrValue.split('.');
|
|
419
|
+
|
|
441
420
|
if (type === 'init' || type === 'destroy') {
|
|
442
421
|
((type, path) => {
|
|
443
422
|
var result = evalPath(scope, path);
|
|
444
423
|
if (typeof result.val === 'function') {
|
|
445
|
-
if (type === 'init')
|
|
446
|
-
|
|
447
|
-
} else {
|
|
448
|
-
parentCleanups.push(() => result.val.call(result.ctx, el));
|
|
449
|
-
}
|
|
424
|
+
if (type === 'init') nextTick(() => result.val.call(result.ctx, el));
|
|
425
|
+
else parentCleanups.push(() => result.val.call(result.ctx, el));
|
|
450
426
|
}
|
|
451
|
-
})(type,
|
|
452
|
-
}
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
427
|
+
})(type, p);
|
|
428
|
+
}
|
|
429
|
+
else if (type === 'effect') {
|
|
430
|
+
parentCleanups.push(effect(() => {
|
|
431
|
+
var res = evalPath(scope, p);
|
|
432
|
+
if (typeof res.val === 'function') res.val.call(res.ctx, el);
|
|
433
|
+
}, nextTick));
|
|
434
|
+
}
|
|
435
|
+
else if (type === 'model') {
|
|
436
|
+
bindings.push({ type: 'value', path: p });
|
|
437
|
+
el._s = scope; el._h = el._h || {};
|
|
438
|
+
var evt = (el.type === 'checkbox' || el.type === 'radio' || el.tagName==='SELECT') ? 'change' : 'input';
|
|
439
|
+
|
|
440
|
+
if (evt === 'input') {
|
|
441
|
+
el.addEventListener('compositionstart', () => el._c = true);
|
|
442
|
+
el.addEventListener('compositionend', () => { el._c = false; handle({target: el, type: 'input'}); });
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
(el._h[evt] = el._h[evt] || []).unshift({ model: true, p: p });
|
|
461
446
|
addListen(evt);
|
|
462
447
|
} else if (type === 'ref') {
|
|
463
448
|
state.$refs[attrValue] = el;
|
|
464
449
|
} else if (domOps[type]) {
|
|
465
|
-
bindings.push({ type: type, path:
|
|
450
|
+
bindings.push({ type: type, path: p });
|
|
466
451
|
} else {
|
|
467
|
-
el._s = scope;
|
|
468
|
-
el._h = el._h || {};
|
|
469
|
-
(el._h[type] = el._h[type] || []).push({ path: attrValue });
|
|
452
|
+
el._s = scope; el._h = el._h || {};
|
|
453
|
+
(el._h[type] = el._h[type] || []).push({ p: p });
|
|
470
454
|
addListen(type);
|
|
471
455
|
}
|
|
472
456
|
}
|
|
@@ -475,18 +459,16 @@ var spiki = (() => {
|
|
|
475
459
|
|
|
476
460
|
if (bindings.length) {
|
|
477
461
|
parentCleanups.push(effect(() => {
|
|
478
|
-
|
|
462
|
+
var i = bindings.length;
|
|
463
|
+
while (i--) {
|
|
479
464
|
var binding = bindings[i];
|
|
480
465
|
var result = evalPath(scope, binding.path);
|
|
481
466
|
var val = (result.val && typeof result.val === 'function') ? result.val.call(result.ctx, el) : result.val;
|
|
482
467
|
|
|
483
468
|
if (binding.type === 'attr') {
|
|
484
469
|
if (binding.neg) val = !val;
|
|
485
|
-
if (binding.name === 'class')
|
|
486
|
-
|
|
487
|
-
} else {
|
|
488
|
-
domOps.attr(el, val, binding.name);
|
|
489
|
-
}
|
|
470
|
+
if (binding.name === 'class') domOps.class(el, val);
|
|
471
|
+
else domOps.attr(el, val, binding.name);
|
|
490
472
|
} else {
|
|
491
473
|
domOps[binding.type](el, val);
|
|
492
474
|
}
|
|
@@ -508,7 +490,7 @@ var spiki = (() => {
|
|
|
508
490
|
return {
|
|
509
491
|
unmount: () => {
|
|
510
492
|
if (state.destroy) state.destroy.call(state);
|
|
511
|
-
cleanups.forEach(
|
|
493
|
+
cleanups.forEach(c => c());
|
|
512
494
|
for(var k in listeners) rootElement.removeEventListener(k, handle);
|
|
513
495
|
rootElement._m = false;
|
|
514
496
|
}
|
|
@@ -519,7 +501,8 @@ var spiki = (() => {
|
|
|
519
501
|
data: (name, factory) => { cmpReg[name] = factory; },
|
|
520
502
|
start: () => {
|
|
521
503
|
var els = document.querySelectorAll('[s-data]');
|
|
522
|
-
|
|
504
|
+
var i = els.length;
|
|
505
|
+
while (i--) mount(els[i]);
|
|
523
506
|
},
|
|
524
507
|
store: (k, v) => v === undefined ? globalStore[k] : (globalStore[k] = v),
|
|
525
508
|
raw: (o) => (o && o._p) || o
|
package/spiki.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(()=>{"use strict";var
|
|
1
|
+
(()=>{"use strict";var r=(()=>{var L=Object,$=Array,s=Reflect,r=Promise,o=Node,q=document,j="length",D="value",F="push",K="forEach",M="indexOf",B="split",H="slice",R="call",i="get",W="prototype",f="hasOwnProperty",p="getPrototypeOf",t="defineProperty",z="create",G="isArray",I="getAttribute",J="removeAttribute",Q="hasAttribute",U="tagName",V="type",X="name",c="checked",Y="parentNode",Z="nextSibling",a="textContent",n="innerHTML",rr="replaceWith",er="insertBefore",tr="cloneNode",ar="remove",nr="createTextNode",or="addEventListener",ir="input",lr="checkbox",vr="function",sr="class",fr="object",pr="unshift",ur="trim",cr="cleanups",dr="nodes",l="deps",_r="className",yr="destroy",hr="init",mr="charCodeAt",v="sched",u=L[z](null),d=[],_=!1,y=null,h=!1,e=r.resolve(),gr=r=>{r._q||(r._q=!0,d[F](r),_||(_=!0,e.then(()=>{var r=d;_=!(d=[]);for(var e=r[j];e--;)r[e]._q=!1,r[e]()})))},br=(r,e)=>{if("string"==typeof e)return{ctx:r,val:r?r[e]:void 0};for(var t=0,a=e[j];t<a-1&&r;)r=r[e[t++]];return{ctx:r,val:r?r[e[a-1]]:void 0}},m={};[F,"pop","shift",pr,"splice","sort","reverse"][K](r=>{m[r]=function(){h=!0;try{return $[W][r].apply(this,arguments)}finally{h=!1,g(this,j)}}});var xr=(r,e)=>{!y||-1===(e=(r=r._d||(L[t](r,"_d",{value:L[z](null),writable:!0}),r._d))[e]||(r[e]=[]))[M](y)&&(e[F](y),y[l][F](e))},g=(r,e)=>{if(!h&&r._d&&r._d[e])for(var t=r._d[e][H](),a=0,n=t[j];a<n;a++){var o=t[a];o[v]?o[v](o):o()}},b=r=>{for(var e=r[l][j];e--;){var t=r[l][e],a=t[M](r);-1!==a&&(t[a]=t[t[j]-1],t.pop())}r[l]=[]},Ar=(e,r)=>{var t=()=>{b(t);var r=y;y=t;try{e()}finally{y=r}};return t[l]=[],t[v]=r,t(),()=>b(t)},Pr=r=>{if(!r||typeof r!=fr||r._y||r instanceof o)return r;if(r._p)return r._p;var e=new Proxy(r,{get:(r,e,t)=>{if("_y"===e)return!0;if("_d"===e)return r._d;if($[G](r)&&m[f](e))return m[e];var a=L.getOwnPropertyDescriptor(r,e);if(a&&a[i]){var n="_"+e;return n in r||Ar(()=>t[n]=a[i][R](t)),t[n]}return xr(r,e),!(e=s[i](r,e,t))||typeof e!=fr||e instanceof o?e:Pr(e)},set:(r,e,t,a)=>{var n=r[e],o=$[G](r),i=o?Number(e)<r[j]:L[W][f][R](r,e);if(!o&&!i)for(var l=L[p](r);l&&l!==L[W];){if(L[W][f][R](l,e)){var v=s.set(l,e,t);return h||t===n||g(r,e),v}l=L[p](l)}return v=s.set(r,e,t,a),!h&&v&&(i&&t===n||(g(r,e),o?g(r,j):i||g(r,"_k"))),v},deleteProperty:(r,e)=>{var t=L[W][f][R](r,e),a=s.deleteProperty(r,e);return a&&t&&(g(r,e),$[G](r)?g(r,j):g(r,"_k")),a},ownKeys:r=>(xr(r,"_k"),s.ownKeys(r))});return L[t](r,"_p",{value:e,enumerable:!1}),e},x=Pr({}),wr=L[z](null);wr.text=(r,e)=>{e=null==e?"":e,r[a]!==String(e)&&(r[a]=e)},wr.html=(r,e)=>{r[n]!=e&&(r[n]=null==e?"":e)},wr[D]=(r,e)=>{r[V]===lr?r[c]=!!e:"radio"===r[V]?r[c]=r[D]==e:r[D]!=e&&(r[D]=null==e?"":e)},wr.attr=(r,e,t)=>{null==e||!1===e?r[J](t):(e=!0===e?"":String(e),r[I](t)!==e&&r.setAttribute(t,e))},wr[sr]=(r,e)=>{var t=r._n||"",a="";if("string"==typeof e)a=e;else if(e)for(var n in e)e[n]&&(a+=(a?" ":"")+n);t=t+(t&&a?" ":"")+a,r[_r]!==t&&(r[_r]=t)};var Nr=(E,r)=>{if(!E._m){var e=E[I]("s-data");if(u[e]){E._m=!0,e=u[e](),r&&L.setPrototypeOf(e,r);var S=Pr(e);S.$refs={},S.$root=E,S.$store=x,S.$parent=r;var t=[],a=L[z](null),O=r=>{var e=r.target;if(r[V]!==ir||!e._c)for(var t=E[Y],a=r[V];e&&e!==t;){var n=e._h&&e._h[a];if(n)for(var o=e._s,i=n[j];i--;){var l=n[i],v=l.p;if(l.model){var s=e[V]===lr?e[c]:e[D];if("string"!=typeof s||(l=s[ur]())&&isFinite(l)&&(48===l[mr](0)&&1!==l[j]&&46!==l[mr](1)||(s=Number(l))),"string"==typeof v)o&&(o[v]=s);else{for(var f=o,p=0,u=v[j]-1;p<u&&f;)f=f[v[p++]];f&&(f[v[u]]=s)}}else typeof(s=br(o,v)).val==vr&&s.val[R](s.ctx,r)}e=e[Y]}},T=r=>{a[r]||(a[r]=!0,E[or](r,O))},C=(h,m,t)=>{if(1===h.nodeType&&!h[Q]("s-ignore"))if(h!==E&&h[Q]("s-data"))(r=Nr(h,m))&&t[F](r.unmount);else{var r=!(v=h[I]("s-if"))&&"TEMPLATE"===h[U]&&h[I]("s-for"),a=[];if(h[Q](sr)&&!h._n&&(h._n=h[_r]),v){var g=q[nr](""),e=null,n=[];h[rr](g);var o="!"===v[0],i=-1===(l=o?v[H](1):v)[M](".")?l:l[B](".");return t[F](()=>{n[K](r=>r())}),t[F](Ar(()=>{var r=br(m,i).val;o&&(r=!r),r?e||((e=h[tr](!0))[J]("s-if"),C(e,m,n),g[Y][er](e,g)):e&&(n[K](r=>r()),n=[],e[ar](),e=null)},gr))}if(r&&-1!==(v=r[M](" in "))){var b,l=r[H](0,v)[ur](),v=r[H](v+4)[ur](),x=(l=l.replace(/[()]/g,"")[B](","))[0][ur](),A=l[1]?l[1][ur]():null,P=-1===v[M](".")?v:v[B]("."),w=(v=h[I]("s-key"))?-1===v[M](".")?v:v[B]("."):null,g=q[nr](""),N=L[z](null);return h[rr](g),t[F](()=>{for(var r in N)N[r][cr][K](r=>r())}),t[F](Ar(()=>{var r=br(m,P).val||[];$[G](r)&&xr(r,j);var e=q.createDocumentFragment(),t=g;b=L[z](null);for(var a,n=$[G](r),o=n?r:L.keys(r),i=(n?r:o)[j],l=0;l<i;l++){var v=n?l:o[l],s=n?r[l]:r[v],f=null==s||typeof s!=fr?String(s):w?br(s,w).val:String(v)+"_o";b[f]&&(f+="_"+l);var p=N[f];if(p)p.scope[x]=s,A&&(p.scope[A]=v);else{var u=h.content[tr](!0),c=Pr(L[z](m));c[x]=s,A&&(c[A]=v);for(var d=$[W][H][R](u.childNodes),_=[],y=0;y<d[j];y++)C(d[y],c,_);p={nodes:d,scope:c,cleanups:_},N[f]=p}if(p[dr][0]!==t[Z]){for(y=0;y<p[dr][j];y++)e.appendChild(p[dr][y]);t[Y][er](e,t[Z])}t=p[dr][p[dr][j]-1],b[f]=!0}for(a in N)b[a]||(N[a][cr][K](r=>r()),N[a][dr][K](r=>r[ar]()),delete N[a])},gr))}if(h.hasAttributes())for(var s=h.attributes,f=s[j];f--;){var p,u,c=s[f],d=c[X],_=c[D];58===d[mr](0)?(p=d[H](1),c=(u=33===_[mr](0))?_[H](1):_,i=-1===c[M](".")?c:c[B]("."),a[F]({type:"attr",name:p,path:i,neg:u})):115===d[mr](0)&&45===d[mr](1)&&(u=d[H](2),i=-1===_[M](".")?_:_[B]("."),u===hr||u===yr?(r=>{var e=br(m,i);typeof e.val==vr&&(r===hr?gr(()=>e.val[R](e.ctx,h)):t[F](()=>e.val[R](e.ctx,h)))})(u):"effect"===u?t[F](Ar(()=>{var r=br(m,i);typeof r.val==vr&&r.val[R](r.ctx,h)},gr)):"model"===u?(a[F]({type:D,path:i}),h._s=m,h._h=h._h||{},(d=h[V]===lr||"radio"===h[V]||"SELECT"===h[U]?"change":ir)==ir&&(h[or]("compositionstart",()=>h._c=!0),h[or]("compositionend",()=>{h._c=!1,O({target:h,type:ir})})),(h._h[d]=h._h[d]||[])[pr]({model:!0,p:i}),T(d)):"ref"===u?S.$refs[_]=h:wr[u]?a[F]({type:u,path:i}):(h._s=m,h._h=h._h||{},(h._h[u]=h._h[u]||[])[F]({p:i}),T(u)))}a[j]&&t[F](Ar(()=>{for(var r=a[j];r--;){var e=a[r],t=(t=br(m,e.path)).val&&typeof t.val==vr?t.val[R](t.ctx,h):t.val;"attr"===e[V]?(e.neg&&(t=!t),e[X]===sr?wr[sr](h,t):wr.attr(h,t,e[X])):wr[e[V]](h,t)}},gr));for(var y=h.firstChild;y;){var k=y[Z];C(y,m,t),y=k}}};return C(E,S,t),S[hr]&&S[hr](),{unmount:()=>{for(var r in S[yr]&&S[yr][R](S),t[K](r=>r()),a)E.removeEventListener(r,O);E._m=!1}}}}};return{data:(r,e)=>{u[r]=e},start:()=>{for(var r=q.querySelectorAll("[s-data]"),e=r[j];e--;)Nr(r[e])},store:(r,e)=>void 0===e?x[r]:x[r]=e,raw:r=>r&&r._p||r}})();window.spiki=r})();
|