You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by jc...@apache.org on 2010/06/14 19:13:20 UTC

svn commit: r954560 - /couchdb/trunk/share/www/script/jquery.couch.js

Author: jchris
Date: Mon Jun 14 17:13:19 2010
New Revision: 954560

URL: http://svn.apache.org/viewvc?rev=954560&view=rev
Log:
add changes handler to jquery.couch.js

Modified:
    couchdb/trunk/share/www/script/jquery.couch.js

Modified: couchdb/trunk/share/www/script/jquery.couch.js
URL: http://svn.apache.org/viewvc/couchdb/trunk/share/www/script/jquery.couch.js?rev=954560&r1=954559&r2=954560&view=diff
==============================================================================
--- couchdb/trunk/share/www/script/jquery.couch.js [utf-8] (original)
+++ couchdb/trunk/share/www/script/jquery.couch.js [utf-8] Mon Jun 14 17:13:19 2010
@@ -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;