-
Notifications
You must be signed in to change notification settings - Fork 2
/
background.js
74 lines (61 loc) · 1.68 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
function delay(t, val) {
return new Promise((resolve) => setTimeout(resolve, t, val));
}
async function displayBadge(tab) {
chrome.action.setBadgeText({
text: "Done",
tabId: tab.id,
});
await delay(1500, null);
chrome.action.setBadgeText({
text: "",
tabId: tab.id,
});
}
async function tabToMarkdownLint(tab) {
/** @type {string} */
let title = tab.title;
/** @type {Config} */
const config = await chrome.storage.sync.get();
for (const rule of config.rules) {
regexUrl = new RegExp(rule.url);
if (!regexUrl.test(tab.url)) continue;
regexSearch = new RegExp(rule.search);
if (!regexSearch.test(title)) continue;
title = title.replace(regexSearch, rule.replace);
break;
}
const link = "[" + title + "](" + tab.url + ")";
navigator.clipboard.writeText(link);
}
chrome.action.onClicked.addListener(function (tab) {
displayBadge(tab);
chrome.scripting.executeScript({
target: { tabId: tab.id },
func: tabToMarkdownLint,
args: [tab],
});
});
/**
* @callback MigrateFunc
* @param {Config} config
* @return {Config}
*/
async function migration() {
/** @type {MigrateFunc[]} */
const steps = [
(config) => {
if (config.version !== undefined) {
return config;
}
config.version = 1;
config.rules = [];
return config;
},
];
/** @type Config */
const rawConfig = await chrome.storage.sync.get();
const config = steps.reduce((config, step) => step(config), rawConfig);
await chrome.storage.sync.set(config);
}
migration();