The section i am talking about is getTickFromDate (around line 8128)
code before:
getTickFromDate : function(date) {
if (this.getStart() > date || this.getEnd() < date) {
return -1;
}
var ticks = this.getRange(),
tickStart, tickEnd, i, l;
for (i = 0, l = ticks.length; i < l; i++) {
tickEnd = ticks[i].data.end;
if (date <= tickEnd) {
tickStart = ticks[i].data.start;
return i + (date > tickStart ? (date - tickStart)/(tickEnd - tickStart) : 0);
}
}
return -1;
},
After (i commented out actual returns to test to make sure i was calculating the exact same index as the for loop was getting)
getTickFromDate : function(date) {
var viewStart = this.getStart();
var viewEnd = this.getEnd();
if (viewStart > date || viewEnd < date) {
return -1;
}
//speed hack, narrow ticks range by checking where we are in gantt
var percentageIn = (viewEnd - date) / (viewEnd - viewStart);
var ticks = this.getRange(),
tickStart, tickEnd, i, l;
//now get the closest tick to this percentage.
var closestTick = ticks.length * percentageIn;
var tick = ticks.length - Math.ceil(closestTick);
if (tick >= ticks.length) {
tick = ticks.length - 1;
}
//tickStart = ticks[tick].data.start;
//return tick + ((date - tickStart) / (ticks[tick].data.end - tickStart));
for (i = 0, l = ticks.length; i < l; i++) {
tickEnd = ticks[i].data.end;
if (date <= tickEnd) {
tickStart = ticks[i].data.start;
if (tick != i) {
var doesntWork = "nope";
}
var returnVar = i + (date > tickStart ? (date - tickStart) / (tickEnd - tickStart) : 0);
return returnVar;
}
}
return -1;
},
Final Code:
getTickFromDate : function(date) {
var viewStart = this.getStart(),
viewEnd = this.getEnd();
if (viewStart > date || viewEnd < date) {
return -1;
}
//calculate tick from date
var percentageIn = (viewEnd - date) / (viewEnd - viewStart),
ticks = this.getRange(),
tickStart;
//now get the closest tick to this percentage.
var closestTick = ticks.length * percentageIn;
var tick = ticks.length - Math.ceil(closestTick);
if (tick >= ticks.length) {
tick = ticks.length - 1;
}
tickStart = ticks[tick].data.start;
return tick + ((date - tickStart) / (ticks[tick].data.end - tickStart));
},