Add a poll_server method loop and handle server events by manipulating the canvas

This commit is contained in:
Paul van Tilburg 2012-02-09 10:31:03 +01:00
parent 870342ffdf
commit adae14c70b
1 changed files with 34 additions and 0 deletions

View File

@ -45,6 +45,9 @@ $(document).ready(function() {
$.each(data.list, function(drag_id, drag_info) {
add_draggable_to_canvas(drag_id, drag_info);
});
// Start a (long-poll) loop for update events from the server.
poll_server(timestamp);
}, "json");
});
@ -103,6 +106,37 @@ function update_drag_info(event, ui) {
$.post("draggables/" + ui.helper.context.id, ui.position, "json");
}
// Poll for server events via AJAX.
function poll_server(timestamp) {
$.ajax({ url: "events?timestamp=" + timestamp,
success: handle_server_event,
error: function() { poll_server(timestamp) }, // FIXME; handle properly!
dataType: "json", timeout: 60000 });
};
// Handle server events {
function handle_server_event(event) {
switch(event.type) {
case "reposition":
$("#draggables #" + event.data.id).animate({ top: event.data.top,
left: event.data.left });
break;
case "title update":
$("#draggables #" + event.data.id + " h2 .title").text(event.data.title);
break;
case "add":
add_draggable_to_canvas(event.data.id, event.data.info);
break;
case "delete":
delete_draggable_from_canvas(event.data.id);
break;
default:
console.log("Unsupported event type!");
console.log(event);
}
poll_server(event.timestamp);
}
// Handle the Escape and Plus keys for hiding/showing the add dialog.
function key_handler(event) {
switch (event.keyCode) {