unpoly-rails 3.10.0.rc1 → 3.10.2

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.10.0-rc1'
8
+ version: '3.10.2'
9
9
  };
10
10
 
11
11
 
@@ -637,8 +637,8 @@ up.util = (function () {
637
637
  });
638
638
  }
639
639
  }
640
- function delegatePromise(object, promiseProp) {
641
- return defineDelegates(object, ['then', 'catch', 'finally'], function () { return this[promiseProp]; });
640
+ function delegatePromise(object, targetProvider) {
641
+ return defineDelegates(object, ['then', 'catch', 'finally'], targetProvider);
642
642
  }
643
643
  function stringifyArg(arg, placeholder = '%o') {
644
644
  let string;
@@ -2212,18 +2212,16 @@ up.RenderJob = (_a = class RenderJob {
2212
2212
  }
2213
2213
  }
2214
2214
  _getChange() {
2215
- if (this.options.url) {
2216
- let onRequestProcessed = (request) => this._handleAbortOption(request);
2217
- return new up.Change.FromURL({ ...this.options, onRequestProcessed });
2215
+ let handleAbort = u.memoize((request) => this._handleAbortOption(request));
2216
+ let renderOptions = { ...this.options, handleAbort };
2217
+ if (renderOptions.url) {
2218
+ return new up.Change.FromURL(renderOptions);
2219
+ }
2220
+ else if (renderOptions.response) {
2221
+ return new up.Change.FromResponse(renderOptions);
2218
2222
  }
2219
2223
  else {
2220
- let onRender = () => this._handleAbortOption(null);
2221
- if (this.options.response) {
2222
- return new up.Change.FromResponse({ ...this.options, onRender });
2223
- }
2224
- else {
2225
- return new up.Change.FromContent({ ...this.options, onRender });
2226
- }
2224
+ return new up.Change.FromContent(renderOptions);
2227
2225
  }
2228
2226
  }
2229
2227
  _emitGuardEvent() {
@@ -2264,7 +2262,7 @@ up.RenderJob = (_a = class RenderJob {
2264
2262
  }
2265
2263
  },
2266
2264
  (() => {
2267
- u.delegatePromise(_a.prototype, '_rendered');
2265
+ u.delegatePromise(_a.prototype, function () { return this._rendered; });
2268
2266
  u.memoizeMethod(_a.prototype, {
2269
2267
  _awaitFinished: true,
2270
2268
  _getChange: true,
@@ -2855,9 +2853,8 @@ up.Change.CloseLayer = class CloseLayer extends up.Change {
2855
2853
  this._history = options.history ?? true;
2856
2854
  }
2857
2855
  execute() {
2858
- if (!this._layer.isOpen()) {
2859
- return Promise.resolve();
2860
- }
2856
+ if (!this._layer.isOpen())
2857
+ return;
2861
2858
  up.browser.assertConfirmed(this.options);
2862
2859
  if (this._emitCloseEvent().defaultPrevented && this._preventable) {
2863
2860
  throw new up.Aborted('Close event was prevented');
@@ -2906,10 +2903,13 @@ up.Change.CloseLayer = class CloseLayer extends up.Change {
2906
2903
  });
2907
2904
  }
2908
2905
  _handleFocus(formerParent) {
2906
+ let hadFocus = this._layer.hasFocus();
2909
2907
  this._layer.overlayFocus.teardown();
2910
2908
  formerParent.overlayFocus?.moveToFront();
2911
- let newFocusElement = this._layer.origin || formerParent.element;
2912
- up.focus(newFocusElement, { preventScroll: true });
2909
+ if (hadFocus) {
2910
+ let newFocusElement = this._layer.origin || formerParent.element;
2911
+ up.focus(newFocusElement, { preventScroll: true });
2912
+ }
2913
2913
  }
2914
2914
  };
2915
2915
 
@@ -2928,16 +2928,13 @@ up.Change.FromURL = (_a = class FromURL extends up.Change {
2928
2928
  up.network.loadPage(this.options);
2929
2929
  return u.unresolvablePromise();
2930
2930
  }
2931
- this.request = up.request(this._getRequestAttrs());
2932
- if (this.options.preload) {
2933
- return this.request;
2934
- }
2935
- this._onRequestProcessed();
2936
- return await u.always(this.request, responseOrError => this._onRequestSettled(responseOrError));
2937
- }
2938
- _onRequestProcessed() {
2939
- this.options.onRequestProcessed?.(this.request);
2940
- this.request.runPreviews(this.options);
2931
+ let request = this.request = up.request(this._getRequestAttrs());
2932
+ this.options.onRequestKnown?.(request);
2933
+ if (this.options.preload)
2934
+ return request;
2935
+ this.options.handleAbort?.(request);
2936
+ request.runPreviews(this.options);
2937
+ return await u.always(request, responseOrError => this._onRequestSettled(responseOrError));
2941
2938
  }
2942
2939
  _newPageReason() {
2943
2940
  if (u.isCrossOrigin(this.options.url)) {
@@ -2954,7 +2951,6 @@ up.Change.FromURL = (_a = class FromURL extends up.Change {
2954
2951
  ...this.options,
2955
2952
  ...successAttrs,
2956
2953
  ...u.withRenamedKeys(failAttrs, up.fragment.failKey),
2957
- onProcessed: this._onRequestProcessed.bind(this),
2958
2954
  };
2959
2955
  }
2960
2956
  getPreflightProps() {
@@ -3203,7 +3199,7 @@ up.Change.FromContent = (_a = class FromContent extends up.Change {
3203
3199
  if (assets) {
3204
3200
  up.script.assertAssetsOK(assets, plan.options);
3205
3201
  }
3206
- this.options.onRender?.();
3202
+ this.options.handleAbort?.(null);
3207
3203
  }
3208
3204
  _getResponseDoc() {
3209
3205
  if (this._preflight)
@@ -4105,15 +4101,21 @@ up.FormValidator = class FormValidator {
4105
4101
  /***/ (() => {
4106
4102
 
4107
4103
  up.FocusCapsule = class FocusCapsule {
4108
- constructor(element, target, cursorProps) {
4104
+ constructor(element, target) {
4109
4105
  this._element = element;
4110
4106
  this._target = target;
4111
- this._cursorProps = cursorProps;
4107
+ this._cursorProps = up.viewport.copyCursorProps(this._element);
4112
4108
  }
4113
4109
  wasLost() {
4114
- return document.activeElement !== this._element;
4110
+ return document.activeElement !== this._element && !this._voided;
4111
+ }
4112
+ autoVoid() {
4113
+ up.on('focusin', { once: true }, () => this._voided = true);
4115
4114
  }
4116
4115
  restore(layer, focusOptions) {
4116
+ if (!this.wasLost()) {
4117
+ return false;
4118
+ }
4117
4119
  let rediscoveredElement = up.fragment.get(this._target, { layer });
4118
4120
  if (rediscoveredElement) {
4119
4121
  up.viewport.copyCursorProps(this._cursorProps, rediscoveredElement);
@@ -4128,8 +4130,7 @@ up.FocusCapsule = class FocusCapsule {
4128
4130
  let target = up.fragment.tryToTarget(focusedElement);
4129
4131
  if (!target)
4130
4132
  return;
4131
- const cursorProps = up.viewport.copyCursorProps(focusedElement);
4132
- return new this(focusedElement, target, cursorProps);
4133
+ return new this(focusedElement, target);
4133
4134
  }
4134
4135
  };
4135
4136
 
@@ -4302,9 +4303,7 @@ up.FragmentFocus = class FragmentFocus extends up.FragmentProcessor {
4302
4303
  return this._focusElement(match);
4303
4304
  }
4304
4305
  _restoreLostFocus() {
4305
- if (this._wasFocusLost()) {
4306
- return this.focusCapsule?.restore(this.layer, PREVENT_SCROLL_OPTIONS);
4307
- }
4306
+ return this.focusCapsule?.restore(this.layer, PREVENT_SCROLL_OPTIONS);
4308
4307
  }
4309
4308
  _restorePreviousFocusForLocation() {
4310
4309
  return up.viewport.restoreFocus({ layer: this.layer });
@@ -5534,12 +5533,13 @@ up.LinkFollowIntent = class LinkFollowIntent {
5534
5533
  constructor(link, callback) {
5535
5534
  this._link = link;
5536
5535
  this._callback = callback;
5536
+ this._lastRequest = null;
5537
5537
  this._on('mouseenter mousedown touchstart', (event) => this._scheduleCallback(event));
5538
5538
  this._on('mouseleave', () => this._unscheduleCallback());
5539
5539
  up.fragment.onAborted(this._link, () => this._unscheduleCallback());
5540
5540
  }
5541
- _on(eventType, callback) {
5542
- up.on(this._link, eventType, { passive: true }, callback);
5541
+ _on(eventType, fn) {
5542
+ up.on(this._link, eventType, { passive: true }, fn);
5543
5543
  }
5544
5544
  _scheduleCallback(event) {
5545
5545
  if (!up.link.shouldFollowEvent(event, this._link))
@@ -5556,14 +5556,16 @@ up.LinkFollowIntent = class LinkFollowIntent {
5556
5556
  }
5557
5557
  _unscheduleCallback() {
5558
5558
  clearTimeout(this._timer);
5559
- up.network.abort((request) => (request.origin === this._link) && request.background);
5559
+ if (this._lastRequest?.background)
5560
+ this._lastRequest.abort();
5561
+ this._lastRequest = null;
5560
5562
  }
5561
5563
  _parseDelay() {
5562
5564
  return e.numberAttr(this._link, 'up-preload-delay') ?? up.link.config.preloadDelay;
5563
5565
  }
5564
5566
  _runCallback(event) {
5565
5567
  up.log.putsEvent(event);
5566
- up.error.muteUncriticalRejection(this._callback());
5568
+ this._callback({ onRequestKnown: (request) => this._lastRequest = request });
5567
5569
  }
5568
5570
  };
5569
5571
 
@@ -5680,17 +5682,15 @@ up.NonceableCallback = class NonceableCallback {
5680
5682
  return new this(match[3], match[2]);
5681
5683
  }
5682
5684
  toFunction(...argNames) {
5683
- let scriptExpression = this.script;
5684
- if (!/\b(;|return|throw)\b/.test(scriptExpression))
5685
- scriptExpression = `return ${scriptExpression}`;
5685
+ let script = this.script;
5686
5686
  if (this.nonce) {
5687
5687
  let callbackThis = this;
5688
5688
  return function (...args) {
5689
- return callbackThis._runAsNoncedFunction(scriptExpression, this, argNames, args);
5689
+ return callbackThis._runAsNoncedFunction(script, this, argNames, args);
5690
5690
  };
5691
5691
  }
5692
5692
  else {
5693
- return new Function(...argNames, scriptExpression);
5693
+ return new Function(...argNames, script);
5694
5694
  }
5695
5695
  }
5696
5696
  toString() {
@@ -6811,7 +6811,7 @@ up.Request = (_a = class Request extends up.Record {
6811
6811
  }
6812
6812
  },
6813
6813
  (() => {
6814
- u.delegatePromise(_a.prototype, '_deferred');
6814
+ u.delegatePromise(_a.prototype, function () { return this._deferred; });
6815
6815
  })(),
6816
6816
  _a);
6817
6817
 
@@ -6959,14 +6959,14 @@ up.Request.Cache = class Cache {
6959
6959
  _isUsable(request) {
6960
6960
  return request.age < up.network.config.cacheEvictAge;
6961
6961
  }
6962
- get _size() {
6962
+ get currentSize() {
6963
6963
  return this._requests.length;
6964
6964
  }
6965
6965
  get _capacity() {
6966
6966
  return up.network.config.cacheSize;
6967
6967
  }
6968
6968
  _limitSize() {
6969
- for (let i = 0; i < (this._size - this._capacity); i++) {
6969
+ for (let i = 0; i < (this.currentSize - this._capacity); i++) {
6970
6970
  this._delete(this._requests[0]);
6971
6971
  }
6972
6972
  }
@@ -8059,7 +8059,10 @@ up.protocol = (function () {
8059
8059
  return u.normalizeMethod(up.browser.popCookie('_up_method'));
8060
8060
  });
8061
8061
  function locationFromXHR(xhr) {
8062
- return extractHeader(xhr, 'location') || xhr.responseURL;
8062
+ let location = extractHeader(xhr, 'location') || xhr.responseURL;
8063
+ if (location) {
8064
+ return u.normalizeURL(location);
8065
+ }
8063
8066
  }
8064
8067
  const config = new up.Config(() => ({
8065
8068
  methodParam: '_method',
@@ -8234,7 +8237,6 @@ up.script = (function () {
8234
8237
  'up-on-finished',
8235
8238
  'up-on-error',
8236
8239
  'up-on-offline',
8237
- 'up-placeholder',
8238
8240
  ],
8239
8241
  scriptSelectors: [
8240
8242
  'script:not([type])',
@@ -9004,7 +9006,7 @@ up.fragment = (function () {
9004
9006
  continue;
9005
9007
  let placement = defaultPlacement;
9006
9008
  let maybe = defaultMaybe;
9007
- selector = selector.replace(/\b::?(before|after)\b/, (_match, customPlacement) => {
9009
+ selector = selector.replace(/\b::?(before|after|content)\b/, (_match, customPlacement) => {
9008
9010
  placement = customPlacement;
9009
9011
  return '';
9010
9012
  });
@@ -9468,7 +9470,7 @@ up.viewport = (function () {
9468
9470
  function firstHashTarget(hash, options = {}) {
9469
9471
  if (hash = pureHash(hash)) {
9470
9472
  const selector = [
9471
- e.attrSelector('id', hash),
9473
+ e.idSelector(hash),
9472
9474
  'a' + e.attrSelector('name', hash)
9473
9475
  ].join();
9474
9476
  return f.get(selector, options);
@@ -10488,7 +10490,7 @@ up.link = (function () {
10488
10490
  return follow(link, forcedOptions, { defaults });
10489
10491
  }
10490
10492
  up.attribute('up-defer', { defaultValue: 'insert' }, function (link, condition) {
10491
- let doLoad = () => up.error.muteUncriticalRejection(loadDeferred(link));
10493
+ let doLoad = (options) => up.error.muteUncriticalRejection(loadDeferred(link, options));
10492
10494
  onLoadCondition(condition, link, doLoad);
10493
10495
  });
10494
10496
  up.on('up:click', config.selectorFn('followSelectors'), function (event, link) {
@@ -10511,7 +10513,7 @@ up.link = (function () {
10511
10513
  });
10512
10514
  up.compiler(config.selectorFn('preloadSelectors'), function (link) {
10513
10515
  if (!isPreloadDisabled(link)) {
10514
- let doPreload = () => up.error.muteUncriticalRejection(preload(link));
10516
+ let doPreload = (options) => up.error.muteUncriticalRejection(preload(link, options));
10515
10517
  let condition = e.booleanOrStringAttr(link, 'up-preload');
10516
10518
  if (condition === true || u.isUndefined(condition))
10517
10519
  condition = 'hover';
@@ -10650,16 +10652,10 @@ up.form = (function () {
10650
10652
  else {
10651
10653
  control.disabled = true;
10652
10654
  }
10653
- return () => {
10654
- control.disabled = false;
10655
- if (focusFallback && document.activeElement === focusFallback && control.isConnected) {
10656
- up.focus(control, { preventScroll: true });
10657
- }
10658
- };
10655
+ return () => { control.disabled = false; };
10659
10656
  }
10660
10657
  function getDisableContainers(disable, origin) {
10661
- let givenOrigin = () => origin || up.fail('Missing { origin }');
10662
- let originScope = () => getScope(givenOrigin());
10658
+ let originScope = () => getScope(origin);
10663
10659
  if (disable === true) {
10664
10660
  return [originScope()];
10665
10661
  }
@@ -10848,8 +10844,13 @@ up.form = (function () {
10848
10844
  const element = up.fragment.get(elementOrSelector, options);
10849
10845
  return element.form || element.closest('form');
10850
10846
  }
10851
- function getScope(element, options) {
10852
- return getForm(element, options) || up.layer.get(element).element;
10847
+ function getScope(origin, options) {
10848
+ if (origin) {
10849
+ return getForm(origin, options) || up.layer.get(origin).element;
10850
+ }
10851
+ else {
10852
+ return up.layer.current.element;
10853
+ }
10853
10854
  }
10854
10855
  function focusedField() {
10855
10856
  return u.presence(document.activeElement, isField);
@@ -10964,7 +10965,7 @@ up.status = (function () {
10964
10965
  let focusCapsule = up.FocusCapsule.preserve(bindLayer);
10965
10966
  let applyPreviews = () => doRunPreviews(request, renderOptions);
10966
10967
  let revertPreviews = bindLayer.asCurrent(applyPreviews);
10967
- up.on('focusin', { once: true }, () => focusCapsule = null);
10968
+ focusCapsule?.autoVoid();
10968
10969
  return () => {
10969
10970
  bindLayer.asCurrent(revertPreviews);
10970
10971
  focusCapsule?.restore(bindLayer, { preventScroll: true });