diff chrome/content/googlebookmarks.js @ 0:c47ec96326ad

initial import
author Yoshiki Yazawa <yaz@honeyplanet.jp>
date Fri, 15 Aug 2008 01:57:59 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/chrome/content/googlebookmarks.js	Fri Aug 15 01:57:59 2008 +0900
@@ -0,0 +1,131 @@
+var GoogleBookmarksParser = {
+  parse: function(xml, idStart) {
+    var items = xml.getElementsByTagName('item');
+
+    var list = [];
+    for (var i = 0, len = items.length; i < len; i++) {
+      var bookmark = {};
+      var item = items[i];
+
+      bookmark.id = idStart + i;
+      bookmark.url = this.getFirstText(item, 'link');
+      bookmark.title = this.getFirstText(item, 'title');
+      bookmark.info = this.getInfo(item);
+      bookmark.tags = this.getTags(item);
+      bookmark.time = this.getFirstText(item, 'pubDate');
+
+      list.push(bookmark);
+    }
+
+    return list;
+  },
+  getInfo: function(item) {
+
+    var annotation = item.getElementsByTagNameNS('http://www.google.com/history/', 'bkmk_annotation');
+    return (annotation.length != 0) ? annotation[0].firstChild.nodeValue : '';
+  },
+  getTags: function(item) {
+
+    var tags = item.getElementsByTagNameNS('http://www.google.com/history/', 'bkmk_label');
+
+    var tagsList = [];
+    for (var i = 0, len = tags.length; i < len; i++) {
+      tagsList.push(tags[i].firstChild.nodeValue);
+    }
+
+    if (tagsList.length == 0) {
+      return '';
+    }
+    return '[' + tagsList.join('] [') + ']';
+  },
+  getFirstText: function(element, tagName) {
+    var firstChild = element.getElementsByTagName(tagName)[0].firstChild;
+    return (firstChild) ? firstChild.nodeValue : '';
+  }
+}
+
+
+var GoogleBookmarksLoader = function(statusElement, loadingElement, database, callback) {
+  this.init(statusElement, loadingElement, database, callback);
+};
+
+for (var prop in LoaderBase.prototype) {
+  GoogleBookmarksLoader.prototype[prop] = LoaderBase.prototype[prop];
+}
+
+GoogleBookmarksLoader.prototype.url = 'https://www.google.com/bookmarks/lookup?output=rss&sort=date';
+GoogleBookmarksLoader.COLLECT_SIZE = 1000;
+
+GoogleBookmarksLoader.prototype._load = function() {
+  this.bookmarks = [];
+  this.__load();
+}
+GoogleBookmarksLoader.prototype.__load = function() {
+
+  var self = this;
+  var request = new XMLHttpRequest();
+
+  request.onreadystatechange = function() {
+    if (request.readyState == 4) {
+      try {
+        request.status
+      } catch(e) {
+        // error 
+        self.error('error :connect error :' + self.url);
+      }
+
+      if (request.status == 200) {
+        // success
+
+        var xml = request.responseXML;
+
+        var tempBookmarks = GoogleBookmarksParser.parse(xml, self.bookmarks.length);
+        self.bookmarks = self.bookmarks.concat(tempBookmarks);
+
+        if (tempBookmarks.length < GoogleBookmarksLoader.COLLECT_SIZE) {
+
+          var userId = 'dummy';
+          prefBranch.setCharPref('userId', userId);
+          incsearch.userId = userId;
+
+          self.total = self.bookmarks.length;
+
+          var generator = self.update(self.bookmarks);
+
+          var executer = new Executer(
+            generator,
+            100,
+            function(count) {
+              self.dispLoading(count);
+            },
+            function() {
+              self.dispEnd(self.bookmarks.length);
+              self.callback();
+            }
+          );
+
+          executer.run();
+
+        } else {
+          self.__load();
+        }
+      } else {
+        // error
+        var errMsg = 'error :' + request.status + ' :' + request.statusText + ' :' + self.url;
+        self.error(errMsg);
+      }
+    }
+  };
+
+  request.open("GET", this.url + '&start=' + this.bookmarks.length + '&num=' + GoogleBookmarksLoader.COLLECT_SIZE, true);
+  request.send(null);
+};
+
+
+IncSearch.prototype.createEditUrl = function(bookmark) {
+  return 'http://www.google.com/bookmarks/mark?op=edit&output=popup&bkmk=' + encodeURIComponent(bookmark.url);
+};
+
+
+var EXTENSION_NAME = 'googlebookmarks_incsearch';
+var BookmarkLoader = GoogleBookmarksLoader;