Mercurial > google_bookmarks_incsearch
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;