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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
(function() {
function buildURL(url, queries) {
var result = [url];
for (var i = 0; i < queries.length; i++)
if (queries[i][1])
result.push('&', queries[i][0], '=', encodeURIComponent(queries[i][1]));
return result.join("");
}
function httpPost(url, callback) {
try {
let xmlhttp = new XMLHttpRequest();
if (callback)
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4)
callback(xmlhttp);
}
xmlhttp.open('POST', url, !!callback);
xmlhttp.send(null);
return xmlhttp;
} catch (e) {
dactyl.log('Error opening ' + url + ': ' + e, 1);
}
}
group.commands.add(['p[board]'], 'Bookmark page at pinboard.in', function(args) {
var url = buffer.URL;
var description = args['-description'] || buffer.title || url;
var note = args['-note'] || String(window.content.getSelection());
var shared = args['-private'] ? 'no' : null;
httpPost(buildURL('https://api.pinboard.in/v1/posts/add?',
[['url', url],
['description', description],
['extended', note],
['tags', args.join(" ")],
['shared', shared],
['toread', 'yes']]), function(xhr) {
var result = xhr.status == 200 ?
xhr.responseXML.documentElement.getAttribute('code') :
'failed with status ' + xhr.status;
dactyl.echo('Bookmarking ' + url + ' at pinboard.in ' + result);
});
}, {
argCount: '*',
options: [[['-description', '-d'], commands.OPTION_STRING, null, function() [[buffer.title]]],
[['-note', '-n'], commands.OPTION_STRING, null, null],
[['-private', '-p'], commands.OPTION_NOARG]],
completer: function(context) {
if (context.result) {
context.completions = context.result;
return;
}
context.title = ['Tags', 'Type'];
context.incomplete = true;
var xhr = util.httpGet(buildURL('https://api.pinboard.in/v1/posts/suggest?',
[['url', buffer.URL]]), function(xhr) {
context.incomplete = false;
if (xhr.status != 200) {
context.completions = context.result = [];
return;
}
var result = [];
var tags = xhr.responseXML.documentElement.getElementsByTagName('*');
for (var i = 0; i < tags.length; i++)
result.push([tags[i].textContent, tags[i].localName]);
context.completions = context.result = result;
});
context.cancel = function() xhr.abort();
}
}, true);
})();
|