Mercurial > google_bookmarks_incsearch
comparison 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 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:c47ec96326ad |
---|---|
1 var GoogleBookmarksParser = { | |
2 parse: function(xml, idStart) { | |
3 var items = xml.getElementsByTagName('item'); | |
4 | |
5 var list = []; | |
6 for (var i = 0, len = items.length; i < len; i++) { | |
7 var bookmark = {}; | |
8 var item = items[i]; | |
9 | |
10 bookmark.id = idStart + i; | |
11 bookmark.url = this.getFirstText(item, 'link'); | |
12 bookmark.title = this.getFirstText(item, 'title'); | |
13 bookmark.info = this.getInfo(item); | |
14 bookmark.tags = this.getTags(item); | |
15 bookmark.time = this.getFirstText(item, 'pubDate'); | |
16 | |
17 list.push(bookmark); | |
18 } | |
19 | |
20 return list; | |
21 }, | |
22 getInfo: function(item) { | |
23 | |
24 var annotation = item.getElementsByTagNameNS('http://www.google.com/history/', 'bkmk_annotation'); | |
25 return (annotation.length != 0) ? annotation[0].firstChild.nodeValue : ''; | |
26 }, | |
27 getTags: function(item) { | |
28 | |
29 var tags = item.getElementsByTagNameNS('http://www.google.com/history/', 'bkmk_label'); | |
30 | |
31 var tagsList = []; | |
32 for (var i = 0, len = tags.length; i < len; i++) { | |
33 tagsList.push(tags[i].firstChild.nodeValue); | |
34 } | |
35 | |
36 if (tagsList.length == 0) { | |
37 return ''; | |
38 } | |
39 return '[' + tagsList.join('] [') + ']'; | |
40 }, | |
41 getFirstText: function(element, tagName) { | |
42 var firstChild = element.getElementsByTagName(tagName)[0].firstChild; | |
43 return (firstChild) ? firstChild.nodeValue : ''; | |
44 } | |
45 } | |
46 | |
47 | |
48 var GoogleBookmarksLoader = function(statusElement, loadingElement, database, callback) { | |
49 this.init(statusElement, loadingElement, database, callback); | |
50 }; | |
51 | |
52 for (var prop in LoaderBase.prototype) { | |
53 GoogleBookmarksLoader.prototype[prop] = LoaderBase.prototype[prop]; | |
54 } | |
55 | |
56 GoogleBookmarksLoader.prototype.url = 'https://www.google.com/bookmarks/lookup?output=rss&sort=date'; | |
57 GoogleBookmarksLoader.COLLECT_SIZE = 1000; | |
58 | |
59 GoogleBookmarksLoader.prototype._load = function() { | |
60 this.bookmarks = []; | |
61 this.__load(); | |
62 } | |
63 GoogleBookmarksLoader.prototype.__load = function() { | |
64 | |
65 var self = this; | |
66 var request = new XMLHttpRequest(); | |
67 | |
68 request.onreadystatechange = function() { | |
69 if (request.readyState == 4) { | |
70 try { | |
71 request.status | |
72 } catch(e) { | |
73 // error | |
74 self.error('error :connect error :' + self.url); | |
75 } | |
76 | |
77 if (request.status == 200) { | |
78 // success | |
79 | |
80 var xml = request.responseXML; | |
81 | |
82 var tempBookmarks = GoogleBookmarksParser.parse(xml, self.bookmarks.length); | |
83 self.bookmarks = self.bookmarks.concat(tempBookmarks); | |
84 | |
85 if (tempBookmarks.length < GoogleBookmarksLoader.COLLECT_SIZE) { | |
86 | |
87 var userId = 'dummy'; | |
88 prefBranch.setCharPref('userId', userId); | |
89 incsearch.userId = userId; | |
90 | |
91 self.total = self.bookmarks.length; | |
92 | |
93 var generator = self.update(self.bookmarks); | |
94 | |
95 var executer = new Executer( | |
96 generator, | |
97 100, | |
98 function(count) { | |
99 self.dispLoading(count); | |
100 }, | |
101 function() { | |
102 self.dispEnd(self.bookmarks.length); | |
103 self.callback(); | |
104 } | |
105 ); | |
106 | |
107 executer.run(); | |
108 | |
109 } else { | |
110 self.__load(); | |
111 } | |
112 } else { | |
113 // error | |
114 var errMsg = 'error :' + request.status + ' :' + request.statusText + ' :' + self.url; | |
115 self.error(errMsg); | |
116 } | |
117 } | |
118 }; | |
119 | |
120 request.open("GET", this.url + '&start=' + this.bookmarks.length + '&num=' + GoogleBookmarksLoader.COLLECT_SIZE, true); | |
121 request.send(null); | |
122 }; | |
123 | |
124 | |
125 IncSearch.prototype.createEditUrl = function(bookmark) { | |
126 return 'http://www.google.com/bookmarks/mark?op=edit&output=popup&bkmk=' + encodeURIComponent(bookmark.url); | |
127 }; | |
128 | |
129 | |
130 var EXTENSION_NAME = 'googlebookmarks_incsearch'; | |
131 var BookmarkLoader = GoogleBookmarksLoader; |