forked from willmoffat/Sample-Freebase-Chrome-Extension
-
Notifications
You must be signed in to change notification settings - Fork 1
/
freebase.js
44 lines (39 loc) · 1.23 KB
/
freebase.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// manifest.json must have permission for _all_ these hosts
var API_TOPIC_BLOCK = 'http://www.freebase.com/widget/block';
var API_MQLREAD = 'http://search.labs.freebase.com/api/service/mqlread';
var fbCache = (function() {
// url -> Freebase Topic ID
// null --> never looked up
// '' --> not in freebase
// TODO: expire old items
function clear() {
window.localStorage.clear();
}
function set(url,topic) {
if (topic && topic.guid) {
topic.id = topic.guid.replace(/#/,'/guid/'); //TODO: use topic.id once mids go live on prod;
}
window.localStorage.setItem(url, JSON.stringify(topic));
}
function lookup(url,callback) {
var query=[{ id:null, guid:null, name:null, "/common/topic/weblink":{ url:url } }];
$.getJSON(API_MQLREAD,{query:JSON.stringify(query)}, function(resp) {
var topic = '';
if (resp.result && resp.result.length) {
topic = resp.result[0];
}
set(url,topic);
callback(topic);
});
}
function get(url,callback) {
var topic = window.localStorage.getItem(url);
if ( topic !== null) {
callback(JSON.parse(topic));
} else {
lookup(url,callback);
}
}
return {get:get, set:set, clear:clear};
}
)();