unpoly-rails 3.0.0.rc1 → 3.0.0.rc3

Sign up to get free protection for your applications and to get access to all the features.
@@ -5,7 +5,7 @@
5
5
  /***/ (() => {
6
6
 
7
7
  window.up = {
8
- version: '3.0.0-rc1'
8
+ version: '3.0.0-rc3'
9
9
  };
10
10
 
11
11
 
@@ -14,13 +14,18 @@ window.up = {
14
14
  /***/ (() => {
15
15
 
16
16
  up.mockable = function (originalFn) {
17
- let spy;
18
- const mockableFn = function () {
19
- return (spy || originalFn).apply(null, arguments);
20
- };
21
- mockableFn.mock = () => spy = jasmine.createSpy('mockable', originalFn);
22
- document.addEventListener('up:framework:reset', () => spy = null);
23
- return mockableFn;
17
+ if (window.jasmine) {
18
+ let name = originalFn.name;
19
+ let obj = { [name]: originalFn };
20
+ let mockableFn = function () {
21
+ return obj[name].apply(this, arguments);
22
+ };
23
+ mockableFn.mock = () => spyOn(obj, name);
24
+ return mockableFn;
25
+ }
26
+ else {
27
+ return originalFn;
28
+ }
24
29
  };
25
30
 
26
31
 
@@ -106,15 +111,15 @@ up.util = (function () {
106
111
  return block;
107
112
  }
108
113
  }
109
- function map(array, block) {
110
- if (array.length === 0) {
114
+ function map(list, block) {
115
+ if (list.length === 0) {
111
116
  return [];
112
117
  }
113
118
  block = iteratee(block);
114
119
  let mapped = [];
115
- for (let i = 0; i < array.length; i++) {
116
- let element = array[i];
117
- mapped.push(block(element, i));
120
+ let i = 0;
121
+ for (let item of list) {
122
+ mapped.push(block(item, i++));
118
123
  }
119
124
  return mapped;
120
125
  }
@@ -126,8 +131,9 @@ up.util = (function () {
126
131
  return map(array, pairer).reduce(merger, {});
127
132
  }
128
133
  function each(array, block) {
129
- for (let i = 0; i < array.length; i++) {
130
- block(array[i], i);
134
+ let i = 0;
135
+ for (let item of array) {
136
+ block(item, i++);
131
137
  }
132
138
  }
133
139
  function isNull(object) {
@@ -304,10 +310,11 @@ up.util = (function () {
304
310
  function some(list, tester) {
305
311
  return !!findResult(list, tester);
306
312
  }
307
- function findResult(array, tester) {
313
+ function findResult(list, tester) {
308
314
  tester = iteratee(tester);
309
- for (let i = 0; i < array.length; i++) {
310
- const result = tester(array[i], i);
315
+ let i = 0;
316
+ for (let item of list) {
317
+ const result = tester(item, i++);
311
318
  if (result) {
312
319
  return result;
313
320
  }
@@ -316,8 +323,9 @@ up.util = (function () {
316
323
  function every(list, tester) {
317
324
  tester = iteratee(tester);
318
325
  let match = true;
319
- for (let i = 0; i < list.length; i++) {
320
- if (!tester(list[i], i)) {
326
+ let i = 0;
327
+ for (let item of list) {
328
+ if (!tester(item, i++)) {
321
329
  match = false;
322
330
  break;
323
331
  }
@@ -489,7 +497,7 @@ up.util = (function () {
489
497
  function flatMap(array, block) {
490
498
  return flatten(map(array, block));
491
499
  }
492
- function always(promise, callback) {
500
+ function always(promise, callback = identity) {
493
501
  return promise.then(callback, callback);
494
502
  }
495
503
  function newDeferred() {
@@ -591,7 +599,7 @@ up.util = (function () {
591
599
  Object.defineProperty(object, prop, { get });
592
600
  }
593
601
  function defineDelegates(object, props, targetProvider) {
594
- wrapList(props).forEach(function (prop) {
602
+ for (let prop of props) {
595
603
  Object.defineProperty(object, prop, {
596
604
  get() {
597
605
  const target = targetProvider.call(this);
@@ -606,7 +614,7 @@ up.util = (function () {
606
614
  target[prop] = newValue;
607
615
  }
608
616
  });
609
- });
617
+ }
610
618
  }
611
619
  function stringifyArg(arg) {
612
620
  let string;
@@ -701,6 +709,14 @@ up.util = (function () {
701
709
  };
702
710
  }
703
711
  }
712
+ function safeStringifyJSON(value) {
713
+ let json = JSON.stringify(value);
714
+ return escapeHighASCII(json);
715
+ }
716
+ function escapeHighASCII(string) {
717
+ let unicodeEscape = (char) => "\\u" + char.charCodeAt(0).toString(16).padStart(4, '0');
718
+ return string.replace(/[^\x00-\x7F]/g, unicodeEscape);
719
+ }
704
720
  return {
705
721
  parseURL,
706
722
  normalizeURL,
@@ -796,7 +812,8 @@ up.util = (function () {
796
812
  sprintf,
797
813
  renameKeys,
798
814
  negate,
799
- memoizeMethod
815
+ memoizeMethod,
816
+ safeStringifyJSON,
800
817
  };
801
818
  })();
802
819
 
@@ -871,12 +888,6 @@ up.browser = (function () {
871
888
  return value;
872
889
  }
873
890
  }
874
- const getJQuery = function () {
875
- if (!canJQuery()) {
876
- up.fail('jQuery must be published as window.jQuery');
877
- }
878
- return jQuery;
879
- };
880
891
  function assertConfirmed(options) {
881
892
  const confirmed = !options.confirm || window.confirm(options.confirm);
882
893
  if (!confirmed) {
@@ -891,7 +902,6 @@ up.browser = (function () {
891
902
  canEval,
892
903
  assertConfirmed,
893
904
  popCookie,
894
- get jQuery() { return getJQuery(); },
895
905
  };
896
906
  })();
897
907
 
@@ -1164,9 +1174,17 @@ up.element = (function () {
1164
1174
  klass = klass.replace(/:/g, '\\:');
1165
1175
  return `.${klass}`;
1166
1176
  }
1167
- function createDocumentFromHTML(html) {
1177
+ function createBrokenDocumentFromHTML(html) {
1168
1178
  return new DOMParser().parseFromString(html, 'text/html');
1169
1179
  }
1180
+ function fixScriptish(scriptish) {
1181
+ let clone = document.createElement(scriptish.tagName);
1182
+ for (let { name, value } of scriptish.attributes) {
1183
+ clone.setAttribute(name, value);
1184
+ }
1185
+ clone.textContent = scriptish.innerHTML;
1186
+ scriptish.replaceWith(clone);
1187
+ }
1170
1188
  function createFromHTML(html) {
1171
1189
  const range = document.createRange();
1172
1190
  range.setStart(document.body, 0);
@@ -1429,7 +1447,8 @@ up.element = (function () {
1429
1447
  isSingleton,
1430
1448
  attrSelector,
1431
1449
  tagName: elementTagName,
1432
- createDocumentFromHTML,
1450
+ createBrokenDocumentFromHTML,
1451
+ fixScriptish,
1433
1452
  createFromHTML,
1434
1453
  get root() { return getRoot(); },
1435
1454
  paint,
@@ -1626,82 +1645,26 @@ up.LogConfig = class LogConfig extends up.Config {
1626
1645
  /***/ (() => {
1627
1646
 
1628
1647
  const u = up.util;
1629
- up.Cache = class Cache {
1630
- constructor(config = {}) {
1631
- this.config = config;
1648
+ up.FIFOCache = class FIFOCache {
1649
+ constructor({ capacity = 10, normalizeKey = u.identity } = {}) {
1632
1650
  this.map = new Map();
1651
+ this.capacity = capacity;
1652
+ this.normalizeKey = normalizeKey;
1633
1653
  }
1634
- size() {
1635
- return this.map.size;
1636
- }
1637
- maxSize() {
1638
- return u.evalOption(this.config.size);
1639
- }
1640
- evictAge() {
1641
- return u.evalOption(this.config.evictAge);
1642
- }
1643
- normalizeStoreKey(key) {
1644
- return key;
1645
- }
1646
- isDisabled() {
1647
- return this.maxSize() === 0 || this.evictAge() === 0;
1648
- }
1649
- evict() {
1650
- this.map.clear();
1651
- }
1652
- records() {
1653
- return this.map.values();
1654
- }
1655
- makeRoomForAnotherRecord() {
1656
- const maxSize = this.maxSize();
1657
- const currentSize = this.size();
1658
- if (!maxSize || currentSize < maxSize)
1659
- return;
1660
- let records = Array.from(this.records());
1661
- records.sort((a, b) => b.createdAt - a.createdAt);
1662
- const overflow = currentSize - maxSize + 1;
1663
- for (let i = 0; i < overflow; i++) {
1664
- let key = records.pop().key;
1665
- this.map.delete(key);
1666
- }
1667
- }
1668
- alias(oldKey, newKey) {
1669
- const value = this.get(oldKey);
1670
- if (u.isDefined(value)) {
1671
- this.set(newKey, value);
1672
- }
1654
+ get(key) {
1655
+ key = this.normalizeKey(key);
1656
+ return this.map.get(key);
1673
1657
  }
1674
1658
  set(key, value) {
1675
- if (this.isDisabled())
1676
- return;
1677
- this.makeRoomForAnotherRecord();
1678
- key = this.normalizeStoreKey(key);
1679
- const createdAt = new Date();
1680
- const record = { key, value, createdAt };
1681
- this.map.set(key, record);
1682
- }
1683
- remove(key) {
1684
- key = this.normalizeStoreKey(key);
1685
- this.map.delete(key);
1686
- }
1687
- isUsable(record) {
1688
- const evictAge = this.evictAge();
1689
- if (!evictAge)
1690
- return true;
1691
- const age = new Date() - record.createdAt;
1692
- return age < evictAge;
1693
- }
1694
- get(key) {
1695
- const storeKey = this.normalizeStoreKey(key);
1696
- let record = this.map.get(storeKey);
1697
- if (record) {
1698
- if (this.isUsable(record)) {
1699
- return record.value;
1700
- }
1701
- else {
1702
- this.remove(key);
1703
- }
1659
+ if (this.map.size === this.capacity) {
1660
+ let oldestKey = this.map.keys().next().value;
1661
+ this.map.delete(oldestKey);
1704
1662
  }
1663
+ key = this.normalizeKey(key);
1664
+ this.map.set(key, value);
1665
+ }
1666
+ clear() {
1667
+ this.map.clear();
1705
1668
  }
1706
1669
  };
1707
1670
 
@@ -1876,7 +1839,7 @@ up.Change.Addition = class Addition extends up.Change {
1876
1839
  setETag({ newElement, etag }) {
1877
1840
  e.setMissingAttr(newElement, 'up-etag', etag || false);
1878
1841
  }
1879
- setMeta(options) {
1842
+ setReloadAttrs(options) {
1880
1843
  this.setSource(options);
1881
1844
  this.setTime(options);
1882
1845
  this.setETag(options);
@@ -2119,9 +2082,9 @@ up.Change.OpenLayer = class OpenLayer extends up.Change.Addition {
2119
2082
  this.layer.createElements(this.content);
2120
2083
  this.layer.setupHandlers();
2121
2084
  this.handleHistory();
2122
- this.setMeta({ newElement: this.content, source: this.options.source });
2085
+ this.setReloadAttrs({ newElement: this.content, source: this.options.source });
2123
2086
  responseDoc.finalizeElement(this.content);
2124
- up.hello(this.layer.element, { layer: this.layer, origin: this.origin });
2087
+ up.hello(this.layer.element, Object.assign(Object.assign({}, this.options), { layer: this.layer }));
2125
2088
  this.handleLayerChangeRequests();
2126
2089
  this.handleScroll();
2127
2090
  let renderResult = new up.RenderResult({
@@ -2290,7 +2253,7 @@ up.Change.UpdateLayer = (_a = class UpdateLayer extends up.Change.Addition {
2290
2253
  this.renderResult.fragments.unshift(...newFragments);
2291
2254
  }
2292
2255
  executeStep(step) {
2293
- this.setMeta(step);
2256
+ this.setReloadAttrs(step);
2294
2257
  switch (step.placement) {
2295
2258
  case 'swap': {
2296
2259
  let keepPlan = this.findKeepPlan(step);
@@ -2781,18 +2744,11 @@ up.Change.FromURL = (_a = class FromURL extends up.Change {
2781
2744
  onRequestSettledWithResponse(response) {
2782
2745
  var _a;
2783
2746
  this.response = response;
2784
- const expiredResponse = this.options.expiredResponse;
2785
- const eventProps = {
2786
- response: this.response,
2787
- renderOptions: this.options,
2788
- revalidating: !!expiredResponse,
2789
- expiredResponse,
2790
- };
2791
- if (up.fragment.config.skipResponse(eventProps)) {
2747
+ if (up.fragment.config.skipResponse(this.loadedEventProps())) {
2792
2748
  this.skip();
2793
2749
  }
2794
2750
  else {
2795
- this.request.assertEmitted('up:fragment:loaded', Object.assign(Object.assign({}, eventProps), { callback: this.options.onLoaded, log: ['Loaded fragment from %s', this.response.description], skip: () => this.skip() }));
2751
+ this.request.assertEmitted('up:fragment:loaded', Object.assign(Object.assign({}, this.loadedEventProps()), { callback: this.options.onLoaded, log: ['Loaded fragment from %s', this.response.description], skip: () => this.skip() }));
2796
2752
  }
2797
2753
  let fail = (_a = u.evalOption(this.options.fail, this.response)) !== null && _a !== void 0 ? _a : !response.ok;
2798
2754
  if (fail) {
@@ -2800,6 +2756,22 @@ up.Change.FromURL = (_a = class FromURL extends up.Change {
2800
2756
  }
2801
2757
  return this.updateContentFromResponse(this.options);
2802
2758
  }
2759
+ compilerPassMeta() {
2760
+ return u.pick(this.loadedEventProps(), [
2761
+ 'revalidating',
2762
+ 'response'
2763
+ ]);
2764
+ }
2765
+ loadedEventProps() {
2766
+ const { expiredResponse } = this.options;
2767
+ return {
2768
+ request: this.request,
2769
+ response: this.response,
2770
+ renderOptions: this.options,
2771
+ revalidating: !!expiredResponse,
2772
+ expiredResponse,
2773
+ };
2774
+ }
2803
2775
  onRequestSettledWithError(error) {
2804
2776
  if (error instanceof up.Offline) {
2805
2777
  this.request.emit('up:fragment:offline', {
@@ -2822,6 +2794,7 @@ up.Change.FromURL = (_a = class FromURL extends up.Change {
2822
2794
  up.puts('up.render()', 'Rendering failed response using fail-prefixed options (https://unpoly.com/failed-responses)');
2823
2795
  }
2824
2796
  this.augmentOptionsFromResponse(finalRenderOptions);
2797
+ finalRenderOptions.meta = this.compilerPassMeta();
2825
2798
  let result = new up.Change.FromContent(finalRenderOptions).execute();
2826
2799
  result.finished = this.finish(result, finalRenderOptions);
2827
2800
  return result;
@@ -2890,6 +2863,7 @@ up.Change.FromURL = (_a = class FromURL extends up.Change {
2890
2863
  (() => {
2891
2864
  u.memoizeMethod(_a.prototype, [
2892
2865
  'getRequestAttrs',
2866
+ 'loadedEventProps',
2893
2867
  ]);
2894
2868
  })(),
2895
2869
  _a);
@@ -2901,12 +2875,14 @@ up.Change.FromURL = (_a = class FromURL extends up.Change {
2901
2875
 
2902
2876
  const u = up.util;
2903
2877
  up.CompilerPass = class CompilerPass {
2904
- constructor(root, compilers, { layer, data, dataMap } = {}) {
2878
+ constructor(root, compilers, { layer, data, dataMap, meta }) {
2879
+ layer || (layer = up.layer.get(root) || up.layer.current);
2905
2880
  this.root = root;
2906
2881
  this.compilers = compilers;
2907
- this.layer = layer || up.layer.get(this.root) || up.layer.current;
2882
+ this.layer = layer;
2908
2883
  this.data = data;
2909
2884
  this.dataMap = dataMap;
2885
+ this.meta = Object.assign({ layer }, meta);
2910
2886
  this.errors = [];
2911
2887
  }
2912
2888
  run() {
@@ -2952,11 +2928,10 @@ up.CompilerPass = class CompilerPass {
2952
2928
  return (_b = (_a = up.migrate).postCompile) === null || _b === void 0 ? void 0 : _b.call(_a, matches, compiler);
2953
2929
  }
2954
2930
  compileOneElement(compiler, element) {
2955
- const elementArg = compiler.jQuery ? up.browser.jQuery(element) : element;
2956
- const compileArgs = [elementArg];
2931
+ const compileArgs = [element];
2957
2932
  if (compiler.length !== 1) {
2958
2933
  const data = up.syntax.data(element);
2959
- compileArgs.push(data);
2934
+ compileArgs.push(data, this.meta);
2960
2935
  }
2961
2936
  const result = this.applyCompilerFunction(compiler, element, compileArgs);
2962
2937
  let destructorOrDestructors = this.destructorPresence(result);
@@ -2965,11 +2940,10 @@ up.CompilerPass = class CompilerPass {
2965
2940
  }
2966
2941
  }
2967
2942
  compileBatch(compiler, elements) {
2968
- const elementsArgs = compiler.jQuery ? up.browser.jQuery(elements) : elements;
2969
- const compileArgs = [elementsArgs];
2943
+ const compileArgs = [elements];
2970
2944
  if (compiler.length !== 1) {
2971
2945
  const dataList = u.map(elements, up.syntax.data);
2972
- compileArgs.push(dataList);
2946
+ compileArgs.push(dataList, this.meta);
2973
2947
  }
2974
2948
  const result = this.applyCompilerFunction(compiler, elements, compileArgs);
2975
2949
  if (this.destructorPresence(result)) {
@@ -3275,7 +3249,6 @@ up.EventListener = class EventListener extends up.Record {
3275
3249
  'eventType',
3276
3250
  'selector',
3277
3251
  'callback',
3278
- 'jQuery',
3279
3252
  'guard',
3280
3253
  'baseLayer',
3281
3254
  'passive',
@@ -3323,8 +3296,7 @@ up.EventListener = class EventListener extends up.Record {
3323
3296
  return;
3324
3297
  }
3325
3298
  if (element) {
3326
- const elementArg = this.jQuery ? up.browser.jQuery(element) : element;
3327
- const args = [event, elementArg];
3299
+ const args = [event, element];
3328
3300
  const expectedArgCount = this.callback.length;
3329
3301
  if (expectedArgCount !== 1 && expectedArgCount !== 2) {
3330
3302
  const data = up.syntax.data(element);
@@ -3380,7 +3352,6 @@ up.EventListenerGroup = class EventListenerGroup extends up.Record {
3380
3352
  'eventTypes',
3381
3353
  'selector',
3382
3354
  'callback',
3383
- 'jQuery',
3384
3355
  'guard',
3385
3356
  'baseLayer',
3386
3357
  'passive',
@@ -4155,44 +4126,6 @@ up.FragmentScrolling = class FragmentScrolling extends up.FragmentProcessor {
4155
4126
  /* 47 */
4156
4127
  /***/ (() => {
4157
4128
 
4158
- const u = up.util;
4159
- const e = up.element;
4160
- up.HTMLWrapper = class HTMLWrapper {
4161
- constructor(tagName) {
4162
- this.tagName = tagName;
4163
- const openTag = `<${this.tagName}[^>]*>`;
4164
- const closeTag = `</${this.tagName}>`;
4165
- const innerHTML = "(.|\\s)*?";
4166
- this.pattern = new RegExp(openTag + innerHTML + closeTag, 'ig');
4167
- this.attrName = `up-wrapped-${this.tagName}`;
4168
- }
4169
- strip(html) {
4170
- return html.replace(this.pattern, '');
4171
- }
4172
- wrap(html) {
4173
- return html.replace(this.pattern, this.wrapMatch.bind(this));
4174
- }
4175
- wrapMatch(match) {
4176
- this.didWrap = true;
4177
- return '<meta name="' + this.attrName + '" value="' + u.escapeHTML(match) + '">';
4178
- }
4179
- unwrap(element) {
4180
- if (!this.didWrap) {
4181
- return;
4182
- }
4183
- for (let wrappedChild of element.querySelectorAll(`meta[name='${this.attrName}']`)) {
4184
- const originalHTML = wrappedChild.getAttribute('value');
4185
- const restoredElement = e.createFromHTML(originalHTML);
4186
- wrappedChild.replaceWith(restoredElement);
4187
- }
4188
- }
4189
- };
4190
-
4191
-
4192
- /***/ }),
4193
- /* 48 */
4194
- /***/ (() => {
4195
-
4196
4129
  const e = up.element;
4197
4130
  const u = up.util;
4198
4131
  up.Layer = class Layer extends up.Record {
@@ -4339,12 +4272,12 @@ up.Layer = class Layer extends up.Record {
4339
4272
  return this.stack.asCurrent(this, fn);
4340
4273
  }
4341
4274
  updateHistory(options) {
4342
- if (u.isString(options.title)) {
4343
- this.title = options.title;
4344
- }
4345
4275
  if (u.isString(options.location)) {
4346
4276
  this.location = options.location;
4347
4277
  }
4278
+ if (u.isString(options.title)) {
4279
+ this.title = options.title;
4280
+ }
4348
4281
  }
4349
4282
  isHistoryVisible() {
4350
4283
  return this.history && (this.isRoot() || this.parent.isHistoryVisible());
@@ -4377,12 +4310,14 @@ up.Layer = class Layer extends up.Record {
4377
4310
  set location(location) {
4378
4311
  const previousLocation = this.location;
4379
4312
  location = up.history.normalizeURL(location);
4380
- if (previousLocation !== location) {
4313
+ if (previousLocation !== location || this.opening) {
4381
4314
  this.savedLocation = location;
4382
- this.emit('up:layer:location:changed', { location, log: false });
4383
4315
  if (this.showsLiveHistory()) {
4384
4316
  up.history.push(location);
4385
4317
  }
4318
+ if (!this.opening) {
4319
+ this.emit('up:layer:location:changed', { location });
4320
+ }
4386
4321
  }
4387
4322
  }
4388
4323
  selector(part) {
@@ -4404,11 +4339,14 @@ up.Layer = class Layer extends up.Record {
4404
4339
  let focusedElement = document.activeElement;
4405
4340
  return focusedElement !== document.body && this.element.contains(focusedElement);
4406
4341
  }
4342
+ reset() {
4343
+ Object.assign(this, this.defaults());
4344
+ }
4407
4345
  };
4408
4346
 
4409
4347
 
4410
4348
  /***/ }),
4411
- /* 49 */
4349
+ /* 48 */
4412
4350
  /***/ (() => {
4413
4351
 
4414
4352
  const e = up.element;
@@ -4688,7 +4626,7 @@ up.Layer.Overlay = class Overlay extends up.Layer {
4688
4626
 
4689
4627
 
4690
4628
  /***/ }),
4691
- /* 50 */
4629
+ /* 49 */
4692
4630
  /***/ (() => {
4693
4631
 
4694
4632
  up.Layer.OverlayWithTether = class OverlayWithTether extends up.Layer.Overlay {
@@ -4725,7 +4663,7 @@ up.Layer.OverlayWithTether = class OverlayWithTether extends up.Layer.Overlay {
4725
4663
 
4726
4664
 
4727
4665
  /***/ }),
4728
- /* 51 */
4666
+ /* 50 */
4729
4667
  /***/ (() => {
4730
4668
 
4731
4669
  var _a;
@@ -4763,7 +4701,7 @@ up.Layer.OverlayWithViewport = (_a = class OverlayWithViewport extends up.Layer.
4763
4701
 
4764
4702
 
4765
4703
  /***/ }),
4766
- /* 52 */
4704
+ /* 51 */
4767
4705
  /***/ (() => {
4768
4706
 
4769
4707
  var _a;
@@ -4800,9 +4738,6 @@ up.Layer.Root = (_a = class Root extends up.Layer {
4800
4738
  cannotCloseRoot() {
4801
4739
  up.fail('Cannot close the root layer');
4802
4740
  }
4803
- reset() {
4804
- Object.assign(this, this.defaults());
4805
- }
4806
4741
  toString() {
4807
4742
  return "root layer";
4808
4743
  }
@@ -4812,7 +4747,7 @@ up.Layer.Root = (_a = class Root extends up.Layer {
4812
4747
 
4813
4748
 
4814
4749
  /***/ }),
4815
- /* 53 */
4750
+ /* 52 */
4816
4751
  /***/ (() => {
4817
4752
 
4818
4753
  var _a;
@@ -4823,7 +4758,7 @@ up.Layer.Modal = (_a = class Modal extends up.Layer.OverlayWithViewport {
4823
4758
 
4824
4759
 
4825
4760
  /***/ }),
4826
- /* 54 */
4761
+ /* 53 */
4827
4762
  /***/ (() => {
4828
4763
 
4829
4764
  var _a;
@@ -4834,7 +4769,7 @@ up.Layer.Popup = (_a = class Popup extends up.Layer.OverlayWithTether {
4834
4769
 
4835
4770
 
4836
4771
  /***/ }),
4837
- /* 55 */
4772
+ /* 54 */
4838
4773
  /***/ (() => {
4839
4774
 
4840
4775
  var _a;
@@ -4845,7 +4780,7 @@ up.Layer.Drawer = (_a = class Drawer extends up.Layer.OverlayWithViewport {
4845
4780
 
4846
4781
 
4847
4782
  /***/ }),
4848
- /* 56 */
4783
+ /* 55 */
4849
4784
  /***/ (() => {
4850
4785
 
4851
4786
  var _a;
@@ -4856,7 +4791,7 @@ up.Layer.Cover = (_a = class Cover extends up.Layer.OverlayWithViewport {
4856
4791
 
4857
4792
 
4858
4793
  /***/ }),
4859
- /* 57 */
4794
+ /* 56 */
4860
4795
  /***/ (() => {
4861
4796
 
4862
4797
  const u = up.util;
@@ -4946,7 +4881,7 @@ up.LayerLookup = class LayerLookup {
4946
4881
 
4947
4882
 
4948
4883
  /***/ }),
4949
- /* 58 */
4884
+ /* 57 */
4950
4885
  /***/ (() => {
4951
4886
 
4952
4887
  const u = up.util;
@@ -5059,7 +4994,7 @@ up.LayerStack = class LayerStack extends Array {
5059
4994
 
5060
4995
 
5061
4996
  /***/ }),
5062
- /* 59 */
4997
+ /* 58 */
5063
4998
  /***/ (() => {
5064
4999
 
5065
5000
  up.LinkFeedbackURLs = class LinkFeedbackURLs {
@@ -5090,7 +5025,7 @@ up.LinkFeedbackURLs = class LinkFeedbackURLs {
5090
5025
 
5091
5026
 
5092
5027
  /***/ }),
5093
- /* 60 */
5028
+ /* 59 */
5094
5029
  /***/ (() => {
5095
5030
 
5096
5031
  const u = up.util;
@@ -5160,7 +5095,7 @@ up.LinkPreloader = class LinkPreloader {
5160
5095
 
5161
5096
 
5162
5097
  /***/ }),
5163
- /* 61 */
5098
+ /* 60 */
5164
5099
  /***/ (function() {
5165
5100
 
5166
5101
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
@@ -5269,7 +5204,7 @@ up.MotionController = class MotionController {
5269
5204
 
5270
5205
 
5271
5206
  /***/ }),
5272
- /* 62 */
5207
+ /* 61 */
5273
5208
  /***/ (() => {
5274
5209
 
5275
5210
  const u = up.util;
@@ -5361,7 +5296,7 @@ up.NonceableCallback = class NonceableCallback {
5361
5296
 
5362
5297
 
5363
5298
  /***/ }),
5364
- /* 63 */
5299
+ /* 62 */
5365
5300
  /***/ (() => {
5366
5301
 
5367
5302
  const u = up.util;
@@ -5439,7 +5374,7 @@ up.OptionsParser = class OptionsParser {
5439
5374
 
5440
5375
 
5441
5376
  /***/ }),
5442
- /* 64 */
5377
+ /* 63 */
5443
5378
  /***/ (() => {
5444
5379
 
5445
5380
  const e = up.element;
@@ -5507,7 +5442,7 @@ up.OverlayFocus = class OverlayFocus {
5507
5442
 
5508
5443
 
5509
5444
  /***/ }),
5510
- /* 65 */
5445
+ /* 64 */
5511
5446
  /***/ (() => {
5512
5447
 
5513
5448
  const u = up.util;
@@ -5738,7 +5673,7 @@ up.Params = class Params {
5738
5673
 
5739
5674
 
5740
5675
  /***/ }),
5741
- /* 66 */
5676
+ /* 65 */
5742
5677
  /***/ (() => {
5743
5678
 
5744
5679
  const e = up.element;
@@ -5788,7 +5723,7 @@ up.ProgressBar = class ProgressBar {
5788
5723
 
5789
5724
 
5790
5725
  /***/ }),
5791
- /* 67 */
5726
+ /* 66 */
5792
5727
  /***/ (() => {
5793
5728
 
5794
5729
  const u = up.util;
@@ -5834,7 +5769,7 @@ up.RenderOptions = (function () {
5834
5769
  'history',
5835
5770
  'source',
5836
5771
  'saveScroll',
5837
- 'navigate'
5772
+ 'navigate',
5838
5773
  ]);
5839
5774
  const CONTENT_KEYS = [
5840
5775
  'url',
@@ -5905,7 +5840,7 @@ up.RenderOptions = (function () {
5905
5840
 
5906
5841
 
5907
5842
  /***/ }),
5908
- /* 68 */
5843
+ /* 67 */
5909
5844
  /***/ (() => {
5910
5845
 
5911
5846
  up.RenderResult = class RenderResult extends up.Record {
@@ -5933,7 +5868,7 @@ up.RenderResult = class RenderResult extends up.Record {
5933
5868
 
5934
5869
 
5935
5870
  /***/ }),
5936
- /* 69 */
5871
+ /* 68 */
5937
5872
  /***/ (() => {
5938
5873
 
5939
5874
  var _a;
@@ -5946,7 +5881,7 @@ up.Request = (_a = class Request extends up.Record {
5946
5881
  if (this.wrapMethod == null) {
5947
5882
  this.wrapMethod = up.network.config.wrapMethod;
5948
5883
  }
5949
- this.normalizeForCaching();
5884
+ this.normalize();
5950
5885
  if ((this.target || this.layer || this.origin) && !options.basic) {
5951
5886
  const layerLookupOptions = { origin: this.origin };
5952
5887
  this.layer = up.layer.get(this.layer, layerLookupOptions);
@@ -5958,6 +5893,7 @@ up.Request = (_a = class Request extends up.Record {
5958
5893
  }
5959
5894
  this.deferred = u.newDeferred();
5960
5895
  (_a = this.badResponseTime) !== null && _a !== void 0 ? _a : (this.badResponseTime = u.evalOption(up.network.config.badResponseTime, this));
5896
+ this.addAutoHeaders();
5961
5897
  }
5962
5898
  keys() {
5963
5899
  return [
@@ -5969,7 +5905,6 @@ up.Request = (_a = class Request extends up.Record {
5969
5905
  'failTarget',
5970
5906
  'headers',
5971
5907
  'timeout',
5972
- 'preload',
5973
5908
  'background',
5974
5909
  'cache',
5975
5910
  'expireCache',
@@ -5982,11 +5917,12 @@ up.Request = (_a = class Request extends up.Record {
5982
5917
  'failContext',
5983
5918
  'origin',
5984
5919
  'fragments',
5985
- 'queuedAt',
5920
+ 'builtAt',
5986
5921
  'wrapMethod',
5987
5922
  'contentType',
5988
5923
  'payload',
5989
5924
  'onQueued',
5925
+ 'onLoading',
5990
5926
  'fail',
5991
5927
  'abortable',
5992
5928
  'badResponseTime',
@@ -5997,7 +5933,8 @@ up.Request = (_a = class Request extends up.Record {
5997
5933
  state: 'new',
5998
5934
  abortable: true,
5999
5935
  headers: {},
6000
- timeout: up.network.config.timeout
5936
+ timeout: up.network.config.timeout,
5937
+ builtAt: new Date(),
6001
5938
  };
6002
5939
  }
6003
5940
  get xhr() {
@@ -6020,10 +5957,7 @@ up.Request = (_a = class Request extends up.Record {
6020
5957
  var _a;
6021
5958
  return (_a = this.fragments) === null || _a === void 0 ? void 0 : _a[0];
6022
5959
  }
6023
- followState(sourceRequest) {
6024
- u.delegate(this, ['deferred', 'state', 'preload', 'expired'], () => sourceRequest);
6025
- }
6026
- normalizeForCaching() {
5960
+ normalize() {
6027
5961
  this.method = u.normalizeMethod(this.method);
6028
5962
  this.extractHashFromURL();
6029
5963
  this.transferParamsToURL();
@@ -6070,16 +6004,29 @@ up.Request = (_a = class Request extends up.Record {
6070
6004
  (_a = this.onQueued) === null || _a === void 0 ? void 0 : _a.call(this, this);
6071
6005
  }
6072
6006
  load() {
6007
+ var _a;
6073
6008
  if (this.state !== 'new')
6074
6009
  return;
6075
- this.state = 'loading';
6076
- this.expired = false;
6077
- new up.Request.XHRRenderer(this).buildAndSend({
6078
- onload: () => this.onXHRLoad(),
6079
- onerror: () => this.onXHRError(),
6080
- ontimeout: () => this.onXHRTimeout(),
6081
- onabort: () => this.onXHRAbort()
6082
- });
6010
+ if (this.emitLoad()) {
6011
+ this.state = 'loading';
6012
+ this.normalize();
6013
+ (_a = this.onLoading) === null || _a === void 0 ? void 0 : _a.call(this);
6014
+ this.expired = false;
6015
+ new up.Request.XHRRenderer(this).buildAndSend({
6016
+ onload: () => this.onXHRLoad(),
6017
+ onerror: () => this.onXHRError(),
6018
+ ontimeout: () => this.onXHRTimeout(),
6019
+ onabort: () => this.onXHRAbort()
6020
+ });
6021
+ return true;
6022
+ }
6023
+ else {
6024
+ this.abort({ reason: 'Prevented by event listener' });
6025
+ }
6026
+ }
6027
+ emitLoad() {
6028
+ let event = this.emit('up:request:load', { log: ['Loading %s', this.description] });
6029
+ return !event.defaultPrevented;
6083
6030
  }
6084
6031
  loadPage() {
6085
6032
  up.network.abort();
@@ -6123,18 +6070,19 @@ up.Request = (_a = class Request extends up.Record {
6123
6070
  this.emit('up:request:offline', { log: message });
6124
6071
  }
6125
6072
  respondWith(response) {
6126
- if (this.state !== 'loading')
6073
+ this.response = response;
6074
+ if (this.isSettled())
6127
6075
  return;
6128
6076
  this.state = 'loaded';
6129
6077
  if (response.ok) {
6130
- return this.deferred.resolve(response);
6078
+ this.deferred.resolve(response);
6131
6079
  }
6132
6080
  else {
6133
- return this.deferred.reject(response);
6081
+ this.deferred.reject(response);
6134
6082
  }
6135
6083
  }
6136
6084
  isSettled() {
6137
- return (this.state !== 'new') && (this.state !== 'loading');
6085
+ return (this.state !== 'new') && (this.state !== 'loading') && (this.state !== 'tracking');
6138
6086
  }
6139
6087
  csrfHeader() {
6140
6088
  return up.protocol.csrfHeader();
@@ -6181,24 +6129,6 @@ up.Request = (_a = class Request extends up.Record {
6181
6129
  }
6182
6130
  return new up.Response(responseAttrs);
6183
6131
  }
6184
- cacheKey() {
6185
- return JSON.stringify([
6186
- this.method,
6187
- this.url,
6188
- this.params.toQuery(),
6189
- this.metaProps()
6190
- ]);
6191
- }
6192
- metaProps() {
6193
- const props = {};
6194
- for (let key of u.evalOption(up.network.config.requestMetaKeys, this)) {
6195
- const value = this[key];
6196
- if (u.isGiven(value)) {
6197
- props[key] = value;
6198
- }
6199
- }
6200
- return props;
6201
- }
6202
6132
  buildEventEmitter(args) {
6203
6133
  return up.EventEmitter.fromEmitArgs(args, {
6204
6134
  layer: this.layer,
@@ -6224,9 +6154,27 @@ up.Request = (_a = class Request extends up.Record {
6224
6154
  return u.some(subtreeElements, (subtreeElement) => subtreeElement.contains(fragment));
6225
6155
  });
6226
6156
  }
6227
- get queueAge() {
6228
- const now = new Date();
6229
- return now - this.queuedAt;
6157
+ get age() {
6158
+ return new Date() - this.builtAt;
6159
+ }
6160
+ header(name) {
6161
+ return this.headers[name];
6162
+ }
6163
+ addAutoHeaders() {
6164
+ for (let key of ['target', 'failTarget', 'mode', 'failMode', 'context', 'failContext']) {
6165
+ this.addAutoHeader(up.protocol.headerize(key), this[key]);
6166
+ }
6167
+ let csrfHeader, csrfToken;
6168
+ if ((csrfHeader = this.csrfHeader()) && (csrfToken = this.csrfToken())) {
6169
+ this.addAutoHeader(csrfHeader, csrfToken);
6170
+ }
6171
+ this.addAutoHeader(up.protocol.headerize('version'), up.version);
6172
+ }
6173
+ addAutoHeader(name, value) {
6174
+ if (u.isOptions(value) || u.isArray(value)) {
6175
+ value = u.safeStringifyJSON(value);
6176
+ }
6177
+ this.headers[name] = value;
6230
6178
  }
6231
6179
  static tester(condition, { except } = {}) {
6232
6180
  let testFn;
@@ -6244,8 +6192,7 @@ up.Request = (_a = class Request extends up.Record {
6244
6192
  testFn = (_request) => condition;
6245
6193
  }
6246
6194
  if (except) {
6247
- let exceptCacheKey = except.cacheKey();
6248
- return (request) => (request.cacheKey() !== exceptCacheKey) && testFn(request);
6195
+ return (request) => !up.cache.willHaveSameResponse(request, except) && testFn(request);
6249
6196
  }
6250
6197
  else {
6251
6198
  return testFn;
@@ -6259,39 +6206,158 @@ up.Request = (_a = class Request extends up.Record {
6259
6206
 
6260
6207
 
6261
6208
  /***/ }),
6262
- /* 70 */
6263
- /***/ (() => {
6209
+ /* 69 */
6210
+ /***/ (function() {
6264
6211
 
6265
- let u = up.util;
6266
- up.Request.Cache = class Cache extends up.Cache {
6267
- maxSize() {
6212
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
6213
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
6214
+ return new (P || (P = Promise))(function (resolve, reject) {
6215
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6216
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6217
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
6218
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
6219
+ });
6220
+ };
6221
+ const u = up.util;
6222
+ up.Request.Cache = class Cache {
6223
+ constructor() {
6224
+ this.reset();
6225
+ }
6226
+ reset() {
6227
+ this.varyInfo = {};
6228
+ this.map = new Map();
6229
+ }
6230
+ cacheKey(request) {
6231
+ let influencingHeaders = this.getPreviousInfluencingHeaders(request);
6232
+ let varyPart = u.flatMap(influencingHeaders, (headerName) => [headerName, request.header(headerName)]);
6233
+ return [request.description, ...varyPart].join(':');
6234
+ }
6235
+ getPreviousInfluencingHeaders(request) {
6236
+ var _a, _b;
6237
+ return ((_a = this.varyInfo)[_b = request.description] || (_a[_b] = new Set()));
6238
+ }
6239
+ get(request) {
6240
+ request = this.wrap(request);
6241
+ let cacheKey = this.cacheKey(request);
6242
+ let cachedRequest = this.map.get(cacheKey);
6243
+ if (cachedRequest) {
6244
+ if (this.isUsable(cachedRequest)) {
6245
+ return cachedRequest;
6246
+ }
6247
+ else {
6248
+ this.map.delete(cacheKey);
6249
+ }
6250
+ }
6251
+ }
6252
+ get capacity() {
6268
6253
  return up.network.config.cacheSize;
6269
6254
  }
6270
- evictAge() {
6271
- return up.network.config.cacheEvictAge;
6255
+ isUsable(request) {
6256
+ return request.age < up.network.config.cacheEvictAge;
6257
+ }
6258
+ put(request) {
6259
+ return __awaiter(this, void 0, void 0, function* () {
6260
+ request = this.wrap(request);
6261
+ this.makeRoom();
6262
+ let cacheKey = this.updateCacheKey(request);
6263
+ this.map.set(cacheKey, request);
6264
+ });
6265
+ }
6266
+ updateCacheKey(request) {
6267
+ let oldCacheKey = this.cacheKey(request);
6268
+ let { response } = request;
6269
+ if (response) {
6270
+ this.mergePreviousHeaderNames(request, response);
6271
+ let newCacheKey = this.cacheKey(request);
6272
+ this.renameMapKey(oldCacheKey, newCacheKey);
6273
+ return newCacheKey;
6274
+ }
6275
+ else {
6276
+ return oldCacheKey;
6277
+ }
6278
+ }
6279
+ renameMapKey(oldKey, newKey) {
6280
+ if (oldKey !== newKey && this.map.has(oldKey)) {
6281
+ this.map.set(newKey, this.map.get(oldKey));
6282
+ this.map.delete(oldKey);
6283
+ }
6284
+ }
6285
+ mergePreviousHeaderNames(request, response) {
6286
+ let headersInfluencingResponse = response.ownInfluncingHeaders;
6287
+ if (headersInfluencingResponse.length) {
6288
+ let previousInfluencingHeaders = this.getPreviousInfluencingHeaders(request);
6289
+ for (let headerName of headersInfluencingResponse) {
6290
+ previousInfluencingHeaders.add(headerName);
6291
+ }
6292
+ }
6293
+ }
6294
+ alias(existingCachedRequest, newRequest) {
6295
+ existingCachedRequest = this.wrap(existingCachedRequest);
6296
+ newRequest = this.wrap(newRequest);
6297
+ this.track(existingCachedRequest, newRequest, { force: true });
6298
+ this.put(newRequest);
6299
+ return newRequest;
6300
+ }
6301
+ track(existingRequest, newRequest, options = {}) {
6302
+ var _a;
6303
+ return __awaiter(this, void 0, void 0, function* () {
6304
+ newRequest.trackedRequest = existingRequest;
6305
+ newRequest.state = 'tracking';
6306
+ let value = yield u.always(existingRequest);
6307
+ if (value instanceof up.Response) {
6308
+ if (options.force || this.isCacheCompatible(existingRequest, newRequest)) {
6309
+ newRequest.fromCache = true;
6310
+ newRequest.respondWith(value);
6311
+ u.delegate(newRequest, ['expired', 'state'], () => existingRequest);
6312
+ }
6313
+ else {
6314
+ delete newRequest.trackedRequest;
6315
+ newRequest.state = 'new';
6316
+ (_a = options.onIncompatible) === null || _a === void 0 ? void 0 : _a.call(options, newRequest);
6317
+ }
6318
+ }
6319
+ else {
6320
+ newRequest.state = existingRequest.state;
6321
+ newRequest.deferred.reject(value);
6322
+ }
6323
+ });
6324
+ }
6325
+ willHaveSameResponse(existingRequest, newRequest) {
6326
+ return existingRequest === newRequest || existingRequest === newRequest.trackedRequest;
6272
6327
  }
6273
- normalizeStoreKey(request) {
6274
- return u.wrapValue(up.Request, request).cacheKey();
6328
+ delete(request) {
6329
+ request = this.wrap(request);
6330
+ let cacheKey = this.cacheKey(request);
6331
+ this.map.delete(cacheKey);
6275
6332
  }
6276
6333
  evict(condition = true, testerOptions) {
6277
- this.eachMatch(condition, testerOptions, ({ key }) => this.map.delete(key));
6334
+ this.eachMatch(condition, testerOptions, (request) => this.delete(request));
6278
6335
  }
6279
6336
  expire(condition = true, testerOptions) {
6280
- this.eachMatch(condition, testerOptions, ({ value: request }) => request.expired = true);
6337
+ this.eachMatch(condition, testerOptions, (request) => request.expired = true);
6338
+ }
6339
+ makeRoom() {
6340
+ while (this.map.size >= this.capacity) {
6341
+ let oldestKey = this.map.keys().next().value;
6342
+ this.map.delete(oldestKey);
6343
+ }
6281
6344
  }
6282
6345
  eachMatch(condition = true, testerOptions, fn) {
6283
6346
  let tester = up.Request.tester(condition, testerOptions);
6284
- for (let record of this.records()) {
6285
- if (tester(record.value)) {
6286
- fn(record);
6287
- }
6288
- }
6347
+ let results = u.filter(this.map.values(), tester);
6348
+ u.each(results, fn);
6349
+ }
6350
+ isCacheCompatible(request1, request2) {
6351
+ return this.cacheKey(request1) === this.cacheKey(request2);
6352
+ }
6353
+ wrap(requestOrOptions) {
6354
+ return u.wrapValue(up.Request, requestOrOptions);
6289
6355
  }
6290
6356
  };
6291
6357
 
6292
6358
 
6293
6359
  /***/ }),
6294
- /* 71 */
6360
+ /* 70 */
6295
6361
  /***/ (() => {
6296
6362
 
6297
6363
  const u = up.util;
@@ -6310,7 +6376,6 @@ up.Request.Queue = class Queue {
6310
6376
  asap(request) {
6311
6377
  request.runQueuedCallbacks();
6312
6378
  u.always(request, responseOrError => this.onRequestSettled(request, responseOrError));
6313
- request.queuedAt = new Date();
6314
6379
  this.scheduleSlowTimer(request);
6315
6380
  this.queueRequest(request);
6316
6381
  u.microtask(() => this.poke());
@@ -6322,7 +6387,7 @@ up.Request.Queue = class Queue {
6322
6387
  }
6323
6388
  }
6324
6389
  scheduleSlowTimer(request) {
6325
- let timeUntilLate = Math.max(request.badResponseTime - request.queueAge, 0);
6390
+ let timeUntilLate = Math.max(request.badResponseTime - request.age, 0);
6326
6391
  u.timer(timeUntilLate, () => this.checkLate());
6327
6392
  }
6328
6393
  getMaxConcurrency() {
@@ -6344,13 +6409,8 @@ up.Request.Queue = class Queue {
6344
6409
  return u.remove(this.queuedRequests, request);
6345
6410
  }
6346
6411
  sendRequestNow(request) {
6347
- if (request.emit('up:request:load', { log: ['Loading %s %s', request.method, request.url] }).defaultPrevented) {
6348
- request.abort({ reason: 'Prevented by event listener' });
6349
- }
6350
- else {
6351
- request.normalizeForCaching();
6412
+ if (request.load()) {
6352
6413
  this.currentRequests.push(request);
6353
- request.load();
6354
6414
  }
6355
6415
  }
6356
6416
  onRequestSettled(request, responseOrError) {
@@ -6400,13 +6460,13 @@ up.Request.Queue = class Queue {
6400
6460
  isLate() {
6401
6461
  const allForegroundRequests = u.reject(this.allRequests, 'background');
6402
6462
  const timerTolerance = 1;
6403
- return u.some(allForegroundRequests, request => request.queueAge >= (request.badResponseTime - timerTolerance));
6463
+ return u.some(allForegroundRequests, (request) => request.age >= (request.badResponseTime - timerTolerance));
6404
6464
  }
6405
6465
  };
6406
6466
 
6407
6467
 
6408
6468
  /***/ }),
6409
- /* 72 */
6469
+ /* 71 */
6410
6470
  /***/ (() => {
6411
6471
 
6412
6472
  const u = up.util;
@@ -6445,7 +6505,7 @@ up.Request.FormRenderer = class FormRenderer {
6445
6505
 
6446
6506
 
6447
6507
  /***/ }),
6448
- /* 73 */
6508
+ /* 72 */
6449
6509
  /***/ (() => {
6450
6510
 
6451
6511
  var _a;
@@ -6463,21 +6523,13 @@ up.Request.XHRRenderer = (_a = class XHRRenderer {
6463
6523
  xhr.timeout = this.request.timeout;
6464
6524
  }
6465
6525
  xhr.open(this.getMethod(), this.request.url);
6466
- const metaProps = this.request.metaProps();
6467
- for (let key in metaProps) {
6468
- this.addHeader(xhr, up.protocol.headerize(key), metaProps[key]);
6469
- }
6470
- for (let header in this.request.headers) {
6471
- this.addHeader(xhr, header, this.request.headers[header]);
6472
- }
6473
- let csrfHeader, csrfToken;
6474
- if ((csrfHeader = this.request.csrfHeader()) && (csrfToken = this.request.csrfToken())) {
6475
- this.addHeader(xhr, csrfHeader, csrfToken);
6476
- }
6477
- this.addHeader(xhr, up.protocol.headerize('version'), up.version);
6478
6526
  let contentType = this.getContentType();
6479
6527
  if (contentType) {
6480
- this.addHeader(xhr, 'Content-Type', contentType);
6528
+ xhr.setRequestHeader('Content-Type', contentType);
6529
+ }
6530
+ for (let headerName in this.request.headers) {
6531
+ let headerValue = this.request.headers[headerName];
6532
+ xhr.setRequestHeader(headerName, headerValue);
6481
6533
  }
6482
6534
  Object.assign(xhr, handlers);
6483
6535
  xhr.send(this.getPayload());
@@ -6499,12 +6551,6 @@ up.Request.XHRRenderer = (_a = class XHRRenderer {
6499
6551
  this.finalizePayload();
6500
6552
  return this.payload;
6501
6553
  }
6502
- addHeader(xhr, header, value) {
6503
- if (u.isOptions(value) || u.isArray(value)) {
6504
- value = JSON.stringify(value);
6505
- }
6506
- xhr.setRequestHeader(header, value);
6507
- }
6508
6554
  finalizePayload() {
6509
6555
  this.payload = this.request.payload;
6510
6556
  this.contentType = this.request.contentType;
@@ -6531,7 +6577,7 @@ up.Request.XHRRenderer = (_a = class XHRRenderer {
6531
6577
 
6532
6578
 
6533
6579
  /***/ }),
6534
- /* 74 */
6580
+ /* 73 */
6535
6581
  /***/ (() => {
6536
6582
 
6537
6583
  const u = up.util;
@@ -6567,24 +6613,28 @@ up.Response = class Response extends up.Record {
6567
6613
  var _a;
6568
6614
  return !u.evalOption((_a = this.fail) !== null && _a !== void 0 ? _a : up.network.config.fail, this);
6569
6615
  }
6570
- getHeader(name) {
6616
+ header(name) {
6571
6617
  var _a;
6572
6618
  return this.headers[name] || ((_a = this.xhr) === null || _a === void 0 ? void 0 : _a.getResponseHeader(name));
6573
6619
  }
6620
+ get ownInfluncingHeaders() {
6621
+ let influencingHeaders = up.protocol.influencingHeadersFromResponse(this);
6622
+ return u.filter(influencingHeaders, (headerName) => this.request.header(headerName));
6623
+ }
6574
6624
  get contentType() {
6575
- return this.getHeader('Content-Type');
6625
+ return this.header('Content-Type');
6576
6626
  }
6577
6627
  get cspNonces() {
6578
- return up.protocol.cspNoncesFromHeader(this.getHeader('Content-Security-Policy'));
6628
+ return up.protocol.cspNoncesFromHeader(this.header('Content-Security-Policy'));
6579
6629
  }
6580
6630
  get lastModified() {
6581
- let header = this.getHeader('Last-Modified');
6631
+ let header = this.header('Last-Modified');
6582
6632
  if (header) {
6583
6633
  return new Date(header);
6584
6634
  }
6585
6635
  }
6586
6636
  get etag() {
6587
- return this.getHeader('ETag');
6637
+ return this.header('ETag');
6588
6638
  }
6589
6639
  get json() {
6590
6640
  return this.parsedJSON || (this.parsedJSON = JSON.parse(this.text));
@@ -6594,7 +6644,8 @@ up.Response = class Response extends up.Record {
6594
6644
  return now - this.loadedAt;
6595
6645
  }
6596
6646
  get expired() {
6597
- return this.age > up.network.config.cacheExpireAge || this.request.expired;
6647
+ return this.age > up.network.config.cacheExpireAge ||
6648
+ this.request.expired;
6598
6649
  }
6599
6650
  get description() {
6600
6651
  return `HTTP ${this.status} response to ${this.request.description}`;
@@ -6603,7 +6654,7 @@ up.Response = class Response extends up.Record {
6603
6654
 
6604
6655
 
6605
6656
  /***/ }),
6606
- /* 75 */
6657
+ /* 74 */
6607
6658
  /***/ (() => {
6608
6659
 
6609
6660
  var _a;
@@ -6611,12 +6662,13 @@ const u = up.util;
6611
6662
  const e = up.element;
6612
6663
  up.ResponseDoc = (_a = class ResponseDoc {
6613
6664
  constructor(options) {
6614
- this.noscriptWrapper = new up.HTMLWrapper('noscript');
6615
- this.scriptWrapper = new up.HTMLWrapper('script');
6616
6665
  this.root =
6617
6666
  this.parseDocument(options) ||
6618
6667
  this.parseFragment(options) ||
6619
6668
  this.parseContent(options);
6669
+ if (!up.fragment.config.runScripts) {
6670
+ this.root.querySelectorAll('script').forEach((e) => e.remove());
6671
+ }
6620
6672
  this.cspNonces = options.cspNonces;
6621
6673
  if (options.origin) {
6622
6674
  let originSelector = up.fragment.tryToTarget(options.origin);
@@ -6626,7 +6678,11 @@ up.ResponseDoc = (_a = class ResponseDoc {
6626
6678
  }
6627
6679
  }
6628
6680
  parseDocument(options) {
6629
- return this.parse(options.document, e.createDocumentFromHTML);
6681
+ let document = this.parse(options.document, e.createBrokenDocumentFromHTML);
6682
+ if (document) {
6683
+ this.scriptishNeedFix = true;
6684
+ return document;
6685
+ }
6630
6686
  }
6631
6687
  parseContent(options) {
6632
6688
  let content = options.content || '';
@@ -6634,7 +6690,6 @@ up.ResponseDoc = (_a = class ResponseDoc {
6634
6690
  target = u.map(up.fragment.parseTargetSteps(target), 'selector').join(',');
6635
6691
  const matchingElement = e.createFromSelector(target);
6636
6692
  if (u.isString(content)) {
6637
- content = this.wrapHTML(content);
6638
6693
  matchingElement.innerHTML = content;
6639
6694
  }
6640
6695
  else {
@@ -6647,7 +6702,6 @@ up.ResponseDoc = (_a = class ResponseDoc {
6647
6702
  }
6648
6703
  parse(value, parseFn = e.createFromHTML) {
6649
6704
  if (u.isString(value)) {
6650
- value = this.wrapHTML(value);
6651
6705
  value = parseFn(value);
6652
6706
  }
6653
6707
  return value;
@@ -6655,19 +6709,9 @@ up.ResponseDoc = (_a = class ResponseDoc {
6655
6709
  rootSelector() {
6656
6710
  return up.fragment.toTarget(this.root);
6657
6711
  }
6658
- wrapHTML(html) {
6659
- html = this.noscriptWrapper.wrap(html);
6660
- if (up.fragment.config.runScripts) {
6661
- html = this.scriptWrapper.wrap(html);
6662
- }
6663
- else {
6664
- html = this.scriptWrapper.strip(html);
6665
- }
6666
- return html;
6667
- }
6668
6712
  getTitle() {
6669
6713
  var _a;
6670
- return (_a = this.root.querySelector("head title")) === null || _a === void 0 ? void 0 : _a.textContent;
6714
+ return (_a = this.root.querySelector('head title')) === null || _a === void 0 ? void 0 : _a.textContent;
6671
6715
  }
6672
6716
  select(selector) {
6673
6717
  let finder = new up.FragmentFinder({
@@ -6678,9 +6722,10 @@ up.ResponseDoc = (_a = class ResponseDoc {
6678
6722
  return finder.find();
6679
6723
  }
6680
6724
  finalizeElement(element) {
6681
- this.noscriptWrapper.unwrap(element);
6682
6725
  up.NonceableCallback.adoptNonces(element, this.cspNonces);
6683
- this.scriptWrapper.unwrap(element);
6726
+ if (this.scriptishNeedFix) {
6727
+ element.querySelectorAll('noscript, script').forEach(e.fixScriptish);
6728
+ }
6684
6729
  }
6685
6730
  },
6686
6731
  (() => {
@@ -6690,7 +6735,7 @@ up.ResponseDoc = (_a = class ResponseDoc {
6690
6735
 
6691
6736
 
6692
6737
  /***/ }),
6693
- /* 76 */
6738
+ /* 75 */
6694
6739
  /***/ (() => {
6695
6740
 
6696
6741
  const e = up.element;
@@ -6785,7 +6830,7 @@ up.RevealMotion = class RevealMotion {
6785
6830
 
6786
6831
 
6787
6832
  /***/ }),
6788
- /* 77 */
6833
+ /* 76 */
6789
6834
  /***/ (() => {
6790
6835
 
6791
6836
  const u = up.util;
@@ -6826,7 +6871,7 @@ up.Selector = class Selector {
6826
6871
 
6827
6872
 
6828
6873
  /***/ }),
6829
- /* 78 */
6874
+ /* 77 */
6830
6875
  /***/ (() => {
6831
6876
 
6832
6877
  const u = up.util;
@@ -6947,7 +6992,7 @@ up.Tether = class Tether {
6947
6992
 
6948
6993
 
6949
6994
  /***/ }),
6950
- /* 79 */
6995
+ /* 78 */
6951
6996
  /***/ (() => {
6952
6997
 
6953
6998
  const u = up.util;
@@ -7028,7 +7073,7 @@ up.URLPattern = class URLPattern {
7028
7073
 
7029
7074
 
7030
7075
  /***/ }),
7031
- /* 80 */
7076
+ /* 79 */
7032
7077
  /***/ (() => {
7033
7078
 
7034
7079
  up.framework = (function () {
@@ -7046,6 +7091,7 @@ up.framework = (function () {
7046
7091
  readyState = 'booting';
7047
7092
  up.emit('up:framework:boot', { log: false });
7048
7093
  readyState = 'booted';
7094
+ up.emit('up:framework:booted', { log: false });
7049
7095
  }
7050
7096
  else {
7051
7097
  console.error("Unpoly cannot boot: %s", issue);
@@ -7111,7 +7157,7 @@ up.boot = up.framework.boot;
7111
7157
 
7112
7158
 
7113
7159
  /***/ }),
7114
- /* 81 */
7160
+ /* 80 */
7115
7161
  /***/ (() => {
7116
7162
 
7117
7163
  up.event = (function () {
@@ -7127,9 +7173,6 @@ up.event = (function () {
7127
7173
  function on(...args) {
7128
7174
  return buildListenerGroup(args).bind();
7129
7175
  }
7130
- function $on(...args) {
7131
- return buildListenerGroup(args, { jQuery: true }).bind();
7132
- }
7133
7176
  function off(...args) {
7134
7177
  return buildListenerGroup(args).unbind();
7135
7178
  }
@@ -7200,7 +7243,6 @@ up.event = (function () {
7200
7243
  on('up:framework:reset', reset);
7201
7244
  return {
7202
7245
  on,
7203
- $on,
7204
7246
  off,
7205
7247
  build,
7206
7248
  emit,
@@ -7213,14 +7255,12 @@ up.event = (function () {
7213
7255
  };
7214
7256
  })();
7215
7257
  up.on = up.event.on;
7216
- up.$on = up.event.$on;
7217
7258
  up.off = up.event.off;
7218
- up.$off = up.event.off;
7219
7259
  up.emit = up.event.emit;
7220
7260
 
7221
7261
 
7222
7262
  /***/ }),
7223
- /* 82 */
7263
+ /* 81 */
7224
7264
  /***/ (() => {
7225
7265
 
7226
7266
  up.protocol = (function () {
@@ -7236,6 +7276,9 @@ up.protocol = (function () {
7236
7276
  return parseFn(value);
7237
7277
  }
7238
7278
  };
7279
+ function targetFromXHR(xhr) {
7280
+ return extractHeader(xhr, 'target');
7281
+ }
7239
7282
  function parseModifyCacheValue(value) {
7240
7283
  if (value === 'false') {
7241
7284
  return false;
@@ -7257,6 +7300,10 @@ up.protocol = (function () {
7257
7300
  function methodFromXHR(xhr) {
7258
7301
  return extractHeader(xhr, 'method', u.normalizeMethod);
7259
7302
  }
7303
+ function titleFromXHR(xhr) {
7304
+ var _a, _b, _c;
7305
+ return (_c = (_b = (_a = up.migrate).titleFromXHR) === null || _b === void 0 ? void 0 : _b.call(_a, xhr)) !== null && _c !== void 0 ? _c : extractHeader(xhr, 'title', JSON.parse);
7306
+ }
7260
7307
  function eventPlansFromXHR(xhr) {
7261
7308
  return extractHeader(xhr, 'events', JSON.parse);
7262
7309
  }
@@ -7272,11 +7319,9 @@ up.protocol = (function () {
7272
7319
  function locationFromXHR(xhr) {
7273
7320
  return extractHeader(xhr, 'location') || xhr.responseURL;
7274
7321
  }
7275
- function titleFromXHR(xhr) {
7276
- return extractHeader(xhr, 'title');
7277
- }
7278
- function targetFromXHR(xhr) {
7279
- return extractHeader(xhr, 'target');
7322
+ function influencingHeadersFromResponse(response) {
7323
+ let varyHeaderValue = response.header('Vary');
7324
+ return u.parseTokens(varyHeaderValue, { separator: 'comma' });
7280
7325
  }
7281
7326
  const config = new up.Config(() => ({
7282
7327
  methodParam: '_method',
@@ -7352,12 +7397,13 @@ up.protocol = (function () {
7352
7397
  headerize,
7353
7398
  wrapMethod,
7354
7399
  cspNoncesFromHeader,
7400
+ influencingHeadersFromResponse,
7355
7401
  };
7356
7402
  })();
7357
7403
 
7358
7404
 
7359
7405
  /***/ }),
7360
- /* 83 */
7406
+ /* 82 */
7361
7407
  /***/ (() => {
7362
7408
 
7363
7409
  up.log = (function () {
@@ -7443,7 +7489,7 @@ up.warn = up.log.warn;
7443
7489
 
7444
7490
 
7445
7491
  /***/ }),
7446
- /* 84 */
7492
+ /* 83 */
7447
7493
  /***/ (() => {
7448
7494
 
7449
7495
  up.syntax = (function () {
@@ -7467,9 +7513,6 @@ up.syntax = (function () {
7467
7513
  const compiler = buildCompiler(args);
7468
7514
  return insertCompiler(registeredCompilers, compiler);
7469
7515
  }
7470
- function registerJQueryCompiler(...args) {
7471
- registerCompiler(...args, { jQuery: true });
7472
- }
7473
7516
  function registerMacro(...args) {
7474
7517
  const macro = buildCompiler(args);
7475
7518
  if (up.framework.evaling) {
@@ -7478,9 +7521,6 @@ up.syntax = (function () {
7478
7521
  }
7479
7522
  return insertCompiler(registeredMacros, macro);
7480
7523
  }
7481
- function registerJQueryMacro(...args) {
7482
- registerMacro(...args, { jQuery: true });
7483
- }
7484
7524
  function detectSystemMacroPriority(macroSelector) {
7485
7525
  macroSelector = u.evalOption(macroSelector);
7486
7526
  for (let substr in SYSTEM_MACRO_PRIORITIES) {
@@ -7504,7 +7544,6 @@ up.syntax = (function () {
7504
7544
  isDefault: up.framework.evaling,
7505
7545
  priority: 0,
7506
7546
  batch: false,
7507
- jQuery: false
7508
7547
  });
7509
7548
  return Object.assign(callback, options);
7510
7549
  }
@@ -7546,10 +7585,10 @@ up.syntax = (function () {
7546
7585
  destructors.push(destructor);
7547
7586
  }
7548
7587
  }
7549
- function hello(element, { layer, data, dataMap } = {}) {
7550
- element = up.fragment.get(element);
7588
+ function hello(element, options = {}) {
7589
+ element = up.fragment.get(element, options);
7551
7590
  up.puts('up.hello()', "Compiling fragment %o", element);
7552
- compile(element, { layer, data, dataMap });
7591
+ compile(element, options);
7553
7592
  up.fragment.emitInserted(element);
7554
7593
  return element;
7555
7594
  }
@@ -7582,8 +7621,6 @@ up.syntax = (function () {
7582
7621
  return {
7583
7622
  compiler: registerCompiler,
7584
7623
  macro: registerMacro,
7585
- $compiler: registerJQueryCompiler,
7586
- $macro: registerJQueryMacro,
7587
7624
  destructor: registerDestructor,
7588
7625
  hello,
7589
7626
  clean,
@@ -7591,16 +7628,14 @@ up.syntax = (function () {
7591
7628
  };
7592
7629
  })();
7593
7630
  up.compiler = up.syntax.compiler;
7594
- up.$compiler = up.syntax.$compiler;
7595
7631
  up.destructor = up.syntax.destructor;
7596
7632
  up.macro = up.syntax.macro;
7597
- up.$macro = up.syntax.$macro;
7598
7633
  up.data = up.syntax.data;
7599
7634
  up.hello = up.syntax.hello;
7600
7635
 
7601
7636
 
7602
7637
  /***/ }),
7603
- /* 85 */
7638
+ /* 84 */
7604
7639
  /***/ (() => {
7605
7640
 
7606
7641
  up.history = (function () {
@@ -7670,7 +7705,7 @@ up.history = (function () {
7670
7705
  }
7671
7706
  function restoreStateOnPop(state) {
7672
7707
  if (!(state === null || state === void 0 ? void 0 : state.up)) {
7673
- up.puts('pop', 'Ignoring a history state not owned by Unpoly');
7708
+ up.puts('popstate', 'Ignoring a history state not owned by Unpoly');
7674
7709
  return;
7675
7710
  }
7676
7711
  let location = currentLocation();
@@ -7737,10 +7772,10 @@ up.history = (function () {
7737
7772
 
7738
7773
 
7739
7774
  /***/ }),
7740
- /* 86 */
7775
+ /* 85 */
7741
7776
  /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
7742
7777
 
7743
- __webpack_require__(87);
7778
+ __webpack_require__(86);
7744
7779
  const u = up.util;
7745
7780
  const e = up.element;
7746
7781
  up.fragment = (function () {
@@ -7791,7 +7826,7 @@ up.fragment = (function () {
7791
7826
  autoRevalidate: (response) => response.expired,
7792
7827
  skipResponse: defaultSkipResponse
7793
7828
  }));
7794
- u.delegate(config, 'mainTargets', () => up.layer.config.any);
7829
+ u.delegate(config, ['mainTargets'], () => up.layer.config.any);
7795
7830
  function reset() {
7796
7831
  config.reset();
7797
7832
  }
@@ -8258,20 +8293,20 @@ up.destroy = up.fragment.destroy;
8258
8293
  up.render = up.fragment.render;
8259
8294
  up.navigate = up.fragment.navigate;
8260
8295
  up.visit = up.fragment.visit;
8261
- u.delegate(up, 'context', () => up.layer.current);
8296
+ u.delegate(up, ['context'], () => up.layer.current);
8262
8297
 
8263
8298
 
8264
8299
  /***/ }),
8265
- /* 87 */
8300
+ /* 86 */
8266
8301
  /***/ (() => {
8267
8302
 
8268
8303
 
8269
8304
 
8270
8305
  /***/ }),
8271
- /* 88 */
8306
+ /* 87 */
8272
8307
  /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
8273
8308
 
8274
- __webpack_require__(89);
8309
+ __webpack_require__(88);
8275
8310
  up.viewport = (function () {
8276
8311
  const u = up.util;
8277
8312
  const e = up.element;
@@ -8454,7 +8489,7 @@ up.viewport = (function () {
8454
8489
  }
8455
8490
  }
8456
8491
  function newStateCache() {
8457
- return new up.Cache({ size: 30, key: up.history.normalizeURL });
8492
+ return new up.FIFOCache({ capacity: 30, normalizeKey: up.history.normalizeURL });
8458
8493
  }
8459
8494
  function parseOptions(args) {
8460
8495
  const options = u.copy(u.extractOptions(args));
@@ -8593,13 +8628,13 @@ up.reveal = up.viewport.reveal;
8593
8628
 
8594
8629
 
8595
8630
  /***/ }),
8596
- /* 89 */
8631
+ /* 88 */
8597
8632
  /***/ (() => {
8598
8633
 
8599
8634
 
8600
8635
 
8601
8636
  /***/ }),
8602
- /* 90 */
8637
+ /* 89 */
8603
8638
  /***/ (function() {
8604
8639
 
8605
8640
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
@@ -8865,10 +8900,10 @@ up.animate = up.motion.animate;
8865
8900
 
8866
8901
 
8867
8902
  /***/ }),
8868
- /* 91 */
8903
+ /* 90 */
8869
8904
  /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
8870
8905
 
8871
- __webpack_require__(92);
8906
+ __webpack_require__(91);
8872
8907
  const u = up.util;
8873
8908
  up.network = (function () {
8874
8909
  const config = new up.Config(() => ({
@@ -8884,7 +8919,6 @@ up.network = (function () {
8884
8919
  autoCache(request) { return request.isSafe(); },
8885
8920
  expireCache(request, _response) { return !request.isSafe(); },
8886
8921
  evictCache: false,
8887
- requestMetaKeys: ['target', 'failTarget', 'mode', 'failMode', 'context', 'failContext'],
8888
8922
  progressBar: true,
8889
8923
  timeout: 90000,
8890
8924
  }));
@@ -8895,14 +8929,14 @@ up.network = (function () {
8895
8929
  abortRequests();
8896
8930
  queue.reset();
8897
8931
  config.reset();
8898
- cache.evict();
8932
+ cache.reset();
8899
8933
  progressBar === null || progressBar === void 0 ? void 0 : progressBar.destroy();
8900
8934
  progressBar = null;
8901
8935
  }
8902
8936
  function makeRequest(...args) {
8903
8937
  const options = parseRequestOptions(args);
8904
8938
  const request = new up.Request(options);
8905
- useCachedRequest(request) || queueRequest(request);
8939
+ processRequest(request);
8906
8940
  return request;
8907
8941
  }
8908
8942
  function parseRequestOptions(args) {
@@ -8914,31 +8948,31 @@ up.network = (function () {
8914
8948
  (_b = (_a = up.migrate).handleRequestOptions) === null || _b === void 0 ? void 0 : _b.call(_a, options);
8915
8949
  return options;
8916
8950
  }
8917
- function useCachedRequest(request) {
8951
+ function processRequest(request) {
8952
+ useCachedRequest(request) || queueRequest(request);
8953
+ }
8954
+ function useCachedRequest(newRequest) {
8918
8955
  let cachedRequest;
8919
- if (request.willCache() && (cachedRequest = cache.get(request))) {
8920
- up.puts('up.request()', 'Re-using previous request to %s %s', request.method, request.url);
8921
- if (!request.preload) {
8956
+ if (newRequest.willCache() && (cachedRequest = cache.get(newRequest))) {
8957
+ up.puts('up.request()', 'Re-using previous request to %s', newRequest.description);
8958
+ if (!newRequest.background) {
8922
8959
  queue.promoteToForeground(cachedRequest);
8923
8960
  }
8924
- request.followState(cachedRequest);
8925
- request.fromCache = true;
8961
+ cache.track(cachedRequest, newRequest, { onIncompatible: processRequest });
8926
8962
  return true;
8927
8963
  }
8928
8964
  }
8929
8965
  function queueRequest(request) {
8930
- if (request.preload && !request.isSafe()) {
8931
- up.fail('Will not preload request to %s', request.description);
8932
- }
8933
8966
  handleCaching(request);
8934
8967
  queue.asap(request);
8935
8968
  return true;
8936
8969
  }
8937
8970
  function handleCaching(request) {
8938
8971
  if (request.willCache()) {
8939
- cache.set(request, request);
8972
+ cache.put(request);
8973
+ request.onLoading = () => cache.put(request);
8940
8974
  }
8941
- return u.always(request, function (response) {
8975
+ u.always(request, function (response) {
8942
8976
  var _a, _b, _c, _d;
8943
8977
  let expireCache = (_b = (_a = response.expireCache) !== null && _a !== void 0 ? _a : request.expireCache) !== null && _b !== void 0 ? _b : u.evalOption(config.expireCache, request, response);
8944
8978
  if (expireCache) {
@@ -8949,7 +8983,7 @@ up.network = (function () {
8949
8983
  cache.evict(evictCache, { except: request });
8950
8984
  }
8951
8985
  if (cache.get(request)) {
8952
- cache.set(request, request);
8986
+ cache.put(request);
8953
8987
  }
8954
8988
  if (!response.ok) {
8955
8989
  cache.evict(request);
@@ -9015,13 +9049,13 @@ up.cache = up.network.cache;
9015
9049
 
9016
9050
 
9017
9051
  /***/ }),
9018
- /* 92 */
9052
+ /* 91 */
9019
9053
  /***/ (() => {
9020
9054
 
9021
9055
 
9022
9056
 
9023
9057
  /***/ }),
9024
- /* 93 */
9058
+ /* 92 */
9025
9059
  /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
9026
9060
 
9027
9061
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
@@ -9033,7 +9067,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9033
9067
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9034
9068
  });
9035
9069
  };
9036
- __webpack_require__(94);
9070
+ __webpack_require__(93);
9037
9071
  const u = up.util;
9038
9072
  const e = up.element;
9039
9073
  up.layer = (function () {
@@ -9160,6 +9194,7 @@ up.layer = (function () {
9160
9194
  options.baseLayer = stack.get('current', Object.assign(Object.assign({}, options), { normalizeLayerOptions: false }));
9161
9195
  }
9162
9196
  function build(options, beforeNew) {
9197
+ var _a;
9163
9198
  const { mode } = options;
9164
9199
  const { Class } = config[mode];
9165
9200
  const configs = u.reverse(modeConfigs(mode));
@@ -9167,6 +9202,7 @@ up.layer = (function () {
9167
9202
  if (handleDeprecatedConfig) {
9168
9203
  configs.forEach(handleDeprecatedConfig);
9169
9204
  }
9205
+ (_a = options.openAnimation) !== null && _a !== void 0 ? _a : (options.openAnimation = u.pluckKey(options, 'animation'));
9170
9206
  options = u.mergeDefined(...configs, { mode, stack }, options);
9171
9207
  if (beforeNew) {
9172
9208
  options = beforeNew(options);
@@ -9272,16 +9308,16 @@ up.layer = (function () {
9272
9308
 
9273
9309
 
9274
9310
  /***/ }),
9275
- /* 94 */
9311
+ /* 93 */
9276
9312
  /***/ (() => {
9277
9313
 
9278
9314
 
9279
9315
 
9280
9316
  /***/ }),
9281
- /* 95 */
9317
+ /* 94 */
9282
9318
  /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
9283
9319
 
9284
- __webpack_require__(96);
9320
+ __webpack_require__(95);
9285
9321
  up.link = (function () {
9286
9322
  const u = up.util;
9287
9323
  const e = up.element;
@@ -9430,16 +9466,22 @@ up.link = (function () {
9430
9466
  }
9431
9467
  function preload(link, options) {
9432
9468
  link = up.fragment.get(link);
9433
- if (!shouldPreload()) {
9434
- return Promise.reject(new up.Error('Link preloading is disabled'));
9469
+ let issue = preloadIssue(link);
9470
+ if (issue) {
9471
+ return Promise.reject(new up.Error(issue));
9435
9472
  }
9436
9473
  const guardEvent = up.event.build('up:link:preload', { log: ['Preloading link %o', link] });
9437
9474
  return follow(link, Object.assign(Object.assign({ abortable: false }, options), { guardEvent, preload: true }));
9438
9475
  }
9439
- function shouldPreload() {
9440
- let goodConnection = u.negate(up.network.shouldReduceRequests);
9441
- return u.evalAutoOption(config.preloadEnabled, goodConnection);
9476
+ function preloadIssue(link) {
9477
+ if (!u.evalAutoOption(config.preloadEnabled, autoPreloadEnabled, link)) {
9478
+ return 'Preloading is disabled';
9479
+ }
9480
+ else if (!isSafe(link)) {
9481
+ return 'Will not preload an unsafe link';
9482
+ }
9442
9483
  }
9484
+ const autoPreloadEnabled = u.negate(up.network.shouldReduceRequests);
9443
9485
  function followMethod(link, options = {}) {
9444
9486
  return u.normalizeMethod(options.method || link.getAttribute('up-method') || link.getAttribute('data-method'));
9445
9487
  }
@@ -9566,13 +9608,13 @@ up.follow = up.link.follow;
9566
9608
 
9567
9609
 
9568
9610
  /***/ }),
9569
- /* 96 */
9611
+ /* 95 */
9570
9612
  /***/ (() => {
9571
9613
 
9572
9614
 
9573
9615
 
9574
9616
  /***/ }),
9575
- /* 97 */
9617
+ /* 96 */
9576
9618
  /***/ (() => {
9577
9619
 
9578
9620
  up.form = (function () {
@@ -9972,7 +10014,7 @@ up.validate = up.form.validate;
9972
10014
 
9973
10015
 
9974
10016
  /***/ }),
9975
- /* 98 */
10017
+ /* 97 */
9976
10018
  /***/ (() => {
9977
10019
 
9978
10020
  up.feedback = (function () {
@@ -10089,7 +10131,7 @@ up.feedback = (function () {
10089
10131
 
10090
10132
 
10091
10133
  /***/ }),
10092
- /* 99 */
10134
+ /* 98 */
10093
10135
  /***/ (() => {
10094
10136
 
10095
10137
  up.radio = (function () {
@@ -10167,7 +10209,7 @@ up.radio = (function () {
10167
10209
 
10168
10210
 
10169
10211
  /***/ }),
10170
- /* 100 */
10212
+ /* 99 */
10171
10213
  /***/ (() => {
10172
10214
 
10173
10215
  (function () {
@@ -10305,16 +10347,15 @@ __webpack_require__(82);
10305
10347
  __webpack_require__(83);
10306
10348
  __webpack_require__(84);
10307
10349
  __webpack_require__(85);
10308
- __webpack_require__(86);
10309
- __webpack_require__(88);
10350
+ __webpack_require__(87);
10351
+ __webpack_require__(89);
10310
10352
  __webpack_require__(90);
10311
- __webpack_require__(91);
10312
- __webpack_require__(93);
10313
- __webpack_require__(95);
10353
+ __webpack_require__(92);
10354
+ __webpack_require__(94);
10355
+ __webpack_require__(96);
10314
10356
  __webpack_require__(97);
10315
10357
  __webpack_require__(98);
10316
10358
  __webpack_require__(99);
10317
- __webpack_require__(100);
10318
10359
  up.framework.onEvaled();
10319
10360
 
10320
10361
  })();