@limble/limble-tree 0.12.2 → 0.13.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/README.md +149 -149
- package/{esm2015/lib/classes/Branch.js → esm2020/lib/classes/Branch.mjs} +1 -1
- package/{esm2015/lib/classes/DropZone.js → esm2020/lib/classes/DropZone.mjs} +1 -1
- package/{esm2015/lib/classes/DropZoneLocation.js → esm2020/lib/classes/DropZoneLocation.mjs} +1 -1
- package/{esm2015/lib/custom-event-bindings/dragleave-no-change-detect.directive.js → esm2020/lib/custom-event-bindings/dragleave-no-change-detect.directive.mjs} +0 -0
- package/{esm2015/lib/custom-event-bindings/dragover-no-change-detect.directive.js → esm2020/lib/custom-event-bindings/dragover-no-change-detect.directive.mjs} +1 -1
- package/esm2020/lib/drop-zone/drop-zone.component.mjs +75 -0
- package/esm2020/lib/limble-tree-branch/limble-tree-branch.component.mjs +110 -0
- package/esm2020/lib/limble-tree-node/limble-tree-node.component.mjs +467 -0
- package/{esm2015/lib/limble-tree-placeholder/limble-tree-placeholder.component.js → esm2020/lib/limble-tree-placeholder/limble-tree-placeholder.component.mjs} +3 -8
- package/esm2020/lib/limble-tree-root/drop-zone.service.mjs +376 -0
- package/esm2020/lib/limble-tree-root/limble-tree-root.component.mjs +172 -0
- package/{esm2015/lib/limble-tree-root/tree-construction-status.service.js → esm2020/lib/limble-tree-root/tree-construction-status.service.mjs} +1 -1
- package/esm2020/lib/limble-tree-root/tree.service.mjs +297 -0
- package/{esm2015/lib/limble-tree.module.js → esm2020/lib/limble-tree.module.mjs} +5 -5
- package/{esm2015/lib/singletons/component-creator.service.js → esm2020/lib/singletons/component-creator.service.mjs} +1 -1
- package/esm2020/lib/singletons/drag-state.service.mjs +63 -0
- package/esm2020/lib/singletons/global-events.service.mjs +136 -0
- package/{esm2015/lib/util.js → esm2020/lib/util.mjs} +1 -1
- package/{esm2015/limble-limble-tree.js → esm2020/limble-limble-tree.mjs} +0 -0
- package/{esm2015/public-api.js → esm2020/public-api.mjs} +1 -1
- package/fesm2015/limble-limble-tree.mjs +2256 -0
- package/fesm2015/limble-limble-tree.mjs.map +1 -0
- package/{fesm2015/limble-limble-tree.js → fesm2020/limble-limble-tree.mjs} +105 -147
- package/fesm2020/limble-limble-tree.mjs.map +1 -0
- package/{limble-limble-tree.d.ts → index.d.ts} +0 -0
- package/lib/custom-event-bindings/dragleave-no-change-detect.directive.d.ts +1 -1
- package/lib/custom-event-bindings/dragover-no-change-detect.directive.d.ts +1 -1
- package/lib/drop-zone/drop-zone.component.d.ts +1 -1
- package/lib/limble-tree-branch/limble-tree-branch.component.d.ts +1 -1
- package/lib/limble-tree-node/limble-tree-node.component.d.ts +1 -1
- package/lib/limble-tree-placeholder/limble-tree-placeholder.component.d.ts +1 -1
- package/lib/limble-tree-root/limble-tree-root.component.d.ts +1 -1
- package/package.json +24 -10
- package/bundles/limble-limble-tree.umd.js +0 -2905
- package/bundles/limble-limble-tree.umd.js.map +0 -1
- package/esm2015/lib/drop-zone/drop-zone.component.js +0 -81
- package/esm2015/lib/limble-tree-branch/limble-tree-branch.component.js +0 -116
- package/esm2015/lib/limble-tree-node/limble-tree-node.component.js +0 -484
- package/esm2015/lib/limble-tree-root/drop-zone.service.js +0 -372
- package/esm2015/lib/limble-tree-root/limble-tree-root.component.js +0 -178
- package/esm2015/lib/limble-tree-root/tree.service.js +0 -301
- package/esm2015/lib/singletons/drag-state.service.js +0 -64
- package/esm2015/lib/singletons/global-events.service.js +0 -137
- package/fesm2015/limble-limble-tree.js.map +0 -1
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import { Injectable } from "@angular/core";
|
|
2
|
-
import { BehaviorSubject } from "rxjs";
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
export class DragStateService {
|
|
5
|
-
constructor() {
|
|
6
|
-
this.state = "idle";
|
|
7
|
-
this.state$ = new BehaviorSubject(this.state);
|
|
8
|
-
}
|
|
9
|
-
/** Called to indicate that something is being dragged. Stores that something for later. */
|
|
10
|
-
dragging(branch, parentContainer) {
|
|
11
|
-
this._tempData = {
|
|
12
|
-
branch: branch,
|
|
13
|
-
parentContainer: parentContainer
|
|
14
|
-
};
|
|
15
|
-
this.state = "dragging";
|
|
16
|
-
this.state$.next(this.state);
|
|
17
|
-
}
|
|
18
|
-
/** Called to indicate that there is a valid active drop zone. Drop is now possible. */
|
|
19
|
-
droppable() {
|
|
20
|
-
if (this.state !== "dragging") {
|
|
21
|
-
throw new Error("Can only call `droppable` when state is `dragging`");
|
|
22
|
-
}
|
|
23
|
-
this.state = "droppable";
|
|
24
|
-
this.state$.next(this.state);
|
|
25
|
-
}
|
|
26
|
-
/** Called to indicate that there is no longer a valid active drop zone. Drop is no longer possible. */
|
|
27
|
-
notDroppable() {
|
|
28
|
-
if (this.state !== "droppable") {
|
|
29
|
-
throw new Error("Can only call `notDroppable` when state is `droppable`");
|
|
30
|
-
}
|
|
31
|
-
this.state = "dragging";
|
|
32
|
-
this.state$.next(this.state);
|
|
33
|
-
}
|
|
34
|
-
/** Called to indicate that a drop into a valid drop zone has occurred. Returns the item that was dropped. */
|
|
35
|
-
capture() {
|
|
36
|
-
var _a;
|
|
37
|
-
if (this.state !== "droppable") {
|
|
38
|
-
throw new Error("Can only move to `captured` state from `droppable` state");
|
|
39
|
-
}
|
|
40
|
-
this.state = "captured";
|
|
41
|
-
this.state$.next(this.state);
|
|
42
|
-
return (_a = this._tempData) === null || _a === void 0 ? void 0 : _a.branch;
|
|
43
|
-
}
|
|
44
|
-
/** Called to reset the service for future drags */
|
|
45
|
-
release() {
|
|
46
|
-
this._tempData = undefined;
|
|
47
|
-
this.state = "idle";
|
|
48
|
-
this.state$.next(this.state);
|
|
49
|
-
}
|
|
50
|
-
/** gets the current thing being dragged, if any. */
|
|
51
|
-
getData() {
|
|
52
|
-
return this._tempData;
|
|
53
|
-
}
|
|
54
|
-
/** gets the current state */
|
|
55
|
-
getState() {
|
|
56
|
-
return this.state;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
DragStateService.ɵfac = function DragStateService_Factory(t) { return new (t || DragStateService)(); };
|
|
60
|
-
DragStateService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: DragStateService, factory: DragStateService.ɵfac });
|
|
61
|
-
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DragStateService, [{
|
|
62
|
-
type: Injectable
|
|
63
|
-
}], function () { return []; }, null); })();
|
|
64
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1zdGF0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbGltYmxlLXRyZWUvc3JjL2xpYi9zaW5nbGV0b25zL2RyYWctc3RhdGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFvQixNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQVd2QyxNQUFNLE9BQU8sZ0JBQWdCO0lBVTFCO1FBQ0csSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7UUFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLGVBQWUsQ0FBWSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELDJGQUEyRjtJQUNwRixRQUFRLENBQUMsTUFBbUIsRUFBRSxlQUFpQztRQUNuRSxJQUFJLENBQUMsU0FBUyxHQUFHO1lBQ2QsTUFBTSxFQUFFLE1BQU07WUFDZCxlQUFlLEVBQUUsZUFBZTtTQUNsQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUM7UUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCx1RkFBdUY7SUFDaEYsU0FBUztRQUNiLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxVQUFVLEVBQUU7WUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1NBQ3hFO1FBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUM7UUFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCx1R0FBdUc7SUFDaEcsWUFBWTtRQUNoQixJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssV0FBVyxFQUFFO1lBQzdCLE1BQU0sSUFBSSxLQUFLLENBQ1osd0RBQXdELENBQzFELENBQUM7U0FDSjtRQUNELElBQUksQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsOEdBQThHO0lBQ3ZHLE9BQU87O1FBQ1gsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLFdBQVcsRUFBRTtZQUM3QixNQUFNLElBQUksS0FBSyxDQUNaLDBEQUEwRCxDQUM1RCxDQUFDO1NBQ0o7UUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsT0FBTyxNQUFBLElBQUksQ0FBQyxTQUFTLDBDQUFFLE1BQU0sQ0FBQztJQUNqQyxDQUFDO0lBRUQsbURBQW1EO0lBQzVDLE9BQU87UUFDWCxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztRQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELG9EQUFvRDtJQUM3QyxPQUFPO1FBQ1gsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3pCLENBQUM7SUFFRCw2QkFBNkI7SUFDdEIsUUFBUTtRQUNaLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNyQixDQUFDOztnRkF4RVMsZ0JBQWdCO3NFQUFoQixnQkFBZ0IsV0FBaEIsZ0JBQWdCO3VGQUFoQixnQkFBZ0I7Y0FENUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgdHlwZSB7IEJyYW5jaCB9IGZyb20gXCIuLi9jbGFzc2VzL0JyYW5jaFwiO1xyXG5cclxuZXhwb3J0IHR5cGUgRHJhZ1N0YXRlID0gXCJpZGxlXCIgfCBcImRyYWdnaW5nXCIgfCBcImRyb3BwYWJsZVwiIHwgXCJjYXB0dXJlZFwiO1xyXG5cclxuaW50ZXJmYWNlIFRlbXBEYXRhIHtcclxuICAgYnJhbmNoOiBCcmFuY2g8YW55PjtcclxuICAgcGFyZW50Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmO1xyXG59XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBEcmFnU3RhdGVTZXJ2aWNlIHtcclxuICAgLyoqIHB1c2hlcyB0aGUgbmV3IHN0YXRlIHdoZW5ldmVyIHRoZSBzdGF0ZSBjaGFuZ2VzICovXHJcbiAgIHB1YmxpYyBzdGF0ZSQ6IEJlaGF2aW9yU3ViamVjdDxEcmFnU3RhdGU+O1xyXG5cclxuICAgLyoqIGhvbGRzIGRhdGEgYWJvdXQgdGhlIHRoaW5nIGJlaW5nIGRyYWdnZWQgKi9cclxuICAgcHJpdmF0ZSBfdGVtcERhdGE6IFRlbXBEYXRhIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgLyoqIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBkcmFnIHByb2Nlc3MgKi9cclxuICAgcHJpdmF0ZSBzdGF0ZTogRHJhZ1N0YXRlO1xyXG5cclxuICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcImlkbGVcIjtcclxuICAgICAgdGhpcy5zdGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERyYWdTdGF0ZT4odGhpcy5zdGF0ZSk7XHJcbiAgIH1cclxuXHJcbiAgIC8qKiBDYWxsZWQgdG8gaW5kaWNhdGUgdGhhdCBzb21ldGhpbmcgaXMgYmVpbmcgZHJhZ2dlZC4gU3RvcmVzIHRoYXQgc29tZXRoaW5nIGZvciBsYXRlci4gKi9cclxuICAgcHVibGljIGRyYWdnaW5nKGJyYW5jaDogQnJhbmNoPGFueT4sIHBhcmVudENvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZikge1xyXG4gICAgICB0aGlzLl90ZW1wRGF0YSA9IHtcclxuICAgICAgICAgYnJhbmNoOiBicmFuY2gsXHJcbiAgICAgICAgIHBhcmVudENvbnRhaW5lcjogcGFyZW50Q29udGFpbmVyXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcImRyYWdnaW5nXCI7XHJcbiAgICAgIHRoaXMuc3RhdGUkLm5leHQodGhpcy5zdGF0ZSk7XHJcbiAgIH1cclxuXHJcbiAgIC8qKiBDYWxsZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGVyZSBpcyBhIHZhbGlkIGFjdGl2ZSBkcm9wIHpvbmUuIERyb3AgaXMgbm93IHBvc3NpYmxlLiAqL1xyXG4gICBwdWJsaWMgZHJvcHBhYmxlKCkge1xyXG4gICAgICBpZiAodGhpcy5zdGF0ZSAhPT0gXCJkcmFnZ2luZ1wiKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbiBvbmx5IGNhbGwgYGRyb3BwYWJsZWAgd2hlbiBzdGF0ZSBpcyBgZHJhZ2dpbmdgXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcImRyb3BwYWJsZVwiO1xyXG4gICAgICB0aGlzLnN0YXRlJC5uZXh0KHRoaXMuc3RhdGUpO1xyXG4gICB9XHJcblxyXG4gICAvKiogQ2FsbGVkIHRvIGluZGljYXRlIHRoYXQgdGhlcmUgaXMgbm8gbG9uZ2VyIGEgdmFsaWQgYWN0aXZlIGRyb3Agem9uZS4gRHJvcCBpcyBubyBsb25nZXIgcG9zc2libGUuICovXHJcbiAgIHB1YmxpYyBub3REcm9wcGFibGUoKSB7XHJcbiAgICAgIGlmICh0aGlzLnN0YXRlICE9PSBcImRyb3BwYWJsZVwiKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgXCJDYW4gb25seSBjYWxsIGBub3REcm9wcGFibGVgIHdoZW4gc3RhdGUgaXMgYGRyb3BwYWJsZWBcIlxyXG4gICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcImRyYWdnaW5nXCI7XHJcbiAgICAgIHRoaXMuc3RhdGUkLm5leHQodGhpcy5zdGF0ZSk7XHJcbiAgIH1cclxuXHJcbiAgIC8qKiBDYWxsZWQgdG8gaW5kaWNhdGUgdGhhdCBhIGRyb3AgaW50byBhIHZhbGlkIGRyb3Agem9uZSBoYXMgb2NjdXJyZWQuIFJldHVybnMgdGhlIGl0ZW0gdGhhdCB3YXMgZHJvcHBlZC4gICovXHJcbiAgIHB1YmxpYyBjYXB0dXJlKCkge1xyXG4gICAgICBpZiAodGhpcy5zdGF0ZSAhPT0gXCJkcm9wcGFibGVcIikge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgIFwiQ2FuIG9ubHkgbW92ZSB0byBgY2FwdHVyZWRgIHN0YXRlIGZyb20gYGRyb3BwYWJsZWAgc3RhdGVcIlxyXG4gICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcImNhcHR1cmVkXCI7XHJcbiAgICAgIHRoaXMuc3RhdGUkLm5leHQodGhpcy5zdGF0ZSk7XHJcbiAgICAgIHJldHVybiB0aGlzLl90ZW1wRGF0YT8uYnJhbmNoO1xyXG4gICB9XHJcblxyXG4gICAvKiogQ2FsbGVkIHRvIHJlc2V0IHRoZSBzZXJ2aWNlIGZvciBmdXR1cmUgZHJhZ3MgKi9cclxuICAgcHVibGljIHJlbGVhc2UoKSB7XHJcbiAgICAgIHRoaXMuX3RlbXBEYXRhID0gdW5kZWZpbmVkO1xyXG4gICAgICB0aGlzLnN0YXRlID0gXCJpZGxlXCI7XHJcbiAgICAgIHRoaXMuc3RhdGUkLm5leHQodGhpcy5zdGF0ZSk7XHJcbiAgIH1cclxuXHJcbiAgIC8qKiBnZXRzIHRoZSBjdXJyZW50IHRoaW5nIGJlaW5nIGRyYWdnZWQsIGlmIGFueS4gKi9cclxuICAgcHVibGljIGdldERhdGEoKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl90ZW1wRGF0YTtcclxuICAgfVxyXG5cclxuICAgLyoqIGdldHMgdGhlIGN1cnJlbnQgc3RhdGUgKi9cclxuICAgcHVibGljIGdldFN0YXRlKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zdGF0ZTtcclxuICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
import { Injectable } from "@angular/core";
|
|
2
|
-
import { fromEvent } from "rxjs";
|
|
3
|
-
import { filter, throttleTime } from "rxjs/operators";
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
function getScrollParent(element) {
|
|
6
|
-
var _a;
|
|
7
|
-
const regex = /(auto|scroll)/;
|
|
8
|
-
const parents = (_node, parentList) => {
|
|
9
|
-
if (_node === null || _node.parentNode === null) {
|
|
10
|
-
return parentList;
|
|
11
|
-
}
|
|
12
|
-
return parents(_node.parentElement, parentList.concat([_node]));
|
|
13
|
-
};
|
|
14
|
-
const style = (_node, prop) => getComputedStyle(_node, null).getPropertyValue(prop);
|
|
15
|
-
const overflow = (_node) => style(_node, "overflow") +
|
|
16
|
-
style(_node, "overflow-y") +
|
|
17
|
-
style(_node, "overflow-x");
|
|
18
|
-
const scroll = (_node) => regex.test(overflow(_node));
|
|
19
|
-
const parentList = parents(element.parentElement, []);
|
|
20
|
-
for (const parent of parentList) {
|
|
21
|
-
if (scroll(parent)) {
|
|
22
|
-
return parent;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
return ((_a = document.scrollingElement) !== null && _a !== void 0 ? _a : document.documentElement);
|
|
26
|
-
}
|
|
27
|
-
export class GlobalEventsService {
|
|
28
|
-
constructor(ngZone) {
|
|
29
|
-
this.ngZone = ngZone;
|
|
30
|
-
this.ngZone.runOutsideAngular(() => {
|
|
31
|
-
this.globalDrag$ = fromEvent(document, "drag");
|
|
32
|
-
});
|
|
33
|
-
this.scrolling = false;
|
|
34
|
-
}
|
|
35
|
-
addScrolling() {
|
|
36
|
-
this.ngZone.runOutsideAngular(() => {
|
|
37
|
-
if (this.globalDragSubscription !== undefined) {
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
if (this.globalDrag$ === undefined) {
|
|
41
|
-
throw new Error("Could not get observable");
|
|
42
|
-
}
|
|
43
|
-
let viewPortHeight;
|
|
44
|
-
let scrollAreaSize;
|
|
45
|
-
let edgeTop;
|
|
46
|
-
let edgeBottom;
|
|
47
|
-
let isInTopScrollArea;
|
|
48
|
-
let isInBottomScrollArea;
|
|
49
|
-
let timer;
|
|
50
|
-
let scrollableDiv;
|
|
51
|
-
let relativeY;
|
|
52
|
-
this.globalDragSubscription = this.globalDrag$
|
|
53
|
-
.pipe(throttleTime(25), filter((event) => {
|
|
54
|
-
if (!event.target) {
|
|
55
|
-
return false;
|
|
56
|
-
}
|
|
57
|
-
scrollableDiv = getScrollParent(event.target);
|
|
58
|
-
viewPortHeight = scrollableDiv.clientHeight;
|
|
59
|
-
const viewPortWidth = scrollableDiv.clientWidth;
|
|
60
|
-
let relativeX;
|
|
61
|
-
if (window
|
|
62
|
-
.getComputedStyle(scrollableDiv)
|
|
63
|
-
.getPropertyValue("position")
|
|
64
|
-
.toLowerCase() === "fixed") {
|
|
65
|
-
relativeX = event.clientX;
|
|
66
|
-
relativeY = event.clientY;
|
|
67
|
-
}
|
|
68
|
-
else {
|
|
69
|
-
const boundingRect = scrollableDiv.getBoundingClientRect();
|
|
70
|
-
const scrollableDivAncestor = getScrollParent(scrollableDiv);
|
|
71
|
-
relativeX =
|
|
72
|
-
event.clientX -
|
|
73
|
-
(boundingRect.left + scrollableDivAncestor.scrollLeft);
|
|
74
|
-
relativeY =
|
|
75
|
-
event.clientY -
|
|
76
|
-
(boundingRect.top + scrollableDivAncestor.scrollTop);
|
|
77
|
-
}
|
|
78
|
-
if (relativeX < 0 ||
|
|
79
|
-
relativeX > viewPortWidth ||
|
|
80
|
-
relativeY < 0 ||
|
|
81
|
-
relativeY > viewPortHeight) {
|
|
82
|
-
//Outside of scrollable div
|
|
83
|
-
return false;
|
|
84
|
-
}
|
|
85
|
-
scrollAreaSize = Math.max(viewPortHeight * 0.1, 100);
|
|
86
|
-
edgeTop = scrollAreaSize;
|
|
87
|
-
edgeBottom = viewPortHeight - scrollAreaSize;
|
|
88
|
-
isInTopScrollArea = relativeY < edgeTop;
|
|
89
|
-
isInBottomScrollArea = relativeY > edgeBottom;
|
|
90
|
-
return isInTopScrollArea || isInBottomScrollArea;
|
|
91
|
-
}))
|
|
92
|
-
.subscribe(() => {
|
|
93
|
-
if (scrollableDiv === null) {
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
const height = scrollableDiv.scrollHeight;
|
|
97
|
-
const maxScrollY = height - viewPortHeight;
|
|
98
|
-
const currentScrollY = scrollableDiv.scrollTop;
|
|
99
|
-
const canScrollUp = currentScrollY > 0;
|
|
100
|
-
const canScrollDown = currentScrollY < maxScrollY;
|
|
101
|
-
let nextScrollY;
|
|
102
|
-
const maxStep = 75;
|
|
103
|
-
if (isInTopScrollArea && canScrollUp) {
|
|
104
|
-
const intensity = (edgeTop - relativeY) / scrollAreaSize;
|
|
105
|
-
nextScrollY = currentScrollY - maxStep * intensity;
|
|
106
|
-
}
|
|
107
|
-
else if (isInBottomScrollArea && canScrollDown) {
|
|
108
|
-
const intensity = (relativeY - edgeBottom) / scrollAreaSize;
|
|
109
|
-
nextScrollY = currentScrollY + maxStep * intensity;
|
|
110
|
-
}
|
|
111
|
-
else {
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
114
|
-
nextScrollY = Math.max(0, Math.min(maxScrollY, nextScrollY));
|
|
115
|
-
if (nextScrollY !== currentScrollY) {
|
|
116
|
-
scrollableDiv.scrollTo({ top: nextScrollY });
|
|
117
|
-
this.scrolling = true;
|
|
118
|
-
clearTimeout(timer);
|
|
119
|
-
timer = setTimeout(() => {
|
|
120
|
-
this.scrolling = false;
|
|
121
|
-
}, 100);
|
|
122
|
-
}
|
|
123
|
-
});
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
removeScrolling() {
|
|
127
|
-
if (this.globalDragSubscription !== undefined) {
|
|
128
|
-
this.globalDragSubscription.unsubscribe();
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
GlobalEventsService.ɵfac = function GlobalEventsService_Factory(t) { return new (t || GlobalEventsService)(i0.ɵɵinject(i0.NgZone)); };
|
|
133
|
-
GlobalEventsService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: GlobalEventsService, factory: GlobalEventsService.ɵfac });
|
|
134
|
-
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(GlobalEventsService, [{
|
|
135
|
-
type: Injectable
|
|
136
|
-
}], function () { return [{ type: i0.NgZone }]; }, null); })();
|
|
137
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLWV2ZW50cy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbGltYmxlLXRyZWUvc3JjL2xpYi9zaW5nbGV0b25zL2dsb2JhbC1ldmVudHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxTQUFTLEVBQTRCLE1BQU0sTUFBTSxDQUFDO0FBQzNELE9BQU8sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBRXRELFNBQVMsZUFBZSxDQUFDLE9BQW9COztJQUMxQyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUM7SUFDOUIsTUFBTSxPQUFPLEdBQUcsQ0FDYixLQUF5QixFQUN6QixVQUE4QixFQUNYLEVBQUU7UUFDckIsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFO1lBQzlDLE9BQU8sVUFBVSxDQUFDO1NBQ3BCO1FBQ0QsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25FLENBQUMsQ0FBQztJQUVGLE1BQU0sS0FBSyxHQUFHLENBQUMsS0FBa0IsRUFBRSxJQUFZLEVBQUUsRUFBRSxDQUNoRCxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUFrQixFQUFFLEVBQUUsQ0FDckMsS0FBSyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUM7UUFDeEIsS0FBSyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUM7UUFDMUIsS0FBSyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztJ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cUJBQU0sSUFBSSxvQkFBb0IsSUFBSSxhQUFhLEVBQUU7b0JBQy9DLE1BQU0sU0FBUyxHQUFHLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxHQUFHLGNBQWMsQ0FBQztvQkFDNUQsV0FBVyxHQUFHLGNBQWMsR0FBRyxPQUFPLEdBQUcsU0FBUyxDQUFDO2lCQUNyRDtxQkFBTTtvQkFDSixPQUFPO2lCQUNUO2dCQUNELFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO2dCQUM3RCxJQUFJLFdBQVcsS0FBSyxjQUFjLEVBQUU7b0JBQ2pDLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztvQkFDN0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7b0JBQ3RCLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDcEIsS0FBSyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7d0JBQ3JCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO29CQUMxQixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7aUJBQ1Y7WUFDSixDQUFDLENBQUMsQ0FBQztRQUNULENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVNLGVBQWU7UUFDbkIsSUFBSSxJQUFJLENBQUMsc0JBQXNCLEtBQUssU0FBUyxFQUFFO1lBQzVDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUM1QztJQUNKLENBQUM7O3NGQWxIUyxtQkFBbUI7eUVBQW5CLG1CQUFtQixXQUFuQixtQkFBbUI7dUZBQW5CLG1CQUFtQjtjQUQvQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgTmdab25lIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgZnJvbUV2ZW50LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBmaWx0ZXIsIHRocm90dGxlVGltZSB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5cclxuZnVuY3Rpb24gZ2V0U2Nyb2xsUGFyZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnQge1xyXG4gICBjb25zdCByZWdleCA9IC8oYXV0b3xzY3JvbGwpLztcclxuICAgY29uc3QgcGFyZW50cyA9IChcclxuICAgICAgX25vZGU6IEhUTUxFbGVtZW50IHwgbnVsbCxcclxuICAgICAgcGFyZW50TGlzdDogQXJyYXk8SFRNTEVsZW1lbnQ+XHJcbiAgICk6IEFycmF5PEhUTUxFbGVtZW50PiA9PiB7XHJcbiAgICAgIGlmIChfbm9kZSA9PT0gbnVsbCB8fCBfbm9kZS5wYXJlbnROb2RlID09PSBudWxsKSB7XHJcbiAgICAgICAgIHJldHVybiBwYXJlbnRMaXN0O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBwYXJlbnRzKF9ub2RlLnBhcmVudEVsZW1lbnQsIHBhcmVudExpc3QuY29uY2F0KFtfbm9kZV0pKTtcclxuICAgfTtcclxuXHJcbiAgIGNvbnN0IHN0eWxlID0gKF9ub2RlOiBIVE1MRWxlbWVudCwgcHJvcDogc3RyaW5nKSA9PlxyXG4gICAgICBnZXRDb21wdXRlZFN0eWxlKF9ub2RlLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHByb3ApO1xyXG4gICBjb25zdCBvdmVyZmxvdyA9IChfbm9kZTogSFRNTEVsZW1lbnQpID0+XHJcbiAgICAgIHN0eWxlKF9ub2RlLCBcIm92ZXJmbG93XCIpICtcclxuICAgICAgc3R5bGUoX25vZGUsIFwib3ZlcmZsb3cteVwiKSArXHJcbiAgICAgIHN0eWxlKF9ub2RlLCBcIm92ZXJmbG93LXhcIik7XHJcbiAgIGNvbnN0IHNjcm9sbCA9IChfbm9kZTogSFRNTEVsZW1lbnQpID0+IHJlZ2V4LnRlc3Qob3ZlcmZsb3coX25vZGUpKTtcclxuXHJcbiAgIGNvbnN0IHBhcmVudExpc3QgPSBwYXJlbnRzKGVsZW1lbnQucGFyZW50RWxlbWVudCwgW10pO1xyXG4gICBmb3IgKGNvbnN0IHBhcmVudCBvZiBwYXJlbnRMaXN0KSB7XHJcbiAgICAgIGlmIChzY3JvbGwocGFyZW50KSkge1xyXG4gICAgICAgICByZXR1cm4gcGFyZW50O1xyXG4gICAgICB9XHJcbiAgIH1cclxuICAgcmV0dXJuIChcclxuICAgICAgKGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQgYXMgSFRNTEVsZW1lbnQpID8/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudFxyXG4gICApO1xyXG59XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBHbG9iYWxFdmVudHNTZXJ2aWNlIHtcclxuICAgcHJpdmF0ZSBnbG9iYWxEcmFnJDogT2JzZXJ2YWJsZTxEcmFnRXZlbnQ+IHwgdW5kZWZpbmVkO1xyXG4gICBwcml2YXRlIGdsb2JhbERyYWdTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcclxuICAgcHVibGljIHNjcm9sbGluZzogYm9vbGVhbjtcclxuXHJcbiAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgbmdab25lOiBOZ1pvbmUpIHtcclxuICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xyXG4gICAgICAgICB0aGlzLmdsb2JhbERyYWckID0gZnJvbUV2ZW50PERyYWdFdmVudD4oZG9jdW1lbnQsIFwiZHJhZ1wiKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuc2Nyb2xsaW5nID0gZmFsc2U7XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyBhZGRTY3JvbGxpbmcoKSB7XHJcbiAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcclxuICAgICAgICAgaWYgKHRoaXMuZ2xvYmFsRHJhZ1N1YnNjcmlwdGlvbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgfVxyXG4gICAgICAgICBpZiAodGhpcy5nbG9iYWxEcmFnJCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBnZXQgb2JzZXJ2YWJsZVwiKTtcclxuICAgICAgICAgfVxyXG4gICAgICAgICBsZXQgdmlld1BvcnRIZWlnaHQ6IG51bWJlcjtcclxuICAgICAgICAgbGV0IHNjcm9sbEFyZWFTaXplOiBudW1iZXI7XHJcbiAgICAgICAgIGxldCBlZGdlVG9wOiBudW1iZXI7XHJcbiAgICAgICAgIGxldCBlZGdlQm90dG9tOiBudW1iZXI7XHJcbiAgICAgICAgIGxldCBpc0luVG9wU2Nyb2xsQXJlYTogYm9vbGVhbjtcclxuICAgICAgICAgbGV0IGlzSW5Cb3R0b21TY3JvbGxBcmVhOiBib29sZWFuO1xyXG4gICAgICAgICBsZXQgdGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+O1xyXG4gICAgICAgICBsZXQgc2Nyb2xsYWJsZURpdjogSFRNTEVsZW1lbnQgfCBudWxsO1xyXG4gICAgICAgICBsZXQgcmVsYXRpdmVZOiBudW1iZXI7XHJcbiAgICAgICAgIHRoaXMuZ2xvYmFsRHJhZ1N1YnNjcmlwdGlvbiA9IHRoaXMuZ2xvYmFsRHJhZyRcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgIHRocm90dGxlVGltZSgyNSksXHJcbiAgICAgICAgICAgICAgIGZpbHRlcigoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgaWYgKCFldmVudC50YXJnZXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHNjcm9sbGFibGVEaXYgPSBnZXRTY3JvbGxQYXJlbnQoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgdmlld1BvcnRIZWlnaHQgPSBzY3JvbGxhYmxlRGl2LmNsaWVudEhlaWdodDtcclxuICAgICAgICAgICAgICAgICAgY29uc3Qgdmlld1BvcnRXaWR0aCA9IHNjcm9sbGFibGVEaXYuY2xpZW50V2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgIGxldCByZWxhdGl2ZVg6IG51bWJlcjtcclxuICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICB3aW5kb3dcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmdldENvbXB1dGVkU3R5bGUoc2Nyb2xsYWJsZURpdilcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmdldFByb3BlcnR5VmFsdWUoXCJwb3NpdGlvblwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKSA9PT0gXCJmaXhlZFwiXHJcbiAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVggPSBldmVudC5jbGllbnRYO1xyXG4gICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVkgPSBldmVudC5jbGllbnRZO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICBjb25zdCBib3VuZGluZ1JlY3QgPSBzY3JvbGxhYmxlRGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICBjb25zdCBzY3JvbGxhYmxlRGl2QW5jZXN0b3IgPSBnZXRTY3JvbGxQYXJlbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbGFibGVEaXZcclxuICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVYID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuY2xpZW50WCAtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChib3VuZGluZ1JlY3QubGVmdCArIHNjcm9sbGFibGVEaXZBbmNlc3Rvci5zY3JvbGxMZWZ0KTtcclxuICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVZID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuY2xpZW50WSAtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChib3VuZGluZ1JlY3QudG9wICsgc2Nyb2xsYWJsZURpdkFuY2VzdG9yLnNjcm9sbFRvcCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVggPCAwIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlWCA+IHZpZXdQb3J0V2lkdGggfHxcclxuICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVZIDwgMCB8fFxyXG4gICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVkgPiB2aWV3UG9ydEhlaWdodFxyXG4gICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgLy9PdXRzaWRlIG9mIHNjcm9sbGFibGUgZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBzY3JvbGxBcmVhU2l6ZSA9IE1hdGgubWF4KHZpZXdQb3J0SGVpZ2h0ICogMC4xLCAxMDApO1xyXG4gICAgICAgICAgICAgICAgICBlZGdlVG9wID0gc2Nyb2xsQXJlYVNpemU7XHJcbiAgICAgICAgICAgICAgICAgIGVkZ2VCb3R0b20gPSB2aWV3UG9ydEhlaWdodCAtIHNjcm9sbEFyZWFTaXplO1xyXG4gICAgICAgICAgICAgICAgICBpc0luVG9wU2Nyb2xsQXJlYSA9IHJlbGF0aXZlWSA8IGVkZ2VUb3A7XHJcbiAgICAgICAgICAgICAgICAgIGlzSW5Cb3R0b21TY3JvbGxBcmVhID0gcmVsYXRpdmVZID4gZWRnZUJvdHRvbTtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzSW5Ub3BTY3JvbGxBcmVhIHx8IGlzSW5Cb3R0b21TY3JvbGxBcmVhO1xyXG4gICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICBpZiAoc2Nyb2xsYWJsZURpdiA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgY29uc3QgaGVpZ2h0ID0gc2Nyb2xsYWJsZURpdi5zY3JvbGxIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgIGNvbnN0IG1heFNjcm9sbFkgPSBoZWlnaHQgLSB2aWV3UG9ydEhlaWdodDtcclxuICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFNjcm9sbFkgPSBzY3JvbGxhYmxlRGl2LnNjcm9sbFRvcDtcclxuICAgICAgICAgICAgICAgY29uc3QgY2FuU2Nyb2xsVXAgPSBjdXJyZW50U2Nyb2xsWSA+IDA7XHJcbiAgICAgICAgICAgICAgIGNvbnN0IGNhblNjcm9sbERvd24gPSBjdXJyZW50U2Nyb2xsWSA8IG1heFNjcm9sbFk7XHJcbiAgICAgICAgICAgICAgIGxldCBuZXh0U2Nyb2xsWTogbnVtYmVyO1xyXG4gICAgICAgICAgICAgICBjb25zdCBtYXhTdGVwID0gNzU7XHJcbiAgICAgICAgICAgICAgIGlmIChpc0luVG9wU2Nyb2xsQXJlYSAmJiBjYW5TY3JvbGxVcCkge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBpbnRlbnNpdHkgPSAoZWRnZVRvcCAtIHJlbGF0aXZlWSkgLyBzY3JvbGxBcmVhU2l6ZTtcclxuICAgICAgICAgICAgICAgICAgbmV4dFNjcm9sbFkgPSBjdXJyZW50U2Nyb2xsWSAtIG1heFN0ZXAgKiBpbnRlbnNpdHk7XHJcbiAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNJbkJvdHRvbVNjcm9sbEFyZWEgJiYgY2FuU2Nyb2xsRG93bikge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBpbnRlbnNpdHkgPSAocmVsYXRpdmVZIC0gZWRnZUJvdHRvbSkgLyBzY3JvbGxBcmVhU2l6ZTtcclxuICAgICAgICAgICAgICAgICAgbmV4dFNjcm9sbFkgPSBjdXJyZW50U2Nyb2xsWSArIG1heFN0ZXAgKiBpbnRlbnNpdHk7XHJcbiAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICBuZXh0U2Nyb2xsWSA9IE1hdGgubWF4KDAsIE1hdGgubWluKG1heFNjcm9sbFksIG5leHRTY3JvbGxZKSk7XHJcbiAgICAgICAgICAgICAgIGlmIChuZXh0U2Nyb2xsWSAhPT0gY3VycmVudFNjcm9sbFkpIHtcclxuICAgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZURpdi5zY3JvbGxUbyh7IHRvcDogbmV4dFNjcm9sbFkgfSk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcclxuICAgICAgICAgICAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyByZW1vdmVTY3JvbGxpbmcoKSB7XHJcbiAgICAgIGlmICh0aGlzLmdsb2JhbERyYWdTdWJzY3JpcHRpb24gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICB0aGlzLmdsb2JhbERyYWdTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgICAgfVxyXG4gICB9XHJcbn1cclxuIl19
|