VueUI 2 Part 2 - Reporting tool (#10850)

This commit is contained in:
Karolis
2021-01-09 20:26:42 +02:00
committed by GitHub
parent 3afb45ca70
commit f42430957c
24 changed files with 2564 additions and 0 deletions

2
tools/vueui-report/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
node_modules
report.htm

View File

@@ -0,0 +1,7 @@
module.exports = {
trailingComma: 'es5',
tabWidth: 2,
semi: false,
singleQuote: true,
printWidth: 120,
}

View File

@@ -0,0 +1,19 @@
# VueUI report generator
This program is used to make reports for VueUI. Reports include varius checks.
## How to add a check stage
Stages are sequential, they run one after each other. To add stage copy `00_null` stage and modify it's code. And finally add appropriate require to `stages/index.js`.
## How to use
1. Get Node.js 10.0.0 or newer.
0. Run `npm install`
0. Run `node .`
0. Wait for all stages to finish
0. Look at `report.htm` in same directory.
## How to add more UI tests to Puppeteer report?
Create a json file somewhere under `/vueui/tests` folder with containing following object
```JSON
{
"size": [100, 100],
"data": ...
}
```
`size` specifies width and height of UI while data determines root UI data to be used. It is same data that is shown in debug section of VueUI.

View File

@@ -0,0 +1,35 @@
module.exports = {
vueui: '../../vueui',
themes: ['vueui theme-nano dark-theme', 'vueui theme-nano-light', 'vueui theme-basic', 'vueui theme-basic-dark dark-theme'],
template: (theme, data) => `<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta charset="UTF-8"/>
<meta id="vueui:windowId" content="TEST"/>
<link rel="stylesheet" type="text/css" href="app.css"/>
</head>
<body class="${theme}">
<div id="header">
<header-default></header-default>
<header-handles></header-handles>
</div>
<div id="app">
Javascript file has failed to load. <a href="?src=\ref&vueuiforceresource=1">Click here to force load resources</a>
</div>
<div id="dapp">
</div>
<noscript>
<div id='uiNoScript'>
<h2>JAVASCRIPT REQUIRED</h2>
<p>Your Internet Explorer's Javascript is disabled (or broken).<br/>
Enable Javascript and then open this UI again.</p>
</div>
</noscript>
</body>
<script type="application/json" id="initialstate">
${JSON.stringify(data)}
</script>
<script type="text/javascript" src="app.js"></script>
</html>`
}

View File

@@ -0,0 +1,48 @@
const { Signale } = require('signale')
const Vue = require('vue')
const fs = require('fs-extra')
const stages = require('./stages')
// run
const mainLogger = new Signale({scope: 'main'})
var states = {}
async function runStages () {
mainLogger.time('All Stages')
for (const [i, stage] of stages.entries()) {
const name = stage.name()
const subLogger = mainLogger.scope('stage', name)
mainLogger.time(name)
let result = await Promise.resolve(stage.run(subLogger))
mainLogger.timeEnd(name)
states[i] = result
}
mainLogger.timeEnd('All Stages')
}
// Build HTML
async function generateHTML() {
const app = new Vue(require('./src/app')(states, stages))
const renderer = require('vue-server-renderer').createRenderer()
await fs.outputFile('report.htm', await renderer.renderToString(app))
}
async function main() {
await runStages()
await generateHTML()
}
main()

1201
tools/vueui-report/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,17 @@
{
"name": "vueui-report",
"version": "1.0.0",
"description": "Tools for building VueUI BYOND UI framework reports.",
"main": "index.mjs",
"author": "Karolis K.",
"dependencies": {
"ansi-to-html": "^0.6.14",
"express": "^4.17.1",
"fs-extra": "^9.0.1",
"klaw": "^3.0.0",
"puppeteer": "^5.5.0",
"signale": "^1.4.0",
"vue": "^2.6.12",
"vue-server-renderer": "^2.6.12"
}
}

View File

@@ -0,0 +1,38 @@
module.exports = function (states, stages) {
var components = stages.map((stage, i) => ({i, n: stage.name(), c: stage.component(states[i])}))
return ({
template: `<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- Bootstrap CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous">
<style>
.error-info {
white-space: normal;
color: darkred;
}
</style>
<title>VueUI report</title>
</head>
<body>
<div class="container">
<h1>VueUi Report</h1>
<div v-for="stage in stages" :key="stage.i">
<h2>{{ stage.n }}</h2>
<component v-bind:is="stage.c"></component>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/js/bootstrap.bundle.min.js" integrity="sha384-ygbV9kiqUc6oa4msXn9868pTtWMgiQaeYH7/t7LECLbyPA2x65Kgf80OJFdroafW" crossorigin="anonymous"></script>
</body>
</html>`,
data() {
return {
stages: components
}
}
})
}

View File

@@ -0,0 +1,15 @@
const child_process = require('child_process')
module.exports = {
exec(command, options = {}) {
return new Promise((resolve, reject) => {
child_process.exec(command, options, (error, stdout, stderr) => {
if (error) {
reject({ error, stdout, stderr })
return
}
resolve({ stdout, stderr })
})
})
},
}

View File

@@ -0,0 +1,5 @@
module.exports = {
name: () => 'null',
run: (signale) => ({result: 'fail'}),
component: (state) => ({template: '<div>{{ $data }}</div>'})
}

View File

@@ -0,0 +1,31 @@
var Convert = require('ansi-to-html');
var convert = new Convert();
module.exports = function (state) {
return ({
template: `<div>
<h3>npm install</h3>
<pre v-html="installOut"></pre>
<h3>npm run build-dev</h3>
<pre v-html="buildOut"></pre>
</div>`,
data() {
return state
},
computed: {
installOut() {
if(this.install)
{
return convert.toHtml(this.install)
}
return ''
},
buildOut() {
if(this.build)
{
return convert.toHtml(this.build.stdout)
}
return ''
}
}
})
}

View File

@@ -0,0 +1,7 @@
const run = require('./run')
const component = require('./component')
module.exports = {
name: () => 'Build',
run,
component
}

View File

@@ -0,0 +1,24 @@
const config = require('../../config')
const processPromisify = require('../../src/processPromisify')
const path = require('path')
const vueuiPath = path.resolve(config.vueui)
module.exports = async function (signale) {
try {
const { stdout, stderr } = await processPromisify.exec('npm install --colors', {
cwd: vueuiPath,
})
signale.debug("Install done. Building...")
const build = await processPromisify.exec('npm run build-dev --colors',
{
cwd: vueuiPath,
}
)
signale.debug("Build done.")
return {
install: stdout,
build
}
} catch (error) {
return {fail: error}
}
}

View File

@@ -0,0 +1,21 @@
var Convert = require('ansi-to-html');
var convert = new Convert();
module.exports = function (state) {
return ({
template: `<div>
<pre v-html="lintOut"></pre>
</div>`,
data() {
return state
},
computed: {
lintOut() {
if(this.lint)
{
return convert.toHtml(this.lint)
}
return ''
}
}
})
}

View File

@@ -0,0 +1,7 @@
const run = require('./run')
const component = require('./component')
module.exports = {
name: () => 'Lint',
run,
component
}

View File

@@ -0,0 +1,16 @@
const config = require('../../config')
const processPromisify = require('../../src/processPromisify')
const path = require('path')
const vueuiPath = path.resolve(config.vueui)
module.exports = async function (signale) {
try {
const { stdout, stderr } = await processPromisify.exec('npm run lint --colors', {
cwd: vueuiPath,
})
return {
lint: stdout,
}
} catch (error) {
return {lint_error: error}
}
}

View File

@@ -0,0 +1,17 @@
module.exports = function (state) {
return ({
template: `<div>
<div class="row" v-for="(r, path) in results" :key="path">
<h5>{{ path }}</h5>
<div class="col-3" v-for="(data, theme) in r" :key="theme">
<img :src="'data:image/png;base64,' + data.image" class="img-fluid"><br/>
<pre class="error-info" v-for="err in data.errors">{{ err }}</pre>
</div>
</div>
</div>`,
data() {
return state
}
})
}

View File

@@ -0,0 +1,7 @@
const run = require('./run')
const component = require('./component')
module.exports = {
name: () => 'Puppeteer',
run,
component
}

View File

@@ -0,0 +1,92 @@
const config = require('../../config')
const path = require('path')
const fs = require('fs-extra')
const vueuiTestsPath = path.resolve(config.vueui, './tests')
const vueuiDistPath = path.resolve(config.vueui, './dist')
const klaw = require('klaw')
const express = require('express')
const puppeteer = require('puppeteer')
const app = express()
app.use(express.static(vueuiDistPath))
app.use('/tmpl', async (req, res) => {
const file = req.query.test
const theme = req.query.theme
const { data } = await fs.readJson(file)
res.send(config.template(theme, data))
})
module.exports = async function (signale) {
let tests = []
for await (const file of klaw(vueuiTestsPath)) {
if (!file.stats.isDirectory()) {
tests.push(file.path)
}
}
var server = app.listen(5221, () => {
signale.info(`Puppeteer web server listening at http://localhost:5221`)
})
// C:\Projektai\Aurora.3\vueui\tests\manifest.json
// http://localhost:5221/tmpl?test=C:\Projektai\Aurora.3\vueui\tests\manifest.json&theme=vueui%20theme-nano%20dark-theme
const browser = await puppeteer.launch({headless: false});
const page = await browser.newPage();
let results = {}
for (const testFile of tests) {
const { size } = await fs.readJson(testFile)
results[testFile] = {}
for (const theme of config.themes) {
results[testFile][theme] = {errors: []}
const ConsoleHandler = (message) => {
const type = message.type().substr(0, 3).toUpperCase()
if(type == 'ERR')
{
results[testFile][theme].errors.push(`${message._text}`)
}
}
const PageErrorHandler = ({ message }) => {
results[testFile][theme].errors.push(`${message}`)
}
page.on('console', ConsoleHandler)
page.on('pageerror', PageErrorHandler)
await page.goto(`http://localhost:5221/tmpl?test=${encodeURI(testFile)}&theme=${encodeURI(theme)}`)
await page.setViewport({
width: size[0],
height: size[1],
deviceScaleFactor: 1,
})
const screen = await page.screenshot({encoding: 'base64'})
results[testFile][theme].image = screen
// await new Promise((resolve, reject) => {
// setTimeout(() => {
// resolve()
// }, 3000)
// })
page.off('console', ConsoleHandler)
page.off('pageerror', PageErrorHandler)
}
}
// await new Promise((resolve, reject) => {
// setTimeout(() => {
// resolve()
// }, 1000 * 60)
// })
await browser.close()
server.close()
return {results}
}

View File

@@ -0,0 +1,5 @@
module.exports = [
require('./01_build'),
require('./02_lint'),
require('./03_puppeteer'),
]

View File

@@ -0,0 +1,559 @@
{
"size": [950, 700],
"data": {
"state": {
"spawnpoint": null,
"current_tag": "All",
"spawners": {
"ertcommander": {
"name": "ERT Commander",
"desc": "Command the response team from Central Command",
"cant_spawn": 0,
"can_edit": 1,
"enabled": 1,
"count": 0,
"spawnatoms": 0,
"max_count": 0,
"tags": ["Admin"],
"spawnpoints": null
},
"legionlegate": {
"name": "TCFL Legate",
"desc": "Command the TCFL onboard BLV The Tower, a legion patrolship from where Task Force XIII - Fortune operates from.",
"cant_spawn": 0,
"can_edit": 1,
"enabled": 1,
"count": 0,
"spawnatoms": 0,
"max_count": 0,
"tags": ["Admin"],
"spawnpoints": null
},
"cciaagent": {
"name": "CCIA Agent",
"desc": "Board the Aurora, annoy crew with your interviews and get squashed by your own shuttle.",
"cant_spawn": 0,
"can_edit": 1,
"enabled": 1,
"count": 0,
"spawnatoms": 0,
"max_count": 0,
"tags": ["Admin"],
"spawnpoints": null
},
"cciaescort": {
"name": "CCIA Escort",
"desc": "Escort a CCIA Agent to the station, watch them annoy the crew and prevent them from throwing themselves under their own shuttle. (This spawner is not enabled.)",
"cant_spawn": "This spawner is not enabled.",
"can_edit": 1,
"enabled": 0,
"count": 0,
"spawnatoms": 0,
"max_count": 1,
"tags": ["Admin"],
"spawnpoints": null
},
"checkpointsec_prepatory": {
"name": "Aurora Prepatory Wing Security",
"desc": "Act as an Odin security officer, guide lost newcomers onto the arrivals shuttle if the need arises.",
"cant_spawn": 0,
"can_edit": 1,
"enabled": 1,
"count": 0,
"spawnatoms": 0,
"max_count": 3,
"tags": ["Admin"],
"spawnpoints": ["OdinPrepatory"]
},
"checkpointsec": {
"name": "Odin Checkpoint Security",
"desc": "Secure the Odin checkpoint. Verify the identity of everyone passing through, perform random searches on \"suspicious\" crew. (This spawner is not enabled.)",
"cant_spawn": "This spawner is not enabled.",
"can_edit": 1,
"enabled": 0,
"count": 0,
"spawnatoms": 0,
"max_count": 4,
"tags": ["Admin"],
"spawnpoints": ["OdinCheckpoint"]
},
"odindoc": {
"name": "Odin Medical Doctor",
"desc": "Provide medical assistance for those arriving on the Odin. (This spawner is not enabled.)",
"cant_spawn": "This spawner is not enabled.",
"can_edit": 1,
"enabled": 0,
"count": 0,
"spawnatoms": 0,
"max_count": 4,
"tags": ["Admin"],
"spawnpoints": ["OdinDoctor"]
},
"odinpharm": {
"name": "Odin Pharmacist",
"desc": "Provide medication for the Doctors on the Odin and those in need. (This spawner is not enabled.)",
"cant_spawn": "This spawner is not enabled.",
"can_edit": 1,
"enabled": 0,
"count": 0,
"spawnatoms": 0,
"max_count": 1,
"tags": ["Admin"],
"spawnpoints": ["OdinPharm"]
},
"odinchef": {
"name": "Odin Chef",
"desc": "Feed starving crew members on the Odin. (This spawner is not enabled.)",
"cant_spawn": "This spawner is not enabled.",
"can_edit": 1,
"enabled": 0,
"count": 0,
"spawnatoms": 0,
"max_count": 2,
"tags": ["Admin"],
"spawnpoints": ["OdinChef"]
},
"odinbartender": {
"name": "Odin Bartender",
"desc": "Ensure enough drinks are available to the crew on the Odin. (This spawner is not enabled.)",
"cant_spawn": "This spawner is not enabled.",
"can_edit": 1,
"enabled": 0,
"count": 0,
"spawnatoms": 0,
"max_count": 1,
"tags": ["Admin"],
"spawnpoints": ["OdinBartender"]
},
"odinjanitor": {
"name": "Odin Sanitation Specialist",
"desc": "You are a expert in your field. A true authority. The crew looks to you when they get into a sticky situation. You are a janitor on the Odin. (This spawner is not enabled.)",
"cant_spawn": "This spawner is not enabled.",
"can_edit": 1,
"enabled": 0,
"count": 0,
"spawnatoms": 0,
"max_count": 1,
"tags": ["Admin"],
"spawnpoints": ["OdinJanitor"]
},
"tcflsentinel": {
"name": "TCFL Sentinel",
"desc": "Secure BLV The Tower from any would-be interlopers, provide assistance to returning personnel and/or evacuees. (This spawner is not enabled.)",
"cant_spawn": "This spawner is not enabled.",
"can_edit": 1,
"enabled": 0,
"count": 0,
"spawnatoms": 0,
"max_count": 4,
"tags": ["Admin"],
"spawnpoints": ["TCFLSentinel"]
},
"fibescort": {
"name": "FIB Escort",
"desc": "Protect the agents of the Federal Investigations Bureau while on the field. (This spawner is not enabled.)",
"cant_spawn": "This spawner is not enabled.",
"can_edit": 1,
"enabled": 0,
"count": 0,
"spawnatoms": 0,
"max_count": 1,
"tags": ["Admin"],
"spawnpoints": null
},
"fib": {
"name": "FIB Agent",
"desc": "Investigate issues related to crimes under the jurisdiction of the Federal Investigations Bureau.",
"cant_spawn": 0,
"can_edit": 1,
"enabled": 1,
"count": 0,
"spawnatoms": 0,
"max_count": 0,
"tags": ["Admin"],
"spawnpoints": null
},
"burglarpod": {
"name": "Burglar",
"desc": "Your last attempt at petty theft went awry, and now you're heading toward an asteroid in a ratty escape pod. (This spawner is not enabled.)",
"cant_spawn": "This spawner is not enabled.",
"can_edit": 1,
"enabled": 0,
"count": 0,
"spawnatoms": 0,
"max_count": 1,
"tags": ["External"],
"spawnpoints": null
},
"rescuepodsurv": {
"name": "Rescue Pod Survivor",
"desc": "You managed to get into a rescue pod and landed somewhere on an asteroid. (This spawner is not enabled.)",
"cant_spawn": "This spawner is not enabled.",
"can_edit": 1,
"enabled": 0,
"count": 0,
"spawnatoms": 0,
"max_count": 1,
"tags": ["External"],
"spawnpoints": null
},
"merchantass": {
"name": "Merchants Assistant",
"desc": "Assist the Merchant with their duties. (This spawner is not enabled.)",
"cant_spawn": "This spawner is not enabled.",
"can_edit": 1,
"enabled": 0,
"count": 0,
"spawnatoms": 0,
"max_count": 1,
"tags": ["External"],
"spawnpoints": ["MerchantAss"]
},
"visitor": {
"name": "Visitor",
"desc": "You are a random visitor that boarded the NSS Aurora, visiting for any reason you can think of. You do not have any records, as you are not a Nanotrasen employee. (This spawner is not enabled.)",
"cant_spawn": "This spawner is not enabled.",
"can_edit": 1,
"enabled": 0,
"count": 0,
"spawnatoms": 0,
"max_count": 1,
"tags": ["External"],
"spawnpoints": null
},
"ntapl": {
"name": "NT Asset Protection Leader",
"desc": "Leader of NT's Asset Protection team. (This spawner is not enabled.)",
"cant_spawn": "This spawner is not enabled.",
"can_edit": 1,
"enabled": 0,
"count": 0,
"spawnatoms": 0,
"max_count": 1,
"tags": ["Response Teams"],
"spawnpoints": ["DeathERTSpawn"]
},
"ntaps": {
"name": "NT Asset Protection Specialist",
"desc": "Protectors of NanoTrasen's bottom line. The last thing you never see. (This spawner is not enabled.)",
"cant_spawn": "This spawner is not enabled.",
"can_edit": 1,
"enabled": 0,
"count": 0,
"spawnatoms": 0,
"max_count": 3,
"tags": ["Response Teams"],
"spawnpoints": ["DeathERTSpawn"]
},
"iacbodyguard": {
"name": "IAC Bodyguard",
"desc": "A highly trained bodyguard. Sticks close to the medics while they work. (This spawner is not enabled.)",
"cant_spawn": "This spawner is not enabled.",
"can_edit": 1,
"enabled": 0,
"count": 0,
"spawnatoms": 0,
"max_count": 2,
"tags": ["Response Teams"],
"spawnpoints": ["ERTSpawn"]
},
"iacparamedic": {
"name": "IAC Paramedic",
"desc": "A highly trained paramedic. You grab injured people and bring them to the doctor. You are trained in nursing duties as well. (This spawner is not enabled.)",
"cant_spawn": "This spawner is not enabled.",
"can_edit": 1,
"enabled": 0,
"count": 0,
"spawnatoms": 0,
"max_count": 2,
"tags": ["Response Teams"],
"spawnpoints": ["ERTSpawn"]
},
"iacdoctor": {
"name": "IAC Doctor",
"desc": "A highly trained doctor. Can do most medical procedures even under severe stress. The de-facto lead of the IAC response team. (This spawner is not enabled.)",
"cant_spawn": "This spawner is not enabled.",
"can_edit": 1,
"enabled": 0,
"count": 0,
"spawnatoms": 0,
"max_count": 3,
"tags": ["Response Teams"],
"spawnpoints": ["ERTSpawn"]
},
"katspec": {
"name": "Kataphract-Hopeful Specialist",
"desc": "A Zo'saa (squire) trained in medicine from the local Kataphract guild. (This spawner is not enabled.)",
"cant_spawn": "This spawner is not enabled.",
"can_edit": 1,
"enabled": 0,
"count": 0,
"spawnatoms": 0,
"max_count": 1,
"tags": ["Response Teams"],
"spawnpoints": ["ERTSpawn"]
},
"katlead": {
"name": "Kataphract Knight",
"desc": "A brave Saa (Knight) of the local Kataphract Guild. Two together operate as leaders of the team. (This spawner is not enabled.)",
"cant_spawn": "This spawner is not enabled.",
"can_edit": 1,
"enabled": 0,
"count": 0,
"spawnatoms": 0,
"max_count": 2,
"tags": ["Response Teams"],
"spawnpoints": ["ERTSpawn"]
},
"kathope": {
"name": "Kataphract-Hopeful",
"desc": "A Zo'saa (squire) of the local Kataphract Guild. (This spawner is not enabled.)",
"cant_spawn": "This spawner is not enabled.",
"can_edit": 1,
"enabled": 0,
"count": 0,
"spawnatoms": 0,
"max_count": 2,
"tags": ["Response Teams"],
"spawnpoints": ["ERTSpawn"]
},
"eridanidocbodyguard": {
"name": "Eridani Medical Contractor Bodyguard",
"desc": "A highly trained bodyguard. Sticks close to the medics while they work. (This spawner is not enabled.)",
"cant_spawn": "This spawner is not enabled.",
"can_edit": 1,
"enabled": 0,
"count": 0,
"spawnatoms": 0,
"max_count": 2,
"tags": ["Response Teams"],
"spawnpoints": ["ERTSpawn"]
},
"eridaniparamedic": {
"name": "Eridani Medical Contractor Paramedic",
"desc": "A highly trained paramedic. You grab injured people and bring them to the medical doctor. You are trained in nursing duties as well. (This spawner is not enabled.)",
"cant_spawn": "This spawner is not enabled.",
"can_edit": 1,
"enabled": 0,
"count": 0,
"spawnatoms": 0,
"max_count": 2,
"tags": ["Response Teams"],
"spawnpoints": ["ERTSpawn"]
},
"eridanidoctor": {
"name": "Eridani Medical Contractor Doctor",
"desc": "A highly trained Eridani contractor doctor medical doctor. Can do most medical procedures even under severe stress. (This spawner is not enabled.)",
"cant_spawn": "This spawner is not enabled.",
"can_edit": 1,
"enabled": 0,
"count": 0,
"spawnatoms": 0,
"max_count": 2,
"tags": ["Response Teams"],
"spawnpoints": ["ERTSpawn"]
},
"mercs": {
"name": "Mercenary Medical Specialist",
"desc": "The only medic of the freelancer mercenary team. (This spawner is not enabled.)",
"cant_spawn": "This spawner is not enabled.",
"can_edit": 1,
"enabled": 0,
"count": 0,
"spawnatoms": 0,
"max_count": 1,
"tags": ["Response Teams"],
"spawnpoints": ["ERTSpawn"]
},
"merce": {
"name": "Mercenary Combat Engineer",
"desc": "The only dedicated engineer of the freelancer mercenary team. (This spawner is not enabled.)",
"cant_spawn": "This spawner is not enabled.",
"can_edit": 1,
"enabled": 0,
"count": 0,
"spawnatoms": 0,
"max_count": 1,
"tags": ["Response Teams"],
"spawnpoints": ["ERTSpawn"]
},
"mercl": {
"name": "Mercenary Leader",
"desc": "The leader of the freelancer mercenary team. (This spawner is not enabled.)",
"cant_spawn": "This spawner is not enabled.",
"can_edit": 1,
"enabled": 0,
"count": 0,
"spawnatoms": 0,
"max_count": 1,
"tags": ["Response Teams"],
"spawnpoints": ["ERTSpawn"]
},
"mercr": {
"name": "Mercenary Responder",
"desc": "Rank and file of a freelancer mercenary team. (This spawner is not enabled.)",
"cant_spawn": "This spawner is not enabled.",
"can_edit": 1,
"enabled": 0,
"count": 0,
"spawnatoms": 0,
"max_count": 2,
"tags": ["Response Teams"],
"spawnpoints": ["ERTSpawn"]
},
"ntmed": {
"name": "Nanotrasen Medical Specialist",
"desc": "A medical specialist of the Nanotrasen Phoenix ERT. (This spawner is not enabled.)",
"cant_spawn": "This spawner is not enabled.",
"can_edit": 1,
"enabled": 0,
"count": 0,
"spawnatoms": 0,
"max_count": 1,
"tags": ["Response Teams"],
"spawnpoints": ["NTERTSpawn"]
},
"nteng": {
"name": "Nanotrasen Engineering Specialist",
"desc": "An engineering specialist of the Nanotrasen Phoenix ERT. (This spawner is not enabled.)",
"cant_spawn": "This spawner is not enabled.",
"can_edit": 1,
"enabled": 0,
"count": 0,
"spawnatoms": 0,
"max_count": 1,
"tags": ["Response Teams"],
"spawnpoints": ["NTERTSpawn"]
},
"ntlead": {
"name": "Nanotrasen Leader",
"desc": "The leader of the Nanotrasen Phoenix ERT. (This spawner is not enabled.)",
"cant_spawn": "This spawner is not enabled.",
"can_edit": 1,
"enabled": 0,
"count": 0,
"spawnatoms": 0,
"max_count": 1,
"tags": ["Response Teams"],
"spawnpoints": ["NTERTSpawn"]
},
"ntert": {
"name": "Nanotrasen Responder",
"desc": "A responder of the Nanotrasen Phoenix ERT. (This spawner is not enabled.)",
"cant_spawn": "This spawner is not enabled.",
"can_edit": 1,
"enabled": 0,
"count": 0,
"spawnatoms": 0,
"max_count": 2,
"tags": ["Response Teams"],
"spawnpoints": ["NTERTSpawn"]
},
"syndl": {
"name": "Syndicate Commando Leader",
"desc": "The leader of the Syndicate's elite commandos. (This spawner is not enabled.)",
"cant_spawn": "This spawner is not enabled.",
"can_edit": 1,
"enabled": 0,
"count": 0,
"spawnatoms": 0,
"max_count": 1,
"tags": ["Response Teams"],
"spawnpoints": ["SyndERTSpawn"]
},
"syndc": {
"name": "Syndicate Commando",
"desc": "Well-equipped commandos of the criminal Syndicate. (This spawner is not enabled.)",
"cant_spawn": "This spawner is not enabled.",
"can_edit": 1,
"enabled": 0,
"count": 0,
"spawnatoms": 0,
"max_count": 3,
"tags": ["Response Teams"],
"spawnpoints": ["SyndERTSpawn"]
},
"tcfls": {
"name": "TCFL Legionnaire",
"desc": "An experienced Legionnaire of the TCFL. (This spawner is not enabled.)",
"cant_spawn": "This spawner is not enabled.",
"can_edit": 1,
"enabled": 0,
"count": 0,
"spawnatoms": 0,
"max_count": 2,
"tags": ["Response Teams"],
"spawnpoints": ["TCFLERTSpawn"]
},
"tcfll": {
"name": "TCFL Prefect",
"desc": "A leader of Task Force XIII - Fortune. (This spawner is not enabled.)",
"cant_spawn": "This spawner is not enabled.",
"can_edit": 1,
"enabled": 0,
"count": 0,
"spawnatoms": 0,
"max_count": 1,
"tags": ["Response Teams"],
"spawnpoints": ["TCFLERTSpawn - Prefect"]
},
"tcflpl": {
"name": "TCFL Dropship Pilot",
"desc": "A dropship pilot of the TCFL. (This spawner is not enabled.)",
"cant_spawn": "This spawner is not enabled.",
"can_edit": 1,
"enabled": 0,
"count": 0,
"spawnatoms": 0,
"max_count": 1,
"tags": ["Response Teams"],
"spawnpoints": ["TCFLERTSpawn - Pilot"]
},
"tcflr": {
"name": "TCFL Volunteer",
"desc": "The Tau Ceti Foreign Legion's rank and file. (This spawner is not enabled.)",
"cant_spawn": "This spawner is not enabled.",
"can_edit": 1,
"enabled": 0,
"count": 0,
"spawnatoms": 0,
"max_count": 3,
"tags": ["Response Teams"],
"spawnpoints": ["TCFLERTSpawn"]
},
"maintdrone": {
"name": "Maintenance Drone",
"desc": "Maintain and Improve the Systems on the Aurora.",
"cant_spawn": 0,
"can_edit": 1,
"enabled": 1,
"count": 0,
"spawnatoms": 0,
"max_count": 0,
"tags": ["Simple Mobs"],
"spawnpoints": ["the plating", "the plating"]
},
"rat": {
"name": "Rat",
"desc": "Join as a Rat on the aurora, a common nuisance to the crew.",
"cant_spawn": 0,
"can_edit": 1,
"enabled": 1,
"count": 0,
"spawnatoms": 0,
"max_count": 0,
"tags": ["Simple Mobs"],
"spawnpoints": null
}
}
},
"assets": [],
"active": "misc-ghostspawner",
"uiref": "[0x0]",
"status": 2,
"title": "Ghost Role Spawner",
"wtime": 0,
"debug": 1,
"roundstart_hour": 15
}
}

201
vueui/tests/join meniu.json Normal file
View File

@@ -0,0 +1,201 @@
{
"size": [330, 720],
"data": {
"state": {
"round_duration": "01:14",
"alert_level": "Green",
"character_name": "Hadriana Antonia",
"shuttle_status": "",
"unique_role_available": 0,
"jobs_available": 27,
"jobs_list": {
"Command": [],
"Security": {
"Warden": {
"title": "Warden",
"head": 0,
"total_positions": 1,
"current_positions": 0
},
"Detective": {
"title": "Detective",
"head": 0,
"total_positions": 1,
"current_positions": 0
},
"Security Officer": {
"title": "Security Officer",
"head": 0,
"total_positions": 4,
"current_positions": 1
},
"Security Cadet": {
"title": "Security Cadet",
"head": 0,
"total_positions": 2,
"current_positions": 0
}
},
"Engineering": {
"Station Engineer": {
"title": "Station Engineer",
"head": 0,
"total_positions": 5,
"current_positions": 3
},
"Atmospheric Technician": {
"title": "Atmospheric Technician",
"head": 0,
"total_positions": 3,
"current_positions": 0
},
"Engineering Apprentice": {
"title": "Engineering Apprentice",
"head": 0,
"total_positions": 3,
"current_positions": 0
}
},
"Medical": {
"Physician": {
"title": "Physician",
"head": 0,
"total_positions": 4,
"current_positions": 1
},
"Pharmacist": {
"title": "Pharmacist",
"head": 0,
"total_positions": 2,
"current_positions": 1
},
"First Responder": {
"title": "First Responder",
"head": 0,
"total_positions": 2,
"current_positions": 1
},
"Medical Intern": {
"title": "Medical Intern",
"head": 0,
"total_positions": 3,
"current_positions": 1
}
},
"Science": {
"Roboticist": {
"title": "Roboticist",
"head": 0,
"total_positions": 2,
"current_positions": 1
},
"Lab Assistant": {
"title": "Lab Assistant",
"head": 0,
"total_positions": 3,
"current_positions": 0
}
},
"Cargo": {
"Quartermaster": {
"title": "Quartermaster",
"head": 1,
"total_positions": 1,
"current_positions": 0
},
"Cargo Technician": {
"title": "Cargo Technician",
"head": 0,
"total_positions": 4,
"current_positions": 1
},
"Shaft Miner": {
"title": "Shaft Miner",
"head": 0,
"total_positions": 4,
"current_positions": 1
}
},
"Civilian": {
"Assistant": {
"title": "Assistant",
"head": 0,
"total_positions": -1,
"current_positions": 0
},
"Visitor": {
"title": "Visitor",
"head": 0,
"total_positions": -1,
"current_positions": 0
},
"Bartender": {
"title": "Bartender",
"head": 0,
"total_positions": 2,
"current_positions": 0
},
"Chef": {
"title": "Chef",
"head": 0,
"total_positions": 2,
"current_positions": 1
},
"Gardener": {
"title": "Gardener",
"head": 0,
"total_positions": 2,
"current_positions": 0
},
"Janitor": {
"title": "Janitor",
"head": 0,
"total_positions": 2,
"current_positions": 0
},
"Corporate Reporter": {
"title": "Corporate Reporter",
"head": 0,
"total_positions": 1,
"current_positions": 0
},
"Librarian": {
"title": "Librarian",
"head": 0,
"total_positions": 1,
"current_positions": 0
},
"Chaplain": {
"title": "Chaplain",
"head": 0,
"total_positions": 1,
"current_positions": 0
}
},
"Equipment": {
"AI": {
"title": "AI",
"head": 1,
"total_positions": 1,
"current_positions": 0
},
"Cyborg": {
"title": "Cyborg",
"head": 0,
"total_positions": 2,
"current_positions": 0
}
},
"Miscellaneous": []
}
},
"assets": { "character": { "ref": "0x0" } },
"active": "late-choices",
"uiref": "[0x0]",
"status": 2,
"title": "Late-Join Choices",
"wtime": 0,
"debug": 0,
"roundstart_hour": 11
}
}

165
vueui/tests/manifest.json Normal file
View File

@@ -0,0 +1,165 @@
{
"size": [580, 700],
"data": {
"state": {
"manifest": {
"Command": [
{
"name": "Xiao Zemin",
"rank": "Research Director",
"active": "Active",
"head": 0
}
],
"Security": [
{
"name": "Idus Martiae",
"rank": "Forensic Technician",
"active": "Active",
"head": 0
},
{
"name": "Ronald Monday",
"rank": "Security Officer",
"active": "Active",
"head": 0
}
],
"Engineering": [
{
"name": "Yeva Petrova",
"rank": "Station Engineer",
"active": "Active",
"head": 0
},
{
"name": "Valetzrhonaja Nayrragh'Rakhan",
"rank": "Station Engineer",
"active": "Active",
"head": 0
},
{
"name": "Julian Chet",
"rank": "Station Engineer",
"active": "Active",
"head": 0
}
],
"Medical": [
{
"name": "Odessa Arenth",
"rank": "Medical Intern",
"active": "Active",
"head": 0
},
{
"name": "Sanaa Al-Mansoor",
"rank": "Physician",
"active": "Active",
"head": 0
},
{
"name": "Imari Mneme",
"rank": "First Responder",
"active": "Active",
"head": 0
},
{
"name": "Jared Looper",
"rank": "Pharmacist",
"active": "Active",
"head": 0
},
{
"name": "Eric Foster",
"rank": "Surgeon",
"active": "Active",
"head": 0
}
],
"Science": [
{
"name": "Xiao Zemin",
"rank": "Research Director",
"active": "Active",
"head": 1
},
{
"name": "Sezrak Han'San",
"rank": "Anomalist",
"active": "Active",
"head": 0
},
{
"name": "Astra Zemin",
"rank": "Xenobotanist",
"active": "Active",
"head": 0
},
{
"name": "Tavarr Batov",
"rank": "Scientist",
"active": "Active",
"head": 0
},
{
"name": "Sam Chalegre",
"rank": "Roboticist",
"active": "Active",
"head": 0
},
{
"name": "Jack Monroe",
"rank": "Anomalist",
"active": "Active",
"head": 0
},
{
"name": "Zeya Zemphir",
"rank": "Xenobiologist",
"active": "Active",
"head": 0
}
],
"Cargo": [
{
"name": "Safaa Sadar",
"rank": "Cargo Technician",
"active": "Active",
"head": 0
},
{
"name": "Joe Harry",
"rank": "Shaft Miner",
"active": "Active",
"head": 0
},
{
"name": "To Arrange The Gifts Of Those Above",
"rank": "Cargo Technician",
"active": "Active",
"head": 0
}
],
"Civilian": [
{
"name": "Huey Richter",
"rank": "Chef",
"active": "Active",
"head": 0
}
],
"Equipment": [],
"Miscellaneous": []
}
},
"assets": [],
"active": "manifest",
"uiref": "[0x0]",
"status": 2,
"title": "Crew Manifest",
"wtime": 0,
"debug": 0,
"roundstart_hour": 11
}
}

25
vueui/tests/vote.json Normal file
View File

@@ -0,0 +1,25 @@
{
"size": [400, 500],
"data": {
"state": {
"choices": [],
"mode": null,
"voted": null,
"endtime": 1894,
"allow_vote_restart": 1,
"allow_vote_mode": 0,
"allow_extra_antags": 0,
"question": "",
"is_code_red": 0,
"isstaff": 0
},
"assets": [],
"active": "misc-voting",
"uiref": "[0x0]",
"status": 2,
"title": "Voting panel",
"wtime": 0,
"debug": 0,
"roundstart_hour": 11
}
}