Files
vgstation13/code/modules/asset_cache
ShiftyRail 875eca8b71 516 compatibility PR 2: the revenge of Node.js (#37501)
* Part 1: fix tgui

* Fix overdark layering

* Vector code rework

* misc. tgui things

* final DM side fixes

* TGUI try to fix #1

* Nuclear option. Bring all TGUI files. Will begin UNTGification in later commits.

* Untgify: callback

* untgify : config flags & config datums

* Fixes GLOBAL_VAR_INIT

* Purge HASTRAIT

* .dme cleanup

* file by file: status_alert.dm

* file by file : preference datums + remove unused content

* file by file : tgui_input/text.dm

* file by file : fixes asset_cache_client.dm

* file by file : tgui_panel / external.dm

* file by file : tgui / external.dm

* file by file : tgui / states.dm

* file by file : subsystems/assets.dm [unused return type]

* file by file : subsystems/tgui.dm [tg-macro for process()]

* file by file : asset_cache_item.dm [minor proc call fix]

* file by file : fixes a mistype for datum/asset_cache_item

* file by file : removes bugs and unimplemented features in asset_list.dm

* multifile : some more work on asset manager

* File deleted : spirtesheet tg_assets. Don't need them

* Remove unused TG content, fix asset_list.dm

* Fixes a few issues with wrong type paths.

* remove tgui_panel : this is for tgchat/stat2, which we don't use

* fix thing

* misc changes to tgui.dm. Defining QDELETED macro

* final TGui fix

* TGUI file convert : camera console and religion screen

* Works

* GPS fixed + fontAwesome fixed

* Mecha console control

* Fixes blurry icons

* fixes iconbase64 regression

* Misc bug/runtimes fixes

* Fixes runtime funtime

* Add merch computer TGUI

* Fixes TGUI ticking interfaces + MSGS

* PCMC

* Power Monitor working

* Power monitor

* Bugfixes + robot console

* Fixes mecha messages

* Spess dot TV

* TEG

* Syndicate Uplink

* Bump defines and connection warning

* fix?

* Fucking highscores

* Fixes mistakes

---------

Co-authored-by: west3436 <66280799+west3436@users.noreply.github.com>
2025-05-06 02:41:33 -05:00
..

Asset cache system

Framework for managing browser assets (javascript,css,images,etc)

This manages getting the asset to the client without doing unneeded re-sends, as well as utilizing any configured cdns.

There are two frameworks for using this system:

Asset datum:

Make a datum in asset_list_items.dm with your browser assets for your thing.

Checkout asset_list.dm for the helper subclasses

The simple subclass will most likely be of use for most cases.

Call get_tg_asset_datum() with the type of the datum you created to get your asset cache datum

Call .send(client|usr) on that datum to send the asset to the client. Depending on the asset transport this may or may not block.

Call .get_url_mappings() to get an associated list with the urls your assets can be found at.

Manual backend:

See the documentation for /datum/asset_transport for the backend api the asset datums utilize.

The global variable SSassets.transport contains the currently configured transport.

Notes:

Because byond browse() calls use non-blocking queues, if your code uses output() (which bypasses all of these queues) to invoke javascript functions you will need to first have the javascript announce to the server it has loaded before trying to invoke js functions.

To make your code work with any CDNs configured by the server, you must make sure assets are referenced from the url returned by get_url_mappings() or by asset_transport's get_asset_url(). (TGUI also has helpers for this.) If this can not be easily done, you can bypass the cdn using legacy assets, see the simple asset datum for details.

CSS files that use url() can be made to use the CDN without needing to rewrite all url() calls in code by using the namespaced helper datum. See the documentation for /datum/tg_asset/simple/namespaced for details.