unpoly-rails 2.6.1 → 2.7.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

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.6.1'
11
+ version: '2.7.1'
12
12
  };
13
13
 
14
14
 
@@ -3641,8 +3641,6 @@ up.Cache = class Cache {
3641
3641
  @param {number|Function(): number} [config.expiry]
3642
3642
  The number of milliseconds after which a cache entry
3643
3643
  will be discarded.
3644
- @param {string} [config.logPrefix]
3645
- A prefix for log entries printed by this cache object.
3646
3644
  @param {Function(entry): string} [config.key]
3647
3645
  A function that takes an argument and returns a string key
3648
3646
  for storage. If omitted, `toString()` is called on the argument.
@@ -3679,12 +3677,6 @@ up.Cache = class Cache {
3679
3677
  clear() {
3680
3678
  this.store.clear();
3681
3679
  }
3682
- log(...args) {
3683
- if (this.config.logPrefix) {
3684
- args[0] = `[${this.config.logPrefix}] ${args[0]}`;
3685
- up.puts('up.Cache', ...args);
3686
- }
3687
- }
3688
3680
  keys() {
3689
3681
  return this.store.keys();
3690
3682
  }
@@ -3748,28 +3740,17 @@ up.Cache = class Cache {
3748
3740
  return true;
3749
3741
  }
3750
3742
  }
3751
- get(key, options = {}) {
3743
+ get(key) {
3752
3744
  const storeKey = this.normalizeStoreKey(key);
3753
3745
  let entry = this.store.get(storeKey);
3754
3746
  if (entry) {
3755
3747
  if (this.isFresh(entry)) {
3756
- if (!options.silent) {
3757
- this.log("Cache hit for '%s'", key);
3758
- }
3759
3748
  return entry.value;
3760
3749
  }
3761
3750
  else {
3762
- if (!options.silent) {
3763
- this.log("Discarding stale cache entry for '%s'", key);
3764
- }
3765
3751
  this.remove(key);
3766
3752
  }
3767
3753
  }
3768
- else {
3769
- if (!options.silent) {
3770
- this.log("Cache miss for '%s'", key);
3771
- }
3772
- }
3773
3754
  }
3774
3755
  };
3775
3756
 
@@ -4668,10 +4649,13 @@ up.Change.CloseLayer = class CloseLayer extends up.Change.Removal {
4668
4649
  }
4669
4650
  emitCloseEvent() {
4670
4651
  // The close event is emitted on the layer that is about to close.
4671
- return this.layer.emit(this.buildEvent(`up:layer:${this.verb}`), {
4652
+ let event = this.layer.emit(this.buildEvent(`up:layer:${this.verb}`), {
4672
4653
  callback: this.layer.callback(`on${u.upperCaseFirst(this.verb)}`),
4673
4654
  log: [`Will ${this.verb} ${this.layer} with value %o`, this.value]
4674
4655
  });
4656
+ // Allow an event listener to replace event.value with a new value.
4657
+ this.value = event.value;
4658
+ return event;
4675
4659
  }
4676
4660
  emitClosedEvent(formerParent) {
4677
4661
  const verbPast = `${this.verb}ed`;
@@ -6839,7 +6823,7 @@ up.Layer = class Layer extends up.Record {
6839
6823
  }
6840
6824
  }
6841
6825
  set location(location) {
6842
- const previousLocation = this.savedLocation;
6826
+ const previousLocation = this.location;
6843
6827
  location = up.history.normalizeURL(location);
6844
6828
  if (previousLocation !== location) {
6845
6829
  this.savedLocation = location;
@@ -9356,6 +9340,18 @@ up.Request = class Request extends up.Record {
9356
9340
  this.state = 'new';
9357
9341
  }
9358
9342
  }
9343
+ /*-
9344
+ Returns the underlying `XMLHttpRequest` instance.
9345
+
9346
+ @property up.Request#xhr
9347
+ @param {XMLHttpRequest} xhr
9348
+ @stable
9349
+ */
9350
+ get xhr() {
9351
+ // Initialize the xhr request on first access,
9352
+ // so listeners on up:request:send events have a chance to access the xhr.
9353
+ return this._xhr ?? (this._xhr = new XMLHttpRequest());
9354
+ }
9359
9355
  followState(sourceRequest) {
9360
9356
  u.delegate(this, ['deferred', 'state', 'preload'], () => sourceRequest);
9361
9357
  }
@@ -9432,7 +9428,7 @@ up.Request = class Request extends up.Record {
9432
9428
  }
9433
9429
  this.state = 'loading';
9434
9430
  // Convert from XHR's callback-based API to up.Request's promise-based API
9435
- this.xhr = new up.Request.XHRRenderer(this).buildAndSend({
9431
+ new up.Request.XHRRenderer(this).buildAndSend({
9436
9432
  onload: () => this.onXHRLoad(),
9437
9433
  onerror: () => this.onXHRError(),
9438
9434
  ontimeout: () => this.onXHRTimeout(),
@@ -9525,8 +9521,8 @@ up.Request = class Request extends up.Record {
9525
9521
  abort() {
9526
9522
  // setAbortedState() must be called before xhr.abort(), since xhr's event handlers
9527
9523
  // will call setAbortedState() a second time, without a message.
9528
- if (this.setAbortedState() && this.xhr) {
9529
- this.xhr.abort();
9524
+ if (this.setAbortedState() && this._xhr) {
9525
+ this._xhr.abort();
9530
9526
  }
9531
9527
  }
9532
9528
  setAbortedState(reason = ["Request to %s %s was aborted", this.method, this.url]) {
@@ -9912,40 +9908,39 @@ up.Request.XHRRenderer = class XHRRenderer {
9912
9908
  this.request = request;
9913
9909
  }
9914
9910
  buildAndSend(handlers) {
9915
- this.xhr = new XMLHttpRequest();
9911
+ const xhr = this.request.xhr;
9916
9912
  // We copy params since we will modify them below.
9917
9913
  // This would confuse API clients and cache key logic in up.network.
9918
9914
  this.params = u.copy(this.request.params);
9919
9915
  // IE11 explodes it we're setting an undefined timeout property
9920
9916
  if (this.request.timeout) {
9921
- this.xhr.timeout = this.request.timeout;
9917
+ xhr.timeout = this.request.timeout;
9922
9918
  }
9923
9919
  // The XMLHttpRequest method must be opened before we can add headers to it.
9924
- this.xhr.open(this.getMethod(), this.request.url);
9925
- // Add information about the response's intended use so the server may
9920
+ xhr.open(this.getMethod(), this.request.url);
9921
+ // Add information about the response's intended use, so the server may
9926
9922
  // customize or shorten its response.
9927
9923
  const metaProps = this.request.metaProps();
9928
9924
  for (let key in metaProps) {
9929
- this.addHeader(up.protocol.headerize(key), metaProps[key]);
9925
+ this.addHeader(xhr, up.protocol.headerize(key), metaProps[key]);
9930
9926
  }
9931
9927
  for (let header in this.request.headers) {
9932
- this.addHeader(header, this.request.headers[header]);
9928
+ this.addHeader(xhr, header, this.request.headers[header]);
9933
9929
  }
9934
9930
  let csrfHeader, csrfToken;
9935
9931
  if ((csrfHeader = this.request.csrfHeader()) && (csrfToken = this.request.csrfToken())) {
9936
- this.addHeader(csrfHeader, csrfToken);
9932
+ this.addHeader(xhr, csrfHeader, csrfToken);
9937
9933
  }
9938
- this.addHeader(up.protocol.headerize('version'), up.version);
9934
+ this.addHeader(xhr, up.protocol.headerize('version'), up.version);
9939
9935
  // The { contentType } will be missing in case of a FormData payload.
9940
9936
  // In this case the browser will choose a content-type with MIME boundary,
9941
9937
  // like: multipart/form-data; boundary=----WebKitFormBoundaryHkiKAbOweEFUtny8
9942
9938
  let contentType = this.getContentType();
9943
9939
  if (contentType) {
9944
- this.addHeader('Content-Type', contentType);
9940
+ this.addHeader(xhr, 'Content-Type', contentType);
9945
9941
  }
9946
- u.assign(this.xhr, handlers);
9947
- this.xhr.send(this.getPayload());
9948
- return this.xhr;
9942
+ u.assign(xhr, handlers);
9943
+ xhr.send(this.getPayload());
9949
9944
  }
9950
9945
  getMethod() {
9951
9946
  // By default HTTP methods other than `GET` or `POST` will be converted into a `POST`
@@ -9968,11 +9963,11 @@ up.Request.XHRRenderer = class XHRRenderer {
9968
9963
  this.finalizePayload();
9969
9964
  return this.payload;
9970
9965
  }
9971
- addHeader(header, value) {
9966
+ addHeader(xhr, header, value) {
9972
9967
  if (u.isOptions(value) || u.isArray(value)) {
9973
9968
  value = JSON.stringify(value);
9974
9969
  }
9975
- this.xhr.setRequestHeader(header, value);
9970
+ xhr.setRequestHeader(header, value);
9976
9971
  }
9977
9972
  finalizePayload() {
9978
9973
  if (this.payloadFinalized) {
@@ -10386,7 +10381,8 @@ up.RevealMotion = class RevealMotion {
10386
10381
  elementRect.height += 2 * this.padding;
10387
10382
  }
10388
10383
  selectObstructions(selectors) {
10389
- return up.fragment.all(selectors.join(','), { layer: this.obstructionsLayer });
10384
+ let elements = up.fragment.all(selectors.join(','), { layer: this.obstructionsLayer });
10385
+ return u.filter(elements, e.isVisible);
10390
10386
  }
10391
10387
  substractObstructions(viewportRect) {
10392
10388
  for (let obstruction of this.selectObstructions(this.topObstructions)) {
@@ -16464,8 +16460,9 @@ up.motion = (function () {
16464
16460
  This event is emitted on an animating element by `up.motion.finish()` to
16465
16461
  request the animation to instantly finish and skip to the last frame.
16466
16462
 
16467
- Promises returned by animation and transition functions are expected
16468
- to settle.
16463
+ Custom [animation](/up.animation) and [transition](/up.transition) functions are expected
16464
+ to instantly settle their promises when this event is observed on the
16465
+ animating element.
16469
16466
 
16470
16467
  Animations started by `up.animate()` already handle this event.
16471
16468
 
@@ -18789,7 +18786,7 @@ up.layer = (function () {
18789
18786
  @stable
18790
18787
  */
18791
18788
  /*-
18792
- This event is emitted before a layer is [accepted](/closing-overlays).
18789
+ This event is emitted *before* a layer is [accepted](/closing-overlays).
18793
18790
 
18794
18791
  The event is emitted on the [element of the layer](/up.layer.element) that is about to close.
18795
18792
 
@@ -18798,6 +18795,8 @@ up.layer = (function () {
18798
18795
  The layer that is about to close.
18799
18796
  @param {Element} [event.value]
18800
18797
  The overlay's [acceptance value](/closing-overlays#overlay-result-values).
18798
+
18799
+ Listeners may replace or mutate this value.
18801
18800
  @param {Element} [event.origin]
18802
18801
  The element that is causing the layer to close.
18803
18802
  @param event.preventDefault()
@@ -18805,7 +18804,7 @@ up.layer = (function () {
18805
18804
  @stable
18806
18805
  */
18807
18806
  /*-
18808
- This event is emitted after a layer was [accepted](/closing-overlays).
18807
+ This event is emitted *after* a layer was [accepted](/closing-overlays).
18809
18808
 
18810
18809
  The event is emitted on the [layer's](/up.layer.element) when the close animation
18811
18810
  is starting. If the layer has no close animaton and was already removed from the DOM,
@@ -18815,7 +18814,7 @@ up.layer = (function () {
18815
18814
  @param {up.Layer} event.layer
18816
18815
  The layer that was closed.
18817
18816
  @param {Element} [event.value]
18818
- The overlay's [acceptance value](/closing-overlays#overlay-result-values).
18817
+ The overlay's final [acceptance value](/closing-overlays#overlay-result-values).
18819
18818
  @param {Element} [event.origin]
18820
18819
  The element that has caused the layer to close.
18821
18820
  @stable
@@ -18832,7 +18831,7 @@ up.layer = (function () {
18832
18831
  @stable
18833
18832
  */
18834
18833
  /*-
18835
- This event is emitted before a layer is [dismissed](/closing-overlays).
18834
+ This event is emitted *before* a layer is [dismissed](/closing-overlays).
18836
18835
 
18837
18836
  The event is emitted on the [element of the layer](/up.layer.element) that is about to close.
18838
18837
 
@@ -18841,6 +18840,8 @@ up.layer = (function () {
18841
18840
  The layer that is about to close.
18842
18841
  @param {Element} [event.value]
18843
18842
  The overlay's [dismissal value](/closing-overlays#overlay-result-values).
18843
+
18844
+ Listeners may replace or mutate this value.
18844
18845
  @param {Element} [event.origin]
18845
18846
  The element that is causing the layer to close.
18846
18847
  @param event.preventDefault()
@@ -18848,7 +18849,7 @@ up.layer = (function () {
18848
18849
  @stable
18849
18850
  */
18850
18851
  /*-
18851
- This event is emitted after a layer was [dismissed](/closing-overlays).
18852
+ This event is emitted *after* a layer was [dismissed](/closing-overlays).
18852
18853
 
18853
18854
  The event is emitted on the [layer's](/up.layer.element) when the close animation
18854
18855
  is starting. If the layer has no close animaton and was already removed from the DOM,
@@ -18858,7 +18859,7 @@ up.layer = (function () {
18858
18859
  @param {up.Layer} event.layer
18859
18860
  The layer that was closed.
18860
18861
  @param {Element} [event.value]
18861
- The overlay's [dismissal value](/closing-overlays#overlay-result-values).
18862
+ The overlay's final [dismissal value](/closing-overlays#overlay-result-values).
18862
18863
  @param {Element} [event.origin]
18863
18864
  The element that has caused the layer to close.
18864
18865
  @stable
@@ -6,7 +6,7 @@ up-bounds{position:absolute}.up-focusable-content:focus,.up-focusable-content:fo
6
6
 
7
7
  .up-request-loader{display:none}up-progress-bar{position:fixed;top:0;left:0;z-index:999999999;height:3px;background-color:#007bff}
8
8
 
9
- up-focus-trap{position:fixed;top:0;left:0;width:0;height:0}up-modal,up-drawer,up-cover,up-modal-backdrop,up-drawer-backdrop,up-modal-viewport,up-drawer-viewport,up-cover-viewport{top:0;left:0;bottom:0;right:0}up-modal-box,up-drawer-box{box-shadow:0 0 10px 1px rgba(0,0,0,0.3)}up-popup{box-shadow:0 0 4px rgba(0,0,0,0.3)}up-modal:focus,up-drawer:focus,up-cover:focus,up-modal-box:focus,up-drawer-box:focus,up-cover-box:focus,up-popup:focus,up-modal:focus-visible,up-drawer:focus-visible,up-cover:focus-visible,up-modal-box:focus-visible,up-drawer-box:focus-visible,up-cover-box:focus-visible,up-popup:focus-visible{outline:none}up-modal,up-drawer,up-cover{z-index:2000;position:fixed}up-modal-backdrop,up-drawer-backdrop{position:absolute;background:rgba(0,0,0,0.4)}up-modal-viewport,up-drawer-viewport,up-cover-viewport{position:absolute;overflow-y:scroll;overflow-x:hidden;overscroll-behavior:contain;display:flex;align-items:flex-start;justify-content:center}up-modal-box,up-drawer-box,up-cover-box,up-popup{position:relative;box-sizing:border-box;max-width:100%;background-color:#fff;padding:20px;overflow-x:hidden}up-modal-content,up-drawer-content,up-cover-content,up-popup-content{display:block}up-popup{z-index:1000}up-modal-dismiss,up-drawer-dismiss,up-cover-dismiss,up-popup-dismiss{color:#888;position:absolute;top:10px;right:10px;font-size:1.7rem;line-height:0.5}up-modal[nesting="0"] up-modal-viewport{padding:25px 15px}up-modal[nesting="1"] up-modal-viewport{padding:50px 30px}up-modal[nesting="2"] up-modal-viewport{padding:75px 45px}up-modal[nesting="3"] up-modal-viewport{padding:100px 60px}up-modal[nesting="4"] up-modal-viewport{padding:125px 75px}up-modal[size=small] up-modal-box{width:350px}up-modal[size=medium] up-modal-box{width:650px}up-modal[size=large] up-modal-box{width:1000px}up-modal[size=grow] up-modal-box{width:auto}up-modal[size=full] up-modal-box{width:100%}up-drawer-viewport{justify-content:flex-start}up-drawer[position=right] up-drawer-viewport{justify-content:flex-end}up-drawer-box{min-height:100vh}up-drawer[size=small] up-drawer-box{width:150px}up-drawer[size=medium] up-drawer-box{width:340px}up-drawer[size=large] up-drawer-box{width:600px}up-drawer[size=grow] up-drawer-box{width:auto}up-drawer[size=full] up-drawer-box{width:100%}up-cover-box{width:100%;min-height:100vh;padding:0}up-popup{padding:15px}up-popup[size=small]{width:180px}up-popup[size=medium]{width:300px}up-popup[size=large]{width:550px}up-popup[size=grow] up-popup{width:auto}up-popup[size=full] up-popup{width:100%}
9
+ up-focus-trap{position:fixed;top:0;left:0;width:0;height:0}up-modal,up-drawer,up-cover,up-modal-backdrop,up-drawer-backdrop,up-modal-viewport,up-drawer-viewport,up-cover-viewport{top:0;left:0;bottom:0;right:0}up-modal-box,up-drawer-box{box-shadow:0 0 10px 1px rgba(0,0,0,0.3)}up-popup{box-shadow:0 0 4px rgba(0,0,0,0.3)}up-modal:focus,up-drawer:focus,up-cover:focus,up-modal-box:focus,up-drawer-box:focus,up-cover-box:focus,up-popup:focus,up-modal:focus-visible,up-drawer:focus-visible,up-cover:focus-visible,up-modal-box:focus-visible,up-drawer-box:focus-visible,up-cover-box:focus-visible,up-popup:focus-visible{outline:none}up-modal,up-drawer,up-cover{z-index:2000;position:fixed}up-modal-backdrop,up-drawer-backdrop{position:absolute;background:rgba(0,0,0,0.4)}up-modal-viewport,up-drawer-viewport,up-cover-viewport{position:absolute;overflow-y:scroll;overflow-x:hidden;overscroll-behavior:contain;display:flex;align-items:flex-start;justify-content:center}up-modal-box,up-drawer-box,up-cover-box,up-popup{position:relative;box-sizing:border-box;max-width:100%;background-color:#fff;padding:20px;overflow-x:hidden}up-modal-content,up-drawer-content,up-cover-content,up-popup-content{display:block}up-popup{z-index:1000}up-modal-dismiss,up-drawer-dismiss,up-cover-dismiss,up-popup-dismiss{color:#888;position:absolute;top:10px;right:10px;font-size:1.7rem;line-height:0.5}up-modal[nesting="0"] up-modal-viewport{padding:25px 15px}up-modal[nesting="1"] up-modal-viewport{padding:50px 30px}up-modal[nesting="2"] up-modal-viewport{padding:75px 45px}up-modal[nesting="3"] up-modal-viewport{padding:100px 60px}up-modal[nesting="4"] up-modal-viewport{padding:125px 75px}up-modal[size=small] up-modal-box{width:350px}up-modal[size=medium] up-modal-box{width:650px}up-modal[size=large] up-modal-box{width:1000px}up-modal[size=grow] up-modal-box{width:auto}up-modal[size=full] up-modal-box{width:100%}up-drawer-viewport{justify-content:flex-start}up-drawer[position=right] up-drawer-viewport{justify-content:flex-end}up-drawer-box{min-height:100vh}up-drawer[size=small] up-drawer-box{width:150px}up-drawer[size=medium] up-drawer-box{width:340px}up-drawer[size=large] up-drawer-box{width:600px}up-drawer[size=grow] up-drawer-box{width:auto}up-drawer[size=full] up-drawer-box{width:100%}up-cover-box{width:100%;min-height:100vh;padding:0}up-popup{padding:15px;text-align:left}up-popup[size=small]{width:180px}up-popup[size=medium]{width:300px}up-popup[size=large]{width:550px}up-popup[size=grow] up-popup{width:auto}up-popup[size=full] up-popup{width:100%}
10
10
 
11
11
  [up-href],[up-clickable]{cursor:pointer}
12
12