(function() {
if (!window.wabConfig || !document.getElementById(wabConfig.mapContainer)) {
return;
}
const workedSquares = wabConfig.workedSquares || [];
const confirmedSquares = wabConfig.confirmedSquares || [];
const confirmedOnly = wabConfig.confirmedOnly === true || wabConfig.confirmedOnly === 'true' || wabConfig.confirmedOnly === 1 || wabConfig.confirmedOnly === '1';
const mapContainerId = wabConfig.mapContainer;
function isConfirmed(name) {
return confirmedSquares.indexOf(name) !== -1;
}
function isWorked(name) {
return workedSquares.indexOf(name) !== -1;
}
function renderMap(geojson) {
const layer = L.tileLayer(wabConfig.tileUrl, {
maxZoom: 18,
attribution: wabConfig.tileAttribution,
id: 'mapbox.streets'
});
const map = L.map(mapContainerId, {
layers: [layer],
center: [54.970901, -2.45714],
zoom: 8,
minZoom: 8,
fullscreenControl: true,
fullscreenControlOptions: {
position: 'topleft'
}
});
L.easyPrint({
tileLayer: layer,
sizeModes: ['Current'],
filename: 'wab-map',
exportOnly: true,
hideControlContainer: true
}).addTo(map);
const legend = L.control({ position: 'topright' });
legend.onAdd = function() {
const div = L.DomUtil.create('div', 'legend');
div.innerHTML += `
${lang_general_word_colors}
`;
div.innerHTML += " " + lang_general_word_confirmed + "
";
div.innerHTML += " " + lang_general_word_worked_not_confirmed + "
";
div.innerHTML += " Not worked
";
return div;
};
legend.addTo(map);
const geoLayer = L.geoJSON(geojson, {
filter: function(feature) {
if (confirmedOnly) {
const name = feature.properties && feature.properties.name ? feature.properties.name : null;
return name && isConfirmed(name);
}
return true;
},
style: function(feature) {
const name = feature.properties && feature.properties.name ? feature.properties.name : '';
if (isConfirmed(name)) {
return { fillColor: 'green', fill: true, fillOpacity: 0.9, weight: 1, color: '#2f6f31' };
} else if (isWorked(name)) {
return { fillColor: 'orange', fill: true, fillOpacity: 0.85, weight: 1, color: '#ad5f00' };
}
return { fillColor: '#e0e0e0', fill: true, fillOpacity: 0.3, weight: 1, color: '#999' };
},
pointToLayer: function(feature, latlng) {
if (feature.properties && feature.properties.name) {
const labelIcon = L.divIcon({
className: 'text-labels',
html: feature.properties.name
});
return L.marker(latlng, { icon: labelIcon });
}
},
onEachFeature: function(feature, layer) {
layer.on('click', function() {
if (feature.properties && feature.properties.name) {
displaywabcontacts(feature.properties.name);
}
});
}
}).addTo(map);
function updateLabels() {
const zoom = map.getZoom();
geoLayer.eachLayer(function(layer) {
if (layer.getElement && layer.getElement()) {
layer.getElement().style.display = zoom >= 8 ? 'block' : 'none';
}
});
}
map.on('zoomend', updateLabels);
updateLabels();
}
function displaywabcontacts(wabSquare) {
const payload = { Wab: wabSquare };
if (wabConfig.filters) {
payload.Band = wabConfig.filters.band || 'All';
payload.Mode = wabConfig.filters.mode || 'All';
if (wabConfig.filters.confirmed_only) {
payload.ConfirmedOnly = 1;
}
}
$.ajax({
url: wabConfig.detailUrl,
type: 'post',
data: payload,
success: function(html) {
BootstrapDialog.show({
title: lang_general_word_qso_data,
size: BootstrapDialog.SIZE_WIDE,
cssClass: 'qso-wab-dialog',
nl2br: false,
message: html,
onshown: function() {
$('[data-bs-toggle="tooltip"]').tooltip();
},
buttons: [{
label: lang_admin_close,
action: function(dialogItself) { dialogItself.close(); }
}]
});
}
});
}
$.getJSON(wabConfig.geojsonUrl)
.done(function(geojson) {
renderMap(geojson);
})
.fail(function(xhr) {
console.error('Unable to load WAB squares', xhr.statusText);
});
})();