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,161 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* E2E tests for issue #207: Gantt bars out of sync with timeline axis.
|
|
4
|
+
*
|
|
5
|
+
* The bug: bar left/width positions don't match the header columns
|
|
6
|
+
* for the corresponding start/end dates, causing bars to appear shifted.
|
|
7
|
+
*
|
|
8
|
+
* Strategy:
|
|
9
|
+
* Inject a deterministic chart (week format) with tasks at known Monday dates.
|
|
10
|
+
* Read the actual column header labels to locate the correct column for each
|
|
11
|
+
* task's start date (the chart may add a buffer week, so we do NOT hardcode
|
|
12
|
+
* column indices — we find them by date text). Then assert each bar's left
|
|
13
|
+
* edge lands within ALIGN_TOLERANCE_PX of the matching column's left edge.
|
|
14
|
+
*
|
|
15
|
+
* A systematic drift ≥ colWidth/2 would reproduce issue #207.
|
|
16
|
+
*/
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
const test_1 = require("@playwright/test");
|
|
19
|
+
/** Maximum allowed drift between bar left and the corresponding column left (px). */
|
|
20
|
+
const ALIGN_TOLERANCE_PX = 4;
|
|
21
|
+
/**
|
|
22
|
+
* Navigate to the demo page and wait for the JSGantt global to be available.
|
|
23
|
+
* The demo uses synchronous XHR which fails in headless Chrome, so we skip
|
|
24
|
+
* waiting for the initial chart and inject our own.
|
|
25
|
+
*/
|
|
26
|
+
async function gotoDemo(page) {
|
|
27
|
+
var _a;
|
|
28
|
+
// Use an absolute URL so Playwright doesn't reject "demo.html" as invalid
|
|
29
|
+
const baseURL = (_a = process.env.JSGANTT_E2E_BASE_URL) !== null && _a !== void 0 ? _a : 'http://localhost:8080';
|
|
30
|
+
const url = baseURL.replace(/\/$/, '') + '/demo.html';
|
|
31
|
+
await page.goto(url, { waitUntil: 'load' });
|
|
32
|
+
// Wait for the JSGantt global to be defined (scripts loaded)
|
|
33
|
+
await page.waitForFunction(() => typeof window.JSGantt !== 'undefined', { timeout: 15000 });
|
|
34
|
+
}
|
|
35
|
+
/** Inject a week-format chart with three 1-week tasks on known Mondays. */
|
|
36
|
+
async function injectWeekChart(page) {
|
|
37
|
+
await page.evaluate(() => {
|
|
38
|
+
const container = document.getElementById('embedded-Gantt');
|
|
39
|
+
container.innerHTML = '';
|
|
40
|
+
const g = new window.JSGantt.GanttChart(container, 'week');
|
|
41
|
+
g.setOptions({ vFormat: 'week', vShowDeps: 0, vLang: 'en', vShowWeekends: 1 });
|
|
42
|
+
const T = window.JSGantt.TaskItem;
|
|
43
|
+
// Three 1-week tasks, each starting on a Monday (column boundary)
|
|
44
|
+
g.AddTaskItem(new T(1, 'Task A', '2024-01-01', '2024-01-07', 'gtaskblue', '', 0, '', 0, 0, 0, 1, '', '', '', g));
|
|
45
|
+
g.AddTaskItem(new T(2, 'Task B', '2024-01-15', '2024-01-21', 'gtaskgreen', '', 0, '', 0, 0, 0, 1, '', '', '', g));
|
|
46
|
+
g.AddTaskItem(new T(3, 'Task C', '2024-01-29', '2024-02-04', 'gtaskorange', '', 0, '', 0, 0, 0, 1, '', '', '', g));
|
|
47
|
+
g.Draw();
|
|
48
|
+
});
|
|
49
|
+
await page.waitForSelector('#embedded-Gantt .gcharttable', { timeout: 10000 });
|
|
50
|
+
await page.waitForTimeout(400);
|
|
51
|
+
}
|
|
52
|
+
/** Read bar positions relative to the chart table left edge. */
|
|
53
|
+
async function getBars(page) {
|
|
54
|
+
return page.evaluate(() => {
|
|
55
|
+
const chartRect = document.querySelector('.gcharttable').getBoundingClientRect();
|
|
56
|
+
return Array.from(document.querySelectorAll('[id*="bardiv_"]'))
|
|
57
|
+
.filter(el => !el.classList.contains('gplan'))
|
|
58
|
+
.map(el => ({
|
|
59
|
+
id: el.id,
|
|
60
|
+
left: Math.round((el.getBoundingClientRect().left - chartRect.left) * 10) / 10,
|
|
61
|
+
}));
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
/** Read header column positions and date labels. */
|
|
65
|
+
async function getCols(page) {
|
|
66
|
+
return page.evaluate(() => {
|
|
67
|
+
const headerTable = document.querySelector('.gcharttableh');
|
|
68
|
+
const headerRect = headerTable.getBoundingClientRect();
|
|
69
|
+
const rows = headerTable.querySelectorAll('tr');
|
|
70
|
+
const lastRow = rows[rows.length - 1]; // finest granularity row
|
|
71
|
+
return Array.from(lastRow.querySelectorAll('td')).map((td, i) => {
|
|
72
|
+
const r = td.getBoundingClientRect();
|
|
73
|
+
return {
|
|
74
|
+
index: i,
|
|
75
|
+
text: td.innerText.trim().slice(0, 10),
|
|
76
|
+
left: Math.round((r.left - headerRect.left) * 10) / 10,
|
|
77
|
+
width: Math.round(r.width * 10) / 10,
|
|
78
|
+
};
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Find the column whose label starts with the given dd/mm string.
|
|
84
|
+
* Week headers are rendered as "DD/MM" in the default date display format.
|
|
85
|
+
*/
|
|
86
|
+
function findColByDate(cols, dd, mm) {
|
|
87
|
+
const target = `${String(dd).padStart(2, '0')}/${String(mm).padStart(2, '0')}`;
|
|
88
|
+
return cols.find(c => c.text.startsWith(target));
|
|
89
|
+
}
|
|
90
|
+
test_1.test.describe('Issue #207 — bar alignment with timeline axis (week format)', () => {
|
|
91
|
+
(0, test_1.test)('Task A (01/01): bar left aligns with the 01/01 column', async ({ page }) => {
|
|
92
|
+
await gotoDemo(page);
|
|
93
|
+
await injectWeekChart(page);
|
|
94
|
+
const bars = await getBars(page);
|
|
95
|
+
const cols = await getCols(page);
|
|
96
|
+
(0, test_1.expect)(bars.length, 'should find rendered bars').toBeGreaterThanOrEqual(3);
|
|
97
|
+
const col = findColByDate(cols, 1, 1);
|
|
98
|
+
(0, test_1.expect)(col, 'should find a column labelled 01/01').toBeDefined();
|
|
99
|
+
const bar = bars[0];
|
|
100
|
+
const drift = Math.abs(bar.left - col.left);
|
|
101
|
+
(0, test_1.expect)(drift, `Task A bar left (${bar.left}px) should align with col "01/01" left (${col.left}px), drift=${drift.toFixed(1)}px`).toBeLessThanOrEqual(ALIGN_TOLERANCE_PX);
|
|
102
|
+
});
|
|
103
|
+
(0, test_1.test)('Task B (15/01): bar left aligns with the 15/01 column', async ({ page }) => {
|
|
104
|
+
await gotoDemo(page);
|
|
105
|
+
await injectWeekChart(page);
|
|
106
|
+
const bars = await getBars(page);
|
|
107
|
+
const cols = await getCols(page);
|
|
108
|
+
const col = findColByDate(cols, 15, 1);
|
|
109
|
+
(0, test_1.expect)(col, 'should find a column labelled 15/01').toBeDefined();
|
|
110
|
+
const bar = bars[1];
|
|
111
|
+
const drift = Math.abs(bar.left - col.left);
|
|
112
|
+
(0, test_1.expect)(drift, `Task B bar left (${bar.left}px) should align with col "15/01" left (${col.left}px), drift=${drift.toFixed(1)}px`).toBeLessThanOrEqual(ALIGN_TOLERANCE_PX);
|
|
113
|
+
});
|
|
114
|
+
(0, test_1.test)('Task C (29/01): bar left aligns with the 29/01 column', async ({ page }) => {
|
|
115
|
+
await gotoDemo(page);
|
|
116
|
+
await injectWeekChart(page);
|
|
117
|
+
const bars = await getBars(page);
|
|
118
|
+
const cols = await getCols(page);
|
|
119
|
+
const col = findColByDate(cols, 29, 1);
|
|
120
|
+
(0, test_1.expect)(col, 'should find a column labelled 29/01').toBeDefined();
|
|
121
|
+
const bar = bars[2];
|
|
122
|
+
const drift = Math.abs(bar.left - col.left);
|
|
123
|
+
(0, test_1.expect)(drift, `Task C bar left (${bar.left}px) should align with col "29/01" left (${col.left}px), drift=${drift.toFixed(1)}px`).toBeLessThanOrEqual(ALIGN_TOLERANCE_PX);
|
|
124
|
+
});
|
|
125
|
+
(0, test_1.test)('each bar left is exactly on a column boundary (not between columns)', async ({ page }) => {
|
|
126
|
+
await gotoDemo(page);
|
|
127
|
+
await injectWeekChart(page);
|
|
128
|
+
const bars = await getBars(page);
|
|
129
|
+
const cols = await getCols(page);
|
|
130
|
+
(0, test_1.expect)(cols.length).toBeGreaterThan(0);
|
|
131
|
+
for (const bar of bars) {
|
|
132
|
+
const minDrift = Math.min(...cols.map(c => Math.abs(bar.left - c.left)));
|
|
133
|
+
(0, test_1.expect)(minDrift, `bar ${bar.id} at ${bar.left}px should sit on a column boundary; nearest column drift=${minDrift.toFixed(1)}px`).toBeLessThanOrEqual(ALIGN_TOLERANCE_PX);
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
(0, test_1.test)('month format (react-jsgantt scenario): bar aligns with 01/01 column', async ({ page }) => {
|
|
137
|
+
await gotoDemo(page);
|
|
138
|
+
// Reproduce the react-jsgantt scenario: month-format tasks at exact month boundaries
|
|
139
|
+
await page.evaluate(() => {
|
|
140
|
+
const container = document.getElementById('embedded-Gantt');
|
|
141
|
+
container.innerHTML = '';
|
|
142
|
+
const g = new window.JSGantt.GanttChart(container, 'month');
|
|
143
|
+
g.setOptions({ vFormat: 'month', vShowDeps: 0, vLang: 'en' });
|
|
144
|
+
const T = window.JSGantt.TaskItem;
|
|
145
|
+
g.AddTaskItem(new T(1, 'Phase 1', '2024-01-01', '2024-01-31', 'gtaskblue', '', 0, '', 0, 0, 0, 1, '', '', '', g));
|
|
146
|
+
g.AddTaskItem(new T(2, 'Phase 2', '2024-03-01', '2024-03-31', 'gtaskgreen', '', 0, '', 0, 0, 0, 1, '', '', '', g));
|
|
147
|
+
g.Draw();
|
|
148
|
+
});
|
|
149
|
+
await page.waitForSelector('#embedded-Gantt .gcharttable', { timeout: 10000 });
|
|
150
|
+
await page.waitForTimeout(400);
|
|
151
|
+
const bars = await getBars(page);
|
|
152
|
+
const cols = await getCols(page);
|
|
153
|
+
(0, test_1.expect)(bars.length).toBeGreaterThanOrEqual(2);
|
|
154
|
+
// Each bar should sit on a column boundary
|
|
155
|
+
for (const bar of bars) {
|
|
156
|
+
const minDrift = Math.min(...cols.map(c => Math.abs(bar.left - c.left)));
|
|
157
|
+
(0, test_1.expect)(minDrift, `bar ${bar.id} at ${bar.left}px should sit on a column boundary; nearest drift=${minDrift.toFixed(1)}px`).toBeLessThanOrEqual(ALIGN_TOLERANCE_PX);
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
//# sourceMappingURL=issue207-bar-axis-alignment.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue207-bar-axis-alignment.spec.js","sourceRoot":"","sources":["../test/e2e/issue207-bar-axis-alignment.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* E2E tests for issue #349: Click event on task name via vEvents.taskname.
|
|
4
|
+
*
|
|
5
|
+
* The issue reports that users want to handle clicks on task name cells.
|
|
6
|
+
* The vEvents.taskname callback should fire with (task, event, cell) args
|
|
7
|
+
* when a task name cell is clicked.
|
|
8
|
+
*/
|
|
9
|
+
var _a;
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
const test_1 = require("@playwright/test");
|
|
12
|
+
const BASE_URL = (_a = process.env.JSGANTT_E2E_BASE_URL) !== null && _a !== void 0 ? _a : 'http://localhost:8080';
|
|
13
|
+
async function gotoDemo(page) {
|
|
14
|
+
const url = BASE_URL.replace(/\/$/, '') + '/demo.html';
|
|
15
|
+
await page.goto(url, { waitUntil: 'load' });
|
|
16
|
+
await page.waitForFunction(() => typeof window.JSGantt !== 'undefined', { timeout: 15000 });
|
|
17
|
+
}
|
|
18
|
+
test_1.test.describe('Issue #349 — vEvents.taskname click handler', () => {
|
|
19
|
+
(0, test_1.test)('taskname click handler fires with task, event and cell arguments', async ({ page }) => {
|
|
20
|
+
await gotoDemo(page);
|
|
21
|
+
const result = await page.evaluate(() => {
|
|
22
|
+
const container = document.getElementById('embedded-Gantt');
|
|
23
|
+
container.innerHTML = '';
|
|
24
|
+
const calls = [];
|
|
25
|
+
const g = new window.JSGantt.GanttChart(container, 'week');
|
|
26
|
+
g.setOptions({
|
|
27
|
+
vFormat: 'week',
|
|
28
|
+
vShowDeps: 0,
|
|
29
|
+
vLang: 'en',
|
|
30
|
+
vEvents: {
|
|
31
|
+
taskname: function (task, event, cell) {
|
|
32
|
+
calls.push({
|
|
33
|
+
taskName: task.getName(),
|
|
34
|
+
hasEvent: event instanceof MouseEvent,
|
|
35
|
+
hasCell: cell instanceof HTMLElement,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
const T = window.JSGantt.TaskItem;
|
|
41
|
+
g.AddTaskItem(new T(1, 'Group A', '2024-01-01', '2024-03-31', 'ggroupblack', '', 0, '', 0, 1, 0, 1, '', '', '', g));
|
|
42
|
+
g.AddTaskItem(new T(2, 'Task Alpha', '2024-01-01', '2024-01-14', 'gtaskblue', '', 0, 'R1', 0, 0, 1, 1, '', '', '', g));
|
|
43
|
+
g.AddTaskItem(new T(3, 'Task Beta', '2024-01-15', '2024-02-28', 'gtaskgreen', '', 0, 'R2', 0, 0, 1, 1, '', '', '', g));
|
|
44
|
+
g.Draw();
|
|
45
|
+
return { calls, taskCellCount: document.querySelectorAll('.gtaskname').length };
|
|
46
|
+
});
|
|
47
|
+
// Verify task cells rendered
|
|
48
|
+
(0, test_1.expect)(result.taskCellCount, 'task name cells should be rendered').toBeGreaterThan(0);
|
|
49
|
+
// Click on task name cells
|
|
50
|
+
const taskCells = page.locator('.gtaskname');
|
|
51
|
+
const count = await taskCells.count();
|
|
52
|
+
(0, test_1.expect)(count).toBeGreaterThan(0);
|
|
53
|
+
// Click the first non-header task cell (skip the header cell)
|
|
54
|
+
// Task list rows have .gname class on their tr; click cell div inside
|
|
55
|
+
const taskRow = page.locator('tr.gname .gtaskname').first();
|
|
56
|
+
await taskRow.click();
|
|
57
|
+
// Read captured calls from page
|
|
58
|
+
const calls = await page.evaluate(() => window.__issue349Calls);
|
|
59
|
+
// The calls array was captured inside evaluate scope, re-check via a different approach
|
|
60
|
+
const fired = await page.evaluate(() => {
|
|
61
|
+
// Re-check by clicking programmatically and capturing via the already-registered handler
|
|
62
|
+
// Since we registered vEvents.taskname above, clicks on .gtaskname should fire it.
|
|
63
|
+
// We expose the call log via a global for inspection.
|
|
64
|
+
return window.__issue349Calls;
|
|
65
|
+
});
|
|
66
|
+
// Since our calls array is inside the evaluate closure, we need to re-run with a global
|
|
67
|
+
// Let's re-run with a global-exposed approach
|
|
68
|
+
const result2 = await page.evaluate(() => {
|
|
69
|
+
const container = document.getElementById('embedded-Gantt');
|
|
70
|
+
container.innerHTML = '';
|
|
71
|
+
window.__issue349Calls = [];
|
|
72
|
+
const g = new window.JSGantt.GanttChart(container, 'week');
|
|
73
|
+
g.setOptions({
|
|
74
|
+
vFormat: 'week',
|
|
75
|
+
vShowDeps: 0,
|
|
76
|
+
vLang: 'en',
|
|
77
|
+
vEvents: {
|
|
78
|
+
taskname: function (task, event, cell) {
|
|
79
|
+
window.__issue349Calls.push({
|
|
80
|
+
taskName: task.getName(),
|
|
81
|
+
hasEvent: event instanceof MouseEvent,
|
|
82
|
+
hasCell: cell instanceof HTMLElement,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
const T = window.JSGantt.TaskItem;
|
|
88
|
+
g.AddTaskItem(new T(1, 'Group A', '2024-01-01', '2024-03-31', 'ggroupblack', '', 0, '', 0, 1, 0, 1, '', '', '', g));
|
|
89
|
+
g.AddTaskItem(new T(2, 'Task Alpha', '2024-01-01', '2024-01-14', 'gtaskblue', '', 0, 'R1', 0, 0, 1, 1, '', '', '', g));
|
|
90
|
+
g.AddTaskItem(new T(3, 'Task Beta', '2024-01-15', '2024-02-28', 'gtaskgreen', '', 0, 'R2', 0, 0, 1, 1, '', '', '', g));
|
|
91
|
+
g.Draw();
|
|
92
|
+
return { taskCellCount: document.querySelectorAll('tr.gname .gtaskname').length };
|
|
93
|
+
});
|
|
94
|
+
(0, test_1.expect)(result2.taskCellCount, 'task rows should be visible').toBeGreaterThan(0);
|
|
95
|
+
// Click the first task cell (non-group row)
|
|
96
|
+
const firstTaskCell = page.locator('tr.gname .gtaskname').first();
|
|
97
|
+
await firstTaskCell.click();
|
|
98
|
+
const callsAfterClick = await page.evaluate(() => window.__issue349Calls);
|
|
99
|
+
(0, test_1.expect)(callsAfterClick.length, 'taskname handler should fire on click').toBeGreaterThan(0);
|
|
100
|
+
(0, test_1.expect)(callsAfterClick[0].hasEvent, 'first arg should be a MouseEvent').toBe(true);
|
|
101
|
+
(0, test_1.expect)(callsAfterClick[0].hasCell, 'second arg should be an HTMLElement').toBe(true);
|
|
102
|
+
(0, test_1.expect)(typeof callsAfterClick[0].taskName, 'task should have a name').toBe('string');
|
|
103
|
+
(0, test_1.expect)(callsAfterClick[0].taskName.length, 'task name should be non-empty').toBeGreaterThan(0);
|
|
104
|
+
});
|
|
105
|
+
(0, test_1.test)('taskname event fires for group task rows', async ({ page }) => {
|
|
106
|
+
await gotoDemo(page);
|
|
107
|
+
await page.evaluate(() => {
|
|
108
|
+
const container = document.getElementById('embedded-Gantt');
|
|
109
|
+
container.innerHTML = '';
|
|
110
|
+
window.__issue349GroupCalls = [];
|
|
111
|
+
const g = new window.JSGantt.GanttChart(container, 'week');
|
|
112
|
+
g.setOptions({
|
|
113
|
+
vFormat: 'week',
|
|
114
|
+
vLang: 'en',
|
|
115
|
+
vEvents: {
|
|
116
|
+
taskname: function (task, event, cell) {
|
|
117
|
+
window.__issue349GroupCalls.push({ taskName: task.getName(), isGroup: task.getGroup() === 1 });
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
const T = window.JSGantt.TaskItem;
|
|
122
|
+
g.AddTaskItem(new T(1, 'Group A', '2024-01-01', '2024-03-31', 'ggroupblack', '', 0, '', 0, 1, 0, 1, '', '', '', g));
|
|
123
|
+
g.AddTaskItem(new T(2, 'Task Alpha', '2024-01-01', '2024-01-14', 'gtaskblue', '', 0, 'R1', 0, 0, 1, 1, '', '', '', g));
|
|
124
|
+
g.Draw();
|
|
125
|
+
});
|
|
126
|
+
// Click the group row's taskname cell
|
|
127
|
+
// Group rows have a div with a span for the collapse icon inside .gtaskname
|
|
128
|
+
const groupCell = page.locator('tr.gname .gtaskname div').first();
|
|
129
|
+
await groupCell.click();
|
|
130
|
+
const calls = await page.evaluate(() => window.__issue349GroupCalls);
|
|
131
|
+
(0, test_1.expect)(calls.length, 'handler should fire for group row click').toBeGreaterThan(0);
|
|
132
|
+
(0, test_1.expect)(calls[0].isGroup, 'clicked task should be a group').toBe(true);
|
|
133
|
+
(0, test_1.expect)(calls[0].taskName).toBe('Group A');
|
|
134
|
+
});
|
|
135
|
+
(0, test_1.test)('vEvents.taskname can be set via setOptions (not just setEvents directly)', async ({ page }) => {
|
|
136
|
+
await gotoDemo(page);
|
|
137
|
+
const result = await page.evaluate(() => {
|
|
138
|
+
const container = document.getElementById('embedded-Gantt');
|
|
139
|
+
container.innerHTML = '';
|
|
140
|
+
window.__issue349SetOptionsCalls = [];
|
|
141
|
+
const g = new window.JSGantt.GanttChart(container, 'week');
|
|
142
|
+
// Use setOptions with vEvents — this is the API shown in issue #349
|
|
143
|
+
g.setOptions({
|
|
144
|
+
vFormat: 'week',
|
|
145
|
+
vLang: 'en',
|
|
146
|
+
vEvents: {
|
|
147
|
+
taskname: function (task) {
|
|
148
|
+
window.__issue349SetOptionsCalls.push(task.getName());
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
const T = window.JSGantt.TaskItem;
|
|
153
|
+
g.AddTaskItem(new T(1, 'My Task', '2024-01-01', '2024-01-31', 'gtaskblue', '', 0, '', 0, 0, 0, 1, '', '', '', g));
|
|
154
|
+
g.Draw();
|
|
155
|
+
// Verify the events object was set correctly
|
|
156
|
+
const events = g.getEventsClickCell();
|
|
157
|
+
return {
|
|
158
|
+
hasTasknameHandler: typeof events.taskname === 'function',
|
|
159
|
+
taskCellCount: document.querySelectorAll('tr.gname .gtaskname').length,
|
|
160
|
+
};
|
|
161
|
+
});
|
|
162
|
+
(0, test_1.expect)(result.hasTasknameHandler, 'taskname handler should be registered via setOptions').toBe(true);
|
|
163
|
+
(0, test_1.expect)(result.taskCellCount).toBeGreaterThan(0);
|
|
164
|
+
await page.locator('tr.gname .gtaskname').first().click();
|
|
165
|
+
const calls = await page.evaluate(() => window.__issue349SetOptionsCalls);
|
|
166
|
+
(0, test_1.expect)(calls.length, 'handler should fire').toBeGreaterThan(0);
|
|
167
|
+
(0, test_1.expect)(calls[0]).toBe('My Task');
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
//# sourceMappingURL=issue349-taskname-click-event.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue349-taskname-click-event.spec.js","sourceRoot":"","sources":["../test/e2e/issue349-taskname-click-event.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* E2E tests for issue #375: left data table columns not visible when set via setOptions().
|
|
4
|
+
*
|
|
5
|
+
* The issue reports that columns like vShowRes, vShowCost, vShowComp, vShowStartDate,
|
|
6
|
+
* vShowEndDate are not visible even when explicitly enabled via setOptions().
|
|
7
|
+
*/
|
|
8
|
+
var _a;
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
const test_1 = require("@playwright/test");
|
|
11
|
+
const BASE_URL = (_a = process.env.JSGANTT_E2E_BASE_URL) !== null && _a !== void 0 ? _a : 'http://localhost:8080';
|
|
12
|
+
async function gotoDemo(page) {
|
|
13
|
+
const url = BASE_URL.replace(/\/$/, '') + '/demo.html';
|
|
14
|
+
await page.goto(url, { waitUntil: 'load' });
|
|
15
|
+
await page.waitForFunction(() => typeof window.JSGantt !== 'undefined', { timeout: 15000 });
|
|
16
|
+
}
|
|
17
|
+
function setupGantt(page, options) {
|
|
18
|
+
return page.evaluate((opts) => {
|
|
19
|
+
const container = document.getElementById('embedded-Gantt');
|
|
20
|
+
container.innerHTML = '';
|
|
21
|
+
const g = new window.JSGantt.GanttChart(container, 'week');
|
|
22
|
+
g.setOptions(Object.assign({ vFormat: 'week', vShowDeps: 0, vLang: 'en' }, opts));
|
|
23
|
+
const T = window.JSGantt.TaskItem;
|
|
24
|
+
g.AddTaskItem(new T(1, 'Group A', '2024-01-01', '2024-03-31', 'ggroupblack', '', 0, 'Mario', 0, 1, 0, 1, '', '', '', g));
|
|
25
|
+
g.AddTaskItem(new T(2, 'Task Alpha', '2024-01-01', '2024-01-14', 'gtaskblue', '', 100, 'Alice', 50, 0, 1, 1, '', '', '', g));
|
|
26
|
+
g.AddTaskItem(new T(3, 'Task Beta', '2024-01-15', '2024-02-28', 'gtaskgreen', '', 200, 'Bob', 30, 0, 1, 1, '', '', '', g));
|
|
27
|
+
g.Draw();
|
|
28
|
+
return {
|
|
29
|
+
resHeadingCount: document.querySelectorAll('td.gtaskheading.gresource').length,
|
|
30
|
+
durHeadingCount: document.querySelectorAll('td.gtaskheading.gduration').length,
|
|
31
|
+
compHeadingCount: document.querySelectorAll('td.gtaskheading.gpccomplete').length,
|
|
32
|
+
startHeadingCount: document.querySelectorAll('td.gtaskheading.gstartdate').length,
|
|
33
|
+
endHeadingCount: document.querySelectorAll('td.gtaskheading.genddate').length,
|
|
34
|
+
costHeadingCount: document.querySelectorAll('td.gtaskheading.gcost').length,
|
|
35
|
+
};
|
|
36
|
+
}, options);
|
|
37
|
+
}
|
|
38
|
+
test_1.test.describe('Issue #375 — column visibility via setOptions()', () => {
|
|
39
|
+
(0, test_1.test)('all columns shown by default (no setOptions overrides)', async ({ page }) => {
|
|
40
|
+
await gotoDemo(page);
|
|
41
|
+
const counts = await setupGantt(page, {});
|
|
42
|
+
(0, test_1.expect)(counts.resHeadingCount, 'resource column heading should be visible by default').toBeGreaterThan(0);
|
|
43
|
+
(0, test_1.expect)(counts.durHeadingCount, 'duration column heading should be visible by default').toBeGreaterThan(0);
|
|
44
|
+
(0, test_1.expect)(counts.compHeadingCount, 'completion column heading should be visible by default').toBeGreaterThan(0);
|
|
45
|
+
(0, test_1.expect)(counts.startHeadingCount, 'start date column heading should be visible by default').toBeGreaterThan(0);
|
|
46
|
+
(0, test_1.expect)(counts.endHeadingCount, 'end date column heading should be visible by default').toBeGreaterThan(0);
|
|
47
|
+
// cost is 0 by default
|
|
48
|
+
(0, test_1.expect)(counts.costHeadingCount, 'cost column heading should be hidden by default').toBe(0);
|
|
49
|
+
});
|
|
50
|
+
(0, test_1.test)('vShowCost=1 via setOptions() makes cost column appear', async ({ page }) => {
|
|
51
|
+
await gotoDemo(page);
|
|
52
|
+
const counts = await setupGantt(page, { vShowCost: 1 });
|
|
53
|
+
(0, test_1.expect)(counts.costHeadingCount, 'cost column heading should be visible when vShowCost=1').toBeGreaterThan(0);
|
|
54
|
+
});
|
|
55
|
+
(0, test_1.test)('vShowRes=0 via setOptions() hides resource column', async ({ page }) => {
|
|
56
|
+
await gotoDemo(page);
|
|
57
|
+
const counts = await setupGantt(page, { vShowRes: 0 });
|
|
58
|
+
(0, test_1.expect)(counts.resHeadingCount, 'resource column heading should be hidden when vShowRes=0').toBe(0);
|
|
59
|
+
});
|
|
60
|
+
(0, test_1.test)('vShowComp=0 via setOptions() hides completion column', async ({ page }) => {
|
|
61
|
+
await gotoDemo(page);
|
|
62
|
+
const counts = await setupGantt(page, { vShowComp: 0 });
|
|
63
|
+
(0, test_1.expect)(counts.compHeadingCount, 'completion column heading should be hidden when vShowComp=0').toBe(0);
|
|
64
|
+
});
|
|
65
|
+
(0, test_1.test)('vShowStartDate=0 and vShowEndDate=0 via setOptions() hides date columns', async ({ page }) => {
|
|
66
|
+
await gotoDemo(page);
|
|
67
|
+
const counts = await setupGantt(page, { vShowStartDate: 0, vShowEndDate: 0 });
|
|
68
|
+
(0, test_1.expect)(counts.startHeadingCount, 'start date column should be hidden when vShowStartDate=0').toBe(0);
|
|
69
|
+
(0, test_1.expect)(counts.endHeadingCount, 'end date column should be hidden when vShowEndDate=0').toBe(0);
|
|
70
|
+
});
|
|
71
|
+
(0, test_1.test)('all optional columns toggled on via setOptions() renders all heading cells', async ({ page }) => {
|
|
72
|
+
await gotoDemo(page);
|
|
73
|
+
const counts = await setupGantt(page, {
|
|
74
|
+
vShowRes: 1,
|
|
75
|
+
vShowDur: 1,
|
|
76
|
+
vShowComp: 1,
|
|
77
|
+
vShowStartDate: 1,
|
|
78
|
+
vShowEndDate: 1,
|
|
79
|
+
vShowCost: 1,
|
|
80
|
+
});
|
|
81
|
+
(0, test_1.expect)(counts.resHeadingCount, 'resource heading visible').toBeGreaterThan(0);
|
|
82
|
+
(0, test_1.expect)(counts.durHeadingCount, 'duration heading visible').toBeGreaterThan(0);
|
|
83
|
+
(0, test_1.expect)(counts.compHeadingCount, 'completion heading visible').toBeGreaterThan(0);
|
|
84
|
+
(0, test_1.expect)(counts.startHeadingCount, 'start date heading visible').toBeGreaterThan(0);
|
|
85
|
+
(0, test_1.expect)(counts.endHeadingCount, 'end date heading visible').toBeGreaterThan(0);
|
|
86
|
+
(0, test_1.expect)(counts.costHeadingCount, 'cost heading visible').toBeGreaterThan(0);
|
|
87
|
+
});
|
|
88
|
+
(0, test_1.test)('all optional columns toggled off via setOptions() hides all non-name headings', async ({ page }) => {
|
|
89
|
+
await gotoDemo(page);
|
|
90
|
+
const counts = await setupGantt(page, {
|
|
91
|
+
vShowRes: 0,
|
|
92
|
+
vShowDur: 0,
|
|
93
|
+
vShowComp: 0,
|
|
94
|
+
vShowStartDate: 0,
|
|
95
|
+
vShowEndDate: 0,
|
|
96
|
+
vShowCost: 0,
|
|
97
|
+
});
|
|
98
|
+
(0, test_1.expect)(counts.resHeadingCount, 'resource heading hidden').toBe(0);
|
|
99
|
+
(0, test_1.expect)(counts.durHeadingCount, 'duration heading hidden').toBe(0);
|
|
100
|
+
(0, test_1.expect)(counts.compHeadingCount, 'completion heading hidden').toBe(0);
|
|
101
|
+
(0, test_1.expect)(counts.startHeadingCount, 'start date heading hidden').toBe(0);
|
|
102
|
+
(0, test_1.expect)(counts.endHeadingCount, 'end date heading hidden').toBe(0);
|
|
103
|
+
(0, test_1.expect)(counts.costHeadingCount, 'cost heading hidden').toBe(0);
|
|
104
|
+
});
|
|
105
|
+
(0, test_1.test)('column data cells respect vShowRes and vShowCost settings', async ({ page }) => {
|
|
106
|
+
await gotoDemo(page);
|
|
107
|
+
const result = await page.evaluate(() => {
|
|
108
|
+
const container = document.getElementById('embedded-Gantt');
|
|
109
|
+
container.innerHTML = '';
|
|
110
|
+
const g = new window.JSGantt.GanttChart(container, 'week');
|
|
111
|
+
g.setOptions({
|
|
112
|
+
vFormat: 'week',
|
|
113
|
+
vLang: 'en',
|
|
114
|
+
vShowRes: 0,
|
|
115
|
+
vShowCost: 1,
|
|
116
|
+
});
|
|
117
|
+
const T = window.JSGantt.TaskItem;
|
|
118
|
+
g.AddTaskItem(new T(1, 'Task A', '2024-01-01', '2024-01-31', 'gtaskblue', '', 500, 'Alice', 80, 0, 0, 1, '', '', '', g));
|
|
119
|
+
g.Draw();
|
|
120
|
+
return {
|
|
121
|
+
resCells: document.querySelectorAll('td.gresource').length,
|
|
122
|
+
costCells: document.querySelectorAll('td.gcost').length,
|
|
123
|
+
};
|
|
124
|
+
});
|
|
125
|
+
(0, test_1.expect)(result.resCells, 'resource cells should be absent when vShowRes=0').toBe(0);
|
|
126
|
+
(0, test_1.expect)(result.costCells, 'cost cells should be present when vShowCost=1').toBeGreaterThan(0);
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
//# sourceMappingURL=issue375-column-visibility.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue375-column-visibility.spec.js","sourceRoot":"","sources":["../test/e2e/issue375-column-visibility.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* E2E tests for issue #54: Month view — today line hidden and month header
|
|
4
|
+
* missing when the max date falls on the 1st of a month.
|
|
5
|
+
*
|
|
6
|
+
* Root cause (suspected): getMaxDate() in month format uses:
|
|
7
|
+
* while (vDate.getDate() > 1) vDate.setDate(vDate.getDate() + 1);
|
|
8
|
+
* vDate.setDate(vDate.getDate() - 1);
|
|
9
|
+
* When vDate is already the 1st of a month the while never runs, then
|
|
10
|
+
* setDate(0) rolls back to the last day of the *previous* month — so
|
|
11
|
+
* a task ending August 1 causes vMaxDate = July 31, hiding August.
|
|
12
|
+
*
|
|
13
|
+
* Test cases (no Date mocking needed):
|
|
14
|
+
*
|
|
15
|
+
* 1. "August header" — tasks span Jan–Aug 1 2025.
|
|
16
|
+
* Bug: vMaxDate = July 31 → August column missing.
|
|
17
|
+
* Fix: vMaxDate = August 31 → August column present.
|
|
18
|
+
*
|
|
19
|
+
* 2. "today line" — tasks span Jan 2026 → April 1 2026 (today = April 13 2026).
|
|
20
|
+
* Bug: vMaxDate = March 31 < today (Apr 13) → today line hidden.
|
|
21
|
+
* Fix: vMaxDate = April 30 ≥ today → today line visible.
|
|
22
|
+
*/
|
|
23
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
+
const test_1 = require("@playwright/test");
|
|
25
|
+
// Use the base URL from the environment (or default) and append demo.html.
|
|
26
|
+
// We build the full URL here because DEMO_URL ('demo.html') is a relative path
|
|
27
|
+
// and Playwright resolves it relative to the base URL *without* a trailing
|
|
28
|
+
// slash, which can produce a 404 (e.g. https://host/project → https://host/demo.html).
|
|
29
|
+
function demoUrl() {
|
|
30
|
+
var _a;
|
|
31
|
+
const base = ((_a = process.env.JSGANTT_E2E_BASE_URL) !== null && _a !== void 0 ? _a : 'http://localhost:8080').replace(/\/$/, '');
|
|
32
|
+
return `${base}/demo.html`;
|
|
33
|
+
}
|
|
34
|
+
/** Build a gantt in month format by injecting into the live demo page. */
|
|
35
|
+
async function mountMonthGantt(page, startMM, startDD, startYYYY, endMM, endDD, endYYYY) {
|
|
36
|
+
// Ensure the demo page has rendered at least once before we overwrite it
|
|
37
|
+
await page.waitForSelector('#embedded-Gantt', { timeout: 15000 });
|
|
38
|
+
await page.evaluate(({ startMM, startDD, startYYYY, endMM, endDD, endYYYY }) => {
|
|
39
|
+
const container = document.getElementById('embedded-Gantt');
|
|
40
|
+
if (!container)
|
|
41
|
+
throw new Error('#embedded-Gantt not found');
|
|
42
|
+
container.innerHTML = '';
|
|
43
|
+
const g = new window['JSGantt'].GanttChart(container, 'month');
|
|
44
|
+
g.setOptions({ vFormat: 'month', vFormatArr: ['Month'] });
|
|
45
|
+
// Default date input format is yyyy-mm-dd
|
|
46
|
+
const pad = (n) => String(n).padStart(2, '0');
|
|
47
|
+
const fmt = (y, m, d) => `${y}-${pad(m)}-${pad(d)}`;
|
|
48
|
+
g.AddTaskItem(new window['JSGantt'].TaskItem(1, 'Task A', fmt(startYYYY, startMM, startDD), fmt(endYYYY, endMM, endDD), '', '', 0, 'Me', 0, 1, 0, 1, '', '', '', g));
|
|
49
|
+
g.Draw();
|
|
50
|
+
}, { startMM, startDD, startYYYY, endMM, endDD, endYYYY });
|
|
51
|
+
await page.waitForSelector('#embedded-Gantt .gcharttable', { timeout: 10000 });
|
|
52
|
+
await page.waitForTimeout(300);
|
|
53
|
+
}
|
|
54
|
+
test_1.test.describe('Issue #54 — Month view: today line and month header', () => {
|
|
55
|
+
test_1.test.beforeEach(async ({ page }) => {
|
|
56
|
+
await page.goto(demoUrl(), { waitUntil: 'networkidle', timeout: 25000 });
|
|
57
|
+
});
|
|
58
|
+
(0, test_1.test)('August column header is visible when task ends on Aug 1', async ({ page }) => {
|
|
59
|
+
// Task Jan 1 2025 → Aug 1 2025
|
|
60
|
+
// Bug: vMaxDate rolls back to July 31 → August header missing
|
|
61
|
+
await mountMonthGantt(page, 1, 1, 2025, 8, 1, 2025);
|
|
62
|
+
const headerTexts = await page.evaluate(() => {
|
|
63
|
+
var _a;
|
|
64
|
+
const headerTable = document.querySelector('#embedded-Gantt .gcharttableh');
|
|
65
|
+
if (!headerTable)
|
|
66
|
+
return [];
|
|
67
|
+
const rows = headerTable.querySelectorAll('tr');
|
|
68
|
+
const lastRow = rows[rows.length - 1];
|
|
69
|
+
return Array.from((_a = lastRow === null || lastRow === void 0 ? void 0 : lastRow.querySelectorAll('td')) !== null && _a !== void 0 ? _a : []).map((td) => td.innerText.trim());
|
|
70
|
+
});
|
|
71
|
+
(0, test_1.expect)(headerTexts.some((t) => /aug/i.test(t)), `Expected August in month header, got: ${JSON.stringify(headerTexts)}`).toBe(true);
|
|
72
|
+
});
|
|
73
|
+
(0, test_1.test)('today line is rendered when task ends on the 1st and today is within that month', async ({ page }) => {
|
|
74
|
+
// Today = 2026-04-13. Task ends April 1 2026.
|
|
75
|
+
// Bug: vMaxDate = March 31, 2026 < today (Apr 13) → today line hidden
|
|
76
|
+
// Fix: vMaxDate = April 30, 2026 ≥ today → today line visible
|
|
77
|
+
await mountMonthGantt(page, 1, 1, 2026, 4, 1, 2026);
|
|
78
|
+
const todayLineExists = await page.evaluate(() => {
|
|
79
|
+
return document.querySelector('#embedded-Gantt .gCurDate') !== null;
|
|
80
|
+
});
|
|
81
|
+
(0, test_1.expect)(todayLineExists, 'Today line (.gCurDate) should be rendered').toBe(true);
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
//# sourceMappingURL=issue54-month-today.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue54-month-today.spec.js","sourceRoot":"","sources":["../test/e2e/issue54-month-today.spec.ts"],"names":[],"mappings":"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"}
|