example09_editable.html 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. <html>
  2. <head>
  3. <title>Timeline demo</title>
  4. <style>
  5. body {font: 10pt arial;}
  6. #mytimeline {
  7. width: 100%;
  8. height: 300px;
  9. }
  10. </style>
  11. <script type="text/javascript" src="http://www.google.com/jsapi"></script>
  12. <script type="text/javascript" src="../timeline.js"></script>
  13. <link rel="stylesheet" type="text/css" href="../timeline.css">
  14. <script type="text/javascript">
  15. var timeline;
  16. var data;
  17. google.load("visualization", "1");
  18. // Set callback to run when API is loaded
  19. google.setOnLoadCallback(drawVisualization);
  20. // Called when the Visualization API is loaded.
  21. function drawVisualization() {
  22. // Create and populate a data table.
  23. data = new google.visualization.DataTable();
  24. data.addColumn('datetime', 'start');
  25. data.addColumn('datetime', 'end');
  26. data.addColumn('string', 'content');
  27. data.addRows([
  28. [new Date(2010,07,23), , '<div>Conversation</div><img src="img/comments-icon.png" style="width:32px; height:32px;">'],
  29. [new Date(2010,07,23,23,00,00), , '<div>Mail from boss</div><img src="img/mail-icon.png" style="width:32px; height:32px;">'],
  30. [new Date(2010,07,24,16,00,00), , 'Report'],
  31. [new Date(2010,07,26), new Date(2010,08,02), 'Traject A'],
  32. [new Date(2010,07,28), , '<div>Memo</div><img src="img/notes-edit-icon.png" style="width:48px; height:48px;">'],
  33. [new Date(2010,07,29), , '<div>Phone call</div><img src="img/Hardware-Mobile-Phone-icon.png" style="width:32px; height:32px;">'],
  34. [new Date(2010,07,31), new Date(2010,08,03), 'Traject B'],
  35. [new Date(2010,08,04,12,00,00), , '<div>Report</div><img src="img/attachment-icon.png" style="width:32px; height:32px;">']
  36. ]);
  37. // specify options
  38. options = {
  39. 'width': "100%",
  40. 'height': "300px",
  41. 'editable': true, // make the events dragable
  42. 'layout': "box"
  43. };
  44. // Instantiate our timeline object.
  45. timeline = new links.Timeline(document.getElementById('mytimeline'));
  46. // Make a callback function for the select event
  47. var onselect = function (event) {
  48. var row = undefined
  49. var sel = timeline.getSelection();
  50. if (sel.length) {
  51. if (sel[0].row != undefined) {
  52. var row = sel[0].row;
  53. }
  54. }
  55. if (row != undefined) {
  56. var content = data.getValue(row, 2);
  57. document.getElementById("txtContent").value = content;
  58. document.getElementById("info").innerHTML += "event " + row + " selected<br>";
  59. }
  60. }
  61. // callback function for the change event
  62. var onchange = function () {
  63. var sel = timeline.getSelection();
  64. if (sel.length) {
  65. if (sel[0].row != undefined) {
  66. var row = sel[0].row;
  67. document.getElementById("info").innerHTML += "event " + row + " changed<br>";
  68. }
  69. }
  70. }
  71. // callback function for the delete event
  72. var ondelete = function () {
  73. var sel = timeline.getSelection();
  74. if (sel.length) {
  75. if (sel[0].row != undefined) {
  76. var row = sel[0].row;
  77. document.getElementById("info").innerHTML += "event " + row + " deleted<br>";
  78. }
  79. }
  80. }
  81. // callback function for the add event
  82. var onadd = function () {
  83. var count = data.getNumberOfRows();
  84. document.getElementById("info").innerHTML += "event " + (count-1) + " added<br>";
  85. }
  86. // Add event listeners
  87. google.visualization.events.addListener(timeline, 'select', onselect);
  88. google.visualization.events.addListener(timeline, 'change', onchange);
  89. google.visualization.events.addListener(timeline, 'delete', ondelete);
  90. google.visualization.events.addListener(timeline, 'add', onadd);
  91. // Draw our timeline with the created data and options
  92. timeline.draw(data, options);
  93. }
  94. /**
  95. * Add a new event
  96. */
  97. function add() {
  98. var range = timeline.getVisibleChartRange();
  99. var start = new Date((range.start.valueOf() + range.end.valueOf()) / 2);
  100. var content = document.getElementById("txtContent").value;
  101. timeline.addItem({
  102. 'start': start,
  103. 'content': content
  104. });
  105. var count = data.getNumberOfRows();
  106. timeline.setSelection([{
  107. 'row': count-1
  108. }]);
  109. }
  110. /**
  111. * Change the content of the currently selected event
  112. */
  113. function change() {
  114. // retrieve the selected row
  115. var sel = timeline.getSelection();
  116. if (sel.length) {
  117. if (sel[0].row != undefined) {
  118. var row = sel[0].row;
  119. }
  120. }
  121. if (row != undefined) {
  122. var content = document.getElementById("txtContent").value;
  123. timeline.changeItem(row, {
  124. 'content': content
  125. // Note: start, end, and group can be added here too.
  126. });
  127. } else {
  128. alert("First select an event, then press remove again");
  129. }
  130. }
  131. /**
  132. * Delete the currently selected event
  133. */
  134. function doDelete() {
  135. // retrieve the selected row
  136. var sel = timeline.getSelection();
  137. if (sel.length) {
  138. if (sel[0].row != undefined) {
  139. var row = sel[0].row;
  140. }
  141. }
  142. if (row != undefined) {
  143. timeline.deleteItem(row);
  144. } else {
  145. alert("First select an event, then press remove again");
  146. }
  147. }
  148. </script>
  149. </head>
  150. <body>
  151. <p>This page demonstrates the timeline visualization.</p>
  152. <p>Click and drag to move the timeline, scroll to zoom the timeline. Click and drag events to change there date.</p>
  153. <p>
  154. <input type="text" value="New text" id="txtContent">
  155. <input type="button" value="Add" title="Add new event" onclick="add();">
  156. <input type="button" value="Change" title="Change content of selected event" onclick="change();">
  157. <input type="button" value="Delete" title="Delete selected event" onclick="doDelete();">
  158. </p>
  159. <div id="mytimeline"></div>
  160. <!-- Information about where the used icons come from -->
  161. <p style="color:gray; font-size:10px; font-style:italic;">
  162. Icons by <a href="http://dryicons.com" target="_blank" title="Aesthetica 2 Icons by DryIcons" style="color:gray;" >DryIcons</a>
  163. and <a href="http://www.tpdkdesign.net" target="_blank" title="Refresh Cl Icons by TpdkDesign.net" style="color:gray;" >TpdkDesign.net</a>
  164. </p>
  165. <div id="info"></div>
  166. </body>
  167. </html>