Windows and compability

This commit is contained in:
Artur
2020-06-30 16:42:52 +03:00
parent fa6386f1a9
commit 70ee233c5e
5 changed files with 1008 additions and 982 deletions

View File

@@ -1,6 +1,6 @@
import { Fragment } from 'inferno';
import { useBackend } from '../backend';
import { Box, Button, LabeledList, ProgressBar, Section } from '../components';
import { Box, Button, LabeledList, ProgressBar, Section, Window } from '../components';
export const SkillPanel = (props, context) => {
const { act, data } = useBackend(context);
@@ -15,107 +15,111 @@ export const SkillPanel = (props, context) => {
fontWeight: 'bold',
};
return (
<Section
title={data.playername}
buttons={(
<Button
icon={see_mods ? 'Enabled' : 'Disabled'}
content={see_mods ? 'Modifiers Shown' : 'Modifiers Hidden'}
onClick={() => act('toggle_mods')} />
)}>
<LabeledList>
{skills.map(skill => (
<LabeledList.Item key={skill.name} label={skill.name}>
<span style={skillyellow}>
{skill.desc}
<br />
`Modifiers: ${skill.modifiers}`
</span>
<br />
{!!skill.level_based && (
<Box>
{see_mods ? (
<span>
Level: [
<span style={skill.mod_style}>
{skill.lvl_mod}
</span>]
</span>
) : (
<span>
Level: [
<span style={skill.base_style}>
{skill.lvl_base}
</span>]
</span>
)}
<Window>
<Window.Content scrollable>
<Section
title={data.playername}
buttons={(
<Button
icon={see_mods ? 'Enabled' : 'Disabled'}
content={see_mods ? 'Modifiers Shown' : 'Modifiers Hidden'}
onClick={() => act('toggle_mods')} />
)}>
<LabeledList>
{skills.map(skill => (
<LabeledList.Item key={skill.name} label={skill.name}>
<span style={skillyellow}>
{skill.desc}
<br />
`Modifiers: ${skill.modifiers}`
</span>
<br />
Total Experience:
{see_mods ? (
<span>[{skill.value_mod} XP]</span>
) : (
<span>[{skill.value_base} XP]</span>
)}
<br />
XP To Next Level:
{skill.max_lvl !== (see_mods
? skill.lvl_mod_num
: skill.lvl_base_num) ? (
<Box inline>
{see_mods ? (
<span>{skill.xp_next_lvl_mod}</span>
) : (
<span>{skill.xp_next_lvl_base}</span>
)}
</Box>
) : (
<span style={skillgreen}>
[MAXXED]
</span>
)}
</Box>
)}
{see_mods ? (
<span>{skill.mod_readout}</span>
) : (
<span>{skill.base_readout}</span>
)}
{see_mods ? (
<ProgressBar
value={skill.percent_mod}
color="good" />
) : (
<ProgressBar
value={skill.percent_base}
color="good" />
)}
<br />
{!!data.admin && (
<Fragment>
<Button
content="Adjust Exp"
onClick={() => act('adj_exp', {
skill: skill.path,
})} />
<Button
content="Set Exp"
onClick={() => act('set_exp', {
skill: skill.path,
})} />
{!!skill.level_based && (
<Button
content="Set Level"
onClick={() => act('set_lvl', {
skill: skill.path,
})} />
<Box>
{see_mods ? (
<span>
Level: [
<span style={skill.mod_style}>
{skill.lvl_mod}
</span>]
</span>
) : (
<span>
Level: [
<span style={skill.base_style}>
{skill.lvl_base}
</span>]
</span>
)}
<br />
Total Experience:
{see_mods ? (
<span>[{skill.value_mod} XP]</span>
) : (
<span>[{skill.value_base} XP]</span>
)}
<br />
XP To Next Level:
{skill.max_lvl !== (see_mods
? skill.lvl_mod_num
: skill.lvl_base_num) ? (
<Box inline>
{see_mods ? (
<span>{skill.xp_next_lvl_mod}</span>
) : (
<span>{skill.xp_next_lvl_base}</span>
)}
</Box>
) : (
<span style={skillgreen}>
[MAXXED]
</span>
)}
</Box>
)}
</Fragment>
)}
<br />
<br />
</LabeledList.Item>
))}
</LabeledList>
</Section>
{see_mods ? (
<span>{skill.mod_readout}</span>
) : (
<span>{skill.base_readout}</span>
)}
{see_mods ? (
<ProgressBar
value={skill.percent_mod}
color="good" />
) : (
<ProgressBar
value={skill.percent_base}
color="good" />
)}
<br />
{!!data.admin && (
<Fragment>
<Button
content="Adjust Exp"
onClick={() => act('adj_exp', {
skill: skill.path,
})} />
<Button
content="Set Exp"
onClick={() => act('set_exp', {
skill: skill.path,
})} />
{!!skill.level_based && (
<Button
content="Set Level"
onClick={() => act('set_lvl', {
skill: skill.path,
})} />
)}
</Fragment>
)}
<br />
<br />
</LabeledList.Item>
))}
</LabeledList>
</Section>
</Window.Content>
</Window>
);
};

View File

@@ -2,7 +2,7 @@ import { Fragment } from 'inferno';
import { useBackend } from '../backend';
import { toFixed } from 'common/math';
import { RADIO_CHANNELS } from '../constants';
import { Button, LabeledList, NumberInput, NoticeBox, Section, Input } from '../components';
import { Button, LabeledList, NumberInput, NoticeBox, Section, Input, Window } from '../components';
export const TeleInteract = (props, context) => {
const { act, data } = useBackend(context);
@@ -24,215 +24,221 @@ export const TeleInteract = (props, context) => {
isbus = false,
} = machine;
return (
<Fragment>
{!!notice && (
<NoticeBox>
{notice}
</NoticeBox>
)}
<Section title="Network Access">
<LabeledList>
<LabeledList.Item label="Power Status">
<Button
content={power ? 'On' : 'Off'}
icon={power ? 'power-off' : 'times'}
color={power ? 'good' : 'bad'}
onClick={() => act('toggle')}
/>
</LabeledList.Item>
{power ? (
<Fragment>
<LabeledList.Item label="Identification String">
<Input
value={id}
width="150px"
maxLength={255}
onChange={(e, value) => act('machine', {
'id': value,
})} />
<Window>
<Window.Content scrollable>
<Fragment>
{!!notice && (
<NoticeBox>
{notice}
</NoticeBox>
)}
<Section title="Network Access">
<LabeledList>
<LabeledList.Item label="Power Status">
<Button
content={power ? 'On' : 'Off'}
icon={power ? 'power-off' : 'times'}
color={power ? 'good' : 'bad'}
onClick={() => act('toggle')}
/>
</LabeledList.Item>
<LabeledList.Item label="Network">
<Input
value={network}
width="150px"
maxLength={15}
onChange={(e, value) => act('machine', {
'network': value,
})} />
</LabeledList.Item>
<LabeledList.Item
label="Prefabrication"
color={power ? 'good' : 'bad'}>
{prefab ? 'TRUE' : 'FALSE'}
</LabeledList.Item>
{isrelay ? (
{power ? (
<Fragment>
<LabeledList.Item label="Broadcasting">
<Button
content={machine.broadcast ? 'YES' : 'NO'}
icon={machine.broadcast ? 'check' : 'times'}
color={machine.broadcast ? 'good' : 'bad'}
onClick={() => act('relay', {
'broadcast': true,
})}
/>
<LabeledList.Item label="Identification String">
<Input
value={id}
width="150px"
maxLength={255}
onChange={(e, value) => act('machine', {
'id': value,
})} />
</LabeledList.Item>
<LabeledList.Item label="Receiving">
<Button
content={machine.receiving ? 'YES' : 'NO'}
icon={machine.receiving ? 'check' : 'times'}
color={machine.receiving ? 'good' : 'bad'}
onClick={() => act('relay', {
'receiving': true,
})}
/>
<LabeledList.Item label="Network">
<Input
value={network}
width="150px"
maxLength={15}
onChange={(e, value) => act('machine', {
'network': value,
})} />
</LabeledList.Item>
<LabeledList.Item
label="Prefabrication"
color={power ? 'good' : 'bad'}>
{prefab ? 'TRUE' : 'FALSE'}
</LabeledList.Item>
{isrelay ? (
<Fragment>
<LabeledList.Item label="Broadcasting">
<Button
content={machine.broadcast ? 'YES' : 'NO'}
icon={machine.broadcast ? 'check' : 'times'}
color={machine.broadcast ? 'good' : 'bad'}
onClick={() => act('relay', {
'broadcast': true,
})}
/>
</LabeledList.Item>
<LabeledList.Item label="Receiving">
<Button
content={machine.receiving ? 'YES' : 'NO'}
icon={machine.receiving ? 'check' : 'times'}
color={machine.receiving ? 'good' : 'bad'}
onClick={() => act('relay', {
'receiving': true,
})}
/>
</LabeledList.Item>
</Fragment>
) : (
''
)}
{isbus ? (
<LabeledList.Item label="Change Signal Frequency">
<Button
content={machine.chang_frequency
? 'Enabled'
: 'Disabled'}
icon={machine.chang_frequency ? 'power-off' : 'times'}
color={machine.chang_frequency ? 'good' : 'bad'}
onClick={() => act('frequency', {
'toggle': true,
})}
/>
{machine.chang_frequency ? (
<NumberInput
animate
unit="kHz"
step={0.2}
stepPixelSize={10}
minValue={1201 / 10}
maxValue={1599 / 10}
value={machine.chang_freq_value / 10}
format={value => toFixed(value, 1)}
onChange={(e, value) => act('frequency', {
'adjust': value,
})} />
) : (
''
)}
</LabeledList.Item>
) : (
''
)}
{hidden ? (
<LabeledList.Item label="Shadow Link">
{'ACTIVE'}
</LabeledList.Item>
) : (
''
)}
{multitool ? (
<LabeledList.Item
label="Multitool buffer"
buttons={multitool_buf ? (
<Fragment>
<Button
content="Link"
onClick={() => act('multitool', {
'Link': true,
})}
/>
<Button
content="Flush"
onClick={() => act('multitool', {
'Flush': true,
})}
/>
</Fragment>
) : (
<Button
content="Add Machine"
onClick={() => act('multitool', {
'Add': true,
})}
/>
)}>
{multitool_buf ? (
`${multitool_buf.name} (${multitool_buf.id})`
) : (
''
)}
</LabeledList.Item>
) : (
''
)}
</Fragment>
) : (
''
)}
{isbus ? (
<LabeledList.Item label="Change Signal Frequency">
</LabeledList>
{power ? (
<Fragment>
<Section
title="Linked Network Entities"
level={2}>
<LabeledList>
{links.map(entity => {
return (
<LabeledList.Item
key={entity.name}
label={entity.ref}
buttons={(
<Button
content="Remove"
onClick={() => act('unlink', {
'value': entity.ref,
})}
/>
)}>
{`${entity.name} (${entity.id})`}
</LabeledList.Item>
);
})}
</LabeledList>
</Section>
<Section
title="Filtering Frequencies"
level={2}>
<Button
content={machine.chang_frequency ? 'Enabled' : 'Disabled'}
icon={machine.chang_frequency ? 'power-off' : 'times'}
color={machine.chang_frequency ? 'good' : 'bad'}
onClick={() => act('frequency', {
'toggle': true,
content="Add Filter"
onClick={() => act('freq', {
'add': true,
})}
/>
{machine.chang_frequency ? (
<NumberInput
animate
unit="kHz"
step={0.2}
stepPixelSize={10}
minValue={1201 / 10}
maxValue={1599 / 10}
value={machine.chang_freq_value / 10}
format={value => toFixed(value, 1)}
onChange={(e, value) => act('frequency', {
'adjust': value,
})} />
) : (
''
)}
</LabeledList.Item>
) : (
''
)}
{hidden ? (
<LabeledList.Item label="Shadow Link">
{'ACTIVE'}
</LabeledList.Item>
) : (
''
)}
{multitool ? (
<LabeledList.Item
label="Multitool buffer"
buttons={multitool_buf ? (
<Fragment>
<Button
content="Link"
onClick={() => act('multitool', {
'Link': true,
})}
/>
<Button
content="Flush"
onClick={() => act('multitool', {
'Flush': true,
})}
/>
</Fragment>
) : (
<Button
content="Add Machine"
onClick={() => act('multitool', {
'Add': true,
})}
/>
)}>
{multitool_buf ? (
`${multitool_buf.name} (${multitool_buf.id})`
) : (
''
)}
</LabeledList.Item>
) : (
''
)}
</Fragment>
) : (
''
)}
</LabeledList>
{power ? (
<Fragment>
<Section
title="Linked Network Entities"
level={2}>
<LabeledList>
{links.map(entity => {
return (
<LabeledList.Item
key={entity.name}
label={entity.ref}
buttons={(
<br />
<br />
{(freq_listening && freq_listening.length) ? (
freq_listening.map(thing => {
const valid = RADIO_CHANNELS
.find(channel => channel.freq === thing);
return (
<Button
content="Remove"
onClick={() => act('unlink', {
'value': entity.ref,
key={thing}
content={valid ? (
<span style={`color: ${valid.color}`}>
{`${thing} (${valid.name})`}
</span>
) : (
thing
)}
onClick={() => act('freq', {
'remove': thing,
})}
/>
)}>
{`${entity.name} (${entity.id})`}
</LabeledList.Item>
);
})}
</LabeledList>
</Section>
<Section
title="Filtering Frequencies"
level={2}>
<Button
content="Add Filter"
onClick={() => act('freq', {
'add': true,
})}
/>
<br />
<br />
{(freq_listening && freq_listening.length) ? (
freq_listening.map(thing => {
const valid = RADIO_CHANNELS
.find(channel => channel.freq === thing);
return (
<Button
key={thing}
content={valid ? (
<span style={`color: ${valid.color}`}>
{`${thing} (${valid.name})`}
</span>
) : (
thing
)}
onClick={() => act('freq', {
'remove': thing,
})}
/>
);
})
) : (
''
)}
</Section>
</Fragment>
) : (
''
)}
</Section>
</Fragment>
);
})
) : (
''
)}
</Section>
</Fragment>
) : (
''
)}
</Section>
</Fragment>
</Window.Content>
</Window>
);
};

View File

@@ -1,6 +1,6 @@
import { Fragment } from 'inferno';
import { useBackend } from '../backend';
import { Button, LabeledList, NoticeBox, Section, Tabs, Input } from '../components';
import { Button, LabeledList, NoticeBox, Section, Tabs, Input, Window } from '../components';
export const TeleLogBrowser = (props, context) => {
const { act, data } = useBackend(context);
@@ -13,162 +13,167 @@ export const TeleLogBrowser = (props, context) => {
} = data;
const operational = (selected && selected.status);
return (
<Fragment>
{!!notice && (
<NoticeBox>
{notice}
</NoticeBox>
)}
<Section title="Network Control">
<LabeledList>
<LabeledList.Item label="Network">
<Input
value={network}
width="150px"
maxLength={15}
onChange={(e, value) => act('network', {
'value': value,
})} />
</LabeledList.Item>
<LabeledList.Item
label="Memory"
buttons={(
<Fragment>
<Button
content="Flush Buffer"
icon="minus-circle"
disabled={!servers.length || !!selected}
onClick={() => act('release')} />
<Button
content="Probe Network"
icon="sync"
disabled={selected}
onClick={() => act('probe')} />
</Fragment>
)}>
{servers ? (
`${servers.length} currently probed and buffered`
) : (
'Buffer is empty!'
)}
</LabeledList.Item>
<LabeledList.Item
label="Selected Server"
buttons={(
<Button
content="Disconnect"
disabled={!selected}
onClick={() => act('mainmenu')}
/>
)}>
{selected ? (
`${selected.name} (${selected.id})`
) : (
"None (None)"
)}
</LabeledList.Item>
<LabeledList.Item label="Recorded Traffic">
{selected ? (
selected.traffic <= 1024 ? (
`${selected.traffic} Gigabytes`
) : (
`${Math.round(selected.traffic/1024)} Terrabytes`
)
) : (
'0 Gigabytes'
)}
</LabeledList.Item>
<LabeledList.Item
label="Server Status"
color={operational ? 'good' : 'bad'}>
{operational ? (
'Running'
) : (
'Server down!'
)}
</LabeledList.Item>
</LabeledList>
</Section>
<Tabs>
<Tabs.Tab
key="servers"
label="Servers">
<Section>
{(servers && servers.length) ? (
<LabeledList>
{servers.map(server => {
return (
<LabeledList.Item
key={server.name}
label={`${server.ref}`}
buttons={(
<Button
content="Connect"
selected={data.selected
<Window>
<Window.Content scrollable>
<Fragment>
{!!notice && (
<NoticeBox>
{notice}
</NoticeBox>
)}
<Section title="Network Control">
<LabeledList>
<LabeledList.Item label="Network">
<Input
value={network}
width="150px"
maxLength={15}
onChange={(e, value) => act('network', {
'value': value,
})} />
</LabeledList.Item>
<LabeledList.Item
label="Memory"
buttons={(
<Fragment>
<Button
content="Flush Buffer"
icon="minus-circle"
disabled={!servers.length || !!selected}
onClick={() => act('release')} />
<Button
content="Probe Network"
icon="sync"
disabled={selected}
onClick={() => act('probe')} />
</Fragment>
)}>
{servers ? (
`${servers.length} currently probed and buffered`
) : (
'Buffer is empty!'
)}
</LabeledList.Item>
<LabeledList.Item
label="Selected Server"
buttons={(
<Button
content="Disconnect"
disabled={!selected}
onClick={() => act('mainmenu')}
/>
)}>
{selected ? (
`${selected.name} (${selected.id})`
) : (
"None (None)"
)}
</LabeledList.Item>
<LabeledList.Item label="Recorded Traffic">
{selected ? (
selected.traffic <= 1024 ? (
`${selected.traffic} Gigabytes`
) : (
`${Math.round(selected.traffic/1024)} Terrabytes`
)
) : (
'0 Gigabytes'
)}
</LabeledList.Item>
<LabeledList.Item
label="Server Status"
color={operational ? 'good' : 'bad'}>
{operational ? (
'Running'
) : (
'Server down!'
)}
</LabeledList.Item>
</LabeledList>
</Section>
<Tabs>
<Tabs.Tab
key="servers"
label="Servers">
<Section>
{(servers && servers.length) ? (
<LabeledList>
{servers.map(server => {
return (
<LabeledList.Item
key={server.name}
label={`${server.ref}`}
buttons={(
<Button
content="Connect"
selected={data.selected
&& (server.ref === data.selected.ref)}
onClick={() => act('viewmachine', {
'value': server.id,
})} />
)}>
{`${server.name} (${server.id})`}
</LabeledList.Item>
);
})}
</LabeledList>
) : (
'404 Servers not found. Have you tried scanning the network?'
)}
</Section>
</Tabs.Tab>
<Tabs.Tab
key="messages"
label="Messages"
disabled={!operational}>
<Section title="Logs">
{(operational && selected_logs) ? (
selected_logs.map(logs => {
return (
<Section
level={4}
key={logs.ref}>
<LabeledList>
<LabeledList.Item
label="Filename"
buttons={(
<Button
content="Delete"
onClick={() => act('delete', {
'value': logs.ref,
})} />
)}>
{logs.name}
</LabeledList.Item>
<LabeledList.Item label="Data type">
{logs.input_type}
</LabeledList.Item>
{logs.source && (
<LabeledList.Item label="Source">
{`[${logs.source.name}] (Job: [${logs.source.job}])`}
onClick={() => act('viewmachine', {
'value': server.id,
})} />
)}>
{`${server.name} (${server.id})`}
</LabeledList.Item>
)}
{logs.race && (
<LabeledList.Item label="Class">
{logs.race}
</LabeledList.Item>
)}
<LabeledList.Item label="Contents">
{logs.message}
</LabeledList.Item>
</LabeledList>
</Section>
);
})
) : (
"No server selected!"
)}
</Section>
</Tabs.Tab>
</Tabs>
</Fragment>
);
})}
</LabeledList>
) : (
'404 Servers not found. Have you tried scanning the network?'
)}
</Section>
</Tabs.Tab>
<Tabs.Tab
key="messages"
label="Messages"
disabled={!operational}>
<Section title="Logs">
{(operational && selected_logs) ? (
selected_logs.map(logs => {
return (
<Section
level={4}
key={logs.ref}>
<LabeledList>
<LabeledList.Item
label="Filename"
buttons={(
<Button
content="Delete"
onClick={() => act('delete', {
'value': logs.ref,
})} />
)}>
{logs.name}
</LabeledList.Item>
<LabeledList.Item label="Data type">
{logs.input_type}
</LabeledList.Item>
{logs.source && (
<LabeledList.Item label="Source">
{`[${logs.source.name}]
(Job: [${logs.source.job}])`}
</LabeledList.Item>
)}
{logs.race && (
<LabeledList.Item label="Class">
{logs.race}
</LabeledList.Item>
)}
<LabeledList.Item label="Contents">
{logs.message}
</LabeledList.Item>
</LabeledList>
</Section>
);
})
) : (
"No server selected!"
)}
</Section>
</Tabs.Tab>
</Tabs>
</Fragment>
</Window.Content>
</Window>
);
};

View File

@@ -1,7 +1,7 @@
import { Fragment } from 'inferno';
import { useBackend } from '../backend';
import { RADIO_CHANNELS } from '../constants';
import { Box, Button, LabeledList, NoticeBox, Section, Tabs, Input } from '../components';
import { Box, Button, LabeledList, NoticeBox, Section, Tabs, Input, Window } from '../components';
export const Telemonitor = (props, context) => {
@@ -16,206 +16,212 @@ export const Telemonitor = (props, context) => {
const operational = (selected && selected.status);
return (
<Fragment>
{!!notice && (
<NoticeBox>
{notice}
</NoticeBox>
)}
<Section title="Network Control">
<LabeledList>
<LabeledList.Item label="Network">
<Input
value={network}
width="150px"
maxLength={15}
onChange={(e, value) => act('network', {
'value': value,
})} />
</LabeledList.Item>
<LabeledList.Item
label="Memory"
buttons={(
<Fragment>
<Button
content="Flush Buffer"
icon="minus-circle"
disabled={!servers.length || !!selected}
onClick={() => act('release')} />
<Button
content="Probe Network"
icon="sync"
disabled={selected}
onClick={() => act('probe')} />
</Fragment>
)}>
{!selected ? (
servers ? (
`${servers.length} currently probed and buffered`
) : (
'Buffer is empty!'
)
) : (
selected_servers ? (
`${selected_servers.length} currently probed and buffered`
) : (
'Connected devices is empty!'
)
)}
</LabeledList.Item>
<LabeledList.Item
label="Selected Entity"
buttons={(
<Button
content="Disconnect"
icon="minus-circle"
disabled={!selected}
onClick={() => act('mainmenu')}
/>
)}>
{selected ? (
`${selected.name} (${selected.id})`
) : (
"None (None)"
)}
</LabeledList.Item>
</LabeledList>
</Section>
<Tabs>
<Tabs.Tab label="Network Entities">
<Section title="Detected Network Entities">
{(servers && servers.length) ? (
<LabeledList>
{servers.map(server => {
return (
<LabeledList.Item
key={server.name}
label={server.ref}
buttons={(
<Button
content="Connect"
selected={selected
&& (server.ref === selected.ref)}
onClick={() => act('viewmachine', {
'value': server.id,
})} />
)}>
{`${server.name} (${server.id})`}
</LabeledList.Item>
);
})}
</LabeledList>
) : (
'404 Servers not found. Have you tried scanning the network?'
)}
</Section>
</Tabs.Tab>
<Tabs.Tab
label="Entity Status"
disabled={!selected}>
<Section title="Network Entity Status">
<Window>
<Window.Content scrollable>
<Fragment>
{!!notice && (
<NoticeBox>
{notice}
</NoticeBox>
)}
<Section title="Network Control">
<LabeledList>
<LabeledList.Item
label="Status"
color={operational ? 'good' : 'bad'}>
{operational ? (
'Running'
) : (
'Server down!'
)}
<LabeledList.Item label="Network">
<Input
value={network}
width="150px"
maxLength={15}
onChange={(e, value) => act('network', {
'value': value,
})} />
</LabeledList.Item>
<LabeledList.Item
label="Network Traffic"
color={operational && (selected.netspeed < selected.traffic) ? (
'bad'
) : (
'good'
label="Memory"
buttons={(
<Fragment>
<Button
content="Flush Buffer"
icon="minus-circle"
disabled={!servers.length || !!selected}
onClick={() => act('release')} />
<Button
content="Probe Network"
icon="sync"
disabled={selected}
onClick={() => act('probe')} />
</Fragment>
)}>
{operational ? ( // Not to be confused to totaltraffic
selected.traffic <= 1024 ? (
`${Math.max(selected.traffic, 0)} Gigabytes`
{!selected ? (
servers ? (
`${servers.length} currently probed and buffered`
) : (
`${Math.round(selected.traffic/1024)} Terrabytes`
'Buffer is empty!'
)
) : (
'0 Gigabytes'
)}
</LabeledList.Item>
<LabeledList.Item label="Network Speed">
{operational ? (
selected.netspeed <= 1024 ? (
`${selected.netspeed} Gigabytes/second`
selected_servers ? (
`${selected_servers.length} currently probed and buffered`
) : (
`${Math.round(selected.netspeed/1024)} Terrabytes/second`
'Connected devices is empty!'
)
) : (
'0 Gigabytes/second'
)}
</LabeledList.Item>
<LabeledList.Item
label="Multi-Z Link"
color={(operational && selected.long_range_link) ? (
'good'
) : (
'bad'
label="Selected Entity"
buttons={(
<Button
content="Disconnect"
icon="minus-circle"
disabled={!selected}
onClick={() => act('mainmenu')}
/>
)}>
{(operational && selected.long_range_link) ? (
'true'
{selected ? (
`${selected.name} (${selected.id})`
) : (
'false'
"None (None)"
)}
</LabeledList.Item>
<LabeledList.Item label="Frequency Listening">
<Box>
{operational && selected.freq_listening.map(thing => {
const valid = RADIO_CHANNELS
.find(channel => channel.freq === thing);
return (
(valid) ? (
<span style={`color: ${valid.color}`}>
{`[${thing}] (${valid.name}) `}
</span>
) : (
`[${thing}] `
)
);
})}
</Box>
</LabeledList.Item>
</LabeledList>
<Section
title="Servers Linked"
level={3}>
{(operational && selected_servers) ? (
<LabeledList>
{selected_servers.map(server => {
return (
<LabeledList.Item
key={server.name}
label={server.ref}
buttons={(
<Button
content="Connect"
onClick={() => act('viewmachine', {
'value': server.id,
})} />
)}>
{`${server.name} (${server.id})`}
</LabeledList.Item>
);
})}
</LabeledList>
) : (
!operational ? (
"Server currently down! Cannot fetch the buffer list!"
) : (
"Buffer is empty!"
)
)}
</Section>
</Section>
</Tabs.Tab>
</Tabs>
</Fragment>
<Tabs>
<Tabs.Tab label="Network Entities">
<Section title="Detected Network Entities">
{(servers && servers.length) ? (
<LabeledList>
{servers.map(server => {
return (
<LabeledList.Item
key={server.name}
label={server.ref}
buttons={(
<Button
content="Connect"
selected={selected
&& (server.ref === selected.ref)}
onClick={() => act('viewmachine', {
'value': server.id,
})} />
)}>
{`${server.name} (${server.id})`}
</LabeledList.Item>
);
})}
</LabeledList>
) : (
'404 Servers not found. Have you tried scanning the network?'
)}
</Section>
</Tabs.Tab>
<Tabs.Tab
label="Entity Status"
disabled={!selected}>
<Section title="Network Entity Status">
<LabeledList>
<LabeledList.Item
label="Status"
color={operational ? 'good' : 'bad'}>
{operational ? (
'Running'
) : (
'Server down!'
)}
</LabeledList.Item>
<LabeledList.Item
label="Network Traffic"
color={operational
&& (selected.netspeed < selected.traffic) ? (
'bad'
) : (
'good'
)}>
{operational ? ( // Not to be confused to totaltraffic
selected.traffic <= 1024 ? (
`${Math.max(selected.traffic, 0)} Gigabytes`
) : (
`${Math.round(selected.traffic/1024)} Terrabytes`
)
) : (
'0 Gigabytes'
)}
</LabeledList.Item>
<LabeledList.Item label="Network Speed">
{operational ? (
selected.netspeed <= 1024 ? (
`${selected.netspeed} Gigabytes/second`
) : (
`${Math.round(selected.netspeed/1024)}
Terrabytes/second`
)
) : (
'0 Gigabytes/second'
)}
</LabeledList.Item>
<LabeledList.Item
label="Multi-Z Link"
color={(operational && selected.long_range_link) ? (
'good'
) : (
'bad'
)}>
{(operational && selected.long_range_link) ? (
'true'
) : (
'false'
)}
</LabeledList.Item>
<LabeledList.Item label="Frequency Listening">
<Box>
{operational && selected.freq_listening.map(thing => {
const valid = RADIO_CHANNELS
.find(channel => channel.freq === thing);
return (
(valid) ? (
<span style={`color: ${valid.color}`}>
{`[${thing}] (${valid.name}) `}
</span>
) : (
`[${thing}] `
)
);
})}
</Box>
</LabeledList.Item>
</LabeledList>
<Section
title="Servers Linked"
level={3}>
{(operational && selected_servers) ? (
<LabeledList>
{selected_servers.map(server => {
return (
<LabeledList.Item
key={server.name}
label={server.ref}
buttons={(
<Button
content="Connect"
onClick={() => act('viewmachine', {
'value': server.id,
})} />
)}>
{`${server.name} (${server.id})`}
</LabeledList.Item>
);
})}
</LabeledList>
) : (
!operational ? (
"Server currently down! Cannot fetch the buffer list!"
) : (
"Buffer is empty!"
)
)}
</Section>
</Section>
</Tabs.Tab>
</Tabs>
</Fragment>
</Window.Content>
</Window>
);
};

View File

@@ -1,7 +1,7 @@
import { Fragment } from 'inferno';
import { useBackend } from '../backend';
import { act as _act } from '../byond';
import { Button, LabeledList, NoticeBox, Section, Tabs, Input } from '../components';
import { Button, LabeledList, NoticeBox, Section, Tabs, Input, Window } from '../components';
export const TelePDALog = (props, context) => {
const { act, data } = useBackend(context);
@@ -64,357 +64,362 @@ export const TelePDALog = (props, context) => {
}
return (
<Fragment>
{!!notice && (
<NoticeBox>
{notice}
</NoticeBox>
)}
<Section title="Network Control">
<LabeledList>
<LabeledList.Item label="Network">
<Input
value={network}
width="150px"
maxLength={15}
onChange={(e, value) => act('network', {
'value': value,
})} />
</LabeledList.Item>
<LabeledList.Item
label="Memory"
buttons={(
<Fragment>
<Button
content="Flush Buffer"
icon="minus-circle"
disabled={!servers.length}
onClick={() => act('release')} />
<Button
content="Probe Network"
icon="sync"
disabled={servers.length}
onClick={() => act('probe')} />
</Fragment>
)}>
{servers ? (
`${servers.length} currently probed and buffered`
) : (
'Buffer is empty!'
)}
</LabeledList.Item>
<LabeledList.Item
label="Authentication"
color={authenticated ? 'good' : 'bad'}
buttons={(
<Fragment>
<Button
content="Change Password"
disabled={!authenticated || !selected}
onClick={() => act('change_auth')}
/>
{canhack && (
<Button
content="Brute Force"
color="bad"
disabled={authenticated || !selected}
onClick={() => act('hack')}
/>
)}
</Fragment>
)}>
{authenticated ? "KEY OK" : "KEY FAIL"}
</LabeledList.Item>
<LabeledList.Item
label="PDA Server"
buttons={(
<Fragment>
<Button
content={!authenticated ? 'Login' : 'Logout'}
icon={authenticated ? 'unlock' : 'lock'}
color={authenticated ? 'good' : 'bad'}
disabled={!selected}
onClick={() => act('auth')}
/>
<Button
content="Disconnect"
icon="minus-circle"
disabled={!selected}
onClick={() => act('mainmenu')}
/>
</Fragment>
)}>
{selected ? (
`${selected.name} (${selected.id})`
) : (
"None (None)"
)}
</LabeledList.Item>
<LabeledList.Item
label="PDA Server Status"
color={(selected && selected.status) ? 'good' : 'bad'}>
{selected ? (
selected.status ? (
'Running'
) : (
'Server down! Logging and messaging functionality unavailable!'
)
):(
'No server selected'
)}
</LabeledList.Item>
</LabeledList>
</Section>
<Tabs>
<Tabs.Tab
key="servers"
label="Servers">
<Section>
{(servers && servers.length) ? (
<LabeledList>
{servers.map(server => {
return (
<LabeledList.Item
key={server.name}
label={`${server.ref}`}
buttons={(
<Button
content="Connect"
selected={data.selected
&& (server.ref === data.selected.ref)}
onClick={() => act('viewmachine', {
'value': server.id,
})} />
)}>
{`${server.name} (${server.id})`}
</LabeledList.Item>
);
})}
</LabeledList>
) : (
'404 Servers not found. Have you tried scanning the network?'
)}
</Section>
</Tabs.Tab>
<Tabs.Tab
key="message_logs"
label="Message Logs"
disabled={!valid}>
<Section title="Logs">
<Button
content="Refresh"
icon="sync"
onClick={() => act('refresh')}
/>
<Button
content="Delete All Logs"
icon="trash"
disabled={!(message_logs && message_logs.length)}
onClick={() => act('clear_log', {
'value': 'pda_logs',
})}
/>
<Section
title="Messages"
level={2}>
{(message_logs && message_logs.length) ? (
message_logs.map(message => {
return (
<Section key={message.ref}>
<LabeledList>
<LabeledList.Item label="Sender"
buttons={(
<Button
content="Delete"
onClick={() => act('del_log', {
'ref': message.ref,
})}
/>
)}>
{message.sender}
</LabeledList.Item>
<LabeledList.Item label="Recipient">
{message.recipient}
</LabeledList.Item>
<LabeledList.Item
label="Message"
buttons={(
message.image && (
<Button // Had to use _act for this.
content="Image"
onClick={() => _act(message.ref, 'photo')}
/>
)
)}>
{message.message}
</LabeledList.Item>
</LabeledList>
</Section>
);
})
) : (
'Error: Logs empty'
)}
</Section>
</Section>
</Tabs.Tab>
<Tabs.Tab
key="recon_logs"
label="Req. Console Logs"
disabled={!valid}>
<Section title="Logs">
<Button
content="Refresh"
icon="sync"
onClick={() => act('refresh')}
/>
<Button
content="Delete All Logs"
icon="trash"
disabled={!(recon_logs && recon_logs.length)}
onClick={() => act('clear_log', {
'value': 'rc_msgs',
})}
/>
<Section
title="Requests"
level={2}>
{(recon_logs && recon_logs.length) ? (
recon_logs.map(message => {
return (
<Section key={message.ref}>
<LabeledList>
<LabeledList.Item label="Sending Dep."
buttons={(
<Button
content="Delete"
onClick={() => act('del_log', {
'ref': message.ref,
})}
/>
)}>
{message.sender}
</LabeledList.Item>
<LabeledList.Item label="Receiving Dep.">
{message.recipient}
</LabeledList.Item>
<LabeledList.Item label="Message">
{message.message}
</LabeledList.Item>
<LabeledList.Item
label="Stamp"
color={message.stamp !== "Unstamped" ? (
'label'
) : (
'bad'
)}>
{message.stamp !== 'Unstamped' ? (
<b>{message.stamp}</b>
) : (
message.stamp
)}
</LabeledList.Item>
<LabeledList.Item
label="ID Authentication"
color={message.auth !== "Unauthenticated" ? (
'good'
) : (
'bad'
)}>
{message.auth}
</LabeledList.Item>
<LabeledList.Item
label="Priority"
color={(message.priority in prioritycolorMap) ? (
prioritycolorMap[message.priority]
) : (
'good'
)}>
{message.priority === 'Extreme' ? (
<b>!!{message.priority}!!</b>
) : (
message.priority
)}
</LabeledList.Item>
</LabeledList>
</Section>
);
})
) : (
'Error: No logs found'
)}
</Section>
</Section>
</Tabs.Tab>
<Tabs.Tab
key="custom_pda"
label="Set Admin Message"
disabled={!valid}>
<Section title="Custom Message">
<Button
content="Reset"
icon="sync"
onClick={() => act('fake', {
'reset': true,
})}
/>
<Button
content="Send"
disabled={!fake_message.recepient || !fake_message.message}
onClick={() => act('fake', {
'send': true,
})}
/>
<br /><br />
<Window>
<Window.Content scrollable>
<Fragment>
{!!notice && (
<NoticeBox>
{notice}
</NoticeBox>
)}
<Section title="Network Control">
<LabeledList>
<LabeledList.Item label="Sender">
<LabeledList.Item label="Network">
<Input
value={fake_message.sender}
width="250px"
maxLength={42}
onChange={(e, value) => act('fake', {
'sender': value,
})}
/>
value={network}
width="150px"
maxLength={15}
onChange={(e, value) => act('network', {
'value': value,
})} />
</LabeledList.Item>
<LabeledList.Item label="Sender's Job">
<Input
value={fake_message.job}
width="250px"
maxLength={100}
onChange={(e, value) => act('fake', {
'job': value,
})}
/>
<LabeledList.Item
label="Memory"
buttons={(
<Fragment>
<Button
content="Flush Buffer"
icon="minus-circle"
disabled={!servers.length}
onClick={() => act('release')} />
<Button
content="Probe Network"
icon="sync"
disabled={servers.length}
onClick={() => act('probe')} />
</Fragment>
)}>
{servers ? (
`${servers.length} currently probed and buffered`
) : (
'Buffer is empty!'
)}
</LabeledList.Item>
<LabeledList.Item label="Recipient">
<Button
content={fake_message.recepient ? (
fake_message.recepient
<LabeledList.Item
label="Authentication"
color={authenticated ? 'good' : 'bad'}
buttons={(
<Fragment>
<Button
content="Change Password"
disabled={!authenticated || !selected}
onClick={() => act('change_auth')}
/>
{canhack && (
<Button
content="Brute Force"
color="bad"
disabled={authenticated || !selected}
onClick={() => act('hack')}
/>
)}
</Fragment>
)}>
{authenticated ? "KEY OK" : "KEY FAIL"}
</LabeledList.Item>
<LabeledList.Item
label="PDA Server"
buttons={(
<Fragment>
<Button
content={!authenticated ? 'Login' : 'Logout'}
icon={authenticated ? 'unlock' : 'lock'}
color={authenticated ? 'good' : 'bad'}
disabled={!selected}
onClick={() => act('auth')}
/>
<Button
content="Disconnect"
icon="minus-circle"
disabled={!selected}
onClick={() => act('mainmenu')}
/>
</Fragment>
)}>
{selected ? (
`${selected.name} (${selected.id})`
) : (
"None (None)"
)}
</LabeledList.Item>
<LabeledList.Item
label="PDA Server Status"
color={(selected && selected.status) ? 'good' : 'bad'}>
{selected ? (
selected.status ? (
'Running'
) : (
'Select'
)}
selected={fake_message.recepient}
onClick={() => act('fake', {
'recepient': true,
})}
/>
</LabeledList.Item>
<LabeledList.Item label="Message">
<Input
value={fake_message.message}
width="500px"
height="150px"
maxLength={2048}
onChange={(e, value) => act('fake', {
'message': value,
})}
/>
'Server down! \
Logging and messaging functionality unavailable!'
)
):(
'No server selected'
)}
</LabeledList.Item>
</LabeledList>
</Section>
</Tabs.Tab>
</Tabs>
</Fragment>
<Tabs>
<Tabs.Tab
key="servers"
label="Servers">
<Section>
{(servers && servers.length) ? (
<LabeledList>
{servers.map(server => {
return (
<LabeledList.Item
key={server.name}
label={`${server.ref}`}
buttons={(
<Button
content="Connect"
selected={data.selected
&& (server.ref === data.selected.ref)}
onClick={() => act('viewmachine', {
'value': server.id,
})} />
)}>
{`${server.name} (${server.id})`}
</LabeledList.Item>
);
})}
</LabeledList>
) : (
'404 Servers not found. Have you tried scanning the network?'
)}
</Section>
</Tabs.Tab>
<Tabs.Tab
key="message_logs"
label="Message Logs"
disabled={!valid}>
<Section title="Logs">
<Button
content="Refresh"
icon="sync"
onClick={() => act('refresh')}
/>
<Button
content="Delete All Logs"
icon="trash"
disabled={!(message_logs && message_logs.length)}
onClick={() => act('clear_log', {
'value': 'pda_logs',
})}
/>
<Section
title="Messages"
level={2}>
{(message_logs && message_logs.length) ? (
message_logs.map(message => {
return (
<Section key={message.ref}>
<LabeledList>
<LabeledList.Item label="Sender"
buttons={(
<Button
content="Delete"
onClick={() => act('del_log', {
'ref': message.ref,
})}
/>
)}>
{message.sender}
</LabeledList.Item>
<LabeledList.Item label="Recipient">
{message.recipient}
</LabeledList.Item>
<LabeledList.Item
label="Message"
buttons={(
message.image && (
<Button // Had to use _act for this.
content="Image"
onClick={() => _act(message.ref, 'photo')}
/>
)
)}>
{message.message}
</LabeledList.Item>
</LabeledList>
</Section>
);
})
) : (
'Error: Logs empty'
)}
</Section>
</Section>
</Tabs.Tab>
<Tabs.Tab
key="recon_logs"
label="Req. Console Logs"
disabled={!valid}>
<Section title="Logs">
<Button
content="Refresh"
icon="sync"
onClick={() => act('refresh')}
/>
<Button
content="Delete All Logs"
icon="trash"
disabled={!(recon_logs && recon_logs.length)}
onClick={() => act('clear_log', {
'value': 'rc_msgs',
})}
/>
<Section
title="Requests"
level={2}>
{(recon_logs && recon_logs.length) ? (
recon_logs.map(message => {
return (
<Section key={message.ref}>
<LabeledList>
<LabeledList.Item label="Sending Dep."
buttons={(
<Button
content="Delete"
onClick={() => act('del_log', {
'ref': message.ref,
})}
/>
)}>
{message.sender}
</LabeledList.Item>
<LabeledList.Item label="Receiving Dep.">
{message.recipient}
</LabeledList.Item>
<LabeledList.Item label="Message">
{message.message}
</LabeledList.Item>
<LabeledList.Item
label="Stamp"
color={message.stamp !== "Unstamped" ? (
'label'
) : (
'bad'
)}>
{message.stamp !== 'Unstamped' ? (
<b>{message.stamp}</b>
) : (
message.stamp
)}
</LabeledList.Item>
<LabeledList.Item
label="ID Authentication"
color={message.auth !== "Unauthenticated" ? (
'good'
) : (
'bad'
)}>
{message.auth}
</LabeledList.Item>
<LabeledList.Item
label="Priority"
color={(message.priority in prioritycolorMap) ? (
prioritycolorMap[message.priority]
) : (
'good'
)}>
{message.priority === 'Extreme' ? (
<b>!!{message.priority}!!</b>
) : (
message.priority
)}
</LabeledList.Item>
</LabeledList>
</Section>
);
})
) : (
'Error: No logs found'
)}
</Section>
</Section>
</Tabs.Tab>
<Tabs.Tab
key="custom_pda"
label="Set Admin Message"
disabled={!valid}>
<Section title="Custom Message">
<Button
content="Reset"
icon="sync"
onClick={() => act('fake', {
'reset': true,
})}
/>
<Button
content="Send"
disabled={!fake_message.recepient || !fake_message.message}
onClick={() => act('fake', {
'send': true,
})}
/>
<br /><br />
<LabeledList>
<LabeledList.Item label="Sender">
<Input
value={fake_message.sender}
width="250px"
maxLength={42}
onChange={(e, value) => act('fake', {
'sender': value,
})}
/>
</LabeledList.Item>
<LabeledList.Item label="Sender's Job">
<Input
value={fake_message.job}
width="250px"
maxLength={100}
onChange={(e, value) => act('fake', {
'job': value,
})}
/>
</LabeledList.Item>
<LabeledList.Item label="Recipient">
<Button
content={fake_message.recepient ? (
fake_message.recepient
) : (
'Select'
)}
selected={fake_message.recepient}
onClick={() => act('fake', {
'recepient': true,
})}
/>
</LabeledList.Item>
<LabeledList.Item label="Message">
<Input
value={fake_message.message}
width="500px"
height="150px"
maxLength={2048}
onChange={(e, value) => act('fake', {
'message': value,
})}
/>
</LabeledList.Item>
</LabeledList>
</Section>
</Tabs.Tab>
</Tabs>
</Fragment>
</Window.Content>
</Window>
);
};