diff --git a/webassets/apidocs/openapi.yml b/webassets/apidocs/openapi.yml index d68a1aa..cbdaf53 100644 --- a/webassets/apidocs/openapi.yml +++ b/webassets/apidocs/openapi.yml @@ -1,3 +1,4 @@ +$schema: "https://spec.openapis.org/oas/3.1.0" openapi: 3.1.0 info: title: Spothole API @@ -864,7 +865,6 @@ components: - DSTAR - C4FM - M17 - - DIGI - DATA - FT8 - FT4 diff --git a/webassets/js/bands.js b/webassets/js/bands.js index c3730f4..35fdff7 100644 --- a/webassets/js/bands.js +++ b/webassets/js/bands.js @@ -26,7 +26,7 @@ function loadSpots() { // Build a query string for the API, based on the filters that the user has selected. function buildQueryString() { var str = "?"; - ["dx_continent", "de_continent", "mode_type", "source", "band", "sig"].forEach(fn => { + ["dx_continent", "de_continent", "mode", "source", "band", "sig"].forEach(fn => { if (!allFilterOptionsSelected(fn)) { str = str + getQueryStringFor(fn) + "&"; } @@ -251,7 +251,7 @@ function loadOptions() { generateSIGsMultiToggleFilterCard(options["sigs"]); generateMultiToggleFilterCard("#dx-continent-options", "dx_continent", options["continents"]); generateMultiToggleFilterCard("#de-continent-options", "de_continent", options["continents"]); - generateMultiToggleFilterCard("#mode-options", "mode_type", options["mode_types"]); + generateModesMultiToggleFilterCard(options["modes"]); generateSourcesMultiToggleFilterCard(options["spot_sources"], options["web-ui-options"]["spot-providers-enabled-by-default"]); // Load URL params. These may select things from the various filter & display options, so the function needs diff --git a/webassets/js/common.js b/webassets/js/common.js index f3c5f0e..2e2eb29 100644 --- a/webassets/js/common.js +++ b/webassets/js/common.js @@ -28,7 +28,7 @@ function loadURLParams() { updateFilterFromParam(params, "band", "band"); updateFilterFromParam(params, "sig", "sig"); updateFilterFromParam(params, "source", "source"); - updateFilterFromParam(params, "mode_type", "mode_type"); + updateFilterFromParam(params, "mode", "mode"); updateFilterFromParam(params, "dx_continent", "dx_continent"); updateFilterFromParam(params, "de_continent", "de_continent"); } diff --git a/webassets/js/map.js b/webassets/js/map.js index aa10f9d..3c83a99 100644 --- a/webassets/js/map.js +++ b/webassets/js/map.js @@ -20,7 +20,7 @@ function loadSpots() { // Build a query string for the API, based on the filters that the user has selected. function buildQueryString() { var str = "?"; - ["dx_continent", "de_continent", "mode_type", "source", "band", "sig"].forEach(fn => { + ["dx_continent", "de_continent", "mode", "source", "band", "sig"].forEach(fn => { if (!allFilterOptionsSelected(fn)) { str = str + getQueryStringFor(fn) + "&"; } @@ -183,7 +183,7 @@ function loadOptions() { generateSIGsMultiToggleFilterCard(options["sigs"]); generateMultiToggleFilterCard("#dx-continent-options", "dx_continent", options["continents"]); generateMultiToggleFilterCard("#de-continent-options", "de_continent", options["continents"]); - generateMultiToggleFilterCard("#mode-options", "mode_type", options["mode_types"]); + generateModesMultiToggleFilterCard(options["modes"]); generateSourcesMultiToggleFilterCard(options["spot_sources"], options["web-ui-options"]["spot-providers-enabled-by-default"]); // Load URL params. These may select things from the various filter & display options, so the function needs diff --git a/webassets/js/spots.js b/webassets/js/spots.js index 8ac14c3..f078531 100644 --- a/webassets/js/spots.js +++ b/webassets/js/spots.js @@ -87,7 +87,7 @@ function updateTimingDisplayRunPause() { // Build a query string for the API, based on the filters that the user has selected. function buildQueryString() { var str = "?"; - ["dx_continent", "de_continent", "mode_type", "source", "band", "sig"].forEach(fn => { + ["dx_continent", "de_continent", "mode", "source", "band", "sig"].forEach(fn => { if (!allFilterOptionsSelected(fn)) { str = str + getQueryStringFor(fn) + "&"; } @@ -421,7 +421,7 @@ function loadOptions() { generateSIGsMultiToggleFilterCard(options["sigs"]); generateMultiToggleFilterCard("#dx-continent-options", "dx_continent", options["continents"]); generateMultiToggleFilterCard("#de-continent-options", "de_continent", options["continents"]); - generateMultiToggleFilterCard("#mode-options", "mode_type", options["mode_types"]); + generateModesMultiToggleFilterCard(options["modes"]); generateSourcesMultiToggleFilterCard(options["spot_sources"], options["web-ui-options"]["spot-providers-enabled-by-default"]); // Load URL params. These may select things from the various filter & display options, so the function needs diff --git a/webassets/js/spotsbandsandmap.js b/webassets/js/spotsbandsandmap.js index 3a79546..903aedc 100644 --- a/webassets/js/spotsbandsandmap.js +++ b/webassets/js/spotsbandsandmap.js @@ -47,6 +47,49 @@ function generateSIGsMultiToggleFilterCard(sig_options) { $("#sig-options").append(`  `); } +// Generate modes filter card. This one is also a special case. +function generateModesMultiToggleFilterCard(mode_options) { + // Create a button for each option + mode_options.forEach(o => { + var domSafeName = o.replace(/^[^A-Za-z0-9]+|[^\w]+/gi, ""); + $("#mode-options").append(` `); + }); + // Create All/None buttons + $("#mode-options").append(`  `); + // Create category buttons + $("#mode-options").append(`   `); +} + +// Toggle the mode toggles that relate to Analog Voice. +function toggleAnalogVoiceModeToggles() { + toggleToggles("mode", ["PHONE", "SSB", "LSB", "USB", "AM", "FM"]); +} + +// Toggle the mode toggles that relate to Digital Voice. +function toggleDigitalVoiceModeToggles() { + toggleToggles("mode", ["DV", "DMR", "DSTAR", "C4FM", "M17"]); +} + +// Toggle the mode toggles that relate to Digimodes. +function toggleDigiModeToggles() { + toggleToggles("mode", ["DATA", "FT8", "FT4", "RTTY", "SSTV", "JS8", "HELL", "PSK", "OLIVIA", "PKT", "MSK144"]); +} + +// Toggle the a set of toggles of the given type (e.g. "mode") that match the given values (e.g. ["SSB", "AM", "FM"]). +function toggleToggles(type, values) { + let toggle = null; + $(".filter-button-" + type).each(function() { + console.log($(this)); + if (values.includes($(this).val().replace("filter-button-" + type, ""))) { + if (toggle == null) { + toggle = !$(this).prop('checked'); + } + $(this).prop('checked', toggle); + } + }); + filtersUpdated(); +} + // Generate Sources filter card. This one is a minor special case as we create the buttons in the normal way, but then // set which ones are enabled by default based on config rather than having them all enabled by default. We also sanitise // names here for HTML elements.