vscroll 1.4.1 → 1.5.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 +17 -16
- package/dist/bundles/vscroll.esm5.js +403 -321
- 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 +310 -244
- 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 +404 -322
- 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/domRoutines.js +101 -66
- package/dist/esm2015/classes/domRoutines.js.map +1 -1
- package/dist/esm2015/classes/logger.js +2 -2
- package/dist/esm2015/classes/logger.js.map +1 -1
- package/dist/esm2015/classes/paddings.js +5 -5
- package/dist/esm2015/classes/paddings.js.map +1 -1
- package/dist/esm2015/classes/state/cycle.js +7 -6
- package/dist/esm2015/classes/state/cycle.js.map +1 -1
- package/dist/esm2015/classes/state/render.js +1 -1
- package/dist/esm2015/classes/state/render.js.map +1 -1
- package/dist/esm2015/classes/state/scroll.js +6 -6
- package/dist/esm2015/classes/state/scroll.js.map +1 -1
- package/dist/esm2015/classes/state.js +23 -15
- package/dist/esm2015/classes/state.js.map +1 -1
- package/dist/esm2015/classes/viewport.js +13 -22
- package/dist/esm2015/classes/viewport.js.map +1 -1
- package/dist/esm2015/index.js.map +1 -1
- package/dist/esm2015/interfaces/index.js.map +1 -1
- package/dist/esm2015/interfaces/routines.js +2 -0
- package/dist/esm2015/interfaces/routines.js.map +1 -0
- package/dist/esm2015/interfaces/state.js.map +1 -1
- package/dist/esm2015/interfaces/workflow.js.map +1 -1
- package/dist/esm2015/processes/adapter/reload.js +1 -1
- package/dist/esm2015/processes/adapter/reload.js.map +1 -1
- package/dist/esm2015/processes/adjust.js +44 -15
- package/dist/esm2015/processes/adjust.js.map +1 -1
- package/dist/esm2015/processes/end.js +18 -16
- package/dist/esm2015/processes/end.js.map +1 -1
- package/dist/esm2015/processes/fetch.js +3 -3
- package/dist/esm2015/processes/fetch.js.map +1 -1
- package/dist/esm2015/processes/init.js +2 -2
- package/dist/esm2015/processes/init.js.map +1 -1
- package/dist/esm2015/processes/render.js +6 -6
- package/dist/esm2015/processes/render.js.map +1 -1
- package/dist/esm2015/processes/scroll.js +21 -21
- package/dist/esm2015/processes/scroll.js.map +1 -1
- package/dist/esm2015/scroller.js +4 -4
- package/dist/esm2015/scroller.js.map +1 -1
- package/dist/esm2015/version.js +1 -1
- package/dist/esm2015/version.js.map +1 -1
- package/dist/esm2015/workflow.js +9 -8
- package/dist/esm2015/workflow.js.map +1 -1
- package/dist/esm5/classes/adapter.js +4 -4
- package/dist/esm5/classes/adapter.js.map +1 -1
- package/dist/esm5/classes/buffer/cache.js +1 -1
- package/dist/esm5/classes/buffer/cache.js.map +1 -1
- package/dist/esm5/classes/buffer/checkCall.js +4 -4
- package/dist/esm5/classes/buffer/checkCall.js.map +1 -1
- package/dist/esm5/classes/buffer.js +3 -3
- package/dist/esm5/classes/buffer.js.map +1 -1
- package/dist/esm5/classes/domRoutines.js +115 -66
- package/dist/esm5/classes/domRoutines.js.map +1 -1
- package/dist/esm5/classes/logger.js +21 -21
- package/dist/esm5/classes/logger.js.map +1 -1
- package/dist/esm5/classes/paddings.js +5 -5
- package/dist/esm5/classes/paddings.js.map +1 -1
- package/dist/esm5/classes/state/cycle.js +9 -8
- package/dist/esm5/classes/state/cycle.js.map +1 -1
- package/dist/esm5/classes/state/render.js +1 -1
- package/dist/esm5/classes/state/render.js.map +1 -1
- package/dist/esm5/classes/state/scroll.js +11 -11
- package/dist/esm5/classes/state/scroll.js.map +1 -1
- package/dist/esm5/classes/state.js +23 -15
- package/dist/esm5/classes/state.js.map +1 -1
- package/dist/esm5/classes/viewport.js +14 -23
- package/dist/esm5/classes/viewport.js.map +1 -1
- package/dist/esm5/index.js.map +1 -1
- package/dist/esm5/inputs/validation.js +4 -4
- package/dist/esm5/inputs/validation.js.map +1 -1
- package/dist/esm5/interfaces/index.js.map +1 -1
- package/dist/esm5/interfaces/routines.js +2 -0
- package/dist/esm5/interfaces/routines.js.map +1 -0
- package/dist/esm5/interfaces/state.js.map +1 -1
- package/dist/esm5/interfaces/workflow.js.map +1 -1
- package/dist/esm5/processes/adapter/reload.js +1 -1
- package/dist/esm5/processes/adapter/reload.js.map +1 -1
- package/dist/esm5/processes/adapter/remove.js +1 -1
- package/dist/esm5/processes/adapter/remove.js.map +1 -1
- package/dist/esm5/processes/adjust.js +48 -19
- package/dist/esm5/processes/adjust.js.map +1 -1
- package/dist/esm5/processes/clip.js +5 -5
- package/dist/esm5/processes/clip.js.map +1 -1
- package/dist/esm5/processes/end.js +18 -16
- package/dist/esm5/processes/end.js.map +1 -1
- package/dist/esm5/processes/fetch.js +5 -5
- package/dist/esm5/processes/fetch.js.map +1 -1
- package/dist/esm5/processes/init.js +2 -2
- package/dist/esm5/processes/init.js.map +1 -1
- package/dist/esm5/processes/misc/base.js +1 -1
- package/dist/esm5/processes/misc/base.js.map +1 -1
- package/dist/esm5/processes/preClip.js +2 -2
- package/dist/esm5/processes/preClip.js.map +1 -1
- package/dist/esm5/processes/preFetch.js +5 -5
- package/dist/esm5/processes/preFetch.js.map +1 -1
- package/dist/esm5/processes/render.js +6 -6
- package/dist/esm5/processes/render.js.map +1 -1
- package/dist/esm5/processes/scroll.js +22 -22
- package/dist/esm5/processes/scroll.js.map +1 -1
- package/dist/esm5/scroller.js +5 -5
- package/dist/esm5/scroller.js.map +1 -1
- package/dist/esm5/version.js +1 -1
- package/dist/esm5/version.js.map +1 -1
- package/dist/esm5/workflow.js +15 -12
- package/dist/esm5/workflow.js.map +1 -1
- package/dist/typings/classes/domRoutines.d.ts +23 -18
- package/dist/typings/classes/logger.d.ts +1 -1
- package/dist/typings/classes/paddings.d.ts +2 -2
- package/dist/typings/classes/state/cycle.d.ts +1 -1
- package/dist/typings/classes/state/render.d.ts +1 -1
- package/dist/typings/classes/state/scroll.d.ts +4 -4
- package/dist/typings/classes/state.d.ts +6 -3
- package/dist/typings/classes/viewport.d.ts +2 -4
- package/dist/typings/index.d.ts +2 -2
- package/dist/typings/interfaces/index.d.ts +3 -2
- package/dist/typings/interfaces/routines.d.ts +157 -0
- package/dist/typings/interfaces/state.d.ts +2 -15
- package/dist/typings/interfaces/workflow.d.ts +3 -0
- package/dist/typings/processes/adjust.d.ts +1 -0
- package/dist/typings/processes/end.d.ts +1 -2
- package/dist/typings/scroller.d.ts +1 -1
- package/dist/typings/workflow.d.ts +2 -2
- package/package.json +18 -17
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../../src/classes/buffer/cache.ts"],"names":[],"mappings":"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","sourcesContent":["import { DefaultSize } from './defaultSize';\nimport { Item } from '../item';\nimport { Settings } from '../settings';\nimport { Logger } from '../logger';\nimport { SizeStrategy, Direction } from '../../inputs/index';\n\ninterface ItemToCache<Data> {\n $index: number;\n data: Data;\n size?: number;\n}\n\ninterface ItemUpdate {\n $index: number;\n size: number;\n toRemove?: boolean;\n}\n\nexport class ItemCache<Data = unknown> {\n $index: number;\n data: Data | null;\n size?: number;\n position: number;\n\n constructor(item: ItemToCache<Data>, saveData: boolean) {\n this.$index = item.$index;\n this.data = saveData ? item.data : null;\n this.size = item.size;\n }\n\n changeIndex(value: number): void {\n this.$index = value;\n }\n}\n\nexport class Cache<Data = unknown> {\n minIndex: number;\n maxIndex: number;\n\n readonly itemSize: number;\n readonly saveData: boolean;\n readonly cacheOnReload: boolean;\n readonly sizeStrategy: SizeStrategy;\n readonly logger: Logger;\n private items: Map<number, ItemCache<Data>>;\n private defaultSize: DefaultSize;\n\n constructor({ itemSize, cacheData, cacheOnReload, sizeStrategy }: Settings, logger: Logger) {\n this.itemSize = itemSize;\n this.saveData = cacheData;\n this.cacheOnReload = cacheOnReload;\n this.sizeStrategy = sizeStrategy;\n this.logger = logger;\n this.items = new Map<number, ItemCache<Data>>();\n this.defaultSize = new DefaultSize(itemSize, sizeStrategy);\n this.reset(true);\n }\n\n reset(force: boolean): void {\n force = force || !this.cacheOnReload;\n if (force) {\n this.minIndex = +Infinity;\n this.maxIndex = -Infinity;\n this.items.clear();\n }\n this.defaultSize.reset(force);\n }\n\n get size(): number {\n return this.items.size;\n }\n\n get(index: number): ItemCache<Data> | undefined {\n return this.items.get(index);\n }\n\n getSizeByIndex(index: number): number {\n const item = this.get(index);\n return item && item.size || this.defaultSize.get();\n }\n\n getDefaultSize(): number {\n return this.defaultSize.get();\n }\n\n recalculateDefaultSize(): boolean {\n if (this.defaultSize.recalculate(this.size)) {\n this.logger.log(() => `default size has been updated: ${this.defaultSize.get()}`);\n return true;\n }\n return false;\n }\n\n /**\n * Adds item to Set by $index, replaces existed item if $index matches.\n * Maintains min/max indexes and default item size.\n *\n * @param {Item<Data>} item A Buffer item to be cached, an objects with { $index, data, size } props.\n * \n * @returns {ItemCache<Data>} Cached item.\n */\n add(item: Item<Data>): ItemCache<Data> {\n let itemCache = this.get(item.$index);\n if (itemCache) { // adding item is already cached\n if (this.saveData) {\n itemCache.data = item.data;\n }\n if (itemCache.size !== item.size) {\n if (itemCache.size) {\n this.defaultSize.setExisted(itemCache.size, item.size);\n } else {\n this.defaultSize.setNew(item.size);\n }\n itemCache.size = item.size;\n }\n } else {\n itemCache = new ItemCache<Data>(item, this.saveData);\n this.items.set(item.$index, itemCache);\n this.defaultSize.setNew(item.size);\n }\n if (item.$index < this.minIndex) {\n this.minIndex = item.$index;\n }\n if (item.$index > this.maxIndex) {\n this.maxIndex = item.$index;\n }\n return itemCache;\n }\n\n /**\n * Inserts items to Set, shifts $indexes of items that remain.\n * Replaces current Set with a new one with new regular $indexes.\n * Maintains min/max indexes.\n *\n * @param {Data[]} toInsert List of non-indexed items to be inserted.\n * @param {number} index The index before/after which the insertion is performed.\n * @param {Direction} direction Determines the direction of insertion.\n * @param {boolean} fixRight Defines indexes shifting strategy.\n * If false, indexes that are greater than the inserted ones are increased.\n * If true, indexes that are less than than the inserted ones are decreased.\n */\n insertItems(toInsert: Data[], index: number, direction: Direction, fixRight: boolean): void {\n const items = new Map<number, ItemCache<Data>>();\n const length = toInsert.length;\n let min = Infinity, max = -Infinity;\n const set = (item: ItemCache<Data>) => {\n items.set(item.$index, item);\n min = item.$index < min ? item.$index : min;\n max = item.$index > max ? item.$index : max;\n };\n this.items.forEach(item => {\n let shift = 0;\n if (direction === Direction.backward) {\n if (item.$index < index && fixRight) {\n shift = -length;\n } else if (item.$index >= index && !fixRight) {\n shift = length;\n }\n } else if (direction === Direction.forward) {\n if (item.$index <= index && fixRight) {\n shift = -length;\n } else if (item.$index > index && !fixRight) {\n shift = length;\n }\n }\n if (shift) {\n item.changeIndex(item.$index + shift);\n }\n set(item);\n });\n if (this.saveData) { // persist data with no sizes\n toInsert.forEach((data, i) => {\n const $index = index + i - (fixRight ? length : 0) + (direction === Direction.forward ? 1 : 0);\n const item = new ItemCache<Data>({ $index, data }, this.saveData);\n set(item);\n });\n }\n this.items = items;\n this.minIndex = min;\n this.maxIndex = max;\n }\n\n /**\n * Removes items from Set, shifts $indexes of items that remain.\n * Replaces current Set with a new one with new regular $indexes.\n * Maintains min/max indexes and default item size.\n *\n * @param {number[]} toRemove List of indexes to be removed.\n * @param {boolean} fixRight Defines indexes shifting strategy.\n * If false, indexes that are greater than the removed ones will be decreased.\n * If true, indexes that are less than than the removed ones will be increased.\n */\n removeItems(toRemove: number[], fixRight: boolean): void {\n const items = new Map<number, ItemCache<Data>>();\n let min = Infinity, max = -Infinity;\n this.items.forEach(item => {\n if (toRemove.some(index => index === item.$index)) {\n if (item.size) {\n this.defaultSize.setRemoved(item.size);\n }\n return;\n }\n const diff = fixRight\n ? toRemove.reduce((acc, index) => acc + (item.$index < index ? 1 : 0), 0)\n : toRemove.reduce((acc, index) => acc - (item.$index > index ? 1 : 0), 0);\n item.changeIndex(item.$index + diff);\n items.set(item.$index, item);\n min = item.$index < min ? item.$index : min;\n max = item.$index > max ? item.$index : max;\n });\n this.items = items;\n this.minIndex = min;\n this.maxIndex = max;\n }\n\n /**\n * Destructively updates Set based on subset (before-after) changes.\n * Replaces current Set with a new one with new regular $indexes.\n * Maintains min/max indexes. Maintains default item size on remove only.\n *\n * @param {ItemUpdate[]} before Initial subset of items to be replaced by \"after\".\n * Each element is an object with { $index, size, toRemove } props. Must be $index-incremental.\n * Items to be removed must have toRemove flag: before[].toRemove = true.\n * @param {Item<Data>[]} after Transformed subset that replaces \"before\". Must be $index-incremental.\n * Must contain at least 1 $index from \"before\" or be empty.\n * @param {boolean} fixRight This is to fix right indexes during subset collapsing. Acts only if \"after\" is empty.\n */\n updateSubset(before: ItemUpdate[], after: Item<Data>[], fixRight?: boolean): void {\n if (!this.size || !before.length) {\n return;\n }\n const minB = before[0].$index, maxB = before[before.length - 1].$index;\n let leftDiff: number, rightDiff: number;\n if (after.length) {\n const minA = after[0].$index, maxA = after[after.length - 1].$index;\n leftDiff = minA - minB;\n rightDiff = maxA - maxB;\n } else {\n leftDiff = fixRight ? maxB - minB + 1 : 0;\n rightDiff = fixRight ? 0 : minB - maxB - 1;\n }\n const items = new Map<number, ItemCache<Data>>();\n this.items.forEach(item => {\n if (item.$index < minB) { // items to the left of the subset\n item.changeIndex(item.$index + leftDiff);\n items.set(item.$index, item);\n return;\n } else if (item.$index > maxB) { // items to the right of the subset\n item.changeIndex(item.$index + rightDiff);\n items.set(item.$index, item);\n return;\n }\n });\n after.forEach(item => // subset items\n items.set(item.$index, new ItemCache<Data>(item, this.saveData))\n );\n before // to maintain default size on remove\n .filter(item => item.toRemove)\n .forEach(item => this.defaultSize.setRemoved(item.size));\n this.minIndex += leftDiff;\n this.maxIndex += rightDiff;\n this.items = items;\n }\n\n /**\n * Shifts all indexes by some value.\n * Replaces current Set with a new one with new regular $indexes.\n * Maintains min/max indexes.\n *\n * @param {number} delta A shift value.\n */\n shiftIndexes(delta: number): void {\n const items = new Map<number, ItemCache<Data>>();\n let min = Infinity, max = -Infinity;\n this.items.forEach(item => {\n item.changeIndex(item.$index + delta);\n items.set(item.$index, item);\n min = item.$index < min ? item.$index : min;\n max = item.$index > max ? item.$index : max;\n });\n this.items = items;\n this.minIndex = min;\n this.maxIndex = max;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../../src/classes/buffer/cache.ts"],"names":[],"mappings":"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","sourcesContent":["import { DefaultSize } from './defaultSize';\nimport { Item } from '../item';\nimport { Settings } from '../settings';\nimport { Logger } from '../logger';\nimport { SizeStrategy, Direction } from '../../inputs/index';\n\ninterface ItemToCache<Data> {\n $index: number;\n data: Data;\n size?: number;\n}\n\ninterface ItemUpdate {\n $index: number;\n size: number;\n toRemove?: boolean;\n}\n\nexport class ItemCache<Data = unknown> {\n $index: number;\n data: Data | null;\n size?: number;\n position: number;\n\n constructor(item: ItemToCache<Data>, saveData: boolean) {\n this.$index = item.$index;\n this.data = saveData ? item.data : null;\n this.size = item.size;\n }\n\n changeIndex(value: number): void {\n this.$index = value;\n }\n}\n\nexport class Cache<Data = unknown> {\n minIndex: number;\n maxIndex: number;\n\n readonly itemSize: number;\n readonly saveData: boolean;\n readonly cacheOnReload: boolean;\n readonly sizeStrategy: SizeStrategy;\n readonly logger: Logger;\n private items: Map<number, ItemCache<Data>>;\n private defaultSize: DefaultSize;\n\n constructor({ itemSize, cacheData, cacheOnReload, sizeStrategy }: Settings, logger: Logger) {\n this.itemSize = itemSize;\n this.saveData = cacheData;\n this.cacheOnReload = cacheOnReload;\n this.sizeStrategy = sizeStrategy;\n this.logger = logger;\n this.items = new Map<number, ItemCache<Data>>();\n this.defaultSize = new DefaultSize(itemSize, sizeStrategy);\n this.reset(true);\n }\n\n reset(force: boolean): void {\n force = force || !this.cacheOnReload;\n if (force) {\n this.minIndex = +Infinity;\n this.maxIndex = -Infinity;\n this.items.clear();\n }\n this.defaultSize.reset(force);\n }\n\n get size(): number {\n return this.items.size;\n }\n\n get(index: number): ItemCache<Data> | undefined {\n return this.items.get(index);\n }\n\n getSizeByIndex(index: number): number {\n const item = this.get(index);\n return item && item.size || this.defaultSize.get();\n }\n\n getDefaultSize(): number {\n return this.defaultSize.get();\n }\n\n recalculateDefaultSize(): boolean {\n if (this.defaultSize.recalculate(this.size)) {\n this.logger.log(() => `default size has been updated: ${this.defaultSize.get()}`);\n return true;\n }\n return false;\n }\n\n /**\n * Adds item to Set by $index, replaces existed item if $index matches.\n * Maintains min/max indexes and default item size.\n *\n * @param {Item<Data>} item A Buffer item to be cached, an objects with { $index, data, size } props.\n * \n * @returns {ItemCache<Data>} Cached item.\n */\n add(item: Item<Data>): ItemCache<Data> {\n let itemCache = this.get(item.$index);\n if (itemCache) { // adding item is already cached\n if (this.saveData) {\n itemCache.data = item.data;\n }\n if (itemCache.size !== item.size) {\n if (itemCache.size) {\n this.defaultSize.setExisted(itemCache.size, item.size);\n } else {\n this.defaultSize.setNew(item.size);\n }\n itemCache.size = item.size;\n }\n } else {\n itemCache = new ItemCache<Data>(item, this.saveData);\n this.items.set(item.$index, itemCache);\n this.defaultSize.setNew(item.size);\n }\n if (item.$index < this.minIndex) {\n this.minIndex = item.$index;\n }\n if (item.$index > this.maxIndex) {\n this.maxIndex = item.$index;\n }\n return itemCache;\n }\n\n /**\n * Inserts items to Set, shifts $indexes of items that remain.\n * Replaces current Set with a new one with new regular $indexes.\n * Maintains min/max indexes.\n *\n * @param {Data[]} toInsert List of non-indexed items to be inserted.\n * @param {number} index The index before/after which the insertion is performed.\n * @param {Direction} direction Determines the direction of insertion.\n * @param {boolean} fixRight Defines indexes shifting strategy.\n * If false, indexes that are greater than the inserted ones are increased.\n * If true, indexes that are less than than the inserted ones are decreased.\n */\n insertItems(toInsert: Data[], index: number, direction: Direction, fixRight: boolean): void {\n const items = new Map<number, ItemCache<Data>>();\n const length = toInsert.length;\n let min = Infinity, max = -Infinity;\n const set = (item: ItemCache<Data>) => {\n items.set(item.$index, item);\n min = item.$index < min ? item.$index : min;\n max = item.$index > max ? item.$index : max;\n };\n this.items.forEach(item => {\n let shift = 0;\n if (direction === Direction.backward) {\n if (item.$index < index && fixRight) {\n shift = -length;\n } else if (item.$index >= index && !fixRight) {\n shift = length;\n }\n } else if (direction === Direction.forward) {\n if (item.$index <= index && fixRight) {\n shift = -length;\n } else if (item.$index > index && !fixRight) {\n shift = length;\n }\n }\n if (shift) {\n item.changeIndex(item.$index + shift);\n }\n set(item);\n });\n if (this.saveData) { // persist data with no sizes\n toInsert.forEach((data, i) => {\n const $index = index + i - (fixRight ? length : 0) + (direction === Direction.forward ? 1 : 0);\n const item = new ItemCache<Data>({ $index, data }, this.saveData);\n set(item);\n });\n }\n this.items = items;\n this.minIndex = min;\n this.maxIndex = max;\n }\n\n /**\n * Removes items from Set, shifts $indexes of items that remain.\n * Replaces current Set with a new one with new regular $indexes.\n * Maintains min/max indexes and default item size.\n *\n * @param {number[]} toRemove List of indexes to be removed.\n * @param {boolean} fixRight Defines indexes shifting strategy.\n * If false, indexes that are greater than the removed ones will be decreased.\n * If true, indexes that are less than than the removed ones will be increased.\n */\n removeItems(toRemove: number[], fixRight: boolean): void {\n const items = new Map<number, ItemCache<Data>>();\n let min = Infinity, max = -Infinity;\n this.items.forEach(item => {\n if (toRemove.some(index => index === item.$index)) {\n if (item.size) {\n this.defaultSize.setRemoved(item.size);\n }\n return;\n }\n const diff = fixRight\n ? toRemove.reduce((acc, index) => acc + (item.$index < index ? 1 : 0), 0)\n : toRemove.reduce((acc, index) => acc - (item.$index > index ? 1 : 0), 0);\n item.changeIndex(item.$index + diff);\n items.set(item.$index, item);\n min = item.$index < min ? item.$index : min;\n max = item.$index > max ? item.$index : max;\n });\n this.items = items;\n this.minIndex = min;\n this.maxIndex = max;\n }\n\n /**\n * Destructively updates Set based on subset (before-after) changes.\n * Replaces current Set with a new one with new regular $indexes.\n * Maintains min/max indexes. Maintains default item size on remove only.\n *\n * @param {ItemUpdate[]} before Initial subset of items to be replaced by \"after\".\n * Each element is an object with { $index, size, toRemove } props. Must be $index-incremental.\n * Items to be removed must have toRemove flag: before[].toRemove = true.\n * @param {Item<Data>[]} after Transformed subset that replaces \"before\". Must be $index-incremental.\n * Must contain at least 1 $index from \"before\" or be empty.\n * @param {boolean} fixRight This is to fix right indexes during subset collapsing. Acts only if \"after\" is empty.\n */\n updateSubset(before: ItemUpdate[], after: Item<Data>[], fixRight?: boolean): void {\n if (!this.size || !before.length) {\n return;\n }\n const minB = before[0].$index, maxB = before[before.length - 1].$index;\n let leftDiff: number, rightDiff: number;\n if (after.length) {\n const minA = after[0].$index, maxA = after[after.length - 1].$index;\n leftDiff = minA - minB;\n rightDiff = maxA - maxB;\n } else {\n leftDiff = fixRight ? maxB - minB + 1 : 0;\n rightDiff = fixRight ? 0 : minB - maxB - 1;\n }\n const items = new Map<number, ItemCache<Data>>();\n this.items.forEach(item => {\n if (item.$index < minB) { // items to the left of the subset\n item.changeIndex(item.$index + leftDiff);\n items.set(item.$index, item);\n return;\n } else if (item.$index > maxB) { // items to the right of the subset\n item.changeIndex(item.$index + rightDiff);\n items.set(item.$index, item);\n return;\n }\n });\n after.forEach(item => // subset items\n items.set(item.$index, new ItemCache<Data>(item, this.saveData))\n );\n before // to maintain default size on remove\n .filter(item => item.toRemove)\n .forEach(item => this.defaultSize.setRemoved(item.size));\n this.minIndex += leftDiff;\n this.maxIndex += rightDiff;\n this.items = items;\n }\n\n /**\n * Shifts all indexes by some value.\n * Replaces current Set with a new one with new regular $indexes.\n * Maintains min/max indexes.\n *\n * @param {number} delta A shift value.\n */\n shiftIndexes(delta: number): void {\n const items = new Map<number, ItemCache<Data>>();\n let min = Infinity, max = -Infinity;\n this.items.forEach(item => {\n item.changeIndex(item.$index + delta);\n items.set(item.$index, item);\n min = item.$index < min ? item.$index : min;\n max = item.$index > max ? item.$index : max;\n });\n this.items = items;\n this.minIndex = min;\n this.maxIndex = max;\n }\n}\n"]}
|
|
@@ -13,7 +13,7 @@ var CheckBufferCall = /** @class */ (function () {
|
|
|
13
13
|
this.logger.log('no items to fill the buffer; wrong indexes');
|
|
14
14
|
return false;
|
|
15
15
|
}
|
|
16
|
-
this.logger.log(function () { return "going to fill the buffer with "
|
|
16
|
+
this.logger.log(function () { return "going to fill the buffer with ".concat(items.length, " item(s)"); });
|
|
17
17
|
return true;
|
|
18
18
|
};
|
|
19
19
|
CheckBufferCall.prototype.insertInBuffer = function (predicate, before, after) {
|
|
@@ -37,18 +37,18 @@ var CheckBufferCall = /** @class */ (function () {
|
|
|
37
37
|
if (index < finiteAbsMinIndex || index > finiteAbsMaxIndex) {
|
|
38
38
|
this.logger.log(function () {
|
|
39
39
|
return 'no items to insert virtually; ' +
|
|
40
|
-
|
|
40
|
+
"selected index (".concat(index, ") does not match virtual area [").concat(finiteAbsMinIndex, "..").concat(finiteAbsMaxIndex, "]");
|
|
41
41
|
});
|
|
42
42
|
return false;
|
|
43
43
|
}
|
|
44
44
|
var before = direction === Direction.backward;
|
|
45
45
|
if (!(index < firstIndex + (before ? 1 : 0) || index > lastIndex - (before ? 0 : 1))) {
|
|
46
46
|
this.logger.log(function () {
|
|
47
|
-
return "no items to insert virtually; selected index ("
|
|
47
|
+
return "no items to insert virtually; selected index (".concat(index, ") belongs Buffer [").concat(firstIndex, "..").concat(lastIndex, "]");
|
|
48
48
|
});
|
|
49
49
|
return false;
|
|
50
50
|
}
|
|
51
|
-
this.logger.log(function () { return "going to insert "
|
|
51
|
+
this.logger.log(function () { return "going to insert ".concat(items.length, " item(s) virtually"); });
|
|
52
52
|
return true;
|
|
53
53
|
};
|
|
54
54
|
return CheckBufferCall;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkCall.js","sourceRoot":"","sources":["../../../../src/classes/buffer/checkCall.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C;IAIE,yBAAY,OAAqB,EAAE,MAAc;QAC/C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,mCAAS,GAAT,UAAU,KAAa,EAAE,MAAe,EAAE,KAAc;QACtD,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YACjB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;YAC3D,OAAO,KAAK,CAAC;SACd;QACD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;YACzD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;YAC9D,OAAO,KAAK,CAAC;SACd;QACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,cAAM,OAAA,
|
|
1
|
+
{"version":3,"file":"checkCall.js","sourceRoot":"","sources":["../../../../src/classes/buffer/checkCall.ts"],"names":[],"mappings":"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","sourcesContent":["import { Buffer } from '../buffer';\nimport { Logger } from '../logger';\nimport { Direction } from '../../inputs/index';\nimport { ItemsPredicate } from '../../interfaces/index';\n\nexport class CheckBufferCall<Data> {\n private context: Buffer<Data>;\n private logger: Logger;\n\n constructor(context: Buffer<Data>, logger: Logger) {\n this.context = context;\n this.logger = logger;\n }\n\n fillEmpty(items: Data[], before?: number, after?: number): boolean {\n if (!items.length) {\n this.logger.log('no items to fill the buffer; empty list');\n return false;\n }\n if (!Number.isInteger(before) && !Number.isInteger(after)) {\n this.logger.log('no items to fill the buffer; wrong indexes');\n return false;\n }\n this.logger.log(() => `going to fill the buffer with ${items.length} item(s)`);\n return true;\n }\n\n insertInBuffer(predicate?: ItemsPredicate, before?: number, after?: number): number {\n const index = Number.isInteger(before) ? before : (Number.isInteger(after) ? after : NaN);\n const found = this.context.items.find(item =>\n (predicate && predicate(item.get())) ||\n (Number.isInteger(index) && index === item.$index)\n );\n if (!found) {\n this.logger.log('no items to insert in buffer; empty predicate\\'s result');\n return NaN;\n }\n return found.$index;\n }\n\n insertVirtual(items: Data[], index: number, direction: Direction): boolean {\n if (!items.length) {\n this.logger.log('no items to insert virtually; empty list');\n return false;\n }\n const { firstIndex, lastIndex, finiteAbsMinIndex, finiteAbsMaxIndex } = this.context;\n if (index < finiteAbsMinIndex || index > finiteAbsMaxIndex) {\n this.logger.log(() =>\n 'no items to insert virtually; ' +\n `selected index (${index}) does not match virtual area [${finiteAbsMinIndex}..${finiteAbsMaxIndex}]`\n );\n return false;\n }\n const before = direction === Direction.backward;\n if (!(index < firstIndex + (before ? 1 : 0) || index > lastIndex - (before ? 0 : 1))) {\n this.logger.log(() =>\n `no items to insert virtually; selected index (${index}) belongs Buffer [${firstIndex}..${lastIndex}]`\n );\n return false;\n }\n this.logger.log(() => `going to insert ${items.length} item(s) virtually`);\n return true;\n }\n\n}\n"]}
|
|
@@ -41,15 +41,15 @@ var Buffer = /** @class */ (function () {
|
|
|
41
41
|
var start = this.startIndexUser;
|
|
42
42
|
var index = Number(newStartIndex);
|
|
43
43
|
if (Number.isNaN(index)) {
|
|
44
|
-
this.logger.log(function () { return "fallback startIndex to settings.startIndex ("
|
|
44
|
+
this.logger.log(function () { return "fallback startIndex to settings.startIndex (".concat(start, ")"); });
|
|
45
45
|
index = start;
|
|
46
46
|
}
|
|
47
47
|
if (index < min) {
|
|
48
|
-
this.logger.log(function () { return "setting startIndex to settings.minIndex ("
|
|
48
|
+
this.logger.log(function () { return "setting startIndex to settings.minIndex (".concat(min, ") because ").concat(index, " < ").concat(min); });
|
|
49
49
|
index = min;
|
|
50
50
|
}
|
|
51
51
|
if (index > max) {
|
|
52
|
-
this.logger.log(function () { return "setting startIndex to settings.maxIndex ("
|
|
52
|
+
this.logger.log(function () { return "setting startIndex to settings.maxIndex (".concat(max, ") because ").concat(index, " > ").concat(max); });
|
|
53
53
|
index = max;
|
|
54
54
|
}
|
|
55
55
|
this.startIndex = index;
|
|
@@ -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';\nimport { CheckBufferCall } from './buffer/checkCall';\nimport { Item } from './item';\nimport { Settings } from './settings';\nimport { Logger } from './logger';\nimport { Reactive } from './reactive';\nimport { Direction } from '../inputs/index';\nimport { OnDataChanged, BufferUpdater, ItemsPredicate } from '../interfaces/index';\n\nexport class Buffer<Data> {\n\n private _items: Item<Data>[] = [];\n private _absMinIndex: number;\n private _absMaxIndex: number;\n bof: Reactive<boolean>;\n eof: Reactive<boolean>;\n\n changeItems: OnDataChanged<Data>;\n minIndexUser: number;\n maxIndexUser: number;\n startIndexUser: number;\n startIndex: number;\n\n private pristine: boolean;\n private cache: Cache<Data>;\n private checkCall: CheckBufferCall<Data>;\n private readonly logger: Logger;\n\n constructor(settings: Settings<Data>, onDataChanged: OnDataChanged<Data>, logger: Logger) {\n this.logger = logger;\n this.changeItems = onDataChanged;\n this.bof = new Reactive<boolean>(false);\n this.eof = new Reactive<boolean>(false);\n this.cache = new Cache<Data>(settings, logger);\n this.checkCall = new CheckBufferCall(this, logger);\n this.startIndexUser = settings.startIndex;\n this.minIndexUser = settings.minIndex;\n this.maxIndexUser = settings.maxIndex;\n this.reset(true);\n }\n\n dispose(): void {\n this.bof.dispose();\n this.eof.dispose();\n this._items.forEach(item => item.dispose());\n this._items = [];\n }\n\n reset(force: boolean, startIndex?: number): void {\n this.items.forEach(item => item.hide());\n this.pristine = true;\n this.items = [];\n this.cache.reset(force);\n this.absMinIndex = this.minIndexUser;\n this.absMaxIndex = this.maxIndexUser;\n this.setCurrentStartIndex(startIndex);\n this.bof.set(false);\n this.eof.set(false);\n this.pristine = false;\n }\n\n setCurrentStartIndex(newStartIndex?: unknown): void {\n const min = this.minIndexUser;\n const max = this.maxIndexUser;\n const start = this.startIndexUser;\n let index = Number(newStartIndex);\n if (Number.isNaN(index)) {\n this.logger.log(() => `fallback startIndex to settings.startIndex (${start})`);\n index = start;\n }\n if (index < min) {\n this.logger.log(() => `setting startIndex to settings.minIndex (${min}) because ${index} < ${min}`);\n index = min;\n }\n if (index > max) {\n this.logger.log(() => `setting startIndex to settings.maxIndex (${max}) because ${index} > ${max}`);\n index = max;\n }\n this.startIndex = index;\n }\n\n set items(items: Item<Data>[]) {\n this._items = items;\n this.changeItems(items);\n if (!this.pristine) {\n this.checkBOF();\n this.checkEOF();\n }\n }\n\n get items(): Item<Data>[] {\n return this._items;\n }\n\n set absMinIndex(value: number) {\n if (this._absMinIndex !== value) {\n this._absMinIndex = Number.isFinite(this._absMaxIndex) && value > this._absMaxIndex ? this._absMaxIndex : value;\n }\n if (!this.pristine) {\n this.checkBOF();\n }\n }\n\n get absMinIndex(): number {\n return this._absMinIndex;\n }\n\n set absMaxIndex(value: number) {\n if (this._absMaxIndex !== value) {\n this._absMaxIndex = Number.isFinite(this._absMinIndex) && value < this._absMinIndex ? this._absMinIndex : value;\n }\n if (!this.pristine) {\n this.checkEOF();\n }\n }\n\n get absMaxIndex(): number {\n return this._absMaxIndex;\n }\n\n private checkBOF() {\n // since bof has no setter, need to call checkBOF() on items and absMinIndex change\n const bof = this.items.length\n ? (this.items[0].$index === this.absMinIndex)\n : isFinite(this.absMinIndex);\n this.bof.set(bof);\n }\n\n private checkEOF() {\n // since eof has no setter, need to call checkEOF() on items and absMaxIndex change\n const eof = this.items.length\n ? (this.items[this.items.length - 1].$index === this.absMaxIndex)\n : isFinite(this.absMaxIndex);\n this.eof.set(eof);\n }\n\n get size(): number {\n return this._items.length;\n }\n\n get cacheSize(): number {\n return this.cache.size;\n }\n\n get defaultSize(): number {\n return this.cache.getDefaultSize();\n }\n\n get minIndex(): number {\n return isFinite(this.cache.minIndex) ? this.cache.minIndex : this.startIndex;\n }\n\n get maxIndex(): number {\n return isFinite(this.cache.maxIndex) ? this.cache.maxIndex : this.startIndex;\n }\n\n get firstIndex(): number {\n return this.items.length ? this.items[0].$index : NaN;\n }\n\n get lastIndex(): number {\n return this.items.length ? this.items[this.items.length - 1].$index : NaN;\n }\n\n get finiteAbsMinIndex(): number {\n return isFinite(this.absMinIndex) ? this.absMinIndex : this.minIndex;\n }\n\n get finiteAbsMaxIndex(): number {\n return isFinite(this.absMaxIndex) ? this.absMaxIndex : this.maxIndex;\n }\n\n get($index: number): Item<Data> | undefined {\n return this.items.find(item => item.$index === $index);\n }\n\n setItems(items: Item<Data>[]): boolean {\n if (!this.items.length) {\n this.items = [...items];\n } else if (this.items[0].$index > items[items.length - 1].$index) {\n this.items = [...items, ...this.items];\n } else if (items[0].$index > this.items[this.items.length - 1].$index) {\n this.items = [...this.items, ...items];\n } else {\n return false;\n }\n return true;\n }\n\n clip(): void {\n this.items = this.items.filter(({ toRemove }) => !toRemove);\n }\n\n getIndexToInsert(predicate?: ItemsPredicate, before?: number, after?: number): number {\n return this.checkCall.insertInBuffer(predicate, before, after);\n }\n\n private shiftExtremum(amount: number, fixRight: boolean) {\n if (!fixRight) {\n this.absMaxIndex += amount;\n } else {\n this.absMinIndex -= amount;\n this.startIndex -= amount;\n }\n if (this.startIndex > this.absMaxIndex) {\n this.startIndex = this.absMaxIndex;\n } else if (this.startIndex < this.absMinIndex) {\n this.startIndex = this.absMinIndex;\n }\n }\n\n insertVirtually(items: Data[], index: number, direction: Direction, fixRight: boolean): boolean {\n if (!this.checkCall.insertVirtual(items, index, direction)) {\n return false;\n }\n let shift = 0;\n if (index <= this.firstIndex && !fixRight) {\n shift = items.length;\n } else if (index >= this.lastIndex && fixRight) {\n shift = -items.length;\n }\n if (shift) {\n this.items.forEach(item => item.updateIndex(item.$index + shift));\n this.cache.insertItems(items, index, direction, fixRight);\n this.items = [...this.items];\n }\n this.shiftExtremum(items.length, fixRight);\n return true;\n }\n\n removeVirtually(indexes: number[], fixRight: boolean): void {\n const length = this.items.length;\n let shifted = false;\n for (\n let i = fixRight ? length - 1 : 0;\n fixRight ? i >= 0 : i < length;\n fixRight ? i-- : i++\n ) {\n const item = this.items[i];\n const diff = indexes.reduce((acc, index) => acc + (fixRight\n ? (item.$index < index ? 1 : 0)\n : (item.$index > index ? -1 : 0)\n ), 0);\n shifted = shifted || !!diff;\n item.updateIndex(item.$index + diff);\n }\n this.shiftExtremum(-indexes.length, fixRight);\n if (shifted) {\n this.items = [...this.items];\n }\n this.cache.removeItems(indexes, fixRight);\n }\n\n fillEmpty(\n items: Data[], beforeIndex: number | undefined, afterIndex: number | undefined, fixRight: boolean,\n generator: (index: number, data: Data) => Item<Data>,\n ): boolean {\n if (!this.checkCall.fillEmpty(items, beforeIndex, afterIndex)) {\n return false;\n }\n const before = Number.isInteger(beforeIndex);\n const index = (before ? beforeIndex : afterIndex) as number;\n const shift = (fixRight ? items.length : (before ? 1 : 0));\n this.items = items.map((data, i) =>\n generator(index + i + (!before ? 1 : 0) - shift, data)\n );\n this._absMinIndex = this.items[0].$index;\n this._absMaxIndex = this.items[this.size - 1].$index;\n if (this.startIndex <= this.absMinIndex) {\n this.startIndex = this.absMinIndex;\n } else if (this.startIndex > this.absMaxIndex) {\n this.startIndex = this.absMaxIndex;\n }\n return true;\n }\n\n updateItems(\n predicate: BufferUpdater<Data>,\n generator: (index: number, data: Data) => Item<Data>,\n indexToTrack: number,\n fixRight: boolean\n ): { trackedIndex: number, toRemove: Item<Data>[] } {\n if (!this.size || Number.isNaN(this.firstIndex)) {\n return { trackedIndex: NaN, toRemove: [] };\n }\n let trackedIndex = indexToTrack;\n let index = fixRight ? this.lastIndex : this.firstIndex;\n const items: Item<Data>[] = [];\n const diff = fixRight ? -1 : 1;\n const limit = this.size - 1;\n const beforeMap = new Map<number, Item>(); // need to persist original $indexes\n const updateArray = Array.prototype[fixRight ? 'unshift' : 'push'];\n\n for (let i = fixRight ? limit : 0; fixRight ? i >= 0 : i <= limit; i += diff) {\n const item = this.items[i];\n beforeMap.set(item.$index, item);\n const result = predicate(item);\n\n // if predicate result is falsy or empty array -> delete\n if (!result || (Array.isArray(result) && !result.length)) {\n item.toRemove = true;\n trackedIndex += item.$index >= indexToTrack ? (fixRight ? 1 : 0) : (fixRight ? 0 : -1);\n this.shiftExtremum(-1, fixRight);\n continue;\n }\n\n // if predicate result is truthy but not array -> leave\n if (!Array.isArray(result)) {\n item.updateIndex(index);\n updateArray.call(items, item);\n index += diff;\n continue;\n }\n\n // if predicate result is non-empty array -> insert/replace\n if (item.$index < indexToTrack) {\n trackedIndex += fixRight ? 0 : result.length - 1;\n } else if (item.$index > indexToTrack) {\n trackedIndex += fixRight ? 1 - result.length : 0;\n }\n let toRemove = true;\n const newItems: Item<Data>[] = [];\n (fixRight ? [...result].reverse() : result).forEach((data, i) => {\n let newItem: Item<Data>;\n if (item.data === data) {\n if (indexToTrack === item.$index) {\n trackedIndex = index + i * diff;\n }\n item.updateIndex(index + i * diff);\n newItem = item;\n toRemove = false; // insert case\n } else {\n newItem = generator(index + i * diff, data);\n newItem.toInsert = true;\n }\n updateArray.call(newItems, newItem);\n });\n item.toRemove = toRemove;\n updateArray.call(items, ...newItems);\n index += diff * result.length;\n if (result.length > 1) {\n this.shiftExtremum(result.length - 1, fixRight);\n }\n }\n\n const toRemove = this.items.filter(item => item.toRemove);\n const itemsBefore = Array.from(beforeMap)\n .map(([$index, { size, toRemove }]) => ({ $index, size, toRemove }))\n .sort((a, b) => a.$index - b.$index);\n this.items = items;\n this.cache.updateSubset(itemsBefore, items, fixRight);\n\n if (this.finiteAbsMinIndex === this.finiteAbsMaxIndex) {\n trackedIndex = NaN;\n } else if (trackedIndex > this.finiteAbsMaxIndex) {\n trackedIndex = this.finiteAbsMaxIndex;\n } else if (trackedIndex < this.finiteAbsMinIndex) {\n trackedIndex = this.finiteAbsMinIndex;\n }\n return { trackedIndex, toRemove };\n }\n\n cacheItem(item: Item<Data>): void {\n this.cache.add(item);\n }\n\n getFirstVisibleItemIndex(): number {\n const length = this.items.length;\n for (let i = 0; i < length; i++) {\n if (!this.items[i].invisible) {\n return i;\n }\n }\n return -1;\n }\n\n getLastVisibleItemIndex(): number {\n for (let i = this.items.length - 1; i >= 0; i--) {\n if (!this.items[i].invisible) {\n return i;\n }\n }\n return -1;\n }\n\n getFirstVisibleItem(): Item<Data> | undefined {\n const index = this.getFirstVisibleItemIndex();\n if (index >= 0) {\n return this.items[index];\n }\n }\n\n getLastVisibleItem(): Item<Data> | undefined {\n const index = this.getLastVisibleItemIndex();\n if (index >= 0) {\n return this.items[index];\n }\n }\n\n getEdgeVisibleItem(direction: Direction, opposite?: boolean): Item<Data> | undefined {\n return direction === (!opposite ? Direction.forward : Direction.backward) ?\n this.getLastVisibleItem() : this.getFirstVisibleItem();\n }\n\n getVisibleItemsCount(): number {\n return this.items.reduce((acc: number, item) => acc + (item.invisible ? 0 : 1), 0);\n }\n\n getSizeByIndex(index: number): number {\n return this.cache.getSizeByIndex(index);\n }\n\n checkDefaultSize(): boolean {\n return this.cache.recalculateDefaultSize();\n }\n\n}\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';\nimport { CheckBufferCall } from './buffer/checkCall';\nimport { Item } from './item';\nimport { Settings } from './settings';\nimport { Logger } from './logger';\nimport { Reactive } from './reactive';\nimport { Direction } from '../inputs/index';\nimport { OnDataChanged, BufferUpdater, ItemsPredicate } from '../interfaces/index';\n\nexport class Buffer<Data> {\n\n private _items: Item<Data>[] = [];\n private _absMinIndex: number;\n private _absMaxIndex: number;\n bof: Reactive<boolean>;\n eof: Reactive<boolean>;\n\n changeItems: OnDataChanged<Data>;\n minIndexUser: number;\n maxIndexUser: number;\n startIndexUser: number;\n startIndex: number;\n\n private pristine: boolean;\n private cache: Cache<Data>;\n private checkCall: CheckBufferCall<Data>;\n private readonly logger: Logger;\n\n constructor(settings: Settings<Data>, onDataChanged: OnDataChanged<Data>, logger: Logger) {\n this.logger = logger;\n this.changeItems = onDataChanged;\n this.bof = new Reactive<boolean>(false);\n this.eof = new Reactive<boolean>(false);\n this.cache = new Cache<Data>(settings, logger);\n this.checkCall = new CheckBufferCall(this, logger);\n this.startIndexUser = settings.startIndex;\n this.minIndexUser = settings.minIndex;\n this.maxIndexUser = settings.maxIndex;\n this.reset(true);\n }\n\n dispose(): void {\n this.bof.dispose();\n this.eof.dispose();\n this._items.forEach(item => item.dispose());\n this._items = [];\n }\n\n reset(force: boolean, startIndex?: number): void {\n this.items.forEach(item => item.hide());\n this.pristine = true;\n this.items = [];\n this.cache.reset(force);\n this.absMinIndex = this.minIndexUser;\n this.absMaxIndex = this.maxIndexUser;\n this.setCurrentStartIndex(startIndex);\n this.bof.set(false);\n this.eof.set(false);\n this.pristine = false;\n }\n\n setCurrentStartIndex(newStartIndex?: unknown): void {\n const min = this.minIndexUser;\n const max = this.maxIndexUser;\n const start = this.startIndexUser;\n let index = Number(newStartIndex);\n if (Number.isNaN(index)) {\n this.logger.log(() => `fallback startIndex to settings.startIndex (${start})`);\n index = start;\n }\n if (index < min) {\n this.logger.log(() => `setting startIndex to settings.minIndex (${min}) because ${index} < ${min}`);\n index = min;\n }\n if (index > max) {\n this.logger.log(() => `setting startIndex to settings.maxIndex (${max}) because ${index} > ${max}`);\n index = max;\n }\n this.startIndex = index;\n }\n\n set items(items: Item<Data>[]) {\n this._items = items;\n this.changeItems(items);\n if (!this.pristine) {\n this.checkBOF();\n this.checkEOF();\n }\n }\n\n get items(): Item<Data>[] {\n return this._items;\n }\n\n set absMinIndex(value: number) {\n if (this._absMinIndex !== value) {\n this._absMinIndex = Number.isFinite(this._absMaxIndex) && value > this._absMaxIndex ? this._absMaxIndex : value;\n }\n if (!this.pristine) {\n this.checkBOF();\n }\n }\n\n get absMinIndex(): number {\n return this._absMinIndex;\n }\n\n set absMaxIndex(value: number) {\n if (this._absMaxIndex !== value) {\n this._absMaxIndex = Number.isFinite(this._absMinIndex) && value < this._absMinIndex ? this._absMinIndex : value;\n }\n if (!this.pristine) {\n this.checkEOF();\n }\n }\n\n get absMaxIndex(): number {\n return this._absMaxIndex;\n }\n\n private checkBOF() {\n // since bof has no setter, need to call checkBOF() on items and absMinIndex change\n const bof = this.items.length\n ? (this.items[0].$index === this.absMinIndex)\n : isFinite(this.absMinIndex);\n this.bof.set(bof);\n }\n\n private checkEOF() {\n // since eof has no setter, need to call checkEOF() on items and absMaxIndex change\n const eof = this.items.length\n ? (this.items[this.items.length - 1].$index === this.absMaxIndex)\n : isFinite(this.absMaxIndex);\n this.eof.set(eof);\n }\n\n get size(): number {\n return this._items.length;\n }\n\n get cacheSize(): number {\n return this.cache.size;\n }\n\n get defaultSize(): number {\n return this.cache.getDefaultSize();\n }\n\n get minIndex(): number {\n return isFinite(this.cache.minIndex) ? this.cache.minIndex : this.startIndex;\n }\n\n get maxIndex(): number {\n return isFinite(this.cache.maxIndex) ? this.cache.maxIndex : this.startIndex;\n }\n\n get firstIndex(): number {\n return this.items.length ? this.items[0].$index : NaN;\n }\n\n get lastIndex(): number {\n return this.items.length ? this.items[this.items.length - 1].$index : NaN;\n }\n\n get finiteAbsMinIndex(): number {\n return isFinite(this.absMinIndex) ? this.absMinIndex : this.minIndex;\n }\n\n get finiteAbsMaxIndex(): number {\n return isFinite(this.absMaxIndex) ? this.absMaxIndex : this.maxIndex;\n }\n\n get($index: number): Item<Data> | undefined {\n return this.items.find(item => item.$index === $index);\n }\n\n setItems(items: Item<Data>[]): boolean {\n if (!this.items.length) {\n this.items = [...items];\n } else if (this.items[0].$index > items[items.length - 1].$index) {\n this.items = [...items, ...this.items];\n } else if (items[0].$index > this.items[this.items.length - 1].$index) {\n this.items = [...this.items, ...items];\n } else {\n return false;\n }\n return true;\n }\n\n clip(): void {\n this.items = this.items.filter(({ toRemove }) => !toRemove);\n }\n\n getIndexToInsert(predicate?: ItemsPredicate, before?: number, after?: number): number {\n return this.checkCall.insertInBuffer(predicate, before, after);\n }\n\n private shiftExtremum(amount: number, fixRight: boolean) {\n if (!fixRight) {\n this.absMaxIndex += amount;\n } else {\n this.absMinIndex -= amount;\n this.startIndex -= amount;\n }\n if (this.startIndex > this.absMaxIndex) {\n this.startIndex = this.absMaxIndex;\n } else if (this.startIndex < this.absMinIndex) {\n this.startIndex = this.absMinIndex;\n }\n }\n\n insertVirtually(items: Data[], index: number, direction: Direction, fixRight: boolean): boolean {\n if (!this.checkCall.insertVirtual(items, index, direction)) {\n return false;\n }\n let shift = 0;\n if (index <= this.firstIndex && !fixRight) {\n shift = items.length;\n } else if (index >= this.lastIndex && fixRight) {\n shift = -items.length;\n }\n if (shift) {\n this.items.forEach(item => item.updateIndex(item.$index + shift));\n this.cache.insertItems(items, index, direction, fixRight);\n this.items = [...this.items];\n }\n this.shiftExtremum(items.length, fixRight);\n return true;\n }\n\n removeVirtually(indexes: number[], fixRight: boolean): void {\n const length = this.items.length;\n let shifted = false;\n for (\n let i = fixRight ? length - 1 : 0;\n fixRight ? i >= 0 : i < length;\n fixRight ? i-- : i++\n ) {\n const item = this.items[i];\n const diff = indexes.reduce((acc, index) => acc + (fixRight\n ? (item.$index < index ? 1 : 0)\n : (item.$index > index ? -1 : 0)\n ), 0);\n shifted = shifted || !!diff;\n item.updateIndex(item.$index + diff);\n }\n this.shiftExtremum(-indexes.length, fixRight);\n if (shifted) {\n this.items = [...this.items];\n }\n this.cache.removeItems(indexes, fixRight);\n }\n\n fillEmpty(\n items: Data[], beforeIndex: number | undefined, afterIndex: number | undefined, fixRight: boolean,\n generator: (index: number, data: Data) => Item<Data>,\n ): boolean {\n if (!this.checkCall.fillEmpty(items, beforeIndex, afterIndex)) {\n return false;\n }\n const before = Number.isInteger(beforeIndex);\n const index = (before ? beforeIndex : afterIndex) as number;\n const shift = (fixRight ? items.length : (before ? 1 : 0));\n this.items = items.map((data, i) =>\n generator(index + i + (!before ? 1 : 0) - shift, data)\n );\n this._absMinIndex = this.items[0].$index;\n this._absMaxIndex = this.items[this.size - 1].$index;\n if (this.startIndex <= this.absMinIndex) {\n this.startIndex = this.absMinIndex;\n } else if (this.startIndex > this.absMaxIndex) {\n this.startIndex = this.absMaxIndex;\n }\n return true;\n }\n\n updateItems(\n predicate: BufferUpdater<Data>,\n generator: (index: number, data: Data) => Item<Data>,\n indexToTrack: number,\n fixRight: boolean\n ): { trackedIndex: number, toRemove: Item<Data>[] } {\n if (!this.size || Number.isNaN(this.firstIndex)) {\n return { trackedIndex: NaN, toRemove: [] };\n }\n let trackedIndex = indexToTrack;\n let index = fixRight ? this.lastIndex : this.firstIndex;\n const items: Item<Data>[] = [];\n const diff = fixRight ? -1 : 1;\n const limit = this.size - 1;\n const beforeMap = new Map<number, Item>(); // need to persist original $indexes\n const updateArray = Array.prototype[fixRight ? 'unshift' : 'push'];\n\n for (let i = fixRight ? limit : 0; fixRight ? i >= 0 : i <= limit; i += diff) {\n const item = this.items[i];\n beforeMap.set(item.$index, item);\n const result = predicate(item);\n\n // if predicate result is falsy or empty array -> delete\n if (!result || (Array.isArray(result) && !result.length)) {\n item.toRemove = true;\n trackedIndex += item.$index >= indexToTrack ? (fixRight ? 1 : 0) : (fixRight ? 0 : -1);\n this.shiftExtremum(-1, fixRight);\n continue;\n }\n\n // if predicate result is truthy but not array -> leave\n if (!Array.isArray(result)) {\n item.updateIndex(index);\n updateArray.call(items, item);\n index += diff;\n continue;\n }\n\n // if predicate result is non-empty array -> insert/replace\n if (item.$index < indexToTrack) {\n trackedIndex += fixRight ? 0 : result.length - 1;\n } else if (item.$index > indexToTrack) {\n trackedIndex += fixRight ? 1 - result.length : 0;\n }\n let toRemove = true;\n const newItems: Item<Data>[] = [];\n (fixRight ? [...result].reverse() : result).forEach((data, i) => {\n let newItem: Item<Data>;\n if (item.data === data) {\n if (indexToTrack === item.$index) {\n trackedIndex = index + i * diff;\n }\n item.updateIndex(index + i * diff);\n newItem = item;\n toRemove = false; // insert case\n } else {\n newItem = generator(index + i * diff, data);\n newItem.toInsert = true;\n }\n updateArray.call(newItems, newItem);\n });\n item.toRemove = toRemove;\n updateArray.call(items, ...newItems);\n index += diff * result.length;\n if (result.length > 1) {\n this.shiftExtremum(result.length - 1, fixRight);\n }\n }\n\n const toRemove = this.items.filter(item => item.toRemove);\n const itemsBefore = Array.from(beforeMap)\n .map(([$index, { size, toRemove }]) => ({ $index, size, toRemove }))\n .sort((a, b) => a.$index - b.$index);\n this.items = items;\n this.cache.updateSubset(itemsBefore, items, fixRight);\n\n if (this.finiteAbsMinIndex === this.finiteAbsMaxIndex) {\n trackedIndex = NaN;\n } else if (trackedIndex > this.finiteAbsMaxIndex) {\n trackedIndex = this.finiteAbsMaxIndex;\n } else if (trackedIndex < this.finiteAbsMinIndex) {\n trackedIndex = this.finiteAbsMinIndex;\n }\n return { trackedIndex, toRemove };\n }\n\n cacheItem(item: Item<Data>): void {\n this.cache.add(item);\n }\n\n getFirstVisibleItemIndex(): number {\n const length = this.items.length;\n for (let i = 0; i < length; i++) {\n if (!this.items[i].invisible) {\n return i;\n }\n }\n return -1;\n }\n\n getLastVisibleItemIndex(): number {\n for (let i = this.items.length - 1; i >= 0; i--) {\n if (!this.items[i].invisible) {\n return i;\n }\n }\n return -1;\n }\n\n getFirstVisibleItem(): Item<Data> | undefined {\n const index = this.getFirstVisibleItemIndex();\n if (index >= 0) {\n return this.items[index];\n }\n }\n\n getLastVisibleItem(): Item<Data> | undefined {\n const index = this.getLastVisibleItemIndex();\n if (index >= 0) {\n return this.items[index];\n }\n }\n\n getEdgeVisibleItem(direction: Direction, opposite?: boolean): Item<Data> | undefined {\n return direction === (!opposite ? Direction.forward : Direction.backward) ?\n this.getLastVisibleItem() : this.getFirstVisibleItem();\n }\n\n getVisibleItemsCount(): number {\n return this.items.reduce((acc: number, item) => acc + (item.invisible ? 0 : 1), 0);\n }\n\n getSizeByIndex(index: number): number {\n return this.cache.getSizeByIndex(index);\n }\n\n checkDefaultSize(): boolean {\n return this.cache.recalculateDefaultSize();\n }\n\n}\n"]}
|
|
@@ -1,63 +1,83 @@
|
|
|
1
1
|
import { Direction } from '../inputs/index';
|
|
2
2
|
var Routines = /** @class */ (function () {
|
|
3
|
-
function Routines(settings) {
|
|
4
|
-
|
|
5
|
-
this.
|
|
6
|
-
this.
|
|
3
|
+
function Routines(element, settings, CustomRoutines) {
|
|
4
|
+
var _this = this;
|
|
5
|
+
this.element = element;
|
|
6
|
+
this.settings = {
|
|
7
|
+
viewport: settings.viewport,
|
|
8
|
+
horizontal: settings.horizontal,
|
|
9
|
+
window: settings.windowViewport
|
|
10
|
+
};
|
|
11
|
+
// provide custom overrides for IRoutines methods
|
|
12
|
+
if (CustomRoutines) {
|
|
13
|
+
var routines_1 = new CustomRoutines(element, this.settings);
|
|
14
|
+
Object.getOwnPropertyNames(Object.getPrototypeOf(routines_1))
|
|
15
|
+
.filter(function (method) {
|
|
16
|
+
return method !== 'constructor' &&
|
|
17
|
+
typeof routines_1[method] === 'function' &&
|
|
18
|
+
typeof _this[method] === 'function';
|
|
19
|
+
})
|
|
20
|
+
.forEach(function (method) {
|
|
21
|
+
return _this[method] = function () {
|
|
22
|
+
var args = [];
|
|
23
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
24
|
+
args[_i] = arguments[_i];
|
|
25
|
+
}
|
|
26
|
+
return routines_1[method].apply(_this, args);
|
|
27
|
+
};
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
// initialization
|
|
31
|
+
this.viewport = this.getViewportElement();
|
|
32
|
+
this.onInit(settings);
|
|
7
33
|
}
|
|
8
34
|
Routines.prototype.checkElement = function (element) {
|
|
9
35
|
if (!element) {
|
|
10
36
|
throw new Error('HTML element is not defined');
|
|
11
37
|
}
|
|
12
38
|
};
|
|
13
|
-
Routines.prototype.
|
|
14
|
-
if (this.window) {
|
|
39
|
+
Routines.prototype.getViewportElement = function () {
|
|
40
|
+
if (this.settings.window) {
|
|
15
41
|
return document.documentElement;
|
|
16
42
|
}
|
|
17
|
-
if (this.viewport) {
|
|
18
|
-
return this.viewport;
|
|
43
|
+
if (this.settings.viewport) {
|
|
44
|
+
return this.settings.viewport;
|
|
19
45
|
}
|
|
20
|
-
this.checkElement(element);
|
|
21
|
-
var parent = element.parentElement;
|
|
46
|
+
this.checkElement(this.element);
|
|
47
|
+
var parent = this.element.parentElement;
|
|
22
48
|
this.checkElement(parent);
|
|
23
49
|
return parent;
|
|
24
50
|
};
|
|
25
|
-
Routines.prototype.
|
|
26
|
-
if (
|
|
27
|
-
|
|
51
|
+
Routines.prototype.onInit = function (settings) {
|
|
52
|
+
if (settings.windowViewport) {
|
|
53
|
+
if ('scrollRestoration' in history) {
|
|
54
|
+
history.scrollRestoration = 'manual';
|
|
55
|
+
}
|
|
28
56
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
Routines.prototype.setupScrollRestoration = function () {
|
|
32
|
-
if ('scrollRestoration' in history) {
|
|
33
|
-
history.scrollRestoration = 'manual';
|
|
57
|
+
if (settings.dismissOverflowAnchor) {
|
|
58
|
+
this.viewport.style.overflowAnchor = 'none';
|
|
34
59
|
}
|
|
35
60
|
};
|
|
36
|
-
Routines.prototype.dismissOverflowAnchor = function (element) {
|
|
37
|
-
this.checkElement(element);
|
|
38
|
-
element.style.overflowAnchor = 'none';
|
|
39
|
-
};
|
|
40
61
|
Routines.prototype.findElementBySelector = function (element, selector) {
|
|
41
62
|
this.checkElement(element);
|
|
42
63
|
return element.querySelector(selector);
|
|
43
64
|
};
|
|
44
|
-
Routines.prototype.findPaddingElement = function (
|
|
45
|
-
return this.findElementBySelector(element, "[data-padding-"
|
|
65
|
+
Routines.prototype.findPaddingElement = function (direction) {
|
|
66
|
+
return this.findElementBySelector(this.element, "[data-padding-".concat(direction, "]"));
|
|
46
67
|
};
|
|
47
|
-
Routines.prototype.findItemElement = function (
|
|
48
|
-
return this.findElementBySelector(element, "[data-sid=\""
|
|
68
|
+
Routines.prototype.findItemElement = function (id) {
|
|
69
|
+
return this.findElementBySelector(this.element, "[data-sid=\"".concat(id, "\"]"));
|
|
49
70
|
};
|
|
50
|
-
Routines.prototype.getScrollPosition = function (
|
|
51
|
-
if (this.window) {
|
|
52
|
-
return window.pageYOffset;
|
|
71
|
+
Routines.prototype.getScrollPosition = function () {
|
|
72
|
+
if (this.settings.window) {
|
|
73
|
+
return this.settings.horizontal ? window.pageXOffset : window.pageYOffset;
|
|
53
74
|
}
|
|
54
|
-
this.
|
|
55
|
-
return element[this.horizontal ? 'scrollLeft' : 'scrollTop'];
|
|
75
|
+
return this.viewport[this.settings.horizontal ? 'scrollLeft' : 'scrollTop'];
|
|
56
76
|
};
|
|
57
|
-
Routines.prototype.setScrollPosition = function (
|
|
77
|
+
Routines.prototype.setScrollPosition = function (value) {
|
|
58
78
|
value = Math.max(0, value);
|
|
59
|
-
if (this.window) {
|
|
60
|
-
if (this.horizontal) {
|
|
79
|
+
if (this.settings.window) {
|
|
80
|
+
if (this.settings.horizontal) {
|
|
61
81
|
window.scrollTo(value, window.scrollY);
|
|
62
82
|
}
|
|
63
83
|
else {
|
|
@@ -65,49 +85,62 @@ var Routines = /** @class */ (function () {
|
|
|
65
85
|
}
|
|
66
86
|
return;
|
|
67
87
|
}
|
|
68
|
-
this.
|
|
69
|
-
element[this.horizontal ? 'scrollLeft' : 'scrollTop'] = value;
|
|
88
|
+
this.viewport[this.settings.horizontal ? 'scrollLeft' : 'scrollTop'] = value;
|
|
70
89
|
};
|
|
71
|
-
Routines.prototype.
|
|
90
|
+
Routines.prototype.getElementParams = function (element) {
|
|
72
91
|
this.checkElement(element);
|
|
73
|
-
if (this.window && doNotBind) {
|
|
74
|
-
var clientWidth = element.clientWidth, clientHeight = element.clientHeight, clientLeft = element.clientLeft, clientTop = element.clientTop;
|
|
75
|
-
return {
|
|
76
|
-
'height': clientHeight,
|
|
77
|
-
'width': clientWidth,
|
|
78
|
-
'top': clientTop,
|
|
79
|
-
'bottom': clientTop + clientHeight,
|
|
80
|
-
'left': clientLeft,
|
|
81
|
-
'right': clientLeft + clientWidth,
|
|
82
|
-
'x': clientLeft,
|
|
83
|
-
'y': clientTop,
|
|
84
|
-
'toJSON': function () { return null; },
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
92
|
return element.getBoundingClientRect();
|
|
88
93
|
};
|
|
89
|
-
Routines.prototype.
|
|
90
|
-
|
|
94
|
+
Routines.prototype.getWindowParams = function () {
|
|
95
|
+
var _a = this.viewport, clientWidth = _a.clientWidth, clientHeight = _a.clientHeight, clientLeft = _a.clientLeft, clientTop = _a.clientTop;
|
|
96
|
+
return {
|
|
97
|
+
'height': clientHeight,
|
|
98
|
+
'width': clientWidth,
|
|
99
|
+
'top': clientTop,
|
|
100
|
+
'bottom': clientTop + clientHeight,
|
|
101
|
+
'left': clientLeft,
|
|
102
|
+
'right': clientLeft + clientWidth,
|
|
103
|
+
'x': clientLeft,
|
|
104
|
+
'y': clientTop,
|
|
105
|
+
'toJSON': function () { return null; },
|
|
106
|
+
};
|
|
107
|
+
};
|
|
108
|
+
Routines.prototype.getSize = function (element) {
|
|
109
|
+
return this.getElementParams(element)[this.settings.horizontal ? 'width' : 'height'];
|
|
110
|
+
};
|
|
111
|
+
Routines.prototype.getScrollerSize = function () {
|
|
112
|
+
return this.getElementParams(this.element)[this.settings.horizontal ? 'width' : 'height'];
|
|
113
|
+
};
|
|
114
|
+
Routines.prototype.getViewportSize = function () {
|
|
115
|
+
if (this.settings.window) {
|
|
116
|
+
return this.getWindowParams()[this.settings.horizontal ? 'width' : 'height'];
|
|
117
|
+
}
|
|
118
|
+
return this.getSize(this.viewport);
|
|
91
119
|
};
|
|
92
120
|
Routines.prototype.getSizeStyle = function (element) {
|
|
93
121
|
this.checkElement(element);
|
|
94
|
-
var size = element.style[this.horizontal ? 'width' : 'height'];
|
|
122
|
+
var size = element.style[this.settings.horizontal ? 'width' : 'height'];
|
|
95
123
|
return parseFloat(size) || 0;
|
|
96
124
|
};
|
|
97
125
|
Routines.prototype.setSizeStyle = function (element, value) {
|
|
98
126
|
this.checkElement(element);
|
|
99
127
|
value = Math.max(0, Math.round(value));
|
|
100
|
-
element.style[this.horizontal ? 'width' : 'height'] = value
|
|
128
|
+
element.style[this.settings.horizontal ? 'width' : 'height'] = "".concat(value, "px");
|
|
101
129
|
};
|
|
102
|
-
Routines.prototype.getEdge = function (element, direction
|
|
103
|
-
var
|
|
130
|
+
Routines.prototype.getEdge = function (element, direction) {
|
|
131
|
+
var horizontal = this.settings.horizontal;
|
|
132
|
+
var params = this.getElementParams(element);
|
|
104
133
|
var isFwd = direction === Direction.forward;
|
|
105
|
-
return params[isFwd ? (
|
|
106
|
-
};
|
|
107
|
-
Routines.prototype.
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
134
|
+
return params[isFwd ? (horizontal ? 'right' : 'bottom') : (horizontal ? 'left' : 'top')];
|
|
135
|
+
};
|
|
136
|
+
Routines.prototype.getViewportEdge = function (direction) {
|
|
137
|
+
var _a = this.settings, window = _a.window, horizontal = _a.horizontal;
|
|
138
|
+
if (window) {
|
|
139
|
+
var params = this.getWindowParams();
|
|
140
|
+
var isFwd = direction === Direction.forward;
|
|
141
|
+
return params[isFwd ? (horizontal ? 'right' : 'bottom') : (horizontal ? 'left' : 'top')];
|
|
142
|
+
}
|
|
143
|
+
return this.getEdge(this.viewport, direction);
|
|
111
144
|
};
|
|
112
145
|
Routines.prototype.makeElementVisible = function (element) {
|
|
113
146
|
this.checkElement(element);
|
|
@@ -119,14 +152,30 @@ var Routines = /** @class */ (function () {
|
|
|
119
152
|
this.checkElement(element);
|
|
120
153
|
element.style.display = 'none';
|
|
121
154
|
};
|
|
122
|
-
Routines.prototype.getOffset = function (
|
|
123
|
-
this
|
|
124
|
-
|
|
155
|
+
Routines.prototype.getOffset = function () {
|
|
156
|
+
var _this = this;
|
|
157
|
+
var get = function (element) {
|
|
158
|
+
return (_this.settings.horizontal ? element.offsetLeft : element.offsetTop) || 0;
|
|
159
|
+
};
|
|
160
|
+
return get(this.element) - (!this.settings.window ? get(this.viewport) : 0);
|
|
125
161
|
};
|
|
126
162
|
Routines.prototype.scrollTo = function (element, argument) {
|
|
127
163
|
this.checkElement(element);
|
|
128
164
|
element.scrollIntoView(argument);
|
|
129
165
|
};
|
|
166
|
+
Routines.prototype.render = function (cb) {
|
|
167
|
+
var timeoutId = setTimeout(function () { return cb(); });
|
|
168
|
+
return function () { return clearTimeout(timeoutId); };
|
|
169
|
+
};
|
|
170
|
+
Routines.prototype.animate = function (cb) {
|
|
171
|
+
var animationFrameId = requestAnimationFrame(function () { return cb(); });
|
|
172
|
+
return function () { return cancelAnimationFrame(animationFrameId); };
|
|
173
|
+
};
|
|
174
|
+
Routines.prototype.onScroll = function (handler) {
|
|
175
|
+
var eventReceiver = this.settings.window ? window : this.viewport;
|
|
176
|
+
eventReceiver.addEventListener('scroll', handler);
|
|
177
|
+
return function () { return eventReceiver.removeEventListener('scroll', handler); };
|
|
178
|
+
};
|
|
130
179
|
return Routines;
|
|
131
180
|
}());
|
|
132
181
|
export { Routines };
|
|
@@ -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';\nimport { Direction } from '../inputs/index';\n\nexport class Routines {\n\n readonly horizontal: boolean;\n readonly window: boolean;\n readonly viewport: HTMLElement | null;\n\n constructor(settings: Settings) {\n this.horizontal = settings.horizontal;\n this.window = settings.windowViewport;\n this.viewport = settings.viewport;\n }\n\n checkElement(element: HTMLElement): void {\n if (!element) {\n throw new Error('HTML element is not defined');\n }\n }\n\n getHostElement(element: HTMLElement): HTMLElement {\n if (this.window) {\n return document.documentElement as HTMLElement;\n }\n if (this.viewport) {\n return this.viewport;\n }\n this.checkElement(element);\n const parent = element.parentElement as HTMLElement;\n this.checkElement(parent);\n return parent;\n }\n\n getScrollEventReceiver(element: HTMLElement): HTMLElement | Window {\n if (this.window) {\n return window;\n }\n return this.getHostElement(element);\n }\n\n setupScrollRestoration(): void {\n if ('scrollRestoration' in history) {\n history.scrollRestoration = 'manual';\n }\n }\n\n dismissOverflowAnchor(element: HTMLElement): void {\n this.checkElement(element);\n element.style.overflowAnchor = 'none';\n }\n\n findElementBySelector(element: HTMLElement, selector: string): HTMLElement | null {\n this.checkElement(element);\n return element.querySelector(selector);\n }\n\n findPaddingElement(element: HTMLElement, direction: Direction): HTMLElement | null {\n return this.findElementBySelector(element, `[data-padding-${direction}]`);\n }\n\n findItemElement(element: HTMLElement, id: string): HTMLElement | null {\n return this.findElementBySelector(element, `[data-sid=\"${id}\"]`);\n }\n\n getScrollPosition(element: HTMLElement): number {\n if (this.window) {\n return window.pageYOffset;\n }\n this.checkElement(element);\n return element[this.horizontal ? 'scrollLeft' : 'scrollTop'];\n }\n\n setScrollPosition(element: HTMLElement, value: number): void {\n value = Math.max(0, value);\n if (this.window) {\n if (this.horizontal) {\n window.scrollTo(value, window.scrollY);\n } else {\n window.scrollTo(window.scrollX, value);\n }\n return;\n }\n this.checkElement(element);\n element[this.horizontal ? 'scrollLeft' : 'scrollTop'] = value;\n }\n\n getParams(element: HTMLElement, doNotBind?: boolean): DOMRect {\n this.checkElement(element);\n if (this.window && doNotBind) {\n const { clientWidth, clientHeight, clientLeft, clientTop } = element;\n return {\n 'height': clientHeight,\n 'width': clientWidth,\n 'top': clientTop,\n 'bottom': clientTop + clientHeight,\n 'left': clientLeft,\n 'right': clientLeft + clientWidth,\n 'x': clientLeft,\n 'y': clientTop,\n 'toJSON': () => null,\n };\n }\n return element.getBoundingClientRect();\n }\n\n getSize(element: HTMLElement, doNotBind?: boolean): number {\n return this.getParams(element, doNotBind)[this.horizontal ? 'width' : 'height'];\n }\n\n getSizeStyle(element: HTMLElement): number {\n this.checkElement(element);\n const size = element.style[this.horizontal ? 'width' : 'height'];\n return parseFloat(size as string) || 0;\n }\n\n setSizeStyle(element: HTMLElement, value: number): void {\n this.checkElement(element);\n value = Math.max(0, Math.round(value));\n element.style[this.horizontal ? 'width' : 'height'] = `${value}px`;\n }\n\n getEdge(element: HTMLElement, direction: Direction, doNotBind?: boolean): number {\n const params = this.getParams(element, doNotBind);\n const isFwd = direction === Direction.forward;\n return params[isFwd ? (this.horizontal ? 'right' : 'bottom') : (this.horizontal ? 'left' : 'top')];\n }\n\n getEdge2(element: HTMLElement, direction: Direction, relativeElement: HTMLElement, opposite: boolean): number {\n // vertical only ?\n return element.offsetTop - (relativeElement ? relativeElement.scrollTop : 0) +\n (direction === (!opposite ? Direction.forward : Direction.backward) ? this.getSize(element) : 0);\n }\n\n makeElementVisible(element: HTMLElement): void {\n this.checkElement(element);\n element.style.left = '';\n element.style.top = '';\n element.style.position = '';\n }\n\n hideElement(element: HTMLElement): void {\n this.checkElement(element);\n element.style.display = 'none';\n }\n\n getOffset(element: HTMLElement): number {\n this.checkElement(element);\n return (this.horizontal ? element.offsetLeft : element.offsetTop) || 0;\n }\n\n scrollTo(element: HTMLElement, argument?: boolean | ScrollIntoViewOptions): void {\n this.checkElement(element);\n element.scrollIntoView(argument);\n }\n\n}\n"]}
|
|
1
|
+
{"version":3,"file":"domRoutines.js","sourceRoot":"","sources":["../../../src/classes/domRoutines.ts"],"names":[],"mappings":"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","sourcesContent":["import { Settings } from './settings';\nimport { Direction } from '../inputs/index';\nimport { IRoutines, CustomRoutinesClass } from '../interfaces/index';\n\nexport class Routines implements IRoutines {\n\n readonly settings: IRoutines['settings'];\n readonly element: HTMLElement;\n readonly viewport: HTMLElement;\n\n constructor(element: HTMLElement, settings: Settings, CustomRoutines?: CustomRoutinesClass) {\n this.element = element;\n this.settings = {\n viewport: settings.viewport,\n horizontal: settings.horizontal,\n window: settings.windowViewport\n };\n // provide custom overrides for IRoutines methods\n if (CustomRoutines) {\n const routines = new CustomRoutines(element, this.settings);\n Object.getOwnPropertyNames(Object.getPrototypeOf(routines))\n .filter(method =>\n method !== 'constructor' &&\n typeof routines[method] === 'function' &&\n typeof this[method] === 'function'\n )\n .forEach(method =>\n this[method] = (...args: unknown[]) =>\n routines[method].apply(this, args)\n );\n }\n // initialization\n this.viewport = this.getViewportElement();\n this.onInit(settings);\n }\n\n checkElement(element: HTMLElement): void {\n if (!element) {\n throw new Error('HTML element is not defined');\n }\n }\n\n getViewportElement(): HTMLElement {\n if (this.settings.window) {\n return document.documentElement;\n }\n if (this.settings.viewport) {\n return this.settings.viewport;\n }\n this.checkElement(this.element);\n const parent = this.element.parentElement as HTMLElement;\n this.checkElement(parent);\n return parent;\n }\n\n onInit(settings: Settings): void {\n if (settings.windowViewport) {\n if ('scrollRestoration' in history) {\n history.scrollRestoration = 'manual';\n }\n }\n if (settings.dismissOverflowAnchor) {\n this.viewport.style.overflowAnchor = 'none';\n }\n }\n\n findElementBySelector(element: HTMLElement, selector: string): HTMLElement | null {\n this.checkElement(element);\n return element.querySelector(selector);\n }\n\n findPaddingElement(direction: Direction): HTMLElement | null {\n return this.findElementBySelector(this.element, `[data-padding-${direction}]`);\n }\n\n findItemElement(id: string): HTMLElement | null {\n return this.findElementBySelector(this.element, `[data-sid=\"${id}\"]`);\n }\n\n getScrollPosition(): number {\n if (this.settings.window) {\n return this.settings.horizontal ? window.pageXOffset : window.pageYOffset;\n }\n return this.viewport[this.settings.horizontal ? 'scrollLeft' : 'scrollTop'];\n }\n\n setScrollPosition(value: number): void {\n value = Math.max(0, value);\n if (this.settings.window) {\n if (this.settings.horizontal) {\n window.scrollTo(value, window.scrollY);\n } else {\n window.scrollTo(window.scrollX, value);\n }\n return;\n }\n this.viewport[this.settings.horizontal ? 'scrollLeft' : 'scrollTop'] = value;\n }\n\n getElementParams(element: HTMLElement): DOMRect {\n this.checkElement(element);\n return element.getBoundingClientRect();\n }\n\n getWindowParams(): DOMRect {\n const { clientWidth, clientHeight, clientLeft, clientTop } = this.viewport;\n return {\n 'height': clientHeight,\n 'width': clientWidth,\n 'top': clientTop,\n 'bottom': clientTop + clientHeight,\n 'left': clientLeft,\n 'right': clientLeft + clientWidth,\n 'x': clientLeft,\n 'y': clientTop,\n 'toJSON': () => null,\n };\n }\n\n getSize(element: HTMLElement): number {\n return this.getElementParams(element)[this.settings.horizontal ? 'width' : 'height'];\n }\n\n getScrollerSize(): number {\n return this.getElementParams(this.element)[this.settings.horizontal ? 'width' : 'height'];\n }\n\n getViewportSize(): number {\n if (this.settings.window) {\n return this.getWindowParams()[this.settings.horizontal ? 'width' : 'height'];\n }\n return this.getSize(this.viewport);\n }\n\n getSizeStyle(element: HTMLElement): number {\n this.checkElement(element);\n const size = element.style[this.settings.horizontal ? 'width' : 'height'];\n return parseFloat(size as string) || 0;\n }\n\n setSizeStyle(element: HTMLElement, value: number): void {\n this.checkElement(element);\n value = Math.max(0, Math.round(value));\n element.style[this.settings.horizontal ? 'width' : 'height'] = `${value}px`;\n }\n\n getEdge(element: HTMLElement, direction: Direction): number {\n const { horizontal } = this.settings;\n const params = this.getElementParams(element);\n const isFwd = direction === Direction.forward;\n return params[isFwd ? (horizontal ? 'right' : 'bottom') : (horizontal ? 'left' : 'top')];\n }\n\n getViewportEdge(direction: Direction): number {\n const { window, horizontal } = this.settings;\n if (window) {\n const params = this.getWindowParams();\n const isFwd = direction === Direction.forward;\n return params[isFwd ? (horizontal ? 'right' : 'bottom') : (horizontal ? 'left' : 'top')];\n }\n return this.getEdge(this.viewport, direction);\n }\n\n makeElementVisible(element: HTMLElement): void {\n this.checkElement(element);\n element.style.left = '';\n element.style.top = '';\n element.style.position = '';\n }\n\n hideElement(element: HTMLElement): void {\n this.checkElement(element);\n element.style.display = 'none';\n }\n\n getOffset(): number {\n const get = (element: HTMLElement) =>\n (this.settings.horizontal ? element.offsetLeft : element.offsetTop) || 0;\n return get(this.element) - (!this.settings.window ? get(this.viewport) : 0);\n }\n\n scrollTo(element: HTMLElement, argument?: boolean | ScrollIntoViewOptions): void {\n this.checkElement(element);\n element.scrollIntoView(argument);\n }\n\n render(cb: () => void): () => void {\n const timeoutId = setTimeout(() => cb());\n return () => clearTimeout(timeoutId);\n }\n\n animate(cb: () => void): () => void {\n const animationFrameId = requestAnimationFrame(() => cb());\n return () => cancelAnimationFrame(animationFrameId);\n }\n\n onScroll(handler: EventListener): () => void {\n const eventReceiver = this.settings.window ? window : this.viewport;\n eventReceiver.addEventListener('scroll', handler);\n return () => eventReceiver.removeEventListener('scroll', handler);\n }\n\n}\n"]}
|