vscroll 1.4.2 → 1.4.3

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.
Files changed (77) hide show
  1. package/dist/bundles/vscroll.esm5.js +187 -146
  2. package/dist/bundles/vscroll.esm5.js.map +1 -1
  3. package/dist/bundles/vscroll.esm5.min.js +2 -2
  4. package/dist/bundles/vscroll.esm5.min.js.map +1 -1
  5. package/dist/bundles/vscroll.esm6.js +173 -132
  6. package/dist/bundles/vscroll.esm6.js.map +1 -1
  7. package/dist/bundles/vscroll.esm6.min.js +2 -2
  8. package/dist/bundles/vscroll.esm6.min.js.map +1 -1
  9. package/dist/bundles/vscroll.umd.js +188 -147
  10. package/dist/bundles/vscroll.umd.js.map +1 -1
  11. package/dist/bundles/vscroll.umd.min.js +2 -2
  12. package/dist/bundles/vscroll.umd.min.js.map +1 -1
  13. package/dist/esm2015/classes/state/cycle.js +7 -6
  14. package/dist/esm2015/classes/state/cycle.js.map +1 -1
  15. package/dist/esm2015/classes/state/scroll.js +1 -1
  16. package/dist/esm2015/classes/state/scroll.js.map +1 -1
  17. package/dist/esm2015/classes/state.js +23 -15
  18. package/dist/esm2015/classes/state.js.map +1 -1
  19. package/dist/esm2015/classes/viewport.js +4 -1
  20. package/dist/esm2015/classes/viewport.js.map +1 -1
  21. package/dist/esm2015/interfaces/index.js.map +1 -1
  22. package/dist/esm2015/interfaces/state.js.map +1 -1
  23. package/dist/esm2015/processes/adapter/reload.js +1 -1
  24. package/dist/esm2015/processes/adapter/reload.js.map +1 -1
  25. package/dist/esm2015/processes/adjust.js +44 -16
  26. package/dist/esm2015/processes/adjust.js.map +1 -1
  27. package/dist/esm2015/processes/end.js +18 -16
  28. package/dist/esm2015/processes/end.js.map +1 -1
  29. package/dist/esm2015/processes/fetch.js +3 -3
  30. package/dist/esm2015/processes/fetch.js.map +1 -1
  31. package/dist/esm2015/processes/init.js +2 -2
  32. package/dist/esm2015/processes/init.js.map +1 -1
  33. package/dist/esm2015/processes/render.js +3 -3
  34. package/dist/esm2015/processes/render.js.map +1 -1
  35. package/dist/esm2015/processes/scroll.js +21 -21
  36. package/dist/esm2015/processes/scroll.js.map +1 -1
  37. package/dist/esm2015/version.js +1 -1
  38. package/dist/esm2015/version.js.map +1 -1
  39. package/dist/esm2015/workflow.js +1 -1
  40. package/dist/esm2015/workflow.js.map +1 -1
  41. package/dist/esm5/classes/state/cycle.js +7 -6
  42. package/dist/esm5/classes/state/cycle.js.map +1 -1
  43. package/dist/esm5/classes/state/scroll.js +7 -7
  44. package/dist/esm5/classes/state/scroll.js.map +1 -1
  45. package/dist/esm5/classes/state.js +23 -15
  46. package/dist/esm5/classes/state.js.map +1 -1
  47. package/dist/esm5/classes/viewport.js +4 -1
  48. package/dist/esm5/classes/viewport.js.map +1 -1
  49. package/dist/esm5/interfaces/index.js.map +1 -1
  50. package/dist/esm5/interfaces/state.js.map +1 -1
  51. package/dist/esm5/processes/adapter/reload.js +1 -1
  52. package/dist/esm5/processes/adapter/reload.js.map +1 -1
  53. package/dist/esm5/processes/adjust.js +44 -16
  54. package/dist/esm5/processes/adjust.js.map +1 -1
  55. package/dist/esm5/processes/end.js +18 -16
  56. package/dist/esm5/processes/end.js.map +1 -1
  57. package/dist/esm5/processes/fetch.js +3 -3
  58. package/dist/esm5/processes/fetch.js.map +1 -1
  59. package/dist/esm5/processes/init.js +2 -2
  60. package/dist/esm5/processes/init.js.map +1 -1
  61. package/dist/esm5/processes/render.js +3 -3
  62. package/dist/esm5/processes/render.js.map +1 -1
  63. package/dist/esm5/processes/scroll.js +21 -21
  64. package/dist/esm5/processes/scroll.js.map +1 -1
  65. package/dist/esm5/version.js +1 -1
  66. package/dist/esm5/version.js.map +1 -1
  67. package/dist/esm5/workflow.js +1 -1
  68. package/dist/esm5/workflow.js.map +1 -1
  69. package/dist/typings/classes/state/cycle.d.ts +1 -1
  70. package/dist/typings/classes/state/scroll.d.ts +2 -2
  71. package/dist/typings/classes/state.d.ts +6 -3
  72. package/dist/typings/classes/viewport.d.ts +1 -0
  73. package/dist/typings/interfaces/index.d.ts +2 -2
  74. package/dist/typings/interfaces/state.d.ts +2 -15
  75. package/dist/typings/processes/adjust.d.ts +1 -0
  76. package/dist/typings/processes/end.d.ts +1 -2
  77. package/package.json +1 -1
@@ -9,6 +9,7 @@ class InnerLoopModel {
9
9
  return this.count === 0;
10
10
  }
11
11
  done() {
12
+ this.isInitial = false;
12
13
  this.count++;
13
14
  this.total++;
14
15
  this.busy.set(false);
@@ -28,7 +29,7 @@ export class WorkflowCycleModel {
28
29
  this.innerLoop = new InnerLoopModel(loopCount);
29
30
  this.interrupter = null;
30
31
  this.busy = new Reactive(false);
31
- this.done(cycleCount);
32
+ this.end(cycleCount);
32
33
  }
33
34
  get loopId() {
34
35
  return `${this.instanceIndex}-${this.count}-${this.innerLoop.total}`;
@@ -36,11 +37,6 @@ export class WorkflowCycleModel {
36
37
  get loopIdNext() {
37
38
  return `${this.instanceIndex}-${this.count}-${this.innerLoop.total + 1}`;
38
39
  }
39
- done(count) {
40
- this.count = count;
41
- this.isInitial = false;
42
- this.busy.set(false);
43
- }
44
40
  start(isInitial, initiator) {
45
41
  this.isInitial = isInitial;
46
42
  this.initiator = initiator;
@@ -49,6 +45,11 @@ export class WorkflowCycleModel {
49
45
  this.interrupter = null;
50
46
  this.busy.set(true);
51
47
  }
48
+ end(count) {
49
+ this.count = count;
50
+ this.isInitial = false;
51
+ this.busy.set(false);
52
+ }
52
53
  dispose(forever) {
53
54
  if (forever) {
54
55
  // otherwise the value will be persisted during re-instantiation
@@ -1 +1 @@
1
- {"version":3,"file":"cycle.js","sourceRoot":"","sources":["../../../../src/classes/state/cycle.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,MAAM,cAAc;IAUlB,YAAY,KAAa;QACvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,QAAQ,CAAU,KAAK,CAAC,CAAC;IAC3C,CAAC;IARD,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC;IAC1B,CAAC;IAQD,IAAI;QACF,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAED,OAAO;QACL,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IACtB,CAAC;CACF;AAED,MAAM,OAAO,kBAAkB;IAiB7B,YAAY,aAAqB,EAAE,KAA0B;QAC3D,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAEpD,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,SAAS,GAAG,IAAI,cAAc,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,IAAI,QAAQ,CAAU,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACxB,CAAC;IAjBD,IAAI,MAAM;QACR,OAAO,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACvE,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;IAC3E,CAAC;IAaD,IAAI,CAAC,KAAa;QAChB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,SAAkB,EAAE,SAAsB;QAC9C,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,CAAC;QACrC,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAED,OAAO,CAAC,OAAiB;QACvB,IAAI,OAAO,EAAE;YACX,gEAAgE;YAChE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;SACrB;QACD,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;CACF","sourcesContent":["import { ProcessName } from '../../interfaces/index';\nimport { Reactive } from '../reactive';\n\nclass InnerLoopModel {\n total: number;\n count: number;\n isInitial: boolean;\n busy: Reactive<boolean>;\n\n get first(): boolean {\n return this.count === 0;\n }\n\n constructor(total: number) {\n this.total = total;\n this.isInitial = false;\n this.busy = new Reactive<boolean>(false);\n }\n\n done() {\n this.count++;\n this.total++;\n this.busy.set(false);\n }\n\n start() {\n this.busy.set(true);\n }\n\n dispose() {\n this.busy.dispose();\n }\n}\n\nexport class WorkflowCycleModel {\n instanceIndex: number;\n count: number;\n isInitial: boolean;\n initiator: ProcessName;\n innerLoop: InnerLoopModel;\n interrupter: ProcessName | null;\n busy: Reactive<boolean>;\n\n get loopId(): string {\n return `${this.instanceIndex}-${this.count}-${this.innerLoop.total}`;\n }\n\n get loopIdNext(): string {\n return `${this.instanceIndex}-${this.count}-${this.innerLoop.total + 1}`;\n }\n\n constructor(instanceIndex: number, cycle?: WorkflowCycleModel) {\n const cycleCount = cycle ? cycle.count : 1;\n const loopCount = cycle ? cycle.innerLoop.count : 0;\n\n this.instanceIndex = instanceIndex;\n this.innerLoop = new InnerLoopModel(loopCount);\n this.interrupter = null;\n this.busy = new Reactive<boolean>(false);\n this.done(cycleCount);\n }\n\n done(count: number): void {\n this.count = count;\n this.isInitial = false;\n this.busy.set(false);\n }\n\n start(isInitial: boolean, initiator: ProcessName): void {\n this.isInitial = isInitial;\n this.initiator = initiator;\n this.innerLoop.isInitial = isInitial;\n this.innerLoop.count = 0;\n this.interrupter = null;\n this.busy.set(true);\n }\n\n dispose(forever?: boolean): void {\n if (forever) {\n // otherwise the value will be persisted during re-instantiation\n this.busy.dispose();\n }\n this.innerLoop.dispose();\n }\n}\n"]}
1
+ {"version":3,"file":"cycle.js","sourceRoot":"","sources":["../../../../src/classes/state/cycle.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,MAAM,cAAc;IAUlB,YAAY,KAAa;QACvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,QAAQ,CAAU,KAAK,CAAC,CAAC;IAC3C,CAAC;IARD,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC;IAC1B,CAAC;IAQD,IAAI;QACF,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAED,OAAO;QACL,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IACtB,CAAC;CACF;AAED,MAAM,OAAO,kBAAkB;IAiB7B,YAAY,aAAqB,EAAE,KAA0B;QAC3D,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAEpD,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,SAAS,GAAG,IAAI,cAAc,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,IAAI,QAAQ,CAAU,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACvB,CAAC;IAjBD,IAAI,MAAM;QACR,OAAO,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACvE,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;IAC3E,CAAC;IAaD,KAAK,CAAC,SAAkB,EAAE,SAAsB;QAC9C,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,CAAC;QACrC,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAED,GAAG,CAAC,KAAa;QACf,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,OAAO,CAAC,OAAiB;QACvB,IAAI,OAAO,EAAE;YACX,gEAAgE;YAChE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;SACrB;QACD,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;CACF","sourcesContent":["import { ProcessName } from '../../interfaces/index';\nimport { Reactive } from '../reactive';\n\nclass InnerLoopModel {\n total: number;\n count: number;\n isInitial: boolean;\n busy: Reactive<boolean>;\n\n get first(): boolean {\n return this.count === 0;\n }\n\n constructor(total: number) {\n this.total = total;\n this.isInitial = false;\n this.busy = new Reactive<boolean>(false);\n }\n\n done() {\n this.isInitial = false;\n this.count++;\n this.total++;\n this.busy.set(false);\n }\n\n start() {\n this.busy.set(true);\n }\n\n dispose() {\n this.busy.dispose();\n }\n}\n\nexport class WorkflowCycleModel {\n instanceIndex: number;\n count: number;\n isInitial: boolean;\n initiator: ProcessName;\n innerLoop: InnerLoopModel;\n interrupter: ProcessName | null;\n busy: Reactive<boolean>;\n\n get loopId(): string {\n return `${this.instanceIndex}-${this.count}-${this.innerLoop.total}`;\n }\n\n get loopIdNext(): string {\n return `${this.instanceIndex}-${this.count}-${this.innerLoop.total + 1}`;\n }\n\n constructor(instanceIndex: number, cycle?: WorkflowCycleModel) {\n const cycleCount = cycle ? cycle.count : 1;\n const loopCount = cycle ? cycle.innerLoop.count : 0;\n\n this.instanceIndex = instanceIndex;\n this.innerLoop = new InnerLoopModel(loopCount);\n this.interrupter = null;\n this.busy = new Reactive<boolean>(false);\n this.end(cycleCount);\n }\n\n start(isInitial: boolean, initiator: ProcessName): void {\n this.isInitial = isInitial;\n this.initiator = initiator;\n this.innerLoop.isInitial = isInitial;\n this.innerLoop.count = 0;\n this.interrupter = null;\n this.busy.set(true);\n }\n\n end(count: number): void {\n this.count = count;\n this.isInitial = false;\n this.busy.set(false);\n }\n\n dispose(forever?: boolean): void {\n if (forever) {\n // otherwise the value will be persisted during re-instantiation\n this.busy.dispose();\n }\n this.innerLoop.dispose();\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- export class ScrollState {
1
+ export class ScrollModel {
2
2
  constructor() {
3
3
  this.reset();
4
4
  }
@@ -1 +1 @@
1
- {"version":3,"file":"scroll.js","sourceRoot":"","sources":["../../../../src/classes/state/scroll.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,WAAW;IAatB;QACE,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAED,KAAK;QACH,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAC9B,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED,IAAI;QACF,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC/B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;SACzB;QACD,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;SAC7B;IACH,CAAC;IAED,kBAAkB,CAAC,QAAgB;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC;QACvC,OAAO,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,QAAQ,CAAC;IACxF,CAAC;CACF","sourcesContent":["import {\n ScrollEventData as IScrollEventData,\n ScrollState as IScrollState\n} from '../../interfaces/index';\n\nexport class ScrollState implements IScrollState {\n previous: IScrollEventData | null;\n current: IScrollEventData | null;\n\n scrollTimer: ReturnType<typeof setTimeout> | null;\n\n syntheticPosition: number | null;\n syntheticFulfill: boolean;\n cancelAnimation: (() => void) | null;\n positionBeforeAsync: number | null;\n positionBeforeAdjust: number | null;\n positionAfterAdjust: number | null;\n\n constructor() {\n this.reset();\n }\n\n reset(): void {\n this.previous = null;\n this.current = null;\n this.syntheticPosition = null;\n this.syntheticFulfill = false;\n this.positionBeforeAsync = null;\n this.positionBeforeAdjust = null;\n this.positionAfterAdjust = null;\n this.stop();\n }\n\n stop(): void {\n if (this.scrollTimer) {\n clearTimeout(this.scrollTimer);\n this.scrollTimer = null;\n }\n if (this.cancelAnimation) {\n this.cancelAnimation();\n this.cancelAnimation = null;\n }\n }\n\n hasPositionChanged(position: number): boolean {\n const before = this.positionBeforeAdjust;\n const after = this.positionAfterAdjust;\n return before === null || before !== position || after === null || after !== position;\n }\n}\n"]}
1
+ {"version":3,"file":"scroll.js","sourceRoot":"","sources":["../../../../src/classes/state/scroll.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,WAAW;IAatB;QACE,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAED,KAAK;QACH,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAC9B,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED,IAAI;QACF,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC/B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;SACzB;QACD,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;SAC7B;IACH,CAAC;IAED,kBAAkB,CAAC,QAAgB;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC;QACvC,OAAO,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,QAAQ,CAAC;IACxF,CAAC;CACF","sourcesContent":["import { ScrollEventData as IScrollEventData } from '../../interfaces/index';\n\nexport class ScrollModel {\n previous: IScrollEventData | null;\n current: IScrollEventData | null;\n\n scrollTimer: ReturnType<typeof setTimeout> | null;\n\n syntheticPosition: number | null;\n syntheticFulfill: boolean;\n cancelAnimation: (() => void) | null;\n positionBeforeAsync: number | null;\n positionBeforeAdjust: number | null;\n positionAfterAdjust: number | null;\n\n constructor() {\n this.reset();\n }\n\n reset(): void {\n this.previous = null;\n this.current = null;\n this.syntheticPosition = null;\n this.syntheticFulfill = false;\n this.positionBeforeAsync = null;\n this.positionBeforeAdjust = null;\n this.positionAfterAdjust = null;\n this.stop();\n }\n\n stop(): void {\n if (this.scrollTimer) {\n clearTimeout(this.scrollTimer);\n this.scrollTimer = null;\n }\n if (this.cancelAnimation) {\n this.cancelAnimation();\n this.cancelAnimation = null;\n }\n }\n\n hasPositionChanged(position: number): boolean {\n const before = this.positionBeforeAdjust;\n const after = this.positionAfterAdjust;\n return before === null || before !== position || after === null || after !== position;\n }\n}\n"]}
@@ -2,7 +2,7 @@ import { WorkflowCycleModel } from './state/cycle';
2
2
  import { FetchModel } from './state/fetch';
3
3
  import { ClipModel } from './state/clip';
4
4
  import { RenderModel } from './state/render';
5
- import { ScrollState } from './state/scroll';
5
+ import { ScrollModel } from './state/scroll';
6
6
  export class State {
7
7
  constructor(packageInfo, settings, state) {
8
8
  this.packageInfo = packageInfo;
@@ -12,25 +12,19 @@ export class State {
12
12
  this.fetch = new FetchModel(settings.directionPriority);
13
13
  this.clip = new ClipModel();
14
14
  this.render = new RenderModel();
15
- this.scrollState = new ScrollState();
15
+ this.scroll = new ScrollModel();
16
16
  }
17
17
  get time() {
18
18
  return Number(new Date()) - this.initTime;
19
19
  }
20
- endInnerLoop() {
21
- const { fetch, render, cycle } = this;
22
- if (fetch.cancel) {
23
- fetch.cancel();
24
- fetch.cancel = null;
25
- }
26
- if (render.cancel) {
27
- render.cancel();
28
- render.cancel = null;
29
- }
30
- cycle.innerLoop.done();
20
+ startWorkflowCycle(isInitial, initiator) {
21
+ this.cycle.start(isInitial, initiator);
22
+ }
23
+ endWorkflowCycle(count) {
24
+ this.cycle.end(count);
31
25
  }
32
26
  startInnerLoop() {
33
- const { cycle, scrollState: scroll, fetch, render, clip } = this;
27
+ const { cycle, scroll: scroll, fetch, render, clip } = this;
34
28
  cycle.innerLoop.start();
35
29
  scroll.positionBeforeAsync = null;
36
30
  if (!fetch.simulate) {
@@ -43,10 +37,24 @@ export class State {
43
37
  doRender: fetch.simulate && fetch.items.length > 0
44
38
  } : {}));
45
39
  }
40
+ endInnerLoop() {
41
+ const { fetch, clip, render, cycle } = this;
42
+ fetch.stopSimulate();
43
+ clip.reset(true);
44
+ if (fetch.cancel) {
45
+ fetch.cancel();
46
+ fetch.cancel = null;
47
+ }
48
+ if (render.cancel) {
49
+ render.cancel();
50
+ render.cancel = null;
51
+ }
52
+ cycle.innerLoop.done();
53
+ }
46
54
  dispose() {
55
+ this.scroll.stop();
47
56
  this.cycle.dispose();
48
57
  this.endInnerLoop();
49
- this.scrollState.stop();
50
58
  }
51
59
  }
52
60
  //# sourceMappingURL=state.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/classes/state.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,MAAM,OAAO,KAAK;IAmBhB,YAAY,WAAsB,EAAE,QAAkB,EAAE,KAAc;QACpE,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAEzB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QAEnC,IAAI,CAAC,KAAK,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAE/F,IAAI,CAAC,KAAK,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;QACxD,IAAI,CAAC,IAAI,GAAG,IAAI,SAAS,EAAE,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAEhC,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;IACvC,CAAC;IAjBD,IAAI,IAAI;QACN,OAAO,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC5C,CAAC;IAiBD,YAAY;QACV,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QACtC,IAAI,KAAK,CAAC,MAAM,EAAE;YAChB,KAAK,CAAC,MAAM,EAAE,CAAC;YACf,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;SACrB;QACD,IAAI,MAAM,CAAC,MAAM,EAAE;YACjB,MAAM,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;SACtB;QACD,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,cAAc;QACZ,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;QAEjE,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACxB,MAAM,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAElC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;YACnB,KAAK,CAAC,KAAK,EAAE,CAAC;SACf;QACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,MAAM,CAAC,KAAK,EAAE,CAAC;QAEf,yBACK,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;YAC1B,OAAO,EAAE,KAAK,CAAC,SAAS;YACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;SACnD,CAAC,CAAC,CAAC,EAAE,CAAC,EACP;IACJ,CAAC;IAED,OAAO;QACL,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACrB,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;CAEF","sourcesContent":["import { Settings } from './settings';\r\nimport { WorkflowCycleModel } from './state/cycle';\r\nimport { FetchModel } from './state/fetch';\r\nimport { ClipModel } from './state/clip';\r\nimport { RenderModel } from './state/render';\r\nimport { ScrollState } from './state/scroll';\r\nimport { State as IState, IPackages, ScrollState as IScrollState, ProcessName } from '../interfaces/index';\r\n\r\nexport class State implements IState {\r\n\r\n readonly packageInfo: IPackages;\r\n private settings: Settings;\r\n\r\n initTime: number;\r\n\r\n cycle: WorkflowCycleModel;\r\n\r\n fetch: FetchModel;\r\n clip: ClipModel;\r\n render: RenderModel;\r\n\r\n scrollState: IScrollState;\r\n\r\n get time(): number {\r\n return Number(new Date()) - this.initTime;\r\n }\r\n\r\n constructor(packageInfo: IPackages, settings: Settings, state?: IState) {\r\n this.packageInfo = packageInfo;\r\n this.settings = settings;\r\n\r\n this.initTime = Number(new Date());\r\n\r\n this.cycle = new WorkflowCycleModel(this.settings.instanceIndex, state ? state.cycle : void 0);\r\n\r\n this.fetch = new FetchModel(settings.directionPriority);\r\n this.clip = new ClipModel();\r\n this.render = new RenderModel();\r\n\r\n this.scrollState = new ScrollState();\r\n }\r\n\r\n endInnerLoop(): void {\r\n const { fetch, render, cycle } = this;\r\n if (fetch.cancel) {\r\n fetch.cancel();\r\n fetch.cancel = null;\r\n }\r\n if (render.cancel) {\r\n render.cancel();\r\n render.cancel = null;\r\n }\r\n cycle.innerLoop.done();\r\n }\r\n\r\n startInnerLoop(): { process?: ProcessName, doRender?: boolean } {\r\n const { cycle, scrollState: scroll, fetch, render, clip } = this;\r\n\r\n cycle.innerLoop.start();\r\n scroll.positionBeforeAsync = null;\r\n\r\n if (!fetch.simulate) {\r\n fetch.reset();\r\n }\r\n clip.reset(clip.force);\r\n render.reset();\r\n\r\n return {\r\n ...(cycle.innerLoop.first ? {\r\n process: cycle.initiator,\r\n doRender: fetch.simulate && fetch.items.length > 0\r\n } : {})\r\n };\r\n }\r\n\r\n dispose(): void {\r\n this.cycle.dispose();\r\n this.endInnerLoop();\r\n this.scrollState.stop();\r\n }\r\n\r\n}\r\n"]}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/classes/state.ts"],"names":[],"mappings":"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","sourcesContent":["import { Settings } from './settings';\r\nimport { WorkflowCycleModel } from './state/cycle';\r\nimport { FetchModel } from './state/fetch';\r\nimport { ClipModel } from './state/clip';\r\nimport { RenderModel } from './state/render';\r\nimport { ScrollModel } from './state/scroll';\r\nimport { State as IState, IPackages, ProcessName } from '../interfaces/index';\r\n\r\nexport class State implements IState {\r\n\r\n readonly packageInfo: IPackages;\r\n private settings: Settings;\r\n initTime: number;\r\n\r\n cycle: WorkflowCycleModel;\r\n fetch: FetchModel;\r\n clip: ClipModel;\r\n render: RenderModel;\r\n scroll: ScrollModel;\r\n\r\n get time(): number {\r\n return Number(new Date()) - this.initTime;\r\n }\r\n\r\n constructor(packageInfo: IPackages, settings: Settings, state?: IState) {\r\n this.packageInfo = packageInfo;\r\n this.settings = settings;\r\n this.initTime = Number(new Date());\r\n\r\n this.cycle = new WorkflowCycleModel(this.settings.instanceIndex, state ? state.cycle : void 0);\r\n this.fetch = new FetchModel(settings.directionPriority);\r\n this.clip = new ClipModel();\r\n this.render = new RenderModel();\r\n this.scroll = new ScrollModel();\r\n }\r\n\r\n startWorkflowCycle(isInitial: boolean, initiator: ProcessName): void {\r\n this.cycle.start(isInitial, initiator);\r\n }\r\n\r\n endWorkflowCycle(count: number): void {\r\n this.cycle.end(count);\r\n }\r\n\r\n startInnerLoop(): { process?: ProcessName, doRender?: boolean } {\r\n const { cycle, scroll: scroll, fetch, render, clip } = this;\r\n\r\n cycle.innerLoop.start();\r\n scroll.positionBeforeAsync = null;\r\n\r\n if (!fetch.simulate) {\r\n fetch.reset();\r\n }\r\n clip.reset(clip.force);\r\n render.reset();\r\n\r\n return {\r\n ...(cycle.innerLoop.first ? {\r\n process: cycle.initiator,\r\n doRender: fetch.simulate && fetch.items.length > 0\r\n } : {})\r\n };\r\n }\r\n\r\n endInnerLoop(): void {\r\n const { fetch, clip, render, cycle } = this;\r\n fetch.stopSimulate();\r\n clip.reset(true);\r\n if (fetch.cancel) {\r\n fetch.cancel();\r\n fetch.cancel = null;\r\n }\r\n if (render.cancel) {\r\n render.cancel();\r\n render.cancel = null;\r\n }\r\n cycle.innerLoop.done();\r\n }\r\n\r\n dispose(): void {\r\n this.scroll.stop();\r\n this.cycle.dispose();\r\n this.endInnerLoop();\r\n }\r\n\r\n}\r\n"]}
@@ -21,7 +21,7 @@ export class Viewport {
21
21
  this.setOffset();
22
22
  this.paddings.reset(this.getSize(), startIndex, this.offset);
23
23
  this.scrollPosition = this.paddings.backward.size || 0;
24
- this.state.scrollState.reset();
24
+ this.state.scroll.reset();
25
25
  }
26
26
  setPosition(value) {
27
27
  const oldPosition = this.scrollPosition;
@@ -48,6 +48,9 @@ export class Viewport {
48
48
  getScrollableSize() {
49
49
  return this.routines.getSize(this.element);
50
50
  }
51
+ getMaxScrollPosition() {
52
+ return this.getScrollableSize() - this.getSize();
53
+ }
51
54
  getBufferPadding() {
52
55
  return this.getSize() * this.settings.padding;
53
56
  }
@@ -1 +1 @@
1
- {"version":3,"file":"viewport.js","sourceRoot":"","sources":["../../../src/classes/viewport.ts"],"names":[],"mappings":"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","sourcesContent":["import { Paddings } from './paddings';\nimport { Settings } from './settings';\nimport { Routines } from './domRoutines';\nimport { Item } from './item';\nimport { State } from './state';\nimport { Logger } from './logger';\nimport { Direction } from '../inputs/index';\n\nexport class Viewport {\n\n offset: number;\n paddings: Paddings;\n\n readonly element: HTMLElement;\n readonly settings: Settings;\n readonly routines: Routines;\n readonly state: State;\n readonly logger: Logger;\n\n readonly hostElement: HTMLElement;\n readonly scrollEventReceiver: HTMLElement | Window;\n\n constructor(element: HTMLElement, settings: Settings, routines: Routines, state: State, logger: Logger) {\n this.element = element;\n this.settings = settings;\n this.routines = routines;\n this.state = state;\n this.logger = logger;\n\n this.hostElement = this.routines.getHostElement(this.element);\n this.scrollEventReceiver = this.routines.getScrollEventReceiver(this.element);\n\n if (settings.windowViewport) {\n this.routines.setupScrollRestoration();\n }\n if (settings.dismissOverflowAnchor) {\n this.routines.dismissOverflowAnchor(this.hostElement);\n }\n\n this.paddings = new Paddings(this.element, this.routines, settings);\n }\n\n reset(startIndex: number): void {\n this.setOffset();\n this.paddings.reset(this.getSize(), startIndex, this.offset);\n this.scrollPosition = this.paddings.backward.size || 0;\n this.state.scrollState.reset();\n }\n\n setPosition(value: number): number {\n const oldPosition = this.scrollPosition;\n if (oldPosition === value) {\n this.logger.log(() => ['setting scroll position at', value, '[cancelled]']);\n return value;\n }\n this.routines.setScrollPosition(this.hostElement, value);\n const position = this.scrollPosition;\n this.logger.log(() => [\n 'setting scroll position at', position, ...(position !== value ? [`(${value})`] : [])\n ]);\n return position;\n }\n\n get scrollPosition(): number {\n return this.routines.getScrollPosition(this.hostElement);\n }\n\n set scrollPosition(value: number) {\n this.setPosition(value);\n }\n\n getSize(): number {\n return this.routines.getSize(this.hostElement, true);\n }\n\n getScrollableSize(): number {\n return this.routines.getSize(this.element);\n }\n\n getBufferPadding(): number {\n return this.getSize() * this.settings.padding;\n }\n\n getEdge(direction: Direction): number {\n return this.routines.getEdge(this.hostElement, direction, true);\n }\n\n setOffset(): void {\n this.offset = this.routines.getOffset(this.element);\n if (!this.settings.windowViewport) {\n this.offset -= this.routines.getOffset(this.hostElement);\n }\n }\n\n findItemElementById(id: string): HTMLElement | null {\n return this.routines.findItemElement(this.element, id);\n }\n\n getEdgeVisibleItem(items: Item[], direction: Direction): { item?: Item, index: number, diff: number } {\n const bwd = direction === Direction.backward;\n const opposite = bwd ? Direction.forward : Direction.backward;\n const viewportEdge = this.getEdge(direction);\n let item, diff = 0;\n for (\n let i = bwd ? 0 : items.length - 1;\n bwd ? i <= items.length - 1 : i >= 0;\n i += bwd ? 1 : -1\n ) {\n const itemEdge = this.routines.getEdge(items[i].element, opposite);\n diff = itemEdge - viewportEdge;\n if (bwd && diff > 0 || !bwd && diff < 0) {\n item = items[i];\n break;\n }\n }\n return { item, index: item ? item.$index : NaN, diff };\n }\n\n}\n"]}
1
+ {"version":3,"file":"viewport.js","sourceRoot":"","sources":["../../../src/classes/viewport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAMtC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,OAAO,QAAQ;IAcnB,YAAY,OAAoB,EAAE,QAAkB,EAAE,QAAkB,EAAE,KAAY,EAAE,MAAc;QACpG,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9D,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE9E,IAAI,QAAQ,CAAC,cAAc,EAAE;YAC3B,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC;SACxC;QACD,IAAI,QAAQ,CAAC,qBAAqB,EAAE;YAClC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SACvD;QAED,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACtE,CAAC;IAED,KAAK,CAAC,UAAkB;QACtB,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7D,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC;QACvD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED,WAAW,CAAC,KAAa;QACvB,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC;QACxC,IAAI,WAAW,KAAK,KAAK,EAAE;YACzB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,4BAA4B,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC;YAC5E,OAAO,KAAK,CAAC;SACd;QACD,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;YACpB,4BAA4B,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SACtF,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,cAAc,CAAC,KAAa;QAC9B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IACvD,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,oBAAoB;QAClB,OAAO,IAAI,CAAC,iBAAiB,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IACnD,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;IAChD,CAAC;IAED,OAAO,CAAC,SAAoB;QAC1B,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IAClE,CAAC;IAED,SAAS;QACP,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE;YACjC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SAC1D;IACH,CAAC;IAED,mBAAmB,CAAC,EAAU;QAC5B,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,kBAAkB,CAAC,KAAa,EAAE,SAAoB;QACpD,MAAM,GAAG,GAAG,SAAS,KAAK,SAAS,CAAC,QAAQ,CAAC;QAC7C,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC;QAC9D,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC;QACnB,KACE,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAClC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EACpC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACjB;YACA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YACnE,IAAI,GAAG,QAAQ,GAAG,YAAY,CAAC;YAC/B,IAAI,GAAG,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,GAAG,CAAC,EAAE;gBACvC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBAChB,MAAM;aACP;SACF;QACD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;IACzD,CAAC;CAEF","sourcesContent":["import { Paddings } from './paddings';\nimport { Settings } from './settings';\nimport { Routines } from './domRoutines';\nimport { Item } from './item';\nimport { State } from './state';\nimport { Logger } from './logger';\nimport { Direction } from '../inputs/index';\n\nexport class Viewport {\n\n offset: number;\n paddings: Paddings;\n\n readonly element: HTMLElement;\n readonly settings: Settings;\n readonly routines: Routines;\n readonly state: State;\n readonly logger: Logger;\n\n readonly hostElement: HTMLElement;\n readonly scrollEventReceiver: HTMLElement | Window;\n\n constructor(element: HTMLElement, settings: Settings, routines: Routines, state: State, logger: Logger) {\n this.element = element;\n this.settings = settings;\n this.routines = routines;\n this.state = state;\n this.logger = logger;\n\n this.hostElement = this.routines.getHostElement(this.element);\n this.scrollEventReceiver = this.routines.getScrollEventReceiver(this.element);\n\n if (settings.windowViewport) {\n this.routines.setupScrollRestoration();\n }\n if (settings.dismissOverflowAnchor) {\n this.routines.dismissOverflowAnchor(this.hostElement);\n }\n\n this.paddings = new Paddings(this.element, this.routines, settings);\n }\n\n reset(startIndex: number): void {\n this.setOffset();\n this.paddings.reset(this.getSize(), startIndex, this.offset);\n this.scrollPosition = this.paddings.backward.size || 0;\n this.state.scroll.reset();\n }\n\n setPosition(value: number): number {\n const oldPosition = this.scrollPosition;\n if (oldPosition === value) {\n this.logger.log(() => ['setting scroll position at', value, '[cancelled]']);\n return value;\n }\n this.routines.setScrollPosition(this.hostElement, value);\n const position = this.scrollPosition;\n this.logger.log(() => [\n 'setting scroll position at', position, ...(position !== value ? [`(${value})`] : [])\n ]);\n return position;\n }\n\n get scrollPosition(): number {\n return this.routines.getScrollPosition(this.hostElement);\n }\n\n set scrollPosition(value: number) {\n this.setPosition(value);\n }\n\n getSize(): number {\n return this.routines.getSize(this.hostElement, true);\n }\n\n getScrollableSize(): number {\n return this.routines.getSize(this.element);\n }\n\n getMaxScrollPosition(): number {\n return this.getScrollableSize() - this.getSize();\n }\n\n getBufferPadding(): number {\n return this.getSize() * this.settings.padding;\n }\n\n getEdge(direction: Direction): number {\n return this.routines.getEdge(this.hostElement, direction, true);\n }\n\n setOffset(): void {\n this.offset = this.routines.getOffset(this.element);\n if (!this.settings.windowViewport) {\n this.offset -= this.routines.getOffset(this.hostElement);\n }\n }\n\n findItemElementById(id: string): HTMLElement | null {\n return this.routines.findItemElement(this.element, id);\n }\n\n getEdgeVisibleItem(items: Item[], direction: Direction): { item?: Item, index: number, diff: number } {\n const bwd = direction === Direction.backward;\n const opposite = bwd ? Direction.forward : Direction.backward;\n const viewportEdge = this.getEdge(direction);\n let item, diff = 0;\n for (\n let i = bwd ? 0 : items.length - 1;\n bwd ? i <= items.length - 1 : i >= 0;\n i += bwd ? 1 : -1\n ) {\n const itemEdge = this.routines.getEdge(items[i].element, opposite);\n diff = itemEdge - viewportEdge;\n if (bwd && diff > 0 || !bwd && diff < 0) {\n item = items[i];\n break;\n }\n }\n return { item, index: item ? item.$index : NaN, diff };\n }\n\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/interfaces/index.ts"],"names":[],"mappings":"","sourcesContent":["import {\n ObservableLike,\n DatasourceGet,\n IDatasourceOptional,\n IDatasource,\n IDatasourceConstructed,\n} from './datasource';\nimport {\n OnDataChanged,\n WorkflowParams,\n ScrollerWorkflow,\n ScrollerParams,\n WorkflowGetter,\n WorkflowError,\n InterruptParams,\n StateMachineMethods,\n StateMachineParams,\n} from './workflow';\nimport { Item } from './item';\nimport {\n IReactivePropConfig,\n IReactivePropsConfig,\n IReactivePropsStore,\n IAdapterConfig,\n IAdapterProp,\n ItemAdapter,\n ItemsPredicate,\n ItemsUpdater,\n ItemsProcessor,\n BufferUpdater,\n IPackage,\n IPackages,\n IBufferInfo,\n IAdapterInput,\n AdapterAppendOptions,\n AdapterPrependOptions,\n AdapterRemoveOptions,\n AdapterClipOptions,\n AdapterInsertOptions,\n AdapterReplaceOptions,\n AdapterUpdateOptions,\n AdapterFixOptions,\n AdapterMethodResult,\n IAdapter,\n} from './adapter';\nimport { Settings, DevSettings } from './settings';\nimport { ScrollEventData, ScrollState, State } from './state';\nimport {\n ProcessName,\n ProcessClass,\n ProcessPayload,\n ProcessSubject,\n AdapterProcessMap,\n IBaseProcess,\n IBaseAdapterProcess,\n} from './process';\nimport {\n ValidatedValue,\n IValidator,\n ICommonProp,\n ICommonProps,\n IValidatedCommonProps,\n IValidatedData,\n} from './validation';\n\nexport {\n ObservableLike,\n DatasourceGet,\n IDatasourceOptional,\n IDatasource,\n IDatasourceConstructed,\n OnDataChanged,\n WorkflowParams,\n ScrollerWorkflow,\n ScrollerParams,\n WorkflowGetter,\n WorkflowError,\n InterruptParams,\n StateMachineMethods,\n StateMachineParams,\n Item,\n IReactivePropConfig,\n IReactivePropsConfig,\n IReactivePropsStore,\n IAdapterConfig,\n IAdapterProp,\n ItemAdapter,\n AdapterMethodResult,\n IAdapter,\n ItemsPredicate,\n ItemsUpdater,\n ItemsProcessor,\n BufferUpdater,\n IPackage,\n IPackages,\n IBufferInfo,\n IAdapterInput,\n AdapterAppendOptions,\n AdapterPrependOptions,\n AdapterRemoveOptions,\n AdapterClipOptions,\n AdapterInsertOptions,\n AdapterReplaceOptions,\n AdapterUpdateOptions,\n AdapterFixOptions,\n Settings,\n DevSettings,\n ScrollEventData,\n ScrollState,\n State,\n ProcessName,\n ProcessClass,\n ProcessPayload,\n ProcessSubject,\n AdapterProcessMap,\n IBaseProcess,\n IBaseAdapterProcess,\n ValidatedValue,\n IValidator,\n ICommonProp,\n ICommonProps,\n IValidatedCommonProps,\n IValidatedData,\n};\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/interfaces/index.ts"],"names":[],"mappings":"","sourcesContent":["import {\n ObservableLike,\n DatasourceGet,\n IDatasourceOptional,\n IDatasource,\n IDatasourceConstructed,\n} from './datasource';\nimport {\n OnDataChanged,\n WorkflowParams,\n ScrollerWorkflow,\n ScrollerParams,\n WorkflowGetter,\n WorkflowError,\n InterruptParams,\n StateMachineMethods,\n StateMachineParams,\n} from './workflow';\nimport { Item } from './item';\nimport {\n IReactivePropConfig,\n IReactivePropsConfig,\n IReactivePropsStore,\n IAdapterConfig,\n IAdapterProp,\n ItemAdapter,\n ItemsPredicate,\n ItemsUpdater,\n ItemsProcessor,\n BufferUpdater,\n IPackage,\n IPackages,\n IBufferInfo,\n IAdapterInput,\n AdapterAppendOptions,\n AdapterPrependOptions,\n AdapterRemoveOptions,\n AdapterClipOptions,\n AdapterInsertOptions,\n AdapterReplaceOptions,\n AdapterUpdateOptions,\n AdapterFixOptions,\n AdapterMethodResult,\n IAdapter,\n} from './adapter';\nimport { Settings, DevSettings } from './settings';\nimport { ScrollEventData, State } from './state';\nimport {\n ProcessName,\n ProcessClass,\n ProcessPayload,\n ProcessSubject,\n AdapterProcessMap,\n IBaseProcess,\n IBaseAdapterProcess,\n} from './process';\nimport {\n ValidatedValue,\n IValidator,\n ICommonProp,\n ICommonProps,\n IValidatedCommonProps,\n IValidatedData,\n} from './validation';\n\nexport {\n ObservableLike,\n DatasourceGet,\n IDatasourceOptional,\n IDatasource,\n IDatasourceConstructed,\n OnDataChanged,\n WorkflowParams,\n ScrollerWorkflow,\n ScrollerParams,\n WorkflowGetter,\n WorkflowError,\n InterruptParams,\n StateMachineMethods,\n StateMachineParams,\n Item,\n IReactivePropConfig,\n IReactivePropsConfig,\n IReactivePropsStore,\n IAdapterConfig,\n IAdapterProp,\n ItemAdapter,\n AdapterMethodResult,\n IAdapter,\n ItemsPredicate,\n ItemsUpdater,\n ItemsProcessor,\n BufferUpdater,\n IPackage,\n IPackages,\n IBufferInfo,\n IAdapterInput,\n AdapterAppendOptions,\n AdapterPrependOptions,\n AdapterRemoveOptions,\n AdapterClipOptions,\n AdapterInsertOptions,\n AdapterReplaceOptions,\n AdapterUpdateOptions,\n AdapterFixOptions,\n Settings,\n DevSettings,\n ScrollEventData,\n State,\n ProcessName,\n ProcessClass,\n ProcessPayload,\n ProcessSubject,\n AdapterProcessMap,\n IBaseProcess,\n IBaseAdapterProcess,\n ValidatedValue,\n IValidator,\n ICommonProp,\n ICommonProps,\n IValidatedCommonProps,\n IValidatedData,\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/interfaces/state.ts"],"names":[],"mappings":"","sourcesContent":["import { Direction } from '../inputs/index';\r\nimport { WorkflowCycleModel } from '../classes/state/cycle';\r\nimport { FetchModel } from '../classes/state/fetch';\r\nimport { ClipModel } from '../classes/state/clip';\r\nimport { RenderModel } from '../classes/state/render';\r\nimport { IPackages } from './adapter';\r\n\r\nexport interface ScrollEventData {\r\n time: number;\r\n position: number;\r\n direction: Direction | null;\r\n}\r\n\r\nexport interface ScrollState {\r\n previous: ScrollEventData | null;\r\n current: ScrollEventData | null;\r\n\r\n scrollTimer: ReturnType<typeof setTimeout> | null;\r\n cancelAnimation: (() => void) | null;\r\n\r\n syntheticPosition: number | null;\r\n syntheticFulfill: boolean;\r\n positionBeforeAsync: number | null;\r\n positionBeforeAdjust: number | null;\r\n positionAfterAdjust: number | null;\r\n\r\n reset: () => void;\r\n stop: () => void;\r\n hasPositionChanged: (position: number) => boolean;\r\n}\r\n\r\nexport interface State {\r\n packageInfo: IPackages;\r\n initTime: number;\r\n cycle: WorkflowCycleModel;\r\n fetch: FetchModel;\r\n clip: ClipModel;\r\n render: RenderModel;\r\n scrollState: ScrollState;\r\n time: number;\r\n}\r\n"]}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/interfaces/state.ts"],"names":[],"mappings":"","sourcesContent":["import { Direction } from '../inputs/index';\r\nimport { WorkflowCycleModel } from '../classes/state/cycle';\r\nimport { FetchModel } from '../classes/state/fetch';\r\nimport { ClipModel } from '../classes/state/clip';\r\nimport { RenderModel } from '../classes/state/render';\r\nimport { ScrollModel } from '../classes/state/scroll';\r\nimport { IPackages } from './adapter';\r\n\r\nexport interface ScrollEventData {\r\n time: number;\r\n position: number;\r\n direction: Direction | null;\r\n}\r\n\r\nexport interface State {\r\n packageInfo: IPackages;\r\n initTime: number;\r\n cycle: WorkflowCycleModel;\r\n fetch: FetchModel;\r\n clip: ClipModel;\r\n render: RenderModel;\r\n scroll: ScrollModel;\r\n time: number;\r\n}\r\n"]}
@@ -7,7 +7,7 @@ export default class Reload extends BaseAdapterProcessFactory(AdapterProcess.rel
7
7
  viewport.reset(buffer.startIndex);
8
8
  const payload = {};
9
9
  if (state.cycle.busy.get()) {
10
- state.scrollState.stop();
10
+ state.scroll.stop();
11
11
  payload.finalize = true;
12
12
  state.cycle.interrupter = Reload.process;
13
13
  }
@@ -1 +1 @@
1
- {"version":3,"file":"reload.js","sourceRoot":"","sources":["../../../../src/processes/adapter/reload.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAGzF,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,yBAAyB,CAAC,cAAc,CAAC,MAAM,CAAC;IAElF,MAAM,CAAC,GAAG,CAAC,QAAkB,EAAE,WAAmB;QAChD,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC;QAE7C,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,CAAC,CAAC;QAEtE,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1D,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAElC,MAAM,OAAO,GAAmB,EAAE,CAAC;QACnC,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE;YAC1B,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YACzB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;YACxB,KAAK,CAAC,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC;SAC1C;QAED,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;YACrB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,aAAa,CAAC,IAAI;YAC1B,OAAO;SACR,CAAC,CAAC;IACL,CAAC;CAEF","sourcesContent":["import { Scroller } from '../../scroller';\nimport { BaseAdapterProcessFactory, AdapterProcess, ProcessStatus } from '../misc/index';\nimport { ProcessPayload } from '../../interfaces/index';\n\nexport default class Reload extends BaseAdapterProcessFactory(AdapterProcess.reload) {\n\n static run(scroller: Scroller, reloadIndex: number): void {\n const { viewport, state, buffer } = scroller;\n\n const { params } = Reload.parseInput(scroller, { reloadIndex }, true);\n\n buffer.reset(false, params ? params.reloadIndex : void 0);\n viewport.reset(buffer.startIndex);\n\n const payload: ProcessPayload = {};\n if (state.cycle.busy.get()) {\n state.scrollState.stop();\n payload.finalize = true;\n state.cycle.interrupter = Reload.process;\n }\n\n scroller.workflow.call({\n process: Reload.process,\n status: ProcessStatus.next,\n payload\n });\n }\n\n}\n"]}
1
+ {"version":3,"file":"reload.js","sourceRoot":"","sources":["../../../../src/processes/adapter/reload.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAGzF,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,yBAAyB,CAAC,cAAc,CAAC,MAAM,CAAC;IAElF,MAAM,CAAC,GAAG,CAAC,QAAkB,EAAE,WAAmB;QAChD,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC;QAE7C,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,CAAC,CAAC;QAEtE,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1D,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAElC,MAAM,OAAO,GAAmB,EAAE,CAAC;QACnC,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE;YAC1B,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;YACxB,KAAK,CAAC,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC;SAC1C;QAED,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;YACrB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,aAAa,CAAC,IAAI;YAC1B,OAAO;SACR,CAAC,CAAC;IACL,CAAC;CAEF","sourcesContent":["import { Scroller } from '../../scroller';\nimport { BaseAdapterProcessFactory, AdapterProcess, ProcessStatus } from '../misc/index';\nimport { ProcessPayload } from '../../interfaces/index';\n\nexport default class Reload extends BaseAdapterProcessFactory(AdapterProcess.reload) {\n\n static run(scroller: Scroller, reloadIndex: number): void {\n const { viewport, state, buffer } = scroller;\n\n const { params } = Reload.parseInput(scroller, { reloadIndex }, true);\n\n buffer.reset(false, params ? params.reloadIndex : void 0);\n viewport.reset(buffer.startIndex);\n\n const payload: ProcessPayload = {};\n if (state.cycle.busy.get()) {\n state.scroll.stop();\n payload.finalize = true;\n state.cycle.interrupter = Reload.process;\n }\n\n scroller.workflow.call({\n process: Reload.process,\n status: ProcessStatus.next,\n payload\n });\n }\n\n}\n"]}
@@ -1,12 +1,15 @@
1
1
  import { BaseProcessFactory, CommonProcess, ProcessStatus } from './misc/index';
2
+ import End from './end';
2
3
  export default class Adjust extends BaseProcessFactory(CommonProcess.adjust) {
3
4
  static run(scroller) {
4
- const { workflow, viewport, state: { scrollState } } = scroller;
5
- scrollState.positionBeforeAdjust = viewport.scrollPosition;
5
+ const { workflow, viewport, state: { scroll } } = scroller;
6
+ scroll.positionBeforeAdjust = viewport.scrollPosition;
6
7
  Adjust.setPaddings(scroller);
7
- scrollState.positionAfterAdjust = viewport.scrollPosition;
8
+ scroll.positionAfterAdjust = viewport.scrollPosition;
8
9
  // scroll position adjustments
9
10
  const position = Adjust.calculatePosition(scroller);
11
+ // additional adjustment if the position can't be reached during the initial cycle
12
+ Adjust.setAdditionalForwardPadding(scroller, position);
10
13
  // set new position using animation frame
11
14
  Adjust.setPosition(scroller, position, () => workflow.call({
12
15
  process: Adjust.process,
@@ -37,7 +40,8 @@ export default class Adjust extends BaseProcessFactory(CommonProcess.adjust) {
37
40
  }
38
41
  // lack of items case
39
42
  const bufferSize = viewport.getScrollableSize() - forward.size - backward.size;
40
- const viewportSizeDiff = viewport.getSize() - (bwdSize + bufferSize + fwdSize);
43
+ const scrollSize = bwdSize + bufferSize + fwdSize;
44
+ const viewportSizeDiff = viewport.getSize() - scrollSize;
41
45
  if (viewportSizeDiff > 0) {
42
46
  if (inverse) {
43
47
  bwdSize += viewportSizeDiff;
@@ -52,7 +56,7 @@ export default class Adjust extends BaseProcessFactory(CommonProcess.adjust) {
52
56
  scroller.logger.stat('after paddings adjustments');
53
57
  }
54
58
  static calculatePosition(scroller) {
55
- const { viewport, buffer, state: { fetch, render, scrollState } } = scroller;
59
+ const { viewport, buffer, state: { fetch, render, scroll } } = scroller;
56
60
  let position = viewport.paddings.backward.size;
57
61
  // increase the position to meet the expectation of the first visible item
58
62
  if (!isNaN(fetch.firstVisible.index) && !isNaN(buffer.firstIndex)) {
@@ -75,8 +79,8 @@ export default class Adjust extends BaseProcessFactory(CommonProcess.adjust) {
75
79
  });
76
80
  }
77
81
  // slow fetch/render case
78
- if (scrollState.positionBeforeAsync !== null) {
79
- const diff = render.positionBefore - scrollState.positionBeforeAsync;
82
+ if (scroll.positionBeforeAsync !== null) {
83
+ const diff = render.positionBefore - scroll.positionBeforeAsync;
80
84
  if (diff !== 0) {
81
85
  scroller.logger.log(`shift position due to fetch-render difference (${diff})`);
82
86
  position += diff;
@@ -88,23 +92,47 @@ export default class Adjust extends BaseProcessFactory(CommonProcess.adjust) {
88
92
  }
89
93
  return Math.round(position);
90
94
  }
95
+ static setAdditionalForwardPadding(scroller, position) {
96
+ const { viewport, buffer, state: { cycle } } = scroller;
97
+ if (!cycle.isInitial || !End.shouldContinueRun(scroller, null)) {
98
+ return;
99
+ }
100
+ const diff = position - viewport.getMaxScrollPosition();
101
+ if (diff <= 0) {
102
+ return;
103
+ }
104
+ const last = buffer.getLastVisibleItem();
105
+ if (!last) {
106
+ return;
107
+ }
108
+ let size = 0;
109
+ let index = last.$index + 1;
110
+ while (size <= diff && index <= buffer.absMaxIndex) {
111
+ size += buffer.getSizeByIndex(index++);
112
+ }
113
+ const shift = Math.min(size, diff);
114
+ if (shift) {
115
+ viewport.paddings.forward.size += shift;
116
+ scroller.logger.log(`increase fwd padding due to lack of items (${diff} -> ${shift})`);
117
+ }
118
+ }
91
119
  static setPosition(scroller, position, done) {
92
- const { state: { scrollState }, viewport, routines } = scroller;
93
- if (!scrollState.hasPositionChanged(position)) {
120
+ const { state: { scroll }, viewport, routines } = scroller;
121
+ if (!scroll.hasPositionChanged(position)) {
94
122
  return done();
95
123
  }
96
- scrollState.syntheticPosition = position;
97
- scrollState.syntheticFulfill = false;
98
- scrollState.cancelAnimation = routines.animate(() => {
99
- scrollState.cancelAnimation = null;
100
- const inertiaDiff = scrollState.positionAfterAdjust - viewport.scrollPosition;
124
+ scroll.syntheticPosition = position;
125
+ scroll.syntheticFulfill = false;
126
+ scroll.cancelAnimation = routines.animate(() => {
127
+ scroll.cancelAnimation = null;
128
+ const inertiaDiff = scroll.positionAfterAdjust - viewport.scrollPosition;
101
129
  let diffLog = '';
102
130
  if (inertiaDiff > 0) {
103
131
  position -= inertiaDiff;
104
- scrollState.syntheticPosition = position;
132
+ scroll.syntheticPosition = position;
105
133
  diffLog = ` (-${inertiaDiff})`;
106
134
  }
107
- scrollState.syntheticFulfill = true;
135
+ scroll.syntheticFulfill = true;
108
136
  viewport.scrollPosition = position;
109
137
  scroller.logger.stat('after scroll adjustment' + diffLog);
110
138
  done();
@@ -1 +1 @@
1
- {"version":3,"file":"adjust.js","sourceRoot":"","sources":["../../../src/processes/adjust.ts"],"names":[],"mappings":"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","sourcesContent":["import { BaseProcessFactory, CommonProcess, ProcessStatus } from './misc/index';\r\nimport { Scroller } from '../scroller';\r\n\r\nexport default class Adjust extends BaseProcessFactory(CommonProcess.adjust) {\r\n\r\n static run(scroller: Scroller): void {\r\n const { workflow, viewport, state: { scrollState } } = scroller;\r\n\r\n scrollState.positionBeforeAdjust = viewport.scrollPosition;\r\n Adjust.setPaddings(scroller);\r\n scrollState.positionAfterAdjust = viewport.scrollPosition;\r\n\r\n // scroll position adjustments\r\n const position = Adjust.calculatePosition(scroller);\r\n\r\n // set new position using animation frame\r\n Adjust.setPosition(scroller, position, () =>\r\n workflow.call({\r\n process: Adjust.process,\r\n status: ProcessStatus.done\r\n })\r\n );\r\n }\r\n\r\n static setPaddings(scroller: Scroller): void {\r\n const { viewport, buffer, settings: { inverse }, state: { fetch } } = scroller;\r\n const firstItem = buffer.getFirstVisibleItem();\r\n const lastItem = buffer.getLastVisibleItem();\r\n let first, last;\r\n if (firstItem && lastItem) {\r\n first = firstItem.$index;\r\n last = lastItem.$index;\r\n } else {\r\n first = !isNaN(fetch.firstVisible.index) ? fetch.firstVisible.index : buffer.startIndex;\r\n last = first - 1;\r\n }\r\n const { forward, backward } = viewport.paddings;\r\n let index, bwdSize = 0, fwdSize = 0;\r\n\r\n // new backward and forward paddings size\r\n for (index = buffer.finiteAbsMinIndex; index < first; index++) {\r\n bwdSize += buffer.getSizeByIndex(index);\r\n }\r\n for (index = last + 1; index <= buffer.finiteAbsMaxIndex; index++) {\r\n fwdSize += buffer.getSizeByIndex(index);\r\n }\r\n\r\n // lack of items case\r\n const bufferSize = viewport.getScrollableSize() - forward.size - backward.size;\r\n const viewportSizeDiff = viewport.getSize() - (bwdSize + bufferSize + fwdSize);\r\n if (viewportSizeDiff > 0) {\r\n if (inverse) {\r\n bwdSize += viewportSizeDiff;\r\n } else {\r\n fwdSize += viewportSizeDiff;\r\n }\r\n scroller.logger.log(() =>\r\n inverse ? 'backward' : 'forward' + ` padding will be increased by ${viewportSizeDiff} to fill the viewport`\r\n );\r\n }\r\n\r\n backward.size = bwdSize;\r\n forward.size = fwdSize;\r\n\r\n scroller.logger.stat('after paddings adjustments');\r\n }\r\n\r\n static calculatePosition(scroller: Scroller): number {\r\n const { viewport, buffer, state: { fetch, render, scrollState } } = scroller;\r\n let position = viewport.paddings.backward.size;\r\n\r\n // increase the position to meet the expectation of the first visible item\r\n if (!isNaN(fetch.firstVisible.index) && !isNaN(buffer.firstIndex)) {\r\n scroller.logger.log(`first index = ${fetch.firstVisible.index}, delta = ${fetch.firstVisible.delta}`);\r\n const shouldCheckPreSizeExpectation = fetch.shouldCheckPreSizeExpectation(buffer.lastIndex);\r\n buffer.items.forEach(item => {\r\n // 1) shift of the buffered items before the first visible item\r\n if (item.$index < fetch.firstVisible.index) {\r\n position += item.size;\r\n return;\r\n }\r\n // 2) delta of the first visible item\r\n if (item.$index === fetch.firstVisible.index && fetch.firstVisible.delta) {\r\n position -= fetch.firstVisible.delta;\r\n }\r\n // 3) difference between expected and real sizes of fetched items after the first visible\r\n if (shouldCheckPreSizeExpectation && item.preSize && fetch.items.includes(item)) {\r\n position += item.size - item.preSize;\r\n }\r\n });\r\n }\r\n\r\n // slow fetch/render case\r\n if (scrollState.positionBeforeAsync !== null) {\r\n const diff = render.positionBefore - scrollState.positionBeforeAsync;\r\n if (diff !== 0) {\r\n scroller.logger.log(`shift position due to fetch-render difference (${diff})`);\r\n position += diff;\r\n }\r\n }\r\n\r\n // increase the position due to viewport's offset\r\n if (viewport.offset > 0 && (position || fetch.positions.before)) {\r\n position += viewport.offset;\r\n }\r\n\r\n return Math.round(position);\r\n }\r\n\r\n static setPosition(scroller: Scroller, position: number, done: () => void): void {\r\n const { state: { scrollState }, viewport, routines } = scroller;\r\n if (!scrollState.hasPositionChanged(position)) {\r\n return done();\r\n }\r\n scrollState.syntheticPosition = position;\r\n scrollState.syntheticFulfill = false;\r\n\r\n scrollState.cancelAnimation = routines.animate(() => {\r\n scrollState.cancelAnimation = null;\r\n const inertiaDiff = (scrollState.positionAfterAdjust as number) - viewport.scrollPosition;\r\n let diffLog = '';\r\n if (inertiaDiff > 0) {\r\n position -= inertiaDiff;\r\n scrollState.syntheticPosition = position;\r\n diffLog = ` (-${inertiaDiff})`;\r\n }\r\n scrollState.syntheticFulfill = true;\r\n viewport.scrollPosition = position;\r\n scroller.logger.stat('after scroll adjustment' + diffLog);\r\n done();\r\n });\r\n }\r\n\r\n}\r\n"]}
1
+ {"version":3,"file":"adjust.js","sourceRoot":"","sources":["../../../src/processes/adjust.ts"],"names":[],"mappings":"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","sourcesContent":["import { BaseProcessFactory, CommonProcess, ProcessStatus } from './misc/index';\r\nimport { Scroller } from '../scroller';\r\nimport End from './end';\r\n\r\nexport default class Adjust extends BaseProcessFactory(CommonProcess.adjust) {\r\n\r\n static run(scroller: Scroller): void {\r\n const { workflow, viewport, state: { scroll } } = scroller;\r\n\r\n scroll.positionBeforeAdjust = viewport.scrollPosition;\r\n Adjust.setPaddings(scroller);\r\n scroll.positionAfterAdjust = viewport.scrollPosition;\r\n\r\n // scroll position adjustments\r\n const position = Adjust.calculatePosition(scroller);\r\n\r\n // additional adjustment if the position can't be reached during the initial cycle\r\n Adjust.setAdditionalForwardPadding(scroller, position);\r\n\r\n // set new position using animation frame\r\n Adjust.setPosition(scroller, position, () =>\r\n workflow.call({\r\n process: Adjust.process,\r\n status: ProcessStatus.done\r\n })\r\n );\r\n }\r\n\r\n static setPaddings(scroller: Scroller): void {\r\n const { viewport, buffer, settings: { inverse }, state: { fetch } } = scroller;\r\n const firstItem = buffer.getFirstVisibleItem();\r\n const lastItem = buffer.getLastVisibleItem();\r\n let first, last;\r\n if (firstItem && lastItem) {\r\n first = firstItem.$index;\r\n last = lastItem.$index;\r\n } else {\r\n first = !isNaN(fetch.firstVisible.index) ? fetch.firstVisible.index : buffer.startIndex;\r\n last = first - 1;\r\n }\r\n const { forward, backward } = viewport.paddings;\r\n let index, bwdSize = 0, fwdSize = 0;\r\n\r\n // new backward and forward paddings size\r\n for (index = buffer.finiteAbsMinIndex; index < first; index++) {\r\n bwdSize += buffer.getSizeByIndex(index);\r\n }\r\n for (index = last + 1; index <= buffer.finiteAbsMaxIndex; index++) {\r\n fwdSize += buffer.getSizeByIndex(index);\r\n }\r\n\r\n // lack of items case\r\n const bufferSize = viewport.getScrollableSize() - forward.size - backward.size;\r\n const scrollSize = bwdSize + bufferSize + fwdSize;\r\n const viewportSizeDiff = viewport.getSize() - scrollSize;\r\n if (viewportSizeDiff > 0) {\r\n if (inverse) {\r\n bwdSize += viewportSizeDiff;\r\n } else {\r\n fwdSize += viewportSizeDiff;\r\n }\r\n scroller.logger.log(() =>\r\n inverse ? 'backward' : 'forward' + ` padding will be increased by ${viewportSizeDiff} to fill the viewport`\r\n );\r\n }\r\n\r\n backward.size = bwdSize;\r\n forward.size = fwdSize;\r\n\r\n scroller.logger.stat('after paddings adjustments');\r\n }\r\n\r\n static calculatePosition(scroller: Scroller): number {\r\n const { viewport, buffer, state: { fetch, render, scroll } } = scroller;\r\n let position = viewport.paddings.backward.size;\r\n\r\n // increase the position to meet the expectation of the first visible item\r\n if (!isNaN(fetch.firstVisible.index) && !isNaN(buffer.firstIndex)) {\r\n scroller.logger.log(`first index = ${fetch.firstVisible.index}, delta = ${fetch.firstVisible.delta}`);\r\n const shouldCheckPreSizeExpectation = fetch.shouldCheckPreSizeExpectation(buffer.lastIndex);\r\n buffer.items.forEach(item => {\r\n // 1) shift of the buffered items before the first visible item\r\n if (item.$index < fetch.firstVisible.index) {\r\n position += item.size;\r\n return;\r\n }\r\n // 2) delta of the first visible item\r\n if (item.$index === fetch.firstVisible.index && fetch.firstVisible.delta) {\r\n position -= fetch.firstVisible.delta;\r\n }\r\n // 3) difference between expected and real sizes of fetched items after the first visible\r\n if (shouldCheckPreSizeExpectation && item.preSize && fetch.items.includes(item)) {\r\n position += item.size - item.preSize;\r\n }\r\n });\r\n }\r\n\r\n // slow fetch/render case\r\n if (scroll.positionBeforeAsync !== null) {\r\n const diff = render.positionBefore - scroll.positionBeforeAsync;\r\n if (diff !== 0) {\r\n scroller.logger.log(`shift position due to fetch-render difference (${diff})`);\r\n position += diff;\r\n }\r\n }\r\n\r\n // increase the position due to viewport's offset\r\n if (viewport.offset > 0 && (position || fetch.positions.before)) {\r\n position += viewport.offset;\r\n }\r\n\r\n return Math.round(position);\r\n }\r\n\r\n static setAdditionalForwardPadding(scroller: Scroller, position: number): void {\r\n const { viewport, buffer, state: { cycle } } = scroller;\r\n if (!cycle.isInitial || !End.shouldContinueRun(scroller, null)) {\r\n return;\r\n }\r\n const diff = position - viewport.getMaxScrollPosition();\r\n if (diff <= 0) {\r\n return;\r\n }\r\n const last = buffer.getLastVisibleItem();\r\n if (!last) {\r\n return;\r\n }\r\n let size = 0;\r\n let index = last.$index + 1;\r\n while (size <= diff && index <= buffer.absMaxIndex) {\r\n size += buffer.getSizeByIndex(index++);\r\n }\r\n const shift = Math.min(size, diff);\r\n if (shift) {\r\n viewport.paddings.forward.size += shift;\r\n scroller.logger.log(`increase fwd padding due to lack of items (${diff} -> ${shift})`);\r\n }\r\n }\r\n\r\n static setPosition(scroller: Scroller, position: number, done: () => void): void {\r\n const { state: { scroll }, viewport, routines } = scroller;\r\n if (!scroll.hasPositionChanged(position)) {\r\n return done();\r\n }\r\n scroll.syntheticPosition = position;\r\n scroll.syntheticFulfill = false;\r\n\r\n scroll.cancelAnimation = routines.animate(() => {\r\n scroll.cancelAnimation = null;\r\n const inertiaDiff = (scroll.positionAfterAdjust as number) - viewport.scrollPosition;\r\n let diffLog = '';\r\n if (inertiaDiff > 0) {\r\n position -= inertiaDiff;\r\n scroll.syntheticPosition = position;\r\n diffLog = ` (-${inertiaDiff})`;\r\n }\r\n scroll.syntheticFulfill = true;\r\n viewport.scrollPosition = position;\r\n scroller.logger.stat('after scroll adjustment' + diffLog);\r\n done();\r\n });\r\n }\r\n\r\n}\r\n"]}
@@ -14,7 +14,8 @@ export default class End extends BaseProcessFactory(CommonProcess.end) {
14
14
  workflow.call({ process: End.process, status: ProcessStatus.done });
15
15
  return;
16
16
  }
17
- const next = End.finalizeInnerLoop(scroller, error);
17
+ const next = End.shouldContinueRun(scroller, error);
18
+ scroller.state.endInnerLoop();
18
19
  workflow.call({
19
20
  process: End.process,
20
21
  status: next ? ProcessStatus.next : ProcessStatus.done,
@@ -37,25 +38,26 @@ export default class End extends BaseProcessFactory(CommonProcess.end) {
37
38
  }
38
39
  }
39
40
  }
40
- static finalizeInnerLoop(scroller, error) {
41
- const { state, state: { cycle, clip, fetch } } = scroller;
42
- const next = !!cycle.interrupter || (error ? false : End.getNext(scroller));
43
- cycle.innerLoop.isInitial = false;
44
- fetch.stopSimulate();
45
- clip.reset(true);
46
- state.endInnerLoop();
47
- return next;
48
- }
49
- static getNext(scroller) {
50
- const { state: { fetch, render } } = scroller;
51
- if (fetch.simulate && fetch.isCheck && !render.noSize) { // Adapter.check
41
+ static shouldContinueRun(scroller, error) {
42
+ const { cycle, fetch, render } = scroller.state;
43
+ // Adapter.reload or Adapter.reset
44
+ if (cycle.interrupter) {
45
+ return true;
46
+ }
47
+ // critical error
48
+ if (error) {
49
+ return false;
50
+ }
51
+ // Adapter.check
52
+ if (fetch.simulate && fetch.isCheck && !render.noSize) {
52
53
  return true;
53
54
  }
54
- if (fetch.simulate && fetch.doRemove) { // Adapter.remove or Adapter.update with clip
55
+ // Adapter.remove or Adapter.update with clip
56
+ if (fetch.simulate && fetch.doRemove) {
55
57
  return true;
56
58
  }
57
- if ( // common inner loop (App start, Scroll, Adapter.clip) accompanied by fetch
58
- !fetch.simulate && ((fetch.hasNewItems && !render.noSize) || fetch.hasAnotherPack)) {
59
+ // common inner loop (App start, scroll, Adapter.clip) with full fetch
60
+ if (!fetch.simulate && ((fetch.hasNewItems && !render.noSize) || fetch.hasAnotherPack)) {
59
61
  return true;
60
62
  }
61
63
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"end.js","sourceRoot":"","sources":["../../../src/processes/end.ts"],"names":[],"mappings":"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","sourcesContent":["import { BaseProcessFactory, CommonProcess, ProcessStatus } from './misc/index';\nimport { Scroller } from '../scroller';\nimport { Direction } from '../inputs/index';\nimport { EMPTY_ITEM } from '../classes/adapter/props';\nimport { ScrollerWorkflow } from '../interfaces/index';\n\nconst isInterrupted = ({ call }: ScrollerWorkflow): boolean => !!call.interrupted;\n\nexport default class End extends BaseProcessFactory(CommonProcess.end) {\n\n static run(scroller: Scroller, { error }: { error?: unknown } = {}): void {\n const { workflow, state: { cycle: { interrupter } } } = scroller;\n\n if (!error && !interrupter) {\n // set out params accessible via Adapter\n End.calculateParams(scroller, workflow);\n }\n\n // explicit interruption for we don't want to go through the inner loop finalizing\n if (isInterrupted(workflow)) {\n workflow.call({ process: End.process, status: ProcessStatus.done });\n return;\n }\n\n const next = End.finalizeInnerLoop(scroller, error);\n\n workflow.call({\n process: End.process,\n status: next ? ProcessStatus.next : ProcessStatus.done,\n payload: { ...(interrupter ? { process: interrupter } : {}) }\n });\n }\n\n static calculateParams(scroller: Scroller, workflow: ScrollerWorkflow): void {\n const { adapter, viewport, buffer: { items } } = scroller;\n\n if (adapter.wanted.firstVisible) {\n const { item } = viewport.getEdgeVisibleItem(items, Direction.backward);\n if (!item || item.element !== adapter.firstVisible.element) {\n adapter.firstVisible = item ? item.get() : EMPTY_ITEM;\n }\n }\n\n // the workflow can be interrupter on firstVisible change\n if (adapter.wanted.lastVisible && !isInterrupted(workflow)) {\n const { item } = viewport.getEdgeVisibleItem(items, Direction.forward);\n if (!item || item.element !== adapter.lastVisible.element) {\n adapter.lastVisible = item ? item.get() : EMPTY_ITEM;\n }\n }\n }\n\n static finalizeInnerLoop(scroller: Scroller, error: unknown): boolean {\n const { state, state: { cycle, clip, fetch } } = scroller;\n const next = !!cycle.interrupter || (error ? false : End.getNext(scroller));\n cycle.innerLoop.isInitial = false;\n fetch.stopSimulate();\n clip.reset(true);\n state.endInnerLoop();\n return next;\n }\n\n static getNext(scroller: Scroller): boolean {\n const { state: { fetch, render } } = scroller;\n if (fetch.simulate && fetch.isCheck && !render.noSize) { // Adapter.check\n return true;\n }\n if (fetch.simulate && fetch.doRemove) { // Adapter.remove or Adapter.update with clip\n return true;\n }\n if ( // common inner loop (App start, Scroll, Adapter.clip) accompanied by fetch\n !fetch.simulate && ((fetch.hasNewItems && !render.noSize) || fetch.hasAnotherPack)\n ) {\n return true;\n }\n return false;\n }\n\n}\n"]}
1
+ {"version":3,"file":"end.js","sourceRoot":"","sources":["../../../src/processes/end.ts"],"names":[],"mappings":"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","sourcesContent":["import { BaseProcessFactory, CommonProcess, ProcessStatus } from './misc/index';\nimport { Scroller } from '../scroller';\nimport { Direction } from '../inputs/index';\nimport { EMPTY_ITEM } from '../classes/adapter/props';\nimport { ScrollerWorkflow } from '../interfaces/index';\n\nconst isInterrupted = ({ call }: ScrollerWorkflow): boolean => !!call.interrupted;\n\nexport default class End extends BaseProcessFactory(CommonProcess.end) {\n\n static run(scroller: Scroller, { error }: { error?: unknown } = {}): void {\n const { workflow, state: { cycle: { interrupter } } } = scroller;\n\n if (!error && !interrupter) {\n // set out params accessible via Adapter\n End.calculateParams(scroller, workflow);\n }\n\n // explicit interruption for we don't want to go through the inner loop finalizing\n if (isInterrupted(workflow)) {\n workflow.call({ process: End.process, status: ProcessStatus.done });\n return;\n }\n\n const next = End.shouldContinueRun(scroller, error);\n scroller.state.endInnerLoop();\n\n workflow.call({\n process: End.process,\n status: next ? ProcessStatus.next : ProcessStatus.done,\n payload: { ...(interrupter ? { process: interrupter } : {}) }\n });\n }\n\n static calculateParams(scroller: Scroller, workflow: ScrollerWorkflow): void {\n const { adapter, viewport, buffer: { items } } = scroller;\n\n if (adapter.wanted.firstVisible) {\n const { item } = viewport.getEdgeVisibleItem(items, Direction.backward);\n if (!item || item.element !== adapter.firstVisible.element) {\n adapter.firstVisible = item ? item.get() : EMPTY_ITEM;\n }\n }\n\n // the workflow can be interrupter on firstVisible change\n if (adapter.wanted.lastVisible && !isInterrupted(workflow)) {\n const { item } = viewport.getEdgeVisibleItem(items, Direction.forward);\n if (!item || item.element !== adapter.lastVisible.element) {\n adapter.lastVisible = item ? item.get() : EMPTY_ITEM;\n }\n }\n }\n\n static shouldContinueRun(scroller: Scroller, error: unknown): boolean {\n const { cycle, fetch, render } = scroller.state;\n // Adapter.reload or Adapter.reset\n if (cycle.interrupter) {\n return true;\n }\n // critical error\n if (error) {\n return false;\n }\n // Adapter.check\n if (fetch.simulate && fetch.isCheck && !render.noSize) {\n return true;\n }\n // Adapter.remove or Adapter.update with clip\n if (fetch.simulate && fetch.doRemove) {\n return true;\n }\n // common inner loop (App start, scroll, Adapter.clip) with full fetch\n if (!fetch.simulate && ((fetch.hasNewItems && !render.noSize) || fetch.hasAnotherPack)) {\n return true;\n }\n return false;\n }\n\n}\n"]}
@@ -32,9 +32,9 @@ export default class Fetch extends BaseProcessFactory(CommonProcess.fetch) {
32
32
  }
33
33
  }
34
34
  else {
35
- const { state: { scrollState, fetch }, viewport } = scroller;
36
- if (scrollState.positionBeforeAsync === null) {
37
- scrollState.positionBeforeAsync = viewport.scrollPosition;
35
+ const { state: { scroll, fetch }, viewport } = scroller;
36
+ if (scroll.positionBeforeAsync === null) {
37
+ scroll.positionBeforeAsync = viewport.scrollPosition;
38
38
  }
39
39
  fetch.cancel = () => {
40
40
  box.success = () => null;
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../../src/processes/fetch.ts"],"names":[],"mappings":"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","sourcesContent":["import { BaseProcessFactory, CommonProcess, ProcessStatus } from './misc/index';\nimport { Scroller } from '../scroller';\nimport { ObservableLike } from '../interfaces/index';\n\ninterface Immediate {\n data: unknown[] | null;\n error: unknown | null;\n isError: boolean;\n}\n\ntype FetchGetResult = Immediate | Promise<unknown>;\n\ninterface FetchBox {\n success: (value: unknown[]) => void;\n fail: (value: unknown) => void;\n}\n\nexport default class Fetch extends BaseProcessFactory(CommonProcess.fetch) {\n\n static run(scroller: Scroller): void {\n const { workflow } = scroller;\n\n const box = {\n success: (data: unknown[]) => {\n scroller.logger.log(() =>\n `resolved ${data.length} items ` +\n `(index = ${scroller.state.fetch.index}, count = ${scroller.state.fetch.count})`\n );\n scroller.state.fetch.newItemsData = data;\n workflow.call({\n process: Fetch.process,\n status: ProcessStatus.next\n });\n },\n fail: (error: unknown) =>\n workflow.call({\n process: Fetch.process,\n status: ProcessStatus.error,\n payload: { error }\n })\n };\n\n const result = Fetch.get(scroller);\n Fetch.complete(scroller, box, result);\n }\n\n static complete(scroller: Scroller, box: FetchBox, result: FetchGetResult): void {\n if (Object.prototype.hasOwnProperty.call(result, 'data')) {\n const { data, error, isError } = result as Immediate;\n if (!isError) {\n box.success(data || []);\n } else {\n box.fail(error);\n }\n } else {\n const { state: { scrollState, fetch }, viewport } = scroller;\n if (scrollState.positionBeforeAsync === null) {\n scrollState.positionBeforeAsync = viewport.scrollPosition;\n }\n fetch.cancel = () => {\n box.success = () => null;\n box.fail = () => null;\n };\n (result as Promise<unknown[]>).then(\n (data) => box.success(data),\n (error) => box.fail(error)\n );\n }\n }\n\n static get(scroller: Scroller): FetchGetResult {\n const _get = scroller.datasource.get;\n const { index, count } = scroller.state.fetch;\n\n let immediateData, immediateError;\n let resolve: (value: unknown) => void, reject: (value: unknown) => void;\n\n const done = (data: unknown[]) => {\n if (!resolve) {\n immediateData = data || null;\n return;\n }\n resolve(data);\n };\n const fail = (error: unknown) => {\n if (!reject) {\n immediateError = error || null;\n return;\n }\n reject(error);\n };\n\n const getResult = _get(index, count, done, fail);\n\n if (getResult && typeof getResult === 'object' && getResult !== null) {\n if (typeof (getResult as PromiseLike<unknown>).then === 'function') {\n return getResult as Promise<unknown>;\n } else if (typeof (getResult as ObservableLike).subscribe === 'function') {\n const sub = (getResult as ObservableLike).subscribe(done, fail, () => {\n if (sub && typeof sub === 'object' && typeof sub.unsubscribe === 'function') {\n sub.unsubscribe();\n }\n });\n }\n }\n\n if (immediateData || immediateError) { // callback case or immediate observable\n return {\n data: immediateError ? null : (immediateData || []),\n error: immediateError,\n isError: !!immediateError\n };\n }\n\n return new Promise((_resolve, _reject) => {\n resolve = _resolve;\n reject = _reject;\n });\n }\n\n}\n"]}
1
+ {"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../../src/processes/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAiBhF,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,kBAAkB,CAAC,aAAa,CAAC,KAAK,CAAC;IAExE,MAAM,CAAC,GAAG,CAAC,QAAkB;QAC3B,MAAM,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC;QAE9B,MAAM,GAAG,GAAG;YACV,OAAO,EAAE,CAAC,IAAe,EAAE,EAAE;gBAC3B,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CACvB,YAAY,IAAI,CAAC,MAAM,SAAS;oBAChC,YAAY,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,aAAa,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,CACjF,CAAC;gBACF,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;gBACzC,QAAQ,CAAC,IAAI,CAAC;oBACZ,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,MAAM,EAAE,aAAa,CAAC,IAAI;iBAC3B,CAAC,CAAC;YACL,CAAC;YACD,IAAI,EAAE,CAAC,KAAc,EAAE,EAAE,CACvB,QAAQ,CAAC,IAAI,CAAC;gBACZ,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,MAAM,EAAE,aAAa,CAAC,KAAK;gBAC3B,OAAO,EAAE,EAAE,KAAK,EAAE;aACnB,CAAC;SACL,CAAC;QAEF,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACnC,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,QAAkB,EAAE,GAAa,EAAE,MAAsB;QACvE,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;YACxD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAmB,CAAC;YACrD,IAAI,CAAC,OAAO,EAAE;gBACZ,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;aACzB;iBAAM;gBACL,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACjB;SACF;aAAM;YACL,MAAM,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC;YACxD,IAAI,MAAM,CAAC,mBAAmB,KAAK,IAAI,EAAE;gBACvC,MAAM,CAAC,mBAAmB,GAAG,QAAQ,CAAC,cAAc,CAAC;aACtD;YACD,KAAK,CAAC,MAAM,GAAG,GAAG,EAAE;gBAClB,GAAG,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC;gBACzB,GAAG,CAAC,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC;YACxB,CAAC,CAAC;YACD,MAA6B,CAAC,IAAI,CACjC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAC3B,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAC3B,CAAC;SACH;IACH,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,QAAkB;QAC3B,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC;QACrC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;QAE9C,IAAI,aAAa,EAAE,cAAc,CAAC;QAClC,IAAI,OAAiC,EAAE,MAAgC,CAAC;QAExE,MAAM,IAAI,GAAG,CAAC,IAAe,EAAE,EAAE;YAC/B,IAAI,CAAC,OAAO,EAAE;gBACZ,aAAa,GAAG,IAAI,IAAI,IAAI,CAAC;gBAC7B,OAAO;aACR;YACD,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CAAC;QACF,MAAM,IAAI,GAAG,CAAC,KAAc,EAAE,EAAE;YAC9B,IAAI,CAAC,MAAM,EAAE;gBACX,cAAc,GAAG,KAAK,IAAI,IAAI,CAAC;gBAC/B,OAAO;aACR;YACD,MAAM,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC;QAEF,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAEjD,IAAI,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,IAAI,EAAE;YACpE,IAAI,OAAQ,SAAkC,CAAC,IAAI,KAAK,UAAU,EAAE;gBAClE,OAAO,SAA6B,CAAC;aACtC;iBAAM,IAAI,OAAQ,SAA4B,CAAC,SAAS,KAAK,UAAU,EAAE;gBACxE,MAAM,GAAG,GAAI,SAA4B,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE;oBACnE,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,WAAW,KAAK,UAAU,EAAE;wBAC3E,GAAG,CAAC,WAAW,EAAE,CAAC;qBACnB;gBACH,CAAC,CAAC,CAAC;aACJ;SACF;QAED,IAAI,aAAa,IAAI,cAAc,EAAE,EAAE,wCAAwC;YAC7E,OAAO;gBACL,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,IAAI,EAAE,CAAC;gBACnD,KAAK,EAAE,cAAc;gBACrB,OAAO,EAAE,CAAC,CAAC,cAAc;aAC1B,CAAC;SACH;QAED,OAAO,IAAI,OAAO,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE;YACvC,OAAO,GAAG,QAAQ,CAAC;YACnB,MAAM,GAAG,OAAO,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC;CAEF","sourcesContent":["import { BaseProcessFactory, CommonProcess, ProcessStatus } from './misc/index';\nimport { Scroller } from '../scroller';\nimport { ObservableLike } from '../interfaces/index';\n\ninterface Immediate {\n data: unknown[] | null;\n error: unknown | null;\n isError: boolean;\n}\n\ntype FetchGetResult = Immediate | Promise<unknown>;\n\ninterface FetchBox {\n success: (value: unknown[]) => void;\n fail: (value: unknown) => void;\n}\n\nexport default class Fetch extends BaseProcessFactory(CommonProcess.fetch) {\n\n static run(scroller: Scroller): void {\n const { workflow } = scroller;\n\n const box = {\n success: (data: unknown[]) => {\n scroller.logger.log(() =>\n `resolved ${data.length} items ` +\n `(index = ${scroller.state.fetch.index}, count = ${scroller.state.fetch.count})`\n );\n scroller.state.fetch.newItemsData = data;\n workflow.call({\n process: Fetch.process,\n status: ProcessStatus.next\n });\n },\n fail: (error: unknown) =>\n workflow.call({\n process: Fetch.process,\n status: ProcessStatus.error,\n payload: { error }\n })\n };\n\n const result = Fetch.get(scroller);\n Fetch.complete(scroller, box, result);\n }\n\n static complete(scroller: Scroller, box: FetchBox, result: FetchGetResult): void {\n if (Object.prototype.hasOwnProperty.call(result, 'data')) {\n const { data, error, isError } = result as Immediate;\n if (!isError) {\n box.success(data || []);\n } else {\n box.fail(error);\n }\n } else {\n const { state: { scroll, fetch }, viewport } = scroller;\n if (scroll.positionBeforeAsync === null) {\n scroll.positionBeforeAsync = viewport.scrollPosition;\n }\n fetch.cancel = () => {\n box.success = () => null;\n box.fail = () => null;\n };\n (result as Promise<unknown[]>).then(\n (data) => box.success(data),\n (error) => box.fail(error)\n );\n }\n }\n\n static get(scroller: Scroller): FetchGetResult {\n const _get = scroller.datasource.get;\n const { index, count } = scroller.state.fetch;\n\n let immediateData, immediateError;\n let resolve: (value: unknown) => void, reject: (value: unknown) => void;\n\n const done = (data: unknown[]) => {\n if (!resolve) {\n immediateData = data || null;\n return;\n }\n resolve(data);\n };\n const fail = (error: unknown) => {\n if (!reject) {\n immediateError = error || null;\n return;\n }\n reject(error);\n };\n\n const getResult = _get(index, count, done, fail);\n\n if (getResult && typeof getResult === 'object' && getResult !== null) {\n if (typeof (getResult as PromiseLike<unknown>).then === 'function') {\n return getResult as Promise<unknown>;\n } else if (typeof (getResult as ObservableLike).subscribe === 'function') {\n const sub = (getResult as ObservableLike).subscribe(done, fail, () => {\n if (sub && typeof sub === 'object' && typeof sub.unsubscribe === 'function') {\n sub.unsubscribe();\n }\n });\n }\n }\n\n if (immediateData || immediateError) { // callback case or immediate observable\n return {\n data: immediateError ? null : (immediateData || []),\n error: immediateError,\n isError: !!immediateError\n };\n }\n\n return new Promise((_resolve, _reject) => {\n resolve = _resolve;\n reject = _reject;\n });\n }\n\n}\n"]}
@@ -2,10 +2,10 @@ import { BaseProcessFactory, CommonProcess, AdapterProcess, ProcessStatus } from
2
2
  const initProcesses = [CommonProcess.init, AdapterProcess.reset, AdapterProcess.reload];
3
3
  export default class Init extends BaseProcessFactory(CommonProcess.init) {
4
4
  static run(scroller, process) {
5
- const { state: { cycle }, workflow } = scroller;
5
+ const { state, workflow } = scroller;
6
6
  const isInitial = initProcesses.includes(process);
7
7
  scroller.logger.logCycle(true);
8
- cycle.start(isInitial, process);
8
+ state.startWorkflowCycle(isInitial, process);
9
9
  workflow.call({
10
10
  process: Init.process,
11
11
  status: ProcessStatus.next
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/processes/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAIhG,MAAM,aAAa,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,cAAc,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;AAExF,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,kBAAkB,CAAC,aAAa,CAAC,IAAI,CAAC;IAEtE,MAAM,CAAC,GAAG,CAAC,QAAkB,EAAE,OAAoB;QACjD,MAAM,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC;QAChD,MAAM,SAAS,GAAG,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAClD,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC/B,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAChC,QAAQ,CAAC,IAAI,CAAC;YACZ,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,aAAa,CAAC,IAAI;SAC3B,CAAC,CAAC;IACL,CAAC;CAEF","sourcesContent":["import { BaseProcessFactory, CommonProcess, AdapterProcess, ProcessStatus } from './misc/index';\nimport { Scroller } from '../scroller';\nimport { ProcessName } from '../interfaces/index';\n\nconst initProcesses = [CommonProcess.init, AdapterProcess.reset, AdapterProcess.reload];\n\nexport default class Init extends BaseProcessFactory(CommonProcess.init) {\n\n static run(scroller: Scroller, process: ProcessName): void {\n const { state: { cycle }, workflow } = scroller;\n const isInitial = initProcesses.includes(process);\n scroller.logger.logCycle(true);\n cycle.start(isInitial, process);\n workflow.call({\n process: Init.process,\n status: ProcessStatus.next\n });\n }\n\n}\n"]}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/processes/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAIhG,MAAM,aAAa,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,cAAc,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;AAExF,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,kBAAkB,CAAC,aAAa,CAAC,IAAI,CAAC;IAEtE,MAAM,CAAC,GAAG,CAAC,QAAkB,EAAE,OAAoB;QACjD,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC;QACrC,MAAM,SAAS,GAAG,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAClD,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC/B,KAAK,CAAC,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC7C,QAAQ,CAAC,IAAI,CAAC;YACZ,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,aAAa,CAAC,IAAI;SAC3B,CAAC,CAAC;IACL,CAAC;CAEF","sourcesContent":["import { BaseProcessFactory, CommonProcess, AdapterProcess, ProcessStatus } from './misc/index';\nimport { Scroller } from '../scroller';\nimport { ProcessName } from '../interfaces/index';\n\nconst initProcesses = [CommonProcess.init, AdapterProcess.reset, AdapterProcess.reload];\n\nexport default class Init extends BaseProcessFactory(CommonProcess.init) {\n\n static run(scroller: Scroller, process: ProcessName): void {\n const { state, workflow } = scroller;\n const isInitial = initProcesses.includes(process);\n scroller.logger.logCycle(true);\n state.startWorkflowCycle(isInitial, process);\n workflow.call({\n process: Init.process,\n status: ProcessStatus.next\n });\n }\n\n}\n"]}