// ==UserScript== // @name 深色模式 // @namespace https://greasyfork.org/zh-CN/users/1196880-ling2ling4 // @version 1.3.1 // @author Ling2Ling4 // @description 设置页面为深色模式, 可定时开关 // @license AGPL-3.0-or-later // @icon data:image/png;base64,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 // @match *://*/* // @run-at document-start // @grant GM_setValue // @grant GM_getValue // @grant GM_registerMenuCommand // @grant GM_notification // @noframes // @compatible chrome // @compatible edge // @compatible firefox // @downloadURL https://update.greasyfork.icu/scripts/503000/%E6%B7%B1%E8%89%B2%E6%A8%A1%E5%BC%8F.user.js // @updateURL https://update.greasyfork.icu/scripts/503000/%E6%B7%B1%E8%89%B2%E6%A8%A1%E5%BC%8F.meta.js // ==/UserScript== (() => { "use strict"; function verify_time1(newVal, oldVal, base) { const arr = newVal.trim().split(/:|:/); if (2 === arr.length && 2 === arr[0].length && 2 === arr[1].length) { const a = +arr[0], b = +arr[1]; if (a >= 0 && a <= 24 && b >= 0 && b <= 59) return newVal; } return oldVal; } function getNumVerifyFn(min, max, rangeLimit = [1, 1]) { return (newVal, oldVal, base) => { if (!(newVal = +newVal) && 0 !== newVal) return oldVal; if (!1 !== min && !1 !== max) { if (rangeLimit[0] && newVal >= min) { if (rangeLimit[1] && newVal <= max) return newVal; if (!rangeLimit[1] && newVal < max) return newVal; } if (!rangeLimit[0] && newVal > min) { if (rangeLimit[1] && newVal <= max) return newVal; if (!rangeLimit[1] && newVal < max) return newVal; } } else { if (!1 === min) { if (rangeLimit[1] && newVal <= max) return newVal; if (!rangeLimit[1] && newVal < max) return newVal; } if (!1 === max) { if (rangeLimit[0] && newVal >= min) return newVal; if (!rangeLimit[0] && newVal > min) return newVal; } } return oldVal; }; } const keyBase = "ll_pageDarkMode_", info = { keyBase, settingsArea: null, isDarkMode: !1, isCanRun: !0, timer: null, interval: 5e3, cssDom: null, btnHoverTxt: "点击切换深色模式", otherSettings: { oldDarkMode: { value: !1, base: !1, key: keyBase + "oldDarkMode", valType: "boolean", }, }, settings: { btnPosition: { value: !1, base: !1, key: keyBase + "btnPosition", groupTitle3: "按钮设置", desc: "模式切换按钮的位置", type: "基础设置", valType: "boolean", compType: "radio", valueText: { true: "左下", false: "右下" }, }, isHiddenBtn: { value: !1, base: !1, key: keyBase + "isHiddenBtn", desc: "是否隐藏按钮, 隐藏后鼠标移入时会重新显示", type: "基础设置", valType: "boolean", compType: "radio", valueText: { true: "隐藏", false: "显示" }, }, btnSize: { value: "30", base: "30", key: keyBase + "btnSize", desc: "按钮的大小", type: "基础设置", valType: "number", compType: "textarea", verify: getNumVerifyFn(20, 60), }, isAutoStartStop: { value: !0, base: !0, key: keyBase + "isAutoStartStop", groupTitle3: "定时开关", desc: "是否开启定时开关功能", type: "基础设置", valType: "boolean", compType: "radio", valueText: { true: "开启", false: "关闭" }, }, startTime: { value: "0", base: "0", key: keyBase + "startTime", valType: "string", type: "基础设置", desc: "深色模式的自动开启时间, 0表示关闭, 按照24小时制书写, 格式为 xx:xx, 如: 20:00", compType: "textarea", verify: (newVal, oldVal, base) => 0 == +newVal ? newVal : verify_time1(newVal, oldVal), }, stopTime: { value: "0", base: "0", key: keyBase + "stopTime", valType: "string", type: "基础设置", desc: "深色模式的自动关闭时间, 0表示关闭, 按照24小时制书写", compType: "textarea", verify: (newVal, oldVal, base) => 0 == +newVal ? newVal : verify_time1(newVal, oldVal), }, startStopWay: { value: !0, base: !0, key: keyBase + "startStopWay", desc: "定时开关深色模式的方式", type: "基础设置", valType: "boolean", compType: "radio", valueText: { true: "仅在设定时刻进行开关", false: "根据设定时间段任意时刻都可开关", }, }, isShowTips: { value: !0, base: !0, key: keyBase + "isShowTips", desc: "定时开关时是否进行弹窗提示", type: "基础设置", valType: "boolean", compType: "radio", valueText: { true: "弹窗提示", false: "关闭弹窗" }, }, onlyColor: { value: !1, base: !1, key: keyBase + "onlyColor", desc: "深色模式下是否仅调整颜色而不使页面变成深色 (此时'颜色反转'设置将失效)", type: "颜色设置", valType: "boolean", compType: "radio", valueText: { true: "自定义颜色", false: "深色+自定义颜色" }, }, invert: { value: 1, base: 1, key: keyBase + "invert", valType: "number", type: "颜色设置", title: "颜色反转", desc: "颜色反转的程度, 深色效果主要与该设置相关. 默认1, 浏览器默认0, 取值范围0-1", compType: "textarea", verify: getNumVerifyFn(0, 1), }, brightness: { value: 0.9, base: 0.9, key: keyBase + "brightness", valType: "number", type: "颜色设置", title: "亮度", desc: "亮度的大小. 默认0.9, 浏览器默认1, 取值范围0-∞", compType: "textarea", verify: getNumVerifyFn(0, !1), }, contrast: { value: 1, base: 1, key: keyBase + "contrast", valType: "number", type: "颜色设置", title: "对比度", desc: "对比度的强弱. 默认1, 取值范围0-∞", compType: "textarea", verify: getNumVerifyFn(0, !1), }, grayscale: { value: 0, base: 0, key: keyBase + "grayscale", valType: "number", type: "颜色设置", title: "灰度", desc: "灰度的程度. 默认0, 取值范围0-1", compType: "textarea", verify: getNumVerifyFn(0, 1), }, hueRotate: { value: 0, base: 0, key: keyBase + "hueRotate", valType: "number", type: "颜色设置", title: "色调", desc: "色调的旋转变化. 默认0, 取值范围0-360", compType: "textarea", verify: getNumVerifyFn(0, 360), }, saturate: { value: 1, base: 1, key: keyBase + "saturate", valType: "number", type: "颜色设置", title: "饱和度", desc: "饱和度的高低. 默认1, 取值范围0-∞", compType: "textarea", verify: getNumVerifyFn(0, !1), }, sepia: { value: 0.2, base: 0.2, key: keyBase + "sepia", valType: "number", type: "颜色设置", title: "深褐色", desc: "深褐色的程度. 默认0.2, 浏览器默认0, 取值范围0-1", compType: "textarea", verify: getNumVerifyFn(0, 1), }, autoDarkMode: { value: !0, base: !0, key: keyBase + "autoDarkMode", desc: "'刷新页面/打开新页面'后是否自动恢复页面的深色模式", type: "其他设置", valType: "boolean", compType: "radio", valueText: { true: "自动恢复", false: "手动开关" }, groupTitle3: "自动恢复", }, autoDarkModeWay: { value: !0, base: !0, key: keyBase + "autoDarkModeWay", title: "自动恢复显示模式的方式", desc: "左选项: 可使同一时间段内打开的每个页面都是相同显示模式\n右选项: 可使同一个页面打开后是上一次该页面的显示模式", type: "其他设置", valType: "boolean", compType: "radio", valueText: { true: "恢复上一次使用的显示模式", false: "恢复当前网页上一次的显示模式", }, }, website: { value: "*www.baidu.com*\n*www.bilibili.com*\n*message.bilibili.com*\n*space.bilibili.com*\n*weibo.com*\n*www.zhihu.com*\n*www.douyin.com*", base: "*www.baidu.com*\n*www.bilibili.com*\n*message.bilibili.com*\n*space.bilibili.com*\n*weibo.com*\n*www.zhihu.com*\n*www.douyin.com*", key: keyBase + "website", valType: "string", type: "其他设置", title: "应用的网站", desc: "以下网站可启用深色模式, 支持*通配符, 多个网站请换行书写, 仅书写*表示所有网站都可启用\n【示例】*www.bilibili.com* 可匹配B站", compType: "textarea", compH: "110px", }, onlyColorWebsite: { value: "", base: "", key: keyBase + "onlyColorWebsite", valType: "string", type: "其他设置", title: "不变为深色的网站", desc: '以下网站即使启用深色模式后也不会变为深色, 而是采用"自定义颜色"模式, 支持*通配符, 多个网站请换行书写', compType: "textarea", compH: "110px", }, noneInvertNodes: { value: '// B站\n.h .h-inner, .h-inner .avatar-container, bili-user-profile, .bili-im .avatar, .owner .to-top, #bilibili-player [role="comment"],\n// 百度\n#content_left h3.t, .cr-content [class*="opr-toplist"], .cr-content [class*="tag-common"]', base: '// B站\n.h .h-inner, .h-inner .avatar-container, bili-user-profile, .bili-im .avatar, .owner .to-top, #bilibili-player [role="comment"],\n// 百度\n#content_left h3.t, .cr-content [class*="opr-toplist"], .cr-content [class*="tag-common"]', key: keyBase + "noneInvertNodes", valType: "string", type: "其他设置", title: "不反转的元素", desc: "不进行颜色反转的元素, 每项用 , 分隔, 可书写css选择器. 以//开头表示行注释\n【可选】\nh1, h2, h3, h4, p, span, ul, li, i, svg, a, img, input, textarea, button, select, option, label, audio, video, ....", compType: "textarea", compH: "110px", verify: (newVal) => { "," === (newVal = newVal.trim().replaceAll(",", ","))[ newVal.length - 1 ] && (newVal = newVal.slice(0, -1)); return newVal .split("\n") .map((item, i) => { const t = item; return ( (item = item.trim()), 0 === i ? "/" === item[0] && "/" === item[1] ? item : t : "/" === item[0] && "/" === item[1] ? ",\n" + item : "\n" + t ); }) .join("") .replaceAll(", ,", ",") .replaceAll(",,", ","); }, }, }, }; function getCssHtml(isDark) { const settings = info.settings, r = parseInt(settings.btnSize.value / 5), btnCss = `#${info.keyBase}btn{\nbackground:#ffffff;padding:${ r - 2 }px;border-radius:${r}px;position:fixed;${ settings.btnPosition.value ? "left" : "right" }:-${ settings.btnSize.value / 2 }px;bottom:20px;z-index:1000;transition:ease 0.3s all,ease 0.5s 2s opacity;cursor:pointer;box-sizing:border-box;\n${ settings.isHiddenBtn.value ? "opacity:0" : "" }}\n#${info.keyBase}btn.dark{background:#ababab}\n#${ info.keyBase }btn:hover {${ settings.btnPosition.value ? "left:0" : "right:0" };bottom:20px;\n${ settings.isHiddenBtn.value ? "transition:ease 0.3s opacity;opacity:1" : "" }\n}\n #${info.keyBase}btn svg{display:block;fill:#addeee}\n #${ info.keyBase }btn.dark svg{fill:#ffffff}`; if (!isDark) return btnCss; const onlyColorflag = verifyWebsite(settings.onlyColorWebsite.value) || settings.onlyColor.value, invertText = onlyColorflag ? "" : `invert(${settings.invert.value})`, selectorArr = settings.noneInvertNodes.value .split("\n") .filter((item) => "/" !== (item = item.trim())[0] && "/" !== item[1]), nonoFilter = onlyColorflag ? "" : 'img,video,input,iframe,canvas,object,svg image,\n[style*="background:url"],\n[style*="background: url"],\n[style*="background-image:url"],\n[style*="background-image: url"],\n[background]{filter:invert(1)}', otherCss = onlyColorflag ? "" : `${selectorArr.join("")}{filter:invert(1)}`; return `html {\nbackground-color:#fff;\nfilter:${invertText} brightness(${settings.brightness.value}) contrast(${settings.contrast.value}) grayscale(${settings.grayscale.value}) hue-rotate(${settings.hueRotate.value}deg) saturate(${settings.saturate.value}) sepia(${settings.sepia.value});\n}\n${nonoFilter}${otherCss}${btnCss}`; } function matchUrlWithWildcard(url, pattern) { return new RegExp("^" + pattern.replace(/\*/g, ".*") + "$").test(url); } function setValue_setValue({ value, base, key, verification = null, getValue = null, setValue = null, getVal = null, setVal = null, } = {}) { getValue && (getVal = getValue), setValue && (setVal = setValue); let newVal = value, oldVal = getVal ? getVal(key) : localStorage.getItem(key); return ( void 0 !== base && null == oldVal && ((oldVal = base), "string" != typeof base && (base = JSON.stringify(base)), setVal ? setVal(key, base) : localStorage.setItem(key, base)), null !== newVal && ("function" != typeof verification || ((newVal = verification(newVal, oldVal, base)), null !== newVal)) && newVal !== oldVal && ("string" != typeof newVal && (newVal = JSON.stringify(newVal)), setVal ? setVal(key, newVal) : localStorage.setItem(key, newVal), !0) ); } function getValue({ base, key, valType = "string", isReSet = !0, getValue = null, setValue = null, getVal = null, setVal = null, } = {}) { getValue && (getVal = getValue), setValue && (setVal = setValue); let val = getVal ? getVal(key) : localStorage.getItem(key); return ( void 0 !== base && null == val && ((val = base), isReSet && ("string" != typeof base && (base = JSON.stringify(base)), setVal ? setVal(key, base) : localStorage.setItem(key, base))), (valType = valType.toLowerCase()), "string" == typeof val ? "string" === valType ? val : "boolean" === valType || "number" === valType ? JSON.parse(val) : "object" === valType ? val ? JSON.parse(val) : {} : "array" === valType ? val ? JSON.parse(val) : [] : val : val ); } function getData(settings, getVal = null, setVal = null) { (getVal = getVal || localStorage.getItem), (setVal = setVal || localStorage.setItem); for (const valName in settings) { const setting = settings[valName]; setting.value = getValue({ base: setting.base, key: setting.key, valType: setting.valType, getVal, setVal, }); } return settings; } function setDarkMode(isDark = !0, modeTxt = "") { if ( (((isDark) => { let dom = info.cssDom, isAdd = !1; if (!dom) { const id = info.keyBase + "css"; (dom = document.head.querySelector("#" + id)), dom || ((dom = document.createElement("style")), (dom.id = id), (info.cssDom = dom), (isAdd = !0)); } dom.isDark !== isDark && ((dom.innerHTML = getCssHtml(isDark)), (info.isDarkMode = isDark), (dom.isDark = isDark), isAdd && document.head.appendChild(dom)); })(isDark), document.body) ) document.body.appendChild(info.cssDom); else { const bodyObserver = new MutationObserver(() => { document.body && (bodyObserver.disconnect(), document.body.appendChild(info.cssDom)); }); bodyObserver.observe(document, { childList: !0, subtree: !0 }); } let logText, txt1; txt1 = isDark ? "开启" : "关闭"; const settings = info.settings; modeTxt || (settings.onlyColor.value && (modeTxt = `'${settings.onlyColor.valueText.true}'模式`), verifyWebsite(settings.onlyColorWebsite.value) && (modeTxt = `'${settings.onlyColor.valueText.true}'模式`)), (logText = `${txt1}${(modeTxt = modeTxt || "深色模式")}`), console.log(logText), setValue_setValue({ value: isDark, base: info.otherSettings.oldDarkMode.base, key: info.otherSettings.oldDarkMode.key, getValue: GM_getValue, setValue: GM_setValue, }), setValue_setValue({ value: isDark, base: info.otherSettings.oldDarkMode.base, key: info.otherSettings.oldDarkMode.key, }); } function setStartStopTimer() { const settings = info.settings; if (!settings.isAutoStartStop.value) return; const startTime = settings.startTime.value, stopTime = settings.stopTime.value; if (0 == +startTime && 0 == +stopTime) return; const autoStartStop = () => { const f = (function isNeedDarkMode() { const settings = info.settings, startTime = settings.startTime.value, stopTime = settings.stopTime.value; if (0 == +startTime && 0 == +stopTime) return -1; const t = new Date(), curT = 60 * t.getHours() + t.getMinutes(); let startT, stopT; if (0 != +startTime) { const tArr1 = startTime.trim().replace(":", ":").split(":"); startT = 60 * +tArr1[0] + +tArr1[1]; } if (0 != +stopTime) { const tArr2 = stopTime.trim().replace(":", ":").split(":"); stopT = 60 * +tArr2[0] + +tArr2[1]; } if (settings.startStopWay.value) return curT === startT || (curT !== stopT && -1); if (0 == +startTime) return !(curT >= stopT) && -1; if (0 == +stopTime) return curT >= startT || -1; const f = (function isTimeInRange(t, startTime, stopTime, rangeLimit) { const curH = t.getHours(), curMin = t.getMinutes(), startText = startTime.trim().replace(":", ":"), stopText = stopTime.trim().replace(":", ":"), tArr1 = startText.split(":"), tArr2 = stopText.split(":"), h1 = +tArr1[0], h2 = +tArr2[0], startT = 60 * h1 + +tArr1[1], stopT = 60 * h2 + +tArr2[1], curT = 60 * curH + curMin; if (startT < stopT) if (rangeLimit[0]) { if (rangeLimit[1]) { if (curT >= startT && curT <= stopT) return !0; } else if (curT >= startT && curT < stopT) return !0; } else if (rangeLimit[1]) { if (curT > startT && curT <= stopT) return !0; } else if (curT > startT && curT < stopT) return !0; if (startT > stopT) if (rangeLimit[0]) { if (rangeLimit[1]) { if ( (curT >= startT && curT < 1440) || (curT <= stopT && curT >= 0) ) return !0; } else if ( (curT >= startT && curT < 1440) || (curT < stopT && curT >= 0) ) return !0; } else if (rangeLimit[1]) { if ( (curT > startT && curT < 1440) || (curT <= stopT && curT >= 0) ) return !0; } else if ( (curT > startT && curT < 1440) || (curT < stopT && curT >= 0) ) return !0; return !1; })(t, startTime, stopTime, [1, 0]); return f; })(); -1 !== f && (settings.isShowTips.value && GM_notification({ title: "深色模式", text: `定时${f ? "开启" : "关闭"}深色模式`, timeout: 3e3, }), setDarkMode(f)); }; autoStartStop(), info.timer && clearInterval(info.timer), (info.timer = setInterval(autoStartStop, info.interval)); } function verifyWebsite(websiteText, url) { if (!websiteText) return !1; url = url || location.href; return websiteText .trim() .split("\n") .some((item) => matchUrlWithWildcard(url, item)); } function updateShow() { getData(info.settings, GM_getValue, GM_setValue), info.cssDom ? (info.cssDom.innerHTML = getCssHtml(info.isDarkMode)) : info.isDarkMode ? (setDarkMode(!1), setDarkMode(!0)) : setDarkMode(!1), createDarkModeBtn(), setStartStopTimer(); } function createDarkModeBtn() { const settings = info.settings; if (info.modeBtn) { const btn = info.modeBtn; return ( (btn.style.width = settings.btnSize.value + "px"), (btn.style.height = settings.btnSize.value + "px"), void (info.isDarkMode ? btn.classList.add("dark") : btn.classList.remove("dark")) ); } const html = `