Skip to content

Commit 19a5cc6

Browse files
committed
Merge branch 'master' of https://github.com/taitems/jQuery.Gantt
2 parents 5a52561 + 9a37bfb commit 19a5cc6

File tree

1 file changed

+42
-14
lines changed

1 file changed

+42
-14
lines changed

js/jquery.fn.gantt.js

Lines changed: 42 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -672,13 +672,14 @@
672672
default:
673673
range = tools.parseDateRange(element.dateStart, element.dateEnd);
674674

675-
var year = range[0].getFullYear();
676-
var month = range[0].getMonth();
677-
var day = range[0];
675+
var dateBefore = ktkGetNextDate(range[0], -1);
676+
var year = dateBefore.getFullYear();
677+
var month = dateBefore.getMonth();
678+
var day = dateBefore;
678679

679680
for (var i = 0; i < range.length; i++) {
680681
var rday = range[i];
681-
682+
682683
// Fill years
683684
if (rday.getFullYear() !== year) {
684685
yearArr.push(
@@ -692,7 +693,6 @@
692693
}
693694
daysInYear++;
694695

695-
696696
// Fill months
697697
if (rday.getMonth() !== month) {
698698
monthArr.push(
@@ -720,7 +720,6 @@
720720
+ ' <div class="fn-label">' + settings.dow[getDay] + '</div></div>');
721721
} //for
722722

723-
724723
// Last year
725724
yearArr.push(
726725
'<div class="row header year" style="width: '
@@ -734,7 +733,7 @@
734733
+ tools.getCellSize() * daysInMonth + 'px"><div class="fn-label">'
735734
+ settings.months[month]
736735
+ '</div></div>');
737-
736+
738737
var dataPanel = core.dataPanel(element, range.length * tools.getCellSize());
739738

740739

@@ -1525,17 +1524,31 @@
15251524
var end = new Date(to);
15261525
var ret = [];
15271526
var i = 0;
1528-
do {
1529-
ret[i] = new Date(current.getTime());
1530-
current.setHours(current.getHours() + scaleStep);
1531-
current.setHours(Math.floor((current.getHours()) / scaleStep) * scaleStep);
1527+
for(;;) {
1528+
var dayStartTime = new Date(current);
1529+
dayStartTime.setHours(Math.floor((current.getHours()) / scaleStep) * scaleStep);
1530+
1531+
if (ret[i] && dayStartTime.getDay() !== ret[i].getDay()) {
1532+
// If mark-cursor jumped to next day, make sure it starts at 0 hours
1533+
dayStartTime.setHours(0);
1534+
}
1535+
ret[i] = dayStartTime;
1536+
1537+
// Note that we use ">" because we want to include the end-time point.
1538+
if(current.getTime() > to.getTime()) break;
15321539

1540+
/* BUG-2: current is moved backwards producing a dead-lock! (crashes chrome/IE/firefox)
1541+
* SEE: https://github.com/taitems/jQuery.Gantt/issues/62
15331542
if (current.getDay() !== ret[i].getDay()) {
1534-
current.setHours(0);
1543+
current.setHours(0);
15351544
}
1545+
*/
1546+
1547+
current = ktkGetNextDate(current, scaleStep);
15361548

15371549
i++;
1538-
} while (current.getTime() <= to.getTime());
1550+
};
1551+
15391552
return ret;
15401553
},
15411554

@@ -1683,6 +1696,7 @@
16831696
}
16841697

16851698
switch (settings.scale) {
1699+
//case "hours": this.headerRows = 5; this.scaleStep = 8; break;
16861700
case "hours": this.headerRows = 5; this.scaleStep = 1; break;
16871701
case "weeks": this.headerRows = 3; this.scaleStep = 13; break;
16881702
case "months": this.headerRows = 2; this.scaleStep = 14; break;
@@ -1707,4 +1721,18 @@
17071721
});
17081722

17091723
};
1710-
})(jQuery);
1724+
})(jQuery);
1725+
1726+
function ktkGetNextDate(currentDate, scaleStep) {
1727+
for(var minIncrements = 1;; minIncrements++) {
1728+
var nextDate = new Date(currentDate);
1729+
nextDate.setHours(currentDate.getHours() + scaleStep * minIncrements);
1730+
1731+
if(nextDate.getTime() != currentDate.getTime()) {
1732+
return nextDate;
1733+
}
1734+
1735+
// If code reaches here, it's because current didn't really increment (invalid local time) because of daylight-saving adjustments
1736+
// => retry adding 2, 3, 4 hours, and so on (until nextDate > current)
1737+
}
1738+
}

0 commit comments

Comments
 (0)