summaryrefslogtreecommitdiff
path: root/share
diff options
context:
space:
mode:
authorJohn Christopher Anderson <jchris@apache.org>2010-06-14 17:13:19 +0000
committerJohn Christopher Anderson <jchris@apache.org>2010-06-14 17:13:19 +0000
commite81462a622b5138bedfac2f3cf907f8dabe755e7 (patch)
treee11f607545387aaac904af3ee018db8e2b89a256 /share
parent09d583a802602bbfc09e1cdb57d9d596b8418be7 (diff)
add changes handler to jquery.couch.js
git-svn-id: https://svn.apache.org/repos/asf/couchdb/trunk@954560 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'share')
-rw-r--r--share/www/script/jquery.couch.js45
1 files changed, 45 insertions, 0 deletions
diff --git a/share/www/script/jquery.couch.js b/share/www/script/jquery.couch.js
index 6d136c6b..32eeef5f 100644
--- a/share/www/script/jquery.couch.js
+++ b/share/www/script/jquery.couch.js
@@ -230,6 +230,51 @@
"Database information could not be retrieved"
);
},
+ changes: function(since, options) {
+ options = {} || options;
+ // set up the promise object within a closure for this handler
+ var db = this, active = true, listeners = [], promise = {
+ onChange : function(fun) {
+ listeners.push(fun);
+ },
+ stop : function() {
+ active = false;
+ }
+ };
+ // call each listener when there is a change
+ function triggerListeners(resp) {
+ $.each(listeners, function() {
+ this(resp);
+ });
+ };
+ // when there is a change, call any listeners, then check for another change
+ options.success = function(resp) {
+ if (active) {
+ var seq = resp.last_seq;
+ triggerListeners(resp);
+ getChangesSince(seq);
+ };
+ };
+ // actually make the changes request
+ function getChangesSince(seq) {
+ ajax(
+ {url: db.uri + "_changes?feed=longpoll&since="+seq},
+ options,
+ "Error connecting to "+db.uri+"/_changes."
+ );
+ }
+ // start the first request
+ if (since) {
+ getChangesSince(since);
+ } else {
+ db.info({
+ success : function(info) {
+ getChangesSince(info.update_seq);
+ }
+ });
+ }
+ return promise;
+ },
allDocs: function(options) {
var type = "GET";
var data = null;