-
Notifications
You must be signed in to change notification settings - Fork 23
/
bookmarkletAPI.jsm
56 lines (42 loc) · 1.72 KB
/
bookmarkletAPI.jsm
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
45
46
47
48
49
50
51
52
53
54
55
56
// High-level reddit bookmarklet commands
logger = Components.utils.import("resource://socialite/utils/log.jsm");
Components.utils.import("resource://socialite/utils/action/action.jsm");
http = Components.utils.import("resource://socialite/utils/action/httpRequest.jsm");
Components.utils.import("resource://socialite/utils/hitch.jsm");
Components.utils.import("resource://socialite/utils/quantizer.jsm");
var EXPORTED_SYMBOLS = ["BookmarkletAPI"];
QUANTIZE_TIME = 1000;
var BOOKMARKLET_API_PATH = "/d/";
function APIURL(site, op) {
return "http://www." + site + BOOKMARKLET_API_PATH + op;
}
function sameURL(func1, arg1, func2, arg2) {
var url1 = arg1[0];
var url2 = arg2[0];
return (url1 == url2);
};
// Make a template since all bookmarklet calls are similar
function bookmarkletAction(self, op, quantizer) {
var func = hitchThis(self, function(url, action) {
logger.log("reddit", "Making ajax bookmarklet " + op + " call");
var params = {
u: url,
};
params = this.reddit.auth.authParams(params);
var act = http.GetAction(APIURL(this.reddit.auth.site, op), params);
act.chainTo(action);
act.perform();
});
if (quantizer) {
func = quantizer.quantize(func);
}
return Action("reddit.bookmarklet." + op, func);
}
function BookmarkletAPI(reddit) {
this.reddit = reddit;
this.voteQuantizer = new Quantizer("reddit.bookmarklet.vote.quantizer", QUANTIZE_TIME, sameURL);
this.like = bookmarkletAction(this, "like", this.voteQuantizer);
this.dislike = bookmarkletAction(this, "dislike", this.voteQuantizer);
this.saveQuantizer = new Quantizer("reddit.bookmarklet.save.quantizer", QUANTIZE_TIME, sameURL);
this.save = bookmarkletAction(this, "save", this.saveQuantizer);
}