vscroll 1.4.0 → 1.4.4

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 (132) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +17 -16
  3. package/dist/bundles/vscroll.esm5.js +367 -286
  4. package/dist/bundles/vscroll.esm5.js.map +1 -1
  5. package/dist/bundles/vscroll.esm5.min.js +2 -2
  6. package/dist/bundles/vscroll.esm5.min.js.map +1 -1
  7. package/dist/bundles/vscroll.esm6.js +325 -244
  8. package/dist/bundles/vscroll.esm6.js.map +1 -1
  9. package/dist/bundles/vscroll.esm6.min.js +2 -2
  10. package/dist/bundles/vscroll.esm6.min.js.map +1 -1
  11. package/dist/bundles/vscroll.umd.js +370 -289
  12. package/dist/bundles/vscroll.umd.js.map +1 -1
  13. package/dist/bundles/vscroll.umd.min.js +2 -2
  14. package/dist/bundles/vscroll.umd.min.js.map +1 -1
  15. package/dist/esm2015/classes/buffer/checkCall.js.map +1 -1
  16. package/dist/esm2015/classes/domRoutines.js +110 -41
  17. package/dist/esm2015/classes/domRoutines.js.map +1 -1
  18. package/dist/esm2015/classes/item.js +4 -0
  19. package/dist/esm2015/classes/item.js.map +1 -1
  20. package/dist/esm2015/classes/logger.js +2 -2
  21. package/dist/esm2015/classes/logger.js.map +1 -1
  22. package/dist/esm2015/classes/paddings.js +7 -5
  23. package/dist/esm2015/classes/paddings.js.map +1 -1
  24. package/dist/esm2015/classes/state/cycle.js +7 -6
  25. package/dist/esm2015/classes/state/cycle.js.map +1 -1
  26. package/dist/esm2015/classes/state/render.js +1 -1
  27. package/dist/esm2015/classes/state/render.js.map +1 -1
  28. package/dist/esm2015/classes/state/scroll.js +6 -6
  29. package/dist/esm2015/classes/state/scroll.js.map +1 -1
  30. package/dist/esm2015/classes/state.js +23 -15
  31. package/dist/esm2015/classes/state.js.map +1 -1
  32. package/dist/esm2015/classes/viewport.js +15 -44
  33. package/dist/esm2015/classes/viewport.js.map +1 -1
  34. package/dist/esm2015/interfaces/index.js.map +1 -1
  35. package/dist/esm2015/interfaces/routines.js +2 -0
  36. package/dist/esm2015/interfaces/routines.js.map +1 -0
  37. package/dist/esm2015/interfaces/state.js.map +1 -1
  38. package/dist/esm2015/processes/adapter/reload.js +1 -1
  39. package/dist/esm2015/processes/adapter/reload.js.map +1 -1
  40. package/dist/esm2015/processes/adjust.js +44 -15
  41. package/dist/esm2015/processes/adjust.js.map +1 -1
  42. package/dist/esm2015/processes/end.js +18 -16
  43. package/dist/esm2015/processes/end.js.map +1 -1
  44. package/dist/esm2015/processes/fetch.js +3 -3
  45. package/dist/esm2015/processes/fetch.js.map +1 -1
  46. package/dist/esm2015/processes/init.js +2 -2
  47. package/dist/esm2015/processes/init.js.map +1 -1
  48. package/dist/esm2015/processes/render.js +8 -11
  49. package/dist/esm2015/processes/render.js.map +1 -1
  50. package/dist/esm2015/processes/scroll.js +21 -21
  51. package/dist/esm2015/processes/scroll.js.map +1 -1
  52. package/dist/esm2015/scroller.js +3 -3
  53. package/dist/esm2015/scroller.js.map +1 -1
  54. package/dist/esm2015/version.js +1 -1
  55. package/dist/esm2015/version.js.map +1 -1
  56. package/dist/esm2015/workflow.js +5 -6
  57. package/dist/esm2015/workflow.js.map +1 -1
  58. package/dist/esm5/classes/buffer/checkCall.js.map +1 -1
  59. package/dist/esm5/classes/buffer/defaultSize.js +1 -1
  60. package/dist/esm5/classes/buffer/defaultSize.js.map +1 -1
  61. package/dist/esm5/classes/buffer.js +7 -7
  62. package/dist/esm5/classes/buffer.js.map +1 -1
  63. package/dist/esm5/classes/domRoutines.js +113 -41
  64. package/dist/esm5/classes/domRoutines.js.map +1 -1
  65. package/dist/esm5/classes/item.js +4 -0
  66. package/dist/esm5/classes/item.js.map +1 -1
  67. package/dist/esm5/classes/logger.js +7 -7
  68. package/dist/esm5/classes/logger.js.map +1 -1
  69. package/dist/esm5/classes/paddings.js +7 -5
  70. package/dist/esm5/classes/paddings.js.map +1 -1
  71. package/dist/esm5/classes/state/cycle.js +7 -6
  72. package/dist/esm5/classes/state/cycle.js.map +1 -1
  73. package/dist/esm5/classes/state/render.js +1 -1
  74. package/dist/esm5/classes/state/render.js.map +1 -1
  75. package/dist/esm5/classes/state/scroll.js +11 -11
  76. package/dist/esm5/classes/state/scroll.js.map +1 -1
  77. package/dist/esm5/classes/state.js +23 -15
  78. package/dist/esm5/classes/state.js.map +1 -1
  79. package/dist/esm5/classes/viewport.js +16 -46
  80. package/dist/esm5/classes/viewport.js.map +1 -1
  81. package/dist/esm5/inputs/validation.js +2 -2
  82. package/dist/esm5/inputs/validation.js.map +1 -1
  83. package/dist/esm5/interfaces/index.js.map +1 -1
  84. package/dist/esm5/interfaces/routines.js +2 -0
  85. package/dist/esm5/interfaces/routines.js.map +1 -0
  86. package/dist/esm5/interfaces/state.js.map +1 -1
  87. package/dist/esm5/processes/adapter/append.js +1 -1
  88. package/dist/esm5/processes/adapter/append.js.map +1 -1
  89. package/dist/esm5/processes/adapter/fix.js +1 -1
  90. package/dist/esm5/processes/adapter/fix.js.map +1 -1
  91. package/dist/esm5/processes/adapter/insert.js +1 -1
  92. package/dist/esm5/processes/adapter/insert.js.map +1 -1
  93. package/dist/esm5/processes/adapter/reload.js +1 -1
  94. package/dist/esm5/processes/adapter/reload.js.map +1 -1
  95. package/dist/esm5/processes/adapter/remove.js +1 -1
  96. package/dist/esm5/processes/adapter/remove.js.map +1 -1
  97. package/dist/esm5/processes/adjust.js +44 -15
  98. package/dist/esm5/processes/adjust.js.map +1 -1
  99. package/dist/esm5/processes/end.js +18 -16
  100. package/dist/esm5/processes/end.js.map +1 -1
  101. package/dist/esm5/processes/fetch.js +3 -3
  102. package/dist/esm5/processes/fetch.js.map +1 -1
  103. package/dist/esm5/processes/init.js +2 -2
  104. package/dist/esm5/processes/init.js.map +1 -1
  105. package/dist/esm5/processes/preFetch.js +1 -1
  106. package/dist/esm5/processes/preFetch.js.map +1 -1
  107. package/dist/esm5/processes/render.js +8 -11
  108. package/dist/esm5/processes/render.js.map +1 -1
  109. package/dist/esm5/processes/scroll.js +21 -21
  110. package/dist/esm5/processes/scroll.js.map +1 -1
  111. package/dist/esm5/scroller.js +3 -3
  112. package/dist/esm5/scroller.js.map +1 -1
  113. package/dist/esm5/version.js +1 -1
  114. package/dist/esm5/version.js.map +1 -1
  115. package/dist/esm5/workflow.js +10 -13
  116. package/dist/esm5/workflow.js.map +1 -1
  117. package/dist/typings/classes/domRoutines.d.ts +25 -11
  118. package/dist/typings/classes/item.d.ts +1 -0
  119. package/dist/typings/classes/logger.d.ts +1 -1
  120. package/dist/typings/classes/paddings.d.ts +2 -2
  121. package/dist/typings/classes/state/cycle.d.ts +1 -1
  122. package/dist/typings/classes/state/render.d.ts +1 -1
  123. package/dist/typings/classes/state/scroll.d.ts +4 -4
  124. package/dist/typings/classes/state.d.ts +6 -3
  125. package/dist/typings/classes/viewport.d.ts +3 -6
  126. package/dist/typings/interfaces/index.d.ts +3 -2
  127. package/dist/typings/interfaces/routines.d.ts +154 -0
  128. package/dist/typings/interfaces/state.d.ts +2 -15
  129. package/dist/typings/processes/adjust.d.ts +1 -0
  130. package/dist/typings/processes/end.d.ts +1 -2
  131. package/dist/typings/workflow.d.ts +1 -1
  132. package/package.json +17 -17
@@ -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.renderTimer) {
27
- clearTimeout(render.renderTimer);
28
- render.renderTimer = 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.cleanupTimers();
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,WAAW,EAAE;YACtB,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACjC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC;SAC3B;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,aAAa,EAAE,CAAC;IACnC,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.renderTimer) {\r\n clearTimeout(render.renderTimer);\r\n render.renderTimer = 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.cleanupTimers();\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"]}
@@ -1,34 +1,18 @@
1
1
  import { Paddings } from './paddings';
2
2
  import { Direction } from '../inputs/index';
3
3
  export class Viewport {
4
- constructor(element, settings, routines, state, logger) {
5
- this.element = element;
4
+ constructor(settings, routines, state, logger) {
6
5
  this.settings = settings;
7
6
  this.routines = routines;
8
7
  this.state = state;
9
8
  this.logger = logger;
10
- this.disabled = false;
11
- if (settings.windowViewport) {
12
- this.hostElement = document.documentElement;
13
- this.scrollEventReceiver = window;
14
- }
15
- else {
16
- this.hostElement = settings.viewport || this.element.parentElement;
17
- this.scrollEventReceiver = this.hostElement;
18
- }
19
- this.paddings = new Paddings(this.element, this.routines, settings);
20
- if (settings.windowViewport && 'scrollRestoration' in history) {
21
- history.scrollRestoration = 'manual';
22
- }
23
- if (settings.dismissOverflowAnchor) {
24
- this.hostElement.style.overflowAnchor = 'none';
25
- }
9
+ this.paddings = new Paddings(this.routines, settings);
26
10
  }
27
11
  reset(startIndex) {
28
12
  this.setOffset();
29
13
  this.paddings.reset(this.getSize(), startIndex, this.offset);
30
14
  this.scrollPosition = this.paddings.backward.size || 0;
31
- this.state.scrollState.reset();
15
+ this.state.scroll.reset();
32
16
  }
33
17
  setPosition(value) {
34
18
  const oldPosition = this.scrollPosition;
@@ -36,7 +20,7 @@ export class Viewport {
36
20
  this.logger.log(() => ['setting scroll position at', value, '[cancelled]']);
37
21
  return value;
38
22
  }
39
- this.routines.setScrollPosition(this.hostElement, value);
23
+ this.routines.setScrollPosition(value);
40
24
  const position = this.scrollPosition;
41
25
  this.logger.log(() => [
42
26
  'setting scroll position at', position, ...(position !== value ? [`(${value})`] : [])
@@ -44,44 +28,31 @@ export class Viewport {
44
28
  return position;
45
29
  }
46
30
  get scrollPosition() {
47
- return this.routines.getScrollPosition(this.hostElement);
31
+ return this.routines.getScrollPosition();
48
32
  }
49
33
  set scrollPosition(value) {
50
34
  this.setPosition(value);
51
35
  }
52
- disableScrollForOneLoop() {
53
- if (this.disabled) {
54
- return;
55
- }
56
- const { style } = this.hostElement;
57
- if (style.overflowY === 'hidden') {
58
- return;
59
- }
60
- this.disabled = true;
61
- const overflow = style.overflowY;
62
- setTimeout(() => {
63
- this.disabled = false;
64
- style.overflowY = overflow;
65
- });
66
- style.overflowY = 'hidden';
67
- }
68
36
  getSize() {
69
- return this.routines.getSize(this.hostElement, true);
37
+ return this.routines.getViewportSize();
70
38
  }
71
39
  getScrollableSize() {
72
- return this.routines.getSize(this.element);
40
+ return this.routines.getScrollerSize();
41
+ }
42
+ getMaxScrollPosition() {
43
+ return this.getScrollableSize() - this.getSize();
73
44
  }
74
45
  getBufferPadding() {
75
46
  return this.getSize() * this.settings.padding;
76
47
  }
77
48
  getEdge(direction) {
78
- return this.routines.getEdge(this.hostElement, direction, true);
49
+ return this.routines.getViewportEdge(direction);
79
50
  }
80
51
  setOffset() {
81
- this.offset = this.routines.getOffset(this.element);
82
- if (!this.settings.windowViewport) {
83
- this.offset -= this.routines.getOffset(this.hostElement);
84
- }
52
+ this.offset = this.routines.getOffset();
53
+ }
54
+ findItemElementById(id) {
55
+ return this.routines.findItemElement(id);
85
56
  }
86
57
  getEdgeVisibleItem(items, direction) {
87
58
  const bwd = direction === Direction.backward;
@@ -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 private disabled: boolean;\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 this.disabled = false;\n\n if (settings.windowViewport) {\n this.hostElement = document.documentElement as HTMLElement;\n this.scrollEventReceiver = window;\n } else {\n this.hostElement = settings.viewport || this.element.parentElement as HTMLElement;\n this.scrollEventReceiver = this.hostElement;\n }\n\n this.paddings = new Paddings(this.element, this.routines, settings);\n\n if (settings.windowViewport && 'scrollRestoration' in history) {\n history.scrollRestoration = 'manual';\n }\n\n if (settings.dismissOverflowAnchor) {\n this.hostElement.style.overflowAnchor = 'none';\n }\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 disableScrollForOneLoop(): void {\n if (this.disabled) {\n return;\n }\n const { style } = this.hostElement;\n if (style.overflowY === 'hidden') {\n return;\n }\n this.disabled = true;\n const overflow = style.overflowY;\n setTimeout(() => {\n this.disabled = false;\n style.overflowY = overflow;\n });\n style.overflowY = 'hidden';\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 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":"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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 settings: Settings;\n readonly routines: Routines;\n readonly state: State;\n readonly logger: Logger;\n\n constructor(settings: Settings, routines: Routines, state: State, logger: Logger) {\n this.settings = settings;\n this.routines = routines;\n this.state = state;\n this.logger = logger;\n this.paddings = new Paddings(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(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();\n }\n\n set scrollPosition(value: number) {\n this.setPosition(value);\n }\n\n getSize(): number {\n return this.routines.getViewportSize();\n }\n\n getScrollableSize(): number {\n return this.routines.getScrollerSize();\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.getViewportEdge(direction);\n }\n\n setOffset(): void {\n this.offset = this.routines.getOffset();\n }\n\n findItemElementById(id: string): HTMLElement | null {\n return this.routines.findItemElement(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 { IRoutines } from './routines';\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 IRoutines,\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"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=routines.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routines.js","sourceRoot":"","sources":["../../../src/interfaces/routines.ts"],"names":[],"mappings":"","sourcesContent":["import { Settings } from '../classes/settings';\nimport { Direction } from '../inputs/index';\n\ninterface IRoutinesSettings {\n /** The scroller's viewport element defined by the app settings.\n * The value is equal to settings.viewport and thus can be null.\n */\n viewport: HTMLElement | null;\n\n /** Determines wether the scroller is horizontal-oriented or not.\n * The value is equal to settings.horizontal.\n */\n horizontal: boolean;\n\n /** Determines wether the entire window is the scroller's viewport or not. \n * The value is equal to settings.window.\n */\n window: boolean;\n}\n\nexport interface IRoutines {\n\n /** Internal prop that is available after instantiation. \n * Reduced version of the App settings object.\n */\n readonly settings: IRoutinesSettings;\n\n /** Internal prop that is available after instantiation.\n * The scroller's element that comes from the end App.\n */\n readonly element: HTMLElement;\n\n /** Internal prop that is available after instantiation.\n * The scroller's viewport element.\n * The \"getViewportElement\" method is responsible for the value.\n */\n readonly viewport: HTMLElement;\n\n /** Checks HTML element. Should throw error if it's not valid.\n * @param {HTMLElement} element HTML element to check.\n */\n checkElement: (element: HTMLElement) => void;\n\n /** Gets the viewport element based on the internal props:\n * \"settings.viewport\", \"settings.window\" and \"element\".\n * This method is being called during Routines instantiation\n * to determine the \"viewport\" prop:\n * \n * this.viewport = this.getViewportElement();\n * @returns {HTMLElement} HTML element.\n */\n getViewportElement: () => HTMLElement;\n\n /** This method is being called in the end of Routines instantiation.\n * @param {Settings} settings Unreduced Scroller's settings object.\n */\n onInit: (settings: Settings) => void;\n\n /** Finds element by CSS selector.\n * @param {HTMLElement} element Top of the elements hierarchy to search.\n * @param {string} selector CSS selector.\n * @returns {HTMLElement | null} The first HTML element that matches the specified selector, or null.\n */\n findElementBySelector: (element: HTMLElement, selector: string) => HTMLElement | null;\n\n /** Finds padding element.\n * @param {'backward' | 'forward'} direction Search direction: backward or forward.\n * @returns {HTMLElement | null} HTML padding element, or null.\n */\n findPaddingElement: (direction: Direction) => HTMLElement | null;\n\n /** Finds single item element by its id.\n * @param {string} id Id of the element to search.\n * @returns {HTMLElement | null} HTML item element, or null.\n */\n findItemElement: (id: string) => HTMLElement | null;\n\n /** Gets scroll position of the viewport. Internal settings should be taken into account.\n * @returns {number} Scroll position value.\n */\n getScrollPosition: () => number;\n\n /** Sets scroll position of the viewport. Internal settings should be taken into account.\n * @param {number} value Scroll position value.\n */\n setScrollPosition: (value: number) => void;\n\n /** Gets the size of the element and its position relative to the viewport.\n * @param {HTMLElement} element\n * @returns {DOMRect} DOMRect object.\n */\n getElementParams: (element: HTMLElement) => DOMRect;\n\n /** Gets params of the host element in case the \"window\" setting is set to true.\n * @returns {DOMRect} DOMRect object.\n */\n getWindowParams: () => DOMRect;\n\n /** Gets size of the element. Internal props should be taken into account.\n * For example, if horizontal = false, then the element's height is needed.\n * If horizontal = true, then the element's width is needed.\n * @param {HTMLElement} element\n * @returns {DOMRect} DOMRect object.\n */\n getSize: (element: HTMLElement) => number;\n\n /** Gets size of the scroller element.\n * @returns {DOMRect} DOMRect object.\n */\n getScrollerSize: () => number;\n\n /** Gets size of the viewport.\n * @returns {DOMRect} DOMRect object.\n */\n getViewportSize: () => number;\n\n /** Gets size of the element. Internal settings (\"horizontal\") should be taken into account.\n * This method should work in the same way as \"setSizeStyle\" does.\n * @param {HTMLElement} element\n * @returns {number} Numeric value.\n */\n getSizeStyle: (element: HTMLElement) => number;\n\n /** Sets size of the element. Internal settings (\"horizontal\") should be taken into account.\n * This method should work in the same way as \"getSizeStyle\" does.\n * @param {HTMLElement} element\n * @param {number} value Numeric value to be new element's size.\n */\n setSizeStyle: (element: HTMLElement, value: number) => void;\n\n /** Gets the edge coordinate of the element. Internal settings (\"horizontal\") should be taken into account.\n * For example, if horizontal = false and direction = \"backward\" then the element's top coordinate is needed.\n * If horizontal = true and direction = \"forward\" then the element's right coordinate is needed.\n * @param {HTMLElement} element\n * @param {'backward' | 'forward'} direction\n * @returns {number} Numeric value.\n */\n getEdge: (element: HTMLElement, direction: Direction) => number;\n\n /** Gets the edge coordinate of the viewport. Internal settings should be taken into account.\n * @param {'backward' | 'forward'} direction\n * @returns {number} Numeric value.\n */\n getViewportEdge: (direction: Direction) => number;\n\n /** Makes the element visible in the same way as the external Workflow.run method makes it invisible.\n * @param {HTMLElement} element\n */\n makeElementVisible: (element: HTMLElement) => void;\n\n /** Hides the element. This method is being called before remove and has no connection with makeElementVisible.\n * @param {HTMLElement} element\n */\n hideElement: (element: HTMLElement) => void;\n\n /** Gets scroller's offset.\n * @returns {number} Numeric value.\n */\n getOffset: () => number;\n\n /** Scrolls into the element's view.\n * @param {HTMLElement} element\n * @param {boolean | ScrollIntoViewOptions} argument\n */\n scrollTo: (element: HTMLElement, argument?: boolean | ScrollIntoViewOptions) => void;\n\n /** Wraps rendering. Runs render process and calls the argument function when it is done.\n * @param {function} cb\n * @returns {function} Callback to dismiss render and prevent the argument function to be invoked.\n */\n render: (cb: () => void) => () => void;\n\n /** Wraps animation. Runs animations process and calls the argument function when it is done.\n * @param {function} cb\n * @returns {function} Callback to dismiss animation and prevent the argument function to be invoked.\n */\n animate: (cb: () => void) => () => void;\n\n /** Provides scroll event listening. Invokes the function argument each time the scroll event fires.\n * @param {EventListener} handler\n * @returns {function} Callback to dismiss scroll event listener.\n */\n onScroll: (handler: EventListener) => () => void;\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\r\n syntheticPosition: number | null;\r\n syntheticFulfill: boolean;\r\n animationFrameId: number;\r\n positionBeforeAsync: number | null;\r\n positionBeforeAdjust: number | null;\r\n positionAfterAdjust: number | null;\r\n\r\n reset: () => void;\r\n cleanupTimers: () => 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.cleanupTimers();
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,aAAa,EAAE,CAAC;YAClC,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.cleanupTimers();\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,22 +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 } = 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.animationFrameId = requestAnimationFrame(() => {
99
- 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;
100
129
  let diffLog = '';
101
130
  if (inertiaDiff > 0) {
102
131
  position -= inertiaDiff;
103
- scrollState.syntheticPosition = position;
132
+ scroll.syntheticPosition = position;
104
133
  diffLog = ` (-${inertiaDiff})`;
105
134
  }
106
- scrollState.syntheticFulfill = true;
135
+ scroll.syntheticFulfill = true;
107
136
  viewport.scrollPosition = position;
108
137
  scroller.logger.stat('after scroll adjustment' + diffLog);
109
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 } = 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.animationFrameId = requestAnimationFrame(() => {\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