<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -12,7 +12,8 @@ var Client = function(options) {
 
 Client.prototype = {
     requestToken: function(callback) {
-        var headers = this.header(REQUEST_TOKEN_URL, 'GET');
+        var headers = this.header(REQUEST_TOKEN_URL, 'GET',
+                                  {}, { key: '', secret: '' });
         this.request.GET(REQUEST_TOKEN_URL, null, headers, response, 'text');
 
         function response(data) {</diff>
      <filename>src/client.js</filename>
    </modified>
    <modified>
      <diff>@@ -1,37 +1,38 @@
-if (gadgets) {
+if (typeof gadgets != 'undefined') {
 
 var GadgetHandler = Douban.handler.gadget = {
     name: 'gadget',
     
     GET: function(url, params, headers, success, type) {
         url = Douban.util.buildUri(url, params); 
-        var parameters = GadgetHandler.setParams('GET', type || 'JSON', headers);
-        return gadgets.io.makeRequest(url, this.response(type, success), parameters );
+        gadgets.io.makeRequest(url, this.response(type, success),
+            this.params('GET', type || 'JSON', headers));
     },
 
     POST: function(url, params, data, headers, success, type) {
         url = Douban.util.buildUri(url, params); 
-        var parameters  = GadgetHandler.setParams('POST', type || 'JSON', headers, data);
-        return gadgets.io.makeRequest(url, this.response(type, success), parameters );
+        gadgets.io.makeRequest(url, this.response(type, success),
+            this.params('POST', type || 'JSON', headers, data));
     },
 
     PUT: function(url, params, data, headers, success, type) {
         url = Douban.util.buildUri(url, params); 
-        var parameters = GadgetHandler.setParams('PUT', type || 'JSON', headers, data);
-        return gadgets.io.makeRequest(url, this.response(type, success), parameters);
+        gadgets.io.makeRequest(url, this.response(type, success),
+            this.params('PUT', type || 'JSON', headers, data));
     },
 
     DELETE: function(url, params, headers, success, type) {
         url = Douban.util.buildUri(url, params); 
-        var parameters = GadgetHandler.setParams('DELETE', type || 'TEXT', headers);
-        return gadgets.io.makeRequest(url, this.response(type, success), parameters);
+        gadgets.io.makeRequest(url, this.response(type, success),
+            this.params('DELETE', type || 'TEXT', headers));
     },
 
-    setParams: function(type, contentType, headers, data) {
+    params: function(type, contentType, headers, data) {
         var params = {};
         params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType[type];
         params[gadgets.io.RequestParameters.CONTENT_TYPE] = gadgets.io.ContentType[contentType.toUpperCase()];
-        params[gadgets.io.RequestParameters.HEADERS] = headers;
+        params[gadgets.io.RequestParameters.HEADERS] = headers || {};
+        params[gadgets.io.RequestParameters.REFRESH_INTERVAL] = 60;
         if (data) params[gadgets.io.RequestParameters.POST_DATA] = data;
         return params;
     },</diff>
      <filename>src/gadget_handler.js</filename>
    </modified>
    <modified>
      <diff>@@ -5,40 +5,40 @@ var GearsHandler = Douban.handler.gears = {
     proxy: null,
 
     GET: function(url, params, headers, success, type) {
-        var url = Douban.util.buildUri(url, params, GearsHandler.proxy)
+        var url = Douban.util.buildUri(url, params, this.proxy);
         var req = google.gears.factory.create('beta.httprequest');
-        GearsHandler.setStateChange(req, type || 'json', success);
+        this.setStateChange(req, type || 'json', success);
         req.open('GET', url);
-        GearsHandler.setHeaders(req, headers);
+        this.setHeaders(req, headers);
         req.send();
     },
 
     POST: function(url, params, data, headers, success, type) {
-        var url = Douban.util.buildUri(url, params, GearsHandler.proxy)
+        var url = Douban.util.buildUri(url, params, this.proxy);
         var req = google.gears.factory.create('beta.httprequest');
-        GearsHandler.setStateChange(req, type || 'json', success);
+        this.setStateChange(req, type || 'json', success);
         req.open('POST', url);
         headers['Content-Type'] = 'application/atom+xml';
-        GearsHandler.setHeaders(req, headers);
+        this.setHeaders(req, headers);
         req.send(data);
     },
 
     PUT: function(url, params, data, headers, success, type) {
-        var url = Douban.util.buildUri(url, params, GearsHandler.proxy)
+        var url = Douban.util.buildUri(url, params, this.proxy);
         var req = google.gears.factory.create('beta.httprequest');
         headers['Content-Type'] = 'application/atom+xml';
-        GearsHandler.setStateChange(req, type || 'json', success);
+        this.setStateChange(req, type || 'json', success);
         req.open('PUT', url);
-        GearsHandler.setHeaders(req, headers);
+        this.setHeaders(req, headers);
         req.send(data);
     },
 
     DELETE: function(url, params, headers, success, type) {
-        var url = Douban.util.buildUri(url, params, GearsHandler.proxy)
+        var url = Douban.util.buildUri(url, params, this.proxy);
         var req = google.gears.factory.create('beta.httprequest');
-        GearsHandler.setStateChange(req, type || 'text', success);
+        this.setStateChange(req, type || 'text', success);
         req.open('DELETE', url);
-        GearsHandler.setHeaders(req, headers);
+        this.setHeaders(req, headers);
         req.send();
     },
 </diff>
      <filename>src/gears_handler.js</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,4 @@
-if (GM_xmlhttpRequest) {
+if (typeof GM_xmlhttpRequest != 'undefined') {
 
 var GreasemonkeyHandler = Douban.handler.greasemonkey = {
     name: 'greasemonkey',</diff>
      <filename>src/greasemonkey_handler.js</filename>
    </modified>
    <modified>
      <diff>@@ -8,7 +8,7 @@ var jQueryHandler = Douban.handler.jquery = {
                              type: 'GET',
                              dataType: type || 'json',
                              success: success,
-                             beforeSend: jQueryHandler.beforeSend(headers) });
+                             beforeSend: this.beforeSend(headers) });
     },
 
     POST: function(url, params, data, headers, success, type) {
@@ -19,7 +19,7 @@ var jQueryHandler = Douban.handler.jquery = {
                              processData: false,
                              contentType: 'application/atom+xml',
                              success: success,
-                             beforeSend: jQueryHandler.beforeSend(headers) });
+                             beforeSend: this.beforeSend(headers) });
     },
 
     PUT: function(url, params, data, headers, success, type) {
@@ -30,7 +30,7 @@ var jQueryHandler = Douban.handler.jquery = {
                              processData: false,
                              contentType: 'application/atom+xml',
                              success: success,
-                             beforeSend: jQueryHandler.beforeSend(headers) });
+                             beforeSend: this.beforeSend(headers) });
     },
 
     DELETE: function(url, params, headers, success, type) {
@@ -38,7 +38,7 @@ var jQueryHandler = Douban.handler.jquery = {
                              type: 'DELETE',
                              dataType: type || 'text',
                              success: success,
-                             beforeSend: jQueryHandler.beforeSend(headers) });
+                             beforeSend: this.beforeSend(headers) });
     },
 
     beforeSend: function(headers) {</diff>
      <filename>src/jquery_handler.js</filename>
    </modified>
    <modified>
      <diff>@@ -252,23 +252,29 @@ Parser.prototype = {
                 max: parseInt(rating['@max']),
                 value: parseInt(rating['@value'])
             };
+            this.add('rating');
         }
         return this;
     },
 
     when: function() {
         var when = this.raw['gd:when'];
-        if (when)
+        if (when) {
             this.time = {
                 start: when['@startTime'],
                 end: when['@endTime']
-            }
+            };
+            this.add('time');
+        }
         return this;
     },
 
     where: function() {
         var where = this.raw['gd:where'];
-        if (where) this.address = where['@valueString'];
+        if (where) {
+            this.address = where['@valueString'];
+            this.add('address');
+        }
         return this;
     },
 
@@ -290,10 +296,9 @@ Parser.prototype = {
         this.tag = [];
         this.add('tag');
         var tags = this.raw['db:tag'];
-        if (tags) {
+        if (tags)
             for (var i = 0, len = tags.length; i &lt; len; ++i)
                 this.tag.push(Douban.tag(tags[i]));
-        }
         return this;
     }
 };</diff>
      <filename>src/parser.js</filename>
    </modified>
    <modified>
      <diff>@@ -30,7 +30,7 @@ Douban.util = {
     // Deserialises a parameter string to an object:
     unparam: function(params) {
         var obj = new Object();
-        $.each(params.split('&amp;'), function() {
+        $.each((params || '').split('&amp;'), function() {
             var param = this.split('=');
             var key = decodeURIComponent(param[0]);
             var value = decodeURIComponent(param[1]);
@@ -40,7 +40,7 @@ Douban.util = {
     },
 
     buildUri: function(url, params, proxy) {
-        url += (/\?/.test(url) ? '&amp;' : '?') + $.param(params || {});
+        if (params) url += (/\?/.test(url) ? '&amp;' : '?') + $.param(params);
         if (proxy) url = proxy + encodeURIComponent(url);
         return url;
     }</diff>
      <filename>src/utils.js</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>0c111b08776ad1cd3d9d4af6006dc79183118945</id>
    </parent>
  </parents>
  <author>
    <name>wu yuntao</name>
    <email>wyt.py@thonic.org</email>
  </author>
  <url>http://github.com/wuyuntao/jquery-douban/commit/6207e2d1a222470814da697b6c03a3893413603e</url>
  <id>6207e2d1a222470814da697b6c03a3893413603e</id>
  <committed-date>2009-04-08T06:29:54-07:00</committed-date>
  <authored-date>2009-04-08T06:29:54-07:00</authored-date>
  <message>Fix bugs</message>
  <tree>402f5ab9737f53a84df5823c28f75201803966cd</tree>
  <committer>
    <name>wu yuntao</name>
    <email>wyt.py@thonic.org</email>
  </committer>
</commit>
