More work on advanced settings dialog

This commit is contained in:
Pax1601
2023-04-12 17:21:36 +02:00
parent 316261e01e
commit 7eee469bed
10 changed files with 315 additions and 306 deletions

View File

@@ -1,4 +1,3 @@
/* Page style */ /* Page style */
#map-container { #map-container {
height: 100%; height: 100%;
@@ -14,32 +13,30 @@
} }
#olympus-toolbar-summary { #olympus-toolbar-summary {
background-image: url( "/images/icon-round.png" ); background-image: url("/images/icon-round.png");
background-position: 25px 20px; background-position: 25px 20px;
background-repeat: no-repeat; background-repeat: no-repeat;
background-size:36px 36px; background-size: 36px 36px;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
text-indent: 44px; text-indent: 44px;
} }
dl.ol-data-grid { dl.ol-data-grid {
align-items: center; align-items: center;
display:flex; display: flex;
flex-direction: row; flex-direction: row;
flex-wrap: wrap; flex-wrap: wrap;
margin:0; margin: 0;
row-gap: 4px; row-gap: 4px;
} }
dl.ol-data-grid dt { dl.ol-data-grid dt {
width:60%; width: 60%;
} }
dl.ol-data-grid dd { dl.ol-data-grid dd {
width:40%; width: 40%;
} }
@@ -48,24 +45,23 @@ dl.ol-data-grid dt.icon {
} }
dl.ol-data-grid dt.icon::before { dl.ol-data-grid dt.icon::before {
content: url( /images/icons/speed.svg ); content: url(/images/icons/speed.svg );
display:inline-block; display: inline-block;
filter:invert(100%); filter: invert(100%);
width: 20px; width: 20px;
translate:-20px 2px; translate: -20px 2px;
} }
dl.ol-data-grid dt.icon-speed::before { dl.ol-data-grid dt.icon-speed::before {
content: url( /images/icons/speed.svg ); content: url(/images/icons/speed.svg );
} }
dl.ol-data-grid dt.icon-altitude::before { dl.ol-data-grid dt.icon-altitude::before {
content: url( /images/icons/altitude.svg ); content: url(/images/icons/altitude.svg );
} }
dl.ol-data-grid dd { dl.ol-data-grid dd {
display: flex; display: flex;
justify-content: flex-end; justify-content: flex-end;
@@ -73,56 +69,50 @@ dl.ol-data-grid dd {
} }
.br-info::after { .br-info::after {
content: attr( data-bearing ) '\00B0 / ' attr( data-distance ) attr( data-distance-units ); content: attr(data-bearing) '\00B0 / ' attr(data-distance) attr(data-distance-units);
} }
.br-info[data-message]::after { .br-info[data-message]::after {
content: attr( data-message ); content: attr(data-message);
} }
.coordinates::after { .coordinates::after {
content: attr( data-dd ) "\00b0 " attr( data-mm ) "'" attr( data-ss ) "." attr( data-sss ) '"' attr( data-label ); content: attr(data-dd) "\00b0 " attr(data-mm) "'" attr(data-ss) "." attr(data-sss) '"' attr(data-label);
} }
.ol-button-box { .ol-button-box {
column-gap: 6px; column-gap: 6px;
display:flex; display: flex;
flex-direction: row; flex-direction: row;
flex-wrap: wrap; flex-wrap: wrap;
margin:5px 0; margin: 5px 0;
row-gap: 5px; row-gap: 5px;
} }
.ol-button-box button { .ol-button-box button {
background-repeat: no-repeat;; background-repeat: no-repeat;
border:1px solid var( --accent-light-blue ); ;
color: var( --accent-light-blue ); border: 1px solid var(--accent-light-blue);
color: var(--accent-light-blue);
} }
.ol-dialog { .ol-dialog {
align-self: center; align-self: center;
background-color: var( --background-slate-blue ); background-color: var(--background-slate-blue);
color:white; color: white;
justify-self: center; justify-self: center;
position: absolute; position: absolute;
z-index:1000; z-index: 1000;
} }
.ol-panel.ol-dialog { .ol-panel.ol-dialog {
padding:20px; padding: 20px;
} }
.ol-dialog-close { .ol-dialog-close {
cursor: pointer; cursor: pointer;
font-size:16px; font-size: 16px;
font-weight: var( --font-weight-bolder ); font-weight: var(--font-weight-bolder);
position: absolute; position: absolute;
right: 25px; right: 25px;
top: 25px; top: 25px;
@@ -133,12 +123,12 @@ dl.ol-data-grid dd {
} }
.ol-dialog-header { .ol-dialog-header {
border-bottom:1px solid var( --background-grey ); border-bottom: 1px solid var(--background-grey);
padding-bottom:10px; padding-bottom: 10px;
} }
.ol-dialog-footer { .ol-dialog-footer {
border-top: 1px solid var( --background-grey ); border-top: 1px solid var(--background-grey);
padding-top: 15px; padding-top: 15px;
display: flex; display: flex;
row-gap: 10px; row-gap: 10px;
@@ -157,46 +147,67 @@ dl.ol-data-grid dd {
} }
.ol-checkbox input[type="checkbox"] { .ol-checkbox input[type="checkbox"] {
appearance:none; appearance: none;
background-color: transparent; background-color: transparent;
border:none; border: none;
margin:0; margin: 0;
} }
.ol-checkbox input[type="checkbox"]::before { .ol-checkbox input[type="checkbox"]::before {
align-self:center; align-self: center;
background-image: url( "/images/icons/square-check-solid.svg" ); background-image: url("/images/icons/square-check-solid.svg");
background-repeat: no-repeat; background-repeat: no-repeat;
content: ""; content: "";
filter: invert( 100% ); filter: invert(100%);
display:flex; display: flex;
height:16px; height: 16px;
margin-right:10px; margin-right: 10px;
width:16px; width: 16px;
} }
.ol-checkbox input[type="checkbox"]:checked::before { .ol-checkbox input[type="checkbox"]:checked::before {
background-image: url( "/images/icons/square-regular.svg" ); background-image: url("/images/icons/square-regular.svg");
} }
.ol-text-input input {
height: 40px;
border-radius: 5px;
color: var(--background-offwhite);
background-color: var(--background-grey);
border: 1px solid var(--background-grey);
border-radius: var(--border-radius-sm);
text-align: center;
box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25);
}
input[type=number] {
-moz-appearance: textfield;
appearance: textfield;
margin: 0;
}
input[type=number]::-webkit-inner-spin-button,
input[type=number]::-webkit-outer-spin-button {
-webkit-appearance: none;
margin: 0;
}
[class|="ol-button"] { [class|="ol-button"] {
align-items: center; align-items: center;
background-repeat: no-repeat; background-repeat: no-repeat;
display:flex; display: flex;
font-weight: normal; font-weight: normal;
padding:8px 10px; padding: 8px 10px;
white-space: nowrap; white-space: nowrap;
} }
[class|="ol-button"]::before { [class|="ol-button"]::before {
margin-right:8px; margin-right: 8px;
} }
.ol-button-close { .ol-button-close {
background: transparent; background: transparent;
border:1px solid white; border: 1px solid white;
} }
.ol-button-close::before { .ol-button-close::before {
@@ -213,16 +224,16 @@ dl.ol-data-grid dd {
} }
.ol-button-settings { .ol-button-settings {
background-color: var( --background-slate-blue ); background-color: var(--background-slate-blue);
} }
.ol-button-settings::before { .ol-button-settings::before {
background-image: url( "/images/icons/gears-solid.svg" ); background-image: url("/images/icons/gears-solid.svg");
background-position:0 50%; background-position: 0 50%;
background-size:24px 24px; background-size: 24px 24px;
content: ""; content: "";
display:flex; display: flex;
filter: invert( 100% ); filter: invert(100%);
height: 24px; height: 24px;
width: 24px; width: 24px;
} }

View File

@@ -348,6 +348,7 @@ nav.ol-panel> :last-child {
flex-direction: row; flex-direction: row;
flex-wrap: nowrap; flex-wrap: nowrap;
row-gap: 4px; row-gap: 4px;
align-items: center;
} }
.ol-panel .ol-group.wrap { .ol-panel .ol-group.wrap {

View File

@@ -46,6 +46,7 @@ interface TaskData {
radioOn: boolean; radioOn: boolean;
TACANOn: boolean; TACANOn: boolean;
radioFrequency: number; radioFrequency: number;
radioCallsign: number;
TACANChannel: number; TACANChannel: number;
TACANXY: string; TACANXY: string;
TACANCallsign: string; TACANCallsign: string;

View File

@@ -5,6 +5,7 @@ export class Dropdown {
#callback: CallableFunction; #callback: CallableFunction;
#defaultValue: string; #defaultValue: string;
#optionsList: string[] = []; #optionsList: string[] = [];
#index: number = 0;
constructor(ID: string, callback: CallableFunction, options: string[] | null = null) constructor(ID: string, callback: CallableFunction, options: string[] | null = null)
{ {
@@ -19,63 +20,33 @@ export class Dropdown {
} }
this.#value.addEventListener( "click", ev => { this.#value.addEventListener( "click", ev => {
this.#element.classList.toggle( "is-open" ); this.#element.classList.toggle( "is-open" );
this.#clip(); this.#clip();
}); });
this.#element.addEventListener("mouseleave", ev => { this.#element.addEventListener("mouseleave", ev => {
this.#close(); this.#close();
}); });
} }
#clip() {
const options = this.#options;
const bounds = options.getBoundingClientRect();
this.#element.dataset.position = ( bounds.bottom > window.innerHeight ) ? "top" : "";
}
#close() {
this.#element.classList.remove( "is-open" );
this.#element.dataset.position = "";
}
#open() {
this.#element.classList.add( "is-open" );
}
#toggle() {
if ( this.#element.classList.contains( "is-open" ) ) {
this.#close();
} else {
this.#open();
}
}
setOptions(optionsList: string[]) setOptions(optionsList: string[])
{ {
this.#optionsList = optionsList; this.#optionsList = optionsList;
this.#options.replaceChildren(...optionsList.map((option: string) => { this.#options.replaceChildren(...optionsList.map((option: string, idx: number) => {
var div = document.createElement("div"); var div = document.createElement("div");
var button = document.createElement("button"); var button = document.createElement("button");
button.textContent = option; button.textContent = option;
div.appendChild(button); div.appendChild(button);
if (option === this.#defaultValue)
this.#index = idx;
button.addEventListener("click", (e: MouseEvent) => { button.addEventListener("click", (e: MouseEvent) => {
e.stopPropagation(); e.stopPropagation();
this.#value.innerText = option; this.#value.innerText = option;
this.#close(); this.#close();
this.#callback( option, e ); this.#callback(option, e);
this.#index = idx;
}); });
return div; return div;
})); }));
@@ -87,6 +58,8 @@ export class Dropdown {
{ {
var option = this.#optionsList[idx]; var option = this.#optionsList[idx];
this.#value.innerText = option; this.#value.innerText = option;
this.#index = idx;
this.#close();
this.#callback(option); this.#callback(option);
} }
} }
@@ -95,4 +68,35 @@ export class Dropdown {
this.#options.replaceChildren(); this.#options.replaceChildren();
this.#value.innerText = this.#defaultValue; this.#value.innerText = this.#defaultValue;
} }
getValue() {
return this.#value.innerText;
}
getIndex() {
return this.#index;
}
#clip() {
const options = this.#options;
const bounds = options.getBoundingClientRect();
this.#element.dataset.position = ( bounds.bottom > window.innerHeight ) ? "top" : "";
}
#close() {
this.#element.classList.remove( "is-open" );
this.#element.dataset.position = "";
}
#open() {
this.#element.classList.add( "is-open" );
}
#toggle() {
if ( this.#element.classList.contains( "is-open" ) ) {
this.#close();
} else {
this.#open();
}
}
} }

View File

@@ -1,4 +1,5 @@
import { getUnitsManager } from ".."; import { getUnitsManager } from "..";
import { Dropdown } from "../controls/dropdown";
import { Slider } from "../controls/slider"; import { Slider } from "../controls/slider";
import { dataPointMap } from "../other/utils"; import { dataPointMap } from "../other/utils";
import { aircraftDatabase } from "../units/aircraftdatabase"; import { aircraftDatabase } from "../units/aircraftdatabase";
@@ -20,6 +21,9 @@ const altitudeIncrements: { [key: string]: number } = { Aircraft: 2500, Helicopt
export class UnitControlPanel extends Panel { export class UnitControlPanel extends Panel {
#altitudeSlider: Slider; #altitudeSlider: Slider;
#airspeedSlider: Slider; #airspeedSlider: Slider;
#TACANXYDropdown: Dropdown;
#radioDecimalsDropdown: Dropdown;
#radioCallsignDropdown: Dropdown;
#expectedAltitude: number = -1; #expectedAltitude: number = -1;
#expectedSpeed: number = -1; #expectedSpeed: number = -1;
#optionButtons: { [key: string]: HTMLButtonElement[] } = {} #optionButtons: { [key: string]: HTMLButtonElement[] } = {}
@@ -39,6 +43,13 @@ export class UnitControlPanel extends Panel {
getUnitsManager().selectedUnitsSetSpeed(value / 1.94384) getUnitsManager().selectedUnitsSetSpeed(value / 1.94384)
}); });
/* Advanced settings dropdowns */
this.#TACANXYDropdown = new Dropdown("TACAN-XY", () => {});
this.#TACANXYDropdown.setOptions(["X", "Y"]);
this.#radioDecimalsDropdown = new Dropdown("radio-decimals", () => {});
this.#radioDecimalsDropdown.setOptions([".000", ".250", ".500", ".750"]);
this.#radioCallsignDropdown = new Dropdown("radio-callsign", () => {});
/* Option buttons */ /* Option buttons */
this.#optionButtons["ROE"] = ROEs.map((option: string, index: number) => { this.#optionButtons["ROE"] = ROEs.map((option: string, index: number) => {
var button = document.createElement("button"); var button = document.createElement("button");
@@ -64,6 +75,11 @@ export class UnitControlPanel extends Panel {
document.addEventListener("unitUpdated", (e: CustomEvent<Unit>) => { if (e.detail.getSelected()) this.update() }); document.addEventListener("unitUpdated", (e: CustomEvent<Unit>) => { if (e.detail.getSelected()) this.update() });
document.addEventListener("unitsSelection", (e: CustomEvent<Unit[]>) => { this.show(); this.update() }); document.addEventListener("unitsSelection", (e: CustomEvent<Unit[]>) => { this.show(); this.update() });
document.addEventListener("clearSelection", () => { this.hide() }); document.addEventListener("clearSelection", () => { this.hide() });
document.addEventListener("applyAdvancedSettings", () => {this.#applyAdvancedSettings();})
document.addEventListener("showAdvancedSettings", () => {
this.#updateAdvancedSettingsDialog(getUnitsManager().getSelectedUnits());
this.#advancedSettingsDialog.classList.remove("hide");
})
this.hide(); this.hide();
} }
@@ -97,7 +113,6 @@ export class UnitControlPanel extends Panel {
var units = getUnitsManager().getSelectedUnits(); var units = getUnitsManager().getSelectedUnits();
if (this.getElement() != null && units.length > 0) { if (this.getElement() != null && units.length > 0) {
this.#showFlightControlSliders(units); this.#showFlightControlSliders(units);
this.#updateAdvancedSettingsDialog(units);
this.getElement().querySelector("#selected-units-container")?.replaceChildren(...units.map((unit: Unit, index: number) => { this.getElement().querySelector("#selected-units-container")?.replaceChildren(...units.map((unit: Unit, index: number) => {
let database: UnitDatabase | null; let database: UnitDatabase | null;
@@ -195,10 +210,15 @@ export class UnitControlPanel extends Panel {
(<HTMLElement>this.#advancedSettingsDialog.querySelector("#unit-name")).innerText = unit.getBaseData().unitName; (<HTMLElement>this.#advancedSettingsDialog.querySelector("#unit-name")).innerText = unit.getBaseData().unitName;
if (getUnitsManager().getSelectedUnits().length == 1){ if (getUnitsManager().getSelectedUnits().length == 1){
this.#radioCallsignDropdown.setOptions(["Enfield", "Springfield", "Uzi", "Colt", "Dodge", "Ford", "Chevy", "Pontiac"]);
this.#radioCallsignDropdown.selectValue(unit.getTaskData().radioCallsign);
var roles = aircraftDatabase.getByName(unit.getBaseData().name)?.loadouts.map((loadout) => {return loadout.roles}) var roles = aircraftDatabase.getByName(unit.getBaseData().name)?.loadouts.map((loadout) => {return loadout.roles})
if (roles != undefined && Array.prototype.concat.apply([], roles)?.includes("Tanker")){ if (roles != undefined && Array.prototype.concat.apply([], roles)?.includes("Tanker")){
this.#advancedSettingsDialog.querySelector("#tanker-checkbox")?.querySelector("input")?.setAttribute('checked', String(unit.getTaskData().isTanker)); this.#advancedSettingsDialog.querySelector("#tanker-checkbox")?.querySelector("input")?.setAttribute('checked', String(unit.getTaskData().isTanker));
this.#advancedSettingsDialog.querySelector("#tanker-checkbox")?.classList.remove("hide"); this.#advancedSettingsDialog.querySelector("#tanker-checkbox")?.classList.remove("hide");
this.#radioCallsignDropdown.setOptions(["Texaco", "Arco", "Shell"]);
this.#radioCallsignDropdown.selectValue(unit.getTaskData().radioCallsign);
} }
else { else {
this.#advancedSettingsDialog.querySelector("#tanker-checkbox")?.classList.add("hide"); this.#advancedSettingsDialog.querySelector("#tanker-checkbox")?.classList.add("hide");
@@ -207,10 +227,32 @@ export class UnitControlPanel extends Panel {
if (roles != undefined && Array.prototype.concat.apply([], roles)?.includes("AWACS")){ if (roles != undefined && Array.prototype.concat.apply([], roles)?.includes("AWACS")){
this.#advancedSettingsDialog.querySelector("#AWACS-checkbox")?.querySelector("input")?.setAttribute('checked', String(unit.getTaskData().isAWACS)); this.#advancedSettingsDialog.querySelector("#AWACS-checkbox")?.querySelector("input")?.setAttribute('checked', String(unit.getTaskData().isAWACS));
this.#advancedSettingsDialog.querySelector("#AWACS-checkbox")?.classList.remove("hide"); this.#advancedSettingsDialog.querySelector("#AWACS-checkbox")?.classList.remove("hide");
this.#radioCallsignDropdown.setOptions(["Overlord", "Magic", "Wizard", "Focus", "Darkstar"]);
this.#radioCallsignDropdown.selectValue(unit.getTaskData().radioCallsign);
} else { } else {
this.#advancedSettingsDialog.querySelector("#AWACS-checkbox")?.classList.add("hide"); this.#advancedSettingsDialog.querySelector("#AWACS-checkbox")?.classList.add("hide");
} }
} }
} }
} }
#applyAdvancedSettings()
{
this.#advancedSettingsDialog.classList.add("hide");
const isTanker = <boolean> this.#advancedSettingsDialog.querySelector("#tanker-checkbox")?.querySelector("input")?.checked;
const isAWACS= <boolean> this.#advancedSettingsDialog.querySelector("#AWACS-checkbox")?.querySelector("input")?.checked;
const TACANChannel = Number(this.#advancedSettingsDialog.querySelector("#TACAN-channel")?.querySelector("input")?.value);
const TACANXY = this.#TACANXYDropdown.getValue();
const TACANCallsign = <string> this.#advancedSettingsDialog.querySelector("#tacan-callsign")?.querySelector("input")?.value
const radioMHz = Number(this.#advancedSettingsDialog.querySelector("#radio-mhz")?.querySelector("input")?.value);
const radioDecimals = this.#radioDecimalsDropdown.getValue();
const radioCallsign = this.#radioCallsignDropdown.getIndex();
var radioFrequency = (radioMHz * 1000 + Number(radioDecimals.substring(1))) * 1000;
var units = getUnitsManager().getSelectedUnits();
if (units.length > 0)
units[0].setAdvancedOptions(isTanker, isAWACS, TACANChannel, TACANXY, TACANCallsign, radioFrequency, radioCallsign);
}
} }

View File

@@ -183,14 +183,18 @@ export function refuel(ID: number) {
POST(data, () => { }); POST(data, () => { });
} }
export function setTanker(ID: number, state: boolean) { export function setAdvacedOptions(ID: number, isTanker: boolean, isAWACS: boolean, TACANChannel: number, TACANXY: string, TACANCallsign: string, radioFrequency: number, radioCallsign: number)
var command = { "ID": ID, "state": state }; {
var data = { "setIsTanker": command } var command = { "ID": ID,
POST(data, () => { }); "isTanker": isTanker,
} "isAWACS": isAWACS,
"TACANChannel": TACANChannel,
"TACANXY": TACANXY,
"TACANCallsign": TACANCallsign,
"radioFrequency": radioFrequency,
"radioCallsign": radioCallsign
};
export function setAWACS(ID: number, state: boolean) { var data = { "setAdvancedOptions": command };
var command = { "ID": ID, "state": state };
var data = { "setIsAWACS": command }
POST(data, () => { }); POST(data, () => { });
} }

View File

@@ -1,7 +1,7 @@
import { Marker, LatLng, Polyline, Icon, DivIcon } from 'leaflet'; import { Marker, LatLng, Polyline, Icon, DivIcon } from 'leaflet';
import { getMap, getUnitsManager } from '..'; import { getMap, getUnitsManager } from '..';
import { rad2deg } from '../other/utils'; import { rad2deg } from '../other/utils';
import { addDestination, attackUnit, changeAltitude, changeSpeed, createFormation as setLeader, deleteUnit, getUnits, landAt, setAltitude, setReactionToThreat, setROE, setSpeed, refuel, setTanker, setAWACS } from '../server/server'; import { addDestination, attackUnit, changeAltitude, changeSpeed, createFormation as setLeader, deleteUnit, getUnits, landAt, setAltitude, setReactionToThreat, setROE, setSpeed, refuel, setAdvacedOptions } from '../server/server';
import { aircraftDatabase } from './aircraftdatabase'; import { aircraftDatabase } from './aircraftdatabase';
import { groundUnitsDatabase } from './groundunitsdatabase'; import { groundUnitsDatabase } from './groundunitsdatabase';
@@ -55,6 +55,7 @@ export class Unit extends Marker {
radioOn: false, radioOn: false,
TACANOn: false, TACANOn: false,
radioFrequency: 0, radioFrequency: 0,
radioCallsign: 0,
TACANChannel: 0, TACANChannel: 0,
TACANXY: "X", TACANXY: "X",
TACANCallsign: "", TACANCallsign: "",
@@ -375,12 +376,8 @@ export class Unit extends Marker {
refuel(this.ID); refuel(this.ID);
} }
toggleTanker() { setAdvancedOptions(isTanker: boolean, isAWACS: boolean, TACANChannel: number, TACANXY: string, TACANcallsign: string, radioFrequency: number, radioCallsign: number) {
setTanker(this.ID, !this.getTaskData().isTanker); setAdvacedOptions(this.ID, isTanker, isAWACS, TACANChannel, TACANXY, TACANcallsign, radioFrequency, radioCallsign);
}
toggleAWACS() {
setAWACS(this.ID, !this.getTaskData().isAWACS);
} }
#onClick(e: any) { #onClick(e: any) {

View File

@@ -334,24 +334,6 @@ export class UnitsManager {
} }
} }
selectedUnitsToggleTanker()
{
var selectedUnits = this.getSelectedUnits();
for (let idx in selectedUnits)
{
selectedUnits[idx].toggleTanker();
}
}
selectedUnitsToggleAWACS()
{
var selectedUnits = this.getSelectedUnits();
for (let idx in selectedUnits)
{
selectedUnits[idx].toggleAWACS();
}
}
copyUnits() copyUnits()
{ {
this.#copiedUnits = this.getSelectedUnits(); this.#copiedUnits = this.getSelectedUnits();

View File

@@ -5,7 +5,7 @@
<div id="app-summary"> <div id="app-summary">
<h2>DCS Olympus</h2> <h2>DCS Olympus</h2>
<h4>Dynamic Unit Command</h4> <h4>Dynamic Unit Command</h4>
<div class="app-version">Version <span class="app-version-number">v0.1.0</span></div> <div class="app-version">Version <span class="app-version-number">v0.1.2</span></div>
</div> </div>
<div id="legal-stuff"> <div id="legal-stuff">
@@ -16,171 +16,3 @@
</div> </div>
</div> </div>
<div id="advanced-settings-dialog" class="ol-panel ol-dialog hide">
<div class="ol-dialog-close" data-on-click="closeDialog"></div>
<div class="ol-dialog-header">
<h3 id="unit-name">Olympus 1-1</h3>
</div>
<div class="ol-dialog-content">
<form>
<!--
<div class="ol-checkbox">
<label>
<input type="checkbox" />
Use ECM when available
</label>
</div>
<div class="ol-checkbox">
<label>
<input type="checkbox" />
Prohibit jettison
</label>
</div>
<div class="ol-checkbox">
<label>
<input type="checkbox" />
Prohibit afterburner
</label>
</div>
<div class="ol-checkbox">
<label>
<input type="checkbox" />
Prohibit A/A
</label>
</div>
<div class="ol-checkbox">
<label>
<input type="checkbox" />
Prohibit A/G
</label>
</div>
-->
<div id="tanker-checkbox" class="ol-checkbox">
<label>
<input type="checkbox"/>
Tanker
</label>
</div>
<div id="AWACS-checkbox" class="ol-checkbox">
<label>
<input type="checkbox" />
AWACS
</label>
</div>
<div id="TACAN-checkbox" class="ol-checkbox">
<label>
<input type="checkbox" />
Enable TACAN:
</label>
</div>
<div class="ol-group">
<div class="ol-select">
<div class="ol-select-value">40</div>
<div class="ol-select-options">
<div>
<button>40</button>
</div>
<div>
<button>41</button>
</div>
<div>
<button>42</button>
</div>
<div>
<button>43</button>
</div>
<div>
<button>44</button>
</div>
<div>
<button>45</button>
</div>
</div>
</div>
<div class="ol-select">
<div class="ol-select-value">X</div>
<div class="ol-select-options">
<div>
<button>X</button>
</div>
<div>
<button>Y</button>
</div>
</div>
</div>
</div>
<div id="radio-checkbox" class="ol-checkbox">
<label>
<input type="checkbox" />
Use radio frequency:
</label>
</div>
<div class="ol-group">
<div class="ol-select">
<div class="ol-select-value">120</div>
<div class="ol-select-options">
<div>
<button>120</button>
</div>
<div>
<button>121</button>
</div>
<div>
<button>122</button>
</div>
<div>
<button>123</button>
</div>
<div>
<button>124</button>
</div>
<div>
<button>125</button>
</div>
</div>
</div>
<div class="ol-select">
<div class="ol-select-value">.750</div>
<div class="ol-select-options">
<div>
<button>.000</button>
</div>
<div>
<button>.250</button>
</div>
<div>
<button>.500</button>
</div>
<div>
<button>.750</button>
</div>
</div>
</div>
</div>
</form>
</div>
<div class="ol-dialog-footer">
<button class="ol-button-apply" data-on-click="applyDialog">Apply</button>
<button class="ol-button-close" data-on-click="closeDialog">Close</button>
</div>
</div>

View File

@@ -55,10 +55,145 @@
<hr /> <hr />
<div id="advanced-settings-div"> <div id="advanced-settings-div">
<button id="advanced-settings-button" class="ol-button-settings" data-on-click="toggleElements" data-on-click-params='{"selector": "#advanced-settings-dialog"}'>Adjust settings</button> <button id="advanced-settings-button" class="ol-button-settings" data-on-click="showAdvancedSettings">Adjust settings</button>
<hr /> <hr />
</div> </div>
<button class="ol-button-warning" data-on-click="deleteSelectedUnits">Delete unit</button> <button class="ol-button-warning" data-on-click="deleteSelectedUnits">Delete unit</button>
</div> </div>
<div id="advanced-settings-dialog" class="ol-panel ol-dialog hide">
<div class="ol-dialog-close" data-on-click="closeDialog"></div>
<div class="ol-dialog-header">
<h3 id="unit-name">Olympus 1-1</h3>
</div>
<div class="ol-dialog-content">
<form onsubmit="return false">
<!--
<div class="ol-checkbox">
<label>
<input type="checkbox" />
Use ECM when available
</label>
</div>
<div class="ol-checkbox">
<label>
<input type="checkbox" />
Prohibit jettison
</label>
</div>
<div class="ol-checkbox">
<label>
<input type="checkbox" />
Prohibit afterburner
</label>
</div>
<div class="ol-checkbox">
<label>
<input type="checkbox" />
Prohibit A/A
</label>
</div>
<div class="ol-checkbox">
<label>
<input type="checkbox" />
Prohibit A/G
</label>
</div>
-->
<div id="tanker-checkbox" class="ol-checkbox">
<label>
<input type="checkbox"/>
Operate as tanker
</label>
</div>
<div id="AWACS-checkbox" class="ol-checkbox">
<label>
<input type="checkbox" />
Operate as AWACS
</label>
</div>
<div class="ol-group">
<div id="TACAN-checkbox" class="ol-checkbox">
<label>
A/A TACAN:
</label>
</div>
<div id="TACAN-channel" class="ol-text-input">
<input type="number" min="1" max="126" step="1" value="40">
</div>
<div id="TACAN-XY" class="ol-select">
<div class="ol-select-value">X</div>
<div class="ol-select-options">
</div>
</div>
<label>
Morse:
</label>
<div id="TACAN-callsign" class="ol-text-input">
<input type="text" maxlength="3" value="TKR" style="width: 50px">
</div>
</div>
<div class="ol-group">
<div id="radio-checkbox" class="ol-checkbox">
<label>
Radio frequency:
</label>
</div>
<div id="radio-mhz" class="ol-text-input">
<input type="number" min="1" max="999" step="1" value="260">
</div>
<div id="radio-decimals" class="ol-select">
<div class="ol-select-value">.000</div>
<div class="ol-select-options">
</div>
</div>
</div>
<div class="ol-group">
<label>
Radio callsign:
</label>
<div id="radio-callsign" class="ol-select">
<div class="ol-select-value"></div>
<div class="ol-select-options">
</div>
</div>
<label>
-
</label>
<div id="radio-callsign-number" class="ol-text-input">
<input type="number" min="1" max="999" step="1" value="1">
</div>
</div>
</form>
</div>
<div class="ol-dialog-footer ol-group">
<button class="ol-button-apply" data-on-click="applyAdvancedSettings">Apply</button>
<button class="ol-button-close" data-on-click="closeDialog">Close</button>
</div>
</div>