unpoly-rails 3.7.3.1 → 3.8.0.rc1
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.
- checksums.yaml +4 -4
- data/assets/unpoly/unpoly-migrate.js +1 -0
- data/assets/unpoly/unpoly-migrate.min.js +1 -1
- data/assets/unpoly/unpoly.css +8 -0
- data/assets/unpoly/unpoly.es6.js +427 -360
- data/assets/unpoly/unpoly.es6.min.js +1 -1
- data/assets/unpoly/unpoly.js +426 -354
- data/assets/unpoly/unpoly.min.css +1 -1
- data/assets/unpoly/unpoly.min.js +1 -1
- data/lib/unpoly/rails/change.rb +3 -1
- data/lib/unpoly/rails/version.rb +1 -1
- metadata +4 -4
data/assets/unpoly/unpoly.es6.js
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
/***/ (() => {
|
6
6
|
|
7
7
|
window.up = {
|
8
|
-
version: '3.
|
8
|
+
version: '3.8.0-rc1'
|
9
9
|
};
|
10
10
|
|
11
11
|
|
@@ -230,11 +230,6 @@ up.util = (function () {
|
|
230
230
|
function isArguments(value) {
|
231
231
|
return Object.prototype.toString.call(value) === '[object Arguments]';
|
232
232
|
}
|
233
|
-
function nullToUndefined(value) {
|
234
|
-
if (!isNull(value)) {
|
235
|
-
return value;
|
236
|
-
}
|
237
|
-
}
|
238
233
|
function wrapList(value) {
|
239
234
|
if (isList(value)) {
|
240
235
|
return value;
|
@@ -338,9 +333,6 @@ up.util = (function () {
|
|
338
333
|
function compact(array) {
|
339
334
|
return filterList(array, isGiven);
|
340
335
|
}
|
341
|
-
function filterMap(list, mapping) {
|
342
|
-
return filterList(map(list, mapping), isDefined);
|
343
|
-
}
|
344
336
|
function compactObject(object) {
|
345
337
|
return pickBy(object, isGiven);
|
346
338
|
}
|
@@ -390,9 +382,6 @@ up.util = (function () {
|
|
390
382
|
function queueTask(task) {
|
391
383
|
return setTimeout(task);
|
392
384
|
}
|
393
|
-
function queueMicrotask(task) {
|
394
|
-
return Promise.resolve().then(task);
|
395
|
-
}
|
396
385
|
function last(value) {
|
397
386
|
return value[value.length - 1];
|
398
387
|
}
|
@@ -400,6 +389,9 @@ up.util = (function () {
|
|
400
389
|
let indexOf = value.indexOf || Array.prototype.indexOf;
|
401
390
|
return indexOf.call(value, subValue) >= 0;
|
402
391
|
}
|
392
|
+
function containsAll(values, subValues) {
|
393
|
+
return every(subValues, (subValue) => contains(values, subValue));
|
394
|
+
}
|
403
395
|
function objectContains(object, subObject) {
|
404
396
|
const reducedValue = pick(object, Object.keys(subObject));
|
405
397
|
return isEqual(subObject, reducedValue);
|
@@ -583,6 +575,14 @@ up.util = (function () {
|
|
583
575
|
function reverse(list) {
|
584
576
|
return copy(list).reverse();
|
585
577
|
}
|
578
|
+
function replaceValue(value, matchValue, replacementValue) {
|
579
|
+
if (value === matchValue) {
|
580
|
+
return replacementValue;
|
581
|
+
}
|
582
|
+
else {
|
583
|
+
return value;
|
584
|
+
}
|
585
|
+
}
|
586
586
|
function renameKeys(object, renameKeyFn) {
|
587
587
|
const renamed = {};
|
588
588
|
for (let key in object) {
|
@@ -734,7 +734,6 @@ up.util = (function () {
|
|
734
734
|
normalizeMethod,
|
735
735
|
methodAllowsPayload,
|
736
736
|
copy,
|
737
|
-
copyArrayLike,
|
738
737
|
merge,
|
739
738
|
mergeDefined,
|
740
739
|
options: newOptions,
|
@@ -748,7 +747,6 @@ up.util = (function () {
|
|
748
747
|
every,
|
749
748
|
find: findInList,
|
750
749
|
filter: filterList,
|
751
|
-
filterMap: filterMap,
|
752
750
|
reject,
|
753
751
|
intersect,
|
754
752
|
compact,
|
@@ -780,6 +778,7 @@ up.util = (function () {
|
|
780
778
|
isRegExp,
|
781
779
|
timer: scheduleTimer,
|
782
780
|
contains,
|
781
|
+
containsAll,
|
783
782
|
objectContains,
|
784
783
|
toArray,
|
785
784
|
pick,
|
@@ -806,7 +805,6 @@ up.util = (function () {
|
|
806
805
|
isBasicObjectProperty,
|
807
806
|
isCrossOrigin,
|
808
807
|
task: queueTask,
|
809
|
-
microtask: queueMicrotask,
|
810
808
|
isEqual,
|
811
809
|
parseTokens,
|
812
810
|
wrapList,
|
@@ -817,10 +815,9 @@ up.util = (function () {
|
|
817
815
|
delegate: defineDelegates,
|
818
816
|
reverse,
|
819
817
|
camelToKebabCase,
|
820
|
-
|
818
|
+
replaceValue,
|
821
819
|
sprintf,
|
822
820
|
renameKeys,
|
823
|
-
negate,
|
824
821
|
memoizeMethod,
|
825
822
|
safeStringifyJSON,
|
826
823
|
variant,
|
@@ -1184,7 +1181,7 @@ up.element = (function () {
|
|
1184
1181
|
}
|
1185
1182
|
}
|
1186
1183
|
function idSelector(id) {
|
1187
|
-
if (id.match(/^[a-z0-9\-_]
|
1184
|
+
if (id.match(/^[a-z][a-z0-9\-_]*$/i)) {
|
1188
1185
|
return `#${id}`;
|
1189
1186
|
}
|
1190
1187
|
else {
|
@@ -1274,9 +1271,6 @@ up.element = (function () {
|
|
1274
1271
|
element.appendChild(wrapper);
|
1275
1272
|
return wrapper;
|
1276
1273
|
}
|
1277
|
-
function isWrapper(element) {
|
1278
|
-
return element.matches('up-wrapper');
|
1279
|
-
}
|
1280
1274
|
function preservingFocus(fn) {
|
1281
1275
|
const oldFocusElement = document.activeElement;
|
1282
1276
|
try {
|
@@ -1289,7 +1283,8 @@ up.element = (function () {
|
|
1289
1283
|
}
|
1290
1284
|
}
|
1291
1285
|
function stringAttr(element, attribute) {
|
1292
|
-
|
1286
|
+
let value = element.getAttribute(attribute);
|
1287
|
+
return u.replaceValue(value, null, undefined);
|
1293
1288
|
}
|
1294
1289
|
function booleanAttr(element, attribute, pass) {
|
1295
1290
|
if (!element.hasAttribute(attribute))
|
@@ -1314,14 +1309,15 @@ up.element = (function () {
|
|
1314
1309
|
}
|
1315
1310
|
}
|
1316
1311
|
}
|
1317
|
-
function booleanOrStringAttr(element, attribute) {
|
1318
|
-
|
1312
|
+
function booleanOrStringAttr(element, attribute, trueValue = true) {
|
1313
|
+
let value = booleanAttr(element, attribute, true);
|
1314
|
+
return value === true ? trueValue : value;
|
1319
1315
|
}
|
1320
1316
|
function numberAttr(element, attribute) {
|
1321
1317
|
let value = element.getAttribute(attribute);
|
1322
1318
|
if (value) {
|
1323
1319
|
value = value.replace(/_/g, '');
|
1324
|
-
if (value.match(
|
1320
|
+
if (value.match(/^-?[\d.]+$/)) {
|
1325
1321
|
return parseFloat(value);
|
1326
1322
|
}
|
1327
1323
|
}
|
@@ -1358,10 +1354,6 @@ up.element = (function () {
|
|
1358
1354
|
element.classList.add(klass);
|
1359
1355
|
return () => element.classList.remove(klass);
|
1360
1356
|
}
|
1361
|
-
function setTemporaryAttr(element, attr, value) {
|
1362
|
-
element.setAttribute(attr, value);
|
1363
|
-
return () => element.removeAttribute(element, attr);
|
1364
|
-
}
|
1365
1357
|
function computedStyle(element, props) {
|
1366
1358
|
const style = window.getComputedStyle(element);
|
1367
1359
|
return extractFromStyleObject(style, props);
|
@@ -1447,6 +1439,18 @@ up.element = (function () {
|
|
1447
1439
|
function crossOriginSelector(attr) {
|
1448
1440
|
return `[${attr}*="//"]:not([${attr}*="//${location.host}/"])`;
|
1449
1441
|
}
|
1442
|
+
function isIntersectingWindow(element, { margin = 0 } = {}) {
|
1443
|
+
const rect = up.Rect.fromElement(element);
|
1444
|
+
rect.grow(margin);
|
1445
|
+
return (rect.bottom > 0) && (rect.top < window.innerHeight) &&
|
1446
|
+
(rect.right > 0) && (rect.left < window.innerWidth);
|
1447
|
+
}
|
1448
|
+
function unionSelector(includes, excludes) {
|
1449
|
+
let selector = `:is(${includes.join()})`;
|
1450
|
+
if (u.isPresent(excludes))
|
1451
|
+
selector += `:not(${excludes.join()})`;
|
1452
|
+
return selector;
|
1453
|
+
}
|
1450
1454
|
return {
|
1451
1455
|
subtree,
|
1452
1456
|
contains,
|
@@ -1481,7 +1485,6 @@ up.element = (function () {
|
|
1481
1485
|
setMissingAttr,
|
1482
1486
|
unwrap,
|
1483
1487
|
wrapChildren,
|
1484
|
-
isWrapper,
|
1485
1488
|
attr: stringAttr,
|
1486
1489
|
booleanAttr,
|
1487
1490
|
numberAttr,
|
@@ -1498,11 +1501,12 @@ up.element = (function () {
|
|
1498
1501
|
upClasses,
|
1499
1502
|
toggleAttr,
|
1500
1503
|
addTemporaryClass,
|
1501
|
-
setTemporaryAttr,
|
1502
1504
|
cleanJQuery,
|
1503
1505
|
parseSelector,
|
1504
1506
|
isEmpty,
|
1505
1507
|
crossOriginSelector,
|
1508
|
+
isIntersectingWindow,
|
1509
|
+
unionSelector,
|
1506
1510
|
};
|
1507
1511
|
})();
|
1508
1512
|
|
@@ -1612,6 +1616,7 @@ up.Record = class Record {
|
|
1612
1616
|
/***/ (() => {
|
1613
1617
|
|
1614
1618
|
const u = up.util;
|
1619
|
+
const e = up.element;
|
1615
1620
|
up.Config = class Config {
|
1616
1621
|
constructor(blueprintFn = (() => ({}))) {
|
1617
1622
|
this._blueprintFn = blueprintFn;
|
@@ -1627,10 +1632,7 @@ up.Config = class Config {
|
|
1627
1632
|
selector(prop) {
|
1628
1633
|
let includes = this[prop];
|
1629
1634
|
let excludes = this['no' + u.upperCaseFirst(prop)];
|
1630
|
-
|
1631
|
-
if (u.isPresent(excludes))
|
1632
|
-
selector += `:not(${excludes.join()})`;
|
1633
|
-
return selector;
|
1635
|
+
return e.unionSelector(includes, excludes);
|
1634
1636
|
}
|
1635
1637
|
selectorFn(prop) {
|
1636
1638
|
return () => this.selector(prop);
|
@@ -1801,6 +1803,12 @@ up.Rect = class Rect extends up.Record {
|
|
1801
1803
|
get right() {
|
1802
1804
|
return this.left + this.width;
|
1803
1805
|
}
|
1806
|
+
grow(padding) {
|
1807
|
+
this.left -= padding;
|
1808
|
+
this.top -= padding;
|
1809
|
+
this.width += padding * 2;
|
1810
|
+
this.height += padding * 2;
|
1811
|
+
}
|
1804
1812
|
static fromElement(element) {
|
1805
1813
|
return new (this)(element.getBoundingClientRect());
|
1806
1814
|
}
|
@@ -1812,64 +1820,46 @@ up.Rect = class Rect extends up.Record {
|
|
1812
1820
|
/***/ (() => {
|
1813
1821
|
|
1814
1822
|
const e = up.element;
|
1823
|
+
const SHIFT_CLASS = 'up-scrollbar-away';
|
1815
1824
|
up.BodyShifter = class BodyShifter {
|
1816
1825
|
constructor() {
|
1817
|
-
this._unshiftFns = [];
|
1818
1826
|
this._anchoredElements = new Set();
|
1819
1827
|
this._stack = 0;
|
1820
1828
|
}
|
1821
1829
|
lowerStack() {
|
1822
|
-
this._stack
|
1823
|
-
if (this._stack === 0) {
|
1830
|
+
if (--this._stack === 0)
|
1824
1831
|
this._unshiftNow();
|
1825
|
-
}
|
1826
1832
|
}
|
1827
1833
|
raiseStack() {
|
1828
|
-
this._stack
|
1829
|
-
if (this._stack === 1) {
|
1834
|
+
if (++this._stack === 1)
|
1830
1835
|
this._shiftNow();
|
1831
|
-
}
|
1832
1836
|
}
|
1833
1837
|
onAnchoredElementInserted(element) {
|
1834
1838
|
this._anchoredElements.add(element);
|
1835
|
-
|
1836
|
-
this._shiftAnchoredElement(element);
|
1837
|
-
}
|
1839
|
+
this._shiftElement(element, 'right');
|
1838
1840
|
return () => this._anchoredElements.delete(element);
|
1839
1841
|
}
|
1840
1842
|
_isShifted() {
|
1841
|
-
return this.
|
1843
|
+
return this._rootScrollbarWidth && this._stack > 0;
|
1842
1844
|
}
|
1843
1845
|
_shiftNow() {
|
1844
|
-
this.
|
1845
|
-
this.
|
1846
|
-
|
1847
|
-
return;
|
1848
|
-
this._shiftBody();
|
1846
|
+
this._rootScrollbarWidth = up.viewport.rootScrollbarWidth();
|
1847
|
+
e.root.style.setProperty('--up-scrollbar-width', this._rootScrollbarWidth + 'px');
|
1848
|
+
this._shiftElement(document.body, 'padding-right');
|
1849
1849
|
for (let element of this._anchoredElements) {
|
1850
|
-
this.
|
1850
|
+
this._shiftElement(element, 'right');
|
1851
1851
|
}
|
1852
1852
|
}
|
1853
|
-
|
1854
|
-
|
1855
|
-
|
1856
|
-
|
1857
|
-
|
1858
|
-
|
1859
|
-
this._changeStyle(body, { paddingRight: bodyRightShift });
|
1860
|
-
}
|
1861
|
-
_shiftAnchoredElement(element) {
|
1862
|
-
const elementRight = e.styleNumber(element, 'right');
|
1863
|
-
const elementRightShift = this._scrollbarWidth + elementRight;
|
1864
|
-
this._changeStyle(element, { right: elementRightShift });
|
1865
|
-
}
|
1866
|
-
_changeStyle(element, styles) {
|
1867
|
-
this._unshiftFns.push(e.setTemporaryStyle(element, styles));
|
1853
|
+
_shiftElement(element, styleProp) {
|
1854
|
+
if (!this._isShifted())
|
1855
|
+
return;
|
1856
|
+
let originalValue = e.style(element, styleProp);
|
1857
|
+
element.style.setProperty('--up-original-' + styleProp, originalValue);
|
1858
|
+
element.classList.add(SHIFT_CLASS);
|
1868
1859
|
}
|
1869
1860
|
_unshiftNow() {
|
1870
|
-
let
|
1871
|
-
|
1872
|
-
unshiftFn();
|
1861
|
+
for (let element of [document.body, ...this._anchoredElements]) {
|
1862
|
+
element.classList.remove(SHIFT_CLASS);
|
1873
1863
|
}
|
1874
1864
|
}
|
1875
1865
|
};
|
@@ -3078,6 +3068,7 @@ up.Change.FromContent = (_a = class FromContent extends up.Change {
|
|
3078
3068
|
}
|
3079
3069
|
this.options.title = this.improveHistoryValue(this.options.title, responseDoc.title);
|
3080
3070
|
this.options.metaTags = this.improveHistoryValue(this.options.metaTags, responseDoc.metaTags);
|
3071
|
+
this.options.lang = this.improveHistoryValue(this.options.lang, responseDoc.lang);
|
3081
3072
|
}
|
3082
3073
|
_defaultPlacement() {
|
3083
3074
|
if (!this.options.document && !this.options.fragment) {
|
@@ -3831,6 +3822,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
3831
3822
|
return t;
|
3832
3823
|
};
|
3833
3824
|
const u = up.util;
|
3825
|
+
const e = up.element;
|
3834
3826
|
up.FormValidator = class FormValidator {
|
3835
3827
|
constructor(form) {
|
3836
3828
|
this._form = form;
|
@@ -3891,7 +3883,7 @@ up.FormValidator = class FormValidator {
|
|
3891
3883
|
}
|
3892
3884
|
}
|
3893
3885
|
_getTargetSelectorSolutions({ target, origin }) {
|
3894
|
-
if (u.isString(target)
|
3886
|
+
if (u.isString(target)) {
|
3895
3887
|
up.puts('up.validate()', 'Validating target "%s"', target);
|
3896
3888
|
let simpleSelectors = up.fragment.splitTarget(target);
|
3897
3889
|
return u.compact(simpleSelectors.map(function (simpleSelector) {
|
@@ -3920,7 +3912,7 @@ up.FormValidator = class FormValidator {
|
|
3920
3912
|
_getValidateAttrSolutions(field) {
|
3921
3913
|
let containerWithAttr = field.closest('[up-validate]');
|
3922
3914
|
if (containerWithAttr) {
|
3923
|
-
let target =
|
3915
|
+
let target = e.booleanOrStringAttr(containerWithAttr, 'up-validate');
|
3924
3916
|
return this._getTargetSelectorSolutions({ target, origin: field });
|
3925
3917
|
}
|
3926
3918
|
}
|
@@ -3968,7 +3960,8 @@ up.FormValidator = class FormValidator {
|
|
3968
3960
|
options.guardEvent = up.event.build('up:form:validate', {
|
3969
3961
|
fields: dirtyFields,
|
3970
3962
|
log: 'Validating form',
|
3971
|
-
params: options.params
|
3963
|
+
params: options.params,
|
3964
|
+
form: this._form,
|
3972
3965
|
});
|
3973
3966
|
this._rendering = true;
|
3974
3967
|
let renderingPromise = this._nextRenderPromise;
|
@@ -4617,6 +4610,7 @@ up.Layer = class Layer extends up.Record {
|
|
4617
4610
|
this.savedTitle = document.title;
|
4618
4611
|
this.savedMetaTags = up.history.findMetaTags();
|
4619
4612
|
this.savedLocation = up.history.location;
|
4613
|
+
this.savedLang = up.history.getLang();
|
4620
4614
|
}
|
4621
4615
|
}
|
4622
4616
|
restoreHistory() {
|
@@ -4632,6 +4626,9 @@ up.Layer = class Layer extends up.Record {
|
|
4632
4626
|
if (this.savedMetaTags) {
|
4633
4627
|
up.history.updateMetaTags(this.savedMetaTags);
|
4634
4628
|
}
|
4629
|
+
if (u.isString(this.savedLang)) {
|
4630
|
+
up.history.updateLang(this.savedLang);
|
4631
|
+
}
|
4635
4632
|
}
|
4636
4633
|
asCurrent(fn) {
|
4637
4634
|
return this.stack.asCurrent(this, fn);
|
@@ -4648,6 +4645,9 @@ up.Layer = class Layer extends up.Record {
|
|
4648
4645
|
if (u.isString(options.title)) {
|
4649
4646
|
this.title = options.title;
|
4650
4647
|
}
|
4648
|
+
if (u.isString(options.lang)) {
|
4649
|
+
this.lang = options.lang;
|
4650
|
+
}
|
4651
4651
|
}
|
4652
4652
|
showsLiveHistory() {
|
4653
4653
|
return this.history && this.isFront();
|
@@ -4680,6 +4680,20 @@ up.Layer = class Layer extends up.Record {
|
|
4680
4680
|
up.history.updateMetaTags(metaTags);
|
4681
4681
|
}
|
4682
4682
|
}
|
4683
|
+
get lang() {
|
4684
|
+
if (this.showsLiveHistory()) {
|
4685
|
+
return up.history.getLang();
|
4686
|
+
}
|
4687
|
+
else {
|
4688
|
+
return this.savedLang;
|
4689
|
+
}
|
4690
|
+
}
|
4691
|
+
set lang(lang) {
|
4692
|
+
this.savedLang = lang;
|
4693
|
+
if (this.showsLiveHistory()) {
|
4694
|
+
up.history.updateLang(lang);
|
4695
|
+
}
|
4696
|
+
}
|
4683
4697
|
get location() {
|
4684
4698
|
if (this.showsLiveHistory()) {
|
4685
4699
|
return up.history.location;
|
@@ -5408,7 +5422,10 @@ up.LinkFeedbackURLs = class LinkFeedbackURLs {
|
|
5408
5422
|
}
|
5409
5423
|
isCurrent(normalizedLocation) {
|
5410
5424
|
var _a, _b;
|
5411
|
-
|
5425
|
+
if (!normalizedLocation) {
|
5426
|
+
return false;
|
5427
|
+
}
|
5428
|
+
return !!(this.href === normalizedLocation ||
|
5412
5429
|
this._upHREF === normalizedLocation ||
|
5413
5430
|
((_b = (_a = this._aliasPattern) === null || _a === void 0 ? void 0 : _a.test) === null || _b === void 0 ? void 0 : _b.call(_a, normalizedLocation, false)));
|
5414
5431
|
}
|
@@ -5421,62 +5438,41 @@ up.LinkFeedbackURLs = class LinkFeedbackURLs {
|
|
5421
5438
|
|
5422
5439
|
const u = up.util;
|
5423
5440
|
const e = up.element;
|
5424
|
-
up.
|
5425
|
-
|
5426
|
-
|
5427
|
-
|
5428
|
-
|
5429
|
-
|
5430
|
-
|
5431
|
-
}
|
5432
|
-
_on(link, eventTypes, callback) {
|
5433
|
-
up.on(link, eventTypes, { passive: true }, callback);
|
5434
|
-
}
|
5435
|
-
_considerPreload(event, applyDelay) {
|
5436
|
-
const link = event.target;
|
5437
|
-
if (link !== this._currentLink) {
|
5438
|
-
this.reset();
|
5439
|
-
this._currentLink = link;
|
5440
|
-
if (up.link.shouldFollowEvent(event, link)) {
|
5441
|
-
if (applyDelay) {
|
5442
|
-
this._preloadAfterDelay(event, link);
|
5443
|
-
}
|
5444
|
-
else {
|
5445
|
-
this._preloadNow(event, link);
|
5446
|
-
}
|
5447
|
-
}
|
5448
|
-
}
|
5441
|
+
up.LinkFollowIntent = class LinkFollowIntent {
|
5442
|
+
constructor(link, callback) {
|
5443
|
+
this._link = link;
|
5444
|
+
this._callback = callback;
|
5445
|
+
this._on('mouseenter mousedown touchstart', (event) => this._scheduleCallback(event));
|
5446
|
+
this._on('mouseleave', () => this._unscheduleCallback());
|
5447
|
+
up.fragment.onAborted(this._link, () => this._unscheduleCallback());
|
5449
5448
|
}
|
5450
|
-
|
5451
|
-
|
5452
|
-
return this.reset();
|
5453
|
-
}
|
5449
|
+
_on(eventType, callback) {
|
5450
|
+
up.on(this._link, eventType, { passive: true }, callback);
|
5454
5451
|
}
|
5455
|
-
|
5456
|
-
|
5457
|
-
if (!this._currentLink) {
|
5452
|
+
_scheduleCallback(event) {
|
5453
|
+
if (!up.link.shouldFollowEvent(event, this._link))
|
5458
5454
|
return;
|
5455
|
+
this._unscheduleCallback();
|
5456
|
+
const applyDelay = (event.type === 'mouseenter');
|
5457
|
+
if (applyDelay) {
|
5458
|
+
let delay = this._parseDelay();
|
5459
|
+
this._timer = u.timer(delay, () => this._runCallback(event));
|
5459
5460
|
}
|
5460
|
-
|
5461
|
-
|
5462
|
-
this._currentRequest.abort();
|
5461
|
+
else {
|
5462
|
+
this._runCallback(event);
|
5463
5463
|
}
|
5464
|
-
this._currentLink = undefined;
|
5465
|
-
this._currentRequest = undefined;
|
5466
5464
|
}
|
5467
|
-
|
5465
|
+
_unscheduleCallback() {
|
5466
|
+
clearTimeout(this._timer);
|
5467
|
+
up.network.abort((request) => (request.origin === this._link) && request.background);
|
5468
|
+
}
|
5469
|
+
_parseDelay() {
|
5468
5470
|
var _a;
|
5469
|
-
|
5470
|
-
this._timer = u.timer(delay, () => this._preloadNow(event, link));
|
5471
|
+
return (_a = e.numberAttr(this._link, 'up-preload-delay')) !== null && _a !== void 0 ? _a : up.link.config.preloadDelay;
|
5471
5472
|
}
|
5472
|
-
|
5473
|
-
if (!link.isConnected) {
|
5474
|
-
this.reset();
|
5475
|
-
return;
|
5476
|
-
}
|
5477
|
-
const onQueued = request => { return this._currentRequest = request; };
|
5473
|
+
_runCallback(event) {
|
5478
5474
|
up.log.putsEvent(event);
|
5479
|
-
up.error.muteUncriticalRejection(
|
5475
|
+
up.error.muteUncriticalRejection(this._callback());
|
5480
5476
|
}
|
5481
5477
|
};
|
5482
5478
|
|
@@ -6236,7 +6232,6 @@ up.Request = (_a = class Request extends up.Record {
|
|
6236
6232
|
'wrapMethod',
|
6237
6233
|
'contentType',
|
6238
6234
|
'payload',
|
6239
|
-
'onQueued',
|
6240
6235
|
'onLoading',
|
6241
6236
|
'fail',
|
6242
6237
|
'abortable',
|
@@ -6271,7 +6266,7 @@ up.Request = (_a = class Request extends up.Record {
|
|
6271
6266
|
}
|
6272
6267
|
this.deferred = u.newDeferred();
|
6273
6268
|
(_d = this.badResponseTime) !== null && _d !== void 0 ? _d : (this.badResponseTime = u.evalOption(up.network.config.badResponseTime, this));
|
6274
|
-
this.
|
6269
|
+
this._setAutoHeaders();
|
6275
6270
|
}
|
6276
6271
|
get xhr() {
|
6277
6272
|
var _b;
|
@@ -6281,7 +6276,7 @@ up.Request = (_a = class Request extends up.Record {
|
|
6281
6276
|
if (this._fragments) {
|
6282
6277
|
return this._fragments;
|
6283
6278
|
}
|
6284
|
-
else
|
6279
|
+
else {
|
6285
6280
|
let steps = up.fragment.parseTargetSteps(this.target);
|
6286
6281
|
let selectors = u.map(steps, 'selector');
|
6287
6282
|
let lookupOpts = { origin: this.origin, layer: this.layer };
|
@@ -6337,9 +6332,7 @@ up.Request = (_a = class Request extends up.Record {
|
|
6337
6332
|
return u.evalAutoOption(this.cache, up.network.config.autoCache, this);
|
6338
6333
|
}
|
6339
6334
|
runQueuedCallbacks() {
|
6340
|
-
var _b;
|
6341
6335
|
u.always(this, () => this._evictExpensiveAttrs());
|
6342
|
-
(_b = this.onQueued) === null || _b === void 0 ? void 0 : _b.call(this, this);
|
6343
6336
|
}
|
6344
6337
|
load() {
|
6345
6338
|
var _b;
|
@@ -6484,9 +6477,6 @@ up.Request = (_a = class Request extends up.Record {
|
|
6484
6477
|
return this.method + ' ' + this.url;
|
6485
6478
|
}
|
6486
6479
|
isPartOfSubtree(subtreeElements) {
|
6487
|
-
if (!this.fragments || !subtreeElements) {
|
6488
|
-
return false;
|
6489
|
-
}
|
6490
6480
|
subtreeElements = u.wrapList(subtreeElements);
|
6491
6481
|
return u.some(this.fragments, function (fragment) {
|
6492
6482
|
return u.some(subtreeElements, (subtreeElement) => subtreeElement.contains(fragment));
|
@@ -6498,17 +6488,20 @@ up.Request = (_a = class Request extends up.Record {
|
|
6498
6488
|
header(name) {
|
6499
6489
|
return this.headers[name];
|
6500
6490
|
}
|
6501
|
-
|
6491
|
+
_setAutoHeaders() {
|
6502
6492
|
for (let key of ['target', 'failTarget', 'mode', 'failMode', 'context', 'failContext']) {
|
6503
|
-
this.
|
6493
|
+
this._setPropertyHeader(key);
|
6504
6494
|
}
|
6505
6495
|
let csrfHeader, csrfToken;
|
6506
6496
|
if ((csrfHeader = this.csrfHeader()) && (csrfToken = this.csrfToken())) {
|
6507
|
-
this.
|
6497
|
+
this._setAutoHeader(csrfHeader, csrfToken);
|
6508
6498
|
}
|
6509
|
-
this.
|
6499
|
+
this._setAutoHeader(up.protocol.headerize('version'), up.version);
|
6500
|
+
}
|
6501
|
+
_setPropertyHeader(key) {
|
6502
|
+
this._setAutoHeader(up.protocol.headerize(key), this[key]);
|
6510
6503
|
}
|
6511
|
-
|
6504
|
+
_setAutoHeader(name, value) {
|
6512
6505
|
if (u.isMissing(value)) {
|
6513
6506
|
return;
|
6514
6507
|
}
|
@@ -6517,6 +6510,16 @@ up.Request = (_a = class Request extends up.Record {
|
|
6517
6510
|
}
|
6518
6511
|
this.headers[name] = value;
|
6519
6512
|
}
|
6513
|
+
mergeIfUnsent(trackingRequest) {
|
6514
|
+
if (this.state !== 'new')
|
6515
|
+
return;
|
6516
|
+
if (!this.target || !trackingRequest.target)
|
6517
|
+
return;
|
6518
|
+
let targetAtoms = up.fragment.splitTarget(this.target + ',' + trackingRequest.target);
|
6519
|
+
this.target = u.uniq(targetAtoms).join(', ');
|
6520
|
+
this._setPropertyHeader('target');
|
6521
|
+
this._fragments = u.uniq([...this.fragments, ...trackingRequest.fragments]);
|
6522
|
+
}
|
6520
6523
|
static tester(condition, { except } = {}) {
|
6521
6524
|
let testFn;
|
6522
6525
|
if (u.isFunction(condition)) {
|
@@ -6560,78 +6563,85 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
6560
6563
|
});
|
6561
6564
|
};
|
6562
6565
|
const u = up.util;
|
6566
|
+
class Route {
|
6567
|
+
constructor() {
|
6568
|
+
this.varyHeaders = new Set();
|
6569
|
+
this.requests = [];
|
6570
|
+
}
|
6571
|
+
matchBest(newRequest) {
|
6572
|
+
let matches = this.requests.filter((cachedRequest) => this.satisfies(cachedRequest, newRequest));
|
6573
|
+
return u.last(matches);
|
6574
|
+
}
|
6575
|
+
delete(request) {
|
6576
|
+
u.remove(this.requests, request);
|
6577
|
+
}
|
6578
|
+
put(request) {
|
6579
|
+
this.requests.push(request);
|
6580
|
+
}
|
6581
|
+
updateVary(response) {
|
6582
|
+
for (let headerName of response.varyHeaderNames) {
|
6583
|
+
this.varyHeaders.add(headerName);
|
6584
|
+
}
|
6585
|
+
}
|
6586
|
+
satisfies(cachedRequest, newRequest) {
|
6587
|
+
if (cachedRequest === newRequest)
|
6588
|
+
return true;
|
6589
|
+
return u.every(this.varyHeaders, (varyHeader) => {
|
6590
|
+
let cachedValue = cachedRequest.header(varyHeader);
|
6591
|
+
let newValue = newRequest.header(varyHeader);
|
6592
|
+
if (varyHeader === 'X-Up-Target' || varyHeader === 'X-Up-Fail-Target') {
|
6593
|
+
if (!cachedValue)
|
6594
|
+
return true;
|
6595
|
+
if (!newValue)
|
6596
|
+
return false;
|
6597
|
+
let cachedTokens = u.parseTokens(cachedValue, { separator: 'comma' });
|
6598
|
+
let newTokens = u.parseTokens(newValue, { separator: 'comma' });
|
6599
|
+
return u.containsAll(cachedTokens, newTokens);
|
6600
|
+
}
|
6601
|
+
else {
|
6602
|
+
return cachedValue === newValue;
|
6603
|
+
}
|
6604
|
+
});
|
6605
|
+
}
|
6606
|
+
}
|
6563
6607
|
up.Request.Cache = class Cache {
|
6564
6608
|
constructor() {
|
6565
6609
|
this.reset();
|
6566
6610
|
}
|
6567
6611
|
reset() {
|
6568
|
-
this.
|
6569
|
-
this.
|
6570
|
-
}
|
6571
|
-
_cacheKey(request) {
|
6572
|
-
let influencingHeaders = this._getPreviousInfluencingHeaders(request);
|
6573
|
-
let varyPart = u.flatMap(influencingHeaders, (headerName) => [headerName, request.header(headerName)]);
|
6574
|
-
return [request.description, ...varyPart].join(':');
|
6575
|
-
}
|
6576
|
-
_getPreviousInfluencingHeaders(request) {
|
6577
|
-
var _a, _b;
|
6578
|
-
return ((_a = this._varyInfo)[_b = request.description] || (_a[_b] = new Set()));
|
6612
|
+
this._routes = {};
|
6613
|
+
this._requests = [];
|
6579
6614
|
}
|
6580
6615
|
get(request) {
|
6581
6616
|
request = this._wrap(request);
|
6582
|
-
let
|
6583
|
-
let cachedRequest =
|
6617
|
+
let route = this._getRoute(request);
|
6618
|
+
let cachedRequest = route.matchBest(request);
|
6584
6619
|
if (cachedRequest) {
|
6585
6620
|
if (this._isUsable(cachedRequest)) {
|
6586
6621
|
return cachedRequest;
|
6587
6622
|
}
|
6588
6623
|
else {
|
6589
|
-
this.
|
6624
|
+
this._delete(request, route);
|
6590
6625
|
}
|
6591
6626
|
}
|
6592
6627
|
}
|
6593
|
-
get _capacity() {
|
6594
|
-
return up.network.config.cacheSize;
|
6595
|
-
}
|
6596
|
-
_isUsable(request) {
|
6597
|
-
return request.age < up.network.config.cacheEvictAge;
|
6598
|
-
}
|
6599
6628
|
put(request) {
|
6600
6629
|
return __awaiter(this, void 0, void 0, function* () {
|
6601
6630
|
request = this._wrap(request);
|
6602
|
-
this.
|
6603
|
-
let
|
6604
|
-
|
6631
|
+
let route = this._getRoute(request);
|
6632
|
+
let { response } = request;
|
6633
|
+
if (response)
|
6634
|
+
route.updateVary(response);
|
6635
|
+
let superseded = route.requests.filter((oldRequest) => route.satisfies(request, oldRequest));
|
6636
|
+
for (let r of superseded) {
|
6637
|
+
this._delete(r);
|
6638
|
+
}
|
6639
|
+
request.cacheRoute = route;
|
6640
|
+
route.put(request);
|
6641
|
+
this._requests.push(request);
|
6642
|
+
this._limitSize();
|
6605
6643
|
});
|
6606
6644
|
}
|
6607
|
-
_updateCacheKey(request) {
|
6608
|
-
let oldCacheKey = this._cacheKey(request);
|
6609
|
-
let { response } = request;
|
6610
|
-
if (response) {
|
6611
|
-
this._mergePreviousHeaderNames(request, response);
|
6612
|
-
let newCacheKey = this._cacheKey(request);
|
6613
|
-
this._renameMapKey(oldCacheKey, newCacheKey);
|
6614
|
-
return newCacheKey;
|
6615
|
-
}
|
6616
|
-
else {
|
6617
|
-
return oldCacheKey;
|
6618
|
-
}
|
6619
|
-
}
|
6620
|
-
_renameMapKey(oldKey, newKey) {
|
6621
|
-
if (oldKey !== newKey && this._map.has(oldKey)) {
|
6622
|
-
this._map.set(newKey, this._map.get(oldKey));
|
6623
|
-
this._map.delete(oldKey);
|
6624
|
-
}
|
6625
|
-
}
|
6626
|
-
_mergePreviousHeaderNames(request, response) {
|
6627
|
-
let headersInfluencingResponse = response.ownInfluncingHeaders;
|
6628
|
-
if (headersInfluencingResponse.length) {
|
6629
|
-
let previousInfluencingHeaders = this._getPreviousInfluencingHeaders(request);
|
6630
|
-
for (let headerName of headersInfluencingResponse) {
|
6631
|
-
previousInfluencingHeaders.add(headerName);
|
6632
|
-
}
|
6633
|
-
}
|
6634
|
-
}
|
6635
6645
|
alias(existingCachedRequest, newRequest) {
|
6636
6646
|
existingCachedRequest = this.get(existingCachedRequest);
|
6637
6647
|
if (!existingCachedRequest)
|
@@ -6648,7 +6658,7 @@ up.Request.Cache = class Cache {
|
|
6648
6658
|
newRequest.state = 'tracking';
|
6649
6659
|
let value = yield u.always(existingRequest);
|
6650
6660
|
if (value instanceof up.Response) {
|
6651
|
-
if (options.force ||
|
6661
|
+
if (options.force || existingRequest.cacheRoute.satisfies(existingRequest, newRequest)) {
|
6652
6662
|
newRequest.fromCache = true;
|
6653
6663
|
value = u.variant(value, { request: newRequest });
|
6654
6664
|
newRequest.respondWith(value);
|
@@ -6669,31 +6679,45 @@ up.Request.Cache = class Cache {
|
|
6669
6679
|
willHaveSameResponse(existingRequest, newRequest) {
|
6670
6680
|
return existingRequest === newRequest || existingRequest === newRequest.trackedRequest;
|
6671
6681
|
}
|
6672
|
-
_delete(request) {
|
6673
|
-
request = this._wrap(request);
|
6674
|
-
let cacheKey = this._cacheKey(request);
|
6675
|
-
this._map.delete(cacheKey);
|
6676
|
-
}
|
6677
6682
|
evict(condition = true, testerOptions) {
|
6678
6683
|
this._eachMatch(condition, testerOptions, (request) => this._delete(request));
|
6679
6684
|
}
|
6680
6685
|
expire(condition = true, testerOptions) {
|
6681
6686
|
this._eachMatch(condition, testerOptions, (request) => request.expired = true);
|
6682
6687
|
}
|
6683
|
-
|
6684
|
-
|
6685
|
-
|
6686
|
-
|
6688
|
+
reindex(request) {
|
6689
|
+
this._delete(request);
|
6690
|
+
this.put(request);
|
6691
|
+
}
|
6692
|
+
_delete(request) {
|
6693
|
+
var _a;
|
6694
|
+
u.remove(this._requests, request);
|
6695
|
+
(_a = request.cacheRoute) === null || _a === void 0 ? void 0 : _a.delete(request);
|
6696
|
+
delete request.cacheRoute;
|
6697
|
+
}
|
6698
|
+
_getRoute(request) {
|
6699
|
+
var _a, _b;
|
6700
|
+
return request.cacheRoute || ((_a = this._routes)[_b = request.description] || (_a[_b] = new Route()));
|
6701
|
+
}
|
6702
|
+
_isUsable(request) {
|
6703
|
+
return request.age < up.network.config.cacheEvictAge;
|
6704
|
+
}
|
6705
|
+
get _size() {
|
6706
|
+
return this._requests.length;
|
6707
|
+
}
|
6708
|
+
get _capacity() {
|
6709
|
+
return up.network.config.cacheSize;
|
6710
|
+
}
|
6711
|
+
_limitSize() {
|
6712
|
+
for (let i = 0; i < (this._size - this._capacity); i++) {
|
6713
|
+
this._delete(this._requests[0]);
|
6687
6714
|
}
|
6688
6715
|
}
|
6689
6716
|
_eachMatch(condition = true, testerOptions, fn) {
|
6690
6717
|
let tester = up.Request.tester(condition, testerOptions);
|
6691
|
-
let results = u.filter(this.
|
6718
|
+
let results = u.filter(this._requests, tester);
|
6692
6719
|
u.each(results, fn);
|
6693
6720
|
}
|
6694
|
-
_isCacheCompatible(request1, request2) {
|
6695
|
-
return this._cacheKey(request1) === this._cacheKey(request2);
|
6696
|
-
}
|
6697
6721
|
_wrap(requestOrOptions) {
|
6698
6722
|
return u.wrapValue(up.Request, requestOrOptions);
|
6699
6723
|
}
|
@@ -6722,7 +6746,7 @@ up.Request.Queue = class Queue {
|
|
6722
6746
|
u.always(request, responseOrError => this._onRequestSettled(request, responseOrError));
|
6723
6747
|
this._scheduleSlowTimer(request);
|
6724
6748
|
this._queueRequest(request);
|
6725
|
-
|
6749
|
+
queueMicrotask(() => this._poke());
|
6726
6750
|
}
|
6727
6751
|
promoteToForeground(request) {
|
6728
6752
|
if (request.background) {
|
@@ -6763,7 +6787,7 @@ up.Request.Queue = class Queue {
|
|
6763
6787
|
up.network.registerAliasForRedirect(request, responseOrError);
|
6764
6788
|
}
|
6765
6789
|
this._checkLate();
|
6766
|
-
|
6790
|
+
queueMicrotask(() => this._poke());
|
6767
6791
|
}
|
6768
6792
|
_poke() {
|
6769
6793
|
let request;
|
@@ -6959,16 +6983,13 @@ up.Response = class Response extends up.Record {
|
|
6959
6983
|
get none() {
|
6960
6984
|
return !this.text;
|
6961
6985
|
}
|
6962
|
-
isCacheable() {
|
6963
|
-
return this.ok && !this.none;
|
6964
|
-
}
|
6965
6986
|
header(name) {
|
6966
6987
|
var _a;
|
6967
6988
|
return this.headers[name] || ((_a = this.xhr) === null || _a === void 0 ? void 0 : _a.getResponseHeader(name));
|
6968
6989
|
}
|
6969
|
-
get
|
6970
|
-
let
|
6971
|
-
return u.
|
6990
|
+
get varyHeaderNames() {
|
6991
|
+
let varyHeaderValue = this.header('Vary');
|
6992
|
+
return u.parseTokens(varyHeaderValue, { separator: 'comma' });
|
6972
6993
|
}
|
6973
6994
|
get contentType() {
|
6974
6995
|
return this.header('Content-Type');
|
@@ -7009,6 +7030,7 @@ up.Response = class Response extends up.Record {
|
|
7009
7030
|
var _a;
|
7010
7031
|
const u = up.util;
|
7011
7032
|
const e = up.element;
|
7033
|
+
const FULL_DOCUMENT_PATTERN = /^\s*<(html|!DOCTYPE)\b/i;
|
7012
7034
|
up.ResponseDoc = (_a = class ResponseDoc {
|
7013
7035
|
constructor({ document, fragment, content, target, origin, cspNonces, match }) {
|
7014
7036
|
if (document) {
|
@@ -7029,43 +7051,43 @@ up.ResponseDoc = (_a = class ResponseDoc {
|
|
7029
7051
|
}
|
7030
7052
|
this._match = match;
|
7031
7053
|
}
|
7032
|
-
_parseDocument(
|
7033
|
-
|
7034
|
-
|
7035
|
-
|
7036
|
-
|
7037
|
-
|
7038
|
-
|
7039
|
-
|
7040
|
-
|
7041
|
-
_parseContent(content, target) {
|
7042
|
-
if (!target)
|
7043
|
-
up.fail("must pass a { target } when passing { content }");
|
7044
|
-
target = u.map(up.fragment.parseTargetSteps(target), 'selector').join();
|
7045
|
-
const matchingElement = e.createFromSelector(target);
|
7046
|
-
if (u.isString(content)) {
|
7047
|
-
matchingElement.innerHTML = content;
|
7054
|
+
_parseDocument(value) {
|
7055
|
+
if (value instanceof Document) {
|
7056
|
+
this._document = value;
|
7057
|
+
this._isFullDocument = true;
|
7058
|
+
}
|
7059
|
+
else if (u.isString(value)) {
|
7060
|
+
this._document = e.createBrokenDocumentFromHTML(value);
|
7061
|
+
this._isFullDocument = FULL_DOCUMENT_PATTERN.test(value);
|
7062
|
+
this._isDocumentBroken = true;
|
7048
7063
|
}
|
7049
7064
|
else {
|
7050
|
-
|
7065
|
+
this._document = this._buildFauxDocument(value);
|
7066
|
+
this._isFullDocument = value.matches('html');
|
7051
7067
|
}
|
7052
|
-
this._useParseResult(matchingElement);
|
7053
7068
|
}
|
7054
|
-
|
7055
|
-
|
7056
|
-
|
7057
|
-
}
|
7058
|
-
return value;
|
7069
|
+
_parseFragment(value) {
|
7070
|
+
let parsed = u.isString(value) ? e.createFromHTML(value) : value;
|
7071
|
+
this._document = this._buildFauxDocument(parsed);
|
7059
7072
|
}
|
7060
|
-
|
7061
|
-
if (
|
7062
|
-
|
7073
|
+
_parseContent(value, target) {
|
7074
|
+
if (!target)
|
7075
|
+
up.fail("must pass a { target } when passing { content }");
|
7076
|
+
let simplifiedTarget = u.map(up.fragment.parseTargetSteps(target), 'selector').join();
|
7077
|
+
const matchingElement = e.createFromSelector(simplifiedTarget);
|
7078
|
+
if (u.isString(value)) {
|
7079
|
+
matchingElement.innerHTML = value;
|
7063
7080
|
}
|
7064
7081
|
else {
|
7065
|
-
|
7066
|
-
this._document.append(node);
|
7067
|
-
this._document.documentElement = node;
|
7082
|
+
matchingElement.appendChild(value);
|
7068
7083
|
}
|
7084
|
+
this._document = this._buildFauxDocument(matchingElement);
|
7085
|
+
}
|
7086
|
+
_buildFauxDocument(node) {
|
7087
|
+
let fauxDocument = document.createElement('up-document');
|
7088
|
+
fauxDocument.append(node);
|
7089
|
+
fauxDocument.documentElement = node;
|
7090
|
+
return fauxDocument;
|
7069
7091
|
}
|
7070
7092
|
rootSelector() {
|
7071
7093
|
return up.fragment.toTarget(this._document.documentElement);
|
@@ -7074,9 +7096,8 @@ up.ResponseDoc = (_a = class ResponseDoc {
|
|
7074
7096
|
return this._fromHead(this._getTitleText);
|
7075
7097
|
}
|
7076
7098
|
_getHead() {
|
7077
|
-
|
7078
|
-
|
7079
|
-
return head;
|
7099
|
+
if (this._isFullDocument) {
|
7100
|
+
return this._document.head;
|
7080
7101
|
}
|
7081
7102
|
}
|
7082
7103
|
_fromHead(fn) {
|
@@ -7089,6 +7110,11 @@ up.ResponseDoc = (_a = class ResponseDoc {
|
|
7089
7110
|
get assets() {
|
7090
7111
|
return this._fromHead(up.script.findAssets);
|
7091
7112
|
}
|
7113
|
+
get lang() {
|
7114
|
+
if (this._isFullDocument) {
|
7115
|
+
return up.history.getLang(this._document);
|
7116
|
+
}
|
7117
|
+
}
|
7092
7118
|
_getTitleText(head) {
|
7093
7119
|
var _b;
|
7094
7120
|
return (_b = head.querySelector('title')) === null || _b === void 0 ? void 0 : _b.textContent;
|
@@ -7188,7 +7214,7 @@ up.RevealMotion = class RevealMotion {
|
|
7188
7214
|
const maxPixels = u.evalOption(this._max, this._element);
|
7189
7215
|
elementRect.height = Math.min(elementRect.height, maxPixels);
|
7190
7216
|
}
|
7191
|
-
this.
|
7217
|
+
elementRect.grow(this._padding);
|
7192
7218
|
this._substractObstructions(viewportRect);
|
7193
7219
|
if (viewportRect.height < 0) {
|
7194
7220
|
up.fail('Viewport has no visible area');
|
@@ -7227,10 +7253,6 @@ up.RevealMotion = class RevealMotion {
|
|
7227
7253
|
return up.Rect.fromElement(this._viewport);
|
7228
7254
|
}
|
7229
7255
|
}
|
7230
|
-
_addPadding(elementRect) {
|
7231
|
-
elementRect.top -= this._padding;
|
7232
|
-
elementRect.height += 2 * this._padding;
|
7233
|
-
}
|
7234
7256
|
_selectObstructions(selector) {
|
7235
7257
|
let elements = up.fragment.all(selector, { layer: this._obstructionsLayer });
|
7236
7258
|
return u.filter(elements, e.isVisible);
|
@@ -7783,10 +7805,6 @@ up.protocol = (function () {
|
|
7783
7805
|
function locationFromXHR(xhr) {
|
7784
7806
|
return extractHeader(xhr, 'location') || xhr.responseURL;
|
7785
7807
|
}
|
7786
|
-
function influencingHeadersFromResponse(response) {
|
7787
|
-
let varyHeaderValue = response.header('Vary');
|
7788
|
-
return u.parseTokens(varyHeaderValue, { separator: 'comma' });
|
7789
|
-
}
|
7790
7808
|
const config = new up.Config(() => ({
|
7791
7809
|
methodParam: '_method',
|
7792
7810
|
csrfParam() { return e.metaContent('csrf-param'); },
|
@@ -7847,7 +7865,6 @@ up.protocol = (function () {
|
|
7847
7865
|
headerize,
|
7848
7866
|
wrapMethod,
|
7849
7867
|
cspNoncesFromHeader,
|
7850
|
-
influencingHeadersFromResponse,
|
7851
7868
|
};
|
7852
7869
|
})();
|
7853
7870
|
|
@@ -7983,44 +8000,61 @@ up.script = (function () {
|
|
7983
8000
|
let registeredCompilers = [];
|
7984
8001
|
let registeredMacros = [];
|
7985
8002
|
function registerCompiler(...args) {
|
7986
|
-
|
7987
|
-
return insertCompiler(registeredCompilers, compiler);
|
8003
|
+
registerProcessor(args);
|
7988
8004
|
}
|
7989
8005
|
function registerMacro(...args) {
|
7990
|
-
|
7991
|
-
|
7992
|
-
|
7993
|
-
|
7994
|
-
}
|
7995
|
-
|
8006
|
+
registerProcessor(args, { macro: true });
|
8007
|
+
}
|
8008
|
+
function registerAttrCompiler(...args) {
|
8009
|
+
let [attr, options, valueCallback] = parseProcessorArgs(args);
|
8010
|
+
let selector = `[${attr}]`;
|
8011
|
+
let callback = (element) => {
|
8012
|
+
let value = e.booleanOrStringAttr(element, attr, options.defaultValue);
|
8013
|
+
if (!value)
|
8014
|
+
return;
|
8015
|
+
return valueCallback(element, value);
|
8016
|
+
};
|
8017
|
+
registerProcessor([selector, options, callback]);
|
7996
8018
|
}
|
7997
8019
|
function detectSystemMacroPriority(macroSelector) {
|
7998
8020
|
macroSelector = u.evalOption(macroSelector);
|
7999
8021
|
for (let substr in SYSTEM_MACRO_PRIORITIES) {
|
8000
|
-
const priority = SYSTEM_MACRO_PRIORITIES[substr];
|
8001
8022
|
if (macroSelector.indexOf(substr) >= 0) {
|
8002
|
-
return
|
8023
|
+
return SYSTEM_MACRO_PRIORITIES[substr];
|
8024
|
+
}
|
8025
|
+
}
|
8026
|
+
up.fail('Unregistered priority for system macro %o', macroSelector);
|
8027
|
+
}
|
8028
|
+
function registerProcessor(args, overrides = {}) {
|
8029
|
+
let processor = buildProcessor(args, overrides);
|
8030
|
+
if (processor.macro) {
|
8031
|
+
if (up.framework.evaling) {
|
8032
|
+
processor.priority || (processor.priority = detectSystemMacroPriority(processor.selector));
|
8003
8033
|
}
|
8034
|
+
insertProcessor(registeredMacros, processor);
|
8035
|
+
}
|
8036
|
+
else {
|
8037
|
+
insertProcessor(registeredCompilers, processor);
|
8004
8038
|
}
|
8005
8039
|
}
|
8006
|
-
const
|
8040
|
+
const parseProcessorArgs = function (args) {
|
8007
8041
|
const defaults = u.extractOptions(args);
|
8008
8042
|
const selector = args.shift();
|
8009
8043
|
const callback = args.pop();
|
8010
8044
|
const options = Object.assign(Object.assign({}, defaults), u.extractOptions(args));
|
8011
8045
|
return [selector, options, callback];
|
8012
8046
|
};
|
8013
|
-
function
|
8014
|
-
let [selector, options, callback] =
|
8047
|
+
function buildProcessor(args, overrides) {
|
8048
|
+
let [selector, options, callback] = parseProcessorArgs(args);
|
8015
8049
|
options = u.options(options, {
|
8016
8050
|
selector,
|
8017
8051
|
isDefault: up.framework.evaling,
|
8018
8052
|
priority: 0,
|
8019
8053
|
batch: false,
|
8020
8054
|
});
|
8021
|
-
return Object.assign(callback, options);
|
8055
|
+
return Object.assign(callback, options, overrides);
|
8022
8056
|
}
|
8023
|
-
function
|
8057
|
+
function insertProcessor(queue, newCompiler) {
|
8024
8058
|
let existingCompiler;
|
8025
8059
|
let index = 0;
|
8026
8060
|
while ((existingCompiler = queue[index]) && (existingCompiler.priority >= newCompiler.priority)) {
|
@@ -8114,6 +8148,7 @@ up.script = (function () {
|
|
8114
8148
|
config,
|
8115
8149
|
compiler: registerCompiler,
|
8116
8150
|
macro: registerMacro,
|
8151
|
+
attrCompiler: registerAttrCompiler,
|
8117
8152
|
destructor: registerDestructor,
|
8118
8153
|
hello,
|
8119
8154
|
clean,
|
@@ -8128,6 +8163,7 @@ up.destructor = up.script.destructor;
|
|
8128
8163
|
up.macro = up.script.macro;
|
8129
8164
|
up.data = up.script.data;
|
8130
8165
|
up.hello = up.script.hello;
|
8166
|
+
up.attribute = up.script.attrCompiler;
|
8131
8167
|
|
8132
8168
|
|
8133
8169
|
/***/ }),
|
@@ -8270,6 +8306,15 @@ up.history = (function () {
|
|
8270
8306
|
document.head.append(newMetaTag);
|
8271
8307
|
}
|
8272
8308
|
}
|
8309
|
+
function getLang(doc = document) {
|
8310
|
+
let { documentElement } = doc;
|
8311
|
+
if (documentElement.matches('html')) {
|
8312
|
+
return doc.documentElement.lang;
|
8313
|
+
}
|
8314
|
+
}
|
8315
|
+
function updateLang(newLang) {
|
8316
|
+
e.toggleAttr(e.root, 'lang', newLang, !!newLang);
|
8317
|
+
}
|
8273
8318
|
up.macro('a[up-back], [up-href][up-back]', function (link) {
|
8274
8319
|
if (previousLocation) {
|
8275
8320
|
e.setMissingAttrs(link, {
|
@@ -8291,6 +8336,8 @@ up.history = (function () {
|
|
8291
8336
|
isLocation,
|
8292
8337
|
findMetaTags,
|
8293
8338
|
updateMetaTags,
|
8339
|
+
getLang,
|
8340
|
+
updateLang,
|
8294
8341
|
};
|
8295
8342
|
})();
|
8296
8343
|
|
@@ -8773,6 +8820,25 @@ up.fragment = (function () {
|
|
8773
8820
|
up.destructor(fragment, unsubscribe);
|
8774
8821
|
return unsubscribe;
|
8775
8822
|
}
|
8823
|
+
function onFirstIntersect(origin, callback, { margin = 0 } = {}) {
|
8824
|
+
if (e.isIntersectingWindow(origin, { margin })) {
|
8825
|
+
callback();
|
8826
|
+
return;
|
8827
|
+
}
|
8828
|
+
function processIntersectEntries(entries) {
|
8829
|
+
for (let entry of entries) {
|
8830
|
+
if (entry.isIntersecting) {
|
8831
|
+
disconnect();
|
8832
|
+
callback();
|
8833
|
+
return;
|
8834
|
+
}
|
8835
|
+
}
|
8836
|
+
}
|
8837
|
+
let observer = new IntersectionObserver(processIntersectEntries, { rootMargin: `${margin}px` });
|
8838
|
+
let disconnect = () => observer.disconnect();
|
8839
|
+
observer.observe(origin);
|
8840
|
+
onAborted(origin, disconnect);
|
8841
|
+
}
|
8776
8842
|
up.on('up:framework:boot', function () {
|
8777
8843
|
const { documentElement } = document;
|
8778
8844
|
documentElement.setAttribute('up-source', u.normalizeURL(location.href, { hash: false }));
|
@@ -8813,6 +8879,7 @@ up.fragment = (function () {
|
|
8813
8879
|
shouldRevalidate,
|
8814
8880
|
abort,
|
8815
8881
|
onAborted,
|
8882
|
+
onFirstIntersect,
|
8816
8883
|
splitTarget,
|
8817
8884
|
parseTargetSteps,
|
8818
8885
|
isAlive,
|
@@ -8942,33 +9009,9 @@ up.viewport = (function () {
|
|
8942
9009
|
function isRoot(element) {
|
8943
9010
|
return element === getRoot();
|
8944
9011
|
}
|
8945
|
-
function
|
8946
|
-
return window.innerWidth
|
8947
|
-
}
|
8948
|
-
function rootOverflowElement() {
|
8949
|
-
const { body } = document;
|
8950
|
-
const html = document.documentElement;
|
8951
|
-
const element = u.find([html, body], wasChosenAsOverflowingElement);
|
8952
|
-
return element || getRoot();
|
8953
|
-
}
|
8954
|
-
function wasChosenAsOverflowingElement(element) {
|
8955
|
-
const overflowY = e.style(element, 'overflow-y');
|
8956
|
-
return overflowY === 'auto' || overflowY === 'scroll';
|
8957
|
-
}
|
8958
|
-
const scrollbarWidth = u.memoize(function () {
|
8959
|
-
const outerStyle = {
|
8960
|
-
position: 'absolute',
|
8961
|
-
top: '0',
|
8962
|
-
left: '0',
|
8963
|
-
width: '100px',
|
8964
|
-
height: '100px',
|
8965
|
-
overflowY: 'scroll'
|
8966
|
-
};
|
8967
|
-
const outer = up.element.affix(document.body, '[up-viewport]', { style: outerStyle });
|
8968
|
-
const width = outer.offsetWidth - outer.clientWidth;
|
8969
|
-
outer.remove();
|
8970
|
-
return width;
|
8971
|
-
});
|
9012
|
+
function rootScrollbarWidth() {
|
9013
|
+
return window.innerWidth - rootWidth();
|
9014
|
+
}
|
8972
9015
|
function scrollTopKey(viewport) {
|
8973
9016
|
return up.fragment.tryToTarget(viewport);
|
8974
9017
|
}
|
@@ -9146,10 +9189,8 @@ up.viewport = (function () {
|
|
9146
9189
|
get root() { return getRoot(); },
|
9147
9190
|
rootWidth,
|
9148
9191
|
rootHeight,
|
9149
|
-
rootHasReducedWidthFromScrollbar,
|
9150
|
-
rootOverflowElement,
|
9151
9192
|
isRoot,
|
9152
|
-
|
9193
|
+
rootScrollbarWidth,
|
9153
9194
|
saveScroll,
|
9154
9195
|
restoreScroll,
|
9155
9196
|
resetScroll,
|
@@ -9239,8 +9280,9 @@ up.motion = (function () {
|
|
9239
9280
|
return cssTransition.start();
|
9240
9281
|
}
|
9241
9282
|
function applyConfig(options) {
|
9242
|
-
|
9243
|
-
options.
|
9283
|
+
var _a, _b;
|
9284
|
+
(_a = options.easing) !== null && _a !== void 0 ? _a : (options.easing = config.easing);
|
9285
|
+
(_b = options.duration) !== null && _b !== void 0 ? _b : (options.duration = config.duration);
|
9244
9286
|
}
|
9245
9287
|
function findNamedAnimation(name) {
|
9246
9288
|
return namedAnimations[name] || up.fail("Unknown animation %o", name);
|
@@ -9510,6 +9552,7 @@ up.network = (function () {
|
|
9510
9552
|
if (!newRequest.background) {
|
9511
9553
|
queue.promoteToForeground(cachedRequest);
|
9512
9554
|
}
|
9555
|
+
cachedRequest.mergeIfUnsent(newRequest);
|
9513
9556
|
cache.track(cachedRequest, newRequest, { onIncompatible: processRequest });
|
9514
9557
|
return true;
|
9515
9558
|
}
|
@@ -9522,10 +9565,10 @@ up.network = (function () {
|
|
9522
9565
|
function handleCaching(request) {
|
9523
9566
|
if (request.willCache()) {
|
9524
9567
|
cache.put(request);
|
9525
|
-
request.onLoading = () => cache.
|
9568
|
+
request.onLoading = () => cache.reindex(request);
|
9526
9569
|
}
|
9527
9570
|
u.always(request, function (responseOrError) {
|
9528
|
-
var _a, _b, _c, _d
|
9571
|
+
var _a, _b, _c, _d;
|
9529
9572
|
let expireCache = (_b = (_a = responseOrError.expireCache) !== null && _a !== void 0 ? _a : request.expireCache) !== null && _b !== void 0 ? _b : u.evalOption(config.expireCache, request, responseOrError);
|
9530
9573
|
if (expireCache) {
|
9531
9574
|
cache.expire(expireCache, { except: request });
|
@@ -9534,12 +9577,21 @@ up.network = (function () {
|
|
9534
9577
|
if (evictCache) {
|
9535
9578
|
cache.evict(evictCache, { except: request });
|
9536
9579
|
}
|
9537
|
-
|
9538
|
-
|
9580
|
+
let hasCacheEntry = cache.get(request);
|
9581
|
+
let isResponse = responseOrError instanceof up.Response;
|
9582
|
+
let isNetworkError = !isResponse;
|
9583
|
+
let isSuccessResponse = isResponse && responseOrError.ok;
|
9584
|
+
let isErrorResponse = isResponse && !responseOrError.ok;
|
9585
|
+
let isEmptyResponse = isResponse && responseOrError.none;
|
9586
|
+
if (isErrorResponse) {
|
9587
|
+
cache.evict(request.url);
|
9539
9588
|
}
|
9540
|
-
if (
|
9589
|
+
else if (isNetworkError || isEmptyResponse) {
|
9541
9590
|
cache.evict(request);
|
9542
9591
|
}
|
9592
|
+
else if (isSuccessResponse && hasCacheEntry) {
|
9593
|
+
cache.put(request);
|
9594
|
+
}
|
9543
9595
|
});
|
9544
9596
|
}
|
9545
9597
|
function isBusy() {
|
@@ -9557,7 +9609,8 @@ up.network = (function () {
|
|
9557
9609
|
if (request.cache && response.url && request.url !== response.url) {
|
9558
9610
|
const newRequest = u.variant(request, {
|
9559
9611
|
method: response.method,
|
9560
|
-
url: response.url
|
9612
|
+
url: response.url,
|
9613
|
+
cacheRoute: null,
|
9561
9614
|
});
|
9562
9615
|
cache.alias(request, newRequest);
|
9563
9616
|
}
|
@@ -9864,7 +9917,6 @@ __webpack_require__(96);
|
|
9864
9917
|
up.link = (function () {
|
9865
9918
|
const u = up.util;
|
9866
9919
|
const e = up.element;
|
9867
|
-
const linkPreloader = new up.LinkPreloader();
|
9868
9920
|
let lastMousedownTarget = null;
|
9869
9921
|
const LINKS_WITH_LOCAL_HTML = ['a[up-content]', 'a[up-fragment]', 'a[up-document]'];
|
9870
9922
|
const LINKS_WITH_REMOTE_HTML = ['a[href]', '[up-href]'];
|
@@ -9898,10 +9950,9 @@ up.link = (function () {
|
|
9898
9950
|
}
|
9899
9951
|
function reset() {
|
9900
9952
|
lastMousedownTarget = null;
|
9901
|
-
linkPreloader.reset();
|
9902
9953
|
}
|
9903
|
-
const follow = up.mockable(function (link, options) {
|
9904
|
-
return up.render(followOptions(link, options));
|
9954
|
+
const follow = up.mockable(function (link, options, parserOptions) {
|
9955
|
+
return up.render(followOptions(link, options, parserOptions));
|
9905
9956
|
});
|
9906
9957
|
function parseRequestOptions(link, options, parserOptions) {
|
9907
9958
|
options = u.options(options);
|
@@ -9923,6 +9974,7 @@ up.link = (function () {
|
|
9923
9974
|
return options;
|
9924
9975
|
}
|
9925
9976
|
function followOptions(link, options, parserOptions) {
|
9977
|
+
var _a;
|
9926
9978
|
link = up.fragment.get(link);
|
9927
9979
|
options = u.options(options);
|
9928
9980
|
const parser = new up.OptionsParser(link, options, Object.assign({ fail: true }, parserOptions));
|
@@ -9976,10 +10028,9 @@ up.link = (function () {
|
|
9976
10028
|
parser.booleanOrString('location');
|
9977
10029
|
parser.booleanOrString('title');
|
9978
10030
|
parser.boolean('metaTags');
|
10031
|
+
parser.booleanOrString('lang');
|
9979
10032
|
parser.include(up.motion.motionOptions);
|
9980
|
-
|
9981
|
-
options.guardEvent = up.event.build('up:link:follow', { log: 'Following link' });
|
9982
|
-
}
|
10033
|
+
(_a = options.guardEvent) !== null && _a !== void 0 ? _a : (options.guardEvent = up.event.build('up:link:follow', { log: ['Following link %o', link] }));
|
9983
10034
|
return options;
|
9984
10035
|
}
|
9985
10036
|
function preload(link, options) {
|
@@ -10018,9 +10069,10 @@ up.link = (function () {
|
|
10018
10069
|
if (link.matches('a[href], button')) {
|
10019
10070
|
return;
|
10020
10071
|
}
|
10072
|
+
let role = link.matches('a') ? 'link' : 'button';
|
10021
10073
|
e.setMissingAttrs(link, {
|
10022
10074
|
tabindex: '0',
|
10023
|
-
role
|
10075
|
+
role,
|
10024
10076
|
'up-clickable': ''
|
10025
10077
|
});
|
10026
10078
|
link.addEventListener('keydown', function (event) {
|
@@ -10080,6 +10132,38 @@ up.link = (function () {
|
|
10080
10132
|
const method = followMethod(link);
|
10081
10133
|
return up.network.isSafeMethod(method);
|
10082
10134
|
}
|
10135
|
+
function onLoadCondition(condition, link, callback) {
|
10136
|
+
switch (condition) {
|
10137
|
+
case 'insert':
|
10138
|
+
callback();
|
10139
|
+
break;
|
10140
|
+
case 'reveal': {
|
10141
|
+
let margin = e.numberAttr(link, 'up-intersect-margin');
|
10142
|
+
up.fragment.onFirstIntersect(link, callback, { margin });
|
10143
|
+
break;
|
10144
|
+
}
|
10145
|
+
case 'hover':
|
10146
|
+
new up.LinkFollowIntent(link, callback);
|
10147
|
+
break;
|
10148
|
+
case 'manual':
|
10149
|
+
break;
|
10150
|
+
}
|
10151
|
+
}
|
10152
|
+
function loadDeferred(link, options) {
|
10153
|
+
let guardEvent = up.event.build('up:deferred:load', { log: ['Loading deferred %o', link] });
|
10154
|
+
let forcedOptions = Object.assign({ navigate: false, guardEvent }, options);
|
10155
|
+
let defaults = {
|
10156
|
+
target: ':origin',
|
10157
|
+
cache: 'auto',
|
10158
|
+
revalidate: 'auto',
|
10159
|
+
feedback: true,
|
10160
|
+
};
|
10161
|
+
return follow(link, forcedOptions, { defaults });
|
10162
|
+
}
|
10163
|
+
up.attribute('up-defer', { defaultValue: 'insert' }, function (link, condition) {
|
10164
|
+
let doLoad = () => up.error.muteUncriticalRejection(loadDeferred(link));
|
10165
|
+
onLoadCondition(condition, link, doLoad);
|
10166
|
+
});
|
10083
10167
|
up.on('up:click', config.selectorFn('followSelectors'), function (event, link) {
|
10084
10168
|
if (shouldFollowEvent(event, link)) {
|
10085
10169
|
up.event.halt(event, { log: true });
|
@@ -10087,21 +10171,20 @@ up.link = (function () {
|
|
10087
10171
|
up.error.muteUncriticalRejection(follow(link));
|
10088
10172
|
}
|
10089
10173
|
});
|
10090
|
-
up.
|
10091
|
-
|
10092
|
-
let childLink = e.get(area, selector);
|
10174
|
+
up.attribute('up-expand', { defaultValue: 'a, [up-href]', macro: true }, function (area, childLinkSelector) {
|
10175
|
+
let childLink = e.get(area, childLinkSelector);
|
10093
10176
|
if (childLink) {
|
10094
|
-
|
10095
|
-
|
10096
|
-
e.setMissingAttrs(area, areaAttrs);
|
10097
|
-
const areaClasses = e.upClasses(childLink);
|
10098
|
-
area.classList.add(...areaClasses);
|
10177
|
+
e.setMissingAttrs(area, Object.assign({ 'up-href': e.attr(childLink, 'href') }, e.upAttrs(childLink)));
|
10178
|
+
area.classList.add(...e.upClasses(childLink));
|
10099
10179
|
makeFollowable(area);
|
10100
10180
|
}
|
10101
10181
|
});
|
10102
10182
|
up.compiler(config.selectorFn('preloadSelectors'), function (link) {
|
10183
|
+
var _a;
|
10103
10184
|
if (!isPreloadDisabled(link)) {
|
10104
|
-
|
10185
|
+
let doPreload = () => up.error.muteUncriticalRejection(preload(link));
|
10186
|
+
let condition = (_a = e.booleanOrStringAttr(link, 'up-preload', null)) !== null && _a !== void 0 ? _a : 'hover';
|
10187
|
+
onLoadCondition(condition, link, doPreload);
|
10105
10188
|
}
|
10106
10189
|
});
|
10107
10190
|
up.on('up:framework:reset', reset);
|
@@ -10110,18 +10193,17 @@ up.link = (function () {
|
|
10110
10193
|
followOptions,
|
10111
10194
|
preload,
|
10112
10195
|
makeFollowable,
|
10113
|
-
makeClickable,
|
10114
10196
|
isSafe,
|
10115
10197
|
isFollowable,
|
10116
10198
|
shouldFollowEvent,
|
10117
|
-
followMethod,
|
10118
10199
|
convertClicks,
|
10119
10200
|
config,
|
10120
10201
|
combineFollowableSelectors,
|
10121
|
-
|
10202
|
+
loadDeferred,
|
10122
10203
|
};
|
10123
10204
|
})();
|
10124
10205
|
up.follow = up.link.follow;
|
10206
|
+
up.deferred = { load: up.link.loadDeferred };
|
10125
10207
|
|
10126
10208
|
|
10127
10209
|
/***/ }),
|
@@ -10194,7 +10276,8 @@ up.form = (function () {
|
|
10194
10276
|
options.guardEvent || (options.guardEvent = up.event.build('up:form:submit', {
|
10195
10277
|
submitButton: options.submitButton,
|
10196
10278
|
log: 'Submitting form',
|
10197
|
-
params: options.params
|
10279
|
+
params: options.params,
|
10280
|
+
form,
|
10198
10281
|
}));
|
10199
10282
|
options.origin || (options.origin = up.viewport.focusedElementWithin(form) || options.submitButton || form);
|
10200
10283
|
parser.include(up.link.followOptions);
|
@@ -10469,7 +10552,9 @@ up.form = (function () {
|
|
10469
10552
|
validator.watchContainer(fieldOrForm);
|
10470
10553
|
});
|
10471
10554
|
function validatingFieldSelector() {
|
10472
|
-
|
10555
|
+
let includes = config.fieldSelectors.map((selector) => `${selector}[up-validate], [up-validate] ${selector}`);
|
10556
|
+
let excludes = ['[up-validate=false]'];
|
10557
|
+
return e.unionSelector(includes, excludes);
|
10473
10558
|
}
|
10474
10559
|
up.compiler('[up-switch]', (switcher) => {
|
10475
10560
|
switchTargets(switcher);
|
@@ -10480,8 +10565,8 @@ up.form = (function () {
|
|
10480
10565
|
up.compiler('[up-show-for]:not(.up-switched), [up-hide-for]:not(.up-switched)', (element) => {
|
10481
10566
|
switchTarget(element);
|
10482
10567
|
});
|
10483
|
-
up.
|
10484
|
-
up.
|
10568
|
+
up.attribute('up-watch', (formOrField) => watch(formOrField));
|
10569
|
+
up.attribute('up-autosubmit', (formOrField) => autosubmit(formOrField));
|
10485
10570
|
return {
|
10486
10571
|
config,
|
10487
10572
|
submit,
|
@@ -10523,6 +10608,7 @@ up.feedback = (function () {
|
|
10523
10608
|
const config = new up.Config(() => ({
|
10524
10609
|
currentClasses: ['up-current'],
|
10525
10610
|
navSelectors: ['[up-nav]', 'nav'],
|
10611
|
+
noNavSelectors: ['[up-nav=false]'],
|
10526
10612
|
}));
|
10527
10613
|
function reset() {
|
10528
10614
|
up.layer.root.feedbackLocation = null;
|
@@ -10530,9 +10616,6 @@ up.feedback = (function () {
|
|
10530
10616
|
const CLASS_ACTIVE = 'up-active';
|
10531
10617
|
const CLASS_LOADING = 'up-loading';
|
10532
10618
|
const SELECTOR_LINK = 'a, [up-href]';
|
10533
|
-
function navSelector() {
|
10534
|
-
return config.selector('navSelectors');
|
10535
|
-
}
|
10536
10619
|
function normalizeURL(url) {
|
10537
10620
|
if (url) {
|
10538
10621
|
return u.normalizeURL(url, { trailingSlash: false, hash: false });
|
@@ -10541,40 +10624,23 @@ up.feedback = (function () {
|
|
10541
10624
|
function linkURLs(link) {
|
10542
10625
|
return link.upFeedbackURLs || (link.upFeedbackURLs = new up.LinkFeedbackURLs(link));
|
10543
10626
|
}
|
10544
|
-
function updateFragment(fragment) {
|
10545
|
-
|
10546
|
-
|
10547
|
-
|
10548
|
-
|
10549
|
-
}
|
10550
|
-
|
10551
|
-
|
10627
|
+
function updateFragment(fragment, { layer } = {}) {
|
10628
|
+
layer || (layer = up.layer.get(fragment));
|
10629
|
+
let layerLocation = getNormalizedLayerLocation(layer);
|
10630
|
+
const navSelector = config.selector('navSelectors');
|
10631
|
+
const navLinkSelector = `${navSelector} :is(${SELECTOR_LINK}), ${navSelector}:is(${SELECTOR_LINK})`;
|
10632
|
+
const links = up.fragment.all(navLinkSelector, { layer });
|
10633
|
+
for (let link of links) {
|
10634
|
+
const isCurrent = linkURLs(link).isCurrent(layerLocation);
|
10635
|
+
for (let currentClass of config.currentClasses) {
|
10636
|
+
link.classList.toggle(currentClass, isCurrent);
|
10637
|
+
}
|
10638
|
+
e.toggleAttr(link, 'aria-current', 'page', isCurrent);
|
10552
10639
|
}
|
10553
10640
|
}
|
10554
|
-
function updateLinksWithinNavs(fragment, options) {
|
10555
|
-
const navs = up.fragment.subtree(fragment, navSelector(), options);
|
10556
|
-
const links = u.flatMap(navs, nav => e.subtree(nav, SELECTOR_LINK));
|
10557
|
-
updateLinks(links, options);
|
10558
|
-
}
|
10559
10641
|
function getNormalizedLayerLocation(layer) {
|
10560
10642
|
return layer.feedbackLocation || normalizeURL(layer.location);
|
10561
10643
|
}
|
10562
|
-
function updateLinks(links, options = {}) {
|
10563
|
-
if (!links.length) {
|
10564
|
-
return;
|
10565
|
-
}
|
10566
|
-
const layer = options.layer || up.layer.get(links[0]);
|
10567
|
-
let layerLocation = getNormalizedLayerLocation(layer);
|
10568
|
-
if (layerLocation) {
|
10569
|
-
for (let link of links) {
|
10570
|
-
const isCurrent = linkURLs(link).isCurrent(layerLocation);
|
10571
|
-
for (let currentClass of config.currentClasses) {
|
10572
|
-
link.classList.toggle(currentClass, isCurrent);
|
10573
|
-
}
|
10574
|
-
e.toggleAttr(link, 'aria-current', 'page', isCurrent);
|
10575
|
-
}
|
10576
|
-
}
|
10577
|
-
}
|
10578
10644
|
function findActivatableArea(element) {
|
10579
10645
|
return e.ancestor(element, SELECTOR_LINK) || element;
|
10580
10646
|
}
|
@@ -10602,7 +10668,7 @@ up.feedback = (function () {
|
|
10602
10668
|
const layerLocation = getNormalizedLayerLocation(layer.location);
|
10603
10669
|
if (!processedLocation || (processedLocation !== layerLocation)) {
|
10604
10670
|
layer.feedbackLocation = layerLocation;
|
10605
|
-
|
10671
|
+
updateFragment(layer.element, { layer });
|
10606
10672
|
}
|
10607
10673
|
}
|
10608
10674
|
function onBrowserLocationChanged() {
|
@@ -10637,6 +10703,7 @@ up.radio = (function () {
|
|
10637
10703
|
const e = up.element;
|
10638
10704
|
const config = new up.Config(() => ({
|
10639
10705
|
hungrySelectors: ['[up-hungry]'],
|
10706
|
+
noHungrySelectors: ['[up-hungry=false]'],
|
10640
10707
|
pollInterval: 30000,
|
10641
10708
|
}));
|
10642
10709
|
function hungrySteps(renderOptions) {
|
@@ -10682,7 +10749,7 @@ up.radio = (function () {
|
|
10682
10749
|
parser.string('ifLayer', { default: 'front' });
|
10683
10750
|
return options;
|
10684
10751
|
}
|
10685
|
-
up.
|
10752
|
+
up.attribute('up-poll', function (fragment) {
|
10686
10753
|
up.FragmentPolling.forFragment(fragment).onPollAttributeObserved();
|
10687
10754
|
});
|
10688
10755
|
up.macro('[up-flashes]', function (fragment) {
|