unpoly-rails 3.0.0.rc1 → 3.0.0.rc2

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-rc2'
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
 
@@ -869,12 +874,6 @@ up.browser = (function () {
869
874
  return value;
870
875
  }
871
876
  }
872
- const getJQuery = function () {
873
- if (!canJQuery()) {
874
- up.fail('jQuery must be published as window.jQuery');
875
- }
876
- return jQuery;
877
- };
878
877
  function assertConfirmed(options) {
879
878
  const confirmed = !options.confirm || window.confirm(options.confirm);
880
879
  if (!confirmed) {
@@ -889,7 +888,6 @@ up.browser = (function () {
889
888
  canEval,
890
889
  assertConfirmed,
891
890
  popCookie,
892
- get jQuery() { return getJQuery(); },
893
891
  };
894
892
  })();
895
893
 
@@ -1874,7 +1872,7 @@ up.Change.Addition = class Addition extends up.Change {
1874
1872
  setETag({ newElement, etag }) {
1875
1873
  e.setMissingAttr(newElement, 'up-etag', etag || false);
1876
1874
  }
1877
- setMeta(options) {
1875
+ setReloadAttrs(options) {
1878
1876
  this.setSource(options);
1879
1877
  this.setTime(options);
1880
1878
  this.setETag(options);
@@ -2082,9 +2080,9 @@ up.Change.OpenLayer = class OpenLayer extends up.Change.Addition {
2082
2080
  this.layer.createElements(this.content);
2083
2081
  this.layer.setupHandlers();
2084
2082
  this.handleHistory();
2085
- this.setMeta({ newElement: this.content, source: this.options.source });
2083
+ this.setReloadAttrs({ newElement: this.content, source: this.options.source });
2086
2084
  responseDoc.finalizeElement(this.content);
2087
- up.hello(this.layer.element, { layer: this.layer, origin: this.origin });
2085
+ up.hello(this.layer.element, { ...this.options, layer: this.layer });
2088
2086
  this.handleLayerChangeRequests();
2089
2087
  this.handleScroll();
2090
2088
  let renderResult = new up.RenderResult({
@@ -2244,7 +2242,7 @@ up.Change.UpdateLayer = (_a = class UpdateLayer extends up.Change.Addition {
2244
2242
  this.renderResult.fragments.unshift(...newFragments);
2245
2243
  }
2246
2244
  executeStep(step) {
2247
- this.setMeta(step);
2245
+ this.setReloadAttrs(step);
2248
2246
  switch (step.placement) {
2249
2247
  case 'swap': {
2250
2248
  let keepPlan = this.findKeepPlan(step);
@@ -2749,19 +2747,12 @@ up.Change.FromURL = (_a = class FromURL extends up.Change {
2749
2747
  }
2750
2748
  onRequestSettledWithResponse(response) {
2751
2749
  this.response = response;
2752
- const expiredResponse = this.options.expiredResponse;
2753
- const eventProps = {
2754
- response: this.response,
2755
- renderOptions: this.options,
2756
- revalidating: !!expiredResponse,
2757
- expiredResponse,
2758
- };
2759
- if (up.fragment.config.skipResponse(eventProps)) {
2750
+ if (up.fragment.config.skipResponse(this.loadedEventProps())) {
2760
2751
  this.skip();
2761
2752
  }
2762
2753
  else {
2763
2754
  this.request.assertEmitted('up:fragment:loaded', {
2764
- ...eventProps,
2755
+ ...this.loadedEventProps(),
2765
2756
  callback: this.options.onLoaded,
2766
2757
  log: ['Loaded fragment from %s', this.response.description],
2767
2758
  skip: () => this.skip()
@@ -2773,6 +2764,22 @@ up.Change.FromURL = (_a = class FromURL extends up.Change {
2773
2764
  }
2774
2765
  return this.updateContentFromResponse(this.options);
2775
2766
  }
2767
+ compilerPassMeta() {
2768
+ return u.pick(this.loadedEventProps(), [
2769
+ 'revalidating',
2770
+ 'response'
2771
+ ]);
2772
+ }
2773
+ loadedEventProps() {
2774
+ const { expiredResponse } = this.options;
2775
+ return {
2776
+ request: this.request,
2777
+ response: this.response,
2778
+ renderOptions: this.options,
2779
+ revalidating: !!expiredResponse,
2780
+ expiredResponse,
2781
+ };
2782
+ }
2776
2783
  onRequestSettledWithError(error) {
2777
2784
  if (error instanceof up.Offline) {
2778
2785
  this.request.emit('up:fragment:offline', {
@@ -2795,6 +2802,7 @@ up.Change.FromURL = (_a = class FromURL extends up.Change {
2795
2802
  up.puts('up.render()', 'Rendering failed response using fail-prefixed options (https://unpoly.com/failed-responses)');
2796
2803
  }
2797
2804
  this.augmentOptionsFromResponse(finalRenderOptions);
2805
+ finalRenderOptions.meta = this.compilerPassMeta();
2798
2806
  let result = new up.Change.FromContent(finalRenderOptions).execute();
2799
2807
  result.finished = this.finish(result, finalRenderOptions);
2800
2808
  return result;
@@ -2870,6 +2878,7 @@ up.Change.FromURL = (_a = class FromURL extends up.Change {
2870
2878
  (() => {
2871
2879
  u.memoizeMethod(_a.prototype, [
2872
2880
  'getRequestAttrs',
2881
+ 'loadedEventProps',
2873
2882
  ]);
2874
2883
  })(),
2875
2884
  _a);
@@ -2881,12 +2890,14 @@ up.Change.FromURL = (_a = class FromURL extends up.Change {
2881
2890
 
2882
2891
  const u = up.util;
2883
2892
  up.CompilerPass = class CompilerPass {
2884
- constructor(root, compilers, { layer, data, dataMap } = {}) {
2893
+ constructor(root, compilers, { layer, data, dataMap, meta }) {
2894
+ layer || (layer = up.layer.get(root) || up.layer.current);
2885
2895
  this.root = root;
2886
2896
  this.compilers = compilers;
2887
- this.layer = layer || up.layer.get(this.root) || up.layer.current;
2897
+ this.layer = layer;
2888
2898
  this.data = data;
2889
2899
  this.dataMap = dataMap;
2900
+ this.meta = { layer, ...meta };
2890
2901
  this.errors = [];
2891
2902
  }
2892
2903
  run() {
@@ -2931,11 +2942,10 @@ up.CompilerPass = class CompilerPass {
2931
2942
  return up.migrate.postCompile?.(matches, compiler);
2932
2943
  }
2933
2944
  compileOneElement(compiler, element) {
2934
- const elementArg = compiler.jQuery ? up.browser.jQuery(element) : element;
2935
- const compileArgs = [elementArg];
2945
+ const compileArgs = [element];
2936
2946
  if (compiler.length !== 1) {
2937
2947
  const data = up.syntax.data(element);
2938
- compileArgs.push(data);
2948
+ compileArgs.push(data, this.meta);
2939
2949
  }
2940
2950
  const result = this.applyCompilerFunction(compiler, element, compileArgs);
2941
2951
  let destructorOrDestructors = this.destructorPresence(result);
@@ -2944,11 +2954,10 @@ up.CompilerPass = class CompilerPass {
2944
2954
  }
2945
2955
  }
2946
2956
  compileBatch(compiler, elements) {
2947
- const elementsArgs = compiler.jQuery ? up.browser.jQuery(elements) : elements;
2948
- const compileArgs = [elementsArgs];
2957
+ const compileArgs = [elements];
2949
2958
  if (compiler.length !== 1) {
2950
2959
  const dataList = u.map(elements, up.syntax.data);
2951
- compileArgs.push(dataList);
2960
+ compileArgs.push(dataList, this.meta);
2952
2961
  }
2953
2962
  const result = this.applyCompilerFunction(compiler, elements, compileArgs);
2954
2963
  if (this.destructorPresence(result)) {
@@ -3250,7 +3259,6 @@ up.EventListener = class EventListener extends up.Record {
3250
3259
  'eventType',
3251
3260
  'selector',
3252
3261
  'callback',
3253
- 'jQuery',
3254
3262
  'guard',
3255
3263
  'baseLayer',
3256
3264
  'passive',
@@ -3297,8 +3305,7 @@ up.EventListener = class EventListener extends up.Record {
3297
3305
  return;
3298
3306
  }
3299
3307
  if (element) {
3300
- const elementArg = this.jQuery ? up.browser.jQuery(element) : element;
3301
- const args = [event, elementArg];
3308
+ const args = [event, element];
3302
3309
  const expectedArgCount = this.callback.length;
3303
3310
  if (expectedArgCount !== 1 && expectedArgCount !== 2) {
3304
3311
  const data = up.syntax.data(element);
@@ -3354,7 +3361,6 @@ up.EventListenerGroup = class EventListenerGroup extends up.Record {
3354
3361
  'eventTypes',
3355
3362
  'selector',
3356
3363
  'callback',
3357
- 'jQuery',
3358
3364
  'guard',
3359
3365
  'baseLayer',
3360
3366
  'passive',
@@ -4276,12 +4282,12 @@ up.Layer = class Layer extends up.Record {
4276
4282
  return this.stack.asCurrent(this, fn);
4277
4283
  }
4278
4284
  updateHistory(options) {
4279
- if (u.isString(options.title)) {
4280
- this.title = options.title;
4281
- }
4282
4285
  if (u.isString(options.location)) {
4283
4286
  this.location = options.location;
4284
4287
  }
4288
+ if (u.isString(options.title)) {
4289
+ this.title = options.title;
4290
+ }
4285
4291
  }
4286
4292
  isHistoryVisible() {
4287
4293
  return this.history && (this.isRoot() || this.parent.isHistoryVisible());
@@ -4314,12 +4320,14 @@ up.Layer = class Layer extends up.Record {
4314
4320
  set location(location) {
4315
4321
  const previousLocation = this.location;
4316
4322
  location = up.history.normalizeURL(location);
4317
- if (previousLocation !== location) {
4323
+ if (previousLocation !== location || this.opening) {
4318
4324
  this.savedLocation = location;
4319
- this.emit('up:layer:location:changed', { location, log: false });
4320
4325
  if (this.showsLiveHistory()) {
4321
4326
  up.history.push(location);
4322
4327
  }
4328
+ if (!this.opening) {
4329
+ this.emit('up:layer:location:changed', { location });
4330
+ }
4323
4331
  }
4324
4332
  }
4325
4333
  selector(part) {
@@ -5750,7 +5758,7 @@ up.RenderOptions = (function () {
5750
5758
  'history',
5751
5759
  'source',
5752
5760
  'saveScroll',
5753
- 'navigate'
5761
+ 'navigate',
5754
5762
  ]);
5755
5763
  const CONTENT_KEYS = [
5756
5764
  'url',
@@ -6483,23 +6491,23 @@ up.Response = class Response extends up.Record {
6483
6491
  get ok() {
6484
6492
  return !u.evalOption(this.fail ?? up.network.config.fail, this);
6485
6493
  }
6486
- getHeader(name) {
6494
+ header(name) {
6487
6495
  return this.headers[name] || this.xhr?.getResponseHeader(name);
6488
6496
  }
6489
6497
  get contentType() {
6490
- return this.getHeader('Content-Type');
6498
+ return this.header('Content-Type');
6491
6499
  }
6492
6500
  get cspNonces() {
6493
- return up.protocol.cspNoncesFromHeader(this.getHeader('Content-Security-Policy'));
6501
+ return up.protocol.cspNoncesFromHeader(this.header('Content-Security-Policy'));
6494
6502
  }
6495
6503
  get lastModified() {
6496
- let header = this.getHeader('Last-Modified');
6504
+ let header = this.header('Last-Modified');
6497
6505
  if (header) {
6498
6506
  return new Date(header);
6499
6507
  }
6500
6508
  }
6501
6509
  get etag() {
6502
- return this.getHeader('ETag');
6510
+ return this.header('ETag');
6503
6511
  }
6504
6512
  get json() {
6505
6513
  return this.parsedJSON || (this.parsedJSON = JSON.parse(this.text));
@@ -6509,7 +6517,8 @@ up.Response = class Response extends up.Record {
6509
6517
  return now - this.loadedAt;
6510
6518
  }
6511
6519
  get expired() {
6512
- return this.age > up.network.config.cacheExpireAge || this.request.expired;
6520
+ return this.age > up.network.config.cacheExpireAge ||
6521
+ this.request.expired;
6513
6522
  }
6514
6523
  get description() {
6515
6524
  return `HTTP ${this.status} response to ${this.request.description}`;
@@ -6957,6 +6966,7 @@ up.framework = (function () {
6957
6966
  readyState = 'booting';
6958
6967
  up.emit('up:framework:boot', { log: false });
6959
6968
  readyState = 'booted';
6969
+ up.emit('up:framework:booted', { log: false });
6960
6970
  }
6961
6971
  else {
6962
6972
  console.error("Unpoly cannot boot: %s", issue);
@@ -7038,9 +7048,6 @@ up.event = (function () {
7038
7048
  function on(...args) {
7039
7049
  return buildListenerGroup(args).bind();
7040
7050
  }
7041
- function $on(...args) {
7042
- return buildListenerGroup(args, { jQuery: true }).bind();
7043
- }
7044
7051
  function off(...args) {
7045
7052
  return buildListenerGroup(args).unbind();
7046
7053
  }
@@ -7111,7 +7118,6 @@ up.event = (function () {
7111
7118
  on('up:framework:reset', reset);
7112
7119
  return {
7113
7120
  on,
7114
- $on,
7115
7121
  off,
7116
7122
  build,
7117
7123
  emit,
@@ -7124,9 +7130,7 @@ up.event = (function () {
7124
7130
  };
7125
7131
  })();
7126
7132
  up.on = up.event.on;
7127
- up.$on = up.event.$on;
7128
7133
  up.off = up.event.off;
7129
- up.$off = up.event.off;
7130
7134
  up.emit = up.event.emit;
7131
7135
 
7132
7136
 
@@ -7377,9 +7381,6 @@ up.syntax = (function () {
7377
7381
  const compiler = buildCompiler(args);
7378
7382
  return insertCompiler(registeredCompilers, compiler);
7379
7383
  }
7380
- function registerJQueryCompiler(...args) {
7381
- registerCompiler(...args, { jQuery: true });
7382
- }
7383
7384
  function registerMacro(...args) {
7384
7385
  const macro = buildCompiler(args);
7385
7386
  if (up.framework.evaling) {
@@ -7388,9 +7389,6 @@ up.syntax = (function () {
7388
7389
  }
7389
7390
  return insertCompiler(registeredMacros, macro);
7390
7391
  }
7391
- function registerJQueryMacro(...args) {
7392
- registerMacro(...args, { jQuery: true });
7393
- }
7394
7392
  function detectSystemMacroPriority(macroSelector) {
7395
7393
  macroSelector = u.evalOption(macroSelector);
7396
7394
  for (let substr in SYSTEM_MACRO_PRIORITIES) {
@@ -7414,7 +7412,6 @@ up.syntax = (function () {
7414
7412
  isDefault: up.framework.evaling,
7415
7413
  priority: 0,
7416
7414
  batch: false,
7417
- jQuery: false
7418
7415
  });
7419
7416
  return Object.assign(callback, options);
7420
7417
  }
@@ -7456,10 +7453,10 @@ up.syntax = (function () {
7456
7453
  destructors.push(destructor);
7457
7454
  }
7458
7455
  }
7459
- function hello(element, { layer, data, dataMap } = {}) {
7460
- element = up.fragment.get(element);
7456
+ function hello(element, options = {}) {
7457
+ element = up.fragment.get(element, options);
7461
7458
  up.puts('up.hello()', "Compiling fragment %o", element);
7462
- compile(element, { layer, data, dataMap });
7459
+ compile(element, options);
7463
7460
  up.fragment.emitInserted(element);
7464
7461
  return element;
7465
7462
  }
@@ -7496,8 +7493,6 @@ up.syntax = (function () {
7496
7493
  return {
7497
7494
  compiler: registerCompiler,
7498
7495
  macro: registerMacro,
7499
- $compiler: registerJQueryCompiler,
7500
- $macro: registerJQueryMacro,
7501
7496
  destructor: registerDestructor,
7502
7497
  hello,
7503
7498
  clean,
@@ -7505,10 +7500,8 @@ up.syntax = (function () {
7505
7500
  };
7506
7501
  })();
7507
7502
  up.compiler = up.syntax.compiler;
7508
- up.$compiler = up.syntax.$compiler;
7509
7503
  up.destructor = up.syntax.destructor;
7510
7504
  up.macro = up.syntax.macro;
7511
- up.$macro = up.syntax.$macro;
7512
7505
  up.data = up.syntax.data;
7513
7506
  up.hello = up.syntax.hello;
7514
7507
 
@@ -9062,6 +9055,7 @@ up.layer = (function () {
9062
9055
  if (handleDeprecatedConfig) {
9063
9056
  configs.forEach(handleDeprecatedConfig);
9064
9057
  }
9058
+ options.openAnimation ?? (options.openAnimation = u.pluckKey(options, 'animation'));
9065
9059
  options = u.mergeDefined(...configs, { mode, stack }, options);
9066
9060
  if (beforeNew) {
9067
9061
  options = beforeNew(options);