<!DOCTYPE HTML>
							 | 
						|
								<html>
							 | 
						|
								<head>
							 | 
						|
								  <title>Timeline | Validate changes</title>
							 | 
						|
								
							 | 
						|
								  <style type="text/css">
							 | 
						|
								    body, html {
							 | 
						|
								      font-family: sans-serif;
							 | 
						|
								    }
							 | 
						|
								  </style>
							 | 
						|
								
							 | 
						|
								  <script src="../../dist/vis.js"></script>
							 | 
						|
								  <link href="../../dist/vis.css" rel="stylesheet" type="text/css" />
							 | 
						|
								</head>
							 | 
						|
								<body>
							 | 
						|
								  <div id="visualization"></div>
							 | 
						|
								  <p></p>
							 | 
						|
								  <div id="log"></div>
							 | 
						|
								
							 | 
						|
								  <script type="text/javascript">
							 | 
						|
								    var items = new vis.DataSet();
							 | 
						|
								    items.add([
							 | 
						|
								      {id: 1, content: 'item 1', start: new Date(2013, 3, 20)},
							 | 
						|
								      {id: 2, content: 'item 2', start: new Date(2013, 3, 14)},
							 | 
						|
								      {id: 3, content: 'item 3', start: new Date(2013, 3, 18)},
							 | 
						|
								      {id: 4, content: 'item 4', start: new Date(2013, 3, 16), end: new Date(2013, 3, 19)},
							 | 
						|
								      {id: 5, content: 'item 5', start: new Date(2013, 3, 25)},
							 | 
						|
								      {id: 6, content: 'item 6', start: new Date(2013, 3, 27)}
							 | 
						|
								    ]);
							 | 
						|
								
							 | 
						|
								    var container = document.getElementById('visualization');
							 | 
						|
								    var options = {
							 | 
						|
								      editable: true,
							 | 
						|
								
							 | 
						|
								      onAdd: function (item, callback) {
							 | 
						|
								        item.content = prompt('Enter text content for new item:', item.content);
							 | 
						|
								        if (item.content != null) {
							 | 
						|
								          callback(item); // send back adjusted new item
							 | 
						|
								        }
							 | 
						|
								        else {
							 | 
						|
								          callback(null); // cancel item creation
							 | 
						|
								        }
							 | 
						|
								      },
							 | 
						|
								
							 | 
						|
								      onMove: function (item, callback) {
							 | 
						|
								        if (confirm('Do you really want to move the item to\n' +
							 | 
						|
								            'start: ' + item.start + '\n' +
							 | 
						|
								            'end: ' + item.end + '?')) {
							 | 
						|
								          callback(item); // send back item as confirmation (can be changed
							 | 
						|
								        }
							 | 
						|
								        else {
							 | 
						|
								          callback(null); // cancel editing item
							 | 
						|
								        }
							 | 
						|
								      },
							 | 
						|
								
							 | 
						|
								      onUpdate: function (item, callback) {
							 | 
						|
								        item.content = prompt('Edit items text:', item.content);
							 | 
						|
								        if (item.content != null) {
							 | 
						|
								          callback(item); // send back adjusted item
							 | 
						|
								        }
							 | 
						|
								        else {
							 | 
						|
								          callback(null); // cancel updating the item
							 | 
						|
								        }
							 | 
						|
								      },
							 | 
						|
								
							 | 
						|
								      onRemove: function (item, callback) {
							 | 
						|
								        if (confirm('Remove item ' + item.content + '?')) {
							 | 
						|
								          callback(item); // confirm deletion
							 | 
						|
								        }
							 | 
						|
								        else {
							 | 
						|
								          callback(null); // cancel deletion
							 | 
						|
								        }
							 | 
						|
								      }
							 | 
						|
								    };
							 | 
						|
								    var timeline = new vis.Timeline(container, items, options);
							 | 
						|
								
							 | 
						|
								    items.on('*', function (event, properties) {
							 | 
						|
								      logEvent(event, properties);
							 | 
						|
								    });
							 | 
						|
								
							 | 
						|
								    function logEvent(event, properties) {
							 | 
						|
								      var log = document.getElementById('log');
							 | 
						|
								      var msg = document.createElement('div');
							 | 
						|
								      msg.innerHTML = 'event=' + JSON.stringify(event) + ', ' +
							 | 
						|
								          'properties=' + JSON.stringify(properties);
							 | 
						|
								      log.firstChild ? log.insertBefore(msg, log.firstChild) : log.appendChild(msg);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								  </script>
							 | 
						|
								</body>
							 | 
						|
								</html>
							 |