108 lines
2.7 KiB
JavaScript
108 lines
2.7 KiB
JavaScript
// ==UserScript==
|
|
// @name DarkReader
|
|
// @version 0.0.7
|
|
// @match *://*/*
|
|
// @downloadURL https://gist.github.com/evanreichard/f983ca26836d4af6ca0f6fb602b9dcaf/raw/darkreader.user.js
|
|
// @require https://unpkg.com/darkreader@4.9.46/darkreader.js
|
|
// @grant GM.xmlhttpRequest
|
|
// @grant GM.registerMenuCommand
|
|
// @grant GM.unregisterMenuCommand
|
|
// @grant GM_getValue
|
|
// @grant GM_setValue
|
|
// @inject-into content
|
|
// @noframes
|
|
// @run-at document-start
|
|
// ==/UserScript==
|
|
|
|
/* globals DarkReader */
|
|
|
|
let options = {
|
|
brightness: 70,
|
|
contrast: 110,
|
|
sepia: 50,
|
|
};
|
|
|
|
let prefersDark =
|
|
window.matchMedia &&
|
|
window.matchMedia("(prefers-color-scheme: dark)").matches;
|
|
|
|
function toggleHost() {
|
|
let disabledHosts = GM_getValue("disabledHosts", []);
|
|
let isDisabled = disabledHosts.includes(window.location.hostname);
|
|
|
|
if (isDisabled) {
|
|
disabledHosts = disabledHosts.filter(
|
|
(item) => item !== window.location.hostname,
|
|
);
|
|
} else {
|
|
disabledHosts.push(window.location.hostname);
|
|
}
|
|
|
|
GM_setValue("disabledHosts", disabledHosts);
|
|
applySettings();
|
|
}
|
|
|
|
function toggleSystem() {
|
|
let useSystem = GM_getValue("useSystem", true);
|
|
GM_setValue("useSystem", !useSystem);
|
|
applySettings();
|
|
}
|
|
|
|
/**
|
|
* This is necessary for CORS related requests. GM.xmlhttpRequest
|
|
* bypasses that restriction.
|
|
**/
|
|
async function extensionFetch(url) {
|
|
let responseData = await new Promise((resolve, reject) => {
|
|
GM.xmlhttpRequest({
|
|
url,
|
|
responseType: "blob",
|
|
onerror: reject,
|
|
onload: resolve,
|
|
});
|
|
});
|
|
|
|
return new Response(responseData.response);
|
|
}
|
|
|
|
DarkReader.setFetchMethod(extensionFetch);
|
|
|
|
function applySettings() {
|
|
GM.unregisterMenuCommand("System Mode - Enable");
|
|
GM.unregisterMenuCommand("System Mode - Disable");
|
|
GM.unregisterMenuCommand("DarkReader - Disable");
|
|
GM.unregisterMenuCommand("DarkReader - Enable");
|
|
|
|
let disabledHosts = GM_getValue("disabledHosts", []);
|
|
let useSystem = GM_getValue("useSystem", true);
|
|
|
|
if (useSystem) {
|
|
GM.registerMenuCommand("System Mode - Disable", toggleSystem);
|
|
} else {
|
|
GM.registerMenuCommand("System Mode - Enable", toggleSystem);
|
|
}
|
|
|
|
let isDisabled = disabledHosts.includes(window.location.hostname);
|
|
if (isDisabled) {
|
|
GM.registerMenuCommand("DarkReader - Enable", toggleHost);
|
|
} else {
|
|
GM.registerMenuCommand("DarkReader - Disable", toggleHost);
|
|
}
|
|
|
|
if (useSystem && prefersDark && !isDisabled)
|
|
return DarkReader.enable(options);
|
|
if (!useSystem && !isDisabled) return DarkReader.enable(options);
|
|
|
|
DarkReader.disable();
|
|
}
|
|
|
|
// System Change
|
|
window
|
|
.matchMedia("(prefers-color-scheme: dark)")
|
|
.addEventListener("change", (event) => {
|
|
prefersDark = event.matches;
|
|
applySettings();
|
|
});
|
|
|
|
// Initial Load
|
|
applySettings(); |