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