some improvement on the UI
This commit is contained in:
parent
55936f0af4
commit
33ca20410e
|
@ -2,12 +2,11 @@
|
|||
<head>
|
||||
<title>NEXRAD Browser</title>
|
||||
<style>
|
||||
@import url('https://fonts.googleapis.com/css2?family=VT323&display=swap');
|
||||
|
||||
#canvas {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
image-rendering: pixelated;
|
||||
z-index: 10000;
|
||||
}
|
||||
|
||||
body {
|
||||
|
@ -21,8 +20,6 @@
|
|||
Something went wrong while loading the canvas. Sorry :/
|
||||
</canvas>
|
||||
|
||||
<p style="font-family: 'vt323', monospace;">FONT TEST!</p>
|
||||
|
||||
<script src="bootstrap.js"></script>
|
||||
</body>
|
||||
</html>
|
|
@ -6,19 +6,47 @@ console.log("[JS] setup event listeners");
|
|||
|
||||
console.log("[JS] initializing the renderer");
|
||||
|
||||
|
||||
|
||||
const DEFAULT_PREFERENCES = {
|
||||
RR: 5,
|
||||
RREN: true,
|
||||
FCS: 16
|
||||
FCS: 20
|
||||
};
|
||||
let preferences = DEFAULT_PREFERENCES;
|
||||
|
||||
function get_font_size() { return `${preferences.FCS}px `; }
|
||||
function get_font_size() { return `${preferences.FCS}px monospace`; }
|
||||
|
||||
const canvas = document.getElementById("canvas");
|
||||
const ctx = canvas.getContext("2d");
|
||||
|
||||
function setupCanvas(canvas) {
|
||||
// Get the device pixel ratio, falling back to 1.
|
||||
var dpr = window.devicePixelRatio || 1;
|
||||
// Get the size of the canvas in CSS pixels.
|
||||
var rect = canvas.getBoundingClientRect();
|
||||
// Give the canvas pixel dimensions of their CSS
|
||||
// size * the device pixel ratio.
|
||||
canvas.width = rect.width * dpr;
|
||||
canvas.height = rect.height * dpr;
|
||||
var ctx = canvas.getContext('2d');
|
||||
// Scale all drawing operations by the dpr, so you
|
||||
// don't have to worry about the difference.
|
||||
ctx.scale(dpr, dpr);
|
||||
return ctx;
|
||||
}
|
||||
|
||||
function rescaleCanvas(canvas, ctx) {
|
||||
var dpr = window.devicePixelRatio || 1;
|
||||
// Get the size of the canvas in CSS pixels.
|
||||
var rect = canvas.getBoundingClientRect();
|
||||
// Give the canvas pixel dimensions of their CSS
|
||||
// size * the device pixel ratio.
|
||||
canvas.width = rect.width * dpr;
|
||||
canvas.height = rect.height * dpr;
|
||||
// Scale all drawing operations by the dpr, so you
|
||||
// don't have to worry about the difference.
|
||||
ctx.scale(dpr, dpr);
|
||||
}
|
||||
|
||||
const ctx = setupCanvas(canvas);
|
||||
|
||||
const FIFTY_MILES = 0.0916;
|
||||
let current_lat = 38.8977;
|
||||
|
@ -51,13 +79,59 @@ function recalcBorderCoordinates() {
|
|||
|
||||
x0 = xy.x - canvas.width;
|
||||
y0 = xy.y - canvas.height;
|
||||
xfull = xy.x + (canvas.width / 2);
|
||||
yfull = xy.y + (canvas.height / 2);
|
||||
xfull = x0 + canvas.width;
|
||||
yfull = y0 + canvas.width;
|
||||
}
|
||||
|
||||
const red = "#ef0000";
|
||||
const green = "#4af626";
|
||||
const white = "#dedede";
|
||||
|
||||
let blinkyColor = "#dedede";
|
||||
|
||||
setInterval(() => {
|
||||
if (blinkyColor === red) {
|
||||
blinkyColor = white;
|
||||
} else {
|
||||
blinkyColor = red;
|
||||
}
|
||||
}, 350);
|
||||
|
||||
function zulu() {
|
||||
let date = new Date();
|
||||
return `${date.getUTCHours().toString().padStart(2, '0')}:${date.getUTCMinutes().toString().padStart(2, '0')}:${date.getUTCSeconds().toString().padStart(2, '0')}Z`;
|
||||
}
|
||||
|
||||
let command_buf = "";
|
||||
let buf_response_mode = false;
|
||||
|
||||
function exec() {
|
||||
console.log("exec1!");
|
||||
}
|
||||
|
||||
document.onkeyup = (e) => {
|
||||
if (e.key.toUpperCase() === "ESCAPE") {
|
||||
command_buf = "";
|
||||
} else if (e.key.toUpperCase() === "ENTER") {
|
||||
command_buf = "";
|
||||
exec();
|
||||
} else if (e.key.toUpperCase() === "BACKSPACE") {
|
||||
command_buf = command_buf.slice(0, command_buf.length-1);
|
||||
exec();
|
||||
} else {
|
||||
if (e.key.length !== 1) { return; }
|
||||
if (buf_response_mode) {
|
||||
buf_response_mode = false;
|
||||
command_buf = "";
|
||||
}
|
||||
command_buf += e.key.toUpperCase();
|
||||
}
|
||||
}
|
||||
|
||||
setInterval(() => {
|
||||
//document.getElementById("input-detection").focus();
|
||||
rescaleCanvas(canvas, ctx);
|
||||
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
||||
ctx.font = get_font_size();
|
||||
ctx.resetTransform();
|
||||
|
||||
recalcBorderCoordinates();
|
||||
|
@ -68,5 +142,32 @@ setInterval(() => {
|
|||
|
||||
// background (black, always)
|
||||
ctx.fillStyle = "black";
|
||||
ctx.fillRect(x0, y0, xfull, yfull);
|
||||
})
|
||||
ctx.fillRect(x0, y0, xfull * 2, yfull * 2);
|
||||
|
||||
ctx.font = get_font_size();
|
||||
ctx.fillStyle = green;
|
||||
ctx.fillText(`NEXRAD KLSX ${zulu()}`, x0 + 50, y0 + 50);
|
||||
|
||||
ctx.fillStyle = blinkyColor;
|
||||
ctx.fillText("RADR INOP NO DATA LOADED", x0 + 50, y0 + 50 + preferences.FCS);
|
||||
ctx.fillStyle = green;
|
||||
|
||||
ctx.textAlign = "right";
|
||||
ctx.fillText("RADAR SITE", xfull - 75, y0 + 50);
|
||||
ctx.fillText("KLSX VCP35 Clear Air Mode", xfull - 75, y0 + 50 + preferences.FCS);
|
||||
|
||||
ctx.fillText("MODE", xfull - 75, y0 + canvas.height / 3);
|
||||
ctx.fillText(" REF VEL SW ", xfull - 75, y0 + canvas.height / 3 + preferences.FCS);
|
||||
ctx.fillText(" ZDR PHI RHO ", xfull - 75, y0 + canvas.height / 3 + preferences.FCS * 2);
|
||||
ctx.fillText(" CFP ", xfull - 75, y0 + canvas.height / 3 + preferences.FCS * 3);
|
||||
|
||||
ctx.fillStyle = white;
|
||||
|
||||
ctx.fillText(" >RADR INOP<", xfull - 75, y0 + canvas.height / 3 + preferences.FCS * 3);
|
||||
|
||||
ctx.fillStyle = green;
|
||||
ctx.textAlign = "left";
|
||||
|
||||
ctx.fillText(command_buf, x0 + 50, y0 + canvas.height / 2);
|
||||
}, 10);
|
||||
|
||||
|
|
Loading…
Reference in New Issue