-
+
@@ -417,15 +431,15 @@
-
@@ -433,13 +447,13 @@
">
- = __("Fresh Spots"); ?>
+ = __("Fresh"); ?>
">
- = __("Contest Spots"); ?>
+ = __("Contest"); ?>
">
- = __("Referenced Spots"); ?>
+ = __("Referenced"); ?>
@@ -495,13 +509,13 @@
"> |
[MHz]">= __("Freq"); ?> |
"> |
-
">= __("Spotted"); ?> |
+
">= __("DX"); ?> |
"> |
"> |
"> |
">= __("Entity"); ?> |
"> |
-
">= __("Spotter"); ?> |
+
">= __("de"); ?> |
"> |
"> |
">= __("Special"); ?> |
diff --git a/assets/js/sections/bandmap_list.js b/assets/js/sections/bandmap_list.js
index 2371e88b0..d6ae89bc7 100644
--- a/assets/js/sections/bandmap_list.js
+++ b/assets/js/sections/bandmap_list.js
@@ -583,12 +583,10 @@ $(function() {
return;
}
- let now = new Date();
- let timeStr = now.getUTCHours().toString().padStart(2, '0') + ':' + now.getUTCMinutes().toString().padStart(2, '0') + 'Z';
- let statusMessage = totalSpots + ' spots fetched @ ' + timeStr;
- let allFilters = [];
-
- if (serverFilters && serverFilters.length > 0) {
+ let now = new Date();
+ let timeStr = now.getUTCHours().toString().padStart(2, '0') + ':' + now.getUTCMinutes().toString().padStart(2, '0') + 'Z';
+ let statusMessage = totalSpots + ' ' + lang_bandmap_spots_fetched + ' @ ' + timeStr;
+ let allFilters = []; if (serverFilters && serverFilters.length > 0) {
allFilters = allFilters.concat(serverFilters.map(f => 'de "' + f + '"'));
}
@@ -602,16 +600,14 @@ $(function() {
allFilters.push('search: "' + searchValue + '"');
}
- // Build status message
- if (allFilters.length > 0) {
- statusMessage += ', showing ' + displayedSpots;
- } else if (displayedSpots < totalSpots) {
- statusMessage += ', showing ' + displayedSpots;
- } else if (totalSpots > 0) {
- statusMessage += ', showing all';
- }
-
- // Build tooltip for status message (fetch information)
+ // Build status message
+ if (allFilters.length > 0) {
+ statusMessage += ', ' + lang_bandmap_showing + ' ' + displayedSpots;
+ } else if (displayedSpots < totalSpots) {
+ statusMessage += ', ' + lang_bandmap_showing + ' ' + displayedSpots;
+ } else if (totalSpots > 0) {
+ statusMessage += ', ' + lang_bandmap_showing_all;
+ } // Build tooltip for status message (fetch information)
let fetchTooltipLines = [lang_bandmap_last_fetched + ':'];
fetchTooltipLines.push(lang_bandmap_band + ': ' + (lastFetchParams.band || lang_bandmap_all));
fetchTooltipLines.push(lang_bandmap_continent + ': ' + (lastFetchParams.continent || lang_bandmap_all));
@@ -625,25 +621,23 @@ $(function() {
fetchTooltipLines.push(lang_bandmap_fetched_at + ': ' + fetchTimeStr);
}
- $('#statusMessage').text(statusMessage).attr('title', fetchTooltipLines.join('\n'));
+ $('#statusMessage').text(statusMessage).attr('title', fetchTooltipLines.join('\n'));
- // Add info icon if filters are active (with separate tooltip for active filters)
- $('#statusFilterInfo').remove();
- if (allFilters.length > 0) {
- let filterTooltip = 'Active filters:\n' + allFilters.join('\n');
- $('#statusMessage').after('
');
- }
-
- if (isFetching) {
- $('#refreshIcon').removeClass('fa-hourglass-half').addClass('fa-spinner fa-spin');
- $('#refreshTimer').text('Fetching...');
- } else {
- $('#refreshIcon').removeClass('fa-spinner fa-spin').addClass('fa-hourglass-half');
- $('#refreshTimer').text('Next update in ' + refreshCountdown + 's');
- }
+ // Add info icon if filters are active (with separate tooltip for active filters)
+ $('#statusFilterInfo').remove();
+ if (allFilters.length > 0) {
+ let filterTooltip = lang_bandmap_active_filters + ':\n' + allFilters.join('\n');
+ $('#statusMessage').after('
');
}
- function getDisplayedSpotCount() {
+ if (isFetching) {
+ $('#refreshIcon').removeClass('fa-hourglass-half').addClass('fa-spinner fa-spin');
+ $('#refreshTimer').text(lang_bandmap_fetching);
+ } else {
+ $('#refreshIcon').removeClass('fa-spinner fa-spin').addClass('fa-hourglass-half');
+ $('#refreshTimer').text(lang_bandmap_next_update + ' ' + refreshCountdown + 's');
+ }
+} function getDisplayedSpotCount() {
var table = get_dtable();
return table.rows({search: 'applied'}).count();
}
@@ -676,7 +670,7 @@ $(function() {
} else {
if (!isFetchInProgress && lastFetchParams.timestamp !== null) {
$('#refreshIcon').removeClass('fa-spinner fa-spin').addClass('fa-hourglass-half');
- $('#refreshTimer').text('Next update in ' + refreshCountdown + 's');
+ $('#refreshTimer').text(lang_bandmap_next_update + ' ' + refreshCountdown + 's');
}
}
}, 1000);
@@ -966,7 +960,7 @@ $(function() {
} else if (single.dxcc_spotted.lotw_user > 7) {
lclass = 'lotw_info_yellow';
}
- let lotw_title = 'LoTW User. Last upload was ' + single.dxcc_spotted.lotw_user + ' days ago';
+ let lotw_title = lang_bandmap_lotw_last_upload + ' ' + single.dxcc_spotted.lotw_user + ' ' + lang_bandmap_days_ago;
lotw_badge = '
' + buildBadge('success ' + lclass, 'fa-upload', lotw_title) + '';
}
@@ -978,25 +972,25 @@ $(function() {
if (single.dxcc_spotted.pota_mode) {
pota_title += ' (' + single.dxcc_spotted.pota_mode + ')';
}
- pota_title += ' - Click to view on POTA.app';
+ pota_title += ' - ' + lang_bandmap_click_to_view_pota;
let pota_url = 'https://pota.app/#/park/' + single.dxcc_spotted.pota_ref;
activity_flags += '
' + buildBadge('success', 'fa-tree', pota_title) + '';
}
if (single.dxcc_spotted && single.dxcc_spotted.sota_ref) {
- let sota_title = 'SOTA: ' + single.dxcc_spotted.sota_ref + ' - Click to view on SOTL.as';
+ let sota_title = 'SOTA: ' + single.dxcc_spotted.sota_ref + ' - ' + lang_bandmap_click_to_view_sotl;
let sota_url = 'https://sotl.as/summits/' + single.dxcc_spotted.sota_ref;
activity_flags += '
' + buildBadge('primary', 'fa-mountain', sota_title) + '';
}
if (single.dxcc_spotted && single.dxcc_spotted.wwff_ref) {
- let wwff_title = 'WWFF: ' + single.dxcc_spotted.wwff_ref + ' - Click to view on cqgma.org';
+ let wwff_title = 'WWFF: ' + single.dxcc_spotted.wwff_ref + ' - ' + lang_bandmap_click_to_view_wwff;
let wwff_url = 'https://www.cqgma.org/zinfo.php?ref=' + single.dxcc_spotted.wwff_ref;
activity_flags += '
' + buildBadge('success', 'fa-leaf', wwff_title) + '';
}
if (single.dxcc_spotted && single.dxcc_spotted.iota_ref) {
- let iota_title = 'IOTA: ' + single.dxcc_spotted.iota_ref + ' - Click to view on IOTA-World.org';
+ let iota_title = 'IOTA: ' + single.dxcc_spotted.iota_ref + ' - ' + lang_bandmap_click_to_view_iota;
let iota_url = 'https://www.iota-world.org/';
activity_flags += '
' + buildBadge('info', 'fa-water', iota_title) + '';
}
@@ -1017,7 +1011,7 @@ $(function() {
if (single.worked_call) {
let worked_title = lang_bandmap_worked_before;
if (single.last_wked && single.last_wked.LAST_QSO && single.last_wked.LAST_MODE) {
- worked_title = lang_bandmap_worked + ': ' + single.last_wked.LAST_QSO + ' in ' + single.last_wked.LAST_MODE;
+ worked_title = lang_bandmap_worked + ': ' + single.last_wked.LAST_QSO + ' ' + lang_bandmap_in + ' ' + single.last_wked.LAST_MODE;
}
let worked_badge_type = single.cnfmd_call ? 'success' : 'warning';
// isLast is true only if fresh badge won't be added
@@ -1046,13 +1040,11 @@ $(function() {
else if (displayMode.toLowerCase() === 'digi') displayMode = 'Digi';
data[0].push(displayMode);
- // Callsign column: wrap in QRZ link with color coding
- let qrzLink = '
' + single.spotted + '';
- wked_info = ((wked_info != '' ? '
' : '') + qrzLink + (wked_info != '' ? '' : ''));
- var spotted = wked_info;
- data[0].push(spotted);
-
- // Continent column: color code based on worked/confirmed status
+ // Callsign column: wrap in QRZ link with color coding
+ let qrzLink = '
' + single.spotted + '';
+ wked_info = ((wked_info != '' ? '
' : '') + qrzLink + (wked_info != '' ? '' : ''));
+ var spotted = wked_info;
+ data[0].push(spotted); // Continent column: color code based on worked/confirmed status
var continent_wked_info;
if (single.cnfmd_continent) {
continent_wked_info = "text-success";
@@ -1064,7 +1056,7 @@ $(function() {
let continent_value = (single.dxcc_spotted && single.dxcc_spotted.cont) ? single.dxcc_spotted.cont : '';
if (continent_value) {
let continent_display = (continent_wked_info != '' ? '
' : '') + continent_value + (continent_wked_info != '' ? '' : '');
- continent_wked_info = '
' + continent_display + '';
+ continent_wked_info = '
' + continent_display + '';
} else {
continent_wked_info = '';
}
@@ -1073,7 +1065,7 @@ $(function() {
// CQ Zone column: show CQ Zone (moved here, right after Cont)
let cqz_value = (single.dxcc_spotted && single.dxcc_spotted.cqz) ? single.dxcc_spotted.cqz : '';
if (cqz_value) {
- data[0].push('
' + cqz_value + '');
+ data[0].push('
' + cqz_value + '');
} else {
data[0].push('');
} // Flag column: just the flag emoji without entity name
@@ -1087,7 +1079,7 @@ $(function() {
let dxcc_entity_full = single.dxcc_spotted ? (single.dxcc_spotted.entity || '') : '';
let entity_colored = dxcc_entity_full ? ((dxcc_wked_info != '' ? '
' : '') + dxcc_entity_full + (dxcc_wked_info != '' ? '' : '')) : '';
if (single.dxcc_spotted && single.dxcc_spotted.dxcc_id && dxcc_entity_full) {
- data[0].push('
' + entity_colored + '');
+ data[0].push('
' + entity_colored + '');
} else {
data[0].push(entity_colored);
}
@@ -1098,7 +1090,7 @@ $(function() {
data[0].push(dxcc_number);
// de Callsign column (Spotter) - clickable QRZ link
- let spotterQrzLink = '
' + single.spotter + '';
+ let spotterQrzLink = '
' + single.spotter + '';
data[0].push(spotterQrzLink);
// de Cont column: spotter's continent
@@ -1228,7 +1220,7 @@ $(function() {
let actualDisplayedCount = table.rows({search: 'applied'}).count();
updateStatusBar(cachedSpotData.length, actualDisplayedCount, getServerFilterText(), getClientFilterText(), false, false);
$('#refreshIcon').removeClass('fa-spinner fa-spin').addClass('fa-hourglass-half');
- $('#refreshTimer').text('Next update in ' + refreshCountdown + 's');
+ $('#refreshTimer').text(lang_bandmap_next_update + ' ' + refreshCountdown + 's');
}
// Update DX Map only if visible (don't waste resources)
@@ -2276,11 +2268,11 @@ $(function() {
window.isCatTrackingEnabled = isCatTrackingEnabled; // Expose to window for cat.js
var currentRadioFrequency = null; // Store current radio frequency in kHz
var lastGradientFrequency = null; // Track last frequency used for gradient update
-
+
// Three-state CAT control: 'off', 'on', 'on+marker'
var catState = 'off';
var isFrequencyMarkerEnabled = false;
-
+
// Click detection for single/double-click
var catClickTimer = null;
var catClickPreventSingle = false;
@@ -3159,11 +3151,11 @@ $(function() {
function updateButtonVisual(state) {
let btn = $('#toggleCatTracking');
let radioIcon = btn.find('i.fa-radio');
-
+
btn.removeClass('btn-secondary btn-success');
radioIcon.removeClass('fa-podcast fa-crosshairs').css('color', '');
btn.css('box-shadow', '');
-
+
if (state === 'off') {
btn.addClass('btn-secondary').attr('data-bs-original-title', lang_bandmap_cat_off);
radioIcon.addClass('fa-radio');
@@ -3175,7 +3167,7 @@ $(function() {
radioIcon.addClass('fa-radio').css('color', '#8a2be2');
btn.css('box-shadow', '0 0 8px rgba(138, 43, 226, 0.6)');
}
-
+
// Update tooltip if it exists
if (typeof bootstrap !== 'undefined' && bootstrap.Tooltip) {
let tooltip = bootstrap.Tooltip.getInstance(btn[0]);
@@ -3200,13 +3192,13 @@ $(function() {
catClickPreventSingle = true;
handleCatDoubleClick();
});
-
+
// Initialize tooltip on page load - set initial title only
$('#toggleCatTracking').attr('data-bs-original-title', lang_bandmap_cat_off);
function handleCatSingleClick() {
const selectedRadio = $('.radios option:selected').val();
-
+
switch(catState) {
case 'off':
// OFF → ON
@@ -3216,17 +3208,17 @@ $(function() {
}
return;
}
-
+
isCatTrackingEnabled = true;
window.isCatTrackingEnabled = true;
catState = 'on';
-
+
if (window.lastCATData && typeof window.displayRadioStatus === 'function') {
window.displayRadioStatus('success', window.lastCATData);
}
-
+
disableBandFilterControls();
-
+
if (window.lastCATData && window.lastCATData.frequency) {
const band = frequencyToBand(window.lastCATData.frequency);
if (band && band !== '') {
@@ -3236,32 +3228,32 @@ $(function() {
applyFilters(false);
}
}
-
+
updateButtonVisual('on');
break;
-
+
case 'on':
// ON → ON+MARKER
isFrequencyMarkerEnabled = true;
catState = 'on+marker';
-
+
lockTableSortingToFrequency();
-
+
if (window.lastCATData && window.lastCATData.frequency) {
updateFrequencyGradientColors(window.lastCATData.frequency);
}
-
+
updateButtonVisual('on+marker');
break;
-
+
case 'on+marker':
// ON+MARKER → ON
isFrequencyMarkerEnabled = false;
catState = 'on';
-
+
unlockTableSorting();
clearFrequencyGradientColors();
-
+
updateButtonVisual('on');
break;
}
@@ -3270,12 +3262,12 @@ $(function() {
function handleCatDoubleClick() {
// Double-click: Force disable from any state
if (catState === 'off') return;
-
+
isCatTrackingEnabled = false;
window.isCatTrackingEnabled = false;
isFrequencyMarkerEnabled = false;
catState = 'off';
-
+
const selectedRadio = $('.radios option:selected').val();
if (selectedRadio && selectedRadio !== '0' && typeof window.displayOfflineStatus === 'function') {
window.displayOfflineStatus('cat_disabled');
@@ -3284,11 +3276,11 @@ $(function() {
} else {
$('#radio_cat_state').remove();
}
-
+
enableBandFilterControls();
unlockTableSorting();
clearFrequencyGradientColors();
-
+
const currentBands = $("#band").val() || [];
if (currentBands.length !== 1 || currentBands[0] !== 'All') {
$("#band").val(['All']);
@@ -3296,7 +3288,7 @@ $(function() {
syncQuickFilterButtons();
applyFilters(true);
}
-
+
updateButtonVisual('off');
}