unpoly-rails 2.5.3 → 2.6.0

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.

Potentially problematic release.


This version of unpoly-rails might be problematic. Click here for more details.

@@ -8,7 +8,7 @@
8
8
  @module up
9
9
  */
10
10
  window.up = {
11
- version: '2.5.3'
11
+ version: '2.6.0'
12
12
  };
13
13
 
14
14
 
@@ -2167,7 +2167,36 @@ up.error = (function () {
2167
2167
  var message = error.message;
2168
2168
  up.emit(window, 'error', { message: message, error: error, log: false });
2169
2169
  }
2170
+ /*-
2171
+ Throws a [JavaScript error](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error)
2172
+ with the given message.
2173
+
2174
+ The message may contain [substitution marks](https://developer.mozilla.org/en-US/docs/Web/API/console#Using_string_substitutions).
2175
+
2176
+ ### Examples
2177
+
2178
+ up.fail('Division by zero')
2179
+ up.fail('Unexpected result %o', result)
2180
+
2181
+ @function up.fail
2182
+ @param {string} message
2183
+ A message with details about the error.
2184
+
2185
+ The message can contain [substitution marks](https://developer.mozilla.org/en-US/docs/Web/API/console#Using_string_substitutions)
2186
+ like `%s` or `%o`.
2187
+ @param {Array<string>} vars...
2188
+ A list of variables to replace any substitution marks in the error message.
2189
+ @internal
2190
+ */
2191
+ function fail() {
2192
+ var args = [];
2193
+ for (var _i = 0; _i < arguments.length; _i++) {
2194
+ args[_i] = arguments[_i];
2195
+ }
2196
+ throw up.error.failed(args);
2197
+ }
2170
2198
  return {
2199
+ fail: fail,
2171
2200
  failed: failed,
2172
2201
  aborted: aborted,
2173
2202
  invalidSelector: invalidSelector,
@@ -2176,6 +2205,7 @@ up.error = (function () {
2176
2205
  emitGlobal: emitGlobal
2177
2206
  };
2178
2207
  })();
2208
+ up.fail = up.error.fail;
2179
2209
 
2180
2210
 
2181
2211
  /***/ }),
@@ -2837,11 +2867,11 @@ up.element = (function () {
2837
2867
  The [text content](https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent) of the created element.
2838
2868
  @param {Object} [attrs.content]
2839
2869
  The [inner HTML](https://developer.mozilla.org/en-US/docs/Web/API/Element/innerHTML) of the created element.
2840
- @param {Object} [attrs.style]
2870
+ @param {Object|string} [attrs.style]
2841
2871
  An object of CSS properties that will be set as the inline style
2842
- of the created element.
2872
+ of the created element. The given object may use kebab-case or camelCase keys.
2843
2873
 
2844
- The given object may use kebab-case or camelCase keys.
2874
+ You may also pass a string with semicolon-separated styles.
2845
2875
  @return {Element}
2846
2876
  The created element.
2847
2877
  @stable
@@ -2949,7 +2979,7 @@ up.element = (function () {
2949
2979
  An object of attributes to set on the created element.
2950
2980
  @param {Object} attrs.text
2951
2981
  The [text content](https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent) of the created element.
2952
- @param {Object} attrs.style
2982
+ @param {Object|string} attrs.style
2953
2983
  An object of CSS properties that will be set as the inline style
2954
2984
  of the created element.
2955
2985
 
@@ -3466,11 +3496,16 @@ up.element = (function () {
3466
3496
  @stable
3467
3497
  */
3468
3498
  function setInlineStyle(element, props) {
3469
- var style = element.style;
3470
- for (var key in props) {
3471
- var value = props[key];
3472
- value = normalizeStyleValueForWrite(key, value);
3473
- style[key] = value;
3499
+ if (u.isString(props)) {
3500
+ element.setAttribute('style', props);
3501
+ }
3502
+ else {
3503
+ var style = element.style;
3504
+ for (var key in props) {
3505
+ var value = props[key];
3506
+ value = normalizeStyleValueForWrite(key, value);
3507
+ style[key] = value;
3508
+ }
3474
3509
  }
3475
3510
  }
3476
3511
  function normalizeStyleValueForWrite(key, value) {
@@ -4633,8 +4668,16 @@ up.Change.UpdateLayer = /** @class */ (function (_super) {
4633
4668
  up.fragment.markAsDestroying(step.oldElement);
4634
4669
  }, afterInsert: function () {
4635
4670
  _this.responseDoc.finalizeElement(step.newElement);
4671
+ step.keepPlans.forEach(_this.reviveKeepable);
4672
+ // In the case of [up-keep] descendants, keepable elements are now transferred
4673
+ // to step.newElement, leaving a clone in their old DOM Position.
4674
+ // up.hello() is aware of step.keepPlans and will not compile kept elements a second time.
4636
4675
  up.hello(step.newElement, step);
4637
4676
  }, beforeDetach: function () {
4677
+ // In the case of [up-keep] descendants, keepable elements have been replaced
4678
+ // with a clone in step.oldElement. However, since that clone was never compiled,
4679
+ // it does not have destructors registered. Hence we will not clean the clone
4680
+ // unnecessarily.
4638
4681
  up.syntax.clean(step.oldElement, { layer: _this.layer });
4639
4682
  }, afterDetach: function () {
4640
4683
  e.remove(step.oldElement); // clean up jQuery data
@@ -4762,9 +4805,10 @@ up.Change.UpdateLayer = /** @class */ (function (_super) {
4762
4805
  if (step.keep) {
4763
4806
  for (var _i = 0, _a = step.oldElement.querySelectorAll('[up-keep]'); _i < _a.length; _i++) {
4764
4807
  var keepable = _a[_i];
4765
- var plan = this.findKeepPlan(__assign(__assign({}, step), { oldElement: keepable, descendantsOnly: true }));
4766
- if (plan) {
4808
+ var keepPlan = this.findKeepPlan(__assign(__assign({}, step), { oldElement: keepable, descendantsOnly: true }));
4809
+ if (keepPlan) {
4767
4810
  // plan.oldElement is now keepable
4811
+ this.hibernateKeepable(keepPlan);
4768
4812
  // Replace keepable with its clone so it looks good in a transition between
4769
4813
  // oldElement and newElement. Note that keepable will still point to the same element
4770
4814
  // after the replacement, which is now detached.
@@ -4772,8 +4816,8 @@ up.Change.UpdateLayer = /** @class */ (function (_super) {
4772
4816
  e.replace(keepable, keepableClone);
4773
4817
  // Since we're going to swap the entire oldElement and newElement containers afterwards,
4774
4818
  // replace the matching element with keepable so it will eventually return to the DOM.
4775
- e.replace(plan.newElement, keepable);
4776
- keepPlans.push(plan);
4819
+ e.replace(keepPlan.newElement, keepable);
4820
+ keepPlans.push(keepPlan);
4777
4821
  }
4778
4822
  }
4779
4823
  }
@@ -4795,6 +4839,19 @@ up.Change.UpdateLayer = /** @class */ (function (_super) {
4795
4839
  }
4796
4840
  }
4797
4841
  };
4842
+ UpdateLayer.prototype.hibernateKeepable = function (keepPlan) {
4843
+ var viewports = up.viewport.subtree(keepPlan.oldElement);
4844
+ keepPlan.revivers = viewports.map(function (viewport) {
4845
+ var scrollTop = viewport.scrollTop, scrollLeft = viewport.scrollLeft;
4846
+ return function () { return u.assign(viewport, { scrollTop: scrollTop, scrollLeft: scrollLeft }); };
4847
+ });
4848
+ };
4849
+ UpdateLayer.prototype.reviveKeepable = function (keepPlan) {
4850
+ for (var _i = 0, _a = keepPlan.revivers; _i < _a.length; _i++) {
4851
+ var reviver = _a[_i];
4852
+ reviver();
4853
+ }
4854
+ };
4798
4855
  UpdateLayer.prototype.matchPreflight = function () {
4799
4856
  if (this.matchedPreflight) {
4800
4857
  return;
@@ -4966,7 +5023,7 @@ up.Change.CloseLayer = /** @class */ (function (_super) {
4966
5023
  // The close event is emitted on the layer that is about to close.
4967
5024
  return this.layer.emit(this.buildEvent("up:layer:".concat(this.verb)), {
4968
5025
  callback: this.layer.callback("on".concat(u.upperCaseFirst(this.verb))),
4969
- log: "Will ".concat(this.verb, " ").concat(this.layer)
5026
+ log: ["Will ".concat(this.verb, " ").concat(this.layer, " with value %o"), this.value]
4970
5027
  });
4971
5028
  };
4972
5029
  CloseLayer.prototype.emitClosedEvent = function (formerParent) {
@@ -4984,7 +5041,7 @@ up.Change.CloseLayer = /** @class */ (function (_super) {
4984
5041
  baseLayer: formerParent,
4985
5042
  callback: this.layer.callback("on".concat(verbPastUpperCaseFirst)),
4986
5043
  ensureBubbles: true,
4987
- log: "".concat(verbPastUpperCaseFirst, " ").concat(this.layer)
5044
+ log: ["".concat(verbPastUpperCaseFirst, " ").concat(this.layer, " with value %o"), this.value]
4988
5045
  });
4989
5046
  };
4990
5047
  CloseLayer.prototype.buildEvent = function (name) {
@@ -6588,6 +6645,117 @@ up.FragmentFocus = /** @class */ (function (_super) {
6588
6645
  /* 33 */
6589
6646
  /***/ (function() {
6590
6647
 
6648
+ var e = up.element;
6649
+ var u = up.util;
6650
+ up.FragmentPolling = /** @class */ (function () {
6651
+ function FragmentPolling(fragment) {
6652
+ this.options = {};
6653
+ this.state = 'initialized';
6654
+ this.setFragment(fragment);
6655
+ }
6656
+ FragmentPolling.forFragment = function (fragment) {
6657
+ return fragment.upPolling || (fragment.upPolling = new this(fragment));
6658
+ };
6659
+ FragmentPolling.prototype.onPollAttributeObserved = function () {
6660
+ this.start();
6661
+ };
6662
+ FragmentPolling.prototype.onFragmentDestroyed = function () {
6663
+ // The element may come back (when it is swapped) or or may not come back (when it is destroyed).
6664
+ // If it does come back, `onPollAttributeObserved()` will restart the polling.
6665
+ this.stop();
6666
+ };
6667
+ FragmentPolling.prototype.start = function () {
6668
+ if (this.state !== 'started') {
6669
+ this.state = 'started';
6670
+ this.scheduleReload();
6671
+ }
6672
+ };
6673
+ FragmentPolling.prototype.stop = function () {
6674
+ if (this.state === 'started') {
6675
+ clearTimeout(this.reloadTimer);
6676
+ this.state = 'stopped';
6677
+ }
6678
+ };
6679
+ FragmentPolling.prototype.forceStart = function (options) {
6680
+ u.assign(this.options, options);
6681
+ this.forceStarted = true;
6682
+ this.start();
6683
+ };
6684
+ FragmentPolling.prototype.forceStop = function () {
6685
+ this.stop();
6686
+ this.forceStarted = false;
6687
+ };
6688
+ FragmentPolling.prototype.scheduleReload = function (delay) {
6689
+ var _this = this;
6690
+ if (delay === void 0) { delay = this.getInterval(); }
6691
+ this.reloadTimer = setTimeout(function () { return _this.reload(); }, delay);
6692
+ };
6693
+ FragmentPolling.prototype.reload = function () {
6694
+ var _this = this;
6695
+ // The setTimeout(doReload) callback might already be scheduled
6696
+ // before the polling stopped.
6697
+ if (this.state !== 'started') {
6698
+ return;
6699
+ }
6700
+ if (up.radio.shouldPoll(this.fragment)) {
6701
+ var reloadOptions = {
6702
+ url: this.options.url,
6703
+ guardEvent: up.event.build('up:fragment:poll', { log: 'Polling fragment' })
6704
+ };
6705
+ u.always(up.reload(this.fragment, reloadOptions), function (result) { return _this.onReloaded(result); });
6706
+ }
6707
+ else {
6708
+ up.puts('[up-poll]', 'Polling is disabled');
6709
+ // Reconsider after 10 seconds at most
6710
+ var reconsiderDisabledDelay = Math.min(10 * 1000, this.getInterval());
6711
+ this.scheduleReload(reconsiderDisabledDelay);
6712
+ }
6713
+ };
6714
+ FragmentPolling.prototype.onReloaded = function (result) {
6715
+ var _a;
6716
+ // Transfer this instance to the new fragment.
6717
+ // We can remove this in case we don't implement forced start/stop.
6718
+ var newFragment = (_a = result === null || result === void 0 ? void 0 : result.fragments) === null || _a === void 0 ? void 0 : _a[0];
6719
+ if (newFragment) {
6720
+ // No need to scheduleReload() in this branch:
6721
+ // (1) Either the new fragment also has an [up-poll] and we have already
6722
+ // started in #onPollAttributeObserved().
6723
+ // (2) Or we are force-started and we will start in #onFragmentSwapped().
6724
+ this.onFragmentSwapped(newFragment);
6725
+ }
6726
+ else {
6727
+ this.scheduleReload();
6728
+ }
6729
+ };
6730
+ FragmentPolling.prototype.onFragmentSwapped = function (newFragment) {
6731
+ // Transfer this polling to the new instance
6732
+ newFragment.upPolling = this;
6733
+ delete this.fragment.upPolling;
6734
+ this.setFragment(newFragment);
6735
+ if (this.state === 'stopped' && this.forceStarted) {
6736
+ // When polling was started programmatically through up.fragment.startPolling()
6737
+ // we don't require the updated fragment to have an [up-poll] attribute to
6738
+ // continue polling.
6739
+ this.start();
6740
+ }
6741
+ };
6742
+ FragmentPolling.prototype.setFragment = function (newFragment) {
6743
+ var _this = this;
6744
+ this.fragment = newFragment;
6745
+ up.destructor(newFragment, function () { return _this.onFragmentDestroyed(); });
6746
+ };
6747
+ FragmentPolling.prototype.getInterval = function () {
6748
+ var _a, _b;
6749
+ return (_b = (_a = this.options.interval) !== null && _a !== void 0 ? _a : e.numberAttr(this.fragment, 'up-interval')) !== null && _b !== void 0 ? _b : up.radio.config.pollInterval;
6750
+ };
6751
+ return FragmentPolling;
6752
+ }());
6753
+
6754
+
6755
+ /***/ }),
6756
+ /* 34 */
6757
+ /***/ (function() {
6758
+
6591
6759
  var __extends = (this && this.__extends) || (function () {
6592
6760
  var extendStatics = function (d, b) {
6593
6761
  extendStatics = Object.setPrototypeOf ||
@@ -6694,7 +6862,7 @@ up.FragmentScrolling = /** @class */ (function (_super) {
6694
6862
 
6695
6863
 
6696
6864
  /***/ }),
6697
- /* 34 */
6865
+ /* 35 */
6698
6866
  /***/ (function() {
6699
6867
 
6700
6868
  var u = up.util;
@@ -6737,7 +6905,7 @@ up.HTMLWrapper = /** @class */ (function () {
6737
6905
 
6738
6906
 
6739
6907
  /***/ }),
6740
- /* 35 */
6908
+ /* 36 */
6741
6909
  /***/ (function() {
6742
6910
 
6743
6911
  var __extends = (this && this.__extends) || (function () {
@@ -7499,7 +7667,7 @@ up.Layer = /** @class */ (function (_super) {
7499
7667
 
7500
7668
 
7501
7669
  /***/ }),
7502
- /* 36 */
7670
+ /* 37 */
7503
7671
  /***/ (function() {
7504
7672
 
7505
7673
  var __extends = (this && this.__extends) || (function () {
@@ -7687,12 +7855,6 @@ up.Layer.Overlay = /** @class */ (function (_super) {
7687
7855
  this.createDismissElement(this.getBoxElement());
7688
7856
  }
7689
7857
  if (this.supportsDismissMethod('outside')) {
7690
- this.unbindParentClicked = this.parent.on('up:click', function (event, element) {
7691
- // When our origin is clicked again, halt the click event
7692
- // We achieve this by halting the click event.
7693
- var originClicked = _this.origin && _this.origin.contains(element);
7694
- _this.onOutsideClicked(event, originClicked);
7695
- });
7696
7858
  // If this overlay has its own viewport, a click outside the frame will hit
7697
7859
  // the viewport and not the parent element.
7698
7860
  if (this.viewportElement) {
@@ -7703,6 +7865,18 @@ up.Layer.Overlay = /** @class */ (function (_super) {
7703
7865
  }
7704
7866
  });
7705
7867
  }
7868
+ else {
7869
+ // Only bind to the parent if there's not already a viewport.
7870
+ // This prevents issues with other overlay libs appending elements to document.body,
7871
+ // but overlaying this overlay with a huge z-index. Clicking such a foreign overlay
7872
+ // would close this layer, as Unpoly considers it to be on the root layer (our parent).2
7873
+ this.unbindParentClicked = this.parent.on('up:click', function (event, element) {
7874
+ // When our origin is clicked again, halt the click event
7875
+ // We achieve this by halting the click event.
7876
+ var originClicked = _this.origin && _this.origin.contains(element);
7877
+ _this.onOutsideClicked(event, originClicked);
7878
+ });
7879
+ }
7706
7880
  }
7707
7881
  if (this.supportsDismissMethod('key')) {
7708
7882
  this.unbindEscapePressed = up.event.onEscape(function (event) { return _this.onEscapePressed(event); });
@@ -7725,7 +7899,7 @@ up.Layer.Overlay = /** @class */ (function (_super) {
7725
7899
  if (halt) {
7726
7900
  up.event.halt(event);
7727
7901
  }
7728
- this.dismiss(':outside');
7902
+ this.dismiss(':outside', { origin: event.target });
7729
7903
  };
7730
7904
  Overlay.prototype.onEscapePressed = function (event) {
7731
7905
  // All overlays listen to the Escape key being pressed, but only the front layer
@@ -7752,7 +7926,7 @@ up.Layer.Overlay = /** @class */ (function (_super) {
7752
7926
  // Since we're defining this handler on up.Overlay, we will not prevent
7753
7927
  // a link from being followed on the root layer.
7754
7928
  up.event.halt(event);
7755
- var origin = event.target.closest(selector);
7929
+ var origin = e.closest(event.target, selector);
7756
7930
  var value = e.jsonAttr(origin, attribute);
7757
7931
  var closeOptions = { origin: origin };
7758
7932
  var parser = new up.OptionsParser(closeOptions, origin);
@@ -7890,7 +8064,7 @@ up.Layer.Overlay = /** @class */ (function (_super) {
7890
8064
 
7891
8065
 
7892
8066
  /***/ }),
7893
- /* 37 */
8067
+ /* 38 */
7894
8068
  /***/ (function() {
7895
8069
 
7896
8070
  var __extends = (this && this.__extends) || (function () {
@@ -7955,7 +8129,7 @@ up.Layer.OverlayWithTether = /** @class */ (function (_super) {
7955
8129
 
7956
8130
 
7957
8131
  /***/ }),
7958
- /* 38 */
8132
+ /* 39 */
7959
8133
  /***/ (function() {
7960
8134
 
7961
8135
  var __extends = (this && this.__extends) || (function () {
@@ -8027,7 +8201,7 @@ up.Layer.OverlayWithViewport = (_a = /** @class */ (function (_super) {
8027
8201
 
8028
8202
 
8029
8203
  /***/ }),
8030
- /* 39 */
8204
+ /* 40 */
8031
8205
  /***/ (function() {
8032
8206
 
8033
8207
  var __extends = (this && this.__extends) || (function () {
@@ -8121,7 +8295,7 @@ up.Layer.Root = (_a = /** @class */ (function (_super) {
8121
8295
 
8122
8296
 
8123
8297
  /***/ }),
8124
- /* 40 */
8298
+ /* 41 */
8125
8299
  /***/ (function() {
8126
8300
 
8127
8301
  var __extends = (this && this.__extends) || (function () {
@@ -8152,7 +8326,7 @@ up.Layer.Modal = (_a = /** @class */ (function (_super) {
8152
8326
 
8153
8327
 
8154
8328
  /***/ }),
8155
- /* 41 */
8329
+ /* 42 */
8156
8330
  /***/ (function() {
8157
8331
 
8158
8332
  var __extends = (this && this.__extends) || (function () {
@@ -8183,7 +8357,7 @@ up.Layer.Popup = (_a = /** @class */ (function (_super) {
8183
8357
 
8184
8358
 
8185
8359
  /***/ }),
8186
- /* 42 */
8360
+ /* 43 */
8187
8361
  /***/ (function() {
8188
8362
 
8189
8363
  var __extends = (this && this.__extends) || (function () {
@@ -8214,7 +8388,7 @@ up.Layer.Drawer = (_a = /** @class */ (function (_super) {
8214
8388
 
8215
8389
 
8216
8390
  /***/ }),
8217
- /* 43 */
8391
+ /* 44 */
8218
8392
  /***/ (function() {
8219
8393
 
8220
8394
  var __extends = (this && this.__extends) || (function () {
@@ -8245,7 +8419,7 @@ up.Layer.Cover = (_a = /** @class */ (function (_super) {
8245
8419
 
8246
8420
 
8247
8421
  /***/ }),
8248
- /* 44 */
8422
+ /* 45 */
8249
8423
  /***/ (function() {
8250
8424
 
8251
8425
  var __assign = (this && this.__assign) || function () {
@@ -8370,7 +8544,7 @@ up.LayerLookup = /** @class */ (function () {
8370
8544
 
8371
8545
 
8372
8546
  /***/ }),
8373
- /* 45 */
8547
+ /* 46 */
8374
8548
  /***/ (function() {
8375
8549
 
8376
8550
  var __extends = (this && this.__extends) || (function () {
@@ -8575,7 +8749,7 @@ up.LayerStack = /** @class */ (function (_super) {
8575
8749
 
8576
8750
 
8577
8751
  /***/ }),
8578
- /* 46 */
8752
+ /* 47 */
8579
8753
  /***/ (function() {
8580
8754
 
8581
8755
  up.LinkFeedbackURLs = /** @class */ (function () {
@@ -8610,7 +8784,7 @@ up.LinkFeedbackURLs = /** @class */ (function () {
8610
8784
 
8611
8785
 
8612
8786
  /***/ }),
8613
- /* 47 */
8787
+ /* 48 */
8614
8788
  /***/ (function() {
8615
8789
 
8616
8790
  var u = up.util;
@@ -8691,7 +8865,7 @@ up.LinkPreloader = /** @class */ (function () {
8691
8865
 
8692
8866
 
8693
8867
  /***/ }),
8694
- /* 48 */
8868
+ /* 49 */
8695
8869
  /***/ (function() {
8696
8870
 
8697
8871
  var __assign = (this && this.__assign) || function () {
@@ -8944,7 +9118,7 @@ up.MotionController = /** @class */ (function () {
8944
9118
 
8945
9119
 
8946
9120
  /***/ }),
8947
- /* 49 */
9121
+ /* 50 */
8948
9122
  /***/ (function() {
8949
9123
 
8950
9124
  var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
@@ -9075,7 +9249,7 @@ up.NonceableCallback = /** @class */ (function () {
9075
9249
 
9076
9250
 
9077
9251
  /***/ }),
9078
- /* 50 */
9252
+ /* 51 */
9079
9253
  /***/ (function() {
9080
9254
 
9081
9255
  var __assign = (this && this.__assign) || function () {
@@ -9153,7 +9327,7 @@ up.OptionsParser = /** @class */ (function () {
9153
9327
 
9154
9328
 
9155
9329
  /***/ }),
9156
- /* 51 */
9330
+ /* 52 */
9157
9331
  /***/ (function() {
9158
9332
 
9159
9333
  var e = up.element;
@@ -9247,7 +9421,7 @@ up.OverlayFocus = /** @class */ (function () {
9247
9421
 
9248
9422
 
9249
9423
  /***/ }),
9250
- /* 52 */
9424
+ /* 53 */
9251
9425
  /***/ (function() {
9252
9426
 
9253
9427
  var u = up.util;
@@ -9844,7 +10018,7 @@ up.Params = /** @class */ (function () {
9844
10018
 
9845
10019
 
9846
10020
  /***/ }),
9847
- /* 53 */
10021
+ /* 54 */
9848
10022
  /***/ (function() {
9849
10023
 
9850
10024
  var e = up.element;
@@ -9902,7 +10076,7 @@ up.ProgressBar = /** @class */ (function () {
9902
10076
 
9903
10077
 
9904
10078
  /***/ }),
9905
- /* 54 */
10079
+ /* 55 */
9906
10080
  /***/ (function() {
9907
10081
 
9908
10082
  var u = up.util;
@@ -10041,7 +10215,7 @@ up.RenderOptions = (function () {
10041
10215
 
10042
10216
 
10043
10217
  /***/ }),
10044
- /* 55 */
10218
+ /* 56 */
10045
10219
  /***/ (function() {
10046
10220
 
10047
10221
  var __extends = (this && this.__extends) || (function () {
@@ -10102,7 +10276,7 @@ up.RenderResult = /** @class */ (function (_super) {
10102
10276
 
10103
10277
 
10104
10278
  /***/ }),
10105
- /* 56 */
10279
+ /* 57 */
10106
10280
  /***/ (function() {
10107
10281
 
10108
10282
  var __extends = (this && this.__extends) || (function () {
@@ -10168,8 +10342,18 @@ up.Request = /** @class */ (function (_super) {
10168
10342
  // Normalize a first time to get a normalized cache key.
10169
10343
  _this.normalizeForCaching();
10170
10344
  if (!options.basic) {
10171
- _this.layer = up.layer.get(_this.layer); // If @layer and @origin is undefined, this will choose the current layer.
10172
- _this.failLayer = up.layer.get(_this.failLayer || _this.layer);
10345
+ var layerLookupOptions = { origin: _this.origin };
10346
+ // Calling up.layer.get() will give us:
10347
+ //
10348
+ // (1) Resolution of strings like 'current' to an up.Layer instance
10349
+ // (2) Default of origin's layer
10350
+ // (3) Default of up.layer.current
10351
+ //
10352
+ // up.layer.get('new') will return 'new' unchanged, but I'm not sure
10353
+ // if any code actually calls up.request({ ..., layer: 'new' }).
10354
+ // In up.Change.OpenLayer we connect requests to the base layer we're stacking upon.
10355
+ _this.layer = up.layer.get(_this.layer, layerLookupOptions);
10356
+ _this.failLayer = up.layer.get(_this.failLayer || _this.layer, layerLookupOptions);
10173
10357
  _this.context || (_this.context = _this.layer.context || {}); // @layer might be "new", so we default to {}
10174
10358
  _this.failContext || (_this.failContext = _this.failLayer.context || {}); // @failLayer might be "new", so we default to {}
10175
10359
  _this.mode || (_this.mode = _this.layer.mode);
@@ -10724,7 +10908,7 @@ up.Request.tester = function (condition) {
10724
10908
 
10725
10909
 
10726
10910
  /***/ }),
10727
- /* 57 */
10911
+ /* 58 */
10728
10912
  /***/ (function() {
10729
10913
 
10730
10914
  var __extends = (this && this.__extends) || (function () {
@@ -10791,7 +10975,7 @@ up.Request.Cache = /** @class */ (function (_super) {
10791
10975
 
10792
10976
 
10793
10977
  /***/ }),
10794
- /* 58 */
10978
+ /* 59 */
10795
10979
  /***/ (function() {
10796
10980
 
10797
10981
  var u = up.util;
@@ -10945,7 +11129,7 @@ up.Request.Queue = /** @class */ (function () {
10945
11129
 
10946
11130
 
10947
11131
  /***/ }),
10948
- /* 59 */
11132
+ /* 60 */
10949
11133
  /***/ (function() {
10950
11134
 
10951
11135
  var u = up.util;
@@ -10998,7 +11182,7 @@ up.Request.FormRenderer = /** @class */ (function () {
10998
11182
 
10999
11183
 
11000
11184
  /***/ }),
11001
- /* 60 */
11185
+ /* 61 */
11002
11186
  /***/ (function() {
11003
11187
 
11004
11188
  var CONTENT_TYPE_URL_ENCODED = 'application/x-www-form-urlencoded';
@@ -11106,7 +11290,7 @@ up.Request.XHRRenderer = /** @class */ (function () {
11106
11290
 
11107
11291
 
11108
11292
  /***/ }),
11109
- /* 61 */
11293
+ /* 62 */
11110
11294
  /***/ (function() {
11111
11295
 
11112
11296
  var __extends = (this && this.__extends) || (function () {
@@ -11324,7 +11508,7 @@ up.Response = /** @class */ (function (_super) {
11324
11508
 
11325
11509
 
11326
11510
  /***/ }),
11327
- /* 62 */
11511
+ /* 63 */
11328
11512
  /***/ (function() {
11329
11513
 
11330
11514
  var u = up.util;
@@ -11433,7 +11617,7 @@ up.ResponseDoc = /** @class */ (function () {
11433
11617
 
11434
11618
 
11435
11619
  /***/ }),
11436
- /* 63 */
11620
+ /* 64 */
11437
11621
  /***/ (function() {
11438
11622
 
11439
11623
  var e = up.element;
@@ -11555,7 +11739,7 @@ up.RevealMotion = /** @class */ (function () {
11555
11739
 
11556
11740
 
11557
11741
  /***/ }),
11558
- /* 64 */
11742
+ /* 65 */
11559
11743
  /***/ (function() {
11560
11744
 
11561
11745
  var u = up.util;
@@ -11635,7 +11819,7 @@ up.ScrollMotion = /** @class */ (function () {
11635
11819
 
11636
11820
 
11637
11821
  /***/ }),
11638
- /* 65 */
11822
+ /* 66 */
11639
11823
  /***/ (function() {
11640
11824
 
11641
11825
  var e = up.element;
@@ -11689,7 +11873,7 @@ up.Selector = /** @class */ (function () {
11689
11873
 
11690
11874
 
11691
11875
  /***/ }),
11692
- /* 66 */
11876
+ /* 67 */
11693
11877
  /***/ (function() {
11694
11878
 
11695
11879
  var u = up.util;
@@ -11724,7 +11908,7 @@ up.store.Memory = /** @class */ (function () {
11724
11908
 
11725
11909
 
11726
11910
  /***/ }),
11727
- /* 67 */
11911
+ /* 68 */
11728
11912
  /***/ (function() {
11729
11913
 
11730
11914
  var __extends = (this && this.__extends) || (function () {
@@ -11812,7 +11996,7 @@ up.store.Session = /** @class */ (function (_super) {
11812
11996
 
11813
11997
 
11814
11998
  /***/ }),
11815
- /* 68 */
11999
+ /* 69 */
11816
12000
  /***/ (function() {
11817
12001
 
11818
12002
  var u = up.util;
@@ -11974,7 +12158,7 @@ up.Tether = /** @class */ (function () {
11974
12158
 
11975
12159
 
11976
12160
  /***/ }),
11977
- /* 69 */
12161
+ /* 70 */
11978
12162
  /***/ (function() {
11979
12163
 
11980
12164
  var u = up.util;
@@ -12068,7 +12252,7 @@ up.URLPattern = /** @class */ (function () {
12068
12252
 
12069
12253
 
12070
12254
  /***/ }),
12071
- /* 70 */
12255
+ /* 71 */
12072
12256
  /***/ (function() {
12073
12257
 
12074
12258
  /*-
@@ -12279,7 +12463,7 @@ up.boot = up.framework.boot;
12279
12463
 
12280
12464
 
12281
12465
  /***/ }),
12282
- /* 71 */
12466
+ /* 72 */
12283
12467
  /***/ (function() {
12284
12468
 
12285
12469
  /*-
@@ -12872,7 +13056,7 @@ up.emit = up.event.emit;
12872
13056
 
12873
13057
 
12874
13058
  /***/ }),
12875
- /* 72 */
13059
+ /* 73 */
12876
13060
  /***/ (function() {
12877
13061
 
12878
13062
  /*-
@@ -13671,7 +13855,7 @@ up.protocol = (function () {
13671
13855
 
13672
13856
 
13673
13857
  /***/ }),
13674
- /* 73 */
13858
+ /* 74 */
13675
13859
  /***/ (function() {
13676
13860
 
13677
13861
  var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
@@ -13850,37 +14034,6 @@ up.log = (function () {
13850
14034
  setEnabled(false);
13851
14035
  }
13852
14036
  /*-
13853
- Throws a [JavaScript error](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error)
13854
- with the given message.
13855
-
13856
- The message will also be printed to the error log. Also a notification will be shown at the bottom of the screen.
13857
-
13858
- The message may contain [substitution marks](https://developer.mozilla.org/en-US/docs/Web/API/console#Using_string_substitutions).
13859
-
13860
- ### Examples
13861
-
13862
- up.fail('Division by zero')
13863
- up.fail('Unexpected result %o', result)
13864
-
13865
- @function up.fail
13866
- @param {string} message
13867
- A message with details about the error.
13868
-
13869
- The message can contain [substitution marks](https://developer.mozilla.org/en-US/docs/Web/API/console#Using_string_substitutions)
13870
- like `%s` or `%o`.
13871
- @param {Array<string>} vars...
13872
- A list of variables to replace any substitution marks in the error message.
13873
- @experimental
13874
- */
13875
- function fail() {
13876
- var args = [];
13877
- for (var _i = 0; _i < arguments.length; _i++) {
13878
- args[_i] = arguments[_i];
13879
- }
13880
- printToError.apply(void 0, __spreadArray(['error'], args, false));
13881
- throw up.error.failed(args);
13882
- }
13883
- /*-
13884
14037
  Registers an empty rejection handler in case the given promise
13885
14038
  rejects with an AbortError or a failed up.Response.
13886
14039
 
@@ -13916,18 +14069,16 @@ up.log = (function () {
13916
14069
  config: config,
13917
14070
  enable: enable,
13918
14071
  disable: disable,
13919
- fail: fail,
13920
14072
  muteUncriticalRejection: muteUncriticalRejection,
13921
14073
  isEnabled: function () { return config.enabled; },
13922
14074
  };
13923
14075
  })();
13924
14076
  up.puts = up.log.puts;
13925
14077
  up.warn = up.log.warn;
13926
- up.fail = up.log.fail;
13927
14078
 
13928
14079
 
13929
14080
  /***/ }),
13930
- /* 74 */
14081
+ /* 75 */
13931
14082
  /***/ (function() {
13932
14083
 
13933
14084
  /*-
@@ -14253,7 +14404,6 @@ up.syntax = (function () {
14253
14404
  isDefault: up.framework.evaling,
14254
14405
  priority: 0,
14255
14406
  batch: false,
14256
- keep: false,
14257
14407
  jQuery: false
14258
14408
  });
14259
14409
  return u.assign(callback, options);
@@ -14449,7 +14599,7 @@ up.data = up.syntax.data;
14449
14599
 
14450
14600
 
14451
14601
  /***/ }),
14452
- /* 75 */
14602
+ /* 76 */
14453
14603
  /***/ (function() {
14454
14604
 
14455
14605
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
@@ -14766,9 +14916,6 @@ up.history = (function () {
14766
14916
  return historyLayer.emit.apply(historyLayer, args);
14767
14917
  }
14768
14918
  function register() {
14769
- // Supported by all browser except IE:
14770
- // https://developer.mozilla.org/en-US/docs/Web/API/History/scrollRestoration
14771
- window.history.scrollRestoration = 'manual';
14772
14919
  window.addEventListener('popstate', onPop);
14773
14920
  // Unpoly replaces the initial page state so it can later restore it when the user
14774
14921
  // goes back to that initial URL. However, if the initial request was a POST,
@@ -14843,7 +14990,7 @@ up.history = (function () {
14843
14990
 
14844
14991
 
14845
14992
  /***/ }),
14846
- /* 76 */
14993
+ /* 77 */
14847
14994
  /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
14848
14995
 
14849
14996
  var __assign = (this && this.__assign) || function () {
@@ -14857,7 +15004,7 @@ var __assign = (this && this.__assign) || function () {
14857
15004
  };
14858
15005
  return __assign.apply(this, arguments);
14859
15006
  };
14860
- __webpack_require__(77);
15007
+ __webpack_require__(78);
14861
15008
  var u = up.util;
14862
15009
  var e = up.element;
14863
15010
  /*-
@@ -15715,7 +15862,7 @@ up.fragment = (function () {
15715
15862
  var keepPlans = options.keepPlans || [];
15716
15863
  var skip = keepPlans.map(function (plan) {
15717
15864
  emitFragmentKept(plan);
15718
- return plan.oldElement;
15865
+ return plan.oldElement; // the kept element
15719
15866
  });
15720
15867
  up.syntax.compile(element, { skip: skip, layer: options.layer });
15721
15868
  emitFragmentInserted(element, options);
@@ -16696,13 +16843,13 @@ u.delegate(up, 'context', function () { return up.layer.current; });
16696
16843
 
16697
16844
 
16698
16845
  /***/ }),
16699
- /* 77 */
16846
+ /* 78 */
16700
16847
  /***/ (function() {
16701
16848
 
16702
16849
 
16703
16850
 
16704
16851
  /***/ }),
16705
- /* 78 */
16852
+ /* 79 */
16706
16853
  /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
16707
16854
 
16708
16855
  var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
@@ -16714,7 +16861,7 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
16714
16861
  }
16715
16862
  return to.concat(ar || Array.prototype.slice.call(from));
16716
16863
  };
16717
- __webpack_require__(79);
16864
+ __webpack_require__(80);
16718
16865
  /*-
16719
16866
  Scrolling viewports
16720
16867
  ===================
@@ -16828,8 +16975,8 @@ up.viewport = (function () {
16828
16975
  The container element to scroll.
16829
16976
  @param {number} scrollPos
16830
16977
  The absolute number of pixels to set the scroll position to.
16831
- @param {string}[options.behavior='auto']
16832
- When set to `'auto'`, this will immediately scroll to the new position.
16978
+ @param {string}[options.behavior='instant']
16979
+ When set to `'instant'`, this will immediately scroll to the new position.
16833
16980
 
16834
16981
  When set to `'smooth'`, this will scroll smoothly to the new position.
16835
16982
  @param {number}[options.speed]
@@ -16902,8 +17049,8 @@ up.viewport = (function () {
16902
17049
 
16903
17050
  Defaults to `up.viewport.config.revealTop`.
16904
17051
 
16905
- @param {string}[options.behavior='auto']
16906
- When set to `'auto'`, this will immediately scroll to the new position.
17052
+ @param {string}[options.behavior='instant']
17053
+ When set to `'instant'`, this will immediately scroll to the new position.
16907
17054
 
16908
17055
  When set to `'smooth'`, this will scroll smoothly to the new position.
16909
17056
 
@@ -17009,7 +17156,7 @@ up.viewport = (function () {
17009
17156
  /*-
17010
17157
  [Reveals](/up.reveal) an element matching the given `#hash` anchor.
17011
17158
 
17012
- Other than the default behavior found in browsers, `up.revealHash` works with
17159
+ Other than the default behavior found in browsers, `up.revealHash()` works with
17013
17160
  [multiple viewports](/up-viewport) and honors [fixed elements](/up-fixed-top) obstructing the user's
17014
17161
  view of the viewport.
17015
17162
 
@@ -17593,13 +17740,13 @@ up.reveal = up.viewport.reveal;
17593
17740
 
17594
17741
 
17595
17742
  /***/ }),
17596
- /* 79 */
17743
+ /* 80 */
17597
17744
  /***/ (function() {
17598
17745
 
17599
17746
 
17600
17747
 
17601
17748
  /***/ }),
17602
- /* 80 */
17749
+ /* 81 */
17603
17750
  /***/ (function() {
17604
17751
 
17605
17752
  var __assign = (this && this.__assign) || function () {
@@ -18353,10 +18500,10 @@ up.animate = up.motion.animate;
18353
18500
 
18354
18501
 
18355
18502
  /***/ }),
18356
- /* 81 */
18503
+ /* 82 */
18357
18504
  /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
18358
18505
 
18359
- __webpack_require__(82);
18506
+ __webpack_require__(83);
18360
18507
  var u = up.util;
18361
18508
  /*-
18362
18509
  Network requests
@@ -19249,13 +19396,13 @@ up.cache = up.network.cache;
19249
19396
 
19250
19397
 
19251
19398
  /***/ }),
19252
- /* 82 */
19399
+ /* 83 */
19253
19400
  /***/ (function() {
19254
19401
 
19255
19402
 
19256
19403
 
19257
19404
  /***/ }),
19258
- /* 83 */
19405
+ /* 84 */
19259
19406
  /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
19260
19407
 
19261
19408
  var __assign = (this && this.__assign) || function () {
@@ -19314,7 +19461,7 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
19314
19461
  }
19315
19462
  return to.concat(ar || Array.prototype.slice.call(from));
19316
19463
  };
19317
- __webpack_require__(84);
19464
+ __webpack_require__(85);
19318
19465
  var u = up.util;
19319
19466
  var e = up.element;
19320
19467
  /*-
@@ -19456,6 +19603,11 @@ up.layer = (function () {
19456
19603
  If set to `true`, the overlay will always render history.
19457
19604
  If set to `false`, the overlay will never render history.
19458
19605
 
19606
+ @param {string} [config.overlay.class]
19607
+ An HTML class for the overlay's container element.
19608
+
19609
+ See [overlay classes](/customizing-overlays#overlay-classes).
19610
+
19459
19611
  @param {object} config.modal
19460
19612
  Defaults for [modal overlays](/layer-terminology).
19461
19613
 
@@ -20323,6 +20475,8 @@ up.layer = (function () {
20323
20475
  @event up:layer:accept
20324
20476
  @param {up.Layer} event.layer
20325
20477
  The layer that is about to close.
20478
+ @param {Element} [event.value]
20479
+ The overlay's [acceptance value](/closing-overlays#overlay-result-values).
20326
20480
  @param {Element} [event.origin]
20327
20481
  The element that is causing the layer to close.
20328
20482
  @param event.preventDefault()
@@ -20339,6 +20493,8 @@ up.layer = (function () {
20339
20493
  @event up:layer:accepted
20340
20494
  @param {up.Layer} event.layer
20341
20495
  The layer that was closed.
20496
+ @param {Element} [event.value]
20497
+ The overlay's [acceptance value](/closing-overlays#overlay-result-values).
20342
20498
  @param {Element} [event.origin]
20343
20499
  The element that has caused the layer to close.
20344
20500
  @stable
@@ -20362,6 +20518,8 @@ up.layer = (function () {
20362
20518
  @event up:layer:dismiss
20363
20519
  @param {up.Layer} event.layer
20364
20520
  The layer that is about to close.
20521
+ @param {Element} [event.value]
20522
+ The overlay's [dismissal value](/closing-overlays#overlay-result-values).
20365
20523
  @param {Element} [event.origin]
20366
20524
  The element that is causing the layer to close.
20367
20525
  @param event.preventDefault()
@@ -20378,6 +20536,8 @@ up.layer = (function () {
20378
20536
  @event up:layer:dismissed
20379
20537
  @param {up.Layer} event.layer
20380
20538
  The layer that was closed.
20539
+ @param {Element} [event.value]
20540
+ The overlay's [dismissal value](/closing-overlays#overlay-result-values).
20381
20541
  @param {Element} [event.origin]
20382
20542
  The element that has caused the layer to close.
20383
20543
  @stable
@@ -20583,13 +20743,13 @@ up.layer = (function () {
20583
20743
 
20584
20744
 
20585
20745
  /***/ }),
20586
- /* 84 */
20746
+ /* 85 */
20587
20747
  /***/ (function() {
20588
20748
 
20589
20749
 
20590
20750
 
20591
20751
  /***/ }),
20592
- /* 85 */
20752
+ /* 86 */
20593
20753
  /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
20594
20754
 
20595
20755
  var __assign = (this && this.__assign) || function () {
@@ -20612,7 +20772,7 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
20612
20772
  }
20613
20773
  return to.concat(ar || Array.prototype.slice.call(from));
20614
20774
  };
20615
- __webpack_require__(86);
20775
+ __webpack_require__(87);
20616
20776
  /*-
20617
20777
  Linking to fragments
20618
20778
  ====================
@@ -21591,12 +21751,6 @@ up.link = (function () {
21591
21751
  A JSON object that will be merged into the [context](/context)
21592
21752
  of the current layer once the fragment is rendered.
21593
21753
 
21594
- @param [up-keep='true']
21595
- Whether [`[up-keep]`](/up-keep) elements will be preserved in the updated fragment.
21596
-
21597
- @param [up-hungry='true']
21598
- Whether [`[up-hungry]`](/up-hungry) elements outside the updated fragment will also be updated.
21599
-
21600
21754
  @param [up-scroll='auto']
21601
21755
  How to scroll after the new fragment was rendered.
21602
21756
 
@@ -21771,13 +21925,13 @@ up.follow = up.link.follow;
21771
21925
 
21772
21926
 
21773
21927
  /***/ }),
21774
- /* 86 */
21928
+ /* 87 */
21775
21929
  /***/ (function() {
21776
21930
 
21777
21931
 
21778
21932
 
21779
21933
  /***/ }),
21780
- /* 87 */
21934
+ /* 88 */
21781
21935
  /***/ (function() {
21782
21936
 
21783
21937
  var __assign = (this && this.__assign) || function () {
@@ -21827,7 +21981,7 @@ up.form = (function () {
21827
21981
  up.form.config.submitSelectors.push('form')
21828
21982
  ```
21829
21983
 
21830
- Individual forms may opt out with an `[up-submit=follow]` attribute.
21984
+ Individual forms may opt out with an `[up-submit=false]` attribute.
21831
21985
  You may configure additional exceptions in `config.noSubmitSelectors`.
21832
21986
 
21833
21987
  @param {Array<string>} [config.noSubmitSelectors]
@@ -23090,7 +23244,7 @@ up.validate = up.form.validate;
23090
23244
 
23091
23245
 
23092
23246
  /***/ }),
23093
- /* 88 */
23247
+ /* 89 */
23094
23248
  /***/ (function() {
23095
23249
 
23096
23250
  /*-
@@ -23527,7 +23681,7 @@ up.feedback = (function () {
23527
23681
 
23528
23682
 
23529
23683
  /***/ }),
23530
- /* 89 */
23684
+ /* 90 */
23531
23685
  /***/ (function() {
23532
23686
 
23533
23687
  /*-
@@ -23543,7 +23697,6 @@ This package contains functionality to passively receive updates from the server
23543
23697
  */
23544
23698
  up.radio = (function () {
23545
23699
  var u = up.util;
23546
- var e = up.element;
23547
23700
  /*-
23548
23701
  Configures defaults for passive updates.
23549
23702
 
@@ -23561,7 +23714,7 @@ up.radio = (function () {
23561
23714
  @param {boolean|string|Function(Element)} [config.pollEnabled=true]
23562
23715
  Whether Unpoly will follow instructions to poll fragments, like the `[up-poll]` attribute.
23563
23716
 
23564
- When set to `'auto'` Unpoly will poll if one of the following applies:
23717
+ When set to `'auto'` Unpoly will skip polling updates while one of the following applies:
23565
23718
 
23566
23719
  - The browser tab is in the foreground
23567
23720
  - The fragment's layer is the [frontmost layer](/up.layer.front).
@@ -23573,6 +23726,9 @@ up.radio = (function () {
23573
23726
 
23574
23727
  You may also pass a function that accepts the polling fragment and returns `true`, `false` or `'auto'`.
23575
23728
 
23729
+ When an update is skipped due to polling being disabled,
23730
+ Unpoly will try to poll again after the configured interval.
23731
+
23576
23732
  @stable
23577
23733
  */
23578
23734
  var config = new up.Config(function () { return ({
@@ -23606,65 +23762,33 @@ up.radio = (function () {
23606
23762
  /*-
23607
23763
  Starts [polling](/up-poll) the given element.
23608
23764
 
23765
+ The given element does not need an `[up-poll]` attribute.
23766
+
23609
23767
  @function up.radio.startPolling
23610
- @param {Element|jQuery|string} fragment
23768
+ @param {Element} fragment
23611
23769
  The fragment to reload periodically.
23612
23770
  @param {number} options.interval
23613
23771
  The reload interval in milliseconds.
23614
23772
 
23615
23773
  Defaults to `up.radio.config.pollInterval`.
23774
+ @param {string} options.url
23775
+ Defaults to the element's closest `[up-source]` attribute.
23616
23776
  @stable
23617
23777
  */
23618
23778
  function startPolling(fragment, options) {
23619
- var _a, _b;
23620
23779
  if (options === void 0) { options = {}; }
23621
- var interval = (_b = ((_a = options.interval) !== null && _a !== void 0 ? _a : e.numberAttr(fragment, 'up-interval'))) !== null && _b !== void 0 ? _b : config.pollInterval;
23622
- var stopped = false;
23623
- var lastRequest = null;
23624
- options.onQueued = function (request) { return lastRequest = request; };
23625
- function doReload() {
23626
- // The setTimeout(doReload) callback might already be scheduled
23627
- // before the polling stopped.
23628
- if (stopped) {
23629
- return;
23630
- }
23631
- if (shouldPoll(fragment)) {
23632
- u.always(up.reload(fragment, options), doSchedule);
23633
- }
23634
- else {
23635
- up.puts('[up-poll]', 'Polling is disabled');
23636
- // Reconsider after 10 seconds at most
23637
- doSchedule(Math.min(10 * 1000, interval));
23638
- }
23639
- }
23640
- function doSchedule(delay) {
23641
- if (delay === void 0) { delay = interval; }
23642
- // The up.reload().then(doSchedule) callback might already be
23643
- // registered before the polling stopped.
23644
- if (stopped) {
23645
- return;
23646
- }
23647
- setTimeout(doReload, delay);
23648
- }
23649
- function destructor() {
23650
- stopped = true; // Don't execute already-scheduled callbacks
23651
- lastRequest === null || lastRequest === void 0 ? void 0 : lastRequest.abort(); // Abort any pending request
23652
- }
23653
- // up.radio.stopPolling() will emit up:poll:stop to signal cancelation.
23654
- up.on(fragment, 'up:poll:stop', destructor);
23655
- doSchedule();
23656
- return destructor;
23780
+ up.FragmentPolling.forFragment(fragment).forceStart(options);
23657
23781
  }
23658
23782
  /*-
23659
23783
  Stops [polling](/up-poll) the given element.
23660
23784
 
23661
23785
  @function up.radio.stopPolling
23662
- @param {Element|jQuery|string} fragment
23786
+ @param {Element} fragment
23663
23787
  The fragment to stop reloading.
23664
23788
  @stable
23665
23789
  */
23666
23790
  function stopPolling(element) {
23667
- up.emit(element, 'up:poll:stop');
23791
+ up.FragmentPolling.forFragment(element).forceStop();
23668
23792
  }
23669
23793
  function shouldPoll(fragment) {
23670
23794
  var _a, _b;
@@ -23716,7 +23840,17 @@ up.radio = (function () {
23716
23840
  </div>
23717
23841
  ```
23718
23842
 
23719
- ### Skipping updates when nothing changed
23843
+ ### Skipping updates on the client
23844
+
23845
+ Client-side code may skip an update by preventing an `up:fragment:poll` event
23846
+ on the polling fragment.
23847
+
23848
+ Unpoly will also choose to skip updates under certain conditions,
23849
+ e.g. when the browser tab is in the background. See `up.radio.config.pollEnabled` for details.
23850
+
23851
+ When an update is skipped, Unpoly will try to poll again after the configured interval.
23852
+
23853
+ ### Skipping updates on the server
23720
23854
 
23721
23855
  When polling a fragment periodically we want to avoid rendering unchanged content.
23722
23856
  This saves <b>CPU time</b> and reduces the <b>bandwidth cost</b> for a
@@ -23725,26 +23859,57 @@ up.radio = (function () {
23725
23859
  To achieve this we timestamp your fragments with an `[up-time]` attribute to indicate
23726
23860
  when the underlying data was last changed. See `[up-time]` for a detailed example.
23727
23861
 
23862
+ If the server has no more recent changes, it may skip the update by responding
23863
+ with an HTTP status `304 Not Modified`.
23864
+
23865
+ When an update is skipped, Unpoly will try to poll again after the configured interval.
23866
+
23867
+ ### Stopping polling
23868
+
23869
+ - The fragment from the server response no longer has an `[up-poll]` attribute.
23870
+ - Client-side code has called `up.radio.stopPolling()` with the polling element.
23871
+ - Polling was [disabled globally](/up.radio.config#config.pollEnabled).
23872
+
23728
23873
  @selector [up-poll]
23729
23874
  @param [up-interval]
23730
23875
  The reload interval in milliseconds.
23731
23876
 
23732
23877
  Defaults to `up.radio.config.pollInterval`.
23878
+ @param [up-source]
23879
+ The URL from which to reload the fragment.
23880
+
23881
+ Defaults to the closest `[up-source]` attribute of an ancestor element.
23733
23882
  @stable
23734
23883
  */
23735
- up.compiler('[up-poll]', startPolling);
23884
+ up.compiler('[up-poll]', function (fragment) {
23885
+ up.FragmentPolling.forFragment(fragment).onPollAttributeObserved();
23886
+ });
23887
+ /*-
23888
+ This event is emitted before a [polling](/up-poll) fragment is reloaded from the server.
23889
+
23890
+ Listener may prevent the `up:fragment:poll` event to prevent the fragment from being reloaded.
23891
+ Preventing the event will only skip a single update. It will *not* stop future polling.
23892
+
23893
+ @event up:fragment:poll
23894
+ @param {Element} event.target
23895
+ The polling fragment.
23896
+ @param event.preventDefault()
23897
+ Event listeners may call this method to prevent the fragment from being reloaded.
23898
+ @experimental
23899
+ */
23736
23900
  up.on('up:framework:reset', reset);
23737
23901
  return {
23738
23902
  config: config,
23739
23903
  hungrySelector: hungrySelector,
23740
23904
  startPolling: startPolling,
23741
- stopPolling: stopPolling
23905
+ stopPolling: stopPolling,
23906
+ shouldPoll: shouldPoll,
23742
23907
  };
23743
23908
  })();
23744
23909
 
23745
23910
 
23746
23911
  /***/ }),
23747
- /* 90 */
23912
+ /* 91 */
23748
23913
  /***/ (function() {
23749
23914
 
23750
23915
  /*
@@ -23884,15 +24049,16 @@ __webpack_require__(73);
23884
24049
  __webpack_require__(74);
23885
24050
  __webpack_require__(75);
23886
24051
  __webpack_require__(76);
23887
- __webpack_require__(78);
23888
- __webpack_require__(80);
24052
+ __webpack_require__(77);
24053
+ __webpack_require__(79);
23889
24054
  __webpack_require__(81);
23890
- __webpack_require__(83);
23891
- __webpack_require__(85);
23892
- __webpack_require__(87);
24055
+ __webpack_require__(82);
24056
+ __webpack_require__(84);
24057
+ __webpack_require__(86);
23893
24058
  __webpack_require__(88);
23894
24059
  __webpack_require__(89);
23895
24060
  __webpack_require__(90);
24061
+ __webpack_require__(91);
23896
24062
  up.framework.onEvaled();
23897
24063
 
23898
24064
  }();