Merge pull request #78 from Pax1601/unit-list

Unit list
This commit is contained in:
Pax1601 2023-03-20 19:17:11 +01:00 committed by GitHub
commit 7d25c26324
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 169 additions and 3 deletions

View File

@ -112,7 +112,7 @@ dl.ol-data-grid dd {
}
.ol-panel.ol-dialog {
padding:25px;
padding:20px;
}
.ol-dialog-close {
@ -138,6 +138,12 @@ dl.ol-data-grid dd {
padding-top:15px;
}
.ol-dialog.scrollable .ol-dialog-content {
overflow-y: auto;
}
.ol-checkbox label {
align-items: center;
cursor: pointer;

View File

@ -4,6 +4,7 @@
@import url("contextmenus.css");
@import url("mouseinfopanel.css");
@import url("units.css");
@import url("unitdatatable.css");
@import url("unitcontrolpanel.css");
@import url("unitinfopanel.css");

View File

@ -0,0 +1,27 @@
#unit-data-table {
display:flex;
flex-direction: column;
font-size:13px;
height: 250px;
width:fit-content;
}
#unit-data-table > div {
display:flex;
flex-direction: row;
flex-wrap: nowrap;
}
#unit-data-table > div > div {
text-overflow: ellipsis;
white-space: nowrap;
width:100px;
}
#unit-data-table > div:first-of-type {
text-align: center;
}
#unit-data-table > div > div:nth-of-type( 4 ) {
text-align: center;
}

View File

@ -10,6 +10,7 @@ import { ATC } from "./atc/atc";
import { FeatureSwitches } from "./featureswitches";
import { LogPanel } from "./panels/logpanel";
import { getAirbases, getBulllseye as getBulllseyes, getMission, getUnits, toggleDemoEnabled } from "./server/server";
import { UnitDataTable } from "./units/unitdatatable";
var map: Map;
@ -29,6 +30,7 @@ var connected: boolean = false;
var activeCoalition: string = "blue";
var sessionHash: string | null = null;
var unitDataTable = new UnitDataTable();
var featureSwitches;
@ -75,6 +77,7 @@ function setup() {
startPeriodicUpdate();
}
function startPeriodicUpdate() {
requestUpdate();
requestRefresh();
@ -84,6 +87,7 @@ function requestUpdate() {
/* Main update rate = 250ms is minimum time, equal to server update time. */
getUnits((data: UnitsData) => {
getUnitsManager()?.update(data);
getUnitDataTable().update( data.units )
checkSessionHash(data.sessionHash);
}, false);
setTimeout(() => requestUpdate(), getConnected() ? 250 : 1000);
@ -137,13 +141,21 @@ function setupEvents() {
/* Keyup events */
document.addEventListener("keyup", ev => {
switch (ev.code) {
case "KeyL":
document.body.toggleAttribute("data-hide-labels");
break;
case "KeyD":
toggleDemoEnabled();
break;
case "Quote":
unitDataTable.toggle();
}
});
/*
@ -154,7 +166,6 @@ function setupEvents() {
unitName.setAttribute( "readonly", "true" );
// Do something with this:
console.log( unitName.value );
});
document.addEventListener( "editUnitName", ev => {
@ -214,6 +225,10 @@ export function getMissionData() {
return missionHandler;
}
export function getUnitDataTable() {
return unitDataTable;
}
export function getUnitsManager() {
return unitsManager;
}

View File

@ -0,0 +1,103 @@
export class UnitDataTable {
#element;
#tableId = "unit-data-table";
constructor() {
const table = document.getElementById( this.#tableId );
if ( table instanceof HTMLElement ) {
this.#element = table;
} else {
return;
}
}
getElement() {
return this.#element;
}
hide() {
this.getElement()?.closest( ".ol-dialog" )?.classList.add( "hide" );
}
show() {
this.getElement()?.closest( ".ol-dialog" )?.classList.remove( "hide" );
}
toggle() {
this.getElement()?.closest( ".ol-dialog" )?.classList.toggle( "hide" );
}
update( units:object ) {
const unitsArray = Object.values( units ).sort( ( a, b ) => {
const aVal = a.baseData.unitName.toLowerCase();
const bVal = b.baseData.unitName.toLowerCase();
if ( aVal > bVal ) {
return 1;
} else if ( bVal > aVal ) {
return -1;
} else {
return 0;
}
});
function addRow( parentEl:HTMLElement, columns:string[] ) {
const rowDiv = document.createElement( "div" );
for ( const item of columns ) {
const div = document.createElement( "div" );
div.innerText = item;
rowDiv.appendChild( div );
}
parentEl.appendChild( rowDiv );
}
const el = this.getElement();
if ( el ) {
el.innerHTML = "";
addRow( el, [ "Callsign", "Name", "Category", "AI/Human" ] )
for ( const unit of unitsArray ) {
const dataset = [ unit.baseData.unitName, unit.baseData.name, unit.baseData.category, ( unit.baseData.AI ) ? "AI" : "Human" ];
if ( this.getElement() ) {
}
addRow( el, dataset );
}
}
}
}

View File

@ -9,7 +9,7 @@
// "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
// "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
/* Language and Environment */
"target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
"target": "es2017", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
// "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
// "jsx": "preserve", /* Specify what JSX code is generated. */
// "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */

View File

@ -32,6 +32,7 @@
<%- include('navbar.ejs') %>
<%- include('connectionstatuspanel.ejs') %>
<%- include('dialogs.ejs') %>
<%- include('unitdatatable.ejs') %>
<% /* %>
<%- include('log.ejs') %>

View File

@ -0,0 +1,13 @@
<div class="ol-panel ol-dialog scrollable hide">
<div class="ol-dialog-close" data-on-click="closeDialog"></div>
<div class="ol-dialog-header">
<h4>Unit list</h4>
</div>
<div id="unit-data-table" class="ol-dialog-content">
</div>
</div>