-
Notifications
You must be signed in to change notification settings - Fork 0
/
background.js
53 lines (46 loc) · 1.61 KB
/
background.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
browser.contextMenus.create({
id: "share",
title: "Share",
});
browser.contextMenus.create({
id: "share-timestamp",
title: "Share with timestamp",
});
function share() {
browser.scripting.executeScript({
target: {
tabId: tab.id
}, func: () => {
const videoId = window.location.search.match(/v=([^&?]+)/);
navigator.clipboard.writeText(`https://youtu.be/${videoId[1]}`)
}
});
}
function shareWithTimestamp() {
browser.scripting.executeScript({
target: {
tabId: tab.id
}, func: () => {
const videoId = window.location.search.match(/v=([^&?]+)/);
const currentTime = document.getElementsByClassName("ytp-time-current")[0].innerText;
const colons = [...currentTime.matchAll(/:/g)].length
navigator.clipboard.writeText(`https://youtu.be/${videoId[1]}&t=${timeToSeconds(currentTime, colons)}`);
function timeToSeconds(timeString, colons) {
if (colons === 1) {
const [minutes, seconds] = timeString.split(':').map(Number);
return minutes * 60 + seconds;
} else if (colons > 1) {
const [hours, minutes, seconds] = timeString.split(':').map(Number);
return hours * 3600 + minutes * 60 + seconds;
}
}
}
});
}
browser.contextMenus.onClicked.addEventListener(async (info) => {
if (info.menuItemId === "share") {
share();
} else if (info.menuItemId === "share-timestamp") {
shareWithTimestamp();
}
});