");
+ $card_body.append(`
${displayName} `);
+ $p = $("
");
+ // Create a button for each option
+ options.forEach(o => {
+ $p.append(`${o} `);
+ });
+ // Create All/None buttons
+ $p.append(` All None `);
+ // Compile HTML elements to return
+ $card_body.append($p);
+ $card.append($card_body);
+ $col.append($card);
+ return $col;
+}
+
+// Method called when "All" or "None" is clicked
+function toggleFilterButtons(filterQuery, state) {
+ $(".filter-button-" + filterQuery).each(function() {
+ $(this).prop('checked', state);
+ });
+ filtersUpdated();
+}
+
+// Update the refresh timing display
+function updateRefreshDisplay() {
+ if (lastUpdateTime != null) {
+ let count = REFRESH_INTERVAL_SEC;
+ let secSinceUpdate = moment.duration(moment().diff(lastUpdateTime)).asSeconds();
+ updatingString = "Updating..."
+ if (secSinceUpdate < REFRESH_INTERVAL_SEC) {
+ count = REFRESH_INTERVAL_SEC - secSinceUpdate;
+ if (count <= 60) {
+ var number = count.toFixed(0);
+ updatingString = "Updating in " + number + " second" + (number != "1" ? "s" : "") + ".";
+ } else {
+ var number = Math.round(count / 60.0).toFixed(0);
+ updatingString = "Updating in " + number + " minute" + (number != "1" ? "s" : "") + ".";
+ }
+ }
+ $("#timing-container").text("Last updated at " + lastUpdateTime.format('HH:mm') + " UTC. " + updatingString);
+ }
+}
+
+// Utility function to escape HTML characters from a string.
+function escapeHtml(str) {
+ if (typeof str !== 'string') {
+ return '';
+ }
+
+ const escapeCharacter = (match) => {
+ switch (match) {
+ case '&': return '&';
+ case '<': return '<';
+ case '>': return '>';
+ case '"': return '"';
+ case '\'': return ''';
+ case '`': return '`';
+ default: return match;
+ }
+ };
+
+ return str.replace(/[&<>"'`]/g, escapeCharacter);
+}
+
+// Save settings to local storage
+function saveSettings() {
+ // Find all storeable UI elements, store a key of "element id:property name" mapped to the value of that
+ // property. For a checkbox, that's the "checked" property.
+ $(".storeable-checkbox").each(function() {
+ localStorage.setItem($(this)[0].id + ":checked", $(this)[0].checked);
+ });
+ $(".storeable-select").each(function() {
+ localStorage.setItem($(this)[0].id + ":value", $(this)[0].value);
+ });
+}
+
+// Load settings from local storage and set up the filter selectors
+function loadSettings() {
+ // Find all local storage entries and push their data to the corresponding UI element
+ Object.keys(localStorage).forEach(function(key) {
+ // Split the key back into an element ID and a property
+ var split = key.split(":");
+ $("#" + split[0]).prop(split[1], JSON.parse(localStorage.getItem(key)));
+ });
+}
diff --git a/webassets/js/spots.js b/webassets/js/spots.js
index ac0b014..3c3274e 100644
--- a/webassets/js/spots.js
+++ b/webassets/js/spots.js
@@ -3,10 +3,6 @@ const REFRESH_INTERVAL_SEC = 60;
// Storage for the spot data that the server gives us.
var spots = []
-// Storage for the options that the server gives us. This will define our filters.
-var options = {};
-// Last time we updated the spots list on display.
-var lastUpdateTime;
// Load spots and populate the table.
function loadSpots() {
@@ -33,29 +29,6 @@ function buildQueryString() {
return str;
}
-// For a parameter, such as dx_continent, get the query string for the current filter options.
-function getQueryStringFor(parameter) {
- return parameter + "=" + encodeURIComponent(getSelectedFilterOptions(parameter));
-}
-
-// For a parameter, such as dx_continent, get the filter options that are currently selected in the UI.
-function getSelectedFilterOptions(parameter) {
- return $(".filter-button-" + parameter).filter(function() {
- return this.checked;
- }).map(function() {
- return this.value;
- }).get().join(",");
-}
-
-// For a parameter, such as dx_continent, return true if all possible options are enabled. (In this case, we don't need
-// to bother sending this as one of the query parameters to the API; no parameter provided implies "send everything".)
-function allFilterOptionsSelected(parameter) {
- var filter = $(".filter-button-" + parameter).filter(function() {
- return !this.checked;
- }).get();
- return filter.length == 0;
-}
-
// Update the spots table
function updateTable() {
// Populate table with headers
@@ -249,26 +222,6 @@ function addBandColourCSS(band_options) {
$('html > head').append($style);
}
-// Generate filter card
-function generateFilterCard(displayName, filterQuery, options) {
- let $col = $("
")
- let $card = $("
");
- let $card_body = $("
");
- $card_body.append(`
${displayName} `);
- $p = $("
");
- // Create a button for each option
- options.forEach(o => {
- $p.append(`${o} `);
- });
- // Create All/None buttons
- $p.append(` All None `);
- // Compile HTML elements to return
- $card_body.append($p);
- $card.append($card_body);
- $col.append($card);
- return $col;
-}
-
// Generate bands filter card. This one is a special case.
function generateBandsFilterCard(displayName, filterQuery, band_options) {
let $col = $("
")
@@ -292,83 +245,12 @@ function generateBandsFilterCard(displayName, filterQuery, band_options) {
return $col;
}
-// Method called when "All" or "None" is clicked
-function toggleFilterButtons(filterQuery, state) {
- $(".filter-button-" + filterQuery).each(function() {
- $(this).prop('checked', state);
- });
- filtersUpdated();
-}
-
// Method called when any filter is changed to reload the spots and persist the filter settings.
function filtersUpdated() {
loadSpots();
saveSettings();
}
-// Update the refresh timing display
-function updateRefreshDisplay() {
- if (lastUpdateTime != null) {
- let count = REFRESH_INTERVAL_SEC;
- let secSinceUpdate = moment.duration(moment().diff(lastUpdateTime)).asSeconds();
- updatingString = "Updating..."
- if (secSinceUpdate < REFRESH_INTERVAL_SEC) {
- count = REFRESH_INTERVAL_SEC - secSinceUpdate;
- if (count <= 60) {
- var number = count.toFixed(0);
- updatingString = "Updating in " + number + " second" + (number != "1" ? "s" : "") + ".";
- } else {
- var number = Math.round(count / 60.0).toFixed(0);
- updatingString = "Updating in " + number + " minute" + (number != "1" ? "s" : "") + ".";
- }
- }
- $("#timing-container").text("Last updated at " + lastUpdateTime.format('HH:mm') + " UTC. " + updatingString);
- }
-}
-
-// Utility function to escape HTML characters from a string.
-function escapeHtml(str) {
- if (typeof str !== 'string') {
- return '';
- }
-
- const escapeCharacter = (match) => {
- switch (match) {
- case '&': return '&';
- case '<': return '<';
- case '>': return '>';
- case '"': return '"';
- case '\'': return ''';
- case '`': return '`';
- default: return match;
- }
- };
-
- return str.replace(/[&<>"'`]/g, escapeCharacter);
-}
-
-// Save settings to local storage
-function saveSettings() {
- // Find all storeable UI elements, store a key of "element id:property name" mapped to the value of that
- // property. For a checkbox, that's the "checked" property.
- $(".storeable-checkbox").each(function() {
- localStorage.setItem($(this)[0].id + ":checked", $(this)[0].checked);
- });
- $(".storeable-select").each(function() {
- localStorage.setItem($(this)[0].id + ":value", $(this)[0].value);
- });
-}
-
-// Load settings from local storage and set up the filter selectors
-function loadSettings() {
- // Find all local storage entries and push their data to the corresponding UI element
- Object.keys(localStorage).forEach(function(key) {
- // Split the key back into an element ID and a property
- var split = key.split(":");
- $("#" + split[0]).prop(split[1], JSON.parse(localStorage.getItem(key)));
- });
-}
-
// Set up UI element event listeners, after the document is ready
function setUpEventListeners() {
$("#status-button").click(function() {