forked from violentmonkey/violentmonkey.github.io
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgatsby-browser.js
70 lines (64 loc) · 1.88 KB
/
gatsby-browser.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
import WebFont from 'webfontloader';
import 'prismjs/themes/prism.css';
WebFont.load({
google: {
families: ['Roboto:400,400i,500,700'],
},
});
document.addEventListener('click', e => {
const { target } = e;
const data = collectData(target, {
action: 'click',
});
if (data.category && !data.label) data.label = target.closest('a')?.textContent;
if (data.label) {
window.gtag?.('event', 'click', {
category: data.category,
label: data.label,
});
}
const a = target.closest('a');
const beta = a?.closest('[data-ga-category=webext-beta]');
if (beta && a.textContent.includes('Firefox')) {
e.preventDefault();
installBetaFirefox();
}
});
async function installBetaFirefox() {
const { location } = window;
try {
const res = await fetch('https://api.github.com/repos/violentmonkey/violentmonkey/releases');
const data = await res.json();
const latestBeta = data.find(item => item.prerelease);
const xpi = latestBeta.assets.find(item => item.name.endsWith('.xpi'));
location.assign(xpi.browser_download_url);
} catch {
location.assign('https://github.com/violentmonkey/violentmonkey/releases');
}
}
function collectData(target, defaults) {
const category = target.closest('[data-ga-category]')?.dataset.gaCategory;
const action = target.closest('[data-ga-action]')?.dataset.gaAction;
const label = target.closest('[data-ga-label]')?.dataset.gaLabel;
return {
category: 'global',
...defaults,
...category && { category },
...action && { action },
...label && { label },
};
}
export function onRouteUpdate() {
const { hash } = window.location;
let target;
try {
target = hash && document.querySelector(hash);
} catch {
// ignore
}
if (target) {
const rect = target.getBoundingClientRect();
const el = document.scrollingElement;
el.scrollTop = el.scrollTop + rect.top - 70;
}
}