Skip to content

Commit 8b62b4a

Browse files
authored
Merge pull request #390 from mariohmol/feat/issue-377-set-depend
feat: add setDepend() to TaskItem (#377)
2 parents 6fae9eb + a047177 commit 8b62b4a

7 files changed

Lines changed: 935 additions & 58 deletions

File tree

dist/jsgantt.js

Lines changed: 32 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,6 @@ var GanttChart = function (pDiv, pFormat) {
6464
5: true,
6565
6: true,
6666
};
67-
this.vFirstDayOfWeek = 1; // 0=Sunday, 1=Monday (default), …, 6=Saturday
6867
this.vEventClickCollapse = null;
6968
this.vEventClickRow = null;
7069
this.vEvents = {
@@ -344,17 +343,9 @@ var GanttChart = function (pDiv, pFormat) {
344343
vTmpDate.setDate(vTmpDate.getDate() + 1);
345344
}
346345
else if (this.vFormat == "week") {
347-
// Group weeks by year: span all weeks whose start date falls in the same year
348-
var thisYear = vTmpDate.getFullYear();
349-
var countDate = new Date(vTmpDate);
350-
vColSpan = 0;
351-
while (countDate.getTime() <= vMaxDate.getTime() && countDate.getFullYear() === thisYear) {
352-
vColSpan++;
353-
countDate.setDate(countDate.getDate() + 7);
354-
}
355-
var vTmpCell = (0, draw_utils_1.newNode)(vTmpRow, "td", null, vHeaderCellClass, null, null, null, null, vColSpan);
356-
(0, draw_utils_1.newNode)(vTmpCell, "div", null, null, (0, date_utils_1.formatDateStr)(vTmpDate, this.vWeekMajorDateDisplayFormat, this.vLangs[this.vLang]), vColWidth * vColSpan);
357-
vTmpDate.setDate(vTmpDate.getDate() + vColSpan * 7);
346+
var vTmpCell = (0, draw_utils_1.newNode)(vTmpRow, "td", null, vHeaderCellClass, null, vColWidth);
347+
(0, draw_utils_1.newNode)(vTmpCell, "div", null, null, (0, date_utils_1.formatDateStr)(vTmpDate, this.vWeekMajorDateDisplayFormat, this.vLangs[this.vLang]), vColWidth);
348+
vTmpDate.setDate(vTmpDate.getDate() + 7);
358349
}
359350
else if (this.vFormat == "month") {
360351
vColSpan = 12 - vTmpDate.getMonth();
@@ -391,9 +382,7 @@ var GanttChart = function (pDiv, pFormat) {
391382
while (vTmpDate.getTime() <= vMaxDate.getTime()) {
392383
var vMinorHeaderCellClass = "gminorheading";
393384
if (this.vFormat == "day") {
394-
var vWkLastDay = (this.vFirstDayOfWeek + 6) % 7;
395-
var vWkPenultDay = (this.vFirstDayOfWeek + 5) % 7;
396-
if (vTmpDate.getDay() === vWkLastDay || vTmpDate.getDay() === vWkPenultDay) {
385+
if (vTmpDate.getDay() % 6 == 0) {
397386
if (!this.vShowWeekends) {
398387
vTmpDate.setDate(vTmpDate.getDate() + 1);
399388
continue;
@@ -493,16 +482,16 @@ var GanttChart = function (pDiv, pFormat) {
493482
for (i = 0; i < this.vTaskList.length; i++) {
494483
var curTaskStart = this.vTaskList[i].getStart() ? this.vTaskList[i].getStart() : this.vTaskList[i].getPlanStart();
495484
var curTaskEnd = this.vTaskList[i].getEnd() ? this.vTaskList[i].getEnd() : this.vTaskList[i].getPlanEnd();
496-
var vTaskLeftPx_1 = (0, general_utils_1.getOffset)(vMinDate, curTaskStart, vColWidth, this.vFormat, this.vShowWeekends, this.vFirstDayOfWeek);
497-
var vTaskRightPx = (0, general_utils_1.getOffset)(curTaskStart, curTaskEnd, vColWidth, this.vFormat, this.vShowWeekends, this.vFirstDayOfWeek);
485+
var vTaskLeftPx_1 = (0, general_utils_1.getOffset)(vMinDate, curTaskStart, vColWidth, this.vFormat, this.vShowWeekends);
486+
var vTaskRightPx = (0, general_utils_1.getOffset)(curTaskStart, curTaskEnd, vColWidth, this.vFormat, this.vShowWeekends);
498487
var curTaskPlanStart = void 0, curTaskPlanEnd = void 0;
499488
curTaskPlanStart = this.vTaskList[i].getPlanStart();
500489
curTaskPlanEnd = this.vTaskList[i].getPlanEnd();
501490
var vTaskPlanLeftPx = 0;
502491
var vTaskPlanRightPx = 0;
503492
if (curTaskPlanStart && curTaskPlanEnd) {
504-
vTaskPlanLeftPx = (0, general_utils_1.getOffset)(vMinDate, curTaskPlanStart, vColWidth, this.vFormat, this.vShowWeekends, this.vFirstDayOfWeek);
505-
vTaskPlanRightPx = (0, general_utils_1.getOffset)(curTaskPlanStart, curTaskPlanEnd, vColWidth, this.vFormat, this.vShowWeekends, this.vFirstDayOfWeek);
493+
vTaskPlanLeftPx = (0, general_utils_1.getOffset)(vMinDate, curTaskPlanStart, vColWidth, this.vFormat, this.vShowWeekends);
494+
vTaskPlanRightPx = (0, general_utils_1.getOffset)(curTaskPlanStart, curTaskPlanEnd, vColWidth, this.vFormat, this.vShowWeekends);
506495
}
507496
var vID = this.vTaskList[i].getID();
508497
var vComb = this.vTaskList[i].getParItem() && this.vTaskList[i].getParItem().getGroup() == 2;
@@ -716,8 +705,8 @@ var GanttChart = function (pDiv, pFormat) {
716705
(0, task_1.processRows)(this.vTaskList, 0, -1, 1, 1, this.getUseSort(), this.vDebug);
717706
this.vProcessNeeded = false;
718707
// get overall min/max dates plus padding
719-
vMinDate = (0, date_utils_1.getMinDate)(this.vTaskList, this.vFormat, this.getMinDate() && (0, date_utils_1.coerceDate)(this.getMinDate()), this.vFirstDayOfWeek);
720-
vMaxDate = (0, date_utils_1.getMaxDate)(this.vTaskList, this.vFormat, this.getMaxDate() && (0, date_utils_1.coerceDate)(this.getMaxDate()), this.vFirstDayOfWeek);
708+
vMinDate = (0, date_utils_1.getMinDate)(this.vTaskList, this.vFormat, this.getMinDate() && (0, date_utils_1.coerceDate)(this.getMinDate()));
709+
vMaxDate = (0, date_utils_1.getMaxDate)(this.vTaskList, this.vFormat, this.getMaxDate() && (0, date_utils_1.coerceDate)(this.getMaxDate()));
721710
// Calculate chart width variables.
722711
if (this.vFormat == "day")
723712
vColWidth = this.vDayColWidth;
@@ -800,12 +789,12 @@ var GanttChart = function (pDiv, pFormat) {
800789
vScrollDate.setMinutes(0, 0, 0);
801790
else
802791
vScrollDate.setHours(0, 0, 0, 0);
803-
vScrollPx = (0, general_utils_1.getOffset)(vMinDate, vScrollDate, vColWidth, this.vFormat, this.vShowWeekends, this.vFirstDayOfWeek) - 30;
792+
vScrollPx = (0, general_utils_1.getOffset)(vMinDate, vScrollDate, vColWidth, this.vFormat, this.vShowWeekends) - 30;
804793
}
805794
this.getChartBody().scrollLeft = vScrollPx;
806795
}
807796
if (vMinDate.getTime() <= new Date().getTime() && vMaxDate.getTime() >= new Date().getTime()) {
808-
this.vTodayPx = (0, general_utils_1.getOffset)(vMinDate, new Date(), vColWidth, this.vFormat, this.vShowWeekends, this.vFirstDayOfWeek);
797+
this.vTodayPx = (0, general_utils_1.getOffset)(vMinDate, new Date(), vColWidth, this.vFormat, this.vShowWeekends);
809798
}
810799
else
811800
this.vTodayPx = -1;
@@ -840,7 +829,7 @@ var GanttChart = function (pDiv, pFormat) {
840829
}
841830
(0, events_1.updateGridHeaderWidth)(this);
842831
this.chartRowDateToX = function (date) {
843-
return (0, general_utils_1.getOffset)(vMinDate, date, vColWidth, this.vFormat, this.vShowWeekends, this.vFirstDayOfWeek);
832+
return (0, general_utils_1.getOffset)(vMinDate, date, vColWidth, this.vFormat, this.vShowWeekends);
844833
};
845834
if (this.vEvents && this.vEvents.afterDraw) {
846835
this.vEvents.afterDraw();
@@ -1263,8 +1252,8 @@ var showToolTip = function (pGanttChartObj, e, pContents, pWidth, pTimer) {
12631252
pGanttChartObj.vTool.style.visibility = 'hidden';
12641253
pGanttChartObj.vTool.style.left = Math.floor(((e) ? e.clientX : window.event.clientX) / 2) + 'px';
12651254
pGanttChartObj.vTool.style.top = Math.floor(((e) ? e.clientY : window.event.clientY) / 2) + 'px';
1266-
(0, exports.addListener)('mouseover', function () { clearTimeout(pGanttChartObj.vTool.delayTimeout); }, pGanttChartObj.vTool);
1267-
(0, exports.addListener)('mouseout', function () { (0, general_utils_1.delayedHide)(pGanttChartObj, pGanttChartObj.vTool, pTimer); }, pGanttChartObj.vTool);
1255+
this.addListener('mouseover', function () { clearTimeout(pGanttChartObj.vTool.delayTimeout); }, pGanttChartObj.vTool);
1256+
this.addListener('mouseout', function () { (0, general_utils_1.delayedHide)(pGanttChartObj, pGanttChartObj.vTool, pTimer); }, pGanttChartObj.vTool);
12681257
}
12691258
clearTimeout(pGanttChartObj.vTool.delayTimeout);
12701259
var newHTML = pContents.innerHTML;
@@ -3540,7 +3529,6 @@ var includeGetSet = function () {
35403529
this.Draw();
35413530
};
35423531
this.setWorkingDays = function (workingDays) { this.vWorkingDays = workingDays; };
3543-
this.setFirstDayOfWeek = function (pVal) { this.vFirstDayOfWeek = parseInt(String(pVal), 10); };
35443532
this.setMinGpLen = function (pMinGpLen) { this.vMinGpLen = pMinGpLen; };
35453533
this.setScrollTo = function (pDate) { this.vScrollTo = pDate; };
35463534
this.setHourColWidth = function (pWidth) { this.vHourColWidth = pWidth; };
@@ -3620,7 +3608,6 @@ var includeGetSet = function () {
36203608
this.getShowTaskInfoLink = function () { return this.vShowTaskInfoLink; };
36213609
this.getShowEndWeekDate = function () { return this.vShowEndWeekDate; };
36223610
this.getShowWeekends = function () { return this.vShowWeekends; };
3623-
this.getFirstDayOfWeek = function () { return this.vFirstDayOfWeek; };
36243611
this.getShowSelector = function () { return this.vShowSelector; };
36253612
this.getShowDeps = function () { return this.vShowDeps; };
36263613
this.getDateInputFormat = function () { return this.vDateInputFormat; };
@@ -3817,11 +3804,13 @@ var TaskItem = function (pID, pName, pStart, pEnd, pClass, pLink, pMile, pRes, p
38173804
vPlanEnd = (pPlanEnd instanceof Date) ? pPlanEnd : (0, date_utils_1.parseDateStr)(document.createTextNode(pPlanEnd).data, vGantt.getDateInputFormat());
38183805
vGroupMinPlanEnd = vPlanEnd;
38193806
}
3820-
if (pDepend != null) {
3821-
var vDependStr = pDepend + '';
3822-
var vDepList = vDependStr.split(',');
3823-
var n = vDepList.length;
3824-
for (var k = 0; k < n; k++) {
3807+
function parseDepend(pDep) {
3808+
vDepend = [];
3809+
vDependType = [];
3810+
if (!pDep)
3811+
return;
3812+
var vDepList = (pDep + '').split(',');
3813+
for (var k = 0; k < vDepList.length; k++) {
38253814
if (vDepList[k].toUpperCase().endsWith('SS')) {
38263815
vDepend[k] = vDepList[k].substring(0, vDepList[k].length - 2);
38273816
vDependType[k] = 'SS';
@@ -3847,6 +3836,7 @@ var TaskItem = function (pID, pName, pStart, pEnd, pClass, pLink, pMile, pRes, p
38473836
}
38483837
}
38493838
}
3839+
parseDepend(pDepend);
38503840
this.getID = function () { return vID; };
38513841
this.getOriginalID = function () { return _id; };
38523842
this.getGantt = function () { return vGantt; };
@@ -4032,6 +4022,7 @@ var TaskItem = function (pID, pName, pStart, pEnd, pClass, pLink, pMile, pRes, p
40324022
this.getChildRow = function () { return vChildRow; };
40334023
this.getListChildRow = function () { return vListChildRow; };
40344024
this.getGroupSpan = function () { return vGroupSpan; };
4025+
this.setDepend = function (pDepend) { parseDepend(pDepend); };
40354026
this.setName = function (pName) { vName = pName; };
40364027
this.setNotes = function (pNotes) { vNotes = pNotes; };
40374028
this.setClass = function (pClass) { vClass = pClass; };
@@ -4420,15 +4411,10 @@ exports.processRows = processRows;
44204411
"use strict";
44214412
Object.defineProperty(exports, "__esModule", { value: true });
44224413
exports.getIsoWeek = exports.parseDateFormatStr = exports.formatDateStr = exports.parseDateStr = exports.coerceDate = exports.getMaxDate = exports.getMinDate = void 0;
4423-
/**
4424-
* Returns the last day of the week (0=Sun … 6=Sat) for a given first day.
4425-
*/
4426-
var lastDayOfWeek = function (firstDay) { return (firstDay + 6) % 7; };
44274414
/**
44284415
* DATES
44294416
*/
4430-
var getMinDate = function (pList, pFormat, pMinDate, pFirstDayOfWeek) {
4431-
if (pFirstDayOfWeek === void 0) { pFirstDayOfWeek = 1; }
4417+
var getMinDate = function (pList, pFormat, pMinDate) {
44324418
var vDate = new Date();
44334419
if (pList.length <= 0)
44344420
return pMinDate || vDate;
@@ -4446,12 +4432,12 @@ var getMinDate = function (pList, pFormat, pMinDate, pFirstDayOfWeek) {
44464432
// Adjust min date to specific format boundaries (first of week or first of month)
44474433
if (pFormat == 'day') {
44484434
vDate.setDate(vDate.getDate() - 1);
4449-
while (vDate.getDay() != pFirstDayOfWeek)
4435+
while (vDate.getDay() % 7 != 1)
44504436
vDate.setDate(vDate.getDate() - 1);
44514437
}
44524438
else if (pFormat == 'week') {
44534439
vDate.setDate(vDate.getDate() - 1);
4454-
while (vDate.getDay() != pFirstDayOfWeek)
4440+
while (vDate.getDay() % 7 != 1)
44554441
vDate.setDate(vDate.getDate() - 1);
44564442
}
44574443
else if (pFormat == 'month') {
@@ -4482,8 +4468,7 @@ var getMinDate = function (pList, pFormat, pMinDate, pFirstDayOfWeek) {
44824468
return (vDate);
44834469
};
44844470
exports.getMinDate = getMinDate;
4485-
var getMaxDate = function (pList, pFormat, pMaxDate, pFirstDayOfWeek) {
4486-
if (pFirstDayOfWeek === void 0) { pFirstDayOfWeek = 1; }
4471+
var getMaxDate = function (pList, pFormat, pMaxDate) {
44874472
var vDate = new Date();
44884473
if (pList.length <= 0)
44894474
return pMaxDate || vDate;
@@ -4501,13 +4486,13 @@ var getMaxDate = function (pList, pFormat, pMaxDate, pFirstDayOfWeek) {
45014486
// Adjust max date to specific format boundaries (end of week or end of month)
45024487
if (pFormat == 'day') {
45034488
vDate.setDate(vDate.getDate() + 1);
4504-
while (vDate.getDay() != lastDayOfWeek(pFirstDayOfWeek))
4489+
while (vDate.getDay() % 7 != 0)
45054490
vDate.setDate(vDate.getDate() + 1);
45064491
}
45074492
else if (pFormat == 'week') {
45084493
//For weeks, what is the last logical boundary?
45094494
vDate.setDate(vDate.getDate() + 1);
4510-
while (vDate.getDay() != lastDayOfWeek(pFirstDayOfWeek))
4495+
while (vDate.getDay() % 7 != 0)
45114496
vDate.setDate(vDate.getDate() + 1);
45124497
}
45134498
else if (pFormat == 'month') {
@@ -5045,8 +5030,7 @@ var calculateCurrentDateOffset = function (curTaskStart, curTaskEnd) {
50455030
return (tmpTaskEnd - tmpTaskStart);
50465031
};
50475032
exports.calculateCurrentDateOffset = calculateCurrentDateOffset;
5048-
var getOffset = function (pStartDate, pEndDate, pColWidth, pFormat, pShowWeekends, pFirstDayOfWeek) {
5049-
if (pFirstDayOfWeek === void 0) { pFirstDayOfWeek = 1; }
5033+
var getOffset = function (pStartDate, pEndDate, pColWidth, pFormat, pShowWeekends) {
50505034
var DAY_CELL_MARGIN_WIDTH = 3; // Cell margin for 'day' format
50515035
var WEEK_CELL_MARGIN_WIDTH = 3; // Cell margin for 'week' format
50525036
var MONTH_CELL_MARGIN_WIDTH = 3; // Cell margin for 'month' format
@@ -5067,9 +5051,7 @@ var getOffset = function (pStartDate, pEndDate, pColWidth, pFormat, pShowWeekend
50675051
var countWeekends = 0;
50685052
while (start < end) {
50695053
var day = start.getDay();
5070-
var vLastDay = (pFirstDayOfWeek + 6) % 7;
5071-
var vPenultDay = (pFirstDayOfWeek + 5) % 7;
5072-
if (day === vLastDay || day === vPenultDay) {
5054+
if (day === 6 || day == 0) {
50735055
countWeekends++;
50745056
}
50755057
start = new Date(start.getTime() + 24 * oneHour);

0 commit comments

Comments
 (0)