index.html 41 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365
  1. <html>
  2. <head>
  3. <title>Timeline documentation</title>
  4. <link rel='stylesheet' href='default.css' type='text/css'>
  5. <link href="prettify/prettify.css" type="text/css" rel="stylesheet" />
  6. <script type="text/javascript" src="prettify/prettify.js"></script>
  7. </head>
  8. <body onload="prettyPrint();">
  9. <div id="container">
  10. <h1>Timeline documentation</h1>
  11. <table>
  12. <tr>
  13. <td>Author</td>
  14. <td>Jos de Jong, <a href="http://www.almende.com" target="_blank">Almende B.V.</a></td>
  15. </tr>
  16. <tr>
  17. <td>Webpage</td>
  18. <td><a href="http://almende.github.com/chap-links-library" target="_blank">Chap Links Library</a></td>
  19. </tr>
  20. <tr>
  21. <td>License</td>
  22. <td> <a href="http://www.apache.org/licenses/LICENSE-2.0" target="_blank">Apache License, Version 2.0</a></td>
  23. </tr>
  24. </table>
  25. <h2><a name="Contents" id="Contents"></a>Contents</h2>
  26. <ul>
  27. <li><a href="#Overview">Overview</a></li>
  28. <li><a href="#Example">Example</a></li>
  29. <li><a href="#Loading">Loading</a></li>
  30. <li><a href="#Data_Format">Data Format</a></li>
  31. <li><a href="#Configuration_Options">Configuration Options</a></li>
  32. <li><a href="#Methods">Methods</a></li>
  33. <li><a href="#Events">Events</a></li>
  34. <li><a href="#Styles">Styles</a></li>
  35. <li><a href="#Data_Policy">Data Policy</a></li>
  36. </ul>
  37. <h2><a name="Overview" id="Overview"></a>Overview</h2>
  38. <p>
  39. The Timeline is an interactive visualization chart to visualize events in time.
  40. The events can take place on a single date, or have a start and end date (a range).
  41. You can freely move and zoom in the timeline by dragging and scrolling in the
  42. Timeline. Events can be created, edited, and deleted in the timeline.
  43. The time scale on the axis is adjusted automatically, and supports scales ranging
  44. from milliseconds to years.
  45. </p>
  46. <p>
  47. When the timeline is defined as editable, events can be moved to another time
  48. by dragging them. By double clicking, the contents of an event can be changed.
  49. An event can be deleted by clicking the delete button on the upper right.
  50. A new event can be added in different
  51. ways: by double clicking in the timeline, or by keeping the Ctrl key down and
  52. clicking or dragging in the timeline, or by clicking the add button in the
  53. upper left of the timeline, and then clicking or dragging at the right location
  54. in the timeline.
  55. </p>
  56. <p>
  57. The Timeline is developed as a Google Visualization Chart in javascript.
  58. It runs in every browser without additional requirements.
  59. There is a GWT wrapper available to use the Timeline in GWT (Google Web Toolkit),
  60. you can find relevant documentation <a href="../../gwt/doc">here</a>.
  61. </p>
  62. <p>
  63. The Timeline is designed to display up to 1000 events smoothly on any modern browser.
  64. </p>
  65. <h2><a name="Example" id="Example"></a>Example</h2>
  66. <p>
  67. Here a timeline example. Click and drag to move the timeline, scroll to zoom the timeline.
  68. </p>
  69. <p>
  70. More examples can be found in the <a href="../examples">examples</a> directory.
  71. </p>
  72. <iframe src="../examples/example01_basis.html" style="border:none; width:100%; height:350px;"></iframe>
  73. <pre class="prettyprint lang-html">&lt;html&gt;
  74. &lt;head&gt;
  75. &lt;title&gt;Timeline demo&lt;/title&gt;
  76. &lt;style&gt;
  77. body {font: 10pt arial;}
  78. &lt;/style&gt;
  79. &lt;script type="text/javascript" src="http://www.google.com/jsapi"&gt;&lt;/script&gt;
  80. &lt;script type="text/javascript" src="../timeline.js"&gt;&lt;/script&gt;
  81. &lt;link rel="stylesheet" type="text/css" href="../timeline.css"&gt;
  82. &lt;script type="text/javascript"&gt;
  83. google.load("visualization", "1");
  84. // Set callback to run when API is loaded
  85. google.setOnLoadCallback(drawVisualization);
  86. // Called when the Visualization API is loaded.
  87. function drawVisualization() {
  88. // Create and populate a data table.
  89. var data = new google.visualization.DataTable();
  90. data.addColumn('datetime', 'start');
  91. data.addColumn('datetime', 'end');
  92. data.addColumn('string', 'content');
  93. data.addRows([
  94. [new Date(2010,7,23), , 'Conversation&lt;br&gt;' +
  95. '&lt;img src="img/comments-icon.png" style="width:32px; height:32px;"&gt;'],
  96. [new Date(2010,7,23,23,0,0), , 'Mail from boss&lt;br&gt;' +
  97. '&lt;img src="img/mail-icon.png" style="width:32px; height:32px;"&gt;'],
  98. [new Date(2010,7,24,16,0,0), , 'Report'],
  99. [new Date(2010,7,26), new Date(2010,8,2), 'Traject A'],
  100. [new Date(2010,7,28), , 'Memo&lt;br&gt;' +
  101. '&lt;img src="img/notes-edit-icon.png" style="width:48px; height:48px;"&gt;'],
  102. [new Date(2010,7,29), , 'Phone call&lt;br&gt;' +
  103. '&lt;img src="img/Hardware-Mobile-Phone-icon.png" style="width:32px; height:32px;"&gt;'],
  104. [new Date(2010,7,31), new Date(2010,8,3), 'Traject B'],
  105. [new Date(2010,8,4,12,0,0), , 'Report&lt;br&gt;' +
  106. '&lt;img src="img/attachment-icon.png" style="width:32px; height:32px;"&gt;']
  107. ]);
  108. // specify options
  109. options = {
  110. "width": "100%",
  111. "height": "99%",
  112. "style": "box" // optional
  113. };
  114. // Instantiate our timeline object.
  115. var timeline = new links.Timeline(document.getElementById('mytimeline'));
  116. // Draw our timeline with the created data and options
  117. timeline.draw(data, options);
  118. }
  119. &lt;/script&gt;
  120. &lt;/head&gt;
  121. &lt;body&gt;
  122. &lt;div id="mytimeline"&gt;&lt;/div&gt;
  123. &lt;/body&gt;
  124. &lt;/html&gt;
  125. </pre>
  126. <h2><a name="Loading" id="Loading"></a>Loading</h2>
  127. <p>
  128. To load the Timeline, download the file
  129. <a href="http://sourceforge.net/projects/links/files/javascript/timeline.zip"><code>timeline.zip</code></a>
  130. and unzip it in a sub directory timeline on your html page.
  131. Include the two downloaded files (timeline.js and timeline.css) in the head of your html code.
  132. When you use a Google DataTable for providing the data,
  133. the Google API must be included too.
  134. Note that the Google API is only available online, so it is not possible
  135. to use it in an offline application.
  136. </p>
  137. <pre class="prettyprint lang-html">&lt;script type="text/javascript" src="http://www.google.com/jsapi"&gt;&lt;/script&gt;
  138. &lt;script type="text/javascript" src="timeline/timeline.js"&gt;&lt;/script&gt;
  139. &lt;link rel="stylesheet" type="text/css" href="timeline/timeline.css"&gt;</pre>
  140. <p>
  141. When the Google API is used, the google visualization tools needs to be
  142. loaded. This is not needed when using a JSON Array as data type.
  143. </p>
  144. <pre class="prettyprint lang-js">google.load("visualization", "1");
  145. google.setOnLoadCallback(drawTimeline);
  146. function drawTimeline() {
  147. // load data and create the timeline here
  148. }
  149. </pre>
  150. The class name of the Timeline is <code>links.Timeline</code>
  151. <pre class="prettyprint lang-js">var timeline = new links.Timeline(container);</pre>
  152. After being loaded, the timeline can be drawn via the method <code>draw</code>,
  153. provided with data and options.
  154. <pre class="prettyprint lang-js">timeline.draw(data, options);</pre>
  155. <p>
  156. where data is a <code>DataTable</code> or a JSON <code>Array</code>,
  157. and options is a name-value map in the JSON format.
  158. </p>
  159. <p>
  160. The Timeline stores a link to the original data table, and applies changes
  161. made from within the Timeline to this data table.
  162. When the data table is changed externally, the Timeline can be updated by executing
  163. <code>redraw()</code>. The Timeline can be linked to an other/new table
  164. via <code>draw(data)</code> (without providing options).
  165. When the website layout has been changed or resized, use <code>checkResize()</code>
  166. to update the size of the timeline.
  167. </p>
  168. <h2><a name="Data_Format" id="Data_Format"></a>Data Format</h2>
  169. <p>
  170. The Timeline supports two data types: a JSON Array or a Google DataTable.
  171. </p>
  172. <h3>JSON</h3>
  173. <p>
  174. The Timeline supports a JSON Array as data format. The Array must contain
  175. JSON Objects with fields <code>start</code>, <code>end</code> (optional),
  176. <code>content</code>, and <code>group</code> (optional).
  177. When JSON is used as data format (instead of Google DataTable), the
  178. Timeline can be used offline.
  179. </p>
  180. <p>
  181. A table is constructed as:
  182. </p>
  183. <pre class="prettyprint lang-js">
  184. var data = [];
  185. data.push({
  186. 'start': new Date(2010, 7, 15),
  187. 'end': new Date(2010, 8, 2), // end is optional
  188. 'content': 'Trajectory A'
  189. // Optional: a fourth parameter 'group'
  190. });
  191. </pre>
  192. <h3>Google DataTable</h3>
  193. <p>
  194. The Timeline requires a data table with three or optionally four columns.
  195. It is possible to use a Google DataTable or DataView, and the data
  196. can be queried from an external data source using Google Query.
  197. Note that the needed Google API is only available online and cannot be
  198. downloaded for offline usage.
  199. </p>
  200. <p>
  201. A table is constructed as:
  202. </p>
  203. <pre class="prettyprint lang-js">
  204. var data = new google.visualization.DataTable();
  205. data.addColumn('datetime', 'start');
  206. data.addColumn('datetime', 'end');
  207. data.addColumn('string', 'content');
  208. // Optional: a fourth column 'group'
  209. data.addRow([new Date(2010,7,15), new Date(2010,8,2), "Trajectory A"]);
  210. // ...
  211. </pre>
  212. <h3>Fields</h3>
  213. <p>
  214. The fields are defined as:
  215. </p>
  216. <table>
  217. <tr>
  218. <th>Name</th>
  219. <th>Type</th>
  220. <th>Description</th>
  221. </tr>
  222. <tr>
  223. <td>start</td>
  224. <td>Date</td>
  225. <td>The start date of the event, for example <code>new Date(2010,09,23)</code>.</td>
  226. </tr>
  227. <tr>
  228. <td>end</td>
  229. <td>Date</td>
  230. <td>The end date of the event. The end date is optional, and can be left <code>null</code>.
  231. If end date is provided, the event is displayed as a range.
  232. If not, the event is displayed as a box.</td>
  233. </tr>
  234. <tr>
  235. <td>content</td>
  236. <td>String</td>
  237. <td>The contents of the event. This can be plain text or html code.</td>
  238. </tr>
  239. <tr>
  240. <td>group</td>
  241. <td>any type</td>
  242. <td>This column is optional. When the group column is provided,
  243. all events with the same group are placed on one line.
  244. A vertical axis is displayed showing the groups.
  245. Grouping events can be useful for example when showing availability of multiple
  246. people, rooms, or other resources next to each other.<br>
  247. If none of the events has a group,
  248. the events will be drawn on top of the horizontal axis.
  249. When events overlap each other, the will be stacked automatically.
  250. </td>
  251. </tr>
  252. </table>
  253. <h2><a name="Configuration_Options" id="Configuration_Options"></a>Configuration Options</h2>
  254. <p>
  255. Options can be used to customize the timeline. Options are defined as a JSON object.
  256. All options are optional.
  257. </p>
  258. <pre class="prettyprint lang-js">
  259. var options = {
  260. "width": "100%",
  261. "height": "auto",
  262. "style": "box",
  263. "editable": true
  264. };
  265. </pre>
  266. <p>
  267. The following options are available.
  268. </p>
  269. <table>
  270. <tr>
  271. <th>Name</th>
  272. <th>Type</th>
  273. <th>Default</th>
  274. <th>Description</th>
  275. </tr>
  276. <tr>
  277. <td>animate</td>
  278. <td>boolean</td>
  279. <td>true</td>
  280. <td>When true, events are moved animated when resizing or moving them.
  281. This is very pleasing for the eye, but does require more computational power.</td>
  282. </tr>
  283. <tr>
  284. <td>animateZoom</td>
  285. <td>boolean</td>
  286. <td>true</td>
  287. <td>When true, events are moved animated when zooming the Timeline.
  288. This looks cool, but does require more computational power.</td>
  289. </tr>
  290. <tr>
  291. <td>axisOnTop</td>
  292. <td>boolean</td>
  293. <td>false</td>
  294. <td>If false (default), the horizontal axis is drawn at the bottom.
  295. If true, the axis is drawn on top.</td>
  296. </tr>
  297. <tr>
  298. <td>box.align</td>
  299. <td>String</td>
  300. <td>"center"</td>
  301. <td>Alignment of items with style "box". Available values are
  302. "center" (default), "left", or "right").</td>
  303. </tr>
  304. <tr>
  305. <td>dragAreaWidth</td>
  306. <td>Number</td>
  307. <td>10</td>
  308. <td>The width of the drag areas in pixels.
  309. When an event range is selected, it has a drag area on the left and right
  310. side, with which the start or end time of the even can be manipulated.</td>
  311. </tr>
  312. <tr>
  313. <td>editable</td>
  314. <td>boolean</td>
  315. <td>false</td>
  316. <td>If true, the events can be edited, created and deleted.
  317. Events can only be editable when th option <code>selectable</code> is true
  318. (default). When editable is true, the Timeline can fire events
  319. <code>change</code>, <code>edit</code>, <code>add</code>, <code>delete</code>.
  320. </td>
  321. </tr>
  322. <tr>
  323. <td>end</td>
  324. <td>Date</td>
  325. <td>none</td>
  326. <td>The initial start date for the axis of the timeline.
  327. If not provided, the latest date present in the events is taken as end date.</td>
  328. </tr>
  329. <tr>
  330. <td>eventMargin</td>
  331. <td>int</td>
  332. <td>10</td>
  333. <td>The minimal margin in pixels between events.</td>
  334. </tr>
  335. <tr>
  336. <td>eventMarginAxis</td>
  337. <td>int</td>
  338. <td>10</td>
  339. <td>The minimal margin in pixels between events and the horizontal axis.</td>
  340. </tr>
  341. <tr>
  342. <td>groupsChangeable</td>
  343. <td>boolean</td>
  344. <td>true</td>
  345. <td>If true (default), items can be moved from one group to another.
  346. Only applicable when groups are used.</td>
  347. </tr>
  348. <tr>
  349. <td>groupsOnRight</td>
  350. <td>boolean</td>
  351. <td>false</td>
  352. <td>If false, the groups legend is drawn at the left side of the timeline.
  353. If true, the groups legend is drawn on the right side.</td>
  354. </tr>
  355. <tr>
  356. <td>groupsWidth</td>
  357. <td>string</td>
  358. <td>none</td>
  359. <td>By default, the width of the groups legend is adjusted to the group
  360. names. A fixed width can be set for the groups legend by specifying the
  361. groupsWidth as a string, for example "200px".</td>
  362. </tr>
  363. <tr>
  364. <td>height</td>
  365. <td>string</td>
  366. <td>"auto"</td>
  367. <td>The height of the timeline in pixels, as a percentage, or "auto".
  368. When the height is set to "auto", the height of the timeline is automatically
  369. adjusted to fit the contents. If not, it is possible that events get stacked
  370. so high, that they are not visible in the timeline.
  371. When height is set to "auto", a minimum height can be specified with the
  372. option <code>minHeight</code>.
  373. </td>
  374. </tr>
  375. <tr>
  376. <td>intervalMax</td>
  377. <td>Number</td>
  378. <td>315360000000000</td>
  379. <td>Set a maximum interval for the visible range in milliseconds.
  380. It will not be possible to zoom out further than this maximum.
  381. Default value equals about 10000 years.
  382. </td>
  383. </tr>
  384. <tr>
  385. <td>intervalMin</td>
  386. <td>Number</td>
  387. <td>10</td>
  388. <td>Set a minimum interval for the visible range in milliseconds.
  389. It will not be possible to zoom in further than this minimum.
  390. </td>
  391. </tr>
  392. <tr>
  393. <td>max</td>
  394. <td>Date</td>
  395. <td>none</td>
  396. <td>Set a maximum Date for the visible range.
  397. It will not be possible to move beyond this maximum.
  398. </td>
  399. </tr>
  400. <tr>
  401. <td>min</td>
  402. <td>Date</td>
  403. <td>none</td>
  404. <td>Set a minimum Date for the visible range.
  405. It will not be possible to move beyond this minimum.
  406. </td>
  407. </tr>
  408. <tr>
  409. <td>minHeight</td>
  410. <td>Number</td>
  411. <td>0</td>
  412. <td>Specifies a minimum height for the Timeline in pixels.
  413. Useful when <code>height</code> is set to <code>"auto"</code>.
  414. </td>
  415. </tr>
  416. <tr>
  417. <td>moveable</td>
  418. <td>boolean</td>
  419. <td>true</td>
  420. <td>If true, the timeline is movable.
  421. When the timeline moved, the <code>rangechange</code> events are fired.
  422. </td>
  423. </tr>
  424. <tr>
  425. <td>scale</td>
  426. <td>links.StepDate.SCALE</td>
  427. <td>none</td>
  428. <td>Set a custom scale. Automatic scaling will be disabled.
  429. Both options <code>scale</code> and <code>step</code> must be set.
  430. For example scale=SCALE.MINUTES and step=5 will result in minor steps of
  431. 5 minutes, and major steps of an hour.
  432. Available scales: <code>MILLISECOND</code>, <code>SECOND</code>,
  433. <code>MINUTE</code>, <code>HOUR</code>, <code>DAY</code>, <code>MONTH</code>,
  434. <code>YEAR</code>. As step size, choose for example 1, 2, 5, or 10.
  435. </td>
  436. </tr>
  437. <tr>
  438. <td>selectable</td>
  439. <td>boolean</td>
  440. <td>true</td>
  441. <td>If true, the events on the timeline are selectable.
  442. When an event is selected, the <code>select</code> event is fired.
  443. </td>
  444. </tr>
  445. <tr>
  446. <td>snapEvents</td>
  447. <td>boolean</td>
  448. <td>true</td>
  449. <td>If true, the start and end of an event will be snapped nice integer
  450. values when moving or resizing the event.
  451. </td>
  452. </tr>
  453. <tr>
  454. <td>stackEvents</td>
  455. <td>boolean</td>
  456. <td>true</td>
  457. <td>If true, the events are stacked above each other to prevent overlapping events.
  458. This option cannot be used in combination with grouped events.</td>
  459. </tr>
  460. <tr>
  461. <td>start</td>
  462. <td>Date</td>
  463. <td>none</td>
  464. <td>The initial start date for the axis of the timeline.
  465. If not provided, the earliest date present in the events is taken as start date.</td>
  466. </tr>
  467. <tr>
  468. <td>step</td>
  469. <td>number</td>
  470. <td>none</td>
  471. <td>See option <code>scale</code>.
  472. </td>
  473. </tr>
  474. <tr>
  475. <td>style</td>
  476. <td>string</td>
  477. <td>"box"</td>
  478. <td>Specifies the style for the timeline events.
  479. Choose from "dot" or "box".
  480. Note that the content of the events may contain additional html formatting.</td>
  481. </tr>
  482. <tr>
  483. <td>showCurrentTime</td>
  484. <td>boolean</td>
  485. <td>true</td>
  486. <td>If true, the timeline shows a red, vertical line displaying the current
  487. time. This time can be synchronized with a server via the method
  488. <code>setCurrentTime</code>.</td>
  489. </tr>
  490. <tr>
  491. <td>showCustomTime</td>
  492. <td>boolean</td>
  493. <td>false</td>
  494. <td>If true, the timeline shows a blue vertical line displaying a custom
  495. time. This line can be dragged by the user.
  496. The custom time can be utilized to show a state in the past or in the future.
  497. When the custom time bar is dragged by the user, an event is triggered, on
  498. which the contents of the timeline can be changed in to the state at that
  499. moment in time.
  500. </td>
  501. </tr>
  502. <tr>
  503. <td>showMajorLabels</td>
  504. <td>boolean</td>
  505. <td>true</td>
  506. <td>By default, the timeline shows both minor and major labels.
  507. For example the minor labels show minutes and the major labels show hours.
  508. When <code>showMajorLabels</code> is <code>false</code>, only the minor
  509. labels are shown.</td>
  510. </tr>
  511. <tr>
  512. <td>showNavigation</td>
  513. <td>boolean</td>
  514. <td>false</td>
  515. <td>Show a navigation menu with buttons to move and zoom the timeline.
  516. </td>
  517. </tr>
  518. <tr>
  519. <td>zoomable</td>
  520. <td>boolean</td>
  521. <td>true</td>
  522. <td>If true, the timeline is zoomable.
  523. When the timeline is zoomed, the <code>rangechange</code> event is fired.
  524. </td>
  525. </tr>
  526. <tr>
  527. <td>width</td>
  528. <td>string</td>
  529. <td>"100%"</td>
  530. <td>The width of the timeline in pixels or as a percentage.</td>
  531. </tr>
  532. </table>
  533. <h2><a name="Methods" id="Methods"></a>Methods</h2>
  534. <p>
  535. The Timeline supports the following methods.
  536. </p>
  537. <table>
  538. <tr>
  539. <th>Method</th>
  540. <th>Return Type</th>
  541. <th>Description</th>
  542. </tr>
  543. <tr>
  544. <td>addItem(properties)</td>
  545. <td>none</td>
  546. <td>Add an item to the Timeline.
  547. The provided parameter <code>properties</code> is an Object,
  548. containing parameters <code>start</code> (Date), <code>end</code> (Date),
  549. <code>content</code> (String), <code>group</code> (String).
  550. Parameters <code>end</code> and <code>group</code> are optional.
  551. </td>
  552. </tr>
  553. <tr>
  554. <td>cancelAdd()</td>
  555. <td>none</td>
  556. <td>An <code>add</code> event can be canceled by calling the method
  557. <code>cancelAdd</code> from within an event listener that listens for
  558. <code>add</code> events. This is useful when additions need to be approved.
  559. </td>
  560. </tr>
  561. <tr>
  562. <td>cancelChange()</td>
  563. <td>none</td>
  564. <td>A <code>change</code> event can be canceled by calling the method
  565. <code>cancelChange</code> from within an event listener that listens for
  566. <code>change</code> events. This is useful when changes need to be approved.
  567. </td>
  568. </tr>
  569. <tr>
  570. <td>cancelDelete()</td>
  571. <td>none</td>
  572. <td>A <code>delete</code> event can be canceled by calling the method
  573. <code>cancelDelete</code> from within an event listener that listens for
  574. <code>delete</code> events. This is useful when deletions need to be
  575. approved.
  576. </td>
  577. </tr>
  578. <tr>
  579. <td>changeItem(index, properties)</td>
  580. <td>none</td>
  581. <td>Change properties of an existing item in the Timeline.
  582. <code>index</code> (Number) is the index of the item.
  583. The provided parameter <code>properties</code> is an Object,
  584. and can contain parameters <code>start</code> (Date), <code>end</code> (Date),
  585. <code>content</code> (String), <code>group</code> (String).
  586. </td>
  587. </tr>
  588. <tr>
  589. <td>checkResize()</td>
  590. <td>none</td>
  591. <td>Check if the timeline container is resized, and if so, resize the timeline.
  592. Useful when the webpage is resized.</td>
  593. </tr>
  594. <tr>
  595. <td>deleteAllItems()</td>
  596. <td>none</td>
  597. <td>Delete all items from the timeline.
  598. </td>
  599. </tr>
  600. <tr>
  601. <td>deleteItem(index)</td>
  602. <td>none</td>
  603. <td>Delete an existing item.
  604. <code>index</code> (Number) is the index of the item.
  605. </td>
  606. </tr>
  607. <tr>
  608. <td>draw(data, options)</td>
  609. <td>none</td>
  610. <td>Loads data, sets options, adjusts the visible range,
  611. and lastly (re)draws the Timeline.
  612. <code>data</code> is a Google DataTable or a JSON Array.
  613. <code>options</code> is an (optional) JSON Object containing values for options.
  614. </td>
  615. </tr>
  616. <tr>
  617. <td>getCustomTime()</td>
  618. <td>Date</td>
  619. <td>Retrieve the custom time.
  620. Only applicable when the option <code>showCustomTime</code> is true.
  621. <code>time</code> is a Date object.
  622. </td>
  623. </tr>
  624. <tr>
  625. <td>getData()</td>
  626. <td>Google DataTable or JSON Array</td>
  627. <td>Retrieve the current datatable from the Timeline.</td>
  628. </tr>
  629. <tr>
  630. <td>getItem(index)</td>
  631. <td>Object</td>
  632. <td>Retrieve the properties of a single item. The returned object can
  633. contain parameters <code>start</code> (Date), <code>end</code> (Date),
  634. <code>content</code> (String), <code>group</code> (String).</td>
  635. </tr>
  636. <tr>
  637. <td>getSelection()</td>
  638. <td>Array of selection elements</td>
  639. <td>Standard <code>getSelection()</code> implementation.
  640. Returns an array with one or multiple selections. Each selection contains
  641. the property <code>row</code>.
  642. </td>
  643. </tr>
  644. <tr>
  645. <td>getVisibleChartRange()</td>
  646. <td>An object with <code>start</code> and <code>end</code> properties</td>
  647. <td>Returns an object with <code>start</code> and <code>end</code> properties,
  648. which each one of them is a Date object,
  649. representing the currently visible time range.</td>
  650. </tr>
  651. <tr>
  652. <td>redraw()</td>
  653. <td>none</td>
  654. <td>Redraw the timeline.
  655. Reloads the (linked) data table and redraws the timeline when resized.
  656. See also the method checkResize.</td>
  657. </tr>
  658. <tr>
  659. <td>setAutoScale(enable)</td>
  660. <td>none</td>
  661. <td>Enable or disable autoscaling.
  662. If <code>enable</code> true or not defined, autoscaling is enabled.
  663. If false, autoscaling is disabled.
  664. </td>
  665. </tr>
  666. <tr>
  667. <td>setCurrentTime(time)</td>
  668. <td>none</td>
  669. <td>Adjust the current time of the timeline. This can for example be
  670. changed to match the time of a server or a time offset of another time zone.
  671. <code>time</code> is a Date object.
  672. </td>
  673. </tr>
  674. <tr>
  675. <td>setCustomTime(time)</td>
  676. <td>none</td>
  677. <td>Adjust the custom time in the timeline.
  678. Only applicable when the option <code>showCustomTime</code> is true.
  679. <code>time</code> is a Date object.
  680. </td>
  681. </tr>
  682. <tr>
  683. <td>setData(data)</td>
  684. <td>none</td>
  685. <td>Set new data in the Timeline. All settings (such as visible range) stay
  686. unchanged, and the timeline must be redrawn afterwards with the method
  687. <code>redraw</code>.
  688. <code>data</code> is a Google DataTable object or a JSON Array.
  689. </td>
  690. </tr>
  691. <tr>
  692. <td>setSelection(selection)</td>
  693. <td>none</td>
  694. <td>Standard <code>setSelection(selection)</code> implementation.
  695. <code>selection</code> is an array with selection elements. The timeline
  696. accepts only one selection element, which must have the property <code>row</code>.
  697. The visible chart range will be moved such that the selected event is placed in the middle.
  698. To unselect all items, use set selection with an empty array.
  699. Example usage: <code>timeline.setSelection([{row: 3}]);</code>.
  700. </td>
  701. </tr>
  702. <tr>
  703. <td>setSize(width, height)</td>
  704. <td>none</td>
  705. <td>Parameters <code>width</code> and <code>height</code> are strings,
  706. containing a new size for the timeline. Size can be provided in pixels
  707. or in percentages.</td>
  708. </tr>
  709. <tr>
  710. <td>setScale(scale, step)</td>
  711. <td>none</td>
  712. <td>Set a custom scale. Automatic scaling will be disabled.
  713. For example setScale(SCALE.MINUTES, 5) will result in minor steps of
  714. 5 minutes, and major steps of an hour.
  715. Available scales: <code>MILLISECOND</code>, <code>SECOND</code>,
  716. <code>MINUTE</code>, <code>HOUR</code>, <code>DAY</code>, <code>MONTH</code>,
  717. <code>YEAR</code>. As step size, choose for example 1, 2, 5, or 10.
  718. </td>
  719. </tr>
  720. <tr>
  721. <td>setVisibleChartRange(start, end)</td>
  722. <td>none</td>
  723. <td>Sets the visible range (zoom) to the specified range.
  724. Accepts two parameters of type Date that represent the first and last times
  725. of the wanted selected visible range.
  726. Set start to null to include everything from the earliest date to end;
  727. set end to null to include everything from start to the last date.</td>
  728. </tr>
  729. <tr>
  730. <td>setVisibleChartRangeNow()</td>
  731. <td>none</td>
  732. <td>Move the visible range such that the current time is located in the
  733. center of the timeline. This method does not trigger a
  734. <code>rangechange</code> event.</td>
  735. </tr>
  736. <tr>
  737. <td>setVisibleChartRangeAuto()</td>
  738. <td>none</td>
  739. <td>Adjust the visible time range such that all events are visible.</td>
  740. </tr>
  741. </table>
  742. <h2><a name="Events" id="Events"></a>Events</h2>
  743. <p>
  744. The Timeline fires events after an event is selected, the visible range changed,
  745. or when an event is changed. The events can be cached by creating a listener.
  746. Listeners can be registered using the event messages from the Google API
  747. or event messages from the CHAP Links library.
  748. </p>
  749. <p>
  750. Here an example on how to catch a <code>select</code> event.
  751. </p>
  752. <pre class="prettyprint lang-js">
  753. function onselect() {
  754. var sel = mytimeline.getSelection();
  755. if (sel.length) {
  756. if (sel[0].row != undefined) {
  757. var row = sel[0].row;
  758. document.title = "event " + row + " selected";
  759. }
  760. }
  761. }
  762. google.visualization.events.addListener(mytimeline, 'select', onselect);
  763. // Or, when not using the Google API:
  764. // links.events.addListener(mytimeline, 'select', onselect);
  765. </pre>
  766. <p>
  767. The following events are available.
  768. </p>
  769. <table>
  770. <col width="10%">
  771. <col width="60%">
  772. <col width="30%">
  773. <tr>
  774. <th>name</th>
  775. <th>Description</th>
  776. <th>Properties</th>
  777. </tr>
  778. <tr>
  779. <td>add</td>
  780. <td>An event is about the be added.
  781. Fired after the user has clicked the button "Add event" and created a new
  782. event by clicking or moving an event into the Timeline.
  783. <br>
  784. The selected row can be retrieved via the method <code>getSelection</code>,
  785. and new start and end data can be read in the according row in the data table.
  786. <br>
  787. The <code>add</code> event can be canceled by calling the method
  788. <code>cancelAdd</code> from within the event listener. This is useful
  789. when additions need to be approved.
  790. </td>
  791. <td>
  792. none
  793. </td>
  794. </tr>
  795. <tr>
  796. <td>change</td>
  797. <td>The properties of an event changed.
  798. Fired after the user modified the start date or end date of an event
  799. by moving (dragging) the event in the Timeline.
  800. <br>
  801. The selected row can be retrieved via the method <code>getSelection</code>,
  802. and new start and end data can be read in the according row in the data table.
  803. <br>
  804. The <code>change</code> event can be canceled by calling the method
  805. <code>cancelChange</code> from within the event listener. This is useful
  806. when changes need to be approved.
  807. </td>
  808. <td>
  809. none
  810. </td>
  811. </tr>
  812. <tr>
  813. <td>edit</td>
  814. <td>An event is about to be edited.
  815. This event is fired when the user double clicks on an event.
  816. The selected row can be retrieved via the method <code>getSelection</code>.
  817. </td>
  818. <td>
  819. none
  820. </td>
  821. </tr>
  822. <tr>
  823. <td>delete</td>
  824. <td>An event is about to be deleted.
  825. Fired after the user clicked the "Delete Event" button on the right of
  826. an event.
  827. <br>
  828. The selected row can be retrieved via the method <code>getSelection</code>,
  829. and new start and end data can be read in the according row in the data table.
  830. <br>
  831. The <code>delete</code> event can be canceled by calling the method
  832. <code>cancelDelete</code> from within the event listener. This is useful
  833. when deletions need to be approved.
  834. </td>
  835. <td>
  836. none
  837. </td>
  838. </tr>
  839. <tr>
  840. <td>rangechange</td>
  841. <td>Visible range is changing. Fired repeatedly while the user is modifying
  842. the visible time by moving (dragging) the timeline, or by zooming (scrolling),
  843. but not after a call to <code>setVisibleChartRange</code> or
  844. <code>setRangeToCurrentTime</code> methods.
  845. The new range can be retrieved by calling <code>getVisibleChartRange</code>
  846. method.</td>
  847. <td>
  848. <ul>
  849. <li><code>start</code>: Date. The start time of the visible range.</li>
  850. <li><code>end</code>: Date. The end time of the visible range.</li>
  851. </ul>
  852. </td>
  853. </tr>
  854. <tr>
  855. <td>rangechanged</td>
  856. <td>Visible range has been changed. Fired once after the user has modified
  857. the visible time by moving (dragging) the timeline, or by zooming (scrolling),
  858. but not after a call to <code>setVisibleChartRange</code> or
  859. <code>setRangeToCurrentTime</code> methods.
  860. The new range can be retrieved by calling <code>getVisibleChartRange</code>
  861. method.</td>
  862. <td>
  863. <ul>
  864. <li><code>start</code>: Date. The start time of the visible range.</li>
  865. <li><code>end</code>: Date. The end time of the visible range.</li>
  866. </ul>
  867. </td>
  868. </tr>
  869. <tr>
  870. <td>ready</td>
  871. <td>The chart is ready for external method calls.
  872. If you want to interact with the chart, and call methods after you draw it,
  873. you should set up a listener for this event before you call the draw method,
  874. and call them only after the event was fired.</td>
  875. <td>none</td>
  876. </tr>
  877. <tr>
  878. <td>select</td>
  879. <td>When the user clicks on an event on the timeline,
  880. the corresponding row in the data table is selected.
  881. The visualization then fires this event.
  882. <br>
  883. The selected row can be retrieved via the method <code>getSelection</code>.
  884. </td>
  885. <td>none</td>
  886. </tr>
  887. <tr>
  888. <td>timechange</td>
  889. <td>The custom time bar is changing. Fired repeatedly when the user is
  890. dragging the blue custom time bar, but not after a call to the
  891. <code>setCustomTime</code> method.
  892. The new custom time can be retrieved by calling <code>getCustomTime</code>
  893. method.</td>
  894. <td>
  895. <ul>
  896. <li><code>time</code>: Date. The new custom time.</li>
  897. </ul>
  898. </td>
  899. </tr>
  900. <tr>
  901. <td>timechanged</td>
  902. <td>The custom time bar has been changed. Fired once after the user has
  903. dragged the blue custom time bar, but not after a call to the
  904. <code>setCustomTime</code> method. The new custom time can be retrieved by
  905. calling <code>getCustomTime</code> method.</td>
  906. <td>
  907. <ul>
  908. <li><code>time</code>: Date. The new custom time.</li>
  909. </ul>
  910. </td>
  911. </tr>
  912. </table>
  913. <h2><a name="Styles" id="Styles"></a>Styles</h2>
  914. <p>
  915. All parts of the Timeline have a class name and a default css style.
  916. The styles can be overwritten, which enables full customization of the layout
  917. of the Timeline.
  918. </p>
  919. <p>For example, to change the border and background color of all events, include the
  920. following code inside the head of your html code or in a separate stylesheet.</p>
  921. <pre class="prettyprint lang-html">
  922. &lt;style&gt;
  923. div.timeline-event {
  924. border-color: orange;
  925. background-color: yellow;
  926. }
  927. &lt;/style&gt;
  928. </pre>
  929. <table>
  930. <col width="25%">
  931. <col width="50%">
  932. <col width="25%">
  933. <tr>
  934. <th>Class name</th>
  935. <th>Description</th>
  936. <th>Default style</th>
  937. </tr>
  938. <tr>
  939. <td>div.timeline-frame</td>
  940. <td>The frame contains the canvas.
  941. It determines the size and the border of the Timeline.</td>
  942. <td>
  943. border: 1px solid #BEBEBE;<br>
  944. overflow: hidden;<br>
  945. </td>
  946. </tr>
  947. <tr>
  948. <td>div.timeline-axis</td>
  949. <td>A horizontal line forms the axis.</td>
  950. <td>
  951. border-color: #BEBEBE;<br>
  952. border-width: 1px;<br>
  953. border-top-style: solid;<br>
  954. </td>
  955. </tr>
  956. <tr>
  957. <td>div.timeline-axis-grid</td>
  958. <td>The axis has a horizontal grid.</td>
  959. <td>
  960. border-left-style: solid;<br>
  961. border-width: 1px;<br>
  962. </td>
  963. </tr>
  964. <tr>
  965. <td>div.timeline-axis-grid-minor</td>
  966. <td>The axis has two grid lines: minor and major. When the scale is in days,
  967. each day gets a minor grid line, and each month a major grid line.</td>
  968. <td>
  969. border-color: #e5e5e5;<br>
  970. </td>
  971. </tr>
  972. <tr>
  973. <td>div.timeline-axis-grid-major</td>
  974. <td>See <code>div.timeline-axis-grid-major</code></td>
  975. <td>
  976. border-color: #bfbfbf;<br>
  977. </td>
  978. </tr>
  979. <tr>
  980. <td>div.timeline-axis-text</td>
  981. <td>Both <code>div.timeline-axis-text-minor</code> and <code>div.timeline-axis-text-major</code> have
  982. also the class <code>div.timeline-axis-text</code>. Use this class to set font styles
  983. for both classes at once.</td>
  984. <td>
  985. color: #4D4D4D;<br>
  986. padding: 3px;<br>
  987. white-space: nowrap;<br>
  988. </td>
  989. </tr>
  990. <tr>
  991. <td>div.timeline-axis-text-minor</td>
  992. <td>The axis has two grid types: minor and major. When the scale is in days,
  993. each day gets a minor text, and each month a major text.</td>
  994. <td>
  995. </td>
  996. </tr>
  997. <tr>
  998. <td>div.timeline-axis-text-major</td>
  999. <td>See <code>div.timeline-axis-text-minor</code></td>
  1000. <td>
  1001. </td>
  1002. </tr>
  1003. <tr>
  1004. <td>div.timeline-event</td>
  1005. <td>All different events (box, dot, range, line) have the class div.timeline-event.
  1006. Use this class for example to set background and foreground colors.</td>
  1007. <td>
  1008. color: #1A1A1A;<br>
  1009. border-color: #97B0F8;<br>
  1010. background-color: #D5DDF6;<br>
  1011. </td>
  1012. </tr>
  1013. <tr>
  1014. <td>div.timeline-event-selected</td>
  1015. <td>All different events (box, dot, range, line) get the class
  1016. div.timeline-event-selected when they are currently selected.
  1017. Use this class to visually show the currently selected event.</td>
  1018. <td>
  1019. border-color: #FFC200;<br>
  1020. background-color: #FFF785;<br>
  1021. z-index: 999;<br>
  1022. </td>
  1023. </tr>
  1024. <tr>
  1025. <td>div.timeline-event-box</td>
  1026. <td>By default (option style="box"), events with only a start-date are drawn as a Box, having
  1027. this class name.</td>
  1028. <td>
  1029. text-align: center;<br>
  1030. border-style: solid;<br>
  1031. border-width: 1px;<br>
  1032. border-radius: 5px;<br>
  1033. -moz-border-radius: 5px;<br>
  1034. </td>
  1035. </tr>
  1036. <tr>
  1037. <td>div.timeline-event-dot</td>
  1038. <td>Divs with the class <code>div.timeline-event-dot</code> are used
  1039. when the option style="dot" is used: a dot is drawn left from the event text.
  1040. Dots are also drawn with style="box", to draw the dot at the axis below each event.</td>
  1041. <td>
  1042. border-style: solid;<br>
  1043. border-width: 5px;<br>
  1044. border-radius: 5px;<br>
  1045. -moz-border-radius: 5px;<br>
  1046. </td>
  1047. </tr>
  1048. <tr>
  1049. <td>div.timeline-event-range</td>
  1050. <td>A range is drawn when an event has both start date and end date provided.</td>
  1051. <td>
  1052. border-width: 1px;<br>
  1053. border-style: solid;<br>
  1054. border-radius: 2px;<br>
  1055. -moz-border-radius: 2px;<br>
  1056. </td>
  1057. </tr>
  1058. <tr>
  1059. <td>div.timeline-event-range-drag-left</td>
  1060. <td>Drag area on the left side of the range</td>
  1061. <td>
  1062. cursor: w-resize;<br>
  1063. z-index: 1000;<br>
  1064. </td>
  1065. </tr>
  1066. <tr>
  1067. <td>div.timeline-event-range-drag-right</td>
  1068. <td>Drag area on the right side of the range</td>
  1069. <td>
  1070. cursor: e-resize;<br>
  1071. z-index: 1000;<br>
  1072. </td>
  1073. </tr>
  1074. <tr>
  1075. <td>div.timeline-event-line</td>
  1076. <td>When option style="box" is used (the default value), each event
  1077. is drawn as a box with a vertical line towards the axis. This line has the
  1078. class <code>div.timeline-event-line</code>.</td>
  1079. <td>
  1080. border-left-width: 1px;<br>
  1081. border-left-style: solid;<br>
  1082. </td>
  1083. </tr>
  1084. <tr>
  1085. <td>div.timeline-event-content</td>
  1086. <td>Each events from class box, dot, and range contain a div with class
  1087. <code>div.timeline-event-content</code>. This class contains the text of the event.</td>
  1088. <td>
  1089. margin: 5px;<br>
  1090. white-space: nowrap;<br>
  1091. overflow: hidden;<br>
  1092. </td>
  1093. </tr>
  1094. <tr>
  1095. <td>div.timeline-groups-axis</td>
  1096. <td>The right border of the vertical axis showing the different event groups.</td>
  1097. <td>
  1098. border-color: #BEBEBE;<br>
  1099. border-width: 1px;<br>
  1100. </td>
  1101. </tr>
  1102. <tr>
  1103. <td>div.timeline-groups-text</td>
  1104. <td>The text labels of the event groups on the vertical axis.</td>
  1105. <td>
  1106. color: #4D4D4D;<br>
  1107. padding-left: 10px;<br>
  1108. padding-right: 10px;<br>
  1109. </td>
  1110. </tr>
  1111. <tr>
  1112. <td>div.timeline-currenttime </td>
  1113. <td>The vertical line showing the current time.</td>
  1114. <td>
  1115. border-color: #FF7F6E;<br>
  1116. border-right-width: 2px;<br>
  1117. border-right-style: solid;<br>
  1118. </td>
  1119. </tr>
  1120. <tr>
  1121. <td>div.timeline-navigation </td>
  1122. <td>The navigation menu. Only visible when option <code>showNavigation</code>
  1123. is true.</td>
  1124. <td>
  1125. font-family: arial;<br>
  1126. font-size: 20px;<br>
  1127. font-weight: bold;<br>
  1128. color: gray;<br>
  1129. border: 1px solid #BEBEBE;<br>
  1130. background-color: #F5F5F5;<br>
  1131. border-radius: 5px;<br>
  1132. -moz-border-radius: 5px;<br>
  1133. </td>
  1134. </tr>
  1135. <tr>
  1136. <td>div.timeline-navigation-new, div.timeline-navigation-delete,
  1137. div.timeline-navigation-zoom-in, div.timeline-navigation-zoom-out,
  1138. div.timeline-navigation-move-left, div.timeline-navigation-move-right </td>
  1139. <td>The menu buttons in the navigation menu.
  1140. You can change the images to your own icon set.
  1141. </td>
  1142. <td>
  1143. cursor: pointer;<br>
  1144. margin: 2px 10px;<br>
  1145. float: left;<br>
  1146. text-decoration: none;<br>
  1147. border-color: #BEBEBE;<br>
  1148. </td>
  1149. </tr>
  1150. <tr>
  1151. <td>div.timeline-navigation-new</td>
  1152. <td>Menu button to create a new event.
  1153. </td>
  1154. <td>
  1155. background: url('img/16/new.png') no-repeat center;<br>
  1156. </td>
  1157. </tr>
  1158. <tr>
  1159. <td>div.timeline-navigation-delete</td>
  1160. <td>Button to delete a selected event.
  1161. The button is displayed at the top right of a selected event.
  1162. </td>
  1163. <td>
  1164. padding: 0px;<br>
  1165. padding-left: 5px;<br>
  1166. background: url('img/16/delete.png') no-repeat center;<br>
  1167. </td>
  1168. </tr>
  1169. <tr>
  1170. <td>div.timeline-navigation-zoom-in</td>
  1171. <td>Button to zoom in on the timeline.
  1172. </td>
  1173. <td>
  1174. background: url('img/16/zoomin.png') no-repeat center;<br>
  1175. </td>
  1176. </tr>
  1177. <tr>
  1178. <td>div.timeline-navigation-zoom-out</td>
  1179. <td>Button to zoom out on the timeline.
  1180. </td>
  1181. <td>
  1182. background: url('img/16/zoomout.png') no-repeat center;<br>
  1183. </td>
  1184. </tr>
  1185. <tr>
  1186. <td>div.timeline-navigation-move-left</td>
  1187. <td>Button to move the timeline to the right,
  1188. such that more of the left side of the timeline becomes visible.
  1189. </td>
  1190. <td>
  1191. background: url('img/16/moveleft.png') no-repeat center;<br>
  1192. </td>
  1193. </tr>
  1194. <tr>
  1195. <td>div.timeline-navigation-move-right</td>
  1196. <td>Button to move the timeline to the left,
  1197. such that more of the right side of the timeline becomes visible.
  1198. </td>
  1199. <td>
  1200. background: url('img/16/moveright.png') no-repeat center;<br>
  1201. </td>
  1202. </tr>
  1203. </table>
  1204. <h2><a name="Data_Policy" id="Data_Policy"></a>Data Policy</h2>
  1205. <p>
  1206. All code and data are processed and rendered in the browser. No data is sent to any server.
  1207. </p>
  1208. </div>
  1209. </body>
  1210. </html>