| <!DOCTYPE HTML> | |
| <html> | |
|   <head> | |
|     <meta charset="utf-8"> | |
|     <title>React Components in templates</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://cdnjs.cloudflare.com/ajax/libs/react/15.3.2/react.js"></script> | |
|     <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.3.2/react-dom.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> | |
|             </div> | |
|           } | |
|         }) | |
| 
 | |
|         var ItemTemplate = React.createClass({ | |
|           render: function() { | |
|             var { item } = this.props; | |
|             return <div> | |
|                 <label>{item.content}</label> | |
|             </div> | |
|           } | |
|         }) | |
| 
 | |
|         // specify options | |
|         var options = { | |
|             orientation: 'top', | |
|             maxHeight: 400, | |
|             start: new Date(), | |
|             end: new Date(1000*60*60*24 + (new Date()).valueOf()), | |
|             editable: true, | |
|             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); | |
|             } | |
|         } | |
|       | |
| 
 | |
|         var VisTimeline = React.createClass({ | |
|             componentDidMount: function() { | |
|                 return initTimeline(); | |
|             }, | |
|             render: function() { | |
|                 return <div> | |
|                     <h1>Vis timline with React</h1> | |
|                     <h2>Using react components for items and 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>
 |