Merge branch 'main' into 95-send-spots-to-xota

# Conflicts:
#	README.md
#	server/handlers/api/addspot.py
#	server/handlers/api/options.py
#	spotproviders/tiles.py
#	templates/about.html
#	templates/add_spot.html
#	templates/alerts.html
#	templates/api_only_home.html
#	templates/bands.html
#	templates/base.html
#	templates/conditions.html
#	templates/map.html
#	templates/spots.html
#	templates/status.html
#	webassets/css/style.css
#	webassets/js/add-spot.js
#	webassets/js/geo.js
#	webassets/js/ui-ham.js
#	webassets/js/utils.js
This commit is contained in:
Ian Renton
2026-06-19 21:48:10 +01:00
91 changed files with 1835 additions and 1261 deletions

View File

@@ -25,7 +25,7 @@ var PROVIDER_CREDENTIAL_SCHEMAS = {
// Load server options. Once a successful callback is made from this, we can populate the choice boxes in the form and load
// any saved values from local storage.
function loadOptions() {
$.getJSON('/api/v1/options', function(jsonData) {
$.getJSON('/api/v1/options', function (jsonData) {
// Store options
options = jsonData;
@@ -33,7 +33,7 @@ function loadOptions() {
$.each(options["modes"], function (i, m) {
$('#mode').append($('<option>', {
value: m,
text : m
text: m
}));
});
@@ -41,7 +41,7 @@ function loadOptions() {
$.each(options["sigs"], function (i, sig) {
$('#sig').append($('<option>', {
value: sig.name,
text : sig.name
text: sig.name
}));
});
@@ -190,45 +190,45 @@ function addSpot() {
saveSettings();
// Unpack the user's entered values
var dx = $("#dx-call").val().toUpperCase();
var freqStr = $("#freq").val();
var mode = $("#mode")[0].value;
var sig = $("#sig")[0].value;
var sigRef = $("#sig-ref").val();
var dxGrid = $("#dx-grid").val();
var comment = $("#comment").val();
var de = $("#de-call").val().toUpperCase();
const dx = $("#dx-call").val().toUpperCase();
const freqStr = $("#freq").val();
const mode = $("#mode")[0].value;
const sig = $("#sig")[0].value;
const sigRef = $("#sig-ref").val();
const dxGrid = $("#dx-grid").val();
const comment = $("#comment").val();
const de = $("#de-call").val().toUpperCase();
var spot = {}
if (dx != "") {
const spot = {};
if (dx !== "") {
spot["dx_call"] = dx;
} else {
// todo maybe for neatness just make all these error/rejections server side rather than having logic in two places
showAddSpotError("A DX callsign is required in order to spot.");
return;
}
if (freqStr != "") {
if (freqStr !== "") {
spot["freq"] = parseFloat(freqStr) * 1000;
} else {
showAddSpotError("A frequency is required in order to spot.");
return;
}
if (mode != "") {
if (mode !== "") {
spot["mode"] = mode;
}
if (sig != "") {
if (sig !== "") {
spot["sig"] = sig;
}
if (sigRef != "") {
if (sigRef !== "") {
spot["sig_refs"] = [{id: sigRef}];
}
if (dxGrid != "") {
if (dxGrid !== "") {
spot["dx_grid"] = dxGrid;
}
if (comment != "") {
if (comment !== "") {
spot["comment"] = comment;
}
if (de != "") {
if (de !== "") {
spot["de_call"] = de;
} else {
showAddSpotError("A spotter callsign is required in order to spot.");
@@ -274,9 +274,9 @@ function addSpot() {
}
$.ajax("/api/v1/spot", {
data : JSON.stringify(spot),
contentType : 'application/json',
type : 'POST',
data: JSON.stringify(spot),
contentType: 'application/json',
type: 'POST',
timeout: 10000,
success: async function (result) {
// Reset CAPTCHA for next use
@@ -313,7 +313,7 @@ function addSpot() {
// Show an "add spot" error.
function showAddSpotError(text) {
var div = $("<div class='alert alert-danger alert-dismissible fade show mb-0 mt-4' role='alert'></div>");
const div = $("<div class='alert alert-danger alert-dismissible fade show mb-0 mt-4' role='alert'></div>");
div.append("<i class='fa-solid fa-triangle-exclamation'></i> ");
div.append(document.createTextNode(text));
div.append("<button type='button' class='btn-close' data-bs-dismiss='alert' aria-label='Close'></button>");
@@ -342,7 +342,7 @@ $("#upstream-provider-select").change(function () {
});
// Startup
$(document).ready(function() {
$(document).ready(function () {
// Load options
loadOptions();
});