Files
modoboa/static/js/poller.js
T
Antoine Nguyen be2d5286ed wip: global UI refactoring
I'm almost done with the webmail :p
Mailboxes manipulation is working pretty well now.

see #204
2012-04-19 15:21:18 +02:00

81 lines
1.9 KiB
JavaScript

/*
* Simple poller plugin.
*
* Sends a request at a given frequency.
*/
var Poller = function(url, options) {
this.initialize(url, options);
};
Poller.prototype = {
constructor: Poller,
defaults: {
interval: 2000,
success_cb: null,
error_cb: null
},
initialize: function(url, options) {
this.url = url;
this.options = $.extend({}, this.defaults, options);
this.running_request = false;
this.paused = false;
this.reset();
},
reset: function() {
if (!this.paused) {
this.tid = setTimeout($.proxy(this.send_request, this), this.options.interval);
}
},
pause: function() {
this.paused = true;
if (!this.tid) {
return;
}
clearTimeout(this.tid);
},
resume: function() {
if (!this.paused) {
return;
}
this.paused = false;
this.reset();
},
send_request: function() {
var poller = this;
var args = "";
if (this.options.args != undefined) {
args = "?";
if (typeof this.options.args === "function") {
args += this.options.args();
} else {
args += this.options.args;
}
}
this.running_request = true;
$.ajax({
url: this.url + args,
dataType: 'json',
success: function(data) {
poller.running_request = false;
if (data.status == "ok") {
if (poller.options.success_cb) {
poller.options.success_cb(data);
}
poller.reset();
} else {
$("body").notify("error", data.respmsg);
if (poller.options.error_cb) {
poller.options.error_cb(data);
}
}
}
});
}
};