-
-
Save evanreichard/f983ca26836d4af6ca0f6fb602b9dcaf to your computer and use it in GitHub Desktop.
Dark Reader UserScript for Safari Browser
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==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