White background replacer

Replaces the background white color with yellow in order to decrease eye strain

当前为 2018-12-24 提交的版本,查看 最新版本

// ==UserScript==
// @name         White background replacer
// @namespace    http://siavoshkc.ir/
// @version      0.7
// @description  Replaces the background white color with yellow in order to decrease eye strain
// @author       siavoshkc
// @include      *
// @grant        none
// @license      MIT
// @run-at       document-idle
// ==/UserScript==

function changeColor() {
    'use strict';
    const BG_COLOR = "#ffedc4";
    if(document.styleSheets.length == 0) document.body.style.backgroundColor = BG_COLOR;
    else
    {
        for (let sheeti= 0; sheeti<document.styleSheets.length; sheeti++) {
            try{
                let sheet= document.styleSheets[sheeti];
                let rules= sheet.cssRules;

                for (let rulei= 0; rulei<rules.length; rulei++) {
                    let rule= rules[rulei];
                    if (rule.type==CSSRule.STYLE_RULE)
                    {

                        if(rule.style.backgroundColor=="white"||rule.style.backgroundColor=="#ffffff"||rule.style.backgroundColor=="#FFFF"||rule.style.backgroundColor=="#FFF"||rule.style.backgroundColor=="#fff" ||rule.style.backgroundColor=="rgb(255, 255, 255)") rule.style.backgroundColor=BG_COLOR;
                        else if(!(rule.style.backgroundColor!=undefined || rule.style.backgroundColor!="" ||rule.style.backgroundImage!=undefined || rule.style.backgroundImage==""))
                        {
                            let pRule = rule;
                            let foundParentColor = false;
                            while(pRule.parentRule != null)
                            {
                                pRule = pRule.parentRule;
                                if(pRule.style.backgroundColor != undefined || pRule.style.backgroundColor != "" || pRule.style.backgroundImage != undefined || pRule.style.backgroundImage != "")
                                {
                                    foundParentColor = true;
                                    break;
                                }
                            }
                            if(!foundParentColor)
                            {
                                rule.style.backgroundColor=BG_COLOR;
                                console.log("Found no parent color for style "+ rule.style.text);
                            }
                        }

                    }
                    else if(rule.type==CSSRule.IMPORT_RULE)
                    {
                        let importRules = rule.styleSheet.cssRules;
                        for(let importRulei = 0; importRulei < importRules.length; importRulei++)
                        {
                            let importRule = importRules[importRulei];
                            if(importRule.style.backgroundColor=="white"||importRule.style.backgroundColor=="#ffffff"||importRule.style.backgroundColor=="#FFFF"||importRule.style.backgroundColor=="#FFF"||importRule.style.backgroundColor=="#fff" ||importRule.style.backgroundColor=="rgb(255, 255, 255)") importRule.style.backgroundColor=BG_COLOR;
                            else if(!(importRule.style.backgroundColor!=undefined || importRule.style.backgroundColor!="" || importRule.style.backgroundImage!=undefined || importRule.style.backgroundImage!=""))
                            {
                                let pRule = importRule;
                                let foundParentColor = false;
                                while(pRule.parentRule != null)
                                {
                                    pRule = pRule.parentRule;
                                    if(pRule.style.backgroundColor != undefined || pRule.style.backgroundColor != "" || pRule.style.backgroundImage != undefined || pRule.style.backgroundImage != "")
                                    {
                                        foundParentColor = true;
                                        break;
                                    }
                                }
                                if(!foundParentColor)
                                {
                                    importRule.style.backgroundColor=BG_COLOR;
                                    console.log("Found no parent color for style "+ importRule.style.text);

                                }
                            }
                        }

                    }
                    else if(rule.type==CSSRule.MEDIA_RULE)
                    {
                        let mediaRules = rule.cssRules;
                        for(let mediaRulei = 0; mediaRulei < mediaRules.length; mediaRulei++)
                        {
                            let mediaRule = mediaRules[mediaRulei];
                            if(mediaRule.style.backgroundColor=="white"||mediaRule.style.backgroundColor=="#ffffff"||mediaRule.style.backgroundColor=="#FFFF"||mediaRule.style.backgroundColor=="#FFF"||mediaRule.style.backgroundColor=="#fff" ||mediaRule.style.backgroundColor=="rgb(255, 255, 255)") mediaRule.style.backgroundColor=BG_COLOR;
                            else if(!(mediaRule.style.backgroundColor!=undefined || mediaRule.style.backgroundColor=="" || mediaRule.style.backgroundImage==undefined || mediaRule.style.backgroundImage==""))
                            {
                                let pRule = mediaRule;
                                let foundParentColor = false;
                                while(pRule.parentRule != null)
                                {
                                    pRule = pRule.parentRule;
                                    if(pRule.style.backgroundColor != undefined || pRule.style.backgroundColor != "" || pRule.style.backgroundImage != undefined || pRule.style.backgroundImage != "")
                                    {
                                        foundParentColor = true;
                                        break;
                                    }
                                }
                                if(!foundParentColor)
                                {
                                    mediaRule.style.backgroundColor=BG_COLOR;
                                    console.log("Found no parent color for style "+ mediaRule.style.text);
                                }
                            }
                        }
                    }
                    else {console.log("Unsupported style rule of type: ".concat(rule.type))};
                }
            }
            catch(e)
            {
                console.log("Caught exception: ".concat(e));
                continue;
            }
        }
    }

};

window.setTimeout(changeColor,10);