mirror of
https://github.com/OCA/web.git
synced 2025-02-22 13:21:25 +02:00
[ADD] new timeline widget
This commit is contained in:
committed by
Tom Blauwendraat
parent
765c0c4670
commit
7f985f06fe
205
static/lib/timeline/examples/example02_interactive.html
Normal file
205
static/lib/timeline/examples/example02_interactive.html
Normal file
@@ -0,0 +1,205 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<title>Timeline demo</title>
|
||||
|
||||
<style>
|
||||
body {
|
||||
font-family: verdana, sans, arial;
|
||||
font-size: 10pt;
|
||||
}
|
||||
</style>
|
||||
|
||||
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
|
||||
<script type="text/javascript" src="../timeline.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="../timeline.css">
|
||||
|
||||
<script type="text/javascript">
|
||||
google.load("visualization", "1");
|
||||
|
||||
// Set callback to run when API is loaded
|
||||
google.setOnLoadCallback(drawVisualization);
|
||||
|
||||
var timeline;
|
||||
var data;
|
||||
|
||||
function getSelectedRow() {
|
||||
var row = undefined;
|
||||
var sel = timeline.getSelection();
|
||||
if (sel.length) {
|
||||
if (sel[0].row != undefined) {
|
||||
row = sel[0].row;
|
||||
}
|
||||
}
|
||||
return row;
|
||||
}
|
||||
|
||||
// Called when the Visualization API is loaded.
|
||||
function drawVisualization() {
|
||||
// Create and populate a data table.
|
||||
data = new google.visualization.DataTable();
|
||||
data.addColumn('datetime', 'start');
|
||||
data.addColumn('datetime', 'end');
|
||||
data.addColumn('string', 'content');
|
||||
|
||||
data.addRows([
|
||||
[new Date(2011,1,23), , '<div>Conversation</div><img src="img/comments-icon.png" style="width:32px; height:32px;">'],
|
||||
[new Date(2011,1,23,23,0,0), , '<div>Mail from boss</div><img src="img/mail-icon.png" style="width:32px; height:32px;">'],
|
||||
[new Date(2011,1,24,16,0,0), , 'Report'],
|
||||
[new Date(2011,1,26), new Date(2011,2,2), 'Traject A'],
|
||||
[new Date(2011,1,27), , '<div>Memo</div><img src="img/notes-edit-icon.png" style="width:48px; height:48px;">'],
|
||||
[new Date(2011,1,29), , '<div>Phone call</div><img src="img/Hardware-Mobile-Phone-icon.png" style="width:32px; height:32px;">'],
|
||||
[new Date(2011,1,28), new Date(2011,2,3), 'Traject B'],
|
||||
[new Date(2011,2,4,12,0,0), , '<div>Report</div><img src="img/attachment-icon.png" style="width:32px; height:32px;">']
|
||||
]);
|
||||
|
||||
// specify options
|
||||
var options = {
|
||||
width: "100%",
|
||||
height: "300px",
|
||||
//height: "auto",
|
||||
editable: true, // enable dragging and editing items
|
||||
//axisOnTop: true,
|
||||
style: "box"
|
||||
};
|
||||
|
||||
// Instantiate our timeline object.
|
||||
timeline = new links.Timeline(document.getElementById('mytimeline'), options);
|
||||
|
||||
// Add event listeners
|
||||
google.visualization.events.addListener(timeline, 'select', onselect);
|
||||
google.visualization.events.addListener(timeline, 'change', onchange);
|
||||
google.visualization.events.addListener(timeline, 'add', onadd);
|
||||
google.visualization.events.addListener(timeline, 'edit', onedit);
|
||||
google.visualization.events.addListener(timeline, 'delete', ondelete);
|
||||
google.visualization.events.addListener(timeline, 'rangechange', onrangechange);
|
||||
google.visualization.events.addListener(timeline, 'rangechanged', onrangechanged);
|
||||
|
||||
// Draw our timeline with the created data and options
|
||||
timeline.draw(data);
|
||||
onrangechange();
|
||||
}
|
||||
|
||||
// Make a callback function for the select item
|
||||
var onselect = function (event) {
|
||||
var row = getSelectedRow();
|
||||
|
||||
if (row != undefined) {
|
||||
document.getElementById("info").innerHTML += "item " + row + " selected<br>";
|
||||
// Note: you can retrieve the contents of the selected row with
|
||||
// data.getValue(row, 2);
|
||||
}
|
||||
else {
|
||||
document.getElementById("info").innerHTML += "no item selected<br>";
|
||||
}
|
||||
};
|
||||
|
||||
// callback function for the change item
|
||||
var onchange = function () {
|
||||
var row = getSelectedRow();
|
||||
document.getElementById("info").innerHTML += "item " + row + " changed<br>";
|
||||
};
|
||||
|
||||
// callback function for the delete item
|
||||
var ondelete = function () {
|
||||
var row = getSelectedRow();
|
||||
document.getElementById("info").innerHTML += "item " + row + " deleted<br>";
|
||||
};
|
||||
|
||||
// callback function for the edit item
|
||||
var onedit = function () {
|
||||
var row = getSelectedRow();
|
||||
document.getElementById("info").innerHTML += "item " + row + " edit<br>";
|
||||
var content = data.getValue(row, 2);
|
||||
var newContent = prompt("Enter content", content);
|
||||
if (newContent != undefined) {
|
||||
data.setValue(row, 2, newContent);
|
||||
}
|
||||
timeline.redraw();
|
||||
};
|
||||
|
||||
// callback function for the add item
|
||||
var onadd = function () {
|
||||
var row = getSelectedRow();
|
||||
document.getElementById("info").innerHTML += "item " + row + " created<br>";
|
||||
var content = data.getValue(row, 2);
|
||||
var newContent = prompt("Enter content", content);
|
||||
if (newContent != undefined) {
|
||||
data.setValue(row, 2, newContent);
|
||||
timeline.redraw();
|
||||
}
|
||||
else {
|
||||
// cancel adding the item
|
||||
timeline.cancelAdd();
|
||||
}
|
||||
};
|
||||
|
||||
function onrangechange() {
|
||||
// adjust the values of startDate and endDate
|
||||
var range = timeline.getVisibleChartRange();
|
||||
document.getElementById('startDate').value = dateFormat(range.start);
|
||||
document.getElementById('endDate').value = dateFormat(range.end);
|
||||
}
|
||||
|
||||
function onrangechanged() {
|
||||
document.getElementById("info").innerHTML += "range changed<br>";
|
||||
}
|
||||
|
||||
// adjust start and end time.
|
||||
function setTime() {
|
||||
if (!timeline) return;
|
||||
|
||||
var newStartDate = new Date(document.getElementById('startDate').value);
|
||||
var newEndDate = new Date(document.getElementById('endDate').value);
|
||||
timeline.setVisibleChartRange(newStartDate, newEndDate);
|
||||
}
|
||||
|
||||
// set the visible range to the current time
|
||||
function setCurrentTime() {
|
||||
if (!timeline) return;
|
||||
|
||||
timeline.setVisibleChartRangeNow();
|
||||
onrangechange();
|
||||
}
|
||||
|
||||
// Format given date as "yyyy-mm-dd hh:ii:ss"
|
||||
// @param datetime A Date object.
|
||||
function dateFormat(date) {
|
||||
var datetime = date.getFullYear() + "-" +
|
||||
((date.getMonth() < 9) ? "0" : "") + (date.getMonth() + 1) + "-" +
|
||||
((date.getDate() < 10) ? "0" : "") + date.getDate() + " " +
|
||||
((date.getHours() < 10) ? "0" : "") + date.getHours() + ":" +
|
||||
((date.getMinutes() < 10) ? "0" : "") + date.getMinutes() + ":" +
|
||||
((date.getSeconds() < 10) ? "0" : "") + date.getSeconds();
|
||||
return datetime;
|
||||
}
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<p>This page demonstrates the timeline visualization.</p>
|
||||
<ul>
|
||||
<li>Click and drag on the time axis to move the timeline, scroll to zoom the timeline</li>
|
||||
<li>Click and drag an item to change its date, double-click to change its text</li>
|
||||
<li>Click or drag on an empty spot in the timeline to create a new item</li>
|
||||
</ul>
|
||||
<p>
|
||||
Starttime: <input type="text" id="startDate" value="">
|
||||
Endtime: <input type="text" id="endDate" value="">
|
||||
<input type="button" id="setRange" value="Set" onclick="setTime();">
|
||||
<input type="button" id="setCurrentTime" value="Current time" onclick="setCurrentTime();">
|
||||
</p>
|
||||
|
||||
<div id="mytimeline"></div>
|
||||
|
||||
<!-- Information about where the used icons come from -->
|
||||
<p style="color:gray; font-size:10px; font-style:italic;">
|
||||
Icons by <a href="http://dryicons.com" target="_blank" title="Aesthetica 2 Icons by DryIcons" style="color:gray;" >DryIcons</a>
|
||||
and <a href="http://www.tpdkdesign.net" target="_blank" title="Refresh Cl Icons by TpdkDesign.net" style="color:gray;" >TpdkDesign.net</a>
|
||||
</p>
|
||||
|
||||
<br>
|
||||
<div id="info"></div>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user