javascriptgantt 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- package/.github/workflows/npm-publish-github-packages.yml +21 -27
- package/LICENSE +21 -21
- package/index.html +1111 -1111
- package/package.json +33 -33
- package/readme.md +158 -158
- package/src/assets/zt-tour/zt-tour.css +227 -227
- package/src/assets/zt-tour/zt-tour.js +1095 -1095
- package/src/gantt.css +1157 -1157
- package/src/gantt.js +9671 -9642
- package/src/theme/dark.css +100 -100
- package/style.css +215 -215
- /package/src/assets/images/{ztGanttLogo.png → jsGanttLogo.png} +0 -0
- /package/src/assets/images/{zt-gantt-screenshot.png → jsgantt-screenshot.png} +0 -0
package/index.html
CHANGED
@@ -1,1112 +1,1112 @@
|
|
1
|
-
<!DOCTYPE html>
|
2
|
-
<html lang="en">
|
3
|
-
|
4
|
-
<head>
|
5
|
-
<meta charset="UTF-8" />
|
6
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
7
|
-
<title>jsGantt</title>
|
8
|
-
<link rel="stylesheet" href="./style.css" />
|
9
|
-
<link rel="stylesheet" href="src/gantt.css" />
|
10
|
-
<link rel="stylesheet" href="src/assets/zt-tour/zt-tour.css" />
|
11
|
-
<!-- <link rel="stylesheet" href="./theme/dark.css" /> -->
|
12
|
-
<link rel="shortcut icon" href="src/assets/images/jsGanttLogo.png" type="image/x-icon" />
|
13
|
-
<script src="src/gantt.js"></script>
|
14
|
-
</head>
|
15
|
-
|
16
|
-
<body>
|
17
|
-
<div class="js-gantt-d-flex action-container">
|
18
|
-
<div class="collapse-container">
|
19
|
-
<span>Collapse</span>
|
20
|
-
<input type="checkbox" id="collapse-switch" onchange="changeCollapse(event)" />
|
21
|
-
<label for="collapse-switch">collapse</label>
|
22
|
-
</div>
|
23
|
-
|
24
|
-
<div class="collapse-container today-container">
|
25
|
-
<span>Today</span>
|
26
|
-
<input type="checkbox" id="today-switch" checked="true" onchange="changeToday(event)" />
|
27
|
-
<label for="today-switch">Today</label>
|
28
|
-
</div>
|
29
|
-
<div class="export-data">
|
30
|
-
<select class="export" id="export" placeholder="Export" onchange="exportChange(event)">
|
31
|
-
<option value="" disabled="" selected="">Export</option>
|
32
|
-
<option value="png">Export To PNG</option>
|
33
|
-
<option value="pdf">Export To PDF</option>
|
34
|
-
<option value="excel">Export To Excel</option>
|
35
|
-
</select>
|
36
|
-
</div>
|
37
|
-
<div class="fullscreen">
|
38
|
-
<button class="btn" onclick="changeScreen()">FullScreen</button>
|
39
|
-
</div>
|
40
|
-
<div class="auto-scheduling">
|
41
|
-
<!-- <span class="coming-soon">coming soon</span> -->
|
42
|
-
<button class="btn" onclick="autoScheduling()">Auto Scheduling</button>
|
43
|
-
</div>
|
44
|
-
<div class="zoom">
|
45
|
-
<select class="scale-zoom" id="scale_zoom" placeholder="Zoom to" onchange="changeZoom(event)">
|
46
|
-
<option value="" disabled="">Zoom to:</option>
|
47
|
-
<option value="year">Years</option>
|
48
|
-
<option value="quarter">Quarters</option>
|
49
|
-
<option value="month">Months</option>
|
50
|
-
<option value="week">Weeks</option>
|
51
|
-
<option value="day" selected="day">Days</option>
|
52
|
-
<option value="hour">Hour</option>
|
53
|
-
</select>
|
54
|
-
</div>
|
55
|
-
<div class="Language">
|
56
|
-
<select class="lang" id="lang" placeholder="Select Language" onchange="changeLang(event)">
|
57
|
-
<option value="" disabled="" selected="">Select Language:</option>
|
58
|
-
<option value="ar">Arabic</option>
|
59
|
-
<option value="be">Belarusian</option>
|
60
|
-
<option value="en" selected="en">English</option>
|
61
|
-
<option value="ca">Catalan</option>
|
62
|
-
<option value="cn">Chinese</option>
|
63
|
-
<option value="hr">Croatian</option>
|
64
|
-
<option value="cs">Czech</option>
|
65
|
-
<option value="da">Danish</option>
|
66
|
-
<option value="nl">Dutch</option>
|
67
|
-
<option value="fi">Finnish</option>
|
68
|
-
<option value="fr">French</option>
|
69
|
-
<option value="de">German</option>
|
70
|
-
<option value="el">Greek</option>
|
71
|
-
<option value="he">Hebrew</option>
|
72
|
-
<option value="hi">Hindi (India)</option>
|
73
|
-
<option value="hu">Hungarian</option>
|
74
|
-
<option value="id">Indonesian</option>
|
75
|
-
<option value="it">Italian</option>
|
76
|
-
<option value="ja">Japanese</option>
|
77
|
-
<option value="kr">Korean</option>
|
78
|
-
<option value="no">Norwegian</option>
|
79
|
-
<option value="fa">Persian</option>
|
80
|
-
<option value="pl">Polish</option>
|
81
|
-
<option value="pt">Portuguese</option>
|
82
|
-
<option value="ro">Romanian</option>
|
83
|
-
<option value="ro">Russian</option>
|
84
|
-
<option value="sk">Slovak</option>
|
85
|
-
<option value="si">Slovenian</option>
|
86
|
-
<option value="es">Spanish</option>
|
87
|
-
<option value="sv">Swedish</option>
|
88
|
-
<option value="tr">Turkish</option>
|
89
|
-
<option value="ua">Ukrainian</option>
|
90
|
-
</select>
|
91
|
-
</div>
|
92
|
-
|
93
|
-
<div class="dark-mode">
|
94
|
-
<span>Dark Mode</span>
|
95
|
-
<input type="checkbox" id="toggle" onchange="changeTheme(event.target.checked)" class="toggle--checkbox" />
|
96
|
-
<label for="toggle" class="toggle-theme"> </label>
|
97
|
-
</div>
|
98
|
-
<div class="fullscreen">
|
99
|
-
<button class="btn" style="margin-left: 10px" onclick="startTour()">
|
100
|
-
Start Tour
|
101
|
-
</button>
|
102
|
-
<svg class="hint-icon" width="18px" height="18px" style="margin-bottom: -4px;" viewBox="0 0 1024 1024"
|
103
|
-
xmlns="http://www.w3.org/2000/svg" fill="#000000">
|
104
|
-
<g id="SVGRepo_bgCarrier" stroke-width="0"></g>
|
105
|
-
<g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"></g>
|
106
|
-
<g id="SVGRepo_iconCarrier">
|
107
|
-
<path fill="#55A5FF"
|
108
|
-
d="M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896zm23.744 191.488c-52.096 0-92.928 14.784-123.2 44.352-30.976 29.568-45.76 70.4-45.76 122.496h80.256c0-29.568 5.632-52.8 17.6-68.992 13.376-19.712 35.2-28.864 66.176-28.864 23.936 0 42.944 6.336 56.32 19.712 12.672 13.376 19.712 31.68 19.712 54.912 0 17.6-6.336 34.496-19.008 49.984l-8.448 9.856c-45.76 40.832-73.216 70.4-82.368 89.408-9.856 19.008-14.08 42.24-14.08 68.992v9.856h80.96v-9.856c0-16.896 3.52-31.68 10.56-45.76 6.336-12.672 15.488-24.64 28.16-35.2 33.792-29.568 54.208-48.576 60.544-55.616 16.896-22.528 26.048-51.392 26.048-86.592 0-42.944-14.08-76.736-42.24-101.376-28.16-25.344-65.472-37.312-111.232-37.312zm-12.672 406.208a54.272 54.272 0 0 0-38.72 14.784 49.408 49.408 0 0 0-15.488 38.016c0 15.488 4.928 28.16 15.488 38.016A54.848 54.848 0 0 0 523.072 768c15.488 0 28.16-4.928 38.72-14.784a51.52 51.52 0 0 0 16.192-38.72 51.968 51.968 0 0 0-15.488-38.016 55.936 55.936 0 0 0-39.424-14.784z">
|
109
|
-
</path>
|
110
|
-
</g>
|
111
|
-
</svg>
|
112
|
-
</div>
|
113
|
-
<!-- <button onclick="ZT_Gantt.destroy()">destroy</button>
|
114
|
-
<button onclick="ZT_Gantt.render()">render</button> -->
|
115
|
-
<!-- <button onclick="addCol()">Add Column</button>
|
116
|
-
<button onclick="removeCol()">Remove Column</button> -->
|
117
|
-
<input type="search" placeholder="Search Task" id="gantt-search" name="gantt-search" class="gantt-search"
|
118
|
-
oninput="searchTask(event)" />
|
119
|
-
</div>
|
120
|
-
<div id="js-gantt"></div>
|
121
|
-
</div>
|
122
|
-
<script src="src/assets/zt-tour/zt-tour.js"></script>
|
123
|
-
<script>
|
124
|
-
let data = [
|
125
|
-
{ id: 1, text: "Project 1", parent: 0, progress: 30 },
|
126
|
-
{
|
127
|
-
id: 2,
|
128
|
-
text: "Task #2",
|
129
|
-
start_date: "06-05-2024",
|
130
|
-
end_date: "06-05-2024",
|
131
|
-
parent: 1,
|
132
|
-
progress: 50,
|
133
|
-
},
|
134
|
-
{
|
135
|
-
id: 23,
|
136
|
-
text: "Final Milestone",
|
137
|
-
start_date: "06-17-2024",
|
138
|
-
end_date: "06-18-2024",
|
139
|
-
parent: 1,
|
140
|
-
type: "milestone",
|
141
|
-
},
|
142
|
-
{
|
143
|
-
id: 3,
|
144
|
-
text: "Task #3",
|
145
|
-
start_date: "06-06-2024",
|
146
|
-
end_date: "06-07-2024",
|
147
|
-
parent: 1,
|
148
|
-
progress: 60,
|
149
|
-
},
|
150
|
-
{
|
151
|
-
id: 5,
|
152
|
-
text: "SubTask #5",
|
153
|
-
start_date: "06-04-2024",
|
154
|
-
end_date: "06-06-2024",
|
155
|
-
parent: 3,
|
156
|
-
progress: 20,
|
157
|
-
},
|
158
|
-
{
|
159
|
-
id: 6,
|
160
|
-
text: "SubTask #6",
|
161
|
-
start_date: "06-06-2024",
|
162
|
-
end_date: "06-09-2024",
|
163
|
-
parent: 3,
|
164
|
-
progress: 10,
|
165
|
-
},
|
166
|
-
{
|
167
|
-
id: 7,
|
168
|
-
text: "SubTask #7",
|
169
|
-
start_date: "06-08-2024",
|
170
|
-
end_date: "06-11-2024",
|
171
|
-
parent: 3,
|
172
|
-
progress: 50,
|
173
|
-
},
|
174
|
-
{
|
175
|
-
id: 4,
|
176
|
-
text: "Task #4",
|
177
|
-
start_date: "06-13-2024",
|
178
|
-
end_date: "06-16-2024",
|
179
|
-
parent: 1,
|
180
|
-
progress: 90,
|
181
|
-
},
|
182
|
-
{ id: 8, text: "Project 2", parent: 0, progress: 80 },
|
183
|
-
{
|
184
|
-
id: 12,
|
185
|
-
text: "Task #12",
|
186
|
-
start_date: "06-06-2024",
|
187
|
-
end_date: "06-06-2024",
|
188
|
-
parent: 8,
|
189
|
-
progress: 50,
|
190
|
-
},
|
191
|
-
{
|
192
|
-
id: 25,
|
193
|
-
text: "Next Milestone",
|
194
|
-
start_date: "06-20-2024",
|
195
|
-
end_date: "06-20-2024",
|
196
|
-
parent: 8,
|
197
|
-
type: "milestone",
|
198
|
-
},
|
199
|
-
{
|
200
|
-
id: 13,
|
201
|
-
text: "Task #13",
|
202
|
-
start_date: "06-04-2024",
|
203
|
-
end_date: "06-07-2024",
|
204
|
-
parent: 8,
|
205
|
-
},
|
206
|
-
{
|
207
|
-
id: 14,
|
208
|
-
text: "Task #14",
|
209
|
-
start_date: "06-05-2024",
|
210
|
-
end_date: "06-09-2024",
|
211
|
-
parent: 8,
|
212
|
-
},
|
213
|
-
{
|
214
|
-
id: 15,
|
215
|
-
text: "Task #15",
|
216
|
-
start_date: "06-07-2024",
|
217
|
-
end_date: "06-08-2024",
|
218
|
-
parent: 8,
|
219
|
-
},
|
220
|
-
{ id: 9, text: "Project 3", parent: 0, progress: 10 },
|
221
|
-
{
|
222
|
-
id: 16,
|
223
|
-
text: "Task #16",
|
224
|
-
start_date: "06-05-2024",
|
225
|
-
end_date: "06-09-2024",
|
226
|
-
parent: 9,
|
227
|
-
},
|
228
|
-
{
|
229
|
-
id: 17,
|
230
|
-
text: "Task #17",
|
231
|
-
start_date: "06-06-2024",
|
232
|
-
end_date: "06-08-2024",
|
233
|
-
parent: 9,
|
234
|
-
},
|
235
|
-
{ id: 10, text: "Project 4", parent: 0, progress: 40 },
|
236
|
-
{
|
237
|
-
id: 18,
|
238
|
-
text: "Task #18",
|
239
|
-
start_date: "06-08-2024",
|
240
|
-
end_date: "06-16-2024",
|
241
|
-
parent: 10,
|
242
|
-
},
|
243
|
-
{
|
244
|
-
id: 19,
|
245
|
-
text: "Task #19",
|
246
|
-
start_date: "06-02-2024",
|
247
|
-
end_date: "06-09-2024",
|
248
|
-
parent: 10,
|
249
|
-
},
|
250
|
-
{
|
251
|
-
id: 20,
|
252
|
-
text: "Task #20",
|
253
|
-
start_date: "06-11-2024",
|
254
|
-
end_date: "06-13-2024",
|
255
|
-
parent: 10,
|
256
|
-
},
|
257
|
-
{ id: 11, text: "Project 5", parent: 0, progress: 100 },
|
258
|
-
{
|
259
|
-
id: 21,
|
260
|
-
text: "Task #21",
|
261
|
-
start_date: "06-04-2024",
|
262
|
-
end_date: "06-10-2024",
|
263
|
-
parent: 11,
|
264
|
-
},
|
265
|
-
{
|
266
|
-
id: 22,
|
267
|
-
text: "Task #22",
|
268
|
-
start_date: "06-06-2024",
|
269
|
-
end_date: "06-12-2024",
|
270
|
-
parent: 11,
|
271
|
-
},
|
272
|
-
{
|
273
|
-
id: 123,
|
274
|
-
text: "Task #123",
|
275
|
-
start_date: "06-03-2024",
|
276
|
-
end_date: "06-12-2024",
|
277
|
-
parent: 0,
|
278
|
-
},
|
279
|
-
];
|
280
|
-
|
281
|
-
// let parents = [1]//,8,9,10,11]
|
282
|
-
// for(let i = 0; i < parents.length; i++){
|
283
|
-
// for(let j = 0; j < 50; j++){
|
284
|
-
// let task = {
|
285
|
-
// id: `task-${parents[i]}-${j}`,
|
286
|
-
// text: "Test #Task",
|
287
|
-
// start_date: "03-09-2024",
|
288
|
-
// end_date: "03-09-2024",
|
289
|
-
// parent: parents[i],
|
290
|
-
// progress: 50,
|
291
|
-
// }
|
292
|
-
// data.push(task);
|
293
|
-
// }
|
294
|
-
// }
|
295
|
-
|
296
|
-
let element = document.getElementById("js-gantt");
|
297
|
-
let ZT_Gantt = new jsGantt(element);
|
298
|
-
window.jsGantt = ZT_Gantt;
|
299
|
-
|
300
|
-
const textEditor = { type: "text", map_to: "text" };
|
301
|
-
const dateEditor = {
|
302
|
-
type: "date", map_to: "start_date", min: new Date(2018, 0, 1),
|
303
|
-
max: new Date(2019, 0, 1)
|
304
|
-
};
|
305
|
-
const numberEditor = { type: "number", map_to: "progress", min: 0, max: 100 };
|
306
|
-
const selectEditor = { type: "select", map_to: "priority", options: ["Low", "Medium", "High"] };
|
307
|
-
|
308
|
-
ZT_Gantt.options.columns = [
|
309
|
-
{
|
310
|
-
name: "text",
|
311
|
-
width: 245,
|
312
|
-
min_width: 80,
|
313
|
-
max_width: 300,
|
314
|
-
tree: true,
|
315
|
-
label: "Task Name",
|
316
|
-
resize: true,
|
317
|
-
template: (task) => {
|
318
|
-
return `<span>${task.text}</span>`;
|
319
|
-
},
|
320
|
-
editor: textEditor
|
321
|
-
},
|
322
|
-
{
|
323
|
-
name: "progress",
|
324
|
-
width: 245,
|
325
|
-
min_width: 80,
|
326
|
-
max_width: 300,
|
327
|
-
tree: false,
|
328
|
-
label: "Progress",
|
329
|
-
resize: true,
|
330
|
-
align: "center",
|
331
|
-
template: (task) => {
|
332
|
-
return `<span>${task.progress || 0}</span>`;
|
333
|
-
},
|
334
|
-
// editor: numberEditor
|
335
|
-
},
|
336
|
-
// {
|
337
|
-
// name: "start_date",
|
338
|
-
// width: 245,
|
339
|
-
// min_width: 80,
|
340
|
-
// max_width: 300,
|
341
|
-
// tree: false,
|
342
|
-
// label: "Start Date",
|
343
|
-
// resize: true,
|
344
|
-
// align: "center",
|
345
|
-
// template: (task) => {
|
346
|
-
// return `<span>${task.start_date || 0}</span>`;
|
347
|
-
// },
|
348
|
-
// editor: dateEditor
|
349
|
-
// },
|
350
|
-
// {
|
351
|
-
// name: "priority",
|
352
|
-
// width: 245,
|
353
|
-
// min_width: 80,
|
354
|
-
// max_width: 300,
|
355
|
-
// tree: false,
|
356
|
-
// label: "Priority",
|
357
|
-
// resize: true,
|
358
|
-
// align: "center",
|
359
|
-
// template: (task) => {
|
360
|
-
// return `<span>${task?.priority || ""}</span>`;
|
361
|
-
// },
|
362
|
-
// editor: selectEditor
|
363
|
-
// },
|
364
|
-
];
|
365
|
-
|
366
|
-
ZT_Gantt.options.date_format = "%m-%d-%Y";
|
367
|
-
ZT_Gantt.options.localLang = "en";
|
368
|
-
ZT_Gantt.options.data = data;
|
369
|
-
ZT_Gantt.options.collapse = false;
|
370
|
-
ZT_Gantt.options.weekends = ["Sat", "Sun"];
|
371
|
-
ZT_Gantt.options.fullWeek = true;
|
372
|
-
ZT_Gantt.options.todayMarker = true;
|
373
|
-
ZT_Gantt.options.dropArea = true;
|
374
|
-
ZT_Gantt.options.customMarker = [
|
375
|
-
{
|
376
|
-
start_date: '06-20-2024',
|
377
|
-
css: "party",
|
378
|
-
text: "🎂 🎉",
|
379
|
-
title: "Ek aur Sal Barbad!"
|
380
|
-
}
|
381
|
-
];
|
382
|
-
ZT_Gantt.options.updateLinkOnDrag = true;
|
383
|
-
ZT_Gantt.options.splitTask = false;
|
384
|
-
ZT_Gantt.options.sort = true;
|
385
|
-
// ZT_Gantt.templates.showLightBox = false;
|
386
|
-
|
387
|
-
// new feature of gantt -----
|
388
|
-
ZT_Gantt.options.mouseScroll = true; // default is false
|
389
|
-
ZT_Gantt.options.ctrlKeyRequiredForMouseScroll = true; // default is true
|
390
|
-
|
391
|
-
ZT_Gantt.options.addLinks = (task) => {
|
392
|
-
if (task.parent === 0) {
|
393
|
-
return false;
|
394
|
-
}
|
395
|
-
return true;
|
396
|
-
};
|
397
|
-
|
398
|
-
ZT_Gantt.options.exportApi = "https://js-gantt.zehntech.net/";
|
399
|
-
// ZT_Gantt.options.exportApi = "http://192.168.0.155:8300/";
|
400
|
-
ZT_Gantt.options.taskColor = true;
|
401
|
-
ZT_Gantt.options.taskOpacity = 0.7;
|
402
|
-
ZT_Gantt.options.links = [
|
403
|
-
// 0 is finish_to_start
|
404
|
-
// 1 is start_to_start
|
405
|
-
// 2 is finish_to_finish
|
406
|
-
// 3 is start_to_finish
|
407
|
-
{ id: 1, source: 2, target: 23, type: 1 },
|
408
|
-
{ id: 2, source: 3, target: 6, type: 2 },
|
409
|
-
{ id: 3, source: 4, target: 23, type: 3 },
|
410
|
-
{ id: 4, source: 12, target: 15 },
|
411
|
-
];
|
412
|
-
ZT_Gantt.options.weekStart = 1; // set the start of the week
|
413
|
-
ZT_Gantt.options.sidebarWidth = 300;
|
414
|
-
ZT_Gantt.options.scales = [
|
415
|
-
{
|
416
|
-
unit: "week",
|
417
|
-
step: 1,
|
418
|
-
format: (t) => {
|
419
|
-
const { startDate: a, endDate: n, weekNum: i } = weekStartAndEnd(t);
|
420
|
-
return ` ${ZT_Gantt.formatDateToString(
|
421
|
-
"%j %M",
|
422
|
-
a
|
423
|
-
)} - ${ZT_Gantt.formatDateToString(
|
424
|
-
"%j %M",
|
425
|
-
n
|
426
|
-
)}, ${a.getFullYear()}`;
|
427
|
-
},
|
428
|
-
},
|
429
|
-
{ unit: "day", step: 1, format: "%d %D" },
|
430
|
-
];
|
431
|
-
|
432
|
-
ZT_Gantt.options.zoomLevel = "day";
|
433
|
-
|
434
|
-
// zoom config
|
435
|
-
ZT_Gantt.options.zoomConfig = {
|
436
|
-
levels: [
|
437
|
-
{
|
438
|
-
name: "hour",
|
439
|
-
scale_height: 27,
|
440
|
-
min_col_width: 550,
|
441
|
-
scales: [
|
442
|
-
{ unit: "day", step: 1, format: "%d %M" },
|
443
|
-
{ unit: "hour", step: 1, format: "%H" },
|
444
|
-
],
|
445
|
-
},
|
446
|
-
{
|
447
|
-
name: "day",
|
448
|
-
scale_height: 27,
|
449
|
-
min_col_width: 80,
|
450
|
-
scales: [
|
451
|
-
{ unit: "week", step: 1, format: "%W" },
|
452
|
-
{ unit: "day", step: 1, format: "%d %M" },
|
453
|
-
],
|
454
|
-
},
|
455
|
-
{
|
456
|
-
name: "week",
|
457
|
-
scale_height: 45,
|
458
|
-
min_col_width: 50,
|
459
|
-
scales: [
|
460
|
-
{ unit: "month", step: 1, format: "%M" },
|
461
|
-
{
|
462
|
-
unit: "week",
|
463
|
-
step: 1,
|
464
|
-
format: (t) => {
|
465
|
-
const {
|
466
|
-
startDate: a,
|
467
|
-
endDate: n,
|
468
|
-
weekNum: i,
|
469
|
-
} = weekStartAndEnd(t);
|
470
|
-
return ` ${ZT_Gantt.formatDateToString(
|
471
|
-
"%j %M",
|
472
|
-
a
|
473
|
-
)} - ${ZT_Gantt.formatDateToString(
|
474
|
-
"%j %M",
|
475
|
-
n
|
476
|
-
)}, ${a.getFullYear()}`;
|
477
|
-
},
|
478
|
-
},
|
479
|
-
],
|
480
|
-
},
|
481
|
-
{
|
482
|
-
name: "month",
|
483
|
-
scale_height: 30,
|
484
|
-
min_col_width: 120,
|
485
|
-
scales: [
|
486
|
-
{ unit: "year", step: 1, format: "%Y" },
|
487
|
-
{ unit: "month", step: 1, format: "%M" },
|
488
|
-
],
|
489
|
-
},
|
490
|
-
{
|
491
|
-
name: "quarter",
|
492
|
-
scale_height: 25,
|
493
|
-
min_col_width: 90,
|
494
|
-
scales: [
|
495
|
-
{ unit: "year", step: 1, format: "%Y" },
|
496
|
-
{ unit: "quarter", step: 1, format: "Q%q" },
|
497
|
-
{ unit: "month", format: "%M" },
|
498
|
-
],
|
499
|
-
},
|
500
|
-
{
|
501
|
-
name: "year",
|
502
|
-
scale_height: 30,
|
503
|
-
min_col_width: 30,
|
504
|
-
scales: [
|
505
|
-
{ unit: "year", step: 3, format: "2022 - 2024" },
|
506
|
-
{ unit: "year", step: 1, format: "%Y" },
|
507
|
-
],
|
508
|
-
},
|
509
|
-
],
|
510
|
-
};
|
511
|
-
|
512
|
-
ZT_Gantt.options.scale_height = 30;
|
513
|
-
ZT_Gantt.options.row_height = 24;
|
514
|
-
ZT_Gantt.options.minColWidth = 80;
|
515
|
-
ZT_Gantt.options.selectAreaOnDrag = true;
|
516
|
-
ZT_Gantt.options.taskProgress = true;
|
517
|
-
|
518
|
-
// Gantt layout to implement columns in right side
|
519
|
-
// ZT_Gantt.options.rightGrid = [
|
520
|
-
// {
|
521
|
-
// name: "text",
|
522
|
-
// width: 245,
|
523
|
-
// min_width: 80,
|
524
|
-
// max_width: 120,
|
525
|
-
// tree: true,
|
526
|
-
// label: "Task Name",
|
527
|
-
// resize: true,
|
528
|
-
// template: (task) => {
|
529
|
-
// return `<span>${task.text}</span>`;
|
530
|
-
// },
|
531
|
-
// },
|
532
|
-
// {
|
533
|
-
// name: "text",
|
534
|
-
// width: 245,
|
535
|
-
// min_width: 80,
|
536
|
-
// max_width: 120,
|
537
|
-
// tree: false,
|
538
|
-
// align: "center",
|
539
|
-
// label: "Task Name",
|
540
|
-
// resize: true,
|
541
|
-
// template: (task) => {
|
542
|
-
// return `<span>${task.text}</span>`;
|
543
|
-
// },
|
544
|
-
// },
|
545
|
-
// ];
|
546
|
-
|
547
|
-
function weekStartAndEnd(t) {
|
548
|
-
const e = t.getDay();
|
549
|
-
let a, n;
|
550
|
-
0 === e
|
551
|
-
? ((a = ZT_Gantt.add(t, -6, "day")), (n = t))
|
552
|
-
: ((a = ZT_Gantt.add(t, -1 * e + 1, "day")),
|
553
|
-
(n = ZT_Gantt.add(t, 7 - e, "day")));
|
554
|
-
return {
|
555
|
-
startDate: a,
|
556
|
-
endDate: n,
|
557
|
-
weekNum: ZT_Gantt.formatDateToString("%W", t),
|
558
|
-
};
|
559
|
-
}
|
560
|
-
|
561
|
-
ZT_Gantt.options.startDate = "2024-06-01T11:46:17.775Z";
|
562
|
-
ZT_Gantt.options.endDate = "2024-10-30T11:46:17.775Z";
|
563
|
-
|
564
|
-
ZT_Gantt.templates.tooltip_text = function (start, end, task) {
|
565
|
-
return `<b>${task.parent === 0 ? "Project" : "Task"}:</b>
|
566
|
-
${task.text}
|
567
|
-
<br/><b>Start date:</b>
|
568
|
-
${ZT_Gantt.formatDateToString("%d-%m-%y %H:%i", start)}
|
569
|
-
<br/><b>End date:</b>
|
570
|
-
${ZT_Gantt.formatDateToString("%d-%m-%y %H:%i", end)}<br/>
|
571
|
-
<b>Duration:</b> ${task.duration} ${task.duration > 1 ? "Days" : "Day"
|
572
|
-
}`;
|
573
|
-
};
|
574
|
-
|
575
|
-
ZT_Gantt.templates.taskbar_text = function (start, end, task) {
|
576
|
-
if (task.parent == 0 && task.type !== "milestone") {
|
577
|
-
return `Project : ${task.text}`;
|
578
|
-
} else if (task.type === "milestone") {
|
579
|
-
return task.text;
|
580
|
-
} else {
|
581
|
-
return `Task : ${task.text}`;
|
582
|
-
}
|
583
|
-
};
|
584
|
-
|
585
|
-
ZT_Gantt.templates.grid_folder = (task) => {
|
586
|
-
var name = task?.text?.trim().split(" ");
|
587
|
-
var firstname = name?.[0];
|
588
|
-
var lastname = name?.[1] ? name?.[1] : "";
|
589
|
-
var intials =
|
590
|
-
firstname?.charAt(0)?.toUpperCase() +
|
591
|
-
lastname?.charAt(0)?.toUpperCase();
|
592
|
-
return `<div></div>`;
|
593
|
-
};
|
594
|
-
|
595
|
-
ZT_Gantt.templates.grid_file = (task) => {
|
596
|
-
if (task.parent != 0) {
|
597
|
-
var tracker_name = task.hasOwnProperty("tracker")
|
598
|
-
? task.tracker.name
|
599
|
-
: " ";
|
600
|
-
let issue_id = task.id;
|
601
|
-
return `<div class='gantt_file ${tracker_name}'><a class="link-issue ${tracker_name}" href='http://127.0.0.1:5500//issues/${issue_id}'>#${issue_id}</a></div>`;
|
602
|
-
}
|
603
|
-
};
|
604
|
-
|
605
|
-
ZT_Gantt.templates.task_drag = (mode, task) => {
|
606
|
-
if (task.parent == 0 || (task.children && task.children.length > 0)) {
|
607
|
-
// || task.children
|
608
|
-
return false;
|
609
|
-
}
|
610
|
-
return true;
|
611
|
-
};
|
612
|
-
|
613
|
-
// add custom classes
|
614
|
-
// ZT_Gantt.templates.grid_header_class = (columns,i) => {
|
615
|
-
// return "my-header-class test"
|
616
|
-
// }
|
617
|
-
// ZT_Gantt.templates.grid_row_class = (start, end, task) => {
|
618
|
-
// console.log(start, end);
|
619
|
-
// return "my-grid-row-class test"
|
620
|
-
// }
|
621
|
-
ZT_Gantt.templates.task_class = (start, end, task) => {
|
622
|
-
if (task.parent == 0) {
|
623
|
-
return "parent-task test";
|
624
|
-
} else {
|
625
|
-
return "child-task test";
|
626
|
-
}
|
627
|
-
};
|
628
|
-
// ZT_Gantt.templates.task_row_class = (start, end, task) => {
|
629
|
-
// return "my-task-row-class test"
|
630
|
-
// }
|
631
|
-
ZT_Gantt.templates.scale_cell_class = (date, scale, scaleIndex) => {
|
632
|
-
if (scaleIndex === 1) {
|
633
|
-
return "my-scale-class-2";
|
634
|
-
} else {
|
635
|
-
return "my-scale-class-1";
|
636
|
-
}
|
637
|
-
};
|
638
|
-
// ZT_Gantt.templates.grid_cell_class = (col, task) => {
|
639
|
-
// return "my-grid-cell-class test"
|
640
|
-
// }
|
641
|
-
// ZT_Gantt.templates.timeline_cell_class = (task, date) => {
|
642
|
-
// return "my-task-cell-class Test "
|
643
|
-
// }
|
644
|
-
|
645
|
-
// add custom marker
|
646
|
-
ZT_Gantt.addMarker({
|
647
|
-
start_date: ZT_Gantt.add(new Date(), 1, "day"), //a Date object that sets the marker's date
|
648
|
-
css: "tomorrow", //a CSS class applied to the marker
|
649
|
-
text: "Tomorrow", //the marker title
|
650
|
-
title: ZT_Gantt.formatDateToString(
|
651
|
-
"%d %F %y",
|
652
|
-
ZT_Gantt.add(new Date(), 1, "day")
|
653
|
-
), // the marker's tooltip
|
654
|
-
});
|
655
|
-
|
656
|
-
// ZT_Gantt.addMarker({
|
657
|
-
// start_date: ZT_Gantt.add(new Date(),-1, "day"), //a Date object that sets the marker's date
|
658
|
-
// css: "yesterday", //a CSS class applied to the marker
|
659
|
-
// text: "Yesterday", //the marker title
|
660
|
-
// title: ZT_Gantt.formatDateToString("%d %F %Y", ZT_Gantt.add(new Date(),-1, "day")), // the marker's tooltip
|
661
|
-
// });
|
662
|
-
|
663
|
-
// render gantt
|
664
|
-
ZT_Gantt.render(element);
|
665
|
-
|
666
|
-
const jsGanttTheme = localStorage.getItem('jsGantt-theme');
|
667
|
-
|
668
|
-
|
669
|
-
// console.log(ZT_Gantt);
|
670
|
-
|
671
|
-
// to find task in gantt
|
672
|
-
// console.log(ZT_Gantt.getTask(69));
|
673
|
-
|
674
|
-
// custom events
|
675
|
-
ZT_Gantt.attachEvent("onTaskDblClick", (event) => {
|
676
|
-
// console.log("onTaskDblClick: ", event);
|
677
|
-
});
|
678
|
-
let idCount = 0;
|
679
|
-
ZT_Gantt.attachEvent("selectAreaOnDrag", (event) => {
|
680
|
-
// console.log("selectAreaOnDrag: ", event.task);
|
681
|
-
ZT_Gantt.addTask({
|
682
|
-
id: "Added" + idCount,
|
683
|
-
start_date: new Date(event.task.startDate),
|
684
|
-
end_date: new Date(event.task.endDate),
|
685
|
-
parent: event.task.parent,
|
686
|
-
text: "Task Added",
|
687
|
-
});
|
688
|
-
ZT_Gantt.render();
|
689
|
-
idCount += 1;
|
690
|
-
});
|
691
|
-
ZT_Gantt.attachEvent("onLinkDblClick", (event) => {
|
692
|
-
// console.log("onLinkDblClick: ", event);
|
693
|
-
// ZT_Gantt.deleteLink(event.link.id);
|
694
|
-
});
|
695
|
-
ZT_Gantt.attachEvent("onBeforeLinkAdd", (event) => {
|
696
|
-
// console.log("onBeforeLinkAdd: ", event);
|
697
|
-
});
|
698
|
-
ZT_Gantt.attachEvent("onLinkAdd", (event) => {
|
699
|
-
// console.log("onLinkAdd: ", event);
|
700
|
-
});
|
701
|
-
ZT_Gantt.attachEvent("onDeleteLink", (event) => {
|
702
|
-
// console.log("onDeleteLink: ", event);
|
703
|
-
});
|
704
|
-
ZT_Gantt.attachEvent("onBeforeTaskDrag", (event) => {
|
705
|
-
// console.log("onBeforeTaskDrag: ", event);
|
706
|
-
if (event.task.children.length !== 0) {
|
707
|
-
return false;
|
708
|
-
} else {
|
709
|
-
return true;
|
710
|
-
}
|
711
|
-
});
|
712
|
-
ZT_Gantt.attachEvent("onTaskDrag", (event) => {
|
713
|
-
// console.log("onTaskDrag: ", event);
|
714
|
-
});
|
715
|
-
ZT_Gantt.attachEvent("onAfterTaskDrag", (event) => {
|
716
|
-
console.log("onAfterTaskDrag: ", event);
|
717
|
-
console.log("onAfterTaskDrag??: ", ZT_Gantt.options.data);
|
718
|
-
// ZT_Gantt.autoScheduling();
|
719
|
-
});
|
720
|
-
ZT_Gantt.attachEvent("onBeforeTaskDrop", (event) => {
|
721
|
-
console.log("onBeforeTaskDrop: ", event);
|
722
|
-
if (event.parentTask?.id == 12) {
|
723
|
-
return false;
|
724
|
-
}
|
725
|
-
});
|
726
|
-
ZT_Gantt.attachEvent("onTaskToggle", (event) => {
|
727
|
-
// console.log("onTaskToggle: ", event);
|
728
|
-
});
|
729
|
-
|
730
|
-
ZT_Gantt.attachEvent("onTaskDelete", (event) => {
|
731
|
-
console.log("onTaskDelete: ", event);
|
732
|
-
});
|
733
|
-
ZT_Gantt.attachEvent("onAfterTaskUpdate", (event) => {
|
734
|
-
// console.log("onAfterTaskUpdate: ", event);
|
735
|
-
});
|
736
|
-
ZT_Gantt.attachEvent("onCellClick", (event) => {
|
737
|
-
// console.log("onCellClick: ", event);
|
738
|
-
});
|
739
|
-
ZT_Gantt.attachEvent("onRequestFullScreen", (event) => {
|
740
|
-
// console.log("onRequestFullScreen: ", event);
|
741
|
-
});
|
742
|
-
ZT_Gantt.attachEvent("onExitFullScreen", (event) => {
|
743
|
-
// console.log("onExitFullScreen: ", event);
|
744
|
-
});
|
745
|
-
// ZT_Gantt.attachEvent("onScroll", (event) => {
|
746
|
-
// console.log("onScroll: ", event);
|
747
|
-
// });
|
748
|
-
// ZT_Gantt.attachEvent("onResize", (event) => {
|
749
|
-
// console.log("onResize: ", event);
|
750
|
-
// });
|
751
|
-
ZT_Gantt.attachEvent("onAfterProgressDrag", (event) => {
|
752
|
-
// console.log("onAfterProgressDrag: ", event);
|
753
|
-
});
|
754
|
-
ZT_Gantt.attachEvent("onBeforeProgressDrag", (event) => {
|
755
|
-
// console.log("onBeforeProgressDrag: ", event);
|
756
|
-
// if(event.task.parent === 0){
|
757
|
-
// return false;
|
758
|
-
// }else{
|
759
|
-
// return true;
|
760
|
-
// }
|
761
|
-
});
|
762
|
-
ZT_Gantt.attachEvent("onAutoScheduling", (event) => {
|
763
|
-
// console.log("onAutoScheduling: ", event);
|
764
|
-
});
|
765
|
-
ZT_Gantt.attachEvent("onColorChange", (event) => {
|
766
|
-
// console.log("onColorChange: ", event);
|
767
|
-
});
|
768
|
-
ZT_Gantt.attachEvent("onBeforeTaskDblClick", (event) => {
|
769
|
-
// console.log("onBeforeTaskDblClick: ", event);
|
770
|
-
// if(event.task.id === 3){
|
771
|
-
// return false;
|
772
|
-
// }
|
773
|
-
});
|
774
|
-
ZT_Gantt.attachEvent("onBeforeSave", (event) => {
|
775
|
-
// console.log("onBeforeSave: ", event);
|
776
|
-
});
|
777
|
-
ZT_Gantt.attachEvent("onSave", (event) => {
|
778
|
-
// console.log("onSave: ", event);
|
779
|
-
});
|
780
|
-
|
781
|
-
let fullscreen = false;
|
782
|
-
function changeScreen() {
|
783
|
-
if (fullscreen === false) {
|
784
|
-
ZT_Gantt.requestFullScreen();
|
785
|
-
// ZT_Gantt.openTask(3);
|
786
|
-
} else {
|
787
|
-
ZT_Gantt.exitFullScreen();
|
788
|
-
}
|
789
|
-
}
|
790
|
-
|
791
|
-
function changeZoom(e) {
|
792
|
-
ZT_Gantt.options.zoomLevel = e.target.value;
|
793
|
-
if (e.target.value === "month" || e.target.value === "quarter") {
|
794
|
-
ZT_Gantt.options.startDate = "2024-01-01T11:46:17.775Z";
|
795
|
-
ZT_Gantt.options.endDate = "2024-12-31T11:46:17.775Z";
|
796
|
-
} else if (e.target.value === "year") {
|
797
|
-
ZT_Gantt.options.startDate = "2022-01-01T11:46:17.775Z";
|
798
|
-
ZT_Gantt.options.endDate = "2024-12-31T11:46:17.775Z";
|
799
|
-
} else {
|
800
|
-
ZT_Gantt.options.startDate = "2024-03-01T11:46:17.775Z";
|
801
|
-
ZT_Gantt.options.endDate = "2024-03-30T11:46:17.775Z";
|
802
|
-
}
|
803
|
-
ZT_Gantt.zoomInit();
|
804
|
-
}
|
805
|
-
|
806
|
-
function changeLang(e) {
|
807
|
-
ZT_Gantt.setLocalLang(e.target.value);
|
808
|
-
}
|
809
|
-
|
810
|
-
function changeCollapse(e) {
|
811
|
-
if (e.target.checked === true) {
|
812
|
-
ZT_Gantt.collapseAll();
|
813
|
-
} else {
|
814
|
-
ZT_Gantt.expandAll();
|
815
|
-
}
|
816
|
-
}
|
817
|
-
|
818
|
-
function changeToday(e) {
|
819
|
-
if (event.target.checked === true) {
|
820
|
-
ZT_Gantt.addTodayFlag();
|
821
|
-
} else {
|
822
|
-
ZT_Gantt.removeTodayFlag();
|
823
|
-
}
|
824
|
-
}
|
825
|
-
|
826
|
-
function exportChange(e) {
|
827
|
-
let stylesheet = [
|
828
|
-
"https://zehntech.github.io/js-gantt/gantt.css",
|
829
|
-
"https://zehntech.github.io/js-gantt/style.css",
|
830
|
-
];
|
831
|
-
if (e.target.value === "png") {
|
832
|
-
ZT_Gantt.exportToPNG("jsGanttChart", stylesheet);
|
833
|
-
} else if (e.target.value === "pdf") {
|
834
|
-
ZT_Gantt.exportToPDF("jsGanttChart", stylesheet);
|
835
|
-
} else {
|
836
|
-
ZT_Gantt.exportToExcel("jsGanttChart");
|
837
|
-
}
|
838
|
-
e.target.value = "";
|
839
|
-
}
|
840
|
-
|
841
|
-
function autoScheduling() {
|
842
|
-
ZT_Gantt.autoScheduling();
|
843
|
-
}
|
844
|
-
function addTask() {
|
845
|
-
ZT_Gantt.addTask({
|
846
|
-
id: 5354653546,
|
847
|
-
tracker_id: 4,
|
848
|
-
project_id: 86,
|
849
|
-
subject:
|
850
|
-
"Workflow - In the Workflow view, JOC reacts slow when handling large workflows or multiple smaller workflows in the same folder.",
|
851
|
-
description:
|
852
|
-
"requirements-\r\nwhen in the WORKFLOW view a larger workflow (several hundred jobs) or multiple smaller workflows in the same folder are completely expanded then JOC reacts rather slowly.\r\nThis affects actions like scrolling, opening instruction and order menus and executing items of these menus.",
|
853
|
-
due_date: "2024-05-17",
|
854
|
-
category_id: null,
|
855
|
-
status_id: 2,
|
856
|
-
assigned_to_id: 308,
|
857
|
-
priority_id: 2,
|
858
|
-
fixed_version_id: null,
|
859
|
-
author_id: 308,
|
860
|
-
lock_version: 3,
|
861
|
-
created_on: "2024-05-18T05:03:17.000Z",
|
862
|
-
updated_on: "2024-05-18T05:03:25.000Z",
|
863
|
-
start_date: "2024-05-17",
|
864
|
-
done_ratio: 70,
|
865
|
-
estimated_hours: 8.5,
|
866
|
-
parent: 12,
|
867
|
-
parent_id: null,
|
868
|
-
root_id: 53546,
|
869
|
-
lft: 1,
|
870
|
-
rgt: 2,
|
871
|
-
is_private: false,
|
872
|
-
closed_on: null,
|
873
|
-
tag_list: [],
|
874
|
-
});
|
875
|
-
// setTimeout(()=>{
|
876
|
-
|
877
|
-
// ZT_Gantt.openTask(280);
|
878
|
-
// },0)
|
879
|
-
// ZT_Gantt.parse(data);
|
880
|
-
ZT_Gantt.render();
|
881
|
-
// ZT_Gantt.deleteLink(1);
|
882
|
-
}
|
883
|
-
|
884
|
-
// get the position of the cell
|
885
|
-
// console.log(ZT_Gantt.posFromDate(new Date()));
|
886
|
-
|
887
|
-
// iterate over each task
|
888
|
-
// ZT_Gantt.eachTask((task)=>{
|
889
|
-
// console.log(task._id,"task _id ?????????????????????????????????");
|
890
|
-
// })
|
891
|
-
|
892
|
-
let cssStyle;
|
893
|
-
|
894
|
-
function changeTheme(isDark) {
|
895
|
-
const root = document.querySelector(":root");
|
896
|
-
if (isDark) {
|
897
|
-
document.getElementById('toggle').checked = true;
|
898
|
-
cssStyle = document.createElement("link");
|
899
|
-
cssStyle.setAttribute("rel", "stylesheet");
|
900
|
-
cssStyle.setAttribute("href", "src/theme/dark.css");
|
901
|
-
document.getElementsByTagName("head")[0].append(cssStyle);
|
902
|
-
localStorage.setItem('jsGantt-theme', 'dark');
|
903
|
-
|
904
|
-
root.style.setProperty("--bg-color", "#333332");
|
905
|
-
root.style.setProperty("--text-color", "#fff");
|
906
|
-
root.style.setProperty("--text-secondary-color", "#fff");
|
907
|
-
root.style.setProperty("--index-primary-color", "#1395BE");
|
908
|
-
root.style.setProperty("--index-primary-hover-color", "#0E7595");
|
909
|
-
} else {
|
910
|
-
if (cssStyle) {
|
911
|
-
cssStyle.remove();
|
912
|
-
}
|
913
|
-
root.style.setProperty("--bg-color", "#fff");
|
914
|
-
root.style.setProperty("--text-color", "#000");
|
915
|
-
root.style.setProperty("--text-secondary-color", "#fff");
|
916
|
-
root.style.setProperty("--index-primary-color", "#4ca0fff2");
|
917
|
-
root.style.setProperty("--index-primary-hover-color", "#3585e0f2");
|
918
|
-
localStorage.setItem('jsGantt-theme', 'light');
|
919
|
-
}
|
920
|
-
}
|
921
|
-
|
922
|
-
this.changeTheme(jsGanttTheme == 'dark');
|
923
|
-
|
924
|
-
let getScale = () => {
|
925
|
-
console.log(ZT_Gantt.getScale());
|
926
|
-
};
|
927
|
-
|
928
|
-
function searchTask(e) {
|
929
|
-
let isFilter = e.target.value.trim() !== "";
|
930
|
-
ZT_Gantt.filterTask((task) => {
|
931
|
-
return task.text.toLowerCase().includes(e.target.value.toLowerCase());
|
932
|
-
}, isFilter, true);
|
933
|
-
}
|
934
|
-
function addCol() {
|
935
|
-
ZT_Gantt.options.columns.push({
|
936
|
-
name: "progress",
|
937
|
-
width: 245,
|
938
|
-
min_width: 80,
|
939
|
-
max_width: 300,
|
940
|
-
tree: false,
|
941
|
-
label: "Progress",
|
942
|
-
resize: true,
|
943
|
-
align: "center",
|
944
|
-
template: (task) => {
|
945
|
-
return `<span>${task.progress || 0}</span>`;
|
946
|
-
},
|
947
|
-
});
|
948
|
-
ZT_Gantt.render();
|
949
|
-
}
|
950
|
-
|
951
|
-
function removeCol() {
|
952
|
-
ZT_Gantt.options.columns.splice(ZT_Gantt.options.columns.length - 1, 1);
|
953
|
-
ZT_Gantt.render();
|
954
|
-
}
|
955
|
-
|
956
|
-
function startTour() {
|
957
|
-
let options = {
|
958
|
-
overlayOpacity: 0.7,
|
959
|
-
stagePadding: 10,
|
960
|
-
stageRadius: 5,
|
961
|
-
overlayColor: "#000",
|
962
|
-
animate: true,
|
963
|
-
smoothScroll: true,
|
964
|
-
allowBackdropClose: true,
|
965
|
-
popupClass: "popupClass",
|
966
|
-
keyboardControl: true,
|
967
|
-
showProgress: true,
|
968
|
-
visibleButtons: ['next', 'previous', 'close'],
|
969
|
-
disableButtons: [],
|
970
|
-
animationDuration: 400,
|
971
|
-
onNextClick: (step) => {
|
972
|
-
console.log(step, " Next Click");
|
973
|
-
},
|
974
|
-
onClose: () => {
|
975
|
-
console.log("Tour Closed");
|
976
|
-
},
|
977
|
-
onPreviousClick: (step) => {
|
978
|
-
console.log(step, " Previous Click");
|
979
|
-
},
|
980
|
-
steps: [
|
981
|
-
{
|
982
|
-
element: ".collapse-container",
|
983
|
-
popup: {
|
984
|
-
title: "Toggle Collapse",
|
985
|
-
description: "Toggle all the Tasks!!",
|
986
|
-
side: "bottom",
|
987
|
-
align: "start",
|
988
|
-
},
|
989
|
-
},
|
990
|
-
{
|
991
|
-
element: ".today-container",
|
992
|
-
popup: {
|
993
|
-
title: "Toggle Marker",
|
994
|
-
description: "Toggle Today Marker!!",
|
995
|
-
side: "bottom",
|
996
|
-
align: "start",
|
997
|
-
},
|
998
|
-
},
|
999
|
-
{
|
1000
|
-
element: ".export-data",
|
1001
|
-
popup: {
|
1002
|
-
title: "Export Chart",
|
1003
|
-
description: "Get your charts in PDF, PNG, or Excel formats",
|
1004
|
-
side: "bottom",
|
1005
|
-
align: "center",
|
1006
|
-
},
|
1007
|
-
},
|
1008
|
-
{
|
1009
|
-
element: ".fullscreen",
|
1010
|
-
popup: {
|
1011
|
-
title: "Full Screen",
|
1012
|
-
description: "View your Gantt in full screen for an immersive experience",
|
1013
|
-
side: "bottom",
|
1014
|
-
align: "end",
|
1015
|
-
},
|
1016
|
-
},
|
1017
|
-
{
|
1018
|
-
element: ".auto-scheduling",
|
1019
|
-
popup: {
|
1020
|
-
title: "Auto Scheduling",
|
1021
|
-
description: "Tasks are automatically scheduled.",
|
1022
|
-
side: "bottom",
|
1023
|
-
align: "center",
|
1024
|
-
},
|
1025
|
-
},
|
1026
|
-
{
|
1027
|
-
element: ".zoom",
|
1028
|
-
popup: {
|
1029
|
-
title: "Zoom Levels",
|
1030
|
-
description: "Multiple timeline views - hour, day, week, month, quarter, and year.",
|
1031
|
-
side: "bottom",
|
1032
|
-
align: "end",
|
1033
|
-
},
|
1034
|
-
},
|
1035
|
-
{
|
1036
|
-
element: ".Language",
|
1037
|
-
popup: {
|
1038
|
-
title: "Change Language",
|
1039
|
-
description: "Change language of the gantt chart.",
|
1040
|
-
side: "bottom",
|
1041
|
-
align: "end",
|
1042
|
-
},
|
1043
|
-
},
|
1044
|
-
{
|
1045
|
-
element: ".dark-mode",
|
1046
|
-
popup: {
|
1047
|
-
title: "Toggle Dark Mode",
|
1048
|
-
description: "Dark mode for those late-night work sessions.",
|
1049
|
-
side: "bottom",
|
1050
|
-
align: "end",
|
1051
|
-
},
|
1052
|
-
},
|
1053
|
-
{
|
1054
|
-
element: ".gantt-search",
|
1055
|
-
popup: {
|
1056
|
-
title: "Search Tasks",
|
1057
|
-
description: "Search Tasks to quickly find and access tasks based on your search criteria. Streamline your workflow by searching for specific tasks with ease.",
|
1058
|
-
side: "bottom",
|
1059
|
-
align: "end",
|
1060
|
-
},
|
1061
|
-
},
|
1062
|
-
{
|
1063
|
-
element: "#js-gantt",
|
1064
|
-
popup: {
|
1065
|
-
title: "Gantt Chart",
|
1066
|
-
description: "The Gantt Chart view provides a visual representation of project tasks and their timelines, allowing you to efficiently manage project schedules, dependencies, and progress. Easily track and plan tasks, making project management a seamless experience.",
|
1067
|
-
side: "top",
|
1068
|
-
align: "start",
|
1069
|
-
},
|
1070
|
-
},
|
1071
|
-
{
|
1072
|
-
popup: {
|
1073
|
-
title: "That's everything",
|
1074
|
-
description: `<div class="finish">
|
1075
|
-
<p>Looks like you're ready to go 🎉</p>
|
1076
|
-
<p>Click anywhere to exit the tour.</p>
|
1077
|
-
<img src="https://media.tenor.com/y2JXkY1pXkwAAAAM/cat-computer.gif">
|
1078
|
-
</div>`,
|
1079
|
-
side: "over",
|
1080
|
-
align: "over",
|
1081
|
-
},
|
1082
|
-
},
|
1083
|
-
],
|
1084
|
-
};
|
1085
|
-
let tour = new ztTour(options);
|
1086
|
-
// console.log(ztTour,"ztTour");
|
1087
|
-
tour.start();
|
1088
|
-
}
|
1089
|
-
|
1090
|
-
document.querySelector(".hint-icon").removeEventListener("click", handleClick);
|
1091
|
-
document.querySelector(".hint-icon").addEventListener("click", handleClick);
|
1092
|
-
|
1093
|
-
// let tour = new ztTour({});
|
1094
|
-
function handleClick(e) {
|
1095
|
-
tour.showHint({
|
1096
|
-
element: ".hint-icon",
|
1097
|
-
innerHTML: `<p>Click on "Start Tour" to start the tour.</p>`
|
1098
|
-
});
|
1099
|
-
}
|
1100
|
-
let intro = `
|
1101
|
-
<h2 style="font-size: 18px; margin-bottom: 5px; font-weight: 600; text-align:center">jsGantt Chart</h2>
|
1102
|
-
<p style="line-height: 18px; text-align: justify;margin-bottom: 5px;">Welcome to the jsGantt Chart Library.
|
1103
|
-
This library provides a powerful set of tools and functionalities to create interactive Gantt charts for project management. This documentation will guide you through the installation process,
|
1104
|
-
usage instructions, and available features of the library.</p>
|
1105
|
-
<p>Click on "Start Tour" to start the tour.</p>
|
1106
|
-
`;
|
1107
|
-
// tour.showAnnouncement(intro);
|
1108
|
-
</script>
|
1109
|
-
|
1110
|
-
</body>
|
1111
|
-
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html lang="en">
|
3
|
+
|
4
|
+
<head>
|
5
|
+
<meta charset="UTF-8" />
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
7
|
+
<title>jsGantt</title>
|
8
|
+
<link rel="stylesheet" href="./style.css" />
|
9
|
+
<link rel="stylesheet" href="src/gantt.css" />
|
10
|
+
<link rel="stylesheet" href="src/assets/zt-tour/zt-tour.css" />
|
11
|
+
<!-- <link rel="stylesheet" href="./theme/dark.css" /> -->
|
12
|
+
<link rel="shortcut icon" href="src/assets/images/jsGanttLogo.png" type="image/x-icon" />
|
13
|
+
<script src="src/gantt.js"></script>
|
14
|
+
</head>
|
15
|
+
|
16
|
+
<body>
|
17
|
+
<div class="js-gantt-d-flex action-container">
|
18
|
+
<div class="collapse-container">
|
19
|
+
<span>Collapse</span>
|
20
|
+
<input type="checkbox" id="collapse-switch" onchange="changeCollapse(event)" />
|
21
|
+
<label for="collapse-switch">collapse</label>
|
22
|
+
</div>
|
23
|
+
|
24
|
+
<div class="collapse-container today-container">
|
25
|
+
<span>Today</span>
|
26
|
+
<input type="checkbox" id="today-switch" checked="true" onchange="changeToday(event)" />
|
27
|
+
<label for="today-switch">Today</label>
|
28
|
+
</div>
|
29
|
+
<div class="export-data">
|
30
|
+
<select class="export" id="export" placeholder="Export" onchange="exportChange(event)">
|
31
|
+
<option value="" disabled="" selected="">Export</option>
|
32
|
+
<option value="png">Export To PNG</option>
|
33
|
+
<option value="pdf">Export To PDF</option>
|
34
|
+
<option value="excel">Export To Excel</option>
|
35
|
+
</select>
|
36
|
+
</div>
|
37
|
+
<div class="fullscreen">
|
38
|
+
<button class="btn" onclick="changeScreen()">FullScreen</button>
|
39
|
+
</div>
|
40
|
+
<div class="auto-scheduling">
|
41
|
+
<!-- <span class="coming-soon">coming soon</span> -->
|
42
|
+
<button class="btn" onclick="autoScheduling()">Auto Scheduling</button>
|
43
|
+
</div>
|
44
|
+
<div class="zoom">
|
45
|
+
<select class="scale-zoom" id="scale_zoom" placeholder="Zoom to" onchange="changeZoom(event)">
|
46
|
+
<option value="" disabled="">Zoom to:</option>
|
47
|
+
<option value="year">Years</option>
|
48
|
+
<option value="quarter">Quarters</option>
|
49
|
+
<option value="month">Months</option>
|
50
|
+
<option value="week">Weeks</option>
|
51
|
+
<option value="day" selected="day">Days</option>
|
52
|
+
<option value="hour">Hour</option>
|
53
|
+
</select>
|
54
|
+
</div>
|
55
|
+
<div class="Language">
|
56
|
+
<select class="lang" id="lang" placeholder="Select Language" onchange="changeLang(event)">
|
57
|
+
<option value="" disabled="" selected="">Select Language:</option>
|
58
|
+
<option value="ar">Arabic</option>
|
59
|
+
<option value="be">Belarusian</option>
|
60
|
+
<option value="en" selected="en">English</option>
|
61
|
+
<option value="ca">Catalan</option>
|
62
|
+
<option value="cn">Chinese</option>
|
63
|
+
<option value="hr">Croatian</option>
|
64
|
+
<option value="cs">Czech</option>
|
65
|
+
<option value="da">Danish</option>
|
66
|
+
<option value="nl">Dutch</option>
|
67
|
+
<option value="fi">Finnish</option>
|
68
|
+
<option value="fr">French</option>
|
69
|
+
<option value="de">German</option>
|
70
|
+
<option value="el">Greek</option>
|
71
|
+
<option value="he">Hebrew</option>
|
72
|
+
<option value="hi">Hindi (India)</option>
|
73
|
+
<option value="hu">Hungarian</option>
|
74
|
+
<option value="id">Indonesian</option>
|
75
|
+
<option value="it">Italian</option>
|
76
|
+
<option value="ja">Japanese</option>
|
77
|
+
<option value="kr">Korean</option>
|
78
|
+
<option value="no">Norwegian</option>
|
79
|
+
<option value="fa">Persian</option>
|
80
|
+
<option value="pl">Polish</option>
|
81
|
+
<option value="pt">Portuguese</option>
|
82
|
+
<option value="ro">Romanian</option>
|
83
|
+
<option value="ro">Russian</option>
|
84
|
+
<option value="sk">Slovak</option>
|
85
|
+
<option value="si">Slovenian</option>
|
86
|
+
<option value="es">Spanish</option>
|
87
|
+
<option value="sv">Swedish</option>
|
88
|
+
<option value="tr">Turkish</option>
|
89
|
+
<option value="ua">Ukrainian</option>
|
90
|
+
</select>
|
91
|
+
</div>
|
92
|
+
|
93
|
+
<div class="dark-mode">
|
94
|
+
<span>Dark Mode</span>
|
95
|
+
<input type="checkbox" id="toggle" onchange="changeTheme(event.target.checked)" class="toggle--checkbox" />
|
96
|
+
<label for="toggle" class="toggle-theme"> </label>
|
97
|
+
</div>
|
98
|
+
<div class="fullscreen">
|
99
|
+
<button class="btn" style="margin-left: 10px" onclick="startTour()">
|
100
|
+
Start Tour
|
101
|
+
</button>
|
102
|
+
<svg class="hint-icon" width="18px" height="18px" style="margin-bottom: -4px;" viewBox="0 0 1024 1024"
|
103
|
+
xmlns="http://www.w3.org/2000/svg" fill="#000000">
|
104
|
+
<g id="SVGRepo_bgCarrier" stroke-width="0"></g>
|
105
|
+
<g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"></g>
|
106
|
+
<g id="SVGRepo_iconCarrier">
|
107
|
+
<path fill="#55A5FF"
|
108
|
+
d="M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896zm23.744 191.488c-52.096 0-92.928 14.784-123.2 44.352-30.976 29.568-45.76 70.4-45.76 122.496h80.256c0-29.568 5.632-52.8 17.6-68.992 13.376-19.712 35.2-28.864 66.176-28.864 23.936 0 42.944 6.336 56.32 19.712 12.672 13.376 19.712 31.68 19.712 54.912 0 17.6-6.336 34.496-19.008 49.984l-8.448 9.856c-45.76 40.832-73.216 70.4-82.368 89.408-9.856 19.008-14.08 42.24-14.08 68.992v9.856h80.96v-9.856c0-16.896 3.52-31.68 10.56-45.76 6.336-12.672 15.488-24.64 28.16-35.2 33.792-29.568 54.208-48.576 60.544-55.616 16.896-22.528 26.048-51.392 26.048-86.592 0-42.944-14.08-76.736-42.24-101.376-28.16-25.344-65.472-37.312-111.232-37.312zm-12.672 406.208a54.272 54.272 0 0 0-38.72 14.784 49.408 49.408 0 0 0-15.488 38.016c0 15.488 4.928 28.16 15.488 38.016A54.848 54.848 0 0 0 523.072 768c15.488 0 28.16-4.928 38.72-14.784a51.52 51.52 0 0 0 16.192-38.72 51.968 51.968 0 0 0-15.488-38.016 55.936 55.936 0 0 0-39.424-14.784z">
|
109
|
+
</path>
|
110
|
+
</g>
|
111
|
+
</svg>
|
112
|
+
</div>
|
113
|
+
<!-- <button onclick="ZT_Gantt.destroy()">destroy</button>
|
114
|
+
<button onclick="ZT_Gantt.render()">render</button> -->
|
115
|
+
<!-- <button onclick="addCol()">Add Column</button>
|
116
|
+
<button onclick="removeCol()">Remove Column</button> -->
|
117
|
+
<input type="search" placeholder="Search Task" id="gantt-search" name="gantt-search" class="gantt-search"
|
118
|
+
oninput="searchTask(event)" />
|
119
|
+
</div>
|
120
|
+
<div id="js-gantt"></div>
|
121
|
+
</div>
|
122
|
+
<script src="src/assets/zt-tour/zt-tour.js"></script>
|
123
|
+
<script>
|
124
|
+
let data = [
|
125
|
+
{ id: 1, text: "Project 1", parent: 0, progress: 30 },
|
126
|
+
{
|
127
|
+
id: 2,
|
128
|
+
text: "Task #2",
|
129
|
+
start_date: "06-05-2024",
|
130
|
+
end_date: "06-05-2024",
|
131
|
+
parent: 1,
|
132
|
+
progress: 50,
|
133
|
+
},
|
134
|
+
{
|
135
|
+
id: 23,
|
136
|
+
text: "Final Milestone",
|
137
|
+
start_date: "06-17-2024",
|
138
|
+
end_date: "06-18-2024",
|
139
|
+
parent: 1,
|
140
|
+
type: "milestone",
|
141
|
+
},
|
142
|
+
{
|
143
|
+
id: 3,
|
144
|
+
text: "Task #3",
|
145
|
+
start_date: "06-06-2024",
|
146
|
+
end_date: "06-07-2024",
|
147
|
+
parent: 1,
|
148
|
+
progress: 60,
|
149
|
+
},
|
150
|
+
{
|
151
|
+
id: 5,
|
152
|
+
text: "SubTask #5",
|
153
|
+
start_date: "06-04-2024",
|
154
|
+
end_date: "06-06-2024",
|
155
|
+
parent: 3,
|
156
|
+
progress: 20,
|
157
|
+
},
|
158
|
+
{
|
159
|
+
id: 6,
|
160
|
+
text: "SubTask #6",
|
161
|
+
start_date: "06-06-2024",
|
162
|
+
end_date: "06-09-2024",
|
163
|
+
parent: 3,
|
164
|
+
progress: 10,
|
165
|
+
},
|
166
|
+
{
|
167
|
+
id: 7,
|
168
|
+
text: "SubTask #7",
|
169
|
+
start_date: "06-08-2024",
|
170
|
+
end_date: "06-11-2024",
|
171
|
+
parent: 3,
|
172
|
+
progress: 50,
|
173
|
+
},
|
174
|
+
{
|
175
|
+
id: 4,
|
176
|
+
text: "Task #4",
|
177
|
+
start_date: "06-13-2024",
|
178
|
+
end_date: "06-16-2024",
|
179
|
+
parent: 1,
|
180
|
+
progress: 90,
|
181
|
+
},
|
182
|
+
{ id: 8, text: "Project 2", parent: 0, progress: 80 },
|
183
|
+
{
|
184
|
+
id: 12,
|
185
|
+
text: "Task #12",
|
186
|
+
start_date: "06-06-2024",
|
187
|
+
end_date: "06-06-2024",
|
188
|
+
parent: 8,
|
189
|
+
progress: 50,
|
190
|
+
},
|
191
|
+
{
|
192
|
+
id: 25,
|
193
|
+
text: "Next Milestone",
|
194
|
+
start_date: "06-20-2024",
|
195
|
+
end_date: "06-20-2024",
|
196
|
+
parent: 8,
|
197
|
+
type: "milestone",
|
198
|
+
},
|
199
|
+
{
|
200
|
+
id: 13,
|
201
|
+
text: "Task #13",
|
202
|
+
start_date: "06-04-2024",
|
203
|
+
end_date: "06-07-2024",
|
204
|
+
parent: 8,
|
205
|
+
},
|
206
|
+
{
|
207
|
+
id: 14,
|
208
|
+
text: "Task #14",
|
209
|
+
start_date: "06-05-2024",
|
210
|
+
end_date: "06-09-2024",
|
211
|
+
parent: 8,
|
212
|
+
},
|
213
|
+
{
|
214
|
+
id: 15,
|
215
|
+
text: "Task #15",
|
216
|
+
start_date: "06-07-2024",
|
217
|
+
end_date: "06-08-2024",
|
218
|
+
parent: 8,
|
219
|
+
},
|
220
|
+
{ id: 9, text: "Project 3", parent: 0, progress: 10 },
|
221
|
+
{
|
222
|
+
id: 16,
|
223
|
+
text: "Task #16",
|
224
|
+
start_date: "06-05-2024",
|
225
|
+
end_date: "06-09-2024",
|
226
|
+
parent: 9,
|
227
|
+
},
|
228
|
+
{
|
229
|
+
id: 17,
|
230
|
+
text: "Task #17",
|
231
|
+
start_date: "06-06-2024",
|
232
|
+
end_date: "06-08-2024",
|
233
|
+
parent: 9,
|
234
|
+
},
|
235
|
+
{ id: 10, text: "Project 4", parent: 0, progress: 40 },
|
236
|
+
{
|
237
|
+
id: 18,
|
238
|
+
text: "Task #18",
|
239
|
+
start_date: "06-08-2024",
|
240
|
+
end_date: "06-16-2024",
|
241
|
+
parent: 10,
|
242
|
+
},
|
243
|
+
{
|
244
|
+
id: 19,
|
245
|
+
text: "Task #19",
|
246
|
+
start_date: "06-02-2024",
|
247
|
+
end_date: "06-09-2024",
|
248
|
+
parent: 10,
|
249
|
+
},
|
250
|
+
{
|
251
|
+
id: 20,
|
252
|
+
text: "Task #20",
|
253
|
+
start_date: "06-11-2024",
|
254
|
+
end_date: "06-13-2024",
|
255
|
+
parent: 10,
|
256
|
+
},
|
257
|
+
{ id: 11, text: "Project 5", parent: 0, progress: 100 },
|
258
|
+
{
|
259
|
+
id: 21,
|
260
|
+
text: "Task #21",
|
261
|
+
start_date: "06-04-2024",
|
262
|
+
end_date: "06-10-2024",
|
263
|
+
parent: 11,
|
264
|
+
},
|
265
|
+
{
|
266
|
+
id: 22,
|
267
|
+
text: "Task #22",
|
268
|
+
start_date: "06-06-2024",
|
269
|
+
end_date: "06-12-2024",
|
270
|
+
parent: 11,
|
271
|
+
},
|
272
|
+
{
|
273
|
+
id: 123,
|
274
|
+
text: "Task #123",
|
275
|
+
start_date: "06-03-2024",
|
276
|
+
end_date: "06-12-2024",
|
277
|
+
parent: 0,
|
278
|
+
},
|
279
|
+
];
|
280
|
+
|
281
|
+
// let parents = [1]//,8,9,10,11]
|
282
|
+
// for(let i = 0; i < parents.length; i++){
|
283
|
+
// for(let j = 0; j < 50; j++){
|
284
|
+
// let task = {
|
285
|
+
// id: `task-${parents[i]}-${j}`,
|
286
|
+
// text: "Test #Task",
|
287
|
+
// start_date: "03-09-2024",
|
288
|
+
// end_date: "03-09-2024",
|
289
|
+
// parent: parents[i],
|
290
|
+
// progress: 50,
|
291
|
+
// }
|
292
|
+
// data.push(task);
|
293
|
+
// }
|
294
|
+
// }
|
295
|
+
|
296
|
+
let element = document.getElementById("js-gantt");
|
297
|
+
let ZT_Gantt = new jsGantt(element);
|
298
|
+
window.jsGantt = ZT_Gantt;
|
299
|
+
|
300
|
+
const textEditor = { type: "text", map_to: "text" };
|
301
|
+
const dateEditor = {
|
302
|
+
type: "date", map_to: "start_date", min: new Date(2018, 0, 1),
|
303
|
+
max: new Date(2019, 0, 1)
|
304
|
+
};
|
305
|
+
const numberEditor = { type: "number", map_to: "progress", min: 0, max: 100 };
|
306
|
+
const selectEditor = { type: "select", map_to: "priority", options: ["Low", "Medium", "High"] };
|
307
|
+
|
308
|
+
ZT_Gantt.options.columns = [
|
309
|
+
{
|
310
|
+
name: "text",
|
311
|
+
width: 245,
|
312
|
+
min_width: 80,
|
313
|
+
max_width: 300,
|
314
|
+
tree: true,
|
315
|
+
label: "Task Name",
|
316
|
+
resize: true,
|
317
|
+
template: (task) => {
|
318
|
+
return `<span>${task.text}</span>`;
|
319
|
+
},
|
320
|
+
editor: textEditor
|
321
|
+
},
|
322
|
+
{
|
323
|
+
name: "progress",
|
324
|
+
width: 245,
|
325
|
+
min_width: 80,
|
326
|
+
max_width: 300,
|
327
|
+
tree: false,
|
328
|
+
label: "Progress",
|
329
|
+
resize: true,
|
330
|
+
align: "center",
|
331
|
+
template: (task) => {
|
332
|
+
return `<span>${task.progress || 0}</span>`;
|
333
|
+
},
|
334
|
+
// editor: numberEditor
|
335
|
+
},
|
336
|
+
// {
|
337
|
+
// name: "start_date",
|
338
|
+
// width: 245,
|
339
|
+
// min_width: 80,
|
340
|
+
// max_width: 300,
|
341
|
+
// tree: false,
|
342
|
+
// label: "Start Date",
|
343
|
+
// resize: true,
|
344
|
+
// align: "center",
|
345
|
+
// template: (task) => {
|
346
|
+
// return `<span>${task.start_date || 0}</span>`;
|
347
|
+
// },
|
348
|
+
// editor: dateEditor
|
349
|
+
// },
|
350
|
+
// {
|
351
|
+
// name: "priority",
|
352
|
+
// width: 245,
|
353
|
+
// min_width: 80,
|
354
|
+
// max_width: 300,
|
355
|
+
// tree: false,
|
356
|
+
// label: "Priority",
|
357
|
+
// resize: true,
|
358
|
+
// align: "center",
|
359
|
+
// template: (task) => {
|
360
|
+
// return `<span>${task?.priority || ""}</span>`;
|
361
|
+
// },
|
362
|
+
// editor: selectEditor
|
363
|
+
// },
|
364
|
+
];
|
365
|
+
|
366
|
+
ZT_Gantt.options.date_format = "%m-%d-%Y";
|
367
|
+
ZT_Gantt.options.localLang = "en";
|
368
|
+
ZT_Gantt.options.data = data;
|
369
|
+
ZT_Gantt.options.collapse = false;
|
370
|
+
ZT_Gantt.options.weekends = ["Sat", "Sun"];
|
371
|
+
ZT_Gantt.options.fullWeek = true;
|
372
|
+
ZT_Gantt.options.todayMarker = true;
|
373
|
+
ZT_Gantt.options.dropArea = true;
|
374
|
+
ZT_Gantt.options.customMarker = [
|
375
|
+
{
|
376
|
+
start_date: '06-20-2024',
|
377
|
+
css: "party",
|
378
|
+
text: "🎂 🎉",
|
379
|
+
title: "Ek aur Sal Barbad!"
|
380
|
+
}
|
381
|
+
];
|
382
|
+
ZT_Gantt.options.updateLinkOnDrag = true;
|
383
|
+
ZT_Gantt.options.splitTask = false;
|
384
|
+
ZT_Gantt.options.sort = true;
|
385
|
+
// ZT_Gantt.templates.showLightBox = false;
|
386
|
+
|
387
|
+
// new feature of gantt -----
|
388
|
+
ZT_Gantt.options.mouseScroll = true; // default is false
|
389
|
+
ZT_Gantt.options.ctrlKeyRequiredForMouseScroll = true; // default is true
|
390
|
+
|
391
|
+
ZT_Gantt.options.addLinks = (task) => {
|
392
|
+
if (task.parent === 0) {
|
393
|
+
return false;
|
394
|
+
}
|
395
|
+
return true;
|
396
|
+
};
|
397
|
+
|
398
|
+
ZT_Gantt.options.exportApi = "https://js-gantt.zehntech.net/";
|
399
|
+
// ZT_Gantt.options.exportApi = "http://192.168.0.155:8300/";
|
400
|
+
ZT_Gantt.options.taskColor = true;
|
401
|
+
ZT_Gantt.options.taskOpacity = 0.7;
|
402
|
+
ZT_Gantt.options.links = [
|
403
|
+
// 0 is finish_to_start
|
404
|
+
// 1 is start_to_start
|
405
|
+
// 2 is finish_to_finish
|
406
|
+
// 3 is start_to_finish
|
407
|
+
{ id: 1, source: 2, target: 23, type: 1 },
|
408
|
+
{ id: 2, source: 3, target: 6, type: 2 },
|
409
|
+
{ id: 3, source: 4, target: 23, type: 3 },
|
410
|
+
{ id: 4, source: 12, target: 15 },
|
411
|
+
];
|
412
|
+
ZT_Gantt.options.weekStart = 1; // set the start of the week
|
413
|
+
ZT_Gantt.options.sidebarWidth = 300;
|
414
|
+
ZT_Gantt.options.scales = [
|
415
|
+
{
|
416
|
+
unit: "week",
|
417
|
+
step: 1,
|
418
|
+
format: (t) => {
|
419
|
+
const { startDate: a, endDate: n, weekNum: i } = weekStartAndEnd(t);
|
420
|
+
return ` ${ZT_Gantt.formatDateToString(
|
421
|
+
"%j %M",
|
422
|
+
a
|
423
|
+
)} - ${ZT_Gantt.formatDateToString(
|
424
|
+
"%j %M",
|
425
|
+
n
|
426
|
+
)}, ${a.getFullYear()}`;
|
427
|
+
},
|
428
|
+
},
|
429
|
+
{ unit: "day", step: 1, format: "%d %D" },
|
430
|
+
];
|
431
|
+
|
432
|
+
ZT_Gantt.options.zoomLevel = "day";
|
433
|
+
|
434
|
+
// zoom config
|
435
|
+
ZT_Gantt.options.zoomConfig = {
|
436
|
+
levels: [
|
437
|
+
{
|
438
|
+
name: "hour",
|
439
|
+
scale_height: 27,
|
440
|
+
min_col_width: 550,
|
441
|
+
scales: [
|
442
|
+
{ unit: "day", step: 1, format: "%d %M" },
|
443
|
+
{ unit: "hour", step: 1, format: "%H" },
|
444
|
+
],
|
445
|
+
},
|
446
|
+
{
|
447
|
+
name: "day",
|
448
|
+
scale_height: 27,
|
449
|
+
min_col_width: 80,
|
450
|
+
scales: [
|
451
|
+
{ unit: "week", step: 1, format: "%W" },
|
452
|
+
{ unit: "day", step: 1, format: "%d %M" },
|
453
|
+
],
|
454
|
+
},
|
455
|
+
{
|
456
|
+
name: "week",
|
457
|
+
scale_height: 45,
|
458
|
+
min_col_width: 50,
|
459
|
+
scales: [
|
460
|
+
{ unit: "month", step: 1, format: "%M" },
|
461
|
+
{
|
462
|
+
unit: "week",
|
463
|
+
step: 1,
|
464
|
+
format: (t) => {
|
465
|
+
const {
|
466
|
+
startDate: a,
|
467
|
+
endDate: n,
|
468
|
+
weekNum: i,
|
469
|
+
} = weekStartAndEnd(t);
|
470
|
+
return ` ${ZT_Gantt.formatDateToString(
|
471
|
+
"%j %M",
|
472
|
+
a
|
473
|
+
)} - ${ZT_Gantt.formatDateToString(
|
474
|
+
"%j %M",
|
475
|
+
n
|
476
|
+
)}, ${a.getFullYear()}`;
|
477
|
+
},
|
478
|
+
},
|
479
|
+
],
|
480
|
+
},
|
481
|
+
{
|
482
|
+
name: "month",
|
483
|
+
scale_height: 30,
|
484
|
+
min_col_width: 120,
|
485
|
+
scales: [
|
486
|
+
{ unit: "year", step: 1, format: "%Y" },
|
487
|
+
{ unit: "month", step: 1, format: "%M" },
|
488
|
+
],
|
489
|
+
},
|
490
|
+
{
|
491
|
+
name: "quarter",
|
492
|
+
scale_height: 25,
|
493
|
+
min_col_width: 90,
|
494
|
+
scales: [
|
495
|
+
{ unit: "year", step: 1, format: "%Y" },
|
496
|
+
{ unit: "quarter", step: 1, format: "Q%q" },
|
497
|
+
{ unit: "month", format: "%M" },
|
498
|
+
],
|
499
|
+
},
|
500
|
+
{
|
501
|
+
name: "year",
|
502
|
+
scale_height: 30,
|
503
|
+
min_col_width: 30,
|
504
|
+
scales: [
|
505
|
+
{ unit: "year", step: 3, format: "2022 - 2024" },
|
506
|
+
{ unit: "year", step: 1, format: "%Y" },
|
507
|
+
],
|
508
|
+
},
|
509
|
+
],
|
510
|
+
};
|
511
|
+
|
512
|
+
ZT_Gantt.options.scale_height = 30;
|
513
|
+
ZT_Gantt.options.row_height = 24;
|
514
|
+
ZT_Gantt.options.minColWidth = 80;
|
515
|
+
ZT_Gantt.options.selectAreaOnDrag = true;
|
516
|
+
ZT_Gantt.options.taskProgress = true;
|
517
|
+
|
518
|
+
// Gantt layout to implement columns in right side
|
519
|
+
// ZT_Gantt.options.rightGrid = [
|
520
|
+
// {
|
521
|
+
// name: "text",
|
522
|
+
// width: 245,
|
523
|
+
// min_width: 80,
|
524
|
+
// max_width: 120,
|
525
|
+
// tree: true,
|
526
|
+
// label: "Task Name",
|
527
|
+
// resize: true,
|
528
|
+
// template: (task) => {
|
529
|
+
// return `<span>${task.text}</span>`;
|
530
|
+
// },
|
531
|
+
// },
|
532
|
+
// {
|
533
|
+
// name: "text",
|
534
|
+
// width: 245,
|
535
|
+
// min_width: 80,
|
536
|
+
// max_width: 120,
|
537
|
+
// tree: false,
|
538
|
+
// align: "center",
|
539
|
+
// label: "Task Name",
|
540
|
+
// resize: true,
|
541
|
+
// template: (task) => {
|
542
|
+
// return `<span>${task.text}</span>`;
|
543
|
+
// },
|
544
|
+
// },
|
545
|
+
// ];
|
546
|
+
|
547
|
+
function weekStartAndEnd(t) {
|
548
|
+
const e = t.getDay();
|
549
|
+
let a, n;
|
550
|
+
0 === e
|
551
|
+
? ((a = ZT_Gantt.add(t, -6, "day")), (n = t))
|
552
|
+
: ((a = ZT_Gantt.add(t, -1 * e + 1, "day")),
|
553
|
+
(n = ZT_Gantt.add(t, 7 - e, "day")));
|
554
|
+
return {
|
555
|
+
startDate: a,
|
556
|
+
endDate: n,
|
557
|
+
weekNum: ZT_Gantt.formatDateToString("%W", t),
|
558
|
+
};
|
559
|
+
}
|
560
|
+
|
561
|
+
ZT_Gantt.options.startDate = "2024-06-01T11:46:17.775Z";
|
562
|
+
ZT_Gantt.options.endDate = "2024-10-30T11:46:17.775Z";
|
563
|
+
|
564
|
+
ZT_Gantt.templates.tooltip_text = function (start, end, task) {
|
565
|
+
return `<b>${task.parent === 0 ? "Project" : "Task"}:</b>
|
566
|
+
${task.text}
|
567
|
+
<br/><b>Start date:</b>
|
568
|
+
${ZT_Gantt.formatDateToString("%d-%m-%y %H:%i", start)}
|
569
|
+
<br/><b>End date:</b>
|
570
|
+
${ZT_Gantt.formatDateToString("%d-%m-%y %H:%i", end)}<br/>
|
571
|
+
<b>Duration:</b> ${task.duration} ${task.duration > 1 ? "Days" : "Day"
|
572
|
+
}`;
|
573
|
+
};
|
574
|
+
|
575
|
+
ZT_Gantt.templates.taskbar_text = function (start, end, task) {
|
576
|
+
if (task.parent == 0 && task.type !== "milestone") {
|
577
|
+
return `Project : ${task.text}`;
|
578
|
+
} else if (task.type === "milestone") {
|
579
|
+
return task.text;
|
580
|
+
} else {
|
581
|
+
return `Task : ${task.text}`;
|
582
|
+
}
|
583
|
+
};
|
584
|
+
|
585
|
+
ZT_Gantt.templates.grid_folder = (task) => {
|
586
|
+
var name = task?.text?.trim().split(" ");
|
587
|
+
var firstname = name?.[0];
|
588
|
+
var lastname = name?.[1] ? name?.[1] : "";
|
589
|
+
var intials =
|
590
|
+
firstname?.charAt(0)?.toUpperCase() +
|
591
|
+
lastname?.charAt(0)?.toUpperCase();
|
592
|
+
return `<div></div>`;
|
593
|
+
};
|
594
|
+
|
595
|
+
ZT_Gantt.templates.grid_file = (task) => {
|
596
|
+
if (task.parent != 0) {
|
597
|
+
var tracker_name = task.hasOwnProperty("tracker")
|
598
|
+
? task.tracker.name
|
599
|
+
: " ";
|
600
|
+
let issue_id = task.id;
|
601
|
+
return `<div class='gantt_file ${tracker_name}'><a class="link-issue ${tracker_name}" href='http://127.0.0.1:5500//issues/${issue_id}'>#${issue_id}</a></div>`;
|
602
|
+
}
|
603
|
+
};
|
604
|
+
|
605
|
+
ZT_Gantt.templates.task_drag = (mode, task) => {
|
606
|
+
if (task.parent == 0 || (task.children && task.children.length > 0)) {
|
607
|
+
// || task.children
|
608
|
+
return false;
|
609
|
+
}
|
610
|
+
return true;
|
611
|
+
};
|
612
|
+
|
613
|
+
// add custom classes
|
614
|
+
// ZT_Gantt.templates.grid_header_class = (columns,i) => {
|
615
|
+
// return "my-header-class test"
|
616
|
+
// }
|
617
|
+
// ZT_Gantt.templates.grid_row_class = (start, end, task) => {
|
618
|
+
// console.log(start, end);
|
619
|
+
// return "my-grid-row-class test"
|
620
|
+
// }
|
621
|
+
ZT_Gantt.templates.task_class = (start, end, task) => {
|
622
|
+
if (task.parent == 0) {
|
623
|
+
return "parent-task test";
|
624
|
+
} else {
|
625
|
+
return "child-task test";
|
626
|
+
}
|
627
|
+
};
|
628
|
+
// ZT_Gantt.templates.task_row_class = (start, end, task) => {
|
629
|
+
// return "my-task-row-class test"
|
630
|
+
// }
|
631
|
+
ZT_Gantt.templates.scale_cell_class = (date, scale, scaleIndex) => {
|
632
|
+
if (scaleIndex === 1) {
|
633
|
+
return "my-scale-class-2";
|
634
|
+
} else {
|
635
|
+
return "my-scale-class-1";
|
636
|
+
}
|
637
|
+
};
|
638
|
+
// ZT_Gantt.templates.grid_cell_class = (col, task) => {
|
639
|
+
// return "my-grid-cell-class test"
|
640
|
+
// }
|
641
|
+
// ZT_Gantt.templates.timeline_cell_class = (task, date) => {
|
642
|
+
// return "my-task-cell-class Test "
|
643
|
+
// }
|
644
|
+
|
645
|
+
// add custom marker
|
646
|
+
ZT_Gantt.addMarker({
|
647
|
+
start_date: ZT_Gantt.add(new Date(), 1, "day"), //a Date object that sets the marker's date
|
648
|
+
css: "tomorrow", //a CSS class applied to the marker
|
649
|
+
text: "Tomorrow", //the marker title
|
650
|
+
title: ZT_Gantt.formatDateToString(
|
651
|
+
"%d %F %y",
|
652
|
+
ZT_Gantt.add(new Date(), 1, "day")
|
653
|
+
), // the marker's tooltip
|
654
|
+
});
|
655
|
+
|
656
|
+
// ZT_Gantt.addMarker({
|
657
|
+
// start_date: ZT_Gantt.add(new Date(),-1, "day"), //a Date object that sets the marker's date
|
658
|
+
// css: "yesterday", //a CSS class applied to the marker
|
659
|
+
// text: "Yesterday", //the marker title
|
660
|
+
// title: ZT_Gantt.formatDateToString("%d %F %Y", ZT_Gantt.add(new Date(),-1, "day")), // the marker's tooltip
|
661
|
+
// });
|
662
|
+
|
663
|
+
// render gantt
|
664
|
+
ZT_Gantt.render(element);
|
665
|
+
|
666
|
+
const jsGanttTheme = localStorage.getItem('jsGantt-theme');
|
667
|
+
|
668
|
+
|
669
|
+
// console.log(ZT_Gantt);
|
670
|
+
|
671
|
+
// to find task in gantt
|
672
|
+
// console.log(ZT_Gantt.getTask(69));
|
673
|
+
|
674
|
+
// custom events
|
675
|
+
ZT_Gantt.attachEvent("onTaskDblClick", (event) => {
|
676
|
+
// console.log("onTaskDblClick: ", event);
|
677
|
+
});
|
678
|
+
let idCount = 0;
|
679
|
+
ZT_Gantt.attachEvent("selectAreaOnDrag", (event) => {
|
680
|
+
// console.log("selectAreaOnDrag: ", event.task);
|
681
|
+
ZT_Gantt.addTask({
|
682
|
+
id: "Added" + idCount,
|
683
|
+
start_date: new Date(event.task.startDate),
|
684
|
+
end_date: new Date(event.task.endDate),
|
685
|
+
parent: event.task.parent,
|
686
|
+
text: "Task Added",
|
687
|
+
});
|
688
|
+
ZT_Gantt.render();
|
689
|
+
idCount += 1;
|
690
|
+
});
|
691
|
+
ZT_Gantt.attachEvent("onLinkDblClick", (event) => {
|
692
|
+
// console.log("onLinkDblClick: ", event);
|
693
|
+
// ZT_Gantt.deleteLink(event.link.id);
|
694
|
+
});
|
695
|
+
ZT_Gantt.attachEvent("onBeforeLinkAdd", (event) => {
|
696
|
+
// console.log("onBeforeLinkAdd: ", event);
|
697
|
+
});
|
698
|
+
ZT_Gantt.attachEvent("onLinkAdd", (event) => {
|
699
|
+
// console.log("onLinkAdd: ", event);
|
700
|
+
});
|
701
|
+
ZT_Gantt.attachEvent("onDeleteLink", (event) => {
|
702
|
+
// console.log("onDeleteLink: ", event);
|
703
|
+
});
|
704
|
+
ZT_Gantt.attachEvent("onBeforeTaskDrag", (event) => {
|
705
|
+
// console.log("onBeforeTaskDrag: ", event);
|
706
|
+
if (event.task.children.length !== 0) {
|
707
|
+
return false;
|
708
|
+
} else {
|
709
|
+
return true;
|
710
|
+
}
|
711
|
+
});
|
712
|
+
ZT_Gantt.attachEvent("onTaskDrag", (event) => {
|
713
|
+
// console.log("onTaskDrag: ", event);
|
714
|
+
});
|
715
|
+
ZT_Gantt.attachEvent("onAfterTaskDrag", (event) => {
|
716
|
+
console.log("onAfterTaskDrag: ", event);
|
717
|
+
console.log("onAfterTaskDrag??: ", ZT_Gantt.options.data);
|
718
|
+
// ZT_Gantt.autoScheduling();
|
719
|
+
});
|
720
|
+
ZT_Gantt.attachEvent("onBeforeTaskDrop", (event) => {
|
721
|
+
console.log("onBeforeTaskDrop: ", event);
|
722
|
+
if (event.parentTask?.id == 12) {
|
723
|
+
return false;
|
724
|
+
}
|
725
|
+
});
|
726
|
+
ZT_Gantt.attachEvent("onTaskToggle", (event) => {
|
727
|
+
// console.log("onTaskToggle: ", event);
|
728
|
+
});
|
729
|
+
|
730
|
+
ZT_Gantt.attachEvent("onTaskDelete", (event) => {
|
731
|
+
console.log("onTaskDelete: ", event);
|
732
|
+
});
|
733
|
+
ZT_Gantt.attachEvent("onAfterTaskUpdate", (event) => {
|
734
|
+
// console.log("onAfterTaskUpdate: ", event);
|
735
|
+
});
|
736
|
+
ZT_Gantt.attachEvent("onCellClick", (event) => {
|
737
|
+
// console.log("onCellClick: ", event);
|
738
|
+
});
|
739
|
+
ZT_Gantt.attachEvent("onRequestFullScreen", (event) => {
|
740
|
+
// console.log("onRequestFullScreen: ", event);
|
741
|
+
});
|
742
|
+
ZT_Gantt.attachEvent("onExitFullScreen", (event) => {
|
743
|
+
// console.log("onExitFullScreen: ", event);
|
744
|
+
});
|
745
|
+
// ZT_Gantt.attachEvent("onScroll", (event) => {
|
746
|
+
// console.log("onScroll: ", event);
|
747
|
+
// });
|
748
|
+
// ZT_Gantt.attachEvent("onResize", (event) => {
|
749
|
+
// console.log("onResize: ", event);
|
750
|
+
// });
|
751
|
+
ZT_Gantt.attachEvent("onAfterProgressDrag", (event) => {
|
752
|
+
// console.log("onAfterProgressDrag: ", event);
|
753
|
+
});
|
754
|
+
ZT_Gantt.attachEvent("onBeforeProgressDrag", (event) => {
|
755
|
+
// console.log("onBeforeProgressDrag: ", event);
|
756
|
+
// if(event.task.parent === 0){
|
757
|
+
// return false;
|
758
|
+
// }else{
|
759
|
+
// return true;
|
760
|
+
// }
|
761
|
+
});
|
762
|
+
ZT_Gantt.attachEvent("onAutoScheduling", (event) => {
|
763
|
+
// console.log("onAutoScheduling: ", event);
|
764
|
+
});
|
765
|
+
ZT_Gantt.attachEvent("onColorChange", (event) => {
|
766
|
+
// console.log("onColorChange: ", event);
|
767
|
+
});
|
768
|
+
ZT_Gantt.attachEvent("onBeforeTaskDblClick", (event) => {
|
769
|
+
// console.log("onBeforeTaskDblClick: ", event);
|
770
|
+
// if(event.task.id === 3){
|
771
|
+
// return false;
|
772
|
+
// }
|
773
|
+
});
|
774
|
+
ZT_Gantt.attachEvent("onBeforeSave", (event) => {
|
775
|
+
// console.log("onBeforeSave: ", event);
|
776
|
+
});
|
777
|
+
ZT_Gantt.attachEvent("onSave", (event) => {
|
778
|
+
// console.log("onSave: ", event);
|
779
|
+
});
|
780
|
+
|
781
|
+
let fullscreen = false;
|
782
|
+
function changeScreen() {
|
783
|
+
if (fullscreen === false) {
|
784
|
+
ZT_Gantt.requestFullScreen();
|
785
|
+
// ZT_Gantt.openTask(3);
|
786
|
+
} else {
|
787
|
+
ZT_Gantt.exitFullScreen();
|
788
|
+
}
|
789
|
+
}
|
790
|
+
|
791
|
+
function changeZoom(e) {
|
792
|
+
ZT_Gantt.options.zoomLevel = e.target.value;
|
793
|
+
if (e.target.value === "month" || e.target.value === "quarter") {
|
794
|
+
ZT_Gantt.options.startDate = "2024-01-01T11:46:17.775Z";
|
795
|
+
ZT_Gantt.options.endDate = "2024-12-31T11:46:17.775Z";
|
796
|
+
} else if (e.target.value === "year") {
|
797
|
+
ZT_Gantt.options.startDate = "2022-01-01T11:46:17.775Z";
|
798
|
+
ZT_Gantt.options.endDate = "2024-12-31T11:46:17.775Z";
|
799
|
+
} else {
|
800
|
+
ZT_Gantt.options.startDate = "2024-03-01T11:46:17.775Z";
|
801
|
+
ZT_Gantt.options.endDate = "2024-03-30T11:46:17.775Z";
|
802
|
+
}
|
803
|
+
ZT_Gantt.zoomInit();
|
804
|
+
}
|
805
|
+
|
806
|
+
function changeLang(e) {
|
807
|
+
ZT_Gantt.setLocalLang(e.target.value);
|
808
|
+
}
|
809
|
+
|
810
|
+
function changeCollapse(e) {
|
811
|
+
if (e.target.checked === true) {
|
812
|
+
ZT_Gantt.collapseAll();
|
813
|
+
} else {
|
814
|
+
ZT_Gantt.expandAll();
|
815
|
+
}
|
816
|
+
}
|
817
|
+
|
818
|
+
function changeToday(e) {
|
819
|
+
if (event.target.checked === true) {
|
820
|
+
ZT_Gantt.addTodayFlag();
|
821
|
+
} else {
|
822
|
+
ZT_Gantt.removeTodayFlag();
|
823
|
+
}
|
824
|
+
}
|
825
|
+
|
826
|
+
function exportChange(e) {
|
827
|
+
let stylesheet = [
|
828
|
+
"https://zehntech.github.io/js-gantt/gantt.css",
|
829
|
+
"https://zehntech.github.io/js-gantt/style.css",
|
830
|
+
];
|
831
|
+
if (e.target.value === "png") {
|
832
|
+
ZT_Gantt.exportToPNG("jsGanttChart", stylesheet);
|
833
|
+
} else if (e.target.value === "pdf") {
|
834
|
+
ZT_Gantt.exportToPDF("jsGanttChart", stylesheet);
|
835
|
+
} else {
|
836
|
+
ZT_Gantt.exportToExcel("jsGanttChart");
|
837
|
+
}
|
838
|
+
e.target.value = "";
|
839
|
+
}
|
840
|
+
|
841
|
+
function autoScheduling() {
|
842
|
+
ZT_Gantt.autoScheduling();
|
843
|
+
}
|
844
|
+
function addTask() {
|
845
|
+
ZT_Gantt.addTask({
|
846
|
+
id: 5354653546,
|
847
|
+
tracker_id: 4,
|
848
|
+
project_id: 86,
|
849
|
+
subject:
|
850
|
+
"Workflow - In the Workflow view, JOC reacts slow when handling large workflows or multiple smaller workflows in the same folder.",
|
851
|
+
description:
|
852
|
+
"requirements-\r\nwhen in the WORKFLOW view a larger workflow (several hundred jobs) or multiple smaller workflows in the same folder are completely expanded then JOC reacts rather slowly.\r\nThis affects actions like scrolling, opening instruction and order menus and executing items of these menus.",
|
853
|
+
due_date: "2024-05-17",
|
854
|
+
category_id: null,
|
855
|
+
status_id: 2,
|
856
|
+
assigned_to_id: 308,
|
857
|
+
priority_id: 2,
|
858
|
+
fixed_version_id: null,
|
859
|
+
author_id: 308,
|
860
|
+
lock_version: 3,
|
861
|
+
created_on: "2024-05-18T05:03:17.000Z",
|
862
|
+
updated_on: "2024-05-18T05:03:25.000Z",
|
863
|
+
start_date: "2024-05-17",
|
864
|
+
done_ratio: 70,
|
865
|
+
estimated_hours: 8.5,
|
866
|
+
parent: 12,
|
867
|
+
parent_id: null,
|
868
|
+
root_id: 53546,
|
869
|
+
lft: 1,
|
870
|
+
rgt: 2,
|
871
|
+
is_private: false,
|
872
|
+
closed_on: null,
|
873
|
+
tag_list: [],
|
874
|
+
});
|
875
|
+
// setTimeout(()=>{
|
876
|
+
|
877
|
+
// ZT_Gantt.openTask(280);
|
878
|
+
// },0)
|
879
|
+
// ZT_Gantt.parse(data);
|
880
|
+
ZT_Gantt.render();
|
881
|
+
// ZT_Gantt.deleteLink(1);
|
882
|
+
}
|
883
|
+
|
884
|
+
// get the position of the cell
|
885
|
+
// console.log(ZT_Gantt.posFromDate(new Date()));
|
886
|
+
|
887
|
+
// iterate over each task
|
888
|
+
// ZT_Gantt.eachTask((task)=>{
|
889
|
+
// console.log(task._id,"task _id ?????????????????????????????????");
|
890
|
+
// })
|
891
|
+
|
892
|
+
let cssStyle;
|
893
|
+
|
894
|
+
function changeTheme(isDark) {
|
895
|
+
const root = document.querySelector(":root");
|
896
|
+
if (isDark) {
|
897
|
+
document.getElementById('toggle').checked = true;
|
898
|
+
cssStyle = document.createElement("link");
|
899
|
+
cssStyle.setAttribute("rel", "stylesheet");
|
900
|
+
cssStyle.setAttribute("href", "src/theme/dark.css");
|
901
|
+
document.getElementsByTagName("head")[0].append(cssStyle);
|
902
|
+
localStorage.setItem('jsGantt-theme', 'dark');
|
903
|
+
|
904
|
+
root.style.setProperty("--bg-color", "#333332");
|
905
|
+
root.style.setProperty("--text-color", "#fff");
|
906
|
+
root.style.setProperty("--text-secondary-color", "#fff");
|
907
|
+
root.style.setProperty("--index-primary-color", "#1395BE");
|
908
|
+
root.style.setProperty("--index-primary-hover-color", "#0E7595");
|
909
|
+
} else {
|
910
|
+
if (cssStyle) {
|
911
|
+
cssStyle.remove();
|
912
|
+
}
|
913
|
+
root.style.setProperty("--bg-color", "#fff");
|
914
|
+
root.style.setProperty("--text-color", "#000");
|
915
|
+
root.style.setProperty("--text-secondary-color", "#fff");
|
916
|
+
root.style.setProperty("--index-primary-color", "#4ca0fff2");
|
917
|
+
root.style.setProperty("--index-primary-hover-color", "#3585e0f2");
|
918
|
+
localStorage.setItem('jsGantt-theme', 'light');
|
919
|
+
}
|
920
|
+
}
|
921
|
+
|
922
|
+
this.changeTheme(jsGanttTheme == 'dark');
|
923
|
+
|
924
|
+
let getScale = () => {
|
925
|
+
console.log(ZT_Gantt.getScale());
|
926
|
+
};
|
927
|
+
|
928
|
+
function searchTask(e) {
|
929
|
+
let isFilter = e.target.value.trim() !== "";
|
930
|
+
ZT_Gantt.filterTask((task) => {
|
931
|
+
return task.text.toLowerCase().includes(e.target.value.toLowerCase());
|
932
|
+
}, isFilter, true);
|
933
|
+
}
|
934
|
+
function addCol() {
|
935
|
+
ZT_Gantt.options.columns.push({
|
936
|
+
name: "progress",
|
937
|
+
width: 245,
|
938
|
+
min_width: 80,
|
939
|
+
max_width: 300,
|
940
|
+
tree: false,
|
941
|
+
label: "Progress",
|
942
|
+
resize: true,
|
943
|
+
align: "center",
|
944
|
+
template: (task) => {
|
945
|
+
return `<span>${task.progress || 0}</span>`;
|
946
|
+
},
|
947
|
+
});
|
948
|
+
ZT_Gantt.render();
|
949
|
+
}
|
950
|
+
|
951
|
+
function removeCol() {
|
952
|
+
ZT_Gantt.options.columns.splice(ZT_Gantt.options.columns.length - 1, 1);
|
953
|
+
ZT_Gantt.render();
|
954
|
+
}
|
955
|
+
|
956
|
+
function startTour() {
|
957
|
+
let options = {
|
958
|
+
overlayOpacity: 0.7,
|
959
|
+
stagePadding: 10,
|
960
|
+
stageRadius: 5,
|
961
|
+
overlayColor: "#000",
|
962
|
+
animate: true,
|
963
|
+
smoothScroll: true,
|
964
|
+
allowBackdropClose: true,
|
965
|
+
popupClass: "popupClass",
|
966
|
+
keyboardControl: true,
|
967
|
+
showProgress: true,
|
968
|
+
visibleButtons: ['next', 'previous', 'close'],
|
969
|
+
disableButtons: [],
|
970
|
+
animationDuration: 400,
|
971
|
+
onNextClick: (step) => {
|
972
|
+
console.log(step, " Next Click");
|
973
|
+
},
|
974
|
+
onClose: () => {
|
975
|
+
console.log("Tour Closed");
|
976
|
+
},
|
977
|
+
onPreviousClick: (step) => {
|
978
|
+
console.log(step, " Previous Click");
|
979
|
+
},
|
980
|
+
steps: [
|
981
|
+
{
|
982
|
+
element: ".collapse-container",
|
983
|
+
popup: {
|
984
|
+
title: "Toggle Collapse",
|
985
|
+
description: "Toggle all the Tasks!!",
|
986
|
+
side: "bottom",
|
987
|
+
align: "start",
|
988
|
+
},
|
989
|
+
},
|
990
|
+
{
|
991
|
+
element: ".today-container",
|
992
|
+
popup: {
|
993
|
+
title: "Toggle Marker",
|
994
|
+
description: "Toggle Today Marker!!",
|
995
|
+
side: "bottom",
|
996
|
+
align: "start",
|
997
|
+
},
|
998
|
+
},
|
999
|
+
{
|
1000
|
+
element: ".export-data",
|
1001
|
+
popup: {
|
1002
|
+
title: "Export Chart",
|
1003
|
+
description: "Get your charts in PDF, PNG, or Excel formats",
|
1004
|
+
side: "bottom",
|
1005
|
+
align: "center",
|
1006
|
+
},
|
1007
|
+
},
|
1008
|
+
{
|
1009
|
+
element: ".fullscreen",
|
1010
|
+
popup: {
|
1011
|
+
title: "Full Screen",
|
1012
|
+
description: "View your Gantt in full screen for an immersive experience",
|
1013
|
+
side: "bottom",
|
1014
|
+
align: "end",
|
1015
|
+
},
|
1016
|
+
},
|
1017
|
+
{
|
1018
|
+
element: ".auto-scheduling",
|
1019
|
+
popup: {
|
1020
|
+
title: "Auto Scheduling",
|
1021
|
+
description: "Tasks are automatically scheduled.",
|
1022
|
+
side: "bottom",
|
1023
|
+
align: "center",
|
1024
|
+
},
|
1025
|
+
},
|
1026
|
+
{
|
1027
|
+
element: ".zoom",
|
1028
|
+
popup: {
|
1029
|
+
title: "Zoom Levels",
|
1030
|
+
description: "Multiple timeline views - hour, day, week, month, quarter, and year.",
|
1031
|
+
side: "bottom",
|
1032
|
+
align: "end",
|
1033
|
+
},
|
1034
|
+
},
|
1035
|
+
{
|
1036
|
+
element: ".Language",
|
1037
|
+
popup: {
|
1038
|
+
title: "Change Language",
|
1039
|
+
description: "Change language of the gantt chart.",
|
1040
|
+
side: "bottom",
|
1041
|
+
align: "end",
|
1042
|
+
},
|
1043
|
+
},
|
1044
|
+
{
|
1045
|
+
element: ".dark-mode",
|
1046
|
+
popup: {
|
1047
|
+
title: "Toggle Dark Mode",
|
1048
|
+
description: "Dark mode for those late-night work sessions.",
|
1049
|
+
side: "bottom",
|
1050
|
+
align: "end",
|
1051
|
+
},
|
1052
|
+
},
|
1053
|
+
{
|
1054
|
+
element: ".gantt-search",
|
1055
|
+
popup: {
|
1056
|
+
title: "Search Tasks",
|
1057
|
+
description: "Search Tasks to quickly find and access tasks based on your search criteria. Streamline your workflow by searching for specific tasks with ease.",
|
1058
|
+
side: "bottom",
|
1059
|
+
align: "end",
|
1060
|
+
},
|
1061
|
+
},
|
1062
|
+
{
|
1063
|
+
element: "#js-gantt",
|
1064
|
+
popup: {
|
1065
|
+
title: "Gantt Chart",
|
1066
|
+
description: "The Gantt Chart view provides a visual representation of project tasks and their timelines, allowing you to efficiently manage project schedules, dependencies, and progress. Easily track and plan tasks, making project management a seamless experience.",
|
1067
|
+
side: "top",
|
1068
|
+
align: "start",
|
1069
|
+
},
|
1070
|
+
},
|
1071
|
+
{
|
1072
|
+
popup: {
|
1073
|
+
title: "That's everything",
|
1074
|
+
description: `<div class="finish">
|
1075
|
+
<p>Looks like you're ready to go 🎉</p>
|
1076
|
+
<p>Click anywhere to exit the tour.</p>
|
1077
|
+
<img src="https://media.tenor.com/y2JXkY1pXkwAAAAM/cat-computer.gif">
|
1078
|
+
</div>`,
|
1079
|
+
side: "over",
|
1080
|
+
align: "over",
|
1081
|
+
},
|
1082
|
+
},
|
1083
|
+
],
|
1084
|
+
};
|
1085
|
+
let tour = new ztTour(options);
|
1086
|
+
// console.log(ztTour,"ztTour");
|
1087
|
+
tour.start();
|
1088
|
+
}
|
1089
|
+
|
1090
|
+
document.querySelector(".hint-icon").removeEventListener("click", handleClick);
|
1091
|
+
document.querySelector(".hint-icon").addEventListener("click", handleClick);
|
1092
|
+
|
1093
|
+
// let tour = new ztTour({});
|
1094
|
+
function handleClick(e) {
|
1095
|
+
tour.showHint({
|
1096
|
+
element: ".hint-icon",
|
1097
|
+
innerHTML: `<p>Click on "Start Tour" to start the tour.</p>`
|
1098
|
+
});
|
1099
|
+
}
|
1100
|
+
let intro = `
|
1101
|
+
<h2 style="font-size: 18px; margin-bottom: 5px; font-weight: 600; text-align:center">jsGantt Chart</h2>
|
1102
|
+
<p style="line-height: 18px; text-align: justify;margin-bottom: 5px;">Welcome to the jsGantt Chart Library.
|
1103
|
+
This library provides a powerful set of tools and functionalities to create interactive Gantt charts for project management. This documentation will guide you through the installation process,
|
1104
|
+
usage instructions, and available features of the library.</p>
|
1105
|
+
<p>Click on "Start Tour" to start the tour.</p>
|
1106
|
+
`;
|
1107
|
+
// tour.showAnnouncement(intro);
|
1108
|
+
</script>
|
1109
|
+
|
1110
|
+
</body>
|
1111
|
+
|
1112
1112
|
</html>
|