aberdeen 1.16.1 → 1.17.1
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/dist/src/aberdeen.js +82 -12
- package/dist/src/aberdeen.js.map +3 -3
- package/dist/tests/fakedom.js +3 -2
- package/dist/tests/fakedom.js.map +3 -3
- package/dist/tests/helpers.js +3 -2
- package/dist/tests/helpers.js.map +3 -3
- package/dist-docs/Tutorial/index.html +2 -2
- package/dist-docs/aberdeen/A/index.html +2 -2
- package/dist-docs/aberdeen/CUSTOM_DUMP/index.html +2 -2
- package/dist-docs/aberdeen/NO_COPY/index.html +2 -2
- package/dist-docs/aberdeen/OPAQUE/index.html +2 -2
- package/dist-docs/aberdeen/PromiseProxy/index.html +5 -5
- package/dist-docs/aberdeen/clean/index.html +2 -2
- package/dist-docs/aberdeen/clone/index.html +2 -2
- package/dist-docs/aberdeen/copy/index.html +3 -3
- package/dist-docs/aberdeen/count/index.html +2 -2
- package/dist-docs/aberdeen/cssVars/index.html +2 -2
- package/dist-docs/aberdeen/darkMode/index.html +2 -2
- package/dist-docs/aberdeen/default/index.html +2 -2
- package/dist-docs/aberdeen/derive/index.html +2 -2
- package/dist-docs/aberdeen/disableCreateDestroy/index.html +2 -2
- package/dist-docs/aberdeen/dump/index.html +2 -2
- package/dist-docs/aberdeen/index.html +2 -2
- package/dist-docs/aberdeen/insertCss/index.html +2 -2
- package/dist-docs/aberdeen/insertGlobalCss/index.html +2 -2
- package/dist-docs/aberdeen/invertString/index.html +2 -2
- package/dist-docs/aberdeen/isEmpty/index.html +2 -2
- package/dist-docs/aberdeen/map/index.html +4 -4
- package/dist-docs/aberdeen/merge/index.html +3 -3
- package/dist-docs/aberdeen/mount/index.html +2 -2
- package/dist-docs/aberdeen/multiMap/index.html +4 -4
- package/dist-docs/aberdeen/onEach/index.html +2 -2
- package/dist-docs/aberdeen/partition/index.html +4 -4
- package/dist-docs/aberdeen/peek/index.html +5 -5
- package/dist-docs/aberdeen/proxy/index.html +2 -2
- package/dist-docs/aberdeen/ref/index.html +2 -2
- package/dist-docs/aberdeen/runQueue/index.html +2 -2
- package/dist-docs/aberdeen/setErrorHandler/index.html +2 -2
- package/dist-docs/aberdeen/setSpacingCssVars/index.html +2 -2
- package/dist-docs/aberdeen/unmountAll/index.html +2 -2
- package/dist-docs/aberdeen/unproxy/index.html +2 -2
- package/dist-docs/assets/aberdeen/aberdeen.js +82 -12
- package/dist-docs/assets/aberdeen/aberdeen.js.map +3 -3
- package/dist-docs/dispatcher/Dispatcher/index.html +4 -4
- package/dist-docs/dispatcher/MATCH_FAILED/index.html +2 -2
- package/dist-docs/dispatcher/MATCH_REST/index.html +2 -2
- package/dist-docs/dispatcher/index.html +2 -2
- package/dist-docs/hierarchy.html +1 -1
- package/dist-docs/index.html +2 -2
- package/dist-docs/media/CHANGELOG.md +8 -0
- package/dist-docs/modules.html +1 -1
- package/dist-docs/prediction/applyCanon/index.html +2 -2
- package/dist-docs/prediction/applyPrediction/index.html +2 -2
- package/dist-docs/prediction/index.html +2 -2
- package/dist-docs/route/Route/index.html +9 -9
- package/dist-docs/route/back/index.html +2 -2
- package/dist-docs/route/current/index.html +2 -2
- package/dist-docs/route/go/index.html +2 -2
- package/dist-docs/route/index.html +2 -2
- package/dist-docs/route/interceptLinks/index.html +2 -2
- package/dist-docs/route/matchCurrent/index.html +2 -2
- package/dist-docs/route/persistScroll/index.html +2 -2
- package/dist-docs/route/push/index.html +2 -2
- package/dist-docs/route/setLog/index.html +2 -2
- package/dist-docs/route/up/index.html +2 -2
- package/dist-docs/sitemap.xml +59 -59
- package/dist-docs/transitions/grow/index.html +2 -2
- package/dist-docs/transitions/index.html +2 -2
- package/dist-docs/transitions/shrink/index.html +2 -2
- package/package.json +1 -1
- package/skill/aberdeen.md +54 -54
- package/skill/dispatcher.md +6 -6
- package/skill/prediction.md +3 -3
- package/skill/route.md +18 -18
- package/skill/transitions.md +3 -3
- package/src/aberdeen.ts +104 -10
package/dist/src/aberdeen.js
CHANGED
|
@@ -102,6 +102,33 @@ class ReverseSortedSet {
|
|
|
102
102
|
var sortedQueue;
|
|
103
103
|
var runQueueDepth = 0;
|
|
104
104
|
var topRedrawScope;
|
|
105
|
+
var survivingEl;
|
|
106
|
+
function recordSideEffect(scope, type, key, value) {
|
|
107
|
+
(scope.sideEffects ||= []).push(type, key, value);
|
|
108
|
+
}
|
|
109
|
+
function undoSideEffects(el, se) {
|
|
110
|
+
for (let i = se.length - 3;i >= 0; i -= 3) {
|
|
111
|
+
const key = se[i + 1];
|
|
112
|
+
const value = se[i + 2];
|
|
113
|
+
switch (se[i]) {
|
|
114
|
+
case 0 /* Class */:
|
|
115
|
+
value ? el.classList.add(key) : el.classList.remove(key);
|
|
116
|
+
break;
|
|
117
|
+
case 1 /* Style */:
|
|
118
|
+
el.style[key] = value == null ? "" : value;
|
|
119
|
+
break;
|
|
120
|
+
case 2 /* Prop */:
|
|
121
|
+
el[key] = value;
|
|
122
|
+
break;
|
|
123
|
+
case 3 /* Attr */:
|
|
124
|
+
value == null ? el.removeAttribute(key) : el.setAttribute(key, value);
|
|
125
|
+
break;
|
|
126
|
+
case 4 /* Event */:
|
|
127
|
+
el.removeEventListener(key, value);
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
105
132
|
function queue(runner) {
|
|
106
133
|
if (!sortedQueue) {
|
|
107
134
|
sortedQueue = new ReverseSortedSet("prio");
|
|
@@ -166,7 +193,10 @@ class Scope {
|
|
|
166
193
|
const lastNode = this.getLastNode();
|
|
167
194
|
if (lastNode)
|
|
168
195
|
removeNodes(lastNode, this.getPrecedingNode());
|
|
196
|
+
const savedSurvivingEl = survivingEl;
|
|
197
|
+
survivingEl = this.el;
|
|
169
198
|
this.delete();
|
|
199
|
+
survivingEl = savedSurvivingEl;
|
|
170
200
|
}
|
|
171
201
|
}
|
|
172
202
|
|
|
@@ -181,6 +211,7 @@ class DelayedOneTimeRunner {
|
|
|
181
211
|
|
|
182
212
|
class ContentScope extends Scope {
|
|
183
213
|
cleaners;
|
|
214
|
+
sideEffects;
|
|
184
215
|
changes;
|
|
185
216
|
constructor(cleaners = []) {
|
|
186
217
|
super();
|
|
@@ -192,13 +223,21 @@ class ContentScope extends Scope {
|
|
|
192
223
|
return findLastNodeInPrevSiblings(this.lastChild);
|
|
193
224
|
}
|
|
194
225
|
delete() {
|
|
195
|
-
|
|
226
|
+
const cleaners = this.cleaners;
|
|
227
|
+
for (let i = cleaners.length - 1;i >= 0; i--) {
|
|
228
|
+
const cleaner = cleaners[i];
|
|
196
229
|
if (typeof cleaner === "function")
|
|
197
230
|
cleaner();
|
|
198
231
|
else
|
|
199
232
|
cleaner.delete(this);
|
|
200
233
|
}
|
|
201
234
|
this.cleaners.length = 0;
|
|
235
|
+
const se = this.sideEffects;
|
|
236
|
+
if (se) {
|
|
237
|
+
if (this.el === survivingEl)
|
|
238
|
+
undoSideEffects(this.el, se);
|
|
239
|
+
this.sideEffects = undefined;
|
|
240
|
+
}
|
|
202
241
|
sortedQueue?.remove(this);
|
|
203
242
|
this.lastChild = undefined;
|
|
204
243
|
}
|
|
@@ -322,7 +361,10 @@ class MountScope extends ContentScope {
|
|
|
322
361
|
}
|
|
323
362
|
delete() {
|
|
324
363
|
removeNodes(this.getLastNode(), this.getPrecedingNode());
|
|
364
|
+
const savedSurvivingEl = survivingEl;
|
|
365
|
+
survivingEl = this.el;
|
|
325
366
|
super.delete();
|
|
367
|
+
survivingEl = savedSurvivingEl;
|
|
326
368
|
}
|
|
327
369
|
remove() {
|
|
328
370
|
this.delete();
|
|
@@ -517,7 +559,10 @@ class OnEachItemScope extends ContentScope {
|
|
|
517
559
|
if (lastNode)
|
|
518
560
|
removeNodes(lastNode, this.getPrecedingNode());
|
|
519
561
|
}
|
|
562
|
+
const savedSurvivingEl = survivingEl;
|
|
563
|
+
survivingEl = this.el;
|
|
520
564
|
this.delete();
|
|
565
|
+
survivingEl = savedSurvivingEl;
|
|
521
566
|
this.lastChild = this;
|
|
522
567
|
topRedrawScope = this;
|
|
523
568
|
this.redraw();
|
|
@@ -572,7 +617,10 @@ class OnEachItemScope extends ContentScope {
|
|
|
572
617
|
this.parent.sortedSet.remove(this);
|
|
573
618
|
this.sortKey = undefined;
|
|
574
619
|
}
|
|
620
|
+
const savedSurvivingEl = survivingEl;
|
|
621
|
+
survivingEl = this.el;
|
|
575
622
|
this.delete();
|
|
623
|
+
survivingEl = savedSurvivingEl;
|
|
576
624
|
}
|
|
577
625
|
}
|
|
578
626
|
function addNode(el, node) {
|
|
@@ -1185,6 +1233,7 @@ var COPY_EMIT = 64;
|
|
|
1185
1233
|
var OPAQUE = Symbol("OPAQUE");
|
|
1186
1234
|
var NO_COPY = OPAQUE;
|
|
1187
1235
|
Promise.prototype[OPAQUE] = true;
|
|
1236
|
+
Node.prototype[OPAQUE] = true;
|
|
1188
1237
|
var cssVars = optProxy({});
|
|
1189
1238
|
function setSpacingCssVars(base = 1, unit = "rem") {
|
|
1190
1239
|
for (let i = 0;i <= 12; i++) {
|
|
@@ -1446,7 +1495,12 @@ function A(...args) {
|
|
|
1446
1495
|
nextPos = classEnd;
|
|
1447
1496
|
} else {
|
|
1448
1497
|
let className = arg.substring(nextPos + 1, classEnd);
|
|
1449
|
-
|
|
1498
|
+
const cls = className || args[++argIndex];
|
|
1499
|
+
if (!el.classList.contains(cls)) {
|
|
1500
|
+
if (el === currentScope.el)
|
|
1501
|
+
recordSideEffect(currentScope, 0 /* Class */, cls, false);
|
|
1502
|
+
el.classList.add(cls);
|
|
1503
|
+
}
|
|
1450
1504
|
nextPos = classEnd - 1;
|
|
1451
1505
|
}
|
|
1452
1506
|
}
|
|
@@ -1608,29 +1662,45 @@ function applyArg(el, key, value) {
|
|
|
1608
1662
|
}
|
|
1609
1663
|
} else if (key[0] === ".") {
|
|
1610
1664
|
const classes = key.substring(1).split(".");
|
|
1611
|
-
|
|
1612
|
-
|
|
1665
|
+
const list = el.classList;
|
|
1666
|
+
const desired = !!value;
|
|
1667
|
+
if (el === currentScope.el) {
|
|
1668
|
+
for (const cls of classes) {
|
|
1669
|
+
const had = list.contains(cls);
|
|
1670
|
+
if (had !== desired)
|
|
1671
|
+
recordSideEffect(currentScope, 0 /* Class */, cls, had);
|
|
1672
|
+
}
|
|
1673
|
+
}
|
|
1674
|
+
if (desired)
|
|
1675
|
+
list.add(...classes);
|
|
1613
1676
|
else
|
|
1614
|
-
|
|
1677
|
+
list.remove(...classes);
|
|
1615
1678
|
} else if (key[0] === "$") {
|
|
1616
1679
|
key = key.substring(1);
|
|
1617
1680
|
const val = value == null || value === false ? "" : typeof value === "string" ? cssVarRef(value) : String(value);
|
|
1618
1681
|
const expanded = CSS_SHORT[key] || key;
|
|
1619
|
-
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1682
|
+
const style = el.style;
|
|
1683
|
+
const setOwn = el === currentScope.el;
|
|
1684
|
+
const props = typeof expanded === "string" ? [expanded] : expanded;
|
|
1685
|
+
for (const prop of props) {
|
|
1686
|
+
const cm = toCamel(prop);
|
|
1687
|
+
if (setOwn)
|
|
1688
|
+
recordSideEffect(currentScope, 1 /* Style */, cm, style[cm]);
|
|
1689
|
+
style[cm] = val;
|
|
1624
1690
|
}
|
|
1625
1691
|
} else if (value == null) {} else if (key in SPECIAL_PROPS) {
|
|
1626
1692
|
SPECIAL_PROPS[key](el, value);
|
|
1627
1693
|
} else if (typeof value === "function") {
|
|
1628
1694
|
el.addEventListener(key, value);
|
|
1629
1695
|
if (el === currentScope.el)
|
|
1630
|
-
|
|
1696
|
+
recordSideEffect(currentScope, 4 /* Event */, key, value);
|
|
1631
1697
|
} else if (value === true || value === false || key === "value" || key === "selectedIndex") {
|
|
1698
|
+
if (el === currentScope.el)
|
|
1699
|
+
recordSideEffect(currentScope, 2 /* Prop */, key, el[key]);
|
|
1632
1700
|
el[key] = value;
|
|
1633
1701
|
} else {
|
|
1702
|
+
if (el === currentScope.el)
|
|
1703
|
+
recordSideEffect(currentScope, 3 /* Attr */, key, el.getAttribute(key));
|
|
1634
1704
|
el.setAttribute(key, value);
|
|
1635
1705
|
}
|
|
1636
1706
|
}
|
|
@@ -1905,5 +1975,5 @@ export {
|
|
|
1905
1975
|
A
|
|
1906
1976
|
};
|
|
1907
1977
|
|
|
1908
|
-
//# debugId=
|
|
1978
|
+
//# debugId=9CF256EC3117093364756E2164756E21
|
|
1909
1979
|
//# sourceMappingURL=aberdeen.js.map
|