@worktile/gantt 12.2.1 → 13.0.0-next.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/components/bar/bar-drag.d.ts +4 -2
- package/components/bar/bar.component.d.ts +4 -4
- package/components/bar/bar.component.scss +201 -0
- package/components/calendar/calendar.component.d.ts +3 -5
- package/components/calendar/calendar.component.scss +79 -0
- package/components/drag-backdrop/drag-backdrop.component.d.ts +1 -5
- package/components/drag-backdrop/drag-backdrop.component.scss +50 -0
- package/components/icon/icon.component.d.ts +2 -4
- package/components/icon/icon.component.scss +13 -0
- package/components/links/links.component.scss +29 -0
- package/components/main/gantt-main.component.d.ts +2 -3
- package/components/range/range.component.d.ts +2 -5
- package/components/range/range.component.scss +35 -0
- package/components/table/gantt-table.component.d.ts +2 -3
- package/components/table/gantt-table.component.scss +153 -0
- package/{esm2015/class/date-point.js → esm2020/class/date-point.mjs} +0 -0
- package/{esm2015/class/event.js → esm2020/class/event.mjs} +0 -0
- package/{esm2015/class/group.js → esm2020/class/group.mjs} +0 -0
- package/{esm2015/class/index.js → esm2020/class/index.mjs} +0 -0
- package/{esm2015/class/item.js → esm2020/class/item.mjs} +0 -0
- package/{esm2015/class/link.js → esm2020/class/link.mjs} +0 -0
- package/{esm2015/class/view-type.js → esm2020/class/view-type.mjs} +0 -0
- package/esm2020/components/bar/bar-drag.mjs +308 -0
- package/esm2020/components/bar/bar.component.mjs +101 -0
- package/esm2020/components/calendar/calendar.component.mjs +88 -0
- package/esm2020/components/drag-backdrop/drag-backdrop.component.mjs +13 -0
- package/esm2020/components/icon/icon.component.mjs +36 -0
- package/{esm2015/components/icon/icons.js → esm2020/components/icon/icons.mjs} +0 -0
- package/esm2020/components/links/lines/curve.mjs +95 -0
- package/{esm2015/components/links/lines/factory.js → esm2020/components/links/lines/factory.mjs} +0 -0
- package/{esm2015/components/links/lines/line.js → esm2020/components/links/lines/line.mjs} +0 -0
- package/{esm2015/components/links/lines/straight.js → esm2020/components/links/lines/straight.mjs} +0 -0
- package/esm2020/components/links/links.component.mjs +178 -0
- package/esm2020/components/main/gantt-main.component.mjs +49 -0
- package/esm2020/components/range/range.component.mjs +25 -0
- package/esm2020/components/table/gantt-table.component.mjs +163 -0
- package/{esm2015/gantt-abstract.js → esm2020/gantt-abstract.mjs} +0 -0
- package/esm2020/gantt-dom.service.mjs +117 -0
- package/esm2020/gantt-drag-container.mjs +78 -0
- package/esm2020/gantt-item-upper.mjs +58 -0
- package/esm2020/gantt-print.service.mjs +94 -0
- package/esm2020/gantt-upper.mjs +339 -0
- package/esm2020/gantt.component.mjs +150 -0
- package/{esm2015/gantt.config.js → esm2020/gantt.config.mjs} +0 -0
- package/{esm2015/gantt.module.js → esm2020/gantt.module.mjs} +4 -4
- package/{esm2015/gantt.pipe.js → esm2020/gantt.pipe.mjs} +9 -9
- package/{esm2015/gantt.styles.js → esm2020/gantt.styles.mjs} +0 -0
- package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
- package/esm2020/root.component.mjs +130 -0
- package/esm2020/table/gantt-column.component.mjs +36 -0
- package/esm2020/table/gantt-table.component.mjs +25 -0
- package/{esm2015/utils/date.js → esm2020/utils/date.mjs} +0 -0
- package/{esm2015/utils/helpers.js → esm2020/utils/helpers.mjs} +0 -0
- package/esm2020/utils/passive-listeners.mjs +30 -0
- package/esm2020/utils/set-style-with-vendor-prefix.mjs +15 -0
- package/{esm2015/views/day.js → esm2020/views/day.mjs} +1 -1
- package/{esm2015/views/factory.js → esm2020/views/factory.mjs} +0 -0
- package/{esm2015/views/month.js → esm2020/views/month.mjs} +0 -0
- package/{esm2015/views/quarter.js → esm2020/views/quarter.mjs} +0 -0
- package/{esm2015/views/view.js → esm2020/views/view.mjs} +5 -5
- package/{esm2015/views/week.js → esm2020/views/week.mjs} +0 -0
- package/{esm2015/views/year.js → esm2020/views/year.mjs} +0 -0
- package/{esm2015/worktile-gantt.js → esm2020/worktile-gantt.mjs} +0 -0
- package/fesm2015/worktile-gantt.mjs +3080 -0
- package/fesm2015/worktile-gantt.mjs.map +1 -0
- package/{fesm2015/worktile-gantt.js → fesm2020/worktile-gantt.mjs} +344 -288
- package/fesm2020/worktile-gantt.mjs.map +1 -0
- package/gantt-dom.service.d.ts +11 -4
- package/gantt-drag-container.d.ts +1 -1
- package/gantt-item-upper.d.ts +6 -6
- package/gantt-print.service.d.ts +1 -1
- package/gantt-upper.d.ts +6 -6
- package/gantt.component.d.ts +2 -4
- package/gantt.component.scss +83 -0
- package/package.json +23 -9
- package/root.component.d.ts +5 -3
- package/styles/index.scss +10 -0
- package/styles/variables.scss +46 -0
- package/table/gantt-column.component.d.ts +2 -3
- package/table/gantt-table.component.d.ts +2 -4
- package/utils/passive-listeners.d.ts +13 -0
- package/utils/set-style-with-vendor-prefix.d.ts +12 -0
- package/README.md +0 -24
- package/bundles/worktile-gantt.umd.js +0 -3622
- package/bundles/worktile-gantt.umd.js.map +0 -1
- package/esm2015/components/bar/bar-drag.js +0 -295
- package/esm2015/components/bar/bar.component.js +0 -98
- package/esm2015/components/calendar/calendar.component.js +0 -86
- package/esm2015/components/drag-backdrop/drag-backdrop.component.js +0 -21
- package/esm2015/components/icon/icon.component.js +0 -38
- package/esm2015/components/links/lines/curve.js +0 -96
- package/esm2015/components/links/links.component.js +0 -173
- package/esm2015/components/main/gantt-main.component.js +0 -53
- package/esm2015/components/range/range.component.js +0 -37
- package/esm2015/components/table/gantt-table.component.js +0 -163
- package/esm2015/gantt-dom.service.js +0 -103
- package/esm2015/gantt-drag-container.js +0 -77
- package/esm2015/gantt-item-upper.js +0 -58
- package/esm2015/gantt-print.service.js +0 -94
- package/esm2015/gantt-upper.js +0 -331
- package/esm2015/gantt.component.js +0 -155
- package/esm2015/root.component.js +0 -123
- package/esm2015/table/gantt-column.component.js +0 -37
- package/esm2015/table/gantt-table.component.js +0 -26
- package/fesm2015/worktile-gantt.js.map +0 -1
- package/main.bundle.scss +0 -687
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { isPlatformServer } from '@angular/common';
|
|
2
|
+
import { Injectable, Inject, PLATFORM_ID } from '@angular/core';
|
|
3
|
+
import { fromEvent, Subject, merge, EMPTY, Observable } from 'rxjs';
|
|
4
|
+
import { pairwise, map, auditTime, takeUntil } from 'rxjs/operators';
|
|
5
|
+
import { isNumber } from './utils/helpers';
|
|
6
|
+
import { passiveListenerOptions } from './utils/passive-listeners';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
const scrollThreshold = 50;
|
|
9
|
+
export var ScrollDirection;
|
|
10
|
+
(function (ScrollDirection) {
|
|
11
|
+
ScrollDirection[ScrollDirection["NONE"] = 0] = "NONE";
|
|
12
|
+
ScrollDirection[ScrollDirection["LEFT"] = 1] = "LEFT";
|
|
13
|
+
ScrollDirection[ScrollDirection["RIGHT"] = 2] = "RIGHT";
|
|
14
|
+
})(ScrollDirection || (ScrollDirection = {}));
|
|
15
|
+
export class GanttDomService {
|
|
16
|
+
constructor(ngZone, platformId) {
|
|
17
|
+
this.ngZone = ngZone;
|
|
18
|
+
this.platformId = platformId;
|
|
19
|
+
this.unsubscribe$ = new Subject();
|
|
20
|
+
}
|
|
21
|
+
monitorScrollChange() {
|
|
22
|
+
this.ngZone.runOutsideAngular(() => merge(fromEvent(this.mainContainer, 'scroll', passiveListenerOptions), fromEvent(this.sideContainer, 'scroll', passiveListenerOptions))
|
|
23
|
+
.pipe(takeUntil(this.unsubscribe$))
|
|
24
|
+
.subscribe((event) => {
|
|
25
|
+
this.syncScroll(event);
|
|
26
|
+
}));
|
|
27
|
+
// fromEvent(this.mainContainer, 'scroll')
|
|
28
|
+
// .pipe(startWith(), takeUntil(this.unsubscribe$))
|
|
29
|
+
// .subscribe((event) => {
|
|
30
|
+
// // if (this.mainContainer.scrollLeft > 0) {
|
|
31
|
+
// // this.side.classList.add('gantt-side-has-shadow');
|
|
32
|
+
// // } else {
|
|
33
|
+
// // this.side.classList.remove('gantt-side-has-shadow');
|
|
34
|
+
// // }
|
|
35
|
+
// });
|
|
36
|
+
}
|
|
37
|
+
syncScroll(event) {
|
|
38
|
+
const target = event.currentTarget;
|
|
39
|
+
this.calendarOverlay.scrollLeft = this.mainContainer.scrollLeft;
|
|
40
|
+
this.sideContainer.scrollTop = target.scrollTop;
|
|
41
|
+
this.mainContainer.scrollTop = target.scrollTop;
|
|
42
|
+
}
|
|
43
|
+
disableBrowserWheelEvent() {
|
|
44
|
+
const container = this.mainContainer;
|
|
45
|
+
this.ngZone.runOutsideAngular(() => fromEvent(container, 'wheel')
|
|
46
|
+
.pipe(takeUntil(this.unsubscribe$))
|
|
47
|
+
.subscribe((event) => {
|
|
48
|
+
const delta = event.deltaX;
|
|
49
|
+
if (!delta) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
if ((container.scrollLeft + container.offsetWidth === container.scrollWidth && delta > 0) ||
|
|
53
|
+
(container.scrollLeft === 0 && delta < 0)) {
|
|
54
|
+
event.preventDefault();
|
|
55
|
+
}
|
|
56
|
+
}));
|
|
57
|
+
}
|
|
58
|
+
initialize(root) {
|
|
59
|
+
this.root = root.nativeElement;
|
|
60
|
+
this.side = this.root.getElementsByClassName('gantt-side')[0];
|
|
61
|
+
this.container = this.root.getElementsByClassName('gantt-container')[0];
|
|
62
|
+
this.sideContainer = this.root.getElementsByClassName('gantt-side-container')[0];
|
|
63
|
+
this.mainContainer = this.root.getElementsByClassName('gantt-main-container')[0];
|
|
64
|
+
this.calendarOverlay = this.root.getElementsByClassName('gantt-calendar-overlay')[0];
|
|
65
|
+
this.monitorScrollChange();
|
|
66
|
+
this.disableBrowserWheelEvent();
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* @returns An observable that will emit outside the Angular zone. Note, consumers should re-enter the Angular zone
|
|
70
|
+
* to run the change detection if needed.
|
|
71
|
+
*/
|
|
72
|
+
getViewerScroll(options) {
|
|
73
|
+
return new Observable((subscriber) => this.ngZone.runOutsideAngular(() => fromEvent(this.mainContainer, 'scroll', options)
|
|
74
|
+
.pipe(map(() => this.mainContainer.scrollLeft), pairwise(), map(([previous, current]) => {
|
|
75
|
+
const event = {
|
|
76
|
+
target: this.mainContainer,
|
|
77
|
+
direction: ScrollDirection.NONE
|
|
78
|
+
};
|
|
79
|
+
if (current - previous < 0) {
|
|
80
|
+
if (this.mainContainer.scrollLeft < scrollThreshold && this.mainContainer.scrollLeft > 0) {
|
|
81
|
+
event.direction = ScrollDirection.LEFT;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (current - previous > 0) {
|
|
85
|
+
if (this.mainContainer.scrollWidth - this.mainContainer.clientWidth - this.mainContainer.scrollLeft <
|
|
86
|
+
scrollThreshold) {
|
|
87
|
+
event.direction = ScrollDirection.RIGHT;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return event;
|
|
91
|
+
}))
|
|
92
|
+
.subscribe(subscriber)));
|
|
93
|
+
}
|
|
94
|
+
getResize() {
|
|
95
|
+
return isPlatformServer(this.platformId) ? EMPTY : fromEvent(window, 'resize').pipe(auditTime(150));
|
|
96
|
+
}
|
|
97
|
+
scrollMainContainer(left) {
|
|
98
|
+
if (isNumber(left)) {
|
|
99
|
+
const scrollLeft = left - this.mainContainer.clientWidth / 2;
|
|
100
|
+
this.mainContainer.scrollLeft = scrollLeft > scrollThreshold ? scrollLeft : 0;
|
|
101
|
+
this.calendarOverlay.scrollLeft = this.mainContainer.scrollLeft;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
ngOnDestroy() {
|
|
105
|
+
this.unsubscribe$.next();
|
|
106
|
+
this.unsubscribe$.complete();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
GanttDomService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: GanttDomService, deps: [{ token: i0.NgZone }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
110
|
+
GanttDomService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: GanttDomService });
|
|
111
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: GanttDomService, decorators: [{
|
|
112
|
+
type: Injectable
|
|
113
|
+
}], ctorParameters: function () { return [{ type: i0.NgZone }, { type: undefined, decorators: [{
|
|
114
|
+
type: Inject,
|
|
115
|
+
args: [PLATFORM_ID]
|
|
116
|
+
}] }]; } });
|
|
117
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FudHQtZG9tLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wYWNrYWdlcy9nYW50dC9zcmMvZ2FudHQtZG9tLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBeUIsTUFBTSxFQUFFLFdBQVcsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMvRixPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDOztBQUVuRSxNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUM7QUFFM0IsTUFBTSxDQUFOLElBQVksZUFJWDtBQUpELFdBQVksZUFBZTtJQUN2QixxREFBSSxDQUFBO0lBQ0oscURBQUksQ0FBQTtJQUNKLHVEQUFLLENBQUE7QUFDVCxDQUFDLEVBSlcsZUFBZSxLQUFmLGVBQWUsUUFJMUI7QUFRRCxNQUFNLE9BQU8sZUFBZTtJQWlCeEIsWUFBb0IsTUFBYyxFQUErQixVQUFrQjtRQUEvRCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQStCLGVBQVUsR0FBVixVQUFVLENBQVE7UUFGM0UsaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBRTJDLENBQUM7SUFFL0UsbUJBQW1CO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLENBQy9CLEtBQUssQ0FDRCxTQUFTLENBQUMsSUFBSSxDQUFDLGFB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Q0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDeEcsQ0FBQztJQUVELG1CQUFtQixDQUFDLElBQVk7UUFDNUIsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDaEIsTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztZQUM3RCxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsR0FBRyxVQUFVLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5RSxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQztTQUNuRTtJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2pDLENBQUM7OzRHQXJJUSxlQUFlLHdDQWlCb0IsV0FBVztnSEFqQjlDLGVBQWU7MkZBQWYsZUFBZTtrQkFEM0IsVUFBVTs7MEJBa0I4QixNQUFNOzJCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc1BsYXRmb3JtU2VydmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEluamVjdGFibGUsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgSW5qZWN0LCBQTEFURk9STV9JRCwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YmplY3QsIG1lcmdlLCBFTVBUWSwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgcGFpcndpc2UsIG1hcCwgYXVkaXRUaW1lLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBpc051bWJlciB9IGZyb20gJy4vdXRpbHMvaGVscGVycyc7XG5pbXBvcnQgeyBwYXNzaXZlTGlzdGVuZXJPcHRpb25zIH0gZnJvbSAnLi91dGlscy9wYXNzaXZlLWxpc3RlbmVycyc7XG5cbmNvbnN0IHNjcm9sbFRocmVzaG9sZCA9IDUwO1xuXG5leHBvcnQgZW51bSBTY3JvbGxEaXJlY3Rpb24ge1xuICAgIE5PTkUsXG4gICAgTEVGVCxcbiAgICBSSUdIVFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNjcm9sbEV2ZW50IHtcbiAgICB0YXJnZXQ6IEVsZW1lbnQ7XG4gICAgZGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb247XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBHYW50dERvbVNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIHB1YmxpYyByb290OiBFbGVtZW50O1xuXG4gICAgcHVibGljIHNpZGU6IEVsZW1lbnQ7XG5cbiAgICBwdWJsaWMgY29udGFpbmVyOiBFbGVtZW50O1xuXG4gICAgcHVibGljIHNpZGVDb250YWluZXI6IEVsZW1lbnQ7XG5cbiAgICBwdWJsaWMgbWFpbkNvbnRhaW5lcjogRWxlbWVudDtcblxuICAgIHB1YmxpYyBjYWxlbmRhck92ZXJsYXk6IEVsZW1lbnQ7XG5cbiAgICBwdWJsaWMgbGlua3NPdmVybGF5OiBFbGVtZW50O1xuXG4gICAgcHJpdmF0ZSB1bnN1YnNjcmliZSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSwgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBwbGF0Zm9ybUlkOiBzdHJpbmcpIHt9XG5cbiAgICBwcml2YXRlIG1vbml0b3JTY3JvbGxDaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+XG4gICAgICAgICAgICBtZXJnZShcbiAgICAgICAgICAgICAgICBmcm9tRXZlbnQodGhpcy5tYWluQ29udGFpbmVyLCAnc2Nyb2xsJywgcGFzc2l2ZUxpc3RlbmVyT3B0aW9ucyksXG4gICAgICAgICAgICAgICAgZnJvbUV2ZW50KHRoaXMuc2lkZUNvbnRhaW5lciwgJ3Njcm9sbCcsIHBhc3NpdmVMaXN0ZW5lck9wdGlvbnMpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN5bmNTY3JvbGwoZXZlbnQpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gZnJvbUV2ZW50KHRoaXMubWFpbkNvbnRhaW5lciwgJ3Njcm9sbCcpXG4gICAgICAgIC8vICAgICAucGlwZShzdGFydFdpdGgoKSwgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSlcbiAgICAgICAgLy8gICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgLy8gaWYgKHRoaXMubWFpbkNvbnRhaW5lci5zY3JvbGxMZWZ0ID4gMCkge1xuICAgICAgICAvLyAgICAgICAgIC8vICAgICB0aGlzLnNpZGUuY2xhc3NMaXN0LmFkZCgnZ2FudHQtc2lkZS1oYXMtc2hhZG93Jyk7XG4gICAgICAgIC8vICAgICAgICAgLy8gfSBlbHNlIHtcbiAgICAgICAgLy8gICAgICAgICAvLyAgICAgdGhpcy5zaWRlLmNsYXNzTGlzdC5yZW1vdmUoJ2dhbnR0LXNpZGUtaGFzLXNoYWRvdycpO1xuICAgICAgICAvLyAgICAgICAgIC8vIH1cbiAgICAgICAgLy8gICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3luY1Njcm9sbChldmVudDogRXZlbnQpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgdGhpcy5jYWxlbmRhck92ZXJsYXkuc2Nyb2xsTGVmdCA9IHRoaXMubWFpbkNvbnRhaW5lci5zY3JvbGxMZWZ0O1xuXG4gICAgICAgIHRoaXMuc2lkZUNvbnRhaW5lci5zY3JvbGxUb3AgPSB0YXJnZXQuc2Nyb2xsVG9wO1xuICAgICAgICB0aGlzLm1haW5Db250YWluZXIuc2Nyb2xsVG9wID0gdGFyZ2V0LnNjcm9sbFRvcDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRpc2FibGVCcm93c2VyV2hlZWxFdmVudCgpIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5tYWluQ29udGFpbmVyIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PlxuICAgICAgICAgICAgZnJvbUV2ZW50KGNvbnRhaW5lciwgJ3doZWVsJylcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBXaGVlbEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlbHRhID0gZXZlbnQuZGVsdGFYO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWRlbHRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnRhaW5lci5zY3JvbGxMZWZ0ICsgY29udGFpbmVyLm9mZnNldFdpZHRoID09PSBjb250YWluZXIuc2Nyb2xsV2lkdGggJiYgZGVsdGEgPiAwKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnRhaW5lci5zY3JvbGxMZWZ0ID09PSAwICYmIGRlbHRhIDwgMClcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpbml0aWFsaXplKHJvb3Q6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KSB7XG4gICAgICAgIHRoaXMucm9vdCA9IHJvb3QubmF0aXZlRWxlbWVudDtcbiAgICAgICAgdGhpcy5zaWRlID0gdGhpcy5yb290LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2dhbnR0LXNpZGUnKVswXTtcbiAgICAgICAgdGhpcy5jb250YWluZXIgPSB0aGlzLnJvb3QuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZ2FudHQtY29udGFpbmVyJylbMF07XG4gICAgICAgIHRoaXMuc2lkZUNvbnRhaW5lciA9IHRoaXMucm9vdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdnYW50dC1zaWRlLWNvbnRhaW5lcicpWzBdO1xuICAgICAgICB0aGlzLm1haW5Db250YWluZXIgPSB0aGlzLnJvb3QuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZ2FudHQtbWFpbi1jb250YWluZXInKVswXTtcbiAgICAgICAgdGhpcy5jYWxlbmRhck92ZXJsYXkgPSB0aGlzLnJvb3QuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZ2FudHQtY2FsZW5kYXItb3ZlcmxheScpWzBdO1xuICAgICAgICB0aGlzLm1vbml0b3JTY3JvbGxDaGFuZ2UoKTtcbiAgICAgICAgdGhpcy5kaXNhYmxlQnJvd3NlcldoZWVsRXZlbnQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBBbiBvYnNlcnZhYmxlIHRoYXQgd2lsbCBlbWl0IG91dHNpZGUgdGhlIEFuZ3VsYXIgem9uZS4gTm90ZSwgY29uc3VtZXJzIHNob3VsZCByZS1lbnRlciB0aGUgQW5ndWxhciB6b25lXG4gICAgICogdG8gcnVuIHRoZSBjaGFuZ2UgZGV0ZWN0aW9uIGlmIG5lZWRlZC5cbiAgICAgKi9cbiAgICBnZXRWaWV3ZXJTY3JvbGwob3B0aW9ucz86IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zKTogT2JzZXJ2YWJsZTxTY3JvbGxFdmVudD4ge1xuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8U2Nyb2xsRXZlbnQ+KChzdWJzY3JpYmVyKSA9PlxuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT5cbiAgICAgICAgICAgICAgICBmcm9tRXZlbnQodGhpcy5tYWluQ29udGFpbmVyLCAnc2Nyb2xsJywgb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXAoKCkgPT4gdGhpcy5tYWluQ29udGFpbmVyLnNjcm9sbExlZnQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFpcndpc2UoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcCgoW3ByZXZpb3VzLCBjdXJyZW50XSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50OiBTY3JvbGxFdmVudCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiB0aGlzLm1haW5Db250YWluZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uLk5PTkVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50IC0gcHJldmlvdXMgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1haW5Db250YWluZXIuc2Nyb2xsTGVmdCA8IHNjcm9sbFRocmVzaG9sZCAmJiB0aGlzLm1haW5Db250YWluZXIuc2Nyb2xsTGVmdCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmRpcmVjdGlvbiA9IFNjcm9sbERpcmVjdGlvbi5MRUZUO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50IC0gcHJldmlvdXMgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFpbkNvbnRhaW5lci5zY3JvbGxXaWR0aCAtIHRoaXMubWFpbkNvbnRhaW5lci5jbGllbnRXaWR0aCAtIHRoaXMubWFpbkNvbnRhaW5lci5zY3JvbGxMZWZ0IDxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbFRocmVzaG9sZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmRpcmVjdGlvbiA9IFNjcm9sbERpcmVjdGlvbi5SSUdIVDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoc3Vic2NyaWJlcilcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXRSZXNpemUoKTogT2JzZXJ2YWJsZTxFdmVudD4ge1xuICAgICAgICByZXR1cm4gaXNQbGF0Zm9ybVNlcnZlcih0aGlzLnBsYXRmb3JtSWQpID8gRU1QVFkgOiBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJykucGlwZShhdWRpdFRpbWUoMTUwKSk7XG4gICAgfVxuXG4gICAgc2Nyb2xsTWFpbkNvbnRhaW5lcihsZWZ0OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKGlzTnVtYmVyKGxlZnQpKSB7XG4gICAgICAgICAgICBjb25zdCBzY3JvbGxMZWZ0ID0gbGVmdCAtIHRoaXMubWFpbkNvbnRhaW5lci5jbGllbnRXaWR0aCAvIDI7XG4gICAgICAgICAgICB0aGlzLm1haW5Db250YWluZXIuc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQgPiBzY3JvbGxUaHJlc2hvbGQgPyBzY3JvbGxMZWZ0IDogMDtcbiAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJPdmVybGF5LnNjcm9sbExlZnQgPSB0aGlzLm1haW5Db250YWluZXIuc2Nyb2xsTGVmdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlJC5uZXh0KCk7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUkLmNvbXBsZXRlKCk7XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { Injectable, EventEmitter, Inject } from '@angular/core';
|
|
2
|
+
import { GanttLinkType } from './class';
|
|
3
|
+
import { GANTT_UPPER_TOKEN } from './gantt-upper';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "./gantt-upper";
|
|
6
|
+
function getDependencyType(path, dependencyTypes) {
|
|
7
|
+
if (dependencyTypes.includes(GanttLinkType.ss) && path.from.pos === InBarPosition.start && path.to.pos === InBarPosition.start) {
|
|
8
|
+
return GanttLinkType.ss;
|
|
9
|
+
}
|
|
10
|
+
if (dependencyTypes.includes(GanttLinkType.ff) && path.from.pos === InBarPosition.finish && path.to.pos === InBarPosition.finish) {
|
|
11
|
+
return GanttLinkType.ff;
|
|
12
|
+
}
|
|
13
|
+
if (dependencyTypes.includes(GanttLinkType.sf) && path.from.pos === InBarPosition.start && path.to.pos === InBarPosition.finish) {
|
|
14
|
+
return GanttLinkType.sf;
|
|
15
|
+
}
|
|
16
|
+
return GanttLinkType.fs;
|
|
17
|
+
}
|
|
18
|
+
export var InBarPosition;
|
|
19
|
+
(function (InBarPosition) {
|
|
20
|
+
InBarPosition["start"] = "start";
|
|
21
|
+
InBarPosition["finish"] = "finish";
|
|
22
|
+
})(InBarPosition || (InBarPosition = {}));
|
|
23
|
+
export class GanttDragContainer {
|
|
24
|
+
constructor(ganttUpper) {
|
|
25
|
+
this.ganttUpper = ganttUpper;
|
|
26
|
+
this.dragStarted = new EventEmitter();
|
|
27
|
+
this.dragMoved = new EventEmitter();
|
|
28
|
+
this.dragEnded = new EventEmitter();
|
|
29
|
+
this.linkDragStarted = new EventEmitter();
|
|
30
|
+
this.linkDragEntered = new EventEmitter();
|
|
31
|
+
this.linkDragEnded = new EventEmitter();
|
|
32
|
+
this.linkDragPath = { from: null, to: null };
|
|
33
|
+
}
|
|
34
|
+
emitLinkDragStarted(from) {
|
|
35
|
+
this.linkDraggingId = from.item.id;
|
|
36
|
+
this.linkDragPath.from = from;
|
|
37
|
+
this.linkDragStarted.emit({
|
|
38
|
+
source: from.item.origin,
|
|
39
|
+
target: null
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
emitLinkDragEntered(to) {
|
|
43
|
+
this.linkDragPath.to = to;
|
|
44
|
+
this.linkDragEntered.emit({
|
|
45
|
+
source: this.linkDragPath.from.item.origin,
|
|
46
|
+
target: to.item.origin
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
emitLinkDragLeaved() {
|
|
50
|
+
this.linkDragPath.to = null;
|
|
51
|
+
}
|
|
52
|
+
emitLinkDragEnded(to) {
|
|
53
|
+
if (to) {
|
|
54
|
+
this.linkDragPath.to = to;
|
|
55
|
+
const dependencyType = getDependencyType(this.linkDragPath, this.ganttUpper.linkOptions?.dependencyTypes);
|
|
56
|
+
this.linkDragPath.from.item.addLink({
|
|
57
|
+
link: this.linkDragPath.to.item.id,
|
|
58
|
+
type: dependencyType
|
|
59
|
+
});
|
|
60
|
+
this.linkDragEnded.emit({
|
|
61
|
+
source: this.linkDragPath.from.item.origin,
|
|
62
|
+
target: this.linkDragPath.to.item.origin,
|
|
63
|
+
type: dependencyType
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
this.linkDraggingId = null;
|
|
67
|
+
this.linkDragPath = { from: null, to: null };
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
GanttDragContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: GanttDragContainer, deps: [{ token: GANTT_UPPER_TOKEN }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
71
|
+
GanttDragContainer.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: GanttDragContainer });
|
|
72
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: GanttDragContainer, decorators: [{
|
|
73
|
+
type: Injectable
|
|
74
|
+
}], ctorParameters: function () { return [{ type: i1.GanttUpper, decorators: [{
|
|
75
|
+
type: Inject,
|
|
76
|
+
args: [GANTT_UPPER_TOKEN]
|
|
77
|
+
}] }]; } });
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FudHQtZHJhZy1jb250YWluZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wYWNrYWdlcy9nYW50dC9zcmMvZ2FudHQtZHJhZy1jb250YWluZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFHeEMsT0FBTyxFQUFjLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFFOUQsU0FBUyxpQkFBaUIsQ0FBQyxJQUFrQixFQUFFLGVBQWdDO0lBQzNFLElBQUksZUFBZSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssYUFBYSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxhQUFhLENBQUMsS0FBSyxFQUFFO1FBQzVILE9BQU8sYUFBYSxDQUFDLEVBQUUsQ0FBQztLQUMzQjtJQUNELElBQUksZUFBZSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssYUFBYSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxhQUFhLENBQUMsTUFBTSxFQUFFO1FBQzlILE9BQU8sYUFBYSxDQUFDLEVBQUUsQ0FBQztLQUMzQjtJQUNELElBQUksZUFBZSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssYUFBYSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxhQUFhLENBQUMsTUFBTSxFQUFFO1FBQzdILE9BQU8sYUFBYSxDQUFDLEVB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MkZBQWxCLGtCQUFrQjtrQkFEOUIsVUFBVTs7MEJBa0JNLE1BQU07MkJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgRXZlbnRFbWl0dGVyLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEdhbnR0TGlua1R5cGUgfSBmcm9tICcuL2NsYXNzJztcbmltcG9ydCB7IEdhbnR0RHJhZ0V2ZW50LCBHYW50dExpbmtEcmFnRXZlbnQgfSBmcm9tICcuL2NsYXNzL2V2ZW50JztcbmltcG9ydCB7IEdhbnR0SXRlbUludGVybmFsIH0gZnJvbSAnLi9jbGFzcy9pdGVtJztcbmltcG9ydCB7IEdhbnR0VXBwZXIsIEdBTlRUX1VQUEVSX1RPS0VOIH0gZnJvbSAnLi9nYW50dC11cHBlcic7XG5cbmZ1bmN0aW9uIGdldERlcGVuZGVuY3lUeXBlKHBhdGg6IExpbmtEcmFnUGF0aCwgZGVwZW5kZW5jeVR5cGVzOiBHYW50dExpbmtUeXBlW10pOiBHYW50dExpbmtUeXBlIHtcbiAgICBpZiAoZGVwZW5kZW5jeVR5cGVzLmluY2x1ZGVzKEdhbnR0TGlua1R5cGUuc3MpICYmIHBhdGguZnJvbS5wb3MgPT09IEluQmFyUG9zaXRpb24uc3RhcnQgJiYgcGF0aC50by5wb3MgPT09IEluQmFyUG9zaXRpb24uc3RhcnQpIHtcbiAgICAgICAgcmV0dXJuIEdhbnR0TGlua1R5cGUuc3M7XG4gICAgfVxuICAgIGlmIChkZXBlbmRlbmN5VHlwZXMuaW5jbHVkZXMoR2FudHRMaW5rVHlwZS5mZikgJiYgcGF0aC5mcm9tLnBvcyA9PT0gSW5CYXJQb3NpdGlvbi5maW5pc2ggJiYgcGF0aC50by5wb3MgPT09IEluQmFyUG9zaXRpb24uZmluaXNoKSB7XG4gICAgICAgIHJldHVybiBHYW50dExpbmtUeXBlLmZmO1xuICAgIH1cbiAgICBpZiAoZGVwZW5kZW5jeVR5cGVzLmluY2x1ZGVzKEdhbnR0TGlua1R5cGUuc2YpICYmIHBhdGguZnJvbS5wb3MgPT09IEluQmFyUG9zaXRpb24uc3RhcnQgJiYgcGF0aC50by5wb3MgPT09IEluQmFyUG9zaXRpb24uZmluaXNoKSB7XG4gICAgICAgIHJldHVybiBHYW50dExpbmtUeXBlLnNmO1xuICAgIH1cbiAgICByZXR1cm4gR2FudHRMaW5rVHlwZS5mcztcbn1cblxuZXhwb3J0IGVudW0gSW5CYXJQb3NpdGlvbiB7XG4gICAgc3RhcnQgPSAnc3RhcnQnLFxuICAgIGZpbmlzaCA9ICdmaW5pc2gnXG59XG5cbmV4cG9ydCB0eXBlIExpbmtEcmFnUG9zaXRpb24gPSB7XG4gICAgZWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gICAgaXRlbTogR2FudHRJdGVtSW50ZXJuYWw7XG4gICAgcG9zPzogSW5CYXJQb3NpdGlvbjtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlua0RyYWdQYXRoIHtcbiAgICBmcm9tPzogTGlua0RyYWdQb3NpdGlvbjtcbiAgICB0bz86IExpbmtEcmFnUG9zaXRpb247XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBHYW50dERyYWdDb250YWluZXIge1xuICAgIGRyYWdTdGFydGVkID0gbmV3IEV2ZW50RW1pdHRlcjxHYW50dERyYWdFdmVudD4oKTtcblxuICAgIGRyYWdNb3ZlZCA9IG5ldyBFdmVudEVtaXR0ZXI8R2FudHREcmFnRXZlbnQ+KCk7XG5cbiAgICBkcmFnRW5kZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEdhbnR0RHJhZ0V2ZW50PigpO1xuXG4gICAgbGlua0RyYWdTdGFydGVkID0gbmV3IEV2ZW50RW1pdHRlcjxHYW50dExpbmtEcmFnRXZlbnQ+KCk7XG5cbiAgICBsaW5rRHJhZ0VudGVyZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEdhbnR0TGlua0RyYWdFdmVudD4oKTtcblxuICAgIGxpbmtEcmFnRW5kZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEdhbnR0TGlua0RyYWdFdmVudD4oKTtcblxuICAgIGxpbmtEcmFnZ2luZ0lkOiBzdHJpbmc7XG5cbiAgICBsaW5rRHJhZ1BhdGg6IExpbmtEcmFnUGF0aCA9IHsgZnJvbTogbnVsbCwgdG86IG51bGwgfTtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoR0FOVFRfVVBQRVJfVE9LRU4pIHB1YmxpYyBnYW50dFVwcGVyOiBHYW50dFVwcGVyKSB7fVxuXG4gICAgZW1pdExpbmtEcmFnU3RhcnRlZChmcm9tOiBMaW5rRHJhZ1Bvc2l0aW9uKSB7XG4gICAgICAgIHRoaXMubGlua0RyYWdnaW5nSWQgPSBmcm9tLml0ZW0uaWQ7XG4gICAgICAgIHRoaXMubGlua0RyYWdQYXRoLmZyb20gPSBmcm9tO1xuICAgICAgICB0aGlzLmxpbmtEcmFnU3RhcnRlZC5lbWl0KHtcbiAgICAgICAgICAgIHNvdXJjZTogZnJvbS5pdGVtLm9yaWdpbixcbiAgICAgICAgICAgIHRhcmdldDogbnVsbFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBlbWl0TGlua0RyYWdFbnRlcmVkKHRvOiBMaW5rRHJhZ1Bvc2l0aW9uKSB7XG4gICAgICAgIHRoaXMubGlua0RyYWdQYXRoLnRvID0gdG87XG4gICAgICAgIHRoaXMubGlua0RyYWdFbnRlcmVkLmVtaXQoe1xuICAgICAgICAgICAgc291cmNlOiB0aGlzLmxpbmtEcmFnUGF0aC5mcm9tLml0ZW0ub3JpZ2luLFxuICAgICAgICAgICAgdGFyZ2V0OiB0by5pdGVtLm9yaWdpblxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBlbWl0TGlua0RyYWdMZWF2ZWQoKSB7XG4gICAgICAgIHRoaXMubGlua0RyYWdQYXRoLnRvID0gbnVsbDtcbiAgICB9XG5cbiAgICBlbWl0TGlua0RyYWdFbmRlZCh0bz86IExpbmtEcmFnUG9zaXRpb24pIHtcbiAgICAgICAgaWYgKHRvKSB7XG4gICAgICAgICAgICB0aGlzLmxpbmtEcmFnUGF0aC50byA9IHRvO1xuICAgICAgICAgICAgY29uc3QgZGVwZW5kZW5jeVR5cGUgPSBnZXREZXBlbmRlbmN5VHlwZSh0aGlzLmxpbmtEcmFnUGF0aCwgdGhpcy5nYW50dFVwcGVyLmxpbmtPcHRpb25zPy5kZXBlbmRlbmN5VHlwZXMpO1xuICAgICAgICAgICAgdGhpcy5saW5rRHJhZ1BhdGguZnJvbS5pdGVtLmFkZExpbmsoe1xuICAgICAgICAgICAgICAgIGxpbms6IHRoaXMubGlua0RyYWdQYXRoLnRvLml0ZW0uaWQsXG4gICAgICAgICAgICAgICAgdHlwZTogZGVwZW5kZW5jeVR5cGVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5saW5rRHJhZ0VuZGVkLmVtaXQoe1xuICAgICAgICAgICAgICAgIHNvdXJjZTogdGhpcy5saW5rRHJhZ1BhdGguZnJvbS5pdGVtLm9yaWdpbixcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IHRoaXMubGlua0RyYWdQYXRoLnRvLml0ZW0ub3JpZ2luLFxuICAgICAgICAgICAgICAgIHR5cGU6IGRlcGVuZGVuY3lUeXBlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubGlua0RyYWdnaW5nSWQgPSBudWxsO1xuICAgICAgICB0aGlzLmxpbmtEcmFnUGF0aCA9IHsgZnJvbTogbnVsbCwgdG86IG51bGwgfTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { Input, Inject, Directive } from '@angular/core';
|
|
2
|
+
import { GanttItemType } from './class';
|
|
3
|
+
import { Subject } from 'rxjs';
|
|
4
|
+
import { takeUntil } from 'rxjs/operators';
|
|
5
|
+
import { rangeHeight } from './gantt.styles';
|
|
6
|
+
import { GANTT_UPPER_TOKEN } from './gantt-upper';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "./gantt-upper";
|
|
9
|
+
export class GanttItemUpper {
|
|
10
|
+
constructor(elementRef, ganttUpper) {
|
|
11
|
+
this.elementRef = elementRef;
|
|
12
|
+
this.ganttUpper = ganttUpper;
|
|
13
|
+
this.firstChange = true;
|
|
14
|
+
this.unsubscribe$ = new Subject();
|
|
15
|
+
}
|
|
16
|
+
ngOnInit() {
|
|
17
|
+
this.firstChange = false;
|
|
18
|
+
this.item.refs$.pipe(takeUntil(this.unsubscribe$)).subscribe(() => {
|
|
19
|
+
this.setPositions();
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
ngOnChanges() {
|
|
23
|
+
if (!this.firstChange) {
|
|
24
|
+
this.setPositions();
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
setPositions() {
|
|
28
|
+
const itemElement = this.elementRef.nativeElement;
|
|
29
|
+
itemElement.style.left = this.item.refs.x + 'px';
|
|
30
|
+
itemElement.style.top = this.item.refs.y + 'px';
|
|
31
|
+
itemElement.style.width = this.item.refs.width + 'px';
|
|
32
|
+
if (this.item.type === GanttItemType.bar) {
|
|
33
|
+
itemElement.style.height = this.ganttUpper.styles.barHeight + 'px';
|
|
34
|
+
}
|
|
35
|
+
else if (this.item.type === GanttItemType.range) {
|
|
36
|
+
itemElement.style.height = rangeHeight + 'px';
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
ngOnDestroy() {
|
|
42
|
+
this.unsubscribe$.next();
|
|
43
|
+
this.unsubscribe$.complete();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
GanttItemUpper.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: GanttItemUpper, deps: [{ token: i0.ElementRef }, { token: GANTT_UPPER_TOKEN }], target: i0.ɵɵFactoryTarget.Directive });
|
|
47
|
+
GanttItemUpper.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.8", type: GanttItemUpper, inputs: { template: "template", item: "item" }, usesOnChanges: true, ngImport: i0 });
|
|
48
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: GanttItemUpper, decorators: [{
|
|
49
|
+
type: Directive
|
|
50
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.GanttUpper, decorators: [{
|
|
51
|
+
type: Inject,
|
|
52
|
+
args: [GANTT_UPPER_TOKEN]
|
|
53
|
+
}] }]; }, propDecorators: { template: [{
|
|
54
|
+
type: Input
|
|
55
|
+
}], item: [{
|
|
56
|
+
type: Input
|
|
57
|
+
}] } });
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FudHQtaXRlbS11cHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL2dhbnR0L3NyYy9nYW50dC1pdGVtLXVwcGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQWMsTUFBTSxFQUFlLFNBQVMsRUFBZ0MsTUFBTSxlQUFlLENBQUM7QUFDaEgsT0FBTyxFQUFxQixhQUFhLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDM0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxpQkFBaUIsRUFBYyxNQUFNLGVBQWUsQ0FBQzs7O0FBRzlELE1BQU0sT0FBZ0IsY0FBYztJQVNoQyxZQUFzQixVQUFtQyxFQUF1QyxVQUFzQjtRQUFoRyxlQUFVLEdBQVYsVUFBVSxDQUF5QjtRQUF1QyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBSi9HLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBRW5CLGlCQUFZLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUUrRSxDQUFDO0lBRTFILFFBQVE7UUFDSixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDOUQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNuQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDdkI7SUFDTCxDQUFDO0lBRU8sWUFBWTtRQUNoQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztRQUNsRCxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ2pELFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDaEQsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUN0RCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQyxHQUFHLEVBQUU7WUFDdEMsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztTQUN0RTthQUFNLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssYUFBYSxDQUFDLEtBQUssRUFBRTtZQUMvQyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxXQUFXLEdBQUcsSUFBSSxDQUFDO1NBQ2pEO2FBQU07U0FDTjtJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2pDLENBQUM7OzJHQXhDaUIsY0FBYyw0Q0FTbUMsaUJBQWlCOytGQVRsRSxjQUFjOzJGQUFkLGNBQWM7a0JBRG5DLFNBQVM7OzBCQVVzRCxNQUFNOzJCQUFDLGlCQUFpQjs0Q0FSM0UsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbnB1dCwgRWxlbWVudFJlZiwgSW5qZWN0LCBUZW1wbGF0ZVJlZiwgRGlyZWN0aXZlLCBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBHYW50dEl0ZW1JbnRlcm5hbCwgR2FudHRJdGVtVHlwZSB9IGZyb20gJy4vY2xhc3MnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgcmFuZ2VIZWlnaHQgfSBmcm9tICcuL2dhbnR0LnN0eWxlcyc7XG5pbXBvcnQgeyBHQU5UVF9VUFBFUl9UT0tFTiwgR2FudHRVcHBlciB9IGZyb20gJy4vZ2FudHQtdXBwZXInO1xuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBHYW50dEl0ZW1VcHBlciBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIEBJbnB1dCgpIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQElucHV0KCkgaXRlbTogR2FudHRJdGVtSW50ZXJuYWw7XG5cbiAgICBwdWJsaWMgZmlyc3RDaGFuZ2UgPSB0cnVlO1xuXG4gICAgcHVibGljIHVuc3Vic2NyaWJlJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sIEBJbmplY3QoR0FOVFRfVVBQRVJfVE9LRU4pIHByb3RlY3RlZCBnYW50dFVwcGVyOiBHYW50dFVwcGVyKSB7fVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuZmlyc3RDaGFuZ2UgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pdGVtLnJlZnMkLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0UG9zaXRpb25zKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UG9zaXRpb25zKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFBvc2l0aW9ucygpIHtcbiAgICAgICAgY29uc3QgaXRlbUVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgaXRlbUVsZW1lbnQuc3R5bGUubGVmdCA9IHRoaXMuaXRlbS5yZWZzLnggKyAncHgnO1xuICAgICAgICBpdGVtRWxlbWVudC5zdHlsZS50b3AgPSB0aGlzLml0ZW0ucmVmcy55ICsgJ3B4JztcbiAgICAgICAgaXRlbUVsZW1lbnQuc3R5bGUud2lkdGggPSB0aGlzLml0ZW0ucmVmcy53aWR0aCArICdweCc7XG4gICAgICAgIGlmICh0aGlzLml0ZW0udHlwZSA9PT0gR2FudHRJdGVtVHlwZS5iYXIpIHtcbiAgICAgICAgICAgIGl0ZW1FbGVtZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuZ2FudHRVcHBlci5zdHlsZXMuYmFySGVpZ2h0ICsgJ3B4JztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLml0ZW0udHlwZSA9PT0gR2FudHRJdGVtVHlwZS5yYW5nZSkge1xuICAgICAgICAgICAgaXRlbUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gcmFuZ2VIZWlnaHQgKyAncHgnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUkLm5leHQoKTtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSQuY29tcGxldGUoKTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class GanttPrintService {
|
|
4
|
+
constructor() { }
|
|
5
|
+
setInlineStyles(targetElem) {
|
|
6
|
+
const svgElements = Array.from(targetElem.getElementsByTagName('svg'));
|
|
7
|
+
for (const svgElement of svgElements) {
|
|
8
|
+
this.recursElementChildren(svgElement);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
recursElementChildren(node) {
|
|
12
|
+
const transformProperties = [
|
|
13
|
+
'fill',
|
|
14
|
+
'color',
|
|
15
|
+
'font-size',
|
|
16
|
+
'stroke',
|
|
17
|
+
'font',
|
|
18
|
+
'text-anchor',
|
|
19
|
+
'stroke-dasharray',
|
|
20
|
+
'shape-rendering',
|
|
21
|
+
'stroke-width'
|
|
22
|
+
];
|
|
23
|
+
if (!node.style) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const styles = getComputedStyle(node);
|
|
27
|
+
for (const transformProperty of transformProperties) {
|
|
28
|
+
node.style[transformProperty] = styles[transformProperty];
|
|
29
|
+
}
|
|
30
|
+
for (const child of Array.from(node.childNodes)) {
|
|
31
|
+
this.recursElementChildren(child);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
register(root) {
|
|
35
|
+
this.root = root.nativeElement;
|
|
36
|
+
this.mainContainer = this.root.getElementsByClassName('gantt-main-container')[0];
|
|
37
|
+
}
|
|
38
|
+
async print(name = 'download', ignoreElementClass) {
|
|
39
|
+
const root = this.root;
|
|
40
|
+
const mainContainer = this.mainContainer;
|
|
41
|
+
// set print width
|
|
42
|
+
const printWidth = root.offsetWidth;
|
|
43
|
+
// set print height
|
|
44
|
+
const printHeight = root.offsetHeight - mainContainer.offsetHeight + mainContainer.scrollHeight;
|
|
45
|
+
const html2canvas = (await import(/* webpackChunkName: 'html2canvas' */ 'html2canvas')).default;
|
|
46
|
+
html2canvas(root, {
|
|
47
|
+
logging: false,
|
|
48
|
+
allowTaint: true,
|
|
49
|
+
useCORS: true,
|
|
50
|
+
width: printWidth,
|
|
51
|
+
height: printHeight,
|
|
52
|
+
ignoreElements: (element) => {
|
|
53
|
+
if (ignoreElementClass && element.classList.contains(ignoreElementClass)) {
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
if (element.classList.contains('gantt-calendar-today-overlay')) {
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
onclone: (cloneDocument) => {
|
|
61
|
+
const ganttClass = root.className;
|
|
62
|
+
const cloneGanttDom = cloneDocument.querySelector(`.${ganttClass.replace(/\s+/g, '.')}`);
|
|
63
|
+
const cloneGanttContainerDom = cloneDocument.querySelector('.gantt-container');
|
|
64
|
+
const cloneCalendarOverlay = cloneDocument.querySelector('.gantt-calendar-overlay-main');
|
|
65
|
+
const cloneLinksOverlay = cloneDocument.querySelector('.gantt-links-overlay-main');
|
|
66
|
+
// change targetDom width
|
|
67
|
+
cloneGanttDom.style.width = `${printWidth}px`;
|
|
68
|
+
cloneGanttDom.style.height = `${printHeight}px`;
|
|
69
|
+
cloneGanttDom.style.overflow = `unset`;
|
|
70
|
+
cloneGanttContainerDom.style.backgroundColor = '#fff';
|
|
71
|
+
cloneCalendarOverlay.setAttribute('height', `${printHeight}`);
|
|
72
|
+
cloneCalendarOverlay.setAttribute('style', `background: transparent`);
|
|
73
|
+
if (cloneLinksOverlay) {
|
|
74
|
+
cloneLinksOverlay.setAttribute('height', `${printHeight}`);
|
|
75
|
+
cloneLinksOverlay.setAttribute('style', `height: ${printHeight}px`);
|
|
76
|
+
}
|
|
77
|
+
// setInlineStyles for svg
|
|
78
|
+
this.setInlineStyles(cloneGanttDom);
|
|
79
|
+
}
|
|
80
|
+
}).then((canvas) => {
|
|
81
|
+
const link = document.createElement('a');
|
|
82
|
+
const dataUrl = canvas.toDataURL('image/png');
|
|
83
|
+
link.download = `${name}.png`;
|
|
84
|
+
link.href = dataUrl;
|
|
85
|
+
link.click();
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
GanttPrintService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: GanttPrintService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
90
|
+
GanttPrintService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: GanttPrintService });
|
|
91
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: GanttPrintService, decorators: [{
|
|
92
|
+
type: Injectable
|
|
93
|
+
}], ctorParameters: function () { return []; } });
|
|
94
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FudHQtcHJpbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL2dhbnR0L3NyYy9nYW50dC1wcmludC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWMsTUFBTSxlQUFlLENBQUM7O0FBR3ZELE1BQU0sT0FBTyxpQkFBaUI7SUFLMUIsZ0JBQWUsQ0FBQztJQUVSLGVBQWUsQ0FBQyxVQUFtQjtRQUN2QyxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLEtBQUssTUFBTSxVQUFVLElBQUksV0FBVyxFQUFFO1lBQ2xDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUMxQztJQUNMLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxJQUFpQztRQUMzRCxNQUFNLG1CQUFtQixHQUFHO1lBQ3hCLE1BQU07WUFDTixPQUFPO1lBQ1AsV0FBVztZQUNYLFFBQVE7WUFDUixNQUFNO1lBQ04sYUFBYTtZQUNiLGtCQUFrQjtZQUNsQixpQkFBaUI7WUFDakIsY0FBYztTQUNqQixDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDYixPQUFPO1NBQ1Y7UUFDRCxNQUFNLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxLQUFLLE1BQU0saUJBQWlCLElBQUksbUJBQW1CLEVBQUU7WUFDakQsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1NBQzdEO1FBQ0QsS0FBSyxNQUFNLEtBQUssSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUM3QyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBc0Is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QkFDMUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN4QyxDQUFDO1NBQ0osQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQXlCLEVBQUUsRUFBRTtZQUNsQyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLElBQUksTUFBTSxDQUFDO1lBQzlCLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7OzhHQXBHUSxpQkFBaUI7a0hBQWpCLGlCQUFpQjsyRkFBakIsaUJBQWlCO2tCQUQ3QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgR2FudHRQcmludFNlcnZpY2Uge1xuICAgIHByaXZhdGUgcm9vdDogSFRNTEVsZW1lbnQ7XG5cbiAgICBwcml2YXRlIG1haW5Db250YWluZXI6IEhUTUxFbGVtZW50O1xuXG4gICAgY29uc3RydWN0b3IoKSB7fVxuXG4gICAgcHJpdmF0ZSBzZXRJbmxpbmVTdHlsZXModGFyZ2V0RWxlbTogRWxlbWVudCkge1xuICAgICAgICBjb25zdCBzdmdFbGVtZW50cyA9IEFycmF5LmZyb20odGFyZ2V0RWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc3ZnJykpO1xuICAgICAgICBmb3IgKGNvbnN0IHN2Z0VsZW1lbnQgb2Ygc3ZnRWxlbWVudHMpIHtcbiAgICAgICAgICAgIHRoaXMucmVjdXJzRWxlbWVudENoaWxkcmVuKHN2Z0VsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWN1cnNFbGVtZW50Q2hpbGRyZW4obm9kZTogU1ZHU1ZHRWxlbWVudCB8IEhUTUxFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybVByb3BlcnRpZXMgPSBbXG4gICAgICAgICAgICAnZmlsbCcsXG4gICAgICAgICAgICAnY29sb3InLFxuICAgICAgICAgICAgJ2ZvbnQtc2l6ZScsXG4gICAgICAgICAgICAnc3Ryb2tlJyxcbiAgICAgICAgICAgICdmb250JyxcbiAgICAgICAgICAgICd0ZXh0LWFuY2hvcicsXG4gICAgICAgICAgICAnc3Ryb2tlLWRhc2hhcnJheScsXG4gICAgICAgICAgICAnc2hhcGUtcmVuZGVyaW5nJyxcbiAgICAgICAgICAgICdzdHJva2Utd2lkdGgnXG4gICAgICAgIF07XG4gICAgICAgIGlmICghbm9kZS5zdHlsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0eWxlcyA9IGdldENvbXB1dGVkU3R5bGUobm9kZSk7XG4gICAgICAgIGZvciAoY29uc3QgdHJhbnNmb3JtUHJvcGVydHkgb2YgdHJhbnNmb3JtUHJvcGVydGllcykge1xuICAgICAgICAgICAgbm9kZS5zdHlsZVt0cmFuc2Zvcm1Qcm9wZXJ0eV0gPSBzdHlsZXNbdHJhbnNmb3JtUHJvcGVydHldO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgQXJyYXkuZnJvbShub2RlLmNoaWxkTm9kZXMpKSB7XG4gICAgICAgICAgICB0aGlzLnJlY3Vyc0VsZW1lbnRDaGlsZHJlbihjaGlsZCBhcyBTVkdTVkdFbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlZ2lzdGVyKHJvb3Q6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KSB7XG4gICAgICAgIHRoaXMucm9vdCA9IHJvb3QubmF0aXZlRWxlbWVudDtcbiAgICAgICAgdGhpcy5tYWluQ29udGFpbmVyID0gdGhpcy5yb290LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2dhbnR0LW1haW4tY29udGFpbmVyJylbMF0gYXMgSFRNTEVsZW1lbnQ7XG4gICAgfVxuXG4gICAgYXN5bmMgcHJpbnQobmFtZTogc3RyaW5nID0gJ2Rvd25sb2FkJywgaWdub3JlRWxlbWVudENsYXNzPzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHJvb3QgPSB0aGlzLnJvb3QgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAgICAgY29uc3QgbWFpbkNvbnRhaW5lciA9IHRoaXMubWFpbkNvbnRhaW5lciBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgLy8gc2V0IHByaW50IHdpZHRoXG4gICAgICAgIGNvbnN0IHByaW50V2lkdGggPSByb290Lm9mZnNldFdpZHRoO1xuXG4gICAgICAgIC8vIHNldCBwcmludCBoZWlnaHRcbiAgICAgICAgY29uc3QgcHJpbnRIZWlnaHQgPSByb290Lm9mZnNldEhlaWdodCAtIG1haW5Db250YWluZXIub2Zmc2V0SGVpZ2h0ICsgbWFpbkNvbnRhaW5lci5zY3JvbGxIZWlnaHQ7XG5cbiAgICAgICAgY29uc3QgaHRtbDJjYW52YXMgPSAoYXdhaXQgaW1wb3J0KC8qIHdlYnBhY2tDaHVua05hbWU6ICdodG1sMmNhbnZhcycgKi8gJ2h0bWwyY2FudmFzJykpLmRlZmF1bHQ7XG5cbiAgICAgICAgaHRtbDJjYW52YXMocm9vdCwge1xuICAgICAgICAgICAgbG9nZ2luZzogZmFsc2UsXG4gICAgICAgICAgICBhbGxvd1RhaW50OiB0cnVlLFxuICAgICAgICAgICAgdXNlQ09SUzogdHJ1ZSxcbiAgICAgICAgICAgIHdpZHRoOiBwcmludFdpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0OiBwcmludEhlaWdodCxcbiAgICAgICAgICAgIGlnbm9yZUVsZW1lbnRzOiAoZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpZ25vcmVFbGVtZW50Q2xhc3MgJiYgZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoaWdub3JlRWxlbWVudENsYXNzKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdnYW50dC1jYWxlbmRhci10b2RheS1vdmVybGF5JykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgb25jbG9uZTogKGNsb25lRG9jdW1lbnQ6IERvY3VtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ2FudHRDbGFzcyA9IHJvb3QuY2xhc3NOYW1lO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNsb25lR2FudHREb20gPSBjbG9uZURvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC4ke2dhbnR0Q2xhc3MucmVwbGFjZSgvXFxzKy9nLCAnLicpfWApIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IGNsb25lR2FudHRDb250YWluZXJEb20gPSBjbG9uZURvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5nYW50dC1jb250YWluZXInKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgICAgICBjb25zdCBjbG9uZUNhbGVuZGFyT3ZlcmxheSA9IGNsb25lRG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmdhbnR0LWNhbGVuZGFyLW92ZXJsYXktbWFpbicpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IGNsb25lTGlua3NPdmVybGF5ID0gY2xvbmVEb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZ2FudHQtbGlua3Mtb3ZlcmxheS1tYWluJykgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAgICAgICAgICAgICAvLyBjaGFuZ2UgdGFyZ2V0RG9tIHdpZHRoXG4gICAgICAgICAgICAgICAgY2xvbmVHYW50dERvbS5zdHlsZS53aWR0aCA9IGAke3ByaW50V2lkdGh9cHhgO1xuICAgICAgICAgICAgICAgIGNsb25lR2FudHREb20uc3R5bGUuaGVpZ2h0ID0gYCR7cHJpbnRIZWlnaHR9cHhgO1xuICAgICAgICAgICAgICAgIGNsb25lR2FudHREb20uc3R5bGUub3ZlcmZsb3cgPSBgdW5zZXRgO1xuICAgICAgICAgICAgICAgIGNsb25lR2FudHRDb250YWluZXJEb20uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyNmZmYnO1xuICAgICAgICAgICAgICAgIGNsb25lQ2FsZW5kYXJPdmVybGF5LnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgYCR7cHJpbnRIZWlnaHR9YCk7XG4gICAgICAgICAgICAgICAgY2xvbmVDYWxlbmRhck92ZXJsYXkuc2V0QXR0cmlidXRlKCdzdHlsZScsIGBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudGApO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNsb25lTGlua3NPdmVybGF5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNsb25lTGlua3NPdmVybGF5LnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgYCR7cHJpbnRIZWlnaHR9YCk7XG4gICAgICAgICAgICAgICAgICAgIGNsb25lTGlua3NPdmVybGF5LnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBgaGVpZ2h0OiAke3ByaW50SGVpZ2h0fXB4YCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gc2V0SW5saW5lU3R5bGVzIGZvciBzdmdcbiAgICAgICAgICAgICAgICB0aGlzLnNldElubGluZVN0eWxlcyhjbG9uZUdhbnR0RG9tKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkudGhlbigoY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFVcmwgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9wbmcnKTtcbiAgICAgICAgICAgIGxpbmsuZG93bmxvYWQgPSBgJHtuYW1lfS5wbmdgO1xuICAgICAgICAgICAgbGluay5ocmVmID0gZGF0YVVybDtcbiAgICAgICAgICAgIGxpbmsuY2xpY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
|