Greasy Fork

Greasy Fork is available in English.

AdaptDark_黑夜模式亮度调节器

浏览器设置为黑夜主题时, 将自适应调节亮度. 初次使用需要进入右键菜单进行个性化设置.

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         AdaptDark_黑夜模式亮度调节器
// @namespace    http://tampermonkey.net/
// @version      0.2
// @description  浏览器设置为黑夜主题时, 将自适应调节亮度. 初次使用需要进入右键菜单进行个性化设置.
// @author       bode135
// @include      *
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant        GM_registerMenuCommand
// @grant        GM_unregisterMenuCommand
// @grant        GM_setValue
// @grant        GM_getValue
// @license      MIT
// ==/UserScript==




(function() {
    'use strict';

    // --- 创建遮罩
    var mask = document.createElement("div");
    mask.setAttribute('style', 'position:fixed;top:0;left:0;outline:5000px solid;z-index:99999;');
    document.body.appendChild(mask);

    function get_brightness_by_input(input)
    {
        if (input == "" || input == null) return null;

        var x = Number(input);

        if (isNaN(x) || x > 100 || x < 0)
        {
            return NaN;
        }

        if (x > 1)
        {
            x = x / 100;
        }

        return x;
    }

    function cover(input) {
        /* input其实是遮罩层的透明度, 用1减去后变为下层的亮度 */

        var x = get_brightness_by_input(input);

        if (x == null) return 0;

        if (isNaN(x))
        {
            alert("请输入一个[0~1]之间的小数作为屏幕亮度!");
            return 0;
        }

        // 从暗度变为亮度
        var brightness = 1 - x;

        mask.style.outlineColor = 'rgba(0,0,0,' + brightness + ')';
        return 1;
    }

    // --- 计算本网站的初始化亮度值
    var default_init_brightness = 0.75;
    var init_brightness = default_init_brightness;

    // 加载用户偏好(个性化网站亮度)
    let hostname = window.location.hostname;
    var key = "my_custom_brightness_dc";
    var my_custom_brightness_dc = GM_getValue(key);
    if (!my_custom_brightness_dc) my_custom_brightness_dc = {};

    // 判断是否设置了所有网站的默认亮度
    var null_ls = [null, undefined, ""];
    var default_brightness = GM_getValue("default_brightness");
    if (!null_ls.includes(default_brightness))
    {
        init_brightness = default_brightness;
    }
    else
    {
        default_brightness = init_brightness;
    }

    if(my_custom_brightness_dc.hasOwnProperty(hostname))
    {
        var custom_brightness = my_custom_brightness_dc[hostname];
        if (!null_ls.includes(custom_brightness))
        {
            init_brightness = custom_brightness;
        }
    }
    // console.log("--- my_custom_brightness_dc:", my_custom_brightness_dc);

    // --- 根据主题来调节亮度
    function change_brightness_by_theme() {

        if (window.matchMedia('(prefers-color-scheme)').media === 'not all') {
            console.log('Browser doesn\'t support dark mode');
        }
        else
        {

            const isDarkTheme = window.matchMedia("(prefers-color-scheme: dark)"); // 是深色
            if (isDarkTheme.matches) { // 是深色
                // 主题设置为深色。
                cover(init_brightness);
            } else { // 不是深色
                // 主题设置为浅色。
                cover(1);
            }
        }

    }

    change_brightness_by_theme();

    let listeners={
        dark:(mediaQueryList )=>{
            if(mediaQueryList.matches){
                change_brightness_by_theme();
            }
        },
        light:(mediaQueryList)=>{
            if(mediaQueryList.matches){
                change_brightness_by_theme();
            }
        }
    }

    window.matchMedia('(prefers-color-scheme: dark)').addListener(listeners.dark)
    window.matchMedia('(prefers-color-scheme: light)').addListener(listeners.light)


    // --- 自定义右键菜单选项
    var menu_context_0 = "设置所有网站默认亮度";
    var menu_context_1 = "设置当前网站亮度";
    var menu_context_2 = "取消当前网站亮度";
    var menu_context_9 = "初始化设置";

    GM_registerMenuCommand (menu_context_0, function(){

        var input = prompt("请输入您想要的默认亮度(0~1之间的小数)", 0.66);
        var ret = cover(input);
        if (ret == 1)
        {
            var brightness = get_brightness_by_input(input);
            GM_setValue("default_brightness", brightness);
        }
    }, "h");

    GM_registerMenuCommand (menu_context_1, function(){

        var input = prompt("请输入当前网站的亮度(0~1之间的小数)", 0.66);
        var ret = cover(input);
        if (ret == 1)
        {
            my_custom_brightness_dc[""+hostname+""] = input;
            GM_setValue(key, my_custom_brightness_dc);
        }
    }, "h");

    GM_registerMenuCommand (menu_context_2, function(){
        cover(default_brightness);
        if(my_custom_brightness_dc.hasOwnProperty(hostname))
        {
            delete my_custom_brightness_dc[""+hostname+""];
            GM_setValue(key, my_custom_brightness_dc);
        }
    }, "h");


    GM_registerMenuCommand (menu_context_9, function(){
        cover(default_init_brightness);
        GM_setValue("default_brightness", "");
        GM_setValue(key, "");
    }, "h");

})();