From 45ef37f04f2e7f86530ee2c273afa218f876e7c7 Mon Sep 17 00:00:00 2001 From: Letter N <24603524+LetterN@users.noreply.github.com> Date: Thu, 26 Nov 2020 14:04:21 +0800 Subject: [PATCH] tguichat --- code/__DEFINES/controllers/_subsystems.dm | 4 +- code/__DEFINES/misc.dm | 5 + code/__DEFINES/tgui.dm | 35 ++ code/__HELPERS/_logging.dm | 76 +++- code/__HELPERS/shell.dm | 57 +++ code/_globalvars/logging.dm | 3 +- .../configuration/configuration.dm | 2 +- .../configuration/entries/general.dm | 5 +- code/controllers/subsystems/chat.dm | 38 ++ code/controllers/subsystems/nanoui.dm | 32 +- code/controllers/subsystems/ping.dm | 32 -- code/controllers/subsystems/tgui.dm | 357 ++++++++++++++++++ code/game/world.dm | 17 +- code/modules/admin/admin_verbs.dm | 4 +- code/modules/admin/verbs/playsound.dm | 133 ++++--- code/modules/asset_cache/asset_list_items.dm | 19 +- code/modules/client/client_defines.dm | 1 + code/modules/client/client_procs.dm | 18 +- code/modules/client/preferences.dm | 4 +- code/modules/media/mediamanager.dm | 2 +- code/modules/mob/mob.dm | 2 +- code/modules/nano/interaction/default.dm | 16 +- code/modules/power/fission/engine.dm | 38 +- code/modules/tgchat/message.dm | 17 + code/modules/tgchat/to_chat.dm | 77 ++++ code/modules/tgui/external.dm | 215 +++++++++++ code/modules/tgui/states.dm | 137 +++++++ code/modules/tgui/states/admin.dm | 15 + code/modules/tgui/states/always.dm | 13 + code/modules/tgui/states/conscious.dm | 15 + code/modules/tgui/states/contained.dm | 15 + code/modules/tgui/states/debug.dm | 6 + code/modules/tgui/states/deep_inventory.dm | 16 + code/modules/tgui/states/default.dm | 62 +++ code/modules/tgui/states/hands.dm | 28 ++ code/modules/tgui/states/human_adjacent.dm | 19 + code/modules/tgui/states/inventory.dm | 16 + code/modules/tgui/states/language_menu.dm | 17 + code/modules/tgui/states/not_incapacitated.dm | 36 ++ code/modules/tgui/states/notcontained.dm | 30 ++ code/modules/tgui/states/observer.dm | 16 + code/modules/tgui/states/physical.dm | 53 +++ code/modules/tgui/states/self.dm | 15 + code/modules/tgui/states/zlevel.dm | 17 + code/modules/tgui/tgui.dm | 314 +++++++++++++++ code/modules/tgui/tgui_window.dm | 322 ++++++++++++++++ code/modules/tgui_panel/audio.dm | 42 +++ code/modules/tgui_panel/external.dm | 37 ++ code/modules/tgui_panel/telemetry.dm | 80 ++++ code/modules/tgui_panel/tgui_panel.dm | 95 +++++ config/config.txt | 10 +- html/font-awesome/README.MD | 6 + html/font-awesome/css/all.min.css | 5 + html/font-awesome/css/v4-shims.min.css | 5 + html/font-awesome/webfonts/fa-regular-400.eot | Bin 0 -> 34388 bytes .../font-awesome/webfonts/fa-regular-400.woff | Bin 0 -> 16804 bytes html/font-awesome/webfonts/fa-solid-900.eot | Bin 0 -> 192116 bytes html/font-awesome/webfonts/fa-solid-900.woff | Bin 0 -> 98020 bytes interface/skin.dmf | 333 +++++++--------- tgui/packages/tgui-panel/index.js | 10 - tgui/public/tgui-panel.bundle.js | 2 +- tgui/public/tgui.html | 327 ++++++++++++++++ vorestation.dme | 31 +- 63 files changed, 2965 insertions(+), 389 deletions(-) create mode 100644 code/__DEFINES/tgui.dm create mode 100644 code/__HELPERS/shell.dm create mode 100644 code/controllers/subsystems/chat.dm delete mode 100644 code/controllers/subsystems/ping.dm create mode 100644 code/controllers/subsystems/tgui.dm create mode 100644 code/modules/tgchat/message.dm create mode 100644 code/modules/tgchat/to_chat.dm create mode 100644 code/modules/tgui/external.dm create mode 100644 code/modules/tgui/states.dm create mode 100644 code/modules/tgui/states/admin.dm create mode 100644 code/modules/tgui/states/always.dm create mode 100644 code/modules/tgui/states/conscious.dm create mode 100644 code/modules/tgui/states/contained.dm create mode 100644 code/modules/tgui/states/debug.dm create mode 100644 code/modules/tgui/states/deep_inventory.dm create mode 100644 code/modules/tgui/states/default.dm create mode 100644 code/modules/tgui/states/hands.dm create mode 100644 code/modules/tgui/states/human_adjacent.dm create mode 100644 code/modules/tgui/states/inventory.dm create mode 100644 code/modules/tgui/states/language_menu.dm create mode 100644 code/modules/tgui/states/not_incapacitated.dm create mode 100644 code/modules/tgui/states/notcontained.dm create mode 100644 code/modules/tgui/states/observer.dm create mode 100644 code/modules/tgui/states/physical.dm create mode 100644 code/modules/tgui/states/self.dm create mode 100644 code/modules/tgui/states/zlevel.dm create mode 100644 code/modules/tgui/tgui.dm create mode 100644 code/modules/tgui/tgui_window.dm create mode 100644 code/modules/tgui_panel/audio.dm create mode 100644 code/modules/tgui_panel/external.dm create mode 100644 code/modules/tgui_panel/telemetry.dm create mode 100644 code/modules/tgui_panel/tgui_panel.dm create mode 100644 html/font-awesome/README.MD create mode 100644 html/font-awesome/css/all.min.css create mode 100644 html/font-awesome/css/v4-shims.min.css create mode 100644 html/font-awesome/webfonts/fa-regular-400.eot create mode 100644 html/font-awesome/webfonts/fa-regular-400.woff create mode 100644 html/font-awesome/webfonts/fa-solid-900.eot create mode 100644 html/font-awesome/webfonts/fa-solid-900.woff create mode 100644 tgui/public/tgui.html diff --git a/code/__DEFINES/controllers/_subsystems.dm b/code/__DEFINES/controllers/_subsystems.dm index 45fa63f0c9e..78c86155565 100644 --- a/code/__DEFINES/controllers/_subsystems.dm +++ b/code/__DEFINES/controllers/_subsystems.dm @@ -88,7 +88,7 @@ var/global/list/runlevel_flags = list(RUNLEVEL_LOBBY, RUNLEVEL_SETUP, RUNLEVEL_G #define INIT_ORDER_AI -22 #define INIT_ORDER_OPENSPACE -50 #define INIT_ORDER_PERSISTENCE -95 - +#define INIT_ORDER_CHAT -100 //Should be last to ensure chat remains smooth during init. // Subsystem fire priority, from lowest to highest priority // If the subsystem isn't listed here it's either DEFAULT or PROCESS (if it's a processing subsystem child) @@ -109,7 +109,9 @@ var/global/list/runlevel_flags = list(RUNLEVEL_LOBBY, RUNLEVEL_SETUP, RUNLEVEL_G #define FIRE_PRIORITY_PLANETS 75 #define FIRE_PRIORITY_INSTRUMENTS 90 #define FIRE_PRIORITY_MACHINES 100 +#define FIRE_PRIORITY_TGUI 110 #define FIRE_PRIORITY_PROJECTILES 150 +#define FIRE_PRIORITY_CHAT 400 #define FIRE_PRIORITY_OVERLAYS 500 #define FIRE_PRIORITY_INPUT 1000 //never drop input diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 3bd508a20eb..38760ef6735 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -397,11 +397,16 @@ GLOBAL_LIST_EMPTY(##LIST_NAME);\ #define PR_ANNOUNCEMENTS_PER_ROUND 5 + //https://secure.byond.com/docs/ref/info.html#/atom/var/mouse_opacity #define MOUSE_OPACITY_TRANSPARENT 0 #define MOUSE_OPACITY_ICON 1 #define MOUSE_OPACITY_OPAQUE 2 +//world/proc/shelleo +#define SHELLEO_ERRORLEVEL 1 +#define SHELLEO_STDOUT 2 +#define SHELLEO_STDERR 3 // Embed chance unset for embed_chance var on /obj/item. #define EMBED_CHANCE_UNSET -1337 diff --git a/code/__DEFINES/tgui.dm b/code/__DEFINES/tgui.dm new file mode 100644 index 00000000000..f594b735b6b --- /dev/null +++ b/code/__DEFINES/tgui.dm @@ -0,0 +1,35 @@ +/// Green eye; fully interactive +#define UI_INTERACTIVE 2 +/// Orange eye; updates but is not interactive +#define UI_UPDATE 1 +/// Red eye; disabled, does not update +#define UI_DISABLED 0 +/// UI Should close +#define UI_CLOSE -1 + +/// Maximum number of windows that can be suspended/reused +#define TGUI_WINDOW_SOFT_LIMIT 5 +/// Maximum number of open windows +#define TGUI_WINDOW_HARD_LIMIT 9 + +/// Maximum ping timeout allowed to detect zombie windows +#define TGUI_PING_TIMEOUT 4 SECONDS + +/// Window does not exist +#define TGUI_WINDOW_CLOSED 0 +/// Window was just opened, but is still not ready to be sent data +#define TGUI_WINDOW_LOADING 1 +/// Window is free and ready to receive data +#define TGUI_WINDOW_READY 2 + +/// Get a window id based on the provided pool index +#define TGUI_WINDOW_ID(index) "tgui-window-[index]" +/// Get a pool index of the provided window id +#define TGUI_WINDOW_INDEX(window_id) text2num(copytext(window_id, 13)) + +/// Creates a message packet for sending via output() +#define TGUI_CREATE_MESSAGE(type, payload) ( \ + url_encode(json_encode(list( \ + "type" = type, \ + "payload" = payload, \ + )))) diff --git a/code/__HELPERS/_logging.dm b/code/__HELPERS/_logging.dm index f3fe3d8e6f0..bb75324b35e 100644 --- a/code/__HELPERS/_logging.dm +++ b/code/__HELPERS/_logging.dm @@ -4,8 +4,15 @@ #define SEND_SOUND(target, sound) DIRECT_OUTPUT(target, sound) #define SEND_TEXT(target, text) DIRECT_OUTPUT(target, text) #define WRITE_FILE(file, text) DIRECT_OUTPUT(file, text) -#define WRITE_LOG(log, text) rustg_log_write(log, text) - +#ifdef EXTOOLS_LOGGING +// proc hooked, so we can just put in standard TRUE and FALSE +#define WRITE_LOG(log, text) extools_log_write(log,text,TRUE) +//#define WRITE_LOG_NO_FORMAT(log, text) extools_log_write(log,text,FALSE) +#else +//This is an external call, "true" and "false" are how rust parses out booleans +#define WRITE_LOG(log, text) rustg_log_write(log, text) //, "true" +//#define WRITE_LOG_NO_FORMAT(log, text) rustg_log_write(log, text, "false") +#endif //print a warning message to world.log #define WARNING(MSG) warning("[MSG] in [__FILE__] at line [__LINE__] src: [UNLINT(src)] usr: [usr].") /proc/warning(msg) @@ -45,7 +52,10 @@ /proc/log_adminsay(text, mob/speaker) if (config_legacy.log_adminchat) - WRITE_LOG(GLOB.world_game_log, "ADMINSAY: [speaker.simple_info_line()]: [html_decode(text)]") + if(speaker) + WRITE_LOG(GLOB.world_game_log, "ADMINPRIVATE: ASAY: [speaker.simple_info_line()]: [text]") + else + WRITE_LOG(GLOB.world_game_log, "ADMINPRIVATE: ASAY: [text]") /proc/log_modsay(text, mob/speaker) if (config_legacy.log_adminchat) @@ -177,22 +187,45 @@ /proc/start_log(log) WRITE_LOG(log, "Starting up round ID [GLOB.round_id].\n-------------------------") +/** + * Appends a tgui-related log entry. All arguments are optional. + */ +/proc/log_tgui(user, message, context, + datum/tgui_window/window, + datum/src_object) + var/entry = "" + // Insert user info + if(!user) + entry += "" + else if(istype(user, /mob)) + var/mob/mob = user + entry += "[mob.ckey] (as [mob] at [mob.x],[mob.y],[mob.z])" + else if(istype(user, /client)) + var/client/client = user + entry += "[client.ckey]" + // Insert context + if(context) + entry += " in [context]" + else if(window) + entry += " in [window.id]" + // Resolve src_object + if(!src_object && window && window.locked_by) + src_object = window.locked_by.src_object + // Insert src_object info + if(src_object) + entry += "\nUsing: [src_object.type] [REF(src_object)]" + // Insert message + if(message) + entry += "\n[message]" + WRITE_LOG(GLOB.tgui_log, entry) + /* Close open log handles. This should be called as late as possible, and no logging should hapen after. */ /proc/shutdown_logging() +#ifdef EXTOOLS_LOGGING + extools_finalize_logging() +#else rustg_log_close_all() - -/proc/loc_name(atom/A) - if(!istype(A)) - return "(INVALID LOCATION)" - - var/turf/T = A - if (!istype(T)) - T = get_turf(A) - - if(istype(T)) - return "([AREACOORD(T)])" - else if(A.loc) - return "(UNKNOWN (?, ?, ?))" +#endif /* Helper procs for building detailed log lines */ /proc/key_name(whom, include_link = null, include_name = TRUE, highlight_special_characters = TRUE) @@ -286,7 +319,18 @@ /proc/key_name_admin(whom, include_name = TRUE) return key_name(whom, TRUE, include_name) +/proc/loc_name(atom/A) + if(!istype(A)) + return "(INVALID LOCATION)" + var/turf/T = A + if (!istype(T)) + T = get_turf(A) + + if(istype(T)) + return "([AREACOORD(T)])" + else if(A.loc) + return "(UNKNOWN (?, ?, ?))" /// VSTATION SPECIFIC LOGGING. /// /proc/log_debug(text) diff --git a/code/__HELPERS/shell.dm b/code/__HELPERS/shell.dm new file mode 100644 index 00000000000..3438f38b85c --- /dev/null +++ b/code/__HELPERS/shell.dm @@ -0,0 +1,57 @@ +//Runs the command in the system's shell, returns a list of (error code, stdout, stderr) + +#define SHELLEO_NAME "data/shelleo." +#define SHELLEO_ERR ".err" +#define SHELLEO_OUT ".out" +/world/proc/shelleo(command) + var/static/list/shelleo_ids = list() + var/stdout = "" + var/stderr = "" + var/errorcode = 1 + var/shelleo_id + var/out_file = "" + var/err_file = "" + var/static/list/interpreters = list("[MS_WINDOWS]" = "cmd /c", "[UNIX]" = "sh -c") + var/interpreter = interpreters["[world.system_type]"] + if(interpreter) + for(var/seo_id in shelleo_ids) + if(!shelleo_ids[seo_id]) + shelleo_ids[seo_id] = TRUE + shelleo_id = "[seo_id]" + break + if(!shelleo_id) + shelleo_id = "[shelleo_ids.len + 1]" + shelleo_ids += shelleo_id + shelleo_ids[shelleo_id] = TRUE + out_file = "[SHELLEO_NAME][shelleo_id][SHELLEO_OUT]" + err_file = "[SHELLEO_NAME][shelleo_id][SHELLEO_ERR]" + errorcode = shell("[interpreter] \"[command]\" > [out_file] 2> [err_file]") + if(fexists(out_file)) + stdout = file2text(out_file) + fdel(out_file) + if(fexists(err_file)) + stderr = file2text(err_file) + fdel(err_file) + shelleo_ids[shelleo_id] = FALSE + else + CRASH("Operating System: [world.system_type] not supported") // If you encounter this error, you are encouraged to update this proc with support for the new operating system + . = list(errorcode, stdout, stderr) +#undef SHELLEO_NAME +#undef SHELLEO_ERR +#undef SHELLEO_OUT + +/proc/shell_url_scrub(url) + var/static/regex/bad_chars_regex = regex("\[^#%&./:=?\\w]*", "g") + var/scrubbed_url = "" + var/bad_match = "" + var/last_good = 1 + var/bad_chars = 1 + do + bad_chars = bad_chars_regex.Find(url) + scrubbed_url += copytext(url, last_good, bad_chars) + if(bad_chars) + bad_match = url_encode(bad_chars_regex.match) + scrubbed_url += bad_match + last_good = bad_chars + length(bad_chars_regex.match) + while(bad_chars) + . = scrubbed_url diff --git a/code/_globalvars/logging.dm b/code/_globalvars/logging.dm index 5c4f3d6e65a..096954a6903 100644 --- a/code/_globalvars/logging.dm +++ b/code/_globalvars/logging.dm @@ -30,7 +30,8 @@ GLOBAL_PROTECT(world_map_error_log) /// datum/controller/subsystem logging in general GLOBAL_VAR(subsystem_log) GLOBAL_PROTECT(subsystem_log) - +GLOBAL_VAR(tgui_log) +GLOBAL_PROTECT(tgui_log) /////Picture logging GLOBAL_VAR(picture_log_directory) GLOBAL_PROTECT(picture_log_directory) diff --git a/code/controllers/configuration/configuration.dm b/code/controllers/configuration/configuration.dm index af44896436d..d2af2d6cd34 100644 --- a/code/controllers/configuration/configuration.dm +++ b/code/controllers/configuration/configuration.dm @@ -201,7 +201,7 @@ /datum/controller/configuration/proc/Get(entry_type) var/datum/config_entry/E = GetEntryDatum(entry_type) - if((E.protection & CONFIG_ENTRY_HIDDEN) && IsAdminAdvancedProcCall() && GLOB.LastAdminCalledProc == "Get" && GLOB.LastAdminCalledTargetRef == "[REF(src)]") + if(E && (E.protection & CONFIG_ENTRY_HIDDEN) && IsAdminAdvancedProcCall() && GLOB.LastAdminCalledProc == "Get" && GLOB.LastAdminCalledTargetRef == "[REF(src)]") log_admin_private("Config access of [entry_type] attempted by [key_name(usr)]") return return E.config_entry_value diff --git a/code/controllers/configuration/entries/general.dm b/code/controllers/configuration/entries/general.dm index 4aa082960d7..8a7f6ea4242 100644 --- a/code/controllers/configuration/entries/general.dm +++ b/code/controllers/configuration/entries/general.dm @@ -5,6 +5,9 @@ config_entry_value = 7 min_val = 1 +/datum/config_entry/string/invoke_youtubedl + protection = CONFIG_ENTRY_LOCKED | CONFIG_ENTRY_HIDDEN + /datum/config_entry/number/client_warn_version config_entry_value = null min_val = 500 @@ -27,4 +30,4 @@ /datum/config_entry/number/client_error_build config_entry_value = null - min_val = 0 \ No newline at end of file + min_val = 0 diff --git a/code/controllers/subsystems/chat.dm b/code/controllers/subsystems/chat.dm new file mode 100644 index 00000000000..f2e9da704f4 --- /dev/null +++ b/code/controllers/subsystems/chat.dm @@ -0,0 +1,38 @@ +/** + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +SUBSYSTEM_DEF(chat) + name = "Chat" + flags = SS_TICKER + wait = 1 + priority = FIRE_PRIORITY_CHAT + init_order = INIT_ORDER_CHAT + + var/list/payload_by_client = list() + +/datum/controller/subsystem/chat/fire() + for(var/key in payload_by_client) + var/client/client = key + var/payload = payload_by_client[key] + payload_by_client -= key + if(client) + // Send to tgchat + client.tgui_panel?.window.send_message("chat/message", payload) + // Send to old chat + for(var/message in payload) + SEND_TEXT(client, message_to_html(message)) + if(MC_TICK_CHECK) + return + +/datum/controller/subsystem/chat/proc/queue(target, message) + if(islist(target)) + for(var/_target in target) + var/client/client = CLIENT_FROM_VAR(_target) + if(client) + LAZYADD(payload_by_client[client], list(message)) + return + var/client/client = CLIENT_FROM_VAR(target) + if(client) + LAZYADD(payload_by_client[client], list(message)) diff --git a/code/controllers/subsystems/nanoui.dm b/code/controllers/subsystems/nanoui.dm index 6cc7625ad99..d2d4f3d4409 100644 --- a/code/controllers/subsystems/nanoui.dm +++ b/code/controllers/subsystems/nanoui.dm @@ -1,22 +1,30 @@ SUBSYSTEM_DEF(nanoui) name = "NanoUI" wait = 7 + + /// A list of UIs scheduled to process + var/list/current_run = list() // a list of current open /nanoui UIs, grouped by src_object and ui_key var/list/open_uis = list() // a list of current open /nanoui UIs, not grouped, for use in processing var/list/processing_uis = list() -/datum/controller/subsystem/nanoui/Recover() - if(SSnanoui.open_uis) - open_uis |= SSnanoui.open_uis - if(SSnanoui.processing_uis) - processing_uis |= SSnanoui.processing_uis - /datum/controller/subsystem/nanoui/stat_entry() - return ..("[processing_uis.len] UIs") - -/datum/controller/subsystem/nanoui/fire(resumed) - for(var/thing in processing_uis) - var/datum/nanoui/UI = thing - UI.process() + return ..("P:[length(open_uis)]") +// Stolen from tgui. It's much faster! +/datum/controller/subsystem/nanoui/fire(resumed = FALSE) + if(!resumed) + src.current_run = open_uis.Copy() + // Cache for sanic speed (lists are references anyways) + var/list/current_run = src.current_run + while(current_run.len) + var/datum/nanoui/ui = current_run[current_run.len] + current_run.len-- + // TODO: Move user/src_object check to process() + if(ui && ui.user && ui.src_object) + ui.process() + else + open_uis.Remove(ui) + if(MC_TICK_CHECK) + return diff --git a/code/controllers/subsystems/ping.dm b/code/controllers/subsystems/ping.dm deleted file mode 100644 index 75ecf30957c..00000000000 --- a/code/controllers/subsystems/ping.dm +++ /dev/null @@ -1,32 +0,0 @@ -SUBSYSTEM_DEF(ping) - name = "Ping" - priority = FIRE_PRIORITY_PING - wait = 3 SECONDS - flags = SS_NO_INIT - runlevels = RUNLEVEL_LOBBY | RUNLEVEL_SETUP | RUNLEVEL_GAME | RUNLEVEL_POSTGAME - - var/list/currentrun = list() - -/datum/controller/subsystem/ping/stat_entry() - ..("P:[GLOB.clients.len]") - -/datum/controller/subsystem/ping/fire(resumed = 0) - if (!resumed) - src.currentrun = GLOB.clients.Copy() - - //cache for sanic speed (lists are references anyways) - var/list/currentrun = src.currentrun - - while (currentrun.len) - var/client/C = currentrun[currentrun.len] - currentrun.len-- - - if (!C || !C.chatOutput || !C.chatOutput.loaded) - if (MC_TICK_CHECK) - return - continue - - // softPang isn't handled anywhere but it'll always reset the opts.lastPang. - C.chatOutput.ehjax_send(data = C.is_afk(29) ? "softPang" : "pang") - if (MC_TICK_CHECK) - return diff --git a/code/controllers/subsystems/tgui.dm b/code/controllers/subsystems/tgui.dm new file mode 100644 index 00000000000..9ac42c9fb44 --- /dev/null +++ b/code/controllers/subsystems/tgui.dm @@ -0,0 +1,357 @@ +/** + * tgui subsystem + * + * Contains all tgui state and subsystem code. + * + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +SUBSYSTEM_DEF(tgui) + name = "tgui" + wait = 9 + flags = SS_NO_INIT + priority = FIRE_PRIORITY_TGUI + runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT + + /// A list of UIs scheduled to process + var/list/current_run = list() + /// A list of open UIs + var/list/open_uis = list() + /// A list of open UIs, grouped by src_object. + var/list/open_uis_by_src = list() + /// The HTML base used for all UIs. + var/basehtml + +/datum/controller/subsystem/tgui/PreInit() + basehtml = file2text('tgui/public/tgui.html') + +/datum/controller/subsystem/tgui/Shutdown() + close_all_uis() +/* //no tguistat +/datum/controller/subsystem/tgui/stat_entry(msg) + msg = "P:[length(open_uis)]" + return ..() +*/ + +/datum/controller/subsystem/tgui/stat_entry() + return ..("P:[length(open_uis)]") + +/datum/controller/subsystem/tgui/fire(resumed = FALSE) + if(!resumed) + src.current_run = open_uis.Copy() + // Cache for sanic speed (lists are references anyways) + var/list/current_run = src.current_run + while(current_run.len) + var/datum/tgui/ui = current_run[current_run.len] + current_run.len-- + // TODO: Move user/src_object check to process() + if(ui && ui.user && ui.src_object) + ui.process() + else + open_uis.Remove(ui) + if(MC_TICK_CHECK) + return + +/** + * public + * + * Requests a usable tgui window from the pool. + * Returns null if pool was exhausted. + * + * required user mob + * return datum/tgui + */ +/datum/controller/subsystem/tgui/proc/request_pooled_window(mob/user) + if(!user.client) + return null + var/list/windows = user.client.tgui_windows + var/window_id + var/datum/tgui_window/window + var/window_found = FALSE + // Find a usable window + for(var/i in 1 to TGUI_WINDOW_HARD_LIMIT) + window_id = TGUI_WINDOW_ID(i) + window = windows[window_id] + // As we are looping, create missing window datums + if(!window) + window = new(user.client, window_id, pooled = TRUE) + // Skip windows with acquired locks + if(window.locked) + continue + if(window.status == TGUI_WINDOW_READY) + return window + if(window.status == TGUI_WINDOW_CLOSED) + window.status = TGUI_WINDOW_LOADING + window_found = TRUE + break + if(!window_found) + log_tgui(user, "Error: Pool exhausted", + context = "SStgui/request_pooled_window") + return null + return window + +/** + * public + * + * Force closes all tgui windows. + * + * required user mob + */ +/datum/controller/subsystem/tgui/proc/force_close_all_windows(mob/user) + log_tgui(user, context = "SStgui/force_close_all_windows") + if(user.client) + user.client.tgui_windows = list() + for(var/i in 1 to TGUI_WINDOW_HARD_LIMIT) + var/window_id = TGUI_WINDOW_ID(i) + user << browse(null, "window=[window_id]") + +/** + * public + * + * Force closes the tgui window by window_id. + * + * required user mob + * required window_id string + */ +/datum/controller/subsystem/tgui/proc/force_close_window(mob/user, window_id) + log_tgui(user, context = "SStgui/force_close_window") + // Close all tgui datums based on window_id. + for(var/datum/tgui/ui in user.tgui_open_uis) + if(ui.window && ui.window.id == window_id) + ui.close(can_be_suspended = FALSE) + // Unset machine just to be sure. + user.unset_machine() + // Close window directly just to be sure. + user << browse(null, "window=[window_id]") + +/** + * public + * + * Try to find an instance of a UI, and push an update to it. + * + * required user mob The mob who opened/is using the UI. + * required src_object datum The object/datum which owns the UI. + * optional ui datum/tgui The UI to be updated, if it exists. + * optional force_open bool If the UI should be re-opened instead of updated. + * + * return datum/tgui The found UI. + */ +/datum/controller/subsystem/tgui/proc/try_update_ui( + mob/user, + datum/src_object, + datum/tgui/ui) + // Look up a UI if it wasn't passed + if(isnull(ui)) + ui = get_open_ui(user, src_object) + // Couldn't find a UI. + if(isnull(ui)) + return null + ui.process_status() + // UI ended up with the closed status + // or is actively trying to close itself. + // FIXME: Doesn't actually fix the paper bug. + if(ui.status <= UI_CLOSE) + ui.close() + return null + ui.send_update() + return ui + +/** + * public + * + * Get a open UI given a user and src_object. + * + * required user mob The mob who opened/is using the UI. + * required src_object datum The object/datum which owns the UI. + * + * return datum/tgui The found UI. + */ +/datum/controller/subsystem/tgui/proc/get_open_ui(mob/user, datum/src_object) + var/key = "[REF(src_object)]" + // No UIs opened for this src_object + if(isnull(open_uis_by_src[key]) || !istype(open_uis_by_src[key], /list)) + return null + for(var/datum/tgui/ui in open_uis_by_src[key]) + // Make sure we have the right user + if(ui.user == user) + return ui + return null + +/** + * public + * + * Update all UIs attached to src_object. + * + * required src_object datum The object/datum which owns the UIs. + * + * return int The number of UIs updated. + */ +/datum/controller/subsystem/tgui/proc/update_uis(datum/src_object) + var/count = 0 + var/key = "[REF(src_object)]" + // No UIs opened for this src_object + if(isnull(open_uis_by_src[key]) || !istype(open_uis_by_src[key], /list)) + return count + for(var/datum/tgui/ui in open_uis_by_src[key]) + // Check if UI is valid. + if(ui && ui.src_object && ui.user && ui.src_object.ui_host(ui.user)) + ui.process(force = 1) + count++ + return count + +/** + * public + * + * Close all UIs attached to src_object. + * + * required src_object datum The object/datum which owns the UIs. + * + * return int The number of UIs closed. + */ +/datum/controller/subsystem/tgui/proc/close_uis(datum/src_object) + var/count = 0 + var/key = "[REF(src_object)]" + // No UIs opened for this src_object + if(isnull(open_uis_by_src[key]) || !istype(open_uis_by_src[key], /list)) + return count + for(var/datum/tgui/ui in open_uis_by_src[key]) + // Check if UI is valid. + if(ui && ui.src_object && ui.user && ui.src_object.ui_host(ui.user)) + ui.close() + count++ + return count + +/** + * public + * + * Close all UIs regardless of their attachment to src_object. + * + * return int The number of UIs closed. + */ +/datum/controller/subsystem/tgui/proc/close_all_uis() + var/count = 0 + for(var/key in open_uis_by_src) + for(var/datum/tgui/ui in open_uis_by_src[key]) + // Check if UI is valid. + if(ui && ui.src_object && ui.user && ui.src_object.ui_host(ui.user)) + ui.close() + count++ + return count + +/** + * public + * + * Update all UIs belonging to a user. + * + * required user mob The mob who opened/is using the UI. + * optional src_object datum If provided, only update UIs belonging this src_object. + * + * return int The number of UIs updated. + */ +/datum/controller/subsystem/tgui/proc/update_user_uis(mob/user, datum/src_object) + var/count = 0 + if(length(user?.tgui_open_uis) == 0) + return count + for(var/datum/tgui/ui in user.tgui_open_uis) + if(isnull(src_object) || ui.src_object == src_object) + ui.process(force = 1) + count++ + return count + +/** + * public + * + * Close all UIs belonging to a user. + * + * required user mob The mob who opened/is using the UI. + * optional src_object datum If provided, only close UIs belonging this src_object. + * + * return int The number of UIs closed. + */ +/datum/controller/subsystem/tgui/proc/close_user_uis(mob/user, datum/src_object) + var/count = 0 + if(length(user?.tgui_open_uis) == 0) + return count + for(var/datum/tgui/ui in user.tgui_open_uis) + if(isnull(src_object) || ui.src_object == src_object) + ui.close() + count++ + return count + +/** + * private + * + * Add a UI to the list of open UIs. + * + * required ui datum/tgui The UI to be added. + */ +/datum/controller/subsystem/tgui/proc/on_open(datum/tgui/ui) + var/key = "[REF(ui.src_object)]" + if(isnull(open_uis_by_src[key]) || !istype(open_uis_by_src[key], /list)) + open_uis_by_src[key] = list() + ui.user.tgui_open_uis |= ui + var/list/uis = open_uis_by_src[key] + uis |= ui + open_uis |= ui + +/** + * private + * + * Remove a UI from the list of open UIs. + * + * required ui datum/tgui The UI to be removed. + * + * return bool If the UI was removed or not. + */ +/datum/controller/subsystem/tgui/proc/on_close(datum/tgui/ui) + var/key = "[REF(ui.src_object)]" + if(isnull(open_uis_by_src[key]) || !istype(open_uis_by_src[key], /list)) + return FALSE + // Remove it from the list of processing UIs. + open_uis.Remove(ui) + // If the user exists, remove it from them too. + if(ui.user) + ui.user.tgui_open_uis.Remove(ui) + var/list/uis = open_uis_by_src[key] + uis.Remove(ui) + if(length(uis) == 0) + open_uis_by_src.Remove(key) + return TRUE + +/** + * private + * + * Handle client logout, by closing all their UIs. + * + * required user mob The mob which logged out. + * + * return int The number of UIs closed. + */ +/datum/controller/subsystem/tgui/proc/on_logout(mob/user) + close_user_uis(user) + +/** + * private + * + * Handle clients switching mobs, by transferring their UIs. + * + * required user source The client's original mob. + * required user target The client's new mob. + * + * return bool If the UIs were transferred. + */ +/datum/controller/subsystem/tgui/proc/on_transfer(mob/source, mob/target) + // The old mob had no open UIs. + if(length(source?.tgui_open_uis) == 0) + return FALSE + if(isnull(target.tgui_open_uis) || !istype(target.tgui_open_uis, /list)) + target.tgui_open_uis = list() + // Transfer all the UIs. + for(var/datum/tgui/ui in source.tgui_open_uis) + // Inform the UIs of their new owner. + ui.user = target + target.tgui_open_uis.Add(ui) + // Clear the old list. + source.tgui_open_uis.Cut() + return TRUE diff --git a/code/game/world.dm b/code/game/world.dm index d024e01fdc2..ea5d467dda2 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -15,19 +15,22 @@ GLOBAL_VAR_INIT(tgs_initialized, FALSE) GLOBAL_VAR(topic_status_lastcache) GLOBAL_LIST(topic_status_cache) +//This happens after the Master subsystem new(s) (it's a global datum) +//So subsystems globals exist, but are not initialised /world/New() var/extools = world.GetConfig("env", "EXTOOLS_DLL") || (world.system_type == MS_WINDOWS ? "./byond-extools.dll" : "./libbyond-extools.so") if (fexists(extools)) call(extools, "maptick_initialize")() enable_debugger() - make_datum_reference_lists() - log_world("World loaded at [TIME_STAMP("hh:mm:ss", FALSE)]!") var/tempfile = "data/logs/config_error.[GUID()].log" //temporary file used to record errors with loading config, moved to log directory once logging is set GLOB.config_error_log = GLOB.world_href_log = GLOB.world_runtime_log = GLOB.world_map_error_log = GLOB.world_attack_log = GLOB.world_game_log = tempfile + make_datum_reference_lists() //initialises global lists for referencing frequently used datums (so that we only ever do it once) + + GLOB.revdata = new InitTgs() @@ -105,8 +108,6 @@ GLOBAL_LIST(topic_status_cache) if(config_legacy.ToRban) ToRban_autoupdate() -#undef RECOMMENDED_VERSION - return /world/proc/InitTgs() @@ -143,14 +144,20 @@ GLOBAL_LIST(topic_status_cache) GLOB.world_qdel_log = "[GLOB.log_directory]/qdel.log" GLOB.world_map_error_log = "[GLOB.log_directory]/map_errors.log" GLOB.world_runtime_log = "[GLOB.log_directory]/runtime.log" + GLOB.tgui_log = "[GLOB.log_directory]/tgui.log" GLOB.subsystem_log = "[GLOB.log_directory]/subsystem.log" +#ifdef UNIT_TESTS + GLOB.test_log = file("[GLOB.log_directory]/tests.log") + start_log(GLOB.test_log) +#endif start_log(GLOB.world_game_log) start_log(GLOB.world_attack_log) start_log(GLOB.world_href_log) start_log(GLOB.world_qdel_log) start_log(GLOB.world_map_error_log) start_log(GLOB.world_runtime_log) + start_log(GLOB.tgui_log) start_log(GLOB.subsystem_log) GLOB.changelog_hash = md5('html/changelog.html') //for telling if the changelog has changed recently @@ -187,7 +194,7 @@ GLOBAL_LIST(topic_status_cache) break if(!handler || initial(handler.log)) - log_topic("\"[T]\", from:[addr], aster:[master], key:[key]") + log_topic("\"[T]\", from:[addr], master:[master], key:[key]") if(!handler) return diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 94835fdf82e..0c7a1e58d6e 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -120,7 +120,7 @@ var/list/admin_verbs_sounds = list( /client/proc/play_local_sound, /client/proc/play_sound, /client/proc/play_web_sound, - /client/proc/play_web_sound_manual, + /client/proc/manual_play_web_sound, /client/proc/stop_sounds ) @@ -279,7 +279,7 @@ var/list/admin_verbs_hideable = list( /client/proc/play_local_sound, /client/proc/play_sound, /client/proc/play_web_sound, - /client/proc/play_web_sound_manual, + /client/proc/manual_play_web_sound, /client/proc/stop_sounds, /client/proc/object_talk, /datum/admins/proc/cmd_admin_dress, diff --git a/code/modules/admin/verbs/playsound.dm b/code/modules/admin/verbs/playsound.dm index ad986e287d6..676e94b74be 100644 --- a/code/modules/admin/verbs/playsound.dm +++ b/code/modules/admin/verbs/playsound.dm @@ -9,14 +9,13 @@ return var/freq = input(usr, "What frequency would you like the sound to play at?",, 1) as null|num if(!freq) - return - vol = min(max(vol, 1), 100) + freq = 1 + vol = clamp(vol, 1, 100) var/sound/admin_sound = new() admin_sound.file = S admin_sound.priority = 250 - //admin_sound.channel = CHANNEL_ADMIN - admin_sound.channel = 777 + admin_sound.channel = CHANNEL_ADMIN admin_sound.frequency = freq admin_sound.wait = 1 admin_sound.repeat = 0 @@ -34,8 +33,12 @@ message_admins("[key_name_admin(src)] played sound [S]") for(var/mob/M in player_list) - if(M.is_preference_enabled(/datum/client_preference/play_admin_midis)) - M << admin_sound + if(M.is_preference_enabled(/datum/client_preference/play_admin_midis)) //if(M.client.prefs.toggles & SOUND_MIDI) + admin_sound.volume = vol * M.client.admin_music_volume + SEND_SOUND(M, admin_sound) + admin_sound.volume = vol + + feedback_add_details("admin_verb","PGS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/play_local_sound(S as sound) set category = "Fun" @@ -49,11 +52,6 @@ feedback_add_details("admin_verb","PLS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/play_web_sound() - set category = "Fun" - to_chat(src, "Due to the fact that the coder who ported this decided to whip this up in less than an hour, this doesn't work. Use the web sound manual verb with a youtube-dl fetched link.") - return - -#ifdef RANDOM_BULLSHIT_DEFINE set category = "Fun" set name = "Play Internet Sound" if(!check_rights(R_SOUNDS)) @@ -61,14 +59,14 @@ var/ytdl = CONFIG_GET(string/invoke_youtubedl) if(!ytdl) - to_chat(src, "Youtube-dl was not configured, action unavailable") //Check config_legacy.txt for the INVOKE_YOUTUBEDL value + to_chat(src, "Youtube-dl was not configured, action unavailable") //Check config.txt for the INVOKE_YOUTUBEDL value return var/web_sound_input = input("Enter content URL (supported sites only, leave blank to stop playing)", "Play Internet Sound via youtube-dl") as text|null if(istext(web_sound_input)) var/web_sound_url = "" var/stop_web_sounds = FALSE - var/pitch + var/list/music_extra_data = list() if(length(web_sound_input)) web_sound_input = trim(web_sound_input) @@ -96,6 +94,10 @@ var/webpage_url = title if (data["webpage_url"]) webpage_url = "[title]" + music_extra_data["start"] = data["start_time"] + music_extra_data["end"] = data["end_time"] + music_extra_data["link"] = data["webpage_url"] + music_extra_data["title"] = data["title"] var/res = alert(usr, "Show the title of and link to this song to the players?\n[title]",, "No", "Yes", "Cancel") switch(res) @@ -103,8 +105,7 @@ to_chat(world, "An admin played: [webpage_url]") if("Cancel") return - - SSblackbox.record_feedback("nested tally", "played_url", 1, list("[ckey]", "[web_sound_input]")) + // SSblackbox.record_feedback("nested tally", "played_url", 1, list("[ckey]", "[web_sound_input]")) log_admin("[key_name(src)] played web sound: [web_sound_input]") message_admins("[key_name(src)] played web sound: [web_sound_input]") else @@ -125,51 +126,74 @@ for(var/m in player_list) var/mob/M = m var/client/C = M.client - if((C.prefs.toggles & SOUND_MIDI) && C.chatOutput && !C.chatOutput.broken && C.chatOutput.loaded) + if(M.is_preference_enabled(/datum/client_preference/play_admin_midis)) //if(C.prefs.toggles & SOUND_MIDI) if(!stop_web_sounds) - C.chatOutput.sendMusic(web_sound_url, pitch) + C.tgui_panel?.play_music(web_sound_url, music_extra_data) else - C.chatOutput.stopMusic() + C.tgui_panel?.stop_music() - SSblackbox.record_feedback("tally", "admin_verb", 1, "Play Internet Sound") -#endif + // SSblackbox.record_feedback("tally", "admin_verb", 1, "Play Internet Sound") + feedback_add_details("admin_verb","PIS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/client/proc/play_web_sound_manual() +/client/proc/manual_play_web_sound() set category = "Fun" set name = "Manual Play Internet Sound" if(!check_rights(R_SOUNDS)) return - var/web_sound_input = input("Enter youtube-dl fetched content URL (supported sites only, leave blank to stop playing)", "Send youtube-dl media link") as text|null - if(!istext(web_sound_input)) - return - web_sound_input = trim(web_sound_input) - if(!length(web_sound_input)) - log_admin("[key_name(src)] stopped web sound") - message_admins("[key_name(src)] stopped web sound") + var/web_sound_input = input("Enter content stream URL (must be a direct link)", "Play Internet Sound via direct URL") as text|null + if(istext(web_sound_input)) + if(!length(web_sound_input)) + log_admin("[key_name(src)] stopped web sound") + message_admins("[key_name(src)] stopped web sound") + var/mob/M + for(var/i in player_list) + M = i + M?.client?.tgui_panel?.stop_music() + return + + var/list/music_extra_data = list() + web_sound_input = trim(web_sound_input) + if(web_sound_input && (findtext(web_sound_input, ":") && !findtext(web_sound_input, is_http_protocol))) + to_chat(src, "Non-http(s) URIs are not allowed.", confidential = TRUE) + return + + var/list/explode = splittext(web_sound_input, "/") //if url=="https://fixthisshit.com/pogchamp.ogg"then title="pogchamp.ogg" + var/title = "[explode[explode.len]]" + + if(!findtext(title, ".mp3") && !findtext(title, ".mp4")) // IE sucks. + to_chat(src, "The format is not .mp3/.mp4, IE 8 and above can only support the .mp3/.mp4 format, the music might not play.", confidential = TRUE) + + if(length(title) > 50) //kev no. + title = "Unknown.mp3" + + music_extra_data["title"] = title + + //SSblackbox.record_feedback("nested tally", "played_url", 1, list("[ckey]", "[web_sound_input]")) + log_admin("[key_name(src)] played web sound: [web_sound_input]") + message_admins("[key_name(src)] played web sound: [web_sound_input]") + for(var/m in player_list) var/mob/M = m var/client/C = M.client - if(M.is_preference_enabled(/datum/client_preference/play_admin_midis) && C.chatOutput && !C.chatOutput.broken && C.chatOutput.loaded) - C.chatOutput.stopMusic() - return - var/freq = input(usr, "What frequency would you like the sound to play at?",, 1) as null|num - if(!freq) - return - if(web_sound_input && !findtext(web_sound_input, is_http_protocol)) - to_chat(src, "BLOCKED: Content URL not using http(s) protocol") - to_chat(src, "The media provider returned a content URL that isn't using the HTTP or HTTPS protocol") + if(M.is_preference_enabled(/datum/client_preference/play_admin_midis)) //if(C.prefs.toggles & SOUND_MIDI) + C.tgui_panel?.play_music(web_sound_input, music_extra_data) + + //SSblackbox.record_feedback("tally", "admin_verb", 1, "Manual Play Internet Sound") + feedback_add_details("admin_verb","MPIS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! +/* +/client/proc/set_round_end_sound(S as sound) + set category = "Fun" + set name = "Set Round End Sound" + if(!check_rights(R_SOUNDS)) return - feedback_add_details("admin_verb","PWSM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - log_admin("[key_name(src)] played web sound: [web_sound_input]") - message_admins("[key_name(src)] played web sound.") - for(var/m in player_list) - var/mob/M = m - var/client/C = M.client - if(M.is_preference_enabled(/datum/client_preference/play_admin_midis) && C.chatOutput && !C.chatOutput.broken && C.chatOutput.loaded) - C.chatOutput.sendMusic(web_sound_input, freq) + SSticker.SetRoundEndSound(S) + log_admin("[key_name(src)] set the round end sound to [S]") + message_admins("[key_name_admin(src)] set the round end sound to [S]") + SSblackbox.record_feedback("tally", "admin_verb", 1, "Set Round End Sound") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! +*/ /client/proc/stop_sounds() set category = "Debug" set name = "Stop All Playing Sounds" @@ -179,19 +203,8 @@ log_admin("[key_name(src)] stopped all currently playing sounds.") message_admins("[key_name_admin(src)] stopped all currently playing sounds.") for(var/mob/M in player_list) - if(M.client) - M << sound(null) - var/client/C = M.client - if(C && C.chatOutput && !C.chatOutput.broken && C.chatOutput.loaded) - C.chatOutput.stopMusic() + SEND_SOUND(M, sound(null)) + var/client/C = M.client + C?.tgui_panel?.stop_music() + // SSblackbox.record_feedback("tally", "admin_verb", 1, "Stop All Playing Sounds") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! feedback_add_details("admin_verb","SAPS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/verb/stop_client_sounds() - set name = "Stop Sounds" - set category = "Preferences" - set desc = "Stop Current Sounds" - usr << sound(null) - var/client/C = usr.client - if(C && C.chatOutput && !C.chatOutput.broken && C.chatOutput.loaded) - C.chatOutput.stopMusic() - feedback_add_details("preferences_verb","SCS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm index 0c8115488e8..c35f289e5db 100644 --- a/code/modules/asset_cache/asset_list_items.dm +++ b/code/modules/asset_cache/asset_list_items.dm @@ -23,25 +23,28 @@ . = ..() +//DEFINITIONS FOR ASSET DATUMS START HERE. + /datum/asset/simple/tgui_common keep_local_name = TRUE assets = list( - "tgui-common.chunk.js" = 'tgui/packages/tgui/public/tgui-common.chunk.js', + "tgui-common.chunk.js" = 'tgui/public/tgui-common.chunk.js', ) -/* -/datum/asset/simple/tgui // soon(TM) + +/datum/asset/simple/tgui keep_local_name = TRUE assets = list( - "tgui.bundle.js" = 'tgui/packages/tgui/public/tgui.bundle.js', - "tgui.bundle.css" = 'tgui/packages/tgui/public/tgui.bundle.css', + "tgui.bundle.js" = 'tgui/public/tgui.bundle.js', + "tgui.bundle.css" = 'tgui/public/tgui.bundle.css', ) -*/ + /datum/asset/simple/tgui_panel keep_local_name = TRUE assets = list( - "tgui-panel.bundle.js" = 'tgui/packages/tgui/public/tgui-panel.bundle.js', - "tgui-panel.bundle.css" = 'tgui/packages/tgui/public/tgui-panel.bundle.css', + "tgui-panel.bundle.js" = 'tgui/public/tgui-panel.bundle.js', + "tgui-panel.bundle.css" = 'tgui/public/tgui-panel.bundle.css', ) + /* /datum/asset/simple/headers assets = list( diff --git a/code/modules/client/client_defines.dm b/code/modules/client/client_defines.dm index 8641d7a41f2..84bd0669f3e 100644 --- a/code/modules/client/client_defines.dm +++ b/code/modules/client/client_defines.dm @@ -6,6 +6,7 @@ //////////////// //ADMIN THINGS// //////////////// + ///Contains admin info. Null if client is not an admin. var/datum/admins/holder = null var/datum/admins/deadmin_holder = null var/buildmode = 0 diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 4b8cc0124ae..731579d5da9 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -90,9 +90,9 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( asset_cache_preload_data(href_list["asset_cache_preload_data"]) return - // Tgui Topic middleware. Soon:tm: - // if(tgui_Topic(href_list)) - // return + // Tgui Topic middleware. + if(tgui_Topic(href_list)) + return //Admin PM if(href_list["priv_msg"]) @@ -123,8 +123,6 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( return prefs.process_link(usr,href_list) if("vars") return view_var_Topic(href,href_list,hsrc) - if("chat") - return chatOutput.Topic(href, href_list) switch(href_list["action"]) if("openLink") @@ -167,8 +165,8 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( GLOB.clients += src GLOB.directory[ckey] = src - // Initialize goonchat - chatOutput = new /datum/chatOutput(src) + // Instantiate tgui panel + tgui_panel = new(src) GLOB.ahelp_tickets.ClientLogin(src) var/connecting_admin = FALSE //because de-admined admins connecting should be treated like admins. @@ -287,8 +285,8 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( update_movement_keys() // Initialize tgui panel - // tgui_panel.initialize() - chatOutput.start() // Starts the chat + tgui_panel.initialize() + // src << browse(file('html/statbrowser.html'), "window=statbrowser") //if(alert_mob_dupe_login) // spawn() @@ -366,7 +364,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( if(prefs.lastchangelog != GLOB.changelog_hash) //bolds the changelog button on the interface so we know there are updates. to_chat(src, "You have unread updates in the changelog.") - winset(src, "rpane.changelog", "background-color=#eaeaea;font-style=bold") + winset(src, "infowindow.changelog", "background-color=#eaeaea;font-style=bold") if(config_legacy.aggressive_changelog) src.changes() diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index d3b91d7cd1a..f931ffac4ca 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -2,7 +2,7 @@ var/list/preferences_datums = list() -datum/preferences +/datum/preferences //doohickeys for savefiles var/path var/default_slot = 1 //Holder so it doesn't default to slot 1, rather the last one used @@ -21,6 +21,8 @@ datum/preferences var/loadcharcooldown //game-preferences + var/tgui_fancy = TRUE + var/tgui_lock = TRUE var/lastchangelog = "" //Saved changlog filesize to detect if there was a change var/ooccolor = "#010000" //Whatever this is set to acts as 'reset' color and is thus unusable as an actual custom color var/be_special = 0 //Special role selection diff --git a/code/modules/media/mediamanager.dm b/code/modules/media/mediamanager.dm index 480d9b67f20..49da3d54da8 100644 --- a/code/modules/media/mediamanager.dm +++ b/code/modules/media/mediamanager.dm @@ -113,7 +113,7 @@ var/client/owner // Client this is actually running in var/forced=0 // If true, current url overrides area media sources var/playerstyle // Choice of which player plugin to use - var/const/WINDOW_ID = "rpane.mediapanel" // Which elem in skin.dmf to use + var/const/WINDOW_ID = "infowindow.mediapanel" // Which elem in skin.dmf to use /datum/media_manager/New(var/client/C) ASSERT(istype(C)) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index bbdbd5ce041..05ab353d49b 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -481,7 +481,7 @@ prefs.lastchangelog = GLOB.changelog_hash SScharacter_setup.queue_preferences_save(prefs) prefs.save_preferences() - winset(src, "rpane.changelog", "background-color=none;font-style=;") + winset(src, "infowindow.changelog", "background-color=none;font-style=;") /mob/verb/observe() set name = "Observe" diff --git a/code/modules/nano/interaction/default.dm b/code/modules/nano/interaction/default.dm index c0cd54c8d54..85036f2d3e7 100644 --- a/code/modules/nano/interaction/default.dm +++ b/code/modules/nano/interaction/default.dm @@ -4,25 +4,25 @@ return list() /datum/topic_state/default/can_use_topic(var/src_object, var/mob/user) - return user.default_can_use_topic(src_object) + return user.nano_default_can_use_topic(src_object) -/mob/proc/default_can_use_topic(var/src_object) +/mob/proc/nano_default_can_use_topic(var/src_object) return STATUS_CLOSE // By default no mob can do anything with NanoUI -/mob/observer/dead/default_can_use_topic(var/src_object) +/mob/observer/dead/nano_default_can_use_topic(var/src_object) if(can_admin_interact()) return STATUS_INTERACTIVE // Admins are more equal if(!client || get_dist(src_object, src) > client.view) // Preventing ghosts from having a million windows open by limiting to objects in range return STATUS_CLOSE return STATUS_UPDATE // Ghosts can view updates -/mob/living/silicon/pai/default_can_use_topic(var/src_object) +/mob/living/silicon/pai/nano_default_can_use_topic(var/src_object) if((src_object == src || src_object == radio || src_object == communicator) && !stat) return STATUS_INTERACTIVE else return ..() -/mob/living/silicon/robot/default_can_use_topic(var/src_object) +/mob/living/silicon/robot/nano_default_can_use_topic(var/src_object) . = shared_nano_interaction() if(. <= STATUS_DISABLED) return @@ -32,7 +32,7 @@ return STATUS_INTERACTIVE // interactive (green visibility) return STATUS_DISABLED // no updates, completely disabled (red visibility) -/mob/living/silicon/ai/default_can_use_topic(var/src_object) +/mob/living/silicon/ai/nano_default_can_use_topic(var/src_object) . = shared_nano_interaction() if(. != STATUS_INTERACTIVE) return @@ -75,7 +75,7 @@ return STATUS_DISABLED // no updates, completely disabled (red visibility) return STATUS_CLOSE -/mob/living/default_can_use_topic(var/src_object) +/mob/living/nano_default_can_use_topic(var/src_object) . = shared_nano_interaction(src_object) if(. != STATUS_CLOSE) if(loc) @@ -83,7 +83,7 @@ if(STATUS_INTERACTIVE) return STATUS_UPDATE -/mob/living/carbon/human/default_can_use_topic(var/src_object) +/mob/living/carbon/human/nano_default_can_use_topic(var/src_object) . = shared_nano_interaction(src_object) if(. != STATUS_CLOSE) . = min(., shared_living_nano_distance(src_object)) diff --git a/code/modules/power/fission/engine.dm b/code/modules/power/fission/engine.dm index 79c9d314efe..9bb468ca6a3 100644 --- a/code/modules/power/fission/engine.dm +++ b/code/modules/power/fission/engine.dm @@ -34,22 +34,23 @@ var/list/obj/machinery/atmospherics/pipe/pipes var/obj/item/radio/radio -/obj/machinery/power/fission/New() +/obj/machinery/power/fission/Initialize(mapload, newdir) . = ..() uid = gl_uid++ rods = new() pipes = new() - radio = new /obj/item/radio{channels=list("Engineering") - icon = 'icons/obj/robot_component.dmi' - icon_state = "radio"}(src) + radio = new /obj/item/radio(src) + radio.icon = 'icons/obj/robot_component.dmi' + radio.icon_state = "radio" + radio.channels = list("Engineering") /obj/machinery/power/fission/Destroy() - for(var/i=1,i<=rods.len,i++) - eject_rod(rods[i]) + for(var/rod in rods) // assume the rods are valid. + eject_rod(rod) rods = null pipes = null - qdel(radio) - . = ..() + QDEL_NULL(radio) + return ..() /obj/machinery/power/fission/process() var/turf/L = loc @@ -105,20 +106,20 @@ var/power = (decay_heat / REACTOR_RADS_TO_MJ) * max(healthmul, 0.1) SSradiation.radiate(src, max(power * REACTOR_RADIATION_MULTIPLIER, 0)) -/obj/machinery/power/fission/attack_hand(mob/user as mob) +/obj/machinery/power/fission/attack_hand(mob/user) nano_ui_interact(user) -/obj/machinery/power/fission/attack_robot(mob/user as mob) +/obj/machinery/power/fission/attack_robot(mob/user) nano_ui_interact(user) -/obj/machinery/power/fission/attack_ai(mob/user as mob) +/obj/machinery/power/fission/attack_ai(mob/user) nano_ui_interact(user) -/obj/machinery/power/fission/nano_ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) +/obj/machinery/power/fission/nano_ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1) if(!powered() || !anchored) return - var/data = ui_data() + var/data = nuke_ui_data() ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open) if(!ui) @@ -127,7 +128,7 @@ ui.open() ui.set_auto_update(1) -/obj/machinery/power/fission/proc/ui_data(need_power = FALSE) +/obj/machinery/power/fission/proc/nuke_ui_data(need_power = FALSE) var/data[0] data["integrity_percentage"] = round(get_integrity()) @@ -194,7 +195,7 @@ usr.set_machine(src) src.add_fingerprint(usr) -/obj/machinery/power/fission/attackby(var/obj/item/W as obj, var/mob/user as mob) +/obj/machinery/power/fission/attackby(obj/item/W , mob/user) add_fingerprint(user) if(exploded) return ..() @@ -235,8 +236,7 @@ if(rods.len == 0) to_chat(user, "There's nothing left to remove.") return - for(var/i=1,i<=rods.len,i++) - var/obj/item/fuelrod/rod = rods[i] + for(var/obj/item/fuelrod/rod in rods) if(rod.health == 0 || rod.life == 0) to_chat(user, "You carefully start removing \the [rod] from \the [src].") if(do_after(user, 40)) @@ -491,13 +491,13 @@ now_you_done_it(L) /obj/machinery/power/fission/proc/now_you_done_it(var/turf/L) - spawn(3 SECONDS) + sleep(3 SECONDS) if (!istype(L)) return var/tx = L.x - 3 var/ty = L.y - 3 var/turf/spider_spawn - for(var/iy = 0,iy < 6, iy++) + for(var/iy = 0, iy < 6, iy++) for(var/ix = 0, ix < 6, ix++) spider_spawn = locate(tx + ix, ty + iy, L.z) if (!istype(spider_spawn, /turf/space)) diff --git a/code/modules/tgchat/message.dm b/code/modules/tgchat/message.dm new file mode 100644 index 00000000000..2e9bfe784ec --- /dev/null +++ b/code/modules/tgchat/message.dm @@ -0,0 +1,17 @@ +/** + * Message-related procs + * + * Message format (/list): + * - type - Message type, must be one of defines in `code/__DEFINES/chat.dm` + * - text - Plain message text + * - html - HTML message text + * - Optional metadata, can be any key/value pair. + * + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +/proc/message_to_html(message) + // Here it is possible to add a switch statement + // to custom-handle various message types. + return message["html"] || message["text"] diff --git a/code/modules/tgchat/to_chat.dm b/code/modules/tgchat/to_chat.dm new file mode 100644 index 00000000000..c1f713f5504 --- /dev/null +++ b/code/modules/tgchat/to_chat.dm @@ -0,0 +1,77 @@ +/** + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +/** + * Circumvents the message queue and sends the message + * to the recipient (target) as soon as possible. + */ +/proc/to_chat_immediate(target, html, + type = null, + text = null, + avoid_highlighting = FALSE, + // FIXME: These flags are now pointless and have no effect + handle_whitespace = TRUE, + trailing_newline = TRUE, + confidential = FALSE) + if(!target || (!html && !text)) + return + if(target == world) + target = GLOB.clients + // Build a message + var/message = list() + if(type) message["type"] = type + if(text) message["text"] = text + if(html) message["html"] = html + if(avoid_highlighting) message["avoidHighlighting"] = avoid_highlighting + var/message_blob = TGUI_CREATE_MESSAGE("chat/message", message) + var/message_html = message_to_html(message) + if(islist(target)) + for(var/_target in target) + var/client/client = CLIENT_FROM_VAR(_target) + if(client) + // Send to tgchat + client.tgui_panel?.window.send_raw_message(message_blob) + // Send to old chat + SEND_TEXT(client, message_html) + return + var/client/client = CLIENT_FROM_VAR(target) + if(client) + // Send to tgchat + client.tgui_panel?.window.send_raw_message(message_blob) + // Send to old chat + SEND_TEXT(client, message_html) + +/** + * Sends the message to the recipient (target). + * + * Recommended way to write to_chat calls: + * ``` + * to_chat(client, + * type = MESSAGE_TYPE_INFO, + * html = "You have found [object]") + * ``` + */ +/proc/to_chat(target, html, + type = null, + text = null, + avoid_highlighting = FALSE, + // FIXME: These flags are now pointless and have no effect + handle_whitespace = TRUE, + trailing_newline = TRUE, + confidential = FALSE) + if(Master.current_runlevel == RUNLEVEL_INIT || !SSchat?.subsystem_initialized) + to_chat_immediate(target, html, type, text) + return + if(!target || (!html && !text)) + return + if(target == world) + target = GLOB.clients + // Build a message + var/message = list() + if(type) message["type"] = type + if(text) message["text"] = text + if(html) message["html"] = html + if(avoid_highlighting) message["avoidHighlighting"] = avoid_highlighting + SSchat.queue(target, message) diff --git a/code/modules/tgui/external.dm b/code/modules/tgui/external.dm new file mode 100644 index 00000000000..52851b2daf0 --- /dev/null +++ b/code/modules/tgui/external.dm @@ -0,0 +1,215 @@ +/** + * External tgui definitions, such as src_object APIs. + * + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +/** + * public + * + * Used to open and update UIs. + * If this proc is not implemented properly, the UI will not update correctly. + * + * required user mob The mob who opened/is using the UI. + * optional ui datum/tgui The UI to be updated, if it exists. + */ +/datum/proc/ui_interact(mob/user, datum/tgui/ui) + return FALSE // Not implemented. + +/** + * public + * + * Data to be sent to the UI. + * This must be implemented for a UI to work. + * + * required user mob The mob interacting with the UI. + * + * return list Data to be sent to the UI. + */ +/datum/proc/ui_data(mob/user) + return list() // Not implemented. + +/** + * public + * + * Static Data to be sent to the UI. + * + * Static data differs from normal data in that it's large data that should be + * sent infrequently. This is implemented optionally for heavy uis that would + * be sending a lot of redundant data frequently. Gets squished into one + * object on the frontend side, but the static part is cached. + * + * required user mob The mob interacting with the UI. + * + * return list Statuic Data to be sent to the UI. + */ +/datum/proc/ui_static_data(mob/user) + return list() + +/** + * public + * + * Forces an update on static data. Should be done manually whenever something + * happens to change static data. + * + * required user the mob currently interacting with the ui + * optional ui ui to be updated + */ +/datum/proc/update_static_data(mob/user, datum/tgui/ui) + if(!ui) + ui = SStgui.get_open_ui(user, src) + if(ui) + ui.send_full_update() + +/** + * public + * + * Called on a UI when the UI receieves a href. + * Think of this as Topic(). + * + * required action string The action/button that has been invoked by the user. + * required params list A list of parameters attached to the button. + * + * return bool If the user's input has been handled and the UI should update. + */ +/datum/proc/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + //SHOULD_CALL_PARENT(TRUE) + // If UI is not interactive or usr calling Topic is not the UI user, bail. + if(!ui || ui.status != UI_INTERACTIVE) + return TRUE + +/** + * public + * + * Called on an object when a tgui object is being created, allowing you to + * push various assets to tgui, for examples spritesheets. + * + * return list List of asset datums or file paths. + */ +/datum/proc/ui_assets(mob/user) + return list() + +/** + * private + * + * The UI's host object (usually src_object). + * This allows modules/datums to have the UI attached to them, + * and be a part of another object. + */ +/datum/proc/ui_host(mob/user) + return src // Default src. + +/** + * private + * + * The UI's state controller to be used for created uis + * This is a proc over a var for memory reasons + */ +/datum/proc/ui_state(mob/user) + return GLOB.default_state + +/** + * global + * + * Associative list of JSON-encoded shared states that were set by + * tgui clients. + */ +/datum/var/list/tgui_shared_states + +/** + * global + * + * Tracks open UIs for a user. + */ +/mob/var/list/tgui_open_uis = list() + +/** + * global + * + * Tracks open windows for a user. + */ +/client/var/list/tgui_windows = list() + +/** + * global + * + * TRUE if cache was reloaded by tgui dev server at least once. + */ +/client/var/tgui_cache_reloaded = FALSE + +/** + * public + * + * Called on a UI's object when the UI is closed, not to be confused with + * client/verb/uiclose(), which closes the ui window + */ +/datum/proc/ui_close(mob/user) + +/** + * verb + * + * Called by UIs when they are closed. + * Must be a verb so winset() can call it. + * + * required uiref ref The UI that was closed. + */ +/client/verb/uiclose(window_id as text) + // Name the verb, and hide it from the user panel. + set name = "uiclose" + set hidden = TRUE + var/mob/user = src?.mob + if(!user) + return + // Close all tgui datums based on window_id. + SStgui.force_close_window(user, window_id) + +/** + * Middleware for /client/Topic. + * + * return bool If TRUE, prevents propagation of the topic call. + */ +/proc/tgui_Topic(href_list) + // Skip non-tgui topics + if(!href_list["tgui"]) + return FALSE + var/type = href_list["type"] + // Unconditionally collect tgui logs + if(type == "log") + var/context = href_list["window_id"] + if (href_list["ns"]) + context += " ([href_list["ns"]])" + log_tgui(usr, href_list["message"], + context = context) + // Reload all tgui windows + if(type == "cacheReloaded") + if(!check_rights(R_ADMIN) || usr.client.tgui_cache_reloaded) + return TRUE + // Mark as reloaded + usr.client.tgui_cache_reloaded = TRUE + // Notify windows + var/list/windows = usr.client.tgui_windows + for(var/window_id in windows) + var/datum/tgui_window/window = windows[window_id] + if (window.status == TGUI_WINDOW_READY) + window.on_message(type, null, href_list) + return TRUE + // Locate window + var/window_id = href_list["window_id"] + var/datum/tgui_window/window + if(window_id) + window = usr.client.tgui_windows[window_id] + if(!window) + log_tgui(usr, + "Error: Couldn't find the window datum, force closing.", + context = window_id) + SStgui.force_close_window(usr, window_id) + return TRUE + // Decode payload + var/payload + if(href_list["payload"]) + payload = json_decode(href_list["payload"]) + // Pass message to window + if(window) + window.on_message(type, payload, href_list) + return TRUE diff --git a/code/modules/tgui/states.dm b/code/modules/tgui/states.dm new file mode 100644 index 00000000000..fd575f004f4 --- /dev/null +++ b/code/modules/tgui/states.dm @@ -0,0 +1,137 @@ +/** + * Base state and helpers for states. Just does some sanity checks, + * implement a proper state for in-depth checks. + * + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +/** + * public + * + * Checks the UI state for a mob. + * + * required user mob The mob who opened/is using the UI. + * required state datum/ui_state The state to check. + * + * return UI_state The state of the UI. + */ +/datum/proc/ui_status(mob/user, datum/ui_state/state) + var/src_object = ui_host(user) + . = UI_CLOSE + if(!state) + return + + if(isobserver(user)) + // If they turn on ghost AI control, admins can always interact. + // if(IsAdminGhost(user)) + // . = max(., UI_INTERACTIVE) + + // Regular ghosts can always at least view if in range. + if(user.client) + var/clientviewlist = getviewsize(user.client.view) + if(get_dist(src_object, user) < max(clientviewlist[1], clientviewlist[2])) + . = max(., UI_UPDATE) + + // Check if the state allows interaction + var/result = state.can_use_topic(src_object, user) + . = max(., result) + +/** + * private + * + * Checks if a user can use src_object's UI, and returns the state. + * Can call a mob proc, which allows overrides for each mob. + * + * required src_object datum The object/datum which owns the UI. + * required user mob The mob who opened/is using the UI. + * + * return UI_state The state of the UI. + */ +/datum/ui_state/proc/can_use_topic(src_object, mob/user) + // Don't allow interaction by default. + return UI_CLOSE + +/** + * public + * + * Standard interaction/sanity checks. Different mob types may have overrides. + * + * return UI_state The state of the UI. + */ +/mob/proc/shared_ui_interaction(src_object) + // Close UIs if mindless. + if(!client) + return UI_CLOSE + // Disable UIs if unconcious. + else if(stat) + return UI_DISABLED + // Update UIs if incapicitated but concious. + else if(incapacitated()) + return UI_UPDATE + return UI_INTERACTIVE +/* +/mob/living/shared_ui_interaction(src_object) + . = ..() + if(!(mobility_flags & MOBILITY_UI) && . == UI_INTERACTIVE) + return UI_UPDATE +*/ +/mob/living/silicon/ai/shared_ui_interaction(src_object) + // Disable UIs if the AI is unpowered. + if(lacks_power()) + return UI_DISABLED + return ..() + +/mob/living/silicon/robot/shared_ui_interaction(src_object) + // Disable UIs if the object isn't installed in the borg AND the borg is either locked, has a dead cell, or no cell. + var/atom/device = src_object + if((istype(device) && device.loc != src) && (!cell || cell.charge <= 0)) // || locked_down + return UI_DISABLED + return ..() + +/** + * public + * + * Check the distance for a living mob. + * Really only used for checks outside the context of a mob. + * Otherwise, use shared_living_ui_distance(). + * + * required src_object The object which owns the UI. + * required user mob The mob who opened/is using the UI. + * + * return UI_state The state of the UI. + */ +/atom/proc/contents_ui_distance(src_object, mob/living/user) + // Just call this mob's check. + return user.shared_living_ui_distance(src_object) + +/** + * public + * + * Distance versus interaction check. + * + * required src_object atom/movable The object which owns the UI. + * + * return UI_state The state of the UI. + */ +/mob/living/proc/shared_living_ui_distance(atom/movable/src_object, viewcheck = TRUE) + // If the object is obscured, close it. + if(viewcheck && !(src_object in view(src))) + return UI_CLOSE + var/dist = get_dist(src_object, src) + // Open and interact if 1-0 tiles away. + if(dist <= 1) + return UI_INTERACTIVE + // View only if 2-3 tiles away. + else if(dist <= 2) + return UI_UPDATE + // Disable if 5 tiles away. + else if(dist <= 5) + return UI_DISABLED + // Otherwise, we got nothing. + return UI_CLOSE + +/mob/living/carbon/human/shared_living_ui_distance(atom/movable/src_object, viewcheck = TRUE) + // if(dna.check_mutation(TK) && tkMaxRangeCheck(src, src_object)) + // return UI_INTERACTIVE + return ..() diff --git a/code/modules/tgui/states/admin.dm b/code/modules/tgui/states/admin.dm new file mode 100644 index 00000000000..3138ca518e0 --- /dev/null +++ b/code/modules/tgui/states/admin.dm @@ -0,0 +1,15 @@ +/** + * tgui state: admin_state + * + * Checks that the user is an admin, end-of-story. + * + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +GLOBAL_DATUM_INIT(admin_state, /datum/ui_state/admin_state, new) + +/datum/ui_state/admin_state/can_use_topic(src_object, mob/user) + if(check_rights(R_ADMIN, FALSE, user.client)) + return UI_INTERACTIVE + return UI_CLOSE diff --git a/code/modules/tgui/states/always.dm b/code/modules/tgui/states/always.dm new file mode 100644 index 00000000000..210f0896a2f --- /dev/null +++ b/code/modules/tgui/states/always.dm @@ -0,0 +1,13 @@ +/** + * tgui state: always_state + * + * Always grants the user UI_INTERACTIVE. Period. + * + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +GLOBAL_DATUM_INIT(always_state, /datum/ui_state/always_state, new) + +/datum/ui_state/always_state/can_use_topic(src_object, mob/user) + return UI_INTERACTIVE diff --git a/code/modules/tgui/states/conscious.dm b/code/modules/tgui/states/conscious.dm new file mode 100644 index 00000000000..670ca7c07e8 --- /dev/null +++ b/code/modules/tgui/states/conscious.dm @@ -0,0 +1,15 @@ +/** + * tgui state: conscious_state + * + * Only checks if the user is conscious. + * + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +GLOBAL_DATUM_INIT(conscious_state, /datum/ui_state/conscious_state, new) + +/datum/ui_state/conscious_state/can_use_topic(src_object, mob/user) + if(user.stat == CONSCIOUS) + return UI_INTERACTIVE + return UI_CLOSE diff --git a/code/modules/tgui/states/contained.dm b/code/modules/tgui/states/contained.dm new file mode 100644 index 00000000000..1eb8edba25f --- /dev/null +++ b/code/modules/tgui/states/contained.dm @@ -0,0 +1,15 @@ +/** + * tgui state: contained_state + * + * Checks that the user is inside the src_object. + * + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +GLOBAL_DATUM_INIT(contained_state, /datum/ui_state/contained_state, new) + +/datum/ui_state/contained_state/can_use_topic(atom/src_object, mob/user) + if(!src_object.contains(user)) + return UI_CLOSE + return user.shared_ui_interaction(src_object) diff --git a/code/modules/tgui/states/debug.dm b/code/modules/tgui/states/debug.dm new file mode 100644 index 00000000000..2e9c0f3d014 --- /dev/null +++ b/code/modules/tgui/states/debug.dm @@ -0,0 +1,6 @@ +GLOBAL_DATUM_INIT(debug_state, /datum/ui_state/debug_state, new) + +/datum/ui_state/debug_state/can_use_topic(src_object, mob/user) + if(check_rights(R_DEBUG, FALSE, user.client)) + return UI_INTERACTIVE + return UI_CLOSE diff --git a/code/modules/tgui/states/deep_inventory.dm b/code/modules/tgui/states/deep_inventory.dm new file mode 100644 index 00000000000..a2b9276a593 --- /dev/null +++ b/code/modules/tgui/states/deep_inventory.dm @@ -0,0 +1,16 @@ +/** + * tgui state: deep_inventory_state + * + * Checks that the src_object is in the user's deep + * (backpack, box, toolbox, etc) inventory. + * + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +GLOBAL_DATUM_INIT(deep_inventory_state, /datum/ui_state/deep_inventory_state, new) + +/datum/ui_state/deep_inventory_state/can_use_topic(src_object, mob/user) + if(!user.contains(src_object)) + return UI_CLOSE + return user.shared_ui_interaction(src_object) diff --git a/code/modules/tgui/states/default.dm b/code/modules/tgui/states/default.dm new file mode 100644 index 00000000000..367e57beffa --- /dev/null +++ b/code/modules/tgui/states/default.dm @@ -0,0 +1,62 @@ +/** + * tgui state: default_state + * + * Checks a number of things -- mostly physical distance for humans + * and view for robots. + * + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +GLOBAL_DATUM_INIT(default_state, /datum/ui_state/default, new) + +/datum/ui_state/default/can_use_topic(src_object, mob/user) + return user.default_can_use_topic(src_object) // Call the individual mob-overridden procs. + +/mob/proc/default_can_use_topic(src_object) + return UI_CLOSE // Don't allow interaction by default. + +/mob/living/default_can_use_topic(src_object) + . = shared_ui_interaction(src_object) + if(. > UI_CLOSE && loc) + . = min(., loc.contents_ui_distance(src_object, src)) // Check the distance... + if(. == UI_INTERACTIVE) // Non-human living mobs can only look, not touch. + return UI_UPDATE + +/mob/living/carbon/human/default_can_use_topic(src_object) + . = shared_ui_interaction(src_object) + if(. > UI_CLOSE) + . = min(., shared_living_ui_distance(src_object)) // Check the distance... + +/mob/living/silicon/robot/default_can_use_topic(src_object) + . = shared_ui_interaction(src_object) + if(. <= UI_DISABLED) + return + + // Robots can interact with anything they can see. + var/list/clientviewlist = getviewsize(client.view) + if(get_dist(src, src_object) <= min(clientviewlist[1],clientviewlist[2])) + return UI_INTERACTIVE + return UI_DISABLED // Otherwise they can keep the UI open. + +/mob/living/silicon/ai/default_can_use_topic(src_object) + . = shared_ui_interaction(src_object) + if(. < UI_INTERACTIVE) + return + + // The AI can interact with anything it can see nearby, or with cameras while wireless control is enabled. + if(!control_disabled && can_see(src_object)) + return UI_INTERACTIVE + return UI_CLOSE + +/mob/living/simple_animal/default_can_use_topic(src_object) + . = shared_ui_interaction(src_object) + if(. > UI_CLOSE) + . = min(., shared_living_ui_distance(src_object)) //simple animals can only use things they're near. + +/mob/living/silicon/pai/default_can_use_topic(src_object) + // pAIs can only use themselves and the owner's radio. + if((src_object == src || src_object == radio) && !stat) + return UI_INTERACTIVE + else + return ..() diff --git a/code/modules/tgui/states/hands.dm b/code/modules/tgui/states/hands.dm new file mode 100644 index 00000000000..1c885ed4140 --- /dev/null +++ b/code/modules/tgui/states/hands.dm @@ -0,0 +1,28 @@ +/** + * tgui state: hands_state + * + * Checks that the src_object is in the user's hands. + * + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +GLOBAL_DATUM_INIT(hands_state, /datum/ui_state/hands_state, new) + +/datum/ui_state/hands_state/can_use_topic(src_object, mob/user) + . = user.shared_ui_interaction(src_object) + if(. > UI_CLOSE) + return min(., user.hands_can_use_topic(src_object)) + +/mob/proc/hands_can_use_topic(src_object) + return UI_CLOSE + +/mob/living/hands_can_use_topic(src_object) + if(is_holding(src_object)) + return UI_INTERACTIVE + return UI_CLOSE + +/mob/living/silicon/robot/hands_can_use_topic(src_object) + if(activated(src_object)) + return UI_INTERACTIVE + return UI_CLOSE diff --git a/code/modules/tgui/states/human_adjacent.dm b/code/modules/tgui/states/human_adjacent.dm new file mode 100644 index 00000000000..2ac7c8637b6 --- /dev/null +++ b/code/modules/tgui/states/human_adjacent.dm @@ -0,0 +1,19 @@ +/** + * tgui state: human_adjacent_state + * + * In addition to default checks, only allows interaction for a + * human adjacent user. + * + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +GLOBAL_DATUM_INIT(human_adjacent_state, /datum/ui_state/human_adjacent_state, new) + +/datum/ui_state/human_adjacent_state/can_use_topic(src_object, mob/user) + . = user.default_can_use_topic(src_object) + + var/dist = get_dist(src_object, user) + if((dist > 1) || (!ishuman(user))) + // Can't be used unless adjacent and human, even with TK + . = min(., UI_UPDATE) diff --git a/code/modules/tgui/states/inventory.dm b/code/modules/tgui/states/inventory.dm new file mode 100644 index 00000000000..dc5dd0d57e6 --- /dev/null +++ b/code/modules/tgui/states/inventory.dm @@ -0,0 +1,16 @@ +/** + * tgui state: inventory_state + * + * Checks that the src_object is in the user's top-level + * (hand, ear, pocket, belt, etc) inventory. + * + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +GLOBAL_DATUM_INIT(inventory_state, /datum/ui_state/inventory_state, new) + +/datum/ui_state/inventory_state/can_use_topic(src_object, mob/user) + if(!(src_object in user)) + return UI_CLOSE + return user.shared_ui_interaction(src_object) diff --git a/code/modules/tgui/states/language_menu.dm b/code/modules/tgui/states/language_menu.dm new file mode 100644 index 00000000000..6389b05cd5e --- /dev/null +++ b/code/modules/tgui/states/language_menu.dm @@ -0,0 +1,17 @@ +/** + * tgui state: language_menu_state + * + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +GLOBAL_DATUM_INIT(language_menu_state, /datum/ui_state/language_menu, new) + +/datum/ui_state/language_menu/can_use_topic(src_object, mob/user) + . = UI_CLOSE + if(check_rights_for(user.client, R_ADMIN)) + . = UI_INTERACTIVE + else if(istype(src_object, /datum/language_menu)) + var/datum/language_menu/LM = src_object + if(LM.language_holder.get_atom() == user) + . = UI_INTERACTIVE diff --git a/code/modules/tgui/states/not_incapacitated.dm b/code/modules/tgui/states/not_incapacitated.dm new file mode 100644 index 00000000000..786f1888d2d --- /dev/null +++ b/code/modules/tgui/states/not_incapacitated.dm @@ -0,0 +1,36 @@ +/** + * tgui state: not_incapacitated_state + * + * Checks that the user isn't incapacitated + * + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +GLOBAL_DATUM_INIT(not_incapacitated_state, /datum/ui_state/not_incapacitated_state, new) + +/** + * tgui state: not_incapacitated_turf_state + * + * Checks that the user isn't incapacitated and that their loc is a turf + */ + +GLOBAL_DATUM_INIT(not_incapacitated_turf_state, /datum/ui_state/not_incapacitated_state, new(no_turfs = TRUE)) + +/datum/ui_state/not_incapacitated_state + var/turf_check = FALSE + +/datum/ui_state/not_incapacitated_state/New(loc, no_turfs = FALSE) + ..() + turf_check = no_turfs + +/datum/ui_state/not_incapacitated_state/can_use_topic(src_object, mob/user) + if(user.stat != CONSCIOUS) + return UI_CLOSE + if(user.incapacitated() || (turf_check && !isturf(user.loc))) + return UI_DISABLED + if(isliving(user)) + var/mob/living/L = user + if(!(L.mobility_flags & MOBILITY_STAND)) + return UI_DISABLED + return UI_INTERACTIVE diff --git a/code/modules/tgui/states/notcontained.dm b/code/modules/tgui/states/notcontained.dm new file mode 100644 index 00000000000..1d4e6aec192 --- /dev/null +++ b/code/modules/tgui/states/notcontained.dm @@ -0,0 +1,30 @@ +/** + * tgui state: notcontained_state + * + * Checks that the user is not inside src_object, and then makes the + * default checks. + * + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +GLOBAL_DATUM_INIT(notcontained_state, /datum/ui_state/notcontained_state, new) + +/datum/ui_state/notcontained_state/can_use_topic(atom/src_object, mob/user) + . = user.shared_ui_interaction(src_object) + if(. > UI_CLOSE) + return min(., user.notcontained_can_use_topic(src_object)) + +/mob/proc/notcontained_can_use_topic(src_object) + return UI_CLOSE + +/mob/living/notcontained_can_use_topic(atom/src_object) + if(src_object.contains(src)) + return UI_CLOSE // Close if we're inside it. + return default_can_use_topic(src_object) + +/mob/living/silicon/notcontained_can_use_topic(src_object) + return default_can_use_topic(src_object) // Silicons use default bevhavior. + +/mob/living/simple_animal/drone/notcontained_can_use_topic(src_object) + return default_can_use_topic(src_object) // Drones use default bevhavior. diff --git a/code/modules/tgui/states/observer.dm b/code/modules/tgui/states/observer.dm new file mode 100644 index 00000000000..d105de1c0c0 --- /dev/null +++ b/code/modules/tgui/states/observer.dm @@ -0,0 +1,16 @@ +/** + * tgui state: observer_state + * + * Checks that the user is an observer/ghost. + * + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +GLOBAL_DATUM_INIT(observer_state, /datum/ui_state/observer_state, new) + +/datum/ui_state/observer_state/can_use_topic(src_object, mob/user) + if(isobserver(user)) + return UI_INTERACTIVE + return UI_CLOSE + diff --git a/code/modules/tgui/states/physical.dm b/code/modules/tgui/states/physical.dm new file mode 100644 index 00000000000..3073039d14c --- /dev/null +++ b/code/modules/tgui/states/physical.dm @@ -0,0 +1,53 @@ +/** + * tgui state: physical_state + * + * Short-circuits the default state to only check physical distance. + * + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +GLOBAL_DATUM_INIT(physical_state, /datum/ui_state/physical, new) + +/datum/ui_state/physical/can_use_topic(src_object, mob/user) + . = user.shared_ui_interaction(src_object) + if(. > UI_CLOSE) + return min(., user.physical_can_use_topic(src_object)) + +/mob/proc/physical_can_use_topic(src_object) + return UI_CLOSE + +/mob/living/physical_can_use_topic(src_object) + return shared_living_ui_distance(src_object) + +/mob/living/silicon/physical_can_use_topic(src_object) + return max(UI_UPDATE, shared_living_ui_distance(src_object)) // Silicons can always see. + +/mob/living/silicon/ai/physical_can_use_topic(src_object) + return UI_UPDATE // AIs are not physical. + + +/** + * tgui state: physical_obscured_state + * + * Short-circuits the default state to only check physical distance, being in view doesn't matter + */ + +GLOBAL_DATUM_INIT(physical_obscured_state, /datum/ui_state/physical_obscured_state, new) + +/datum/ui_state/physical_obscured_state/can_use_topic(src_object, mob/user) + . = user.shared_ui_interaction(src_object) + if(. > UI_CLOSE) + return min(., user.physical_obscured_can_use_topic(src_object)) + +/mob/proc/physical_obscured_can_use_topic(src_object) + return UI_CLOSE + +/mob/living/physical_obscured_can_use_topic(src_object) + return shared_living_ui_distance(src_object, viewcheck = FALSE) + +/mob/living/silicon/physical_obscured_can_use_topic(src_object) + return max(UI_UPDATE, shared_living_ui_distance(src_object, viewcheck = FALSE)) // Silicons can always see. + +/mob/living/silicon/ai/physical_obscured_can_use_topic(src_object) + return UI_UPDATE // AIs are not physical. diff --git a/code/modules/tgui/states/self.dm b/code/modules/tgui/states/self.dm new file mode 100644 index 00000000000..4b6e3b9fd9f --- /dev/null +++ b/code/modules/tgui/states/self.dm @@ -0,0 +1,15 @@ +/** + * tgui state: self_state + * + * Only checks that the user and src_object are the same. + * + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +GLOBAL_DATUM_INIT(self_state, /datum/ui_state/self_state, new) + +/datum/ui_state/self_state/can_use_topic(src_object, mob/user) + if(src_object != user) + return UI_CLOSE + return user.shared_ui_interaction(src_object) diff --git a/code/modules/tgui/states/zlevel.dm b/code/modules/tgui/states/zlevel.dm new file mode 100644 index 00000000000..64ea2fa1c0e --- /dev/null +++ b/code/modules/tgui/states/zlevel.dm @@ -0,0 +1,17 @@ +/** + * tgui state: z_state + * + * Only checks that the Z-level of the user and src_object are the same. + * + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +GLOBAL_DATUM_INIT(z_state, /datum/ui_state/z_state, new) + +/datum/ui_state/z_state/can_use_topic(src_object, mob/user) + var/turf/turf_obj = get_turf(src_object) + var/turf/turf_usr = get_turf(user) + if(turf_obj && turf_usr && turf_obj.z == turf_usr.z) + return UI_INTERACTIVE + return UI_CLOSE diff --git a/code/modules/tgui/tgui.dm b/code/modules/tgui/tgui.dm new file mode 100644 index 00000000000..7322c4179bb --- /dev/null +++ b/code/modules/tgui/tgui.dm @@ -0,0 +1,314 @@ +/** + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +/** + * tgui datum (represents a UI). + */ +/datum/tgui + /// The mob who opened/is using the UI. + var/mob/user + /// The object which owns the UI. + var/datum/src_object + /// The title of te UI. + var/title + /// The window_id for browse() and onclose(). + var/datum/tgui_window/window + /// Key that is used for remembering the window geometry. + var/window_key + /// Deprecated: Window size. + var/window_size + /// The interface (template) to be used for this UI. + var/interface + /// Update the UI every MC tick. + var/autoupdate = TRUE + /// If the UI has been initialized yet. + var/initialized = FALSE + /// Time of opening the window. + var/opened_at + /// Stops further updates when close() was called. + var/closing = FALSE + /// The status/visibility of the UI. + var/status = UI_INTERACTIVE + /// Topic state used to determine status/interactability. + var/datum/ui_state/state = null + +/** + * public + * + * Create a new UI. + * + * required user mob The mob who opened/is using the UI. + * required src_object datum The object or datum which owns the UI. + * required interface string The interface used to render the UI. + * optional title string The title of the UI. + * optional ui_x int Deprecated: Window width. + * optional ui_y int Deprecated: Window height. + * + * return datum/tgui The requested UI. + */ +/datum/tgui/New(mob/user, datum/src_object, interface, title, ui_x, ui_y) + log_tgui(user, + "new [interface] fancy [user?.client?.prefs.tgui_fancy]", + src_object = src_object) + src.user = user + src.src_object = src_object + src.window_key = "[REF(src_object)]-main" + src.interface = interface + if(title) + src.title = title + src.state = src_object.ui_state() + // Deprecated + if(ui_x && ui_y) + src.window_size = list(ui_x, ui_y) + +/** + * public + * + * Open this UI (and initialize it with data). + * + * return bool - TRUE if a new pooled window is opened, FALSE in all other situations including if a new pooled window didn't open because one already exists. + */ +/datum/tgui/proc/open() + if(!user.client) + return FALSE + if(window) + return FALSE + process_status() + if(status < UI_UPDATE) + return FALSE + window = SStgui.request_pooled_window(user) + if(!window) + return FALSE + opened_at = world.time + window.acquire_lock(src) + if(!window.is_ready()) + window.initialize( + fancy = user.client.prefs.tgui_fancy, + inline_assets = list( + get_asset_datum(/datum/asset/simple/tgui_common), + get_asset_datum(/datum/asset/simple/tgui), + )) + else + window.send_message("ping") + var/flush_queue = window.send_asset(get_asset_datum( + /datum/asset/simple/namespaced/fontawesome)) + for(var/datum/asset/asset in src_object.ui_assets(user)) + flush_queue |= window.send_asset(asset) + if (flush_queue) + user.client.browse_queue_flush() + window.send_message("update", get_payload( + with_data = TRUE, + with_static_data = TRUE)) + SStgui.on_open(src) + + return TRUE + +/** + * public + * + * Close the UI. + * + * optional can_be_suspended bool + */ +/datum/tgui/proc/close(can_be_suspended = TRUE) + if(closing) + return + closing = TRUE + // If we don't have window_id, open proc did not have the opportunity + // to finish, therefore it's safe to skip this whole block. + if(window) + // Windows you want to keep are usually blue screens of death + // and we want to keep them around, to allow user to read + // the error message properly. + window.release_lock() + window.close(can_be_suspended) + src_object.ui_close(user) + SStgui.on_close(src) + state = null + qdel(src) + +/** + * public + * + * Enable/disable auto-updating of the UI. + * + * required value bool Enable/disable auto-updating. + */ +/datum/tgui/proc/set_autoupdate(autoupdate) + src.autoupdate = autoupdate + +/** + * public + * + * Replace current ui.state with a new one. + * + * required state datum/ui_state/state Next state + */ +/datum/tgui/proc/set_state(datum/ui_state/state) + src.state = state + +/** + * public + * + * Makes an asset available to use in tgui. + * + * required asset datum/asset + * + * return bool - true if an asset was actually sent + */ +/datum/tgui/proc/send_asset(datum/asset/asset) + if(!window) + CRASH("send_asset() was called either without calling open() first or when open() did not return TRUE.") + return window.send_asset(asset) + +/** + * public + * + * Send a full update to the client (includes static data). + * + * optional custom_data list Custom data to send instead of ui_data. + * optional force bool Send an update even if UI is not interactive. + */ +/datum/tgui/proc/send_full_update(custom_data, force) + if(!user.client || !initialized || closing) + return + var/should_update_data = force || status >= UI_UPDATE + window.send_message("update", get_payload( + custom_data, + with_data = should_update_data, + with_static_data = TRUE)) + +/** + * public + * + * Send a partial update to the client (excludes static data). + * + * optional custom_data list Custom data to send instead of ui_data. + * optional force bool Send an update even if UI is not interactive. + */ +/datum/tgui/proc/send_update(custom_data, force) + if(!user.client || !initialized || closing) + return + var/should_update_data = force || status >= UI_UPDATE + window.send_message("update", get_payload( + custom_data, + with_data = should_update_data)) + +/** + * private + * + * Package the data to send to the UI, as JSON. + * + * return list + */ +/datum/tgui/proc/get_payload(custom_data, with_data, with_static_data) + var/list/json_data = list() + json_data["config"] = list( + "title" = title, + "status" = status, + "interface" = interface, + "window" = list( + "key" = window_key, + "size" = window_size, + "fancy" = user.client.prefs.tgui_fancy, + "locked" = user.client.prefs.tgui_lock, + ), + "client" = list( + "ckey" = user.client.ckey, + "address" = user.client.address, + "computer_id" = user.client.computer_id, + ), + "user" = list( + "name" = "[user]", + "observer" = isobserver(user), + ), + ) + var/data = custom_data || with_data && src_object.ui_data(user) + if(data) + json_data["data"] = data + var/static_data = with_static_data && src_object.ui_static_data(user) + if(static_data) + json_data["static_data"] = static_data + if(src_object.tgui_shared_states) + json_data["shared"] = src_object.tgui_shared_states + return json_data + +/** + * private + * + * Run an update cycle for this UI. Called internally by SStgui + * every second or so. + */ +/datum/tgui/process(delta_time, force = FALSE) + if(closing) + return + var/datum/host = src_object.ui_host(user) + // If the object or user died (or something else), abort. + if(!src_object || !host || !user || !window) + close(can_be_suspended = FALSE) + return + // Validate ping + if(!initialized && world.time - opened_at > TGUI_PING_TIMEOUT) + log_tgui(user, "Error: Zombie window detected, closing.", + window = window, + src_object = src_object) + close(can_be_suspended = FALSE) + return + // Update through a normal call to ui_interact + if(status != UI_DISABLED && (autoupdate || force)) + src_object.ui_interact(user, src) + return + // Update status only + var/needs_update = process_status() + if(status <= UI_CLOSE) + close() + return + if(needs_update) + window.send_message("update", get_payload()) + +/** + * private + * + * Updates the status, and returns TRUE if status has changed. + */ +/datum/tgui/proc/process_status() + var/prev_status = status + status = src_object.ui_status(user, state) + return prev_status != status + +/** + * private + * + * Callback for handling incoming tgui messages. + */ +/datum/tgui/proc/on_message(type, list/payload, list/href_list) + // Pass act type messages to ui_act + if(type && copytext(type, 1, 5) == "act/") + var/act_type = copytext(type, 5) + log_tgui(user, "Action: [act_type] [href_list["payload"]]", + window = window, + src_object = src_object) + process_status() + if(src_object.ui_act(act_type, payload, src, state)) + SStgui.update_uis(src_object) + return FALSE + switch(type) + if("ready") + initialized = TRUE + if("pingReply") + initialized = TRUE + if("suspend") + close(can_be_suspended = TRUE) + if("close") + close(can_be_suspended = FALSE) + if("log") + if(href_list["fatal"]) + close(can_be_suspended = FALSE) + if("setSharedState") + if(status != UI_INTERACTIVE) + return + LAZYINITLIST(src_object.tgui_shared_states) + src_object.tgui_shared_states[href_list["key"]] = href_list["value"] + SStgui.update_uis(src_object) diff --git a/code/modules/tgui/tgui_window.dm b/code/modules/tgui/tgui_window.dm new file mode 100644 index 00000000000..23583e8b530 --- /dev/null +++ b/code/modules/tgui/tgui_window.dm @@ -0,0 +1,322 @@ +/** + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +/datum/tgui_window + var/id + var/client/client + var/pooled + var/pool_index + var/is_browser = FALSE + var/status = TGUI_WINDOW_CLOSED + var/locked = FALSE + var/datum/tgui/locked_by + var/datum/subscriber_object + var/subscriber_delegate + var/fatally_errored = FALSE + var/message_queue + var/sent_assets = list() + // Vars passed to initialize proc (and saved for later) + var/inline_assets + var/fancy + +/** + * public + * + * Create a new tgui window. + * + * required client /client + * required id string A unique window identifier. + */ +/datum/tgui_window/New(client/client, id, pooled = FALSE) + src.id = id + src.client = client + src.client.tgui_windows[id] = src + src.pooled = pooled + if(pooled) + src.pool_index = TGUI_WINDOW_INDEX(id) + +/** + * public + * + * Initializes the window with a fresh page. Puts window into the "loading" + * state. You can begin sending messages right after initializing. Messages + * will be put into the queue until the window finishes loading. + * + * optional inline_assets list List of assets to inline into the html. + * optional inline_html string Custom HTML to inject. + * optional fancy bool If TRUE, will hide the window titlebar. + */ +/datum/tgui_window/proc/initialize( + inline_assets = list(), + inline_html = "", + fancy = FALSE) + log_tgui(client, + context = "[id]/initialize", + window = src) + if(!client) + return + src.inline_assets = inline_assets + src.fancy = fancy + status = TGUI_WINDOW_LOADING + fatally_errored = FALSE + // Build window options + var/options = "file=[id].html;can_minimize=0;auto_format=0;" + // Remove titlebar and resize handles for a fancy window + if(fancy) + options += "titlebar=0;can_resize=0;" + else + options += "titlebar=1;can_resize=1;" + // Generate page html + var/html = SStgui.basehtml + html = replacetextEx(html, "\[tgui:windowId]", id) + // Process inline assets + var/inline_styles = "" + var/inline_scripts = "" + for(var/datum/asset/asset in inline_assets) + var/mappings = asset.get_url_mappings() + for(var/name in mappings) + var/url = mappings[name] + // Not urlencoding since asset strings are considered safe + if(copytext(name, -4) == ".css") + inline_styles += "\n" + else if(copytext(name, -3) == ".js") + inline_scripts += "\n" + asset.send(client) + html = replacetextEx(html, "\n", inline_styles) + html = replacetextEx(html, "\n", inline_scripts) + // Inject custom HTML + html = replacetextEx(html, "\n", inline_html) + // Open the window + client << browse(html, "window=[id];[options]") + // Instruct the client to signal UI when the window is closed. + winset(client, id, "on-close=\"uiclose [id]\"") + // Detect whether the control is a browser + is_browser = winexists(client, id) == "BROWSER" + +/** + * public + * + * Checks if the window is ready to receive data. + * + * return bool + */ +/datum/tgui_window/proc/is_ready() + return status == TGUI_WINDOW_READY + +/** + * public + * + * Checks if the window can be sanely suspended. + * + * return bool + */ +/datum/tgui_window/proc/can_be_suspended() + return !fatally_errored \ + && pooled \ + && pool_index > 0 \ + && pool_index <= TGUI_WINDOW_SOFT_LIMIT \ + && status == TGUI_WINDOW_READY + +/** + * public + * + * Acquire the window lock. Pool will not be able to provide this window + * to other UIs for the duration of the lock. + * + * Can be given an optional tgui datum, which will be automatically + * subscribed to incoming messages via the on_message proc. + * + * optional ui /datum/tgui + */ +/datum/tgui_window/proc/acquire_lock(datum/tgui/ui) + locked = TRUE + locked_by = ui + +/** + * public + * + * Release the window lock. + */ +/datum/tgui_window/proc/release_lock() + // Clean up assets sent by tgui datum which requested the lock + if(locked) + sent_assets = list() + locked = FALSE + locked_by = null + +/** + * public + * + * Subscribes the datum to consume window messages on a specified proc. + * + * Note, that this supports only one subscriber, because code for that + * is simpler and therefore faster. If necessary, this can be rewritten + * to support multiple subscribers. + */ +/datum/tgui_window/proc/subscribe(datum/object, delegate) + subscriber_object = object + subscriber_delegate = delegate + +/** + * public + * + * Unsubscribes the datum. Do not forget to call this when cleaning up. + */ +/datum/tgui_window/proc/unsubscribe(datum/object) + subscriber_object = null + subscriber_delegate = null + +/** + * public + * + * Close the UI. + * + * optional can_be_suspended bool + */ +/datum/tgui_window/proc/close(can_be_suspended = TRUE) + if(!client) + return + if(can_be_suspended && can_be_suspended()) + log_tgui(client, + context = "[id]/close (suspending)", + window = src) + status = TGUI_WINDOW_READY + send_message("suspend") + return + log_tgui(client, + context = "[id]/close", + window = src) + release_lock() + status = TGUI_WINDOW_CLOSED + message_queue = null + // Do not close the window to give user some time + // to read the error message. + if(!fatally_errored) + client << browse(null, "window=[id]") + +/** + * public + * + * Sends a message to tgui window. + * + * required type string Message type + * required payload list Message payload + * optional force bool Send regardless of the ready status. + */ +/datum/tgui_window/proc/send_message(type, payload, force) + if(!client) + return + var/message = TGUI_CREATE_MESSAGE(type, payload) + // Place into queue if window is still loading + if(!force && status != TGUI_WINDOW_READY) + if(!message_queue) + message_queue = list() + message_queue += list(message) + return + client << output(message, is_browser \ + ? "[id]:update" \ + : "[id].browser:update") + +/** + * public + * + * Sends a raw payload to tgui window. + * + * required message string JSON+urlencoded blob to send. + * optional force bool Send regardless of the ready status. + */ +/datum/tgui_window/proc/send_raw_message(message, force) + if(!client) + return + // Place into queue if window is still loading + if(!force && status != TGUI_WINDOW_READY) + if(!message_queue) + message_queue = list() + message_queue += list(message) + return + client << output(message, is_browser \ + ? "[id]:update" \ + : "[id].browser:update") + +/** + * public + * + * Makes an asset available to use in tgui. + * + * required asset datum/asset + * + * return bool - TRUE if any assets had to be sent to the client + */ +/datum/tgui_window/proc/send_asset(datum/asset/asset) + if(!client || !asset) + return + sent_assets |= list(asset) + . = asset.send(client) + if(istype(asset, /datum/asset/spritesheet)) + var/datum/asset/spritesheet/spritesheet = asset + send_message("asset/stylesheet", spritesheet.css_filename()) + send_message("asset/mappings", asset.get_url_mappings()) + +/** + * private + * + * Sends queued messages if the queue wasn't empty. + */ +/datum/tgui_window/proc/flush_message_queue() + if(!client || !message_queue) + return + for(var/message in message_queue) + client << output(message, is_browser \ + ? "[id]:update" \ + : "[id].browser:update") + message_queue = null + +/** + * private + * + * Callback for handling incoming tgui messages. + */ +/datum/tgui_window/proc/on_message(type, payload, href_list) + // Status can be READY if user has refreshed the window. + if(type == "ready" && status == TGUI_WINDOW_READY) + // Resend the assets + for(var/asset in sent_assets) + send_asset(asset) + // Mark this window as fatally errored which prevents it from + // being suspended. + if(type == "log" && href_list["fatal"]) + fatally_errored = TRUE + // Mark window as ready since we received this message from somewhere + if(status != TGUI_WINDOW_READY) + status = TGUI_WINDOW_READY + flush_message_queue() + // Pass message to UI that requested the lock + if(locked && locked_by) + var/prevent_default = locked_by.on_message(type, payload, href_list) + if(prevent_default) + return + // Pass message to the subscriber + else if(subscriber_object) + var/prevent_default = call( + subscriber_object, + subscriber_delegate)(type, payload, href_list) + if(prevent_default) + return + // If not locked, handle these message types + switch(type) + if("ping") + send_message("pingReply", payload) + if("suspend") + close(can_be_suspended = TRUE) + if("close") + close(can_be_suspended = FALSE) + if("openLink") + client << link(href_list["url"]) + if("cacheReloaded") + // Reinitialize + initialize(inline_assets = inline_assets, fancy = fancy) + // Resend the assets + for(var/asset in sent_assets) + send_asset(asset) diff --git a/code/modules/tgui_panel/audio.dm b/code/modules/tgui_panel/audio.dm new file mode 100644 index 00000000000..91250e4bca9 --- /dev/null +++ b/code/modules/tgui_panel/audio.dm @@ -0,0 +1,42 @@ +/** + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +/// Admin music volume, from 0 to 1. +/client/var/admin_music_volume = 1 + +/** + * public + * + * Sends music data to the browser. + * + * Optional settings: + * - pitch: the playback rate + * - start: the start time of the sound + * - end: when the musics stops playing + * + * required url string Must be an https URL. + * optional extra_data list Optional settings. + */ +/datum/tgui_panel/proc/play_music(url, extra_data) + if(!is_ready()) + return + if(!findtext(url, is_http_protocol)) + return + var/list/payload = list() + if(length(extra_data) > 0) + for(var/key in extra_data) + payload[key] = extra_data[key] + payload["url"] = url + window.send_message("audio/playMusic", payload) + +/** + * public + * + * Stops playing music through the browser. + */ +/datum/tgui_panel/proc/stop_music() + if(!is_ready()) + return + window.send_message("audio/stopMusic") diff --git a/code/modules/tgui_panel/external.dm b/code/modules/tgui_panel/external.dm new file mode 100644 index 00000000000..fd892728aac --- /dev/null +++ b/code/modules/tgui_panel/external.dm @@ -0,0 +1,37 @@ +/** + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +/client/var/datum/tgui_panel/tgui_panel + +/** + * tgui panel / chat troubleshooting verb + */ +/client/verb/fix_tgui_panel() + set name = "Fix chat" + set category = "OOC" + var/action + log_tgui(src, "Started fixing.", context = "verb/fix_tgui_panel") + + nuke_chat() + + // Failed to fix + action = alert(src, "Did that work?", "", "Yes", "No, switch to old ui") + if (action == "No, switch to old ui") + winset(src, "output", "on-show=&is-disabled=0&is-visible=1") + winset(src, "browseroutput", "is-disabled=1;is-visible=0") + log_tgui(src, "Failed to fix.", context = "verb/fix_tgui_panel") + +/client/proc/nuke_chat() + // Catch all solution (kick the whole thing in the pants) + winset(src, "output", "on-show=&is-disabled=0&is-visible=1") + winset(src, "browseroutput", "is-disabled=1;is-visible=0") + if(!tgui_panel || !istype(tgui_panel)) + log_tgui(src, "tgui_panel datum is missing", + context = "verb/fix_tgui_panel") + tgui_panel = new(src) + tgui_panel.initialize(force = TRUE) + // Force show the panel to see if there are any errors + winset(src, "output", "is-disabled=1&is-visible=0") + winset(src, "browseroutput", "is-disabled=0;is-visible=1") diff --git a/code/modules/tgui_panel/telemetry.dm b/code/modules/tgui_panel/telemetry.dm new file mode 100644 index 00000000000..79087d8500c --- /dev/null +++ b/code/modules/tgui_panel/telemetry.dm @@ -0,0 +1,80 @@ +/** + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +/** + * Maximum number of connection records allowed to analyze. + * Should match the value set in the browser. + */ +#define TGUI_TELEMETRY_MAX_CONNECTIONS 5 + +/** + * Maximum time allocated for sending a telemetry packet. + */ +#define TGUI_TELEMETRY_RESPONSE_WINDOW 30 SECONDS + +/// Time of telemetry request +/datum/tgui_panel/var/telemetry_requested_at +/// Time of telemetry analysis completion +/datum/tgui_panel/var/telemetry_analyzed_at +/// List of previous client connections +/datum/tgui_panel/var/list/telemetry_connections + +/** + * private + * + * Requests some telemetry from the client. + */ +/datum/tgui_panel/proc/request_telemetry() + telemetry_requested_at = world.time + telemetry_analyzed_at = null + window.send_message("telemetry/request", list( + "limits" = list( + "connections" = TGUI_TELEMETRY_MAX_CONNECTIONS, + ), + )) + +/** + * private + * + * Analyzes a telemetry packet. + * + * Is currently only useful for detecting ban evasion attempts. + */ +/datum/tgui_panel/proc/analyze_telemetry(payload) + if(world.time > telemetry_requested_at + TGUI_TELEMETRY_RESPONSE_WINDOW) + message_admins("[key_name(client)] sent telemetry outside of the allocated time window.") + return + if(telemetry_analyzed_at) + message_admins("[key_name(client)] sent telemetry more than once.") + return + telemetry_analyzed_at = world.time + if(!payload) + return + telemetry_connections = payload["connections"] + var/len = length(telemetry_connections) + if(len == 0) + return + if(len > TGUI_TELEMETRY_MAX_CONNECTIONS) + message_admins("[key_name(client)] was kicked for sending a huge telemetry payload") + qdel(client) + return + var/list/found + for(var/i in 1 to len) + if(QDELETED(client)) + // He got cleaned up before we were done + return + var/list/row = telemetry_connections[i] + // Check for a malformed history object + if (!row || row.len < 3 || (!row["ckey"] || !row["address"] || !row["computer_id"])) + return + if (world.IsBanned(row["ckey"], row["address"], row["computer_id"], real_bans_only = TRUE)) + found = row + break + CHECK_TICK + // This fucker has a history of playing on a banned account. + if(found) + var/msg = "[key_name(client)] has a banned account in connection history! (Matched: [found["ckey"]], [found["address"]], [found["computer_id"]])" + message_admins(msg) + log_admin_private(msg) diff --git a/code/modules/tgui_panel/tgui_panel.dm b/code/modules/tgui_panel/tgui_panel.dm new file mode 100644 index 00000000000..dae7ae3d242 --- /dev/null +++ b/code/modules/tgui_panel/tgui_panel.dm @@ -0,0 +1,95 @@ +/** + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +/** + * tgui_panel datum + * Hosts tgchat and other nice features. + */ +/datum/tgui_panel + var/client/client + var/datum/tgui_window/window + var/broken = FALSE + var/initialized_at + +/datum/tgui_panel/New(client/client) + src.client = client + window = new(client, "browseroutput") + window.subscribe(src, .proc/on_message) + +/datum/tgui_panel/Del() + window.unsubscribe(src) + window.close() + return ..() + +/** + * public + * + * TRUE if panel is initialized and ready to receive messages. + */ +/datum/tgui_panel/proc/is_ready() + return !broken && window.is_ready() + +/** + * public + * + * Initializes tgui panel. + */ +/datum/tgui_panel/proc/initialize(force = FALSE) + initialized_at = world.time + // Perform a clean initialization + window.initialize(inline_assets = list( + get_asset_datum(/datum/asset/simple/tgui_common), + get_asset_datum(/datum/asset/simple/tgui_panel), + )) + window.send_asset(get_asset_datum(/datum/asset/simple/namespaced/fontawesome)) + window.send_asset(get_asset_datum(/datum/asset/spritesheet/chat)) + request_telemetry() + addtimer(CALLBACK(src, .proc/on_initialize_timed_out), 2 SECONDS) + +/** + * private + * + * Called when initialization has timed out. + */ +/datum/tgui_panel/proc/on_initialize_timed_out() + // Currently does nothing but sending a message to old chat. + SEND_TEXT(client, "Failed to load fancy chat, click HERE to attempt to reload it.") + +/** + * private + * + * Callback for handling incoming tgui messages. + */ +/datum/tgui_panel/proc/on_message(type, payload) + if(type == "ready") + broken = FALSE + window.send_message("update", list( + "config" = list( + "client" = list( + "ckey" = client.ckey, + "address" = client.address, + "computer_id" = client.computer_id, + ), + "window" = list( + "fancy" = FALSE, + "locked" = FALSE, + ), + ), + )) + return TRUE + if(type == "audio/setAdminMusicVolume") + client.admin_music_volume = payload["volume"] + return TRUE + if(type == "telemetry") + analyze_telemetry(payload) + return TRUE + +/** + * public + * + * Sends a round restart notification. + */ +/datum/tgui_panel/proc/send_roundrestart() + window.send_message("roundrestart") diff --git a/config/config.txt b/config/config.txt index d465f6d00ec..83c66aeded4 100644 --- a/config/config.txt +++ b/config/config.txt @@ -20,7 +20,15 @@ $include entries/lobby.txt ## Uncomment to enable minimap generation MINIMAPS_ENABLED - + +## System command that invokes youtube-dl, used by Play Internet Sound. +## You can install youtube-dl with +## "pip install youtube-dl" if you have pip installed +## from https://github.com/rg3/youtube-dl/releases +## or your package manager +## The default value assumes youtube-dl is in your system PATH +# INVOKE_YOUTUBEDL youtube-dl + ## CLIENT VERSION CONTROL ## This allows you to configure the minimum required client version, as well as a warning version, and message for both. ## These trigger for any version below (non-inclusive) the given version, so 510 triggers on 509 or lower. diff --git a/html/font-awesome/README.MD b/html/font-awesome/README.MD new file mode 100644 index 00000000000..7d693c36f03 --- /dev/null +++ b/html/font-awesome/README.MD @@ -0,0 +1,6 @@ +Due to the fact browse_rsc can't create subdirectories, every time you update font-awesome you'll need to change relative webfont references in all.min.css +eg ../webfonts/fa-regular-400.ttf => fa-regular-400.ttf (or whatever you call it in asset datum) + +Second change is ripping out file types other than woff and eot(ie8) from the css + +Finally, removing brand related css. \ No newline at end of file diff --git a/html/font-awesome/css/all.min.css b/html/font-awesome/css/all.min.css new file mode 100644 index 00000000000..e7cdfffe751 --- /dev/null +++ b/html/font-awesome/css/all.min.css @@ -0,0 +1,5 @@ +/*! + * Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +.fa,.fab,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{animation:fa-spin 2s infinite linear}.fa-pulse{animation:fa-spin 1s infinite steps(8)}@keyframes fa-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adobe:before{content:"\f778"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-none:before{content:"\f850"}.fa-border-style:before{content:"\f853"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fan:before{content:"\f863"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-handshake:before{content:"\f2b5"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-wizard:before{content:"\f6e8"}.fa-haykal:before{content:"\f666"}.fa-hdd:before{content:"\f0a0"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-instagram:before{content:"\f16d"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:400;font-display:auto;src:url(fa-regular-400.eot);src:url(fa-regular-400.eot?#iefix) format("embedded-opentype"),url(fa-regular-400.woff) format("woff")}.far{font-weight:400}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:900;font-display:auto;src:url(fa-solid-900.eot);src:url(fa-solid-900.eot?#iefix) format("embedded-opentype"),url(fa-solid-900.woff) format("woff")}.fa,.far,.fas{font-family:"Font Awesome 5 Free"}.fa,.fas{font-weight:900} \ No newline at end of file diff --git a/html/font-awesome/css/v4-shims.min.css b/html/font-awesome/css/v4-shims.min.css new file mode 100644 index 00000000000..5f3fdc598c8 --- /dev/null +++ b/html/font-awesome/css/v4-shims.min.css @@ -0,0 +1,5 @@ +/*! + * Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +.fa.fa-glass:before{content:"\f000"}.fa.fa-meetup{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-star-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-o:before{content:"\f005"}.fa.fa-close:before,.fa.fa-remove:before{content:"\f00d"}.fa.fa-gear:before{content:"\f013"}.fa.fa-trash-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-trash-o:before{content:"\f2ed"}.fa.fa-file-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-o:before{content:"\f15b"}.fa.fa-clock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-clock-o:before{content:"\f017"}.fa.fa-arrow-circle-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-down:before{content:"\f358"}.fa.fa-arrow-circle-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-up:before{content:"\f35b"}.fa.fa-play-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-play-circle-o:before{content:"\f144"}.fa.fa-repeat:before,.fa.fa-rotate-right:before{content:"\f01e"}.fa.fa-refresh:before{content:"\f021"}.fa.fa-list-alt{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-dedent:before{content:"\f03b"}.fa.fa-video-camera:before{content:"\f03d"}.fa.fa-picture-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-picture-o:before{content:"\f03e"}.fa.fa-photo{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-photo:before{content:"\f03e"}.fa.fa-image{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-image:before{content:"\f03e"}.fa.fa-pencil:before{content:"\f303"}.fa.fa-map-marker:before{content:"\f3c5"}.fa.fa-pencil-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-pencil-square-o:before{content:"\f044"}.fa.fa-share-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-share-square-o:before{content:"\f14d"}.fa.fa-check-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-check-square-o:before{content:"\f14a"}.fa.fa-arrows:before{content:"\f0b2"}.fa.fa-times-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-circle-o:before{content:"\f057"}.fa.fa-check-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-check-circle-o:before{content:"\f058"}.fa.fa-mail-forward:before{content:"\f064"}.fa.fa-eye,.fa.fa-eye-slash{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-warning:before{content:"\f071"}.fa.fa-calendar:before{content:"\f073"}.fa.fa-arrows-v:before{content:"\f338"}.fa.fa-arrows-h:before{content:"\f337"}.fa.fa-bar-chart{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bar-chart:before{content:"\f080"}.fa.fa-bar-chart-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bar-chart-o:before{content:"\f080"}.fa.fa-facebook-square,.fa.fa-twitter-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-gears:before{content:"\f085"}.fa.fa-thumbs-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-thumbs-o-up:before{content:"\f164"}.fa.fa-thumbs-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-thumbs-o-down:before{content:"\f165"}.fa.fa-heart-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-heart-o:before{content:"\f004"}.fa.fa-sign-out:before{content:"\f2f5"}.fa.fa-linkedin-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-linkedin-square:before{content:"\f08c"}.fa.fa-thumb-tack:before{content:"\f08d"}.fa.fa-external-link:before{content:"\f35d"}.fa.fa-sign-in:before{content:"\f2f6"}.fa.fa-github-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-lemon-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-lemon-o:before{content:"\f094"}.fa.fa-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-square-o:before{content:"\f0c8"}.fa.fa-bookmark-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bookmark-o:before{content:"\f02e"}.fa.fa-facebook,.fa.fa-twitter{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook:before{content:"\f39e"}.fa.fa-facebook-f{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook-f:before{content:"\f39e"}.fa.fa-github{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-credit-card{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-feed:before{content:"\f09e"}.fa.fa-hdd-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hdd-o:before{content:"\f0a0"}.fa.fa-hand-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-right:before{content:"\f0a4"}.fa.fa-hand-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-left:before{content:"\f0a5"}.fa.fa-hand-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-up:before{content:"\f0a6"}.fa.fa-hand-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-down:before{content:"\f0a7"}.fa.fa-arrows-alt:before{content:"\f31e"}.fa.fa-group:before{content:"\f0c0"}.fa.fa-chain:before{content:"\f0c1"}.fa.fa-scissors:before{content:"\f0c4"}.fa.fa-files-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-files-o:before{content:"\f0c5"}.fa.fa-floppy-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-floppy-o:before{content:"\f0c7"}.fa.fa-navicon:before,.fa.fa-reorder:before{content:"\f0c9"}.fa.fa-google-plus,.fa.fa-google-plus-square,.fa.fa-pinterest,.fa.fa-pinterest-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus:before{content:"\f0d5"}.fa.fa-money{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-money:before{content:"\f3d1"}.fa.fa-unsorted:before{content:"\f0dc"}.fa.fa-sort-desc:before{content:"\f0dd"}.fa.fa-sort-asc:before{content:"\f0de"}.fa.fa-linkedin{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-linkedin:before{content:"\f0e1"}.fa.fa-rotate-left:before{content:"\f0e2"}.fa.fa-legal:before{content:"\f0e3"}.fa.fa-dashboard:before,.fa.fa-tachometer:before{content:"\f3fd"}.fa.fa-comment-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-comment-o:before{content:"\f075"}.fa.fa-comments-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-comments-o:before{content:"\f086"}.fa.fa-flash:before{content:"\f0e7"}.fa.fa-clipboard,.fa.fa-paste{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-paste:before{content:"\f328"}.fa.fa-lightbulb-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-lightbulb-o:before{content:"\f0eb"}.fa.fa-exchange:before{content:"\f362"}.fa.fa-cloud-download:before{content:"\f381"}.fa.fa-cloud-upload:before{content:"\f382"}.fa.fa-bell-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bell-o:before{content:"\f0f3"}.fa.fa-cutlery:before{content:"\f2e7"}.fa.fa-file-text-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-text-o:before{content:"\f15c"}.fa.fa-building-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-building-o:before{content:"\f1ad"}.fa.fa-hospital-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hospital-o:before{content:"\f0f8"}.fa.fa-tablet:before{content:"\f3fa"}.fa.fa-mobile-phone:before,.fa.fa-mobile:before{content:"\f3cd"}.fa.fa-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-circle-o:before{content:"\f111"}.fa.fa-mail-reply:before{content:"\f3e5"}.fa.fa-github-alt{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-folder-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-folder-o:before{content:"\f07b"}.fa.fa-folder-open-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-folder-open-o:before{content:"\f07c"}.fa.fa-smile-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-smile-o:before{content:"\f118"}.fa.fa-frown-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-frown-o:before{content:"\f119"}.fa.fa-meh-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-meh-o:before{content:"\f11a"}.fa.fa-keyboard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-keyboard-o:before{content:"\f11c"}.fa.fa-flag-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-flag-o:before{content:"\f024"}.fa.fa-mail-reply-all:before{content:"\f122"}.fa.fa-star-half-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-o:before{content:"\f089"}.fa.fa-star-half-empty{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-empty:before{content:"\f089"}.fa.fa-star-half-full{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-full:before{content:"\f089"}.fa.fa-code-fork:before{content:"\f126"}.fa.fa-chain-broken:before{content:"\f127"}.fa.fa-shield:before{content:"\f3ed"}.fa.fa-calendar-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-o:before{content:"\f133"}.fa.fa-css3,.fa.fa-html5,.fa.fa-maxcdn{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ticket:before{content:"\f3ff"}.fa.fa-minus-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-minus-square-o:before{content:"\f146"}.fa.fa-level-up:before{content:"\f3bf"}.fa.fa-level-down:before{content:"\f3be"}.fa.fa-pencil-square:before{content:"\f14b"}.fa.fa-external-link-square:before{content:"\f360"}.fa.fa-compass{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-down:before{content:"\f150"}.fa.fa-toggle-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-down:before{content:"\f150"}.fa.fa-caret-square-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-up:before{content:"\f151"}.fa.fa-toggle-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-up:before{content:"\f151"}.fa.fa-caret-square-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-right:before{content:"\f152"}.fa.fa-toggle-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-right:before{content:"\f152"}.fa.fa-eur:before,.fa.fa-euro:before{content:"\f153"}.fa.fa-gbp:before{content:"\f154"}.fa.fa-dollar:before,.fa.fa-usd:before{content:"\f155"}.fa.fa-inr:before,.fa.fa-rupee:before{content:"\f156"}.fa.fa-cny:before,.fa.fa-jpy:before,.fa.fa-rmb:before,.fa.fa-yen:before{content:"\f157"}.fa.fa-rouble:before,.fa.fa-rub:before,.fa.fa-ruble:before{content:"\f158"}.fa.fa-krw:before,.fa.fa-won:before{content:"\f159"}.fa.fa-bitcoin,.fa.fa-btc{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bitcoin:before{content:"\f15a"}.fa.fa-file-text:before{content:"\f15c"}.fa.fa-sort-alpha-asc:before{content:"\f15d"}.fa.fa-sort-alpha-desc:before{content:"\f15e"}.fa.fa-sort-amount-asc:before{content:"\f160"}.fa.fa-sort-amount-desc:before{content:"\f161"}.fa.fa-sort-numeric-asc:before{content:"\f162"}.fa.fa-sort-numeric-desc:before{content:"\f163"}.fa.fa-xing,.fa.fa-xing-square,.fa.fa-youtube,.fa.fa-youtube-play,.fa.fa-youtube-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-youtube-play:before{content:"\f167"}.fa.fa-adn,.fa.fa-bitbucket,.fa.fa-bitbucket-square,.fa.fa-dropbox,.fa.fa-flickr,.fa.fa-instagram,.fa.fa-stack-overflow{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bitbucket-square:before{content:"\f171"}.fa.fa-tumblr,.fa.fa-tumblr-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-long-arrow-down:before{content:"\f309"}.fa.fa-long-arrow-up:before{content:"\f30c"}.fa.fa-long-arrow-left:before{content:"\f30a"}.fa.fa-long-arrow-right:before{content:"\f30b"}.fa.fa-android,.fa.fa-apple,.fa.fa-dribbble,.fa.fa-foursquare,.fa.fa-gittip,.fa.fa-gratipay,.fa.fa-linux,.fa.fa-skype,.fa.fa-trello,.fa.fa-windows{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-gittip:before{content:"\f184"}.fa.fa-sun-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-sun-o:before{content:"\f185"}.fa.fa-moon-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-moon-o:before{content:"\f186"}.fa.fa-pagelines,.fa.fa-renren,.fa.fa-stack-exchange,.fa.fa-vk,.fa.fa-weibo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-arrow-circle-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-right:before{content:"\f35a"}.fa.fa-arrow-circle-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-left:before{content:"\f359"}.fa.fa-caret-square-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-left:before{content:"\f191"}.fa.fa-toggle-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-left:before{content:"\f191"}.fa.fa-dot-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-dot-circle-o:before{content:"\f192"}.fa.fa-vimeo-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-try:before,.fa.fa-turkish-lira:before{content:"\f195"}.fa.fa-plus-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-plus-square-o:before{content:"\f0fe"}.fa.fa-openid,.fa.fa-slack,.fa.fa-wordpress{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bank:before,.fa.fa-institution:before{content:"\f19c"}.fa.fa-mortar-board:before{content:"\f19d"}.fa.fa-delicious,.fa.fa-digg,.fa.fa-drupal,.fa.fa-google,.fa.fa-joomla,.fa.fa-pied-piper-alt,.fa.fa-pied-piper-pp,.fa.fa-reddit,.fa.fa-reddit-square,.fa.fa-stumbleupon,.fa.fa-stumbleupon-circle,.fa.fa-yahoo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-spoon:before{content:"\f2e5"}.fa.fa-behance,.fa.fa-behance-square,.fa.fa-steam,.fa.fa-steam-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-automobile:before{content:"\f1b9"}.fa.fa-cab:before{content:"\f1ba"}.fa.fa-envelope-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-envelope-o:before{content:"\f0e0"}.fa.fa-deviantart,.fa.fa-soundcloud{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-file-pdf-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-pdf-o:before{content:"\f1c1"}.fa.fa-file-word-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-word-o:before{content:"\f1c2"}.fa.fa-file-excel-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-excel-o:before{content:"\f1c3"}.fa.fa-file-powerpoint-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-powerpoint-o:before{content:"\f1c4"}.fa.fa-file-image-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-image-o:before{content:"\f1c5"}.fa.fa-file-photo-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-photo-o:before{content:"\f1c5"}.fa.fa-file-picture-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-picture-o:before{content:"\f1c5"}.fa.fa-file-archive-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-archive-o:before{content:"\f1c6"}.fa.fa-file-zip-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-zip-o:before{content:"\f1c6"}.fa.fa-file-audio-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-audio-o:before{content:"\f1c7"}.fa.fa-file-sound-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-sound-o:before{content:"\f1c7"}.fa.fa-file-video-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-video-o:before{content:"\f1c8"}.fa.fa-file-movie-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-movie-o:before{content:"\f1c8"}.fa.fa-file-code-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-code-o:before{content:"\f1c9"}.fa.fa-codepen,.fa.fa-jsfiddle,.fa.fa-vine{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-life-bouy,.fa.fa-life-ring{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-bouy:before{content:"\f1cd"}.fa.fa-life-buoy{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-buoy:before{content:"\f1cd"}.fa.fa-life-saver{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-saver:before{content:"\f1cd"}.fa.fa-support{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-support:before{content:"\f1cd"}.fa.fa-circle-o-notch:before{content:"\f1ce"}.fa.fa-ra,.fa.fa-rebel{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ra:before{content:"\f1d0"}.fa.fa-resistance{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-resistance:before{content:"\f1d0"}.fa.fa-empire,.fa.fa-ge{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ge:before{content:"\f1d1"}.fa.fa-git,.fa.fa-git-square,.fa.fa-hacker-news,.fa.fa-y-combinator-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-y-combinator-square:before{content:"\f1d4"}.fa.fa-yc-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-yc-square:before{content:"\f1d4"}.fa.fa-qq,.fa.fa-tencent-weibo,.fa.fa-wechat,.fa.fa-weixin{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-wechat:before{content:"\f1d7"}.fa.fa-send:before{content:"\f1d8"}.fa.fa-paper-plane-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-paper-plane-o:before{content:"\f1d8"}.fa.fa-send-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-send-o:before{content:"\f1d8"}.fa.fa-circle-thin{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-circle-thin:before{content:"\f111"}.fa.fa-header:before{content:"\f1dc"}.fa.fa-sliders:before{content:"\f1de"}.fa.fa-futbol-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-futbol-o:before{content:"\f1e3"}.fa.fa-soccer-ball-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-soccer-ball-o:before{content:"\f1e3"}.fa.fa-slideshare,.fa.fa-twitch,.fa.fa-yelp{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-newspaper-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-newspaper-o:before{content:"\f1ea"}.fa.fa-cc-amex,.fa.fa-cc-discover,.fa.fa-cc-mastercard,.fa.fa-cc-paypal,.fa.fa-cc-stripe,.fa.fa-cc-visa,.fa.fa-google-wallet,.fa.fa-paypal{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bell-slash-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bell-slash-o:before{content:"\f1f6"}.fa.fa-trash:before{content:"\f2ed"}.fa.fa-copyright{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-eyedropper:before{content:"\f1fb"}.fa.fa-area-chart:before{content:"\f1fe"}.fa.fa-pie-chart:before{content:"\f200"}.fa.fa-line-chart:before{content:"\f201"}.fa.fa-angellist,.fa.fa-ioxhost,.fa.fa-lastfm,.fa.fa-lastfm-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-cc{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-cc:before{content:"\f20a"}.fa.fa-ils:before,.fa.fa-shekel:before,.fa.fa-sheqel:before{content:"\f20b"}.fa.fa-meanpath{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-meanpath:before{content:"\f2b4"}.fa.fa-buysellads,.fa.fa-connectdevelop,.fa.fa-dashcube,.fa.fa-forumbee,.fa.fa-leanpub,.fa.fa-sellsy,.fa.fa-shirtsinbulk,.fa.fa-simplybuilt,.fa.fa-skyatlas{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-diamond{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-diamond:before{content:"\f3a5"}.fa.fa-intersex:before{content:"\f224"}.fa.fa-facebook-official{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook-official:before{content:"\f09a"}.fa.fa-pinterest-p,.fa.fa-whatsapp{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-hotel:before{content:"\f236"}.fa.fa-medium,.fa.fa-viacoin,.fa.fa-y-combinator,.fa.fa-yc{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-yc:before{content:"\f23b"}.fa.fa-expeditedssl,.fa.fa-opencart,.fa.fa-optin-monster{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-battery-4:before,.fa.fa-battery:before{content:"\f240"}.fa.fa-battery-3:before{content:"\f241"}.fa.fa-battery-2:before{content:"\f242"}.fa.fa-battery-1:before{content:"\f243"}.fa.fa-battery-0:before{content:"\f244"}.fa.fa-object-group,.fa.fa-object-ungroup,.fa.fa-sticky-note-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-sticky-note-o:before{content:"\f249"}.fa.fa-cc-diners-club,.fa.fa-cc-jcb{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-clone,.fa.fa-hourglass-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hourglass-o:before{content:"\f254"}.fa.fa-hourglass-1:before{content:"\f251"}.fa.fa-hourglass-2:before{content:"\f252"}.fa.fa-hourglass-3:before{content:"\f253"}.fa.fa-hand-rock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-rock-o:before{content:"\f255"}.fa.fa-hand-grab-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-grab-o:before{content:"\f255"}.fa.fa-hand-paper-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-paper-o:before{content:"\f256"}.fa.fa-hand-stop-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-stop-o:before{content:"\f256"}.fa.fa-hand-scissors-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-scissors-o:before{content:"\f257"}.fa.fa-hand-lizard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-lizard-o:before{content:"\f258"}.fa.fa-hand-spock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-spock-o:before{content:"\f259"}.fa.fa-hand-pointer-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-pointer-o:before{content:"\f25a"}.fa.fa-hand-peace-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-peace-o:before{content:"\f25b"}.fa.fa-registered{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-chrome,.fa.fa-creative-commons,.fa.fa-firefox,.fa.fa-get-pocket,.fa.fa-gg,.fa.fa-gg-circle,.fa.fa-internet-explorer,.fa.fa-odnoklassniki,.fa.fa-odnoklassniki-square,.fa.fa-opera,.fa.fa-safari,.fa.fa-tripadvisor,.fa.fa-wikipedia-w{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-television:before{content:"\f26c"}.fa.fa-500px,.fa.fa-amazon,.fa.fa-contao{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-calendar-plus-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-plus-o:before{content:"\f271"}.fa.fa-calendar-minus-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-minus-o:before{content:"\f272"}.fa.fa-calendar-times-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-times-o:before{content:"\f273"}.fa.fa-calendar-check-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-check-o:before{content:"\f274"}.fa.fa-map-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-map-o:before{content:"\f279"}.fa.fa-commenting:before{content:"\f4ad"}.fa.fa-commenting-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-commenting-o:before{content:"\f4ad"}.fa.fa-houzz,.fa.fa-vimeo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-vimeo:before{content:"\f27d"}.fa.fa-black-tie,.fa.fa-edge,.fa.fa-fonticons,.fa.fa-reddit-alien{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-credit-card-alt:before{content:"\f09d"}.fa.fa-codiepie,.fa.fa-fort-awesome,.fa.fa-mixcloud,.fa.fa-modx,.fa.fa-product-hunt,.fa.fa-scribd,.fa.fa-usb{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-pause-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-pause-circle-o:before{content:"\f28b"}.fa.fa-stop-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-stop-circle-o:before{content:"\f28d"}.fa.fa-bluetooth,.fa.fa-bluetooth-b,.fa.fa-envira,.fa.fa-gitlab,.fa.fa-wheelchair-alt,.fa.fa-wpbeginner,.fa.fa-wpforms{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-wheelchair-alt:before{content:"\f368"}.fa.fa-question-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-question-circle-o:before{content:"\f059"}.fa.fa-volume-control-phone:before{content:"\f2a0"}.fa.fa-asl-interpreting:before{content:"\f2a3"}.fa.fa-deafness:before,.fa.fa-hard-of-hearing:before{content:"\f2a4"}.fa.fa-glide,.fa.fa-glide-g{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-signing:before{content:"\f2a7"}.fa.fa-first-order,.fa.fa-google-plus-official,.fa.fa-pied-piper,.fa.fa-snapchat,.fa.fa-snapchat-ghost,.fa.fa-snapchat-square,.fa.fa-themeisle,.fa.fa-viadeo,.fa.fa-viadeo-square,.fa.fa-yoast{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus-official:before{content:"\f2b3"}.fa.fa-google-plus-circle{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus-circle:before{content:"\f2b3"}.fa.fa-fa,.fa.fa-font-awesome{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-fa:before{content:"\f2b4"}.fa.fa-handshake-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-handshake-o:before{content:"\f2b5"}.fa.fa-envelope-open-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-envelope-open-o:before{content:"\f2b6"}.fa.fa-linode{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-address-book-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-address-book-o:before{content:"\f2b9"}.fa.fa-vcard:before{content:"\f2bb"}.fa.fa-address-card-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-address-card-o:before{content:"\f2bb"}.fa.fa-vcard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-vcard-o:before{content:"\f2bb"}.fa.fa-user-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-user-circle-o:before{content:"\f2bd"}.fa.fa-user-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-user-o:before{content:"\f007"}.fa.fa-id-badge{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-drivers-license:before{content:"\f2c2"}.fa.fa-id-card-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-id-card-o:before{content:"\f2c2"}.fa.fa-drivers-license-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-drivers-license-o:before{content:"\f2c2"}.fa.fa-free-code-camp,.fa.fa-quora,.fa.fa-telegram{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-thermometer-4:before,.fa.fa-thermometer:before{content:"\f2c7"}.fa.fa-thermometer-3:before{content:"\f2c8"}.fa.fa-thermometer-2:before{content:"\f2c9"}.fa.fa-thermometer-1:before{content:"\f2ca"}.fa.fa-thermometer-0:before{content:"\f2cb"}.fa.fa-bathtub:before,.fa.fa-s15:before{content:"\f2cd"}.fa.fa-window-maximize,.fa.fa-window-restore{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-rectangle:before{content:"\f410"}.fa.fa-window-close-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-window-close-o:before{content:"\f410"}.fa.fa-times-rectangle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-rectangle-o:before{content:"\f410"}.fa.fa-bandcamp,.fa.fa-eercast,.fa.fa-etsy,.fa.fa-grav,.fa.fa-imdb,.fa.fa-ravelry{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-eercast:before{content:"\f2da"}.fa.fa-snowflake-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-snowflake-o:before{content:"\f2dc"}.fa.fa-spotify,.fa.fa-superpowers,.fa.fa-wpexplorer{font-family:"Font Awesome 5 Brands";font-weight:400} \ No newline at end of file diff --git a/html/font-awesome/webfonts/fa-regular-400.eot b/html/font-awesome/webfonts/fa-regular-400.eot new file mode 100644 index 0000000000000000000000000000000000000000..d62be2fad885f750abe96337567aeec99e5adec7 GIT binary patch literal 34388 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 literal 0 HcmV?d00001 diff --git a/html/font-awesome/webfonts/fa-solid-900.eot b/html/font-awesome/webfonts/fa-solid-900.eot new file mode 100644 index 0000000000000000000000000000000000000000..c77baa8d46ab45aff98845588c807e81b73c9d91 GIT binary patch literal 192116 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

EFA9fIE%m5HyEmWrq*L@`PS)m?s1zo^|eW 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 fd>p@0o#BB0sDC#|M>X< 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�Yw6(>3h3Ki)UqBdO#joC{%U+==re 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 { 'pos': '0x0', 'size': '0x0', }); - // Absolutely shit workaround for chatbox visiblity. - based_winset(); // Enable hot module reloading if (module.hot) { @@ -114,12 +112,4 @@ const setupApp = () => { } }; -const based_winset = async (based_on_what = 'output') => { - // shitty workaround because winget is async. - const winget_output = await Byond.winget(based_on_what); - Byond.winset('browseroutput', { - 'size': winget_output["size"], - }); -}; - setupApp(); diff --git a/tgui/public/tgui-panel.bundle.js b/tgui/public/tgui-panel.bundle.js index 1107dcbfabe..3c6474032fa 100644 --- a/tgui/public/tgui-panel.bundle.js +++ b/tgui/public/tgui-panel.bundle.js @@ -1 +1 @@ -!function(e){function t(t){for(var o,a,c=t[0],s=t[1],l=t[2],d=0,g=[];d=e.length?{done:!0}:{done:!1,value:e[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}return(n=e[Symbol.iterator]()).next.bind(n)}function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n=e.length?{done:!0}:{done:!1,value:e[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}return(n=e[Symbol.iterator]()).next.bind(n)}function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n=a.IMAGE_RETRY_LIMIT)d.error("failed to load an image after "+n+" attempts");else{var o=t.src;t.src=null,t.src=o+"#"+n,t.setAttribute("data-reload-n",n+1)}}),a.IMAGE_RETRY_DELAY)},m=function(e){var t=e.node,n=e.times;if(t&&n){var o=t.querySelector(".Chat__badge"),i=o||document.createElement("div");i.textContent=n,i.className=(0,r.classes)(["Chat__badge","Chat__badge--animate"]),requestAnimationFrame((function(){i.className="Chat__badge"})),o||t.appendChild(i)}},v=function(){function t(){var e=this;this.loaded=!1,this.rootNode=null,this.queue=[],this.messages=[],this.visibleMessages=[],this.page=null,this.events=new o.EventEmitter,this.scrollNode=null,this.scrollTracking=!0,this.handleScroll=function(t){var n=e.scrollNode,o=n.scrollHeight,r=n.scrollTop+n.offsetHeight,i=Math.abs(o-r)<24;i!==e.scrollTracking&&(e.scrollTracking=i,e.events.emit("scrollTrackingChanged",i),d.debug("tracking",e.scrollTracking))},this.ensureScrollTracking=function(){e.scrollTracking&&e.scrollToBottom()},setInterval((function(){return e.pruneMessages()}),a.MESSAGE_PRUNE_INTERVAL)}var n=t.prototype;return n.isReady=function(){return this.loaded&&this.rootNode&&this.page},n.mount=function(t){var n=this;this.rootNode?t.appendChild(this.rootNode):this.rootNode=t,this.scrollNode=function(e){for(var t=document.body,n=e;n&&n!==t;){if(n.scrollWidth0&&(this.processBatch(this.queue),this.queue=[])},n.assignStyle=function(e){void 0===e&&(e={});for(var t=0,n=Object.keys(e);t1&&n.test(e)}));if(0===o.length)return this.highlightRegex=null,void(this.highlightColor=null);this.highlightRegex=new RegExp("("+o.join("|")+")","gi"),this.highlightColor=t},n.scrollToBottom=function(){this.scrollNode.scrollTop=this.scrollNode.scrollHeight},n.changePage=function(e){if(!this.isReady())return this.page=e,void this.tryFlushQueue();this.page=e,this.rootNode.textContent="",this.visibleMessages=[];for(var t,n,o=document.createDocumentFragment(),r=l(this.messages);!(n=r()).done;){var i=n.value;(0,c.canPageAcceptType)(e,i.type)&&(t=i.node,o.appendChild(t),this.visibleMessages.push(i))}t&&(this.rootNode.appendChild(o),t.scrollIntoView())},n.getCombinableMessage=function(e){for(var t=Date.now(),n=this.visibleMessages.length,o=n-1,r=Math.max(0,n-a.COMBINE_MAX_MESSAGES),i=o;i>=r;i--){var s=this.visibleMessages[i];if(!s.type.startsWith(a.MESSAGE_TYPE_INTERNAL)&&(0,c.isSameMessage)(s,e)&&t0){this.visibleMessages=e.slice(t);for(var n=0;n0&&(this.messages=this.messages.slice(r),d.log("pruned "+r+" stored messages"))}else d.debug("pruning delayed")},n.rebuildChat=function(){if(this.isReady()){for(var e,t=Math.max(0,this.messages.length-a.MAX_PERSISTED_MESSAGES),n=this.messages.slice(t),o=l(n);!(e=o()).done;)e.value.node=undefined;this.rootNode.textContent="",this.messages=[],this.visibleMessages=[],this.processBatch(n,{notifyListeners:!1})}},n.saveToDisk=function(){if(!Byond.IS_LTE_IE10){for(var e="",t=document.styleSheets,n=0;n\n\n\nSS13 Chat Log\n\n\n\n

\n'+a+"
\n\n\n"]),d=(new Date).toISOString().substring(0,19).replace(/[-:]/g,"").replace("T","-");window.navigator.msSaveBlob(u,"ss13-chatlog-"+d+".html")}},t}();window.__chatRenderer__||(window.__chatRenderer__=new v);var E=window.__chatRenderer__;t.chatRenderer=E}).call(this,n(102).setImmediate)},218:function(e,t,n){"use strict";t.__esModule=!0,t.gameReducer=t.gameMiddleware=t.useGame=void 0;var o=n(694);t.useGame=o.useGame;var r=n(695);t.gameMiddleware=r.gameMiddleware;var i=n(697);t.gameReducer=i.gameReducer},219:function(e,t,n){"use strict";t.__esModule=!0,t.selectGame=void 0;t.selectGame=function(e){return e.game}},220:function(e,t,n){"use strict";t.__esModule=!0,t.connectionRestored=t.connectionLost=t.roundRestarted=void 0;var o=n(22),r=(0,o.createAction)("roundrestart");t.roundRestarted=r;var i=(0,o.createAction)("game/connectionLost");t.connectionLost=i;var a=(0,o.createAction)("game/connectionRestored");t.connectionRestored=a},221:function(e,t,n){"use strict";t.__esModule=!0,t.pingReducer=t.PingIndicator=t.pingMiddleware=void 0;var o=n(699);t.pingMiddleware=o.pingMiddleware;var r=n(700);t.PingIndicator=r.PingIndicator;var i=n(703);t.pingReducer=i.pingReducer},222:function(e,t,n){"use strict";t.__esModule=!0,t.PING_ROUNDTRIP_WORST=t.PING_ROUNDTRIP_BEST=t.PING_QUEUE_SIZE=t.PING_MAX_FAILS=t.PING_TIMEOUT=t.PING_INTERVAL=void 0;t.PING_INTERVAL=2500;t.PING_TIMEOUT=2e3;t.PING_MAX_FAILS=3;t.PING_QUEUE_SIZE=8;t.PING_ROUNDTRIP_BEST=50;t.PING_ROUNDTRIP_WORST=200},65:function(e,t,n){"use strict";t.__esModule=!0,t.openChatSettings=t.toggleSettings=t.changeSettingsTab=t.loadSettings=t.updateSettings=void 0;var o=n(22),r=(0,o.createAction)("settings/update");t.updateSettings=r;var i=(0,o.createAction)("settings/load");t.loadSettings=i;var a=(0,o.createAction)("settings/changeTab");t.changeSettingsTab=a;var c=(0,o.createAction)("settings/toggle");t.toggleSettings=c;var s=(0,o.createAction)("settings/openChatTab");t.openChatSettings=s},675:function(e,t,n){n(149),e.exports=n(676)},676:function(e,t,n){"use strict";var o=n(0);n(677),n(678);var r,i,a=n(100),c=n(22),s=(n(101),n(57)),l=n(187),u=n(136),d=n(188),g=n(213),p=n(146),h=n(218),f=n(698),m=n(221),v=n(145),E=n(704);function y(e,t,n,o,r,i,a){try{var c=e[i](a),s=c.value}catch(l){return void n(l)}c.done?t(s):Promise.resolve(s).then(o,r)}a.perf.mark("inception",null==(r=window.performance)||null==(i=r.timing)?void 0:i.navigationStart),a.perf.mark("init");var b=(0,d.configureStore)({reducer:(0,c.combineReducers)({audio:g.audioReducer,chat:p.chatReducer,game:h.gameReducer,ping:m.pingReducer,settings:v.settingsReducer}),middleware:{pre:[p.chatMiddleware,m.pingMiddleware,E.telemetryMiddleware,v.settingsMiddleware,g.audioMiddleware,h.gameMiddleware]}}),S=(0,u.createRenderer)((function(){var e=n(705).Panel;return(0,o.createComponentVNode)(2,d.StoreProvider,{store:b,children:(0,o.createComponentVNode)(2,e)})})),_=function(){var e,t=(e=regeneratorRuntime.mark((function n(e){var t;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return void 0===e&&(e="output"),n.next=3,Byond.winget(e);case 3:t=n.sent,Byond.winset("browseroutput",{size:t.size});case 5:case"end":return n.stop()}}),n)})),function(){var t=this,n=arguments;return new Promise((function(o,r){var i=e.apply(t,n);function a(e){y(i,o,r,a,c,"next",e)}function c(e){y(i,o,r,a,c,"throw",e)}a(undefined)}))});return function(e){return t.apply(this,arguments)}}();!function C(){if("loading"!==document.readyState){for((0,s.setupGlobalEvents)({ignoreWindowFocus:!0}),(0,f.setupPanelFocusHacks)(),(0,l.captureExternalLinks)(),b.subscribe(S),window.update=function(e){return b.dispatch(Byond.parseJson(e))};;){var e=window.__updateQueue__.shift();if(!e)break;window.update(e)}Byond.winset("output",{"is-visible":!1}),Byond.winset("browseroutput",{"is-visible":!0,"is-disabled":!1,pos:"0x0",size:"0x0"}),_()}else document.addEventListener("DOMContentLoaded",C)}()},677:function(e,t,n){},678:function(e,t,n){},679:function(e,t,n){"use strict";t.__esModule=!0,t.useAudio=void 0;var o=n(22),r=n(214);t.useAudio=function(e){var t=(0,o.useSelector)(e,r.selectAudio),n=(0,o.useDispatch)(e);return Object.assign({},t,{toggle:function(){return n({type:"audio/toggle"})}})}},680:function(e,t,n){"use strict";t.__esModule=!0,t.audioMiddleware=void 0;var o=n(681);t.audioMiddleware=function(e){var t=new o.AudioPlayer;return t.onPlay((function(){e.dispatch({type:"audio/playing"})})),t.onStop((function(){e.dispatch({type:"audio/stopped"})})),function(e){return function(n){var o=n.type,r=n.payload;if("audio/playMusic"===o){var i=r.url,a=function(e,t){if(null==e)return{};var n,o,r={},i=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}(r,["url"]);return t.play(i,a),e(n)}if("audio/stopMusic"===o)return t.stop(),e(n);if("settings/update"===o||"settings/load"===o){var c=null==r?void 0:r.adminMusicVolume;return"number"==typeof c&&t.setVolume(c),e(n)}return e(n)}}}},681:function(e,t,n){"use strict";function o(e,t){var n;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return r(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return r(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var o=0;return function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}return(n=e[Symbol.iterator]()).next.bind(n)}function r(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n0&&e.node.currentTime>=e.options.end&&e.stop())}),1e3))}var t=e.prototype;return t.destroy=function(){this.node&&(this.node.stop(),document.removeChild(this.node),clearInterval(this.playbackInterval))},t.play=function(e,t){void 0===t&&(t={}),this.node&&(i.log("playing",e,t),this.options=t,this.node.src=e)},t.stop=function(){if(this.node){if(this.playing)for(var e,t=o(this.onStopSubscribers);!(e=t()).done;)(0,e.value)();i.log("stopping"),this.playing=!1,this.node.src=""}},t.setVolume=function(e){this.node&&(this.volume=e,this.node.volume=e)},t.onPlay=function(e){this.node&&this.onPlaySubscribers.push(e)},t.onStop=function(e){this.node&&this.onStopSubscribers.push(e)},e}();t.AudioPlayer=a},682:function(e,t,n){"use strict";t.__esModule=!0,t.NowPlayingWidget=void 0;var o=n(0),r=n(9),i=n(22),a=n(1),c=n(145),s=n(214);t.NowPlayingWidget=function(e,t){var n,l=(0,i.useSelector)(t,s.selectAudio),u=(0,i.useDispatch)(t),d=(0,c.useSettings)(t),g=null==(n=l.meta)?void 0:n.title;return(0,o.createComponentVNode)(2,a.Flex,{align:"center",children:[l.playing&&(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Flex.Item,{shrink:0,mx:.5,color:"label",children:"Now playing:"}),(0,o.createComponentVNode)(2,a.Flex.Item,{mx:.5,grow:1,style:{"white-space":"nowrap",overflow:"hidden","text-overflow":"ellipsis"},children:g||"Unknown Track"})],4)||(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,color:"label",children:"Nothing to play."}),l.playing&&(0,o.createComponentVNode)(2,a.Flex.Item,{mx:.5,fontSize:"0.9em",children:(0,o.createComponentVNode)(2,a.Button,{tooltip:"Stop",icon:"stop",onClick:function(){return u({type:"audio/stopMusic"})}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{mx:.5,fontSize:"0.9em",children:(0,o.createComponentVNode)(2,a.Knob,{minValue:0,maxValue:1,value:d.adminMusicVolume,step:.0025,stepPixelSize:1,format:function(e){return(0,r.toFixed)(100*e)+"%"},onDrag:function(e,t){return d.update({adminMusicVolume:t})}})})]})}},683:function(e,t,n){"use strict";t.__esModule=!0,t.useSettings=void 0;var o=n(22),r=n(65),i=n(105);t.useSettings=function(e){var t=(0,o.useSelector)(e,i.selectSettings),n=(0,o.useDispatch)(e);return Object.assign({},t,{visible:t.view.visible,toggle:function(){return n((0,r.toggleSettings)())},update:function(e){return n((0,r.updateSettings)(e))}})}},684:function(e,t,n){"use strict";t.__esModule=!0,t.settingsMiddleware=void 0;var o=n(79),r=n(215),i=n(65),a=n(105);t.settingsMiddleware=function(e){var t=!1;return function(n){return function(c){var s,l=c.type,u=c.payload;if(t||(t=!0,o.storage.get("panel-settings").then((function(t){e.dispatch((0,i.loadSettings)(t))}))),l===i.updateSettings.type||l===i.loadSettings.type){var d=null==u?void 0:u.theme;d&&(0,r.setClientTheme)(d),n(c);var g=(0,a.selectSettings)(e.getState());return s=g.fontSize,document.documentElement.style.setProperty("font-size",s+"px"),document.body.style.setProperty("font-size",s+"px"),void o.storage.set("panel-settings",g)}return n(c)}}}},685:function(e,t,n){"use strict";t.__esModule=!0,t.settingsReducer=void 0;var o=n(65),r={version:1,fontSize:13,lineHeight:1.2,theme:"default",adminMusicVolume:.5,highlightText:"",highlightColor:"#ffdd44",view:{visible:!1,activeTab:n(216).SETTINGS_TABS[0].id}};t.settingsReducer=function(e,t){void 0===e&&(e=r);var n=t.type,i=t.payload;if(n===o.updateSettings.type)return Object.assign({},e,i);if(n===o.loadSettings.type)return(null==i?void 0:i.version)?(delete i.view,Object.assign({},e,i)):e;if(n===o.toggleSettings.type)return Object.assign({},e,{view:Object.assign({},e.view,{visible:!e.view.visible})});if(n===o.openChatSettings.type)return Object.assign({},e,{view:Object.assign({},e.view,{visible:!0,activeTab:"chatPage"})});if(n===o.changeSettingsTab.type){var a=i.tabId;return Object.assign({},e,{view:Object.assign({},e.view,{activeTab:a})})}return e}},686:function(e,t,n){"use strict";t.__esModule=!0,t.SettingsGeneral=t.SettingsPanel=void 0;var o=n(0),r=n(9),i=n(22),a=n(1),c=n(146),s=n(80),l=n(215),u=n(65),d=n(216),g=n(105);t.SettingsPanel=function(e,t){var n=(0,i.useSelector)(t,g.selectActiveTab),r=(0,i.useDispatch)(t);return(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Flex.Item,{mr:1,children:(0,o.createComponentVNode)(2,a.Section,{fitted:!0,fill:!0,minHeight:"8em",children:(0,o.createComponentVNode)(2,a.Tabs,{vertical:!0,children:d.SETTINGS_TABS.map((function(e){return(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:e.id===n,onClick:function(){return r((0,u.changeSettingsTab)({tabId:e.id}))},children:e.name},e.id)}))})})}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,basis:0,children:["general"===n&&(0,o.createComponentVNode)(2,p),"chatPage"===n&&(0,o.createComponentVNode)(2,c.ChatPageSettings)]})]})};var p=function(e,t){var n=(0,i.useSelector)(t,g.selectSettings),c=n.theme,d=n.fontSize,p=n.lineHeight,h=n.highlightText,f=n.highlightColor,m=(0,i.useDispatch)(t);return(0,o.createComponentVNode)(2,a.Section,{fill:!0,children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Theme",children:(0,o.createComponentVNode)(2,a.Dropdown,{selected:c,options:l.THEMES,onSelected:function(e){return m((0,u.updateSettings)({theme:e}))}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Font size",children:(0,o.createComponentVNode)(2,a.NumberInput,{width:"4em",step:1,stepPixelSize:10,minValue:8,maxValue:32,value:d,unit:"px",format:function(e){return(0,r.toFixed)(e)},onChange:function(e,t){return m((0,u.updateSettings)({fontSize:t}))}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Line height",children:(0,o.createComponentVNode)(2,a.NumberInput,{width:"4em",step:.01,stepPixelSize:2,minValue:.8,maxValue:5,value:p,format:function(e){return(0,r.toFixed)(e,2)},onDrag:function(e,t){return m((0,u.updateSettings)({lineHeight:t}))}})})]}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Flex,{mb:1,color:"label",align:"baseline",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,children:"Highlight words (comma separated):"}),(0,o.createComponentVNode)(2,a.Flex.Item,{shrink:0,children:[(0,o.createComponentVNode)(2,a.ColorBox,{mr:1,color:f}),(0,o.createComponentVNode)(2,a.Input,{width:"5em",monospace:!0,placeholder:"#ffffff",value:f,onInput:function(e,t){return m((0,u.updateSettings)({highlightColor:t}))}})]})]}),(0,o.createComponentVNode)(2,a.TextArea,{height:"3em",value:h,onChange:function(e,t){return m((0,u.updateSettings)({highlightText:t}))}})]}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"check",onClick:function(){return m((0,s.rebuildChat)())},children:"Apply now"}),(0,o.createComponentVNode)(2,a.Box,{inline:!0,fontSize:"0.9em",ml:1,color:"label",children:"Can freeze the chat for a while."})]}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.Button,{icon:"save",onClick:function(){return m((0,s.saveChatToDisk)())},children:"Save chat log"})]})};t.SettingsGeneral=p},687:function(e,t,n){"use strict";t.__esModule=!0,t.ChatPageSettings=void 0;var o=n(0),r=n(22),i=n(1),a=n(80),c=n(107),s=n(147);t.ChatPageSettings=function(e,t){var n=(0,r.useSelector)(t,s.selectCurrentChatPage),l=(0,r.useDispatch)(t);return(0,o.createComponentVNode)(2,i.Section,{fill:!0,children:[(0,o.createComponentVNode)(2,i.Flex,{mx:-.5,align:"center",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{mx:.5,grow:1,children:(0,o.createComponentVNode)(2,i.Input,{fluid:!0,value:n.name,onChange:function(e,t){return l((0,a.updateChatPage)({pageId:n.id,name:t}))}})}),(0,o.createComponentVNode)(2,i.Flex.Item,{mx:.5,children:(0,o.createComponentVNode)(2,i.Button,{icon:"times",color:"red",onClick:function(){return l((0,a.removeChatPage)({pageId:n.id}))},children:"Remove"})})]}),(0,o.createComponentVNode)(2,i.Divider),(0,o.createComponentVNode)(2,i.Section,{title:"Messages to display",level:2,children:[c.MESSAGE_TYPES.filter((function(e){return!e.important&&!e.admin})).map((function(e){return(0,o.createComponentVNode)(2,i.Button.Checkbox,{checked:n.acceptedTypes[e.type],onClick:function(){return l((0,a.toggleAcceptedType)({pageId:n.id,type:e.type}))},children:e.name},e.type)})),(0,o.createComponentVNode)(2,i.Collapsible,{mt:1,color:"transparent",title:"Admin stuff",children:c.MESSAGE_TYPES.filter((function(e){return!e.important&&e.admin})).map((function(e){return(0,o.createComponentVNode)(2,i.Button.Checkbox,{checked:n.acceptedTypes[e.type],onClick:function(){return l((0,a.toggleAcceptedType)({pageId:n.id,type:e.type}))},children:e.name},e.type)}))})]})]})}},688:function(e,t,n){"use strict";t.__esModule=!0,t.ChatPanel=void 0;var o=n(0),r=n(6),i=n(1),a=n(217);var c=function(e){var t,n;function c(){var t;return(t=e.call(this)||this).ref=(0,o.createRef)(),t.state={scrollTracking:!0},t.handleScrollTrackingChange=function(e){return t.setState({scrollTracking:e})},t}n=e,(t=c).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var s=c.prototype;return s.componentDidMount=function(){a.chatRenderer.mount(this.ref.current),a.chatRenderer.events.on("scrollTrackingChanged",this.handleScrollTrackingChange),this.componentDidUpdate()},s.componentWillUnmount=function(){a.chatRenderer.events.off("scrollTrackingChanged",this.handleScrollTrackingChange)},s.componentDidUpdate=function(e){requestAnimationFrame((function(){a.chatRenderer.ensureScrollTracking()})),(!e||(0,r.shallowDiffers)(this.props,e))&&a.chatRenderer.assignStyle({width:"100%","white-space":"pre-wrap","font-size":this.props.fontSize,"line-height":this.props.lineHeight})},s.render=function(){var e=this.state.scrollTracking;return(0,o.createFragment)([(0,o.createVNode)(1,"div","Chat",null,1,null,null,this.ref),!e&&(0,o.createComponentVNode)(2,i.Button,{className:"Chat__scrollButton",icon:"arrow-down",onClick:function(){return a.chatRenderer.scrollToBottom()},children:"Scroll to bottom"})],0)},c}(o.Component);t.ChatPanel=c},689:function(e,t,n){"use strict";t.__esModule=!0,t.linkifyNode=t.highlightNode=t.replaceInTextNode=void 0;var o=function(e,t){return function(n){for(var o,r,i=n.textContent,a=i.length,c=0,s=0;o=e.exec(i);){s+=1,r||(r=document.createDocumentFragment());var l=o[0],u=l.length,d=o.index;c0&&(0,o.createComponentVNode)(2,l,{value:e.unreadCount}),onClick:function(){return d((0,a.changeChatPage)({pageId:e.id}))},children:e.name},e.id)}))})}),(0,o.createComponentVNode)(2,i.Flex.Item,{ml:1,children:(0,o.createComponentVNode)(2,i.Button,{color:"transparent",icon:"plus",onClick:function(){d((0,a.addChatPage)()),d((0,s.openChatSettings)())}})})]})}},691:function(e,t,n){"use strict";t.__esModule=!0,t.chatMiddleware=void 0;var o=n(79),r=n(65),i=n(105),a=n(80),c=n(107),s=n(106),l=n(217),u=n(147);n(24);function d(e,t,n,o,r,i,a){try{var c=e[i](a),s=c.value}catch(l){return void n(l)}c.done?t(s):Promise.resolve(s).then(o,r)}function g(e){return function(){var t=this,n=arguments;return new Promise((function(o,r){var i=e.apply(t,n);function a(e){d(i,o,r,a,c,"next",e)}function c(e){d(i,o,r,a,c,"throw",e)}a(undefined)}))}}var p=function(){var e=g(regeneratorRuntime.mark((function t(e){var n,r,i;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:n=(0,u.selectChat)(e.getState()),r=Math.max(0,l.chatRenderer.messages.length-c.MAX_PERSISTED_MESSAGES),i=l.chatRenderer.messages.slice(r).map((function(e){return(0,s.serializeMessage)(e)})),o.storage.set("chat-state",n),o.storage.set("chat-messages",i);case 5:case"end":return t.stop()}}),t)})));return function(t){return e.apply(this,arguments)}}(),h=function(){var e=g(regeneratorRuntime.mark((function t(e){var n,r,i,c;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,Promise.all([o.storage.get("chat-state"),o.storage.get("chat-messages")]);case 2:if(n=t.sent,r=n[0],i=n[1],!(r&&r.version<=4)){t.next=8;break}return e.dispatch((0,a.loadChat)()),t.abrupt("return");case 8:i&&(c=[].concat(i,[(0,s.createMessage)({type:"internal/reconnected"})]),l.chatRenderer.processBatch(c,{prepend:!0})),e.dispatch((0,a.loadChat)(r));case 10:case"end":return t.stop()}}),t)})));return function(t){return e.apply(this,arguments)}}();t.chatMiddleware=function(e){var t=!1,n=!1;return l.chatRenderer.events.on("batchProcessed",(function(t){n&&e.dispatch((0,a.updateMessageCount)(t))})),l.chatRenderer.events.on("scrollTrackingChanged",(function(t){e.dispatch((0,a.changeScrollTracking)(t))})),setInterval((function(){return p(e)}),c.MESSAGE_SAVE_INTERVAL),function(o){return function(c){var s=c.type,d=c.payload;if(t||(t=!0,h(e)),"chat/message"!==s){if(s===a.loadChat.type){o(c);var g=(0,u.selectCurrentChatPage)(e.getState());return l.chatRenderer.changePage(g),l.chatRenderer.onStateLoaded(),void(n=!0)}if(s!==a.changeChatPage.type&&s!==a.addChatPage.type&&s!==a.removeChatPage.type&&s!==a.toggleAcceptedType.type){if(s===a.rebuildChat.type)return l.chatRenderer.rebuildChat(),o(c);if(s!==r.updateSettings.type&&s!==r.loadSettings.type){if("roundrestart"===s)return p(e),o(c);if(s!==a.saveChatToDisk.type)return o(c);l.chatRenderer.saveToDisk()}else{o(c);var f=(0,i.selectSettings)(e.getState());l.chatRenderer.setHighlight(f.highlightText,f.highlightColor)}}else{o(c);var m=(0,u.selectCurrentChatPage)(e.getState());l.chatRenderer.changePage(m)}}else{var v=Array.isArray(d)?d:[d];l.chatRenderer.processBatch(v)}}}}},692:function(e,t,n){"use strict";t.__esModule=!0,t.chatReducer=t.initialState=void 0;var o,r=n(80),i=n(106);function a(e,t){var n;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return c(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return c(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var o=0;return function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}return(n=e[Symbol.iterator]()).next.bind(n)}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n0&&(_[A.id]=Object.assign({},A,{unreadCount:A.unreadCount+M}))}return Object.assign({},e,{pageById:_})}if(o===r.addChatPage.type)return Object.assign({},e,{currentPageId:c.id,pages:[].concat(e.pages,[c.id]),pageById:Object.assign({},e.pageById,(n={},n[c.id]=c,n))});if(o===r.changeChatPage.type){var I,P=c.pageId,x=Object.assign({},e.pageById[P],{unreadCount:0});return Object.assign({},e,{currentPageId:P,pageById:Object.assign({},e.pageById,(I={},I[P]=x,I))})}if(o===r.updateChatPage.type){var k,R=c.pageId,O=function(e,t){if(null==e)return{};var n,o,r={},i=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}(c,["pageId"]),V=Object.assign({},e.pageById[R],O);return Object.assign({},e,{pageById:Object.assign({},e.pageById,(k={},k[R]=V,k))})}if(o===r.toggleAcceptedType.type){var G,B=c.pageId,L=c.type,D=Object.assign({},e.pageById[B]);return D.acceptedTypes=Object.assign({},D.acceptedTypes),D.acceptedTypes[L]=!D.acceptedTypes[L],Object.assign({},e,{pageById:Object.assign({},e.pageById,(G={},G[B]=D,G))})}if(o===r.removeChatPage.type){var F=c.pageId,j=Object.assign({},e,{pages:[].concat(e.pages),pageById:Object.assign({},e.pageById)});return delete j.pageById[F],j.pages=j.pages.filter((function(e){return e!==F})),0===j.pages.length&&(j.pages.push(s.id),j.pageById[s.id]=s,j.currentPageId=s.id),j.currentPageId&&j.currentPageId!==F||(j.currentPageId=j.pages[0]),j}return e}},693:function(e,t,n){"use strict";t.__esModule=!0,t.audioReducer=void 0;var o={visible:!1,playing:!1,track:null};t.audioReducer=function(e,t){void 0===e&&(e=o);var n=t.type,r=t.payload;return"audio/playing"===n?Object.assign({},e,{visible:!0,playing:!0}):"audio/stopped"===n?Object.assign({},e,{visible:!1,playing:!1}):"audio/playMusic"===n?Object.assign({},e,{meta:r}):"audio/stopMusic"===n?Object.assign({},e,{visible:!1,playing:!1,meta:null}):"audio/toggle"===n?Object.assign({},e,{visible:!e.visible}):e}},694:function(e,t,n){"use strict";t.__esModule=!0,t.useGame=void 0;var o=n(22),r=n(219);t.useGame=function(e){return(0,o.useSelector)(e,r.selectGame)}},695:function(e,t,n){"use strict";t.__esModule=!0,t.gameMiddleware=void 0;var o=n(148),r=n(220),i=n(219),a=n(696),c=function(e){return Object.assign({},e,{meta:Object.assign({},e.meta,{now:Date.now()})})};t.gameMiddleware=function(e){var t;return setInterval((function(){var n=e.getState();if(n){var o=(0,i.selectGame)(n),s=t&&Date.now()>=t+a.CONNECTION_LOST_AFTER;!o.connectionLostAt&&s&&e.dispatch(c((0,r.connectionLost)())),o.connectionLostAt&&!s&&e.dispatch(c((0,r.connectionRestored)()))}}),1e3),function(e){return function(n){var i=n.type,a=(n.payload,n.meta);return i===o.pingSuccess.type?(t=a.now,e(n)):i===r.roundRestarted.type?e(c(n)):e(n)}}}},696:function(e,t,n){"use strict";t.__esModule=!0,t.CONNECTION_LOST_AFTER=void 0;t.CONNECTION_LOST_AFTER=15e3},697:function(e,t,n){"use strict";t.__esModule=!0,t.gameReducer=void 0;var o=n(220),r={roundId:null,roundTime:null,roundRestartedAt:null,connectionLostAt:null};t.gameReducer=function(e,t){void 0===e&&(e=r);var n=t.type,i=(t.payload,t.meta);return"roundrestart"===n?Object.assign({},e,{roundRestartedAt:i.now}):n===o.connectionLost.type?Object.assign({},e,{connectionLostAt:i.now}):n===o.connectionRestored.type?Object.assign({},e,{connectionLostAt:null}):e}},698:function(e,t,n){"use strict";(function(e){t.__esModule=!0,t.setupPanelFocusHacks=void 0;var o=n(103),r=n(57),i=n(190),a=function(){return e((function(){return(0,i.focusMap)()}))};t.setupPanelFocusHacks=function(){var e=!1,t=null;window.addEventListener("focusin",(function(t){e=(0,r.canStealFocus)(t.target)})),window.addEventListener("mousedown",(function(e){t=[e.screenX,e.screenY]})),window.addEventListener("mouseup",(function(n){if(t){var r=[n.screenX,n.screenY];(0,o.vecLength)((0,o.vecSubtract)(r,t))>=10&&(e=!0)}e||a()})),r.globalEvents.on("keydown",(function(e){e.isModifierKey()||a()}))}}).call(this,n(102).setImmediate)},699:function(e,t,n){"use strict";t.__esModule=!0,t.pingMiddleware=void 0;var o=n(2),r=n(148),i=n(222);t.pingMiddleware=function(e){var t=!1,n=0,a=[],c=function(){for(var t=0;ti.PING_TIMEOUT&&(a[t]=null,e.dispatch((0,r.pingFail)()))}var s={index:n,sentAt:Date.now()};a[n]=s,(0,o.sendMessage)({type:"ping",payload:{index:n}}),n=(n+1)%i.PING_QUEUE_SIZE};return function(e){return function(n){var o=n.type,s=n.payload;if(t||(t=!0,setInterval(c,i.PING_INTERVAL),c()),"pingReply"===o){var l=s.index,u=a[l];if(!u)return;return a[l]=null,e((0,r.pingSuccess)(u))}return e(n)}}}},700:function(e,t,n){"use strict";t.__esModule=!0,t.PingIndicator=void 0;var o=n(0),r=n(701),i=n(9),a=n(22),c=n(1),s=n(702);t.PingIndicator=function(e,t){var n=(0,a.useSelector)(t,s.selectPing),l=r.Color.lookup(n.networkQuality,[new r.Color(220,40,40),new r.Color(220,200,40),new r.Color(60,220,40)]),u=n.roundtrip?(0,i.toFixed)(n.roundtrip):"--";return(0,o.createVNode)(1,"div","Ping",[(0,o.createComponentVNode)(2,c.Box,{className:"Ping__indicator",backgroundColor:l}),u],0)}},701:function(e,t,n){"use strict";t.__esModule=!0,t.Color=void 0;var o=function(){function e(e,t,n,o){void 0===e&&(e=0),void 0===t&&(t=0),void 0===n&&(n=0),void 0===o&&(o=1),this.r=e,this.g=t,this.b=n,this.a=o}return e.prototype.toString=function(){return"rgba("+(0|this.r)+", "+(0|this.g)+", "+(0|this.b)+", "+(0|this.a)+")"},e}();t.Color=o,o.fromHex=function(e){return new o(parseInt(e.substr(1,2),16),parseInt(e.substr(3,2),16),parseInt(e.substr(5,2),16))},o.lerp=function(e,t,n){return new o((t.r-e.r)*n+e.r,(t.g-e.g)*n+e.g,(t.b-e.b)*n+e.b,(t.a-e.a)*n+e.a)},o.lookup=function(e,t){void 0===t&&(t=[]);var n=t.length;if(n<2)throw new Error("Needs at least two colors!");var r=e*(n-1);if(e<1e-4)return t[0];if(e>=.9999)return t[n-1];var i=r%1,a=0|r;return o.lerp(t[a],t[a+1],i)}},702:function(e,t,n){"use strict";t.__esModule=!0,t.selectPing=void 0;t.selectPing=function(e){return e.ping}},703:function(e,t,n){"use strict";t.__esModule=!0,t.pingReducer=void 0;var o=n(9),r=n(148),i=n(222);t.pingReducer=function(e,t){void 0===e&&(e={});var n=t.type,a=t.payload;if(n===r.pingSuccess.type){var c=a.roundtrip,s=e.roundtripAvg||c,l=Math.round(.4*s+.6*c);return{roundtrip:c,roundtripAvg:l,failCount:0,networkQuality:1-(0,o.scale)(l,i.PING_ROUNDTRIP_BEST,i.PING_ROUNDTRIP_WORST)}}if(n===r.pingFail.type){var u=e.failCount,d=void 0===u?0:u,g=(0,o.clamp01)(e.networkQuality-d/i.PING_MAX_FAILS),p=Object.assign({},e,{failCount:d+1,networkQuality:g});return d>i.PING_MAX_FAILS&&(p.roundtrip=undefined,p.roundtripAvg=undefined),p}return e}},704:function(e,t,n){"use strict";t.__esModule=!0,t.telemetryMiddleware=void 0;var o=n(2),r=n(79);function i(e,t,n,o,r,i,a){try{var c=e[i](a),s=c.value}catch(l){return void n(l)}c.done?t(s):Promise.resolve(s).then(o,r)}var a=(0,n(24).createLogger)("telemetry");t.telemetryMiddleware=function(e){var t,n;return function(c){return function(s){var l,u=s.type,d=s.payload;if("telemetry/request"!==u)return"backend/update"===u?(c(s),void(l=regeneratorRuntime.mark((function h(){var o,i,c,s;return regeneratorRuntime.wrap((function(l){for(;;)switch(l.prev=l.next){case 0:if(i=null==d||null==(o=d.config)?void 0:o.client){l.next=4;break}return a.error("backend/update payload is missing client data!"),l.abrupt("return");case 4:if(t){l.next=13;break}return l.next=7,r.storage.get("telemetry");case 7:if(l.t0=l.sent,l.t0){l.next=10;break}l.t0={};case 10:(t=l.t0).connections||(t.connections=[]),a.debug("retrieved telemetry from storage",t);case 13:c=!1,t.connections.find((function(e){return n=i,(t=e).ckey===n.ckey&&t.address===n.address&&t.computer_id===n.computer_id;var t,n}))||(c=!0,t.connections.unshift(i),t.connections.length>10&&t.connections.pop()),c&&(a.debug("saving telemetry to storage",t),r.storage.set("telemetry",t)),n&&(s=n,n=null,e.dispatch({type:"telemetry/request",payload:s}));case 18:case"end":return l.stop()}}),h)})),function(){var e=this,t=arguments;return new Promise((function(n,o){var r=l.apply(e,t);function a(e){i(r,n,o,a,c,"next",e)}function c(e){i(r,n,o,a,c,"throw",e)}a(undefined)}))})()):c(s);if(!t)return a.debug("deferred"),void(n=d);a.debug("sending");var g=(null==d?void 0:d.limits)||{},p=t.connections.slice(0,g.connections);(0,o.sendMessage)({type:"telemetry",payload:{connections:p}})}}}},705:function(e,t,n){"use strict";t.__esModule=!0,t.Panel=void 0;var o=n(0),r=n(1),i=n(3),a=n(213),c=n(146),s=n(218),l=n(706),u=n(221),d=n(145);t.Panel=function(e,t){if(Byond.IS_LTE_IE10)return(0,o.createComponentVNode)(2,g);var n=(0,a.useAudio)(t),p=(0,d.useSettings)(t),h=(0,s.useGame)(t);return(0,o.createComponentVNode)(2,i.Pane,{theme:"default"===p.theme?"light":p.theme,children:(0,o.createComponentVNode)(2,r.Flex,{direction:"column",height:"100%",children:[(0,o.createComponentVNode)(2,r.Flex.Item,{children:(0,o.createComponentVNode)(2,r.Section,{fitted:!0,children:(0,o.createComponentVNode)(2,r.Flex,{mx:.5,align:"center",children:[(0,o.createComponentVNode)(2,r.Flex.Item,{mx:.5,grow:1,overflowX:"auto",children:(0,o.createComponentVNode)(2,c.ChatTabs)}),(0,o.createComponentVNode)(2,r.Flex.Item,{mx:.5,children:(0,o.createComponentVNode)(2,u.PingIndicator)}),(0,o.createComponentVNode)(2,r.Flex.Item,{mx:.5,children:(0,o.createComponentVNode)(2,r.Button,{color:"grey",selected:n.visible,icon:"music",tooltip:"Music player",tooltipPosition:"bottom-left",onClick:function(){return n.toggle()}})}),(0,o.createComponentVNode)(2,r.Flex.Item,{mx:.5,children:(0,o.createComponentVNode)(2,r.Button,{icon:p.visible?"times":"cog",selected:p.visible,tooltip:p.visible?"Close settings":"Open settings",tooltipPosition:"bottom-left",onClick:function(){return p.toggle()}})})]})})}),n.visible&&(0,o.createComponentVNode)(2,r.Flex.Item,{mt:1,children:(0,o.createComponentVNode)(2,r.Section,{children:(0,o.createComponentVNode)(2,a.NowPlayingWidget)})}),p.visible&&(0,o.createComponentVNode)(2,r.Flex.Item,{mt:1,children:(0,o.createComponentVNode)(2,d.SettingsPanel)}),(0,o.createComponentVNode)(2,r.Flex.Item,{mt:1,grow:1,children:(0,o.createComponentVNode)(2,r.Section,{fill:!0,fitted:!0,position:"relative",children:[(0,o.createComponentVNode)(2,i.Pane.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,c.ChatPanel,{lineHeight:p.lineHeight})}),(0,o.createComponentVNode)(2,l.Notifications,{children:[h.connectionLostAt&&(0,o.createComponentVNode)(2,l.Notifications.Item,{rightSlot:(0,o.createComponentVNode)(2,r.Button,{color:"white",onClick:function(){return Byond.command(".reconnect")},children:"Reconnect"}),children:"You are either AFK, experiencing lag or the connection has closed."}),h.roundRestartedAt&&(0,o.createComponentVNode)(2,l.Notifications.Item,{children:"The connection has been closed because the server is restarting. Please wait while you automatically reconnect."})]})]})})]})})};var g=function(e,t){var n=(0,d.useSettings)(t);return(0,o.createComponentVNode)(2,i.Pane,{theme:"default"===n.theme?"light":n.theme,children:(0,o.createComponentVNode)(2,i.Pane.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,r.Button,{style:{position:"fixed",top:"1em",right:"2em","z-index":1e3},selected:n.visible,onClick:function(){return n.toggle()},children:"Settings"}),n.visible&&(0,o.createComponentVNode)(2,r.Flex.Item,{mt:1,children:(0,o.createComponentVNode)(2,d.SettingsPanel)})||(0,o.createComponentVNode)(2,c.ChatPanel,{lineHeight:n.lineHeight})]})})}},706:function(e,t,n){"use strict";t.__esModule=!0,t.Notifications=void 0;var o=n(0),r=n(1),i=function(e){var t=e.children;return(0,o.createVNode)(1,"div","Notifications",t,0)};t.Notifications=i;i.Item=function(e){var t=e.rightSlot,n=e.children;return(0,o.createComponentVNode)(2,r.Flex,{align:"center",className:"Notification",children:[(0,o.createComponentVNode)(2,r.Flex.Item,{className:"Notification__content",grow:1,children:n}),t&&(0,o.createComponentVNode)(2,r.Flex.Item,{className:"Notification__rightSlot",children:t})]})}},80:function(e,t,n){"use strict";t.__esModule=!0,t.saveChatToDisk=t.changeScrollTracking=t.removeChatPage=t.toggleAcceptedType=t.updateChatPage=t.changeChatPage=t.addChatPage=t.updateMessageCount=t.rebuildChat=t.loadChat=void 0;var o=n(22),r=n(106),i=(0,o.createAction)("chat/load");t.loadChat=i;var a=(0,o.createAction)("chat/rebuild");t.rebuildChat=a;var c=(0,o.createAction)("chat/updateMessageCount");t.updateMessageCount=c;var s=(0,o.createAction)("chat/addPage",(function(){return{payload:(0,r.createPage)()}}));t.addChatPage=s;var l=(0,o.createAction)("chat/changePage");t.changeChatPage=l;var u=(0,o.createAction)("chat/updatePage");t.updateChatPage=u;var d=(0,o.createAction)("chat/toggleAcceptedType");t.toggleAcceptedType=d;var g=(0,o.createAction)("chat/removePage");t.removeChatPage=g;var p=(0,o.createAction)("chat/changeScrollTracking");t.changeScrollTracking=p;var h=(0,o.createAction)("chat/saveToDisk");t.saveChatToDisk=h}}); \ No newline at end of file +!function(e){function t(t){for(var o,a,c=t[0],s=t[1],l=t[2],u=0,g=[];u=e.length?{done:!0}:{done:!1,value:e[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}return(n=e[Symbol.iterator]()).next.bind(n)}function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n=e.length?{done:!0}:{done:!1,value:e[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}return(n=e[Symbol.iterator]()).next.bind(n)}function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n=a.IMAGE_RETRY_LIMIT)u.error("failed to load an image after "+n+" attempts");else{var o=t.src;t.src=null,t.src=o+"#"+n,t.setAttribute("data-reload-n",n+1)}}),a.IMAGE_RETRY_DELAY)},m=function(e){var t=e.node,n=e.times;if(t&&n){var o=t.querySelector(".Chat__badge"),i=o||document.createElement("div");i.textContent=n,i.className=(0,r.classes)(["Chat__badge","Chat__badge--animate"]),requestAnimationFrame((function(){i.className="Chat__badge"})),o||t.appendChild(i)}},v=function(){function t(){var e=this;this.loaded=!1,this.rootNode=null,this.queue=[],this.messages=[],this.visibleMessages=[],this.page=null,this.events=new o.EventEmitter,this.scrollNode=null,this.scrollTracking=!0,this.handleScroll=function(t){var n=e.scrollNode,o=n.scrollHeight,r=n.scrollTop+n.offsetHeight,i=Math.abs(o-r)<24;i!==e.scrollTracking&&(e.scrollTracking=i,e.events.emit("scrollTrackingChanged",i),u.debug("tracking",e.scrollTracking))},this.ensureScrollTracking=function(){e.scrollTracking&&e.scrollToBottom()},setInterval((function(){return e.pruneMessages()}),a.MESSAGE_PRUNE_INTERVAL)}var n=t.prototype;return n.isReady=function(){return this.loaded&&this.rootNode&&this.page},n.mount=function(t){var n=this;this.rootNode?t.appendChild(this.rootNode):this.rootNode=t,this.scrollNode=function(e){for(var t=document.body,n=e;n&&n!==t;){if(n.scrollWidth0&&(this.processBatch(this.queue),this.queue=[])},n.assignStyle=function(e){void 0===e&&(e={});for(var t=0,n=Object.keys(e);t1&&n.test(e)}));if(0===o.length)return this.highlightRegex=null,void(this.highlightColor=null);this.highlightRegex=new RegExp("("+o.join("|")+")","gi"),this.highlightColor=t},n.scrollToBottom=function(){this.scrollNode.scrollTop=this.scrollNode.scrollHeight},n.changePage=function(e){if(!this.isReady())return this.page=e,void this.tryFlushQueue();this.page=e,this.rootNode.textContent="",this.visibleMessages=[];for(var t,n,o=document.createDocumentFragment(),r=l(this.messages);!(n=r()).done;){var i=n.value;(0,c.canPageAcceptType)(e,i.type)&&(t=i.node,o.appendChild(t),this.visibleMessages.push(i))}t&&(this.rootNode.appendChild(o),t.scrollIntoView())},n.getCombinableMessage=function(e){for(var t=Date.now(),n=this.visibleMessages.length,o=n-1,r=Math.max(0,n-a.COMBINE_MAX_MESSAGES),i=o;i>=r;i--){var s=this.visibleMessages[i];if(!s.type.startsWith(a.MESSAGE_TYPE_INTERNAL)&&(0,c.isSameMessage)(s,e)&&t0){this.visibleMessages=e.slice(t);for(var n=0;n0&&(this.messages=this.messages.slice(r),u.log("pruned "+r+" stored messages"))}else u.debug("pruning delayed")},n.rebuildChat=function(){if(this.isReady()){for(var e,t=Math.max(0,this.messages.length-a.MAX_PERSISTED_MESSAGES),n=this.messages.slice(t),o=l(n);!(e=o()).done;)e.value.node=undefined;this.rootNode.textContent="",this.messages=[],this.visibleMessages=[],this.processBatch(n,{notifyListeners:!1})}},n.saveToDisk=function(){if(!Byond.IS_LTE_IE10){for(var e="",t=document.styleSheets,n=0;n\n\n\nSS13 Chat Log\n\n\n\n
\n'+a+"
\n\n\n"]),u=(new Date).toISOString().substring(0,19).replace(/[-:]/g,"").replace("T","-");window.navigator.msSaveBlob(d,"ss13-chatlog-"+u+".html")}},t}();window.__chatRenderer__||(window.__chatRenderer__=new v);var E=window.__chatRenderer__;t.chatRenderer=E}).call(this,n(102).setImmediate)},218:function(e,t,n){"use strict";t.__esModule=!0,t.gameReducer=t.gameMiddleware=t.useGame=void 0;var o=n(694);t.useGame=o.useGame;var r=n(695);t.gameMiddleware=r.gameMiddleware;var i=n(697);t.gameReducer=i.gameReducer},219:function(e,t,n){"use strict";t.__esModule=!0,t.selectGame=void 0;t.selectGame=function(e){return e.game}},220:function(e,t,n){"use strict";t.__esModule=!0,t.connectionRestored=t.connectionLost=t.roundRestarted=void 0;var o=n(22),r=(0,o.createAction)("roundrestart");t.roundRestarted=r;var i=(0,o.createAction)("game/connectionLost");t.connectionLost=i;var a=(0,o.createAction)("game/connectionRestored");t.connectionRestored=a},221:function(e,t,n){"use strict";t.__esModule=!0,t.pingReducer=t.PingIndicator=t.pingMiddleware=void 0;var o=n(699);t.pingMiddleware=o.pingMiddleware;var r=n(700);t.PingIndicator=r.PingIndicator;var i=n(703);t.pingReducer=i.pingReducer},222:function(e,t,n){"use strict";t.__esModule=!0,t.PING_ROUNDTRIP_WORST=t.PING_ROUNDTRIP_BEST=t.PING_QUEUE_SIZE=t.PING_MAX_FAILS=t.PING_TIMEOUT=t.PING_INTERVAL=void 0;t.PING_INTERVAL=2500;t.PING_TIMEOUT=2e3;t.PING_MAX_FAILS=3;t.PING_QUEUE_SIZE=8;t.PING_ROUNDTRIP_BEST=50;t.PING_ROUNDTRIP_WORST=200},65:function(e,t,n){"use strict";t.__esModule=!0,t.openChatSettings=t.toggleSettings=t.changeSettingsTab=t.loadSettings=t.updateSettings=void 0;var o=n(22),r=(0,o.createAction)("settings/update");t.updateSettings=r;var i=(0,o.createAction)("settings/load");t.loadSettings=i;var a=(0,o.createAction)("settings/changeTab");t.changeSettingsTab=a;var c=(0,o.createAction)("settings/toggle");t.toggleSettings=c;var s=(0,o.createAction)("settings/openChatTab");t.openChatSettings=s},675:function(e,t,n){n(149),e.exports=n(676)},676:function(e,t,n){"use strict";var o=n(0);n(677),n(678);var r,i,a=n(100),c=n(22),s=(n(101),n(57)),l=n(187),d=n(136),u=n(188),g=n(213),p=n(146),h=n(218),f=n(698),m=n(221),v=n(145),E=n(704);a.perf.mark("inception",null==(r=window.performance)||null==(i=r.timing)?void 0:i.navigationStart),a.perf.mark("init");var y=(0,u.configureStore)({reducer:(0,c.combineReducers)({audio:g.audioReducer,chat:p.chatReducer,game:h.gameReducer,ping:m.pingReducer,settings:v.settingsReducer}),middleware:{pre:[p.chatMiddleware,m.pingMiddleware,E.telemetryMiddleware,v.settingsMiddleware,g.audioMiddleware,h.gameMiddleware]}}),b=(0,d.createRenderer)((function(){var e=n(705).Panel;return(0,o.createComponentVNode)(2,u.StoreProvider,{store:y,children:(0,o.createComponentVNode)(2,e)})}));!function S(){if("loading"!==document.readyState){for((0,s.setupGlobalEvents)({ignoreWindowFocus:!0}),(0,f.setupPanelFocusHacks)(),(0,l.captureExternalLinks)(),y.subscribe(b),window.update=function(e){return y.dispatch(Byond.parseJson(e))};;){var e=window.__updateQueue__.shift();if(!e)break;window.update(e)}Byond.winset("output",{"is-visible":!1}),Byond.winset("browseroutput",{"is-visible":!0,"is-disabled":!1,pos:"0x0",size:"0x0"})}else document.addEventListener("DOMContentLoaded",S)}()},677:function(e,t,n){},678:function(e,t,n){},679:function(e,t,n){"use strict";t.__esModule=!0,t.useAudio=void 0;var o=n(22),r=n(214);t.useAudio=function(e){var t=(0,o.useSelector)(e,r.selectAudio),n=(0,o.useDispatch)(e);return Object.assign({},t,{toggle:function(){return n({type:"audio/toggle"})}})}},680:function(e,t,n){"use strict";t.__esModule=!0,t.audioMiddleware=void 0;var o=n(681);t.audioMiddleware=function(e){var t=new o.AudioPlayer;return t.onPlay((function(){e.dispatch({type:"audio/playing"})})),t.onStop((function(){e.dispatch({type:"audio/stopped"})})),function(e){return function(n){var o=n.type,r=n.payload;if("audio/playMusic"===o){var i=r.url,a=function(e,t){if(null==e)return{};var n,o,r={},i=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}(r,["url"]);return t.play(i,a),e(n)}if("audio/stopMusic"===o)return t.stop(),e(n);if("settings/update"===o||"settings/load"===o){var c=null==r?void 0:r.adminMusicVolume;return"number"==typeof c&&t.setVolume(c),e(n)}return e(n)}}}},681:function(e,t,n){"use strict";function o(e,t){var n;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return r(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return r(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var o=0;return function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}return(n=e[Symbol.iterator]()).next.bind(n)}function r(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n0&&e.node.currentTime>=e.options.end&&e.stop())}),1e3))}var t=e.prototype;return t.destroy=function(){this.node&&(this.node.stop(),document.removeChild(this.node),clearInterval(this.playbackInterval))},t.play=function(e,t){void 0===t&&(t={}),this.node&&(i.log("playing",e,t),this.options=t,this.node.src=e)},t.stop=function(){if(this.node){if(this.playing)for(var e,t=o(this.onStopSubscribers);!(e=t()).done;)(0,e.value)();i.log("stopping"),this.playing=!1,this.node.src=""}},t.setVolume=function(e){this.node&&(this.volume=e,this.node.volume=e)},t.onPlay=function(e){this.node&&this.onPlaySubscribers.push(e)},t.onStop=function(e){this.node&&this.onStopSubscribers.push(e)},e}();t.AudioPlayer=a},682:function(e,t,n){"use strict";t.__esModule=!0,t.NowPlayingWidget=void 0;var o=n(0),r=n(9),i=n(22),a=n(1),c=n(145),s=n(214);t.NowPlayingWidget=function(e,t){var n,l=(0,i.useSelector)(t,s.selectAudio),d=(0,i.useDispatch)(t),u=(0,c.useSettings)(t),g=null==(n=l.meta)?void 0:n.title;return(0,o.createComponentVNode)(2,a.Flex,{align:"center",children:[l.playing&&(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Flex.Item,{shrink:0,mx:.5,color:"label",children:"Now playing:"}),(0,o.createComponentVNode)(2,a.Flex.Item,{mx:.5,grow:1,style:{"white-space":"nowrap",overflow:"hidden","text-overflow":"ellipsis"},children:g||"Unknown Track"})],4)||(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,color:"label",children:"Nothing to play."}),l.playing&&(0,o.createComponentVNode)(2,a.Flex.Item,{mx:.5,fontSize:"0.9em",children:(0,o.createComponentVNode)(2,a.Button,{tooltip:"Stop",icon:"stop",onClick:function(){return d({type:"audio/stopMusic"})}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{mx:.5,fontSize:"0.9em",children:(0,o.createComponentVNode)(2,a.Knob,{minValue:0,maxValue:1,value:u.adminMusicVolume,step:.0025,stepPixelSize:1,format:function(e){return(0,r.toFixed)(100*e)+"%"},onDrag:function(e,t){return u.update({adminMusicVolume:t})}})})]})}},683:function(e,t,n){"use strict";t.__esModule=!0,t.useSettings=void 0;var o=n(22),r=n(65),i=n(105);t.useSettings=function(e){var t=(0,o.useSelector)(e,i.selectSettings),n=(0,o.useDispatch)(e);return Object.assign({},t,{visible:t.view.visible,toggle:function(){return n((0,r.toggleSettings)())},update:function(e){return n((0,r.updateSettings)(e))}})}},684:function(e,t,n){"use strict";t.__esModule=!0,t.settingsMiddleware=void 0;var o=n(79),r=n(215),i=n(65),a=n(105);t.settingsMiddleware=function(e){var t=!1;return function(n){return function(c){var s,l=c.type,d=c.payload;if(t||(t=!0,o.storage.get("panel-settings").then((function(t){e.dispatch((0,i.loadSettings)(t))}))),l===i.updateSettings.type||l===i.loadSettings.type){var u=null==d?void 0:d.theme;u&&(0,r.setClientTheme)(u),n(c);var g=(0,a.selectSettings)(e.getState());return s=g.fontSize,document.documentElement.style.setProperty("font-size",s+"px"),document.body.style.setProperty("font-size",s+"px"),void o.storage.set("panel-settings",g)}return n(c)}}}},685:function(e,t,n){"use strict";t.__esModule=!0,t.settingsReducer=void 0;var o=n(65),r={version:1,fontSize:13,lineHeight:1.2,theme:"default",adminMusicVolume:.5,highlightText:"",highlightColor:"#ffdd44",view:{visible:!1,activeTab:n(216).SETTINGS_TABS[0].id}};t.settingsReducer=function(e,t){void 0===e&&(e=r);var n=t.type,i=t.payload;if(n===o.updateSettings.type)return Object.assign({},e,i);if(n===o.loadSettings.type)return(null==i?void 0:i.version)?(delete i.view,Object.assign({},e,i)):e;if(n===o.toggleSettings.type)return Object.assign({},e,{view:Object.assign({},e.view,{visible:!e.view.visible})});if(n===o.openChatSettings.type)return Object.assign({},e,{view:Object.assign({},e.view,{visible:!0,activeTab:"chatPage"})});if(n===o.changeSettingsTab.type){var a=i.tabId;return Object.assign({},e,{view:Object.assign({},e.view,{activeTab:a})})}return e}},686:function(e,t,n){"use strict";t.__esModule=!0,t.SettingsGeneral=t.SettingsPanel=void 0;var o=n(0),r=n(9),i=n(22),a=n(1),c=n(146),s=n(80),l=n(215),d=n(65),u=n(216),g=n(105);t.SettingsPanel=function(e,t){var n=(0,i.useSelector)(t,g.selectActiveTab),r=(0,i.useDispatch)(t);return(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Flex.Item,{mr:1,children:(0,o.createComponentVNode)(2,a.Section,{fitted:!0,fill:!0,minHeight:"8em",children:(0,o.createComponentVNode)(2,a.Tabs,{vertical:!0,children:u.SETTINGS_TABS.map((function(e){return(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:e.id===n,onClick:function(){return r((0,d.changeSettingsTab)({tabId:e.id}))},children:e.name},e.id)}))})})}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,basis:0,children:["general"===n&&(0,o.createComponentVNode)(2,p),"chatPage"===n&&(0,o.createComponentVNode)(2,c.ChatPageSettings)]})]})};var p=function(e,t){var n=(0,i.useSelector)(t,g.selectSettings),c=n.theme,u=n.fontSize,p=n.lineHeight,h=n.highlightText,f=n.highlightColor,m=(0,i.useDispatch)(t);return(0,o.createComponentVNode)(2,a.Section,{fill:!0,children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Theme",children:(0,o.createComponentVNode)(2,a.Dropdown,{selected:c,options:l.THEMES,onSelected:function(e){return m((0,d.updateSettings)({theme:e}))}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Font size",children:(0,o.createComponentVNode)(2,a.NumberInput,{width:"4em",step:1,stepPixelSize:10,minValue:8,maxValue:32,value:u,unit:"px",format:function(e){return(0,r.toFixed)(e)},onChange:function(e,t){return m((0,d.updateSettings)({fontSize:t}))}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Line height",children:(0,o.createComponentVNode)(2,a.NumberInput,{width:"4em",step:.01,stepPixelSize:2,minValue:.8,maxValue:5,value:p,format:function(e){return(0,r.toFixed)(e,2)},onDrag:function(e,t){return m((0,d.updateSettings)({lineHeight:t}))}})})]}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Flex,{mb:1,color:"label",align:"baseline",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,children:"Highlight words (comma separated):"}),(0,o.createComponentVNode)(2,a.Flex.Item,{shrink:0,children:[(0,o.createComponentVNode)(2,a.ColorBox,{mr:1,color:f}),(0,o.createComponentVNode)(2,a.Input,{width:"5em",monospace:!0,placeholder:"#ffffff",value:f,onInput:function(e,t){return m((0,d.updateSettings)({highlightColor:t}))}})]})]}),(0,o.createComponentVNode)(2,a.TextArea,{height:"3em",value:h,onChange:function(e,t){return m((0,d.updateSettings)({highlightText:t}))}})]}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"check",onClick:function(){return m((0,s.rebuildChat)())},children:"Apply now"}),(0,o.createComponentVNode)(2,a.Box,{inline:!0,fontSize:"0.9em",ml:1,color:"label",children:"Can freeze the chat for a while."})]}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.Button,{icon:"save",onClick:function(){return m((0,s.saveChatToDisk)())},children:"Save chat log"})]})};t.SettingsGeneral=p},687:function(e,t,n){"use strict";t.__esModule=!0,t.ChatPageSettings=void 0;var o=n(0),r=n(22),i=n(1),a=n(80),c=n(107),s=n(147);t.ChatPageSettings=function(e,t){var n=(0,r.useSelector)(t,s.selectCurrentChatPage),l=(0,r.useDispatch)(t);return(0,o.createComponentVNode)(2,i.Section,{fill:!0,children:[(0,o.createComponentVNode)(2,i.Flex,{mx:-.5,align:"center",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{mx:.5,grow:1,children:(0,o.createComponentVNode)(2,i.Input,{fluid:!0,value:n.name,onChange:function(e,t){return l((0,a.updateChatPage)({pageId:n.id,name:t}))}})}),(0,o.createComponentVNode)(2,i.Flex.Item,{mx:.5,children:(0,o.createComponentVNode)(2,i.Button,{icon:"times",color:"red",onClick:function(){return l((0,a.removeChatPage)({pageId:n.id}))},children:"Remove"})})]}),(0,o.createComponentVNode)(2,i.Divider),(0,o.createComponentVNode)(2,i.Section,{title:"Messages to display",level:2,children:[c.MESSAGE_TYPES.filter((function(e){return!e.important&&!e.admin})).map((function(e){return(0,o.createComponentVNode)(2,i.Button.Checkbox,{checked:n.acceptedTypes[e.type],onClick:function(){return l((0,a.toggleAcceptedType)({pageId:n.id,type:e.type}))},children:e.name},e.type)})),(0,o.createComponentVNode)(2,i.Collapsible,{mt:1,color:"transparent",title:"Admin stuff",children:c.MESSAGE_TYPES.filter((function(e){return!e.important&&e.admin})).map((function(e){return(0,o.createComponentVNode)(2,i.Button.Checkbox,{checked:n.acceptedTypes[e.type],onClick:function(){return l((0,a.toggleAcceptedType)({pageId:n.id,type:e.type}))},children:e.name},e.type)}))})]})]})}},688:function(e,t,n){"use strict";t.__esModule=!0,t.ChatPanel=void 0;var o=n(0),r=n(6),i=n(1),a=n(217);var c=function(e){var t,n;function c(){var t;return(t=e.call(this)||this).ref=(0,o.createRef)(),t.state={scrollTracking:!0},t.handleScrollTrackingChange=function(e){return t.setState({scrollTracking:e})},t}n=e,(t=c).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var s=c.prototype;return s.componentDidMount=function(){a.chatRenderer.mount(this.ref.current),a.chatRenderer.events.on("scrollTrackingChanged",this.handleScrollTrackingChange),this.componentDidUpdate()},s.componentWillUnmount=function(){a.chatRenderer.events.off("scrollTrackingChanged",this.handleScrollTrackingChange)},s.componentDidUpdate=function(e){requestAnimationFrame((function(){a.chatRenderer.ensureScrollTracking()})),(!e||(0,r.shallowDiffers)(this.props,e))&&a.chatRenderer.assignStyle({width:"100%","white-space":"pre-wrap","font-size":this.props.fontSize,"line-height":this.props.lineHeight})},s.render=function(){var e=this.state.scrollTracking;return(0,o.createFragment)([(0,o.createVNode)(1,"div","Chat",null,1,null,null,this.ref),!e&&(0,o.createComponentVNode)(2,i.Button,{className:"Chat__scrollButton",icon:"arrow-down",onClick:function(){return a.chatRenderer.scrollToBottom()},children:"Scroll to bottom"})],0)},c}(o.Component);t.ChatPanel=c},689:function(e,t,n){"use strict";t.__esModule=!0,t.linkifyNode=t.highlightNode=t.replaceInTextNode=void 0;var o=function(e,t){return function(n){for(var o,r,i=n.textContent,a=i.length,c=0,s=0;o=e.exec(i);){s+=1,r||(r=document.createDocumentFragment());var l=o[0],d=l.length,u=o.index;c0&&(0,o.createComponentVNode)(2,l,{value:e.unreadCount}),onClick:function(){return u((0,a.changeChatPage)({pageId:e.id}))},children:e.name},e.id)}))})}),(0,o.createComponentVNode)(2,i.Flex.Item,{ml:1,children:(0,o.createComponentVNode)(2,i.Button,{color:"transparent",icon:"plus",onClick:function(){u((0,a.addChatPage)()),u((0,s.openChatSettings)())}})})]})}},691:function(e,t,n){"use strict";t.__esModule=!0,t.chatMiddleware=void 0;var o=n(79),r=n(65),i=n(105),a=n(80),c=n(107),s=n(106),l=n(217),d=n(147);n(24);function u(e,t,n,o,r,i,a){try{var c=e[i](a),s=c.value}catch(l){return void n(l)}c.done?t(s):Promise.resolve(s).then(o,r)}function g(e){return function(){var t=this,n=arguments;return new Promise((function(o,r){var i=e.apply(t,n);function a(e){u(i,o,r,a,c,"next",e)}function c(e){u(i,o,r,a,c,"throw",e)}a(undefined)}))}}var p=function(){var e=g(regeneratorRuntime.mark((function t(e){var n,r,i;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:n=(0,d.selectChat)(e.getState()),r=Math.max(0,l.chatRenderer.messages.length-c.MAX_PERSISTED_MESSAGES),i=l.chatRenderer.messages.slice(r).map((function(e){return(0,s.serializeMessage)(e)})),o.storage.set("chat-state",n),o.storage.set("chat-messages",i);case 5:case"end":return t.stop()}}),t)})));return function(t){return e.apply(this,arguments)}}(),h=function(){var e=g(regeneratorRuntime.mark((function t(e){var n,r,i,c;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,Promise.all([o.storage.get("chat-state"),o.storage.get("chat-messages")]);case 2:if(n=t.sent,r=n[0],i=n[1],!(r&&r.version<=4)){t.next=8;break}return e.dispatch((0,a.loadChat)()),t.abrupt("return");case 8:i&&(c=[].concat(i,[(0,s.createMessage)({type:"internal/reconnected"})]),l.chatRenderer.processBatch(c,{prepend:!0})),e.dispatch((0,a.loadChat)(r));case 10:case"end":return t.stop()}}),t)})));return function(t){return e.apply(this,arguments)}}();t.chatMiddleware=function(e){var t=!1,n=!1;return l.chatRenderer.events.on("batchProcessed",(function(t){n&&e.dispatch((0,a.updateMessageCount)(t))})),l.chatRenderer.events.on("scrollTrackingChanged",(function(t){e.dispatch((0,a.changeScrollTracking)(t))})),setInterval((function(){return p(e)}),c.MESSAGE_SAVE_INTERVAL),function(o){return function(c){var s=c.type,u=c.payload;if(t||(t=!0,h(e)),"chat/message"!==s){if(s===a.loadChat.type){o(c);var g=(0,d.selectCurrentChatPage)(e.getState());return l.chatRenderer.changePage(g),l.chatRenderer.onStateLoaded(),void(n=!0)}if(s!==a.changeChatPage.type&&s!==a.addChatPage.type&&s!==a.removeChatPage.type&&s!==a.toggleAcceptedType.type){if(s===a.rebuildChat.type)return l.chatRenderer.rebuildChat(),o(c);if(s!==r.updateSettings.type&&s!==r.loadSettings.type){if("roundrestart"===s)return p(e),o(c);if(s!==a.saveChatToDisk.type)return o(c);l.chatRenderer.saveToDisk()}else{o(c);var f=(0,i.selectSettings)(e.getState());l.chatRenderer.setHighlight(f.highlightText,f.highlightColor)}}else{o(c);var m=(0,d.selectCurrentChatPage)(e.getState());l.chatRenderer.changePage(m)}}else{var v=Array.isArray(u)?u:[u];l.chatRenderer.processBatch(v)}}}}},692:function(e,t,n){"use strict";t.__esModule=!0,t.chatReducer=t.initialState=void 0;var o,r=n(80),i=n(106);function a(e,t){var n;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return c(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return c(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var o=0;return function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}return(n=e[Symbol.iterator]()).next.bind(n)}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n0&&(_[A.id]=Object.assign({},A,{unreadCount:A.unreadCount+M}))}return Object.assign({},e,{pageById:_})}if(o===r.addChatPage.type)return Object.assign({},e,{currentPageId:c.id,pages:[].concat(e.pages,[c.id]),pageById:Object.assign({},e.pageById,(n={},n[c.id]=c,n))});if(o===r.changeChatPage.type){var I,P=c.pageId,x=Object.assign({},e.pageById[P],{unreadCount:0});return Object.assign({},e,{currentPageId:P,pageById:Object.assign({},e.pageById,(I={},I[P]=x,I))})}if(o===r.updateChatPage.type){var k,R=c.pageId,O=function(e,t){if(null==e)return{};var n,o,r={},i=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}(c,["pageId"]),V=Object.assign({},e.pageById[R],O);return Object.assign({},e,{pageById:Object.assign({},e.pageById,(k={},k[R]=V,k))})}if(o===r.toggleAcceptedType.type){var G,B=c.pageId,L=c.type,D=Object.assign({},e.pageById[B]);return D.acceptedTypes=Object.assign({},D.acceptedTypes),D.acceptedTypes[L]=!D.acceptedTypes[L],Object.assign({},e,{pageById:Object.assign({},e.pageById,(G={},G[B]=D,G))})}if(o===r.removeChatPage.type){var F=c.pageId,j=Object.assign({},e,{pages:[].concat(e.pages),pageById:Object.assign({},e.pageById)});return delete j.pageById[F],j.pages=j.pages.filter((function(e){return e!==F})),0===j.pages.length&&(j.pages.push(s.id),j.pageById[s.id]=s,j.currentPageId=s.id),j.currentPageId&&j.currentPageId!==F||(j.currentPageId=j.pages[0]),j}return e}},693:function(e,t,n){"use strict";t.__esModule=!0,t.audioReducer=void 0;var o={visible:!1,playing:!1,track:null};t.audioReducer=function(e,t){void 0===e&&(e=o);var n=t.type,r=t.payload;return"audio/playing"===n?Object.assign({},e,{visible:!0,playing:!0}):"audio/stopped"===n?Object.assign({},e,{visible:!1,playing:!1}):"audio/playMusic"===n?Object.assign({},e,{meta:r}):"audio/stopMusic"===n?Object.assign({},e,{visible:!1,playing:!1,meta:null}):"audio/toggle"===n?Object.assign({},e,{visible:!e.visible}):e}},694:function(e,t,n){"use strict";t.__esModule=!0,t.useGame=void 0;var o=n(22),r=n(219);t.useGame=function(e){return(0,o.useSelector)(e,r.selectGame)}},695:function(e,t,n){"use strict";t.__esModule=!0,t.gameMiddleware=void 0;var o=n(148),r=n(220),i=n(219),a=n(696),c=function(e){return Object.assign({},e,{meta:Object.assign({},e.meta,{now:Date.now()})})};t.gameMiddleware=function(e){var t;return setInterval((function(){var n=e.getState();if(n){var o=(0,i.selectGame)(n),s=t&&Date.now()>=t+a.CONNECTION_LOST_AFTER;!o.connectionLostAt&&s&&e.dispatch(c((0,r.connectionLost)())),o.connectionLostAt&&!s&&e.dispatch(c((0,r.connectionRestored)()))}}),1e3),function(e){return function(n){var i=n.type,a=(n.payload,n.meta);return i===o.pingSuccess.type?(t=a.now,e(n)):i===r.roundRestarted.type?e(c(n)):e(n)}}}},696:function(e,t,n){"use strict";t.__esModule=!0,t.CONNECTION_LOST_AFTER=void 0;t.CONNECTION_LOST_AFTER=15e3},697:function(e,t,n){"use strict";t.__esModule=!0,t.gameReducer=void 0;var o=n(220),r={roundId:null,roundTime:null,roundRestartedAt:null,connectionLostAt:null};t.gameReducer=function(e,t){void 0===e&&(e=r);var n=t.type,i=(t.payload,t.meta);return"roundrestart"===n?Object.assign({},e,{roundRestartedAt:i.now}):n===o.connectionLost.type?Object.assign({},e,{connectionLostAt:i.now}):n===o.connectionRestored.type?Object.assign({},e,{connectionLostAt:null}):e}},698:function(e,t,n){"use strict";(function(e){t.__esModule=!0,t.setupPanelFocusHacks=void 0;var o=n(103),r=n(57),i=n(190),a=function(){return e((function(){return(0,i.focusMap)()}))};t.setupPanelFocusHacks=function(){var e=!1,t=null;window.addEventListener("focusin",(function(t){e=(0,r.canStealFocus)(t.target)})),window.addEventListener("mousedown",(function(e){t=[e.screenX,e.screenY]})),window.addEventListener("mouseup",(function(n){if(t){var r=[n.screenX,n.screenY];(0,o.vecLength)((0,o.vecSubtract)(r,t))>=10&&(e=!0)}e||a()})),r.globalEvents.on("keydown",(function(e){e.isModifierKey()||a()}))}}).call(this,n(102).setImmediate)},699:function(e,t,n){"use strict";t.__esModule=!0,t.pingMiddleware=void 0;var o=n(2),r=n(148),i=n(222);t.pingMiddleware=function(e){var t=!1,n=0,a=[],c=function(){for(var t=0;ti.PING_TIMEOUT&&(a[t]=null,e.dispatch((0,r.pingFail)()))}var s={index:n,sentAt:Date.now()};a[n]=s,(0,o.sendMessage)({type:"ping",payload:{index:n}}),n=(n+1)%i.PING_QUEUE_SIZE};return function(e){return function(n){var o=n.type,s=n.payload;if(t||(t=!0,setInterval(c,i.PING_INTERVAL),c()),"pingReply"===o){var l=s.index,d=a[l];if(!d)return;return a[l]=null,e((0,r.pingSuccess)(d))}return e(n)}}}},700:function(e,t,n){"use strict";t.__esModule=!0,t.PingIndicator=void 0;var o=n(0),r=n(701),i=n(9),a=n(22),c=n(1),s=n(702);t.PingIndicator=function(e,t){var n=(0,a.useSelector)(t,s.selectPing),l=r.Color.lookup(n.networkQuality,[new r.Color(220,40,40),new r.Color(220,200,40),new r.Color(60,220,40)]),d=n.roundtrip?(0,i.toFixed)(n.roundtrip):"--";return(0,o.createVNode)(1,"div","Ping",[(0,o.createComponentVNode)(2,c.Box,{className:"Ping__indicator",backgroundColor:l}),d],0)}},701:function(e,t,n){"use strict";t.__esModule=!0,t.Color=void 0;var o=function(){function e(e,t,n,o){void 0===e&&(e=0),void 0===t&&(t=0),void 0===n&&(n=0),void 0===o&&(o=1),this.r=e,this.g=t,this.b=n,this.a=o}return e.prototype.toString=function(){return"rgba("+(0|this.r)+", "+(0|this.g)+", "+(0|this.b)+", "+(0|this.a)+")"},e}();t.Color=o,o.fromHex=function(e){return new o(parseInt(e.substr(1,2),16),parseInt(e.substr(3,2),16),parseInt(e.substr(5,2),16))},o.lerp=function(e,t,n){return new o((t.r-e.r)*n+e.r,(t.g-e.g)*n+e.g,(t.b-e.b)*n+e.b,(t.a-e.a)*n+e.a)},o.lookup=function(e,t){void 0===t&&(t=[]);var n=t.length;if(n<2)throw new Error("Needs at least two colors!");var r=e*(n-1);if(e<1e-4)return t[0];if(e>=.9999)return t[n-1];var i=r%1,a=0|r;return o.lerp(t[a],t[a+1],i)}},702:function(e,t,n){"use strict";t.__esModule=!0,t.selectPing=void 0;t.selectPing=function(e){return e.ping}},703:function(e,t,n){"use strict";t.__esModule=!0,t.pingReducer=void 0;var o=n(9),r=n(148),i=n(222);t.pingReducer=function(e,t){void 0===e&&(e={});var n=t.type,a=t.payload;if(n===r.pingSuccess.type){var c=a.roundtrip,s=e.roundtripAvg||c,l=Math.round(.4*s+.6*c);return{roundtrip:c,roundtripAvg:l,failCount:0,networkQuality:1-(0,o.scale)(l,i.PING_ROUNDTRIP_BEST,i.PING_ROUNDTRIP_WORST)}}if(n===r.pingFail.type){var d=e.failCount,u=void 0===d?0:d,g=(0,o.clamp01)(e.networkQuality-u/i.PING_MAX_FAILS),p=Object.assign({},e,{failCount:u+1,networkQuality:g});return u>i.PING_MAX_FAILS&&(p.roundtrip=undefined,p.roundtripAvg=undefined),p}return e}},704:function(e,t,n){"use strict";t.__esModule=!0,t.telemetryMiddleware=void 0;var o=n(2),r=n(79);function i(e,t,n,o,r,i,a){try{var c=e[i](a),s=c.value}catch(l){return void n(l)}c.done?t(s):Promise.resolve(s).then(o,r)}var a=(0,n(24).createLogger)("telemetry");t.telemetryMiddleware=function(e){var t,n;return function(c){return function(s){var l,d=s.type,u=s.payload;if("telemetry/request"!==d)return"backend/update"===d?(c(s),void(l=regeneratorRuntime.mark((function h(){var o,i,c,s;return regeneratorRuntime.wrap((function(l){for(;;)switch(l.prev=l.next){case 0:if(i=null==u||null==(o=u.config)?void 0:o.client){l.next=4;break}return a.error("backend/update payload is missing client data!"),l.abrupt("return");case 4:if(t){l.next=13;break}return l.next=7,r.storage.get("telemetry");case 7:if(l.t0=l.sent,l.t0){l.next=10;break}l.t0={};case 10:(t=l.t0).connections||(t.connections=[]),a.debug("retrieved telemetry from storage",t);case 13:c=!1,t.connections.find((function(e){return n=i,(t=e).ckey===n.ckey&&t.address===n.address&&t.computer_id===n.computer_id;var t,n}))||(c=!0,t.connections.unshift(i),t.connections.length>10&&t.connections.pop()),c&&(a.debug("saving telemetry to storage",t),r.storage.set("telemetry",t)),n&&(s=n,n=null,e.dispatch({type:"telemetry/request",payload:s}));case 18:case"end":return l.stop()}}),h)})),function(){var e=this,t=arguments;return new Promise((function(n,o){var r=l.apply(e,t);function a(e){i(r,n,o,a,c,"next",e)}function c(e){i(r,n,o,a,c,"throw",e)}a(undefined)}))})()):c(s);if(!t)return a.debug("deferred"),void(n=u);a.debug("sending");var g=(null==u?void 0:u.limits)||{},p=t.connections.slice(0,g.connections);(0,o.sendMessage)({type:"telemetry",payload:{connections:p}})}}}},705:function(e,t,n){"use strict";t.__esModule=!0,t.Panel=void 0;var o=n(0),r=n(1),i=n(3),a=n(213),c=n(146),s=n(218),l=n(706),d=n(221),u=n(145);t.Panel=function(e,t){if(Byond.IS_LTE_IE10)return(0,o.createComponentVNode)(2,g);var n=(0,a.useAudio)(t),p=(0,u.useSettings)(t),h=(0,s.useGame)(t);return(0,o.createComponentVNode)(2,i.Pane,{theme:"default"===p.theme?"light":p.theme,children:(0,o.createComponentVNode)(2,r.Flex,{direction:"column",height:"100%",children:[(0,o.createComponentVNode)(2,r.Flex.Item,{children:(0,o.createComponentVNode)(2,r.Section,{fitted:!0,children:(0,o.createComponentVNode)(2,r.Flex,{mx:.5,align:"center",children:[(0,o.createComponentVNode)(2,r.Flex.Item,{mx:.5,grow:1,overflowX:"auto",children:(0,o.createComponentVNode)(2,c.ChatTabs)}),(0,o.createComponentVNode)(2,r.Flex.Item,{mx:.5,children:(0,o.createComponentVNode)(2,d.PingIndicator)}),(0,o.createComponentVNode)(2,r.Flex.Item,{mx:.5,children:(0,o.createComponentVNode)(2,r.Button,{color:"grey",selected:n.visible,icon:"music",tooltip:"Music player",tooltipPosition:"bottom-left",onClick:function(){return n.toggle()}})}),(0,o.createComponentVNode)(2,r.Flex.Item,{mx:.5,children:(0,o.createComponentVNode)(2,r.Button,{icon:p.visible?"times":"cog",selected:p.visible,tooltip:p.visible?"Close settings":"Open settings",tooltipPosition:"bottom-left",onClick:function(){return p.toggle()}})})]})})}),n.visible&&(0,o.createComponentVNode)(2,r.Flex.Item,{mt:1,children:(0,o.createComponentVNode)(2,r.Section,{children:(0,o.createComponentVNode)(2,a.NowPlayingWidget)})}),p.visible&&(0,o.createComponentVNode)(2,r.Flex.Item,{mt:1,children:(0,o.createComponentVNode)(2,u.SettingsPanel)}),(0,o.createComponentVNode)(2,r.Flex.Item,{mt:1,grow:1,children:(0,o.createComponentVNode)(2,r.Section,{fill:!0,fitted:!0,position:"relative",children:[(0,o.createComponentVNode)(2,i.Pane.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,c.ChatPanel,{lineHeight:p.lineHeight})}),(0,o.createComponentVNode)(2,l.Notifications,{children:[h.connectionLostAt&&(0,o.createComponentVNode)(2,l.Notifications.Item,{rightSlot:(0,o.createComponentVNode)(2,r.Button,{color:"white",onClick:function(){return Byond.command(".reconnect")},children:"Reconnect"}),children:"You are either AFK, experiencing lag or the connection has closed."}),h.roundRestartedAt&&(0,o.createComponentVNode)(2,l.Notifications.Item,{children:"The connection has been closed because the server is restarting. Please wait while you automatically reconnect."})]})]})})]})})};var g=function(e,t){var n=(0,u.useSettings)(t);return(0,o.createComponentVNode)(2,i.Pane,{theme:"default"===n.theme?"light":n.theme,children:(0,o.createComponentVNode)(2,i.Pane.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,r.Button,{style:{position:"fixed",top:"1em",right:"2em","z-index":1e3},selected:n.visible,onClick:function(){return n.toggle()},children:"Settings"}),n.visible&&(0,o.createComponentVNode)(2,r.Flex.Item,{mt:1,children:(0,o.createComponentVNode)(2,u.SettingsPanel)})||(0,o.createComponentVNode)(2,c.ChatPanel,{lineHeight:n.lineHeight})]})})}},706:function(e,t,n){"use strict";t.__esModule=!0,t.Notifications=void 0;var o=n(0),r=n(1),i=function(e){var t=e.children;return(0,o.createVNode)(1,"div","Notifications",t,0)};t.Notifications=i;i.Item=function(e){var t=e.rightSlot,n=e.children;return(0,o.createComponentVNode)(2,r.Flex,{align:"center",className:"Notification",children:[(0,o.createComponentVNode)(2,r.Flex.Item,{className:"Notification__content",grow:1,children:n}),t&&(0,o.createComponentVNode)(2,r.Flex.Item,{className:"Notification__rightSlot",children:t})]})}},80:function(e,t,n){"use strict";t.__esModule=!0,t.saveChatToDisk=t.changeScrollTracking=t.removeChatPage=t.toggleAcceptedType=t.updateChatPage=t.changeChatPage=t.addChatPage=t.updateMessageCount=t.rebuildChat=t.loadChat=void 0;var o=n(22),r=n(106),i=(0,o.createAction)("chat/load");t.loadChat=i;var a=(0,o.createAction)("chat/rebuild");t.rebuildChat=a;var c=(0,o.createAction)("chat/updateMessageCount");t.updateMessageCount=c;var s=(0,o.createAction)("chat/addPage",(function(){return{payload:(0,r.createPage)()}}));t.addChatPage=s;var l=(0,o.createAction)("chat/changePage");t.changeChatPage=l;var d=(0,o.createAction)("chat/updatePage");t.updateChatPage=d;var u=(0,o.createAction)("chat/toggleAcceptedType");t.toggleAcceptedType=u;var g=(0,o.createAction)("chat/removePage");t.removeChatPage=g;var p=(0,o.createAction)("chat/changeScrollTracking");t.changeScrollTracking=p;var h=(0,o.createAction)("chat/saveToDisk");t.saveChatToDisk=h}}); \ No newline at end of file diff --git a/tgui/public/tgui.html b/tgui/public/tgui.html new file mode 100644 index 00000000000..d4516855ee9 --- /dev/null +++ b/tgui/public/tgui.html @@ -0,0 +1,327 @@ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + diff --git a/vorestation.dme b/vorestation.dme index e3a5d38ec6e..0f0e63ea2a9 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -79,6 +79,7 @@ #include "code\__DEFINES\targeting.dm" #include "code\__DEFINES\tgs.config.dm" #include "code\__DEFINES\tgs.dm" +#include "code\__DEFINES\tgui.dm" #include "code\__DEFINES\time.dm" #include "code\__DEFINES\traits.dm" #include "code\__DEFINES\turfs.dm" @@ -127,6 +128,7 @@ #include "code\__HELPERS\names.dm" #include "code\__HELPERS\roundend.dm" #include "code\__HELPERS\sanitize_values.dm" +#include "code\__HELPERS\shell.dm" #include "code\__HELPERS\storage.dm" #include "code\__HELPERS\text.dm" #include "code\__HELPERS\text_vr.dm" @@ -231,6 +233,7 @@ #include "code\controllers\subsystems\atoms.dm" #include "code\controllers\subsystems\bellies_vr.dm" #include "code\controllers\subsystems\character_setup.dm" +#include "code\controllers\subsystems\chat.dm" #include "code\controllers\subsystems\circuits.dm" #include "code\controllers\subsystems\dcs.dm" #include "code\controllers\subsystems\emergency_shuttle.dm" @@ -251,7 +254,6 @@ #include "code\controllers\subsystems\openspace.dm" #include "code\controllers\subsystems\overlays.dm" #include "code\controllers\subsystems\persist_vr.dm" -#include "code\controllers\subsystems\ping.dm" #include "code\controllers\subsystems\planets.dm" #include "code\controllers\subsystems\radiation.dm" #include "code\controllers\subsystems\server_maint.dm" @@ -261,6 +263,7 @@ #include "code\controllers\subsystems\spacedrift.dm" #include "code\controllers\subsystems\sun.dm" #include "code\controllers\subsystems\supply.dm" +#include "code\controllers\subsystems\tgui.dm" #include "code\controllers\subsystems\ticker.dm" #include "code\controllers\subsystems\time_track.dm" #include "code\controllers\subsystems\timer.dm" @@ -2040,8 +2043,6 @@ #include "code\modules\games\tarot.dm" #include "code\modules\genetics\side_effects.dm" #include "code\modules\ghosttrap\trap.dm" -#include "code\modules\goonchat\browserOutput.dm" -#include "code\modules\goonchat\jsErrorHandler.dm" #include "code\modules\holodeck\HolodeckControl.dm" #include "code\modules\holodeck\HolodeckObjects.dm" #include "code\modules\holodeck\HolodeckPrograms.dm" @@ -3279,7 +3280,31 @@ #include "code\modules\telesci\telepad.dm" #include "code\modules\telesci\telesci_computer.dm" #include "code\modules\tension\tension.dm" +#include "code\modules\tgchat\message.dm" +#include "code\modules\tgchat\to_chat.dm" #include "code\modules\tgs\includes.dm" +#include "code\modules\tgui\external.dm" +#include "code\modules\tgui\states.dm" +#include "code\modules\tgui\tgui.dm" +#include "code\modules\tgui\tgui_window.dm" +#include "code\modules\tgui\states\admin.dm" +#include "code\modules\tgui\states\always.dm" +#include "code\modules\tgui\states\conscious.dm" +#include "code\modules\tgui\states\contained.dm" +#include "code\modules\tgui\states\debug.dm" +#include "code\modules\tgui\states\deep_inventory.dm" +#include "code\modules\tgui\states\default.dm" +#include "code\modules\tgui\states\human_adjacent.dm" +#include "code\modules\tgui\states\inventory.dm" +#include "code\modules\tgui\states\notcontained.dm" +#include "code\modules\tgui\states\observer.dm" +#include "code\modules\tgui\states\physical.dm" +#include "code\modules\tgui\states\self.dm" +#include "code\modules\tgui\states\zlevel.dm" +#include "code\modules\tgui_panel\audio.dm" +#include "code\modules\tgui_panel\external.dm" +#include "code\modules\tgui_panel\telemetry.dm" +#include "code\modules\tgui_panel\tgui_panel.dm" #include "code\modules\tooltip\tooltip.dm" #include "code\modules\turbolift\_turbolift.dm" #include "code\modules\turbolift\turbolift.dm"