| @ -0,0 +1,131 @@ | |||
| <!DOCTYPE HTML> | |||
| <html> | |||
| <head> | |||
| <meta charset="utf-8"> | |||
| <title>React Hello World</title> | |||
| </head> | |||
| <body> | |||
| <div id='root'></div> | |||
| <!-- | |||
| For ease of use, we are including the React, ReactDOM and Babel CDN | |||
| builds to make getting started as fast as possible. | |||
| In production, you'll want to instead look at using something | |||
| like Gulp, Grunt or WebPack (my personal recommendation) | |||
| to compile JSX into JavaScript. Also, check out: | |||
| http://facebook.github.io/react/docs/tooling-integration.html | |||
| --> | |||
| <script src="https://fb.me/react-15.0.1.js"></script> | |||
| <script src="https://fb.me/react-dom-15.0.1.js"></script> | |||
| <script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.23/browser.min.js"></script> | |||
| <script src="../../../dist/vis.js"></script> | |||
| <link href="../../../dist/vis.css" rel="stylesheet" type="text/css" /> | |||
| <!-- | |||
| This is where you link to your React code. Can be .js or .jsx | |||
| extension, doesn't really matter. | |||
| --> | |||
| <script type="text/babel"> | |||
| var timeline; | |||
| // create groups | |||
| var numberOfGroups = 25; | |||
| var groups = new vis.DataSet() | |||
| for (var i = 0; i < numberOfGroups; i++) { | |||
| groups.add({ | |||
| id: i, | |||
| content: 'Truck ' + i | |||
| }) | |||
| } | |||
| // create items | |||
| var numberOfItems = 1000; | |||
| var items = new vis.DataSet(); | |||
| var itemsPerGroup = Math.round(numberOfItems/numberOfGroups); | |||
| for (var truck = 0; truck < numberOfGroups; truck++) { | |||
| var date = new Date(); | |||
| for (var order = 0; order < itemsPerGroup; order++) { | |||
| date.setHours(date.getHours() + 4 * (Math.random() < 0.2)); | |||
| var start = new Date(date); | |||
| date.setHours(date.getHours() + 2 + Math.floor(Math.random()*4)); | |||
| var end = new Date(date); | |||
| items.add({ | |||
| id: order + itemsPerGroup * truck, | |||
| group: truck, | |||
| start: start, | |||
| end: end, | |||
| content: 'Order ' + order | |||
| }); | |||
| } | |||
| } | |||
| var GroupTemplate = React.createClass({ | |||
| render: function() { | |||
| var { group } = this.props; | |||
| return <div> | |||
| <label>{group.content}</label> | |||
| <button>do stuff</button> | |||
| </div> | |||
| } | |||
| }) | |||
| var ItemTemplate = React.createClass({ | |||
| render: function() { | |||
| var { item } = this.props; | |||
| return <div> | |||
| <label>{item.content}</label> | |||
| <button>do stuff</button> | |||
| </div> | |||
| } | |||
| }) | |||
| // specify options | |||
| var options = { | |||
| rtl: true, | |||
| stack: true, | |||
| maxHeight: 400, | |||
| start: new Date(), | |||
| end: new Date(1000*60*60*24 + (new Date()).valueOf()), | |||
| editable: true, | |||
| margin: { | |||
| item: 10, // minimal margin between items | |||
| axis: 5 // minimal margin between items and the axis | |||
| }, | |||
| template: function (item, element) { | |||
| ReactDOM.unmountComponentAtNode(element); | |||
| return ReactDOM.render(<ItemTemplate item={item} />, element); | |||
| }, | |||
| groupTemplate: function (group, element) { | |||
| ReactDOM.unmountComponentAtNode(element); | |||
| return ReactDOM.render(<GroupTemplate group={group} />, element); | |||
| }, | |||
| orientation: 'top' | |||
| } | |||
| var VisTimeline = React.createClass({ | |||
| componentDidMount: function() { | |||
| initTimeline() | |||
| }, | |||
| render: function() { | |||
| return <div> | |||
| <h1>Vis timline with React</h1> | |||
| <h2>Using react components for items ang group templates</h2> | |||
| <div id="mytimeline"></div> | |||
| </div> | |||
| } | |||
| }); | |||
| function initTimeline() { | |||
| var container = document.getElementById('mytimeline'); | |||
| timeline = new vis.Timeline(container, items, groups, options); | |||
| } | |||
| ReactDOM.render(<VisTimeline />, document.getElementById('root')); | |||
| </script> | |||
| </body> | |||
| </html> | |||