delete old tgui

if we want the old version, that's what github versions are for
This commit is contained in:
sarcoph
2022-03-03 23:11:41 -09:00
parent fc115d9c6b
commit 29796dee33
426 changed files with 0 additions and 52303 deletions
@@ -1,29 +1,10 @@
//DEFINITIONS FOR ASSET DATUMS START HERE.
// uncomment this and delete the tgui def bellow this for the new tgui
/datum/asset/simple/tgui
assets = list(
"tgui.bundle.js" = 'tgui/packages/tgui/public/tgui.bundle.js',
"tgui.bundle.css" = 'tgui/packages/tgui/public/tgui.bundle.css',
)
// /datum/asset/simple/tgui
// assets = list(
// // Old TGUI
// "tgui.css" = 'tgui/assets/tgui.css',
// "tgui.js" = 'tgui/assets/tgui.js',
// // tgui-next
// "tgui-main.html" = 'tgui-next/packages/tgui/public/tgui-main.html',
// "tgui.bundle.js" = 'tgui-next/packages/tgui/public/tgui.bundle.js',
// "tgui.bundle.css" = 'tgui-next/packages/tgui/public/tgui.bundle.css',
// // Old TGUI compatability
// "tgui-fallback.html" = 'tgui-next/packages/tgui/public/tgui-fallback.html',
// "shim-html5shiv.js" = 'tgui-next/packages/tgui/public/shim-html5shiv.js',
// "shim-ie8.js" = 'tgui-next/packages/tgui/public/shim-ie8.js',
// "shim-dom4.js" = 'tgui-next/packages/tgui/public/shim-dom4.js',
// "shim-css-om.js" = 'tgui-next/packages/tgui/public/shim-css-om.js',
// )
/datum/asset/group/tgui
children = list(
/datum/asset/simple/tgui,
-5
View File
@@ -1,5 +0,0 @@
{
"presets": [
"es2015"
]
}
-1
View File
@@ -1 +0,0 @@
assets/* binary
-2
View File
@@ -1,2 +0,0 @@
npm-debug.log
node_modules/
-20
View File
@@ -1,20 +0,0 @@
MIT license
Copyright (c) 2016 Bjorn Neergaard (neersighted), tgui contributors
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-139
View File
@@ -1,139 +0,0 @@
<!-- TOC depthFrom:1 depthTo:6 withLinks:1 updateOnSave:1 orderedList:0 -->
- [tgui](#tgui)
- [Concepts](#concepts)
- [Using It](#using-it)
- [Copypasta](#copypasta)
<!-- /TOC -->
# tgui
tgui is the user interface library of /tg/station. It is rendered clientside, based on JSON data sent from the server. Clicks are processed on the server, in a similar method to native BYOND `Topic()`.
Basic tgui consists of defining a few procs. In these procs you will handle a request to open or update a UI (typically by updating a UI if it exists or setting up and opening it if it does not), a request for data, in which you build a list to be passed as JSON to the UI, and an action handler, which handles any user input. In addition, you will write a HTML template file which renders your data and provides actionable inputs.
tgui is very different from most UIs you will encounter in BYOND programming, and is heavily reliant of Javascript and web technologies as opposed to DM. However, 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.
tgui is a fork of NanoUI. The server-side code (DM) is similar and derived from NanoUI, while the clientside is a wholly new project with no code in common.
## Concepts
tgui is loosely based a MVVM architecture. MVVM stands for model, view, view model.
- A model is the object that a UI represents. This is the atom a UI corresponds to in the game world in most cases, and is known as the `src_object` in tgui.
- The view model is how data is represented in terms of the view. In tgui, this is the `ui_data` proc which munges whatever complex data your `src_object` has into a list.
- The view is how the data is rendered. This is the template, a HTML (plus mustaches and other goodies) file which is compiled into the tgui blob that the browser executes.
Not included in the MVVM model are other important concepts:
- The action/topic handler, `ui_act`, is what recieves input from the user and acts on it.
- The request/update proc, `ui_interact` is where you open your UI and set options like title, size, autoupdate, theme, and more.
- Finally, `ui_state`s (set in `ui_interact`) dictate under what conditions a UI may be interacted with. This may be the standard checks that check if you are in range and conscious, or more.
States are easy to write and extend, and what make tgui interactions so powerful. Because states can over overridden from other procs, you can build powerful interactions for embedded objects or remote access.
## Using It
All these examples and abstracts sound great, you might say. But you also might say, "How do I use it?"
Examples can be as simple or as complex as you would like. Let's start with a very basic hello world.
```DM
/obj/machinery/my_machine/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = default_state)
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
ui = new(user, src, ui_key, "my_machine", name, 300, 300, master_ui, state)
ui.open()
```
This is the proc that defines our interface. There's a bit going on here, so let's break it down. First, we override the ui_interact proc on our object. This will be called by `interact` for you, which is in turn called by `attack_hand` (or `attack_self` for items). `ui_interact` is also called to update a UI (hence the `try_update_ui`), so we accept an existing UI to update. The `state` is a default argument so that a caller can overload it with named arguments (`ui_interact(state = overloaded_state)`) if needed.
Inside the `if(!ui)` block (which means we are creating a new UI), we choose our template, title, and size; we can also set various options like `style` (for themes), or autoupdate. These options will be elaborated on later (as will `ui_state`s).
After `ui_interact`, we need to define `ui_data`. This just returns a list of data for our object to use. Let's imagine our object has a few vars:
```DM
/obj/machinery/my_machine/ui_data(mob/user)
var/list/data = list()
data["health"] = health
data["color"] = color
return data
```
The `ui_data` proc is what people often find the hardest about tgui, but its really quite simple! You just need to represent your object as numbers, strings, and lists, instead of atoms and datums.
Finally, the `ui_act` proc is called by the interface whenever the user used an input. The input's `action` and `params` are passed to the proc.
```DM
/obj/machinery/my_machine/ui_act(action, params)
if(..())
return
switch(action)
if("change_color")
var/new_color = params["color"]
if(!(color in allowed_coors))
return
color = new_color
. = TRUE
update_icon()
```
The `..()` (parent call) is very important here, as it is how we check that the user is allowed to use this interface (to avoid so-called href exploits). It is also very important to clamp and sanitize all input here. Always assume the user is attempting to exploit the game.
Also note the use of `. = TRUE` (or `FALSE`), which is used to notify the UI that this input caused an update. This is especially important for UIs that do not auto-update, as otherwise the user will never see their change.
Finally, you have a template. This is also a source of confusion for many new users. Some basic HTML knowledge will get you a long way, however.
A template is regular HTML, with mustache for logic and built-in components to quickly build UIs. Here's how we might show some data (components will be elaborated on later).
In a template there are a few special values. `config` is always the same and is part of core tgui (it will be explained later), `data` is the data returned from `ui_data`, and `adata` is the same, but with certain values (numbers at this time) interpolated in order to allow animation.
```html
<ui-display>
<ui-section label='Health'>
<span>{{data.health}}</span>
</ui-section>
<ui-section label='Color'>
<span>{{data.color}}</span>
</ui-section>
</ui-display>
```
Templates can be very confusing at first, as ternary operators, computed properties, and iterators are used quite a bit in more complex interfaces. Start with the basics, and work your way up. Much of the complexity stems from performance concerns. If in doubt, take the simpler approach and refactor if performance becomes an issue.
## Copypasta
We all do it, even the best of us. If you just want to make a tgui **fast**, here's what you need (note that you'll probably be forced to clean your shit up upon code review):
```DM
/obj/copypasta/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = default_state) // Remember to use the appropriate state.
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
ui = new(user, src, ui_key, "copypasta", name, 300, 300, master_ui, state)
ui.open()
/obj/copypasta/ui_data(mob/user)
var/list/data = list()
data["var"] = var
return data
/obj/copypasta/ui_act(action, params)
if(..())
return
switch(action)
if("copypasta")
var/newvar = params["var"]
var = Clamp(newvar, min_val, max_val) // Just a demo of proper input sanitation.
. = TRUE
update_icon() // Not applicable to all objects.
```
And the template:
```html
<ui-display title='My Copypasta Section'>
<ui-section label='Var'>
<span>{{data.var}}</span>
</ui-section>
<ui-section label='Animated Var'>
<span>{{adata.var}}</span>
</ui-section>
</ui-display>
```
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-12
View File
@@ -1,12 +0,0 @@
#!/bin/bash
#RUN THIS IN THE tgui/ folder
set -e
source ../dependencies.sh
if [ ! -d "/tmp/nvm" ]; then
rm -rf /tmp/nvm && git clone https://github.com/creationix/nvm.git /tmp/nvm && (cd ~/.nvm && git checkout `git describe --abbrev=0 --tags`) && source /tmp/nvm/nvm.sh && nvm install $NODE_VERSION
fi
source /tmp/nvm/nvm.sh
gulp --min
-6
View File
@@ -1,6 +0,0 @@
@echo off
echo node.js and all dependencies must be installed for this script to work.
echo If this script fails try installing dependencies again.
REM Build minified assets
node node_modules/gulp/bin/gulp.js --min
pause
-31
View File
@@ -1,31 +0,0 @@
import * as f from './flags'
import { gulp as g, postcss as s } from './plugins'
const entry = 'tgui.styl'
import gulp from 'gulp'
export function css () {
return gulp.src(`${f.src}/${entry}`)
.pipe(g.if(f.debug, g.sourcemaps.init({loadMaps: true})))
.pipe(g.stylus({
url: 'data-url',
paths: [ f.src ]
}))
.pipe(g.postcss([
s.autoprefixer({ browsers: ['last 2 versions', 'ie >= 8'] }),
s.gradient,
s.opacity,
s.rgba({oldie: true}),
s.plsfilters({oldIE: true}),
s.fontweights,
... f.min ? [s.cssnano()] : [],
]))
.pipe(g.bytediff.start())
.pipe(g.if(f.debug, g.sourcemaps.write()))
.pipe(g.bytediff.stop())
.pipe(gulp.dest(f.dest))
}
export function watch_css () {
gulp.watch(`${f.src}/**/*.styl`, css)
return css()
}
-7
View File
@@ -1,7 +0,0 @@
const flags = require('minimist')(process.argv.slice(2))
export const src = flags.src || 'src'
export const dest = flags.dest || 'assets'
export const debug = flags.debug || flags.d
export const min = flags.min || flags.m
-68
View File
@@ -1,68 +0,0 @@
import * as f from './flags'
import { browserify as b, gulp as g } from './plugins'
const entry = 'tgui.js'
import { transform as babel } from 'babel-core'
import { readFileSync as read } from 'fs'
b.componentify.compilers['text/javascript'] = function (source, file) {
const config = { sourceMaps: true }
Object.assign(config, JSON.parse(read(`${f.src}/.babelrc`, 'utf8')))
const compiled = babel(source, config)
return { source: compiled.code, map: compiled.map }
}
import { render as stylus } from 'stylus'
b.componentify.compilers['text/stylus'] = function (source, file) {
const config = { filename: file }
const compiled = stylus(source, config)
return { source: compiled }
}
import browserify from 'browserify'
const bundle = browserify(`${f.src}/${entry}`, {
debug: f.debug,
cache: {},
packageCache: {},
extensions: [ '.js', '.ract' ],
paths: [ f.src ]
})
if (f.min) bundle.plugin(b.collapse)
bundle
.transform(b.babelify)
.plugin(b.helpers)
.transform(b.componentify)
.transform(b.globify)
.transform(b.es3ify, { global: true })
import buffer from 'vinyl-buffer'
import gulp from 'gulp'
import source from 'vinyl-source-stream'
export function js () {
return bundle.bundle()
.pipe(source(entry))
.pipe(buffer())
.pipe(g.if(f.debug, g.sourcemaps.init({loadMaps: true})))
.pipe(g.bytediff.start())
.pipe(g.if(f.min, g.uglify({
mangle: true,
compress: {
unsafe: false,
},
ie8: true,
})))
.pipe(g.if(f.debug, g.sourcemaps.write()))
.pipe(g.bytediff.stop())
.pipe(gulp.dest(f.dest))
}
import gulplog from 'gulplog'
export function watch_js () {
bundle.plugin(b.watchify)
bundle.on('update', js)
bundle.on('error', err => {
gulplog.error(err.toString())
this.emit('end')
})
return js()
}
-21
View File
@@ -1,21 +0,0 @@
export const browserify = {
babelify: require('babelify'),
collapse: require('bundle-collapser/plugin'),
componentify: require('ractive-componentify'),
es3ify: require('es3ify'),
globify: require('require-globify'),
helpers: require('babelify-external-helpers'),
watchify: require('watchify')
}
export const gulp = require('gulp-load-plugins')({ replaceString: /^gulp(-|\.)|-/g })
export const postcss = {
autoprefixer: require('autoprefixer'),
fontweights: require('postcss-font-weights'),
gradient: require('postcss-filter-gradient'),
opacity: require('postcss-opacity'),
plsfilters: require('pleeease-filters'),
rgba: require('postcss-color-rgba-fallback'),
cssnano: require('cssnano'),
}
-10
View File
@@ -1,10 +0,0 @@
const out = 'assets'
import { exec } from 'child_process'
export function reload () {
return exec('reload.bat')
}
import gulp from 'gulp'
export function watch_reload () {
gulp.watch(`${out}/**`, reload)
}
-9
View File
@@ -1,9 +0,0 @@
import { gulp as g } from './plugins'
const out = 'assets'
import gulp from 'gulp'
export function size () {
return gulp.src(`${out}/**`)
.pipe(g.size())
}
-12
View File
@@ -1,12 +0,0 @@
import gulp from 'gulp'
import { css, watch_css } from './gulp/css'
import { js, watch_js } from './gulp/js'
import { reload, watch_reload } from './gulp/reload'
import { size } from './gulp/size'
gulp.task(reload)
gulp.task(size)
gulp.task('default', gulp.series(gulp.parallel(css, js), size))
gulp.task('watch', gulp.parallel(watch_css, watch_js, watch_reload))
-8
View File
@@ -1,8 +0,0 @@
@echo off
echo node.js 5.3.0 or newer must be installed for this script to work.
echo If this script fails, try closing editors and running it again first.
echo Any warnings about optional dependencies can be safely ignored.
pause
REM Install dependencies
npm ci
pause
-10798
View File
File diff suppressed because it is too large Load Diff
-68
View File
@@ -1,68 +0,0 @@
{
"name": "tgui",
"private": true,
"scripts": {
"build": "gulp --min",
"watch": "gulp watch"
},
"dependencies": {
"autoprefixer": "6.7.7",
"babel-core": "6.26.3",
"babel-plugin-external-helpers": "6.22.0",
"babel-polyfill": "6.26.0",
"babel-preset-es2015": "6.24.1",
"babel-preset-es2015-loose": "7.0.0",
"babel-register": "6.26.0",
"babelify": "7.2.0",
"babelify-external-helpers": "1.1.0",
"browserify": "13.0.0",
"bundle-collapser": "1.2.1",
"cached-path-relative": "1.1.0",
"cssnano": "^4.1.10",
"dom4": "1.7.0",
"es3ify": "0.2.1",
"fg-loadcss": "1.0.0-0",
"gulp": "^4.0.2",
"gulp-bytediff": "1.0.0",
"gulp-if": "3.0.0",
"gulp-load-plugins": "^1.6.0",
"gulp-postcss": "6.1.0",
"gulp-size": "2.0.0",
"gulp-sourcemaps": "1.6.0",
"gulp-stylus": "2.7.0",
"gulp-uglify": "3.0.2",
"gulplog": "1.0.0",
"html5shiv": "3.7.3",
"ie8": "0.8.1",
"is-obj": "^2.0.0",
"lodash": "^4.17.21",
"minimist": "1.2.3",
"paths-js": "0.4.2",
"pleeease-filters": "2.0.0",
"postcss": "8.2.13",
"postcss-color-rgba-fallback": "2.2.0",
"postcss-filter-gradient": "0.2.2",
"postcss-font-weights": "2.0.1",
"postcss-opacity": "5.0.0",
"ractive": "0.7.3",
"ractive-componentify": "0.2.4",
"ractive-events-keys": "0.2.1",
"ractive-transitions-fade": "0.3.1",
"require-globify": "1.3.0",
"stylus": "0.54.7",
"vinyl-buffer": "1.0.1",
"vinyl-source-stream": "2.0.0",
"watchify": "^3.11.1"
},
"browser": {
"ractive": "ractive/ractive-legacy.runtime"
},
"require-globify": {
"appliesTo": {
"includeExtensions": [
".js",
".ract"
]
}
}
}
-8
View File
@@ -1,8 +0,0 @@
@echo off
REM Get the documents folder from the registry.
@echo off
for /f "tokens=3*" %%p in ('REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v Personal') do (
set DocumentsFolder=%%p
)
REM Copy to tmp subdirectories
FOR /D %%G in ("%DocumentsFolder%\BYOND\cache\tmp*") DO (cmd /c copy assets\* %%G /y)
-8
View File
@@ -1,8 +0,0 @@
{
"presets": [
"es2015-loose"
],
"plugins": [
"external-helpers"
]
}
-16
View File
@@ -1,16 +0,0 @@
<script>
component.exports = {
oninit () {
this.observe('value', (newkey, oldkey, keypath) => {
const { min, max } = this.get()
const value = Math.clamp(min, max, newkey)
this.animate('percentage', Math.round((value - min) / (max - min) * 100))
})
}
}
</script>
<div class='bar'>
<div class='barFill {{state}}' style='width: {{percentage}}%'></div>
<span class='barText'>{{yield}}</span>
</div>
-32
View File
@@ -1,32 +0,0 @@
context = selector()
.bar
display: inline-block
position: relative
vertical-align: middle
width: 100%
height: 20px
line-height: @height - 3px
padding: 1px
border: 1px solid bar-color-border
background: bar-color-background
.barText
@extend {context} $fontReset
position: absolute
top: 0
right: 3px
.barFill
display: block
height: 100%
transition: background-color 1s
background-color: bar-color-normal
&.good
background-color: bar-color-good
&.average
background-color: bar-color-average
&.bad
background-color: bar-color-bad
-81
View File
@@ -1,81 +0,0 @@
<script>
import { UI_INTERACTIVE } from 'util/constants'
import { act } from 'util/byond'
component.exports = {
computed: {
clickable () {
if (this.get('enabled') && (!this.get('state') || this.get('state') == "toggle")) {
return true
}
return false
},
enabled () {
if (this.get('config.status') === UI_INTERACTIVE) {
return true
}
return false
},
styles () {
let extra = ''
if (this.get('class'))
extra += ' ' + this.get('class');
if (this.get('tooltip-side'))
extra = ` tooltip-${this.get('tooltip-side')}`
if (this.get('grid'))
extra += ' gridable'
const state = this.get('state')
const style = this.get('style')
const active_class = this.get('enabled') ? 'active' : 'inactive'
if (!state) {
return `${active_class} normal ${style} ${extra}`
} else {
return `${active_class} ${state} ${extra}`
}
}
},
oninit () {
this.on('press', (event) => {
const { action, params } = this.get()
act(this.get('config.ref'), action, params)
event.node.blur()
})
},
data: {
iconStackToHTML(icon_stack){ //turns a string such as 'square-o 2x, twitter 1x' into fully valid fontawesome syntax+HTML
let resultHTML = '';
let icons = icon_stack.split(',');
if(icons.length){
resultHTML += '<span class=\"fa-stack\">';
for (let iconinfo of icons){
let regex = /([\w\-]+)\s*(\dx)/g;
let components = regex.exec(iconinfo);
let icon = components[1]; //0 is the entire string
let size = components[2];
resultHTML += '<i class=\"fa fa-' + icon + ' fa-stack-' + size + '\"></i>';
}
}
if(resultHTML){
resultHTML += '</span>';
}
return resultHTML;
}
}
}
</script>
<span class='button {{styles}}'
unselectable='on'
{{#clickable}}tabindex='0'{{/}}
data-tooltip='{{tooltip}}'
on-mouseover-mousemove='hover'
on-mouseleave='unhover'
on-click-enter='{{#clickable}}press{{/}}'>
{{#if icon}}
<i class='fa fa-{{icon}}'></i>
{{/if}}
{{#if icon_stack}}
{{{iconStackToHTML(icon_stack)}}}
{{/if}}
{{yield}}
</span>
-56
View File
@@ -1,56 +0,0 @@
context = selector()
buttoncolor(selector, color)
&.{selector}
transition: background-color 0.5s
background-color: color
&.active:hover,
&.active:focus
transition: background-color 0.25s
background-color: lighten(color, button-lighten-hover)
outline: 0
if selector is not 'disabled'
&:not(.active)
background-image: repeating-linear-gradient(
-45deg,
color,
color 1px,
button-color-disabled 1px,
button-color-disabled 2px
)
span.button
@extend {context} $fontReset
display: inline-block
vertical-align: middle
min-height: 20px
line-height: @min-height - 3px
padding: 0 5px
white-space: nowrap
border: 1px solid button-color-border
.fa
padding-right: 2px
buttoncolor(normal, button-color-normal)
buttoncolor(disabled, button-color-disabled)
buttoncolor(selected, button-color-selected)
buttoncolor(toggle, button-color-selected)
buttoncolor(caution, button-color-caution)
buttoncolor(danger, button-color-danger)
&.gridable
width: 125px
margin: 2px 0
&.center
text-align: center
width:75px
span:not(.button) + span.button
margin-left: 5px
span.button + span:not(.button)
margin-left: 5px
-13
View File
@@ -1,13 +0,0 @@
<div class='display'>
{{#if title}}
<header>
<h3>{{title}}</h3>
{{#if button}}
<div class='buttonRight'>{{yield button}}</div>
{{/if}}
</header>
{{/if}}
<article>
{{yield}}
</article>
</div>
-33
View File
@@ -1,33 +0,0 @@
div.display
width: 100%
padding: 4px
margin: 6px 0
&.tabular
padding 0px
margin 0px
background-color: display-color-background // Transparent background.
box-shadow: inset 0 0 5px display-color-shadow
header
display: block
position: relative
width: 100%
padding: 0 4px
margin-bottom: 6px
color: display-color-title
border-bottom: rule-size solid rule-color-normal
.buttonRight
position: absolute
bottom: 6px
right: 4px
article
display: table
width: 100%
border-collapse: collapse;
-13
View File
@@ -1,13 +0,0 @@
<script>
component.exports = {
oninit () {
this.on('clear', () => {
this.set('value', '')
this.find('input').focus()
})
}
}
</script>
<input type='text' value='{{value}}' placeholder='{{placeholder}}'/>
<ui-button icon='refresh' on-press='clear'/>
-19
View File
@@ -1,19 +0,0 @@
input
display: inline-block
vertical-align: middle
height: 20px
line-height: @height - 3px
padding: 0 5px
white-space: nowrap
color: input-color-text
background-color: input-color-background
border: 1px solid input-color-border
&.number
width: 35px
&::placeholder
color: input-color-placeholder
&::-ms-clear
display: none
-88
View File
@@ -1,88 +0,0 @@
<script>
component.exports = {
data: {
graph: require('paths-js/smooth-line'),
xaccessor: point => point.x,
yaccessor: point => point.y
},
computed: {
size () {
const points = this.get('points')
return points[0].length
},
scale () {
const points = this.get('points')
return Math.max(...Array.map(points, a => Math.max(...Array.map(a, p => p.y))))
},
xaxis () {
const xinc = this.get('xinc')
const size = this.get('size')
return Array.from(Array(size).keys()).filter(num => num && num % xinc == 0)
},
yaxis () {
const yinc = this.get('yinc')
const scale = this.get('scale')
return Array.from(Array(yinc).keys()).map(num => Math.round((scale * (++num / 100)) * 10))
}
},
oninit () {
this.on({
enter (event) {
this.set('selected', event.index.count)
},
exit (event) {
this.set('selected')
}
})
window.addEventListener('resize', (event) => {
this.set('width', this.el.clientWidth)
})
},
onrender () {
this.set('width', this.el.clientWidth)
}
}
</script>
<svg class='linegraph' width='100%' height='{{height + 10}}'>
<g transform='translate(0, 5)'>
{{#graph({data: points, xaccessor: xaccessor, yaccessor: yaccessor, width: width, height: height})}}
{{#each xaxis}}
<line x1='{{xscale(.)}}' x2='{{xscale(.)}}' y1='0' y2='{{height}}' stroke='darkgray'/>
{{#if @index % 2 == 0}}
<text x='{{xscale(.)}}' y='{{height - 5}}' text-anchor='middle' fill='white'>{{(size - .) * xfactor}} {{xunit}}</text>
{{/if}}
{{/each}}
{{#each yaxis}}
<line x1='0' x2='{{width}}' y1='{{yscale(.)}}' y2='{{yscale(.)}}' stroke='darkgray'/>
<text x='0' y='{{yscale(.) - 5}}' text-anchor='begin' fill='white'>{{. * yfactor}} {{yunit}}</text>
{{/each}}
{{#each curves:curve}}
<path d='{{area.path.print()}}' fill='{{colors[curve]}}' opacity='0.1'/>
{{/each}}
{{#each curves:curve}}
<path d='{{line.path.print()}}' stroke='{{colors[curve]}}' fill='none'/>
{{/each}}
{{#each curves:curve}}
{{#each line.path.points():count}}
<circle transform='translate({{.}})' r='{{selected == count ? 10 : 4}}' fill='{{colors[curve]}}' on-mouseenter='enter' on-mouseleave='exit'/>
{{/each}}
{{/each}}
{{#each curves:curve}}
{{#each line.path.points():count}}
{{#if selected == count }}
<text transform='translate({{.}}) {{count <= size / 2 ? "translate(15, 4)" : "translate(-15, 4)"}}' text-anchor='{{count <= size / 2 ? "start" : "end"}}' fill='white'>
{{item[count].y * yfactor}} {{yunit}} @ {{(size - item[count].x) * xfactor}} {{xunit}}
</text>
{{/if}}
{{/each}}
{{/each}}
{{#each curves:curve}}
<g transform='translate({{(width / (curves.length + 1)) * (@index + 1)}}, 10)'>
<circle r='4' fill='{{colors[curve]}}'/>
<text x='8' y='4' fill='white'>{{legend[curve]}}</text>
</g>
{{/each}}
{{/graph}}
</g>
</svg>
-2
View File
@@ -1,2 +0,0 @@
svg.linegraph
overflow: hidden
-3
View File
@@ -1,3 +0,0 @@
<div class='notice'>
{{yield}}
</div>
-27
View File
@@ -1,27 +0,0 @@
div.notice
margin: 8px 0
padding: 4px
box-shadow: none
color: text-color-inverse
font-weight: bold
font-style: italic
background-color: notice-color-first
background-image: repeating-linear-gradient(
-45deg,
notice-color-first,
notice-color-first 10px,
notice-color-second 10px,
notice-color-second 20px
)
.label
color: text-color-inverse
.content:only-of-type
padding: 0
hr
background-color: rule-color-dark
-29
View File
@@ -1,29 +0,0 @@
<script>
import { winset } from 'util/byond'
import { resize } from 'util/dragresize'
component.exports = {
oninit () {
const onresize = resize.bind(this);
const onrelease = () => {
this.set({
resize: false,
x: null,
y: null,
});
document.removeEventListener('mousemove', onresize);
document.removeEventListener('mouseup', onrelease);
};
this.on('resize', () => {
this.toggle('resize');
document.addEventListener('mousemove', onresize);
document.addEventListener('mouseup', onrelease);
});
}
}
</script>
{{#if config.fancy}}
<div class='resize' on-mousedown='resize'></div>
{{/if}}
-12
View File
@@ -1,12 +0,0 @@
div.resize
position: fixed
bottom: 0
right: 0
width: 0
height: 0
border-style: solid;
border-width: 0 0 45px 45px;
border-color: transparent transparent resize-color transparent
transform: rotate(360deg)
-12
View File
@@ -1,12 +0,0 @@
<section class='{{#candystripe}}candystripe{{/candystripe}}'>
{{#if label}}
<span class='label' style='{{#labelcolor}}color:{{labelcolor}}{{/labelcolor}}'>{{label}}:</span>
{{/if}}
{{#if nowrap}}
{{yield}}
{{else}}
<div class='content' style='{{#right}}float:right;{{/right}}'>
{{yield}}
</div>
{{/if}}
</section>
-44
View File
@@ -1,44 +0,0 @@
/$cell
display: table-cell
margin: 0
text-align: left
vertical-align: middle
padding: 3px 2px
section
display: table-row
width: 100%
&:not(:first-child)
padding-top: 4px
&.candystripe:nth-child(even)
background-color: section-color-candystripe
.label
@extend $cell
width: 1%
padding-right: 32px
white-space: nowrap
color: section-color-label
.content
@extend $cell
&:not(:last-child)
padding-right: 16px
.line
@extend $cell
width: 100%
.cell
@extend $cell
&:not(:first-child)
text-align: center
padding-top: 0px
span.button
width: 75px
&:not(:last-child)
padding-right: 4px
-11
View File
@@ -1,11 +0,0 @@
<div class='subdisplay'>
{{#if title}}
<header>
<h4>{{title}}</h4>
{{#if button}}{{yield button}}{{/if}}
</header>
{{/if}}
<article>
{{yield}}
</article>
</div>
-11
View File
@@ -1,11 +0,0 @@
context = selector()
div.subdisplay
width: 100%
margin: 0
header
@extend {context} div.display header
article
@extend {context} div.display article
-27
View File
@@ -1,27 +0,0 @@
<link rel='ractive' href='components/tabs/tab.ract'>
<script>
component.exports = {
oninit () {
this.set('active', this.findComponent('tab').get('name'))
this.on('switch', event => {
this.set('active', event.node.textContent.trim()) // Hack but it works...
})
this.observe('active', (newkey, oldkey, path) => {
for (let tab of this.findAllComponents('tab')) {
tab.set('shown', (tab.get('name') === newkey))
}
})
}
}
</script>
<header>
{{#each tabs}}
<ui-button pane='{{.}}' on-press='switch'>{{.}}</ui-button>
{{/each}}
</header>
<ui-display>
{{>content}}
</ui-display>
-3
View File
@@ -1,3 +0,0 @@
{{#if shown}}
{{yield}}
{{/if}}
-78
View File
@@ -1,78 +0,0 @@
<script>
import { UI_INTERACTIVE, UI_UPDATE, UI_DISABLED } from 'util/constants'
import { href, winget, winset, runCommand } from 'util/byond'
import { drag, lock } from 'util/dragresize'
component.exports = {
computed: {
visualStatus () {
switch (this.get('config.status')) {
case UI_INTERACTIVE: return 'good'
case UI_UPDATE: return 'average'
case UI_DISABLED: return 'bad'
default: return 'bad'
}
}
},
oninit () {
// Calculate offset between the "browser's screen space" and
// "BYOND screen space".
// This is necessary, because Windows 10 taskbar decreases the effective
// height by about 40px. If taskbar is located at the top and you try
// to drag a TGUI window, it rapidly propels itself to the bottom of
// the screen and gets stuck.
// See: https://github.com/tgstation/tgstation/issues/44038
this.set('screenOffsetX', 0);
this.set('screenOffsetY', 0);
winget(this.get('config.window'), 'pos')
.then(pos => {
this.set('screenOffsetX', pos.x - window.screenX);
this.set('screenOffsetY', pos.y - window.screenY);
// If the window starts off screen, pull it back.
let {x, y} = lock(window.screenLeft, window.screenTop)
if (x !== window.screenLeft || y !== window.screenTop) {
winset(this.get('config.window'), 'pos', `${x},${y}`);
}
});
const ondrag = drag.bind(this)
const onrelease = (event) => this.set({ drag: false, x: null, y: null })
this.observe('config.fancy', (newkey, oldkey, keypath) => {
if (newkey) {
document.addEventListener('mousemove', ondrag)
document.addEventListener('mouseup', onrelease)
} else {
document.removeEventListener('mousemove', ondrag)
document.removeEventListener('mouseup', onrelease)
}
})
this.on({
drag () {
this.toggle('drag')
},
close () {
winset(this.get('config.window'), 'is-visible', false)
runCommand(`uiclose ${this.get('config.ref')}`)
},
minimize () {
winset(this.get('config.window'), 'is-minimized', true)
}
})
}
}
</script>
<header class='titlebar' on-mousedown='drag'>
<i class='statusicon fa fa-eye fa-2x {{visualStatus}}'></i>
<span class='title'>{{yield}}</span>
{{#if config.fancy}}
<i class='minimize fa fa-minus fa-2x' on-click='minimize'></i>
<i class='close fa fa-close fa-2x' on-click='close'></i>
{{else}}
<i class='minimize no-icons' on-click='minimize'></i>
<i class='close no-icons' on-click='close'></i>
{{/if}}
</header>
-65
View File
@@ -1,65 +0,0 @@
context = selector()
$titleButton
display: inline-block
position: relative
padding: 7px // To make a bigger clickable area.
margin: -7px
color: titlebar-color-button;
&:hover
color: lighten(titlebar-color-button, button-lighten-hover)
header.titlebar
position: fixed;
z-index: 1
top: 0;
left: 0;
width: 100%;
height: 32px;
background-color: titlebar-color-background
border-bottom: 1px solid titlebar-color-coreshadow
box-shadow: 0 3px 3px titlebar-color-shadow
.statusicon
position: absolute
top: 4px
left: 12px
transition: color 0.5s
.title
position: absolute
top: 6px
left: 46px
color: titlebar-color-text
font-size: 16px
white-space: nowrap
.minimize
@extend {context} $titleButton
position: absolute
top: 6px
right: 46px
.close
@extend {context} $titleButton
position: absolute
top: 4px
right: 12px
header.titlebar
.statusicon.no-icons
font-size: 20px
&::after
content: "O"
.minimize.no-icons
top: -2px
font-size: 20px
&::after
content: ""
.close.no-icons
font-size: 20px
&::after
content: "X"
-47
View File
@@ -1,47 +0,0 @@
<script>
const versions = [11, 10, 9, 8]
component.exports = {
data: {
userAgent: navigator.userAgent
},
computed: {
ie () {
if (document.documentMode) return document.documentMode
for (let version in versions) {
const div = document.createElement('div')
div.innerHTML = `<!--[if IE ${version}]><span></span><![endif]-->`
if (div.getElementsByTagName('span').length) return version
}
return undefined
}
},
oninit () {
this.on('debug', () => this.toggle('debug'))
}
}
</script>
{{#if config.fancy && ie && ie < 11}}
<ui-notice>
<span>You have an old (IE{{ie}}), end-of-life (click 'EOL Info' for more information) version of Internet Explorer installed.</span><br/>
<span>To upgrade, click 'Upgrade IE' to download IE11 from Microsoft.</span><br/>
<span>If you are unable to upgrade directly, click 'IE VMs' to download a VM with IE11 or Edge from Microsoft.</span><br/>
<span>Otherwise, click 'No Frills' below to disable potentially incompatible features (and this message).</span>
<hr/>
<ui-button icon='close' action='tgui:nofrills'>No Frills</ui-button>
<ui-button action='tgui:link' params='{"url": "http://windows.microsoft.com/en-us/internet-explorer/download-ie"}'>
Upgrade IE</ui-button>
<ui-button action='tgui:link' params='{"url": "https://dev.windows.com/en-us/microsoft-edge/tools/vms"}'>
IE VMs</ui-button>
<ui-button icon='info' action='tgui:link' params='{"url": "https://support.microsoft.com/en-us/lifecycle#gp/Microsoft-Internet-Explorer"}'>
EOL Info</ui-button>
<ui-button icon='bug' on-press='debug'>Debug Info</ui-button>
{{#if debug}}
<hr/>
<span>Detected: IE{{ie}}</span><br/>
<span>User Agent: {{userAgent}}</span>
{{/if}}
</ui-notice>
{{/if}}
-8
View File
@@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg" version="1.0" viewBox="0 0 425 200" opacity=".33">
<path d="m 178.00399,0.03869 -71.20393,0 a 6.7613422,6.0255495 0 0 0 -6.76134,6.02555 l 0,187.87147 a 6.7613422,6.0255495 0 0 0 6.76134,6.02554 l 53.1072,0 a 6.7613422,6.0255495 0 0 0 6.76135,-6.02554 l 0,-101.544018 72.21628,104.699398 a 6.7613422,6.0255495 0 0 0 5.76015,2.87016 l 73.55487,0 a 6.7613422,6.0255495 0 0 0 6.76135,-6.02554 l 0,-187.87147 a 6.7613422,6.0255495 0 0 0 -6.76135,-6.02555 l -54.71644,0 a 6.7613422,6.0255495 0 0 0 -6.76133,6.02555 l 0,102.61935 L 183.76413,2.90886 a 6.7613422,6.0255495 0 0 0 -5.76014,-2.87017 z" />
<path d="M 4.8446333,22.10875 A 13.412039,12.501842 0 0 1 13.477588,0.03924 l 66.118315,0 a 5.3648158,5.000737 0 0 1 5.364823,5.00073 l 0,79.87931 z" />
<path d="m 420.15535,177.89119 a 13.412038,12.501842 0 0 1 -8.63295,22.06951 l -66.11832,0 a 5.3648152,5.000737 0 0 1 -5.36482,-5.00074 l 0,-79.87931 z" />
</svg>
<!-- This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. -->
<!-- http://creativecommons.org/licenses/by-sa/4.0/ -->

Before

Width:  |  Height:  |  Size: 1.1 KiB

-6
View File
@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg" version="1.0" viewBox="0 0 200 289.742" opacity=".33">
<path d="m 93.537677,0 c -18.113125,0 -34.220133,3.11164 -48.323484,9.33437 -13.965092,6.22167 -24.612442,15.07114 -31.940651,26.5471 -7.1899398,11.33789 -10.3012266,24.74911 -10.3012266,40.23478 0,10.64662 2.7250026,20.46465 8.1751116,29.45258 5.615277,8.98686 14.038277,17.35204 25.268821,25.09436 11.230544,7.60531 26.507421,15.41835 45.830514,23.43782 19.983748,8.29557 34.848848,15.55471 44.592998,21.77638 9.74414,6.22273 16.7617,12.8585 21.05572,19.90951 4.29404,7.05208 6.44193,15.76408 6.44193,26.13459 0,16.17702 -5.20196,28.48222 -15.60673,36.91682 -10.2396,8.4347 -25.02203,12.6523 -44.345169,12.6523 -14.038171,0 -25.515247,-1.6594 -34.433618,-4.9777 -8.91837,-3.4566 -16.185572,-8.7113 -21.800839,-15.7633 -5.615277,-7.0521 -10.074795,-16.66088 -13.377899,-28.82812 l -24.7731626293945,0 0,56.82632 C 33.856769,286.07601 63.74904,289.74201 89.678383,289.74201 c 16.020027,0 30.719787,-1.3827 44.097337,-4.1479 13.54272,-2.9043 25.1041,-7.4676 34.68309,-13.6893 9.74413,-6.3597 17.34042,-14.5195 22.79052,-24.4748 5.4501,-10.09332 8.17511,-22.39959 8.17511,-36.91682 0,-12.99764 -3.3021,-24.33539 -9.90829,-34.0146 -6.44105,-9.81725 -15.52545,-18.52707 -27.25146,-26.13133 -11.56085,-7.60427 -27.91083,-15.83142 -49.05066,-24.68022 -17.50644,-7.19012 -30.719668,-13.68948 -39.638038,-19.49701 -8.918371,-5.80752 -18.607474,-12.43409 -24.096524,-18.87417 -5.426043,-6.36616 -9.658826,-15.07003 -9.658826,-24.88729 0,-9.26401 2.075414,-17.21345 6.223454,-23.85033 11.098298,-14.39748 41.286638,-1.79507 45.075609,24.34762 4.839392,6.77491 8.84935,16.24729 12.029515,28.4156 l 20.53234,0 0,-55.99967 c -4.47825,-5.92448 -9.95488,-10.63222 -15.90837,-14.37411 1.64055,0.47905 3.19039,1.02376 4.63865,1.64024 6.49861,2.62607 12.16793,7.32747 17.0073,14.10345 4.83939,6.77491 8.84935,16.24567 12.02952,28.41397 0,0 8.48128,-0.12894 8.48978,-0.002 0.41776,6.41494 -1.75339,9.45286 -4.12342,12.56104 -2.4174,3.16978 -5.14486,6.78973 -4.00278,13.0029 1.50786,8.20318 10.18354,10.59642 14.62194,9.31154 -3.31842,-0.49911 -5.31855,-1.74948 -5.31855,-1.74948 0,0 1.87646,0.99868 5.65117,-1.35981 -3.27695,0.95571 -10.70529,-0.79738 -11.80125,-6.76313 -0.95752,-5.20861 0.94654,-7.29514 3.40113,-10.51482 2.45462,-3.21968 5.28426,-6.95831 4.6843,-14.48824 l 0.003,0.002 8.92676,0 0,-55.99967 c -15.07125,-3.87168 -27.65314,-6.36042 -37.74671,-7.46586 -9.95531,-1.10755 -20.18823,-1.65981 -30.696613,-1.65981 z m 70.321603,17.30893 0.23805,40.3049 c 1.31808,1.22666 2.43965,2.27815 3.34081,3.10602 4.83939,6.77491 8.84934,16.24566 12.02951,28.41397 l 20.53234,0 0,-55.99967 c -6.67731,-4.59381 -19.83643,-10.47309 -36.14071,-15.82522 z m -28.12049,5.60551 8.56479,17.71655 c -11.97037,-6.46697 -13.84678,-9.71726 -8.56479,-17.71655 z m 22.79705,0 c 2.7715,7.99929 1.78741,11.24958 -4.49354,17.71655 l 4.49354,-17.71655 z m 15.22195,24.00848 8.56479,17.71655 c -11.97038,-6.46697 -13.84679,-9.71726 -8.56479,-17.71655 z m 22.79704,0 c 2.7715,7.99929 1.78741,11.24958 -4.49354,17.71655 l 4.49354,-17.71655 z m -99.11384,2.20764 8.56479,17.71655 c -11.970382,-6.46697 -13.846782,-9.71726 -8.56479,-17.71655 z m 22.79542,0 c 2.7715,7.99929 1.78741,11.24958 -4.49354,17.71655 l 4.49354,-17.71655 z" />
</svg>
<!-- This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. -->
<!-- http://creativecommons.org/licenses/by-sa/4.0/ -->

Before

Width:  |  Height:  |  Size: 3.4 KiB

-131
View File
@@ -1,131 +0,0 @@
<script>
component.exports = {
data: {
powerState (status) {
switch (status) {
case 2: return 'good'
case 1: return 'average'
default: return 'bad'
}
},
shockState (status) {
switch (status) {
case 2: return 'good'
case 1: return 'average'
default: return 'bad'
}
}
}
}
</script>
<ui-display title='Power Status'>
<ui-section label='Main'>
<span class='{{powerState(data.power.main)}}'>{{data.power.main ? "Online" : "Offline"}}</span>
{{#if !data.wires.main_1 || !data.wires.main_2}}
[ <span class="bad">Wires have been cut</span> ]
{{else}}
{{#if data.power.main_timeleft > 0}}
[ {{data.power.main_timeleft}} seconds left ]
{{/if}}
{{/if}}
<div style='float:right'>
<ui-button icon='lightbulb-o' action='disrupt-main' state='{{data.power.main ? null : "disabled"}}'>Disrupt</ui-button>
</div>
</ui-section>
<ui-section label='Backup'>
<span class='{{powerState(data.power.backup)}}'>{{data.power.backup ? "Online" : "Offline"}}</span>
{{#if !data.wires.backup_1 || !data.wires.backup_2}}
[ <span class="bad">Wires have been cut</span> ]
{{else}}
{{#if data.power.backup_timeleft > 0}}
[ {{data.power.backup_timeleft}} seconds left ]
{{/if}}
{{/if}}
<div style='float:right'>
<ui-button icon='lightbulb-o' action='disrupt-backup' state='{{data.power.backup ? null : "disabled"}}'>Disrupt</ui-button>
</div>
</ui-section>
<ui-section label='Electrify'>
<span class='{{shockState(data.shock)}}'>{{data.shock == 2 ? "Safe" : "Electrified"}}</span>
{{#if !data.wires.shock}}
[ <span class="bad">Wires have been cut</span> ]
{{else}}
{{#if data.shock_timeleft > 0}}
[ <span class="bad">{{data.shock_timeleft}} seconds left</span> ]
{{/if}}
{{#if data.shock_timeleft == -1}}
[ <span class="bad">Permanent</span> ]
{{/if}}
{{/if}}
<div style='float:right'>
<ui-button icon='wrench' action='shock-restore' state='{{data.wires.shock && data.shock==0 ? null : "disabled"}}'>Restore</ui-button>
<ui-button icon='bolt' action='shock-temp' state='{{!data.wires.shock}}'>Set (Temporary)</ui-button>
<ui-button icon='bolt' action='shock-perm'state='{{!data.wires.shock}}'>Set (Permanent)</ui-button>
</div>
</ui-section>
</ui-display>
<ui-display title='Access & Door Control'>
<ui-section label='ID Scan'>
{{#if !data.wires.id_scanner}}
[ <span class="bad">Wires have been cut</span> ]
{{/if}}
<div style='float:right'>
<ui-button state='{{!data.wires.id_scanner}}' icon='power-off' action='idscan-on' style='{{data.id_scanner ? "selected" : ""}}'>Enabled</ui-button>
<ui-button state='{{!data.wires.id_scanner}}' icon='close' action='idscan-off' style='{{data.id_scanner ? "" : "selected"}}'>Disabled</ui-button>
</div>
</ui-section>
<ui-section label='Emergency Access'>
<div style='float:right'>
<ui-button icon='power-off' action='emergency-on' style='{{data.emergency ? "selected" : ""}}'>Enabled</ui-button>
<ui-button icon='close' action='emergency-off' style='{{data.emergency ? "" : "selected"}}'>Disabled</ui-button>
</div>
</ui-section>
<br />
<ui-section label='Door bolts'>
{{#if !data.wires.bolts}}
[ <span class="bad">Wires have been cut</span> ]
{{/if}}
<div style='float:right'>
<ui-button state='{{!data.wires.bolts}}'icon='unlock' action='bolt-raise' style='{{data.locked ? "" : "selected"}}'>Raised</ui-button>
<ui-button state='{{!data.wires.bolts}}'icon='lock' action='bolt-drop' style='{{data.locked ? "selected" : ""}}'>Dropped</ui-button>
</div>
</ui-section>
<ui-section label='Door bolt lights'>
{{#if !data.wires.lights}}
[ <span class="bad">Wires have been cut</span> ]
{{/if}}
<div style='float:right'>
<ui-button state='{{!data.wires.lights}}' icon='power-off' action='light-on' style='{{data.lights ? "selected" : ""}}'>Enabled</ui-button>
<ui-button state='{{!data.wires.lights}}' icon='close' action='light-off' style='{{data.lights ? "" : "selected"}}'>Disabled</ui-button>
</div>
</ui-section>
<ui-section label='Door force sensors'>
{{#if !data.wires.safe}}
[ <span class="bad">Wires have been cut</span> ]
{{/if}}
<div style='float:right'>
<ui-button state='{{!data.wires.safe}}' icon='power-off' action='safe-on' style='{{data.safe ? "selected" : ""}}'>Enabled</ui-button>
<ui-button state='{{!data.wires.safe}}' icon='close' action='safe-off' style='{{data.safe ? "" : "selected"}}'>Disabled</ui-button>
</div>
</ui-section>
<ui-section label='Door timing safety'>
{{#if !data.wires.timing}}
[ <span class="bad">Wires have been cut</span> ]
{{/if}}
<div style='float:right'>
<ui-button state='{{!data.wires.timing}}' icon='power-off' action='speed-on' style='{{data.speed ? "selected" : ""}}'>Enabled</ui-button>
<ui-button state='{{!data.wires.timing}}' icon='close' action='speed-off' style='{{data.speed ? "" : "selected"}}'>Disabled</ui-button>
</div>
</ui-section>
<br />
<ui-section label='Door control'>
{{#if data.locked || data.welded}}
[ <span class="bad">Door is {{(data.locked ? "bolted" : "") + (data.locked && data.welded ? " and " : "") + (data.welded ? "welded" : "")}}</span> ]
{{/if}}
<div style='float:right'>
<ui-button state='{{(data.locked || data.welded) || (data.opened && "disabled")}}' icon='sign-out' action='open-close'>Open door</ui-button>
<ui-button state='{{(data.locked || data.welded) || (!data.opened && "disabled")}}' icon='sign-in' action='open-close'>Close door</ui-button>
</div>
</ui-section>
</ui-display>
-51
View File
@@ -1,51 +0,0 @@
<link rel='ractive' href='./airalarm/scrubbers.ract'>
<link rel='ractive' href='./airalarm/status.ract'>
<link rel='ractive' href='./airalarm/thresholds.ract'>
<link rel='ractive' href='./airalarm/modes.ract'>
<link rel='ractive' href='./airalarm/vents.ract'>
<ui-notice>
{{#if data.siliconUser}}
<ui-section label='Interface Lock'>
<ui-button icon='{{data.locked ? "lock" : "unlock"}}' action='lock'>{{data.locked ? "Engaged" : "Disengaged"}}</ui-button>
</ui-section>
{{else}}
<span>Swipe an ID card to {{data.locked ? "unlock" : "lock"}} this interface.</span>
{{/if}}
</ui-notice>
<status/>
{{#if !data.locked || data.siliconUser}}
{{#if config.screen == "home"}}
<ui-display title='Air Controls'>
<ui-section>
<ui-button icon='{{data.atmos_alarm ? "exclamation-triangle" : "exclamation"}}' style='{{data.atmos_alarm ? "caution" : null}}'
action='{{data.atmos_alarm ? "reset" : "alarm"}}'>Area Atmosphere Alarm</ui-button>
</ui-section>
<ui-section>
<ui-button icon='{{data.mode == 3 ? "exclamation-triangle" : "exclamation"}}' style='{{data.mode == 3 ? "danger" : null}}'
action='mode' params='{"mode": {{data.mode == 3 ? 1 : 3}}}'>Panic Siphon</ui-button>
</ui-section>
<br/>
<ui-section>
<ui-button icon='sign-out' action='tgui:view' params='{"screen": "vents"}'>Vent Controls</ui-button>
</ui-section>
<ui-section>
<ui-button icon='filter' action='tgui:view' params='{"screen": "scrubbers"}'>Scrubber Controls</ui-button>
</ui-section>
<ui-section>
<ui-button icon='cog' action='tgui:view' params='{"screen": "modes"}'>Operating Mode</ui-button>
</ui-section>
<ui-section>
<ui-button icon='bar-chart' action='tgui:view' params='{"screen": "thresholds"}'>Alarm Thresholds</ui-button>
</ui-section>
</ui-display>
{{elseif config.screen == "vents"}}
<vents/>
{{elseif config.screen == "scrubbers"}}
<scrubbers/>
{{elseif config.screen == "modes"}}
<modes/>
{{elseif config.screen == "thresholds"}}
<thresholds/>
{{/if}}
{{/if}}
@@ -1 +0,0 @@
<ui-button icon='arrow-left' action='tgui:view' params='{"screen": "home"}'>Back</ui-button>
@@ -1,14 +0,0 @@
<link rel='ractive' href='./back.ract'>
<ui-display title='Operating Modes' button>
{{#partial button}}
<back/>
{{/partial}}
{{#each data.modes}}
<ui-section>
<ui-button icon='{{selected ? "check-square-o" : "square-o"}}'
state='{{selected ? danger ? "danger" : "selected" : null}}'
action='mode' params='{"mode": {{mode}}}'>{{name}}</ui-button>
</ui-section>
{{/each}}
</ui-display>
@@ -1,29 +0,0 @@
<link rel='ractive' href='./back.ract'>
<link rel='ractive' href='../scrubbing_types.ract' name='filters'>
<ui-display title='Scrubber Controls' button>
{{#partial button}}
<back/>
{{/partial}}
{{#each data.scrubbers}}
<ui-subdisplay title='{{long_name}}'>
<ui-section label='Power'>
<ui-button icon='{{power ? "power-off" : "close"}}' style='{{power ? "selected" : null}}'
action='power' params='{"id_tag": "{{id_tag}}", "val": {{+!power}}}'>{{power ? "On" : "Off"}}</ui-button>
</ui-section>
<ui-section label='Mode'>
<ui-button icon='{{scrubbing ? "filter" : "sign-in"}}' style='{{scrubbing ? null : "danger"}}'
action='scrubbing' params='{"id_tag": "{{id_tag}}", "val": {{+!scrubbing}}}'>{{scrubbing ? "Scrubbing" : "Siphoning"}}</ui-button>
</ui-section>
<ui-section label='Range'>
<ui-button icon='{{widenet ? "expand" : "compress"}}' style='{{widenet ? "selected" : null}}'
action='widenet' params='{"id_tag": "{{id_tag}}", "val": {{+!widenet}}}'>{{widenet ? "Expanded" : "Normal"}}</ui-button>
</ui-section>
<ui-section label='Filters'>
<filters/>
</ui-section>
</ui-subdisplay>
{{else}}
<span class='bad'>Error: No scrubbers connected.</span>
{{/each}}
</ui-display>
@@ -1,30 +0,0 @@
<ui-display title='Air Status'>
{{#if data.environment_data}}
{{#each adata.environment_data}}
<ui-section label='{{name}}'>
<span class='{{danger_level == 2 ? "bad" : danger_level == 1 ? "average" : "good"}}'>
{{Math.fixed(value, 2)}}{{unit}}
</span>
</ui-section>
{{/each}}
<ui-section label='Local Status'>
<span class='{{data.danger_level == 2 ? "bad bold" : data.danger_level == 1 ? "average bold" : "good"}}'>
{{data.danger_level == 2 ? "Danger (Internals Required)" : data.danger_level == 1 ? "Caution" : "Optimal"}}
</span>
</ui-section>
<ui-section label='Area Status'>
<span class='{{data.atmos_alarm || data.fire_alarm ? "bad bold" : "good"}}'>
{{data.atmos_alarm ? "Atmosphere Alarm" : fire_alarm ? "Fire Alarm" : "Nominal"}}
</span>
</ui-section>
{{else}}
<ui-section label='Warning'>
<span class='bad bold'>Cannot obtain air sample for analysis.</span>
</ui-section>
{{/if}}
{{#if data.emagged}}
<ui-section label='Warning'>
<span class='bad bold'>Safety measures offline. Device may exhibit abnormal behavior.</span>
</ui-section>
{{/if}}
</ui-display>
@@ -1,31 +0,0 @@
<link rel='ractive' href='./back.ract'>
<ui-display title='Alarm Thresholds' button>
{{#partial button}}
<back/>
{{/partial}}
<table>
<thead><tr>
<th></th>
<th><span class="bad">min2</span></th>
<th><span class="average">min1</span></th>
<th><span class="average">max1</span></th>
<th><span class="bad">max2</span></th>
</tr></thead>
<tbody>
{{#each data.thresholds}}<tr>
<th>{{{name}}}</th>
{{#each settings}}<td>
<ui-button action='threshold' params='{"env": "{{env}}", "var": "{{val}}"}'>{{Math.fixed(selected, 2)}}</ui-button>
</td>{{/each}}
</tr>{{/each}}
</tbody>
<table>
</ui-display>
<style>
th, td {
padding-right: 16px;
text-align: left;
}
</style>
@@ -1,42 +0,0 @@
<link rel='ractive' href='./back.ract'>
<ui-display title='Vent Controls' button>
{{#partial button}}
<back/>
{{/partial}}
{{#each data.vents}}
<ui-subdisplay title='{{long_name}}'>
<ui-section label='Power'>
<ui-button icon='{{power ? "power-off" : "close"}}' style='{{power ? "selected" : null}}'
action='power' params='{"id_tag": "{{id_tag}}", "val": {{+!power}}}'>{{power ? "On" : "Off"}}</ui-button>
</ui-section>
<ui-section label='Mode'>
<span>{{direction == "release" ? "Pressurizing" : "Siphoning"}}</span>
</ui-section>
<ui-section label='Pressure Regulator'>
<ui-button icon='sign-in' style='{{incheck ? "selected" : null}}'
action='incheck' params='{"id_tag": "{{id_tag}}", "val": {{checks}}}'>Internal</ui-button>
<ui-button icon='sign-out' style='{{excheck ? "selected" : null}}'
action='excheck' params='{"id_tag": "{{id_tag}}", "val": {{checks}}}'>External</ui-button>
</ui-section>
{{#if incheck}}
<ui-section label='Internal Target Pressure'>
<ui-button icon='pencil' action='set_internal_pressure'
params='{"id_tag": "{{id_tag}}"}'>{{Math.fixed(internal)}}</ui-button>
<ui-button icon='refresh' state='{{intdefault ? "disabled" : null}}' action='reset_internal_pressure'
params='{"id_tag": "{{id_tag}}"}'>Reset</ui-button>
</ui-section>
{{/if}}
{{#if excheck}}
<ui-section label='External Target Pressure'>
<ui-button icon='pencil' action='set_external_pressure'
params='{"id_tag": "{{id_tag}}"}'>{{Math.fixed(external)}}</ui-button>
<ui-button icon='refresh' state='{{extdefault ? "disabled" : null}}' action='reset_external_pressure'
params='{"id_tag": "{{id_tag}}"}'>Reset</ui-button>
</ui-section>
{{/if}}
</ui-subdisplay>
{{else}}
<span class='bad'>Error: No vents connected.</span>
{{/each}}
</ui-display>
@@ -1,45 +0,0 @@
<ui-display>
<ui-section>
<ui-button icon='{{data.oneAccess ? "unlock" : "lock"}}' action='one_access'>{{data.oneAccess ? "One" : "All"}} Required</ui-button>
<ui-button icon='refresh' action='clear'>Clear</ui-button>
</ui-section>
<hr/>
<table>
<thead>
<tr>{{#each data.regions}}
<th><span class='highlight bold'>{{name}}</span></th>
{{/each}}</tr>
</thead>
<tbody>
<tr>{{#each data.regions}}
<td>{{#each accesses}}
<ui-button icon='{{req ? "check-square-o" : "square-o"}}' style='{{req ? "selected" : null}}'
action='set' params='{"access": "{{id}}"}'>{{name}}</ui-button>
<br/>
{{/each}}</td>
{{/each}}</tr>
</tbody>
</table>
<hr/>
<span class='highlight bold'>Unrestricted Access:</span>
<ui-button icon='{{data.unres_direction & 1 ? "check-square-o" : "square-o"}}' style='{{data.unres_direction & 1 ? "selected" : null}}' action='direc_set' params='{"unres_direction": "1"}'>North</ui-button>
<ui-button icon='{{data.unres_direction & 4 ? "check-square-o" : "square-o"}}' style='{{data.unres_direction & 4 ? "selected" : null}}' action='direc_set' params='{"unres_direction": "4"}'>East</ui-button>
<ui-button icon='{{data.unres_direction & 2 ? "check-square-o" : "square-o"}}' style='{{data.unres_direction & 2 ? "selected" : null}}' action='direc_set' params='{"unres_direction": "2"}'>South</ui-button>
<ui-button icon='{{data.unres_direction & 8 ? "check-square-o" : "square-o"}}' style='{{data.unres_direction & 8 ? "selected" : null}}' action='direc_set' params='{"unres_direction": "8"}'>West</ui-button>
</ui-display>
<style>
table {
width: 100%;
border-spacing: 2px;
}
th {
text-align: left;
}
td {
vertical-align: top;
}
td .button {
margin-top: 4px
}
</style>
@@ -1,10 +0,0 @@
&.airlock_electronics
table
width: 100%
border-spacing: 2px
th
text-align: left
td
vertical-align: top
.button
margin-top: 4px
-151
View File
@@ -1,151 +0,0 @@
<script>
component.exports = {
data: {
powerState (status) {
switch (status) {
case 2: return 'good'
case 1: return 'average'
default: return 'bad'
}
}
},
computed: {
malfAction () {
switch (this.get('data.malfStatus')) {
case 1: return 'hack'
case 2: return 'occupy'
case 3: return 'deoccupy'
}
},
malfButton () {
switch (this.get('data.malfStatus')) {
case 1: return 'Override Programming'
case 2:
case 4: return 'Shunt Core Process'
case 3: return 'Return to Main Core'
}
},
malfIcon () {
switch (this.get('data.malfStatus')) {
case 1: return 'terminal'
case 2:
case 4: return 'caret-square-o-down'
case 3: return 'caret-square-o-left'
}
},
powerCellStatusState () {
const status = this.get('data.powerCellStatus')
if (status > 50) return 'good'
else if (status > 25) return 'average'
else return 'bad'
}
}
}
</script>
{{#if data.failTime}}
<ui-notice>
<b><h3>SYSTEM FAILURE</h3></b>
<i>I/O regulators malfunction detected! Waiting for system reboot...</i><br>
Automatic reboot in {{data.failTime}} seconds...
<ui-button icon='refresh' action='reboot'>Reboot Now</ui-button><br><br><br>
</ui-notice>
{{else}}
<ui-notice>
{{#if data.siliconUser}}
<ui-section label='Interface Lock'>
<ui-button icon='{{data.locked ? "lock" : "unlock"}}' action='lock'>{{data.locked ? "Engaged" : "Disengaged"}}</ui-button>
</ui-section>
{{else}}
<span>Swipe an ID card to {{data.locked ? "unlock" : "lock"}} this interface.</span>
{{/if}}
</ui-notice>
<ui-display title='Power Status'>
<ui-section label='Main Breaker'>
{{#if data.locked && !data.siliconUser}}
<span class='{{data.isOperating ? "good" : "bad"}}'>{{data.isOperating ? "On" : "Off"}}</span>
{{else}}
<ui-button icon='{{data.isOperating ? "power-off" : "close"}}' style='{{data.isOperating ? "selected" : null}}'
action='breaker'>{{data.isOperating ? "On" : "Off"}}</ui-button>
{{/if}}
</ui-section>
<ui-section label='External Power'>
<span class='{{powerState(data.externalPower)}}'>{{data.externalPower == 2 ? "Good" : data.externalPower == 1 ? "Low" : "None"}}</span>
</ui-section>
<ui-section label='Power Cell'>
{{#if data.powerCellStatus != null}}
<ui-bar min='0' max='100' value='{{data.powerCellStatus}}' state='{{powerCellStatusState}}'>{{Math.fixed(adata.powerCellStatus)}}%</ui-bar>
{{else}}
<span class='bad'>Removed</span>
{{/if}}
</ui-section>
{{#if data.powerCellStatus != null}}
<ui-section label='Charge Mode'>
{{#if data.locked && !data.siliconUser}}
<span class='{{data.chargeMode ? "good" : "bad"}}'>{{data.chargeMode ? "Auto" : "Off"}}</span>
{{else}}
<ui-button icon='{{data.chargeMode ? "refresh" : "close"}}' style='{{data.chargeMode ? "selected" : null}}'
action='charge'>{{data.chargeMode ? "Auto" : "Off"}}</ui-button>
{{/if}}
&nbsp;
[<span class='{{powerState(data.chargingStatus)}}'>{{data.chargingStatus == 2 ? "Fully Charged" : data.chargingStatus == 1 ? "Charging" : "Not Charging"}}</span>]
</ui-section>
{{/if}}
</ui-display>
<ui-display title='Power Channels'>
{{#each data.powerChannels}}
<ui-section label='{{title}}' nowrap>
<div class='content'>{{adata.powerChannels[@index].powerLoad}}</div>
<div class='content'><span class='{{status >= 2 ? "good" : "bad"}}'>{{status >= 2 ? "On" : "Off"}}</span></div>
<div class='content'>[<span>{{status == 1 || status == 3 ? "Auto" : "Manual"}}</span>]</div>
<div class='content' style='float:right'>
{{#if !data.locked || data.siliconUser}}
<ui-button icon='refresh' state='{{status == 1 || status == 3 ? "selected" : null}}'
action='channel' params='{{topicParams.auto}}'>Auto</ui-button>
<ui-button icon='power-off' state='{{status == 2 ? "selected" : null}}' action='channel'
params='{{topicParams.on}}'>On</ui-button>
<ui-button icon='close' state='{{status == 0 ? "selected" : null}}' action='channel'
params='{{topicParams.off}}'>Off</ui-button>
{{/if}}
</div>
</ui-section>
{{/each}}
<ui-section label='Total Load'>
<span class='bold'>{{adata.totalLoad}}</span>
</ui-section>
</ui-display>
{{#if data.siliconUser}}
<ui-display title='System Overrides'>
<ui-button icon='lightbulb-o' action='overload'>Overload</ui-button>
{{#if data.malfStatus}}
<ui-button icon='{{malfIcon}}' state='{{data.malfStatus == 4 ? "disabled" : null}}' action='{{malfAction}}'>{{malfButton}}</ui-button>
{{/if}}
</ui-display>
{{/if}}
<ui-notice>
<ui-section label='Emergency Light Fallback'>
{{#if data.locked && !data.siliconUser}}
<span>{{data.emergencyLights ? "Enabled" : "Disabled"}}</span>
{{else}}
<ui-button icon='lightbulb-o' action='emergency_lighting'>{{data.emergencyLights ? "Enabled" : "Disabled"}}</ui-button>
{{/if}}
</ui-section>
</ui-notice>
<ui-notice>
<ui-section label='Night Shift Lighting'>
{{#if data.locked && !data.siliconUser}}
<span>{{data.nightshiftLights ? "Enabled" : "Disabled"}}</span>
{{else}}
<ui-button icon='lightbulb-o' action='toggle_nightshift'>{{data.nightshiftLights ? "Enabled" : "Disabled"}}</ui-button>
{{/if}}
</ui-section>
</ui-notice>
<ui-notice>
<ui-section label='Cover Lock'>
{{#if data.locked && !data.siliconUser}}
<span>{{data.coverLocked ? "Engaged" : "Disengaged"}}</span>
{{else}}
<ui-button icon='{{data.coverLocked ? "lock" : "unlock"}}' action='cover'>{{data.coverLocked ? "Engaged" : "Disengaged"}}</ui-button>
{{/if}}
</ui-section>
</ui-notice>
{{/if}}
-14
View File
@@ -1,14 +0,0 @@
<ui-display title='Alarms'>
<ul>
{{#each data.priority}}
<li><ui-button icon='close' style='danger' action='clear' params='{"zone": "{{.}}"}'>{{.}}</ui-button></li>
{{else}}
<li><span class='good'>No Priority Alerts</span></li>
{{/each}}
{{#each data.minor}}
<li><ui-button icon='close' style='caution' action='clear' params='{"zone": "{{.}}"}'>{{.}}</ui-button></li>
{{else}}
<li><span class='good'>No Minor Alerts</span></li>
{{/each}}
</ul>
</ui-display>
@@ -1,40 +0,0 @@
<ui-display title='{{data.tank ? data.sensors[0].long_name : null}}'>
{{#each adata.sensors}}
<ui-subdisplay title='{{!data.tank ? long_name : null}}'>
<ui-section label='Pressure'>
<span>{{Math.fixed(pressure, 2)}} kPa</span>
</ui-section>
{{#if temperature}}
<ui-section label='Temperature'>
<span>{{Math.fixed(temperature, 2)}} K</span>
</ui-section>
{{/if}}
{{#each gases:id}}
<ui-section label='{{id}}'>
<span>{{Math.fixed(., 2)}}%</span>
</ui-section>
{{/each}}
</ui-subdisplay>
{{/each}}
</ui-display>
{{#if data.tank}}
<ui-display title='Controls' button>
{{#partial button}}
<ui-button icon='refresh' action='reconnect'>Reconnect</ui-button>
{{/partial}}
<ui-section label='Input Injector'>
<ui-button icon='{{data.inputting ? "power-off" : "close"}}' style='{{data.inputting ? "selected" : null}}' action='input'>
{{data.inputting ? "Injecting": "Off"}}</ui-button>
</ui-section>
<ui-section label='Input Rate'>
<span>{{Math.fixed(adata.inputRate)}} L/s</span>
</ui-section>
<ui-section label='Output Regulator'>
<ui-button icon='{{data.outputting ? "power-off" : "close"}}' style='{{data.outputting ? "selected" : null}}' action='output'>
{{data.outputting ? "Open": "Closed"}}</ui-button>
</ui-section>
<ui-section label='Output Pressure'>
<ui-button icon='pencil' action='pressure'>{{Math.round(adata.outputPressure)}} kPa</ui-button>
</ui-section>
</ui-display>
{{/if}}
@@ -1,17 +0,0 @@
<ui-display>
<ui-section label='Power'>
<ui-button icon='{{data.on ? "power-off" : "close"}}' style='{{data.on ? "selected" : null}}'
action='power'>{{data.on ? "On" : "Off"}}</ui-button>
</ui-section>
<ui-section label='Transfer Rate'>
<ui-button icon='pencil' action='rate' params='{"rate": "input"}'>Set</ui-button>
<ui-button icon='plus' state='{{data.rate == data.max_rate ? "disabled" : null}}' action='rate' params='{"rate": "max"}'>Max</ui-button>
<span>{{Math.round(adata.rate)}} L/s</span>
</ui-section>
<ui-section label='Filter'>
{{#each data.filter_types}}
<ui-button state='{{selected ? "selected" : null}}'
action='filter' params='{"mode": {{id}}}'>{{name}}</ui-button>
{{/each}}
</ui-section>
</ui-display>
-33
View File
@@ -1,33 +0,0 @@
<ui-display>
<ui-section label='Power'>
<ui-button icon='{{data.on ? "power-off" : "close"}}' style='{{data.on ? "selected" : null}}'
action='power'>{{data.on ? "On" : "Off"}}</ui-button>
</ui-section>
<ui-section label='Output Pressure'>
<ui-button icon='pencil' action='pressure' params='{"pressure": "input"}'>Set</ui-button>
<ui-button icon='plus' state='{{data.set_pressure == data.max_pressure ? "disabled" : null}}' action='pressure' params='{"pressure": "max"}'>Max</ui-button>
<span>{{Math.round(adata.set_pressure)}} kPa</span>
</ui-section>
<ui-section label='Node 1'>
<ui-button icon='fast-backward' state='{{data.node1_concentration == 0 ? "disabled" : null}}'
action='node1' params='{"concentration": -0.1}'/>
<ui-button icon='backward' state='{{data.node1_concentration == 0 ? "disabled" : null}}'
action='node1' params='{"concentration": -0.01}'/>
<ui-button icon='forward' state='{{data.node1_concentration == 100 ? "disabled" : null}}'
action='node1' params='{"concentration": 0.01}'/>
<ui-button icon='fast-forward' state='{{data.node1_concentration == 100 ? "disabled" : null}}'
action='node1' params='{"concentration": 0.1}'/>
<span>{{Math.round(adata.node1_concentration)}}%</span>
</ui-section>
<ui-section label='Node 2'>
<ui-button icon='fast-backward' state='{{data.node2_concentration == 0 ? "disabled" : null}}'
action='node2' params='{"concentration": -0.1}'/>
<ui-button icon='backward' state='{{data.node2_concentration == 0 ? "disabled" : null}}'
action='node2' params='{"concentration": -0.01}'/>
<ui-button icon='forward' state='{{data.node2_concentration == 100 ? "disabled" : null}}'
action='node2' params='{"concentration": 0.01}'/>
<ui-button icon='fast-forward' state='{{data.node2_concentration == 100 ? "disabled" : null}}'
action='node2' params='{"concentration": 0.1}'/>
<span>{{Math.round(adata.node2_concentration)}}%</span>
</ui-section>
</ui-display>
-19
View File
@@ -1,19 +0,0 @@
<ui-display>
<ui-section label='Power'>
<ui-button icon='{{data.on ? "power-off" : "close"}}' style='{{data.on ? "selected" : null}}'
action='power'>{{data.on ? "On" : "Off"}}</ui-button>
</ui-section>
{{#if data.max_rate}}
<ui-section label='Transfer Rate'>
<ui-button icon='pencil' action='rate' params='{"rate": "input"}'>Set</ui-button>
<ui-button icon='plus' state='{{data.rate == data.max_rate ? "disabled" : null}}' action='rate' params='{"rate": "max"}'>Max</ui-button>
<span>{{Math.round(adata.rate)}} L/s</span>
</ui-section>
{{else}}
<ui-section label='Output Pressure'>
<ui-button icon='pencil' action='pressure' params='{"pressure": "input"}'>Set</ui-button>
<ui-button icon='plus' state='{{data.pressure == data.max_pressure ? "disabled" : null}}' action='pressure' params='{"pressure": "max"}'>Max</ui-button>
<span>{{Math.round(adata.pressure)}} kPa</span>
</ui-section>
{{/if}}
</ui-display>
@@ -1,12 +0,0 @@
<ui-display>
<ui-section label='Open Pressure'>
<ui-button icon='pencil' action='open_pressure' params='{"open_pressure": "input"}'>Set</ui-button>
<ui-button icon='plus' state='{{data.open_pressure == data.max_pressure ? "disabled" : null}}' action='open_pressure' params='{"open_pressure": "max"}'>Max</ui-button>
<span>{{Math.round(adata.open_pressure)}} kPa</span>
</ui-section>
<ui-section label='Close Pressure'>
<ui-button icon='pencil' action='close_pressure' params='{"close_pressure": "input"}'>Set</ui-button>
<ui-button icon='plus' state='{{data.close_pressure == data.open_pressure ? "disabled" : null}}' action='close_pressure' params='{"close_pressure": "max"}'>Max</ui-button>
<span>{{Math.round(adata.close_pressure)}} kPa</span>
</ui-section>
</ui-display>
-46
View File
@@ -1,46 +0,0 @@
<ui-display title='{{data.borg.name}}' button>
{{#partial button}}
<ui-button icon='pencil' action='rename'>Rename</ui-button>
{{/partial}}
<ui-section label='Status'>
<ui-button icon='{{data.borg.emagged ? "check-square-o" : "square-o"}}' style='{{data.borg.emagged ? "selected" : null}}' action='toggle_emagged'>Emagged</ui-button>
<ui-button icon='{{data.borg.lockdown ? "check-square-o" : "square-o"}}' style='{{data.borg.lockdown ? "selected" : null}}' action='toggle_lockdown'>Locked down</ui-button>
<ui-button icon='{{data.borg.scrambledcodes ? "check-square-o" : "square-o"}}' style='{{data.borg.scrambledcodes ? "selected" : null}}' action='toggle_scrambledcodes'>Scrambled codes</ui-button>
</ui-section>
<ui-section label='Charge'>
{{#if !data.cell.missing}}
<ui-bar min='0' max='{{data.cell.maxcharge}}' value='{{data.cell.charge}}'>{{Math.round(data.cell.charge)}} / {{Math.round(data.cell.maxcharge)}}</ui-bar>
{{else}}
<span class='warning'>Cell missing</span><br/>
{{/if}}
<ui-button icon='pencil' action='set_charge'>Set</ui-button><ui-button icon='eject' action='change_cell'>Change</ui-button><ui-button icon='trash' class='bad' action='remove_cell'>Remove</ui-button>
</ui-section>
<ui-section label='Radio channels'>
{{#each data.channels}}
<ui-button icon='{{installed ? "check-square-o" : "square-o"}}' style='{{installed ? "selected" : null}}' action='toggle_radio' params='{"channel": "{{name}}"}'>{{name}}</ui-button>
{{/each}}
</ui-section>
<ui-section label='Module'>
{{#each data.modules}}
<ui-button icon='{{data.borg.active_module == type ? "check-square-o" : "square-o"}}' style='{{data.borg.active_module == type ? "selected" : null}}' action='setmodule' params='{"module": "{{type}}"}'>{{name}}</ui-button>
{{/each}}
</ui-section>
<ui-section label='Upgrades'>
{{#each data.upgrades}}
<ui-button icon='{{installed ? "check-square-o" : "square-o"}}' style='{{installed ? "selected" : null}}' action='toggle_upgrade' params='{"upgrade": "{{type}}"}'>{{name}}</ui-button>
{{/each}}
</ui-section>
<ui-section label='Master AI'>
{{#each data.ais}}
<ui-button icon='{{connected ? "check-square-o" : "square-o"}}' style='{{connected ? "selected" : null}}' action='slavetoai' params='{"slavetoai": "{{ref}}"}'>{{name}}</ui-button>
{{/each}}
</ui-section>
</ui-display>
<ui-display title='Laws' button>
{{#partial button}}
<ui-button icon='{{data.borg.lawupdate ? "check-square-o" : "square-o"}}' style='{{data.borg.lawupdate ? "selected" : null}}' action='toggle_lawupdate'>Lawsync</ui-button>
{{/partial}}
{{#each data.laws}}
<p>{{this}}</p>
{{/each}}
</ui-display>
-18
View File
@@ -1,18 +0,0 @@
<ui-display title='Cell Timer' button>
{{#partial button}}
<ui-button icon='clock-o' style='{{data.timing ? "selected" : null}}' action='{{data.timing ? "stop" : "start"}}'>{{data.timing ? "Stop" : "Start"}}</ui-button>
<ui-button icon='lightbulb-o' action='flash' style='{{data.flash_charging ? "disabled" : null}}'>{{data.flash_charging ? "Recharging" : "Flash"}}</ui-button>
{{/partial}}
<ui-section>
<ui-button icon='fast-backward' action='time' params='{"adjust": -600}'></ui-button>
<ui-button icon='backward' action='time' params='{"adjust": -100}'></ui-button>
<span>{{text.zeroPad(data.minutes, 2)}}:{{text.zeroPad(data.seconds, 2)}}</span>
<ui-button icon='forward' action='time' params='{"adjust": 100}'></ui-button>
<ui-button icon='fast-forward' action='time' params='{"adjust": 600}'></ui-button>
</ui-section>
<ui-section>
<ui-button icon='hourglass-start' action='preset' params='{"preset": "short"}'>Short</ui-button>
<ui-button icon='hourglass-start' action='preset' params='{"preset": "medium"}'>Medium</ui-button>
<ui-button icon='hourglass-start' action='preset' params='{"preset": "long"}'>Long</ui-button>
</ui-section>
</ui-display>
-26
View File
@@ -1,26 +0,0 @@
{{#if data.notice}}
<ui-notice>
{{data.notice}}
</ui-notice>
{{/if}}
<ui-display title='Bluespace Artillery Control' button>
{{#if data.connected}}
<ui-section label='Target'>
<ui-button icon='crosshairs' action='recalibrate'>{{data.target}}</ui-button>
</ui-section>
<ui-section label='Controls'>
{{#if !data.unlocked}}
<ui-notice>
<span>Bluespace Artillery firing protocols must be globally unlocked from two keycard authentication devices first!</span>
</ui-notice>
{{else}}
<ui-button icon='warning' state='{{data.ready ? null : "disabled"}}' action='fire'>FIRE!</ui-button>
{{/if}}
</ui-section>
{{/if}}
{{#if !data.connected}}
<ui-section label='Maintenance'>
<ui-button icon='wrench' action='build'>Complete Deployment.</ui-button>
</ui-section>
{{/if}}
</ui-display>
-84
View File
@@ -1,84 +0,0 @@
<ui-notice>
<span>The regulator {{data.hasHoldingTank ? "is" : "is not"}} connected to a tank.</span>
</ui-notice>
<ui-display title='Canister' button>
{{#partial button}}
<ui-button icon='pencil' action='relabel'>Relabel</ui-button>
{{/partial}}
<ui-section label='Pressure'>
<span>{{Math.round(adata.tankPressure)}} kPa</span>
</ui-section>
<ui-section label='Port'>
<span class='{{data.portConnected ? "good" : "average"}}'>{{data.portConnected ? "Connected" : "Not Connected"}}</span>
</ui-section>
{{#if data.isPrototype}}
<ui-section label='Access'>
<ui-button icon='{{data.restricted ? "lock" : "unlock"}}'
style='{{"caution"}}'
action='restricted'>{{data.restricted ? "Restricted to Engineering" : "Public"}}</ui-button>
</ui-section>
{{/if}}
</ui-display>
<ui-display title='Valve'>
<ui-section label='Release Pressure'>
<ui-bar min='{{data.minReleasePressure}}' max='{{data.maxReleasePressure}}'
value='{{data.releasePressure}}'>{{Math.round(adata.releasePressure)}} kPa</ui-bar>
</ui-section>
<ui-section label='Pressure Regulator'>
<ui-button icon='refresh' state='{{data.releasePressure != data.defaultReleasePressure ? null : "disabled"}}'
action='pressure' params='{"pressure": "reset"}'>Reset</ui-button>
<ui-button icon='minus' state='{{data.releasePressure > data.minReleasePressure ? null : "disabled"}}'
action='pressure' params='{"pressure": "min"}'>Min</ui-button>
<ui-button icon='pencil' action='pressure' params='{"pressure": "input"}'>Set</ui-button>
<ui-button icon='plus' state='{{data.releasePressure < data.maxReleasePressure ? null : "disabled"}}'
action='pressure' params='{"pressure": "max"}'>Max</ui-button>
</ui-section>
<ui-section label='Valve'>
<ui-button icon='{{data.valveOpen ? "unlock" : "lock"}}'
style='{{data.valveOpen ? data.hasHoldingTank ? "caution" : "danger" : null}}'
action='valve'>{{data.valveOpen ? "Open" : "Closed"}}</ui-button>
</ui-display>
{{#if data.isPrototype}}
<ui-display title='Valve Toggle Timer'>
{{^data.timing}}
<ui-section label='Adjust Timer'>
<ui-button icon='refresh' state='{{data.timer_is_not_default ? null : "disabled"}}'
action='timer' params='{"change": "reset"}'>Reset</ui-button>
<ui-button icon='minus' state='{{data.timer_is_not_min ? null : "disabled"}}'
action='timer' params='{"change": "decrease"}'>Decrease</ui-button>
<ui-button icon='pencil' state='{{"disabled"}}'
action='timer' params='{"change": "input"}'>Set</ui-button>
<ui-button icon='plus' state='{{data.timer_is_not_max ? null : "disabled"}}'
action='timer' params='{"change": "increase"}'>Increase</ui-button>
</ui-section>
{{/data.timing}}
<ui-section label='Timer'>
<ui-button icon='clock-o' style='{{data.timing ? "danger" : "caution"}}'
action='toggle_timer'> {{data.timing ? "On" : "Off"}}
</ui-button>
<ui-section label='Time until Valve Toggle'>
<span>{{data.timing ? data.time_left : data.timer_set}}</span>
</ui-section>
</ui-display>
{{/if}}
<ui-display title='Holding Tank' button>
{{#partial button}}
{{#if data.hasHoldingTank}}
<ui-button icon='eject' style='{{data.valveOpen ? "danger" : null}}' action='eject'>Eject</ui-button>
{{/if}}
{{/partial}}
{{#if data.hasHoldingTank}}
<ui-section label='Label'>
{{data.holdingTank.name}}
</ui-section>
<ui-section label='Pressure'>
{{Math.round(adata.holdingTank.tankPressure)}} kPa
</ui-section>
{{else}}
<ui-section>
<span class='average'>No Holding Tank</span>
</ui-section>
{{/if}}
</ui-display>
-90
View File
@@ -1,90 +0,0 @@
<script>
component.exports = {
computed: {
tabs () {
return Object.keys(this.get('data.supplies'))
}
}
}
</script>
<ui-display title='Cargo'>
<ui-section label='Shuttle'>
{{#if data.docked && !data.requestonly}}
<ui-button action='send'>{{data.location}}</ui-button>
{{else}}
<span>{{data.location}}</span>
{{/if}}
</ui-section>
<ui-section label='Credits'>
<span>{{Math.floor(adata.points)}}</span>
</ui-section>
<ui-section label='CentCom Message'>
<span>{{data.message}}</span>
</ui-section>
{{#if data.loan && !data.requestonly}}
<ui-section label='Loan'>
{{#if !data.loan_dispatched}}
<ui-button
state='{{data.away && data.docked ? null : "disabled"}}'
action='loan'>Loan Shuttle</ui-button>
{{else}}
<span class='bad'>Loaned to CentCom</span>
{{/if}}
</ui-section>
{{/if}}
</ui-display>
{{#if !data.requestonly}}
<ui-display title='Cart' button>
{{#partial button}}
<ui-button icon='close' state='{{data.cart.length ? null : "disabled"}}' action='clear'>Clear</ui-button>
{{/partial}}
{{#each data.cart}}
<ui-section candystripe nowrap>
<div class='content'>#{{id}}</div>
<div class='content'>{{object}}</div>
<div class='content'>{{cost}} Credits</div>
<div class='content'>
<ui-button icon='minus' action='remove' params='{"id": "{{id}}"}'/>
</div>
</ui-section>
{{else}}
<span>Nothing in Cart</span>
{{/each}}
</ui-display>
{{/if}}
<ui-display title='Requests' button>
{{#partial button}}
{{#if !data.requestonly}}
<ui-button icon='close' state='{{data.requests.length ? null : "disabled"}}' action='denyall'>Clear</ui-button>
{{/if}}
{{/partial}}
{{#each data.requests}}
<ui-section candystripe nowrap>
<div class='content'>#{{id}}</div>
<div class='content'>{{object}}</div>
<div class='content'>{{cost}} Credits</div>
<div class='content'>By {{orderer}}</div>
<div class='content'>Comment: {{reason}}</div>
{{#if !data.requestonly}}
<div class='content'>
<ui-button icon='check' action='approve' params='{"id": "{{id}}"}'/>
<ui-button icon='close' action='deny' params='{"id": "{{id}}"}'/>
</div>
{{/if}}
</ui-section>
{{else}}
<span>No Requests</span>
{{/each}}
</ui-display>
<ui-tabs tabs='{{tabs}}'>
{{#each data.supplies}}
<tab name='{{name}}'>
{{#each packs}}
<ui-section label='{{name}}' candystripe right>
<ui-button tooltip='{{desc}}' tooltip-side='left' action='add' params='{"id": "{{id}}"}'>{{cost}} Credits</ui-button>
</ui-section>
{{/each}}
</tab>
{{/each}}
</ui-tabs>
@@ -1,50 +0,0 @@
<script>
component.exports = {
computed: {
tabs () {
return Object.keys(this.get('data.supplies'))
}
}
}
</script>
<ui-notice>
{{#if data.siliconUser }}
<ui-section label='Interface Lock'>
<ui-button icon='{{data.locked ? "lock" : "unlock"}}' action='lock'>{{data.locked ? "Engaged" : "Disengaged"}}</ui-button>
</ui-section>
{{else}}
<span>Swipe a QM-Level ID card to {{data.locked ? "unlock" : "lock"}} this interface.</span>
{{/if}}
</ui-notice>
{{#if !data.locked }}
<ui-display title='Express Cargo Console'>
<ui-section label='Landing Location'>
<ui-button state='{{data.usingBeacon ? null : "selected"}}' action='LZCargo'> Cargo Bay</ui-button>
<ui-button state='{{data.hasBeacon ? data.usingBeacon ? "selected" : null : "disabled"}}' action='LZBeacon'> {{data.beaconzone}} ({{data.beaconName}})</ui-button>
<ui-button state='{{data.canBuyBeacon ? null : "disabled"}}' action='printBeacon'> {{data.printMsg}}</ui-button>
</ui-section>
<ui-section label='Credits'>
<span>{{Math.floor(adata.points)}}</span>
</ui-section>
<ui-section label='Notice'>
<span>{{data.message}}</span>
</ui-section>
</ui-display>
<ui-tabs tabs='{{tabs}}'>
{{#each data.supplies}}
<tab name='{{name}}'>
{{#each packs}}
<ui-section label='{{name}}' candystripe right>
<ui-button state='{{data.canBeacon ? null : "disabled"}}' tooltip='{{desc}}' tooltip-side='left' action='add' params='{"id": "{{id}}"}'>{{cost}} Credits {{data.beaconError}}</ui-button>
</ui-section>
{{/each}}
</tab>
{{/each}}
</ui-tabs>
{{/if}}
@@ -1,25 +0,0 @@
<ui-display title="Cellular Emporium" button>
<ui-button icon='refresh' state='{{data.can_readapt ? null : "disabled"}}'
action='readapt'>Readapt</ui-button>
<ui-section label='Genetic Points Remaining' right>
{{data.genetic_points_remaining}}
</ui-section>
</ui-display>
<ui-display>
{{#each data.abilities}}
<ui-section label='{{name}}' candystripe right>
<span>{{desc}}</span>
<span>{{helptext}}</span>
<span>Cost: {{dna_cost}}</span>
<ui-button
state='{{owned ? "selected" : can_purchase ? null : "disabled"}}'
action='evolve'
params='{"name": "{{name}}"}'>
{{owned ? "Evolved" : "Evolve"}}
</ui-button>
</ui-section>
{{/each}}
{{^data.abilities}}
<span class='warning'>No abilities available.</span>
{{/data.abilities}}
</ui-display>
@@ -1,158 +0,0 @@
<ui-notice>
<span>To use this, simply spawn the atoms you want in one of the five Centcom Supplypod Bays. Items in the bay will then be launched inside your supplypod, one turf-full at a time! You can optionally use the following buttons to configure how the supplypod acts.</span>
</ui-notice>
<ui-display title='Centcom Pod Customization (to be used against helen weinstein)'>
<ui-section label='Which supplypod bay will you use?'>
<ui-button style='{{data.bayNumber == 1 ? "selected" : null}}' action='bay1'>Bay #1</ui-button>
<ui-button style='{{data.bayNumber == 2 ? "selected" : null}}' action='bay2'>Bay #2</ui-button>
<ui-button style='{{data.bayNumber == 3 ? "selected" : null}}' action='bay3'>Bay #3</ui-button>
<ui-button style='{{data.bayNumber == 4 ? "selected" : null}}' action='bay4'>Bay #4</ui-button>
<ui-button style='{{data.bayNumber == 5 ? "selected" : null}}' action='bay5' tooltip-side='left' tooltip='This bay is located on the western edge of CentCom. Its the glass room directly west of where ERT spawn, and south of the CentCom ferry. Useful for launching ERT/Deathsquads/etc. onto the station via drop pods.'>ERT Bay</ui-button>
</ui-section>
<ui-section label='Teleport to:'>
<ui-button action='teleportCentcom'>{{data.bay}}</ui-button>
<ui-button state='{{data.oldArea ? null : "disabled"}}'action='teleportBack'>{{data.oldArea ? data.oldArea : "where you were"}}</ui-button>
</ui-section>
<ui-section label='Launch the real atoms?'>
<ui-button style='{{data.launchClone ? "selected" : null}}' action='launchClone' tooltip-side='left' tooltip='Choosing this will create a duplicate of the item to be launched in Centcom, allowing you to send one type of item multiple times. Either way, the atoms are forceMoved into the supplypod after it lands (but before it opens).'>Launch Clones</ui-button>
</ui-section>
<ui-section label='Launch all at once?'>
<ui-button style='{{data.launchChoice == 1 ? "selected" : null}}' action='launchOrdered' tooltip-side='left'
tooltip='Instead of launching everything in the bay at once, this will "scan" things (one turf-full at a time) in order, left to right and top to bottom. Refreshing will reset the "scanner" to the top-leftmost position.'>Ordered</ui-button>
<ui-button style='{{data.launchChoice == 2? "selected" : null}}' action='launchRandom' tooltip-side='left'
tooltip='Instead of launching everything in the bay at once, this will launch one random turf of items at a time.'>Random</ui-button>
</ui-section>
<ui-section label='Add an explosion?'>
<ui-button style='{{data.explosionChoice == 1? "selected" : null}}' action='explosionCustom' tooltip-side='left'
tooltip='This will cause an explosion of whatever size you like (including flame range) to occur as soon as the supplypod lands. Dont worry, supply-pods are explosion-proof!'>Custom Size</ui-button>
<ui-button style='{{data.explosionChoice == 2? "selected" : null}}' action='explosionBus' tooltip-side='left'
tooltip='This will cause a maxcap explosion (dependent on server config) to occur as soon as the supplypod lands. Dont worry, supply-pods are explosion-proof!'>Adminbus</ui-button> </ui-section>
<ui-section label='Extra damage?' (default = None)>
<ui-button style='{{data.damageChoice == 1 ? "selected" : null}}' action='damageCustom' tooltip-side='left'
tooltip='Anyone caught under the pod when it lands will be dealt this amount of brute damage. Sucks to be them!'>Custom Damage</ui-button>
<ui-button style='{{data.damageChoice == 2 ? "selected" : null}}' action='damageGib' tooltip-side='left'
tooltip='This will attempt to gib any mob caught under the pod when it lands, as well as dealing a nice 5000 brute damage. Ya know, just to be sure!'>Gib</ui-button> </ui-section>
<ui-section label='Damaging effects?'>
<ui-button style='{{data.effectStun ? "selected" : null}}' action='effectStun' tooltip-side='left'
tooltip='Anyone who is on the turf when the supplypod is launched will be stunned until the supplypod lands. They cant get away that easy!'>Stun</ui-button>
<ui-button style='{{data.effectLimb ? "selected" : null}}' action='effectLimb' tooltip-side='left'
tooltip='This will cause anyone caught under the pod to lose a limb, excluding their head.'>Delimb</ui-button>
<ui-button style='{{data.effectOrgans ? "selected" : null}}' action='effectOrgans' tooltip-side='left'
tooltip='This will cause anyone caught under the pod to lose all their limbs and organs in a spectacular fashion.'>Yeet Organs</ui-button> </ui-section>
<ui-section label='Movement effects?'>
<ui-button style='{{data.effectBluespace ? "selected" : null}}' action='effectBluespace' tooltip-side='left'
tooltip='Gives the supplypod an advanced Bluespace Recyling Device. After opening, the supplypod will be warped directly to the surface of a nearby NT-designated trash planet (/r/ss13).'>Bluespace</ui-button>
<ui-button style='{{data.effectStealth ? "selected" : null}}' action='effectStealth' tooltip-side='left'
tooltip='This hides the red target icon from appearing when you launch the supplypod. Combos well with the "Invisible" style. Sneak attack, go!'>Stealth</ui-button>
<ui-button style='{{data.effectQuiet ? "selected" : null}}' action='effectQuiet' tooltip-side='left'
tooltip='This will keep the supplypod from making any sounds, except for those specifically set by admins in the Sound section.'>Quiet Landing</ui-button>
<ui-button style='{{data.effectReverse ? "selected" : null}}' action='effectReverse' tooltip-side='left'
tooltip='This pod will not send any items. Instead, after landing, the supplypod will close (similar to a normal closet closing), and then launch back to the right centcom bay to drop off any new contents.'>Reverse Mode</ui-button>
<ui-button style='{{data.effectMissile ? "selected" : null}}' action='effectMissile' tooltip-side='left'
tooltip='This pod will not send any items. Instead, it will immediatley delete after landing (Similar visually to setting openDelay & departDelay to 0, but this looks nicer). Useful if you just wanna fuck some shit up. Combos well with the Missile style.'>Missile Mode</ui-button>
<ui-button style='{{data.effectCircle ? "selected" : null}}' action='effectCircle' tooltip-side='left'
tooltip='This will make the supplypod come in from any angle. Im not sure why this feature exists, but here it is.'>Any Descent Angle</ui-button>
<ui-button style='{{data.effectBurst ? "selected" : null}}' action='effectBurst' tooltip-side='left'
tooltip='This will make each click launch 5 supplypods inaccuratly around the target turf (a 3x3 area). Combos well with the Missle Mode if you dont want shit lying everywhere after.'>Machine Gun Mode</ui-button>
<ui-button style='{{data.effectTarget ? "selected" : null}}' action='effectTarget' tooltip-side='left'
tooltip='This will make the supplypod target a specific atom, instead of the mouses position. Smiting does this automatically!'>Specific Target</ui-button> </ui-section>
<ui-section label='Change Name/Desc?'>
<ui-button style='{{data.effectName ? "selected" : null}}' action='effectName' tooltip-side='left'
tooltip='Allows you to add a custom name and description.'>Custom Name/Desc</ui-button>
<ui-button style='{{data.effectAnnounce ? "selected" : null}}' action='effectAnnounce' tooltip-side='left'
tooltip='Alerts ghosts when a pod is launched. Useful if some dumb shit is aboutta come outta the pod.'>Alert Ghosts</ui-button> </ui-section>
<ui-section label='Sound?'>
<ui-button style='{{data.fallingSound ? "selected" : null}}' action='fallingSound' tooltip-side='left'
tooltip='Choose a sound to play as the pod falls. Note that for this to work right you should know the exact length of the sound, in seconds.'>Custom Falling Sound</ui-button>
<ui-button style='{{data.landingSound ? "selected" : null}}' action='landingSound' tooltip-side='left'
tooltip='Choose a sound to play when the pod lands.'>Custom Landing Sound</ui-button>
<ui-button style='{{data.openingSound ? "selected" : null}}' action='openingSound' tooltip-side='left'
tooltip='Choose a sound to play when the pod opens.'>Custom Opening Sound</ui-button>
<ui-button style='{{data.leavingSound ? "selected" : null}}' action='leavingSound' tooltip-side='left'
tooltip='Choose a sound to play when the pod departs (whether that be delection in the case of a bluespace pod, or leaving for centcom for a reversing pod).'>Custom Leaving Sound</ui-button>
<ui-button style='{{data.soundVolume ? "selected" : null}}' action='soundVolume' tooltip-side='left'
tooltip='Choose the volume for the sound to play at. Default values are between 1 and 100, but hey, do whatever. Im a tooltip, not a cop.'>Admin Sound Volume</ui-button> </ui-section>
<ui-section label='Delay timers?'>
<ui-button style='{{data.fallDuration != 4 ? "selected" : null}}' action='fallDuration' tooltip-side='left'
tooltip='Set how long the animation for the pod falling lasts. Create dramatic, slow falling pods!'>Custom Falling Duration</ui-button>
<ui-button style='{{data.landingDelay != 20 ? "selected" : null}}' action='landingDelay' tooltip-side='left'
tooltip='Choose the amount of time it takes for the supplypod to hit the station. By default this value is 0.5 seconds.'>Custom Landing Time</ui-button>
<ui-button style='{{data.openingDelay != 30 ? "selected" : null}}' action='openingDelay' tooltip-side='left'
tooltip='Choose the amount of time it takes for the supplypod to open after landing. Useful for giving whatevers inside the pod a nice dramatic entrance! By default this value is 3 seconds.'>Custom Opening Time</ui-button>
<ui-button style='{{data.departureDelay != 30 ? "selected" : null}}' action='departureDelay' tooltip-side='left'
tooltip='Choose the amount of time it takes for the supplypod to leave after landing. By default this value is 3 seconds.'>Custom Leaving Time</ui-button> </ui-section>
<ui-section label='Style?'>
<ui-button style='{{data.styleChoice == 1 ? "selected" : null}}' action='styleStandard' tooltip-side='left'
tooltip='Changes the pods style from the default Centcom color scheme to your standard Kinaris black and orange. Same color scheme as the normal station-used supplypods.'>Standard</ui-button>
<ui-button style='{{data.styleChoice == 2 ? "selected" : null}}' action='styleBluespace' tooltip-side='left'
tooltip='Changes the pods style from the default Centcom color scheme to the same as the stations upgraded blue-and-white Bluespace Supplypods.'>Advanced</ui-button>
<ui-button style='{{data.styleChoice == 4 ? "selected" : null}}' action='styleSyndie' tooltip-side='left'
tooltip='Changes the pods style from the default Centcom color scheme to a menacing black and blood-red. Great for sending meme-ops in style!'>Syndicate</ui-button>
<ui-button style='{{data.styleChoice == 5 ? "selected" : null}}' action='styleBlue' tooltip-side='left'
tooltip='Changes the pods style from the default Centcom color scheme to a menacing black and dark blue. Great for sending deathsquads in style!'>Deathsquad</ui-button>
<ui-button style='{{data.styleChoice == 6 ? "selected" : null}}' action='styleCult' tooltip-side='left'
tooltip='Changes the pods style from the default Centcom style to a blood and rune covered cult pod!'>Cult Pod</ui-button>
<ui-button style='{{data.styleChoice == 7 ? "selected" : null}}' action='styleMissile' tooltip-side='left'
tooltip='Changes the pods style from the default Centcom style to a large missile. Combos well with a missile mode, so the missile doesnt stick around after landing.'>Missile</ui-button>
<ui-button style='{{data.styleChoice == 8 ? "selected" : null}}' action='styleSMissile' tooltip-side='left'
tooltip='Changes the pods style from the default Centcom style to a large blood-red missile. Combos well with missile mode, so the missile doesnt stick around after landing.'>Syndicate Missile</ui-button>
<ui-button style='{{data.styleChoice == 9 ? "selected" : null}}' action='styleBox' tooltip-side='left'
tooltip='Changes the pods style from the default Centcom style to a large, dark-green military supply crate.'>Supply Crate</ui-button>
<ui-button style='{{data.styleChoice == 10 ? "selected" : null}}' action='styleHONK' tooltip-side='left'
tooltip='Changes the pods style from the default Centcom color scheme to a colorful, clown inspired look.'>HONK</ui-button>
<ui-button style='{{data.styleChoice == 11 ? "selected" : null}}' action='styleFruit' tooltip-side='left'
tooltip='for when an orange is angry'>Fruit~</ui-button>
<ui-button style='{{data.styleChoice== 12 ? "selected" : null}}' action='styleInvisible' tooltip-side='left'
tooltip='Makes the supplypod invisible! Useful for when you want to use this feature with a gateway or something. Combos well with the "Stealth" and "Quiet Landing" effects.'>Invisible</ui-button>
<ui-button style='{{data.styleChoice == 13 ? "selected" : null}}' action='styleGondola' tooltip-side='left'
tooltip='this gondola can control when he wants to deliver his supplies if he has a smart enough mind, so offer up his body to ghosts for maximum enjoyment. (Make sure to turn off bluespace and set a arbitrarily high open-time if you do!)'>Gondola (alive)</ui-button>
<ui-button style='{{data.styleChoice == 14 ? "selected" : null}}' action='styleSeeThrough' tooltip-side='left'
tooltip='By selecting this, the pod will instead look like whatevers inside it (as if it were the contents falling by themselves, without a pod). Useful for launching mechs at the station and standing tall as they soar in from the heavens.'>Show Contents (See-Through Pod)!</ui-button>
</ui-section>
</ui-display>
<ui-display>
<ui-section label='{{data.numObjects}} turfs in {{data.bay}}' candystripe right>
<ui-button action='refresh' tooltip-side='left'
tooltip='Manually refreshes the possible things to launch in the pod bay.'>Refresh Pod Bay</ui-button>
<ui-button style='{{data.giveLauncher ? "selected" : null}}' action='giveLauncher' tooltip-side='left'
tooltip='THE CODEX ASTARTES CALLS THIS MANEUVER: STEEL RAIN'>Enter Launch Mode</ui-button>
<ui-button style='danger' action='clearBay' tooltip-side='left'
tooltip='This will delete all objs and mobs from the selected bay.'>Clear Selected Bay</ui-button>
</ui-section>
</ui-display>
@@ -1,76 +0,0 @@
<script>
component.exports = {
data: {
upperCaseWrapper(lowercased) {
return lowercased.toUpperCase();
}
}
}
</script>
<ui-display title='Status'>
<ui-section label='Energy'>
<ui-bar min='0' max='{{data.maxEnergy}}' value='{{data.energy}}'>{{Math.fixed(adata.energy)}} Units</ui-bar>
</ui-section>
</ui-display>
{{#if data.recordingRecipe && true}}
<ui-notice>
<span class='fa fa-circle'></span> <span>Recording</span>
</ui-notice>
<ui-display>
<ui-subdisplay>
{{#each data.recordingRecipe: chemical}}
<ui-section label='{{chemical.replace(/\b\w/, upperCaseWrapper)}}'><span>{{adata.recordingRecipe[chemical]}}</span></ui-section>
{{/each}}
</ui-subdisplay>
<ui-section>
<ui-button icon='floppy-o' action='save_recording'>Save</ui-button>
<ui-button icon='ban' action='cancel_recording'>Cancel</ui-button>
</ui-section>
</ui-display>
{{/if}}
<ui-display title='Saved Recipes' button>
<ui-section>
<ui-button icon='plus' action='record_recipe' state='{{data.recordingRecipe ? "disabled" : null}}'>Record Recipe</ui-button>
<ui-button icon='minus' action='clear_recipes' state='{{data.recordingRecipe ? "disabled" : null}}'>Clear Recipes</ui-button>
{{#each data.recipes: recipe_name}}
<ui-button grid icon='tint' action='dispense_recipe' params='{"recipe": "{{recipe_name}}"}'>{{recipe_name}}</ui-button>
{{/each}}
</ui-section>
</ui-display>
<ui-display title='Dispense' button>
{{#partial button}}
{{#each data.beakerTransferAmounts}}
<ui-button icon='plus' state='{{data.amount == . ? "selected" : null}}' action='amount' params='{"target": {{.}}}'>{{.}}</ui-button>
{{/each}}
{{/partial}}
<ui-section>
{{#each data.chemicals}}
<ui-button grid icon='tint' action='dispense' params='{"reagent": "{{id}}"}'>{{title}}</ui-button>
{{/each}}
</ui-section>
</ui-display>
<ui-display title='Beaker' button>
{{#partial button}}
{{#each data.beakerTransferAmounts}}
<ui-button icon='minus' action='remove' params='{"amount": {{.}}}' state='{{data.recordingRecipe ? "disabled" : null}}'>{{.}}</ui-button>
{{/each}}
<ui-button icon='eject' state='{{data.isBeakerLoaded ? null : "disabled"}}' action='eject'>Eject</ui-button>
{{/partial}}
<ui-section label='Contents'>
{{#if data.isBeakerLoaded}}
<span>{{Math.round(adata.beakerCurrentVolume)}}/{{data.beakerMaxVolume}} Units</span>
<span>pH: {{Math.round(adata.beakerCurrentpH*adata.partRating)/adata.partRating}}</span>
<br/>
{{#each adata.beakerContents}}
<span class='highlight' intro-outro='fade'>{{Math.fixed(volume, 2)}} units of {{name}}</span><br/>
{{else}}
<span class='bad'>Beaker Empty</span>
{{/each}}
{{else}}
<span class='average'>No Beaker</span>
{{/if}}
</ui-section>
</ui-display>
-34
View File
@@ -1,34 +0,0 @@
<ui-display title='Thermostat'>
<ui-section label='Power'>
<ui-button icon='{{data.isActive ? "power-off" : "close"}}'
style='{{data.isActive ? "selected" : null}}'
state='{{data.isBeakerLoaded ? null : "disabled"}}'
action='power'>{{data.isActive ? "On" : "Off"}}</ui-button>
</ui-section>
<ui-section label='Target'>
<ui-button icon='pencil' action='temperature' params='{"target": "input"}'>{{Math.round(adata.targetTemp)}} K</ui-button>
</ui-section>
</ui-display>
<ui-display title='Beaker' button>
{{#partial button}}
<ui-button icon='eject' state='{{data.isBeakerLoaded ? null : "disabled"}}' action='eject'>Eject</ui-button>
{{/partial}}
<ui-section label='Contents'>
{{#if data.isBeakerLoaded}}
<span>Temperature: {{Math.round(adata.currentTemp)}} K</span>
<br />
<span>pH: {{Math.round(adata.currentpH*adata.partRating)/adata.partRating}}</span>
<br />
{{#each adata.beakerContents}}
<span class='highlight' intro-outro='fade'>{{Math.fixed(volume, 2)}} units of {{name}}</span><br />
{{#if data.showPurity}}
<span class='highlight' intro-outro='fade'>Purity: {{Math.fixed(purity, 2)}}</span><br />
{{/if}}
{{else}}
<span class='bad'>Beaker Empty</span>
{{/each}}
{{else}}
<span class='average'>No Beaker</span>
{{/if}}
</ui-section>
</ui-display>
-147
View File
@@ -1,147 +0,0 @@
{{#if data.screen == "home"}}
<ui-display title='Beaker' button>
<ui-button icon='{{data.isBeakerLoaded ? "Eject" : "close"}}'
style='{{data.isBeakerLoaded ? "selected" : null}}'
state='{{data.isBeakerLoaded ? null : "disabled"}}'
action='eject'
>{{data.isBeakerLoaded ? "Eject" : "No beaker"}}
</ui-button>
<ui-section>
{{#if data.isBeakerLoaded}}
{{#each data.beakerContents}}
<ui-section label='{{Math.fixed(volume, 2)}} units of {{name}}' nowrap>
<div class='content' style='float:right'>
<ui-button action='transferToBuffer' params='{"id": "{{id}}", "amount": 1}'>1</ui-button>
<ui-button action='transferToBuffer' params='{"id": "{{id}}", "amount": 5}'>5</ui-button>
<ui-button action='transferToBuffer' params='{"id": "{{id}}", "amount": 10}'>10</ui-button>
<ui-button action='transferToBuffer' params='{"id": "{{id}}", "amount": 1000}'>All</ui-button>
<ui-button action='transferToBuffer' params='{"id": "{{id}}", "amount": -1}'>Custom</ui-button>
<ui-button action='analyzeBeak' params='{"id": "{{id}}"}'>Analyze</ui-button>
</div>
</ui-section>
{{else}}
<span class='bad'>Beaker Empty</span>
{{/each}}
{{else}}
<span class='average'>No Beaker</span>
{{/if}}
</ui-section>
</ui-display>
<ui-display title='Buffer'>
<ui-button action='toggleMode' state='{{data.mode ? null : "selected"}}'>Destroy</ui-button>
<ui-button action='toggleMode' state='{{data.mode ? "selected" : null}}'>Transfer to Beaker</ui-button>
<ui-section>
{{#each data.bufferContents}}
<ui-section label='{{Math.fixed(volume, 2)}} units of {{name}}' nowrap>
<div class='content' style='float:right'>
<ui-button action='transferFromBuffer' params='{"id": "{{id}}", "amount": 1}'>1</ui-button>
<ui-button action='transferFromBuffer' params='{"id": "{{id}}", "amount": 5}'>5</ui-button>
<ui-button action='transferFromBuffer' params='{"id": "{{id}}", "amount": 10}'>10</ui-button>
<ui-button action='transferFromBuffer' params='{"id": "{{id}}", "amount": 1000}'>All</ui-button>
<ui-button action='transferFromBuffer' params='{"id": "{{id}}", "amount": -1}'>Custom</ui-button>
<ui-button action='analyzeBuff' params='{"id": "{{id}}"}'>Analyze</ui-button>
</div>
</ui-section>
{{/each}}
</ui-section>
</ui-display>
{{#if !data.condi}}
<ui-display title='Pills, Bottles and Patches' >
{{#each data.pillStyles}}
<ui-button state='{{id==data.chosenPillStyle ? "selected" : null}}' action='pillStyle' params='{"id": "{{id}}"}'>{{{htmltag}}}</ui-button>
{{/each}}
<br>
{{#if data.isPillBottleLoaded}}
<ui-button action='ejectp' state='{{data.isPillBottleLoaded ? null : "disabled"}}'>{{data.isPillBottleLoaded ? "Eject" : "No Pill bottle loaded"}}</ui-button>
<span class='content'>{{data.pillBotContent}}/{{data.pillBotMaxContent}}</span>
{{else}}
<span class='average'>No Pillbottle</span>
{{/if}}
<br/>
<ui-button action='createPill' params='{"many": 0}' state='{{data.bufferContents ? null : "disabled"}}' >Create Pill (max 50µ)</ui-button>
<br/>
<ui-button action='createPill' params='{"many": 1}' state='{{data.bufferContents ? null : "disabled"}}' >Create Multiple Pills</ui-button>
<br/>
<br/>
<ui-button action='createPatch' params='{"many": 0}' state='{{data.bufferContents ? null : "disabled"}}' >Create Patch (max 40µ)</ui-button>
<br/>
<ui-button action='createPatch' params='{"many": 1}' state='{{data.bufferContents ? null : "disabled"}}' >Create Multiple Patches</ui-button>
<br/>
<br/>
<ui-button action='createBottle' params='{"many": 0}' state='{{data.bufferContents ? null : "disabled"}}' >Create Bottle (max 30µ)</ui-button>
<br/>
<ui-button action='createBottle' params='{"many": 1}' state='{{data.bufferContents ? null : "disabled"}}' >Dispense Buffer to Bottles</ui-button>
<br/>
<br/>
<ui-button action='createVial' params='{"many": 0}' state='{{data.bufferContents ? null : "disabled"}}' >Create Hypo Vial (max 60µ)</ui-button>
<br/>
<ui-button action='createVial' params='{"many": 1}' state='{{data.bufferContents ? null : "disabled"}}' >Dispense Buffer to Hypo vials </ui-button>
<br/>
<br/>
<ui-button action='createDart' params='{"many": 0}' state='{{data.bufferContents ? null : "disabled"}}' >Create SmartDart (max 20µ)</ui-button>
<br/>
<ui-button action='createDart' params='{"many": 1}' state='{{data.bufferContents ? null : "disabled"}}' >Create Multiple SmartDarts </ui-button>
<br/>
</ui-display>
{{else}}
<ui-display title='Condiments bottles and packs' >
<ui-button action='createPill' params='{"many": 0}' state='{{data.bufferContents ? null : "disabled"}}' >Create Pack (max 10µ)</ui-button>
<br/>
<br/>
<ui-button action='createBottle' params='{"many": 0}' state='{{data.bufferContents ? null : "disabled"}}' >Create Bottle (max 50µ)</ui-button>
</ui-display>
{{/if}}
{{elseif data.screen == "analyze"}}
<ui-display title={{data.analyzeVars.name}} >
<span class='highlight'>Description: </span>
<span class='content' style='float:center'>{{data.analyzeVars.description}}</span>
<br/>
<span class='highlight'>Color: </span>
<span style='color: {{data.analyzeVars.color}}; background-color: {{data.analyzeVars.color}}'>{{data.analyzeVars.color}}</span>
<br/>
<span class='highlight'>State: </span>
<span class='content'>{{data.analyzeVars.state}}</span>
<br/>
<span class='highlight'>Metabolization Rate: </span>
<span class='content'>{{data.analyzeVars.metaRate}}µ/minute</span>
<br/>
<span class='highlight'>Overdose Threshold: </span>
<span class='content'>{{data.analyzeVars.overD}}</span>
<br/>
<span class='highlight'>Addiction Threshold: </span>
<span class='content'>{{data.analyzeVars.addicD}}</span>
<br/>
{{#if data.fermianalyze}}
<span class='highlight'>Minumum Reaction Temperature: </span>
<span class='content'>{{data.analyzeVars.minTemp}}K</span>
<br/>
<span class='highlight'>Optimal Reaction Temperature: </span>
<span class='content'>{{data.analyzeVars.maxTemp}}K</span>
<br/>
<span class='highlight'>Explosion Reaction Temperature: </span>
<span class='content'>{{data.analyzeVars.eTemp}}K</span>
<br/>
<span class='highlight'>Optimal reaction pH: </span>
<span class='content'>{{data.analyzeVars.pHpeak}}</span>
<br/>
<span class='highlight'>Current Purity: </span>
<span class='content'>{{data.analyzeVars.purityF}}</span>
<br/>
<span class='highlight'>Inverse Purity Threshold: </span>
<span class='content'>{{data.analyzeVars.inverseRatioF}}</span>
<br/>
<span class='highlight'>Explosion Purity Threshold: </span>
<span class='content'>{{data.analyzeVars.purityE}}</span>
<br/>
{{/if}}
<br/>
<ui-button action='goScreen' params='{"screen": "home"}'>Back</ui-button>
</ui-display>
{{/if}}
@@ -1,22 +0,0 @@
<ui-display title='Recipient Contents'>
<ui-section>
<ui-button icon='eject' state='{{data.isBeakerLoaded ? null : "disabled"}}' action='ejectBeaker'>Eject</ui-button>
<ui-button icon='circle' state='{{data.isBeakerLoaded ? null : "disabled"}}' action='input'>Input</ui-button>
<ui-button icon='circle' state='{{data.isBeakerLoaded ? null : "disabled"}}' action='amount'>{{data.amount}}U</ui-button>
<ui-button icon='plus' state='{{data.isBeakerLoaded ? "disabled" : null}}' action='makecup'>Create Beaker</ui-button>
</ui-section>
</ui-display>
<ui-display title='Recipient'>
<ui-section label='Contents'>
{{#if data.isBeakerLoaded}}
<span>{{Math.round(adata.beakerCurrentVolume)}}/{{data.beakerMaxVolume}} Units</span>
{{#each adata.beakerContents}}
<span class='highlight' intro-outro='fade'>{{Math.fixed(volume, 2)}} units of {{name}}</span><br/>
{{else}}
<span class='bad'>Recipient Empty</span>
{{/each}}
{{else}}
<span class='average'>No Recipient</span>
{{/if}}
</ui-section>
</ui-display>
@@ -1,43 +0,0 @@
<ui-display>
<ui-button action='toggle'>{{data.recollection ? "Recital":"Recollection"}}</ui-button>
</ui-display>
{{#if data.recollection}}
<ui-display>
{{{data.rec_text}}}
{{#each data.recollection_categories}}
<br><ui-button action='rec_category' params='{"category": "{{name}}"}'>{{{name}}} - {{{desc}}}</ui-button>
{{/each}}
{{{data.rec_section}}}
{{{data.rec_binds}}}
</ui-display>
{{else}}
<ui-display title='Power' button>
<ui-section>
{{{data.power}}}
</ui-section>
</ui-display>
<ui-display>
<ui-section>
<ui-button state='{{data.selected == "Driver" ? "selected" : null}}' action='select' params='{"category": "Driver"}'>Driver</ui-button>
<ui-button state='{{data.selected == "Script" ? "selected" : null}}' action='select' params='{"category": "Script"}'>Scripts</ui-button>
<ui-button state='{{data.selected == "Application" ? "selected" : null}}' action='select' params='{"category": "Application"}'>Applications</ui-button>
<br>{{{data.tier_info}}}
</ui-section>
<ui-section>
{{{data.scripturecolors}}}
</ui-section><hr>
<ui-section>
{{#each data.scripture}}
<div><ui-button tooltip='{{{tip}}}' tooltip-side='right' action='recite' params='{"category": "{{type}}"}'>Recite {{{required}}}</ui-button>
{{#if quickbind}}
{{#if bound}}
<ui-button action='bind' params='{"category": "{{type}}"}'>Unbind {{{bound}}}</ui-button>
{{else}}
<ui-button action='bind' params='{"category": "{{type}}"}'>Quickbind</ui-button>
{{/if}}
{{/if}}
{{{name}}} {{{descname}}} {{{invokers}}}</div>
{{/each}}
</ui-section>
</ui-display>
{{/if}}
-50
View File
@@ -1,50 +0,0 @@
<ui-display title='Codex Gigas'>
<ui-section>
{{data.name}}
</ui-section>
<ui-section label='Prefix'>
<ui-button state='{{data.currentSection == 1 ? null : "disabled"}}' action='Dark '>Dark</ui-button>
<ui-button state='{{data.currentSection == 1 ? null : "disabled"}}' action='Hellish '>Hellish</ui-button>
<ui-button state='{{data.currentSection == 1 ? null : "disabled"}}' action='Fallen '>Fallen</ui-button>
<ui-button state='{{data.currentSection == 1 ? null : "disabled"}}' action='Fiery '>Fiery</ui-button>
<ui-button state='{{data.currentSection == 1 ? null : "disabled"}}' action='Sinful '>Sinful</ui-button>
<ui-button state='{{data.currentSection == 1 ? null : "disabled"}}' action='Blood '>Blood</ui-button>
<ui-button state='{{data.currentSection == 1 ? null : "disabled"}}' action='Fluffy '>Fluffy</ui-button>
</ui-section>
<ui-section label='Title'>
<ui-button state='{{data.currentSection <= 2 ? null : "disabled"}}' action='Lord '>Lord</ui-button>
<ui-button state='{{data.currentSection <= 2 ? null : "disabled"}}' action='Prelate '>Prelate</ui-button>
<ui-button state='{{data.currentSection <= 2 ? null : "disabled"}}' action='Count '>Count</ui-button>
<ui-button state='{{data.currentSection <= 2 ? null : "disabled"}}' action='Viscount '>Viscount</ui-button>
<ui-button state='{{data.currentSection <= 2 ? null : "disabled"}}' action='Vizier '>Vizier</ui-button>
<ui-button state='{{data.currentSection <= 2 ? null : "disabled"}}' action='Elder '>Elder</ui-button>
<ui-button state='{{data.currentSection <= 2 ? null : "disabled"}}' action='Adept '>Adept</ui-button>
</ui-section>
<ui-section label='Name'>
<ui-button state='{{data.currentSection <= 4 ? null : "disabled"}}' action='hal'>hal</ui-button>
<ui-button state='{{data.currentSection <= 4 ? null : "disabled"}}' action='ve'>ve</ui-button>
<ui-button state='{{data.currentSection <= 4 ? null : "disabled"}}' action='odr'>odr</ui-button>
<ui-button state='{{data.currentSection <= 4 ? null : "disabled"}}' action='neit'>neit</ui-button>
<ui-button state='{{data.currentSection <= 4 ? null : "disabled"}}' action='ci'>ci</ui-button>
<ui-button state='{{data.currentSection <= 4 ? null : "disabled"}}' action='quon'>quon</ui-button>
<ui-button state='{{data.currentSection <= 4 ? null : "disabled"}}' action='mya'>mya</ui-button>
<ui-button state='{{data.currentSection <= 4 ? null : "disabled"}}' action='folth'>folth</ui-button>
<ui-button state='{{data.currentSection <= 4 ? null : "disabled"}}' action='wren'>wren</ui-button>
<ui-button state='{{data.currentSection <= 4 ? null : "disabled"}}' action='geyr'>geyr</ui-button>
<ui-button state='{{data.currentSection <= 4 ? null : "disabled"}}' action='hil'>hil</ui-button>
<ui-button state='{{data.currentSection <= 4 ? null : "disabled"}}' action='niet'>niet</ui-button>
<ui-button state='{{data.currentSection <= 4 ? null : "disabled"}}' action='twou'>twou</ui-button>
<ui-button state='{{data.currentSection <= 4 ? null : "disabled"}}' action='phi'>phi</ui-button>
<ui-button state='{{data.currentSection <= 4 ? null : "disabled"}}' action='coa'>coa</ui-button>
</ui-section>
<ui-section label='suffix'>
<ui-button state='{{data.currentSection == 4 ? null : "disabled"}}' action=' the Red'>the Red</ui-button>
<ui-button state='{{data.currentSection == 4 ? null : "disabled"}}' action=' the Soulless'>the Soulless</ui-button>
<ui-button state='{{data.currentSection == 4 ? null : "disabled"}}' action=' the Master'>the Master</ui-button>
<ui-button state='{{data.currentSection == 4 ? null : "disabled"}}' action=', the Lord of all things'>the Lord of all things</ui-button>
<ui-button state='{{data.currentSection == 4 ? null : "disabled"}}' action=', Jr.'>jr</ui-button>
</ui-section>
<ui-section label ='submit'>
<ui-button state='{{data.currentSection >= 4 ? null : "disabled"}}' action='search'>search</ui-button>
</ui-section>
</ui-display>
@@ -1,89 +0,0 @@
<ui-button icon='circle' action='clean_order'>Clear Order</ui-button><br><br>
<i>Your new computer device you always dreamed of is just four steps away...</i><hr>
{{#if data.state == 0}} <!-- Device type selection -->
<div class='item'>
<h2>Step 1: Select your device type</h2>
<ui-button icon='calc' action='pick_device' params='{"pick" : "1"}'>Laptop</ui-button>
<ui-button icon='calc' action='pick_device' params='{"pick" : "2"}'>LTablet</ui-button>
</div>
{{elseif data.state == 1}}
<div class='item'>
<h2>Step 2: Personalise your device</h2>
<table>
<tr>
<td><b>Current Price:</b>
<td>{{data.totalprice}}C
</tr>
<tr>
<td><b>Battery:</b>
<td><ui-button action='hw_battery' params='{"battery" : "1"}' state='{{data.hw_battery == 1 ? "selected" : null}}'>Standard</ui-button>
<td><ui-button action='hw_battery' params='{"battery" : "2"}' state='{{data.hw_battery == 2 ? "selected" : null}}'>Upgraded</ui-button>
<td><ui-button action='hw_battery' params='{"battery" : "3"}' state='{{data.hw_battery == 3 ? "selected" : null}}'>Advanced</ui-button>
</tr>
<tr>
<td><b>Hard Drive:</b>
<td><ui-button action='hw_disk' params='{"disk" : "1"}' state='{{data.hw_disk == 1 ? "selected" : null}}'>Standard</ui-button>
<td><ui-button action='hw_disk' params='{"disk" : "2"}' state='{{data.hw_disk == 2 ? "selected" : null}}'>Upgraded</ui-button>
<td><ui-button action='hw_disk' params='{"disk" : "3"}' state='{{data.hw_disk == 3 ? "selected" : null}}'>Advanced</ui-button>
</tr>
<tr>
<td><b>Network Card:</b>
<td><ui-button action='hw_netcard' params='{"netcard" : "0"}' state='{{data.hw_netcard == 0 ? "selected" : null}}'>None</ui-button>
<td><ui-button action='hw_netcard' params='{"netcard" : "1"}' state='{{data.hw_netcard == 1 ? "selected" : null}}'>Standard</ui-button>
<td><ui-button action='hw_netcard' params='{"netcard" : "2"}' state='{{data.hw_netcard == 2 ? "selected" : null}}'>Advanced</ui-button>
</tr>
<tr>
<td><b>Nano Printer:</b>
<td><ui-button action='hw_nanoprint' params='{"print" : "0"}' state='{{data.hw_nanoprint == 0 ? "selected" : null}}'>None</ui-button>
<td><ui-button action='hw_nanoprint' params='{"print" : "1"}' state='{{data.hw_nanoprint == 1 ? "selected" : null}}'>Standard</ui-button>
</tr>
<tr>
<td><b>Card Reader:</b>
<td><ui-button action='hw_card' params='{"card" : "0"}' state='{{data.hw_card == 0 ? "selected" : null}}'>None</ui-button>
<td><ui-button action='hw_card' params='{"card" : "1"}' state='{{data.hw_card == 1 ? "selected" : null}}'>Standard</ui-button>
</tr>
</table>
{{#if data.devtype != 2}} {{! No tablets}}
<table>
<tr>
<td><b>Processor Unit:</b>
<td><ui-button action='hw_cpu' params='{"cpu" : "1"}' state='{{data.hw_cpu == 1 ? "selected" : null}}'>Standard</ui-button>
<td><ui-button action='hw_cpu' params='{"cpu" : "2"}' state='{{data.hw_cpu == 2 ? "selected" : null}}'>Advanced</ui-button>
</tr>
<tr>
<td><b>Tesla Relay:</b>
<td><ui-button action='hw_tesla' params='{"tesla" : "0"}' state='{{data.hw_tesla == 0 ? "selected" : null}}'>None</ui-button>
<td><ui-button action='hw_tesla' params='{"tesla" : "1"}' state='{{data.hw_tesla == 1 ? "selected" : null}}'>Standard</ui-button>
</tr>
</table>
{{/if}}
<table>
<tr>
<td><b>Confirm Order:</b>
<td><ui-button action='confirm_order'>CONFIRM</ui-button>
</tr>
</table>
<hr>
<b>Battery</b> allows your device to operate without external utility power source. Advanced batteries increase battery life.<br>
<b>Hard Drive</b> stores file on your device. Advanced drives can store more files, but use more power, shortening battery life.<br>
<b>Network Card</b> allows your device to wirelessly connect to stationwide NTNet network. Basic cards are limited to on-station use, while advanced cards can operate anywhere near the station, which includes the asteroid outposts.<br>
<b>Processor Unit</b> is critical for your device's functionality. It allows you to run programs from your hard drive. Advanced CPUs use more power, but allow you to run more programs on background at once.<br>
<b>Tesla Relay</b> is an advanced wireless power relay that allows your device to connect to nearby area power controller to provide alternative power source. This component is currently unavailable on tablet computers due to size restrictions.<br>
<b>Nano Printer</b> is device that allows for various paperwork manipulations, such as, scanning of documents or printing new ones. This device was certified EcoFriendlyPlus and is capable of recycling existing paper for printing purposes.<br>
<b>Card Reader</b> adds a slot that allows you to manipulate RFID cards. Please note that this is not necessary to allow the device to read your identification, it is just necessary to manipulate other cards.
</div>
{{elseif data.state == 2}}
<h2>Step 3: Payment</h2>
<b>Your device is now ready for fabrication..</b><br>
<i>Please ensure the required amount of credits are in the machine, then press purchase.</i><br>
<i>Current credits: <b>{{data.credits}}C</b></i><br>
<i>Total price: <b>{{data.totalprice}}C</b></i><br><br>
<ui-button action='purchase' state='{{data.credits >= data.totalprice ? null : "disabled"}}'>PURCHASE</ui-button>
{{elseif data.state == 3}}
<h2>Step 4: Thank you for your purchase</h2><br>
<b>Should you experience any issues with your new device, contact your local network admin for assistance.</b>
{{/if}}
-35
View File
@@ -1,35 +0,0 @@
{{#if data.has_cap}}
<ui-display>
<ui-section label='Cap'>
<ui-button icon='{{data.is_capped ? "power-off" : "close"}}' style='{{data.is_capped ? null : "selected"}}'
action='toggle_cap'>
{{data.is_capped ? "On": "Off"}}</ui-button>
</ui-section>
</ui-display>
{{/if}}
<ui-display>
{{!<ui-section label='Current Colour'>{{{current_colour}</span>
</ui-section>}}
{{#if data.can_change_colour}}
<ui-section>
<ui-button action='select_colour'>Select New Colour</ui-button>
</ui-section>
{{/if}}
</ui-display>
<ui-display title='Stencil'>
{{#each data.drawables}}
<ui-section label='{{name}}'>
{{#each items}}
<ui-button action='select_stencil' params='{"item":"{{item}}"}'
style='{{item == data.selected_stencil ? "selected" : null}}'>
{{item}}
</ui-button>
{{/each}}
</ui-section>
{{/each}}
</ui-display>
<ui-display title="Text Mode">
<ui-section label='Current Buffer'>{{text_buffer}}
</ui-section>
<ui-section><ui-button action='enter_text'>New Text</ui-button></ui-section>
</ui-display>
-138
View File
@@ -1,138 +0,0 @@
<script>
component.exports = {
data:{
isHead (ijob) { return ijob % 10 == 0 },
dept_class(ijob){
if (ijob == 0) { return "dept-cap"; } // captain
else if (ijob >= 10 && ijob < 20) { return "dept-sec"; } // security
else if (ijob >= 20 && ijob < 30) { return "dept-med"; } // medical
else if (ijob >= 30 && ijob < 40) { return "dept-sci"; } // science
else if (ijob >= 40 && ijob < 50) { return "dept-eng"; } // engineering
else if (ijob >= 50 && ijob < 60) { return "dept-cargo"; } // cargo
else if (ijob >= 200 && ijob < 230) { return "dept-cent"; } // CentCom
else { return "dept-other"; } // other / unknown
},
health_state(oxy,tox,burn,brute){
var avg_dam = oxy + tox + burn + brute;
if (avg_dam <= 0) { return "health-5"; }
else if (avg_dam <= 25) { return "health-4"; }
else if (avg_dam <= 50) { return "health-3"; }
else if (avg_dam <= 75) { return "health-2"; }
else { return "health-0"; }
}
}
}
</script>
<ui-display>
<ui-section>
<table class='crew'>
<thead>
<tr>
<th>Name</th>
<th>Status</th>
<th>Vitals</th>
<th>Position</th>
{{#if data.link_allowed}}
<th>Tracking</th>
{{/if}}
</tr>
</thead>
<tbody>
{{#each data.sensors}}
<tr>
<td>
<span class='{{isHead(ijob) ? "bold " :""}}{{dept_class(ijob)}}'>
{{name}} ({{assignment}})
<span>
</td>
<td>
{{#if oxydam != null}}
<span class='health {{health_state(oxydam,toxdam,burndam,brutedam)}}'></span>
{{else}}
{{#if life_status}}
<span class='health health-5'></span>
{{else}}
<span class='health health-0'></span>
{{/if}}
{{/if}}
</td>
<td>
{{#if oxydam != null}}
<span>
(
<span class='oxy'>{{oxydam}}</span>
/
<span class='toxin'>{{toxdam}}</span>
/
<span class='burn'>{{burndam}}</span>
/
<span class='brute'>{{brutedam}}</span>
)
</span>
{{else}}
{{#if life_status}}
<span>Alive</span>
{{else}}
<span>Dead</span>
{{/if}}
{{/if}}
</td>
<td>
{{#if pos_x != null}}
<span>{{area}}</span>
{{else}}
<span>N/A</span>
{{/if}}
</td>
{{#if data.link_allowed }}
<td>
<ui-button action='select_person' state='{{can_track ? null : "disabled"}}' params='{"name":"{{name}}"}'>Track</ui-button>
</td>
{{/if}}
</tr>
{{/each}}
</tbody>
</table>
</ui-section>
</ui-display>
<style>
.health {
width: 16px;
height: 16px;
background-color: #FFF;
border: 1px solid #434343;
position: relative;
top: 2px;
display: inline-block;
}
.health-5 { background-color: #17d568; }
.health-4 { background-color: #2ecc71; }
.health-3 { background-color: #e67e22; }
.health-2 { background-color: #ed5100; }
.health-1 { background-color: #e74c3c; }
.health-0 { background-color: #ed2814; }
.dept-cap {color : #C06616;}
.dept-sec {color : #E74C3C;}
.dept-med {color : #3498DB;}
.dept-sci {color : #9B59B6;}
.dept-eng {color : #F1C40F;}
.dept-cargo {color : #F39C12;}
.dept-cent {color : #00C100;}
.dept-other {color: #C38312;}
.oxy { color : #3498db; }
.toxin { color : #2ecc71; }
.burn { color : #e67e22; }
.brute { color : #e74c3c; }
table.crew{
border-collapse: collapse;
}
table.crew td {
padding : 0px 10px;
}
</style>
-53
View File
@@ -1,53 +0,0 @@
<ui-display title='Occupant'>
<ui-section label='Occupant'>
<span>{{data.occupant.name ? data.occupant.name : "No Occupant"}}</span>
</ui-section>
{{#if data.hasOccupant}}
<ui-section label='State'>
<span class='{{data.occupant.statstate}}'>{{data.occupant.stat}}</span>
</ui-section>
<ui-section label='Temperature'>
<span class='{{data.occupant.temperaturestatus}}'>{{data.occupant.bodyTemperature}} K</span>
</ui-section>
<ui-section label='Health'>
<ui-bar min='{{data.occupant.minHealth}}' max='{{data.occupant.maxHealth}}' value='{{data.occupant.health}}'
state='{{data.occupant.health >= 0 ? "good" : "average"}}'>{{data.occupant.health}}</ui-bar>
</ui-section>
{{#each [{label: "Brute", type: "bruteLoss"}, {label: "Respiratory", type: "oxyLoss"}, {label: "Toxin", type: "toxLoss"}, {label: "Burn", type: "fireLoss"}]}}
<ui-section label='{{label}}'>
<ui-bar min='0' max='{{data.occupant.maxHealth}}' value='{{data.occupant[type]}}' state='bad'>{{data.occupant[type]}}</ui-bar>
</ui-section>
{{/each}}
{{/if}}
</ui-display>
<ui-display title='Cell'>
<ui-section label='Power'>
<ui-button icon='{{data.isOperating ? "power-off" : "close"}}'
style='{{data.isOperating ? "selected" : null}}'
state='{{data.isOpen ? "disabled" : null}}'
action='power'>{{data.isOperating ? "On" : "Off"}}</ui-button>
</ui-section>
<ui-section label='Temperature'>
<span class='{{data.temperaturestatus}}'>{{data.cellTemperature}} K</span>
</ui-section>
<ui-section label='Door'>
<ui-button icon='{{data.isOpen ? "unlock" : "lock"}}' action='door'>{{data.isOpen ? "Open" : "Closed"}}</ui-button>
<ui-button icon='{{data.autoEject ? "sign-out" : "sign-in"}}' action='autoeject'>{{data.autoEject ? "Auto" : "Manual"}}</ui-button>
</ui-section>
</ui-display>
<ui-display title='Beaker' button>
{{#partial button}}
<ui-button icon='eject' state='{{data.isBeakerLoaded ? null : "disabled"}}' action='ejectbeaker'>Eject</ui-button>
{{/partial}}
<ui-section label='Contents'>
{{#if data.isBeakerLoaded}}
{{#each adata.beakerContents}}
<span class='highlight' intro-outro='fade'>{{volume}} units of {{name}}</span><br/>
{{else}}
<span class='bad'>Beaker Empty</span>
{{/each}}
{{else}}
<span class='average'>No Beaker</span>
{{/if}}
</ui-section>
</ui-display>
@@ -1,33 +0,0 @@
<ui-display>
<ui-section label='State'>
{{#if data.full_pressure}}
<span class='good'>Ready</span>
{{else}}
{{#if data.panel_open}}
<span class='bad'>Power Disabled</span>
{{else}}
{{#if data.pressure_charging}}
<span class='average'>Pressurizing</span>
{{else}}
<span class='bad'>Off</span>
{{/if}}
{{/if}}
{{/if}}
</ui-section>
<ui-section label='Pressure'>
<ui-bar min='0' max='100' value='{{data.per}}' state='good'>{{data.per}}%</ui-bar>
</ui-section>
<ui-section label='Handle'>
<ui-button
icon='{{data.flush ? "toggle-on" : "toggle-off" }}'
state='{{data.isai || data.panel_open ? 'disabled' : null}}'
action='{{data.flush ? "handle-0" : "handle-1" }}'>
{{data.flush ? "Disengage" : "Engage" }}</ui-button>
</ui-section>
<ui-section label='Eject'>
<ui-button icon='sign-out' state='{{data.isai ? 'disabled' : null}}' action='eject'>Eject Contents</ui-button><br/>
</ui-section>
<ui-section label='Power'>
<ui-button icon='power-off' state='{{data.panel_open ? 'disabled' : null}}' action='{{data.pressure_charging ? "pump-0" : "pump-1" }}' style='{{data.pressure_charging ? "selected" : null }}'></ui-button><br/>
</ui-section>
</ui-display>
-22
View File
@@ -1,22 +0,0 @@
<ui-display title='DNA Vault Database'>
<ui-section label='Human DNA'>
<ui-bar min='0' max='{{data.dna_max}}' value='{{data.dna}}'>{{data.dna}}/{{data.dna_max}} Samples</ui-bar>
</ui-section>
<ui-section label='Plant Data'>
<ui-bar min='0' max='{{data.plants_max}}' value='{{data.plants}}'>{{data.plants}}/{{data.plants_max}} Samples</ui-bar>
</ui-section>
<ui-section label='Animal Data'>
<ui-bar min='0' max='{{data.animals_max}}' value='{{data.animals}}'>{{data.animals}}/{{data.animals_max}} Samples</ui-bar>
</ui-section>
</ui-display>
{{#if data.completed && !data.used}}
<ui-display title ='Personal Gene Therapy'>
<ui-section>
<span>Applicable gene therapy treatments:</span>
</ui-section>
<ui-section>
<ui-button action='gene' params='{"choice": "{{data.choiceA}}"}'>{{data.choiceA}}</ui-button>
<ui-button action='gene' params='{"choice": "{{data.choiceB}}"}'>{{data.choiceB}}</ui-button>
</ui-section>
</ui-display>
{{/if}}
@@ -1,49 +0,0 @@
<ui-display title='Occupant'>
<ui-section label='Occupant'>
<span>{{data.occupant.name ? data.occupant.name : "No Occupant"}}</span>
</ui-section>
{{#if data.items}}
<ui-section label='Items in storage'>
<span>{{data.items}}</span>
</ui-section>
{{/if}}
{{#if data.occupied}}
<ui-section label='State'>
<span class='{{data.occupant.statstate}}'>{{data.occupant.stat}}</span>
</ui-section>
<ui-section label='Health'>
<ui-bar min='{{data.occupant.minHealth}}' max='{{data.occupant.maxHealth}}' value='{{data.occupant.health}}'
state='{{data.occupant.health >= 0 ? "good" : "average"}}'>{{Math.round(adata.occupant.health)}}</ui-bar>
</ui-section>
{{#each [{label: "Brute", type: "bruteLoss"}, {label: "Respiratory", type: "oxyLoss"}, {label: "Toxin", type: "toxLoss"}, {label: "Burn", type: "fireLoss"}]}}
<ui-section label='{{label}}'>
<ui-bar min='0' max='{{data.occupant.maxHealth}}' value='{{data.occupant[type]}}' state='bad'>{{Math.round(adata.occupant[type])}}</ui-bar>
</ui-section>
{{/each}}
<ui-section label='Cells'>
<span class='{{data.occupant.cloneLoss ? "bad" : "good"}}'>{{data.occupant.cloneLoss ? "Damaged" : "Healthy"}}</span>
</ui-section>
<ui-section label='Brain'>
<span class='{{data.occupant.brainLoss ? "bad" : "good"}}'>{{data.occupant.brainLoss ? "Abnormal" : "Healthy"}}</span>
</ui-section>
<ui-section label='Bloodstream'>
{{#each adata.occupant.reagents}}
<span class='highlight' intro-outro='fade'>{{Math.fixed(volume, 1)}} units of {{name}}</span><br/>
{{else}}
<span class='good'>Pure</span>
{{/each}}
</ui-section>
{{/if}}
</ui-display>
<ui-display title='Operations'>
<ui-section label='Inject'>
{{#each data.chem}}
<ui-button icon='flask' state='{{data.occupied ? null : "disabled"}}' action='inject' params='{"chem": "{{id}}"}'>{{name}}</ui-button><br/>
{{/each}}
</ui-section>
<ui-section label='Eject'>
<ui-button icon='sign-out' action='eject'>Eject Contents</ui-button>
</ui-section>
<ui-section label='Self Cleaning'>
<ui-button icon='recycle' action='cleaning'>Self-Clean Cycle</ui-button>
</ui-display>
-14
View File
@@ -1,14 +0,0 @@
{{#if data.shaking}}
<ui-display title={{data.question}}>
<ui-section>
{{#each data.answers}}
<ui-button
action='vote' params='{"answer": "{{answer}}"}'
style='{{selected ? "selected" : null}}' >{{answer}} ({{amount}})
</ui-button>
{{/each}}
</ui-section>
</ui-display>
{{else}}
<ui-notice>The eightball is not currently being shaken.</ui-notice>
{{/if}}
@@ -1,30 +0,0 @@
<ui-notice>
<span>Time Until Launch: {{data.timer_str}}</span>
</ui-notice>
<ui-notice>
<span>Engines: {{data.engines_started ? 'Online' : 'Idle'}}</span>
</ui-notice>
<ui-display title='Early Launch'>
<span>Authorizations Remaining:
{{data.emagged ? "ERROR" : data.authorizations_remaining}}</span>
<ui-button icon="exclamation-triangle" action='authorize'
style='danger'
state='{{data.enabled ? null : 'disabled'}}'>
AUTHORIZE
</ui-button>
<ui-button icon="minus" action='repeal'
state='{{data.enabled ? null : 'disabled'}}'>
Repeal
</ui-button>
<ui-button icon="close" action='abort'
state='{{data.enabled ? null : 'disabled'}}'>
Repeal All
</ui-button>
</ui-display>
<ui-display title='Authorizations'>
{{#each data.authorizations}}
<ui-section candystripe nowrap>{{name}} ({{job}})</ui-section>
{{else}}
<ui-section candystripe nowrap>No authorizations.</ui-section>
{{/each}}
</ui-display>
@@ -1,29 +0,0 @@
<ui-display>
<ui-section label='Message'>
{{data.hidden_message}}
</ui-section>
<ui-section label='Created On'>
{{data.realdate}}
</ui-section>
<ui-section label='Approval'>
<ui-button
icon='arrow-up'
state='{{data.is_creator ? 'disabled' : data.has_liked ? 'selected' : null}}'
action='like'>{{data.num_likes}}</ui-button>
<ui-button
icon='circle'
state='{{data.is_creator ? 'disabled' : !data.has_liked && !data.has_disliked ? 'selected' : null}}'
action='neutral'></ui-button>
<ui-button
icon='arrow-down'
state='{{data.is_creator ? 'disabled' : data.has_disliked ? 'selected' : null}}'
action='dislike'>{{data.num_dislikes}}</ui-button>
</ui-section>
</ui-display>
{{#if data.admin_mode}}
<ui-display title='Admin Panel'>
<ui-section label='Creator Ckey'>{{data.creator_key}}</ui-section>
<ui-section label='Creator Character Name'>{{data.creator_name}}</ui-section>
<ui-button icon='remove' action='delete' style='danger'>Delete</ui-button>
</ui-display>
{{/if}}
-3
View File
@@ -1,3 +0,0 @@
<ui-notice>
<span>The requested interface ({{config.interface}}) was not found. Does it exist?</span>
</ui-notice>
@@ -1,50 +0,0 @@
{{#if data.sync}}
<ui-notice>
Currently syncing with the database
</ui-notice>
{{else}}
<ui-display title='Materials' button>
{{#partial button}}
<ui-button icon="eject" action="eject_all">Eject all</ui-button>
<ui-button icon="toggle-{{data.show_materials ? 'off' : 'on'}}" action="toggle_materials_visibility">
{{data.show_materials ? "Hide" : "Show"}}
</ui-button>
{{/partial}}
{{#if data.show_materials}}
<div class="display tabular">
<section class="candystripe">
<section class="cell"></section>
<section class="cell">
Mineral
</section>
<section class="cell">
Amount
</section>
<section class="cell"></section>
<section class="cell"></section>
</section>
{{#each data.all_materials}}
<section class="candystripe">
<section class="cell">
{{name}}
</section>
<section class="cell">
{{amount}}
</section>
<section class="cell">
<ui-button icon="eject">Release amount</ui-button>
</section>
<section class="cell" style='width: 40px;'>
<ui-button icon="eject">Release all</ui-button>
</section>
</section>
{{/each}}
</div>
{{/if}}
</ui-display>
<ui-display title='Categories'>
{{#data.categories}}
<ui-button>{{this}}</ui-button>
{{/data.categories}}
</ui-display>
{{/if}}
-14
View File
@@ -1,14 +0,0 @@
<ui-display>
<ui-section label='Status'>
<ui-button
action='toggle_power'
style='{{data.toggle ? "selected" : null}}' >
Turn {{data.toggle ? "off" : "on"}}
</ui-button>
</ui-section>
<ui-display title='Logging'>
{{#each data.logs}}
<ui-section label='>'>{{.}}<ui-section>
{{/each}}
</ui-display>
</ui-display>
-30
View File
@@ -1,30 +0,0 @@
<ui-display title='Controls'>
<ui-section label='Power'>
<ui-button icon="power-off" style='{{data.power ? "selected" : "danger"}}' action='power'>{{data.power ? "Enabled" : "Disabled"}}</ui-button>
</ui-section>
<ui-section label='Tag'>
<ui-button icon='pencil' action='rename'>{{data.tag}}</ui-button>
</ui-section>
<ui-section label='Scanning mode'>
<ui-button icon={{data.updating ? "unlock" : "lock"}} style= {{data.updating ? null : "danger"}} action='updating' tooltip='Toggle between automatic scanning or scan only when a button is pressed.' tooltip-side='right'>{{data.updating ? "AUTO" : "MANUAL"}}</ui-button>
</ui-section>
<ui-section label='Detection range'>
<ui-button icon='refresh' style= {{data.globalmode ? null : "selected"}} action='globalmode' tooltip='Local sector or whole region scanning.' tooltip-side='right'>{{data.globalmode ? "MAXIMUM" : "LOCAL"}}</ui-button>
</ui-section>
</ui-display>
{{#if data.power}}
<ui-display title='Current Location'>
<span>{{data.current}}</span>
</ui-display>
<ui-display title='Detected Signals'>
{{#each data.signals}}
<ui-section label={{entrytag}}>
<span>{{area}} ({{coord}}) </span>
{{#if direction}}
<span>Dist: {{dist}}m Dir: {{degrees}}° ({{direction}})</span>
{{/if}}
</ui-section>
{{/each}}
</ui-display>
{{/if}}
@@ -1,49 +0,0 @@
<ui-display title='Labor Camp Teleporter'>
<ui-section label='Teleporter Status'>
<span class='{{data.teleporter ? "good" : "bad"}}'>{{data.teleporter ? "Connected" : "Not connected"}}</span>
</ui-section>
{{#if data.teleporter}}
<ui-section label='Location'>
<span>{{data.teleporter_location}}</span>
</ui-section>
<ui-section label='Locked status'>
<ui-button icon='{{data.teleporter_lock ? "lock" : "unlock"}}' action="teleporter_lock">{{data.teleporter_lock ? "Locked" : "Unlocked"}}</ui-button>
<ui-button action='toggle_open'>{{data.teleporter_state_open ? "Open" : "Closed"}}</ui-button>
</ui-section>
{{else}}
<span><ui-button action="scan_teleporter">Scan Teleporter</ui-button></span>
{{/if}}
</ui-display>
<ui-display title='Labor Camp Beacon'>
<ui-section label='Beacon Status'>
<span class='{{data.beacon ? "good" : "bad"}}'>{{data.beacon ? "Connected" : "Not connected"}}</span>
</ui-section>
{{#if data.beacon}}
<ui-section label='Location'>
<span>{{data.beacon_location}}</span>
</ui-section>
{{else}}
<span><ui-button action="scan_beacon">Scan Beacon</ui-button></span>
{{/if}}
</ui-display>
<ui-display title='Prisoner details'>
<ui-section label='Prisoner ID'>
<ui-button action="handle_id">{{data.id ? data.id_name : "-------------"}}</ui-button>
</ui-section>
{{#if data.id}}
<ui-section label='Set ID goal'>
<ui-button action="set_goal">{{data.goal}}</ui-button>
</ui-section>
{{/if}}
<ui-section label='Occupant'>
<span>{{data.prisoner.name ? data.prisoner.name : "No Occupant"}}</span>
</ui-section>
{{#if data.prisoner}}
<ui-section label='Criminal Status'>
<span>{{data.prisoner.crimstat}}</span>
</ui-section>
{{/if}}
</ui-display>
<ui-display>
<center><ui-button action="teleport" state={{data.can_teleport ? null : 'disabled'}}>Process Prisoner</ui-button></center>
</ui-display>
@@ -1,7 +0,0 @@
<ui-display title='Stored Items'>
{{#each data.mobs}}
<ui-section label='{{name}}'>
<ui-button action="release_items" params='{"mobref":{{mob}}}' state={{data.can_reclaim ? null : 'disabled'}}>Drop Items</ui-button>
</ui-section>
{{/each}}
</ui-display>
-21
View File
@@ -1,21 +0,0 @@
<ui-display title='Default Programs' button>
{{#partial button}}
<ui-button icon='{{data.emagged ? "un" : null}}lock' state='{{data.can_toggle_safety ? null : "disabled"}}' action='safety'>
Safeties: <span class='{{data.emagged ? "bad" : "good"}}'>{{data.emagged ? "OFF" : "ON"}}</span>
</ui-button>
{{/partial}}
{{#each data.default_programs}}
<ui-button action='load_program' params='{"type": {{type}}}' style='{{data.program == type ? "selected" : null}}'>
{{name}}
</ui-button><br>
{{/each}}
</ui-display>
{{#if data.emagged}}
<ui-display title='Dangerous Programs'>
{{#each data.emag_programs}}
<ui-button icon='warning' action='load_program' params='{"type": {{type}}}' style='{{data.program == type ? "selected" : null}}'>
{{name}}
</ui-button><br>
{{/each}}
</ui-display>
{{/if}}
@@ -1,40 +0,0 @@
<script>
component.exports = {
computed: {
occupantStatState () {
switch (this.get('data.occupant.stat')) {
case 0: return 'good'
case 1: return 'average'
default: return 'bad'
}
}
}
}
</script>
<ui-display title='Occupant'>
<ui-section label='Occupant'>
<span>{{data.occupant.name ? data.occupant.name : "No Occupant"}}</span>
</ui-section>
{{#if data.occupied}}
<ui-section label='State'>
<span class='{{occupantStatState}}'>{{data.occupant.stat == 0 ? "Conscious" : data.occupant.stat == 1 ? "Unconcious" : "Dead"}}</span>
</ui-section>
{{/if}}
</ui-display>
<ui-display title='Controls'>
<ui-section label='Door'>
<ui-button icon='{{data.open ? "unlock" : "lock"}}' action='door'>{{data.open ? "Open" : "Closed"}}</ui-button>
</ui-section>
<ui-section label='Uses'>
{{ data.ready_implants }}
{{#if data.replenishing}}
<span class='fa fa-cog fa-spin'/>
{{/if}}
</ui-section>
<ui-section label='Activate'>
<ui-button state='{{data.occupied && data.ready_implants > 0 && data.ready ? null : "disabled"}}' action='implant'>
{{ data.ready ? (data.special_name ? data.special_name : "Implant") : "Recharging"}}
</ui-button><br/>
</ui-section>
</ui-display>
-42
View File
@@ -1,42 +0,0 @@
<script>
component.exports = {
computed: {
healthState () {
const health = this.get('data.health')
if (health > 70) return 'good'
else if (health > 50) return 'average'
else return 'bad'
}
}
}
</script>
{{#if data.wiping}}
<ui-notice>
<span>Wipe in progress!</span>
</ui-notice>
{{/if}}
<ui-display title={{data.name || "Empty Card"}} button>
{{#partial button}}
{{#if data.name}}
<ui-button icon='trash' state='{{data.isDead ? "disabled" : null}}' action='wipe'>{{data.wiping ? "Stop Wiping" : "Wipe"}} AI</ui-button>
{{/if}}
{{/partial}}
{{#if data.name}}
<ui-section label='Status'>
<span class='{{data.isDead || data.isBraindead ? "bad" : "good"}}'>{{data.isDead || data.isBraindead ? "Offline" : "Operational"}}</span>
</ui-section>
<ui-section label='Software Integrity'>
<ui-bar min='0' max='100' value='{{data.health}}' state='{{healthState}}'>{{Math.round(adata.health)}}%</ui-bar>
</ui-section>
<ui-section label='Laws'>
{{#each data.laws}}
<span class='highlight'>{{.}}</span><br/>
{{/each}}
</ui-section>
<ui-section label='Settings'>
<ui-button icon='signal' style='{{data.wireless ? "selected" : null}}' action="wireless">Wireless Activity</ui-button>
<ui-button icon='microphone' style='{{data.radio ? "selected" : null}}' action="radio">Subspace Radio</ui-button>
</ui-section>
{{/if}}
</ui-display>
@@ -1,17 +0,0 @@
{{#if data.waiting}}
<ui-notice>
<span>Waiting for another device to confirm your request...</span>
</ui-notice>
{{else}}
<ui-display>
<ui-section>
{{#if data.auth_required}}
<ui-button icon='check' action='auth_swipe'>Authorize {{data.auth_required}}</ui-button>
{{else}}
<ui-button icon='warning' state='{{data.red_alert ? 'disabled' : null}}' action='red_alert'>Red Alert</ui-button>
<ui-button icon='wrench' state='{{data.emergency_maint ? 'disabled' : null}}' action='emergency_maint'>Emergency Maintenance Access</ui-button>
<ui-button icon='warning' state='null' action='bsa_unlock'>Bluespace Artillery Unlock</ui-button>
{{/if}}
</ui-section>
</ui-display>
{{/if}}
@@ -1,20 +0,0 @@
<ui-display title='Ore values'>
{{#each data.ores}}
<ui-section label='{{ore}}'>
<span>{{value}}</span>
</ui-section>
{{/each}}
</ui-display>
<ui-display title='Points'>
<ui-section label='Unclaimed points'>
<span>{{data.unclaimed_points}}</span>
<ui-button action="claim_points" state={{data.unclaimed_points ? null : 'disabled'}}>Claim points</ui-button>
</ui-section>
</ui-display>
<ui-display>
<span>Points: {{data.id_points}}</span>
<ui-section label='Status'>
<span>{{data.status_info}}</span>
<ui-button action="move_shuttle" state={{data.can_go_home ? null : 'disabled'}}>Move shuttle</ui-button>
</ui-section>
</ui-display>
@@ -1,48 +0,0 @@
<ui-display title="Known Languages">
{{#each data.languages}}
<ui-section label={{name}}>
<span>{{desc}}</span>
<span>Key: ,{{key}}</span>
{{#if shadow}}
<span>(gained from mob)</span>
{{/if}}
<span>{{can_speak ? "Can Speak" : "Cannot Speak"}}</span>
{{#if data.is_living}}
<ui-button
action='select_default'
params='{"language_name":"{{name}}"}'
style='{{is_default ? "selected" : can_speak ? null : "disabled"}}'
>{{is_default ? "Default Language" : "Select as Default"}}
</ui-button>
{{/if}}
{{#if data.admin_mode}}
{{#if shadow}}
<ui-button action='grant_language' params='{"language_name":"{{name}}"}'>Grant</ui-button>
{{else}}
<ui-button action='remove_language' params='{"language_name":"{{name}}"}'>Remove</ui-button>
{{/if}}
{{/if}}
</ui-section>
{{/each}}
</ui-display>
{{#if data.admin_mode}}
{{#if data.is_living}}
<ui-button
action='toggle_omnitongue'
style='{{data.omnitongue ? "selected" : null}}'
>Omnitongue {{data.omnitongue ? "Enabled" : "Disabled"}}
</ui-button>
{{/if}}
<ui-display title="Unknown Languages">
{{#each data.unknown_languages}}
<ui-section label={{name}}>
<span>{{desc}}</span>
<span>Key: ,{{key}}</span>
<ui-button
action='grant_language'
params='{"language_name":"{{name}}"}'
>Grant</ui-button>
</ui-section>
{{/each}}
</ui-display>
{{/if}}

Some files were not shown because too many files have changed in this diff Show More