|
672 | 672 | default:
|
673 | 673 | range = tools.parseDateRange(element.dateStart, element.dateEnd);
|
674 | 674 |
|
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; |
678 | 679 |
|
679 | 680 | for (var i = 0; i < range.length; i++) {
|
680 | 681 | var rday = range[i];
|
681 |
| - |
| 682 | + |
682 | 683 | // Fill years
|
683 | 684 | if (rday.getFullYear() !== year) {
|
684 | 685 | yearArr.push(
|
|
692 | 693 | }
|
693 | 694 | daysInYear++;
|
694 | 695 |
|
695 |
| - |
696 | 696 | // Fill months
|
697 | 697 | if (rday.getMonth() !== month) {
|
698 | 698 | monthArr.push(
|
|
720 | 720 | + ' <div class="fn-label">' + settings.dow[getDay] + '</div></div>');
|
721 | 721 | } //for
|
722 | 722 |
|
723 |
| - |
724 | 723 | // Last year
|
725 | 724 | yearArr.push(
|
726 | 725 | '<div class="row header year" style="width: '
|
|
734 | 733 | + tools.getCellSize() * daysInMonth + 'px"><div class="fn-label">'
|
735 | 734 | + settings.months[month]
|
736 | 735 | + '</div></div>');
|
737 |
| - |
| 736 | + |
738 | 737 | var dataPanel = core.dataPanel(element, range.length * tools.getCellSize());
|
739 | 738 |
|
740 | 739 |
|
|
1526 | 1525 | var ret = [];
|
1527 | 1526 | var i = 0;
|
1528 | 1527 | for(;;) {
|
1529 |
| - ret[i] = new Date(current.getTime()); |
1530 |
| - current.setHours(current.getHours() + scaleStep); |
1531 |
| - |
1532 |
| - // Check before applying floor, to avoid deadlocks. |
1533 |
| - if(current.getTime() > to.getTime()) break; |
| 1528 | + var dayStartTime = new Date(current); |
| 1529 | + dayStartTime.setHours(Math.floor((current.getHours()) / scaleStep) * scaleStep); |
1534 | 1530 |
|
1535 |
| - current.setHours(Math.floor((current.getHours()) / scaleStep) * scaleStep); |
| 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; |
1536 | 1539 |
|
| 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 |
1537 | 1542 | if (current.getDay() !== ret[i].getDay()) {
|
1538 |
| - current.setHours(0); |
| 1543 | + current.setHours(0); |
1539 | 1544 | }
|
| 1545 | + */ |
| 1546 | + |
| 1547 | + current = ktkGetNextDate(current, scaleStep); |
| 1548 | + |
1540 | 1549 | i++;
|
1541 | 1550 | };
|
| 1551 | + |
1542 | 1552 | return ret;
|
1543 | 1553 | },
|
1544 | 1554 |
|
|
1686 | 1696 | }
|
1687 | 1697 |
|
1688 | 1698 | switch (settings.scale) {
|
| 1699 | + //case "hours": this.headerRows = 5; this.scaleStep = 8; break; |
1689 | 1700 | case "hours": this.headerRows = 5; this.scaleStep = 1; break;
|
1690 | 1701 | case "weeks": this.headerRows = 3; this.scaleStep = 13; break;
|
1691 | 1702 | case "months": this.headerRows = 2; this.scaleStep = 14; break;
|
|
1711 | 1722 |
|
1712 | 1723 | };
|
1713 | 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