@visactor/vtable-gantt 1.5.4
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 +151 -0
- package/cjs/Gantt.d.ts +111 -0
- package/cjs/Gantt.js +244 -0
- package/cjs/Gantt.js.map +1 -0
- package/cjs/data/DataSource.d.ts +9 -0
- package/cjs/data/DataSource.js +30 -0
- package/cjs/data/DataSource.js.map +1 -0
- package/cjs/env.d.ts +19 -0
- package/cjs/env.js +48 -0
- package/cjs/env.js.map +1 -0
- package/cjs/event/EventHandler.d.ts +47 -0
- package/cjs/event/EventHandler.js +128 -0
- package/cjs/event/EventHandler.js.map +1 -0
- package/cjs/event/EventTarget.d.ts +12 -0
- package/cjs/event/EventTarget.js +67 -0
- package/cjs/event/EventTarget.js.map +1 -0
- package/cjs/event/event-manager.d.ts +15 -0
- package/cjs/event/event-manager.js +76 -0
- package/cjs/event/event-manager.js.map +1 -0
- package/cjs/event/scroll.d.ts +22 -0
- package/cjs/event/scroll.js +136 -0
- package/cjs/event/scroll.js.map +1 -0
- package/cjs/gantt-helper.d.ts +28 -0
- package/cjs/gantt-helper.js +225 -0
- package/cjs/gantt-helper.js.map +1 -0
- package/cjs/index.d.ts +7 -0
- package/cjs/index.js +48 -0
- package/cjs/index.js.map +1 -0
- package/cjs/register.d.ts +1 -0
- package/cjs/register.js +1 -0
- package/cjs/register.js.map +1 -0
- package/cjs/scenegraph/frame-border.d.ts +9 -0
- package/cjs/scenegraph/frame-border.js +42 -0
- package/cjs/scenegraph/frame-border.js.map +1 -0
- package/cjs/scenegraph/ganttNode.d.ts +7 -0
- package/cjs/scenegraph/ganttNode.js +16 -0
- package/cjs/scenegraph/ganttNode.js.map +1 -0
- package/cjs/scenegraph/grid.d.ts +30 -0
- package/cjs/scenegraph/grid.js +130 -0
- package/cjs/scenegraph/grid.js.map +1 -0
- package/cjs/scenegraph/mark-line.d.ts +15 -0
- package/cjs/scenegraph/mark-line.js +66 -0
- package/cjs/scenegraph/mark-line.js.map +1 -0
- package/cjs/scenegraph/scenegraph.d.ts +41 -0
- package/cjs/scenegraph/scenegraph.js +109 -0
- package/cjs/scenegraph/scenegraph.js.map +1 -0
- package/cjs/scenegraph/scroll-bar.d.ts +19 -0
- package/cjs/scenegraph/scroll-bar.js +150 -0
- package/cjs/scenegraph/scroll-bar.js.map +1 -0
- package/cjs/scenegraph/task-bar.d.ts +24 -0
- package/cjs/scenegraph/task-bar.js +188 -0
- package/cjs/scenegraph/task-bar.js.map +1 -0
- package/cjs/scenegraph/timeline-header.d.ts +10 -0
- package/cjs/scenegraph/timeline-header.js +134 -0
- package/cjs/scenegraph/timeline-header.js.map +1 -0
- package/cjs/state/gantt-table-sync.d.ts +7 -0
- package/cjs/state/gantt-table-sync.js +60 -0
- package/cjs/state/gantt-table-sync.js.map +1 -0
- package/cjs/state/state-manager.d.ts +58 -0
- package/cjs/state/state-manager.js +223 -0
- package/cjs/state/state-manager.js.map +1 -0
- package/cjs/themes.d.ts +1 -0
- package/cjs/themes.js +1 -0
- package/cjs/themes.js.map +1 -0
- package/cjs/tools/debounce.d.ts +1 -0
- package/cjs/tools/debounce.js +51 -0
- package/cjs/tools/debounce.js.map +1 -0
- package/cjs/tools/index.d.ts +2 -0
- package/cjs/tools/index.js +20 -0
- package/cjs/tools/index.js.map +1 -0
- package/cjs/tools/isx.d.ts +16 -0
- package/cjs/tools/isx.js +117 -0
- package/cjs/tools/isx.js.map +1 -0
- package/cjs/tools/pixel-ratio.d.ts +2 -0
- package/cjs/tools/pixel-ratio.js +16 -0
- package/cjs/tools/pixel-ratio.js.map +1 -0
- package/cjs/tools/util.d.ts +7 -0
- package/cjs/tools/util.js +87 -0
- package/cjs/tools/util.js.map +1 -0
- package/cjs/ts-types/EVENT_TYPE.d.ts +5 -0
- package/cjs/ts-types/EVENT_TYPE.js +9 -0
- package/cjs/ts-types/EVENT_TYPE.js.map +1 -0
- package/cjs/ts-types/common.d.ts +13 -0
- package/cjs/ts-types/common.js +14 -0
- package/cjs/ts-types/common.js.map +1 -0
- package/cjs/ts-types/events.d.ts +14 -0
- package/cjs/ts-types/events.js +6 -0
- package/cjs/ts-types/events.js.map +1 -0
- package/cjs/ts-types/gantt-engine.d.ts +163 -0
- package/cjs/ts-types/gantt-engine.js +6 -0
- package/cjs/ts-types/gantt-engine.js.map +1 -0
- package/cjs/ts-types/index.d.ts +4 -0
- package/cjs/ts-types/index.js +22 -0
- package/cjs/ts-types/index.js.map +1 -0
- package/dist/vtable-gantt.js +53942 -0
- package/dist/vtable-gantt.min.js +1 -0
- package/es/Gantt.d.ts +111 -0
- package/es/Gantt.js +246 -0
- package/es/Gantt.js.map +1 -0
- package/es/data/DataSource.d.ts +9 -0
- package/es/data/DataSource.js +22 -0
- package/es/data/DataSource.js.map +1 -0
- package/es/env.d.ts +19 -0
- package/es/env.js +42 -0
- package/es/env.js.map +1 -0
- package/es/event/EventHandler.d.ts +47 -0
- package/es/event/EventHandler.js +119 -0
- package/es/event/EventHandler.js.map +1 -0
- package/es/event/EventTarget.d.ts +12 -0
- package/es/event/EventTarget.js +58 -0
- package/es/event/EventTarget.js.map +1 -0
- package/es/event/event-manager.d.ts +15 -0
- package/es/event/event-manager.js +78 -0
- package/es/event/event-manager.js.map +1 -0
- package/es/event/scroll.d.ts +22 -0
- package/es/event/scroll.js +126 -0
- package/es/event/scroll.js.map +1 -0
- package/es/gantt-helper.d.ts +28 -0
- package/es/gantt-helper.js +220 -0
- package/es/gantt-helper.js.map +1 -0
- package/es/index.d.ts +7 -0
- package/es/index.js +10 -0
- package/es/index.js.map +1 -0
- package/es/register.d.ts +1 -0
- package/es/register.js +1 -0
- package/es/register.js.map +1 -0
- package/es/scenegraph/frame-border.d.ts +9 -0
- package/es/scenegraph/frame-border.js +34 -0
- package/es/scenegraph/frame-border.js.map +1 -0
- package/es/scenegraph/ganttNode.d.ts +7 -0
- package/es/scenegraph/ganttNode.js +8 -0
- package/es/scenegraph/ganttNode.js.map +1 -0
- package/es/scenegraph/grid.d.ts +30 -0
- package/es/scenegraph/grid.js +122 -0
- package/es/scenegraph/grid.js.map +1 -0
- package/es/scenegraph/mark-line.d.ts +15 -0
- package/es/scenegraph/mark-line.js +58 -0
- package/es/scenegraph/mark-line.js.map +1 -0
- package/es/scenegraph/scenegraph.d.ts +41 -0
- package/es/scenegraph/scenegraph.js +116 -0
- package/es/scenegraph/scenegraph.js.map +1 -0
- package/es/scenegraph/scroll-bar.d.ts +19 -0
- package/es/scenegraph/scroll-bar.js +144 -0
- package/es/scenegraph/scroll-bar.js.map +1 -0
- package/es/scenegraph/task-bar.d.ts +24 -0
- package/es/scenegraph/task-bar.js +188 -0
- package/es/scenegraph/task-bar.js.map +1 -0
- package/es/scenegraph/timeline-header.d.ts +10 -0
- package/es/scenegraph/timeline-header.js +130 -0
- package/es/scenegraph/timeline-header.js.map +1 -0
- package/es/state/gantt-table-sync.d.ts +7 -0
- package/es/state/gantt-table-sync.js +51 -0
- package/es/state/gantt-table-sync.js.map +1 -0
- package/es/state/state-manager.d.ts +58 -0
- package/es/state/state-manager.js +219 -0
- package/es/state/state-manager.js.map +1 -0
- package/es/themes.d.ts +1 -0
- package/es/themes.js +1 -0
- package/es/themes.js.map +1 -0
- package/es/tools/debounce.d.ts +1 -0
- package/es/tools/debounce.js +43 -0
- package/es/tools/debounce.js.map +1 -0
- package/es/tools/index.d.ts +2 -0
- package/es/tools/index.js +4 -0
- package/es/tools/index.js.map +1 -0
- package/es/tools/isx.d.ts +16 -0
- package/es/tools/isx.js +80 -0
- package/es/tools/isx.js.map +1 -0
- package/es/tools/pixel-ratio.d.ts +2 -0
- package/es/tools/pixel-ratio.js +12 -0
- package/es/tools/pixel-ratio.js.map +1 -0
- package/es/tools/util.d.ts +7 -0
- package/es/tools/util.js +78 -0
- package/es/tools/util.js.map +1 -0
- package/es/ts-types/EVENT_TYPE.d.ts +5 -0
- package/es/ts-types/EVENT_TYPE.js +5 -0
- package/es/ts-types/EVENT_TYPE.js.map +1 -0
- package/es/ts-types/common.d.ts +13 -0
- package/es/ts-types/common.js +13 -0
- package/es/ts-types/common.js.map +1 -0
- package/es/ts-types/events.d.ts +14 -0
- package/es/ts-types/events.js +2 -0
- package/es/ts-types/events.js.map +1 -0
- package/es/ts-types/gantt-engine.d.ts +163 -0
- package/es/ts-types/gantt-engine.js +2 -0
- package/es/ts-types/gantt-engine.js.map +1 -0
- package/es/ts-types/index.d.ts +4 -0
- package/es/ts-types/index.js +8 -0
- package/es/ts-types/index.js.map +1 -0
- package/package.json +122 -0
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import { isValid } from "@visactor/vutils";
|
|
2
|
+
|
|
3
|
+
import { InteractionState, GANTT_EVENT_TYPE } from "../ts-types";
|
|
4
|
+
|
|
5
|
+
import { syncEditCellFromTable, syncResizeStateFromTable, syncScrollStateFromTable, syncScrollStateToTable, syncDragOrderFromTable, syncTreeChangeFromTable } from "./gantt-table-sync";
|
|
6
|
+
|
|
7
|
+
import { getTaskIndexByY } from "../gantt-helper";
|
|
8
|
+
|
|
9
|
+
import { debounce } from "../tools/debounce";
|
|
10
|
+
|
|
11
|
+
export class StateManager {
|
|
12
|
+
constructor(gantt) {
|
|
13
|
+
this.interactionState = InteractionState.default, this.resetInteractionState = debounce((() => {
|
|
14
|
+
this.updateInteractionState(InteractionState.default);
|
|
15
|
+
}), 100), this._gantt = gantt, this.scroll = {
|
|
16
|
+
horizontalBarPos: 0,
|
|
17
|
+
verticalBarPos: 0
|
|
18
|
+
}, this.moveTaskBar = {
|
|
19
|
+
targetStartX: null,
|
|
20
|
+
startX: null,
|
|
21
|
+
startY: null,
|
|
22
|
+
moving: !1,
|
|
23
|
+
target: null
|
|
24
|
+
}, this.hoverTaskBar = {
|
|
25
|
+
targetStartX: null,
|
|
26
|
+
startX: null,
|
|
27
|
+
target: null
|
|
28
|
+
}, this.resizeTaskBar = {
|
|
29
|
+
targetStartX: null,
|
|
30
|
+
startX: null,
|
|
31
|
+
startY: null,
|
|
32
|
+
target: null,
|
|
33
|
+
resizing: !1,
|
|
34
|
+
onIconName: ""
|
|
35
|
+
}, this.resizeTableWidth = {
|
|
36
|
+
lastX: null,
|
|
37
|
+
resizing: !1
|
|
38
|
+
}, this.updateVerticalScrollBar = this.updateVerticalScrollBar.bind(this), this.updateHorizontalScrollBar = this.updateHorizontalScrollBar.bind(this),
|
|
39
|
+
syncScrollStateFromTable(this._gantt), syncResizeStateFromTable(this._gantt), syncEditCellFromTable(this._gantt),
|
|
40
|
+
syncDragOrderFromTable(this._gantt), syncTreeChangeFromTable(this._gantt);
|
|
41
|
+
}
|
|
42
|
+
setScrollTop(top, triggerEvent = !0) {
|
|
43
|
+
const totalHeight = this._gantt.getAllRowsHeight();
|
|
44
|
+
top = Math.max(0, Math.min(top, totalHeight - this._gantt.scenegraph.height)), top = Math.ceil(top);
|
|
45
|
+
const oldVerticalBarPos = this.scroll.verticalBarPos;
|
|
46
|
+
this.scroll.verticalBarPos = top, isValid(this.scroll.verticalBarPos) && !isNaN(this.scroll.verticalBarPos) || (this.scroll.verticalBarPos = 0),
|
|
47
|
+
this._gantt.scenegraph.setY(-top);
|
|
48
|
+
const yRatio = top / (totalHeight - this._gantt.scenegraph.height);
|
|
49
|
+
this._gantt.scenegraph.scrollbarComponent.updateVerticalScrollBarPos(yRatio), oldVerticalBarPos !== top && triggerEvent && (syncScrollStateToTable(this._gantt),
|
|
50
|
+
this._gantt.fireListeners(GANTT_EVENT_TYPE.SCROLL, {
|
|
51
|
+
scrollTop: this.scroll.verticalBarPos,
|
|
52
|
+
scrollLeft: this.scroll.horizontalBarPos,
|
|
53
|
+
scrollDirection: "vertical",
|
|
54
|
+
scrollRatioY: yRatio
|
|
55
|
+
}));
|
|
56
|
+
}
|
|
57
|
+
setScrollLeft(left, triggerEvent = !0) {
|
|
58
|
+
const totalWidth = this._gantt.getAllColsWidth();
|
|
59
|
+
left = Math.max(0, Math.min(left, totalWidth - this._gantt.scenegraph.width)), left = Math.ceil(left);
|
|
60
|
+
const oldHorizontalBarPos = this.scroll.horizontalBarPos;
|
|
61
|
+
this.scroll.horizontalBarPos = left, isValid(this.scroll.horizontalBarPos) && !isNaN(this.scroll.horizontalBarPos) || (this.scroll.horizontalBarPos = 0),
|
|
62
|
+
this._gantt.scenegraph.setX(-left);
|
|
63
|
+
const xRatio = left / (totalWidth - this._gantt.scenegraph.width);
|
|
64
|
+
this._gantt.scenegraph.scrollbarComponent.updateHorizontalScrollBarPos(xRatio),
|
|
65
|
+
oldHorizontalBarPos !== left && triggerEvent && this._gantt.fireListeners(GANTT_EVENT_TYPE.SCROLL, {
|
|
66
|
+
scrollTop: this.scroll.verticalBarPos,
|
|
67
|
+
scrollLeft: this.scroll.horizontalBarPos,
|
|
68
|
+
scrollDirection: "horizontal",
|
|
69
|
+
scrollRatioX: xRatio
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
updateInteractionState(mode) {
|
|
73
|
+
if (this.interactionState === mode) return;
|
|
74
|
+
const oldState = this.interactionState;
|
|
75
|
+
this.interactionState = mode, oldState === InteractionState.scrolling && InteractionState.default;
|
|
76
|
+
}
|
|
77
|
+
updateVerticalScrollBar(yRatio) {
|
|
78
|
+
const totalHeight = this._gantt.getAllRowsHeight();
|
|
79
|
+
this.scroll.verticalBarPos;
|
|
80
|
+
this.scroll.verticalBarPos = Math.ceil(yRatio * (totalHeight - this._gantt.scenegraph.height)),
|
|
81
|
+
isValid(this.scroll.verticalBarPos) && !isNaN(this.scroll.verticalBarPos) || (this.scroll.verticalBarPos = 0),
|
|
82
|
+
this._gantt.scenegraph.setY(-this.scroll.verticalBarPos, 1 === yRatio), syncScrollStateToTable(this._gantt),
|
|
83
|
+
this._gantt.fireListeners(GANTT_EVENT_TYPE.SCROLL, {
|
|
84
|
+
scrollTop: this.scroll.verticalBarPos,
|
|
85
|
+
scrollLeft: this.scroll.horizontalBarPos,
|
|
86
|
+
scrollDirection: "vertical",
|
|
87
|
+
scrollRatioY: yRatio
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
updateHorizontalScrollBar(xRatio) {
|
|
91
|
+
const totalWidth = this._gantt.getAllColsWidth();
|
|
92
|
+
this.scroll.horizontalBarPos;
|
|
93
|
+
this.scroll.horizontalBarPos = Math.ceil(xRatio * (totalWidth - this._gantt.scenegraph.width)),
|
|
94
|
+
isValid(this.scroll.horizontalBarPos) && !isNaN(this.scroll.horizontalBarPos) || (this.scroll.horizontalBarPos = 0),
|
|
95
|
+
this._gantt.scenegraph.setX(-this.scroll.horizontalBarPos, 1 === xRatio), this._gantt.fireListeners(GANTT_EVENT_TYPE.SCROLL, {
|
|
96
|
+
scrollTop: this.scroll.verticalBarPos,
|
|
97
|
+
scrollLeft: this.scroll.horizontalBarPos,
|
|
98
|
+
scrollDirection: "horizontal",
|
|
99
|
+
scrollRatioY: xRatio
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
startMoveTaskBar(target, x, y) {
|
|
103
|
+
"task-bar-hover-shadow" === target.name && (target = target.parent), this.moveTaskBar.moving = !0,
|
|
104
|
+
this.moveTaskBar.target = target, this.moveTaskBar.targetStartX = target.attribute.x,
|
|
105
|
+
this.moveTaskBar.startX = x, this.moveTaskBar.startY = y;
|
|
106
|
+
}
|
|
107
|
+
isMoveingTaskBar() {
|
|
108
|
+
return this.moveTaskBar.moving;
|
|
109
|
+
}
|
|
110
|
+
endMoveTaskBar(x) {
|
|
111
|
+
const deltaX = x - this.moveTaskBar.startX, days = Math.round(deltaX / this._gantt.parsedOptions.colWidthPerDay), correctX = days * this._gantt.parsedOptions.colWidthPerDay, targetEndX = this.moveTaskBar.targetStartX + correctX;
|
|
112
|
+
this._gantt.stateManager.moveTaskBar.target.setAttribute("x", targetEndX);
|
|
113
|
+
const taskIndex = getTaskIndexByY(this.moveTaskBar.startY, this._gantt);
|
|
114
|
+
this._gantt.updateDateToTaskRecord("move", days, taskIndex), this.moveTaskBar.moving = !1,
|
|
115
|
+
this.moveTaskBar.target = null, this._gantt.scenegraph.updateNextFrame();
|
|
116
|
+
}
|
|
117
|
+
dealTaskBarMove(e) {
|
|
118
|
+
const target = this.moveTaskBar.target, x1 = this._gantt.eventManager.lastDragPointerXYOnWindow.x, dx = e.x - x1;
|
|
119
|
+
target.setAttribute("x", target.attribute.x + dx), this._gantt.scenegraph.updateNextFrame();
|
|
120
|
+
}
|
|
121
|
+
startResizeTaskBar(target, x, y, onIconName) {
|
|
122
|
+
this.resizeTaskBar.onIconName = onIconName, this.resizeTaskBar.resizing = !0, this.resizeTaskBar.target = target,
|
|
123
|
+
this.resizeTaskBar.targetStartX = target.attribute.x, this.resizeTaskBar.startX = x,
|
|
124
|
+
this.resizeTaskBar.startY = y;
|
|
125
|
+
}
|
|
126
|
+
isResizingTaskBar() {
|
|
127
|
+
return this.resizeTaskBar.resizing;
|
|
128
|
+
}
|
|
129
|
+
endResizeTaskBar(x) {
|
|
130
|
+
const direction = this._gantt.stateManager.resizeTaskBar.onIconName, deltaX = x - this.resizeTaskBar.startX;
|
|
131
|
+
let diff_days = Math.round(deltaX / this._gantt.parsedOptions.colWidthPerDay);
|
|
132
|
+
diff_days = "left" === direction ? -diff_days : diff_days;
|
|
133
|
+
const taskBarGroup = this._gantt.stateManager.resizeTaskBar.target, rect = this._gantt.stateManager.resizeTaskBar.target.barRect, progressRect = this._gantt.stateManager.resizeTaskBar.target.progressRect, taskIndex = getTaskIndexByY(this.resizeTaskBar.startY, this._gantt), {taskDays: taskDays, progress: progress} = this._gantt.getTaskInfoByTaskListIndex(taskIndex);
|
|
134
|
+
diff_days < 0 && taskDays + diff_days <= 0 && (diff_days = 1 - taskDays);
|
|
135
|
+
const correctX = ("left" === direction ? -diff_days : diff_days) * this._gantt.parsedOptions.colWidthPerDay, targetEndX = this.resizeTaskBar.targetStartX + correctX, taskBarSize = this._gantt.parsedOptions.colWidthPerDay * (taskDays + diff_days);
|
|
136
|
+
"left" === direction ? (taskBarGroup.setAttribute("x", targetEndX), taskBarGroup.setAttribute("width", taskBarSize),
|
|
137
|
+
null == rect || rect.setAttribute("width", taskBarGroup.attribute.width), null == progressRect || progressRect.setAttribute("width", progress / 100 * taskBarGroup.attribute.width),
|
|
138
|
+
this._gantt.updateDateToTaskRecord("start-move", -diff_days, taskIndex)) : "right" === direction && (taskBarGroup.setAttribute("width", taskBarSize),
|
|
139
|
+
null == rect || rect.setAttribute("width", taskBarGroup.attribute.width), null == progressRect || progressRect.setAttribute("width", progress / 100 * taskBarGroup.attribute.width),
|
|
140
|
+
this._gantt.updateDateToTaskRecord("end-move", diff_days, taskIndex)), this._gantt.scenegraph.taskBar.showHoverBar(taskBarGroup.attribute.x, taskBarGroup.attribute.y, taskBarGroup.attribute.width, taskBarGroup.attribute.height),
|
|
141
|
+
reCreateCustomNode(this._gantt, taskBarGroup, taskIndex), this.resizeTaskBar.resizing = !1,
|
|
142
|
+
this.resizeTaskBar.target = null, this._gantt.scenegraph.updateNextFrame();
|
|
143
|
+
}
|
|
144
|
+
dealTaskBarResize(e) {
|
|
145
|
+
const x1 = this._gantt.eventManager.lastDragPointerXYOnWindow.x, dx = e.x - x1, taskBarGroup = this._gantt.stateManager.resizeTaskBar.target, rect = taskBarGroup.barRect, progressRect = taskBarGroup.progressRect, textLabel = taskBarGroup.textLabel, progressField = this._gantt.parsedOptions.progressField, taskIndex = getTaskIndexByY(this.resizeTaskBar.startY, this._gantt), progress = this._gantt.getRecordByIndex(taskIndex)[progressField];
|
|
146
|
+
let diffWidth = "left" === this._gantt.stateManager.resizeTaskBar.onIconName ? -dx : dx, taskBarSize = taskBarGroup.attribute.width + diffWidth;
|
|
147
|
+
diffWidth < 0 && taskBarSize <= this._gantt.parsedOptions.colWidthPerDay && (diffWidth = this._gantt.parsedOptions.colWidthPerDay - taskBarGroup.attribute.width,
|
|
148
|
+
taskBarSize += diffWidth), taskBarGroup.setAttribute("width", taskBarSize), "left" === this._gantt.stateManager.resizeTaskBar.onIconName && taskBarGroup.setAttribute("x", taskBarGroup.attribute.x - diffWidth),
|
|
149
|
+
null == rect || rect.setAttribute("width", taskBarGroup.attribute.width), null == progressRect || progressRect.setAttribute("width", progress / 100 * taskBarGroup.attribute.width),
|
|
150
|
+
null == textLabel || textLabel.setAttribute("x", "center" === this._gantt.parsedOptions.taskBarLabelStyle.textAlign ? taskBarSize / 2 : "left" === this._gantt.parsedOptions.taskBarLabelStyle.textAlign ? 10 : taskBarSize - 10),
|
|
151
|
+
null == textLabel || textLabel.setAttribute("maxLineWidth", taskBarSize - 20);
|
|
152
|
+
const x = taskBarGroup.attribute.x, y = taskBarGroup.attribute.y, width = taskBarGroup.attribute.width, height = taskBarGroup.attribute.height;
|
|
153
|
+
this._gantt.scenegraph.taskBar.showHoverBar(x, y, width, height, this.resizeTaskBar.target),
|
|
154
|
+
reCreateCustomNode(this._gantt, taskBarGroup, taskIndex), this._gantt.scenegraph.updateNextFrame();
|
|
155
|
+
}
|
|
156
|
+
startResizeTableWidth(e) {
|
|
157
|
+
this.resizeTableWidth.resizing = !0, this.resizeTableWidth.lastX = e.pageX;
|
|
158
|
+
}
|
|
159
|
+
isResizingTableWidth() {
|
|
160
|
+
return this.resizeTableWidth.resizing;
|
|
161
|
+
}
|
|
162
|
+
endResizeTableWidth() {
|
|
163
|
+
this.resizeTableWidth.resizing = !1;
|
|
164
|
+
}
|
|
165
|
+
dealResizeTableWidth(e) {
|
|
166
|
+
var _a, _b;
|
|
167
|
+
if (!this.resizeTableWidth.resizing) return;
|
|
168
|
+
const deltaX = e.pageX - this.resizeTableWidth.lastX;
|
|
169
|
+
if (Math.abs(deltaX) >= 1) {
|
|
170
|
+
let width = this._gantt.taskTableWidth + deltaX;
|
|
171
|
+
const maxWidth = Math.min(this._gantt.taskListTableInstance.getAllColsWidth() + 2 * this._gantt.tableX, null !== (_a = this._gantt.options.taskListTable.maxWidth) && void 0 !== _a ? _a : 1e5), minWidth = Math.max(2 * this._gantt.tableX, null !== (_b = this._gantt.options.taskListTable.minWidth) && void 0 !== _b ? _b : 0);
|
|
172
|
+
deltaX > 0 && width > maxWidth && (width = maxWidth), deltaX < 0 && width < minWidth && (width = minWidth),
|
|
173
|
+
this._gantt.taskTableWidth = width, this._gantt.element.style.left = this._gantt.taskTableWidth ? `${this._gantt.taskTableWidth}px` : "0px",
|
|
174
|
+
this._gantt.resizeLine.style.left = this._gantt.taskTableWidth ? this._gantt.taskTableWidth - 7 + "px" : "0px",
|
|
175
|
+
this._gantt._resize(), this.resizeTableWidth.lastX = e.pageX;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
showTaskBarHover(e) {
|
|
179
|
+
const taskBarTarget = e.detailPath.find((pathNode => "task-bar" === pathNode.name));
|
|
180
|
+
if (this._gantt.stateManager.hoverTaskBar.target !== taskBarTarget) {
|
|
181
|
+
this._gantt.stateManager.hoverTaskBar.target = taskBarTarget;
|
|
182
|
+
const target = this._gantt.stateManager.hoverTaskBar.target, x = target.attribute.x, y = target.attribute.y, width = target.attribute.width, height = target.attribute.height;
|
|
183
|
+
this._gantt.scenegraph.taskBar.showHoverBar(x, y, width, height, taskBarTarget),
|
|
184
|
+
this._gantt.scenegraph.updateNextFrame();
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
hideTaskBarHover() {
|
|
188
|
+
this._gantt.stateManager.hoverTaskBar.target = null, this._gantt.scenegraph.taskBar.hideHoverBar(),
|
|
189
|
+
this._gantt.scenegraph.updateNextFrame();
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
function reCreateCustomNode(gantt, taskBarGroup, taskIndex) {
|
|
194
|
+
const taskBarCustomLayout = gantt.parsedOptions.taskBarCustomLayout;
|
|
195
|
+
if (taskBarCustomLayout) {
|
|
196
|
+
let customLayoutObj;
|
|
197
|
+
if ("function" == typeof taskBarCustomLayout) {
|
|
198
|
+
const {startDate: startDate, endDate: endDate, taskDays: taskDays, progress: progress, taskRecord: taskRecord} = gantt.getTaskInfoByTaskListIndex(taskIndex);
|
|
199
|
+
customLayoutObj = taskBarCustomLayout({
|
|
200
|
+
width: taskBarGroup.attribute.width,
|
|
201
|
+
height: taskBarGroup.attribute.height,
|
|
202
|
+
index: taskIndex,
|
|
203
|
+
startDate: startDate,
|
|
204
|
+
endDate: endDate,
|
|
205
|
+
taskDays: taskDays,
|
|
206
|
+
progress: progress,
|
|
207
|
+
taskRecord: taskRecord,
|
|
208
|
+
ganttInstance: gantt
|
|
209
|
+
});
|
|
210
|
+
} else customLayoutObj = taskBarCustomLayout;
|
|
211
|
+
if (customLayoutObj) {
|
|
212
|
+
const rootContainer = customLayoutObj.rootContainer;
|
|
213
|
+
rootContainer.name = "task-bar-custom-render";
|
|
214
|
+
const oldCustomIndex = taskBarGroup.children.findIndex((node => "task-bar-custom-render" === node.name)), oldCustomNode = taskBarGroup.children[oldCustomIndex];
|
|
215
|
+
taskBarGroup.removeChild(oldCustomNode), taskBarGroup.insertInto(rootContainer, oldCustomIndex);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=state-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/state/state-manager.ts"],"names":[],"mappings":"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","file":"state-manager.js","sourcesContent":["import { isValid } from '@visactor/vutils';\nimport type { Gantt } from '../Gantt';\nimport { InteractionState, GANTT_EVENT_TYPE } from '../ts-types';\nimport type { VRender } from '@visactor/vtable';\nimport {\n syncEditCellFromTable,\n syncResizeStateFromTable,\n syncScrollStateFromTable,\n syncScrollStateToTable,\n syncDragOrderFromTable,\n syncTreeChangeFromTable\n} from './gantt-table-sync';\nimport { getTaskIndexByY } from '../gantt-helper';\nimport { debounce } from '../tools/debounce';\nimport type { GanttTaskBarNode } from '../scenegraph/ganttNode';\nexport class StateManager {\n _gantt: Gantt;\n\n scroll: {\n horizontalBarPos: number;\n verticalBarPos: number;\n };\n fastScrolling: boolean;\n /**\n * Default 默认展示\n * grabing 拖拽中\n * -Resize column 改变列宽\n * -column move 调整列顺序\n * -drag select 拖拽多选\n * Scrolling 滚动中\n */\n interactionState: InteractionState = InteractionState.default;\n\n moveTaskBar: {\n /** x坐标是相对table内坐标 */\n startX: number;\n startY: number;\n targetStartX: number;\n moving: boolean;\n target: GanttTaskBarNode;\n };\n\n hoverTaskBar: {\n /** x坐标是相对table内坐标 */\n startX: number;\n targetStartX: number;\n target: GanttTaskBarNode;\n };\n resizeTaskBar: {\n /** x坐标是相对table内坐标 */\n startX: number;\n startY: number;\n targetStartX: number;\n target: GanttTaskBarNode;\n resizing: boolean;\n onIconName: string;\n };\n resizeTableWidth: {\n /** x坐标是相对table内坐标 */\n lastX: number;\n resizing: boolean;\n };\n\n // 供滚动重置为default使用\n resetInteractionState = debounce(() => {\n this.updateInteractionState(InteractionState.default);\n }, 100);\n constructor(gantt: Gantt) {\n this._gantt = gantt;\n this.scroll = {\n horizontalBarPos: 0,\n verticalBarPos: 0\n };\n this.moveTaskBar = {\n targetStartX: null,\n startX: null,\n startY: null,\n moving: false,\n target: null\n };\n\n this.hoverTaskBar = {\n targetStartX: null,\n startX: null,\n target: null\n };\n this.resizeTaskBar = {\n targetStartX: null,\n startX: null,\n startY: null,\n target: null,\n resizing: false,\n onIconName: ''\n };\n this.resizeTableWidth = {\n lastX: null,\n resizing: false\n };\n\n this.updateVerticalScrollBar = this.updateVerticalScrollBar.bind(this);\n this.updateHorizontalScrollBar = this.updateHorizontalScrollBar.bind(this);\n\n syncScrollStateFromTable(this._gantt);\n syncResizeStateFromTable(this._gantt);\n syncEditCellFromTable(this._gantt);\n syncDragOrderFromTable(this._gantt);\n syncTreeChangeFromTable(this._gantt);\n }\n\n setScrollTop(top: number, triggerEvent: boolean = true) {\n // 矫正top值范围\n const totalHeight = this._gantt.getAllRowsHeight();\n top = Math.max(0, Math.min(top, totalHeight - this._gantt.scenegraph.height));\n top = Math.ceil(top);\n const oldVerticalBarPos = this.scroll.verticalBarPos;\n // this._gantt.stateManager.updateSelectPos(-1, -1);\n this.scroll.verticalBarPos = top;\n if (!isValid(this.scroll.verticalBarPos) || isNaN(this.scroll.verticalBarPos)) {\n this.scroll.verticalBarPos = 0;\n }\n // 设置scenegraph坐标\n this._gantt.scenegraph.setY(-top);\n\n // 更新scrollbar位置\n const yRatio = top / (totalHeight - this._gantt.scenegraph.height);\n this._gantt.scenegraph.scrollbarComponent.updateVerticalScrollBarPos(yRatio);\n\n if (oldVerticalBarPos !== top && triggerEvent) {\n syncScrollStateToTable(this._gantt);\n this._gantt.fireListeners(GANTT_EVENT_TYPE.SCROLL, {\n scrollTop: this.scroll.verticalBarPos,\n scrollLeft: this.scroll.horizontalBarPos,\n // scrollHeight: this._gantt.theme.scrollStyle?.width,\n // scrollWidth: this._gantt.theme.scrollStyle?.width,\n // viewHeight: this._gantt.tableNoFrameHeight,\n // viewWidth: this._gantt.tableNoFrameWidth,\n scrollDirection: 'vertical',\n scrollRatioY: yRatio\n });\n }\n }\n setScrollLeft(left: number, triggerEvent: boolean = true) {\n // 矫正left值范围\n const totalWidth = this._gantt.getAllColsWidth();\n\n left = Math.max(0, Math.min(left, totalWidth - this._gantt.scenegraph.width));\n left = Math.ceil(left);\n // 滚动期间清空选中清空\n // if (left !== this.scroll.horizontalBarPos) {\n // this.updateHoverPos(-1, -1);\n // }\n // this._gantt.stateManager.updateSelectPos(-1, -1);\n const oldHorizontalBarPos = this.scroll.horizontalBarPos;\n this.scroll.horizontalBarPos = left;\n if (!isValid(this.scroll.horizontalBarPos) || isNaN(this.scroll.horizontalBarPos)) {\n this.scroll.horizontalBarPos = 0;\n }\n\n // 设置scenegraph坐标\n this._gantt.scenegraph.setX(-left);\n\n // 更新scrollbar位置\n const xRatio = left / (totalWidth - this._gantt.scenegraph.width);\n this._gantt.scenegraph.scrollbarComponent.updateHorizontalScrollBarPos(xRatio);\n\n if (oldHorizontalBarPos !== left && triggerEvent) {\n this._gantt.fireListeners(GANTT_EVENT_TYPE.SCROLL, {\n scrollTop: this.scroll.verticalBarPos,\n scrollLeft: this.scroll.horizontalBarPos,\n // scrollHeight: this._gantt.theme.scrollStyle?.width,\n // scrollWidth: this._gantt.theme.scrollStyle?.width,\n // viewHeight: this._gantt.tableNoFrameHeight,\n // viewWidth: this._gantt.tableNoFrameWidth,\n scrollDirection: 'horizontal',\n scrollRatioX: xRatio\n });\n }\n }\n\n updateInteractionState(mode: InteractionState) {\n if (this.interactionState === mode) {\n return;\n }\n const oldState = this.interactionState;\n this.interactionState = mode;\n // 处理mode 更新后逻辑\n if (oldState === InteractionState.scrolling && mode === InteractionState.default) {\n // this.table.scenegraph.stage.disableDirtyBounds();\n // this.table.scenegraph.stage.render();\n // this.table.scenegraph.stage.enableDirtyBounds();\n }\n }\n\n updateVerticalScrollBar(yRatio: number) {\n const totalHeight = this._gantt.getAllRowsHeight();\n const oldVerticalBarPos = this.scroll.verticalBarPos;\n this.scroll.verticalBarPos = Math.ceil(yRatio * (totalHeight - this._gantt.scenegraph.height));\n if (!isValid(this.scroll.verticalBarPos) || isNaN(this.scroll.verticalBarPos)) {\n this.scroll.verticalBarPos = 0;\n }\n this._gantt.scenegraph.setY(-this.scroll.verticalBarPos, yRatio === 1);\n syncScrollStateToTable(this._gantt);\n this._gantt.fireListeners(GANTT_EVENT_TYPE.SCROLL, {\n scrollTop: this.scroll.verticalBarPos,\n scrollLeft: this.scroll.horizontalBarPos,\n // scrollHeight: this.table.theme.scrollStyle?.width,\n // scrollWidth: this.table.theme.scrollStyle?.width,\n // viewHeight: this.table.tableNoFrameHeight,\n // viewWidth: this.table.tableNoFrameWidth,\n scrollDirection: 'vertical',\n scrollRatioY: yRatio\n });\n }\n updateHorizontalScrollBar(xRatio: number) {\n const totalWidth = this._gantt.getAllColsWidth();\n const oldHorizontalBarPos = this.scroll.horizontalBarPos;\n this.scroll.horizontalBarPos = Math.ceil(xRatio * (totalWidth - this._gantt.scenegraph.width));\n if (!isValid(this.scroll.horizontalBarPos) || isNaN(this.scroll.horizontalBarPos)) {\n this.scroll.horizontalBarPos = 0;\n }\n this._gantt.scenegraph.setX(-this.scroll.horizontalBarPos, xRatio === 1);\n this._gantt.fireListeners(GANTT_EVENT_TYPE.SCROLL, {\n scrollTop: this.scroll.verticalBarPos,\n scrollLeft: this.scroll.horizontalBarPos,\n // scrollHeight: this.table.theme.scrollStyle?.width,\n // scrollWidth: this.table.theme.scrollStyle?.width,\n // viewHeight: this.table.tableNoFrameHeight,\n // viewWidth: this.table.tableNoFrameWidth,\n scrollDirection: 'horizontal',\n scrollRatioY: xRatio\n });\n // this.scroll.horizontalBarPos -= this._gantt.scenegraph.proxy.deltaX;\n // this._gantt.scenegraph.proxy.deltaX = 0;\n\n // this._gantt.fireListeners(TABLE_EVENT_TYPE.SCROLL, {\n // scrollTop: this.scroll.verticalBarPos,\n // scrollLeft: this.scroll.horizontalBarPos,\n // scrollHeight: this._gantt.theme.scrollStyle?.width,\n // scrollWidth: this._gantt.theme.scrollStyle?.width,\n // viewHeight: this._gantt.tableNoFrameHeight,\n // viewWidth: this._gantt.tableNoFrameWidth,\n // scrollDirection: 'horizontal',\n // scrollRatioX: xRatio\n // });\n\n // if (oldHorizontalBarPos !== this.scroll.horizontalBarPos) {\n // this.checkHorizontalScrollBarEnd();\n // }\n }\n\n startMoveTaskBar(target: GanttTaskBarNode, x: number, y: number) {\n if (target.name === 'task-bar-hover-shadow') {\n target = target.parent;\n }\n this.moveTaskBar.moving = true;\n this.moveTaskBar.target = target;\n this.moveTaskBar.targetStartX = target.attribute.x;\n this.moveTaskBar.startX = x;\n this.moveTaskBar.startY = y;\n }\n\n isMoveingTaskBar() {\n return this.moveTaskBar.moving;\n }\n endMoveTaskBar(x: number) {\n const deltaX = x - this.moveTaskBar.startX;\n const days = Math.round(deltaX / this._gantt.parsedOptions.colWidthPerDay);\n const correctX = days * this._gantt.parsedOptions.colWidthPerDay;\n const targetEndX = this.moveTaskBar.targetStartX + correctX;\n this._gantt.stateManager.moveTaskBar.target.setAttribute('x', targetEndX);\n const taskIndex = getTaskIndexByY(this.moveTaskBar.startY, this._gantt);\n this._gantt.updateDateToTaskRecord('move', days, taskIndex);\n this.moveTaskBar.moving = false;\n this.moveTaskBar.target = null;\n this._gantt.scenegraph.updateNextFrame();\n }\n dealTaskBarMove(e: VRender.FederatedPointerEvent) {\n const target = this.moveTaskBar.target;\n const x1 = this._gantt.eventManager.lastDragPointerXYOnWindow.x;\n const x2 = e.x;\n const dx = x2 - x1;\n target.setAttribute('x', target.attribute.x + dx);\n this._gantt.scenegraph.updateNextFrame();\n\n //\n }\n //#region 调整拖拽任务条的大小\n startResizeTaskBar(target: VRender.Group, x: number, y: number, onIconName: string) {\n // if (target.name === 'task-bar-hover-shadow') {\n // target = target.parent.parent;\n // }\n this.resizeTaskBar.onIconName = onIconName;\n this.resizeTaskBar.resizing = true;\n this.resizeTaskBar.target = target;\n this.resizeTaskBar.targetStartX = target.attribute.x;\n this.resizeTaskBar.startX = x;\n this.resizeTaskBar.startY = y;\n }\n isResizingTaskBar() {\n return this.resizeTaskBar.resizing;\n }\n endResizeTaskBar(x: number) {\n const direction = this._gantt.stateManager.resizeTaskBar.onIconName;\n const deltaX = x - this.resizeTaskBar.startX;\n let diff_days = Math.round(deltaX / this._gantt.parsedOptions.colWidthPerDay);\n diff_days = direction === 'left' ? -diff_days : diff_days;\n\n const taskBarGroup = this._gantt.stateManager.resizeTaskBar.target;\n const rect = this._gantt.stateManager.resizeTaskBar.target.barRect;\n const progressRect = this._gantt.stateManager.resizeTaskBar.target.progressRect;\n const taskIndex = getTaskIndexByY(this.resizeTaskBar.startY, this._gantt);\n const { taskDays, progress } = this._gantt.getTaskInfoByTaskListIndex(taskIndex);\n if (diff_days < 0 && taskDays + diff_days <= 0) {\n diff_days = 1 - taskDays;\n }\n const correctX = (direction === 'left' ? -diff_days : diff_days) * this._gantt.parsedOptions.colWidthPerDay;\n const targetEndX = this.resizeTaskBar.targetStartX + correctX;\n\n const taskBarSize = this._gantt.parsedOptions.colWidthPerDay * (taskDays + diff_days);\n if (direction === 'left') {\n taskBarGroup.setAttribute('x', targetEndX);\n taskBarGroup.setAttribute('width', taskBarSize);\n rect?.setAttribute('width', taskBarGroup.attribute.width);\n progressRect?.setAttribute('width', (progress / 100) * taskBarGroup.attribute.width);\n this._gantt.updateDateToTaskRecord('start-move', -diff_days, taskIndex);\n } else if (direction === 'right') {\n taskBarGroup.setAttribute('width', taskBarSize);\n rect?.setAttribute('width', taskBarGroup.attribute.width);\n progressRect?.setAttribute('width', (progress / 100) * taskBarGroup.attribute.width);\n this._gantt.updateDateToTaskRecord('end-move', diff_days, taskIndex);\n }\n this._gantt.scenegraph.taskBar.showHoverBar(\n taskBarGroup.attribute.x,\n taskBarGroup.attribute.y,\n taskBarGroup.attribute.width,\n taskBarGroup.attribute.height\n );\n reCreateCustomNode(this._gantt, taskBarGroup, taskIndex);\n this.resizeTaskBar.resizing = false;\n this.resizeTaskBar.target = null;\n this._gantt.scenegraph.updateNextFrame();\n }\n dealTaskBarResize(e: VRender.FederatedPointerEvent) {\n const x1 = this._gantt.eventManager.lastDragPointerXYOnWindow.x;\n const x2 = e.x;\n const dx = x2 - x1;\n // debugger;\n const taskBarGroup = this._gantt.stateManager.resizeTaskBar.target;\n const rect = taskBarGroup.barRect;\n const progressRect = taskBarGroup.progressRect;\n const textLabel = taskBarGroup.textLabel;\n\n const progressField = this._gantt.parsedOptions.progressField;\n const taskIndex = getTaskIndexByY(this.resizeTaskBar.startY, this._gantt);\n const taskRecord = this._gantt.getRecordByIndex(taskIndex);\n const progress = taskRecord[progressField];\n\n let diffWidth = this._gantt.stateManager.resizeTaskBar.onIconName === 'left' ? -dx : dx;\n let taskBarSize = taskBarGroup.attribute.width + diffWidth;\n if (diffWidth < 0 && taskBarSize <= this._gantt.parsedOptions.colWidthPerDay) {\n diffWidth = this._gantt.parsedOptions.colWidthPerDay - taskBarGroup.attribute.width;\n taskBarSize += diffWidth;\n }\n\n taskBarGroup.setAttribute('width', taskBarSize);\n if (this._gantt.stateManager.resizeTaskBar.onIconName === 'left') {\n taskBarGroup.setAttribute('x', taskBarGroup.attribute.x - diffWidth);\n }\n\n rect?.setAttribute('width', taskBarGroup.attribute.width);\n progressRect?.setAttribute('width', (progress / 100) * taskBarGroup.attribute.width);\n textLabel?.setAttribute(\n 'x',\n this._gantt.parsedOptions.taskBarLabelStyle.textAlign === 'center'\n ? taskBarSize / 2\n : this._gantt.parsedOptions.taskBarLabelStyle.textAlign === 'left'\n ? 10\n : taskBarSize - 10\n );\n textLabel?.setAttribute('maxLineWidth', taskBarSize - 20);\n\n const x = taskBarGroup.attribute.x;\n const y = taskBarGroup.attribute.y;\n const width = taskBarGroup.attribute.width;\n const height = taskBarGroup.attribute.height;\n this._gantt.scenegraph.taskBar.showHoverBar(x, y, width, height, this.resizeTaskBar.target);\n\n reCreateCustomNode(this._gantt, taskBarGroup, taskIndex);\n this._gantt.scenegraph.updateNextFrame();\n //\n }\n //#endregion\n\n //#region 调整左侧任务列表表格整体的宽度\n startResizeTableWidth(e: MouseEvent) {\n this.resizeTableWidth.resizing = true;\n this.resizeTableWidth.lastX = e.pageX;\n //this.resizeTableWidth.startWidth = this._gantt.tableNoFrameWidth;\n }\n isResizingTableWidth() {\n return this.resizeTableWidth.resizing;\n }\n endResizeTableWidth() {\n this.resizeTableWidth.resizing = false;\n }\n\n dealResizeTableWidth(e: MouseEvent) {\n if (!this.resizeTableWidth.resizing) {\n return;\n }\n const deltaX = e.pageX - this.resizeTableWidth.lastX;\n if (Math.abs(deltaX) >= 1) {\n const startWidth = this._gantt.taskTableWidth;\n let width = startWidth + deltaX;\n const maxWidth = Math.min(\n this._gantt.taskListTableInstance.getAllColsWidth() + this._gantt.tableX * 2,\n this._gantt.options.taskListTable.maxWidth ?? 100000\n );\n const minWidth = Math.max(this._gantt.tableX * 2, this._gantt.options.taskListTable.minWidth ?? 0);\n if (deltaX > 0 && width > maxWidth) {\n width = maxWidth;\n }\n if (deltaX < 0 && width < minWidth) {\n width = minWidth;\n }\n this._gantt.taskTableWidth = width;\n this._gantt.element.style.left = this._gantt.taskTableWidth ? `${this._gantt.taskTableWidth}px` : '0px';\n this._gantt.resizeLine.style.left = this._gantt.taskTableWidth ? `${this._gantt.taskTableWidth - 7}px` : '0px';\n this._gantt._resize();\n this.resizeTableWidth.lastX = e.pageX;\n }\n }\n //#endregion\n\n showTaskBarHover(e: VRender.FederatedPointerEvent) {\n // const taskBarTarget =\n // e.target?.name === 'task-bar-hover-shadow-left-icon' || e.target?.name === 'task-bar-hover-shadow-right-icon'\n // ? e.target.parent //转成父级元素task-bar-hover-shadow 后面逻辑需要宽高值\n // : e.target;\n const taskBarTarget = e.detailPath.find((pathNode: any) => {\n return pathNode.name === 'task-bar'; // || pathNode.name === 'task-bar-hover-shadow';\n }) as any;\n if (this._gantt.stateManager.hoverTaskBar.target !== taskBarTarget) {\n this._gantt.stateManager.hoverTaskBar.target = taskBarTarget;\n const target = this._gantt.stateManager.hoverTaskBar.target;\n const x = target.attribute.x;\n const y = target.attribute.y;\n const width = target.attribute.width;\n const height = target.attribute.height;\n this._gantt.scenegraph.taskBar.showHoverBar(x, y, width, height, taskBarTarget);\n this._gantt.scenegraph.updateNextFrame();\n }\n //\n }\n hideTaskBarHover() {\n this._gantt.stateManager.hoverTaskBar.target = null;\n this._gantt.scenegraph.taskBar.hideHoverBar();\n this._gantt.scenegraph.updateNextFrame();\n }\n}\n\nfunction reCreateCustomNode(gantt: Gantt, taskBarGroup: VRender.Group, taskIndex: number) {\n const taskBarCustomLayout = gantt.parsedOptions.taskBarCustomLayout;\n if (taskBarCustomLayout) {\n let customLayoutObj;\n if (typeof taskBarCustomLayout === 'function') {\n const { startDate, endDate, taskDays, progress, taskRecord } = gantt.getTaskInfoByTaskListIndex(taskIndex);\n const arg = {\n width: taskBarGroup.attribute.width,\n height: taskBarGroup.attribute.height,\n index: taskIndex,\n startDate,\n endDate,\n taskDays,\n progress,\n taskRecord,\n ganttInstance: gantt\n };\n customLayoutObj = taskBarCustomLayout(arg);\n } else {\n customLayoutObj = taskBarCustomLayout;\n }\n if (customLayoutObj) {\n const rootContainer = customLayoutObj.rootContainer;\n rootContainer.name = 'task-bar-custom-render';\n const oldCustomIndex = taskBarGroup.children.findIndex((node: any) => {\n return node.name === 'task-bar-custom-render';\n });\n const oldCustomNode = taskBarGroup.children[oldCustomIndex] as VRender.Group;\n taskBarGroup.removeChild(oldCustomNode);\n taskBarGroup.insertInto(rootContainer, oldCustomIndex);\n }\n }\n}\n"]}
|
package/es/themes.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
package/es/themes.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=themes.js.map
|
package/es/themes.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/themes.ts"],"names":[],"mappings":"","file":"themes.js","sourcesContent":["// /* eslint-disable sort-imports */\n// import { extend, getIgnoreCase } from './tools/helper';\n// import darkTheme from './themes/DARK';\n// import brightTheme from './themes/BRIGHT';\n// import arcoTheme from './themes/ARCO';\n// import defaultTheme from './themes/DEFAULT';\n// import materialDesignTheme from './themes/SIMPLIFY';\n// import { themes as plugins } from './plugins/themes';\n// import { TableTheme } from './themes/theme';\n// import type { ITableThemeDefine } from './ts-types';\n// export const DARK = new TableTheme(darkTheme, darkTheme);\n// export const BRIGHT = new TableTheme(brightTheme, brightTheme);\n// export const ARCO = new TableTheme(arcoTheme, arcoTheme);\n// export const DEFAULT = new TableTheme(defaultTheme, defaultTheme);\n// export const SIMPLIFY = new TableTheme(materialDesignTheme, materialDesignTheme);\n\n// const builtin: { [key: string]: TableTheme } = {\n// DEFAULT,\n// SIMPLIFY,\n// ARCO,\n// DARK,\n// BRIGHT\n// };\n// // let defTheme = DEFAULT;\n// export const theme = { TableTheme };\n// export function of(value: ITableThemeDefine | string | undefined | null): TableTheme | null {\n// if (!value) {\n// return null;\n// }\n// if (typeof value === 'string') {\n// const t = getIgnoreCase(get(), value);\n// if (t) {\n// if (t instanceof TableTheme) {\n// return t;\n// }\n// return new TableTheme(t, t);\n// }\n// return null;\n// }\n// if (value instanceof TableTheme) {\n// return value;\n// }\n// return new TableTheme(value, value);\n// }\n\n// export function get(): { [key: string]: TableTheme } {\n// return extend(builtin, plugins);\n// }\n// export { ITableThemeDefine };\n// export default {\n// DARK,\n// BRIGHT,\n// ARCO,\n// DEFAULT,\n// SIMPLIFY,\n// theme,\n// of,\n// get\n// };\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function debounce(func: Function, wait?: number, options?: any): (this: any, ...args: any) => any;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { isObject } from "./isx";
|
|
2
|
+
|
|
3
|
+
export function debounce(func, wait, options) {
|
|
4
|
+
let lastArgs, lastThis, maxWait, result, timerId, lastCallTime, lastInvokeTime = 0, maxing = !1, leading = !1, trailing = !0;
|
|
5
|
+
const useRAF = !wait && 0 !== wait && "function" == typeof requestAnimationFrame;
|
|
6
|
+
if ("function" != typeof func) throw new TypeError("Expected a function");
|
|
7
|
+
function invokeFunc(time) {
|
|
8
|
+
const args = lastArgs, thisArg = lastThis;
|
|
9
|
+
return lastThis = void 0, lastArgs = void 0, lastInvokeTime = time, result = func.apply(thisArg, args),
|
|
10
|
+
result;
|
|
11
|
+
}
|
|
12
|
+
function startTimer(pendingFunc, wait) {
|
|
13
|
+
return useRAF ? requestAnimationFrame(pendingFunc) : setTimeout(pendingFunc, wait);
|
|
14
|
+
}
|
|
15
|
+
function shouldInvoke(time) {
|
|
16
|
+
const timeSinceLastCall = time - lastCallTime;
|
|
17
|
+
return void 0 === lastCallTime || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && time - lastInvokeTime >= maxWait;
|
|
18
|
+
}
|
|
19
|
+
function timerExpired() {
|
|
20
|
+
const time = Date.now();
|
|
21
|
+
if (shouldInvoke(time)) return function(time) {
|
|
22
|
+
return timerId = void 0, trailing && lastArgs ? invokeFunc(time) : (lastThis = void 0,
|
|
23
|
+
lastArgs = void 0, result);
|
|
24
|
+
}(time);
|
|
25
|
+
timerId = startTimer(timerExpired, function(time) {
|
|
26
|
+
const timeSinceLastInvoke = time - lastInvokeTime, timeWaiting = wait && -(time - lastCallTime);
|
|
27
|
+
return maxing ? Math.min(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting;
|
|
28
|
+
}(time));
|
|
29
|
+
}
|
|
30
|
+
return wait = +wait || 0, isObject(options) && (leading = !!options.leading, maxing = "maxWait" in options,
|
|
31
|
+
maxing && (maxWait = Math.max(+options.maxWait || 0, wait)), trailing = "trailing" in options ? !!options.trailing : trailing),
|
|
32
|
+
function(...args) {
|
|
33
|
+
const time = Date.now(), isInvoking = shouldInvoke(time);
|
|
34
|
+
if (lastArgs = args, lastThis = this, lastCallTime = time, isInvoking) {
|
|
35
|
+
if (void 0 === timerId) return function(time) {
|
|
36
|
+
return lastInvokeTime = time, timerId = startTimer(timerExpired, wait), leading ? invokeFunc(time) : result;
|
|
37
|
+
}(lastCallTime);
|
|
38
|
+
if (maxing) return timerId = startTimer(timerExpired, wait), invokeFunc(lastCallTime);
|
|
39
|
+
}
|
|
40
|
+
return void 0 === timerId && (timerId = startTimer(timerExpired, wait)), result;
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=debounce.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/tools/debounce.ts"],"names":[],"mappings":"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","file":"debounce.js","sourcesContent":["import { isObject } from './isx';\n\nexport function debounce(func: Function, wait?: number, options?: any) {\n let lastArgs: any;\n let lastThis: any;\n let maxWait: number; // 最长等待时间\n let result: any; // 存储 func 函数的返回值\n let timerId: number | undefined; // 定时器 id\n let lastCallTime: number; // 最近一次 执行 debounced 函数时的时间\n\n // 最近一次执行 func 时的时间戳\n let lastInvokeTime = 0;\n // options 是否 传入了 maxWait\n let maxing = false;\n // 是否在延迟开始前调用函数\n let leading = false;\n // 是否在延迟结束后调用函数\n let trailing = true;\n\n const useRAF = !wait && wait !== 0 && typeof requestAnimationFrame === 'function';\n\n if (typeof func !== 'function') {\n throw new TypeError('Expected a function');\n }\n\n wait = +(wait as number) || 0;\n\n if (isObject(options)) {\n leading = !!options.leading;\n\n maxing = 'maxWait' in options;\n if (maxing) {\n maxWait = Math.max(+options.maxWait || 0, wait);\n }\n\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time: number) {\n const args = lastArgs;\n const thisArg = lastThis;\n\n lastThis = undefined;\n lastArgs = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n // 开启定时器\n function startTimer(pendingFunc: any, wait: number) {\n if (useRAF) {\n return requestAnimationFrame(pendingFunc);\n }\n return setTimeout(pendingFunc, wait);\n }\n\n // 清除定时器\n // function cancelTimer(id: number) {\n // if (useRAF) {\n // return cancelAnimationFrame(id);\n // }\n // clearTimeout(id);\n // }\n\n // 在延迟开始前调用\n function leadingEdge(time: number) {\n // 记录 函数被调用时 的时间戳\n lastInvokeTime = time;\n //@ts-ignore\n timerId = startTimer(timerExpired, wait);\n return leading ? invokeFunc(time) : result;\n }\n\n // 在延迟结束后调用\n function trailingEdge(time: number) {\n timerId = undefined;\n\n // lastArgs 在 debounced 函数执行时赋值\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n\n // 重置参数和作用域\n lastThis = undefined;\n lastArgs = undefined;\n return result;\n }\n\n function remainingWait(time: number) {\n // 计算 time 与最近一次调用 debounced 函数的时间差\n const timeSinceLastCall = time - lastCallTime;\n // 计算 time 与最近一次调用 func 函数的时间差\n const timeSinceLastInvoke = time - lastInvokeTime;\n // 用 wait 减去已经等待的时间\n const timeWaiting = wait && -timeSinceLastCall;\n\n return maxing ? Math.min(timeWaiting as number, maxWait - timeSinceLastInvoke) : timeWaiting;\n }\n\n // 是否可以执行函数\n function shouldInvoke(time: number) {\n // 计算 time 与最近一次调用 debounced 函数的时间差\n const timeSinceLastCall = time - lastCallTime;\n // 计算 time 与最近一次调用 func 函数的时间差\n const timeSinceLastInvoke = time - lastInvokeTime;\n\n return (\n // 是不是第一次执行 debouned 函数\n lastCallTime === undefined ||\n timeSinceLastCall >= (wait as number) ||\n timeSinceLastCall < 0 ||\n (maxing && timeSinceLastInvoke >= maxWait)\n );\n }\n\n // 封装执行函数,用于 wait 延迟结束后执行\n function timerExpired() {\n const time = Date.now();\n // 根据时间来判断是否可以执行 func 函数\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // 重新计算时间,重新建一个定时器\n // @ts-ignore\n timerId = startTimer(timerExpired, remainingWait(time));\n }\n\n function debounced(this: any, ...args: any) {\n const time = Date.now();\n const isInvoking = shouldInvoke(time);\n\n lastArgs = args;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n // 第一次执行时\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // @ts-ignore\n timerId = startTimer(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n\n // 因为 trailingEdge 函数内部会执行 timerId = undefined\n // trailingEdge 函数执行之后,又触发了 debounced\n if (timerId === undefined) {\n // @ts-ignore\n timerId = startTimer(timerExpired, wait);\n }\n\n return result;\n }\n\n return debounced;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAEnD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC","file":"index.js","sourcesContent":["import { formatDate, getWeekNumber } from './util';\n\nexport { formatDate, getWeekNumber };\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare const judgeType: (value: any) => "symbol" | "error" | "undefined" | "object" | "function" | "array" | "string" | "number" | "regExp" | "boolean" | "date" | "null" | "document" | "global";
|
|
2
|
+
export declare const isIt: (v: any, type: string) => boolean;
|
|
3
|
+
export declare const isObject: (v: any) => boolean;
|
|
4
|
+
export declare const isFunction: (v: any) => boolean;
|
|
5
|
+
export declare const isArray: (v: any) => boolean;
|
|
6
|
+
export declare const isString: (v: any) => boolean;
|
|
7
|
+
export declare const isNumber: (v: any) => boolean;
|
|
8
|
+
export declare const isRegExp: (v: any) => boolean;
|
|
9
|
+
export declare const isBoolean: (v: any) => boolean;
|
|
10
|
+
export declare const isSymbol: (v: any) => boolean;
|
|
11
|
+
export declare const isDate: (v: any) => boolean;
|
|
12
|
+
export declare const isUndefined: (v: any) => boolean;
|
|
13
|
+
export declare const isNull: (v: any) => boolean;
|
|
14
|
+
export declare const isError: (v: any) => boolean;
|
|
15
|
+
export declare const isDocument: (v: any) => boolean;
|
|
16
|
+
export declare const isGlobal: (v: any) => boolean;
|
package/es/tools/isx.js
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
export const judgeType = value => {
|
|
2
|
+
switch (Object.prototype.toString.call(value)) {
|
|
3
|
+
case "[object Object]":
|
|
4
|
+
return "object";
|
|
5
|
+
|
|
6
|
+
case "[object Function]":
|
|
7
|
+
return "function";
|
|
8
|
+
|
|
9
|
+
case "[object Array]":
|
|
10
|
+
return "array";
|
|
11
|
+
|
|
12
|
+
case "[object String]":
|
|
13
|
+
return "string";
|
|
14
|
+
|
|
15
|
+
case "[object Number]":
|
|
16
|
+
return "number";
|
|
17
|
+
|
|
18
|
+
case "[object RegExp]":
|
|
19
|
+
return "regExp";
|
|
20
|
+
|
|
21
|
+
case "[object Boolean]":
|
|
22
|
+
return "boolean";
|
|
23
|
+
|
|
24
|
+
case "[object Symbol]":
|
|
25
|
+
return "symbol";
|
|
26
|
+
|
|
27
|
+
case "[object Date]":
|
|
28
|
+
return "date";
|
|
29
|
+
|
|
30
|
+
case "[object Undefined]":
|
|
31
|
+
return "undefined";
|
|
32
|
+
|
|
33
|
+
case "[object Null]":
|
|
34
|
+
return "null";
|
|
35
|
+
|
|
36
|
+
case "[object Error]":
|
|
37
|
+
return "error";
|
|
38
|
+
|
|
39
|
+
case "[object HTMLDocument]":
|
|
40
|
+
return "document";
|
|
41
|
+
|
|
42
|
+
case "[object global]":
|
|
43
|
+
return "global";
|
|
44
|
+
|
|
45
|
+
default:
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
export const isIt = (v, type) => judgeType(v) === type;
|
|
51
|
+
|
|
52
|
+
export const isObject = v => isIt(v, "object");
|
|
53
|
+
|
|
54
|
+
export const isFunction = v => isIt(v, "function");
|
|
55
|
+
|
|
56
|
+
export const isArray = v => isIt(v, "array");
|
|
57
|
+
|
|
58
|
+
export const isString = v => isIt(v, "string");
|
|
59
|
+
|
|
60
|
+
export const isNumber = v => isIt(v, "number");
|
|
61
|
+
|
|
62
|
+
export const isRegExp = v => isIt(v, "regExp");
|
|
63
|
+
|
|
64
|
+
export const isBoolean = v => isIt(v, "boolean");
|
|
65
|
+
|
|
66
|
+
export const isSymbol = v => isIt(v, "symbol");
|
|
67
|
+
|
|
68
|
+
export const isDate = v => isIt(v, "date");
|
|
69
|
+
|
|
70
|
+
export const isUndefined = v => isIt(v, "undefined");
|
|
71
|
+
|
|
72
|
+
export const isNull = v => isIt(v, "null");
|
|
73
|
+
|
|
74
|
+
export const isError = v => isIt(v, "error");
|
|
75
|
+
|
|
76
|
+
export const isDocument = v => isIt(v, "document");
|
|
77
|
+
|
|
78
|
+
export const isGlobal = v => isIt(v, "global")
|
|
79
|
+
//# sourceMappingURL=isx.js.map
|
|
80
|
+
;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/tools/isx.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAU,EAAE,EAAE;IACtC,QAAQ,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;QAC7C,KAAK,iBAAiB;YACpB,OAAO,QAAQ,CAAC;QAClB,KAAK,mBAAmB;YACtB,OAAO,UAAU,CAAC;QACpB,KAAK,gBAAgB;YACnB,OAAO,OAAO,CAAC;QACjB,KAAK,iBAAiB;YACpB,OAAO,QAAQ,CAAC;QAClB,KAAK,iBAAiB;YACpB,OAAO,QAAQ,CAAC;QAClB,KAAK,iBAAiB;YACpB,OAAO,QAAQ,CAAC;QAClB,KAAK,kBAAkB;YACrB,OAAO,SAAS,CAAC;QACnB,KAAK,iBAAiB;YACpB,OAAO,QAAQ,CAAC;QAClB,KAAK,eAAe;YAClB,OAAO,MAAM,CAAC;QAChB,KAAK,oBAAoB;YACvB,OAAO,WAAW,CAAC;QACrB,KAAK,eAAe;YAClB,OAAO,MAAM,CAAC;QAChB,KAAK,gBAAgB;YACnB,OAAO,OAAO,CAAC;QACjB,KAAK,uBAAuB;YAC1B,OAAO,UAAU,CAAC;QACpB,KAAK,iBAAiB;YACpB,OAAO,QAAQ,CAAC;QAClB;YACE,OAAO,IAAI,CAAC;KACf;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,CAAM,EAAE,IAAY,EAAW,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;AAE7E,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAM,EAAW,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC/D,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAM,EAAW,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AACnE,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAM,EAAW,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC7D,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAM,EAAW,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC/D,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAM,EAAW,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC/D,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAM,EAAW,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC/D,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAM,EAAW,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;AACjE,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAM,EAAW,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC/D,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAM,EAAW,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAC3D,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAM,EAAW,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;AACrE,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAM,EAAW,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAC3D,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAM,EAAW,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC7D,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAM,EAAW,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AACnE,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAM,EAAW,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC","file":"isx.js","sourcesContent":["export const judgeType = (value: any) => {\n switch (Object.prototype.toString.call(value)) {\n case '[object Object]':\n return 'object';\n case '[object Function]':\n return 'function';\n case '[object Array]':\n return 'array';\n case '[object String]':\n return 'string';\n case '[object Number]':\n return 'number';\n case '[object RegExp]':\n return 'regExp';\n case '[object Boolean]':\n return 'boolean';\n case '[object Symbol]':\n return 'symbol';\n case '[object Date]':\n return 'date';\n case '[object Undefined]':\n return 'undefined';\n case '[object Null]':\n return 'null';\n case '[object Error]':\n return 'error';\n case '[object HTMLDocument]':\n return 'document';\n case '[object global]':\n return 'global'; // window 是全局对象 global 的引用\n default:\n return null;\n }\n};\n\nexport const isIt = (v: any, type: string): boolean => judgeType(v) === type;\n\nexport const isObject = (v: any): boolean => isIt(v, 'object');\nexport const isFunction = (v: any): boolean => isIt(v, 'function');\nexport const isArray = (v: any): boolean => isIt(v, 'array');\nexport const isString = (v: any): boolean => isIt(v, 'string');\nexport const isNumber = (v: any): boolean => isIt(v, 'number');\nexport const isRegExp = (v: any): boolean => isIt(v, 'regExp');\nexport const isBoolean = (v: any): boolean => isIt(v, 'boolean');\nexport const isSymbol = (v: any): boolean => isIt(v, 'symbol');\nexport const isDate = (v: any): boolean => isIt(v, 'date');\nexport const isUndefined = (v: any): boolean => isIt(v, 'undefined');\nexport const isNull = (v: any): boolean => isIt(v, 'null');\nexport const isError = (v: any): boolean => isIt(v, 'error');\nexport const isDocument = (v: any): boolean => isIt(v, 'document');\nexport const isGlobal = (v: any): boolean => isIt(v, 'global');\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { isNode } from "../gantt-helper";
|
|
2
|
+
|
|
3
|
+
export let defaultPixelRatio = 1;
|
|
4
|
+
|
|
5
|
+
export function getPixelRatio() {
|
|
6
|
+
return isNode ? defaultPixelRatio = 1 : (defaultPixelRatio = Math.ceil(window.devicePixelRatio || 1),
|
|
7
|
+
defaultPixelRatio > 1 && defaultPixelRatio % 2 != 0 && (defaultPixelRatio += 1)),
|
|
8
|
+
defaultPixelRatio;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
getPixelRatio();
|
|
12
|
+
//# sourceMappingURL=pixel-ratio.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/tools/pixel-ratio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,MAAM,CAAC,IAAI,iBAAiB,GAAG,CAAC,CAAC;AAIjC,MAAM,UAAU,aAAa;IAC3B,IAAI,MAAM,EAAE;QACV,iBAAiB,GAAG,CAAC,CAAC;KACvB;SAAM;QACL,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,IAAI,CAAC,CAAC,CAAC;QAC5D,IAAI,iBAAiB,GAAG,CAAC,IAAI,iBAAiB,GAAG,CAAC,KAAK,CAAC,EAAE;YAExD,iBAAiB,IAAI,CAAC,CAAC;SACxB;KACF;IACD,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AACD,aAAa,EAAE,CAAC","file":"pixel-ratio.js","sourcesContent":["import { isNode } from '../gantt-helper';\n\nexport let defaultPixelRatio = 1;\n/*\n * @Description: 设置像素比\n */\nexport function getPixelRatio(): number {\n if (isNode) {\n defaultPixelRatio = 1;\n } else {\n defaultPixelRatio = Math.ceil(window.devicePixelRatio || 1);\n if (defaultPixelRatio > 1 && defaultPixelRatio % 2 !== 0) {\n // 非整数倍的像素比,向上取整\n defaultPixelRatio += 1;\n }\n }\n return defaultPixelRatio;\n}\ngetPixelRatio();\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function throttle(func: Function, delay: number): (this: any, ...args: any[]) => void;
|
|
2
|
+
export declare function throttle2(func: Function, delay: number): (this: any, ...args: any[]) => void;
|
|
3
|
+
export declare function formatDate(date: Date, format: string): string;
|
|
4
|
+
export declare function parseDateFormat(dateString: string): string;
|
|
5
|
+
export declare function parseStringTemplate(template: string, data: any): string;
|
|
6
|
+
export declare function toBoxArray<T>(obj: T | T[]): [T, T, T, T];
|
|
7
|
+
export declare function getWeekNumber(currentDate: Date): number;
|
package/es/tools/util.js
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
export function throttle(func, delay) {
|
|
2
|
+
let timer = null;
|
|
3
|
+
return function(...args) {
|
|
4
|
+
timer || (func.apply(this, args), timer = setTimeout((() => {
|
|
5
|
+
timer = null;
|
|
6
|
+
}), delay));
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export function throttle2(func, delay) {
|
|
11
|
+
let timer = null;
|
|
12
|
+
return function(...args) {
|
|
13
|
+
timer || (timer = setTimeout((() => {
|
|
14
|
+
func.apply(this, args), timer = null;
|
|
15
|
+
}), delay));
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function formatDate(date, format) {
|
|
20
|
+
const year = date.getFullYear().toString(), month = (date.getMonth() + 1).toString().padStart(2, "0"), day = date.getDate().toString().padStart(2, "0");
|
|
21
|
+
return format = (format = (format = format.replace("yyyy", year)).replace("mm", month)).replace("dd", day);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function validateDate(dateParts, format) {
|
|
25
|
+
const yearIndex = format.indexOf("yyyy"), monthIndex = format.indexOf("mm"), dayIndex = format.indexOf("dd"), dateMonthIndex = monthIndex < yearIndex ? monthIndex < dayIndex ? 0 : 1 : monthIndex < dayIndex ? 1 : 2, dateDayIndex = dayIndex < yearIndex ? dayIndex < monthIndex ? 0 : 1 : dayIndex < monthIndex ? 1 : 2, year = parseInt(dateParts[yearIndex < monthIndex ? yearIndex < dayIndex ? 0 : 1 : monthIndex < dayIndex ? 1 : 2], 10), month = parseInt(dateParts[dateMonthIndex], 10) - 1, day = parseInt(dateParts[dateDayIndex], 10);
|
|
26
|
+
if (isNaN(year) || year < 1) return !1;
|
|
27
|
+
if (isNaN(month) || month < 0 || month > 11) return !1;
|
|
28
|
+
const daysInMonth = [ 31, isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ];
|
|
29
|
+
return !(isNaN(day) || day < 1 || day > daysInMonth[month]);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function isLeapYear(year) {
|
|
33
|
+
return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export function parseDateFormat(dateString) {
|
|
37
|
+
const formats = [ "yyyy-mm-dd", "dd-mm-yyyy", "mm/dd/yyyy", "yyyy/mm/dd", "dd/mm/yyyy", "yyyy.mm.dd", "dd.mm.yyyy", "mm.dd.yyyy" ];
|
|
38
|
+
dateString = dateString.replace(/\s+/g, "");
|
|
39
|
+
for (let i = 0; i < formats.length; i++) {
|
|
40
|
+
const format = formats[i], dateParts = dateString.split(getSeparator(format)), isValid = validateDate(dateParts, format);
|
|
41
|
+
if (3 === dateParts.length && isValid) return format;
|
|
42
|
+
}
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function getSeparator(format) {
|
|
47
|
+
const separators = format.match(/[^\w]/g);
|
|
48
|
+
if (separators) {
|
|
49
|
+
const escapedSeparators = separators.map((s => "\\" + s)).join("|");
|
|
50
|
+
return new RegExp(escapedSeparators, "g");
|
|
51
|
+
}
|
|
52
|
+
return /[^\w]/;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export function parseStringTemplate(template, data) {
|
|
56
|
+
return template.replace(/\{([^}]+)\}/g, ((match, key) => {
|
|
57
|
+
const keys = key.split(".");
|
|
58
|
+
let value = data;
|
|
59
|
+
for (const k of keys) {
|
|
60
|
+
if (!value.hasOwnProperty(k)) {
|
|
61
|
+
value = match;
|
|
62
|
+
break;
|
|
63
|
+
}
|
|
64
|
+
value = value[k];
|
|
65
|
+
}
|
|
66
|
+
return value;
|
|
67
|
+
}));
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export function toBoxArray(obj) {
|
|
71
|
+
return Array.isArray(obj) ? 3 === obj.length ? [ obj[0], obj[1], obj[2], obj[1] ] : 2 === obj.length ? [ obj[0], obj[1], obj[0], obj[1] ] : 1 === obj.length ? [ obj[0], obj[0], obj[0], obj[0] ] : [ obj[0], obj[1], obj[2], obj[3] ] : [ obj, obj, obj, obj ];
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export function getWeekNumber(currentDate) {
|
|
75
|
+
const startOfYear = new Date(currentDate.getFullYear(), 0, 1);
|
|
76
|
+
return Math.ceil(((currentDate.getTime() - startOfYear.getTime()) / 864e5 + 1) / 7);
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=util.js.map
|