From 25a1dad23e775af04c1d657970685dbdc091d98c Mon Sep 17 00:00:00 2001 From: yogstation13-bot Date: Mon, 8 Apr 2019 09:13:33 +0200 Subject: [PATCH] [MIRROR] Adds toggleable darkmode to the game! (#4857) * Adds toggleable darkmode to the game! (#43072) --- code/__DEFINES/misc.dm | 2 +- code/controllers/subsystem/job.dm | 2 +- code/controllers/subsystem/ticker.dm | 6 +- .../mecha/equipment/tools/medical_tools.dm | 18 +- code/modules/admin/verbs/adminpm.dm | 61 +-- code/modules/admin/verbs/randomverbs.dm | 2 +- code/modules/client/client_procs.dm | 4 +- code/modules/client/darkmode.dm | 128 ++++++ code/modules/client/preferences_toggles.dm | 2 +- code/modules/goonchat/browserOutput.dm | 10 + .../browserassets/css/browserOutput.css | 134 +++--- .../browserassets/css/browserOutput_white.css | 435 ++++++++++++++++++ .../browserassets/html/browserOutput.html | 5 +- .../browserassets/js/browserOutput.js | 24 +- code/modules/shuttle/ferry.dm | 2 +- interface/skin.dmf | 47 +- tgstation.dme | 1 + yogstation.dme | 1 + 18 files changed, 762 insertions(+), 122 deletions(-) create mode 100644 code/modules/client/darkmode.dm create mode 100644 code/modules/goonchat/browserassets/css/browserOutput_white.css diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index d33c2c9a1f38..b055cad5f541 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -220,7 +220,7 @@ GLOBAL_LIST_INIT(ghost_others_options, list(GHOST_OTHERS_SIMPLE, GHOST_OTHERS_DE GLOBAL_LIST_INIT(pda_styles, list(MONO, VT, ORBITRON, SHARE)) //Color Defines -#define OOC_COLOR "#002eb8" +#define OOC_COLOR "#386aff" ///////////////////////////////////// // atom.appearence_flags shortcuts // diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index 405caa3a544b..4cf19c2dda75 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -442,7 +442,7 @@ SUBSYSTEM_DEF(job) to_chat(M, "Space Law has been updated! Click here to view the updates.") //YOGS end if(CONFIG_GET(number/minimal_access_threshold)) - to_chat(M, "As this station was initially staffed with a [CONFIG_GET(flag/jobs_have_minimal_access) ? "full crew, only your job's necessities" : "skeleton crew, additional access may"] have been added to your ID card.") + to_chat(M, "As this station was initially staffed with a [CONFIG_GET(flag/jobs_have_minimal_access) ? "full crew, only your job's necessities" : "skeleton crew, additional access may"] have been added to your ID card.") if(ishuman(H)) var/mob/living/carbon/human/wageslave = H to_chat(M, "Your account ID is [wageslave.account_id].") diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 880aaa48c310..15156dbab3eb 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -205,7 +205,7 @@ SUBSYSTEM_DEF(ticker) if(GLOB.secret_force_mode != "secret") var/datum/game_mode/smode = config.pick_mode(GLOB.secret_force_mode) if(!smode.can_start()) - message_admins("\blue Unable to force secret [GLOB.secret_force_mode]. [smode.required_players] players and [smode.required_enemies] eligible antagonists needed.") + message_admins("Unable to force secret [GLOB.secret_force_mode]. [smode.required_players] players and [smode.required_enemies] eligible antagonists needed.") else mode = smode @@ -275,7 +275,7 @@ SUBSYSTEM_DEF(ticker) round_start_time = world.time SSdbcore.SetRoundStart() - to_chat(world, "Welcome to [station_name()], enjoy your stay!") + to_chat(world, "Welcome to [station_name()], enjoy your stay!") SEND_SOUND(world, sound('sound/ai/welcome.ogg')) current_state = GAME_STATE_PLAYING @@ -283,7 +283,7 @@ SUBSYSTEM_DEF(ticker) Master.SetRunLevel(RUNLEVEL_GAME) if(SSevents.holidays) - to_chat(world, "and...") + to_chat(world, "and...") for(var/holidayname in SSevents.holidays) var/datum/holiday/holiday = SSevents.holidays[holidayname] to_chat(world, "

[holiday.greet()]

") diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm index 259e016da8c3..008bf5cbb3a0 100644 --- a/code/game/mecha/equipment/tools/medical_tools.dm +++ b/code/game/mecha/equipment/tools/medical_tools.dm @@ -159,15 +159,15 @@ t1 = "*dead*" else t1 = "Unknown" - return {"Health: [patient.stat > 1 ? "[t1]" : "[patient.health]% ([t1])"]
- Core Temperature: [patient.bodytemperature-T0C]°C ([patient.bodytemperature*1.8-459.67]°F)
- Brute Damage: [patient.getBruteLoss()]%
- Respiratory Damage: [patient.getOxyLoss()]%
- Toxin Content: [patient.getToxLoss()]%
- Burn Severity: [patient.getFireLoss()]%
- [patient.getCloneLoss() ? "Subject appears to have cellular damage." : ""]
- [patient.getBrainLoss() ? "Significant brain damage detected." : ""]
- [length(patient.get_traumas()) ? "Brain Traumas detected." : ""]
+ return {"Health: [patient.stat > 1 ? "[t1]" : "[patient.health]% ([t1])"]
+ Core Temperature: [patient.bodytemperature-T0C]°C ([patient.bodytemperature*1.8-459.67]°F)
+ Brute Damage: [patient.getBruteLoss()]%
+ Respiratory Damage: [patient.getOxyLoss()]%
+ Toxin Content: [patient.getToxLoss()]%
+ Burn Severity: [patient.getFireLoss()]%
+ [patient.getCloneLoss() ? "Subject appears to have cellular damage." : ""]
+ [patient.getBrainLoss() ? "Significant brain damage detected." : ""]
+ [length(patient.get_traumas()) ? "Brain Traumas detected." : ""]
"} /obj/item/mecha_parts/mecha_equipment/medical/sleeper/proc/get_patient_reagents() diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index 6999bdf22f49..963e3293550d 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -6,7 +6,7 @@ set category = null set name = "Admin PM Mob" if(!holder) - to_chat(src, "Error: Admin-PM-Context: Only administrators may use this command.") + to_chat(src, "Error: Admin-PM-Context: Only administrators may use this command.") return if(!ismob(M)) //yogs start return @@ -23,7 +23,7 @@ set category = "Admin" set name = "Admin PM" if(!holder) - to_chat(src, "Error: Admin-PM-Panel: Only administrators may use this command.") + to_chat(src, "Error: Admin-PM-Panel: Only administrators may use this command.") return var/list/client/targets[0] for(var/client/T) @@ -42,7 +42,7 @@ /client/proc/cmd_ahelp_reply(whom) if(prefs.muted & MUTE_ADMINHELP) - to_chat(src, "Error: Admin-PM: You are unable to use admin PM-s (muted).") + to_chat(src, "Error: Admin-PM: You are unable to use admin PM-s (muted).") return var/client/C if(istext(whom)) @@ -53,7 +53,7 @@ C = whom if(!C) if(holder) - to_chat(src, "Error: Admin-PM: Client not found.") + to_chat(src, "Error: Admin-PM: Client not found.") return var/datum/admin_help/AH = C.current_ticket @@ -70,12 +70,12 @@ //Fetching a message if needed. src is the sender and C is the target client /client/proc/cmd_admin_pm(whom, msg) if(prefs.muted & MUTE_ADMINHELP) - to_chat(src, "Error: Admin-PM: You are unable to use admin PM-s (muted).") + to_chat(src, "Error: Admin-PM: You are unable to use admin PM-s (muted).") return if(!holder && !current_ticket) //no ticket? https://www.youtube.com/watch?v=iHSPf6x1Fdo - to_chat(src, "You can no longer reply to this ticket, please open another one by using the Adminhelp verb if need be.") - to_chat(src, "Message: [msg]") + to_chat(src, "You can no longer reply to this ticket, please open another one by using the Adminhelp verb if need be.") + to_chat(src, "Message: [msg]") return var/client/recipient @@ -100,14 +100,14 @@ if(!msg) return if(holder) - to_chat(src, "Error: Use the admin IRC channel, nerd.") + to_chat(src, "Error: Use the admin IRC channel, nerd.") return else if(!recipient) if(holder) - to_chat(src, "Error: Admin-PM: Client not found.") + to_chat(src, "Error: Admin-PM: Client not found.") if(msg) to_chat(src, msg) return @@ -123,12 +123,12 @@ return if(prefs.muted & MUTE_ADMINHELP) - to_chat(src, "Error: Admin-PM: You are unable to use admin PM-s (muted).") + to_chat(src, "Error: Admin-PM: You are unable to use admin PM-s (muted).") return if(!recipient) if(holder) - to_chat(src, "Error: Admin-PM: Client not found.") + to_chat(src, "Error: Admin-PM: Client not found.") else current_ticket.MessageNoRecipient(msg) return @@ -157,24 +157,27 @@ else if(recipient.holder) if(holder) //both are admins - to_chat(recipient, "Admin PM from-[key_name(src, recipient, 1)]: [keywordparsedmsg]") - to_chat(src, "Admin PM to-[key_name(recipient, src, 1)]: [keywordparsedmsg]") + to_chat(recipient, "Admin PM from-[key_name(src, recipient, 1)]: [keywordparsedmsg]") + to_chat(src, "Admin PM to-[key_name(recipient, src, 1)]: [keywordparsedmsg]") //omg this is dumb, just fill in both their tickets - admin_ticket_log(src, msg, FALSE) // yogs - Yog Tickets + // yogs start - Yog Tickets + admin_ticket_log(src, msg, FALSE) if(recipient.current_ticket && !recipient.current_ticket.handling_admin) recipient.current_ticket.Administer(src) + // yogs end - Yog Tickets if(recipient != src) //reeee admin_ticket_log(recipient, msg, FALSE) // yogs - Yog Tickets else //recipient is an admin but sender is not + //YOGS START -- Yogs Tickets if(!current_ticket) - to_chat(src, "Ticket closed, please make a new one before trying to contact admins!") // yogs - Yog Tickets + to_chat(src, "Ticket closed, please make a new one before trying to contact admins!") return - admin_ticket_log(src, keywordparsedmsg, FALSE) // yogs - Yog Tickets - to_chat(recipient, "Reply PM from-[key_name(src, recipient, 1)]: [keywordparsedmsg]") // yogs - Yog Tickets - to_chat(src, "-- [key_name(src, null, 0)] -> Admins: [msg]") // yogs - Yog Tickets - + admin_ticket_log(src, keywordparsedmsg, FALSE) + to_chat(recipient, "Reply PM from-[key_name(src, recipient, 1)]: [keywordparsedmsg]") + to_chat(src, "-- [key_name(src, null, 0)] -> Admins: [msg]") + //YOGS END //play the receiving admin the adminhelp sound (if they have them enabled) if(recipient.prefs.toggles & SOUND_ADMINHELP) SEND_SOUND(recipient, sound('sound/effects/adminhelp.ogg')) @@ -186,10 +189,10 @@ if(!recipient.current_ticket.handling_admin) recipient.current_ticket.Administer(src) // yogs - Yog Tickets - to_chat(recipient, "-- Administrator private message --") - to_chat(recipient, "Admin PM from-[key_name(src, recipient, 0)]: [msg]") - to_chat(recipient, "Click on the administrator's name to reply.") - to_chat(src, "Admin PM to-[key_name(recipient, src, 1)]: [msg]") + to_chat(recipient, "-- Administrator private message --") + to_chat(recipient, "Admin PM from-[key_name(src, recipient, 0)]: [msg]") + to_chat(recipient, "Click on the administrator's name to reply.") + to_chat(src, "Admin PM to-[key_name(recipient, src, 1)]: [msg]") admin_ticket_log(recipient, msg, FALSE) // yogs - Yog Tickets @@ -210,20 +213,20 @@ return else //neither are admins - to_chat(src, "Error: Admin-PM: Non-admin to non-admin PM communication is forbidden.") + to_chat(src, "Error: Admin-PM: Non-admin to non-admin PM communication is forbidden.") return if(irc) log_admin_private("PM: [key_name(src)]->IRC: [rawmsg]") for(var/client/X in GLOB.admins) - to_chat(X, "PM: [key_name(src, X, 0)]->IRC: [keywordparsedmsg]") + to_chat(X, "PM: [key_name(src, X, 0)]->IRC: [keywordparsedmsg]") else window_flash(recipient, ignorepref = TRUE) log_admin_private("PM: [key_name(src)]->[key_name(recipient)]: [rawmsg]") //we don't use message_admins here because the sender/receiver might get it too for(var/client/X in GLOB.admins) if(X.key!=key && X.key!=recipient.key) //check client/X is an admin and isn't the sender or recipient - to_chat(X, "PM: [key_name(src, X, 0)]->[key_name(recipient, X, 0)]: [keywordparsedmsg]" ) + to_chat(X, "PM: [key_name(src, X, 0)]->[key_name(recipient, X, 0)]: [keywordparsedmsg]" ) @@ -305,9 +308,9 @@ log_admin_private("IRC PM: [sender] -> [key_name(C)] : [msg]") msg = emoji_parse(msg) - to_chat(C, "-- Administrator private message --") - to_chat(C, "Admin PM from-[adminname]: [msg]") - to_chat(C, "Click on the administrator's name to reply.") + to_chat(C, "-- Administrator private message --") + to_chat(C, "Admin PM from-[adminname]: [msg]") + to_chat(C, "Click on the administrator's name to reply.") admin_ticket_log(C, msg) // yogs - Yog Tickets diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 8517bb01b098..edd8ce8cde64 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -298,7 +298,7 @@ if(candidates.len) ckey = input("Pick the player you want to respawn as a xeno.", "Suitable Candidates") as null|anything in candidates else - to_chat(usr, "Error: create_xeno(): no suitable candidates.") + to_chat(usr, "Error: create_xeno(): no suitable candidates.") if(!istext(ckey)) return 0 diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index b5ae2943a218..f03cb6934d82 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -233,10 +233,10 @@ GLOBAL_LIST_EMPTY(external_rsc_urls) alert_mob_dupe_login = TRUE if(matches) if(C) - message_admins("Notice: [key_name_admin(src)] has the same [matches] as [key_name_admin(C)].") + message_admins("Notice: [key_name_admin(src)] has the same [matches] as [key_name_admin(C)].") log_access("Notice: [key_name(src)] has the same [matches] as [key_name(C)].") else - message_admins("Notice: [key_name_admin(src)] has the same [matches] as [key_name_admin(C)] (no longer logged in). ") + message_admins("Notice: [key_name_admin(src)] has the same [matches] as [key_name_admin(C)] (no longer logged in). ") log_access("Notice: [key_name(src)] has the same [matches] as [key_name(C)] (no longer logged in).") if(GLOB.player_details[ckey]) diff --git a/code/modules/client/darkmode.dm b/code/modules/client/darkmode.dm new file mode 100644 index 000000000000..74e795e34573 --- /dev/null +++ b/code/modules/client/darkmode.dm @@ -0,0 +1,128 @@ +//Darkmode preference by Kmc2000// + +/* +This lets you switch chat themes by using winset and CSS loading, you must relog to see this change (or rebuild your browseroutput datum) + +Things to note: +If you change ANYTHING in interface/skin.dmf you need to change it here: +Format: +winset(src, "window as appears in skin.dmf after elem", "var to change = currentvalue;var to change = desired value") + +How this works: +I've added a function to browseroutput.js which registers a cookie for darkmode and swaps the chat accordingly. You can find the button to do this under the "cog" icon next to the ping button (top right of chat) +This then swaps the window theme automatically + +Thanks to spacemaniac and mcdonald for help with the JS side of this. + +*/ + +/client/proc/force_white_theme() //There's no way round it. We're essentially changing the skin by hand. It's painful but it works, and is the way Lummox suggested. + //Main windows + winset(src, "infowindow", "background-color = #2c2f33;background-color = none") + winset(src, "infowindow", "text-color = #99aab5;text-color = #000000") + winset(src, "info", "background-color = #272727;background-color = none") + winset(src, "info", "text-color = #99aab5;text-color = #000000") + winset(src, "browseroutput", "background-color = #272727;background-color = none") + winset(src, "browseroutput", "text-color = #99aab5;text-color = #000000") + winset(src, "outputwindow", "background-color = #272727;background-color = none") + winset(src, "outputwindow", "text-color = #99aab5;text-color = #000000") + winset(src, "mainwindow", "background-color = #2c2f33;background-color = none") + winset(src, "split", "background-color = #272727;background-color = none") + //Buttons + winset(src, "changelog", "background-color = #494949;background-color = none") + winset(src, "changelog", "text-color = #99aab5;text-color = #000000") + winset(src, "rules", "background-color = #494949;background-color = none") + winset(src, "rules", "text-color = #99aab5;text-color = #000000") + winset(src, "wiki", "background-color = #494949;background-color = none") + winset(src, "wiki", "text-color = #99aab5;text-color = #000000") + winset(src, "forum", "background-color = #494949;background-color = none") + winset(src, "forum", "text-color = #99aab5;text-color = #000000") + winset(src, "github", "background-color = #3a3a3a;background-color = none") + winset(src, "github", "text-color = #99aab5;text-color = #000000") + winset(src, "report-issue", "background-color = #492020;background-color = none") + winset(src, "report-issue", "text-color = #99aab5;text-color = #000000") + //Status and verb tabs + winset(src, "output", "background-color = #272727;background-color = none") + winset(src, "output", "text-color = #99aab5;text-color = #000000") + winset(src, "outputwindow", "background-color = #272727;background-color = none") + winset(src, "outputwindow", "text-color = #99aab5;text-color = #000000") + winset(src, "statwindow", "background-color = #272727;background-color = none") + winset(src, "statwindow", "text-color = #eaeaea;text-color = #000000") + winset(src, "stat", "background-color = #2c2f33;background-color = #FFFFFF") + winset(src, "stat", "tab-background-color = #272727;tab-background-color = none") + winset(src, "stat", "text-color = #99aab5;text-color = #000000") + winset(src, "stat", "tab-text-color = #99aab5;tab-text-color = #000000") + //Say, OOC, me Buttons etc. + winset(src, "saybutton", "background-color = #272727;background-color = none") + winset(src, "saybutton", "text-color = #99aab5;text-color = #000000") + winset(src, "oocbutton", "background-color = #272727;background-color = none") + winset(src, "oocbutton", "text-color = #99aab5;text-color = #000000") + winset(src, "mebutton", "background-color = #272727;background-color = none") + winset(src, "mebutton", "text-color = #99aab5;text-color = #000000") + winset(src, "asset_cache_browser", "background-color = #272727;background-color = none") + winset(src, "asset_cache_browser", "text-color = #99aab5;text-color = #000000") + winset(src, "tooltip", "background-color = #272727;background-color = none") + winset(src, "tooltip", "text-color = #99aab5;text-color = #000000") + +/client/proc/force_dark_theme() //Inversely, if theyre using white theme and want to swap to the superior dark theme, let's get WINSET() ing + //Main windows + winset(src, "infowindow", "background-color = none;background-color = #2c2f33") + winset(src, "infowindow", "text-color = #000000;text-color = #99aab5") + winset(src, "info", "background-color = none;background-color = #272727") + winset(src, "info", "text-color = #000000;text-color = #99aab5") + winset(src, "browseroutput", "background-color = none;background-color = #272727") + winset(src, "browseroutput", "text-color = #000000;text-color = #99aab5") + winset(src, "outputwindow", "background-color = none;background-color = #272727") + winset(src, "outputwindow", "text-color = #000000;text-color = #99aab5") + winset(src, "mainwindow", "background-color = none;background-color = #2c2f33") + winset(src, "split", "background-color = none;background-color = #272727") + //Buttons + winset(src, "changelog", "background-color = none;background-color = #494949") + winset(src, "changelog", "text-color = #000000;text-color = #99aab5") + winset(src, "rules", "background-color = none;background-color = #494949") + winset(src, "rules", "text-color = #000000;text-color = #99aab5") + winset(src, "wiki", "background-color = none;background-color = #494949") + winset(src, "wiki", "text-color = #000000;text-color = #99aab5") + winset(src, "forum", "background-color = none;background-color = #494949") + winset(src, "forum", "text-color = #000000;text-color = #99aab5") + winset(src, "github", "background-color = none;background-color = #3a3a3a") + winset(src, "github", "text-color = #000000;text-color = #99aab5") + winset(src, "report-issue", "background-color = none;background-color = #492020") + winset(src, "report-issue", "text-color = #000000;text-color = #99aab5") + //Status and verb tabs + winset(src, "output", "background-color = none;background-color = #272727") + winset(src, "output", "text-color = #000000;text-color = #99aab5") + winset(src, "outputwindow", "background-color = none;background-color = #272727") + winset(src, "outputwindow", "text-color = #000000;text-color = #99aab5") + winset(src, "statwindow", "background-color = none;background-color = #272727") + winset(src, "statwindow", "text-color = #000000;text-color = #eaeaea") + winset(src, "stat", "background-color = #FFFFFF;background-color = #2c2f33") + winset(src, "stat", "tab-background-color = none;tab-background-color = #272727") + winset(src, "stat", "text-color = #000000;text-color = #99aab5") + winset(src, "stat", "tab-text-color = #000000;tab-text-color = #99aab5") + //Say, OOC, me Buttons etc. + winset(src, "saybutton", "background-color = none;background-color = #272727") + winset(src, "saybutton", "text-color = #000000;text-color = #99aab5") + winset(src, "oocbutton", "background-color = none;background-color = #272727") + winset(src, "oocbutton", "text-color = #000000;text-color = #99aab5") + winset(src, "mebutton", "background-color = none;background-color = #272727") + winset(src, "mebutton", "text-color = #000000;text-color = #99aab5") + winset(src, "asset_cache_browser", "background-color = none;background-color = #272727") + winset(src, "asset_cache_browser", "text-color = #000000;text-color = #99aab5") + winset(src, "tooltip", "background-color = none;background-color = #272727") + winset(src, "tooltip", "text-color = #000000;text-color = #99aab5") + +/datum/asset/simple/goonchat + verify = FALSE + assets = list( + "json2.min.js" = 'code/modules/goonchat/browserassets/js/json2.min.js', + "errorHandler.js" = 'code/modules/goonchat/browserassets/js/errorHandler.js', + "browserOutput.js" = 'code/modules/goonchat/browserassets/js/browserOutput.js', + "fontawesome-webfont.eot" = 'tgui/assets/fonts/fontawesome-webfont.eot', + "fontawesome-webfont.svg" = 'tgui/assets/fonts/fontawesome-webfont.svg', + "fontawesome-webfont.ttf" = 'tgui/assets/fonts/fontawesome-webfont.ttf', + "fontawesome-webfont.woff" = 'tgui/assets/fonts/fontawesome-webfont.woff', + "font-awesome.css" = 'code/modules/goonchat/browserassets/css/font-awesome.css', + "browserOutput.css" = 'code/modules/goonchat/browserassets/css/browserOutput.css', + "browserOutput_white.css" = 'code/modules/goonchat/browserassets/css/browserOutput_white.css', + ) \ No newline at end of file diff --git a/code/modules/client/preferences_toggles.dm b/code/modules/client/preferences_toggles.dm index b92f266d8570..41989900ebb9 100644 --- a/code/modules/client/preferences_toggles.dm +++ b/code/modules/client/preferences_toggles.dm @@ -454,4 +454,4 @@ GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS to_chat(src, "Custom Asay color is currently disabled by the server.") return prefs.asaycolor = initial(prefs.asaycolor) - prefs.save_preferences() + prefs.save_preferences() \ No newline at end of file diff --git a/code/modules/goonchat/browserOutput.dm b/code/modules/goonchat/browserOutput.dm index fe9e05f56462..a68a18188f0d 100644 --- a/code/modules/goonchat/browserOutput.dm +++ b/code/modules/goonchat/browserOutput.dm @@ -97,6 +97,10 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("tmp/iconCache.sav")) //Cache of ico // yogs end if("setMusicVolume") data = setMusicVolume(arglist(params)) + if("swaptodarkmode") + swaptodarkmode() + if("swaptolightmode") + swaptolightmode() if(data) ehjax_send(data = data) @@ -261,3 +265,9 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("tmp/iconCache.sav")) //Cache of ico // url_encode it TWICE, this way any UTF-8 characters are able to be decoded by the Javascript. C << output(url_encode(url_encode(message)), "browseroutput:output") + +/datum/chatOutput/proc/swaptolightmode() //Dark mode light mode stuff. Yell at KMC if this breaks! (See darkmode.dm for documentation) + owner.force_white_theme() + +/datum/chatOutput/proc/swaptodarkmode() + owner.force_dark_theme() \ No newline at end of file diff --git a/code/modules/goonchat/browserassets/css/browserOutput.css b/code/modules/goonchat/browserassets/css/browserOutput.css index 9c1d23197baf..4eb11bf151a0 100644 --- a/code/modules/goonchat/browserassets/css/browserOutput.css +++ b/code/modules/goonchat/browserassets/css/browserOutput.css @@ -7,16 +7,20 @@ html, body { padding: 0; margin: 0; height: 100%; - color: #000000; + color: #99aab5; } body { - background: #fff; + background: #2c2f33; font-family: Verdana, sans-serif; font-size: 9pt; + font-color: #99aab5; line-height: 1.2; overflow-x: hidden; overflow-y: scroll; - word-wrap: break-word; + word-wrap: break-word; + scrollbar-face-color:#1A1A1A; + scrollbar-track-color:#2c2f33; + scrollbar-highlight-color:#2c2f33; } em { @@ -38,7 +42,6 @@ img.icon { vertical-align: bottom; } - .r:before { /* "repeated" badge class for combined messages */ content: 'x'; } @@ -56,9 +59,9 @@ img.icon { border-radius: 10px; } -a {color: #0000ff;} -a.visited {color: #ff00ff;} -a:visited {color: #ff00ff;} +a {color: #397ea5;} +a.visited {color: #7c00e6;} +a:visited {color: #7c00e6;} a.popt {text-decoration: none;} /***************************************** @@ -101,7 +104,7 @@ a.popt {text-decoration: none;} #ping { position: fixed; top: 0; - right: 80px; + right: 115px; width: 45px; background: #ddd; height: 30px; @@ -242,9 +245,9 @@ a.popt {text-decoration: none;} ******************************************/ /* MOTD */ -.motd {color: #638500; font-family: Verdana, sans-serif;} -.motd h1, .motd h2, .motd h3, .motd h4, .motd h5, .motd h6 {color: #638500; text-decoration: underline;} -.motd a, .motd a:link, .motd a:visited, .motd a:active, .motd a:hover {color: #638500;} +.motd {color: #99aab5; font-family: Verdana, sans-serif;} +.motd h1, .motd h2, .motd h3, .motd h4, .motd h5, .motd h6 {color: #99aab5; text-decoration: underline;} +.motd a, .motd a:link, .motd a:visited, .motd a:active, .motd a:hover {color: #99aab5;} /* ADD HERE FOR BOLD */ .bold, .name, .prefix, .ooc, .looc, .adminooc, .admin, .medal, .yell {font-weight: bold;} @@ -255,85 +258,85 @@ a.popt {text-decoration: none;} /* OUTPUT COLORS */ .highlight {background: yellow;} -h1, h2, h3, h4, h5, h6 {color: #0000ff;font-family: Georgia, Verdana, sans-serif;} -h1.alert, h2.alert {color: #000000;} +h1, h2, h3, h4, h5, h6 {color: #99aab5;font-family: Georgia, Verdana, sans-serif;} +h1.alert, h2.alert {color: #99aab5;} em {font-style: normal; font-weight: bold;} .ooc { font-weight: bold;} .adminobserverooc {color: #0099cc; font-weight: bold;} -.adminooc {color: #700038; font-weight: bold;} +.adminooc {color: #3d5bc3; font-weight: bold;} .looc {color: #63b2f2; font-weight: bold;} /* yogs - LOOC */ .adminsay {color: #996600; font-weight: bold;} /*yogs - changes asay colour back*/ -.admin {color: #386aff; font-weight: bold;} +.admin {color: #3d5bc3; font-weight: bold;} .name { font-weight: bold;} .say {} -.deadsay {color: #5c00e6;} +.deadsay {color: #7c00e6;} .binarysay {color: #20c20e; background-color: #000000; display: block;} .binarysay a {color: #00ff00;} .binarysay a:active, .binarysay a:visited {color: #88ff88;} .radio {color: #839e85;} /* yogs -- general radio usage, noncommon*/ .commonradio {color: #008000;} /* yogs -- Standard green radio chatter, for common only*/ -.sciradio {color: #993399;} +.sciradio {color: #7c00e6;} .comradio {color: #204090;} /* yogs */ .secradio {color: #a30000;} -.medradio {color: #337296;} -.engradio {color: #fb5613;} -.suppradio {color: #a8732b;} -.servradio {color: #6eaa2c;} +.medradio {color: #397ea5;} +.engradio {color: #c75f35;} +.suppradio {color: #8b6532;} +.servradio {color: #577c2d;} .syndradio {color: #6d3f40;} -.centcomradio {color: #686868;} -.aiprivradio {color: #ff00ff;} +.centcomradio {color: #2b677e;} +.aiprivradio {color: #811981;} .redteamradio {color: #ff0000;} .blueteamradio {color: #0000ff;} .yell { font-weight: bold;} -.alert {color: #ff0000;} -h1.alert, h2.alert {color: #000000;} +.alert {color: #c51e1e;} +h1.alert, h2.alert {color: #99aab5;} .emote { font-style: italic;} .selecteddna {color: #ffffff; background-color: #001B1B} -.attack {color: #ff0000;} -.disarm {color: #990000;} -.passive {color: #660000;} +.attack {color: #c51e1e;} +.disarm {color: #780202;} +.passive {color: #510000;} -.userdanger {color: #ff0000; font-weight: bold; font-size: 24px;} -.danger {color: #ff0000;} -.warning {color: #ff0000; font-style: italic;} -.boldwarning {color: #ff0000; font-style: italic; font-weight: bold} -.announce {color: #228b22; font-weight: bold;} -.boldannounce {color: #ff0000; font-weight: bold;} -.greenannounce {color: #00ff00; font-weight: bold;} +.userdanger {color: #c51e1e; font-weight: bold; font-size: 24px;} +.danger {color: #c51e1e;} +.warning {color: #c51e1e; font-style: italic;} +.boldwarning {color: #c51e1e; font-style: italic; font-weight: bold} +.announce {color: #c51e1e; font-weight: bold;} +.boldannounce {color: #c51e1e; font-weight: bold;} +.greenannounce {color: #059223; font-weight: bold;} .rose {color: #ff5050;} -.info {color: #0000CC;} -.notice {color: #000099;} -.boldnotice {color: #000099; font-weight: bold;} -.adminnotice {color: #0000ff;} -.adminhelp {color: #ff0000; font-weight: bold;} -.unconscious {color: #0000ff; font-weight: bold;} +.info {color: #3d5bc3;} +.notice {color: #3d5bc3;} +.boldnotice {color: #3d5bc3; font-weight: bold;} +.adminnotice {color: #3d5bc3;} +.adminhelp {color: #c51e1e; font-weight: bold;} +.unconscious {color: #99aab5; font-weight: bold;} .suicide {color: #ff5050; font-style: italic;} -.green {color: #03ff39;} -.nicegreen {color: #14a833;} +.green {color: #059223;} +.nicegreen {color: #059223;} .shadowling {color: #3b2769;} -.cult {color: #960000;} +.cult {color: #740202;} -.cultitalic {color: #960000; font-style: italic;} -.cultbold {color: #960000; font-style: italic; font-weight: bold;} -.cultboldtalic {color: #960000; font-weight: bold; font-size: 24px;} +.cultitalic {color: #740202; font-style: italic;} +.cultbold {color: #740202; font-style: italic; font-weight: bold;} +.cultboldtalic {color: #740202; font-weight: bold; font-size: 24px;} -.cultlarge {color: #960000; font-weight: bold; font-size: 24px;} -.narsie {color: #960000; font-weight: bold; font-size: 120px;} -.narsiesmall {color: #960000; font-weight: bold; font-size: 48px;} +.cultlarge {color: #740202; font-weight: bold; font-size: 24px;} +.narsie {color: #740202; font-weight: bold; font-size: 120px;} +.narsiesmall {color: #740202; font-weight: bold; font-size: 48px;} .colossus {color: #7F282A; font-size: 40px;} .hierophant {color: #660099; font-weight: bold; font-style: italic;} .hierophant_warning {color: #660099; font-style: italic;} -.purple {color: #5e2d79;} +.purple {color: #7c00e6;} .holoparasite {color: #35333a;} .revennotice {color: #1d2953;} @@ -342,11 +345,11 @@ h1.alert, h2.alert {color: #000000;} .revenminor {color: #823abb} .revenwarning {color: #760fbb; font-style: italic;} .revendanger {color: #760fbb; font-weight: bold; font-size: 24px;} -.umbra {color: #5000A0;} -.umbra_emphasis {color: #5000A0; font-weight: bold; font-style: italic;} -.umbra_large {color: #5000A0; font-size: 24px; font-weight: bold; font-style: italic;} +.umbra {color: #7c00e6;} +.umbra_emphasis {color: #7c00e6; font-weight: bold; font-style: italic;} +.umbra_large {color: #7c00e6; font-size: 24px; font-weight: bold; font-style: italic;} -.deconversion_message {color: #5000A0; font-size: 24px; font-style: italic;} +.deconversion_message {color: #7c00e6; font-size: 24px; font-style: italic;} .brass {color: #BE8700;} .heavy_brass {color: #BE8700; font-weight: bold; font-style: italic;} @@ -375,13 +378,12 @@ h1.alert, h2.alert {color: #000000;} .ghostalert {color: #5c00e6; font-style: italic; font-weight: bold;} .alien {color: #543354;} -.noticealien {color: #00c000;} -.alertalien {color: #00c000; font-weight: bold;} -.changeling {color: #800080; font-style: italic;} -.assimilator {color: #800080; font-size: 16px ; font-weight: bold;} -.bigassimilator {color: #800080; font-size: 32px ; font-weight: bold;} +.noticealien {color: #059223;} +.alertalien {color: #059223; font-weight: bold;} +.changeling {color: #059223; font-style: italic;} +.assimilator {color: #059223; font-size: 16px ; font-weight: bold;} -.spider {color: #4d004d;} +.spider {color: #7c00e6;} .interface {color: #330033;} @@ -394,13 +396,13 @@ h1.alert, h2.alert {color: #000000;} .big {font-size: 24px;} .reallybig {font-size: 32px;} .extremelybig {font-size: 40px;} -.greentext {color: #00FF00; font-size: 24px;} -.redtext {color: #FF0000; font-size: 24px;} +.greentext {color: #00FF00; font-size: 24px;} /* yogs -- pure Greentext, as it should be */ +.redtext {color: #FF0000; font-size: 24px;} /* yogs -- pure Redtext, as it should be */ .clown {color: #FF69Bf; font-size: 24px; font-family: "Comic Sans MS", cursive, sans-serif; font-weight: bold;} .his_grace {color: #15D512; font-family: "Courier New", cursive, sans-serif; font-style: italic;} -.hypnophrase {color: #0d0d0d; font-weight: bold; animation: hypnocolor 1500ms infinite;} +.hypnophrase {color: #2c2f33; font-weight: bold; animation: hypnocolor 1500ms infinite;} @keyframes hypnocolor { - 0% { color: #0d0d0d; } + 0% { color: #2c2f33; } 25% { color: #410194; } 50% { color: #7f17d8; } 75% { color: #410194; } @@ -431,7 +433,7 @@ h1.alert, h2.alert {color: #000000;} .connectionClosed, .fatalError {background: red; color: white; padding: 5px;} .connectionClosed.restored {background: green;} -.internal.boldnshit {color: blue; font-weight: bold;} +.internal.boldnshit {color: #3d5bc3; font-weight: bold;} /* HELPER CLASSES */ .text-normal {font-weight: normal; font-style: normal;} diff --git a/code/modules/goonchat/browserassets/css/browserOutput_white.css b/code/modules/goonchat/browserassets/css/browserOutput_white.css new file mode 100644 index 000000000000..12978246c798 --- /dev/null +++ b/code/modules/goonchat/browserassets/css/browserOutput_white.css @@ -0,0 +1,435 @@ +/***************************************** +* +* GLOBAL STYLES for white theme normies +* +******************************************/ +html, body { + padding: 0; + margin: 0; + height: 100%; + color: #000000; +} +body { + background: #fff; + font-family: Verdana, sans-serif; + font-size: 9pt; + line-height: 1.2; + overflow-x: hidden; + overflow-y: scroll; + word-wrap: break-word; +} + +em { + font-style: normal; + font-weight: bold; +} + +img { + margin: 0; + padding: 0; + line-height: 1; + -ms-interpolation-mode: nearest-neighbor; + image-rendering: pixelated; +} +img.icon { + height: 1em; + min-height: 16px; + width: auto; + vertical-align: bottom; +} + + +.r:before { /* "repeated" badge class for combined messages */ + content: 'x'; +} +.r { + display: inline-block; + min-width: 0.5em; + font-size: 0.7em; + padding: 0.2em 0.3em; + line-height: 1; + color: white; + text-align: center; + white-space: nowrap; + vertical-align: middle; + background-color: crimson; + border-radius: 10px; +} + +a {color: #0000ff;} +a.visited {color: #ff00ff;} +a:visited {color: #ff00ff;} +a.popt {text-decoration: none;} + +/***************************************** +* +* OUTPUT NOT RELATED TO ACTUAL MESSAGES +* +******************************************/ +#loading { + position: fixed; + width: 300px; + height: 150px; + text-align: center; + left: 50%; + top: 50%; + margin: -75px 0 0 -150px; +} +#loading i {display: block; padding-bottom: 3px;} + +#messages { + font-size: 13px; + padding: 3px; + margin: 0; + word-wrap: break-word; +} +#newMessages { + position: fixed; + display: block; + bottom: 0; + right: 0; + padding: 8px; + background: #ddd; + text-decoration: none; + font-variant: small-caps; + font-size: 1.1em; + font-weight: bold; + color: #333; +} +#newMessages:hover {background: #ccc;} +#newMessages i {vertical-align: middle; padding-left: 3px;} +#ping { + position: fixed; + top: 0; + right: 115px; + width: 45px; + background: #ddd; + height: 30px; + padding: 8px 0 2px 0; +} +#ping i {display: block; text-align: center;} +#ping .ms { + display: block; + text-align: center; + font-size: 8pt; + padding-top: 2px; +} +#userBar { + position: fixed; + top: 0; + right: 0; +} +#userBar .subCell { + background: #ddd; + height: 30px; + padding: 5px 0; + display: block; + color: #333; + text-decoration: none; + line-height: 28px; + border-top: 1px solid #b4b4b4; +} +#userBar .subCell:hover {background: #ccc;} +#userBar .toggle { + width: 40px; + background: #ccc; + border-top: 0; + float: right; + text-align: center; +} +#userBar .sub {clear: both; display: none; width: 160px;} +#userBar .sub.scroll {overflow-y: scroll;} +#userBar .sub.subCell {padding: 3px 0 3px 8px; line-height: 30px; font-size: 0.9em; clear: both;} +#userBar .sub span { + display: block; + line-height: 30px; + float: left; +} +#userBar .sub i { + display: block; + padding: 0 5px; + font-size: 1.1em; + width: 22px; + text-align: center; + line-height: 30px; + float: right; +} +#userBar .sub input { + position: absolute; + padding: 7px 5px; + width: 121px; + line-height: 30px; + float: left; +} +#userBar .topCell {border-top: 0;} + +/* POPUPS */ +.popup { + position: fixed; + top: 50%; + left: 50%; + background: #ddd; +} +.popup .close { + position: absolute; + background: #aaa; + top: 0; + right: 0; + color: #333; + text-decoration: none; + z-index: 2; + padding: 0 10px; + height: 30px; + line-height: 30px; +} +.popup .close:hover {background: #999;} +.popup .head { + background: #999; + color: #ddd; + padding: 0 10px; + height: 30px; + line-height: 30px; + text-transform: uppercase; + font-size: 0.9em; + font-weight: bold; + border-bottom: 2px solid green; +} +.popup input {border: 1px solid #999; background: #fff; margin: 0; padding: 5px; outline: none; color: #333;} +.popup input[type=text]:hover, .popup input[type=text]:active, .popup input[type=text]:focus {border-color: green;} +.popup input[type=submit] {padding: 5px 10px; background: #999; color: #ddd; text-transform: uppercase; font-size: 0.9em; font-weight: bold;} +.popup input[type=submit]:hover, .popup input[type=submit]:focus, .popup input[type=submit]:active {background: #aaa; cursor: pointer;} + +.changeFont {padding: 10px;} +.changeFont a {display: block; text-decoration: none; padding: 3px; color: #333;} +.changeFont a:hover {background: #ccc;} + +.highlightPopup {padding: 10px; text-align: center;} +.highlightPopup input[type=text] {display: block; width: 215px; text-align: left; margin-top: 5px;} +.highlightPopup input.highlightColor {background-color: #FFFF00;} +.highlightPopup input.highlightTermSubmit {margin-top: 5px;} + +/* ADMIN CONTEXT MENU */ +.contextMenu { + background-color: #ddd; + position: fixed; + margin: 2px; + width: 150px; +} +.contextMenu a { + display: block; + padding: 2px 5px; + text-decoration: none; + color: #333; +} + +.contextMenu a:hover { + background-color: #ccc; +} + +/* ADMIN FILTER MESSAGES MENU */ +.filterMessages {padding: 5px;} +.filterMessages div {padding: 2px 0;} +.filterMessages input {} +.filterMessages label {} + +.icon-stack {height: 1em; line-height: 1em; width: 1em; vertical-align: middle; margin-top: -2px;} + + +/***************************************** +* +* OUTPUT ACTUALLY RELATED TO MESSAGES +* +******************************************/ + +/* MOTD */ +.motd {color: #638500; font-family: Verdana, sans-serif;} +.motd h1, .motd h2, .motd h3, .motd h4, .motd h5, .motd h6 {color: #638500; text-decoration: underline;} +.motd a, .motd a:link, .motd a:visited, .motd a:active, .motd a:hover {color: #638500;} + +/* ADD HERE FOR BOLD */ +.bold, .name, .prefix, .ooc, .looc, .adminooc, .admin, .medal, .yell {font-weight: bold;} + +/* ADD HERE FOR ITALIC */ +.italic, .italics, .emote {font-style: italic;} + +/* OUTPUT COLORS */ +.highlight {background: yellow;} + +h1, h2, h3, h4, h5, h6 {color: #0000ff;font-family: Georgia, Verdana, sans-serif;} +h1.alert, h2.alert {color: #000000;} + +em {font-style: normal; font-weight: bold;} + +.ooc { font-weight: bold;} +.adminobserverooc {color: #0099cc; font-weight: bold;} +.adminooc {color: #700038; font-weight: bold;} + +.adminsay {color: #FF4500; font-weight: bold;} +.admin {color: #386aff; font-weight: bold;} + +.name { font-weight: bold;} + +.say {} +.deadsay {color: #5c00e6;} +.binarysay {color: #20c20e; background-color: #000000; display: block;} +.binarysay a {color: #00ff00;} +.binarysay a:active, .binarysay a:visited {color: #88ff88;} +.radio {color: #008000;} +.sciradio {color: #993399;} +.comradio {color: #948f02;} +.secradio {color: #a30000;} +.medradio {color: #337296;} +.engradio {color: #fb5613;} +.suppradio {color: #a8732b;} +.servradio {color: #6eaa2c;} +.syndradio {color: #6d3f40;} +.centcomradio {color: #686868;} +.aiprivradio {color: #ff00ff;} +.redteamradio {color: #ff0000;} +.blueteamradio {color: #0000ff;} + +.yell { font-weight: bold;} + +.alert {color: #ff0000;} +h1.alert, h2.alert {color: #000000;} + +.emote { font-style: italic;} +.selecteddna {color: #ffffff; background-color: #001B1B} + +.attack {color: #ff0000;} +.disarm {color: #990000;} +.passive {color: #660000;} + +.userdanger {color: #ff0000; font-weight: bold; font-size: 24px;} +.danger {color: #ff0000;} +.warning {color: #ff0000; font-style: italic;} +.boldwarning {color: #ff0000; font-style: italic; font-weight: bold} +.announce {color: #228b22; font-weight: bold;} +.boldannounce {color: #ff0000; font-weight: bold;} +.greenannounce {color: #00ff00; font-weight: bold;} +.rose {color: #ff5050;} +.info {color: #0000CC;} +.notice {color: #000099;} +.boldnotice {color: #000099; font-weight: bold;} +.adminnotice {color: #0000ff;} +.adminhelp {color: #ff0000; font-weight: bold;} +.unconscious {color: #0000ff; font-weight: bold;} +.suicide {color: #ff5050; font-style: italic;} +.green {color: #03ff39;} +.nicegreen {color: #14a833;} +.shadowling {color: #3b2769;} +.cult {color: #960000;} + +.cultitalic {color: #960000; font-style: italic;} +.cultbold {color: #960000; font-style: italic; font-weight: bold;} +.cultboldtalic {color: #960000; font-weight: bold; font-size: 24px;} + +.cultlarge {color: #960000; font-weight: bold; font-size: 24px;} +.narsie {color: #960000; font-weight: bold; font-size: 120px;} +.narsiesmall {color: #960000; font-weight: bold; font-size: 48px;} +.colossus {color: #7F282A; font-size: 40px;} +.hierophant {color: #660099; font-weight: bold; font-style: italic;} +.hierophant_warning {color: #660099; font-style: italic;} +.purple {color: #5e2d79;} +.holoparasite {color: #35333a;} + +.revennotice {color: #1d2953;} +.revenboldnotice {color: #1d2953; font-weight: bold;} +.revenbignotice {color: #1d2953; font-weight: bold; font-size: 24px;} +.revenminor {color: #823abb} +.revenwarning {color: #760fbb; font-style: italic;} +.revendanger {color: #760fbb; font-weight: bold; font-size: 24px;} +.umbra {color: #5000A0;} +.umbra_emphasis {color: #5000A0; font-weight: bold; font-style: italic;} +.umbra_large {color: #5000A0; font-size: 24px; font-weight: bold; font-style: italic;} + +.deconversion_message {color: #5000A0; font-size: 24px; font-style: italic;} + +.brass {color: #BE8700;} +.heavy_brass {color: #BE8700; font-weight: bold; font-style: italic;} +.large_brass {color: #BE8700; font-size: 24px;} +.big_brass {color: #BE8700; font-size: 24px; font-weight: bold; font-style: italic;} +.ratvar {color: #BE8700; font-size: 48px; font-weight: bold; font-style: italic;} +.alloy {color: #42474D;} +.heavy_alloy {color: #42474D; font-weight: bold; font-style: italic;} +.nezbere_large {color: #42474D; font-size: 24px; font-weight: bold; font-style: italic;} +.nezbere {color: #42474D; font-weight: bold; font-style: italic;} +.nezbere_small {color: #42474D;} +.sevtug_large {color: #AF0AAF; font-size: 24px; font-weight: bold; font-style: italic;} +.sevtug {color: #AF0AAF; font-weight: bold; font-style: italic;} +.sevtug_small {color: #AF0AAF;} +.inathneq_large {color: #1E8CE1; font-size: 24px; font-weight: bold; font-style: italic;} +.inathneq {color: #1E8CE1; font-weight: bold; font-style: italic;} +.inathneq_small {color: #1E8CE1;} +.nzcrentr_large {color: #DAAA18; font-size: 24px; font-weight: bold; font-style: italic;} +.nzcrentr {color: #DAAA18; font-weight: bold; font-style: italic;} +.nzcrentr_small {color: #DAAA18;} +.neovgre_large {color: #6E001A; font-size: 24px; font-weight: bold; font-style: italic;} +.neovgre {color: #6E001A; font-weight: bold; font-style: italic;} +.neovgre_small {color: #6E001A;} + +.newscaster {color: #800000;} +.ghostalert {color: #5c00e6; font-style: italic; font-weight: bold;} + +.alien {color: #543354;} +.noticealien {color: #00c000;} +.alertalien {color: #00c000; font-weight: bold;} +.changeling {color: #800080; font-style: italic;} +.assimilator {color: #800080; font-size: 16px ; font-weight: bold;} +.bigassimilator {color: #800080; font-size: 32px ; font-weight: bold;} + +.spider {color: #4d004d;} + +.interface {color: #330033;} + +.sans {font-family: "Comic Sans MS", cursive, sans-serif;} +.papyrus {font-family: "Papyrus", cursive, sans-serif;} +.robot {font-family: "Courier New", cursive, sans-serif;} + +.command_headset {font-weight: bold; font-size: 24px;} +.small {font-size: 8px;} +.big {font-size: 24px;} +.reallybig {font-size: 32px;} +.extremelybig {font-size: 40px;} +.greentext {color: #00FF00; font-size: 24px;} +.redtext {color: #FF0000; font-size: 24px;} +.clown {color: #FF69Bf; font-size: 24px; font-family: "Comic Sans MS", cursive, sans-serif; font-weight: bold;} +.his_grace {color: #15D512; font-family: "Courier New", cursive, sans-serif; font-style: italic;} +.hypnophrase {color: #0d0d0d; font-weight: bold; animation: hypnocolor 1500ms infinite;} +@keyframes hypnocolor { + 0% { color: #0d0d0d; } + 25% { color: #410194; } + 50% { color: #7f17d8; } + 75% { color: #410194; } + 100% { color: #3bb5d3; } +} + +.phobia {color: #dd0000; font-weight: bold; animation: phobia 750ms infinite;} +@keyframes phobia { + 0% { color: #0d0d0d; } + 50% { color: #dd0000; } + 100% { color: #0d0d0d; } +} + +.icon {height: 1em; width: auto;} + +.memo {color: #638500; text-align: center;} +.memoedit {text-align: center; font-size: 16px;} +.abductor {color: #800080; font-style: italic;} +.mind_control {color: #A00D6F; font-size: 3; font-weight: bold; font-style: italic;} +.slime {color: #00CED1;} +.drone {color: #848482;} +.monkey {color: #975032;} +.swarmer {color: #2C75FF;} +.resonate {color: #298F85;} + +.monkeyhive {color: #774704;} +.monkeylead {color: #774704; font-size: 2;} + +.connectionClosed, .fatalError {background: red; color: white; padding: 5px;} +.connectionClosed.restored {background: green;} +.internal.boldnshit {color: blue; font-weight: bold;} + +/* HELPER CLASSES */ +.text-normal {font-weight: normal; font-style: normal;} +.hidden {display: none; visibility: hidden;} \ No newline at end of file diff --git a/code/modules/goonchat/browserassets/html/browserOutput.html b/code/modules/goonchat/browserassets/html/browserOutput.html index 2ff600a4ef9d..960b92024d16 100644 --- a/code/modules/goonchat/browserassets/html/browserOutput.html +++ b/code/modules/goonchat/browserassets/html/browserOutput.html @@ -5,7 +5,7 @@ - + @@ -28,6 +28,9 @@ --ms +
+ +
diff --git a/code/modules/goonchat/browserassets/js/browserOutput.js b/code/modules/goonchat/browserassets/js/browserOutput.js index 4b28f4fa9e29..2d76f3992cdf 100644 --- a/code/modules/goonchat/browserassets/js/browserOutput.js +++ b/code/modules/goonchat/browserassets/js/browserOutput.js @@ -35,6 +35,7 @@ var opts = { 'wasd': false, //Is the user in wasd mode? 'priorChatHeight': 0, //Thing for height-resizing detection 'restarting': false, //Is the round restarting? + 'darkmode':true, //Are we using darkmode? If not WHY ARE YOU LIVING IN 2009??? //Options menu 'selectedSubLoop': null, //Contains the interval loop for closing the selected sub menu @@ -456,6 +457,19 @@ function toHex(n) { return "0123456789ABCDEF".charAt((n-n%16)/16) + "0123456789ABCDEF".charAt(n%16); } +function swap() { //Swap to darkmode + if (opts.darkmode){ + document.getElementById("sheetofstyles").href = "browserOutput_white.css"; + opts.darkmode = false; + runByond('?_src_=chat&proc=swaptolightmode'); + } else { + document.getElementById("sheetofstyles").href = "browserOutput.css"; + opts.darkmode = true; + runByond('?_src_=chat&proc=swaptodarkmode'); + } + setCookie('darkmode', (opts.darkmode ? 'true' : 'false'), 365); +} + function handleClientData(ckey, ip, compid) { //byond sends player info to here var currentData = {'ckey': ckey, 'ip': ip, 'compid': compid}; @@ -716,6 +730,7 @@ $(function() { 'shighlightColor': getCookie('highlightcolor'), 'smusicVolume': getCookie('musicVolume'), 'smessagecombining': getCookie('messagecombining'), + 'sdarkmode': getCookie('darkmode'), }; if (savedConfig.sfontSize) { @@ -726,6 +741,9 @@ $(function() { $("body").css('line-height', savedConfig.slineHeight); internalOutput('Loaded line height setting of: '+savedConfig.slineHeight+'', 'internal'); } + if(savedConfig.sdarkmode == 'false'){ + swap(); //They dont want darkmode, so switch! + } if (savedConfig.spingDisabled) { if (savedConfig.spingDisabled == 'true') { opts.pingDisabled = true; @@ -772,8 +790,6 @@ $(function() { opts.messageCombining = true; } } - - (function() { var dataCookie = getCookie('connData'); if (dataCookie) { @@ -940,7 +956,9 @@ $(function() { $('#toggleOptions').click(function(e) { handleToggleClick($subOptions, $(this)); }); - + $('#darkmodetoggle').click(function(e) { + swap(); + }); $('#toggleAudio').click(function(e) { handleToggleClick($subAudio, $(this)); }); diff --git a/code/modules/shuttle/ferry.dm b/code/modules/shuttle/ferry.dm index eaa1f36b7584..06e38bb3ebb6 100644 --- a/code/modules/shuttle/ferry.dm +++ b/code/modules/shuttle/ferry.dm @@ -37,4 +37,4 @@ return last_request = world.time to_chat(usr, "Your request has been received by CentCom.") - to_chat(GLOB.admins, "FERRY: [ADMIN_LOOKUPFLW(usr)] (Move Ferry) is requesting to move the transport ferry to CentCom.") + to_chat(GLOB.admins, "FERRY: [ADMIN_LOOKUPFLW(usr)] (Move Ferry) is requesting to move the transport ferry to CentCom.") diff --git a/interface/skin.dmf b/interface/skin.dmf index 5c55b15d4593..7010338028cc 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -1,6 +1,5 @@ macro "default" - menu "menu" elem name = "&File" @@ -54,6 +53,7 @@ window "mainwindow" size = 640x440 anchor1 = none anchor2 = none + background-color = #272727 is-default = true saved-params = "pos;size;is-minimized;is-maximized" icon = 'icons\\ss13_64.png' @@ -65,6 +65,7 @@ window "mainwindow" size = 634x417 anchor1 = 0,0 anchor2 = 100,100 + background-color = #272727 saved-params = "splitter" left = "mapwindow" right = "infowindow" @@ -85,6 +86,8 @@ window "mainwindow" size = 40x20 anchor1 = 100,100 anchor2 = none + background-color = #272727 + text-color = #eaeaea saved-params = "is-checked" text = "Chat" command = ".winset \"saybutton.is-checked=true ? input.command=\"!say \\\"\" : input.command=\"\"saybutton.is-checked=true ? mebutton.is-checked=false\"\"saybutton.is-checked=true ? oocbutton.is-checked=false\"" @@ -95,6 +98,8 @@ window "mainwindow" size = 40x20 anchor1 = 100,100 anchor2 = none + background-color = #272727 + text-color = #eaeaea saved-params = "is-checked" text = "OOC" command = ".winset \"oocbutton.is-checked=true ? input.command=\"!ooc \\\"\" : input.command=\"\"oocbutton.is-checked=true ? mebutton.is-checked=false\"\"oocbutton.is-checked=true ? saybutton.is-checked=false\"" @@ -105,6 +110,8 @@ window "mainwindow" size = 40x20 anchor1 = 100,100 anchor2 = none + background-color = #272727 + text-color = #eaeaea saved-params = "is-checked" text = "Me" command = ".winset \"mebutton.is-checked=true ? input.command=\"!me \\\"\" : input.command=\"\"mebutton.is-checked=true ? saybutton.is-checked=false\"\"mebutton.is-checked=true ? oocbutton.is-checked=false\"" @@ -115,6 +122,7 @@ window "mainwindow" size = 200x200 anchor1 = none anchor2 = none + background-color = #272727 is-visible = false saved-params = "" elem "tooltip" @@ -123,6 +131,7 @@ window "mainwindow" size = 999x999 anchor1 = none anchor2 = none + background-color = #272727 is-visible = false saved-params = "" @@ -133,6 +142,7 @@ window "mapwindow" size = 640x480 anchor1 = none anchor2 = none + background-color = #000000 saved-params = "pos;size;is-minimized;is-maximized" is-pane = true elem "map" @@ -141,6 +151,7 @@ window "mapwindow" size = 640x480 anchor1 = 0,0 anchor2 = 100,100 + background-color = #000000 font-family = "Arial" font-size = 7 text-color = none @@ -155,6 +166,8 @@ window "infowindow" size = 640x480 anchor1 = none anchor2 = none + text-color = #99aab5 + background-color = #272727 saved-params = "pos;size;is-minimized;is-maximized" is-pane = true elem "info" @@ -163,6 +176,8 @@ window "infowindow" size = 640x445 anchor1 = 0,0 anchor2 = 100,100 + text-color = #99aab5 + background-color = #272727 saved-params = "splitter" left = "statwindow" right = "outputwindow" @@ -173,6 +188,8 @@ window "infowindow" size = 80x20 anchor1 = 3,0 anchor2 = 19,0 + text-color = #99aab5 + background-color = #494949 saved-params = "is-checked" text = "Changelog" command = "changelog" @@ -182,6 +199,8 @@ window "infowindow" size = 80x20 anchor1 = 19,0 anchor2 = 34,0 + text-color = #99aab5 + background-color = #494949 saved-params = "is-checked" text = "Rules" command = "rules" @@ -191,6 +210,8 @@ window "infowindow" size = 80x20 anchor1 = 34,0 anchor2 = 50,0 + text-color = #99aab5 + background-color = #494949 saved-params = "is-checked" text = "Wiki" command = "wiki" @@ -200,6 +221,8 @@ window "infowindow" size = 80x20 anchor1 = 50,0 anchor2 = 66,0 + text-color = #99aab5 + background-color = #494949 saved-params = "is-checked" text = "Forum" command = "forum" @@ -209,6 +232,8 @@ window "infowindow" size = 80x20 anchor1 = 66,0 anchor2 = 81,0 + text-color = #99aab5 + background-color = #3a3a3a saved-params = "is-checked" text = "Github" command = "github" @@ -218,6 +243,8 @@ window "infowindow" size = 80x20 anchor1 = 81,0 anchor2 = 97,0 + text-color = #99aab5 + background-color = #492020 saved-params = "is-checked" text = "Report Issue" command = "report-issue" @@ -256,6 +283,8 @@ window "outputwindow" size = 640x480 anchor1 = none anchor2 = none + text-color = #99aab5 + background-color = #272727 saved-params = "pos;size;is-minimized;is-maximized" is-pane = true elem "browseroutput" @@ -264,7 +293,8 @@ window "outputwindow" size = 640x480 anchor1 = 0,0 anchor2 = 100,100 - background-color = #ffffff + text-color = #99aab5 + background-color = #272727 is-visible = false is-disabled = true saved-params = "" @@ -275,6 +305,8 @@ window "outputwindow" size = 640x480 anchor1 = 0,0 anchor2 = 100,100 + text-color = #99aab5 + background-color = #272727 is-default = true saved-params = "" @@ -305,7 +337,7 @@ window "preferences_window" anchor2 = 100,100 right-click = true saved-params = "zoom;letterbox;zoom-mode" - + window "statwindow" elem "statwindow" type = MAIN @@ -313,6 +345,8 @@ window "statwindow" size = 640x480 anchor1 = none anchor2 = none + text-color = #eaeaea + background-color = #272727 saved-params = "pos;size;is-minimized;is-maximized" is-pane = true elem "stat" @@ -321,9 +355,14 @@ window "statwindow" size = 640x480 anchor1 = 0,0 anchor2 = 100,100 + text-color = #99aab5 + background-color = #2c2f33 is-default = true saved-params = "" - + tab-text-color = #99aab5 + tab-background-color = #272727 + prefix-color = #ebebeb + suffix-color = #ebebeb window "Telecomms IDE" elem "Telecomms IDE" type = MAIN diff --git a/tgstation.dme b/tgstation.dme index ce9c803301ad..776e272aca5c 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1486,6 +1486,7 @@ #include "code\modules\client\client_colour.dm" #include "code\modules\client\client_defines.dm" #include "code\modules\client\client_procs.dm" +#include "code\modules\client\darkmode.dm" #include "code\modules\client\message.dm" #include "code\modules\client\player_details.dm" #include "code\modules\client\preferences.dm" diff --git a/yogstation.dme b/yogstation.dme index a66f30253016..a8a740dd97a6 100644 --- a/yogstation.dme +++ b/yogstation.dme @@ -1498,6 +1498,7 @@ #include "code\modules\client\client_colour.dm" #include "code\modules\client\client_defines.dm" #include "code\modules\client\client_procs.dm" +#include "code\modules\client\darkmode.dm" #include "code\modules\client\message.dm" #include "code\modules\client\player_details.dm" #include "code\modules\client\preferences.dm"