It’s been a long time coming but its finally here! We have just released the newest version of vis.js: v4! This is a breaking release (hence the version number change). This means the options and the API have been changed in such a way that it is no longer backwards compatible.
We know it is annoying to go back to your code and making the required changes but I guarantee that it is for the best. To help with this migration, we have included an option validator to our new release. This validator is currently applied on the network, timeline and graph2d. It checks the options you supply if they are of the right type. If your options do not exist or if the type is wrong, it will give you an understandable message with suggestions of options you may have meant. We think this will make developing for vis a lot easier, as well as the migration from v3 to v4.
The biggest change in this release is in the network module. We have rewritten the network module in full and the results are cleanly separated ES6 modules. The option structure has been changed to suit this structure. The options have also been grouped, making it easier to document and understand. An example of this is the options for fonts. It used to be fontColor, fontFace fontSize, which is now grouped in a font object with {color:’’,face:’’,size:’’}. Also completely new is the clustering mechanism. It used to be mostly automatic and twitchy but this new version gives all the control to the user. This should make the clustering very useful and I’ll be happy to hear of missing features for this!
We have moved to hammer.js 2 for all of our touch and click events and a lot of work has gone into updating all the css elements (especially for timeline) to eliminate conflicts with large frameworks that overload everything.
Over the last year, we have received a lot of issues on our Github page for which we are very thankful. Whether it is a bug report, question or feature request, we handle all of them as quickly as we can and with these big new rewrites it gives us a new perspective on what is important. We hope the validator will prevent a lot of issues. The new examples have also been designed to more clearly show simple options. We plan to provide links to JSBin for all options but this is a lot of work (for which we wouldn’t mind some help ;) ).
So what’s next? Well the next module that really needs a good overhaul is the graph2d. This module is used by us internally quite a lot and we need to improve the architecture and make it easy to extend it with new graph types.
We want to unify the code between the timeline and the graph2d even more. The ideal result would be using a graph2d as a group in the timeline or use the timeline items in a graph2d without nasty hacks. The graph2d should get numeric x axis (so not necessarily only time), logarithmic axis and hopefully the architecture will be flexible enough to allow the x and y axis to be interchanged. The API across the modules will also be further unified, and I think we’ve made a great start with v4!
From all the modules currently in vis, the graph3d is the oldest and currently the one suffering a lack of attention. If you are an excited user of the graph3d module and want to contribute, we’re open for additions to the vis.js team! The graph3d is feature complete but a webgl implementation could be a great improvement.
I cannot give a timeframe for the things I have discussed here, and we’re always open for ideas and contributions. If you feel like you want to contribute, let us know :).
Changelog:
General
- Changed the build scripts to include a transpilation of ES6 to ES5
(using http://babel.org), so we can use ES6 features in the vis.js
code.
When creating a custom bundle using browserify, one now needs to add a
transform step using
babelify
, this is described in README.md.
Timeline
- Integrated an option configurator and validator.
- Implemented option
multiselect
, which is false by default. - Added method
setData({groups: groups, items: items})
. - Fixed range items not being displayed smaller than 10 pixels (twice the
padding). In order to have overflowing text, one should now apply css style
.vis.timeline .item.range { overflow: visible; }
instead of.vis.timeline .item.range .content { overflow: visible; }
. See example 18_range_overflow.html. - Fixed invalid css names for time axis grid, renamed hours class names from
4-8h
toh4-h8
. - Deprecated option
showCustomTime
. Use methodaddCustomTime()
instead. - Deprecated event
finishedRedraw
as it's redundant. - Renamed option
animate
toanimation
, and changed it to be either a boolean or an object{duration: number, easingFunction: string}
. - Fixed #831: items losing selection when their type changed.
Graph2d
- New option structure.
- Cleaned up docs.
- Fixed #628: stacking order.
- Fixed #624: sorting order.
- Fixed #616: stacking with negative bars.
- Fixed #728: alignment issues.
- Fixed #716: Height of graph
2px
too large when configuring a fixed height.
Network
The network has been completely rewritten. The new modular setup using ES6 classes makes it future proof for maintainability, extendability and clarity. A summary of new features:
- New examples, categorized by topic.
- New docs.
- New option structure, adhering to the modular setup on the backend.
- New events for user interaction.
- New render events for drawing custom elements on the canvas.
- New physics events for making a loading bar during stabilization.
- A lot of new methods that make extending easier.
- Manipulation system now works without the UI neccesarily.
- Nodes and edges can cast shadows.
- Configurator system to dynamically change almost all options.
- Validator has been created for the network's options, warning you about typo's and suggesting alternatives.
- Diamond shape for nodes.
- Unified the label code so edges and nodes have the same label settings.
- InheritColors for edges can be set to both, making a gradient fade between two node colors.
- Redesigned the clustering system giving full control over it.
- Random seed can be saved so the network will be the same every time you start it.
- New physics solver based on ForceAtlas2 as implemented in gephi.]
- New avoidOverlap option for physics.
- Many, many bugfixes.
DataSet
- Dropped support for Google visualization DataTable.
- Dropped support for appending data returned by
DataSet.get()
to an existing Array or DataTable.