Files
Yogstation/tgui/README.md
TheGamerdk ca57f72a78 jamie stinks (#16349)
* Modernizes TGUI (#4219)

* Ports the first two PRs. CBT works local

* tchussi oops

* linttobuild

* Update Dockerfile for CBT (#56175)

Follow-up to fix the failing Docker CI on master.

- Reorganize the entire Dockerfile to be more readable
- Inline the tgstation/byond Dockerfile into our own, so we can change the base distro at will
- Also allows us to trash the dependencies.sh<->Dockerfile hack
- Use 32-bit libs on a 64-bit distro so that we can download and run recent 64-bit Node binaries
- Call tools/build/build rather than DreamMaker directly

* TGUI 43 plus hotfix 1

* https://github.com/tgstation/tgstation/pull/58701

* https://github.com/tgstation/tgstation/pull/56223

* https://github.com/tgstation/tgstation/pull/56229

* https://github.com/tgstation/tgstation/pull/56713

* https://github.com/tgstation/tgstation/pull/56797

* https://github.com/tgstation/tgstation/pull/57081/

* https://github.com/tgstation/tgstation/pull/57154

* https://github.com/tgstation/tgstation/pull/57251

* https://github.com/tgstation/tgstation/pull/56269

* https://github.com/tgstation/tgstation/pull/57277

* https://github.com/tgstation/tgstation/pull/57287

* https://github.com/tgstation/tgstation/pull/57326

* QF

* GimmeHopeUpdateExtra_Pr_Labels

* Flush queue in preloading part of tgui_panel (#57432)

* Flush queue in preloading part of tgui_panel

* Update tgui_panel.dm

* Compiles

* https://github.com/tgstation/tgstation/pull/57461

* tgui: Upgrade to Yarn 2.4.1 and TypeScript 4.2 (#57465)

* Fix tgui reloading (#57499)

* Add note about rust-g for building on Linux (#57622)

This PR adds a minor note about needing to compile rust-g to Linux building instructions. I'm not sure if this is the appropriate place for it, but I don't see a better place to put it.

* Fixes build script failing properly on windows. (#57623)

* Adds easy to extend custom svg font. (#57717)

Just throw in svgs into tgui/packages/tgfont/icons directory and you can use them in tgui with tg- prefix.

Co-authored-by: Style Mistake <stylemistake@gmail.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>

* Typescript fixups. (#57746)

* Improve tgui routing to allow interface subdirectories (#57825)

* Improve tgui routing to allow interface subdirectories

* Reverse order of interface file resolution, to be consistent with common expectation (top-level .tsx, top-level .js, directory .tsx, directory.js) and the way Webpack checks

* Fixes TGS compiles on windows. (#57834)

Batch quotes strike again.

* tgui: ESLint and VSCode settings improvements (#57905)

    Added column 80 rulers to all javascript and scss files.
    Added a "prettier" config to have sensible defaults for those who prefer to use it.
    Added RadarJS (fork of SonarQube's SonarJS). Launchable only via bin/tgui --lint-harder for now.
    Disabled ESLint rule for parens around arrow function arguments, because in TypeScript they're pretty much always required, and I don't want to replace it throughout the codebase.
    Removed unused javascript extensions from tooling (jsx, mjs).

* https://github.com/tgstation/tgstation/pull/57931

* https://github.com/tgstation/tgstation/pull/58061

* https://github.com/tgstation/tgstation/pull/58081

* https://github.com/tgstation/tgstation/pull/58212

* https://github.com/tgstation/tgstation/pull/58215

* https://github.com/tgstation/tgstation/pull/58219

* Add "Except DM" build mode to build.js (#58245)

* https://github.com/tgstation/tgstation/pull/58484

* FixBaconFabandPodLauncher

* haharunlintmanuallyfirstkids

* One last fab change then its perf

* f5willwork

* This May Do it

* prune

* Fix Docker build failing on a clean checkout (#56190)

Follow-up to #56175 which turned out to be accidentally relying on Node already being downloaded.

* Huh? Rebuild you better be a fluke

* getinthere

* Syncretize

* Revert "Syncretize"

This reverts commit 41749b68868d2af1b82de9ba6de39cf8052dd1ee.

* zzzz

* quick path change

* another quick

* Correct Dockerfile, bloats it with GCC lol.

* small

* back2oldfile I HATE DOCKER I HATE EXTOOLS

* firstthingnotdonelol

* yuabzn

* v

* reverttoclassic

* Difffffffffff

* prec1s

* ccc

* ok

* bitte

* jesus im dum

* z

* Nuke Window resizable and improve drag code (#56727)

* comp

Co-authored-by: Tad Hardesty <tad@platymuus.com>
Co-authored-by: Aleksej Komarov <stylemistake@gmail.com>
Co-authored-by: Cyprex <35031555+Cyprex@users.noreply.github.com>
Co-authored-by: AnturK <AnturK@users.noreply.github.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
Co-authored-by: Mordent <62817778+mordent-goonstation@users.noreply.github.com>
Co-authored-by: Jonathan Rubenstein <jrubcop@gmail.com>

* thanks yarn!

* Update Panel.js

* compiles

* restores exosuit

* chmod

* Update travis_config.txt

* honk

* honk2

* Update turdis.yml

* Update ExosuitFabricator.js

* Revert "Update turdis.yml"

This reverts commit 7517df56e5.

* Revert "Update ExosuitFabricator.js"

This reverts commit ac31fa4543.

* wtf is this

* lol

* Update tgui.dm

Co-authored-by: Sinestia <40812746+Sinestia@users.noreply.github.com>
Co-authored-by: Tad Hardesty <tad@platymuus.com>
Co-authored-by: Aleksej Komarov <stylemistake@gmail.com>
Co-authored-by: Cyprex <35031555+Cyprex@users.noreply.github.com>
Co-authored-by: AnturK <AnturK@users.noreply.github.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
Co-authored-by: Mordent <62817778+mordent-goonstation@users.noreply.github.com>
Co-authored-by: Jonathan Rubenstein <jrubcop@gmail.com>
Co-authored-by: Jamie D <993128+JamieD1@users.noreply.github.com>
2023-01-02 14:03:15 +00:00

7.9 KiB
Raw Blame History

tgui

Introduction

tgui is a robust user interface framework of /tg/station.

tgui is very different from most UIs you will encounter in BYOND programming. It is heavily reliant on Javascript and web technologies as opposed to DM. If you are familiar with NanoUI (a library which can be found on almost every other SS13 codebase), tgui should be fairly easy to pick up.

Learn tgui

People come to tgui from different backgrounds and with different learning styles. Whether you prefer a more theoretical or a practical approach, we hope youll find this section helpful.

Practical Tutorial

If you are completely new to frontend and prefer to learn by doing, start with our practical tutorial.

Guides

This project uses Inferno - a very fast UI rendering engine with a similar API to React. Take your time to read these guides:

If you were already familiar with an older, Ractive-based tgui, and want to translate concepts between old and new tgui, read this interface conversion guide.

Pre-requisites

You will need these programs to start developing in tgui:

DO NOT install Chocolatey if Node installer asks you to!

Usage

For Git Bash, MSys2, WSL, Linux or macOS users:

Change your directory to tgui.

Run bin/tgui --install-git-hooks to install merge drivers which will assist you in conflict resolution when rebasing your branches. Only has to be done once.

Run bin/tgui with any of the options listed below.

For Windows CMD or PowerShell users:

If you haven't opened the console already, you can do that by holding Shift and right clicking on the tgui folder, then pressing either Open command window here or Open PowerShell window here.

Run .\bin\tgui.bat with any of the options listed below.

If using PowerShell, you will receive errors if trying to run .\bin\tgui.ps1, because default Windows policy does not allow direct execution of PS1 scripts. Run .\bin\tgui.bat instead.

Available commands:

  • bin/tgui - Build the project in production mode.
  • bin/tgui --dev - Launch a development server.
    • tgui development server provides you with incremental compilation, hot module replacement and logging facilities in all running instances of tgui. In short, this means that you will instantly see changes in the game as you code it. Very useful, highly recommended.
    • In order to use it, you should start the game server first, connect to it and wait until the world has been properly loaded and you are no longer in the lobby. Start tgui dev server, and once it has finished building, press F5 on any tgui window. You'll know that it's hooked correctly if you see a green bug icon in titlebar and data gets dumped to the console.
  • bin/tgui --dev --reload - Reload byond cache once.
  • bin/tgui --dev --debug - Run server with debug logging enabled.
  • bin/tgui --dev --no-hot - Disable hot module replacement (helps when doing development on IE8).
  • bin/tgui --lint - Show problems with the code.
  • bin/tgui --test - Run tests.
  • bin/tgui --fix - Auto-fix problems with the code.
  • bin/tgui --analyze - Run a bundle analyzer.
  • bin/tgui --clean - Clean up project repo.
  • bin/tgui [webpack options] - Build the project with custom webpack options.

For virgins:

You can double-click these batch files to achieve the same thing:

  • bin\tgui.bat - Build the project in production mode.
  • bin\tgui-dev-server.bat - Launch a development server.

Remember to always run a full build before submitting a PR. It creates a compressed javascript bundle which is then referenced from DM code. We prefer to keep it version controlled, so that people could build the game just by using Dream Maker.

Troubleshooting

Development server doesn't find my BYOND cache!

This happens if your Documents folder in Windows has a custom location, for example in E:\Libraries\Documents. Development server tries its best to find this non-standard location (searches for a Windows Registry key), but it can fail. You have to run the dev server with an additional environmental variable, with a full path to BYOND cache.

BYOND_CACHE="E:/Libraries/Documents/BYOND/cache"

Webpack errors out with some cryptic messages!

Example: No template for dependency: PureExpressionDependency Webpack stores its cache on disk since tgui 4.3, and it is very sensitive to build configuration. So if you update webpack, or share the same cache directory between development and production build, it will start hallucinating.

To fix this kind of problem, run bin/tgui --clean and try again.

Developer Tools

When developing with tgui-dev-server, you will have access to certain development only features.

Debug Logs. When running server via bin/tgui --dev --debug, server will print debug logs and time spent on rendering. Use this information to optimize your code, and try to keep re-renders below 16ms.

Kitchen Sink. Press F12 to open the KitchenSink interface. This interface is a playground to test various tgui components.

Layout Debugger. Press F11 to toggle the layout debugger. It will show outlines of all tgui elements, which makes it easy to understand how everything comes together, and can reveal certain layout bugs which are not normally visible.

Project Structure

  • /packages - Each folder here represents a self-contained Node module.
  • /packages/common - Helper functions
  • /packages/tgui/index.js - Application entry point.
  • /packages/tgui/components - Basic UI building blocks.
  • /packages/tgui/interfaces - Actual in-game interfaces. Interface takes data via the state prop and outputs an html-like stucture, which you can build using existing UI components.
  • /packages/tgui/layouts - Root level UI components, that affect the final look and feel of the browser window. They usually hold various window elements, like the titlebar and resize handlers, and control the UI theme.
  • /packages/tgui/routes.js - This is where tgui decides which interface to pull and render.
  • /packages/tgui/layout.js - A root-level component, holding the window elements, like the titlebar, buttons, resize handlers. Calls routes.js to decide which component to render.
  • /packages/tgui/styles/main.scss - CSS entry point.
  • /packages/tgui/styles/functions.scss - Useful SASS functions. Stuff like lighten, darken, luminance are defined here.
  • /packages/tgui/styles/atomic - Atomic CSS classes. These are very simple, tiny, reusable CSS classes which you can use and combine to change appearance of your elements. Keep them small.
  • /packages/tgui/styles/components - CSS classes which are used in UI components. These stylesheets closely follow the BEM methodology.
  • /packages/tgui/styles/interfaces - Custom stylesheets for your interfaces. Add stylesheets here if you really need a fine control over your UI styles.
  • /packages/tgui/styles/layouts - Layout-related styles.
  • /packages/tgui/styles/themes - Contains all the various themes you can use in tgui. Each theme must be registered in webpack.config.js file.

Component Reference

See: Component Reference.

License

Source code is covered by /tg/station's parent license - AGPL-3.0 (see the main README), unless otherwise indicated.

Some files are annotated with a copyright header, which explicitly states the copyright holder and license of the file. Most of the core tgui source code is available under the MIT license.

The Authors retain all copyright to their respective work here submitted.