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":"scroller.js","sourceRoot":"","sources":["../../src/scroller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,IAAI,MAAM,WAAW,CAAC;AAK7B,MAAM,CAAC,IAAM,yBAAyB,GAAG,qBAAqB,CAAC;AAE/D,IAAI,aAAa,GAAG,CAAC,CAAC;AAEtB;IAYE,kBAAY,
|
|
1
|
+
{"version":3,"file":"scroller.js","sourceRoot":"","sources":["../../src/scroller.ts"],"names":[],"mappings":"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","sourcesContent":["import { DatasourceGeneric, makeDatasource } from './classes/datasource';\nimport { Settings } from './classes/settings';\nimport { Logger } from './classes/logger';\nimport { Routines } from './classes/domRoutines';\nimport { Viewport } from './classes/viewport';\nimport { Buffer } from './classes/buffer';\nimport { State } from './classes/state';\nimport { Adapter } from './classes/adapter';\nimport { Reactive } from './classes/reactive';\nimport { validate, DATASOURCE } from './inputs/index';\nimport core from './version';\nimport {\n ScrollerWorkflow, IDatasource, IDatasourceConstructed, ScrollerParams, IPackages, ProcessSubject\n} from './interfaces/index';\n\nexport const INVALID_DATASOURCE_PREFIX = 'Invalid datasource:';\n\nlet instanceCount = 0;\n\nexport class Scroller<Data = unknown> {\n public datasource: IDatasourceConstructed<Data>;\n public workflow: ScrollerWorkflow<Data>;\n\n public settings: Settings<Data>;\n public logger: Logger;\n public routines: Routines;\n public viewport: Viewport;\n public buffer: Buffer<Data>;\n public state: State;\n public adapter: Adapter<Data>;\n\n constructor({\n datasource, consumer, element, workflow, Routines: CustomRoutines, scroller\n }: ScrollerParams<Data>) {\n const { params: { get } } = validate(datasource, DATASOURCE);\n if (!get.isValid) {\n throw new Error(`${INVALID_DATASOURCE_PREFIX} ${get.errors[0]}`);\n }\n\n const packageInfo = scroller ? scroller.state.packageInfo : ({ consumer, core } as IPackages);\n element = scroller ? scroller.routines.element : (element as HTMLElement);\n workflow = scroller ? scroller.workflow : (workflow as ScrollerWorkflow<Data>);\n\n this.workflow = workflow;\n this.settings = new Settings<Data>(datasource.settings, datasource.devSettings, ++instanceCount);\n this.logger = new Logger(this as Scroller, packageInfo, datasource.adapter);\n this.routines = new Routines(element, this.settings, CustomRoutines);\n this.state = new State(packageInfo, this.settings, scroller ? scroller.state : void 0);\n this.buffer = new Buffer<Data>(this.settings, workflow.onDataChanged, this.logger);\n this.viewport = new Viewport(this.settings, this.routines, this.state, this.logger);\n this.logger.object('vscroll settings object', this.settings, true);\n\n this.initDatasource(datasource, scroller);\n }\n\n initDatasource(datasource: IDatasource<Data>, scroller?: Scroller<Data>): void {\n if (scroller) { // scroller re-instantiating case\n this.datasource = datasource as IDatasourceConstructed<Data>;\n this.adapter = scroller.adapter;\n // todo: what about (this.settings.adapter !== scroller.setting.adapter) case?\n return;\n }\n // scroller is being instantiated for the first time\n const constructed = datasource instanceof DatasourceGeneric;\n const mockAdapter = !constructed && !this.settings.adapter;\n if (constructed) { // datasource is already instantiated\n this.datasource = datasource as IDatasourceConstructed<Data>;\n } else { // datasource as POJO\n const DS = makeDatasource(() => ({ mock: mockAdapter }));\n this.datasource = new DS<Data>(datasource);\n if (this.settings.adapter) {\n datasource.adapter = this.datasource.adapter;\n }\n }\n const publicContext = !mockAdapter ? this.datasource.adapter : null;\n this.adapter = new Adapter<Data>(publicContext, () => this.workflow, this.logger);\n }\n\n init(adapterRun$?: Reactive<ProcessSubject>): void {\n this.viewport.reset(this.buffer.startIndex);\n this.logger.stat('initialization');\n this.adapter.initialize(this.buffer, this.state, this.logger, adapterRun$);\n }\n\n dispose(forever?: boolean): void {\n if (forever) { // Adapter is not re-instantiated on reset\n this.adapter.dispose();\n }\n this.buffer.dispose();\n this.state.dispose();\n }\n\n finalize(): void {\n }\n\n}\n"]}
|
package/dist/esm5/version.js
CHANGED
package/dist/esm5/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,eAAe;IACb,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,OAAO;CACjB,CAAC","sourcesContent":["export default {\n name: 'vscroll',\n version: '1.
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,eAAe;IACb,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,OAAO;CACjB,CAAC","sourcesContent":["export default {\n name: 'vscroll',\n version: '1.5.0'\n};\n"]}
|
package/dist/esm5/workflow.js
CHANGED
|
@@ -6,14 +6,14 @@ import { CommonProcess, ProcessStatus as Status, } from './processes/index';
|
|
|
6
6
|
var Workflow = /** @class */ (function () {
|
|
7
7
|
function Workflow(_a) {
|
|
8
8
|
var _this = this;
|
|
9
|
-
var element = _a.element, datasource = _a.datasource, consumer = _a.consumer, run = _a.run;
|
|
9
|
+
var element = _a.element, datasource = _a.datasource, consumer = _a.consumer, run = _a.run, Routines = _a.Routines;
|
|
10
10
|
this.isInitialized = false;
|
|
11
11
|
this.initTimer = null;
|
|
12
12
|
this.adapterRun$ = new Reactive();
|
|
13
13
|
this.cyclesDone = 0;
|
|
14
14
|
this.interruptionCount = 0;
|
|
15
15
|
this.errors = [];
|
|
16
|
-
this.
|
|
16
|
+
this.offScroll = function () { return null; };
|
|
17
17
|
this.propagateChanges = run;
|
|
18
18
|
this.stateMachineMethods = {
|
|
19
19
|
run: this.runProcess(),
|
|
@@ -21,7 +21,13 @@ var Workflow = /** @class */ (function () {
|
|
|
21
21
|
done: this.done.bind(this),
|
|
22
22
|
onError: this.onError.bind(this)
|
|
23
23
|
};
|
|
24
|
-
this.scroller = new Scroller({
|
|
24
|
+
this.scroller = new Scroller({
|
|
25
|
+
element: element,
|
|
26
|
+
datasource: datasource,
|
|
27
|
+
consumer: consumer,
|
|
28
|
+
workflow: this.getUpdater(),
|
|
29
|
+
Routines: Routines
|
|
30
|
+
});
|
|
25
31
|
if (this.scroller.settings.initializeDelay) {
|
|
26
32
|
this.initTimer = setTimeout(function () {
|
|
27
33
|
_this.initTimer = null;
|
|
@@ -42,16 +48,13 @@ var Workflow = /** @class */ (function () {
|
|
|
42
48
|
status: Status.start
|
|
43
49
|
});
|
|
44
50
|
// set up scroll event listener
|
|
45
|
-
var
|
|
51
|
+
var routines = this.scroller.routines;
|
|
46
52
|
var onScrollHandler = function (event) { return _this.callWorkflow({
|
|
47
53
|
process: CommonProcess.scroll,
|
|
48
54
|
status: Status.start,
|
|
49
55
|
payload: { event: event }
|
|
50
56
|
}); };
|
|
51
|
-
|
|
52
|
-
this.disposeScrollEventHandler = function () {
|
|
53
|
-
return scrollEventReceiver.removeEventListener('scroll', onScrollHandler);
|
|
54
|
-
};
|
|
57
|
+
this.offScroll = routines.onScroll(onScrollHandler);
|
|
55
58
|
};
|
|
56
59
|
Workflow.prototype.changeItems = function (items) {
|
|
57
60
|
this.propagateChanges(items);
|
|
@@ -79,7 +82,7 @@ var Workflow = /** @class */ (function () {
|
|
|
79
82
|
'%cfire%c'
|
|
80
83
|
], ['color: #cc7777;', 'color: #000000;'], false), [
|
|
81
84
|
process,
|
|
82
|
-
"\""
|
|
85
|
+
"\"".concat(status, "\"")
|
|
83
86
|
], false), __read((payload !== void 0 ? [payload] : [])), false); });
|
|
84
87
|
}
|
|
85
88
|
this.scroller.logger.logProcess(data);
|
|
@@ -135,7 +138,7 @@ var Workflow = /** @class */ (function () {
|
|
|
135
138
|
workflow.call.interrupted = true;
|
|
136
139
|
this.scroller.workflow = this.getUpdater();
|
|
137
140
|
this.interruptionCount++;
|
|
138
|
-
logger_1.log(function () { return "workflow had been interrupted by the "
|
|
141
|
+
logger_1.log(function () { return "workflow had been interrupted by the ".concat(process, " process (").concat(_this.interruptionCount, ")"); });
|
|
139
142
|
}
|
|
140
143
|
if (datasource) { // Scroller re-initialization case
|
|
141
144
|
this.scroller.adapter.relax(function () {
|
|
@@ -151,7 +154,7 @@ var Workflow = /** @class */ (function () {
|
|
|
151
154
|
var _a = this.scroller, state = _a.state, logger = _a.logger;
|
|
152
155
|
this.cyclesDone++;
|
|
153
156
|
logger.logCycle(false);
|
|
154
|
-
state.
|
|
157
|
+
state.endWorkflowCycle(this.cyclesDone + 1);
|
|
155
158
|
this.finalize();
|
|
156
159
|
};
|
|
157
160
|
Workflow.prototype.dispose = function () {
|
|
@@ -159,7 +162,7 @@ var Workflow = /** @class */ (function () {
|
|
|
159
162
|
if (this.initTimer) {
|
|
160
163
|
clearTimeout(this.initTimer);
|
|
161
164
|
}
|
|
162
|
-
this.
|
|
165
|
+
this.offScroll();
|
|
163
166
|
this.adapterRun$.dispose();
|
|
164
167
|
this.scroller.dispose(true);
|
|
165
168
|
Object.getOwnPropertyNames(this).forEach(function (prop) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/workflow.ts"],"names":[],"mappings":"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","sourcesContent":["import { Scroller } from './scroller';\nimport { runStateMachine } from './workflow-transducer';\nimport { Reactive } from './classes/reactive';\nimport { Item } from './classes/item';\nimport { CommonProcess, ProcessStatus as Status, } from './processes/index';\nimport {\n WorkflowParams,\n ProcessName,\n ProcessPayload,\n ProcessClass,\n ProcessSubject,\n WorkflowError,\n InterruptParams,\n StateMachineMethods,\n ScrollerWorkflow,\n} from './interfaces/index';\n\nexport class Workflow<ItemData = unknown> {\n\n isInitialized: boolean;\n initTimer: ReturnType<typeof setTimeout> | null;\n adapterRun$: Reactive<ProcessSubject>;\n cyclesDone: number;\n interruptionCount: number;\n errors: WorkflowError[];\n\n private disposeScrollEventHandler: () => void;\n readonly propagateChanges: WorkflowParams<ItemData>['run'];\n readonly stateMachineMethods: StateMachineMethods<ItemData>;\n\n scroller: Scroller<ItemData>;\n\n constructor({ element, datasource, consumer, run }: WorkflowParams<ItemData>) {\n this.isInitialized = false;\n this.initTimer = null;\n this.adapterRun$ = new Reactive();\n this.cyclesDone = 0;\n this.interruptionCount = 0;\n this.errors = [];\n this.disposeScrollEventHandler = () => null;\n this.propagateChanges = run;\n this.stateMachineMethods = {\n run: this.runProcess(),\n interrupt: this.interrupt.bind(this),\n done: this.done.bind(this),\n onError: this.onError.bind(this)\n };\n\n this.scroller = new Scroller<ItemData>({ element, datasource, consumer, workflow: this.getUpdater() });\n\n if (this.scroller.settings.initializeDelay) {\n this.initTimer = setTimeout(() => {\n this.initTimer = null;\n this.init();\n }, this.scroller.settings.initializeDelay);\n } else {\n this.init();\n }\n }\n\n init(): void {\n this.scroller.init(this.adapterRun$);\n this.isInitialized = true;\n\n // run the Workflow\n this.callWorkflow({\n process: CommonProcess.init,\n status: Status.start\n });\n\n // set up scroll event listener\n const { scrollEventReceiver } = this.scroller.viewport;\n const onScrollHandler: EventListener =\n event => this.callWorkflow({\n process: CommonProcess.scroll,\n status: Status.start,\n payload: { event }\n });\n scrollEventReceiver.addEventListener('scroll', onScrollHandler);\n this.disposeScrollEventHandler = () =>\n scrollEventReceiver.removeEventListener('scroll', onScrollHandler);\n }\n\n changeItems(items: Item<ItemData>[]): void {\n this.propagateChanges(items);\n }\n\n callWorkflow(processSubject: ProcessSubject): void {\n if (!this.isInitialized) {\n return;\n }\n const { process, status } = processSubject;\n if (process && process.startsWith('adapter') && status !== Status.next) {\n this.adapterRun$.set(processSubject);\n }\n this.process(processSubject);\n }\n\n getUpdater(): ScrollerWorkflow<ItemData> {\n return {\n call: this.callWorkflow.bind(this),\n onDataChanged: this.changeItems.bind(this),\n };\n }\n\n process(data: ProcessSubject): void {\n const { status, process, payload } = data;\n if (this.scroller.settings.logProcessRun) {\n this.scroller.logger.log(() => [\n '%cfire%c', ...['color: #cc7777;', 'color: #000000;'],\n process, `\"${status}\"`, ...(payload !== void 0 ? [payload] : [])\n ]);\n }\n this.scroller.logger.logProcess(data);\n\n if (process === CommonProcess.end) {\n this.scroller.finalize();\n }\n runStateMachine({\n input: data,\n methods: this.stateMachineMethods as StateMachineMethods<unknown>\n });\n }\n\n runProcess() {\n return ({ run, process, name }: ProcessClass) =>\n (...args: any[]): void => {\n if (this.scroller.settings.logProcessRun) {\n this.scroller.logger.log(() => [\n '%crun%c', ...['color: #333399;', 'color: #000000;'],\n process || name, ...args\n ]);\n }\n run(this.scroller as Scroller, ...args);\n };\n }\n\n onError(process: ProcessName, payload?: ProcessPayload): void {\n const message: string = payload && String(payload.error) || '';\n const { time, cycle } = this.scroller.state;\n this.errors.push({\n process,\n message,\n time,\n loop: cycle.loopIdNext\n });\n this.scroller.logger.logError(message);\n }\n\n interrupt({ process, finalize, datasource }: InterruptParams<ItemData>): void {\n if (finalize) {\n const { workflow, logger } = this.scroller;\n // we are going to create a new reference for the scroller.workflow object\n // calling the old version of the scroller.workflow by any outstanding async processes will be skipped\n workflow.call = (p: ProcessSubject) => // eslint-disable-line @typescript-eslint/no-unused-vars\n logger.log('[skip wf call]');\n workflow.call.interrupted = true;\n this.scroller.workflow = this.getUpdater();\n this.interruptionCount++;\n logger.log(() => `workflow had been interrupted by the ${process} process (${this.interruptionCount})`);\n }\n if (datasource) { // Scroller re-initialization case\n this.scroller.adapter.relax(() => {\n this.scroller.logger.log('new Scroller instantiation');\n const scroller = new Scroller<ItemData>({ datasource, scroller: this.scroller });\n this.scroller.dispose();\n this.scroller = scroller;\n this.scroller.init();\n });\n }\n }\n\n done(): void {\n const { state, logger } = this.scroller;\n this.cyclesDone++;\n logger.logCycle(false);\n state.cycle.done(this.cyclesDone + 1);\n this.finalize();\n }\n\n dispose(): void {\n if (this.initTimer) {\n clearTimeout(this.initTimer);\n }\n this.disposeScrollEventHandler();\n this.adapterRun$.dispose();\n this.scroller.dispose(true);\n Object.getOwnPropertyNames(this).forEach(prop => {\n delete (this as Record<string, unknown>)[prop];\n });\n }\n\n finalize(): void {\n }\n\n}\n"]}
|
|
1
|
+
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/workflow.ts"],"names":[],"mappings":"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","sourcesContent":["import { Scroller } from './scroller';\nimport { runStateMachine } from './workflow-transducer';\nimport { Reactive } from './classes/reactive';\nimport { Item } from './classes/item';\nimport { CommonProcess, ProcessStatus as Status, } from './processes/index';\nimport {\n WorkflowParams,\n ProcessName,\n ProcessPayload,\n ProcessClass,\n ProcessSubject,\n WorkflowError,\n InterruptParams,\n StateMachineMethods,\n ScrollerWorkflow,\n} from './interfaces/index';\n\nexport class Workflow<ItemData = unknown> {\n\n isInitialized: boolean;\n initTimer: ReturnType<typeof setTimeout> | null;\n adapterRun$: Reactive<ProcessSubject>;\n cyclesDone: number;\n interruptionCount: number;\n errors: WorkflowError[];\n\n private offScroll: () => void;\n readonly propagateChanges: WorkflowParams<ItemData>['run'];\n readonly stateMachineMethods: StateMachineMethods<ItemData>;\n\n scroller: Scroller<ItemData>;\n\n constructor({ element, datasource, consumer, run, Routines }: WorkflowParams<ItemData>) {\n this.isInitialized = false;\n this.initTimer = null;\n this.adapterRun$ = new Reactive();\n this.cyclesDone = 0;\n this.interruptionCount = 0;\n this.errors = [];\n this.offScroll = () => null;\n this.propagateChanges = run;\n this.stateMachineMethods = {\n run: this.runProcess(),\n interrupt: this.interrupt.bind(this),\n done: this.done.bind(this),\n onError: this.onError.bind(this)\n };\n\n this.scroller = new Scroller<ItemData>({\n element, datasource, consumer, workflow: this.getUpdater(), Routines\n });\n\n if (this.scroller.settings.initializeDelay) {\n this.initTimer = setTimeout(() => {\n this.initTimer = null;\n this.init();\n }, this.scroller.settings.initializeDelay);\n } else {\n this.init();\n }\n }\n\n init(): void {\n this.scroller.init(this.adapterRun$);\n this.isInitialized = true;\n\n // run the Workflow\n this.callWorkflow({\n process: CommonProcess.init,\n status: Status.start\n });\n\n // set up scroll event listener\n const { routines } = this.scroller;\n const onScrollHandler: EventListener =\n event => this.callWorkflow({\n process: CommonProcess.scroll,\n status: Status.start,\n payload: { event }\n });\n this.offScroll = routines.onScroll(onScrollHandler);\n }\n\n changeItems(items: Item<ItemData>[]): void {\n this.propagateChanges(items);\n }\n\n callWorkflow(processSubject: ProcessSubject): void {\n if (!this.isInitialized) {\n return;\n }\n const { process, status } = processSubject;\n if (process && process.startsWith('adapter') && status !== Status.next) {\n this.adapterRun$.set(processSubject);\n }\n this.process(processSubject);\n }\n\n getUpdater(): ScrollerWorkflow<ItemData> {\n return {\n call: this.callWorkflow.bind(this),\n onDataChanged: this.changeItems.bind(this),\n };\n }\n\n process(data: ProcessSubject): void {\n const { status, process, payload } = data;\n if (this.scroller.settings.logProcessRun) {\n this.scroller.logger.log(() => [\n '%cfire%c', ...['color: #cc7777;', 'color: #000000;'],\n process, `\"${status}\"`, ...(payload !== void 0 ? [payload] : [])\n ]);\n }\n this.scroller.logger.logProcess(data);\n\n if (process === CommonProcess.end) {\n this.scroller.finalize();\n }\n runStateMachine({\n input: data,\n methods: this.stateMachineMethods as StateMachineMethods<unknown>\n });\n }\n\n runProcess() {\n return ({ run, process, name }: ProcessClass) =>\n (...args: any[]): void => {\n if (this.scroller.settings.logProcessRun) {\n this.scroller.logger.log(() => [\n '%crun%c', ...['color: #333399;', 'color: #000000;'],\n process || name, ...args\n ]);\n }\n run(this.scroller as Scroller, ...args);\n };\n }\n\n onError(process: ProcessName, payload?: ProcessPayload): void {\n const message: string = payload && String(payload.error) || '';\n const { time, cycle } = this.scroller.state;\n this.errors.push({\n process,\n message,\n time,\n loop: cycle.loopIdNext\n });\n this.scroller.logger.logError(message);\n }\n\n interrupt({ process, finalize, datasource }: InterruptParams<ItemData>): void {\n if (finalize) {\n const { workflow, logger } = this.scroller;\n // we are going to create a new reference for the scroller.workflow object\n // calling the old version of the scroller.workflow by any outstanding async processes will be skipped\n workflow.call = (p: ProcessSubject) => // eslint-disable-line @typescript-eslint/no-unused-vars\n logger.log('[skip wf call]');\n workflow.call.interrupted = true;\n this.scroller.workflow = this.getUpdater();\n this.interruptionCount++;\n logger.log(() => `workflow had been interrupted by the ${process} process (${this.interruptionCount})`);\n }\n if (datasource) { // Scroller re-initialization case\n this.scroller.adapter.relax(() => {\n this.scroller.logger.log('new Scroller instantiation');\n const scroller = new Scroller<ItemData>({ datasource, scroller: this.scroller });\n this.scroller.dispose();\n this.scroller = scroller;\n this.scroller.init();\n });\n }\n }\n\n done(): void {\n const { state, logger } = this.scroller;\n this.cyclesDone++;\n logger.logCycle(false);\n state.endWorkflowCycle(this.cyclesDone + 1);\n this.finalize();\n }\n\n dispose(): void {\n if (this.initTimer) {\n clearTimeout(this.initTimer);\n }\n this.offScroll();\n this.adapterRun$.dispose();\n this.scroller.dispose(true);\n Object.getOwnPropertyNames(this).forEach(prop => {\n delete (this as Record<string, unknown>)[prop];\n });\n }\n\n finalize(): void {\n }\n\n}\n"]}
|
|
@@ -1,28 +1,33 @@
|
|
|
1
1
|
import { Settings } from './settings';
|
|
2
2
|
import { Direction } from '../inputs/index';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
readonly
|
|
6
|
-
readonly
|
|
7
|
-
|
|
3
|
+
import { IRoutines, CustomRoutinesClass } from '../interfaces/index';
|
|
4
|
+
export declare class Routines implements IRoutines {
|
|
5
|
+
readonly settings: IRoutines['settings'];
|
|
6
|
+
readonly element: HTMLElement;
|
|
7
|
+
readonly viewport: HTMLElement;
|
|
8
|
+
constructor(element: HTMLElement, settings: Settings, CustomRoutines?: CustomRoutinesClass);
|
|
8
9
|
checkElement(element: HTMLElement): void;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
setupScrollRestoration(): void;
|
|
12
|
-
dismissOverflowAnchor(element: HTMLElement): void;
|
|
10
|
+
getViewportElement(): HTMLElement;
|
|
11
|
+
onInit(settings: Settings): void;
|
|
13
12
|
findElementBySelector(element: HTMLElement, selector: string): HTMLElement | null;
|
|
14
|
-
findPaddingElement(
|
|
15
|
-
findItemElement(
|
|
16
|
-
getScrollPosition(
|
|
17
|
-
setScrollPosition(
|
|
18
|
-
|
|
19
|
-
|
|
13
|
+
findPaddingElement(direction: Direction): HTMLElement | null;
|
|
14
|
+
findItemElement(id: string): HTMLElement | null;
|
|
15
|
+
getScrollPosition(): number;
|
|
16
|
+
setScrollPosition(value: number): void;
|
|
17
|
+
getElementParams(element: HTMLElement): DOMRect;
|
|
18
|
+
getWindowParams(): DOMRect;
|
|
19
|
+
getSize(element: HTMLElement): number;
|
|
20
|
+
getScrollerSize(): number;
|
|
21
|
+
getViewportSize(): number;
|
|
20
22
|
getSizeStyle(element: HTMLElement): number;
|
|
21
23
|
setSizeStyle(element: HTMLElement, value: number): void;
|
|
22
|
-
getEdge(element: HTMLElement, direction: Direction
|
|
23
|
-
|
|
24
|
+
getEdge(element: HTMLElement, direction: Direction): number;
|
|
25
|
+
getViewportEdge(direction: Direction): number;
|
|
24
26
|
makeElementVisible(element: HTMLElement): void;
|
|
25
27
|
hideElement(element: HTMLElement): void;
|
|
26
|
-
getOffset(
|
|
28
|
+
getOffset(): number;
|
|
27
29
|
scrollTo(element: HTMLElement, argument?: boolean | ScrollIntoViewOptions): void;
|
|
30
|
+
render(cb: () => void): () => void;
|
|
31
|
+
animate(cb: () => void): () => void;
|
|
32
|
+
onScroll(handler: EventListener): () => void;
|
|
28
33
|
}
|
|
@@ -10,7 +10,7 @@ export declare class Logger {
|
|
|
10
10
|
readonly getWorkflowCycleData: () => string;
|
|
11
11
|
readonly getLoopId: () => string;
|
|
12
12
|
readonly getLoopIdNext: () => string;
|
|
13
|
-
readonly getScrollPosition: (
|
|
13
|
+
readonly getScrollPosition: () => number;
|
|
14
14
|
private logs;
|
|
15
15
|
constructor(scroller: Scroller, packageInfo: IPackages, adapter?: {
|
|
16
16
|
id: number;
|
|
@@ -5,7 +5,7 @@ export declare class Padding {
|
|
|
5
5
|
element: HTMLElement;
|
|
6
6
|
direction: Direction;
|
|
7
7
|
routines: Routines;
|
|
8
|
-
constructor(
|
|
8
|
+
constructor(direction: Direction, routines: Routines);
|
|
9
9
|
reset(size?: number): void;
|
|
10
10
|
get size(): number;
|
|
11
11
|
set size(value: number);
|
|
@@ -14,7 +14,7 @@ export declare class Paddings {
|
|
|
14
14
|
settings: Settings;
|
|
15
15
|
forward: Padding;
|
|
16
16
|
backward: Padding;
|
|
17
|
-
constructor(
|
|
17
|
+
constructor(routines: Routines, settings: Settings);
|
|
18
18
|
byDirection(direction: Direction, opposite?: boolean): Padding;
|
|
19
19
|
reset(viewportSize: number, startIndex: number, offset: number): void;
|
|
20
20
|
getPositiveSize(startIndex: number, viewportSize: number, offset: number): number;
|
|
@@ -22,8 +22,8 @@ export declare class WorkflowCycleModel {
|
|
|
22
22
|
get loopId(): string;
|
|
23
23
|
get loopIdNext(): string;
|
|
24
24
|
constructor(instanceIndex: number, cycle?: WorkflowCycleModel);
|
|
25
|
-
done(count: number): void;
|
|
26
25
|
start(isInitial: boolean, initiator: ProcessName): void;
|
|
26
|
+
end(count: number): void;
|
|
27
27
|
dispose(forever?: boolean): void;
|
|
28
28
|
}
|
|
29
29
|
export {};
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { ScrollEventData as IScrollEventData
|
|
2
|
-
export declare class
|
|
1
|
+
import { ScrollEventData as IScrollEventData } from '../../interfaces/index';
|
|
2
|
+
export declare class ScrollModel {
|
|
3
3
|
previous: IScrollEventData | null;
|
|
4
4
|
current: IScrollEventData | null;
|
|
5
5
|
scrollTimer: ReturnType<typeof setTimeout> | null;
|
|
6
6
|
syntheticPosition: number | null;
|
|
7
7
|
syntheticFulfill: boolean;
|
|
8
|
-
|
|
8
|
+
cancelAnimation: (() => void) | null;
|
|
9
9
|
positionBeforeAsync: number | null;
|
|
10
10
|
positionBeforeAdjust: number | null;
|
|
11
11
|
positionAfterAdjust: number | null;
|
|
12
12
|
constructor();
|
|
13
13
|
reset(): void;
|
|
14
|
-
|
|
14
|
+
stop(): void;
|
|
15
15
|
hasPositionChanged(position: number): boolean;
|
|
16
16
|
}
|
|
@@ -3,7 +3,8 @@ import { WorkflowCycleModel } from './state/cycle';
|
|
|
3
3
|
import { FetchModel } from './state/fetch';
|
|
4
4
|
import { ClipModel } from './state/clip';
|
|
5
5
|
import { RenderModel } from './state/render';
|
|
6
|
-
import {
|
|
6
|
+
import { ScrollModel } from './state/scroll';
|
|
7
|
+
import { State as IState, IPackages, ProcessName } from '../interfaces/index';
|
|
7
8
|
export declare class State implements IState {
|
|
8
9
|
readonly packageInfo: IPackages;
|
|
9
10
|
private settings;
|
|
@@ -12,13 +13,15 @@ export declare class State implements IState {
|
|
|
12
13
|
fetch: FetchModel;
|
|
13
14
|
clip: ClipModel;
|
|
14
15
|
render: RenderModel;
|
|
15
|
-
|
|
16
|
+
scroll: ScrollModel;
|
|
16
17
|
get time(): number;
|
|
17
18
|
constructor(packageInfo: IPackages, settings: Settings, state?: IState);
|
|
18
|
-
|
|
19
|
+
startWorkflowCycle(isInitial: boolean, initiator: ProcessName): void;
|
|
20
|
+
endWorkflowCycle(count: number): void;
|
|
19
21
|
startInnerLoop(): {
|
|
20
22
|
process?: ProcessName;
|
|
21
23
|
doRender?: boolean;
|
|
22
24
|
};
|
|
25
|
+
endInnerLoop(): void;
|
|
23
26
|
dispose(): void;
|
|
24
27
|
}
|
|
@@ -8,20 +8,18 @@ import { Direction } from '../inputs/index';
|
|
|
8
8
|
export declare class Viewport {
|
|
9
9
|
offset: number;
|
|
10
10
|
paddings: Paddings;
|
|
11
|
-
readonly element: HTMLElement;
|
|
12
11
|
readonly settings: Settings;
|
|
13
12
|
readonly routines: Routines;
|
|
14
13
|
readonly state: State;
|
|
15
14
|
readonly logger: Logger;
|
|
16
|
-
|
|
17
|
-
readonly scrollEventReceiver: HTMLElement | Window;
|
|
18
|
-
constructor(element: HTMLElement, settings: Settings, routines: Routines, state: State, logger: Logger);
|
|
15
|
+
constructor(settings: Settings, routines: Routines, state: State, logger: Logger);
|
|
19
16
|
reset(startIndex: number): void;
|
|
20
17
|
setPosition(value: number): number;
|
|
21
18
|
get scrollPosition(): number;
|
|
22
19
|
set scrollPosition(value: number);
|
|
23
20
|
getSize(): number;
|
|
24
21
|
getScrollableSize(): number;
|
|
22
|
+
getMaxScrollPosition(): number;
|
|
25
23
|
getBufferPadding(): number;
|
|
26
24
|
getEdge(direction: Direction): number;
|
|
27
25
|
setOffset(): void;
|
package/dist/typings/index.d.ts
CHANGED
|
@@ -4,6 +4,6 @@ import packageInfo from './version';
|
|
|
4
4
|
import { INVALID_DATASOURCE_PREFIX } from './scroller';
|
|
5
5
|
import { AdapterPropName, EMPTY_ITEM, getDefaultAdapterProps } from './classes/adapter/props';
|
|
6
6
|
import { Direction, SizeStrategy } from './inputs/index';
|
|
7
|
-
import { IDatasource, IDatasourceConstructed, IReactivePropConfig, IAdapterConfig, ItemAdapter, IAdapter, Item } from './interfaces/index';
|
|
7
|
+
import { IDatasource, IDatasourceConstructed, IRoutines, IReactivePropConfig, IAdapterConfig, ItemAdapter, IAdapter, Item } from './interfaces/index';
|
|
8
8
|
export { Workflow, makeDatasource, packageInfo, INVALID_DATASOURCE_PREFIX, AdapterPropName, EMPTY_ITEM, getDefaultAdapterProps, Direction, SizeStrategy, };
|
|
9
|
-
export { IDatasource, IDatasourceConstructed, IReactivePropConfig, IAdapterConfig, ItemAdapter as IAdapterItem, IAdapter, Item, };
|
|
9
|
+
export { IDatasource, IDatasourceConstructed, IRoutines, IReactivePropConfig, IAdapterConfig, ItemAdapter as IAdapterItem, IAdapter, Item, };
|
|
@@ -3,7 +3,8 @@ import { OnDataChanged, WorkflowParams, ScrollerWorkflow, ScrollerParams, Workfl
|
|
|
3
3
|
import { Item } from './item';
|
|
4
4
|
import { IReactivePropConfig, IReactivePropsConfig, IReactivePropsStore, IAdapterConfig, IAdapterProp, ItemAdapter, ItemsPredicate, ItemsUpdater, ItemsProcessor, BufferUpdater, IPackage, IPackages, IBufferInfo, IAdapterInput, AdapterAppendOptions, AdapterPrependOptions, AdapterRemoveOptions, AdapterClipOptions, AdapterInsertOptions, AdapterReplaceOptions, AdapterUpdateOptions, AdapterFixOptions, AdapterMethodResult, IAdapter } from './adapter';
|
|
5
5
|
import { Settings, DevSettings } from './settings';
|
|
6
|
-
import {
|
|
6
|
+
import { IRoutines, CustomRoutinesClass } from './routines';
|
|
7
|
+
import { ScrollEventData, State } from './state';
|
|
7
8
|
import { ProcessName, ProcessClass, ProcessPayload, ProcessSubject, AdapterProcessMap, IBaseProcess, IBaseAdapterProcess } from './process';
|
|
8
9
|
import { ValidatedValue, IValidator, ICommonProp, ICommonProps, IValidatedCommonProps, IValidatedData } from './validation';
|
|
9
|
-
export { ObservableLike, DatasourceGet, IDatasourceOptional, IDatasource, IDatasourceConstructed, OnDataChanged, WorkflowParams, ScrollerWorkflow, ScrollerParams, WorkflowGetter, WorkflowError, InterruptParams, StateMachineMethods, StateMachineParams, Item, IReactivePropConfig, IReactivePropsConfig, IReactivePropsStore, IAdapterConfig, IAdapterProp, ItemAdapter, AdapterMethodResult, IAdapter, ItemsPredicate, ItemsUpdater, ItemsProcessor, BufferUpdater, IPackage, IPackages, IBufferInfo, IAdapterInput, AdapterAppendOptions, AdapterPrependOptions, AdapterRemoveOptions, AdapterClipOptions, AdapterInsertOptions, AdapterReplaceOptions, AdapterUpdateOptions, AdapterFixOptions, Settings, DevSettings,
|
|
10
|
+
export { ObservableLike, DatasourceGet, IDatasourceOptional, IDatasource, IDatasourceConstructed, OnDataChanged, WorkflowParams, ScrollerWorkflow, ScrollerParams, WorkflowGetter, WorkflowError, InterruptParams, StateMachineMethods, StateMachineParams, Item, IReactivePropConfig, IReactivePropsConfig, IReactivePropsStore, IAdapterConfig, IAdapterProp, ItemAdapter, AdapterMethodResult, IAdapter, ItemsPredicate, ItemsUpdater, ItemsProcessor, BufferUpdater, IPackage, IPackages, IBufferInfo, IAdapterInput, AdapterAppendOptions, AdapterPrependOptions, AdapterRemoveOptions, AdapterClipOptions, AdapterInsertOptions, AdapterReplaceOptions, AdapterUpdateOptions, AdapterFixOptions, Settings, DevSettings, IRoutines, CustomRoutinesClass, ScrollEventData, State, ProcessName, ProcessClass, ProcessPayload, ProcessSubject, AdapterProcessMap, IBaseProcess, IBaseAdapterProcess, ValidatedValue, IValidator, ICommonProp, ICommonProps, IValidatedCommonProps, IValidatedData, };
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { Settings } from '../classes/settings';
|
|
2
|
+
import { Direction } from '../inputs/index';
|
|
3
|
+
interface IRoutinesSettings {
|
|
4
|
+
/** The scroller's viewport element defined by the app settings.
|
|
5
|
+
* The value is equal to settings.viewport and thus can be null.
|
|
6
|
+
*/
|
|
7
|
+
viewport: HTMLElement | null;
|
|
8
|
+
/** Determines wether the scroller is horizontal-oriented or not.
|
|
9
|
+
* The value is equal to settings.horizontal.
|
|
10
|
+
*/
|
|
11
|
+
horizontal: boolean;
|
|
12
|
+
/** Determines wether the entire window is the scroller's viewport or not.
|
|
13
|
+
* The value is equal to settings.window.
|
|
14
|
+
*/
|
|
15
|
+
window: boolean;
|
|
16
|
+
}
|
|
17
|
+
export interface IRoutines {
|
|
18
|
+
/** Internal prop that is available after instantiation.
|
|
19
|
+
* Reduced version of the App settings object.
|
|
20
|
+
*/
|
|
21
|
+
readonly settings: IRoutinesSettings;
|
|
22
|
+
/** Internal prop that is available after instantiation.
|
|
23
|
+
* The scroller's element that comes from the end App.
|
|
24
|
+
*/
|
|
25
|
+
readonly element: HTMLElement;
|
|
26
|
+
/** Internal prop that is available after instantiation.
|
|
27
|
+
* The scroller's viewport element.
|
|
28
|
+
* The "getViewportElement" method is responsible for the value.
|
|
29
|
+
*/
|
|
30
|
+
readonly viewport: HTMLElement;
|
|
31
|
+
/** Checks HTML element. Should throw error if it's not valid.
|
|
32
|
+
* @param {HTMLElement} element HTML element to check.
|
|
33
|
+
*/
|
|
34
|
+
checkElement: (element: HTMLElement) => void;
|
|
35
|
+
/** Gets the viewport element based on the internal props:
|
|
36
|
+
* "settings.viewport", "settings.window" and "element".
|
|
37
|
+
* This method is being called during Routines instantiation
|
|
38
|
+
* to determine the "viewport" prop:
|
|
39
|
+
*
|
|
40
|
+
* this.viewport = this.getViewportElement();
|
|
41
|
+
* @returns {HTMLElement} HTML element.
|
|
42
|
+
*/
|
|
43
|
+
getViewportElement: () => HTMLElement;
|
|
44
|
+
/** This method is being called in the end of Routines instantiation.
|
|
45
|
+
* @param {Settings} settings Unreduced Scroller's settings object.
|
|
46
|
+
*/
|
|
47
|
+
onInit: (settings: Settings) => void;
|
|
48
|
+
/** Finds element by CSS selector.
|
|
49
|
+
* @param {HTMLElement} element Top of the elements hierarchy to search.
|
|
50
|
+
* @param {string} selector CSS selector.
|
|
51
|
+
* @returns {HTMLElement | null} The first HTML element that matches the specified selector, or null.
|
|
52
|
+
*/
|
|
53
|
+
findElementBySelector: (element: HTMLElement, selector: string) => HTMLElement | null;
|
|
54
|
+
/** Finds padding element.
|
|
55
|
+
* @param {'backward' | 'forward'} direction Search direction: backward or forward.
|
|
56
|
+
* @returns {HTMLElement | null} HTML padding element, or null.
|
|
57
|
+
*/
|
|
58
|
+
findPaddingElement: (direction: Direction) => HTMLElement | null;
|
|
59
|
+
/** Finds single item element by its id.
|
|
60
|
+
* @param {string} id Id of the element to search.
|
|
61
|
+
* @returns {HTMLElement | null} HTML item element, or null.
|
|
62
|
+
*/
|
|
63
|
+
findItemElement: (id: string) => HTMLElement | null;
|
|
64
|
+
/** Gets scroll position of the viewport. Internal settings should be taken into account.
|
|
65
|
+
* @returns {number} Scroll position value.
|
|
66
|
+
*/
|
|
67
|
+
getScrollPosition: () => number;
|
|
68
|
+
/** Sets scroll position of the viewport. Internal settings should be taken into account.
|
|
69
|
+
* @param {number} value Scroll position value.
|
|
70
|
+
*/
|
|
71
|
+
setScrollPosition: (value: number) => void;
|
|
72
|
+
/** Gets the size of the element and its position relative to the viewport.
|
|
73
|
+
* @param {HTMLElement} element
|
|
74
|
+
* @returns {DOMRect} DOMRect object.
|
|
75
|
+
*/
|
|
76
|
+
getElementParams: (element: HTMLElement) => DOMRect;
|
|
77
|
+
/** Gets params of the host element in case the "window" setting is set to true.
|
|
78
|
+
* @returns {DOMRect} DOMRect object.
|
|
79
|
+
*/
|
|
80
|
+
getWindowParams: () => DOMRect;
|
|
81
|
+
/** Gets size of the element. Internal props should be taken into account.
|
|
82
|
+
* For example, if horizontal = false, then the element's height is needed.
|
|
83
|
+
* If horizontal = true, then the element's width is needed.
|
|
84
|
+
* @param {HTMLElement} element
|
|
85
|
+
* @returns {DOMRect} DOMRect object.
|
|
86
|
+
*/
|
|
87
|
+
getSize: (element: HTMLElement) => number;
|
|
88
|
+
/** Gets size of the scroller element.
|
|
89
|
+
* @returns {DOMRect} DOMRect object.
|
|
90
|
+
*/
|
|
91
|
+
getScrollerSize: () => number;
|
|
92
|
+
/** Gets size of the viewport.
|
|
93
|
+
* @returns {DOMRect} DOMRect object.
|
|
94
|
+
*/
|
|
95
|
+
getViewportSize: () => number;
|
|
96
|
+
/** Gets size of the element. Internal settings ("horizontal") should be taken into account.
|
|
97
|
+
* This method should work in the same way as "setSizeStyle" does.
|
|
98
|
+
* @param {HTMLElement} element
|
|
99
|
+
* @returns {number} Numeric value.
|
|
100
|
+
*/
|
|
101
|
+
getSizeStyle: (element: HTMLElement) => number;
|
|
102
|
+
/** Sets size of the element. Internal settings ("horizontal") should be taken into account.
|
|
103
|
+
* This method should work in the same way as "getSizeStyle" does.
|
|
104
|
+
* @param {HTMLElement} element
|
|
105
|
+
* @param {number} value Numeric value to be new element's size.
|
|
106
|
+
*/
|
|
107
|
+
setSizeStyle: (element: HTMLElement, value: number) => void;
|
|
108
|
+
/** Gets the edge coordinate of the element. Internal settings ("horizontal") should be taken into account.
|
|
109
|
+
* For example, if horizontal = false and direction = "backward" then the element's top coordinate is needed.
|
|
110
|
+
* If horizontal = true and direction = "forward" then the element's right coordinate is needed.
|
|
111
|
+
* @param {HTMLElement} element
|
|
112
|
+
* @param {'backward' | 'forward'} direction
|
|
113
|
+
* @returns {number} Numeric value.
|
|
114
|
+
*/
|
|
115
|
+
getEdge: (element: HTMLElement, direction: Direction) => number;
|
|
116
|
+
/** Gets the edge coordinate of the viewport. Internal settings should be taken into account.
|
|
117
|
+
* @param {'backward' | 'forward'} direction
|
|
118
|
+
* @returns {number} Numeric value.
|
|
119
|
+
*/
|
|
120
|
+
getViewportEdge: (direction: Direction) => number;
|
|
121
|
+
/** Makes the element visible in the same way as the external Workflow.run method makes it invisible.
|
|
122
|
+
* @param {HTMLElement} element
|
|
123
|
+
*/
|
|
124
|
+
makeElementVisible: (element: HTMLElement) => void;
|
|
125
|
+
/** Hides the element. This method is being called before remove and has no connection with makeElementVisible.
|
|
126
|
+
* @param {HTMLElement} element
|
|
127
|
+
*/
|
|
128
|
+
hideElement: (element: HTMLElement) => void;
|
|
129
|
+
/** Gets scroller's offset.
|
|
130
|
+
* @returns {number} Numeric value.
|
|
131
|
+
*/
|
|
132
|
+
getOffset: () => number;
|
|
133
|
+
/** Scrolls into the element's view.
|
|
134
|
+
* @param {HTMLElement} element
|
|
135
|
+
* @param {boolean | ScrollIntoViewOptions} argument
|
|
136
|
+
*/
|
|
137
|
+
scrollTo: (element: HTMLElement, argument?: boolean | ScrollIntoViewOptions) => void;
|
|
138
|
+
/** Wraps rendering. Runs render process and calls the argument function when it is done.
|
|
139
|
+
* @param {function} cb
|
|
140
|
+
* @returns {function} Callback to dismiss render and prevent the argument function to be invoked.
|
|
141
|
+
*/
|
|
142
|
+
render: (cb: () => void) => () => void;
|
|
143
|
+
/** Wraps animation. Runs animations process and calls the argument function when it is done.
|
|
144
|
+
* @param {function} cb
|
|
145
|
+
* @returns {function} Callback to dismiss animation and prevent the argument function to be invoked.
|
|
146
|
+
*/
|
|
147
|
+
animate: (cb: () => void) => () => void;
|
|
148
|
+
/** Provides scroll event listening. Invokes the function argument each time the scroll event fires.
|
|
149
|
+
* @param {EventListener} handler
|
|
150
|
+
* @returns {function} Callback to dismiss scroll event listener.
|
|
151
|
+
*/
|
|
152
|
+
onScroll: (handler: EventListener) => () => void;
|
|
153
|
+
}
|
|
154
|
+
export declare type CustomRoutinesClass = {
|
|
155
|
+
new (element: HTMLElement, settings: IRoutinesSettings): Partial<IRoutines>;
|
|
156
|
+
};
|
|
157
|
+
export {};
|
|
@@ -3,26 +3,13 @@ import { WorkflowCycleModel } from '../classes/state/cycle';
|
|
|
3
3
|
import { FetchModel } from '../classes/state/fetch';
|
|
4
4
|
import { ClipModel } from '../classes/state/clip';
|
|
5
5
|
import { RenderModel } from '../classes/state/render';
|
|
6
|
+
import { ScrollModel } from '../classes/state/scroll';
|
|
6
7
|
import { IPackages } from './adapter';
|
|
7
8
|
export interface ScrollEventData {
|
|
8
9
|
time: number;
|
|
9
10
|
position: number;
|
|
10
11
|
direction: Direction | null;
|
|
11
12
|
}
|
|
12
|
-
export interface ScrollState {
|
|
13
|
-
previous: ScrollEventData | null;
|
|
14
|
-
current: ScrollEventData | null;
|
|
15
|
-
scrollTimer: ReturnType<typeof setTimeout> | null;
|
|
16
|
-
syntheticPosition: number | null;
|
|
17
|
-
syntheticFulfill: boolean;
|
|
18
|
-
animationFrameId: number;
|
|
19
|
-
positionBeforeAsync: number | null;
|
|
20
|
-
positionBeforeAdjust: number | null;
|
|
21
|
-
positionAfterAdjust: number | null;
|
|
22
|
-
reset: () => void;
|
|
23
|
-
cleanupTimers: () => void;
|
|
24
|
-
hasPositionChanged: (position: number) => boolean;
|
|
25
|
-
}
|
|
26
13
|
export interface State {
|
|
27
14
|
packageInfo: IPackages;
|
|
28
15
|
initTime: number;
|
|
@@ -30,6 +17,6 @@ export interface State {
|
|
|
30
17
|
fetch: FetchModel;
|
|
31
18
|
clip: ClipModel;
|
|
32
19
|
render: RenderModel;
|
|
33
|
-
|
|
20
|
+
scroll: ScrollModel;
|
|
34
21
|
time: number;
|
|
35
22
|
}
|
|
@@ -2,6 +2,7 @@ import { ProcessClass, ProcessName, ProcessPayload, ProcessSubject } from './pro
|
|
|
2
2
|
import { IDatasource } from './datasource';
|
|
3
3
|
import { IPackage } from './adapter';
|
|
4
4
|
import { Item } from '../classes/item';
|
|
5
|
+
import { CustomRoutinesClass } from './routines';
|
|
5
6
|
import { Scroller } from '../scroller';
|
|
6
7
|
export declare type OnDataChanged<Data> = (items: Item<Data>[]) => void;
|
|
7
8
|
export interface WorkflowParams<ItemData> {
|
|
@@ -9,6 +10,7 @@ export interface WorkflowParams<ItemData> {
|
|
|
9
10
|
consumer: IPackage;
|
|
10
11
|
element: HTMLElement;
|
|
11
12
|
run: OnDataChanged<ItemData>;
|
|
13
|
+
Routines?: CustomRoutinesClass;
|
|
12
14
|
}
|
|
13
15
|
interface CallWorkflow {
|
|
14
16
|
(process: ProcessSubject): void;
|
|
@@ -23,6 +25,7 @@ export interface ScrollerParams<ItemData> {
|
|
|
23
25
|
consumer?: IPackage;
|
|
24
26
|
element?: HTMLElement;
|
|
25
27
|
workflow?: ScrollerWorkflow<ItemData>;
|
|
28
|
+
Routines?: CustomRoutinesClass;
|
|
26
29
|
scroller?: Scroller<ItemData>;
|
|
27
30
|
}
|
|
28
31
|
export declare type WorkflowGetter<ItemData> = () => ScrollerWorkflow<ItemData>;
|
|
@@ -4,6 +4,7 @@ export default class Adjust extends Adjust_base {
|
|
|
4
4
|
static run(scroller: Scroller): void;
|
|
5
5
|
static setPaddings(scroller: Scroller): void;
|
|
6
6
|
static calculatePosition(scroller: Scroller): number;
|
|
7
|
+
static setAdditionalForwardPadding(scroller: Scroller, position: number): void;
|
|
7
8
|
static setPosition(scroller: Scroller, position: number, done: () => void): void;
|
|
8
9
|
}
|
|
9
10
|
export {};
|
|
@@ -6,7 +6,6 @@ export default class End extends End_base {
|
|
|
6
6
|
error?: unknown;
|
|
7
7
|
}): void;
|
|
8
8
|
static calculateParams(scroller: Scroller, workflow: ScrollerWorkflow): void;
|
|
9
|
-
static
|
|
10
|
-
static getNext(scroller: Scroller): boolean;
|
|
9
|
+
static shouldContinueRun(scroller: Scroller, error: unknown): boolean;
|
|
11
10
|
}
|
|
12
11
|
export {};
|