Skip to content

Commit 9930ecc

Browse files
committed
fixes wacky "days" scale header rendering, DST
Hopefully fixes #95 & closes #41.
1 parent df492bb commit 9930ecc

File tree

1 file changed

+25
-73
lines changed

1 file changed

+25
-73
lines changed

js/jquery.fn.gantt.js

Lines changed: 25 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -152,21 +152,6 @@
152152
return new Date( this.getFullYear(), this.getMonth(), this.getDate() + diff );
153153
};
154154

155-
// fixes https://github.com/taitems/jQuery.Gantt/issues/62
156-
function ktkGetNextDate(currentDate, scaleStep) {
157-
for(var minIncrements = 1;; minIncrements++) {
158-
var nextDate = new Date(currentDate);
159-
nextDate.setHours(currentDate.getHours() + scaleStep * minIncrements);
160-
161-
if (nextDate.getTime() !== currentDate.getTime()) {
162-
return nextDate;
163-
}
164-
165-
// If code reaches here, it's because current didn't really increment (invalid local time) because of daylight-saving adjustments
166-
// => retry adding 2, 3, 4 hours, and so on (until nextDate > current)
167-
}
168-
}
169-
170155
$.fn.gantt = function (options) {
171156

172157
var scales = ["hours", "days", "weeks", "months"];
@@ -706,11 +691,9 @@
706691
default:
707692
range = tools.parseDateRange(element.dateStart, element.dateEnd);
708693
dataPanelWidth = range.length * tools.getCellSize();
709-
710-
var dateBefore = ktkGetNextDate(range[0], -1);
711-
year = dateBefore.getFullYear();
712-
month = dateBefore.getMonth();
713-
//day = dateBefore; // <- never used?
694+
695+
year = range[0].getFullYear();
696+
month = range[0].getMonth();
714697

715698
for (i = 0, len = range.length; i < len; i++) {
716699
rday = range[i];
@@ -1236,9 +1219,9 @@
12361219
core.waitToggle(element, function () {
12371220

12381221
var zoomIn = (val < 0);
1239-
12401222
var scaleSt = element.scaleStep + val * 3;
1241-
scaleSt = scaleSt <= 1 ? 1 : scaleSt === 4 ? 3 : scaleSt;
1223+
// adjust hour scale to desired factors of 24
1224+
scaleSt = {4:3, 5:6, 9:8, 11:12}[scaleSt] || (scaleSt < 1 ? 1 : scaleSt);
12421225
var scale = settings.scale;
12431226
var headerRows = element.headerRows;
12441227
if (settings.scale === "hours" && scaleSt >= 13) {
@@ -1518,64 +1501,33 @@
15181501

15191502
// Return an array of Date objects between `from` and `to`
15201503
parseDateRange: function (from, to) {
1521-
var current = new Date(from.getTime());
1522-
var ret = [];
1523-
var i = 0;
1504+
var year = from.getFullYear();
1505+
var month = from.getMonth();
1506+
var date = from.getDate();
1507+
var range = [], i = 0;
15241508
do {
1525-
ret[i++] = new Date(current.getTime());
1526-
current.setDate(current.getDate() + 1);
1527-
} while (current <= to);
1528-
return ret;
1509+
range[i] = new Date(year, month, date + i);
1510+
} while (range[i++] < to);
1511+
return range;
15291512
},
15301513

15311514
// Return an array of Date objects between `from` and `to`,
15321515
// scaled hourly
15331516
parseTimeRange: function (from, to, scaleStep) {
1534-
var current = new Date(from);
1535-
var end = new Date(to);
1536-
1537-
// GR: Fix begin
1538-
current.setHours(0, 0, 0, 0);
1539-
1540-
end.setMilliseconds(0);
1541-
end.setSeconds(0);
1542-
if (end.getMinutes() > 0 || end.getHours() > 0) {
1543-
end.setMinutes(0);
1544-
end.setHours(0);
1545-
end.setTime(end.getTime() + UTC_DAY_IN_MS);
1546-
}
1547-
// GR: Fix end
1548-
1549-
var ret = [];
1550-
var i = 0;
1551-
for(;;) {
1552-
var dayStartTime = new Date(current);
1553-
dayStartTime.setHours(Math.floor((current.getHours()) / scaleStep) * scaleStep);
1554-
1555-
if (ret[i] && dayStartTime.getDay() !== ret[i].getDay()) {
1556-
// If mark-cursor jumped to next day, make sure it starts at 0 hours
1557-
dayStartTime.setHours(0);
1558-
}
1559-
ret[i] = dayStartTime;
1560-
1561-
// Note that we use ">" because we want to include the end-time point.
1562-
if (current > to) { break; }
1563-
1564-
/* BUG-2: current is moved backwards producing a dead-lock! (crashes chrome/IE/firefox)
1565-
* SEE: https://github.com/taitems/jQuery.Gantt/issues/62
1566-
if (current.getDay() !== ret[i].getDay()) {
1567-
current.setHours(0);
1517+
var year = from.getFullYear();
1518+
var month = from.getMonth();
1519+
var date = from.getDate();
1520+
var hour = from.getHours();
1521+
hour -= hour % scaleStep;
1522+
var range = [], h = 0, i = 0;
1523+
do {
1524+
range[i] = new Date(year, month, date, hour + h++ * scaleStep);
1525+
// overwrite any hours repeated due to DST changes
1526+
if (i > 0 && range[i].getHours() === range[i-1].getHours()) {
1527+
i--;
15681528
}
1569-
*/
1570-
1571-
// GR Fix Begin
1572-
current = ktkGetNextDate(dayStartTime, scaleStep);
1573-
// GR Fix End
1574-
1575-
i++;
1576-
}
1577-
1578-
return ret;
1529+
} while (range[i++] < to);
1530+
return range;
15791531
},
15801532

15811533
// Return an array of Date objects between a range of weeks

0 commit comments

Comments
 (0)