@@ -552,6 +552,24 @@ let CurrentUsername = document.querySelector("#profile").innerText;
552552CurrentUsername = CurrentUsername . replaceAll ( / [ ^ a - z A - Z 0 - 9 ] / g, "" ) ;
553553let IsAdmin = AdminUserList . indexOf ( CurrentUsername ) !== - 1 ;
554554
555+ const prefersDark = window . matchMedia ( "(prefers-color-scheme: dark)" ) ;
556+ const applyTheme = ( theme ) => {
557+ document . querySelector ( "html" ) . setAttribute ( "data-bs-theme" , theme ) ;
558+ localStorage . setItem ( "UserScript-Setting-DarkMode" , theme === "dark" ? "true" : "false" ) ;
559+ } ;
560+ const applySystemTheme = ( e ) => applyTheme ( e . matches ? "dark" : "light" ) ;
561+ let initTheme = ( ) => {
562+ const saved = localStorage . getItem ( "UserScript-Setting-Theme" ) || "auto" ;
563+ if ( saved === "auto" ) {
564+ applyTheme ( prefersDark . matches ? "dark" : "light" ) ;
565+ prefersDark . addEventListener ( "change" , applySystemTheme ) ;
566+ } else {
567+ applyTheme ( saved ) ;
568+ prefersDark . removeEventListener ( "change" , applySystemTheme ) ;
569+ }
570+ } ;
571+ initTheme ( ) ;
572+
555573
556574class NavbarStyler {
557575 constructor ( ) {
@@ -1359,7 +1377,32 @@ async function main() {
13591377 } else if ( Data [ i ] . Type == "D" ) {
13601378 Row . classList . add ( "list-group-item-danger" ) ;
13611379 }
1362- if ( Data [ i ] . Children == undefined ) {
1380+ if ( Data [ i ] . ID == "Theme" ) {
1381+ let Label = document . createElement ( "label" ) ;
1382+ Label . classList . add ( "me-2" ) ;
1383+ Label . htmlFor = "UserScript-Setting-Theme" ;
1384+ Label . innerText = Data [ i ] . Name ;
1385+ Row . appendChild ( Label ) ;
1386+ let Select = document . createElement ( "select" ) ;
1387+ Select . classList . add ( "form-select" , "form-select-sm" , "w-auto" , "d-inline" ) ;
1388+ Select . id = "UserScript-Setting-Theme" ;
1389+ [
1390+ [ "light" , "亮色" ] ,
1391+ [ "dark" , "暗色" ] ,
1392+ [ "auto" , "跟随系统" ]
1393+ ] . forEach ( opt => {
1394+ let option = document . createElement ( "option" ) ;
1395+ option . value = opt [ 0 ] ;
1396+ option . innerText = opt [ 1 ] ;
1397+ Select . appendChild ( option ) ;
1398+ } ) ;
1399+ Select . value = localStorage . getItem ( "UserScript-Setting-Theme" ) || "auto" ;
1400+ Select . addEventListener ( "change" , ( ) => {
1401+ localStorage . setItem ( "UserScript-Setting-Theme" , Select . value ) ;
1402+ initTheme ( ) ;
1403+ } ) ;
1404+ Row . appendChild ( Select ) ;
1405+ } else if ( Data [ i ] . Children == undefined ) {
13631406 let CheckBox = document . createElement ( "input" ) ;
13641407 CheckBox . classList . add ( "form-check-input" ) ;
13651408 CheckBox . classList . add ( "me-1" ) ;
@@ -1417,7 +1460,7 @@ async function main() {
14171460 } , { "ID" : "ResetType" , "Type" : "F" , "Name" : "重新排版*" } , {
14181461 "ID" : "AddColorText" , "Type" : "A" , "Name" : "增加彩色文字"
14191462 } , { "ID" : "AddUnits" , "Type" : "A" , "Name" : "状态界面内存与耗时添加单位" } , {
1420- "ID" : "DarkMode " , "Type" : "A" , "Name" : "使用暗色模式 "
1463+ "ID" : "Theme " , "Type" : "A" , "Name" : "界面主题 "
14211464 } , { "ID" : "AddAnimation" , "Type" : "A" , "Name" : "增加动画" } , {
14221465 "ID" : "ReplaceYN" , "Type" : "F" , "Name" : "题目前状态提示替换为好看的图标"
14231466 } , { "ID" : "RemoveAlerts" , "Type" : "D" , "Name" : "去除多余反复的提示" } , {
0 commit comments