-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathbackground.js
96 lines (82 loc) · 2.97 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
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
90
91
92
93
94
95
96
function generateMarkdownAndTimestamp(tabs, markdownFormat) {
const timestamp = new Date();
const formattedTimestamp = `${timestamp.getFullYear()}-${String(
timestamp.getMonth() + 1
).padStart(2, "0")}-${String(timestamp.getDate()).padStart(2, "0")}T${String(
timestamp.getHours()
).padStart(2, "0")}-${String(timestamp.getMinutes()).padStart(
2,
"0"
)}-${String(timestamp.getSeconds()).padStart(2, "0")}`;
const localDate = timestamp
.toLocaleString("en-US", {
year: "numeric",
month: "2-digit",
day: "2-digit",
})
.replace(/(\d{2})\/(\d{2})\/(\d{4})/, "$3-$1-$2");
const localTime = timestamp.toLocaleString("en-US", {
hour: "2-digit",
minute: "2-digit",
second: "2-digit",
hour12: false,
});
let markdown = `---\ndate_created: ${localDate}\ntime_created: ${localTime}\n---\n\n`;
for (const tab of tabs) {
let formattedMarkdown = markdownFormat
.replace(/\{title\}/g, tab.title)
.replace(/\{url\}/g, tab.url)
.replace(/\\n/g, "\n");
markdown += formattedMarkdown;
}
return { markdown, formattedTimestamp };
}
function shouldProcessTab(tab, restrictedUrls, processOnlySelectedTabs) {
const isPinned = tab.pinned;
const isSettingsTab =
tab.url.startsWith("edge://") ||
tab.url.startsWith("chrome://") ||
tab.url.startsWith("chrome-extension://") ||
tab.url.startsWith("extension://");
const isRestrictedUrl = restrictedUrls.some((url) => tab.url.includes(url));
const isSelected = tab.highlighted;
let process;
if (processOnlySelectedTabs) {
process = isSelected && !isPinned && !isSettingsTab && !isRestrictedUrl;
} else {
process = !isPinned && !isSettingsTab && !isRestrictedUrl;
}
return process;
}
chrome.action.onClicked.addListener(() => {
chrome.storage.sync.get(
["restrictedUrls", "markdownFormat"],
(result) => {
const restrictedUrls = result.restrictedUrls.filter((str) => str !== "");
const markdownFormat = result.markdownFormat || "## {title}\n[{url}]({url})\n\n";
chrome.windows.getAll(
{ populate: true, windowTypes: ["normal"] },
(windows) => {
const currentWindow = windows.find((window) => window.focused);
const selectedTabs = currentWindow.tabs.filter(
(tab) => tab.highlighted
);
const processOnlySelectedTabs = selectedTabs.length > 1;
const tabs = currentWindow.tabs.filter((tab) =>
shouldProcessTab(tab, restrictedUrls || [], processOnlySelectedTabs)
);
const { markdown, formattedTimestamp } = generateMarkdownAndTimestamp(
tabs,
markdownFormat
);
const base64Markdown = btoa(unescape(encodeURIComponent(markdown)));
chrome.downloads.download({
url: "data:text/markdown;charset=UTF-8;base64," + base64Markdown,
filename: `${formattedTimestamp}_OpenTabs.md`,
saveAs: true,
});
}
);
}
);
});