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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buffer.js","sourceRoot":"","sources":["../../../src/classes/buffer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Cache } from './buffer/cache';\r\nimport { CheckBufferCall } from './buffer/checkCall';\r\nimport { Item } from './item';\r\nimport { Settings } from './settings';\r\nimport { Logger } from './logger';\r\nimport { Reactive } from './reactive';\r\nimport { Direction } from '../inputs/index';\r\nimport { OnDataChanged, BufferUpdater, ItemsPredicate } from '../interfaces/index';\r\n\r\nexport class Buffer<Data> {\r\n\r\n private _items: Item<Data>[] = [];\r\n private _absMinIndex: number;\r\n private _absMaxIndex: number;\r\n bof: Reactive<boolean>;\r\n eof: Reactive<boolean>;\r\n\r\n changeItems: OnDataChanged<Data>;\r\n minIndexUser: number;\r\n maxIndexUser: number;\r\n startIndexUser: number;\r\n startIndex: number;\r\n\r\n private pristine: boolean;\r\n private cache: Cache<Data>;\r\n private checkCall: CheckBufferCall<Data>;\r\n private readonly logger: Logger;\r\n\r\n constructor(settings: Settings<Data>, onDataChanged: OnDataChanged<Data>, logger: Logger) {\r\n this.logger = logger;\r\n this.changeItems = onDataChanged;\r\n this.bof = new Reactive<boolean>(false);\r\n this.eof = new Reactive<boolean>(false);\r\n this.cache = new Cache<Data>(settings, logger);\r\n this.checkCall = new CheckBufferCall(this, logger);\r\n this.startIndexUser = settings.startIndex;\r\n this.minIndexUser = settings.minIndex;\r\n this.maxIndexUser = settings.maxIndex;\r\n this.reset(true);\r\n }\r\n\r\n dispose(): void {\r\n this.bof.dispose();\r\n this.eof.dispose();\r\n this._items.forEach(item => item.dispose());\r\n this._items = [];\r\n }\r\n\r\n reset(force: boolean, startIndex?: number): void {\r\n this.items.forEach(item => item.hide());\r\n this.pristine = true;\r\n this.items = [];\r\n this.cache.reset(force);\r\n this.absMinIndex = this.minIndexUser;\r\n this.absMaxIndex = this.maxIndexUser;\r\n this.setCurrentStartIndex(startIndex);\r\n this.bof.set(false);\r\n this.eof.set(false);\r\n this.pristine = false;\r\n }\r\n\r\n setCurrentStartIndex(newStartIndex?: unknown): void {\r\n const min = this.minIndexUser;\r\n const max = this.maxIndexUser;\r\n const start = this.startIndexUser;\r\n let index = Number(newStartIndex);\r\n if (Number.isNaN(index)) {\r\n this.logger.log(() => `fallback startIndex to settings.startIndex (${start})`);\r\n index = start;\r\n }\r\n if (index < min) {\r\n this.logger.log(() => `setting startIndex to settings.minIndex (${min}) because ${index} < ${min}`);\r\n index = min;\r\n }\r\n if (index > max) {\r\n this.logger.log(() => `setting startIndex to settings.maxIndex (${max}) because ${index} > ${max}`);\r\n index = max;\r\n }\r\n this.startIndex = index;\r\n }\r\n\r\n set items(items: Item<Data>[]) {\r\n this._items = items;\r\n this.changeItems(items);\r\n if (!this.pristine) {\r\n this.checkBOF();\r\n this.checkEOF();\r\n }\r\n }\r\n\r\n get items(): Item<Data>[] {\r\n return this._items;\r\n }\r\n\r\n set absMinIndex(value: number) {\r\n if (this._absMinIndex !== value) {\r\n this._absMinIndex = Number.isFinite(this._absMaxIndex) && value > this._absMaxIndex ? this._absMaxIndex : value;\r\n }\r\n if (!this.pristine) {\r\n this.checkBOF();\r\n }\r\n }\r\n\r\n get absMinIndex(): number {\r\n return this._absMinIndex;\r\n }\r\n\r\n set absMaxIndex(value: number) {\r\n if (this._absMaxIndex !== value) {\r\n this._absMaxIndex = Number.isFinite(this._absMinIndex) && value < this._absMinIndex ? this._absMinIndex : value;\r\n }\r\n if (!this.pristine) {\r\n this.checkEOF();\r\n }\r\n }\r\n\r\n get absMaxIndex(): number {\r\n return this._absMaxIndex;\r\n }\r\n\r\n private checkBOF() {\r\n // since bof has no setter, need to call checkBOF() on items and absMinIndex change\r\n const bof = this.items.length\r\n ? (this.items[0].$index === this.absMinIndex)\r\n : isFinite(this.absMinIndex);\r\n this.bof.set(bof);\r\n }\r\n\r\n private checkEOF() {\r\n // since eof has no setter, need to call checkEOF() on items and absMaxIndex change\r\n const eof = this.items.length\r\n ? (this.items[this.items.length - 1].$index === this.absMaxIndex)\r\n : isFinite(this.absMaxIndex);\r\n this.eof.set(eof);\r\n }\r\n\r\n get size(): number {\r\n return this._items.length;\r\n }\r\n\r\n get cacheSize(): number {\r\n return this.cache.size;\r\n }\r\n\r\n get defaultSize(): number {\r\n return this.cache.getDefaultSize();\r\n }\r\n\r\n get minIndex(): number {\r\n return isFinite(this.cache.minIndex) ? this.cache.minIndex : this.startIndex;\r\n }\r\n\r\n get maxIndex(): number {\r\n return isFinite(this.cache.maxIndex) ? this.cache.maxIndex : this.startIndex;\r\n }\r\n\r\n get firstIndex(): number {\r\n return this.items.length ? this.items[0].$index : NaN;\r\n }\r\n\r\n get lastIndex(): number {\r\n return this.items.length ? this.items[this.items.length - 1].$index : NaN;\r\n }\r\n\r\n get finiteAbsMinIndex(): number {\r\n return isFinite(this.absMinIndex) ? this.absMinIndex : this.minIndex;\r\n }\r\n\r\n get finiteAbsMaxIndex(): number {\r\n return isFinite(this.absMaxIndex) ? this.absMaxIndex : this.maxIndex;\r\n }\r\n\r\n get($index: number): Item<Data> | undefined {\r\n return this.items.find(item => item.$index === $index);\r\n }\r\n\r\n setItems(items: Item<Data>[]): boolean {\r\n if (!this.items.length) {\r\n this.items = [...items];\r\n } else if (this.items[0].$index > items[items.length - 1].$index) {\r\n this.items = [...items, ...this.items];\r\n } else if (items[0].$index > this.items[this.items.length - 1].$index) {\r\n this.items = [...this.items, ...items];\r\n } else {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n clip(): void {\r\n this.items = this.items.filter(({ toRemove }) => !toRemove);\r\n }\r\n\r\n getIndexToInsert(predicate?: ItemsPredicate, before?: number, after?: number): number {\r\n return this.checkCall.insertInBuffer(predicate, before, after);\r\n }\r\n\r\n private shiftExtremum(amount: number, fixRight: boolean) {\r\n if (!fixRight) {\r\n this.absMaxIndex += amount;\r\n } else {\r\n this.absMinIndex -= amount;\r\n this.startIndex -= amount;\r\n }\r\n if (this.startIndex > this.absMaxIndex) {\r\n this.startIndex = this.absMaxIndex;\r\n } else if (this.startIndex < this.absMinIndex) {\r\n this.startIndex = this.absMinIndex;\r\n }\r\n }\r\n\r\n insertVirtually(items: Data[], index: number, direction: Direction, fixRight: boolean): boolean {\r\n if (!this.checkCall.insertVirtual(items, index, direction)) {\r\n return false;\r\n }\r\n let shift = 0;\r\n if (index <= this.firstIndex && !fixRight) {\r\n shift = items.length;\r\n } else if (index >= this.lastIndex && fixRight) {\r\n shift = -items.length;\r\n }\r\n if (shift) {\r\n this.items.forEach(item => item.updateIndex(item.$index + shift));\r\n this.cache.insertItems(items, index, direction, fixRight);\r\n this.items = [...this.items];\r\n }\r\n this.shiftExtremum(items.length, fixRight);\r\n return true;\r\n }\r\n\r\n removeVirtually(indexes: number[], fixRight: boolean): void {\r\n const length = this.items.length;\r\n let shifted = false;\r\n for (\r\n let i = fixRight ? length - 1 : 0;\r\n fixRight ? i >= 0 : i < length;\r\n fixRight ? i-- : i++\r\n ) {\r\n const item = this.items[i];\r\n const diff = indexes.reduce((acc, index) => acc + (fixRight\r\n ? (item.$index < index ? 1 : 0)\r\n : (item.$index > index ? -1 : 0)\r\n ), 0);\r\n shifted = shifted || !!diff;\r\n item.updateIndex(item.$index + diff);\r\n }\r\n this.shiftExtremum(-indexes.length, fixRight);\r\n if (shifted) {\r\n this.items = [...this.items];\r\n }\r\n this.cache.removeItems(indexes, fixRight);\r\n }\r\n\r\n fillEmpty(\r\n items: Data[], beforeIndex: number | undefined, afterIndex: number | undefined, fixRight: boolean,\r\n generator: (index: number, data: Data) => Item<Data>,\r\n ): boolean {\r\n if (!this.checkCall.fillEmpty(items, beforeIndex, afterIndex)) {\r\n return false;\r\n }\r\n const before = Number.isInteger(beforeIndex);\r\n const index = (before ? beforeIndex : afterIndex) as number;\r\n const shift = (fixRight ? items.length : (before ? 1 : 0));\r\n this.items = items.map((data, i) =>\r\n generator(index + i + (!before ? 1 : 0) - shift, data)\r\n );\r\n this._absMinIndex = this.items[0].$index;\r\n this._absMaxIndex = this.items[this.size - 1].$index;\r\n if (this.startIndex <= this.absMinIndex) {\r\n this.startIndex = this.absMinIndex;\r\n } else if (this.startIndex > this.absMaxIndex) {\r\n this.startIndex = this.absMaxIndex;\r\n }\r\n return true;\r\n }\r\n\r\n updateItems(\r\n predicate: BufferUpdater<Data>,\r\n generator: (index: number, data: Data) => Item<Data>,\r\n indexToTrack: number,\r\n fixRight: boolean\r\n ): { trackedIndex: number, toRemove: Item<Data>[] } {\r\n if (!this.size || Number.isNaN(this.firstIndex)) {\r\n return { trackedIndex: NaN, toRemove: [] };\r\n }\r\n let trackedIndex = indexToTrack;\r\n let index = fixRight ? this.lastIndex : this.firstIndex;\r\n const items: Item<Data>[] = [];\r\n const diff = fixRight ? -1 : 1;\r\n const limit = this.size - 1;\r\n const beforeMap = new Map<number, Item>(); // need to persist original $indexes\r\n const updateArray = Array.prototype[fixRight ? 'unshift' : 'push'];\r\n\r\n for (let i = fixRight ? limit : 0; fixRight ? i >= 0 : i <= limit; i += diff) {\r\n const item = this.items[i];\r\n beforeMap.set(item.$index, item);\r\n const result = predicate(item);\r\n\r\n // if predicate result is falsy or empty array -> delete\r\n if (!result || (Array.isArray(result) && !result.length)) {\r\n item.toRemove = true;\r\n trackedIndex += item.$index >= indexToTrack ? (fixRight ? 1 : 0) : (fixRight ? 0 : -1);\r\n this.shiftExtremum(-1, fixRight);\r\n continue;\r\n }\r\n\r\n // if predicate result is truthy but not array -> leave\r\n if (!Array.isArray(result)) {\r\n item.updateIndex(index);\r\n updateArray.call(items, item);\r\n index += diff;\r\n continue;\r\n }\r\n\r\n // if predicate result is non-empty array -> insert/replace\r\n if (item.$index < indexToTrack) {\r\n trackedIndex += fixRight ? 0 : result.length - 1;\r\n } else if (item.$index > indexToTrack) {\r\n trackedIndex += fixRight ? 1 - result.length : 0;\r\n }\r\n let toRemove = true;\r\n const newItems: Item<Data>[] = [];\r\n (fixRight ? [...result].reverse() : result).forEach((data, i) => {\r\n let newItem: Item<Data>;\r\n if (item.data === data) {\r\n if (indexToTrack === item.$index) {\r\n trackedIndex = index + i * diff;\r\n }\r\n item.updateIndex(index + i * diff);\r\n newItem = item;\r\n toRemove = false; // insert case\r\n } else {\r\n newItem = generator(index + i * diff, data);\r\n newItem.toInsert = true;\r\n }\r\n updateArray.call(newItems, newItem);\r\n });\r\n item.toRemove = toRemove;\r\n updateArray.call(items, ...newItems);\r\n index += diff * result.length;\r\n if (result.length > 1) {\r\n this.shiftExtremum(result.length - 1, fixRight);\r\n }\r\n }\r\n\r\n const toRemove = this.items.filter(item => item.toRemove);\r\n const itemsBefore = Array.from(beforeMap)\r\n .map(([$index, { size, toRemove }]) => ({ $index, size, toRemove }))\r\n .sort((a, b) => a.$index - b.$index);\r\n this.items = items;\r\n this.cache.updateSubset(itemsBefore, items, fixRight);\r\n\r\n if (this.finiteAbsMinIndex === this.finiteAbsMaxIndex) {\r\n trackedIndex = NaN;\r\n } else if (trackedIndex > this.finiteAbsMaxIndex) {\r\n trackedIndex = this.finiteAbsMaxIndex;\r\n } else if (trackedIndex < this.finiteAbsMinIndex) {\r\n trackedIndex = this.finiteAbsMinIndex;\r\n }\r\n return { trackedIndex, toRemove };\r\n }\r\n\r\n cacheItem(item: Item<Data>): void {\r\n this.cache.add(item);\r\n }\r\n\r\n getFirstVisibleItemIndex(): number {\r\n const length = this.items.length;\r\n for (let i = 0; i < length; i++) {\r\n if (!this.items[i].invisible) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n getLastVisibleItemIndex(): number {\r\n for (let i = this.items.length - 1; i >= 0; i--) {\r\n if (!this.items[i].invisible) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n getFirstVisibleItem(): Item<Data> | undefined {\r\n const index = this.getFirstVisibleItemIndex();\r\n return index >= 0 ? this.items[index] : void 0;\r\n }\r\n\r\n getLastVisibleItem(): Item<Data> | undefined {\r\n const index = this.getLastVisibleItemIndex();\r\n return index >= 0 ? this.items[index] : void 0;\r\n }\r\n\r\n getEdgeVisibleItem(direction: Direction, opposite?: boolean): Item<Data> | undefined {\r\n return direction === (!opposite ? Direction.forward : Direction.backward) ?\r\n this.getLastVisibleItem() : this.getFirstVisibleItem();\r\n }\r\n\r\n getVisibleItemsCount(): number {\r\n return this.items.reduce((acc: number, item) => acc + (item.invisible ? 0 : 1), 0);\r\n }\r\n\r\n getSizeByIndex(index: number): number {\r\n return this.cache.getSizeByIndex(index);\r\n }\r\n\r\n checkDefaultSize(): boolean {\r\n return this.cache.recalculateDefaultSize();\r\n }\r\n\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"buffer.js","sourceRoot":"","sources":["../../../src/classes/buffer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Cache } from './buffer/cache';\r\nimport { CheckBufferCall } from './buffer/checkCall';\r\nimport { Item } from './item';\r\nimport { Settings } from './settings';\r\nimport { Logger } from './logger';\r\nimport { Reactive } from './reactive';\r\nimport { Direction } from '../inputs/index';\r\nimport { OnDataChanged, BufferUpdater, ItemsPredicate } from '../interfaces/index';\r\n\r\nexport class Buffer<Data> {\r\n\r\n private _items: Item<Data>[] = [];\r\n private _absMinIndex: number;\r\n private _absMaxIndex: number;\r\n bof: Reactive<boolean>;\r\n eof: Reactive<boolean>;\r\n\r\n changeItems: OnDataChanged<Data>;\r\n minIndexUser: number;\r\n maxIndexUser: number;\r\n startIndexUser: number;\r\n startIndex: number;\r\n\r\n private pristine: boolean;\r\n private cache: Cache<Data>;\r\n private checkCall: CheckBufferCall<Data>;\r\n private readonly logger: Logger;\r\n\r\n constructor(settings: Settings<Data>, onDataChanged: OnDataChanged<Data>, logger: Logger) {\r\n this.logger = logger;\r\n this.changeItems = onDataChanged;\r\n this.bof = new Reactive<boolean>(false);\r\n this.eof = new Reactive<boolean>(false);\r\n this.cache = new Cache<Data>(settings, logger);\r\n this.checkCall = new CheckBufferCall(this, logger);\r\n this.startIndexUser = settings.startIndex;\r\n this.minIndexUser = settings.minIndex;\r\n this.maxIndexUser = settings.maxIndex;\r\n this.reset(true);\r\n }\r\n\r\n dispose(): void {\r\n this.bof.dispose();\r\n this.eof.dispose();\r\n this._items.forEach(item => item.dispose());\r\n this._items = [];\r\n }\r\n\r\n reset(force: boolean, startIndex?: number): void {\r\n this.items.forEach(item => item.hide());\r\n this.pristine = true;\r\n this.items = [];\r\n this.cache.reset(force);\r\n this.absMinIndex = this.minIndexUser;\r\n this.absMaxIndex = this.maxIndexUser;\r\n this.setCurrentStartIndex(startIndex);\r\n this.bof.set(false);\r\n this.eof.set(false);\r\n this.pristine = false;\r\n }\r\n\r\n setCurrentStartIndex(newStartIndex?: unknown): void {\r\n const min = this.minIndexUser;\r\n const max = this.maxIndexUser;\r\n const start = this.startIndexUser;\r\n let index = Number(newStartIndex);\r\n if (Number.isNaN(index)) {\r\n this.logger.log(() => `fallback startIndex to settings.startIndex (${start})`);\r\n index = start;\r\n }\r\n if (index < min) {\r\n this.logger.log(() => `setting startIndex to settings.minIndex (${min}) because ${index} < ${min}`);\r\n index = min;\r\n }\r\n if (index > max) {\r\n this.logger.log(() => `setting startIndex to settings.maxIndex (${max}) because ${index} > ${max}`);\r\n index = max;\r\n }\r\n this.startIndex = index;\r\n }\r\n\r\n set items(items: Item<Data>[]) {\r\n this._items = items;\r\n this.changeItems(items);\r\n if (!this.pristine) {\r\n this.checkBOF();\r\n this.checkEOF();\r\n }\r\n }\r\n\r\n get items(): Item<Data>[] {\r\n return this._items;\r\n }\r\n\r\n set absMinIndex(value: number) {\r\n if (this._absMinIndex !== value) {\r\n this._absMinIndex = Number.isFinite(this._absMaxIndex) && value > this._absMaxIndex ? this._absMaxIndex : value;\r\n }\r\n if (!this.pristine) {\r\n this.checkBOF();\r\n }\r\n }\r\n\r\n get absMinIndex(): number {\r\n return this._absMinIndex;\r\n }\r\n\r\n set absMaxIndex(value: number) {\r\n if (this._absMaxIndex !== value) {\r\n this._absMaxIndex = Number.isFinite(this._absMinIndex) && value < this._absMinIndex ? this._absMinIndex : value;\r\n }\r\n if (!this.pristine) {\r\n this.checkEOF();\r\n }\r\n }\r\n\r\n get absMaxIndex(): number {\r\n return this._absMaxIndex;\r\n }\r\n\r\n private checkBOF() {\r\n // since bof has no setter, need to call checkBOF() on items and absMinIndex change\r\n const bof = this.items.length\r\n ? (this.items[0].$index === this.absMinIndex)\r\n : isFinite(this.absMinIndex);\r\n this.bof.set(bof);\r\n }\r\n\r\n private checkEOF() {\r\n // since eof has no setter, need to call checkEOF() on items and absMaxIndex change\r\n const eof = this.items.length\r\n ? (this.items[this.items.length - 1].$index === this.absMaxIndex)\r\n : isFinite(this.absMaxIndex);\r\n this.eof.set(eof);\r\n }\r\n\r\n get size(): number {\r\n return this._items.length;\r\n }\r\n\r\n get cacheSize(): number {\r\n return this.cache.size;\r\n }\r\n\r\n get defaultSize(): number {\r\n return this.cache.getDefaultSize();\r\n }\r\n\r\n get minIndex(): number {\r\n return isFinite(this.cache.minIndex) ? this.cache.minIndex : this.startIndex;\r\n }\r\n\r\n get maxIndex(): number {\r\n return isFinite(this.cache.maxIndex) ? this.cache.maxIndex : this.startIndex;\r\n }\r\n\r\n get firstIndex(): number {\r\n return this.items.length ? this.items[0].$index : NaN;\r\n }\r\n\r\n get lastIndex(): number {\r\n return this.items.length ? this.items[this.items.length - 1].$index : NaN;\r\n }\r\n\r\n get finiteAbsMinIndex(): number {\r\n return isFinite(this.absMinIndex) ? this.absMinIndex : this.minIndex;\r\n }\r\n\r\n get finiteAbsMaxIndex(): number {\r\n return isFinite(this.absMaxIndex) ? this.absMaxIndex : this.maxIndex;\r\n }\r\n\r\n get($index: number): Item<Data> | undefined {\r\n return this.items.find(item => item.$index === $index);\r\n }\r\n\r\n setItems(items: Item<Data>[]): boolean {\r\n if (!this.items.length) {\r\n this.items = [...items];\r\n } else if (this.items[0].$index > items[items.length - 1].$index) {\r\n this.items = [...items, ...this.items];\r\n } else if (items[0].$index > this.items[this.items.length - 1].$index) {\r\n this.items = [...this.items, ...items];\r\n } else {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n clip(): void {\r\n this.items = this.items.filter(({ toRemove }) => !toRemove);\r\n }\r\n\r\n getIndexToInsert(predicate?: ItemsPredicate, before?: number, after?: number): number {\r\n return this.checkCall.insertInBuffer(predicate, before, after);\r\n }\r\n\r\n private shiftExtremum(amount: number, fixRight: boolean) {\r\n if (!fixRight) {\r\n this.absMaxIndex += amount;\r\n } else {\r\n this.absMinIndex -= amount;\r\n this.startIndex -= amount;\r\n }\r\n if (this.startIndex > this.absMaxIndex) {\r\n this.startIndex = this.absMaxIndex;\r\n } else if (this.startIndex < this.absMinIndex) {\r\n this.startIndex = this.absMinIndex;\r\n }\r\n }\r\n\r\n insertVirtually(items: Data[], index: number, direction: Direction, fixRight: boolean): boolean {\r\n if (!this.checkCall.insertVirtual(items, index, direction)) {\r\n return false;\r\n }\r\n let shift = 0;\r\n if (index <= this.firstIndex && !fixRight) {\r\n shift = items.length;\r\n } else if (index >= this.lastIndex && fixRight) {\r\n shift = -items.length;\r\n }\r\n if (shift) {\r\n this.items.forEach(item => item.updateIndex(item.$index + shift));\r\n this.cache.insertItems(items, index, direction, fixRight);\r\n this.items = [...this.items];\r\n }\r\n this.shiftExtremum(items.length, fixRight);\r\n return true;\r\n }\r\n\r\n removeVirtually(indexes: number[], fixRight: boolean): void {\r\n const length = this.items.length;\r\n let shifted = false;\r\n for (\r\n let i = fixRight ? length - 1 : 0;\r\n fixRight ? i >= 0 : i < length;\r\n fixRight ? i-- : i++\r\n ) {\r\n const item = this.items[i];\r\n const diff = indexes.reduce((acc, index) => acc + (fixRight\r\n ? (item.$index < index ? 1 : 0)\r\n : (item.$index > index ? -1 : 0)\r\n ), 0);\r\n shifted = shifted || !!diff;\r\n item.updateIndex(item.$index + diff);\r\n }\r\n this.shiftExtremum(-indexes.length, fixRight);\r\n if (shifted) {\r\n this.items = [...this.items];\r\n }\r\n this.cache.removeItems(indexes, fixRight);\r\n }\r\n\r\n fillEmpty(\r\n items: Data[], beforeIndex: number | undefined, afterIndex: number | undefined, fixRight: boolean,\r\n generator: (index: number, data: Data) => Item<Data>,\r\n ): boolean {\r\n if (!this.checkCall.fillEmpty(items, beforeIndex, afterIndex)) {\r\n return false;\r\n }\r\n const before = Number.isInteger(beforeIndex);\r\n const index = (before ? beforeIndex : afterIndex) as number;\r\n const shift = (fixRight ? items.length : (before ? 1 : 0));\r\n this.items = items.map((data, i) =>\r\n generator(index + i + (!before ? 1 : 0) - shift, data)\r\n );\r\n this._absMinIndex = this.items[0].$index;\r\n this._absMaxIndex = this.items[this.size - 1].$index;\r\n if (this.startIndex <= this.absMinIndex) {\r\n this.startIndex = this.absMinIndex;\r\n } else if (this.startIndex > this.absMaxIndex) {\r\n this.startIndex = this.absMaxIndex;\r\n }\r\n return true;\r\n }\r\n\r\n updateItems(\r\n predicate: BufferUpdater<Data>,\r\n generator: (index: number, data: Data) => Item<Data>,\r\n indexToTrack: number,\r\n fixRight: boolean\r\n ): { trackedIndex: number, toRemove: Item<Data>[] } {\r\n if (!this.size || Number.isNaN(this.firstIndex)) {\r\n return { trackedIndex: NaN, toRemove: [] };\r\n }\r\n let trackedIndex = indexToTrack;\r\n let index = fixRight ? this.lastIndex : this.firstIndex;\r\n const items: Item<Data>[] = [];\r\n const diff = fixRight ? -1 : 1;\r\n const limit = this.size - 1;\r\n const beforeMap = new Map<number, Item>(); // need to persist original $indexes\r\n const updateArray = Array.prototype[fixRight ? 'unshift' : 'push'];\r\n\r\n for (let i = fixRight ? limit : 0; fixRight ? i >= 0 : i <= limit; i += diff) {\r\n const item = this.items[i];\r\n beforeMap.set(item.$index, item);\r\n const result = predicate(item);\r\n\r\n // if predicate result is falsy or empty array -> delete\r\n if (!result || (Array.isArray(result) && !result.length)) {\r\n item.toRemove = true;\r\n trackedIndex += item.$index >= indexToTrack ? (fixRight ? 1 : 0) : (fixRight ? 0 : -1);\r\n this.shiftExtremum(-1, fixRight);\r\n continue;\r\n }\r\n\r\n // if predicate result is truthy but not array -> leave\r\n if (!Array.isArray(result)) {\r\n item.updateIndex(index);\r\n updateArray.call(items, item);\r\n index += diff;\r\n continue;\r\n }\r\n\r\n // if predicate result is non-empty array -> insert/replace\r\n if (item.$index < indexToTrack) {\r\n trackedIndex += fixRight ? 0 : result.length - 1;\r\n } else if (item.$index > indexToTrack) {\r\n trackedIndex += fixRight ? 1 - result.length : 0;\r\n }\r\n let toRemove = true;\r\n const newItems: Item<Data>[] = [];\r\n (fixRight ? [...result].reverse() : result).forEach((data, i) => {\r\n let newItem: Item<Data>;\r\n if (item.data === data) {\r\n if (indexToTrack === item.$index) {\r\n trackedIndex = index + i * diff;\r\n }\r\n item.updateIndex(index + i * diff);\r\n newItem = item;\r\n toRemove = false; // insert case\r\n } else {\r\n newItem = generator(index + i * diff, data);\r\n newItem.toInsert = true;\r\n }\r\n updateArray.call(newItems, newItem);\r\n });\r\n item.toRemove = toRemove;\r\n updateArray.call(items, ...newItems);\r\n index += diff * result.length;\r\n if (result.length > 1) {\r\n this.shiftExtremum(result.length - 1, fixRight);\r\n }\r\n }\r\n\r\n const toRemove = this.items.filter(item => item.toRemove);\r\n const itemsBefore = Array.from(beforeMap)\r\n .map(([$index, { size, toRemove }]) => ({ $index, size, toRemove }))\r\n .sort((a, b) => a.$index - b.$index);\r\n this.items = items;\r\n this.cache.updateSubset(itemsBefore, items, fixRight);\r\n\r\n if (this.finiteAbsMinIndex === this.finiteAbsMaxIndex) {\r\n trackedIndex = NaN;\r\n } else if (trackedIndex > this.finiteAbsMaxIndex) {\r\n trackedIndex = this.finiteAbsMaxIndex;\r\n } else if (trackedIndex < this.finiteAbsMinIndex) {\r\n trackedIndex = this.finiteAbsMinIndex;\r\n }\r\n return { trackedIndex, toRemove };\r\n }\r\n\r\n cacheItem(item: Item<Data>): void {\r\n this.cache.add(item);\r\n }\r\n\r\n getFirstVisibleItemIndex(): number {\r\n const length = this.items.length;\r\n for (let i = 0; i < length; i++) {\r\n if (!this.items[i].invisible) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n getLastVisibleItemIndex(): number {\r\n for (let i = this.items.length - 1; i >= 0; i--) {\r\n if (!this.items[i].invisible) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n getFirstVisibleItem(): Item<Data> | undefined {\r\n const index = this.getFirstVisibleItemIndex();\r\n return index >= 0 ? this.items[index] : void 0;\r\n }\r\n\r\n getLastVisibleItem(): Item<Data> | undefined {\r\n const index = this.getLastVisibleItemIndex();\r\n return index >= 0 ? this.items[index] : void 0;\r\n }\r\n\r\n getEdgeVisibleItem(direction: Direction, opposite?: boolean): Item<Data> | undefined {\r\n return direction === (!opposite ? Direction.forward : Direction.backward) ?\r\n this.getLastVisibleItem() : this.getFirstVisibleItem();\r\n }\r\n\r\n getVisibleItemsCount(): number {\r\n return this.items.reduce((acc: number, item) => acc + (item.invisible ? 0 : 1), 0);\r\n }\r\n\r\n getSizeByIndex(index: number): number {\r\n return this.cache.getSizeByIndex(index);\r\n }\r\n\r\n checkDefaultSize(): boolean {\r\n return this.cache.recalculateDefaultSize();\r\n }\r\n\r\n}\r\n"]}
|
|
@@ -1,32 +1,31 @@
|
|
|
1
|
-
import { __extends } from "tslib";
|
|
2
|
-
import { AdapterContext } from './adapter/context';
|
|
3
|
-
import { reactiveConfigStorage } from './adapter/props';
|
|
4
|
-
import { wantedStorage } from './adapter/wanted';
|
|
5
|
-
var DatasourceGeneric = /** @class */ (function () {
|
|
6
|
-
function DatasourceGeneric(datasource, config) {
|
|
7
|
-
this.get = datasource.get;
|
|
8
|
-
this.settings = datasource.settings;
|
|
9
|
-
this.devSettings = datasource.devSettings;
|
|
10
|
-
var adapterContext = new AdapterContext(config || { mock: false });
|
|
11
|
-
this.adapter = adapterContext;
|
|
12
|
-
}
|
|
13
|
-
DatasourceGeneric.prototype.dispose = function () {
|
|
14
|
-
reactiveConfigStorage.delete(this.adapter.id);
|
|
15
|
-
wantedStorage.delete(this.adapter.id);
|
|
16
|
-
};
|
|
17
|
-
return DatasourceGeneric;
|
|
18
|
-
}());
|
|
19
|
-
export { DatasourceGeneric };
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
export var Datasource = makeDatasource();
|
|
1
|
+
import { __extends } from "tslib";
|
|
2
|
+
import { AdapterContext } from './adapter/context';
|
|
3
|
+
import { reactiveConfigStorage } from './adapter/props';
|
|
4
|
+
import { wantedStorage } from './adapter/wanted';
|
|
5
|
+
var DatasourceGeneric = /** @class */ (function () {
|
|
6
|
+
function DatasourceGeneric(datasource, config) {
|
|
7
|
+
this.get = datasource.get;
|
|
8
|
+
this.settings = datasource.settings;
|
|
9
|
+
this.devSettings = datasource.devSettings;
|
|
10
|
+
var adapterContext = new AdapterContext(config || { mock: false });
|
|
11
|
+
this.adapter = adapterContext;
|
|
12
|
+
}
|
|
13
|
+
DatasourceGeneric.prototype.dispose = function () {
|
|
14
|
+
reactiveConfigStorage.delete(this.adapter.id);
|
|
15
|
+
wantedStorage.delete(this.adapter.id);
|
|
16
|
+
};
|
|
17
|
+
return DatasourceGeneric;
|
|
18
|
+
}());
|
|
19
|
+
export { DatasourceGeneric };
|
|
20
|
+
export var makeDatasource = function (getConfig) {
|
|
21
|
+
return /** @class */ (function (_super) {
|
|
22
|
+
__extends(class_1, _super);
|
|
23
|
+
function class_1(datasource) {
|
|
24
|
+
var config = typeof getConfig === 'function' ? getConfig() : void 0;
|
|
25
|
+
return _super.call(this, datasource, config) || this;
|
|
26
|
+
}
|
|
27
|
+
return class_1;
|
|
28
|
+
}(DatasourceGeneric));
|
|
29
|
+
};
|
|
30
|
+
export var Datasource = makeDatasource();
|
|
32
31
|
//# sourceMappingURL=datasource.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datasource.js","sourceRoot":"","sources":["../../../src/classes/datasource.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAWjD;IAME,2BAAY,UAAmC,EAAE,MAAuB;QACtE,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC;QACpC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC;QAC1C,IAAM,cAAc,GAAG,IAAI,cAAc,CAAC,MAAM,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACrE,IAAI,CAAC,OAAO,GAAG,cAA2C,CAAC;IAC7D,CAAC;IAED,mCAAO,GAAP;QACE,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC9C,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACxC,CAAC;IACH,wBAAC;AAAD,CAAC,AAlBD,IAkBC;;
|
|
1
|
+
{"version":3,"file":"datasource.js","sourceRoot":"","sources":["../../../src/classes/datasource.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAWjD;IAME,2BAAY,UAAmC,EAAE,MAAuB;QACtE,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC;QACpC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC;QAC1C,IAAM,cAAc,GAAG,IAAI,cAAc,CAAC,MAAM,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACrE,IAAI,CAAC,OAAO,GAAG,cAA2C,CAAC;IAC7D,CAAC;IAED,mCAAO,GAAP;QACE,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC9C,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACxC,CAAC;IACH,wBAAC;AAAD,CAAC,AAlBD,IAkBC;;AAGD,MAAM,CAAC,IAAM,cAAc,GAAG,UAC5B,SAAgC;IAEhC,OAAA;QAA+B,2BAAuB;QACpD,iBAAY,UAAmC;YAC7C,IAAM,MAAM,GAAG,OAAO,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACtE,OAAA,MAAK,YAAC,UAAU,EAAE,MAAM,CAAC,SAAC;QAC5B,CAAC;QACH,cAAC;IAAD,CAAC,AALD,CAA+B,iBAAiB,EAKhC;AALhB,CAKgB,CAAC;AAEnB,MAAM,CAAC,IAAM,UAAU,GAAG,cAAc,EAAE,CAAC","sourcesContent":["import { AdapterContext } from './adapter/context';\r\nimport { reactiveConfigStorage } from './adapter/props';\r\nimport { wantedStorage } from './adapter/wanted';\r\nimport {\r\n IDatasourceParams,\r\n IDatasourceConstructed,\r\n DatasourceGet,\r\n Settings,\r\n DevSettings,\r\n IAdapter,\r\n IAdapterConfig,\r\n} from '../interfaces/index';\r\n\r\nexport class DatasourceGeneric<Data> implements IDatasourceConstructed<Data> {\r\n get: DatasourceGet<Data>;\r\n settings?: Settings<Data>;\r\n devSettings?: DevSettings;\r\n adapter: IAdapter<Data>;\r\n\r\n constructor(datasource: IDatasourceParams<Data>, config?: IAdapterConfig) {\r\n this.get = datasource.get;\r\n this.settings = datasource.settings;\r\n this.devSettings = datasource.devSettings;\r\n const adapterContext = new AdapterContext(config || { mock: false });\r\n this.adapter = adapterContext as unknown as IAdapter<Data>;\r\n }\r\n\r\n dispose(): void { // todo: should it be published?\r\n reactiveConfigStorage.delete(this.adapter.id);\r\n wantedStorage.delete(this.adapter.id);\r\n }\r\n}\r\n\r\n\r\nexport const makeDatasource = <DSClassType = typeof DatasourceGeneric>(\r\n getConfig?: () => IAdapterConfig\r\n) =>\r\n class <Data = unknown> extends DatasourceGeneric<Data> {\r\n constructor(datasource: IDatasourceParams<Data>) {\r\n const config = typeof getConfig === 'function' ? getConfig() : void 0;\r\n super(datasource, config);\r\n }\r\n } as DSClassType;\r\n\r\nexport const Datasource = makeDatasource();\r\n"]}
|
|
@@ -1,166 +1,166 @@
|
|
|
1
|
-
import { Direction } from '../inputs/index';
|
|
2
|
-
var Routines = /** @class */ (function () {
|
|
3
|
-
function Routines(element, settings) {
|
|
4
|
-
this.element = element;
|
|
5
|
-
this.settings = {
|
|
6
|
-
viewport: settings.viewport,
|
|
7
|
-
horizontal: settings.horizontal,
|
|
8
|
-
window: settings.windowViewport
|
|
9
|
-
};
|
|
10
|
-
// initialization
|
|
11
|
-
this.viewport = this.getViewportElement();
|
|
12
|
-
this.onInit(settings);
|
|
13
|
-
}
|
|
14
|
-
Routines.prototype.checkElement = function (element) {
|
|
15
|
-
if (!element) {
|
|
16
|
-
throw new Error('HTML element is not defined');
|
|
17
|
-
}
|
|
18
|
-
};
|
|
19
|
-
Routines.prototype.getViewportElement = function () {
|
|
20
|
-
if (this.settings.window) {
|
|
21
|
-
return document.documentElement;
|
|
22
|
-
}
|
|
23
|
-
if (this.settings.viewport) {
|
|
24
|
-
return this.settings.viewport;
|
|
25
|
-
}
|
|
26
|
-
this.checkElement(this.element);
|
|
27
|
-
var parent = this.element.parentElement;
|
|
28
|
-
this.checkElement(parent);
|
|
29
|
-
return parent;
|
|
30
|
-
};
|
|
31
|
-
Routines.prototype.onInit = function (settings) {
|
|
32
|
-
if (settings.windowViewport) {
|
|
33
|
-
if ('scrollRestoration' in history) {
|
|
34
|
-
history.scrollRestoration = 'manual';
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
if (settings.dismissOverflowAnchor) {
|
|
38
|
-
this.viewport.style.overflowAnchor = 'none';
|
|
39
|
-
}
|
|
40
|
-
};
|
|
41
|
-
Routines.prototype.findElementBySelector = function (element, selector) {
|
|
42
|
-
this.checkElement(element);
|
|
43
|
-
return element.querySelector(selector);
|
|
44
|
-
};
|
|
45
|
-
Routines.prototype.findPaddingElement = function (direction) {
|
|
46
|
-
return this.findElementBySelector(this.element, "[data-padding-".concat(direction, "]"));
|
|
47
|
-
};
|
|
48
|
-
Routines.prototype.findItemElement = function (id) {
|
|
49
|
-
return this.findElementBySelector(this.element, "[data-sid=\"".concat(id, "\"]"));
|
|
50
|
-
};
|
|
51
|
-
Routines.prototype.findItemChildBySelector = function (id, selector) {
|
|
52
|
-
return this.findElementBySelector(this.element, "[data-sid=\"".concat(id, "\"] ").concat(selector));
|
|
53
|
-
};
|
|
54
|
-
Routines.prototype.getScrollPosition = function () {
|
|
55
|
-
if (this.settings.window) {
|
|
56
|
-
return this.settings.horizontal ? window.pageXOffset : window.pageYOffset;
|
|
57
|
-
}
|
|
58
|
-
return this.viewport[this.settings.horizontal ? 'scrollLeft' : 'scrollTop'];
|
|
59
|
-
};
|
|
60
|
-
Routines.prototype.setScrollPosition = function (value) {
|
|
61
|
-
value = Math.max(0, value);
|
|
62
|
-
if (this.settings.window) {
|
|
63
|
-
if (this.settings.horizontal) {
|
|
64
|
-
window.scrollTo(value, window.scrollY);
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
window.scrollTo(window.scrollX, value);
|
|
68
|
-
}
|
|
69
|
-
return;
|
|
70
|
-
}
|
|
71
|
-
this.viewport[this.settings.horizontal ? 'scrollLeft' : 'scrollTop'] = value;
|
|
72
|
-
};
|
|
73
|
-
Routines.prototype.getElementParams = function (element) {
|
|
74
|
-
this.checkElement(element);
|
|
75
|
-
return element.getBoundingClientRect();
|
|
76
|
-
};
|
|
77
|
-
Routines.prototype.getWindowParams = function () {
|
|
78
|
-
var _a = this.viewport, clientWidth = _a.clientWidth, clientHeight = _a.clientHeight, clientLeft = _a.clientLeft, clientTop = _a.clientTop;
|
|
79
|
-
return {
|
|
80
|
-
'height': clientHeight,
|
|
81
|
-
'width': clientWidth,
|
|
82
|
-
'top': clientTop,
|
|
83
|
-
'bottom': clientTop + clientHeight,
|
|
84
|
-
'left': clientLeft,
|
|
85
|
-
'right': clientLeft + clientWidth,
|
|
86
|
-
'x': clientLeft,
|
|
87
|
-
'y': clientTop,
|
|
88
|
-
'toJSON': function () { return null; },
|
|
89
|
-
};
|
|
90
|
-
};
|
|
91
|
-
Routines.prototype.getSize = function (element) {
|
|
92
|
-
return this.getElementParams(element)[this.settings.horizontal ? 'width' : 'height'];
|
|
93
|
-
};
|
|
94
|
-
Routines.prototype.getScrollerSize = function () {
|
|
95
|
-
return this.getElementParams(this.element)[this.settings.horizontal ? 'width' : 'height'];
|
|
96
|
-
};
|
|
97
|
-
Routines.prototype.getViewportSize = function () {
|
|
98
|
-
if (this.settings.window) {
|
|
99
|
-
return this.getWindowParams()[this.settings.horizontal ? 'width' : 'height'];
|
|
100
|
-
}
|
|
101
|
-
return this.getSize(this.viewport);
|
|
102
|
-
};
|
|
103
|
-
Routines.prototype.getSizeStyle = function (element) {
|
|
104
|
-
this.checkElement(element);
|
|
105
|
-
var size = element.style[this.settings.horizontal ? 'width' : 'height'];
|
|
106
|
-
return parseFloat(size) || 0;
|
|
107
|
-
};
|
|
108
|
-
Routines.prototype.setSizeStyle = function (element, value) {
|
|
109
|
-
this.checkElement(element);
|
|
110
|
-
value = Math.max(0, Math.round(value));
|
|
111
|
-
element.style[this.settings.horizontal ? 'width' : 'height'] = "".concat(value, "px");
|
|
112
|
-
};
|
|
113
|
-
Routines.prototype.getEdge = function (element, direction) {
|
|
114
|
-
var horizontal = this.settings.horizontal;
|
|
115
|
-
var params = this.getElementParams(element);
|
|
116
|
-
var isFwd = direction === Direction.forward;
|
|
117
|
-
return params[isFwd ? (horizontal ? 'right' : 'bottom') : (horizontal ? 'left' : 'top')];
|
|
118
|
-
};
|
|
119
|
-
Routines.prototype.getViewportEdge = function (direction) {
|
|
120
|
-
var _a = this.settings, window = _a.window, horizontal = _a.horizontal;
|
|
121
|
-
if (window) {
|
|
122
|
-
var params = this.getWindowParams();
|
|
123
|
-
var isFwd = direction === Direction.forward;
|
|
124
|
-
return params[isFwd ? (horizontal ? 'right' : 'bottom') : (horizontal ? 'left' : 'top')];
|
|
125
|
-
}
|
|
126
|
-
return this.getEdge(this.viewport, direction);
|
|
127
|
-
};
|
|
128
|
-
Routines.prototype.makeElementVisible = function (element) {
|
|
129
|
-
this.checkElement(element);
|
|
130
|
-
element.style.left = '';
|
|
131
|
-
element.style.top = '';
|
|
132
|
-
element.style.position = '';
|
|
133
|
-
};
|
|
134
|
-
Routines.prototype.hideElement = function (element) {
|
|
135
|
-
this.checkElement(element);
|
|
136
|
-
element.style.display = 'none';
|
|
137
|
-
};
|
|
138
|
-
Routines.prototype.getOffset = function () {
|
|
139
|
-
var _this = this;
|
|
140
|
-
var get = function (element) {
|
|
141
|
-
return (_this.settings.horizontal ? element.offsetLeft : element.offsetTop) || 0;
|
|
142
|
-
};
|
|
143
|
-
return get(this.element) - (!this.settings.window ? get(this.viewport) : 0);
|
|
144
|
-
};
|
|
145
|
-
Routines.prototype.scrollTo = function (element, argument) {
|
|
146
|
-
this.checkElement(element);
|
|
147
|
-
element.scrollIntoView(argument);
|
|
148
|
-
};
|
|
149
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
150
|
-
Routines.prototype.render = function (cb, params) {
|
|
151
|
-
var timeoutId = setTimeout(function () { return cb(); });
|
|
152
|
-
return function () { return clearTimeout(timeoutId); };
|
|
153
|
-
};
|
|
154
|
-
Routines.prototype.animate = function (cb) {
|
|
155
|
-
var animationFrameId = requestAnimationFrame(function () { return cb(); });
|
|
156
|
-
return function () { return cancelAnimationFrame(animationFrameId); };
|
|
157
|
-
};
|
|
158
|
-
Routines.prototype.onScroll = function (handler) {
|
|
159
|
-
var eventReceiver = this.settings.window ? window : this.viewport;
|
|
160
|
-
eventReceiver.addEventListener('scroll', handler);
|
|
161
|
-
return function () { return eventReceiver.removeEventListener('scroll', handler); };
|
|
162
|
-
};
|
|
163
|
-
return Routines;
|
|
164
|
-
}());
|
|
165
|
-
export { Routines };
|
|
1
|
+
import { Direction } from '../inputs/index';
|
|
2
|
+
var Routines = /** @class */ (function () {
|
|
3
|
+
function Routines(element, settings) {
|
|
4
|
+
this.element = element;
|
|
5
|
+
this.settings = {
|
|
6
|
+
viewport: settings.viewport,
|
|
7
|
+
horizontal: settings.horizontal,
|
|
8
|
+
window: settings.windowViewport
|
|
9
|
+
};
|
|
10
|
+
// initialization
|
|
11
|
+
this.viewport = this.getViewportElement();
|
|
12
|
+
this.onInit(settings);
|
|
13
|
+
}
|
|
14
|
+
Routines.prototype.checkElement = function (element) {
|
|
15
|
+
if (!element) {
|
|
16
|
+
throw new Error('HTML element is not defined');
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
Routines.prototype.getViewportElement = function () {
|
|
20
|
+
if (this.settings.window) {
|
|
21
|
+
return document.documentElement;
|
|
22
|
+
}
|
|
23
|
+
if (this.settings.viewport) {
|
|
24
|
+
return this.settings.viewport;
|
|
25
|
+
}
|
|
26
|
+
this.checkElement(this.element);
|
|
27
|
+
var parent = this.element.parentElement;
|
|
28
|
+
this.checkElement(parent);
|
|
29
|
+
return parent;
|
|
30
|
+
};
|
|
31
|
+
Routines.prototype.onInit = function (settings) {
|
|
32
|
+
if (settings.windowViewport) {
|
|
33
|
+
if ('scrollRestoration' in history) {
|
|
34
|
+
history.scrollRestoration = 'manual';
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
if (settings.dismissOverflowAnchor) {
|
|
38
|
+
this.viewport.style.overflowAnchor = 'none';
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
Routines.prototype.findElementBySelector = function (element, selector) {
|
|
42
|
+
this.checkElement(element);
|
|
43
|
+
return element.querySelector(selector);
|
|
44
|
+
};
|
|
45
|
+
Routines.prototype.findPaddingElement = function (direction) {
|
|
46
|
+
return this.findElementBySelector(this.element, "[data-padding-".concat(direction, "]"));
|
|
47
|
+
};
|
|
48
|
+
Routines.prototype.findItemElement = function (id) {
|
|
49
|
+
return this.findElementBySelector(this.element, "[data-sid=\"".concat(id, "\"]"));
|
|
50
|
+
};
|
|
51
|
+
Routines.prototype.findItemChildBySelector = function (id, selector) {
|
|
52
|
+
return this.findElementBySelector(this.element, "[data-sid=\"".concat(id, "\"] ").concat(selector));
|
|
53
|
+
};
|
|
54
|
+
Routines.prototype.getScrollPosition = function () {
|
|
55
|
+
if (this.settings.window) {
|
|
56
|
+
return this.settings.horizontal ? window.pageXOffset : window.pageYOffset;
|
|
57
|
+
}
|
|
58
|
+
return this.viewport[this.settings.horizontal ? 'scrollLeft' : 'scrollTop'];
|
|
59
|
+
};
|
|
60
|
+
Routines.prototype.setScrollPosition = function (value) {
|
|
61
|
+
value = Math.max(0, value);
|
|
62
|
+
if (this.settings.window) {
|
|
63
|
+
if (this.settings.horizontal) {
|
|
64
|
+
window.scrollTo(value, window.scrollY);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
window.scrollTo(window.scrollX, value);
|
|
68
|
+
}
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
this.viewport[this.settings.horizontal ? 'scrollLeft' : 'scrollTop'] = value;
|
|
72
|
+
};
|
|
73
|
+
Routines.prototype.getElementParams = function (element) {
|
|
74
|
+
this.checkElement(element);
|
|
75
|
+
return element.getBoundingClientRect();
|
|
76
|
+
};
|
|
77
|
+
Routines.prototype.getWindowParams = function () {
|
|
78
|
+
var _a = this.viewport, clientWidth = _a.clientWidth, clientHeight = _a.clientHeight, clientLeft = _a.clientLeft, clientTop = _a.clientTop;
|
|
79
|
+
return {
|
|
80
|
+
'height': clientHeight,
|
|
81
|
+
'width': clientWidth,
|
|
82
|
+
'top': clientTop,
|
|
83
|
+
'bottom': clientTop + clientHeight,
|
|
84
|
+
'left': clientLeft,
|
|
85
|
+
'right': clientLeft + clientWidth,
|
|
86
|
+
'x': clientLeft,
|
|
87
|
+
'y': clientTop,
|
|
88
|
+
'toJSON': function () { return null; },
|
|
89
|
+
};
|
|
90
|
+
};
|
|
91
|
+
Routines.prototype.getSize = function (element) {
|
|
92
|
+
return this.getElementParams(element)[this.settings.horizontal ? 'width' : 'height'];
|
|
93
|
+
};
|
|
94
|
+
Routines.prototype.getScrollerSize = function () {
|
|
95
|
+
return this.getElementParams(this.element)[this.settings.horizontal ? 'width' : 'height'];
|
|
96
|
+
};
|
|
97
|
+
Routines.prototype.getViewportSize = function () {
|
|
98
|
+
if (this.settings.window) {
|
|
99
|
+
return this.getWindowParams()[this.settings.horizontal ? 'width' : 'height'];
|
|
100
|
+
}
|
|
101
|
+
return this.getSize(this.viewport);
|
|
102
|
+
};
|
|
103
|
+
Routines.prototype.getSizeStyle = function (element) {
|
|
104
|
+
this.checkElement(element);
|
|
105
|
+
var size = element.style[this.settings.horizontal ? 'width' : 'height'];
|
|
106
|
+
return parseFloat(size) || 0;
|
|
107
|
+
};
|
|
108
|
+
Routines.prototype.setSizeStyle = function (element, value) {
|
|
109
|
+
this.checkElement(element);
|
|
110
|
+
value = Math.max(0, Math.round(value));
|
|
111
|
+
element.style[this.settings.horizontal ? 'width' : 'height'] = "".concat(value, "px");
|
|
112
|
+
};
|
|
113
|
+
Routines.prototype.getEdge = function (element, direction) {
|
|
114
|
+
var horizontal = this.settings.horizontal;
|
|
115
|
+
var params = this.getElementParams(element);
|
|
116
|
+
var isFwd = direction === Direction.forward;
|
|
117
|
+
return params[isFwd ? (horizontal ? 'right' : 'bottom') : (horizontal ? 'left' : 'top')];
|
|
118
|
+
};
|
|
119
|
+
Routines.prototype.getViewportEdge = function (direction) {
|
|
120
|
+
var _a = this.settings, window = _a.window, horizontal = _a.horizontal;
|
|
121
|
+
if (window) {
|
|
122
|
+
var params = this.getWindowParams();
|
|
123
|
+
var isFwd = direction === Direction.forward;
|
|
124
|
+
return params[isFwd ? (horizontal ? 'right' : 'bottom') : (horizontal ? 'left' : 'top')];
|
|
125
|
+
}
|
|
126
|
+
return this.getEdge(this.viewport, direction);
|
|
127
|
+
};
|
|
128
|
+
Routines.prototype.makeElementVisible = function (element) {
|
|
129
|
+
this.checkElement(element);
|
|
130
|
+
element.style.left = '';
|
|
131
|
+
element.style.top = '';
|
|
132
|
+
element.style.position = '';
|
|
133
|
+
};
|
|
134
|
+
Routines.prototype.hideElement = function (element) {
|
|
135
|
+
this.checkElement(element);
|
|
136
|
+
element.style.display = 'none';
|
|
137
|
+
};
|
|
138
|
+
Routines.prototype.getOffset = function () {
|
|
139
|
+
var _this = this;
|
|
140
|
+
var get = function (element) {
|
|
141
|
+
return (_this.settings.horizontal ? element.offsetLeft : element.offsetTop) || 0;
|
|
142
|
+
};
|
|
143
|
+
return get(this.element) - (!this.settings.window ? get(this.viewport) : 0);
|
|
144
|
+
};
|
|
145
|
+
Routines.prototype.scrollTo = function (element, argument) {
|
|
146
|
+
this.checkElement(element);
|
|
147
|
+
element.scrollIntoView(argument);
|
|
148
|
+
};
|
|
149
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
150
|
+
Routines.prototype.render = function (cb, params) {
|
|
151
|
+
var timeoutId = setTimeout(function () { return cb(); });
|
|
152
|
+
return function () { return clearTimeout(timeoutId); };
|
|
153
|
+
};
|
|
154
|
+
Routines.prototype.animate = function (cb) {
|
|
155
|
+
var animationFrameId = requestAnimationFrame(function () { return cb(); });
|
|
156
|
+
return function () { return cancelAnimationFrame(animationFrameId); };
|
|
157
|
+
};
|
|
158
|
+
Routines.prototype.onScroll = function (handler) {
|
|
159
|
+
var eventReceiver = this.settings.window ? window : this.viewport;
|
|
160
|
+
eventReceiver.addEventListener('scroll', handler);
|
|
161
|
+
return function () { return eventReceiver.removeEventListener('scroll', handler); };
|
|
162
|
+
};
|
|
163
|
+
return Routines;
|
|
164
|
+
}());
|
|
165
|
+
export { Routines };
|
|
166
166
|
//# sourceMappingURL=domRoutines.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"domRoutines.js","sourceRoot":"","sources":["../../../src/classes/domRoutines.ts"],"names":[],"mappings":"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","sourcesContent":["import { Settings } from './settings';\r\nimport { Direction } from '../inputs/index';\r\nimport { IRoutines, ItemAdapter } from '../interfaces/index';\r\n\r\nexport class Routines implements IRoutines {\r\n\r\n readonly settings: IRoutines['settings'];\r\n readonly element: HTMLElement;\r\n readonly viewport: HTMLElement;\r\n\r\n constructor(element: HTMLElement, settings: Settings) {\r\n this.element = element;\r\n this.settings = {\r\n viewport: settings.viewport,\r\n horizontal: settings.horizontal,\r\n window: settings.windowViewport\r\n };\r\n // initialization\r\n this.viewport = this.getViewportElement();\r\n this.onInit(settings);\r\n }\r\n\r\n checkElement(element: HTMLElement): void {\r\n if (!element) {\r\n throw new Error('HTML element is not defined');\r\n }\r\n }\r\n\r\n getViewportElement(): HTMLElement {\r\n if (this.settings.window) {\r\n return document.documentElement;\r\n }\r\n if (this.settings.viewport) {\r\n return this.settings.viewport;\r\n }\r\n this.checkElement(this.element);\r\n const parent = this.element.parentElement as HTMLElement;\r\n this.checkElement(parent);\r\n return parent;\r\n }\r\n\r\n onInit(settings: Settings): void {\r\n if (settings.windowViewport) {\r\n if ('scrollRestoration' in history) {\r\n history.scrollRestoration = 'manual';\r\n }\r\n }\r\n if (settings.dismissOverflowAnchor) {\r\n this.viewport.style.overflowAnchor = 'none';\r\n }\r\n }\r\n\r\n findElementBySelector(element: HTMLElement, selector: string): HTMLElement | null {\r\n this.checkElement(element);\r\n return element.querySelector(selector);\r\n }\r\n\r\n findPaddingElement(direction: Direction): HTMLElement | null {\r\n return this.findElementBySelector(this.element, `[data-padding-${direction}]`);\r\n }\r\n\r\n findItemElement(id: string): HTMLElement | null {\r\n return this.findElementBySelector(this.element, `[data-sid=\"${id}\"]`);\r\n }\r\n\r\n findItemChildBySelector(id: string, selector: string): HTMLElement | null {\r\n return this.findElementBySelector(this.element, `[data-sid=\"${id}\"] ${selector}`);\r\n }\r\n\r\n getScrollPosition(): number {\r\n if (this.settings.window) {\r\n return this.settings.horizontal ? window.pageXOffset : window.pageYOffset;\r\n }\r\n return this.viewport[this.settings.horizontal ? 'scrollLeft' : 'scrollTop'];\r\n }\r\n\r\n setScrollPosition(value: number): void {\r\n value = Math.max(0, value);\r\n if (this.settings.window) {\r\n if (this.settings.horizontal) {\r\n window.scrollTo(value, window.scrollY);\r\n } else {\r\n window.scrollTo(window.scrollX, value);\r\n }\r\n return;\r\n }\r\n this.viewport[this.settings.horizontal ? 'scrollLeft' : 'scrollTop'] = value;\r\n }\r\n\r\n getElementParams(element: HTMLElement): DOMRect {\r\n this.checkElement(element);\r\n return element.getBoundingClientRect();\r\n }\r\n\r\n getWindowParams(): DOMRect {\r\n const { clientWidth, clientHeight, clientLeft, clientTop } = this.viewport;\r\n return {\r\n 'height': clientHeight,\r\n 'width': clientWidth,\r\n 'top': clientTop,\r\n 'bottom': clientTop + clientHeight,\r\n 'left': clientLeft,\r\n 'right': clientLeft + clientWidth,\r\n 'x': clientLeft,\r\n 'y': clientTop,\r\n 'toJSON': () => null,\r\n };\r\n }\r\n\r\n getSize(element: HTMLElement): number {\r\n return this.getElementParams(element)[this.settings.horizontal ? 'width' : 'height'];\r\n }\r\n\r\n getScrollerSize(): number {\r\n return this.getElementParams(this.element)[this.settings.horizontal ? 'width' : 'height'];\r\n }\r\n\r\n getViewportSize(): number {\r\n if (this.settings.window) {\r\n return this.getWindowParams()[this.settings.horizontal ? 'width' : 'height'];\r\n }\r\n return this.getSize(this.viewport);\r\n }\r\n\r\n getSizeStyle(element: HTMLElement): number {\r\n this.checkElement(element);\r\n const size = element.style[this.settings.horizontal ? 'width' : 'height'];\r\n return parseFloat(size as string) || 0;\r\n }\r\n\r\n setSizeStyle(element: HTMLElement, value: number): void {\r\n this.checkElement(element);\r\n value = Math.max(0, Math.round(value));\r\n element.style[this.settings.horizontal ? 'width' : 'height'] = `${value}px`;\r\n }\r\n\r\n getEdge(element: HTMLElement, direction: Direction): number {\r\n const { horizontal } = this.settings;\r\n const params = this.getElementParams(element);\r\n const isFwd = direction === Direction.forward;\r\n return params[isFwd ? (horizontal ? 'right' : 'bottom') : (horizontal ? 'left' : 'top')];\r\n }\r\n\r\n getViewportEdge(direction: Direction): number {\r\n const { window, horizontal } = this.settings;\r\n if (window) {\r\n const params = this.getWindowParams();\r\n const isFwd = direction === Direction.forward;\r\n return params[isFwd ? (horizontal ? 'right' : 'bottom') : (horizontal ? 'left' : 'top')];\r\n }\r\n return this.getEdge(this.viewport, direction);\r\n }\r\n\r\n makeElementVisible(element: HTMLElement): void {\r\n this.checkElement(element);\r\n element.style.left = '';\r\n element.style.top = '';\r\n element.style.position = '';\r\n }\r\n\r\n hideElement(element: HTMLElement): void {\r\n this.checkElement(element);\r\n element.style.display = 'none';\r\n }\r\n\r\n getOffset(): number {\r\n const get = (element: HTMLElement) =>\r\n (this.settings.horizontal ? element.offsetLeft : element.offsetTop) || 0;\r\n return get(this.element) - (!this.settings.window ? get(this.viewport) : 0);\r\n }\r\n\r\n scrollTo(element: HTMLElement, argument?: boolean | ScrollIntoViewOptions): void {\r\n this.checkElement(element);\r\n element.scrollIntoView(argument);\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n render(cb: () => void, params: { items: ItemAdapter[] }): () => void {\r\n const timeoutId = setTimeout(() => cb());\r\n return () => clearTimeout(timeoutId);\r\n }\r\n\r\n animate(cb: () => void): () => void {\r\n const animationFrameId = requestAnimationFrame(() => cb());\r\n return () => cancelAnimationFrame(animationFrameId);\r\n }\r\n\r\n onScroll(handler: EventListener): () => void {\r\n const eventReceiver = this.settings.window ? window : this.viewport;\r\n eventReceiver.addEventListener('scroll', handler);\r\n return () => eventReceiver.removeEventListener('scroll', handler);\r\n }\r\n\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"domRoutines.js","sourceRoot":"","sources":["../../../src/classes/domRoutines.ts"],"names":[],"mappings":"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","sourcesContent":["import { Settings } from './settings';\r\nimport { Direction } from '../inputs/index';\r\nimport { IRoutines, ItemAdapter } from '../interfaces/index';\r\n\r\nexport class Routines implements IRoutines {\r\n\r\n readonly settings: IRoutines['settings'];\r\n readonly element: HTMLElement;\r\n readonly viewport: HTMLElement;\r\n\r\n constructor(element: HTMLElement, settings: Settings) {\r\n this.element = element;\r\n this.settings = {\r\n viewport: settings.viewport,\r\n horizontal: settings.horizontal,\r\n window: settings.windowViewport\r\n };\r\n // initialization\r\n this.viewport = this.getViewportElement();\r\n this.onInit(settings);\r\n }\r\n\r\n checkElement(element: HTMLElement): void {\r\n if (!element) {\r\n throw new Error('HTML element is not defined');\r\n }\r\n }\r\n\r\n getViewportElement(): HTMLElement {\r\n if (this.settings.window) {\r\n return document.documentElement;\r\n }\r\n if (this.settings.viewport) {\r\n return this.settings.viewport;\r\n }\r\n this.checkElement(this.element);\r\n const parent = this.element.parentElement as HTMLElement;\r\n this.checkElement(parent);\r\n return parent;\r\n }\r\n\r\n onInit(settings: Settings): void {\r\n if (settings.windowViewport) {\r\n if ('scrollRestoration' in history) {\r\n history.scrollRestoration = 'manual';\r\n }\r\n }\r\n if (settings.dismissOverflowAnchor) {\r\n this.viewport.style.overflowAnchor = 'none';\r\n }\r\n }\r\n\r\n findElementBySelector(element: HTMLElement, selector: string): HTMLElement | null {\r\n this.checkElement(element);\r\n return element.querySelector(selector);\r\n }\r\n\r\n findPaddingElement(direction: Direction): HTMLElement | null {\r\n return this.findElementBySelector(this.element, `[data-padding-${direction}]`);\r\n }\r\n\r\n findItemElement(id: string): HTMLElement | null {\r\n return this.findElementBySelector(this.element, `[data-sid=\"${id}\"]`);\r\n }\r\n\r\n findItemChildBySelector(id: string, selector: string): HTMLElement | null {\r\n return this.findElementBySelector(this.element, `[data-sid=\"${id}\"] ${selector}`);\r\n }\r\n\r\n getScrollPosition(): number {\r\n if (this.settings.window) {\r\n return this.settings.horizontal ? window.pageXOffset : window.pageYOffset;\r\n }\r\n return this.viewport[this.settings.horizontal ? 'scrollLeft' : 'scrollTop'];\r\n }\r\n\r\n setScrollPosition(value: number): void {\r\n value = Math.max(0, value);\r\n if (this.settings.window) {\r\n if (this.settings.horizontal) {\r\n window.scrollTo(value, window.scrollY);\r\n } else {\r\n window.scrollTo(window.scrollX, value);\r\n }\r\n return;\r\n }\r\n this.viewport[this.settings.horizontal ? 'scrollLeft' : 'scrollTop'] = value;\r\n }\r\n\r\n getElementParams(element: HTMLElement): DOMRect {\r\n this.checkElement(element);\r\n return element.getBoundingClientRect();\r\n }\r\n\r\n getWindowParams(): DOMRect {\r\n const { clientWidth, clientHeight, clientLeft, clientTop } = this.viewport;\r\n return {\r\n 'height': clientHeight,\r\n 'width': clientWidth,\r\n 'top': clientTop,\r\n 'bottom': clientTop + clientHeight,\r\n 'left': clientLeft,\r\n 'right': clientLeft + clientWidth,\r\n 'x': clientLeft,\r\n 'y': clientTop,\r\n 'toJSON': () => null,\r\n };\r\n }\r\n\r\n getSize(element: HTMLElement): number {\r\n return this.getElementParams(element)[this.settings.horizontal ? 'width' : 'height'];\r\n }\r\n\r\n getScrollerSize(): number {\r\n return this.getElementParams(this.element)[this.settings.horizontal ? 'width' : 'height'];\r\n }\r\n\r\n getViewportSize(): number {\r\n if (this.settings.window) {\r\n return this.getWindowParams()[this.settings.horizontal ? 'width' : 'height'];\r\n }\r\n return this.getSize(this.viewport);\r\n }\r\n\r\n getSizeStyle(element: HTMLElement): number {\r\n this.checkElement(element);\r\n const size = element.style[this.settings.horizontal ? 'width' : 'height'];\r\n return parseFloat(size as string) || 0;\r\n }\r\n\r\n setSizeStyle(element: HTMLElement, value: number): void {\r\n this.checkElement(element);\r\n value = Math.max(0, Math.round(value));\r\n element.style[this.settings.horizontal ? 'width' : 'height'] = `${value}px`;\r\n }\r\n\r\n getEdge(element: HTMLElement, direction: Direction): number {\r\n const { horizontal } = this.settings;\r\n const params = this.getElementParams(element);\r\n const isFwd = direction === Direction.forward;\r\n return params[isFwd ? (horizontal ? 'right' : 'bottom') : (horizontal ? 'left' : 'top')];\r\n }\r\n\r\n getViewportEdge(direction: Direction): number {\r\n const { window, horizontal } = this.settings;\r\n if (window) {\r\n const params = this.getWindowParams();\r\n const isFwd = direction === Direction.forward;\r\n return params[isFwd ? (horizontal ? 'right' : 'bottom') : (horizontal ? 'left' : 'top')];\r\n }\r\n return this.getEdge(this.viewport, direction);\r\n }\r\n\r\n makeElementVisible(element: HTMLElement): void {\r\n this.checkElement(element);\r\n element.style.left = '';\r\n element.style.top = '';\r\n element.style.position = '';\r\n }\r\n\r\n hideElement(element: HTMLElement): void {\r\n this.checkElement(element);\r\n element.style.display = 'none';\r\n }\r\n\r\n getOffset(): number {\r\n const get = (element: HTMLElement) =>\r\n (this.settings.horizontal ? element.offsetLeft : element.offsetTop) || 0;\r\n return get(this.element) - (!this.settings.window ? get(this.viewport) : 0);\r\n }\r\n\r\n scrollTo(element: HTMLElement, argument?: boolean | ScrollIntoViewOptions): void {\r\n this.checkElement(element);\r\n element.scrollIntoView(argument);\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n render(cb: () => void, params: { items: ItemAdapter[] }): () => void {\r\n const timeoutId = setTimeout(() => cb());\r\n return () => clearTimeout(timeoutId);\r\n }\r\n\r\n animate(cb: () => void): () => void {\r\n const animationFrameId = requestAnimationFrame(() => cb());\r\n return () => cancelAnimationFrame(animationFrameId);\r\n }\r\n\r\n onScroll(handler: EventListener): () => void {\r\n const eventReceiver = this.settings.window ? window : this.viewport;\r\n eventReceiver.addEventListener('scroll', handler);\r\n return () => eventReceiver.removeEventListener('scroll', handler);\r\n }\r\n\r\n}\r\n"]}
|