jsgantt-improved 2.8.9 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.mocharc.cjs +5 -0
- package/.travis.yml +0 -2
- package/Documentation.md +1 -1
- package/dist/draw_columns.js +171 -0
- package/dist/draw_dependencies.js +97 -0
- package/dist/e2e/app.e2e-spec.js +3 -3
- package/dist/e2e/app.e2e-spec.js.map +1 -1
- package/dist/e2e/app.po.js +5 -5
- package/dist/e2e/app.po.js.map +1 -1
- package/dist/jsgantt.js +580 -473
- package/dist/json.js +200 -0
- package/dist/lang.js +1635 -0
- package/dist/options.js +219 -0
- package/dist/playwright.config.js +33 -0
- package/dist/playwright.config.js.map +1 -0
- package/dist/src/draw.js +149 -148
- package/dist/src/draw.js.map +1 -1
- package/dist/src/draw_columns.js +66 -63
- package/dist/src/draw_columns.js.map +1 -1
- package/dist/src/draw_dependencies.js +4 -2
- package/dist/src/draw_dependencies.js.map +1 -1
- package/dist/src/events.js +72 -54
- package/dist/src/events.js.map +1 -1
- package/dist/src/json.js +10 -7
- package/dist/src/json.js.map +1 -1
- package/dist/src/lang.js +1 -1
- package/dist/src/lang.js.map +1 -1
- package/dist/src/options.js +14 -13
- package/dist/src/options.js.map +1 -1
- package/dist/src/task.js +61 -49
- package/dist/src/task.js.map +1 -1
- package/dist/src/utils/date_utils.js +46 -15
- package/dist/src/utils/date_utils.js.map +1 -1
- package/dist/src/utils/draw_utils.js +24 -18
- package/dist/src/utils/draw_utils.js.map +1 -1
- package/dist/src/utils/general_utils.js +59 -36
- package/dist/src/utils/general_utils.js.map +1 -1
- package/dist/src/utils.js +498 -0
- package/dist/src/utils.js.map +1 -0
- package/dist/src/xml.js +74 -67
- package/dist/src/xml.js.map +1 -1
- package/dist/test/e2e/gantt.page.js +150 -0
- package/dist/test/e2e/gantt.page.js.map +1 -0
- package/dist/test/e2e/issue172-row-alignment.spec.js +198 -0
- package/dist/test/e2e/issue172-row-alignment.spec.js.map +1 -0
- package/dist/test/e2e/issue207-bar-axis-alignment.spec.js +329 -0
- package/dist/test/e2e/issue207-bar-axis-alignment.spec.js.map +1 -0
- package/dist/test/e2e/issue255-show-weekends.spec.js +102 -0
- package/dist/test/e2e/issue255-show-weekends.spec.js.map +1 -0
- package/dist/test/e2e/issue349-taskname-click-event.spec.js +270 -0
- package/dist/test/e2e/issue349-taskname-click-event.spec.js.map +1 -0
- package/dist/test/e2e/issue48-dependency-lines.spec.js +204 -0
- package/dist/test/e2e/issue48-dependency-lines.spec.js.map +1 -0
- package/dist/test/e2e/issue54-month-today.spec.js +181 -0
- package/dist/test/e2e/issue54-month-today.spec.js.map +1 -0
- package/dist/test/e2e/issue68-working-days.spec.js +243 -0
- package/dist/test/e2e/issue68-working-days.spec.js.map +1 -0
- package/dist/test/e2e/zoom-alignment.spec.js +133 -0
- package/dist/test/e2e/zoom-alignment.spec.js.map +1 -0
- package/dist/test/index.js +3 -8
- package/dist/test/index.js.map +1 -1
- package/dist/test/unit/date-utils.spec.js +180 -0
- package/dist/test/unit/date-utils.spec.js.map +1 -0
- package/dist/test/unit/draw-cols-chart.spec.js +105 -0
- package/dist/test/unit/draw-cols-chart.spec.js.map +1 -0
- package/dist/test/unit/gantt-chart-constructor.spec.js +85 -0
- package/dist/test/unit/gantt-chart-constructor.spec.js.map +1 -0
- package/dist/test/unit/helpers.js +67 -0
- package/dist/test/unit/helpers.js.map +1 -0
- package/dist/test/unit/task-item.spec.js +46 -0
- package/dist/test/unit/task-item.spec.js.map +1 -0
- package/dist/test/unit/task-management.spec.js +141 -0
- package/dist/test/unit/task-management.spec.js.map +1 -0
- package/dist/test/unit/working-days.spec.js +109 -0
- package/dist/test/unit/working-days.spec.js.map +1 -0
- package/dist/utils/draw_utils.js +169 -0
- package/dist/utils/general_utils.js +498 -0
- package/dist/xml.js +345 -0
- package/dist-e2e/gantt.page.js +79 -0
- package/dist-e2e/gantt.page.js.map +1 -0
- package/dist-e2e/issue-setMinDate-setMaxDate.spec.js +96 -0
- package/dist-e2e/issue172-row-alignment.spec.js +90 -0
- package/dist-e2e/issue172-row-alignment.spec.js.map +1 -0
- package/dist-e2e/issue207-bar-axis-alignment.spec.js +161 -0
- package/dist-e2e/issue207-bar-axis-alignment.spec.js.map +1 -0
- package/dist-e2e/issue349-taskname-click-event.spec.js +170 -0
- package/dist-e2e/issue349-taskname-click-event.spec.js.map +1 -0
- package/dist-e2e/issue375-column-visibility.spec.js +129 -0
- package/dist-e2e/issue375-column-visibility.spec.js.map +1 -0
- package/dist-e2e/issue54-month-today.spec.js +84 -0
- package/dist-e2e/issue54-month-today.spec.js.map +1 -0
- package/dist-e2e/issue68-working-days.spec.js +105 -0
- package/dist-e2e/issue68-working-days.spec.js.map +1 -0
- package/docs/index.js +5 -2
- package/docs/jsgantt.js +5749 -0
- package/jsgantt.js +5749 -0
- package/package.json +10 -18
- package/pw-e2e.config.js +13 -0
- package/test-results/.last-run.json +4 -0
- package/protractor.conf.js +0 -29
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Unit tests for PR #394 — GetTaskByOriginalID + RemoveTaskItem accepting original IDs.
|
|
4
|
+
*
|
|
5
|
+
* After tasks are loaded via parseXMLString / parseJSONString the internal vID
|
|
6
|
+
* (a hash of the original pID) differs from the original string. These tests
|
|
7
|
+
* verify that:
|
|
8
|
+
* - AddTaskItem returns the internal vID
|
|
9
|
+
* - GetTaskByOriginalID looks up a task by its pre-hash ID
|
|
10
|
+
* - RemoveTaskItem accepts original IDs as well as internal vIDs
|
|
11
|
+
* - Child removal still works recursively when the parent is addressed by original ID
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
require("./helpers"); // DOM shim — must be first
|
|
15
|
+
var chai_1 = require("chai");
|
|
16
|
+
var helpers_1 = require("./helpers");
|
|
17
|
+
var task_1 = require("../../src/task");
|
|
18
|
+
var general_utils_1 = require("../../src/utils/general_utils");
|
|
19
|
+
function h(id) {
|
|
20
|
+
return (0, general_utils_1.hashString)(String(id)).toString();
|
|
21
|
+
}
|
|
22
|
+
/** Minimal GanttChart-like context that binds the three task-management functions. */
|
|
23
|
+
function makeChart() {
|
|
24
|
+
var chart = {
|
|
25
|
+
vTaskList: [],
|
|
26
|
+
vProcessNeeded: false,
|
|
27
|
+
};
|
|
28
|
+
chart.AddTaskItem = task_1.AddTaskItem.bind(chart);
|
|
29
|
+
chart.RemoveTaskItem = task_1.RemoveTaskItem.bind(chart);
|
|
30
|
+
chart.GetTaskByOriginalID = task_1.GetTaskByOriginalID.bind(chart);
|
|
31
|
+
return chart;
|
|
32
|
+
}
|
|
33
|
+
// ─── AddTaskItem ──────────────────────────────────────────────────────────────
|
|
34
|
+
describe('AddTaskItem — return value', function () {
|
|
35
|
+
it('returns the internal (hashed) vID', function () {
|
|
36
|
+
var chart = makeChart();
|
|
37
|
+
var task = (0, helpers_1.makeTask)({ id: 100, parent: 0 });
|
|
38
|
+
var vID = chart.AddTaskItem(task);
|
|
39
|
+
// getID() returns a number; compare as string to h() which also stringifies
|
|
40
|
+
(0, chai_1.expect)(String(vID)).to.equal(h('100'));
|
|
41
|
+
});
|
|
42
|
+
it('adds the task to vTaskList', function () {
|
|
43
|
+
var chart = makeChart();
|
|
44
|
+
chart.AddTaskItem((0, helpers_1.makeTask)({ id: 101, parent: 0 }));
|
|
45
|
+
(0, chai_1.expect)(chart.vTaskList).to.have.length(1);
|
|
46
|
+
});
|
|
47
|
+
it('does not add the same task twice (idempotent)', function () {
|
|
48
|
+
var chart = makeChart();
|
|
49
|
+
var task = (0, helpers_1.makeTask)({ id: 102, parent: 0 });
|
|
50
|
+
chart.AddTaskItem(task);
|
|
51
|
+
chart.AddTaskItem(task);
|
|
52
|
+
(0, chai_1.expect)(chart.vTaskList).to.have.length(1);
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
// ─── GetTaskByOriginalID ──────────────────────────────────────────────────────
|
|
56
|
+
describe('GetTaskByOriginalID', function () {
|
|
57
|
+
it('returns the task when the original ID matches', function () {
|
|
58
|
+
var chart = makeChart();
|
|
59
|
+
var task = (0, helpers_1.makeTask)({ id: 200, parent: 0 });
|
|
60
|
+
chart.AddTaskItem(task);
|
|
61
|
+
var found = chart.GetTaskByOriginalID('200');
|
|
62
|
+
(0, chai_1.expect)(found).to.not.equal(null);
|
|
63
|
+
(0, chai_1.expect)(found.getOriginalID()).to.equal('200');
|
|
64
|
+
});
|
|
65
|
+
it('accepts a numeric argument (coerces to string)', function () {
|
|
66
|
+
var chart = makeChart();
|
|
67
|
+
var task = (0, helpers_1.makeTask)({ id: 201, parent: 0 });
|
|
68
|
+
chart.AddTaskItem(task);
|
|
69
|
+
(0, chai_1.expect)(chart.GetTaskByOriginalID(201)).to.not.equal(null);
|
|
70
|
+
});
|
|
71
|
+
it('returns null when no task has that original ID', function () {
|
|
72
|
+
var chart = makeChart();
|
|
73
|
+
chart.AddTaskItem((0, helpers_1.makeTask)({ id: 202, parent: 0 }));
|
|
74
|
+
(0, chai_1.expect)(chart.GetTaskByOriginalID('999')).to.equal(null);
|
|
75
|
+
});
|
|
76
|
+
it('returns null on an empty task list', function () {
|
|
77
|
+
var chart = makeChart();
|
|
78
|
+
(0, chai_1.expect)(chart.GetTaskByOriginalID('1')).to.equal(null);
|
|
79
|
+
});
|
|
80
|
+
it('does not match a task by its internal hashed ID', function () {
|
|
81
|
+
var chart = makeChart();
|
|
82
|
+
var task = (0, helpers_1.makeTask)({ id: 203, parent: 0 });
|
|
83
|
+
chart.AddTaskItem(task);
|
|
84
|
+
// The hashed ID is NOT the original ID — should not match
|
|
85
|
+
(0, chai_1.expect)(chart.GetTaskByOriginalID(h('203'))).to.equal(null);
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
// ─── RemoveTaskItem with original IDs ─────────────────────────────────────────
|
|
89
|
+
describe('RemoveTaskItem — accepts original IDs', function () {
|
|
90
|
+
it('marks a task for deletion when called with its original string ID', function () {
|
|
91
|
+
var chart = makeChart();
|
|
92
|
+
var task = (0, helpers_1.makeTask)({ id: 300, parent: 0 });
|
|
93
|
+
chart.AddTaskItem(task);
|
|
94
|
+
chart.RemoveTaskItem('300');
|
|
95
|
+
(0, chai_1.expect)(task.getToDelete()).to.equal(true);
|
|
96
|
+
});
|
|
97
|
+
it('still works when called with the internal vID (backwards-compat)', function () {
|
|
98
|
+
var chart = makeChart();
|
|
99
|
+
var task = (0, helpers_1.makeTask)({ id: 301, parent: 0 });
|
|
100
|
+
chart.AddTaskItem(task);
|
|
101
|
+
chart.RemoveTaskItem(h('301')); // pass the hashed ID as before
|
|
102
|
+
(0, chai_1.expect)(task.getToDelete()).to.equal(true);
|
|
103
|
+
});
|
|
104
|
+
it('sets vProcessNeeded to true after removal', function () {
|
|
105
|
+
var chart = makeChart();
|
|
106
|
+
chart.vProcessNeeded = false;
|
|
107
|
+
chart.AddTaskItem((0, helpers_1.makeTask)({ id: 302, parent: 0 }));
|
|
108
|
+
chart.RemoveTaskItem('302');
|
|
109
|
+
(0, chai_1.expect)(chart.vProcessNeeded).to.equal(true);
|
|
110
|
+
});
|
|
111
|
+
it('does not throw when the ID does not match any task', function () {
|
|
112
|
+
var chart = makeChart();
|
|
113
|
+
chart.AddTaskItem((0, helpers_1.makeTask)({ id: 303, parent: 0 }));
|
|
114
|
+
(0, chai_1.expect)(function () { return chart.RemoveTaskItem('NONEXISTENT'); }).to.not.throw();
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
// ─── Recursive child removal ──────────────────────────────────────────────────
|
|
118
|
+
describe('RemoveTaskItem — recursive child removal via original ID', function () {
|
|
119
|
+
it('also marks child tasks for deletion when parent is removed by original ID', function () {
|
|
120
|
+
var chart = makeChart();
|
|
121
|
+
var parent = (0, helpers_1.makeTask)({ id: 400, parent: 0, group: 1 });
|
|
122
|
+
// Pass the original parent ID (400); TaskItem hashes it internally, matching the parent's vID
|
|
123
|
+
var child = (0, helpers_1.makeTask)({ id: 401, parent: 400 });
|
|
124
|
+
chart.AddTaskItem(parent);
|
|
125
|
+
chart.AddTaskItem(child);
|
|
126
|
+
chart.RemoveTaskItem('400'); // use the original string ID
|
|
127
|
+
(0, chai_1.expect)(parent.getToDelete()).to.equal(true);
|
|
128
|
+
(0, chai_1.expect)(child.getToDelete()).to.equal(true);
|
|
129
|
+
});
|
|
130
|
+
it('recursive removal also works when parent is addressed by internal vID', function () {
|
|
131
|
+
var chart = makeChart();
|
|
132
|
+
var parent = (0, helpers_1.makeTask)({ id: 410, parent: 0, group: 1 });
|
|
133
|
+
var child = (0, helpers_1.makeTask)({ id: 411, parent: 410 });
|
|
134
|
+
chart.AddTaskItem(parent);
|
|
135
|
+
chart.AddTaskItem(child);
|
|
136
|
+
chart.RemoveTaskItem(h('410')); // internal vID — classic usage
|
|
137
|
+
(0, chai_1.expect)(parent.getToDelete()).to.equal(true);
|
|
138
|
+
(0, chai_1.expect)(child.getToDelete()).to.equal(true);
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
//# sourceMappingURL=task-management.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-management.spec.js","sourceRoot":"","sources":["../../../test/unit/task-management.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Unit tests for issue #68: working-days duration support.
|
|
4
|
+
*
|
|
5
|
+
* Tests cover:
|
|
6
|
+
* countWorkingDays() — the core helper in src/utils.ts
|
|
7
|
+
* TaskItem.getDuration() — with and without pWorkingDays
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
require("./helpers"); // DOM shim — must be first
|
|
11
|
+
var chai_1 = require("chai");
|
|
12
|
+
var helpers_1 = require("./helpers");
|
|
13
|
+
var utils_1 = require("../../src/utils");
|
|
14
|
+
// ─── Helpers ─────────────────────────────────────────────────────────────────
|
|
15
|
+
var ALL_DAYS = { 0: true, 1: true, 2: true, 3: true, 4: true, 5: true, 6: true };
|
|
16
|
+
var MON_FRI = { 0: false, 1: true, 2: true, 3: true, 4: true, 5: true, 6: false };
|
|
17
|
+
var MON_SAT = { 0: false, 1: true, 2: true, 3: true, 4: true, 5: true, 6: true };
|
|
18
|
+
function d(year, month, day) {
|
|
19
|
+
return new Date(year, month - 1, day);
|
|
20
|
+
}
|
|
21
|
+
// Minimal lang object needed by getDuration
|
|
22
|
+
var EN = { hr: 'hr', hrs: 'hrs', dy: 'dy', dys: 'dys', wk: 'wk', wks: 'wks', mth: 'mth', mths: 'mths', qtr: 'qtr', qtrs: 'qtrs' };
|
|
23
|
+
// ─── countWorkingDays ─────────────────────────────────────────────────────────
|
|
24
|
+
describe('countWorkingDays', function () {
|
|
25
|
+
it('returns 0 when start === end', function () {
|
|
26
|
+
(0, chai_1.expect)((0, utils_1.countWorkingDays)(d(2025, 1, 6), d(2025, 1, 6), ALL_DAYS)).to.equal(0);
|
|
27
|
+
});
|
|
28
|
+
it('returns 0 when start > end', function () {
|
|
29
|
+
(0, chai_1.expect)((0, utils_1.countWorkingDays)(d(2025, 1, 7), d(2025, 1, 6), ALL_DAYS)).to.equal(0);
|
|
30
|
+
});
|
|
31
|
+
it('counts all 7 days when all days are working (Mon–Sun span)', function () {
|
|
32
|
+
// Mon 2025-01-06 to Mon 2025-01-13 → 7 days
|
|
33
|
+
(0, chai_1.expect)((0, utils_1.countWorkingDays)(d(2025, 1, 6), d(2025, 1, 13), ALL_DAYS)).to.equal(7);
|
|
34
|
+
});
|
|
35
|
+
it('Mon–Fri only: 5 working days in a Mon–Sun span', function () {
|
|
36
|
+
// Mon Jan 6 → Mon Jan 13: Mon 6,Tue 7,Wed 8,Thu 9,Fri 10 counted; Sat 11,Sun 12 skipped
|
|
37
|
+
(0, chai_1.expect)((0, utils_1.countWorkingDays)(d(2025, 1, 6), d(2025, 1, 13), MON_FRI)).to.equal(5);
|
|
38
|
+
});
|
|
39
|
+
it('Mon–Sat: 6 working days in a Mon–Sun span', function () {
|
|
40
|
+
// Mon Jan 6 → Mon Jan 13: Mon–Sat counted (6); Sun 12 skipped
|
|
41
|
+
(0, chai_1.expect)((0, utils_1.countWorkingDays)(d(2025, 1, 6), d(2025, 1, 13), MON_SAT)).to.equal(6);
|
|
42
|
+
});
|
|
43
|
+
it('spans two full weeks: 10 working days Mon–Fri', function () {
|
|
44
|
+
// Mon Jan 6 → Mon Jan 20 (14 calendar days, 10 working)
|
|
45
|
+
(0, chai_1.expect)((0, utils_1.countWorkingDays)(d(2025, 1, 6), d(2025, 1, 20), MON_FRI)).to.equal(10);
|
|
46
|
+
});
|
|
47
|
+
it('single working day (Mon)', function () {
|
|
48
|
+
// Mon Jan 6 → Tue Jan 7 with MON_FRI → 1
|
|
49
|
+
(0, chai_1.expect)((0, utils_1.countWorkingDays)(d(2025, 1, 6), d(2025, 1, 7), MON_FRI)).to.equal(1);
|
|
50
|
+
});
|
|
51
|
+
it('single non-working day (Sat) → 0', function () {
|
|
52
|
+
// Sat Jan 11 → Sun Jan 12 with MON_FRI → 0
|
|
53
|
+
(0, chai_1.expect)((0, utils_1.countWorkingDays)(d(2025, 1, 11), d(2025, 1, 12), MON_FRI)).to.equal(0);
|
|
54
|
+
});
|
|
55
|
+
it('non-standard schedule: only Wed and Thu working', function () {
|
|
56
|
+
var WED_THU = { 0: false, 1: false, 2: false, 3: true, 4: true, 5: false, 6: false };
|
|
57
|
+
// Mon Jan 6 → Mon Jan 13: Wed 8, Thu 9 → 2
|
|
58
|
+
(0, chai_1.expect)((0, utils_1.countWorkingDays)(d(2025, 1, 6), d(2025, 1, 13), WED_THU)).to.equal(2);
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
// ─── TaskItem.getDuration ─────────────────────────────────────────────────────
|
|
62
|
+
describe('TaskItem.getDuration — working days', function () {
|
|
63
|
+
function taskWithDates(startDate, endDate) {
|
|
64
|
+
return (0, helpers_1.makeTask)({ id: 1, parent: 0, start: startDate, end: endDate });
|
|
65
|
+
}
|
|
66
|
+
// Use noon-to-noon so the span is an exact integer number of calendar days, avoiding the
|
|
67
|
+
// rounding divergence between getOffset (1002/1000 scale) and countWorkingDays (exact count).
|
|
68
|
+
// getDuration's midnight-adjustment only fires for UTC-midnight end times; noon is safe.
|
|
69
|
+
var START_SAFE = new Date(2025, 0, 6, 12, 0, 0); // Mon Jan 6 noon
|
|
70
|
+
var END_SAFE = new Date(2025, 0, 13, 12, 0, 0); // Mon Jan 13 noon — exactly 7 days
|
|
71
|
+
it('returns calendar-day count when no pWorkingDays supplied (default behaviour)', function () {
|
|
72
|
+
var task = taskWithDates(START_SAFE, END_SAFE);
|
|
73
|
+
// 7.5 calendar days → Math.round(7.5-ish) = 7 or 8; regardless, should NOT be 5
|
|
74
|
+
var dur = task.getDuration('day', EN);
|
|
75
|
+
// The key invariant: it counts all calendar days, not just working days
|
|
76
|
+
(0, chai_1.expect)(dur).to.match(/^\d+\s+dy/, "expected \"N dy(s)\", got \"".concat(dur, "\""));
|
|
77
|
+
(0, chai_1.expect)(parseInt(dur)).to.be.within(7, 8);
|
|
78
|
+
});
|
|
79
|
+
it('returns working-day count (Mon–Fri) when pWorkingDays excludes weekends', function () {
|
|
80
|
+
var task = taskWithDates(START_SAFE, END_SAFE);
|
|
81
|
+
// Mon Jan 6 to Mon Jan 13 noon: working days Mon 6,Tue 7,Wed 8,Thu 9,Fri 10 = 5
|
|
82
|
+
var dur = task.getDuration('day', EN, MON_FRI);
|
|
83
|
+
(0, chai_1.expect)(dur).to.equal('5 dys');
|
|
84
|
+
});
|
|
85
|
+
it('returns all-7 count when pWorkingDays is all-true (same as no argument)', function () {
|
|
86
|
+
var task = taskWithDates(START_SAFE, END_SAFE);
|
|
87
|
+
var durAll = task.getDuration('day', EN, ALL_DAYS);
|
|
88
|
+
var durNone = task.getDuration('day', EN);
|
|
89
|
+
// Both should give 7 days
|
|
90
|
+
(0, chai_1.expect)(parseInt(durAll)).to.equal(parseInt(durNone));
|
|
91
|
+
});
|
|
92
|
+
it('uses calendar days for non-day units even when pWorkingDays is set', function () {
|
|
93
|
+
// 'week' format → vUnits = 'day' too, so working days DO apply
|
|
94
|
+
// 'month' format → vUnits = 'week' → should ignore pWorkingDays
|
|
95
|
+
var task = taskWithDates(new Date(2025, 0, 1, 12, 0, 0), new Date(2025, 3, 1, 12, 0, 0)); // Jan–Apr
|
|
96
|
+
var durMonth = task.getDuration('month', EN, MON_FRI);
|
|
97
|
+
// Should still return "N wks" (week units for month format), not filtered by working days
|
|
98
|
+
(0, chai_1.expect)(durMonth).to.match(/wk/, "Expected weeks unit for month format, got \"".concat(durMonth, "\""));
|
|
99
|
+
});
|
|
100
|
+
it('milestone always returns "-" regardless of pWorkingDays', function () {
|
|
101
|
+
var task = (0, helpers_1.makeTask)({ id: 2, parent: 0, start: d(2025, 1, 6), end: d(2025, 1, 6) });
|
|
102
|
+
// Force milestone (pMile=1 via constructor override is complex; test via a known behaviour)
|
|
103
|
+
// getDuration returns '-' only when vMile is set; we can't set it via makeTask easily.
|
|
104
|
+
// Instead verify that all-true pWorkingDays behaves like no-arg for a zero-length task.
|
|
105
|
+
var task2 = taskWithDates(new Date(2025, 0, 6, 12, 0, 0), new Date(2025, 0, 7, 12, 0, 0));
|
|
106
|
+
(0, chai_1.expect)(task2.getDuration('day', EN, ALL_DAYS)).to.match(/^1\s+dy/);
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
//# sourceMappingURL=working-days.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"working-days.spec.js","sourceRoot":"","sources":["../../../test/unit/working-days.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.drawSelector = exports.sLine = exports.CalcTaskXY = exports.getArrayLocationByID = exports.newNode = exports.makeInput = void 0;
|
|
4
|
+
var events_1 = require("../events");
|
|
5
|
+
var makeInput = function (formattedValue, editable, type, value, choices) {
|
|
6
|
+
if (type === void 0) { type = 'text'; }
|
|
7
|
+
if (value === void 0) { value = null; }
|
|
8
|
+
if (choices === void 0) { choices = null; }
|
|
9
|
+
if (!value) {
|
|
10
|
+
value = formattedValue;
|
|
11
|
+
}
|
|
12
|
+
if (editable) {
|
|
13
|
+
switch (type) {
|
|
14
|
+
case 'date':
|
|
15
|
+
// Take timezone into account before converting to ISO String
|
|
16
|
+
value = value ? new Date(value.getTime() - (value.getTimezoneOffset() * 60000)).toISOString().split('T')[0] : '';
|
|
17
|
+
return "<input class=\"gantt-inputtable\" type=\"date\" value=\"".concat(value, "\">");
|
|
18
|
+
case 'resource':
|
|
19
|
+
if (choices) {
|
|
20
|
+
var found = choices.filter(function (c) { return c.id == value || c.name == value; });
|
|
21
|
+
if (found && found.length > 0) {
|
|
22
|
+
value = found[0].id;
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
choices.push({ id: value, name: value });
|
|
26
|
+
}
|
|
27
|
+
return "<select>" + choices.map(function (c) { return "<option value=\"".concat(c.id, "\" ").concat(value == c.id ? 'selected' : '', " >").concat(c.name, "</option>"); }).join('') + "</select>";
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
return "<input class=\"gantt-inputtable\" type=\"text\" value=\"".concat(value ? value : '', "\">");
|
|
31
|
+
}
|
|
32
|
+
case 'cost':
|
|
33
|
+
return "<input class=\"gantt-inputtable\" type=\"number\" max=\"100\" min=\"0\" value=\"".concat(value ? value : '', "\">");
|
|
34
|
+
default:
|
|
35
|
+
return "<input class=\"gantt-inputtable\" value=\"".concat(value ? value : '', "\">");
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
return formattedValue;
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
exports.makeInput = makeInput;
|
|
43
|
+
var newNode = function (pParent, pNodeType, pId, pClass, pText, pWidth, pLeft, pDisplay, pColspan, pAttribs) {
|
|
44
|
+
if (pId === void 0) { pId = null; }
|
|
45
|
+
if (pClass === void 0) { pClass = null; }
|
|
46
|
+
if (pText === void 0) { pText = null; }
|
|
47
|
+
if (pWidth === void 0) { pWidth = null; }
|
|
48
|
+
if (pLeft === void 0) { pLeft = null; }
|
|
49
|
+
if (pDisplay === void 0) { pDisplay = null; }
|
|
50
|
+
if (pColspan === void 0) { pColspan = null; }
|
|
51
|
+
if (pAttribs === void 0) { pAttribs = null; }
|
|
52
|
+
var vNewNode = pParent.appendChild(document.createElement(pNodeType));
|
|
53
|
+
if (pAttribs) {
|
|
54
|
+
for (var i = 0; i + 1 < pAttribs.length; i += 2) {
|
|
55
|
+
vNewNode.setAttribute(pAttribs[i], pAttribs[i + 1]);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (pId)
|
|
59
|
+
vNewNode.id = pId; // I wish I could do this with setAttribute but older IEs don't play nice
|
|
60
|
+
if (pClass)
|
|
61
|
+
vNewNode.className = pClass;
|
|
62
|
+
if (pWidth)
|
|
63
|
+
vNewNode.style.width = (isNaN(pWidth * 1)) ? pWidth : pWidth + 'px';
|
|
64
|
+
if (pLeft)
|
|
65
|
+
vNewNode.style.left = (isNaN(pLeft * 1)) ? pLeft : pLeft + 'px';
|
|
66
|
+
if (pText) {
|
|
67
|
+
if (pText.indexOf && pText.indexOf('<') === -1) {
|
|
68
|
+
vNewNode.appendChild(document.createTextNode(pText));
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
vNewNode.insertAdjacentHTML('beforeend', pText);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if (pDisplay)
|
|
75
|
+
vNewNode.style.display = pDisplay;
|
|
76
|
+
if (pColspan)
|
|
77
|
+
vNewNode.colSpan = pColspan;
|
|
78
|
+
return vNewNode;
|
|
79
|
+
};
|
|
80
|
+
exports.newNode = newNode;
|
|
81
|
+
var getArrayLocationByID = function (pId) {
|
|
82
|
+
var vList = this.getList();
|
|
83
|
+
for (var i = 0; i < vList.length; i++) {
|
|
84
|
+
if (vList[i].getID() == pId)
|
|
85
|
+
return i;
|
|
86
|
+
}
|
|
87
|
+
return -1;
|
|
88
|
+
};
|
|
89
|
+
exports.getArrayLocationByID = getArrayLocationByID;
|
|
90
|
+
var CalcTaskXY = function () {
|
|
91
|
+
var vID;
|
|
92
|
+
var vList = this.getList();
|
|
93
|
+
var vBarDiv;
|
|
94
|
+
var vTaskDiv;
|
|
95
|
+
var vParDiv;
|
|
96
|
+
var vLeft, vTop, vWidth;
|
|
97
|
+
var vHeight = Math.floor((this.getRowHeight() / 2));
|
|
98
|
+
for (var i = 0; i < vList.length; i++) {
|
|
99
|
+
vID = vList[i].getID();
|
|
100
|
+
vBarDiv = vList[i].getBarDiv();
|
|
101
|
+
vTaskDiv = vList[i].getTaskDiv();
|
|
102
|
+
if ((vList[i].getParItem() && vList[i].getParItem().getGroup() == 2)) {
|
|
103
|
+
vParDiv = vList[i].getParItem().getChildRow();
|
|
104
|
+
}
|
|
105
|
+
else
|
|
106
|
+
vParDiv = vList[i].getChildRow();
|
|
107
|
+
if (vBarDiv) {
|
|
108
|
+
vList[i].setStartX(vBarDiv.offsetLeft + 1);
|
|
109
|
+
vList[i].setStartY(vParDiv.offsetTop + vBarDiv.offsetTop + vHeight - 1);
|
|
110
|
+
vList[i].setEndX(vBarDiv.offsetLeft + vBarDiv.offsetWidth + 1);
|
|
111
|
+
vList[i].setEndY(vParDiv.offsetTop + vBarDiv.offsetTop + vHeight - 1);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
exports.CalcTaskXY = CalcTaskXY;
|
|
116
|
+
var sLine = function (x1, y1, x2, y2, pClass) {
|
|
117
|
+
var vLeft = Math.min(x1, x2);
|
|
118
|
+
var vTop = Math.min(y1, y2);
|
|
119
|
+
var vWid = Math.abs(x2 - x1) + 1;
|
|
120
|
+
var vHgt = Math.abs(y2 - y1) + 1;
|
|
121
|
+
var vTmpDiv = document.createElement('div');
|
|
122
|
+
vTmpDiv.id = this.vDivId + 'line' + this.vDepId++;
|
|
123
|
+
vTmpDiv.style.position = 'absolute';
|
|
124
|
+
vTmpDiv.style.overflow = 'hidden';
|
|
125
|
+
vTmpDiv.style.zIndex = '0';
|
|
126
|
+
vTmpDiv.style.left = vLeft + 'px';
|
|
127
|
+
vTmpDiv.style.top = vTop + 'px';
|
|
128
|
+
vTmpDiv.style.width = vWid + 'px';
|
|
129
|
+
vTmpDiv.style.height = vHgt + 'px';
|
|
130
|
+
vTmpDiv.style.visibility = 'visible';
|
|
131
|
+
if (vWid == 1)
|
|
132
|
+
vTmpDiv.className = 'glinev';
|
|
133
|
+
else
|
|
134
|
+
vTmpDiv.className = 'glineh';
|
|
135
|
+
if (pClass)
|
|
136
|
+
vTmpDiv.className += ' ' + pClass;
|
|
137
|
+
this.getLines().appendChild(vTmpDiv);
|
|
138
|
+
if (this.vEvents.onLineDraw && typeof this.vEvents.onLineDraw === 'function') {
|
|
139
|
+
this.vEvents.onLineDraw(vTmpDiv);
|
|
140
|
+
}
|
|
141
|
+
return vTmpDiv;
|
|
142
|
+
};
|
|
143
|
+
exports.sLine = sLine;
|
|
144
|
+
var drawSelector = function (pPos) {
|
|
145
|
+
var vOutput = document.createDocumentFragment();
|
|
146
|
+
var vDisplay = false;
|
|
147
|
+
for (var i = 0; i < this.vShowSelector.length && !vDisplay; i++) {
|
|
148
|
+
if (this.vShowSelector[i].toLowerCase() == pPos.toLowerCase())
|
|
149
|
+
vDisplay = true;
|
|
150
|
+
}
|
|
151
|
+
if (vDisplay) {
|
|
152
|
+
var vTmpDiv = (0, exports.newNode)(vOutput, 'div', null, 'gselector', this.vLangs[this.vLang]['format'] + ':');
|
|
153
|
+
if (this.vFormatArr.join().toLowerCase().indexOf('hour') != -1)
|
|
154
|
+
(0, events_1.addFormatListeners)(this, 'hour', (0, exports.newNode)(vTmpDiv, 'span', this.vDivId + 'formathour' + pPos, 'gformlabel' + ((this.vFormat == 'hour') ? ' gselected' : ''), this.vLangs[this.vLang]['hour']));
|
|
155
|
+
if (this.vFormatArr.join().toLowerCase().indexOf('day') != -1)
|
|
156
|
+
(0, events_1.addFormatListeners)(this, 'day', (0, exports.newNode)(vTmpDiv, 'span', this.vDivId + 'formatday' + pPos, 'gformlabel' + ((this.vFormat == 'day') ? ' gselected' : ''), this.vLangs[this.vLang]['day']));
|
|
157
|
+
if (this.vFormatArr.join().toLowerCase().indexOf('week') != -1)
|
|
158
|
+
(0, events_1.addFormatListeners)(this, 'week', (0, exports.newNode)(vTmpDiv, 'span', this.vDivId + 'formatweek' + pPos, 'gformlabel' + ((this.vFormat == 'week') ? ' gselected' : ''), this.vLangs[this.vLang]['week']));
|
|
159
|
+
if (this.vFormatArr.join().toLowerCase().indexOf('month') != -1)
|
|
160
|
+
(0, events_1.addFormatListeners)(this, 'month', (0, exports.newNode)(vTmpDiv, 'span', this.vDivId + 'formatmonth' + pPos, 'gformlabel' + ((this.vFormat == 'month') ? ' gselected' : ''), this.vLangs[this.vLang]['month']));
|
|
161
|
+
if (this.vFormatArr.join().toLowerCase().indexOf('quarter') != -1)
|
|
162
|
+
(0, events_1.addFormatListeners)(this, 'quarter', (0, exports.newNode)(vTmpDiv, 'span', this.vDivId + 'formatquarter' + pPos, 'gformlabel' + ((this.vFormat == 'quarter') ? ' gselected' : ''), this.vLangs[this.vLang]['quarter']));
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
(0, exports.newNode)(vOutput, 'div', null, 'gselector');
|
|
166
|
+
}
|
|
167
|
+
return vOutput;
|
|
168
|
+
};
|
|
169
|
+
exports.drawSelector = drawSelector;
|