mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-20 11:40:07 +01:00
## About The Pull Request **Upgrades:** - Yarn 3.0 - TypeScript 4.3 - Sass 1.37 - Required some refactoring of `/` into `math.div()` in CSS **Dependency removals:** - Removed ESM package, see: https://github.com/standard-things/esm/pull/902 I initially thought it was impossible to stop relying on this package, but fortunately, ES module support in Node 12+ now comes standard and I only had to convert the very few external module imports to `require()` (because Yarn PnP). I also moved `logging.js` directly into `tgui-dev-server` package, because that's where it is used. One less internal dependency. **Sidegrades:** - Removed creation of a common tgui chunk, because in practice it creates unnecessary complexity (devs sometimes get a white screen due to this chunk being invalid) and doesn't really save that much data on CDN, and **definitely** doesn't make tgui load faster. I think that is all. I tested it a bit and everything seemingly works.
100 lines
2.4 KiB
Plaintext
100 lines
2.4 KiB
Plaintext
/*!
|
|
* 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)
|
|
set waitfor = FALSE
|
|
// Minimal sleep to defer initialization to after client constructor
|
|
sleep(1)
|
|
initialized_at = world.time
|
|
// Perform a clean initialization
|
|
window.initialize(inline_assets = list(
|
|
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/simple/namespaced/tgfont))
|
|
window.send_asset(get_asset_datum(/datum/asset/spritesheet/chat))
|
|
// Other setup
|
|
request_telemetry()
|
|
addtimer(CALLBACK(src, .proc/on_initialize_timed_out), 5 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, "<span class=\"userdanger\">Failed to load fancy chat, click <a href='?src=[REF(src)];reload_tguipanel=1'>HERE</a> to attempt to reload it.</span>")
|
|
|
|
/**
|
|
* 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")
|