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,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* E2E tests for issue #255: vShowWeekends: 0 does not remove weekend cell colorization.
|
|
4
|
+
*
|
|
5
|
+
* Root cause: draw.ts used strict `!== false` to check vShowWeekends in drawColsChart(),
|
|
6
|
+
* so passing the numeric value 0 (as documented) still evaluated truthy, leaving
|
|
7
|
+
* weekend cells with class "gtaskcellwkend".
|
|
8
|
+
*
|
|
9
|
+
* Fix: changed `this.vShowWeekends !== false` → `this.vShowWeekends` (truthy check),
|
|
10
|
+
* consistent with the rest of the file which already used `!this.vShowWeekends`.
|
|
11
|
+
*/
|
|
12
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
13
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
14
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
15
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
16
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
17
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
18
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
22
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
23
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
24
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
25
|
+
function step(op) {
|
|
26
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
27
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
28
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
29
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
30
|
+
switch (op[0]) {
|
|
31
|
+
case 0: case 1: t = op; break;
|
|
32
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
33
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
34
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
35
|
+
default:
|
|
36
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
37
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
38
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
39
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
40
|
+
if (t[2]) _.ops.pop();
|
|
41
|
+
_.trys.pop(); continue;
|
|
42
|
+
}
|
|
43
|
+
op = body.call(thisArg, _);
|
|
44
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
45
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
var _a;
|
|
49
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
50
|
+
var test_1 = require("@playwright/test");
|
|
51
|
+
// Use absolute URL so the path resolves correctly regardless of baseURL trailing-slash
|
|
52
|
+
var BASE = ((_a = process.env.JSGANTT_E2E_BASE_URL) !== null && _a !== void 0 ? _a : 'http://localhost:8080').replace(/\/$/, '');
|
|
53
|
+
var TEST_PAGE = "".concat(BASE, "/test-issue255.html");
|
|
54
|
+
test_1.test.describe('Issue #255 — vShowWeekends: 0 must suppress weekend colorization', function () {
|
|
55
|
+
(0, test_1.test)('weekend cells have class gtaskcellwkend when vShowWeekends: 1', function (_a) {
|
|
56
|
+
var page = _a.page;
|
|
57
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
58
|
+
var count;
|
|
59
|
+
return __generator(this, function (_b) {
|
|
60
|
+
switch (_b.label) {
|
|
61
|
+
case 0: return [4 /*yield*/, page.goto(TEST_PAGE, { waitUntil: 'networkidle' })];
|
|
62
|
+
case 1:
|
|
63
|
+
_b.sent();
|
|
64
|
+
return [4 /*yield*/, page.waitForTimeout(500)];
|
|
65
|
+
case 2:
|
|
66
|
+
_b.sent();
|
|
67
|
+
return [4 /*yield*/, page.evaluate(function () {
|
|
68
|
+
return document.querySelectorAll('#gantt-with-weekends .gtaskcellwkend').length;
|
|
69
|
+
})];
|
|
70
|
+
case 3:
|
|
71
|
+
count = _b.sent();
|
|
72
|
+
(0, test_1.expect)(count, 'Expected weekend cells to be colored when vShowWeekends=1').toBeGreaterThan(0);
|
|
73
|
+
return [2 /*return*/];
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
(0, test_1.test)('no gtaskcellwkend cells when vShowWeekends: 0', function (_a) {
|
|
79
|
+
var page = _a.page;
|
|
80
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
81
|
+
var count;
|
|
82
|
+
return __generator(this, function (_b) {
|
|
83
|
+
switch (_b.label) {
|
|
84
|
+
case 0: return [4 /*yield*/, page.goto(TEST_PAGE, { waitUntil: 'networkidle' })];
|
|
85
|
+
case 1:
|
|
86
|
+
_b.sent();
|
|
87
|
+
return [4 /*yield*/, page.waitForTimeout(500)];
|
|
88
|
+
case 2:
|
|
89
|
+
_b.sent();
|
|
90
|
+
return [4 /*yield*/, page.evaluate(function () {
|
|
91
|
+
return document.querySelectorAll('#gantt-no-weekends .gtaskcellwkend').length;
|
|
92
|
+
})];
|
|
93
|
+
case 3:
|
|
94
|
+
count = _b.sent();
|
|
95
|
+
(0, test_1.expect)(count, 'Expected no weekend-colored cells when vShowWeekends=0').toBe(0);
|
|
96
|
+
return [2 /*return*/];
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
//# sourceMappingURL=issue255-show-weekends.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue255-show-weekends.spec.js","sourceRoot":"","sources":["../../../test/e2e/issue255-show-weekends.spec.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,yCAAgD;AAEhD,uFAAuF;AACvF,IAAM,IAAI,GAAG,CAAC,MAAA,OAAO,CAAC,GAAG,CAAC,oBAAoB,mCAAI,uBAAuB,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAC9F,IAAM,SAAS,GAAG,UAAG,IAAI,wBAAqB,CAAC;AAE/C,WAAI,CAAC,QAAQ,CAAC,kEAAkE,EAAE;IAEhF,IAAA,WAAI,EAAC,+DAA+D,EAAE,UAAO,EAAQ;YAAN,IAAI,UAAA;;;;;4BACjF,qBAAM,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,EAAA;;wBAAxD,SAAwD,CAAC;wBACzD,qBAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAA;;wBAA9B,SAA8B,CAAC;wBAEjB,qBAAM,IAAI,CAAC,QAAQ,CAAC;gCAChC,OAAA,QAAQ,CAAC,gBAAgB,CAAC,sCAAsC,CAAC,CAAC,MAAM;4BAAxE,CAAwE,CACzE,EAAA;;wBAFK,KAAK,GAAG,SAEb;wBACD,IAAA,aAAM,EAAC,KAAK,EAAE,2DAA2D,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;;;;;KAC/F,CAAC,CAAC;IAEH,IAAA,WAAI,EAAC,+CAA+C,EAAE,UAAO,EAAQ;YAAN,IAAI,UAAA;;;;;4BACjE,qBAAM,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,EAAA;;wBAAxD,SAAwD,CAAC;wBACzD,qBAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAA;;wBAA9B,SAA8B,CAAC;wBAEjB,qBAAM,IAAI,CAAC,QAAQ,CAAC;gCAChC,OAAA,QAAQ,CAAC,gBAAgB,CAAC,oCAAoC,CAAC,CAAC,MAAM;4BAAtE,CAAsE,CACvE,EAAA;;wBAFK,KAAK,GAAG,SAEb;wBACD,IAAA,aAAM,EAAC,KAAK,EAAE,wDAAwD,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;;;;KACjF,CAAC,CAAC;AAEL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,270 @@
|
|
|
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 __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
10
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
11
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
12
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
13
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
14
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
15
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
19
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
20
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
21
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
22
|
+
function step(op) {
|
|
23
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
24
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
25
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
26
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
27
|
+
switch (op[0]) {
|
|
28
|
+
case 0: case 1: t = op; break;
|
|
29
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
30
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
31
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
32
|
+
default:
|
|
33
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
34
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
35
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
36
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
37
|
+
if (t[2]) _.ops.pop();
|
|
38
|
+
_.trys.pop(); continue;
|
|
39
|
+
}
|
|
40
|
+
op = body.call(thisArg, _);
|
|
41
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
42
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
var _a;
|
|
46
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
47
|
+
var test_1 = require("@playwright/test");
|
|
48
|
+
var BASE_URL = (_a = process.env.JSGANTT_E2E_BASE_URL) !== null && _a !== void 0 ? _a : 'http://localhost:8080';
|
|
49
|
+
function gotoDemo(page) {
|
|
50
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
51
|
+
var url;
|
|
52
|
+
return __generator(this, function (_a) {
|
|
53
|
+
switch (_a.label) {
|
|
54
|
+
case 0:
|
|
55
|
+
url = BASE_URL.replace(/\/$/, '') + '/demo.html';
|
|
56
|
+
return [4 /*yield*/, page.goto(url, { waitUntil: 'load' })];
|
|
57
|
+
case 1:
|
|
58
|
+
_a.sent();
|
|
59
|
+
return [4 /*yield*/, page.waitForFunction(function () { return typeof window.JSGantt !== 'undefined'; }, { timeout: 15000 })];
|
|
60
|
+
case 2:
|
|
61
|
+
_a.sent();
|
|
62
|
+
return [2 /*return*/];
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
test_1.test.describe('Issue #349 — vEvents.taskname click handler', function () {
|
|
68
|
+
(0, test_1.test)('taskname click handler fires with task, event and cell arguments', function (_a) {
|
|
69
|
+
var page = _a.page;
|
|
70
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
71
|
+
var result, taskCells, count, taskRow, calls, fired, result2, firstTaskCell, callsAfterClick;
|
|
72
|
+
return __generator(this, function (_b) {
|
|
73
|
+
switch (_b.label) {
|
|
74
|
+
case 0: return [4 /*yield*/, gotoDemo(page)];
|
|
75
|
+
case 1:
|
|
76
|
+
_b.sent();
|
|
77
|
+
return [4 /*yield*/, page.evaluate(function () {
|
|
78
|
+
var container = document.getElementById('embedded-Gantt');
|
|
79
|
+
container.innerHTML = '';
|
|
80
|
+
var calls = [];
|
|
81
|
+
var g = new window.JSGantt.GanttChart(container, 'week');
|
|
82
|
+
g.setOptions({
|
|
83
|
+
vFormat: 'week',
|
|
84
|
+
vShowDeps: 0,
|
|
85
|
+
vLang: 'en',
|
|
86
|
+
vEvents: {
|
|
87
|
+
taskname: function (task, event, cell) {
|
|
88
|
+
calls.push({
|
|
89
|
+
taskName: task.getName(),
|
|
90
|
+
hasEvent: event instanceof MouseEvent,
|
|
91
|
+
hasCell: cell instanceof HTMLElement,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
var T = window.JSGantt.TaskItem;
|
|
97
|
+
g.AddTaskItem(new T(1, 'Group A', '2024-01-01', '2024-03-31', 'ggroupblack', '', 0, '', 0, 1, 0, 1, '', '', '', g));
|
|
98
|
+
g.AddTaskItem(new T(2, 'Task Alpha', '2024-01-01', '2024-01-14', 'gtaskblue', '', 0, 'R1', 0, 0, 1, 1, '', '', '', g));
|
|
99
|
+
g.AddTaskItem(new T(3, 'Task Beta', '2024-01-15', '2024-02-28', 'gtaskgreen', '', 0, 'R2', 0, 0, 1, 1, '', '', '', g));
|
|
100
|
+
g.Draw();
|
|
101
|
+
return { calls: calls, taskCellCount: document.querySelectorAll('.gtaskname').length };
|
|
102
|
+
})];
|
|
103
|
+
case 2:
|
|
104
|
+
result = _b.sent();
|
|
105
|
+
// Verify task cells rendered
|
|
106
|
+
(0, test_1.expect)(result.taskCellCount, 'task name cells should be rendered').toBeGreaterThan(0);
|
|
107
|
+
taskCells = page.locator('.gtaskname');
|
|
108
|
+
return [4 /*yield*/, taskCells.count()];
|
|
109
|
+
case 3:
|
|
110
|
+
count = _b.sent();
|
|
111
|
+
(0, test_1.expect)(count).toBeGreaterThan(0);
|
|
112
|
+
taskRow = page.locator('tr.gname .gtaskname').first();
|
|
113
|
+
return [4 /*yield*/, taskRow.click()];
|
|
114
|
+
case 4:
|
|
115
|
+
_b.sent();
|
|
116
|
+
return [4 /*yield*/, page.evaluate(function () { return window.__issue349Calls; })];
|
|
117
|
+
case 5:
|
|
118
|
+
calls = _b.sent();
|
|
119
|
+
return [4 /*yield*/, page.evaluate(function () {
|
|
120
|
+
// Re-check by clicking programmatically and capturing via the already-registered handler
|
|
121
|
+
// Since we registered vEvents.taskname above, clicks on .gtaskname should fire it.
|
|
122
|
+
// We expose the call log via a global for inspection.
|
|
123
|
+
return window.__issue349Calls;
|
|
124
|
+
})];
|
|
125
|
+
case 6:
|
|
126
|
+
fired = _b.sent();
|
|
127
|
+
return [4 /*yield*/, page.evaluate(function () {
|
|
128
|
+
var container = document.getElementById('embedded-Gantt');
|
|
129
|
+
container.innerHTML = '';
|
|
130
|
+
window.__issue349Calls = [];
|
|
131
|
+
var g = new window.JSGantt.GanttChart(container, 'week');
|
|
132
|
+
g.setOptions({
|
|
133
|
+
vFormat: 'week',
|
|
134
|
+
vShowDeps: 0,
|
|
135
|
+
vLang: 'en',
|
|
136
|
+
vEvents: {
|
|
137
|
+
taskname: function (task, event, cell) {
|
|
138
|
+
window.__issue349Calls.push({
|
|
139
|
+
taskName: task.getName(),
|
|
140
|
+
hasEvent: event instanceof MouseEvent,
|
|
141
|
+
hasCell: cell instanceof HTMLElement,
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
var T = window.JSGantt.TaskItem;
|
|
147
|
+
g.AddTaskItem(new T(1, 'Group A', '2024-01-01', '2024-03-31', 'ggroupblack', '', 0, '', 0, 1, 0, 1, '', '', '', g));
|
|
148
|
+
g.AddTaskItem(new T(2, 'Task Alpha', '2024-01-01', '2024-01-14', 'gtaskblue', '', 0, 'R1', 0, 0, 1, 1, '', '', '', g));
|
|
149
|
+
g.AddTaskItem(new T(3, 'Task Beta', '2024-01-15', '2024-02-28', 'gtaskgreen', '', 0, 'R2', 0, 0, 1, 1, '', '', '', g));
|
|
150
|
+
g.Draw();
|
|
151
|
+
return { taskCellCount: document.querySelectorAll('tr.gname .gtaskname').length };
|
|
152
|
+
})];
|
|
153
|
+
case 7:
|
|
154
|
+
result2 = _b.sent();
|
|
155
|
+
(0, test_1.expect)(result2.taskCellCount, 'task rows should be visible').toBeGreaterThan(0);
|
|
156
|
+
firstTaskCell = page.locator('tr.gname .gtaskname').first();
|
|
157
|
+
return [4 /*yield*/, firstTaskCell.click()];
|
|
158
|
+
case 8:
|
|
159
|
+
_b.sent();
|
|
160
|
+
return [4 /*yield*/, page.evaluate(function () { return window.__issue349Calls; })];
|
|
161
|
+
case 9:
|
|
162
|
+
callsAfterClick = _b.sent();
|
|
163
|
+
(0, test_1.expect)(callsAfterClick.length, 'taskname handler should fire on click').toBeGreaterThan(0);
|
|
164
|
+
(0, test_1.expect)(callsAfterClick[0].hasEvent, 'first arg should be a MouseEvent').toBe(true);
|
|
165
|
+
(0, test_1.expect)(callsAfterClick[0].hasCell, 'second arg should be an HTMLElement').toBe(true);
|
|
166
|
+
(0, test_1.expect)(typeof callsAfterClick[0].taskName, 'task should have a name').toBe('string');
|
|
167
|
+
(0, test_1.expect)(callsAfterClick[0].taskName.length, 'task name should be non-empty').toBeGreaterThan(0);
|
|
168
|
+
return [2 /*return*/];
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
(0, test_1.test)('taskname event fires for group task rows', function (_a) {
|
|
174
|
+
var page = _a.page;
|
|
175
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
176
|
+
var groupCell, calls;
|
|
177
|
+
return __generator(this, function (_b) {
|
|
178
|
+
switch (_b.label) {
|
|
179
|
+
case 0: return [4 /*yield*/, gotoDemo(page)];
|
|
180
|
+
case 1:
|
|
181
|
+
_b.sent();
|
|
182
|
+
return [4 /*yield*/, page.evaluate(function () {
|
|
183
|
+
var container = document.getElementById('embedded-Gantt');
|
|
184
|
+
container.innerHTML = '';
|
|
185
|
+
window.__issue349GroupCalls = [];
|
|
186
|
+
var g = new window.JSGantt.GanttChart(container, 'week');
|
|
187
|
+
g.setOptions({
|
|
188
|
+
vFormat: 'week',
|
|
189
|
+
vLang: 'en',
|
|
190
|
+
vEvents: {
|
|
191
|
+
taskname: function (task, event, cell) {
|
|
192
|
+
window.__issue349GroupCalls.push({ taskName: task.getName(), isGroup: task.getGroup() === 1 });
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
var T = window.JSGantt.TaskItem;
|
|
197
|
+
g.AddTaskItem(new T(1, 'Group A', '2024-01-01', '2024-03-31', 'ggroupblack', '', 0, '', 0, 1, 0, 1, '', '', '', g));
|
|
198
|
+
g.AddTaskItem(new T(2, 'Task Alpha', '2024-01-01', '2024-01-14', 'gtaskblue', '', 0, 'R1', 0, 0, 1, 1, '', '', '', g));
|
|
199
|
+
g.Draw();
|
|
200
|
+
})];
|
|
201
|
+
case 2:
|
|
202
|
+
_b.sent();
|
|
203
|
+
groupCell = page.locator('tr.gname .gtaskname div').first();
|
|
204
|
+
return [4 /*yield*/, groupCell.click()];
|
|
205
|
+
case 3:
|
|
206
|
+
_b.sent();
|
|
207
|
+
return [4 /*yield*/, page.evaluate(function () { return window.__issue349GroupCalls; })];
|
|
208
|
+
case 4:
|
|
209
|
+
calls = _b.sent();
|
|
210
|
+
(0, test_1.expect)(calls.length, 'handler should fire for group row click').toBeGreaterThan(0);
|
|
211
|
+
(0, test_1.expect)(calls[0].isGroup, 'clicked task should be a group').toBe(true);
|
|
212
|
+
(0, test_1.expect)(calls[0].taskName).toBe('Group A');
|
|
213
|
+
return [2 /*return*/];
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
});
|
|
217
|
+
});
|
|
218
|
+
(0, test_1.test)('vEvents.taskname can be set via setOptions (not just setEvents directly)', function (_a) {
|
|
219
|
+
var page = _a.page;
|
|
220
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
221
|
+
var result, calls;
|
|
222
|
+
return __generator(this, function (_b) {
|
|
223
|
+
switch (_b.label) {
|
|
224
|
+
case 0: return [4 /*yield*/, gotoDemo(page)];
|
|
225
|
+
case 1:
|
|
226
|
+
_b.sent();
|
|
227
|
+
return [4 /*yield*/, page.evaluate(function () {
|
|
228
|
+
var container = document.getElementById('embedded-Gantt');
|
|
229
|
+
container.innerHTML = '';
|
|
230
|
+
window.__issue349SetOptionsCalls = [];
|
|
231
|
+
var g = new window.JSGantt.GanttChart(container, 'week');
|
|
232
|
+
// Use setOptions with vEvents — this is the API shown in issue #349
|
|
233
|
+
g.setOptions({
|
|
234
|
+
vFormat: 'week',
|
|
235
|
+
vLang: 'en',
|
|
236
|
+
vEvents: {
|
|
237
|
+
taskname: function (task) {
|
|
238
|
+
window.__issue349SetOptionsCalls.push(task.getName());
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
});
|
|
242
|
+
var T = window.JSGantt.TaskItem;
|
|
243
|
+
g.AddTaskItem(new T(1, 'My Task', '2024-01-01', '2024-01-31', 'gtaskblue', '', 0, '', 0, 0, 0, 1, '', '', '', g));
|
|
244
|
+
g.Draw();
|
|
245
|
+
// Verify the events object was set correctly
|
|
246
|
+
var events = g.getEventsClickCell();
|
|
247
|
+
return {
|
|
248
|
+
hasTasknameHandler: typeof events.taskname === 'function',
|
|
249
|
+
taskCellCount: document.querySelectorAll('tr.gname .gtaskname').length,
|
|
250
|
+
};
|
|
251
|
+
})];
|
|
252
|
+
case 2:
|
|
253
|
+
result = _b.sent();
|
|
254
|
+
(0, test_1.expect)(result.hasTasknameHandler, 'taskname handler should be registered via setOptions').toBe(true);
|
|
255
|
+
(0, test_1.expect)(result.taskCellCount).toBeGreaterThan(0);
|
|
256
|
+
return [4 /*yield*/, page.locator('tr.gname .gtaskname').first().click()];
|
|
257
|
+
case 3:
|
|
258
|
+
_b.sent();
|
|
259
|
+
return [4 /*yield*/, page.evaluate(function () { return window.__issue349SetOptionsCalls; })];
|
|
260
|
+
case 4:
|
|
261
|
+
calls = _b.sent();
|
|
262
|
+
(0, test_1.expect)(calls.length, 'handler should fire').toBeGreaterThan(0);
|
|
263
|
+
(0, test_1.expect)(calls[0]).toBe('My Task');
|
|
264
|
+
return [2 /*return*/];
|
|
265
|
+
}
|
|
266
|
+
});
|
|
267
|
+
});
|
|
268
|
+
});
|
|
269
|
+
});
|
|
270
|
+
//# 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":";AAAA;;;;;;GAMG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,yCAAgD;AAEhD,IAAM,QAAQ,GAAG,MAAA,OAAO,CAAC,GAAG,CAAC,oBAAoB,mCAAI,uBAAuB,CAAC;AAE7E,SAAe,QAAQ,CAAC,IAAI;;;;;;oBACpB,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,YAAY,CAAC;oBACvD,qBAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAA;;oBAA3C,SAA2C,CAAC;oBAC5C,qBAAM,IAAI,CAAC,eAAe,CAAC,cAAM,OAAA,OAAQ,MAAc,CAAC,OAAO,KAAK,WAAW,EAA9C,CAA8C,EAAE,EAAE,OAAO,EAAE,KAAM,EAAE,CAAC,EAAA;;oBAArG,SAAqG,CAAC;;;;;CACvG;AAED,WAAI,CAAC,QAAQ,CAAC,6CAA6C,EAAE;IAE3D,IAAA,WAAI,EAAC,kEAAkE,EAAE,UAAO,EAAQ;YAAN,IAAI,UAAA;;;;;4BACpF,qBAAM,QAAQ,CAAC,IAAI,CAAC,EAAA;;wBAApB,SAAoB,CAAC;wBAEN,qBAAM,IAAI,CAAC,QAAQ,CAAC;gCACjC,IAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAE,CAAC;gCAC7D,SAAS,CAAC,SAAS,GAAG,EAAE,CAAC;gCAEzB,IAAM,KAAK,GAAgE,EAAE,CAAC;gCAE9E,IAAM,CAAC,GAAG,IAAK,MAAc,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;gCACpE,CAAC,CAAC,UAAU,CAAC;oCACX,OAAO,EAAE,MAAM;oCACf,SAAS,EAAE,CAAC;oCACZ,KAAK,EAAE,IAAI;oCACX,OAAO,EAAE;wCACP,QAAQ,EAAE,UAAU,IAAI,EAAE,KAAK,EAAE,IAAI;4CACnC,KAAK,CAAC,IAAI,CAAC;gDACT,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE;gDACxB,QAAQ,EAAE,KAAK,YAAY,UAAU;gDACrC,OAAO,EAAE,IAAI,YAAY,WAAW;6CACrC,CAAC,CAAC;wCACL,CAAC;qCACF;iCACF,CAAC,CAAC;gCAEH,IAAM,CAAC,GAAI,MAAc,CAAC,OAAO,CAAC,QAAQ,CAAC;gCAC3C,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;gCACpH,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;gCACvH,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;gCACvH,CAAC,CAAC,IAAI,EAAE,CAAC;gCAET,OAAO,EAAE,KAAK,OAAA,EAAE,aAAa,EAAE,QAAQ,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,CAAC;4BAClF,CAAC,CAAC,EAAA;;wBA7BI,MAAM,GAAG,SA6Bb;wBAEF,6BAA6B;wBAC7B,IAAA,aAAM,EAAC,MAAM,CAAC,aAAa,EAAE,oCAAoC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;wBAGhF,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;wBAC/B,qBAAM,SAAS,CAAC,KAAK,EAAE,EAAA;;wBAA/B,KAAK,GAAG,SAAuB;wBACrC,IAAA,aAAM,EAAC,KAAK,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;wBAI3B,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,KAAK,EAAE,CAAC;wBAC5D,qBAAM,OAAO,CAAC,KAAK,EAAE,EAAA;;wBAArB,SAAqB,CAAC;wBAGR,qBAAM,IAAI,CAAC,QAAQ,CAAC,cAAM,OAAC,MAAc,CAAC,eAAe,EAA/B,CAA+B,CAAC,EAAA;;wBAAlE,KAAK,GAAG,SAA0D;wBAG1D,qBAAM,IAAI,CAAC,QAAQ,CAAC;gCAChC,yFAAyF;gCACzF,mFAAmF;gCACnF,sDAAsD;gCACtD,OAAQ,MAAc,CAAC,eAAe,CAAC;4BACzC,CAAC,CAAC,EAAA;;wBALI,KAAK,GAAG,SAKZ;wBAIc,qBAAM,IAAI,CAAC,QAAQ,CAAC;gCAClC,IAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAE,CAAC;gCAC7D,SAAS,CAAC,SAAS,GAAG,EAAE,CAAC;gCAExB,MAAc,CAAC,eAAe,GAAG,EAAE,CAAC;gCAErC,IAAM,CAAC,GAAG,IAAK,MAAc,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;gCACpE,CAAC,CAAC,UAAU,CAAC;oCACX,OAAO,EAAE,MAAM;oCACf,SAAS,EAAE,CAAC;oCACZ,KAAK,EAAE,IAAI;oCACX,OAAO,EAAE;wCACP,QAAQ,EAAE,UAAU,IAAI,EAAE,KAAK,EAAE,IAAI;4CAClC,MAAc,CAAC,eAAe,CAAC,IAAI,CAAC;gDACnC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE;gDACxB,QAAQ,EAAE,KAAK,YAAY,UAAU;gDACrC,OAAO,EAAE,IAAI,YAAY,WAAW;6CACrC,CAAC,CAAC;wCACL,CAAC;qCACF;iCACF,CAAC,CAAC;gCAEH,IAAM,CAAC,GAAI,MAAc,CAAC,OAAO,CAAC,QAAQ,CAAC;gCAC3C,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;gCACpH,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;gCACvH,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;gCACvH,CAAC,CAAC,IAAI,EAAE,CAAC;gCAET,OAAO,EAAE,aAAa,EAAE,QAAQ,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,CAAC,MAAM,EAAE,CAAC;4BACpF,CAAC,CAAC,EAAA;;wBA7BI,OAAO,GAAG,SA6Bd;wBAEF,IAAA,aAAM,EAAC,OAAO,CAAC,aAAa,EAAE,6BAA6B,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;wBAG1E,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,KAAK,EAAE,CAAC;wBAClE,qBAAM,aAAa,CAAC,KAAK,EAAE,EAAA;;wBAA3B,SAA2B,CAAC;wBAEJ,qBAAM,IAAI,CAAC,QAAQ,CAAC,cAAM,OAAC,MAAc,CAAC,eAAe,EAA/B,CAA+B,CAAC,EAAA;;wBAA5E,eAAe,GAAG,SAA0D;wBAElF,IAAA,aAAM,EAAC,eAAe,CAAC,MAAM,EAAE,uCAAuC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;wBAC3F,IAAA,aAAM,EAAC,eAAe,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,kCAAkC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBACnF,IAAA,aAAM,EAAC,eAAe,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,qCAAqC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBACrF,IAAA,aAAM,EAAC,OAAO,eAAe,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,yBAAyB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;wBACrF,IAAA,aAAM,EAAC,eAAe,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,+BAA+B,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;;;;;KAChG,CAAC,CAAC;IAEH,IAAA,WAAI,EAAC,0CAA0C,EAAE,UAAO,EAAQ;YAAN,IAAI,UAAA;;;;;4BAC5D,qBAAM,QAAQ,CAAC,IAAI,CAAC,EAAA;;wBAApB,SAAoB,CAAC;wBAErB,qBAAM,IAAI,CAAC,QAAQ,CAAC;gCAClB,IAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAE,CAAC;gCAC7D,SAAS,CAAC,SAAS,GAAG,EAAE,CAAC;gCACxB,MAAc,CAAC,oBAAoB,GAAG,EAAE,CAAC;gCAE1C,IAAM,CAAC,GAAG,IAAK,MAAc,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;gCACpE,CAAC,CAAC,UAAU,CAAC;oCACX,OAAO,EAAE,MAAM;oCACf,KAAK,EAAE,IAAI;oCACX,OAAO,EAAE;wCACP,QAAQ,EAAE,UAAU,IAAI,EAAE,KAAK,EAAE,IAAI;4CAClC,MAAc,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;wCAC1G,CAAC;qCACF;iCACF,CAAC,CAAC;gCAEH,IAAM,CAAC,GAAI,MAAc,CAAC,OAAO,CAAC,QAAQ,CAAC;gCAC3C,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;gCACpH,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;gCACvH,CAAC,CAAC,IAAI,EAAE,CAAC;4BACX,CAAC,CAAC,EAAA;;wBApBF,SAoBE,CAAC;wBAIG,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC,KAAK,EAAE,CAAC;wBAClE,qBAAM,SAAS,CAAC,KAAK,EAAE,EAAA;;wBAAvB,SAAuB,CAAC;wBAEV,qBAAM,IAAI,CAAC,QAAQ,CAAC,cAAM,OAAC,MAAc,CAAC,oBAAoB,EAApC,CAAoC,CAAC,EAAA;;wBAAvE,KAAK,GAAG,SAA+D;wBAE7E,IAAA,aAAM,EAAC,KAAK,CAAC,MAAM,EAAE,yCAAyC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;wBACnF,IAAA,aAAM,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,gCAAgC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBACtE,IAAA,aAAM,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;;;;;KAC3C,CAAC,CAAC;IAEH,IAAA,WAAI,EAAC,0EAA0E,EAAE,UAAO,EAAQ;YAAN,IAAI,UAAA;;;;;4BAC5F,qBAAM,QAAQ,CAAC,IAAI,CAAC,EAAA;;wBAApB,SAAoB,CAAC;wBAEN,qBAAM,IAAI,CAAC,QAAQ,CAAC;gCACjC,IAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAE,CAAC;gCAC7D,SAAS,CAAC,SAAS,GAAG,EAAE,CAAC;gCACxB,MAAc,CAAC,yBAAyB,GAAG,EAAE,CAAC;gCAE/C,IAAM,CAAC,GAAG,IAAK,MAAc,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;gCAEpE,oEAAoE;gCACpE,CAAC,CAAC,UAAU,CAAC;oCACX,OAAO,EAAE,MAAM;oCACf,KAAK,EAAE,IAAI;oCACX,OAAO,EAAE;wCACP,QAAQ,EAAE,UAAU,IAAI;4CACrB,MAAc,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;wCACjE,CAAC;qCACF;iCACF,CAAC,CAAC;gCAEH,IAAM,CAAC,GAAI,MAAc,CAAC,OAAO,CAAC,QAAQ,CAAC;gCAC3C,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;gCAClH,CAAC,CAAC,IAAI,EAAE,CAAC;gCAET,6CAA6C;gCAC7C,IAAM,MAAM,GAAG,CAAC,CAAC,kBAAkB,EAAE,CAAC;gCACtC,OAAO;oCACL,kBAAkB,EAAE,OAAO,MAAM,CAAC,QAAQ,KAAK,UAAU;oCACzD,aAAa,EAAE,QAAQ,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,CAAC,MAAM;iCACvE,CAAC;4BACJ,CAAC,CAAC,EAAA;;wBA5BI,MAAM,GAAG,SA4Bb;wBAEF,IAAA,aAAM,EAAC,MAAM,CAAC,kBAAkB,EAAE,sDAAsD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBACrG,IAAA,aAAM,EAAC,MAAM,CAAC,aAAa,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;wBAEhD,qBAAM,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAA;;wBAAzD,SAAyD,CAAC;wBAE5C,qBAAM,IAAI,CAAC,QAAQ,CAAC,cAAM,OAAC,MAAc,CAAC,yBAAyB,EAAzC,CAAyC,CAAC,EAAA;;wBAA5E,KAAK,GAAG,SAAoE;wBAClF,IAAA,aAAM,EAAC,KAAK,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;wBAC/D,IAAA,aAAM,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;;;;;KAClC,CAAC,CAAC;AAEL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* E2E tests for ng-gantt issue #48: dependency lines (pDepend) only visible
|
|
4
|
+
* on click of the start date, not on initial render.
|
|
5
|
+
*
|
|
6
|
+
* Root behaviour we test:
|
|
7
|
+
* After g.Draw() completes, dependency line elements (.gDepFS / .gDepFSArw
|
|
8
|
+
* etc.) must already be present in the DOM — no user interaction required.
|
|
9
|
+
*
|
|
10
|
+
* Strategy:
|
|
11
|
+
* 1. Load demo.html (which uses data.json — several tasks have pDepend set).
|
|
12
|
+
* 2. Assert dep-line elements exist without any click.
|
|
13
|
+
* 3. Inject a minimal chart via JSGantt globals to get a deterministic
|
|
14
|
+
* scenario: two tasks, second depends on first (FS). Assert the line
|
|
15
|
+
* elements are rendered.
|
|
16
|
+
* 4. Assert the lines are not zero-size (i.e. actually visible).
|
|
17
|
+
*/
|
|
18
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
19
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
20
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
21
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
22
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
23
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
24
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
28
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
29
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
30
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
31
|
+
function step(op) {
|
|
32
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
33
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
34
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
35
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
36
|
+
switch (op[0]) {
|
|
37
|
+
case 0: case 1: t = op; break;
|
|
38
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
39
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
40
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
41
|
+
default:
|
|
42
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
43
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
44
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
45
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
46
|
+
if (t[2]) _.ops.pop();
|
|
47
|
+
_.trys.pop(); continue;
|
|
48
|
+
}
|
|
49
|
+
op = body.call(thisArg, _);
|
|
50
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
51
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
55
|
+
var test_1 = require("@playwright/test");
|
|
56
|
+
var gantt_page_1 = require("./gantt.page");
|
|
57
|
+
// CSS class prefix used for dependency line <div>s drawn by sLine()
|
|
58
|
+
var DEP_LINE_SELECTOR = '[class*="gDepFS"],[class*="gDepSS"],[class*="gDepFF"],[class*="gDepSF"]';
|
|
59
|
+
var DEP_ARROW_SELECTOR = '[class*="gDepFSArw"],[class*="gDepSSArw"],[class*="gDepFFArw"],[class*="gDepSFArw"]';
|
|
60
|
+
test_1.test.describe('Issue #48 — dependency lines rendered on initial Draw()', function () {
|
|
61
|
+
(0, test_1.test)('demo.html: dep lines are in the DOM after initial load (no click required)', function (_a) {
|
|
62
|
+
var page = _a.page;
|
|
63
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
64
|
+
var lineCount;
|
|
65
|
+
return __generator(this, function (_b) {
|
|
66
|
+
switch (_b.label) {
|
|
67
|
+
case 0: return [4 /*yield*/, page.goto(gantt_page_1.DEMO_URL, { waitUntil: 'load' })];
|
|
68
|
+
case 1:
|
|
69
|
+
_b.sent();
|
|
70
|
+
return [4 /*yield*/, page.waitForSelector('#embedded-Gantt .gcharttable', { timeout: 15000 })];
|
|
71
|
+
case 2:
|
|
72
|
+
_b.sent();
|
|
73
|
+
// Allow layout and DrawDependencies to finish
|
|
74
|
+
return [4 /*yield*/, page.waitForTimeout(600)];
|
|
75
|
+
case 3:
|
|
76
|
+
// Allow layout and DrawDependencies to finish
|
|
77
|
+
_b.sent();
|
|
78
|
+
return [4 /*yield*/, page.locator(DEP_LINE_SELECTOR).count()];
|
|
79
|
+
case 4:
|
|
80
|
+
lineCount = _b.sent();
|
|
81
|
+
(0, test_1.expect)(lineCount, 'Dependency line elements should be present in the DOM on initial render').toBeGreaterThan(0);
|
|
82
|
+
return [2 /*return*/];
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
(0, test_1.test)('demo.html: dep arrow elements are in the DOM after initial load', function (_a) {
|
|
88
|
+
var page = _a.page;
|
|
89
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
90
|
+
var arrowCount;
|
|
91
|
+
return __generator(this, function (_b) {
|
|
92
|
+
switch (_b.label) {
|
|
93
|
+
case 0: return [4 /*yield*/, page.goto(gantt_page_1.DEMO_URL, { waitUntil: 'load' })];
|
|
94
|
+
case 1:
|
|
95
|
+
_b.sent();
|
|
96
|
+
return [4 /*yield*/, page.waitForSelector('#embedded-Gantt .gcharttable', { timeout: 15000 })];
|
|
97
|
+
case 2:
|
|
98
|
+
_b.sent();
|
|
99
|
+
return [4 /*yield*/, page.waitForTimeout(600)];
|
|
100
|
+
case 3:
|
|
101
|
+
_b.sent();
|
|
102
|
+
return [4 /*yield*/, page.locator(DEP_ARROW_SELECTOR).count()];
|
|
103
|
+
case 4:
|
|
104
|
+
arrowCount = _b.sent();
|
|
105
|
+
(0, test_1.expect)(arrowCount, 'Dependency arrow elements should be present in the DOM on initial render').toBeGreaterThan(0);
|
|
106
|
+
return [2 /*return*/];
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
(0, test_1.test)('minimal chart: dep line rendered for a 2-task FS dependency without any click', function (_a) {
|
|
112
|
+
var page = _a.page;
|
|
113
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
114
|
+
var lineCount, arrowCount;
|
|
115
|
+
return __generator(this, function (_b) {
|
|
116
|
+
switch (_b.label) {
|
|
117
|
+
case 0: return [4 /*yield*/, page.goto(gantt_page_1.DEMO_URL, { waitUntil: 'load' })];
|
|
118
|
+
case 1:
|
|
119
|
+
_b.sent();
|
|
120
|
+
return [4 /*yield*/, page.waitForSelector('#embedded-Gantt .gcharttable', { timeout: 15000 })];
|
|
121
|
+
case 2:
|
|
122
|
+
_b.sent();
|
|
123
|
+
// Inject a minimal 2-task chart so the scenario is deterministic
|
|
124
|
+
return [4 /*yield*/, page.evaluate(function () {
|
|
125
|
+
var container = document.getElementById('embedded-Gantt');
|
|
126
|
+
container.innerHTML = '';
|
|
127
|
+
var g = new window.JSGantt.GanttChart(container, 'week');
|
|
128
|
+
g.setOptions({ vFormat: 'week', vShowDeps: 1, vLang: 'en' });
|
|
129
|
+
var T = window.JSGantt.TaskItem;
|
|
130
|
+
// task 1: no dependency
|
|
131
|
+
g.AddTaskItem(new T(1, 'Alpha', '04/01/2026', '04/10/2026', 'gtaskblue', '', 0, '', 0, 0, 0, 1, '', '', '', g));
|
|
132
|
+
// task 2: depends on task 1 (FS)
|
|
133
|
+
g.AddTaskItem(new T(2, 'Beta', '04/11/2026', '04/20/2026', 'gtaskgreen', '', 0, '', 0, 0, 0, 1, '1', '', '', g));
|
|
134
|
+
g.Draw();
|
|
135
|
+
})];
|
|
136
|
+
case 3:
|
|
137
|
+
// Inject a minimal 2-task chart so the scenario is deterministic
|
|
138
|
+
_b.sent();
|
|
139
|
+
return [4 /*yield*/, page.waitForSelector('#embedded-Gantt .gcharttable', { timeout: 10000 })];
|
|
140
|
+
case 4:
|
|
141
|
+
_b.sent();
|
|
142
|
+
return [4 /*yield*/, page.waitForTimeout(400)];
|
|
143
|
+
case 5:
|
|
144
|
+
_b.sent();
|
|
145
|
+
return [4 /*yield*/, page.locator(DEP_LINE_SELECTOR).count()];
|
|
146
|
+
case 6:
|
|
147
|
+
lineCount = _b.sent();
|
|
148
|
+
(0, test_1.expect)(lineCount, 'FS dependency line divs should be rendered without any click').toBeGreaterThan(0);
|
|
149
|
+
return [4 /*yield*/, page.locator(DEP_ARROW_SELECTOR).count()];
|
|
150
|
+
case 7:
|
|
151
|
+
arrowCount = _b.sent();
|
|
152
|
+
(0, test_1.expect)(arrowCount, 'FS dependency arrow should be rendered without any click').toBeGreaterThan(0);
|
|
153
|
+
return [2 /*return*/];
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
(0, test_1.test)('minimal chart: dep line elements have non-zero dimensions (are actually visible)', function (_a) {
|
|
159
|
+
var page = _a.page;
|
|
160
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
161
|
+
var hasVisibleLine;
|
|
162
|
+
return __generator(this, function (_b) {
|
|
163
|
+
switch (_b.label) {
|
|
164
|
+
case 0: return [4 /*yield*/, page.goto(gantt_page_1.DEMO_URL, { waitUntil: 'load' })];
|
|
165
|
+
case 1:
|
|
166
|
+
_b.sent();
|
|
167
|
+
return [4 /*yield*/, page.waitForSelector('#embedded-Gantt .gcharttable', { timeout: 15000 })];
|
|
168
|
+
case 2:
|
|
169
|
+
_b.sent();
|
|
170
|
+
return [4 /*yield*/, page.evaluate(function () {
|
|
171
|
+
var container = document.getElementById('embedded-Gantt');
|
|
172
|
+
container.innerHTML = '';
|
|
173
|
+
var g = new window.JSGantt.GanttChart(container, 'week');
|
|
174
|
+
g.setOptions({ vFormat: 'week', vShowDeps: 1, vLang: 'en' });
|
|
175
|
+
var T = window.JSGantt.TaskItem;
|
|
176
|
+
g.AddTaskItem(new T(1, 'Alpha', '04/01/2026', '04/10/2026', 'gtaskblue', '', 0, '', 0, 0, 0, 1, '', '', '', g));
|
|
177
|
+
g.AddTaskItem(new T(2, 'Beta', '04/11/2026', '04/20/2026', 'gtaskgreen', '', 0, '', 0, 0, 0, 1, '1', '', '', g));
|
|
178
|
+
g.Draw();
|
|
179
|
+
})];
|
|
180
|
+
case 3:
|
|
181
|
+
_b.sent();
|
|
182
|
+
return [4 /*yield*/, page.waitForSelector('#embedded-Gantt .gcharttable', { timeout: 10000 })];
|
|
183
|
+
case 4:
|
|
184
|
+
_b.sent();
|
|
185
|
+
return [4 /*yield*/, page.waitForTimeout(400)];
|
|
186
|
+
case 5:
|
|
187
|
+
_b.sent();
|
|
188
|
+
return [4 /*yield*/, page.evaluate(function (sel) {
|
|
189
|
+
var lines = Array.from(document.querySelectorAll(sel));
|
|
190
|
+
return lines.some(function (el) {
|
|
191
|
+
var r = el.getBoundingClientRect();
|
|
192
|
+
return r.width > 0 || r.height > 0;
|
|
193
|
+
});
|
|
194
|
+
}, DEP_LINE_SELECTOR)];
|
|
195
|
+
case 6:
|
|
196
|
+
hasVisibleLine = _b.sent();
|
|
197
|
+
(0, test_1.expect)(hasVisibleLine, 'At least one dependency line element should have non-zero dimensions').toBe(true);
|
|
198
|
+
return [2 /*return*/];
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
});
|
|
202
|
+
});
|
|
203
|
+
});
|
|
204
|
+
//# sourceMappingURL=issue48-dependency-lines.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue48-dependency-lines.spec.js","sourceRoot":"","sources":["../../../test/e2e/issue48-dependency-lines.spec.ts"],"names":[],"mappings":"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"}
|