-
Notifications
You must be signed in to change notification settings - Fork 2
/
imgur-mirror.user.js
67 lines (63 loc) · 1.73 KB
/
imgur-mirror.user.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
// ==UserScript==
// @name Imgur Mirror
// @namespace https://greasyfork.org/users/649
// @version 1.1.7
// @description Switches all imgur links to the mirror site http://kageurufu.net/imgur
// @author Adrien Pyke
// @include http*
// @require https://cdn.jsdelivr.net/gh/fuzetsu/userscripts@ec863aa92cea78a20431f92e80ac0e93262136df/wait-for-elements/wait-for-elements.js
// @grant none
// ==/UserScript==
(() => {
'use strict';
const regex =
/imgur\.com\/(?!a\/|gallery\/)(?:r\/[a-z0-9_]+\/)?([a-z0-9]+)(\.+[a-z0-9]+)?/iu;
const extensions = [
'.jpg',
'.jpeg',
'.png',
'.gif',
'.gifv',
'.webm',
'.mp4'
];
const getNewLink = function (imgurLink, useGif) {
const match = imgurLink.match(regex);
if (match) {
const file = match[1];
let extension = match[2].toLowerCase();
if (!extension || !extensions.includes(extension)) {
extension = '.png';
} else if (
extension === '.gifv' ||
extension === '.gif' ||
extension === '.webm'
) {
extension = '.mp4';
}
if (useGif && extension === '.mp4') {
extension = '.gif';
}
return `http://kageurufu.net/imgur/?${file + extension}`;
} else {
return null;
}
};
waitForElems({
sel: 'img,a',
onmatch(node) {
const isImg = node.nodeName === 'IMG';
const prop = isImg ? 'src' : 'href';
const newLink = getNewLink(node[prop], isImg);
if (newLink) {
node[prop] = newLink;
if (node.dataset.hrefUrl) {
node.dataset.hrefUrl = newLink;
}
if (node.dataset.outboundUrl) {
node.dataset.outboundUrl = newLink;
}
}
}
});
})();