commit 2e460dbf967a65f678473106f727551f028024b8
parent cabc22ba0d517adca159b96808887747f9495224
Author: Sergej Orlov <wladimirych@gmail.com>
Date: Mon, 3 Mar 2025 21:09:03 +0100
westra passes: show pass region
Diffstat:
1 file changed, 50 insertions(+), 37 deletions(-)
diff --git a/src/lib/leaflet.layer.westraPasses/westraPassesMarkers.js b/src/lib/leaflet.layer.westraPasses/westraPassesMarkers.js
@@ -10,7 +10,7 @@ import * as logging from '~/lib/logging';
const WestraPassesMarkers = L.Layer.CanvasMarkers.extend({
options: {
- filePasses: 'westra_passes.json',
+ filePasses: 'westra_passes2.json',
scaleDependent: true
},
@@ -21,20 +21,43 @@ const WestraPassesMarkers = L.Layer.CanvasMarkers.extend({
this.url = baseUrl + this.options.filePasses;
},
- loadData: function() {
+ loadData: async function() {
if (this._downloadStarted) {
return;
}
this._downloadStarted = true;
- fetch(this.url)
- .then(
- (xhr) => this._loadMarkers(xhr),
- (e) => {
- this._downloadStarted = false;
- logging.captureException(e, 'failed to get westra passes');
- notify('Failed to get Westra passes data');
- }
- );
+ let xhr;
+ try {
+ xhr = await fetch(this.url);
+ } catch (e) {
+ this._downloadStarted = false;
+ logging.captureException(e, 'failed to get westra passes');
+ notify('Failed to get Westra passes data');
+ }
+
+ const {passes, regions} = JSON.parse(xhr.response);
+ this.regions = regions;
+ this._createMarkers(passes);
+ },
+
+ _createMarkers: function(passes) {
+ const markers = [];
+ for (const pass of passes) {
+ const marker = {
+ latlng: {
+ lat: pass.latlon[0],
+ lng: pass.latlon[1]
+ },
+ label: pass.name || "",
+ icon: this._makeIcon,
+ tooltip: this._makeTooltip.bind(this),
+ properties: pass
+ };
+ markers.push(marker);
+ }
+ this.addMarkers(markers);
+ this._dataLoaded = true;
+ this.fire('data-loaded');
},
onAdd: function(map) {
@@ -111,36 +134,15 @@ const WestraPassesMarkers = L.Layer.CanvasMarkers.extend({
return iconFromBackgroundImage(className);
},
- _loadMarkers: function(xhr) {
- var markers = [],
- features = JSON.parse(xhr.response),
- feature, i, marker;
- for (i = 0; i < features.length; i++) {
- feature = features[i];
- marker = {
- latlng: {
- lat: feature.latlon[0],
- lng: feature.latlon[1]
- },
- label: feature.name || "",
- icon: this._makeIcon,
- tooltip: this._makeTooltip.bind(this),
- properties: feature
- };
- markers.push(marker);
- }
- this.addMarkers(markers);
- this._dataLoaded = true;
- this.fire('data-loaded');
- },
-
showPassDescription: function(e) {
if (!this._map) {
return;
}
const properties = e.marker.properties,
latLng = e.marker.latlng,
- url = 'https://westra.ru/passes/Passes/' + properties.id;
+ catalogueUrlBase = 'https://westra.ru/passes',
+ passUrl = `${catalogueUrlBase}/Passes/${properties.id}`,
+ regionUrlBase = `${catalogueUrlBase}/Places`;
let altnames = '',
connects = '',
comments = '';
@@ -187,6 +189,12 @@ const WestraPassesMarkers = L.Layer.CanvasMarkers.extend({
} else {
reports = '<br>Отчетов нет';
}
+ const region = properties.regions.map((regionId) => {
+ const name = escapeHtml(this.regions[regionId].name);
+ const id = escapeHtml(regionId);
+ return `<a href="${regionUrlBase}/${id}">${name}</a>`;
+ }).join(' / ');
+
let description = `
<table class="pass-details">
<tr>
@@ -226,16 +234,21 @@ const WestraPassesMarkers = L.Layer.CanvasMarkers.extend({
</tr>
<tr>
<td>На сайте Вестры</td>
- <td><a id="westra-pass-link" href="${url}">${url}</a>${reports}</td></tr>
+ <td><a id="westra-pass-link" href="${passUrl}">${passUrl}</a>${reports}</td></tr>
<tr>
<td>Добавил</td>
<td>${properties.author ? escapeHtml(properties.author) : "неизвестно"}</td>
</tr>
${comments}
+ <tr>
+ <td>Район</td>
+ <td>${region}</td>
+ </tr>
+
</table>`;
this._map.openPopup(description, latLng, {maxWidth: 500});
document.getElementById('westra-pass-link').onclick = function() {
- openPopupWindow(url, 780, 'westra-details');
+ openPopupWindow(passUrl, 780, 'westra-details');
return false;
};
document.getElementById('westra-pass-gpx').onclick = function() {