25 Commits

Author SHA1 Message Date
vcoppe 4537ea4730 Merge branch 'dev' 2026-06-03 19:05:25 +02:00
vcoppe 7f8751fa38 turn wikipedia tags into links, closes #354 2026-06-03 19:05:15 +02:00
vcoppe 1954bbd764 Merge branch 'dev' 2026-06-03 18:48:43 +02:00
vcoppe befcba00b4 hopefully more reliable initial fitBounds 2026-06-03 18:48:07 +02:00
vcoppe 9d2da80893 Merge branch 'dev' 2026-05-31 15:26:17 +02:00
vcoppe 043d368c74 Merge branch 'dev' 2026-05-29 08:37:39 +02:00
vcoppe bb11d3375b Merge branch 'dev' 2026-05-28 19:29:34 +02:00
vcoppe bfe5961e27 Merge branch 'dev' 2026-05-21 20:27:41 +02:00
vcoppe 17559913fd Merge branch 'dev' 2026-04-19 16:49:41 +02:00
vcoppe 55590d68a6 Merge branch 'dev' 2026-04-19 16:34:17 +02:00
vcoppe 8e9f16c460 Merge branch 'dev' 2026-04-19 14:47:35 +02:00
vcoppe c60b64f24f Merge branch 'dev' 2026-04-17 22:10:40 +02:00
vcoppe fdb6fe4e52 Merge branch 'dev' 2026-04-17 20:11:25 +02:00
vcoppe 0bf168e67e Merge branch 'dev' 2026-04-09 21:10:56 +02:00
vcoppe d762a45eb9 Merge branch 'dev' 2026-04-09 20:57:30 +02:00
vcoppe 548ab9a459 Merge branch 'dev' 2026-04-07 22:19:15 +02:00
vcoppe 315c1f6a61 Merge branch 'dev' 2026-04-07 22:02:14 +02:00
vcoppe 98257bee12 Merge branch 'dev' 2026-04-06 18:26:22 +02:00
vcoppe 5561b7d9fe Merge branch 'dev' 2026-04-06 14:26:56 +02:00
vcoppe 320887206c Merge branch 'dev' 2026-04-04 23:15:01 +02:00
vcoppe 04a1bf6a55 Merge branch 'dev' 2026-04-03 08:47:57 +02:00
vcoppe 0989371874 Merge branch 'dev' 2026-04-03 08:06:19 +02:00
vcoppe 3dcd6e52d3 Merge branch 'dev' 2026-04-02 22:35:46 +02:00
vcoppe 0f06d0d461 update 2026-04-02 22:23:34 +02:00
vcoppe db33310a10 revert some changes 2026-04-02 22:20:47 +02:00
8 changed files with 58 additions and 49 deletions
@@ -45,26 +45,6 @@
settings.initialize(); settings.initialize();
function applyOptions() { function applyOptions() {
let downloads: Promise<GPXFile | null>[] = getFilesFromEmbeddingOptions(options).map(
(url) => {
return fetch(url)
.then((response) => response.blob())
.then((blob) => new File([blob], url.split('/').pop() ?? url))
.then(loadFile);
}
);
Promise.all(downloads).then((answers) => {
const files = answers.filter((file) => file !== null) as GPXFile[];
let ids: string[] = [];
files.forEach((file, index) => {
let id = `gpx-${index}-embed`;
file._data.id = id;
ids.push(id);
});
fileStateCollection.setEmbeddedFiles(files);
$fileOrder = ids;
selection.selectAll();
});
if (allowedEmbeddingBasemaps.includes(options.basemap)) { if (allowedEmbeddingBasemaps.includes(options.basemap)) {
$currentBasemap = options.basemap; $currentBasemap = options.basemap;
} }
@@ -90,6 +70,27 @@
].filter((dataset) => dataset !== null) ].filter((dataset) => dataset !== null)
); );
elevationFill.set(options.elevation.fill == 'none' ? undefined : options.elevation.fill); elevationFill.set(options.elevation.fill == 'none' ? undefined : options.elevation.fill);
let downloads: Promise<GPXFile | null>[] = getFilesFromEmbeddingOptions(options).map(
(url) => {
return fetch(url)
.then((response) => response.blob())
.then((blob) => new File([blob], url.split('/').pop() ?? url))
.then(loadFile);
}
);
Promise.all(downloads).then((answers) => {
const files = answers.filter((file) => file !== null) as GPXFile[];
let ids: string[] = [];
files.forEach((file, index) => {
let id = `gpx-${index}-embed`;
file._data.id = id;
ids.push(id);
});
fileStateCollection.setEmbeddedFiles(files);
$fileOrder = ids;
selection.selectAll();
});
} }
$effect(() => { $effect(() => {
@@ -88,6 +88,14 @@
<span class="font-mono">{key}</span> <span class="font-mono">{key}</span>
{#if key === 'website' || key.startsWith('website:') || key.endsWith(':website') || key === 'contact:facebook' || key === 'contact:instagram' || key === 'contact:twitter'} {#if key === 'website' || key.startsWith('website:') || key.endsWith(':website') || key === 'contact:facebook' || key === 'contact:instagram' || key === 'contact:twitter'}
<a href={value} target="_blank" class="text-link underline">{value}</a> <a href={value} target="_blank" class="text-link underline">{value}</a>
{:else if key === 'wikipedia' || key.startsWith('wikipedia:') || key.endsWith(':wikipedia')}
<a
href="https://wikipedia.org/wiki/{value}"
target="_blank"
class="text-link underline"
>
{value}
</a>
{:else if key === 'phone' || key === 'contact:phone'} {:else if key === 'phone' || key === 'contact:phone'}
<a href={'tel:' + value} class="text-link underline">{value}</a> <a href={'tel:' + value} class="text-link underline">{value}</a>
{:else if key === 'email' || key === 'contact:email'} {:else if key === 'email' || key === 'contact:email'}
+2 -2
View File
@@ -13,9 +13,9 @@ title: Instellingen
Wijzig de eenheden die worden gebruikt om afstanden in de interface weer te geven. Wijzig de eenheden die worden gebruikt om afstanden in de interface weer te geven.
### <Zap size="16" class="inline-block" style="margin-bottom: 2px" /> Snelheidseenheden ### <Zap size="16" class="inline-block" style="margin-bottom: 2px" /> Snelheids eenheden
Verander de eenheden die worden gebruikt om snelheden in de interface weer te geven. Verander de eenheden die worden gebruikt om velocities in de interface weer te geven.
Je kunt kiezen tussen afstand per uur of minuten per afstand, wat geschikter kan zijn voor het uitvoeren van activiteiten. Je kunt kiezen tussen afstand per uur of minuten per afstand, wat geschikter kan zijn voor het uitvoeren van activiteiten.
### <Thermometer size="16" class="inline-block" style="margin-bottom: 2px" /> Temperatuureenheden ### <Thermometer size="16" class="inline-block" style="margin-bottom: 2px" /> Temperatuureenheden
+1 -1
View File
@@ -59,7 +59,7 @@ title: 地图控件
<DocsLayers /> <DocsLayers />
<span class="text-sm text-center mt-2"> <span class="text-sm text-center mt-2">
鼠标悬停在地图上,可在地形图底图上方显示 <a href="https://hiking.waymarkedtrails.org" target="_blank">Waymarked Trails 徒步路线</a> 叠加层。 Hover over the map to show the <a href="https://hiking.waymarkedtrails.org" target="_blank">Waymarked Trails hiking</a> overlay on top of the topographic basemap.
</span> </span>
</div> </div>
@@ -18,7 +18,7 @@ title: 请求海拔数据
<DocsNote> <DocsNote>
海拔数据来自 <a href="https://mapterhorn.com" target="_blank">Mapterhorn</a> Elevation data is provided by <a href="https://mapterhorn.com" target="_blank">Mapterhorn</a>.
查阅 <a href="https://mapterhorn.com/attribution/" target="_blank">官方文档</a> 以了解海拔数据来源及其准确度。 You can learn more about its origin and accuracy in the <a href="https://mapterhorn.com/attribution/" target="_blank">documentation</a>.
</DocsNote> </DocsNote>
+1 -1
View File
@@ -75,7 +75,7 @@ export class BoundsManager {
this._unsubscribes.push( this._unsubscribes.push(
map.subscribe((map_) => { map.subscribe((map_) => {
if (!map_) return; if (!map_) return;
map_.fitBounds(this._bounds, { padding: 80, linear: true, easing: () => 1 }); map_.fitBounds(this._bounds, { padding: 80, linear: true, animate: false });
this.reset(); this.reset();
}) })
); );
+22 -22
View File
@@ -28,7 +28,7 @@
"undo": "Anulează", "undo": "Anulează",
"redo": "Refă", "redo": "Refă",
"delete": "Șterge", "delete": "Șterge",
"delete_all": "Șterge tot", "delete_all": "Delete all",
"select_all": "Selectează tot", "select_all": "Selectează tot",
"view": "Vizualizare", "view": "Vizualizare",
"elevation_profile": "Profil de altitudine", "elevation_profile": "Profil de altitudine",
@@ -36,7 +36,7 @@
"switch_basemap": "Comutați la harta de bază anterioară", "switch_basemap": "Comutați la harta de bază anterioară",
"toggle_overlays": "Comută suprapunerile", "toggle_overlays": "Comută suprapunerile",
"toggle_3d": "Comută 3D", "toggle_3d": "Comută 3D",
"fullscreen": "Ecran complet", "fullscreen": "Full screen",
"settings": "Setări", "settings": "Setări",
"distance_units": "Unități de distanță", "distance_units": "Unități de distanță",
"metric": "Metric", "metric": "Metric",
@@ -62,46 +62,46 @@
"more": "Mai multe...", "more": "Mai multe...",
"donate": "Donați", "donate": "Donați",
"ctrl": "Ctrl", "ctrl": "Ctrl",
"click": "Clic", "click": "Click",
"drag": "Drag", "drag": "Drag",
"right_click_drag": "Right-click drag", "right_click_drag": "Right-click drag",
"metadata": { "metadata": {
"button": "Informații...", "button": "Info...",
"name": "Nume", "name": "Name",
"description": "Descriere", "description": "Descriere",
"save": "Salvează" "save": "Save"
}, },
"style": { "style": {
"button": "Aspect...", "button": "Aspect...",
"color": "Culoare", "color": "Color",
"opacity": "Opacitate", "opacity": "Opacitate",
"width": "Lățime" "width": "Width"
}, },
"hide": "Ascunde", "hide": "Ascunde",
"unhide": "Dezvăluie", "unhide": "Dezvăluie",
"center": "Centrează", "center": "Center",
"open_in": "Deschide în", "open_in": "Open in",
"copy_coordinates": "Copiază coordonatele", "copy_coordinates": "Copiază coordonatele",
"edit_osm": "Editează în OpenStreetMap" "edit_osm": "Edit in OpenStreetMap"
}, },
"toolbar": { "toolbar": {
"routing": { "routing": {
"tooltip": "Planifică sau editează o rută", "tooltip": "Planifică sau editează o rută",
"activity": "Activitate", "activity": "Activitate",
"use_routing": "Rutare", "use_routing": "Rutare",
"use_routing_tooltip": "Conectează puncte de ancorare prin rețeaua rutieră sau în linie dreaptă dacă este dezactivată", "use_routing_tooltip": "Connect anchor points via road network, or in a straight line if disabled",
"allow_private": "Permite drumuri private", "allow_private": "Allow private roads",
"reverse": { "reverse": {
"button": "Inversează", "button": "Reverse",
"tooltip": "Reverse the direction of the route" "tooltip": "Reverse the direction of the route"
}, },
"route_back_to_start": { "route_back_to_start": {
"button": "Înapoi la punctul de plecare", "button": "Back to start",
"tooltip": "Conectează ultimul punct al rutei cu punctul de plecare" "tooltip": "Connect the last point of the route with the starting point"
}, },
"round_trip": { "round_trip": {
"button": "Călătorie dus-întors", "button": "Round trip",
"tooltip": "Întoarce-te la punctul de plecare pe aceeași rută" "tooltip": "Return to the starting point by the same route"
}, },
"start_loop_here": "Start loop here", "start_loop_here": "Start loop here",
"help_no_file": "Select a trace to use the routing tool, or click on the map to start creating a new route.", "help_no_file": "Select a trace to use the routing tool, or click on the map to start creating a new route.",
@@ -120,7 +120,7 @@
"unknown": "Necunoscut", "unknown": "Necunoscut",
"paved": "Asfaltat", "paved": "Asfaltat",
"unpaved": "Unpaved", "unpaved": "Unpaved",
"asphalt": "Asfalt", "asphalt": "Asphalt",
"concrete": "Concrete", "concrete": "Concrete",
"cobblestone": "Pavaj", "cobblestone": "Pavaj",
"paving_stones": "Pavaj din pietre", "paving_stones": "Pavaj din pietre",
@@ -140,11 +140,11 @@
"grass": "Iarbă", "grass": "Iarbă",
"grass_paver": "Pavaj cu iarbă", "grass_paver": "Pavaj cu iarbă",
"clay": "Clay", "clay": "Clay",
"stone": "Piatră" "stone": "Stone"
}, },
"highway": { "highway": {
"unknown": "Necunoscut", "unknown": "Unknown",
"motorway": "Autostradă", "motorway": "Highway",
"motorway_link": "Highway link", "motorway_link": "Highway link",
"trunk": "Primary road", "trunk": "Primary road",
"trunk_link": "Primary road link", "trunk_link": "Primary road link",
+1 -1
View File
@@ -235,7 +235,7 @@
}, },
"elevation": { "elevation": {
"button": "请求海拔数据", "button": "请求海拔数据",
"help": "请求成功后将移除原有的海拔数据,并使用 Mapterhorn 的海拔数据替换原有数据。", "help": "Requesting elevation data will erase the existing elevation data, if any, and replace it with data from Mapterhorn.",
"help_no_selection": "选择要请求海拔数据的文件。" "help_no_selection": "选择要请求海拔数据的文件。"
}, },
"waypoint": { "waypoint": {