-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathindex.js
89 lines (81 loc) · 2.18 KB
/
index.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
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
79
80
81
82
83
84
85
86
87
88
89
'use strict';
const alfy = require('alfy');
const URI = require('urijs');
const ONE_HOUR = 1000 * 60 * 60;
const formatURI = uri => {
return new URI(uri).setSearch({
'utm_source': 'alfred'
}).toString();
}
const Q = alfy.input.replace(/\++/g, '').trim();
const API_URL = new URI('https://api.scryfall.com/cards/search').setSearch('q', Q).toString();
const AUTOCOMPLETE_URL = new URI('https://api.scryfall.com/cards/autocomplete').setSearch('q', Q).toString();
const SEARCH_URL = formatURI(new URI('https://www.scryfall.com/search').setSearch('q', Q).toString());
const EMPTY = [{
title: '¯\\_(ツ)_/¯',
subtitle: `Hellbent: no cards matching "${Q}".`,
arg: SEARCH_URL,
quicklookurl: SEARCH_URL
}];
const SEARCH = [{
uid: `on-site-${Q}`,
title: 'Search on Scryfall',
arg: SEARCH_URL,
quicklookurl: SEARCH_URL
}];
const formatFullCard = card => {
const output = {
uid: card.id,
title: card.name,
arg: formatURI(card.scryfall_uri),
quicklookurl: formatURI(card.scryfall_uri),
autocomplete: card.name
};
if (card.name === 'Amoeboid Changeling') {
output.icon = { path: 'img/o.O.jpg' };
}
return output;
}
const formatAbbreviatedCard = card => {
const QUERY = encodeURI(`!"${card}"`);
const URL = formatURI(`https://scryfall.com/search?q=${QUERY}`);
const output = {
uid: URL,
title: card,
arg: URL,
quicklookurl: URL,
autocomplete: card
};
if (card === 'Amoeboid Changeling') {
output.icon = { path: 'img/o.O.jpg' };
}
return output;
}
if (
/\S[:=<>]+\S/g.test(Q) ||
/[\(\)|!]+/g.test(Q)
) {
alfy.fetch(API_URL, { maxAge: ONE_HOUR })
.then(results => {
if (results.object === "error") {
alfy.output(EMPTY);
} else {
alfy.output(SEARCH.concat(results.data.slice(0, 10).map(formatFullCard)));
}
})
.catch(err => {
alfy.output(EMPTY);
});
} else {
alfy.fetch(AUTOCOMPLETE_URL, { maxAge: ONE_HOUR })
.then(results => {
if (results.object === "error") {
alfy.output(EMPTY);
} else {
alfy.output(SEARCH.concat(results.data.slice(0, 10).map(formatAbbreviatedCard)));
}
})
.catch(err => {
alfy.output(EMPTY);
});
}