vscroll 1.6.2 → 1.7.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/LICENSE +1 -1
- package/README.md +1 -1
- package/dist/bundles/vscroll.esm5.js +5704 -5694
- 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 +5193 -5183
- 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 +5712 -5703
- 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 +43 -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/wanted.js +28 -28
- package/dist/esm2015/classes/adapter/wanted.js.map +1 -1
- package/dist/esm2015/classes/adapter.js +487 -487
- package/dist/esm2015/classes/adapter.js.map +1 -1
- package/dist/esm2015/classes/buffer/cache.js +246 -246
- package/dist/esm2015/classes/buffer/cache.js.map +1 -1
- package/dist/esm2015/classes/buffer/checkCall.js +48 -48
- package/dist/esm2015/classes/buffer/checkCall.js.map +1 -1
- package/dist/esm2015/classes/buffer/defaultSize.js +127 -127
- package/dist/esm2015/classes/buffer/defaultSize.js.map +1 -1
- package/dist/esm2015/classes/buffer.js +342 -342
- package/dist/esm2015/classes/buffer.js.map +1 -1
- package/dist/esm2015/classes/datasource.js +23 -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 +186 -186
- package/dist/esm2015/classes/logger.js.map +1 -1
- package/dist/esm2015/classes/paddings.js +72 -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 +122 -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/scroll.js +30 -30
- package/dist/esm2015/classes/state/scroll.js.map +1 -1
- package/dist/esm2015/classes/state.js +62 -62
- package/dist/esm2015/classes/state.js.map +1 -1
- package/dist/esm2015/classes/viewport.js +72 -72
- package/dist/esm2015/classes/viewport.js.map +1 -1
- package/dist/esm2015/index.js +9 -9
- package/dist/esm2015/inputs/adapter.js +242 -232
- package/dist/esm2015/inputs/adapter.js.map +1 -1
- package/dist/esm2015/inputs/common.js +11 -11
- package/dist/esm2015/inputs/datasource.js +20 -20
- package/dist/esm2015/inputs/index.js +7 -7
- package/dist/esm2015/inputs/settings.js +146 -146
- package/dist/esm2015/inputs/validation.js +371 -374
- package/dist/esm2015/inputs/validation.js.map +1 -1
- package/dist/esm2015/inputs/workflow.js +30 -30
- 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/index.js +1 -1
- package/dist/esm2015/interfaces/item.js +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/settings.js +1 -1
- package/dist/esm2015/interfaces/state.js +1 -1
- package/dist/esm2015/interfaces/validation.js +1 -1
- package/dist/esm2015/interfaces/workflow.js +1 -1
- package/dist/esm2015/processes/adapter/append.js +36 -35
- package/dist/esm2015/processes/adapter/append.js.map +1 -1
- package/dist/esm2015/processes/adapter/check.js +32 -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/fix.js +77 -77
- package/dist/esm2015/processes/adapter/fix.js.map +1 -1
- package/dist/esm2015/processes/adapter/insert.js +73 -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 +102 -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 +43 -43
- package/dist/esm2015/processes/adapter/update.js.map +1 -1
- package/dist/esm2015/processes/adjust.js +141 -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 +52 -52
- package/dist/esm2015/processes/end.js.map +1 -1
- package/dist/esm2015/processes/fetch.js +91 -91
- package/dist/esm2015/processes/fetch.js.map +1 -1
- package/dist/esm2015/processes/index.js +24 -24
- package/dist/esm2015/processes/init.js +14 -14
- package/dist/esm2015/processes/misc/base.js +30 -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/index.js +2 -2
- package/dist/esm2015/processes/postFetch.js +65 -65
- package/dist/esm2015/processes/postFetch.js.map +1 -1
- package/dist/esm2015/processes/preClip.js +85 -85
- package/dist/esm2015/processes/preClip.js.map +1 -1
- package/dist/esm2015/processes/preFetch.js +240 -240
- package/dist/esm2015/processes/preFetch.js.map +1 -1
- package/dist/esm2015/processes/render.js +54 -54
- package/dist/esm2015/processes/render.js.map +1 -1
- package/dist/esm2015/processes/scroll.js +97 -97
- package/dist/esm2015/processes/scroll.js.map +1 -1
- package/dist/esm2015/processes/start.js +11 -11
- package/dist/esm2015/scroller.js +86 -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 +218 -218
- package/dist/esm2015/workflow-transducer.js.map +1 -1
- package/dist/esm2015/workflow.js +174 -174
- package/dist/esm2015/workflow.js.map +1 -1
- package/dist/esm5/classes/adapter/context.js +50 -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/wanted.js +29 -29
- package/dist/esm5/classes/adapter/wanted.js.map +1 -1
- package/dist/esm5/classes/adapter.js +535 -535
- package/dist/esm5/classes/adapter.js.map +1 -1
- package/dist/esm5/classes/buffer/cache.js +260 -260
- package/dist/esm5/classes/buffer/cache.js.map +1 -1
- package/dist/esm5/classes/buffer/checkCall.js +56 -56
- package/dist/esm5/classes/buffer/checkCall.js.map +1 -1
- package/dist/esm5/classes/buffer/defaultSize.js +145 -145
- package/dist/esm5/classes/buffer/defaultSize.js.map +1 -1
- package/dist/esm5/classes/buffer.js +409 -409
- package/dist/esm5/classes/buffer.js.map +1 -1
- package/dist/esm5/classes/datasource.js +30 -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 +210 -210
- package/dist/esm5/classes/logger.js.map +1 -1
- package/dist/esm5/classes/paddings.js +80 -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 +148 -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/scroll.js +32 -32
- package/dist/esm5/classes/state/scroll.js.map +1 -1
- package/dist/esm5/classes/state.js +69 -69
- package/dist/esm5/classes/state.js.map +1 -1
- package/dist/esm5/classes/viewport.js +79 -79
- package/dist/esm5/classes/viewport.js.map +1 -1
- package/dist/esm5/index.js +9 -9
- package/dist/esm5/inputs/adapter.js +243 -233
- package/dist/esm5/inputs/adapter.js.map +1 -1
- package/dist/esm5/inputs/common.js +11 -11
- package/dist/esm5/inputs/datasource.js +21 -21
- package/dist/esm5/inputs/index.js +7 -7
- package/dist/esm5/inputs/settings.js +147 -147
- package/dist/esm5/inputs/validation.js +393 -396
- package/dist/esm5/inputs/validation.js.map +1 -1
- package/dist/esm5/inputs/workflow.js +31 -31
- 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/index.js +1 -1
- package/dist/esm5/interfaces/item.js +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/settings.js +1 -1
- package/dist/esm5/interfaces/state.js +1 -1
- package/dist/esm5/interfaces/validation.js +1 -1
- package/dist/esm5/interfaces/workflow.js +1 -1
- package/dist/esm5/processes/adapter/append.js +44 -43
- package/dist/esm5/processes/adapter/append.js.map +1 -1
- package/dist/esm5/processes/adapter/check.js +39 -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/fix.js +89 -89
- package/dist/esm5/processes/adapter/fix.js.map +1 -1
- package/dist/esm5/processes/adapter/insert.js +81 -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 +115 -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 +59 -59
- package/dist/esm5/processes/adapter/update.js.map +1 -1
- package/dist/esm5/processes/adjust.js +152 -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 +63 -63
- package/dist/esm5/processes/end.js.map +1 -1
- package/dist/esm5/processes/fetch.js +102 -102
- package/dist/esm5/processes/fetch.js.map +1 -1
- package/dist/esm5/processes/index.js +24 -24
- package/dist/esm5/processes/init.js +21 -21
- package/dist/esm5/processes/misc/base.js +44 -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/index.js +2 -2
- package/dist/esm5/processes/postFetch.js +74 -74
- package/dist/esm5/processes/postFetch.js.map +1 -1
- package/dist/esm5/processes/preClip.js +94 -94
- package/dist/esm5/processes/preClip.js.map +1 -1
- package/dist/esm5/processes/preFetch.js +247 -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 +107 -107
- package/dist/esm5/processes/scroll.js.map +1 -1
- package/dist/esm5/processes/start.js +18 -18
- package/dist/esm5/scroller.js +100 -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 +220 -220
- package/dist/esm5/workflow-transducer.js.map +1 -1
- package/dist/esm5/workflow.js +198 -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 +95 -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 +28 -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 +119 -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 +41 -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 -161
- 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 +31 -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 +29 -29
- package/package.json +19 -18
|
@@ -1,55 +1,55 @@
|
|
|
1
|
-
import { BaseProcessFactory, CommonProcess, ProcessStatus } from './misc/index';
|
|
2
|
-
export default class Render extends BaseProcessFactory(CommonProcess.render) {
|
|
3
|
-
static run(scroller) {
|
|
4
|
-
const { workflow, state: { cycle, render, scroll, fetch }, viewport, routines } = scroller;
|
|
5
|
-
scroller.logger.stat('before new items render');
|
|
6
|
-
if (scroll.positionBeforeAsync === null) {
|
|
7
|
-
scroll.positionBeforeAsync = viewport.scrollPosition;
|
|
8
|
-
}
|
|
9
|
-
render.cancel = routines.render(() => {
|
|
10
|
-
render.cancel = null;
|
|
11
|
-
if (Render.doRender(scroller)) {
|
|
12
|
-
workflow.call({
|
|
13
|
-
process: Render.process,
|
|
14
|
-
status: render.noSize ? ProcessStatus.done : ProcessStatus.next,
|
|
15
|
-
payload: { process: cycle.initiator }
|
|
16
|
-
});
|
|
17
|
-
}
|
|
18
|
-
else {
|
|
19
|
-
workflow.call({
|
|
20
|
-
process: Render.process,
|
|
21
|
-
status: ProcessStatus.error,
|
|
22
|
-
payload: { error: 'Can\'t associate item with element' }
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
}, { items: fetch.items.map(i => i.get()) });
|
|
26
|
-
}
|
|
27
|
-
static doRender(scroller) {
|
|
28
|
-
const { state: { fetch, render }, viewport, buffer, logger } = scroller;
|
|
29
|
-
render.positionBefore = viewport.scrollPosition;
|
|
30
|
-
if (!fetch.isCheck) {
|
|
31
|
-
render.sizeBefore = viewport.getScrollableSize();
|
|
32
|
-
if (!fetch.items.every(item => Render.processElement(scroller, item))) {
|
|
33
|
-
return false;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
buffer.checkDefaultSize();
|
|
37
|
-
render.sizeAfter = viewport.getScrollableSize();
|
|
38
|
-
logger.stat('after new items render');
|
|
39
|
-
logger.log(() => render.noSize ? 'viewport size has not been changed' : void 0);
|
|
40
|
-
return true;
|
|
41
|
-
}
|
|
42
|
-
static processElement(scroller, item) {
|
|
43
|
-
const { viewport, buffer } = scroller;
|
|
44
|
-
const element = viewport.findItemElementById(item.nodeId);
|
|
45
|
-
if (!element) {
|
|
46
|
-
return false;
|
|
47
|
-
}
|
|
48
|
-
item.element = element;
|
|
49
|
-
item.makeVisible();
|
|
50
|
-
item.setSize(buffer.getSizeByIndex(item.$index));
|
|
51
|
-
buffer.cacheItem(item);
|
|
52
|
-
return true;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
1
|
+
import { BaseProcessFactory, CommonProcess, ProcessStatus } from './misc/index';
|
|
2
|
+
export default class Render extends BaseProcessFactory(CommonProcess.render) {
|
|
3
|
+
static run(scroller) {
|
|
4
|
+
const { workflow, state: { cycle, render, scroll, fetch }, viewport, routines } = scroller;
|
|
5
|
+
scroller.logger.stat('before new items render');
|
|
6
|
+
if (scroll.positionBeforeAsync === null) {
|
|
7
|
+
scroll.positionBeforeAsync = viewport.scrollPosition;
|
|
8
|
+
}
|
|
9
|
+
render.cancel = routines.render(() => {
|
|
10
|
+
render.cancel = null;
|
|
11
|
+
if (Render.doRender(scroller)) {
|
|
12
|
+
workflow.call({
|
|
13
|
+
process: Render.process,
|
|
14
|
+
status: render.noSize ? ProcessStatus.done : ProcessStatus.next,
|
|
15
|
+
payload: { process: cycle.initiator }
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
workflow.call({
|
|
20
|
+
process: Render.process,
|
|
21
|
+
status: ProcessStatus.error,
|
|
22
|
+
payload: { error: 'Can\'t associate item with element' }
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
}, { items: fetch.items.map(i => i.get()) });
|
|
26
|
+
}
|
|
27
|
+
static doRender(scroller) {
|
|
28
|
+
const { state: { fetch, render }, viewport, buffer, logger } = scroller;
|
|
29
|
+
render.positionBefore = viewport.scrollPosition;
|
|
30
|
+
if (!fetch.isCheck) {
|
|
31
|
+
render.sizeBefore = viewport.getScrollableSize();
|
|
32
|
+
if (!fetch.items.every(item => Render.processElement(scroller, item))) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
buffer.checkDefaultSize();
|
|
37
|
+
render.sizeAfter = viewport.getScrollableSize();
|
|
38
|
+
logger.stat('after new items render');
|
|
39
|
+
logger.log(() => render.noSize ? 'viewport size has not been changed' : void 0);
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
static processElement(scroller, item) {
|
|
43
|
+
const { viewport, buffer } = scroller;
|
|
44
|
+
const element = viewport.findItemElementById(item.nodeId);
|
|
45
|
+
if (!element) {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
item.element = element;
|
|
49
|
+
item.makeVisible();
|
|
50
|
+
item.setSize(buffer.getSizeByIndex(item.$index));
|
|
51
|
+
buffer.cacheItem(item);
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
55
|
//# sourceMappingURL=render.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../../src/processes/render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAIhF,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,kBAAkB,CAAC,aAAa,CAAC,MAAM,CAAC;IAE1E,MAAM,CAAC,GAAG,CAAC,QAAkB;QAC3B,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC;QAC3F,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QAChD,IAAI,MAAM,CAAC,mBAAmB,KAAK,IAAI,EAAE;
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../../src/processes/render.ts"],"names":[],"mappings":"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","sourcesContent":["import { BaseProcessFactory, CommonProcess, ProcessStatus } from './misc/index';\r\nimport { Scroller } from '../scroller';\r\nimport { Item } from '../classes/item';\r\n\r\nexport default class Render extends BaseProcessFactory(CommonProcess.render) {\r\n\r\n static run(scroller: Scroller): void {\r\n const { workflow, state: { cycle, render, scroll, fetch }, viewport, routines } = scroller;\r\n scroller.logger.stat('before new items render');\r\n if (scroll.positionBeforeAsync === null) {\r\n scroll.positionBeforeAsync = viewport.scrollPosition;\r\n }\r\n render.cancel = routines.render(() => {\r\n render.cancel = null;\r\n if (Render.doRender(scroller)) {\r\n workflow.call({\r\n process: Render.process,\r\n status: render.noSize ? ProcessStatus.done : ProcessStatus.next,\r\n payload: { process: cycle.initiator }\r\n });\r\n } else {\r\n workflow.call({\r\n process: Render.process,\r\n status: ProcessStatus.error,\r\n payload: { error: 'Can\\'t associate item with element' }\r\n });\r\n }\r\n }, { items: fetch.items.map(i => i.get()) });\r\n }\r\n\r\n static doRender(scroller: Scroller): boolean {\r\n const { state: { fetch, render }, viewport, buffer, logger } = scroller;\r\n render.positionBefore = viewport.scrollPosition;\r\n if (!fetch.isCheck) {\r\n render.sizeBefore = viewport.getScrollableSize();\r\n if (!fetch.items.every(item =>\r\n Render.processElement(scroller, item)\r\n )) {\r\n return false;\r\n }\r\n }\r\n buffer.checkDefaultSize();\r\n render.sizeAfter = viewport.getScrollableSize();\r\n logger.stat('after new items render');\r\n logger.log(() => render.noSize ? 'viewport size has not been changed' : void 0);\r\n return true;\r\n }\r\n\r\n static processElement(scroller: Scroller, item: Item): boolean {\r\n const { viewport, buffer } = scroller;\r\n const element = viewport.findItemElementById(item.nodeId);\r\n if (!element) {\r\n return false;\r\n }\r\n item.element = element as HTMLElement;\r\n item.makeVisible();\r\n item.setSize(buffer.getSizeByIndex(item.$index));\r\n buffer.cacheItem(item);\r\n return true;\r\n }\r\n\r\n}\r\n"]}
|
|
@@ -1,98 +1,98 @@
|
|
|
1
|
-
import { BaseProcessFactory, CommonProcess, ProcessStatus } from './misc/index';
|
|
2
|
-
import { Direction } from '../inputs/index';
|
|
3
|
-
export default class Scroll extends BaseProcessFactory(CommonProcess.scroll) {
|
|
4
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
5
|
-
static run(scroller, payload) {
|
|
6
|
-
const { workflow, viewport } = scroller;
|
|
7
|
-
const position = viewport.scrollPosition;
|
|
8
|
-
if (Scroll.onSynthetic(scroller, position)) {
|
|
9
|
-
return;
|
|
10
|
-
}
|
|
11
|
-
Scroll.onThrottle(scroller, position, () => Scroll.onScroll(scroller, workflow));
|
|
12
|
-
}
|
|
13
|
-
static onSynthetic(scroller, position) {
|
|
14
|
-
const { scroll } = scroller.state;
|
|
15
|
-
const synthPos = scroll.syntheticPosition;
|
|
16
|
-
if (synthPos !== null) {
|
|
17
|
-
if (scroll.syntheticFulfill) {
|
|
18
|
-
scroll.syntheticPosition = null;
|
|
19
|
-
}
|
|
20
|
-
if (!scroll.syntheticFulfill || synthPos === position) {
|
|
21
|
-
scroller.logger.log(() => [
|
|
22
|
-
'skipping scroll', position, `[${scroll.syntheticFulfill ? '' : 'pre-'}synthetic]`
|
|
23
|
-
]);
|
|
24
|
-
return true;
|
|
25
|
-
}
|
|
26
|
-
scroller.logger.log(() => [
|
|
27
|
-
'synthetic scroll has been fulfilled:', position, position < synthPos ? '<' : '>', synthPos
|
|
28
|
-
]);
|
|
29
|
-
}
|
|
30
|
-
return false;
|
|
31
|
-
}
|
|
32
|
-
static onThrottle(scroller, position, done) {
|
|
33
|
-
const { state: { scroll }, settings: { throttle }, logger } = scroller;
|
|
34
|
-
scroll.current = Scroll.getScrollEvent(position, scroll.previous);
|
|
35
|
-
const { direction, time } = scroll.current;
|
|
36
|
-
const timeDiff = scroll.previous ? time - scroll.previous.time : Infinity;
|
|
37
|
-
const delta = throttle - timeDiff;
|
|
38
|
-
const shouldDelay = isFinite(delta) && delta > 0;
|
|
39
|
-
const alreadyDelayed = !!scroll.scrollTimer;
|
|
40
|
-
logger.log(() => [
|
|
41
|
-
direction === Direction.backward ? '\u2934' : '\u2935',
|
|
42
|
-
position,
|
|
43
|
-
shouldDelay ? (timeDiff + 'ms') : '0ms',
|
|
44
|
-
shouldDelay ? (alreadyDelayed ? 'delayed' : `/ ${delta}ms delay`) : ''
|
|
45
|
-
]);
|
|
46
|
-
if (!shouldDelay) {
|
|
47
|
-
if (scroll.scrollTimer) {
|
|
48
|
-
clearTimeout(scroll.scrollTimer);
|
|
49
|
-
scroll.scrollTimer = null;
|
|
50
|
-
}
|
|
51
|
-
done();
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
if (!alreadyDelayed) {
|
|
55
|
-
scroll.scrollTimer = setTimeout(() => {
|
|
56
|
-
logger.log(() => {
|
|
57
|
-
const curr = Scroll.getScrollEvent(scroller.viewport.scrollPosition, scroll.current);
|
|
58
|
-
return [
|
|
59
|
-
curr.direction === Direction.backward ? '\u2934' : '\u2935',
|
|
60
|
-
curr.position,
|
|
61
|
-
(curr.time - time) + 'ms',
|
|
62
|
-
'triggered by timer set on',
|
|
63
|
-
position
|
|
64
|
-
];
|
|
65
|
-
});
|
|
66
|
-
scroll.scrollTimer = null;
|
|
67
|
-
done();
|
|
68
|
-
}, delta);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
static getScrollEvent(position, previous) {
|
|
72
|
-
const time = Number(new Date());
|
|
73
|
-
let direction = Direction.forward;
|
|
74
|
-
if (previous) {
|
|
75
|
-
if (position === previous.position) {
|
|
76
|
-
direction = previous.direction;
|
|
77
|
-
}
|
|
78
|
-
else if (position < previous.position) {
|
|
79
|
-
direction = Direction.backward;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
return { position, direction, time };
|
|
83
|
-
}
|
|
84
|
-
static onScroll(scroller, workflow) {
|
|
85
|
-
const { state: { scroll, cycle } } = scroller;
|
|
86
|
-
scroll.previous = Object.assign({}, scroll.current);
|
|
87
|
-
scroll.current = null;
|
|
88
|
-
if (cycle.busy.get()) {
|
|
89
|
-
scroller.logger.log(() => ['skipping scroll', scroll.previous.position, '[pending]']);
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
|
-
workflow.call({
|
|
93
|
-
process: Scroll.process,
|
|
94
|
-
status: ProcessStatus.next
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
}
|
|
1
|
+
import { BaseProcessFactory, CommonProcess, ProcessStatus } from './misc/index';
|
|
2
|
+
import { Direction } from '../inputs/index';
|
|
3
|
+
export default class Scroll extends BaseProcessFactory(CommonProcess.scroll) {
|
|
4
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
5
|
+
static run(scroller, payload) {
|
|
6
|
+
const { workflow, viewport } = scroller;
|
|
7
|
+
const position = viewport.scrollPosition;
|
|
8
|
+
if (Scroll.onSynthetic(scroller, position)) {
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
Scroll.onThrottle(scroller, position, () => Scroll.onScroll(scroller, workflow));
|
|
12
|
+
}
|
|
13
|
+
static onSynthetic(scroller, position) {
|
|
14
|
+
const { scroll } = scroller.state;
|
|
15
|
+
const synthPos = scroll.syntheticPosition;
|
|
16
|
+
if (synthPos !== null) {
|
|
17
|
+
if (scroll.syntheticFulfill) {
|
|
18
|
+
scroll.syntheticPosition = null;
|
|
19
|
+
}
|
|
20
|
+
if (!scroll.syntheticFulfill || synthPos === position) {
|
|
21
|
+
scroller.logger.log(() => [
|
|
22
|
+
'skipping scroll', position, `[${scroll.syntheticFulfill ? '' : 'pre-'}synthetic]`
|
|
23
|
+
]);
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
scroller.logger.log(() => [
|
|
27
|
+
'synthetic scroll has been fulfilled:', position, position < synthPos ? '<' : '>', synthPos
|
|
28
|
+
]);
|
|
29
|
+
}
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
static onThrottle(scroller, position, done) {
|
|
33
|
+
const { state: { scroll }, settings: { throttle }, logger } = scroller;
|
|
34
|
+
scroll.current = Scroll.getScrollEvent(position, scroll.previous);
|
|
35
|
+
const { direction, time } = scroll.current;
|
|
36
|
+
const timeDiff = scroll.previous ? time - scroll.previous.time : Infinity;
|
|
37
|
+
const delta = throttle - timeDiff;
|
|
38
|
+
const shouldDelay = isFinite(delta) && delta > 0;
|
|
39
|
+
const alreadyDelayed = !!scroll.scrollTimer;
|
|
40
|
+
logger.log(() => [
|
|
41
|
+
direction === Direction.backward ? '\u2934' : '\u2935',
|
|
42
|
+
position,
|
|
43
|
+
shouldDelay ? (timeDiff + 'ms') : '0ms',
|
|
44
|
+
shouldDelay ? (alreadyDelayed ? 'delayed' : `/ ${delta}ms delay`) : ''
|
|
45
|
+
]);
|
|
46
|
+
if (!shouldDelay) {
|
|
47
|
+
if (scroll.scrollTimer) {
|
|
48
|
+
clearTimeout(scroll.scrollTimer);
|
|
49
|
+
scroll.scrollTimer = null;
|
|
50
|
+
}
|
|
51
|
+
done();
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
if (!alreadyDelayed) {
|
|
55
|
+
scroll.scrollTimer = setTimeout(() => {
|
|
56
|
+
logger.log(() => {
|
|
57
|
+
const curr = Scroll.getScrollEvent(scroller.viewport.scrollPosition, scroll.current);
|
|
58
|
+
return [
|
|
59
|
+
curr.direction === Direction.backward ? '\u2934' : '\u2935',
|
|
60
|
+
curr.position,
|
|
61
|
+
(curr.time - time) + 'ms',
|
|
62
|
+
'triggered by timer set on',
|
|
63
|
+
position
|
|
64
|
+
];
|
|
65
|
+
});
|
|
66
|
+
scroll.scrollTimer = null;
|
|
67
|
+
done();
|
|
68
|
+
}, delta);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
static getScrollEvent(position, previous) {
|
|
72
|
+
const time = Number(new Date());
|
|
73
|
+
let direction = Direction.forward;
|
|
74
|
+
if (previous) {
|
|
75
|
+
if (position === previous.position) {
|
|
76
|
+
direction = previous.direction;
|
|
77
|
+
}
|
|
78
|
+
else if (position < previous.position) {
|
|
79
|
+
direction = Direction.backward;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return { position, direction, time };
|
|
83
|
+
}
|
|
84
|
+
static onScroll(scroller, workflow) {
|
|
85
|
+
const { state: { scroll, cycle } } = scroller;
|
|
86
|
+
scroll.previous = Object.assign({}, scroll.current);
|
|
87
|
+
scroll.current = null;
|
|
88
|
+
if (cycle.busy.get()) {
|
|
89
|
+
scroller.logger.log(() => ['skipping scroll', scroll.previous.position, '[pending]']);
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
workflow.call({
|
|
93
|
+
process: Scroll.process,
|
|
94
|
+
status: ProcessStatus.next
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
98
|
//# sourceMappingURL=scroll.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scroll.js","sourceRoot":"","sources":["../../../src/processes/scroll.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAEhF,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,kBAAkB,CAAC,aAAa,CAAC,MAAM,CAAC;IAE1E,6DAA6D;IAC7D,MAAM,CAAC,GAAG,CAAC,QAAkB,EAAE,OAA2B;QACxD,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC;QACxC,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC;QAEzC,IAAI,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"scroll.js","sourceRoot":"","sources":["../../../src/processes/scroll.ts"],"names":[],"mappings":"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","sourcesContent":["import { BaseProcessFactory, CommonProcess, ProcessStatus } from './misc/index';\r\nimport { Scroller } from '../scroller';\r\nimport { Direction } from '../inputs/index';\r\nimport { ScrollEventData, ScrollerWorkflow } from '../interfaces/index';\r\n\r\nexport default class Scroll extends BaseProcessFactory(CommonProcess.scroll) {\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n static run(scroller: Scroller, payload?: { event?: Event }): void {\r\n const { workflow, viewport } = scroller;\r\n const position = viewport.scrollPosition;\r\n\r\n if (Scroll.onSynthetic(scroller, position)) {\r\n return;\r\n }\r\n\r\n Scroll.onThrottle(scroller, position, () =>\r\n Scroll.onScroll(scroller, workflow)\r\n );\r\n }\r\n\r\n static onSynthetic(scroller: Scroller, position: number): boolean {\r\n const { scroll } = scroller.state;\r\n const synthPos = scroll.syntheticPosition;\r\n if (synthPos !== null) {\r\n if (scroll.syntheticFulfill) {\r\n scroll.syntheticPosition = null;\r\n }\r\n if (!scroll.syntheticFulfill || synthPos === position) {\r\n scroller.logger.log(() => [\r\n 'skipping scroll', position, `[${scroll.syntheticFulfill ? '' : 'pre-'}synthetic]`\r\n ]);\r\n return true;\r\n }\r\n scroller.logger.log(() => [\r\n 'synthetic scroll has been fulfilled:', position, position < synthPos ? '<' : '>', synthPos\r\n ]);\r\n }\r\n return false;\r\n }\r\n\r\n static onThrottle(scroller: Scroller, position: number, done: () => void): void {\r\n const { state: { scroll }, settings: { throttle }, logger } = scroller;\r\n scroll.current = Scroll.getScrollEvent(position, scroll.previous);\r\n const { direction, time } = scroll.current;\r\n const timeDiff = scroll.previous ? time - scroll.previous.time : Infinity;\r\n const delta = throttle - timeDiff;\r\n const shouldDelay = isFinite(delta) && delta > 0;\r\n const alreadyDelayed = !!scroll.scrollTimer;\r\n logger.log(() => [\r\n direction === Direction.backward ? '\\u2934' : '\\u2935',\r\n position,\r\n shouldDelay ? (timeDiff + 'ms') : '0ms',\r\n shouldDelay ? (alreadyDelayed ? 'delayed' : `/ ${delta}ms delay`) : ''\r\n ]);\r\n if (!shouldDelay) {\r\n if (scroll.scrollTimer) {\r\n clearTimeout(scroll.scrollTimer);\r\n scroll.scrollTimer = null;\r\n }\r\n done();\r\n return;\r\n }\r\n if (!alreadyDelayed) {\r\n scroll.scrollTimer = setTimeout(() => {\r\n logger.log(() => {\r\n const curr = Scroll.getScrollEvent(scroller.viewport.scrollPosition, scroll.current);\r\n return [\r\n curr.direction === Direction.backward ? '\\u2934' : '\\u2935',\r\n curr.position,\r\n (curr.time - time) + 'ms',\r\n 'triggered by timer set on',\r\n position\r\n ];\r\n });\r\n scroll.scrollTimer = null;\r\n done();\r\n }, delta);\r\n }\r\n }\r\n\r\n static getScrollEvent(position: number, previous: ScrollEventData | null): ScrollEventData {\r\n const time = Number(new Date());\r\n let direction: Direction | null = Direction.forward;\r\n if (previous) {\r\n if (position === previous.position) {\r\n direction = previous.direction;\r\n } else if (position < previous.position) {\r\n direction = Direction.backward;\r\n }\r\n }\r\n return { position, direction, time };\r\n }\r\n\r\n static onScroll(scroller: Scroller, workflow: ScrollerWorkflow): void {\r\n const { state: { scroll, cycle } } = scroller;\r\n scroll.previous = { ...(scroll.current as ScrollEventData) };\r\n scroll.current = null;\r\n\r\n if (cycle.busy.get()) {\r\n scroller.logger.log(() => ['skipping scroll', (scroll.previous as ScrollEventData).position, '[pending]']);\r\n return;\r\n }\r\n\r\n workflow.call({\r\n process: Scroll.process,\r\n status: ProcessStatus.next\r\n });\r\n }\r\n\r\n}\r\n"]}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { BaseProcessFactory, CommonProcess, ProcessStatus } from './misc/index';
|
|
2
|
-
export default class Start extends BaseProcessFactory(CommonProcess.start) {
|
|
3
|
-
static run(scroller) {
|
|
4
|
-
const payload = scroller.state.startInnerLoop();
|
|
5
|
-
scroller.workflow.call({
|
|
6
|
-
process: Start.process,
|
|
7
|
-
status: ProcessStatus.next,
|
|
8
|
-
payload
|
|
9
|
-
});
|
|
10
|
-
}
|
|
11
|
-
}
|
|
1
|
+
import { BaseProcessFactory, CommonProcess, ProcessStatus } from './misc/index';
|
|
2
|
+
export default class Start extends BaseProcessFactory(CommonProcess.start) {
|
|
3
|
+
static run(scroller) {
|
|
4
|
+
const payload = scroller.state.startInnerLoop();
|
|
5
|
+
scroller.workflow.call({
|
|
6
|
+
process: Start.process,
|
|
7
|
+
status: ProcessStatus.next,
|
|
8
|
+
payload
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
12
|
//# sourceMappingURL=start.js.map
|
package/dist/esm2015/scroller.js
CHANGED
|
@@ -1,87 +1,87 @@
|
|
|
1
|
-
import { DatasourceGeneric, makeDatasource } from './classes/datasource';
|
|
2
|
-
import { Settings } from './classes/settings';
|
|
3
|
-
import { Logger } from './classes/logger';
|
|
4
|
-
import { Routines } from './classes/domRoutines';
|
|
5
|
-
import { Viewport } from './classes/viewport';
|
|
6
|
-
import { Buffer } from './classes/buffer';
|
|
7
|
-
import { State } from './classes/state';
|
|
8
|
-
import { Adapter } from './classes/adapter';
|
|
9
|
-
import { validate, DATASOURCE } from './inputs/index';
|
|
10
|
-
import core from './version';
|
|
11
|
-
export const INVALID_DATASOURCE_PREFIX = 'Invalid datasource:';
|
|
12
|
-
let instanceCount = 0;
|
|
13
|
-
export class Scroller {
|
|
14
|
-
constructor({ datasource, consumer, element, workflow, Routines: CustomRoutines, scroller }) {
|
|
15
|
-
const { params: { get } } = validate(datasource, DATASOURCE);
|
|
16
|
-
if (!get.isValid) {
|
|
17
|
-
throw new Error(`${INVALID_DATASOURCE_PREFIX} ${get.errors[0]}`);
|
|
18
|
-
}
|
|
19
|
-
const packageInfo = scroller ? scroller.state.packageInfo : { consumer, core };
|
|
20
|
-
element = scroller ? scroller.routines.element : element;
|
|
21
|
-
workflow = scroller ? scroller.workflow : workflow;
|
|
22
|
-
// In general, custom Routines must extend the original Routines. If not, we provide implicit extending.
|
|
23
|
-
// This is undocumented feature. It should be removed in vscroll v2.
|
|
24
|
-
if (CustomRoutines && !(CustomRoutines.prototype instanceof Routines)) {
|
|
25
|
-
class __Routines extends Routines {
|
|
26
|
-
}
|
|
27
|
-
Object.getOwnPropertyNames(CustomRoutines.prototype)
|
|
28
|
-
.filter(method => method !== 'constructor')
|
|
29
|
-
.forEach(method => __Routines.prototype[method] = CustomRoutines === null || CustomRoutines === void 0 ? void 0 : CustomRoutines.prototype[method]);
|
|
30
|
-
CustomRoutines = __Routines;
|
|
31
|
-
}
|
|
32
|
-
this.workflow = workflow;
|
|
33
|
-
this.settings = new Settings(datasource.settings, datasource.devSettings, ++instanceCount);
|
|
34
|
-
this.logger = new Logger(this, packageInfo, datasource.adapter);
|
|
35
|
-
this.routines = new (CustomRoutines || Routines)(element, this.settings);
|
|
36
|
-
this.state = new State(packageInfo, this.settings, scroller ? scroller.state : void 0);
|
|
37
|
-
this.buffer = new Buffer(this.settings, workflow.onDataChanged, this.logger);
|
|
38
|
-
this.viewport = new Viewport(this.settings, this.routines, this.state, this.logger);
|
|
39
|
-
this.logger.object('vscroll settings object', this.settings, true);
|
|
40
|
-
this.initDatasource(datasource, scroller);
|
|
41
|
-
}
|
|
42
|
-
initDatasource(datasource, scroller) {
|
|
43
|
-
if (scroller) { // scroller re-instantiating case
|
|
44
|
-
this.datasource = datasource;
|
|
45
|
-
this.adapter = scroller.adapter;
|
|
46
|
-
// todo: what about (this.settings.adapter !== scroller.setting.adapter) case?
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
// scroller is being instantiated for the first time
|
|
50
|
-
const constructed = datasource instanceof DatasourceGeneric;
|
|
51
|
-
const mockAdapter = !constructed && !this.settings.adapter;
|
|
52
|
-
if (constructed) { // datasource is already instantiated
|
|
53
|
-
this.datasource = datasource;
|
|
54
|
-
}
|
|
55
|
-
else { // datasource as POJO
|
|
56
|
-
const DS = makeDatasource(() => ({ mock: mockAdapter }));
|
|
57
|
-
this.datasource = new DS(datasource);
|
|
58
|
-
if (this.settings.adapter) {
|
|
59
|
-
datasource.adapter = this.datasource.adapter;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
const publicContext = !mockAdapter ? this.datasource.adapter : null;
|
|
63
|
-
this.adapter = new Adapter(publicContext, () => this.workflow, this.logger);
|
|
64
|
-
}
|
|
65
|
-
init(adapterRun$) {
|
|
66
|
-
this.viewport.reset(this.buffer.startIndex);
|
|
67
|
-
this.logger.stat('initialization');
|
|
68
|
-
this.adapter.initialize({
|
|
69
|
-
buffer: this.buffer,
|
|
70
|
-
state: this.state,
|
|
71
|
-
viewport: this.viewport,
|
|
72
|
-
logger: this.logger, adapterRun$,
|
|
73
|
-
getWorkflow: () => this.workflow
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
dispose(forever) {
|
|
77
|
-
this.logger.log(() => 'disposing scroller' + (forever ? ' (forever)' : ''));
|
|
78
|
-
if (forever) { // Adapter is not re-instantiated on reset
|
|
79
|
-
this.adapter.dispose();
|
|
80
|
-
}
|
|
81
|
-
this.buffer.dispose();
|
|
82
|
-
this.state.dispose();
|
|
83
|
-
}
|
|
84
|
-
finalize() {
|
|
85
|
-
}
|
|
86
|
-
}
|
|
1
|
+
import { DatasourceGeneric, makeDatasource } from './classes/datasource';
|
|
2
|
+
import { Settings } from './classes/settings';
|
|
3
|
+
import { Logger } from './classes/logger';
|
|
4
|
+
import { Routines } from './classes/domRoutines';
|
|
5
|
+
import { Viewport } from './classes/viewport';
|
|
6
|
+
import { Buffer } from './classes/buffer';
|
|
7
|
+
import { State } from './classes/state';
|
|
8
|
+
import { Adapter } from './classes/adapter';
|
|
9
|
+
import { validate, DATASOURCE } from './inputs/index';
|
|
10
|
+
import core from './version';
|
|
11
|
+
export const INVALID_DATASOURCE_PREFIX = 'Invalid datasource:';
|
|
12
|
+
let instanceCount = 0;
|
|
13
|
+
export class Scroller {
|
|
14
|
+
constructor({ datasource, consumer, element, workflow, Routines: CustomRoutines, scroller }) {
|
|
15
|
+
const { params: { get } } = validate(datasource, DATASOURCE);
|
|
16
|
+
if (!get.isValid) {
|
|
17
|
+
throw new Error(`${INVALID_DATASOURCE_PREFIX} ${get.errors[0]}`);
|
|
18
|
+
}
|
|
19
|
+
const packageInfo = scroller ? scroller.state.packageInfo : { consumer, core };
|
|
20
|
+
element = scroller ? scroller.routines.element : element;
|
|
21
|
+
workflow = scroller ? scroller.workflow : workflow;
|
|
22
|
+
// In general, custom Routines must extend the original Routines. If not, we provide implicit extending.
|
|
23
|
+
// This is undocumented feature. It should be removed in vscroll v2.
|
|
24
|
+
if (CustomRoutines && !(CustomRoutines.prototype instanceof Routines)) {
|
|
25
|
+
class __Routines extends Routines {
|
|
26
|
+
}
|
|
27
|
+
Object.getOwnPropertyNames(CustomRoutines.prototype)
|
|
28
|
+
.filter(method => method !== 'constructor')
|
|
29
|
+
.forEach(method => __Routines.prototype[method] = CustomRoutines === null || CustomRoutines === void 0 ? void 0 : CustomRoutines.prototype[method]);
|
|
30
|
+
CustomRoutines = __Routines;
|
|
31
|
+
}
|
|
32
|
+
this.workflow = workflow;
|
|
33
|
+
this.settings = new Settings(datasource.settings, datasource.devSettings, ++instanceCount);
|
|
34
|
+
this.logger = new Logger(this, packageInfo, datasource.adapter);
|
|
35
|
+
this.routines = new (CustomRoutines || Routines)(element, this.settings);
|
|
36
|
+
this.state = new State(packageInfo, this.settings, scroller ? scroller.state : void 0);
|
|
37
|
+
this.buffer = new Buffer(this.settings, workflow.onDataChanged, this.logger);
|
|
38
|
+
this.viewport = new Viewport(this.settings, this.routines, this.state, this.logger);
|
|
39
|
+
this.logger.object('vscroll settings object', this.settings, true);
|
|
40
|
+
this.initDatasource(datasource, scroller);
|
|
41
|
+
}
|
|
42
|
+
initDatasource(datasource, scroller) {
|
|
43
|
+
if (scroller) { // scroller re-instantiating case
|
|
44
|
+
this.datasource = datasource;
|
|
45
|
+
this.adapter = scroller.adapter;
|
|
46
|
+
// todo: what about (this.settings.adapter !== scroller.setting.adapter) case?
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
// scroller is being instantiated for the first time
|
|
50
|
+
const constructed = datasource instanceof DatasourceGeneric;
|
|
51
|
+
const mockAdapter = !constructed && !this.settings.adapter;
|
|
52
|
+
if (constructed) { // datasource is already instantiated
|
|
53
|
+
this.datasource = datasource;
|
|
54
|
+
}
|
|
55
|
+
else { // datasource as POJO
|
|
56
|
+
const DS = makeDatasource(() => ({ mock: mockAdapter }));
|
|
57
|
+
this.datasource = new DS(datasource);
|
|
58
|
+
if (this.settings.adapter) {
|
|
59
|
+
datasource.adapter = this.datasource.adapter;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
const publicContext = !mockAdapter ? this.datasource.adapter : null;
|
|
63
|
+
this.adapter = new Adapter(publicContext, () => this.workflow, this.logger);
|
|
64
|
+
}
|
|
65
|
+
init(adapterRun$) {
|
|
66
|
+
this.viewport.reset(this.buffer.startIndex);
|
|
67
|
+
this.logger.stat('initialization');
|
|
68
|
+
this.adapter.initialize({
|
|
69
|
+
buffer: this.buffer,
|
|
70
|
+
state: this.state,
|
|
71
|
+
viewport: this.viewport,
|
|
72
|
+
logger: this.logger, adapterRun$,
|
|
73
|
+
getWorkflow: () => this.workflow
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
dispose(forever) {
|
|
77
|
+
this.logger.log(() => 'disposing scroller' + (forever ? ' (forever)' : ''));
|
|
78
|
+
if (forever) { // Adapter is not re-instantiated on reset
|
|
79
|
+
this.adapter.dispose();
|
|
80
|
+
}
|
|
81
|
+
this.buffer.dispose();
|
|
82
|
+
this.state.dispose();
|
|
83
|
+
}
|
|
84
|
+
finalize() {
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
87
|
//# sourceMappingURL=scroller.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scroller.js","sourceRoot":"","sources":["../../src/scroller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,IAAI,MAAM,WAAW,CAAC;AAK7B,MAAM,CAAC,MAAM,yBAAyB,GAAG,qBAAqB,CAAC;AAE/D,IAAI,aAAa,GAAG,CAAC,CAAC;AAEtB,MAAM,OAAO,QAAQ;IAYnB,YAAY,EACV,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EACtD;QACrB,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAC7D,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;
|
|
1
|
+
{"version":3,"file":"scroller.js","sourceRoot":"","sources":["../../src/scroller.ts"],"names":[],"mappings":"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","sourcesContent":["import { DatasourceGeneric, makeDatasource } from './classes/datasource';\r\nimport { Settings } from './classes/settings';\r\nimport { Logger } from './classes/logger';\r\nimport { Routines } from './classes/domRoutines';\r\nimport { Viewport } from './classes/viewport';\r\nimport { Buffer } from './classes/buffer';\r\nimport { State } from './classes/state';\r\nimport { Adapter } from './classes/adapter';\r\nimport { Reactive } from './classes/reactive';\r\nimport { validate, DATASOURCE } from './inputs/index';\r\nimport core from './version';\r\nimport {\r\n ScrollerWorkflow, IDatasource, IDatasourceConstructed, ScrollerParams, IPackages, ProcessSubject\r\n} from './interfaces/index';\r\n\r\nexport const INVALID_DATASOURCE_PREFIX = 'Invalid datasource:';\r\n\r\nlet instanceCount = 0;\r\n\r\nexport class Scroller<Data = unknown> {\r\n public datasource: IDatasourceConstructed<Data>;\r\n public workflow: ScrollerWorkflow<Data>;\r\n\r\n public settings: Settings<Data>;\r\n public logger: Logger;\r\n public routines: Routines;\r\n public viewport: Viewport;\r\n public buffer: Buffer<Data>;\r\n public state: State;\r\n public adapter: Adapter<Data>;\r\n\r\n constructor({\r\n datasource, consumer, element, workflow, Routines: CustomRoutines, scroller\r\n }: ScrollerParams<Data>) {\r\n const { params: { get } } = validate(datasource, DATASOURCE);\r\n if (!get.isValid) {\r\n throw new Error(`${INVALID_DATASOURCE_PREFIX} ${get.errors[0]}`);\r\n }\r\n\r\n const packageInfo = scroller ? scroller.state.packageInfo : ({ consumer, core } as IPackages);\r\n element = scroller ? scroller.routines.element : (element as HTMLElement);\r\n workflow = scroller ? scroller.workflow : (workflow as ScrollerWorkflow<Data>);\r\n\r\n // In general, custom Routines must extend the original Routines. If not, we provide implicit extending.\r\n // This is undocumented feature. It should be removed in vscroll v2.\r\n if (CustomRoutines && !(CustomRoutines.prototype instanceof Routines)) {\r\n class __Routines extends Routines { }\r\n Object.getOwnPropertyNames(CustomRoutines.prototype)\r\n .filter(method => method !== 'constructor')\r\n .forEach(method =>\r\n (__Routines.prototype as unknown as Record<string, unknown>)[method] = CustomRoutines?.prototype[method]\r\n );\r\n CustomRoutines = __Routines;\r\n }\r\n\r\n this.workflow = workflow;\r\n this.settings = new Settings<Data>(datasource.settings, datasource.devSettings, ++instanceCount);\r\n this.logger = new Logger(this as Scroller, packageInfo, datasource.adapter);\r\n this.routines = new (CustomRoutines || Routines)(element, this.settings);\r\n this.state = new State(packageInfo, this.settings, scroller ? scroller.state : void 0);\r\n this.buffer = new Buffer<Data>(this.settings, workflow.onDataChanged, this.logger);\r\n this.viewport = new Viewport(this.settings, this.routines, this.state, this.logger);\r\n this.logger.object('vscroll settings object', this.settings, true);\r\n\r\n this.initDatasource(datasource, scroller);\r\n }\r\n\r\n initDatasource(datasource: IDatasource<Data>, scroller?: Scroller<Data>): void {\r\n if (scroller) { // scroller re-instantiating case\r\n this.datasource = datasource as IDatasourceConstructed<Data>;\r\n this.adapter = scroller.adapter;\r\n // todo: what about (this.settings.adapter !== scroller.setting.adapter) case?\r\n return;\r\n }\r\n // scroller is being instantiated for the first time\r\n const constructed = datasource instanceof DatasourceGeneric;\r\n const mockAdapter = !constructed && !this.settings.adapter;\r\n if (constructed) { // datasource is already instantiated\r\n this.datasource = datasource as IDatasourceConstructed<Data>;\r\n } else { // datasource as POJO\r\n const DS = makeDatasource(() => ({ mock: mockAdapter }));\r\n this.datasource = new DS<Data>(datasource);\r\n if (this.settings.adapter) {\r\n datasource.adapter = this.datasource.adapter;\r\n }\r\n }\r\n const publicContext = !mockAdapter ? this.datasource.adapter : null;\r\n this.adapter = new Adapter<Data>(publicContext, () => this.workflow, this.logger);\r\n }\r\n\r\n init(adapterRun$?: Reactive<ProcessSubject>): void {\r\n this.viewport.reset(this.buffer.startIndex);\r\n this.logger.stat('initialization');\r\n this.adapter.initialize({\r\n buffer: this.buffer,\r\n state: this.state,\r\n viewport: this.viewport,\r\n logger: this.logger, adapterRun$,\r\n getWorkflow: () => this.workflow\r\n });\r\n }\r\n\r\n dispose(forever?: boolean): void {\r\n this.logger.log(() => 'disposing scroller' + (forever ? ' (forever)' : ''));\r\n if (forever) { // Adapter is not re-instantiated on reset\r\n this.adapter.dispose();\r\n }\r\n this.buffer.dispose();\r\n this.state.dispose();\r\n }\r\n\r\n finalize(): void {\r\n }\r\n\r\n}\r\n"]}
|
package/dist/esm2015/version.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export default {
|
|
2
|
-
name: 'vscroll',
|
|
3
|
-
version: '1.
|
|
4
|
-
};
|
|
1
|
+
export default {
|
|
2
|
+
name: 'vscroll',
|
|
3
|
+
version: '1.7.0'
|
|
4
|
+
};
|
|
5
5
|
//# sourceMappingURL=version.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,eAAe;IACb,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,OAAO;CACjB,CAAC","sourcesContent":["export default {\n name: 'vscroll',\n version: '1.
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,eAAe;IACb,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,OAAO;CACjB,CAAC","sourcesContent":["export default {\n name: 'vscroll',\n version: '1.7.0'\n};\n"]}
|