vscroll 1.6.3 → 1.8.0
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.
- package/dist/bundles/vscroll.esm5.js +5854 -5705
- package/dist/bundles/vscroll.esm5.js.map +1 -1
- package/dist/bundles/vscroll.esm5.min.js +2 -2
- package/dist/bundles/vscroll.esm5.min.js.map +1 -1
- package/dist/bundles/vscroll.esm6.js +5341 -5194
- package/dist/bundles/vscroll.esm6.js.map +1 -1
- package/dist/bundles/vscroll.esm6.min.js +2 -2
- package/dist/bundles/vscroll.esm6.min.js.map +1 -1
- package/dist/bundles/vscroll.umd.js +5858 -5710
- package/dist/bundles/vscroll.umd.js.map +1 -1
- package/dist/bundles/vscroll.umd.min.js +2 -2
- package/dist/bundles/vscroll.umd.min.js.map +1 -1
- package/dist/esm2015/classes/adapter/context.js +44 -43
- package/dist/esm2015/classes/adapter/context.js.map +1 -1
- package/dist/esm2015/classes/adapter/props.js +300 -300
- package/dist/esm2015/classes/adapter/props.js.map +1 -1
- package/dist/esm2015/classes/adapter/wanted.js +28 -28
- package/dist/esm2015/classes/adapter/wanted.js.map +1 -1
- package/dist/esm2015/classes/adapter.js +486 -487
- package/dist/esm2015/classes/adapter.js.map +1 -1
- package/dist/esm2015/classes/buffer/cache.js +249 -246
- package/dist/esm2015/classes/buffer/cache.js.map +1 -1
- package/dist/esm2015/classes/buffer/checkCall.js +47 -48
- package/dist/esm2015/classes/buffer/checkCall.js.map +1 -1
- package/dist/esm2015/classes/buffer/defaultSize.js +128 -127
- package/dist/esm2015/classes/buffer/defaultSize.js.map +1 -1
- package/dist/esm2015/classes/buffer.js +343 -342
- package/dist/esm2015/classes/buffer.js.map +1 -1
- package/dist/esm2015/classes/datasource.js +36 -24
- package/dist/esm2015/classes/datasource.js.map +1 -1
- package/dist/esm2015/classes/domRoutines.js +160 -160
- package/dist/esm2015/classes/domRoutines.js.map +1 -1
- package/dist/esm2015/classes/item.js +61 -61
- package/dist/esm2015/classes/item.js.map +1 -1
- package/dist/esm2015/classes/logger.js +229 -186
- package/dist/esm2015/classes/logger.js.map +1 -1
- package/dist/esm2015/classes/paddings.js +76 -72
- package/dist/esm2015/classes/paddings.js.map +1 -1
- package/dist/esm2015/classes/reactive.js +54 -54
- package/dist/esm2015/classes/reactive.js.map +1 -1
- package/dist/esm2015/classes/settings.js +39 -39
- package/dist/esm2015/classes/settings.js.map +1 -1
- package/dist/esm2015/classes/state/clip.js +16 -16
- package/dist/esm2015/classes/state/clip.js.map +1 -1
- package/dist/esm2015/classes/state/cycle.js +60 -60
- package/dist/esm2015/classes/state/cycle.js.map +1 -1
- package/dist/esm2015/classes/state/fetch.js +124 -122
- package/dist/esm2015/classes/state/fetch.js.map +1 -1
- package/dist/esm2015/classes/state/render.js +14 -14
- package/dist/esm2015/classes/state/render.js.map +1 -1
- package/dist/esm2015/classes/state/scroll.js +30 -30
- package/dist/esm2015/classes/state/scroll.js.map +1 -1
- package/dist/esm2015/classes/state.js +64 -62
- package/dist/esm2015/classes/state.js.map +1 -1
- package/dist/esm2015/classes/viewport.js +74 -72
- package/dist/esm2015/classes/viewport.js.map +1 -1
- package/dist/esm2015/index.js +9 -9
- package/dist/esm2015/index.js.map +1 -1
- package/dist/esm2015/inputs/adapter.js +262 -242
- package/dist/esm2015/inputs/adapter.js.map +1 -1
- package/dist/esm2015/inputs/common.js +11 -11
- package/dist/esm2015/inputs/common.js.map +1 -1
- package/dist/esm2015/inputs/datasource.js +20 -20
- package/dist/esm2015/inputs/datasource.js.map +1 -1
- package/dist/esm2015/inputs/index.js +7 -7
- package/dist/esm2015/inputs/index.js.map +1 -1
- package/dist/esm2015/inputs/settings.js +151 -146
- package/dist/esm2015/inputs/settings.js.map +1 -1
- package/dist/esm2015/inputs/validation.js +365 -374
- package/dist/esm2015/inputs/validation.js.map +1 -1
- package/dist/esm2015/inputs/workflow.js +30 -30
- package/dist/esm2015/inputs/workflow.js.map +1 -1
- package/dist/esm2015/interfaces/adapter.js +1 -1
- package/dist/esm2015/interfaces/adapter.js.map +1 -1
- package/dist/esm2015/interfaces/datasource.js +1 -1
- package/dist/esm2015/interfaces/datasource.js.map +1 -1
- package/dist/esm2015/interfaces/index.js +1 -1
- package/dist/esm2015/interfaces/index.js.map +1 -1
- package/dist/esm2015/interfaces/item.js +1 -1
- package/dist/esm2015/interfaces/item.js.map +1 -1
- package/dist/esm2015/interfaces/process.js +1 -1
- package/dist/esm2015/interfaces/process.js.map +1 -1
- package/dist/esm2015/interfaces/routines.js +1 -1
- package/dist/esm2015/interfaces/routines.js.map +1 -1
- package/dist/esm2015/interfaces/settings.js +1 -1
- package/dist/esm2015/interfaces/settings.js.map +1 -1
- package/dist/esm2015/interfaces/state.js +1 -1
- package/dist/esm2015/interfaces/state.js.map +1 -1
- package/dist/esm2015/interfaces/validation.js +1 -1
- package/dist/esm2015/interfaces/validation.js.map +1 -1
- package/dist/esm2015/interfaces/workflow.js +1 -1
- package/dist/esm2015/interfaces/workflow.js.map +1 -1
- package/dist/esm2015/processes/adapter/append.js +37 -36
- package/dist/esm2015/processes/adapter/append.js.map +1 -1
- package/dist/esm2015/processes/adapter/check.js +33 -32
- package/dist/esm2015/processes/adapter/check.js.map +1 -1
- package/dist/esm2015/processes/adapter/clip.js +12 -12
- package/dist/esm2015/processes/adapter/clip.js.map +1 -1
- package/dist/esm2015/processes/adapter/fix.js +79 -77
- package/dist/esm2015/processes/adapter/fix.js.map +1 -1
- package/dist/esm2015/processes/adapter/insert.js +74 -73
- package/dist/esm2015/processes/adapter/insert.js.map +1 -1
- package/dist/esm2015/processes/adapter/pause.js +22 -22
- package/dist/esm2015/processes/adapter/pause.js.map +1 -1
- package/dist/esm2015/processes/adapter/reload.js +19 -19
- package/dist/esm2015/processes/adapter/reload.js.map +1 -1
- package/dist/esm2015/processes/adapter/remove.js +105 -102
- package/dist/esm2015/processes/adapter/remove.js.map +1 -1
- package/dist/esm2015/processes/adapter/replace.js +39 -39
- package/dist/esm2015/processes/adapter/replace.js.map +1 -1
- package/dist/esm2015/processes/adapter/reset.js +35 -35
- package/dist/esm2015/processes/adapter/reset.js.map +1 -1
- package/dist/esm2015/processes/adapter/update.js +44 -43
- package/dist/esm2015/processes/adapter/update.js.map +1 -1
- package/dist/esm2015/processes/adjust.js +146 -141
- package/dist/esm2015/processes/adjust.js.map +1 -1
- package/dist/esm2015/processes/clip.js +49 -49
- package/dist/esm2015/processes/clip.js.map +1 -1
- package/dist/esm2015/processes/end.js +53 -52
- package/dist/esm2015/processes/end.js.map +1 -1
- package/dist/esm2015/processes/fetch.js +93 -91
- package/dist/esm2015/processes/fetch.js.map +1 -1
- package/dist/esm2015/processes/index.js +24 -24
- package/dist/esm2015/processes/index.js.map +1 -1
- package/dist/esm2015/processes/init.js +14 -14
- package/dist/esm2015/processes/init.js.map +1 -1
- package/dist/esm2015/processes/misc/base.js +29 -30
- package/dist/esm2015/processes/misc/base.js.map +1 -1
- package/dist/esm2015/processes/misc/enums.js +36 -36
- package/dist/esm2015/processes/misc/enums.js.map +1 -1
- package/dist/esm2015/processes/misc/index.js +2 -2
- package/dist/esm2015/processes/misc/index.js.map +1 -1
- package/dist/esm2015/processes/postFetch.js +66 -65
- package/dist/esm2015/processes/postFetch.js.map +1 -1
- package/dist/esm2015/processes/preClip.js +86 -85
- package/dist/esm2015/processes/preClip.js.map +1 -1
- package/dist/esm2015/processes/preFetch.js +253 -240
- package/dist/esm2015/processes/preFetch.js.map +1 -1
- package/dist/esm2015/processes/render.js +56 -54
- package/dist/esm2015/processes/render.js.map +1 -1
- package/dist/esm2015/processes/scroll.js +106 -97
- package/dist/esm2015/processes/scroll.js.map +1 -1
- package/dist/esm2015/processes/start.js +11 -11
- package/dist/esm2015/processes/start.js.map +1 -1
- package/dist/esm2015/scroller.js +91 -86
- package/dist/esm2015/scroller.js.map +1 -1
- package/dist/esm2015/version.js +4 -4
- package/dist/esm2015/version.js.map +1 -1
- package/dist/esm2015/workflow-transducer.js +219 -218
- package/dist/esm2015/workflow-transducer.js.map +1 -1
- package/dist/esm2015/workflow.js +185 -174
- package/dist/esm2015/workflow.js.map +1 -1
- package/dist/esm5/classes/adapter/context.js +51 -50
- package/dist/esm5/classes/adapter/context.js.map +1 -1
- package/dist/esm5/classes/adapter/props.js +300 -300
- package/dist/esm5/classes/adapter/props.js.map +1 -1
- package/dist/esm5/classes/adapter/wanted.js +29 -29
- package/dist/esm5/classes/adapter/wanted.js.map +1 -1
- package/dist/esm5/classes/adapter.js +538 -535
- package/dist/esm5/classes/adapter.js.map +1 -1
- package/dist/esm5/classes/buffer/cache.js +262 -260
- package/dist/esm5/classes/buffer/cache.js.map +1 -1
- package/dist/esm5/classes/buffer/checkCall.js +53 -56
- package/dist/esm5/classes/buffer/checkCall.js.map +1 -1
- package/dist/esm5/classes/buffer/defaultSize.js +146 -145
- package/dist/esm5/classes/buffer/defaultSize.js.map +1 -1
- package/dist/esm5/classes/buffer.js +410 -409
- package/dist/esm5/classes/buffer.js.map +1 -1
- package/dist/esm5/classes/datasource.js +47 -31
- package/dist/esm5/classes/datasource.js.map +1 -1
- package/dist/esm5/classes/domRoutines.js +165 -165
- package/dist/esm5/classes/domRoutines.js.map +1 -1
- package/dist/esm5/classes/item.js +76 -76
- package/dist/esm5/classes/item.js.map +1 -1
- package/dist/esm5/classes/logger.js +251 -210
- package/dist/esm5/classes/logger.js.map +1 -1
- package/dist/esm5/classes/paddings.js +84 -80
- package/dist/esm5/classes/paddings.js.map +1 -1
- package/dist/esm5/classes/reactive.js +69 -69
- package/dist/esm5/classes/reactive.js.map +1 -1
- package/dist/esm5/classes/settings.js +47 -47
- package/dist/esm5/classes/settings.js.map +1 -1
- package/dist/esm5/classes/state/clip.js +22 -22
- package/dist/esm5/classes/state/clip.js.map +1 -1
- package/dist/esm5/classes/state/cycle.js +75 -75
- package/dist/esm5/classes/state/cycle.js.map +1 -1
- package/dist/esm5/classes/state/fetch.js +150 -148
- package/dist/esm5/classes/state/fetch.js.map +1 -1
- package/dist/esm5/classes/state/render.js +20 -20
- package/dist/esm5/classes/state/render.js.map +1 -1
- package/dist/esm5/classes/state/scroll.js +32 -32
- package/dist/esm5/classes/state/scroll.js.map +1 -1
- package/dist/esm5/classes/state.js +71 -69
- package/dist/esm5/classes/state.js.map +1 -1
- package/dist/esm5/classes/viewport.js +80 -79
- package/dist/esm5/classes/viewport.js.map +1 -1
- package/dist/esm5/index.js +9 -9
- package/dist/esm5/index.js.map +1 -1
- package/dist/esm5/inputs/adapter.js +263 -243
- package/dist/esm5/inputs/adapter.js.map +1 -1
- package/dist/esm5/inputs/common.js +11 -11
- package/dist/esm5/inputs/common.js.map +1 -1
- package/dist/esm5/inputs/datasource.js +21 -21
- package/dist/esm5/inputs/datasource.js.map +1 -1
- package/dist/esm5/inputs/index.js +7 -7
- package/dist/esm5/inputs/index.js.map +1 -1
- package/dist/esm5/inputs/settings.js +152 -147
- package/dist/esm5/inputs/settings.js.map +1 -1
- package/dist/esm5/inputs/validation.js +399 -396
- package/dist/esm5/inputs/validation.js.map +1 -1
- package/dist/esm5/inputs/workflow.js +31 -31
- package/dist/esm5/inputs/workflow.js.map +1 -1
- package/dist/esm5/interfaces/adapter.js +1 -1
- package/dist/esm5/interfaces/adapter.js.map +1 -1
- package/dist/esm5/interfaces/datasource.js +1 -1
- package/dist/esm5/interfaces/datasource.js.map +1 -1
- package/dist/esm5/interfaces/index.js +1 -1
- package/dist/esm5/interfaces/index.js.map +1 -1
- package/dist/esm5/interfaces/item.js +1 -1
- package/dist/esm5/interfaces/item.js.map +1 -1
- package/dist/esm5/interfaces/process.js +1 -1
- package/dist/esm5/interfaces/process.js.map +1 -1
- package/dist/esm5/interfaces/routines.js +1 -1
- package/dist/esm5/interfaces/routines.js.map +1 -1
- package/dist/esm5/interfaces/settings.js +1 -1
- package/dist/esm5/interfaces/settings.js.map +1 -1
- package/dist/esm5/interfaces/state.js +1 -1
- package/dist/esm5/interfaces/state.js.map +1 -1
- package/dist/esm5/interfaces/validation.js +1 -1
- package/dist/esm5/interfaces/validation.js.map +1 -1
- package/dist/esm5/interfaces/workflow.js +1 -1
- package/dist/esm5/interfaces/workflow.js.map +1 -1
- package/dist/esm5/processes/adapter/append.js +45 -44
- package/dist/esm5/processes/adapter/append.js.map +1 -1
- package/dist/esm5/processes/adapter/check.js +40 -39
- package/dist/esm5/processes/adapter/check.js.map +1 -1
- package/dist/esm5/processes/adapter/clip.js +19 -19
- package/dist/esm5/processes/adapter/clip.js.map +1 -1
- package/dist/esm5/processes/adapter/fix.js +91 -89
- package/dist/esm5/processes/adapter/fix.js.map +1 -1
- package/dist/esm5/processes/adapter/insert.js +82 -81
- package/dist/esm5/processes/adapter/insert.js.map +1 -1
- package/dist/esm5/processes/adapter/pause.js +29 -29
- package/dist/esm5/processes/adapter/pause.js.map +1 -1
- package/dist/esm5/processes/adapter/reload.js +26 -26
- package/dist/esm5/processes/adapter/reload.js.map +1 -1
- package/dist/esm5/processes/adapter/remove.js +116 -115
- package/dist/esm5/processes/adapter/remove.js.map +1 -1
- package/dist/esm5/processes/adapter/replace.js +47 -47
- package/dist/esm5/processes/adapter/replace.js.map +1 -1
- package/dist/esm5/processes/adapter/reset.js +42 -42
- package/dist/esm5/processes/adapter/reset.js.map +1 -1
- package/dist/esm5/processes/adapter/update.js +64 -59
- package/dist/esm5/processes/adapter/update.js.map +1 -1
- package/dist/esm5/processes/adjust.js +157 -152
- package/dist/esm5/processes/adjust.js.map +1 -1
- package/dist/esm5/processes/clip.js +60 -60
- package/dist/esm5/processes/clip.js.map +1 -1
- package/dist/esm5/processes/end.js +64 -63
- package/dist/esm5/processes/end.js.map +1 -1
- package/dist/esm5/processes/fetch.js +104 -102
- package/dist/esm5/processes/fetch.js.map +1 -1
- package/dist/esm5/processes/index.js +24 -24
- package/dist/esm5/processes/index.js.map +1 -1
- package/dist/esm5/processes/init.js +21 -21
- package/dist/esm5/processes/init.js.map +1 -1
- package/dist/esm5/processes/misc/base.js +43 -44
- package/dist/esm5/processes/misc/base.js.map +1 -1
- package/dist/esm5/processes/misc/enums.js +36 -36
- package/dist/esm5/processes/misc/enums.js.map +1 -1
- package/dist/esm5/processes/misc/index.js +2 -2
- package/dist/esm5/processes/misc/index.js.map +1 -1
- package/dist/esm5/processes/postFetch.js +73 -74
- package/dist/esm5/processes/postFetch.js.map +1 -1
- package/dist/esm5/processes/preClip.js +95 -94
- package/dist/esm5/processes/preClip.js.map +1 -1
- package/dist/esm5/processes/preFetch.js +259 -247
- package/dist/esm5/processes/preFetch.js.map +1 -1
- package/dist/esm5/processes/render.js +63 -63
- package/dist/esm5/processes/render.js.map +1 -1
- package/dist/esm5/processes/scroll.js +113 -107
- package/dist/esm5/processes/scroll.js.map +1 -1
- package/dist/esm5/processes/start.js +18 -18
- package/dist/esm5/processes/start.js.map +1 -1
- package/dist/esm5/scroller.js +104 -100
- package/dist/esm5/scroller.js.map +1 -1
- package/dist/esm5/version.js +4 -4
- package/dist/esm5/version.js.map +1 -1
- package/dist/esm5/workflow-transducer.js +221 -220
- package/dist/esm5/workflow-transducer.js.map +1 -1
- package/dist/esm5/workflow.js +204 -198
- package/dist/esm5/workflow.js.map +1 -1
- package/dist/typings/classes/adapter/context.d.ts +4 -4
- package/dist/typings/classes/adapter/props.d.ts +52 -52
- package/dist/typings/classes/adapter/wanted.d.ts +14 -14
- package/dist/typings/classes/adapter.d.ts +79 -79
- package/dist/typings/classes/buffer/cache.d.ts +94 -95
- package/dist/typings/classes/buffer/checkCall.d.ts +12 -12
- package/dist/typings/classes/buffer/defaultSize.d.ts +32 -32
- package/dist/typings/classes/buffer.d.ts +64 -64
- package/dist/typings/classes/datasource.d.ts +11 -11
- package/dist/typings/classes/domRoutines.d.ts +36 -36
- package/dist/typings/classes/item.d.ts +28 -28
- package/dist/typings/classes/logger.d.ts +32 -28
- package/dist/typings/classes/paddings.d.ts +22 -22
- package/dist/typings/classes/reactive.d.ts +21 -21
- package/dist/typings/classes/settings.d.ts +126 -119
- package/dist/typings/classes/state/clip.d.ts +9 -9
- package/dist/typings/classes/state/cycle.d.ts +29 -29
- package/dist/typings/classes/state/fetch.d.ts +62 -62
- package/dist/typings/classes/state/render.d.ts +9 -9
- package/dist/typings/classes/state/scroll.d.ts +16 -16
- package/dist/typings/classes/state.d.ts +29 -29
- package/dist/typings/classes/viewport.d.ts +32 -32
- package/dist/typings/index.d.ts +10 -10
- package/dist/typings/inputs/adapter.d.ts +5 -5
- package/dist/typings/inputs/common.d.ts +9 -9
- package/dist/typings/inputs/datasource.d.ts +7 -7
- package/dist/typings/inputs/index.d.ts +7 -7
- package/dist/typings/inputs/settings.d.ts +42 -41
- package/dist/typings/inputs/validation.d.ts +82 -83
- package/dist/typings/inputs/workflow.d.ts +9 -9
- package/dist/typings/interfaces/adapter.d.ts +164 -164
- package/dist/typings/interfaces/datasource.d.ts +28 -28
- package/dist/typings/interfaces/index.d.ts +10 -10
- package/dist/typings/interfaces/item.d.ts +8 -8
- package/dist/typings/interfaces/process.d.ts +35 -35
- package/dist/typings/interfaces/routines.d.ts +166 -166
- package/dist/typings/interfaces/settings.d.ts +32 -31
- package/dist/typings/interfaces/state.d.ts +24 -24
- package/dist/typings/interfaces/validation.d.ts +33 -33
- package/dist/typings/interfaces/workflow.d.ts +53 -53
- package/dist/typings/processes/adapter/append.d.ts +14 -14
- package/dist/typings/processes/adapter/check.d.ts +6 -6
- package/dist/typings/processes/adapter/clip.d.ts +7 -7
- package/dist/typings/processes/adapter/fix.d.ts +13 -13
- package/dist/typings/processes/adapter/insert.d.ts +11 -11
- package/dist/typings/processes/adapter/pause.d.ts +8 -8
- package/dist/typings/processes/adapter/reload.d.ts +6 -6
- package/dist/typings/processes/adapter/remove.d.ts +11 -11
- package/dist/typings/processes/adapter/replace.d.ts +8 -8
- package/dist/typings/processes/adapter/reset.d.ts +7 -7
- package/dist/typings/processes/adapter/update.d.ts +8 -8
- package/dist/typings/processes/adjust.d.ts +10 -10
- package/dist/typings/processes/clip.d.ts +7 -7
- package/dist/typings/processes/end.d.ts +10 -10
- package/dist/typings/processes/fetch.d.ts +18 -18
- package/dist/typings/processes/index.d.ts +24 -24
- package/dist/typings/processes/init.d.ts +7 -7
- package/dist/typings/processes/misc/base.d.ts +4 -4
- package/dist/typings/processes/misc/enums.d.ts +33 -33
- package/dist/typings/processes/misc/index.d.ts +2 -2
- package/dist/typings/processes/postFetch.d.ts +8 -8
- package/dist/typings/processes/preClip.d.ts +12 -12
- package/dist/typings/processes/preFetch.d.ts +17 -17
- package/dist/typings/processes/render.d.ts +9 -9
- package/dist/typings/processes/scroll.d.ts +13 -13
- package/dist/typings/processes/start.d.ts +6 -6
- package/dist/typings/scroller.d.ts +26 -26
- package/dist/typings/version.d.ts +5 -5
- package/dist/typings/workflow-transducer.d.ts +2 -2
- package/dist/typings/workflow.d.ts +30 -29
- package/package.json +72 -69
|
@@ -1,142 +1,147 @@
|
|
|
1
|
-
import { BaseProcessFactory, CommonProcess, ProcessStatus } from './misc/index';
|
|
2
|
-
import End from './end';
|
|
3
|
-
export default class Adjust extends BaseProcessFactory(CommonProcess.adjust) {
|
|
4
|
-
static run(scroller) {
|
|
5
|
-
const { workflow, viewport, state
|
|
6
|
-
scroll.positionBeforeAdjust = viewport.scrollPosition;
|
|
7
|
-
Adjust.setPaddings(scroller);
|
|
8
|
-
scroll.positionAfterAdjust = viewport.scrollPosition;
|
|
9
|
-
// scroll position adjustments
|
|
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);
|
|
13
|
-
// set new position using animation frame
|
|
14
|
-
Adjust.setPosition(scroller, position, () => workflow.call({
|
|
15
|
-
process: Adjust.process,
|
|
16
|
-
status: ProcessStatus.done
|
|
17
|
-
}));
|
|
18
|
-
}
|
|
19
|
-
static setPaddings(scroller) {
|
|
20
|
-
const { viewport, buffer, settings
|
|
21
|
-
const firstItem = buffer.getFirstVisibleItem();
|
|
22
|
-
const lastItem = buffer.getLastVisibleItem();
|
|
23
|
-
let first, last;
|
|
24
|
-
if (firstItem && lastItem) {
|
|
25
|
-
first = firstItem.$index;
|
|
26
|
-
last = lastItem.$index;
|
|
27
|
-
}
|
|
28
|
-
else {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
const
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
}
|
|
75
|
-
//
|
|
76
|
-
if (
|
|
77
|
-
position
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
const
|
|
101
|
-
if (
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
const
|
|
105
|
-
if (
|
|
106
|
-
return;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
scroll
|
|
126
|
-
scroll.
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
1
|
+
import { BaseProcessFactory, CommonProcess, ProcessStatus } from './misc/index';
|
|
2
|
+
import End from './end';
|
|
3
|
+
export default class Adjust extends BaseProcessFactory(CommonProcess.adjust) {
|
|
4
|
+
static run(scroller) {
|
|
5
|
+
const { workflow, viewport, state } = scroller;
|
|
6
|
+
state.scroll.positionBeforeAdjust = viewport.scrollPosition;
|
|
7
|
+
Adjust.setPaddings(scroller);
|
|
8
|
+
state.scroll.positionAfterAdjust = viewport.scrollPosition;
|
|
9
|
+
// scroll position adjustments
|
|
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);
|
|
13
|
+
// set new position using animation frame
|
|
14
|
+
Adjust.setPosition(scroller, position, () => workflow.call({
|
|
15
|
+
process: Adjust.process,
|
|
16
|
+
status: ProcessStatus.done
|
|
17
|
+
}));
|
|
18
|
+
}
|
|
19
|
+
static setPaddings(scroller) {
|
|
20
|
+
const { viewport, buffer, settings, state } = scroller;
|
|
21
|
+
const firstItem = buffer.getFirstVisibleItem();
|
|
22
|
+
const lastItem = buffer.getLastVisibleItem();
|
|
23
|
+
let first, last;
|
|
24
|
+
if (firstItem && lastItem) {
|
|
25
|
+
first = firstItem.$index;
|
|
26
|
+
last = lastItem.$index;
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
const { fetch } = state;
|
|
30
|
+
first = !isNaN(fetch.firstVisible.index) ? fetch.firstVisible.index : buffer.startIndex;
|
|
31
|
+
last = first - 1;
|
|
32
|
+
}
|
|
33
|
+
const { forward, backward } = viewport.paddings;
|
|
34
|
+
let index, bwdSize = 0, fwdSize = 0;
|
|
35
|
+
// new backward and forward paddings size
|
|
36
|
+
for (index = buffer.finiteAbsMinIndex; index < first; index++) {
|
|
37
|
+
bwdSize += buffer.getSizeByIndex(index);
|
|
38
|
+
}
|
|
39
|
+
for (index = last + 1; index <= buffer.finiteAbsMaxIndex; index++) {
|
|
40
|
+
fwdSize += buffer.getSizeByIndex(index);
|
|
41
|
+
}
|
|
42
|
+
// lack of items case
|
|
43
|
+
const bufferSize = viewport.getScrollableSize() - forward.size - backward.size;
|
|
44
|
+
const scrollSize = bwdSize + bufferSize + fwdSize;
|
|
45
|
+
const viewportSizeDiff = viewport.getSize() - scrollSize;
|
|
46
|
+
if (viewportSizeDiff > 0) {
|
|
47
|
+
if (settings.inverse) {
|
|
48
|
+
bwdSize += viewportSizeDiff;
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
fwdSize += viewportSizeDiff;
|
|
52
|
+
}
|
|
53
|
+
scroller.logger.log(() => settings.inverse
|
|
54
|
+
? 'backward'
|
|
55
|
+
: 'forward' + ` padding will be increased by ${viewportSizeDiff} to fill the viewport`);
|
|
56
|
+
}
|
|
57
|
+
backward.size = bwdSize;
|
|
58
|
+
forward.size = fwdSize;
|
|
59
|
+
scroller.logger.stat('after paddings adjustments');
|
|
60
|
+
}
|
|
61
|
+
static calculatePosition(scroller) {
|
|
62
|
+
const { viewport, buffer, state } = scroller;
|
|
63
|
+
const { fetch, render, scroll } = state;
|
|
64
|
+
let position = viewport.paddings.backward.size;
|
|
65
|
+
// increase the position to meet the expectation of the first visible item
|
|
66
|
+
if (!isNaN(fetch.firstVisible.index) && !isNaN(buffer.firstIndex)) {
|
|
67
|
+
scroller.logger.log(`first index = ${fetch.firstVisible.index}, delta = ${fetch.firstVisible.delta}`);
|
|
68
|
+
const shouldCheckPreSizeExpectation = fetch.shouldCheckPreSizeExpectation(buffer.lastIndex);
|
|
69
|
+
buffer.items.forEach(item => {
|
|
70
|
+
// 1) shift of the buffered items before the first visible item
|
|
71
|
+
if (item.$index < fetch.firstVisible.index) {
|
|
72
|
+
position += item.size;
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
// 2) delta of the first visible item
|
|
76
|
+
if (item.$index === fetch.firstVisible.index && fetch.firstVisible.delta) {
|
|
77
|
+
position -= fetch.firstVisible.delta;
|
|
78
|
+
}
|
|
79
|
+
// 3) difference between expected and real sizes of fetched items after the first visible
|
|
80
|
+
if (shouldCheckPreSizeExpectation && item.preSize && fetch.items.includes(item)) {
|
|
81
|
+
position += item.size - item.preSize;
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
// slow fetch/render case
|
|
86
|
+
if (scroll.positionBeforeAsync !== null) {
|
|
87
|
+
const diff = render.positionBefore - scroll.positionBeforeAsync;
|
|
88
|
+
if (diff !== 0) {
|
|
89
|
+
scroller.logger.log(`shift position due to fetch-render difference (${diff})`);
|
|
90
|
+
position += diff;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// increase the position due to viewport's offset
|
|
94
|
+
if (viewport.offset > 0 && (position || fetch.positions.before)) {
|
|
95
|
+
position += viewport.offset;
|
|
96
|
+
}
|
|
97
|
+
return Math.round(position);
|
|
98
|
+
}
|
|
99
|
+
static setAdditionalForwardPadding(scroller, position) {
|
|
100
|
+
const { viewport, buffer, state } = scroller;
|
|
101
|
+
if (!state.cycle.isInitial || !End.shouldContinueRun(scroller, null)) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
const diff = position - viewport.getMaxScrollPosition();
|
|
105
|
+
if (diff <= 0) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
const last = buffer.getLastVisibleItem();
|
|
109
|
+
if (!last) {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
let size = 0;
|
|
113
|
+
let index = last.$index + 1;
|
|
114
|
+
while (size <= diff && index <= buffer.absMaxIndex) {
|
|
115
|
+
size += buffer.getSizeByIndex(index++);
|
|
116
|
+
}
|
|
117
|
+
const shift = Math.min(size, diff);
|
|
118
|
+
if (shift) {
|
|
119
|
+
viewport.paddings.forward.size += shift;
|
|
120
|
+
scroller.logger.log(`increase fwd padding due to lack of items (${diff} -> ${shift})`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
static setPosition(scroller, position, done) {
|
|
124
|
+
const { state, viewport, routines } = scroller;
|
|
125
|
+
const { scroll } = state;
|
|
126
|
+
if (!scroll.hasPositionChanged(position)) {
|
|
127
|
+
return done();
|
|
128
|
+
}
|
|
129
|
+
scroll.syntheticPosition = position;
|
|
130
|
+
scroll.syntheticFulfill = false;
|
|
131
|
+
scroll.cancelAnimation = routines.animate(() => {
|
|
132
|
+
scroll.cancelAnimation = null;
|
|
133
|
+
const inertiaDiff = scroll.positionAfterAdjust - viewport.scrollPosition;
|
|
134
|
+
let diffLog = '';
|
|
135
|
+
if (inertiaDiff > 0) {
|
|
136
|
+
position -= inertiaDiff;
|
|
137
|
+
scroll.syntheticPosition = position;
|
|
138
|
+
diffLog = ` (-${inertiaDiff})`;
|
|
139
|
+
}
|
|
140
|
+
scroll.syntheticFulfill = true;
|
|
141
|
+
viewport.scrollPosition = position;
|
|
142
|
+
scroller.logger.stat('after scroll adjustment' + diffLog);
|
|
143
|
+
done();
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
}
|
|
142
147
|
//# sourceMappingURL=adjust.js.map
|
|
@@ -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\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"]}
|
|
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';\nimport { Scroller } from '../scroller';\nimport End from './end';\n\nexport default class Adjust extends BaseProcessFactory(CommonProcess.adjust) {\n static run(scroller: Scroller): void {\n const { workflow, viewport, state } = scroller;\n\n state.scroll.positionBeforeAdjust = viewport.scrollPosition;\n Adjust.setPaddings(scroller);\n state.scroll.positionAfterAdjust = viewport.scrollPosition;\n\n // scroll position adjustments\n const position = Adjust.calculatePosition(scroller);\n\n // additional adjustment if the position can't be reached during the initial cycle\n Adjust.setAdditionalForwardPadding(scroller, position);\n\n // set new position using animation frame\n Adjust.setPosition(scroller, position, () =>\n workflow.call({\n process: Adjust.process,\n status: ProcessStatus.done\n })\n );\n }\n\n static setPaddings(scroller: Scroller): void {\n const { viewport, buffer, settings, state } = scroller;\n const firstItem = buffer.getFirstVisibleItem();\n const lastItem = buffer.getLastVisibleItem();\n let first, last;\n if (firstItem && lastItem) {\n first = firstItem.$index;\n last = lastItem.$index;\n } else {\n const { fetch } = state;\n first = !isNaN(fetch.firstVisible.index) ? fetch.firstVisible.index : buffer.startIndex;\n last = first - 1;\n }\n const { forward, backward } = viewport.paddings;\n let index,\n bwdSize = 0,\n fwdSize = 0;\n\n // new backward and forward paddings size\n for (index = buffer.finiteAbsMinIndex; index < first; index++) {\n bwdSize += buffer.getSizeByIndex(index);\n }\n for (index = last + 1; index <= buffer.finiteAbsMaxIndex; index++) {\n fwdSize += buffer.getSizeByIndex(index);\n }\n\n // lack of items case\n const bufferSize = viewport.getScrollableSize() - forward.size - backward.size;\n const scrollSize = bwdSize + bufferSize + fwdSize;\n const viewportSizeDiff = viewport.getSize() - scrollSize;\n if (viewportSizeDiff > 0) {\n if (settings.inverse) {\n bwdSize += viewportSizeDiff;\n } else {\n fwdSize += viewportSizeDiff;\n }\n scroller.logger.log(() =>\n settings.inverse\n ? 'backward'\n : 'forward' + ` padding will be increased by ${viewportSizeDiff} to fill the viewport`\n );\n }\n\n backward.size = bwdSize;\n forward.size = fwdSize;\n\n scroller.logger.stat('after paddings adjustments');\n }\n\n static calculatePosition(scroller: Scroller): number {\n const { viewport, buffer, state } = scroller;\n const { fetch, render, scroll } = state;\n let position = viewport.paddings.backward.size;\n\n // increase the position to meet the expectation of the first visible item\n if (!isNaN(fetch.firstVisible.index) && !isNaN(buffer.firstIndex)) {\n scroller.logger.log(\n `first index = ${fetch.firstVisible.index}, delta = ${fetch.firstVisible.delta}`\n );\n const shouldCheckPreSizeExpectation = fetch.shouldCheckPreSizeExpectation(buffer.lastIndex);\n buffer.items.forEach(item => {\n // 1) shift of the buffered items before the first visible item\n if (item.$index < fetch.firstVisible.index) {\n position += item.size;\n return;\n }\n // 2) delta of the first visible item\n if (item.$index === fetch.firstVisible.index && fetch.firstVisible.delta) {\n position -= fetch.firstVisible.delta;\n }\n // 3) difference between expected and real sizes of fetched items after the first visible\n if (shouldCheckPreSizeExpectation && item.preSize && fetch.items.includes(item)) {\n position += item.size - item.preSize;\n }\n });\n }\n\n // slow fetch/render case\n if (scroll.positionBeforeAsync !== null) {\n const diff = render.positionBefore - scroll.positionBeforeAsync;\n if (diff !== 0) {\n scroller.logger.log(`shift position due to fetch-render difference (${diff})`);\n position += diff;\n }\n }\n\n // increase the position due to viewport's offset\n if (viewport.offset > 0 && (position || fetch.positions.before)) {\n position += viewport.offset;\n }\n\n return Math.round(position);\n }\n\n static setAdditionalForwardPadding(scroller: Scroller, position: number): void {\n const { viewport, buffer, state } = scroller;\n if (!state.cycle.isInitial || !End.shouldContinueRun(scroller, null)) {\n return;\n }\n const diff = position - viewport.getMaxScrollPosition();\n if (diff <= 0) {\n return;\n }\n const last = buffer.getLastVisibleItem();\n if (!last) {\n return;\n }\n let size = 0;\n let index = last.$index + 1;\n while (size <= diff && index <= buffer.absMaxIndex) {\n size += buffer.getSizeByIndex(index++);\n }\n const shift = Math.min(size, diff);\n if (shift) {\n viewport.paddings.forward.size += shift;\n scroller.logger.log(`increase fwd padding due to lack of items (${diff} -> ${shift})`);\n }\n }\n\n static setPosition(scroller: Scroller, position: number, done: () => void): void {\n const { state, viewport, routines } = scroller;\n const { scroll } = state;\n if (!scroll.hasPositionChanged(position)) {\n return done();\n }\n scroll.syntheticPosition = position;\n scroll.syntheticFulfill = false;\n\n scroll.cancelAnimation = routines.animate(() => {\n scroll.cancelAnimation = null;\n const inertiaDiff = (scroll.positionAfterAdjust as number) - viewport.scrollPosition;\n let diffLog = '';\n if (inertiaDiff > 0) {\n position -= inertiaDiff;\n scroll.syntheticPosition = position;\n diffLog = ` (-${inertiaDiff})`;\n }\n scroll.syntheticFulfill = true;\n viewport.scrollPosition = position;\n scroller.logger.stat('after scroll adjustment' + diffLog);\n done();\n });\n }\n}\n"]}
|
|
@@ -1,50 +1,50 @@
|
|
|
1
|
-
import { BaseProcessFactory, CommonProcess, ProcessStatus } from './misc/index';
|
|
2
|
-
import { Direction } from '../inputs/index';
|
|
3
|
-
export default class Clip extends BaseProcessFactory(CommonProcess.clip) {
|
|
4
|
-
static run(scroller) {
|
|
5
|
-
const { workflow } = scroller;
|
|
6
|
-
Clip.doClip(scroller);
|
|
7
|
-
workflow.call({
|
|
8
|
-
process: Clip.process,
|
|
9
|
-
status: ProcessStatus.next
|
|
10
|
-
});
|
|
11
|
-
}
|
|
12
|
-
static doClip(scroller) {
|
|
13
|
-
const { buffer, viewport
|
|
14
|
-
const size = { [Direction.backward]: 0, [Direction.forward]: 0 };
|
|
15
|
-
logger.stat(`before clip (${++clip.callCount})`);
|
|
16
|
-
const itemsToRemove = buffer.items.filter(item => {
|
|
17
|
-
if (!item.toRemove) {
|
|
18
|
-
return false;
|
|
19
|
-
}
|
|
20
|
-
item.hide();
|
|
21
|
-
size[item.removeDirection] += item.size;
|
|
22
|
-
return true;
|
|
23
|
-
});
|
|
24
|
-
if (itemsToRemove.length) {
|
|
25
|
-
if (size[Direction.backward]) {
|
|
26
|
-
paddings.byDirection(Direction.backward).size += size[Direction.backward];
|
|
27
|
-
}
|
|
28
|
-
if (size[Direction.forward]) {
|
|
29
|
-
paddings.byDirection(Direction.forward).size += size[Direction.forward];
|
|
30
|
-
}
|
|
31
|
-
if (scroller.settings.onBeforeClip) {
|
|
32
|
-
scroller.settings.onBeforeClip(itemsToRemove.map(item => item.get()));
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
buffer.clip();
|
|
36
|
-
logger.log(() => {
|
|
37
|
-
const list = itemsToRemove.map(({ $index }) => $index);
|
|
38
|
-
return list.length
|
|
39
|
-
? [
|
|
40
|
-
`clipped ${list.length} item(s) from Buffer` +
|
|
41
|
-
(size.backward ? `, +${size.backward} fwd px` : '') +
|
|
42
|
-
(size.forward ? `, +${size.forward} bwd px` : '') +
|
|
43
|
-
`, range: [${list[0]}..${list[list.length - 1]}]`
|
|
44
|
-
]
|
|
45
|
-
: 'clipped 0 items from Buffer';
|
|
46
|
-
});
|
|
47
|
-
logger.stat('after clip');
|
|
48
|
-
}
|
|
49
|
-
}
|
|
1
|
+
import { BaseProcessFactory, CommonProcess, ProcessStatus } from './misc/index';
|
|
2
|
+
import { Direction } from '../inputs/index';
|
|
3
|
+
export default class Clip extends BaseProcessFactory(CommonProcess.clip) {
|
|
4
|
+
static run(scroller) {
|
|
5
|
+
const { workflow } = scroller;
|
|
6
|
+
Clip.doClip(scroller);
|
|
7
|
+
workflow.call({
|
|
8
|
+
process: Clip.process,
|
|
9
|
+
status: ProcessStatus.next
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
static doClip(scroller) {
|
|
13
|
+
const { buffer, viewport, state, logger } = scroller;
|
|
14
|
+
const size = { [Direction.backward]: 0, [Direction.forward]: 0 };
|
|
15
|
+
logger.stat(`before clip (${++state.clip.callCount})`);
|
|
16
|
+
const itemsToRemove = buffer.items.filter(item => {
|
|
17
|
+
if (!item.toRemove) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
item.hide();
|
|
21
|
+
size[item.removeDirection] += item.size;
|
|
22
|
+
return true;
|
|
23
|
+
});
|
|
24
|
+
if (itemsToRemove.length) {
|
|
25
|
+
if (size[Direction.backward]) {
|
|
26
|
+
viewport.paddings.byDirection(Direction.backward).size += size[Direction.backward];
|
|
27
|
+
}
|
|
28
|
+
if (size[Direction.forward]) {
|
|
29
|
+
viewport.paddings.byDirection(Direction.forward).size += size[Direction.forward];
|
|
30
|
+
}
|
|
31
|
+
if (scroller.settings.onBeforeClip) {
|
|
32
|
+
scroller.settings.onBeforeClip(itemsToRemove.map(item => item.get()));
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
buffer.clip();
|
|
36
|
+
logger.log(() => {
|
|
37
|
+
const list = itemsToRemove.map(({ $index }) => $index);
|
|
38
|
+
return list.length
|
|
39
|
+
? [
|
|
40
|
+
`clipped ${list.length} item(s) from Buffer` +
|
|
41
|
+
(size.backward ? `, +${size.backward} fwd px` : '') +
|
|
42
|
+
(size.forward ? `, +${size.forward} bwd px` : '') +
|
|
43
|
+
`, range: [${list[0]}..${list[list.length - 1]}]`
|
|
44
|
+
]
|
|
45
|
+
: 'clipped 0 items from Buffer';
|
|
46
|
+
});
|
|
47
|
+
logger.stat('after clip');
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
50
|
//# sourceMappingURL=clip.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clip.js","sourceRoot":"","sources":["../../../src/processes/clip.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAEhF,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,kBAAkB,CAAC,aAAa,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"clip.js","sourceRoot":"","sources":["../../../src/processes/clip.ts"],"names":[],"mappings":"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","sourcesContent":["import { BaseProcessFactory, CommonProcess, ProcessStatus } from './misc/index';\nimport { Scroller } from '../scroller';\nimport { Direction } from '../inputs/index';\n\nexport default class Clip extends BaseProcessFactory(CommonProcess.clip) {\n static run(scroller: Scroller): void {\n const { workflow } = scroller;\n\n Clip.doClip(scroller);\n\n workflow.call({\n process: Clip.process,\n status: ProcessStatus.next\n });\n }\n\n static doClip(scroller: Scroller): void {\n const { buffer, viewport, state, logger } = scroller;\n const size = { [Direction.backward]: 0, [Direction.forward]: 0 };\n\n logger.stat(`before clip (${++state.clip.callCount})`);\n\n const itemsToRemove = buffer.items.filter(item => {\n if (!item.toRemove) {\n return false;\n }\n item.hide();\n size[item.removeDirection] += item.size;\n return true;\n });\n\n if (itemsToRemove.length) {\n if (size[Direction.backward]) {\n viewport.paddings.byDirection(Direction.backward).size += size[Direction.backward];\n }\n if (size[Direction.forward]) {\n viewport.paddings.byDirection(Direction.forward).size += size[Direction.forward];\n }\n if (scroller.settings.onBeforeClip) {\n scroller.settings.onBeforeClip(itemsToRemove.map(item => item.get()));\n }\n }\n\n buffer.clip();\n\n logger.log(() => {\n const list = itemsToRemove.map(({ $index }) => $index);\n return list.length\n ? [\n `clipped ${list.length} item(s) from Buffer` +\n (size.backward ? `, +${size.backward} fwd px` : '') +\n (size.forward ? `, +${size.forward} bwd px` : '') +\n `, range: [${list[0]}..${list[list.length - 1]}]`\n ]\n : 'clipped 0 items from Buffer';\n });\n\n logger.stat('after clip');\n }\n}\n"]}
|
|
@@ -1,53 +1,54 @@
|
|
|
1
|
-
import { BaseProcessFactory, CommonProcess, ProcessStatus } from './misc/index';
|
|
2
|
-
const isInterrupted = ({ call }) => !!call.interrupted;
|
|
3
|
-
export default class End extends BaseProcessFactory(CommonProcess.end) {
|
|
4
|
-
static run(scroller, { error } = {}) {
|
|
5
|
-
const { workflow, state
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
adapter.setFirstOrLastVisible({
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
}
|
|
1
|
+
import { BaseProcessFactory, CommonProcess, ProcessStatus } from './misc/index';
|
|
2
|
+
const isInterrupted = ({ call }) => !!call.interrupted;
|
|
3
|
+
export default class End extends BaseProcessFactory(CommonProcess.end) {
|
|
4
|
+
static run(scroller, { error } = {}) {
|
|
5
|
+
const { workflow, state } = scroller;
|
|
6
|
+
const { interrupter } = state.cycle;
|
|
7
|
+
if (!error && !interrupter) {
|
|
8
|
+
// set out params accessible via Adapter
|
|
9
|
+
End.calculateParams(scroller);
|
|
10
|
+
}
|
|
11
|
+
// explicit interruption for we don't want to go through the inner loop finalizing
|
|
12
|
+
if (isInterrupted(workflow)) {
|
|
13
|
+
workflow.call({ process: End.process, status: ProcessStatus.done });
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
const next = End.shouldContinueRun(scroller, error);
|
|
17
|
+
scroller.state.endInnerLoop();
|
|
18
|
+
workflow.call({
|
|
19
|
+
process: End.process,
|
|
20
|
+
status: next ? ProcessStatus.next : ProcessStatus.done,
|
|
21
|
+
payload: Object.assign({}, (interrupter ? { process: interrupter } : {}))
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
static calculateParams(scroller) {
|
|
25
|
+
const { adapter, workflow } = scroller;
|
|
26
|
+
adapter.setFirstOrLastVisible({ first: true, workflow });
|
|
27
|
+
adapter.setFirstOrLastVisible({ last: true, workflow });
|
|
28
|
+
}
|
|
29
|
+
static shouldContinueRun(scroller, error) {
|
|
30
|
+
const { cycle, fetch, render } = scroller.state;
|
|
31
|
+
// Adapter.reload or Adapter.reset
|
|
32
|
+
if (cycle.interrupter) {
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
// critical error
|
|
36
|
+
if (error) {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
// Adapter.check
|
|
40
|
+
if (fetch.simulate && fetch.isCheck && !render.noSize) {
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
// Adapter.remove or Adapter.update with clip
|
|
44
|
+
if (fetch.simulate && fetch.doRemove) {
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
// common inner loop (App start, scroll, Adapter.clip) with full fetch
|
|
48
|
+
if (!fetch.simulate && ((fetch.hasNewItems && !render.noSize) || fetch.hasAnotherPack)) {
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
53
54
|
//# sourceMappingURL=end.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"end.js","sourceRoot":"","sources":["../../../src/processes/end.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAIhF,MAAM,aAAa,GAAG,CAAC,EAAE,IAAI,EAAoB,EAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;AAElF,MAAM,CAAC,OAAO,OAAO,GAAI,SAAQ,kBAAkB,CAAC,aAAa,CAAC,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"end.js","sourceRoot":"","sources":["../../../src/processes/end.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAIhF,MAAM,aAAa,GAAG,CAAC,EAAE,IAAI,EAAoB,EAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;AAElF,MAAM,CAAC,OAAO,OAAO,GAAI,SAAQ,kBAAkB,CAAC,aAAa,CAAC,GAAG,CAAC;IACpE,MAAM,CAAC,GAAG,CAAC,QAAkB,EAAE,EAAE,KAAK,KAA0B,EAAE;QAChE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC;QACrC,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC;QAEpC,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;YAC3B,wCAAwC;YACxC,GAAG,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC;QAED,kFAAkF;QAClF,IAAI,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;YACpE,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,GAAG,CAAC,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACpD,QAAQ,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;QAE9B,QAAQ,CAAC,IAAI,CAAC;YACZ,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI;YACtD,OAAO,oBAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAE;SAC9D,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,eAAe,CAAC,QAAkB;QACvC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC;QAEvC,OAAO,CAAC,qBAAqB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,CAAC,iBAAiB,CAAC,QAAkB,EAAE,KAAc;QACzD,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC;QAChD,kCAAkC;QAClC,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,iBAAiB;QACjB,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,KAAK,CAAC;QACf,CAAC;QACD,gBAAgB;QAChB,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACtD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,6CAA6C;QAC7C,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,sEAAsE;QACtE,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;YACvF,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF","sourcesContent":["import { BaseProcessFactory, CommonProcess, ProcessStatus } from './misc/index';\nimport { Scroller } from '../scroller';\nimport { ScrollerWorkflow } from '../interfaces/index';\n\nconst isInterrupted = ({ call }: ScrollerWorkflow): boolean => !!call.interrupted;\n\nexport default class End extends BaseProcessFactory(CommonProcess.end) {\n static run(scroller: Scroller, { error }: { error?: unknown } = {}): void {\n const { workflow, state } = scroller;\n const { interrupter } = state.cycle;\n\n if (!error && !interrupter) {\n // set out params accessible via Adapter\n End.calculateParams(scroller);\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): void {\n const { adapter, workflow } = scroller;\n\n adapter.setFirstOrLastVisible({ first: true, workflow });\n adapter.setFirstOrLastVisible({ last: true, workflow });\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"]}
|