BitBurner-Stats
by David Kyle
HTML
<div class="node-list">
<div class="node">
<div class="overview">
<h3 class="node-title border-bottom">
n00dles
</h3>
</div>
<div class="node-wrapper">
<div class="stats">
<h4 class="border-bottom">
<span>Stats</span>
<span class="toggled"><a onclick="toggle(event)" href="javascript:void(0);"></a></span>
</h4>
<div class="contents close">
<div class="content-liner">
<div class="stat-item root" title="Use NUKE.exe to gain root access">
<span class="stat-label">Root</span><span class="stat-value state red">Enabled</span>
</div>
<div class="stat-item backdoor" title="Run backdoor to enable direction connection">
<span class="stat-label">Backdoor</span><span class="stat-value state green">Installed</span>
</div>
<div class="stat-item hack" title="Amount of hacking skill required">
<span class="stat-label">Hack Needed</span><span class="stat-value"><b>12</b> - 204/216</span>
</div>
<div class="stat-item ram" title="Server RAM">
<span class="stat-label">RAM</span><span class="stat-value">32</span>
</div>
<div class="stat-item cores" title="Server Cores">
<span class="stat-label">Cores</span><span class="stat-value">2</span>
</div>
<div class="stat-item ports" title="Open Ports required for NUKE.exe">
<span class="stat-label">Required Ports</span><span class="stat-value">2</span>
</div>
<div class="stat-item port-status" title="Current Port Status">
<span class="stat-label">Port Status</span><span class="stat-value">
<ul class="port-status-list">
<li class="state green">SSH</li>
<li class="state green">SMTP</li>
<li class="state red">FTP</li>
...
CSS
/* DOM Styling */
body {
background-color: black;
color: rgb(200, 200, 180);
font-family: Verdana, arial, sans-serif;
}
a {
text-decoration: none;
color: rgb(200, 200, 180);
}
h5 {
margin: 0.2rem;
}
/* Borders and Dividers */
.border-bottom {
border-bottom: solid 1px rgb(68, 68, 68);
}
.border-left {
border-left: solid 1px rgb(68, 68, 68);
}
.border-right {
border-right: solid 1px rgb(68, 68, 68);
}
.rounded {
border-radius: 0.3rem;
padding: 0.3rem;
}
/* Sizing and layout */
.width-100 {
width: 100%;
}
/* Containers - In order of use */
.node-list {
display: block;
overflow-y: scroll;
max-height: 100vh;
overflow-x: hidden;
padding: 0.4rem;
}
.node-wrapper {
display: grid;
grid-template-columns: 45% 45%;
grid-column-gap: 5%;
color: rgb(200, 200, 180);
align-content: flex-start;
}
.node-wrapper>* {
border: solid 0.5px rgb(200, 200, 180);
border-radius: 0.1rem;
padding: 0.3rem;
margin: auto;
width: 100%;
background-color: rgb(30, 30, 30);
}
.content-liner .scripts,
.content-liner .executables {
width: 45%;
}
.commands,
.stats {
overflow: hidden;
}
.node-children h4,
.node-wrapper h4 {
display: flex;
align-self: center;
align-items: center;
align-content: center;
justify-content: space-between;
}
.node-wrapper h4 {
margin-top: 0.1rem;
padding-bottom: 0.4rem;
margin-right: -0.3rem;
margin-left: -0.3rem;
padding-left: 0.3rem;
padding-right: 0.3rem;
}
.node-wrapper .toggle a:before,
.node-wrapper .toggled a:before,
.node-children .toggle a:before,
.node-children .toggled a:before {
content: "\29E8";
}
.node-wrapper .toggled,
.node-children .toggled {
transform: rotate(-90deg);
transition: transform 0.3s ease-in-out;
}
.node-wrapper .toggle,
.node-children .toggle {
transform: rotate(0deg);
transition: transform 0.3s ease-in-out;
}
.contents {
margin-top: 0px;
height: auto;
opacity: 1;
transition: all 0.3s ease-in-out;
}
.commands .contents {
...
JavaScript
function toggle(e) {
let parent = e.currentTarget.parentNode;
parent.classList.toggle('toggle');
parent.classList.toggle('toggled');
parent.parentNode.parentNode.getElementsByClassName('contents')[0].classList.toggle('close');
console.log(parent.classList);
}