Skip to content

Instantly share code, notes, and snippets.

@evanreichard
Forked from kfur/darkreader.js
Last active March 11, 2023 14:45
Show Gist options
  • Save evanreichard/f983ca26836d4af6ca0f6fb602b9dcaf to your computer and use it in GitHub Desktop.
Save evanreichard/f983ca26836d4af6ca0f6fb602b9dcaf to your computer and use it in GitHub Desktop.
Dark Reader UserScript for Safari Browser
// ==UserScript==
// @name DarkReader
// @version 0.0.6
// @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
};
async function toggleDarkMode(){
let disabledHosts = await GM.getValue('disabledHosts', []);
if (disabledHosts.includes(window.location.hostname)){
GM.unregisterMenuCommand('Enable DarkReader');
DarkReader.enable(options);
disabledHosts = disabledHosts.filter(item => item !== window.location.hostname);
GM.registerMenuCommand('Disable DarkReader', toggleDarkMode);
} else {
GM.unregisterMenuCommand('Disable DarkReader');
DarkReader.disable(options);
disabledHosts.push(window.location.hostname);
GM.registerMenuCommand('Enable DarkReader', toggleDarkMode);
}
await GM.setValue('disabledHosts', disabledHosts);
}
/**
* 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);
// Initial Load
GM.getValue('disabledHosts', []).then(disabledHosts => {
if (disabledHosts.includes(window.location.hostname)){
GM.registerMenuCommand('Enable DarkReader', toggleDarkMode);
DarkReader.disable(options);
} else {
GM.registerMenuCommand('Disable DarkReader', toggleDarkMode);
DarkReader.enable(options);
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment