diff --git a/HISTORY.md b/HISTORY.md index 5e6955ca..83ae83ac 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -11,6 +11,8 @@ http://visjs.org - Improved layout of box-items inside groups. - Items can now be dragged from one group to another. - Implemented option `stack` to enable/disable stacking of items. +- Implemented function `fit`, which sets the Timeline window such that it fits + all items. - Option `editable` can now be used to enable/disable individual manipulation actions (`add`, `updateTime`, `updateGroup`, `remove`). - Function `setWindow` now accepts an object with properties `start` and `end`. diff --git a/docs/timeline.html b/docs/timeline.html index 31b4adae..7142712e 100644 --- a/docs/timeline.html +++ b/docs/timeline.html @@ -628,6 +628,13 @@ var options = { Description + + fit() + none + Adjust the visible window such that it fits all items. + + + getCustomTime() Date diff --git a/src/timeline/Timeline.js b/src/timeline/Timeline.js index 8ff789ef..8d2a392b 100644 --- a/src/timeline/Timeline.js +++ b/src/timeline/Timeline.js @@ -408,47 +408,12 @@ Timeline.prototype.setItems = function(items) { this.itemSet.setItems(newDataSet); if (initialLoad && (this.options.start == undefined || this.options.end == undefined)) { - // apply the data range as range - var dataRange = this.getItemRange(); - - // add 5% space on both sides - var start = dataRange.min; - var end = dataRange.max; - if (start != null && end != null) { - var interval = (end.valueOf() - start.valueOf()); - if (interval <= 0) { - // prevent an empty interval - interval = 24 * 60 * 60 * 1000; // 1 day - } - start = new Date(start.valueOf() - interval * 0.05); - end = new Date(end.valueOf() + interval * 0.05); - } - - // override specified start and/or end date - if (this.options.start != undefined) { - start = util.convert(this.options.start, 'Date'); - } - if (this.options.end != undefined) { - end = util.convert(this.options.end, 'Date'); - } + this.fit(); - // skip range set if there is no start and end date - if (start === null && end === null) { - return; - } + var start = (this.options.start != undefined) ? util.convert(this.options.start, 'Date') : null; + var end = (this.options.end != undefined) ? util.convert(this.options.end, 'Date') : null; - // if start and end dates are set but cannot be satisfyed due to zoom restrictions — correct end date - if (start != null && end != null) { - var diff = end.valueOf() - start.valueOf(); - if (this.options.zoomMax != undefined && this.options.zoomMax < diff) { - end = new Date(start.valueOf() + this.options.zoomMax); - } - if (this.options.zoomMin != undefined && this.options.zoomMin > diff) { - end = new Date(start.valueOf() + this.options.zoomMin); - } - } - - this.range.setRange(start, end); + this.setWindow(start, end); } }; @@ -456,7 +421,7 @@ Timeline.prototype.setItems = function(items) { * Set groups * @param {vis.DataSet | Array | google.visualization.DataTable} groups */ -Timeline.prototype.setGroups = function(groups) { +Timeline.prototype.setGroups = function setGroups(groups) { // convert to type DataSet when needed var newDataSet; if (!groups) { @@ -474,6 +439,34 @@ Timeline.prototype.setGroups = function(groups) { this.itemSet.setGroups(newDataSet); }; +/** + * Set Timeline window such that it fits all items + */ +Timeline.prototype.fit = function fit() { + // apply the data range as range + var dataRange = this.getItemRange(); + + // add 5% space on both sides + var start = dataRange.min; + var end = dataRange.max; + if (start != null && end != null) { + var interval = (end.valueOf() - start.valueOf()); + if (interval <= 0) { + // prevent an empty interval + interval = 24 * 60 * 60 * 1000; // 1 day + } + start = new Date(start.valueOf() - interval * 0.05); + end = new Date(end.valueOf() + interval * 0.05); + } + + // skip range set if there is no start and end date + if (start === null && end === null) { + return; + } + + this.range.setRange(start, end); +}; + /** * Get the data range of the item set. * @returns {{min: Date, max: Date}} range A range with a start and end Date. diff --git a/test/timeline.html b/test/timeline.html index 44c020ce..a862a6a3 100644 --- a/test/timeline.html +++ b/test/timeline.html @@ -86,8 +86,6 @@ //height: 200, showCurrentTime: true, showCustomTime: true, - //start: moment('2013-01-01'), - //end: moment('2013-12-31'), //min: moment('2013-01-01'), //max: moment('2013-12-31'), //zoomMin: 1000 * 60 * 60 * 24, // 1 day diff --git a/test/timeline_groups.html b/test/timeline_groups.html index 6dff9219..7e7b78f0 100644 --- a/test/timeline_groups.html +++ b/test/timeline_groups.html @@ -78,7 +78,7 @@ updateTime: true, updateGroup: true }, - stack: false, + //stack: false, //height: 200, groupOrder: 'content' };