rewrote longpolling, trying to avoid duplication

does not work though. stupid JS
This commit is contained in:
Joey Hess 2012-07-30 18:01:41 -04:00
parent d1358cc96f
commit 502bc5d5f8
3 changed files with 51 additions and 52 deletions

View file

@ -146,6 +146,7 @@ autoUpdate :: Text -> Route WebApp -> Int -> Int -> Widget
autoUpdate ident gethtml ms_delay ms_startdelay = do
let delay = show ms_delay
let startdelay = show ms_startdelay
addScript $ StaticR longpolling_js
$(widgetFile "longpolling")
{- A display of currently running and queued transfers.

41
static/longpolling.js Normal file
View file

@ -0,0 +1,41 @@
// Uses long-polling to update a div with a specified id,
// by polling an url, which should return a new div, with the same id.
connfails=0;
connfailed=
'<div id="modal" class="modal fade">' +
' <div class="modal-header">' +
' <h3>git-annex has shut down</h3>' +
' </div>' +
' <div class="modal-body">' +
' You can now close this browser window.' +
' </div>' +
'</div>' ;
function longpoll(url, divid) {
(function( $ ) {
$.ajax({
'url': url,
'dataType': 'html',
'success': function(data, status, jqxhr) {
$('#' + divid).replaceWith(data);
connfails=0;
return 1;
},
'error': function(jqxhr, msg, e) {
connfails=connfails+1;
if (connfails > 3) {
// blocked by many browsers
window.close();
$('#modal').replaceWith(connfailed);
$('#modal').modal('show');
return 0;
}
else {
return 1;
}
}
});
})( jQuery );
}

View file

@ -1,54 +1,11 @@
// Uses long-polling to update a div with id=#{ident}
// The gethtml route should return a new div, with the same id.
//
// Maximum update frequency is controlled by #{startdelay}
// and #{delay}, both in milliseconds.
connfails=0;
connfailed=
'<div id="modal" class="modal fade">' +
' <div class="modal-header">' +
' <h3>git-annex has shut down</h3>' +
' </div>' +
' <div class="modal-body">' +
' You can now close this browser window.' +
' </div>' +
'</div>' ;
(function( $ ) {
$.LongPoll#{ident} = (function() {
return {
send : function() {
$.ajax({
'url': '@{gethtml}',
'dataType': 'html',
'success': function(data, status, jqxhr) {
$('##{ident}').replaceWith(data);
setTimeout($.LongPoll#{ident}.send, #{show delay});
numerrs=0;
},
'error': function(jqxhr, msg, e) {
connfails=connfails+1;
if (connfails > 3) {
// blocked by many browsers
window.close();
$('#modal').replaceWith(connfailed);
$('#modal').modal('show');
}
else {
setTimeout($.LongPoll#{ident}.send, #{show delay});
}
},
});
}
// longpolling for #{ident}
function poller#{ident}() {
if (longpoll('@{gethtml}', '#{ident}')) {
setTimeout(poller#{ident}, #{delay});
}
}());
$(document).bind('ready.app', function() {
setTimeout($.LongPoll#{ident}.send, #{show startdelay});
});
}
(function( $ ) {
$(document).bind('ready.app', function() {
setTimeout(poller#{ident}, #{startdelay});
});
})( jQuery );