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.
Files changed (100) hide show
  1. package/.mocharc.cjs +5 -0
  2. package/.travis.yml +0 -2
  3. package/Documentation.md +1 -1
  4. package/dist/draw_columns.js +171 -0
  5. package/dist/draw_dependencies.js +97 -0
  6. package/dist/e2e/app.e2e-spec.js +3 -3
  7. package/dist/e2e/app.e2e-spec.js.map +1 -1
  8. package/dist/e2e/app.po.js +5 -5
  9. package/dist/e2e/app.po.js.map +1 -1
  10. package/dist/jsgantt.js +580 -473
  11. package/dist/json.js +200 -0
  12. package/dist/lang.js +1635 -0
  13. package/dist/options.js +219 -0
  14. package/dist/playwright.config.js +33 -0
  15. package/dist/playwright.config.js.map +1 -0
  16. package/dist/src/draw.js +149 -148
  17. package/dist/src/draw.js.map +1 -1
  18. package/dist/src/draw_columns.js +66 -63
  19. package/dist/src/draw_columns.js.map +1 -1
  20. package/dist/src/draw_dependencies.js +4 -2
  21. package/dist/src/draw_dependencies.js.map +1 -1
  22. package/dist/src/events.js +72 -54
  23. package/dist/src/events.js.map +1 -1
  24. package/dist/src/json.js +10 -7
  25. package/dist/src/json.js.map +1 -1
  26. package/dist/src/lang.js +1 -1
  27. package/dist/src/lang.js.map +1 -1
  28. package/dist/src/options.js +14 -13
  29. package/dist/src/options.js.map +1 -1
  30. package/dist/src/task.js +61 -49
  31. package/dist/src/task.js.map +1 -1
  32. package/dist/src/utils/date_utils.js +46 -15
  33. package/dist/src/utils/date_utils.js.map +1 -1
  34. package/dist/src/utils/draw_utils.js +24 -18
  35. package/dist/src/utils/draw_utils.js.map +1 -1
  36. package/dist/src/utils/general_utils.js +59 -36
  37. package/dist/src/utils/general_utils.js.map +1 -1
  38. package/dist/src/utils.js +498 -0
  39. package/dist/src/utils.js.map +1 -0
  40. package/dist/src/xml.js +74 -67
  41. package/dist/src/xml.js.map +1 -1
  42. package/dist/test/e2e/gantt.page.js +150 -0
  43. package/dist/test/e2e/gantt.page.js.map +1 -0
  44. package/dist/test/e2e/issue172-row-alignment.spec.js +198 -0
  45. package/dist/test/e2e/issue172-row-alignment.spec.js.map +1 -0
  46. package/dist/test/e2e/issue207-bar-axis-alignment.spec.js +329 -0
  47. package/dist/test/e2e/issue207-bar-axis-alignment.spec.js.map +1 -0
  48. package/dist/test/e2e/issue255-show-weekends.spec.js +102 -0
  49. package/dist/test/e2e/issue255-show-weekends.spec.js.map +1 -0
  50. package/dist/test/e2e/issue349-taskname-click-event.spec.js +270 -0
  51. package/dist/test/e2e/issue349-taskname-click-event.spec.js.map +1 -0
  52. package/dist/test/e2e/issue48-dependency-lines.spec.js +204 -0
  53. package/dist/test/e2e/issue48-dependency-lines.spec.js.map +1 -0
  54. package/dist/test/e2e/issue54-month-today.spec.js +181 -0
  55. package/dist/test/e2e/issue54-month-today.spec.js.map +1 -0
  56. package/dist/test/e2e/issue68-working-days.spec.js +243 -0
  57. package/dist/test/e2e/issue68-working-days.spec.js.map +1 -0
  58. package/dist/test/e2e/zoom-alignment.spec.js +133 -0
  59. package/dist/test/e2e/zoom-alignment.spec.js.map +1 -0
  60. package/dist/test/index.js +3 -8
  61. package/dist/test/index.js.map +1 -1
  62. package/dist/test/unit/date-utils.spec.js +180 -0
  63. package/dist/test/unit/date-utils.spec.js.map +1 -0
  64. package/dist/test/unit/draw-cols-chart.spec.js +105 -0
  65. package/dist/test/unit/draw-cols-chart.spec.js.map +1 -0
  66. package/dist/test/unit/gantt-chart-constructor.spec.js +85 -0
  67. package/dist/test/unit/gantt-chart-constructor.spec.js.map +1 -0
  68. package/dist/test/unit/helpers.js +67 -0
  69. package/dist/test/unit/helpers.js.map +1 -0
  70. package/dist/test/unit/task-item.spec.js +46 -0
  71. package/dist/test/unit/task-item.spec.js.map +1 -0
  72. package/dist/test/unit/task-management.spec.js +141 -0
  73. package/dist/test/unit/task-management.spec.js.map +1 -0
  74. package/dist/test/unit/working-days.spec.js +109 -0
  75. package/dist/test/unit/working-days.spec.js.map +1 -0
  76. package/dist/utils/draw_utils.js +169 -0
  77. package/dist/utils/general_utils.js +498 -0
  78. package/dist/xml.js +345 -0
  79. package/dist-e2e/gantt.page.js +79 -0
  80. package/dist-e2e/gantt.page.js.map +1 -0
  81. package/dist-e2e/issue-setMinDate-setMaxDate.spec.js +96 -0
  82. package/dist-e2e/issue172-row-alignment.spec.js +90 -0
  83. package/dist-e2e/issue172-row-alignment.spec.js.map +1 -0
  84. package/dist-e2e/issue207-bar-axis-alignment.spec.js +161 -0
  85. package/dist-e2e/issue207-bar-axis-alignment.spec.js.map +1 -0
  86. package/dist-e2e/issue349-taskname-click-event.spec.js +170 -0
  87. package/dist-e2e/issue349-taskname-click-event.spec.js.map +1 -0
  88. package/dist-e2e/issue375-column-visibility.spec.js +129 -0
  89. package/dist-e2e/issue375-column-visibility.spec.js.map +1 -0
  90. package/dist-e2e/issue54-month-today.spec.js +84 -0
  91. package/dist-e2e/issue54-month-today.spec.js.map +1 -0
  92. package/dist-e2e/issue68-working-days.spec.js +105 -0
  93. package/dist-e2e/issue68-working-days.spec.js.map +1 -0
  94. package/docs/index.js +5 -2
  95. package/docs/jsgantt.js +5749 -0
  96. package/jsgantt.js +5749 -0
  97. package/package.json +10 -18
  98. package/pw-e2e.config.js +13 -0
  99. package/test-results/.last-run.json +4 -0
  100. 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;