in src/core/main.ts [2810:2903]
function assignTracks(data, tracks, layout) {
// reset tracks first
if (data && data.length) {
data.forEach(function (item) {
item.track = 0;
});
var i, track, min_width, effective_width;
if (globals.date_granularity !== "epochs") {
data.min_start_date = d3.min(data, function (d) {
return d.start_date;
});
data.max_start_date = d3.max(data, function (d) {
return d.start_date;
});
data.max_end_date = d3.max(data, function (d) {
return d.end_date;
});
if (globals.width > (instance._render_width - globals.margin.right - globals.margin.left - getScrollbarWidth())) {
effective_width = instance._render_width - globals.margin.right - globals.margin.left - getScrollbarWidth();
} else {
effective_width = globals.width;
}
var w = (effective_width - globals.padding.left - globals.padding.right - globals.unit_width),
d = (data.max_end_date.getTime() - data.min_start_date.getTime());
if (globals.segment_granularity === "days") {
min_width = 0;
} else if (layout === "Segmented") {
min_width = 0;
} else {
min_width = (d / w * globals.unit_width);
}
}
// older items end deeper
data.forEach(function (item) {
if (globals.date_granularity === "epochs") {
item.track = 0;
} else {
for (i = 0, track = 0; i < tracks.length; i++, track++) {
if (globals.segment_granularity === "days") {
if (item.start_date.getTime() > tracks[i].getTime()) {
break;
}
} else if (globals.segment_granularity === "weeks") {
if (item.start_date.getTime() > tracks[i].getTime()) {
break;
}
} else if (globals.segment_granularity === "months") {
if (item.start_date.getTime() > tracks[i].getTime()) {
break;
}
} else if (globals.segment_granularity === "years") {
if (item.start_date.getTime() > tracks[i].getTime()) {
break;
}
} else if (globals.segment_granularity === "decades" && globals.date_granularity === "days" && data.max_duration < 31) {
if (item.start_date.getTime() > tracks[i].getTime()) {
break;
}
} else if (globals.segment_granularity === "centuries" && globals.date_granularity === "days" && data.max_duration < 31) {
if (item.start_date.getTime() > tracks[i].getTime()) {
break;
}
} else if (globals.segment_granularity === "millenia") {
if (item.start_date.getTime() > tracks[i].getTime()) {
break;
}
} else if (item.start_date.getTime() > tracks[i].getTime()) {
break;
}
}
item.track = track;
if (min_width > item.end_date.getTime() - item.start_date.getTime()) {
tracks[track] = moment(item.end_date.getTime() + min_width).toDate();
} else {
tracks[track] = item.end_date;
}
}
});
globals.num_tracks = d3.max(data, function (d) { // eslint-disable-line no-shadow
return d.track;
});
} else {
globals.num_tracks = 0;
}
}