| @ -0,0 +1,120 @@ | |||
| <!DOCTYPE HTML> | |||
| <html> | |||
| <head> | |||
| <title>Timeline | Data serialization</title> | |||
| <style> | |||
| body, html { | |||
| font-family: arial, sans-serif; | |||
| font-size: 11pt; | |||
| } | |||
| textarea { | |||
| width: 800px; | |||
| height: 200px; | |||
| } | |||
| .buttons { | |||
| margin: 20px 0; | |||
| } | |||
| .buttons input { | |||
| padding: 10px; | |||
| } | |||
| </style> | |||
| <script src="../../dist/vis.js"></script> | |||
| <link href="../../dist/vis.css" rel="stylesheet" type="text/css" /> | |||
| </head> | |||
| <body> | |||
| <h1>Serialization and deserialization</h1> | |||
| <p>This example shows how to serialize and deserialize JSON data, and load this in the Timeline via a DataSet. Serialization and deserialization is needed when loading or saving data from a server.</p> | |||
| <textarea id="data"> | |||
| [ | |||
| {"id": 1, "content": "item 1<br>start", "start": "2014-01-23"}, | |||
| {"id": 2, "content": "item 2", "start": "2014-01-18"}, | |||
| {"id": 3, "content": "item 3", "start": "2014-01-21"}, | |||
| {"id": 4, "content": "item 4", "start": "2014-01-19", "end": "2014-01-24"}, | |||
| {"id": 5, "content": "item 5", "start": "2014-01-28", "type": "point"}, | |||
| {"id": 6, "content": "item 6", "start": "2014-01-26"} | |||
| ] | |||
| </textarea> | |||
| <div class="buttons"> | |||
| <input type="button" id="load" value="↓ Load" title="Load data from textarea into the Timeline"> | |||
| <input type="button" id="save" value="↑ Save" title="Save data from the Timeline into the textarea"> | |||
| </div> | |||
| <div id="visualization"></div> | |||
| <script> | |||
| var txtData = document.getElementById('data'); | |||
| var btnLoad = document.getElementById('load'); | |||
| var btnSave = document.getElementById('save'); | |||
| // Create an empty DataSet. | |||
| // This DataSet is used for two way data binding with the Timeline. | |||
| var items = new vis.DataSet(); | |||
| // create a timeline | |||
| var container = document.getElementById('visualization'); | |||
| var options = { | |||
| editable: true | |||
| }; | |||
| var timeline = new vis.Timeline(container, items, options); | |||
| function loadData () { | |||
| // get and deserialize the data | |||
| var data = JSON.parse(txtData.value); | |||
| // update the data in the DataSet | |||
| // | |||
| // Note: when retrieving updated data from a server instead of a complete | |||
| // new set of data, one can simply update the existing data like: | |||
| // | |||
| // items.update(data); | |||
| // | |||
| // Existing items will then be updated, and new items will be added. | |||
| items.clear(); | |||
| items.add(data); | |||
| // adjust the timeline window such that we see the loaded data | |||
| timeline.fit(); | |||
| } | |||
| btnLoad.onclick = loadData; | |||
| function saveData() { | |||
| // get the data from the DataSet | |||
| // Note that we specify the output type of the fields start and end | |||
| // as ISODate, which is safely serializable. Other serializable types | |||
| // are Number (unix timestamp) or ASPDate. | |||
| // | |||
| // Alternatively, it is possible to configure the DataSet to convert | |||
| // the output automatically to ISODates like: | |||
| // | |||
| // var options = { | |||
| // type: {start: 'ISODate', end: 'ISODate'} | |||
| // }; | |||
| // var items = new vis.DataSet(options); | |||
| // // now items.get() will automatically convert start and end to ISO dates. | |||
| // | |||
| var data = items.get({ | |||
| type: { | |||
| start: 'ISODate', | |||
| end: 'ISODate' | |||
| } | |||
| }); | |||
| // serialize the data and put it in the textarea | |||
| txtData.value = JSON.stringify(data, null, 2); | |||
| } | |||
| btnSave.onclick = saveData; | |||
| // load the initial data | |||
| loadData(); | |||
| </script> | |||
| </body> | |||
| </html> | |||