-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy paththeme.js
executable file
·122 lines (111 loc) · 3.06 KB
/
theme.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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
// Load stylesheets
function loadFile(filename, id) {
let head = document.getElementsByTagName("head")[0];
let check = document.getElementById("vfmUSERCSS");
let style = document.createElement("link");
if (id) {
style.setAttribute("id", id);
}
style.setAttribute("rel", "stylesheet");
style.setAttribute("type", "text/css");
style.setAttribute("href", chrome.runtime.getURL(filename));
if (check) {
head.insertBefore(style, check);
} else {
head.appendChild(style);
}
}
// Wait function
function _async() {
return new Promise((resolve) => {
requestAnimationFrame(resolve);
});
}
async function _wait() {
while (!document.body) {
await _async();
}
return true;
}
// Load Theme
function loadTheme() {
chrome.storage.sync.get({ VFM_CURRENT_THEME: "" }, function (get) {
let theme = get.VFM_CURRENT_THEME.selected;
if (theme.startsWith("vfm_")) {
_wait().then(() => {
let colors = get.VFM_CURRENT_THEME.colors;
for (const [key, value] of Object.entries(colors)) {
document.body.style.setProperty("--" + key, value);
}
});
loadFile("themes/custom.css", "vfmTheme");
} else {
if (theme === "vfm-vivaldi_light") {
loadFile("themes/vivaldi-light.css", "vfmTheme");
} else {
loadFile("themes/vivaldi-dark.css", "vfmTheme");
}
}
// introduce theme name as class in body
_wait().then(() => {
document.body.classList.add(theme);
});
});
}
// Load User CSS
function loadUserCSS() {
chrome.storage.sync.get({ VFM_USER_CSS: "" }, function (get) {
if (get.VFM_USER_CSS === true) {
chrome.storage.local.get({ userCSS: "" }, function (local) {
if (local.userCSS !== "") {
let activateUserCSS = document.createElement("style");
activateUserCSS.id = "vfmUSERCSS";
activateUserCSS.type = "text/css";
activateUserCSS.innerHTML = local.userCSS;
document.getElementsByTagName("head")[0].appendChild(activateUserCSS);
}
});
}
});
}
// Update Tab
function updateTheme() {
let theme = document.getElementById("vfmTheme");
if (theme) {
theme.disabled = true;
theme.parentNode.removeChild(theme);
}
document.body.className = document.body.className.replace(
/(^|\s)vfm\S+/g,
""
);
loadTheme();
}
function updateUserCSS() {
let del = document.getElementById("vfmUSERCSS");
if (del) {
del.disabled = true;
del.parentNode.removeChild(del);
}
loadUserCSS();
}
navigator.serviceWorker.register("/serviceworker.js");
loadTheme();
loadUserCSS();
chrome.runtime.sendMessage({ message: "whoami" }, function () {
if (chrome.runtime.lastError) {
setTimeout(function () {
chrome.runtime.sendMessage({ message: "whoami" });
}, 3000);
}
});
chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {
if (request.message === "update theme") {
updateTheme();
sendResponse({ message: "akn" });
}
if (request.message === "change usercss") {
updateUserCSS();
sendResponse({ message: "akn" });
}
});