Compare commits

...

577 commits

Author SHA1 Message Date
Yohan Boniface
a3a520dec4 3.0.5
Some checks failed
Release Charts / release (push) Has been cancelled
Test & Docs / tests (postgresql, 3.10) (push) Has been cancelled
Test & Docs / tests (postgresql, 3.12) (push) Has been cancelled
Test & Docs / lint (push) Has been cancelled
2025-04-25 17:45:37 +02:00
Yohan Boniface
4b4f9bbc5c i18n 2025-04-25 17:40:47 +02:00
Yohan Boniface
279717e630 chore: fix badge visibility in filter tab in browser panel
Co-authored-by: David Larlet <david@larlet.fr>
2025-04-25 17:29:18 +02:00
Yohan Boniface
39e4e2a33c
fix: make sure DataLayer rank is always set (#2682) 2025-04-25 17:20:10 +02:00
Yohan Boniface
e5dbca21b0 fix: make sure DataLayer rank is always set
Co-authored-by: David Larlet <david@larlet.fr>
2025-04-25 17:12:17 +02:00
Yohan Boniface
1ecddc1c02
chore: use details/summary for datalayers boxes in browser (#2680)
![image](https://github.com/user-attachments/assets/978e2f05-b7f3-4648-afec-92a24a88226a)
2025-04-25 16:29:06 +02:00
Yohan Boniface
8658e7eba7 chore: use details/summary for datalayers boxes in browser 2025-04-25 16:20:37 +02:00
Yohan Boniface
6ac3685172
fix: fix error when saving and deleting heatmap layer (#2681) 2025-04-25 15:57:17 +02:00
Yohan Boniface
1085861d42 chore: add --maxfail to py.test in make test command
Co-authored-by: David Larlet <david@larlet.fr>
2025-04-25 15:56:20 +02:00
Yohan Boniface
fab0c8f9ea fix: fix error when saving and deleting heatmap layer
Co-authored-by: David Larlet <david@larlet.fr>
2025-04-25 15:47:33 +02:00
Yohan Boniface
858768896e
fix: loading remote data should not make the map dirty (#2679)
See the second commit for the logic change.
2025-04-25 15:35:38 +02:00
Yohan Boniface
bffbeb5230
fix: allow to save/undo/sync drag'n'drop of datalayers (#2677)
This also:
- introduces a new DataLayerManager
- removes the _umap_options coming from the geojson form the server
- removes all backup related functions (now we have undo/redo)

fix #2674
2025-04-25 15:35:23 +02:00
Yohan Boniface
f01a74f19f i18n 2025-04-25 11:29:43 +02:00
Yohan Boniface
00228ccf92 fix: loading remote data should not make the map dirty 2025-04-25 11:25:54 +02:00
Yohan Boniface
6c8046456a chore: remove unused isDirty flags 2025-04-25 09:44:49 +02:00
Yohan Boniface
626b669d89 fixup: fix tests 2025-04-25 07:09:31 +02:00
Yohan Boniface
5af41b4528 fix: allow to save/undo/sync drag'n'drop of datalayers
This also:
- introduces a new DataLayerManager
- removes the _umap_options coming from the geojson form the server
- removes all backup related functions (now we have undo/redo)

Co-authored-by: David Larlet <david@larlet.fr>
2025-04-24 18:38:02 +02:00
Yohan Boniface
1a9c325f16
fix: setting center and zoom manually should set dirty status (#2676)
Some checks failed
Release Charts / release (push) Has been cancelled
Test & Docs / tests (postgresql, 3.10) (push) Has been cancelled
Test & Docs / tests (postgresql, 3.12) (push) Has been cancelled
Test & Docs / lint (push) Has been cancelled
2025-04-23 18:51:36 +02:00
Yohan Boniface
19d16ac01b fix: setting center and zoom manually should set dirty status
Co-authored-by: David Larlet <david@larlet.fr>
2025-04-23 18:00:48 +02:00
Yohan Boniface
efaa765b82
chore: cleaning core utils and removing DomUtil/DomEvent from modules (#2671) 2025-04-23 17:51:45 +02:00
Yohan Boniface
92ca581fb6
fix: allow to save a remote data with unloaded data (#2657)
When loading remote data fails, the layer is in state "unloaded", and
thus it was not possible to save it.
This "isLoaded" check is made for non remote layer so that we don't save
it by mistake with no data.

Also, let's allow to edit non loaded layers, this check was there when
settings was not on db, so not all loaded at map init, again not to
override with incomplete metadata.
2025-04-23 17:49:12 +02:00
Yohan Boniface
6687cd53ba
feat: add a back button in rules form (#2673)
To go back in rules list.

fix #2631


![image](https://github.com/user-attachments/assets/d0ad67fe-90c1-45c5-8bca-5ac30ef8366a)
2025-04-23 17:43:22 +02:00
Yohan Boniface
4997ee8860
feat: naive support for GeometryCollection as Feature geometry (#2658)
Currently, we just skip those, but sometimes togeojson produces this
output from a KML.
This will create one feature per geometry, while in an ideal world this
should be a multi, but we lack reliable geometry tools to merge the
geometries without risking to create mistakes.
So let's say it's a first improvement.
2025-04-23 17:43:05 +02:00
Yohan Boniface
a708316604
fix: make rules reordering syncable, savable and undoable (#2672) 2025-04-23 17:42:47 +02:00
Yohan Boniface
71d92aa610
fix: show an error message if saving layer failed (#2670)
This could occur when server is down or there is no network.
2025-04-23 17:40:19 +02:00
Yohan Boniface
41752bd0c6
fix: do not display "saved" message if some request failed (#2669) 2025-04-23 17:39:59 +02:00
Yohan Boniface
5b6138a210
chore: move pure Leaflet controls to modules (#2668)
pure == inheriting from Leaflet itself, not from some plugin (which
aren't ESM ready…)
2025-04-23 17:39:33 +02:00
Yohan Boniface
07363fa5fe chore: remove unused DomEvent.once 2025-04-23 16:52:55 +02:00
Yohan Boniface
7991d6cdbe chore: remove DomUtil.after/before 2025-04-23 16:50:13 +02:00
Yohan Boniface
60ac4b35f2 chore: remove most of DomUtil/DomEvent from browser.js 2025-04-23 16:24:15 +02:00
Yohan Boniface
bf2e9dc175 chore: remove call to DomUtil.createIcon in umap.js 2025-04-23 11:33:12 +02:00
Yohan Boniface
67ed6d5b44 feat: add a back button in rules form
To go back in rules list.

fix #2631
2025-04-23 10:55:39 +02:00
Yohan Boniface
fad182c5f3 fix: make rules reordering syncable, savable and undoable 2025-04-23 10:19:19 +02:00
Yohan Boniface
3f5d282477 chore: remove DomUtil and DomEvent dependency from rules.js 2025-04-23 10:14:22 +02:00
Yohan Boniface
49496348d2 chore: remove unused L.DomUtil.createLink method 2025-04-23 09:21:35 +02:00
Yohan Boniface
f8b13639aa fix: show an error message if saving layer failed
This could occur when server is down or there is no network.
2025-04-23 09:02:25 +02:00
Yohan Boniface
4c71710641 fix: do not display "saved" message if some request failed 2025-04-23 08:58:17 +02:00
Yohan Boniface
92d5c47844 chore: move pure Leaflet controls to modules
pure == inheriting from Leaflet itself, not from some plugin
(which aren't ESM ready…)
2025-04-22 20:14:06 +02:00
Yohan Boniface
05493d8a48
chore: bump uvicorn from 0.34.1 to 0.34.2 (#2664)
Some checks failed
Release Charts / release (push) Has been cancelled
Test & Docs / tests (postgresql, 3.10) (push) Has been cancelled
Test & Docs / tests (postgresql, 3.12) (push) Has been cancelled
Test & Docs / lint (push) Has been cancelled
2025-04-22 15:06:34 +02:00
Yohan Boniface
fd8f403a69
chore: bump mkdocs-material from 9.6.11 to 9.6.12 (#2665) 2025-04-22 15:06:19 +02:00
Yohan Boniface
a6412c9539
chore: bump ruff from 0.11.4 to 0.11.6 (#2666) 2025-04-22 15:06:01 +02:00
Yohan Boniface
fe65a5351b
chore: bump moto[s3] from 5.1.3 to 5.1.4 (#2667) 2025-04-22 15:05:44 +02:00
dependabot[bot]
2ede25f541
chore: bump moto[s3] from 5.1.3 to 5.1.4
Bumps [moto[s3]](https://github.com/getmoto/moto) from 5.1.3 to 5.1.4.
- [Release notes](https://github.com/getmoto/moto/releases)
- [Changelog](https://github.com/getmoto/moto/blob/master/CHANGELOG.md)
- [Commits](https://github.com/getmoto/moto/compare/5.1.3...5.1.4)

---
updated-dependencies:
- dependency-name: moto[s3]
  dependency-version: 5.1.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-21 17:46:08 +00:00
dependabot[bot]
b7acdcfd93
chore: bump ruff from 0.11.4 to 0.11.6
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.11.4 to 0.11.6.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.11.4...0.11.6)

---
updated-dependencies:
- dependency-name: ruff
  dependency-version: 0.11.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-21 17:39:19 +00:00
dependabot[bot]
a3d2330661
chore: bump mkdocs-material from 9.6.11 to 9.6.12
Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.6.11 to 9.6.12.
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.6.11...9.6.12)

---
updated-dependencies:
- dependency-name: mkdocs-material
  dependency-version: 9.6.12
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-21 17:33:21 +00:00
dependabot[bot]
20ae374173
chore: bump uvicorn from 0.34.1 to 0.34.2
Bumps [uvicorn](https://github.com/encode/uvicorn) from 0.34.1 to 0.34.2.
- [Release notes](https://github.com/encode/uvicorn/releases)
- [Changelog](https://github.com/encode/uvicorn/blob/master/docs/release-notes.md)
- [Commits](https://github.com/encode/uvicorn/compare/0.34.1...0.34.2)

---
updated-dependencies:
- dependency-name: uvicorn
  dependency-version: 0.34.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-21 17:29:12 +00:00
David Larlet
162473da9d
chore: more design system elements (#2661)
Some checks failed
Release Charts / release (push) Has been cancelled
Test & Docs / tests (postgresql, 3.10) (push) Has been cancelled
Test & Docs / tests (postgresql, 3.12) (push) Has been cancelled
Test & Docs / lint (push) Has been cancelled
2025-04-18 10:03:12 -04:00
David Larlet
78d333c217
chore: more design system elements 2025-04-17 17:29:43 -04:00
Yohan Boniface
b0fe95dbd9 feat: naive support for GeometryCollection as Feature geometry
Currently, we just skip those, but sometimes togeojson produces this
output from a KML.
This will create one feature per geometry, while in an ideal world this
should be a multi, but we lack reliable geometry tools to merge the
geometries without risking to create mistakes.
So let's say it's a first improvement.
2025-04-16 18:28:23 +02:00
Yohan Boniface
23b82975f5 chore: bump togeojson
Some checks failed
Release Charts / release (push) Has been cancelled
Test & Docs / tests (postgresql, 3.10) (push) Has been cancelled
Test & Docs / tests (postgresql, 3.12) (push) Has been cancelled
Test & Docs / lint (push) Has been cancelled
2025-04-16 17:30:17 +02:00
Yohan Boniface
169be73488 fix: allow to save a remote data with unloaded data
When loading remote data fails, the layer is in state "unloaded",
and thus it was not possible to save it.
This "isLoaded" check is made for non remote layer so that we don't
save it by mistake with no data.

Also, let's allow to edit non loaded layers, this check was there
when settings was not on db, so not all loaded at map init, again
not to override with incomplete metadata.
2025-04-16 16:00:26 +02:00
Yohan Boniface
6945a5e867
feat: pass CSRF_TRUSTED_ORIGINS env to settings (#2656)
Some checks are pending
Release Charts / release (push) Waiting to run
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
Allow to manage djangos CSRF_TRUSTED_ORIGINS by environment variables.

Closes #2655
2025-04-16 12:34:49 +02:00
Oliver Lippert
2ed890202e
code formatting 2025-04-16 12:25:17 +02:00
Oliver Lippert
cc7685ca3f
pass CSRF_TRUSTED_ORIGINS env to settings
fixes https://github.com/umap-project/umap/issues/2655
2025-04-16 12:23:09 +02:00
David Larlet
23688b6444
feat: implement a design system for UI consistency (#2654)
Some checks are pending
Release Charts / release (push) Waiting to run
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
2025-04-15 08:19:31 -04:00
David Larlet
d3c0947fa5
feat: implement a design system for UI consistency 2025-04-14 23:20:55 -04:00
Yohan Boniface
a135e5c3e1
chore: bump pytest-django from 4.10.0 to 4.11.1 (#2653)
Some checks are pending
Release Charts / release (push) Waiting to run
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
2025-04-14 19:50:30 +02:00
Yohan Boniface
2ad46046f8
chore: bump uvicorn from 0.34.0 to 0.34.1 (#2651) 2025-04-14 19:50:14 +02:00
Yohan Boniface
5271d7c19d
chore: bump pydantic from 2.11.2 to 2.11.3 (#2652) 2025-04-14 19:36:42 +02:00
Yohan Boniface
a535c86f6b
chore: bump mkdocs-material from 9.6.10 to 9.6.11 (#2649) 2025-04-14 19:36:16 +02:00
Yohan Boniface
9aa1f58dc8
chore: bump pillow from 11.1.0 to 11.2.1 (#2650)
Bumps [pillow](https://github.com/python-pillow/Pillow) from 11.1.0 to
11.2.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/python-pillow/Pillow/releases">pillow's
releases</a>.</em></p>
<blockquote>
<h2>11.2.1</h2>
<p><a
href="https://pillow.readthedocs.io/en/stable/releasenotes/11.2.1.html">https://pillow.readthedocs.io/en/stable/releasenotes/11.2.1.html</a></p>
<h2>Deprecations</h2>
<ul>
<li>Moved get_child_images() to ImageFile <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8689">#8689</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
</ul>
<h2>Documentation</h2>
<ul>
<li>Add 11.2.1 release notes <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8885">#8885</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Added avif to config settings <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8875">#8875</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Added release notes for <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8330">#8330</a>
<a
href="https://redirect.github.com/python-pillow/Pillow/issues/8853">#8853</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Added release notes for <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8781">#8781</a>
and <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8837">#8837</a>
<a
href="https://redirect.github.com/python-pillow/Pillow/issues/8843">#8843</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Added media_white_point to ImageCms documentation <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8829">#8829</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Removed FIXME <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8825">#8825</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Updated comment <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8822">#8822</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Added release notes for <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8807">#8807</a>
<a
href="https://redirect.github.com/python-pillow/Pillow/issues/8824">#8824</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>DXT3 images are read in RGBA mode <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8817">#8817</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>JPEG comments are from the COM marker <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8788">#8788</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Update Sphinx to 8.2 to remove nitpick ignore <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8763">#8763</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Updated AffineTransform docstring to mention it uses the inverse
matrix <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8735">#8735</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Added MozJPEG documentation <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8699">#8699</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Added Sphinx configuration key <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8691">#8691</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Updated macOS tested Pillow versions <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8654">#8654</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
</ul>
<h2>Dependencies</h2>
<ul>
<li>Updated xz to 5.8.1 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8868">#8868</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Updated harfbuzz to 11.0.1 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8870">#8870</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Update scientific-python/upload-nightly-action action to v0.6.2 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8865">#8865</a>
[@<a href="https://github.com/apps/renovate">renovate[bot]</a>]</li>
<li>Updated xz to 5.8.0 in macOS and Linux wheels, but not on
manylinux2014 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8836">#8836</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Update dependency cibuildwheel to v2.23.2 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8832">#8832</a>
[@<a href="https://github.com/apps/renovate">renovate[bot]</a>]</li>
<li>Updated harfbuzz to 11.0.0 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8830">#8830</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Update dependency cibuildwheel to v2.23.1 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8818">#8818</a>
[@<a href="https://github.com/apps/renovate">renovate[bot]</a>]</li>
<li>Updated Ghostscript to 10.5.0 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8814">#8814</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Updated libtiff to 4.7.0 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8812">#8812</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>[pre-commit.ci] pre-commit autoupdate <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8795">#8795</a>
[@<a
href="https://github.com/apps/pre-commit-ci">pre-commit-ci[bot]</a>]</li>
<li>Updated harfbuzz to 10.4.0 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8770">#8770</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Update dependency mypy to v1.15.0 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8791">#8791</a>
[@<a href="https://github.com/apps/renovate">renovate[bot]</a>]</li>
<li>Updated libpng to 1.6.47 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8764">#8764</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Updated lcms2 to 2.17 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8742">#8742</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Update dependency cibuildwheel to v2.23.0 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8785">#8785</a>
[@<a href="https://github.com/apps/renovate">renovate[bot]</a>]</li>
<li>Updated zlib-ng to 2.2.4 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8745">#8745</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Updated libimagequant to 4.3.4 on Windows <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8744">#8744</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>[pre-commit.ci] pre-commit autoupdate <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8729">#8729</a>
[@<a
href="https://github.com/apps/pre-commit-ci">pre-commit-ci[bot]</a>]</li>
<li>Updated harfbuzz to 10.2.0 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8688">#8688</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Updated xz to 5.6.4 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8711">#8711</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Updated libpng to 1.6.46 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8712">#8712</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Updated libimagequant to 4.3.4 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8710">#8710</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Updated libpng to 1.6.45 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8670">#8670</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst">pillow's
changelog</a>.</em></p>
<blockquote>
<h1>Changelog (Pillow)</h1>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="339bc5db93"><code>339bc5d</code></a>
11.2.1 version bump</li>
<li><a
href="857b8846ea"><code>857b884</code></a>
Merge pull request <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8885">#8885</a>
from radarhere/releasenotes</li>
<li><a
href="7a0092f207"><code>7a0092f</code></a>
Remove incomplete 11.2.0 release, bill as 11.2.1 instead</li>
<li><a
href="d52c2db317"><code>d52c2db</code></a>
Do not include libavif in wheels</li>
<li><a
href="8dafc38371"><code>8dafc38</code></a>
Added 11.2.1 release notes</li>
<li><a
href="07d7800248"><code>07d7800</code></a>
Removed release notes update</li>
<li><a
href="04909483a7"><code>0490948</code></a>
Remove GPL v2 license (<a
href="https://redirect.github.com/python-pillow/Pillow/issues/8884">#8884</a>)</li>
<li><a
href="774d0aedce"><code>774d0ae</code></a>
Merge pull request <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8868">#8868</a>
from radarhere/xz_upgrade</li>
<li><a
href="d1e27fc86c"><code>d1e27fc</code></a>
Merge pull request <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8870">#8870</a>
from radarhere/harfbuzz_upgrade</li>
<li><a
href="c8d98d56a0"><code>c8d98d5</code></a>
Added avif to config settings (<a
href="https://redirect.github.com/python-pillow/Pillow/issues/8875">#8875</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/python-pillow/Pillow/compare/11.1.0...11.2.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=pillow&package-manager=pip&previous-version=11.1.0&new-version=11.2.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>
2025-04-14 19:36:00 +02:00
dependabot[bot]
102104f818
chore: bump pytest-django from 4.10.0 to 4.11.1
Bumps [pytest-django](https://github.com/pytest-dev/pytest-django) from 4.10.0 to 4.11.1.
- [Release notes](https://github.com/pytest-dev/pytest-django/releases)
- [Changelog](https://github.com/pytest-dev/pytest-django/blob/main/docs/changelog.rst)
- [Commits](https://github.com/pytest-dev/pytest-django/compare/v4.10.0...v4.11.1)

---
updated-dependencies:
- dependency-name: pytest-django
  dependency-version: 4.11.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-14 17:30:01 +00:00
dependabot[bot]
35e5a4bda6
chore: bump pydantic from 2.11.2 to 2.11.3
Bumps [pydantic](https://github.com/pydantic/pydantic) from 2.11.2 to 2.11.3.
- [Release notes](https://github.com/pydantic/pydantic/releases)
- [Changelog](https://github.com/pydantic/pydantic/blob/main/HISTORY.md)
- [Commits](https://github.com/pydantic/pydantic/compare/v2.11.2...v2.11.3)

---
updated-dependencies:
- dependency-name: pydantic
  dependency-version: 2.11.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-14 17:29:38 +00:00
dependabot[bot]
6bae315efe
chore: bump uvicorn from 0.34.0 to 0.34.1
Bumps [uvicorn](https://github.com/encode/uvicorn) from 0.34.0 to 0.34.1.
- [Release notes](https://github.com/encode/uvicorn/releases)
- [Changelog](https://github.com/encode/uvicorn/blob/master/docs/release-notes.md)
- [Commits](https://github.com/encode/uvicorn/compare/0.34.0...0.34.1)

---
updated-dependencies:
- dependency-name: uvicorn
  dependency-version: 0.34.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-14 17:29:19 +00:00
dependabot[bot]
93120d91d6
chore: bump pillow from 11.1.0 to 11.2.1
Bumps [pillow](https://github.com/python-pillow/Pillow) from 11.1.0 to 11.2.1.
- [Release notes](https://github.com/python-pillow/Pillow/releases)
- [Changelog](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst)
- [Commits](https://github.com/python-pillow/Pillow/compare/11.1.0...11.2.1)

---
updated-dependencies:
- dependency-name: pillow
  dependency-version: 11.2.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-14 17:29:05 +00:00
dependabot[bot]
f037973a03
chore: bump mkdocs-material from 9.6.10 to 9.6.11
Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.6.10 to 9.6.11.
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.6.10...9.6.11)

---
updated-dependencies:
- dependency-name: mkdocs-material
  dependency-version: 9.6.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-14 17:28:43 +00:00
Yohan Boniface
c4614354ae 3.0.4 2025-04-14 17:57:12 +02:00
Yohan Boniface
9ed466ea9b
chore: update colors (#2647) 2025-04-14 17:55:19 +02:00
Yohan Boniface
168cc0c996 i18n 2025-04-14 17:49:09 +02:00
Yohan Boniface
ae4e7eb3e2 chore: update colors
Co-authored-by: David Larlet <david@larlet.fr>
2025-04-14 17:45:11 +02:00
Yohan Boniface
3670b7dca6
Adapt chart to match La Suite's expectations (#2646)
- env vars and config files can be loaded from existing secrets
- chart is deployed on a helm repository

to make the helm repository work with github pages, create an empty
orphaned branch called gh-pages, and under settings>pages>source select
deploy from branch and use gh-pages
2025-04-14 17:36:31 +02:00
David Larlet
1c3cf9a7c5
chore: switch helm chart job to master branch 2025-04-14 11:31:06 -04:00
Yohan Boniface
ada44fc0fc
fix: remove "hide home button" shown twice in map settings (#2645) 2025-04-14 17:30:52 +02:00
Yohan Boniface
ac6964c9f4 fix: remove "hide home button" shown twice in map settings
Co-authored-by: David Larlet <david@larlet.fr>
2025-04-14 16:30:38 +02:00
David Larlet
82dcd90405
fix: do not show "back to home" button in iframes (#2644) 2025-04-14 10:21:21 -04:00
Yohan Boniface
d9e983aed4 fix: do not show "back to home" button in iframes
Co-authored-by: David Larlet <david@larlet.fr>
2025-04-14 16:12:35 +02:00
Yohan Boniface
071a8c539d 3.0.3
Some checks failed
Test & Docs / tests (postgresql, 3.10) (push) Has been cancelled
Test & Docs / tests (postgresql, 3.12) (push) Has been cancelled
Test & Docs / lint (push) Has been cancelled
2025-04-11 18:09:14 +02:00
Yohan Boniface
ec8fa87b41 i18n 2025-04-11 17:33:22 +02:00
Yohan Boniface
ef072f0a8e
feat: allow to hide the back to home button (#2638) 2025-04-11 17:30:15 +02:00
Yohan Boniface
33f407fd60
feat: hidden download button in browser when embedControl=false (#2640)
cf #2629
2025-04-11 17:27:02 +02:00
David Larlet
324c5cf6bf feat: allow to hide the back to home button
Co-authored-by: Yohan Boniface <yohanboniface@free.fr>
2025-04-11 17:22:09 +02:00
Yohan Boniface
e53cdcb04e feat: hidden download button in browser when embedControl=false
cf #2629

Co-authored-by: David Larlet <david@larlet.fr>
2025-04-11 17:15:39 +02:00
David Larlet
5e3170891a
feat: allow to hide the layer switcher from bottom bar (#2639) 2025-04-11 10:58:54 -04:00
David Larlet
495286c261
feat: allow to hide the layer switcher from bottom bar 2025-04-11 10:44:01 -04:00
Yohan Boniface
15972bab3d
document that nginx needs to be added in Docker stack to serve statics (#2636) 2025-04-11 16:19:47 +02:00
Yohan Boniface
bd91934544
fix: do not try to remove a feature not yet added (#2637)
cf #2625

This happens while drawing a line or polygon and then hitting escape
while the path is not yet valid.
2025-04-11 16:19:29 +02:00
Yohan Boniface
581140e08a
fix: do not try to remove a feature not yet added
cf #2625

This happens while drawing a line or polygon and then hitting escape
while the path is not yet valid.
2025-04-11 10:02:31 -04:00
David Larlet
10f87c0b6e
fix: display search category on list page (#2635) 2025-04-11 08:24:07 -04:00
Yohan Boniface
0ec4e74f8f wip: add nginx in docker-compose.yml 2025-04-11 11:31:54 +02:00
Yohan Boniface
89033e04a2 chore: add a deploy overview doc page 2025-04-11 10:09:24 +02:00
David Larlet
38f4fd5bb3
fix: display search category on list page 2025-04-10 17:13:33 -04:00
Yohan Boniface
985d91a9c7
fix: display back help button in switch fields (#2634)
Some checks are pending
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
cf #2615

Before:

![image](https://github.com/user-attachments/assets/bac68a6b-6c74-4f10-8d3c-26536dc1ecad)

After:

![image](https://github.com/user-attachments/assets/43c4a0b3-a892-423a-8c20-b7c6304f3182)
2025-04-10 21:46:27 +02:00
Yohan Boniface
7348f0bf4f fix: display back help button in switch fields
cf #2615
2025-04-10 20:24:35 +02:00
Yohan Boniface
dc35e7df6d
fix: fix pictogram categories always hidden (#2630)
Some checks failed
Test & Docs / tests (postgresql, 3.10) (push) Has been cancelled
Test & Docs / tests (postgresql, 3.12) (push) Has been cancelled
Test & Docs / lint (push) Has been cancelled
2025-04-09 17:17:29 +02:00
Yohan Boniface
d9378a484d fix: fix pictogram categories always hidden 2025-04-09 16:06:20 +02:00
Yohan Boniface
cfcdfb9ed8
chore: add missing margin-bottom in importers (#2627) 2025-04-09 15:59:00 +02:00
Yohan Boniface
0b8c7ee381
chore: redirect to user dashboard after map delete (#2626)
If user is authenticated.

We do not display alert messages on the home page.
2025-04-09 15:45:11 +02:00
Yohan Boniface
36e9433cf9
Apply suggestions from code review
Co-authored-by: David Larlet <3556+davidbgk@users.noreply.github.com>
2025-04-09 15:44:36 +02:00
Yohan Boniface
425f66b181
fix: fix text overflow on search results (#2628)
Before:
![Screenshot From 2025-04-09
09-41-21](https://github.com/user-attachments/assets/727ead82-7bb7-4cdb-b676-994f84ed8eaf)

After:
![Screenshot From 2025-04-09
09-40-58](https://github.com/user-attachments/assets/e778ba59-a255-4230-9531-cdba67c444cc)

(Please don't ask :p )
2025-04-09 15:42:57 +02:00
Yohan Boniface
18f0b6e2a7 chore: rename variable to make it more explicit 2025-04-09 11:27:29 +02:00
Yohan Boniface
50f23b4e02 fix: fix text overflow on search results 2025-04-09 09:41:37 +02:00
Yohan Boniface
36d58993a0 chore: add missing margin-bottom in importers 2025-04-09 09:32:54 +02:00
Yohan Boniface
5f2e104eec
feat: use Last-Modified header from remote data when available (#2624)
Some checks are pending
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
fix #2589
2025-04-09 09:09:40 +02:00
Yohan Boniface
5c38bc7970 chore: redirect to user dashboard after map delete
If user is authenticated.

We do not display alert messages on the home page.
2025-04-09 08:54:44 +02:00
Yohan Boniface
dcce3ad054
Update umap/static/umap/js/modules/umap.js
Co-authored-by: David Larlet <3556+davidbgk@users.noreply.github.com>
2025-04-08 18:13:05 +02:00
Yohan Boniface
88ddb1cab3 3.0.2
Some checks are pending
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
2025-04-08 17:23:15 +02:00
Yohan Boniface
dd7540596c
fix: give priority to small usernames on autocomplete (#2604)
Basically, when the search is "joe" we first try to search for an exact
account named "joe", and fallback to normal flow when nothing matches.

fix #2591
2025-04-08 17:21:14 +02:00
Yohan Boniface
2baeaace24 feat: use Last-Modified header from remote data when available
fix #2589
2025-04-08 17:03:06 +02:00
Yohan Boniface
14663bc56e fixup: order users autocomplete by username length
cf #2591
2025-04-08 15:47:06 +02:00
Yohan Boniface
fea0f02b80
fix: fix min-height of select in caption bar (#2622)
Before:
![Screenshot From 2025-04-08
15-26-28](https://github.com/user-attachments/assets/372d3410-a360-4ff3-a6f2-d7c18a3f26e3)

After:
![Screenshot From 2025-04-08
15-27-44](https://github.com/user-attachments/assets/defb737e-aed3-40b0-91b6-5b8c38675e55)
2025-04-08 15:37:56 +02:00
Yohan Boniface
85ba05f4b7
fix: fix result tools buttons background color (#2620) 2025-04-08 15:32:58 +02:00
Yohan Boniface
7b582a8ec1
fix: properly call endEdit for markers (#2617)
fix #2607
2025-04-08 15:32:09 +02:00
Yohan Boniface
3c70fc4267
fix: fix categorized layer crashing with null value (#2621)
Do not call toString on a null value
2025-04-08 15:31:51 +02:00
Yohan Boniface
b5d12282e0
fix: fix copiable input CSS (#2616)
Before:
![Screenshot From 2025-04-08
10-02-15](https://github.com/user-attachments/assets/49fd5f63-ac98-40bd-a7bc-befd24920f07)

After:
![Screenshot From 2025-04-08
10-21-33](https://github.com/user-attachments/assets/ce62ef66-6ad7-45dd-a37c-c0fb20d71e13)
2025-04-08 15:30:20 +02:00
Yohan Boniface
672d92152e fix: fix min-height of select in caption bar 2025-04-08 15:27:10 +02:00
Yohan Boniface
5b5102f909 fix: fix categorized layer crashing with null value
Do not call toString on a null value
2025-04-08 15:21:27 +02:00
Yohan Boniface
0a154daa6f fix: fix result tools buttons background color 2025-04-08 12:14:22 +02:00
Yohan Boniface
c38ec2c18d fix: fix copiable input CSS 2025-04-08 11:46:31 +02:00
Yohan Boniface
1e204ac16c fix: properly call endEdit for markers
fix #2607
2025-04-08 11:05:54 +02:00
Yohan Boniface
e2fed5a19d
chore: bump hatch from 1.14.0 to 1.14.1 (#2614) 2025-04-08 10:43:37 +02:00
Yohan Boniface
061b5fc60e
chore: bump pydantic from 2.11.1 to 2.11.2 (#2612) 2025-04-08 10:23:13 +02:00
dependabot[bot]
8c9d4e5777
chore: bump pydantic from 2.11.1 to 2.11.2
Bumps [pydantic](https://github.com/pydantic/pydantic) from 2.11.1 to 2.11.2.
- [Release notes](https://github.com/pydantic/pydantic/releases)
- [Changelog](https://github.com/pydantic/pydantic/blob/main/HISTORY.md)
- [Commits](https://github.com/pydantic/pydantic/compare/v2.11.1...v2.11.2)

---
updated-dependencies:
- dependency-name: pydantic
  dependency-version: 2.11.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-08 07:43:11 +00:00
dependabot[bot]
efde6899bd
chore: bump hatch from 1.14.0 to 1.14.1
Bumps [hatch](https://github.com/pypa/hatch) from 1.14.0 to 1.14.1.
- [Release notes](https://github.com/pypa/hatch/releases)
- [Commits](https://github.com/pypa/hatch/compare/hatch-v1.14.0...hatch-v1.14.1)

---
updated-dependencies:
- dependency-name: hatch
  dependency-version: 1.14.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-08 07:42:51 +00:00
Yohan Boniface
38e862c04a
chore: bump moto[s3] from 5.1.1 to 5.1.3 (#2610)
Some checks are pending
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
2025-04-08 09:42:12 +02:00
Yohan Boniface
2d0325f1fb
chore: bump ruff from 0.11.2 to 0.11.4 (#2611) 2025-04-08 09:41:39 +02:00
Yohan Boniface
b8ab86b075
chore: bump django-storages[s3] from 1.14.5 to 1.14.6 (#2613) 2025-04-08 09:41:11 +02:00
dependabot[bot]
7e774bc3aa
chore: bump django-storages[s3] from 1.14.5 to 1.14.6
Bumps [django-storages[s3]](https://github.com/jschneier/django-storages) from 1.14.5 to 1.14.6.
- [Changelog](https://github.com/jschneier/django-storages/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/jschneier/django-storages/compare/1.14.5...1.14.6)

---
updated-dependencies:
- dependency-name: django-storages[s3]
  dependency-version: 1.14.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-07 18:35:07 +00:00
dependabot[bot]
f4e3e679a9
chore: bump ruff from 0.11.2 to 0.11.4
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.11.2 to 0.11.4.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.11.2...0.11.4)

---
updated-dependencies:
- dependency-name: ruff
  dependency-version: 0.11.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-07 18:30:12 +00:00
dependabot[bot]
6d391a51be
chore: bump moto[s3] from 5.1.1 to 5.1.3
Bumps [moto[s3]](https://github.com/getmoto/moto) from 5.1.1 to 5.1.3.
- [Release notes](https://github.com/getmoto/moto/releases)
- [Changelog](https://github.com/getmoto/moto/blob/master/CHANGELOG.md)
- [Commits](https://github.com/getmoto/moto/compare/5.1.1...5.1.3)

---
updated-dependencies:
- dependency-name: moto[s3]
  dependency-version: 5.1.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-07 18:28:07 +00:00
Yohan Boniface
aa43d4efa8 3.0.1
Some checks are pending
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
2025-04-07 20:01:53 +02:00
Yohan Boniface
4679742b96
fix: fix showLabel wrongly using MultiChoices (#2609) 2025-04-07 20:01:05 +02:00
Yohan Boniface
53329d19fd fix: fix showLabel wrongly using MultiChoices
Co-authored-by: David Larlet <david@larlet.fr>
2025-04-07 19:53:20 +02:00
Yohan Boniface
c09c2c20ee 3.0.0 2025-04-07 18:55:50 +02:00
Yohan Boniface
c0c55075b7 chore: rename WEBSOCKET_ENABLED in REALTIME_ENABLED
Co-authored-by: David Larlet <david@larlet.fr>
2025-04-07 18:55:18 +02:00
Yohan Boniface
3670c47af9 i18n 2025-04-07 18:32:05 +02:00
Yohan Boniface
f1f18ed518
Remove confirm delete for features and datalayers (#2603)
Now that we have granular undo, I'd say we can simplify the delete
process.
2025-04-07 18:24:25 +02:00
Yohan Boniface
5e47a59d07
chore: refine main search form (#2608)
![image](https://github.com/user-attachments/assets/dd73a323-6f80-4b5b-8691-79a3f92f3723)
2025-04-07 18:23:52 +02:00
Yohan Boniface
a59b0110fc
chore: refine undo/redo buttons (#2605)
![image](https://github.com/user-attachments/assets/884b3a8c-ff4e-48e2-9bdf-16d31fb7512a)
2025-04-07 18:23:37 +02:00
Yohan Boniface
e1272ec6cd fix: do not cut kbd in tooltip
Co-authored-by: David Larlet <david@larlet.fr>
2025-04-07 18:23:08 +02:00
Yohan Boniface
55babfde34
chore: refine map list card CSS (#2606) 2025-04-07 18:17:26 +02:00
Yohan Boniface
82b8564520 chore: refine undo/redo buttons
Co-authored-by: David Larlet <david@larlet.fr>
Co-authored-by: Aurélie Jallut <aurelie.jallut@beta.gouv.fr>
2025-04-07 18:16:37 +02:00
Yohan Boniface
5070a5e5b4 chore: refine main search form
Co-authored-by: David Larlet <david@larlet.fr>
2025-04-07 18:11:49 +02:00
Yohan Boniface
06baeb718e fix: fix Textarea trying to clear this.input
Co-authored-by: David Larlet <david@larlet.fr>
2025-04-07 18:09:35 +02:00
Yohan Boniface
f186d3266c chore: refine map list card CSS
Co-authored-by: David Larlet <david@larlet.fr>
Co-authored-by: Aurélie Jallut <aurelie.jallut@beta.gouv.fr>
2025-04-07 16:34:09 +02:00
Yohan Boniface
f4ae51ae7e fix: give priority to small usernames when query is small
Basically, when the search is "joe" we first try to search for
an exact account named "joe", and fallback to normal flow when
nothing matches.

fix #2591
2025-04-07 15:24:44 +02:00
Yohan Boniface
49bba24b90 feat: remove confirm for feature delete 2025-04-07 10:48:34 +02:00
Yohan Boniface
a2749ce805 feat: remove confirm for datalayer delete
Now that we have granular undo, no needs for this I'd say.
2025-04-07 10:35:39 +02:00
Yohan Boniface
190cac3105 i18n
Some checks failed
Test & Docs / tests (postgresql, 3.10) (push) Has been cancelled
Test & Docs / tests (postgresql, 3.12) (push) Has been cancelled
Test & Docs / lint (push) Has been cancelled
2025-04-04 18:54:51 +02:00
Yohan Boniface
50e354cb18
fix: explicit batch instead of blindly on add data (#2601) 2025-04-04 18:54:31 +02:00
Yohan Boniface
34e4955891
fix: use the multichoices for ttl in remote data form (#2599) 2025-04-04 18:49:23 +02:00
Yohan Boniface
91c3b098df wip: return data in DataLayer.importRaw 2025-04-04 18:45:31 +02:00
Yohan Boniface
2967c023f3
fix: do not add auto zoom and center in undo stack (#2602) 2025-04-04 18:23:31 +02:00
David Larlet
862f19ee43 fix: use the multichoices for ttl in remote data form 2025-04-04 18:22:51 +02:00
David Larlet
fd8915355e
fix: do not export layer ids in umap backup (#2600) 2025-04-04 11:54:30 -04:00
David Larlet
02d3e19450
fix: do not add auto zoom and center in undo stack
Co-authored-by: Yohan Boniface <yohanboniface@free.fr>
2025-04-04 11:54:00 -04:00
David Larlet
b342480f3b
fix: explicit batch instead of blindly on add data
Co-authored-by: Yohan Boniface <yohanboniface@free.fr>
2025-04-04 11:45:26 -04:00
David Larlet
c5c352cfac
fix: do not export layer ids in umap backup 2025-04-04 11:26:10 -04:00
David Larlet
d6f591b365
fix: remote data loading on import from umap backup (#2598) 2025-04-04 11:15:23 -04:00
David Larlet
90bbc72320
fix: restore width and height for default marker icon
Co-authored-by: Yohan Boniface <yohanboniface@free.fr>
2025-04-04 11:15:03 -04:00
David Larlet
b05e6ec28c
fix: remote data loading on import from umap backup 2025-04-04 11:05:33 -04:00
David Larlet
0e56e71e87
fix: Minimize the default svg icon for marker
Co-authored-by: Yohan Boniface <yohanboniface@free.fr>
2025-04-04 10:28:43 -04:00
Yohan Boniface
5c51a7a735
feat: add keyboard shortcut for redo (ctrl+shift+z) (#2596)
I've reworked a bit the shortcut handling, as it was only dealing with
ctrl/meta only ones (no shift).
2025-04-04 16:25:04 +02:00
Yohan Boniface
563aee81e1 feat: add keyboard shortcut for redo (ctrl+shift+z) 2025-04-04 16:14:04 +02:00
Yohan Boniface
3720ccff01
feat: add minimal "raw" icon shape (#2597)
Some checks are pending
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
Basically, it means "no shape".


![image](https://github.com/user-attachments/assets/7ddaf76a-2128-49fc-8664-754b09d2b9ef)

It's a 48x48 max square (but if image is smaller it will stay smaller),
popup and tooltip always centered.

Let's see how this will be used and add more controls if needed later
(like size, center position…).

Also I've added a small border to the default white round icon, so it's
visible even on a white background.

(Not sure why the flower size is 47.8 instead of 48, cf screenshot,
sounds like a Leaflet rounding issue…)

cf #125
2025-04-04 16:08:04 +02:00
Yohan Boniface
9e5c985d6c feat: add minimal "raw" icon shape 2025-04-04 12:02:46 +02:00
Yohan Boniface
32b9217bd2
feat: add Map.tags and allow to edit from client (#2530)
Some checks are pending
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
cf #2283

Note: this PR uses ArrayField, which is Postgres only, so this would
officially remove the support of spatialite as it is. I'm not sure at
all uMap still works with spatialite, so maybe that the opportunity to
either add spatialite in the CI and make sure we support it, or remove
it and only target Postgres/PostGIS.
2025-04-03 18:52:17 +02:00
Yohan Boniface
4fd57e0c11 chore: remove tag icons for now
Co-authored-by: David Larlet <david@larlet.fr>
2025-04-03 18:29:39 +02:00
Yohan Boniface
54420568af chore: refine map fragment card CSS
Co-authored-by: David Larlet <david@larlet.fr>
2025-04-03 18:20:50 +02:00
Yohan Boniface
8c90535105 chore: better CSS for tags in maps list
Co-authored-by: David Larlet <david@larlet.fr>
2025-04-03 17:51:37 +02:00
Yohan Boniface
80a969917a chore: simplify search form CSS and HTML
Co-authored-by: David Larlet <david@larlet.fr>
2025-04-03 17:51:20 +02:00
Yohan Boniface
6582e85f18
Update the Dockerfile to expose websockets (#2576)
The Dockerfile now uses ASGI by default (via uvicorn).
2025-04-03 17:16:56 +02:00
Yohan Boniface
023645a160 wip: make Redis service optional in Docker image
Co-authored-by: David Larlet <david@larlet.fr>
2025-04-03 17:12:12 +02:00
Yohan Boniface
e24695b68c wip: display tags in maps list 2025-04-03 14:51:04 +02:00
Yohan Boniface
db72bfad8d wip: sort tags by label, not by value 2025-04-03 11:10:36 +02:00
Yohan Boniface
738af24dfc chore: fix tags related test 2025-04-03 11:10:36 +02:00
Yohan Boniface
06f963c07f chore: align search form elements
Co-authored-by: David Larlet <david@larlet.fr>
2025-04-03 11:10:36 +02:00
Yohan Boniface
c6ed896a6d feat: associate icons to tags
Co-authored-by: David Larlet <david@larlet.fr>
2025-04-03 11:10:36 +02:00
Yohan Boniface
1344fe6b46 feat: basic filtering by tags 2025-04-03 11:10:36 +02:00
Yohan Boniface
39f38a9cdf feat: add Map.tags and allow to edit from client
cf #2283
2025-04-03 11:10:33 +02:00
Yohan Boniface
e2f154f62e
feat: add atomic undo redo (#2570)
Some checks are pending
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
Todo:

- [ ] undo/sync a version restore
- [x] add test for scenario where two peers create a layer and one click
on save (both should be saved)
- [x] undo/sync of conditional rules
- [x] undo/sync of filter management from table editor
2025-04-03 10:32:47 +02:00
Yohan Boniface
7196ffe101
chore: bump mkdocs-material from 9.6.9 to 9.6.10 (#2593) 2025-04-03 08:55:19 +02:00
Yohan Boniface
99ea09e79e
chore: bump pydantic from 2.10.6 to 2.11.1 (#2594) 2025-04-03 08:55:01 +02:00
Yohan Boniface
b3f587ccf3
chore: bump django from 5.1.7 to 5.1.8 (#2595) 2025-04-03 08:49:20 +02:00
dependabot[bot]
64cf408233
chore: bump django from 5.1.7 to 5.1.8
Bumps [django](https://github.com/django/django) from 5.1.7 to 5.1.8.
- [Commits](https://github.com/django/django/compare/5.1.7...5.1.8)

---
updated-dependencies:
- dependency-name: django
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-02 20:41:42 +00:00
dependabot[bot]
e26e8edc8a
chore: bump pydantic from 2.10.6 to 2.11.1
Bumps [pydantic](https://github.com/pydantic/pydantic) from 2.10.6 to 2.11.1.
- [Release notes](https://github.com/pydantic/pydantic/releases)
- [Changelog](https://github.com/pydantic/pydantic/blob/main/HISTORY.md)
- [Commits](https://github.com/pydantic/pydantic/compare/v2.10.6...v2.11.1)

---
updated-dependencies:
- dependency-name: pydantic
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-31 17:38:06 +00:00
dependabot[bot]
1b8e217768
chore: bump mkdocs-material from 9.6.9 to 9.6.10
Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.6.9 to 9.6.10.
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.6.9...9.6.10)

---
updated-dependencies:
- dependency-name: mkdocs-material
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-31 17:38:01 +00:00
Yohan Boniface
5259cab027 chore: remove saving.js import added by mistake during rebase 2025-03-28 18:00:14 +01:00
Yohan Boniface
7ede27bf0f chore: top edit bar responsiveness
Co-authored-by: David Larlet <david@larlet.fr>
2025-03-28 18:00:14 +01:00
Yohan Boniface
5807cfbbcd wip: move undo/redo buttons to the left
Co-authored-by: David Larlet <david@larlet.fr>
2025-03-28 18:00:14 +01:00
Yohan Boniface
e41ad4e069 wip: allow to sync version restore
Co-authored-by: David Larlet <david@larlet.fr>
2025-03-28 18:00:14 +01:00
Yohan Boniface
c933df585c wip: add test to make sure saving also save remote dirty datalayers 2025-03-28 18:00:14 +01:00
Yohan Boniface
50f2c08ecb wip: do not call document during JS unittests 2025-03-28 18:00:14 +01:00
Yohan Boniface
d61e045903 wip: allow to sync/undo filter added/removed from table editor 2025-03-28 18:00:14 +01:00
Yohan Boniface
6b2038e83e wip: permissions does not inherit from ServerStored anymore 2025-03-28 18:00:14 +01:00
Yohan Boniface
0389e9a185 wip: allow to undo/sync rules
When editing Rule(s), we are not editing the map data itself, but a
sort of proxy objects. This was done mainly because map.properties.rules
is an array of object, and at this time Leaflet.FormBuilder did not know
how to edit an array (something like properties.rules.0.condition).
Now that we integrated FormBuilder, it still does not know how to do this
but we could teach it, or find another way (real Proxy or use reference
to the original object in the Rule).
2025-03-28 18:00:14 +01:00
Yohan Boniface
a2e864ad73 wip: uncreated map should always appear as dirty 2025-03-28 18:00:14 +01:00
Yohan Boniface
d0fb85d552 wip: DataLayer does not inherit anymore from ServerStored 2025-03-28 18:00:14 +01:00
Yohan Boniface
fa83764c8b wip: allow DataLayer.clear to be sync and undone 2025-03-28 18:00:14 +01:00
Yohan Boniface
d438a007e4 wip: uMap does not inherit anymore from ServerStored
Co-authored-by: David Larlet <david@larlet.fr>
2025-03-28 18:00:14 +01:00
Yohan Boniface
be52e7ca2f wip: remove not effective code
Co-authored-by: David Larlet <david@larlet.fr>
2025-03-28 18:00:14 +01:00
Yohan Boniface
172de0e2d0 wip: add permissions related fields in schema
Co-authored-by: David Larlet <david@larlet.fr>
2025-03-28 18:00:14 +01:00
Yohan Boniface
77da6425c2 wip: allow to mark an operation as not undoable
Co-authored-by: David Larlet <david@larlet.fr>
2025-03-28 18:00:14 +01:00
Yohan Boniface
093ed061c1 wip: tests pass
Co-authored-by: David Larlet <david@larlet.fr>
2025-03-28 18:00:14 +01:00
Yohan Boniface
5cb7cb2738 fixup: make sure to toggle remote client state at save too
Co-authored-by: David Larlet <david@larlet.fr>
2025-03-28 18:00:14 +01:00
Yohan Boniface
dfdfae0080 wip: derive the dirty status from the undoManager
This should pave the way for removing the SaveManager.

Co-authored-by: David Larlet <david@larlet.fr>
2025-03-28 18:00:14 +01:00
Yohan Boniface
4fd066387d Update the tests and remove cancel edits
Co-authored-by: Alexis Métaireau <alexis@notmyidea.org>
2025-03-28 18:00:14 +01:00
fa3ba46ca8 Add integration test for batch undo/redo 2025-03-28 18:00:14 +01:00
Yohan Boniface
cb46a5f875 Batch operations
Co-authored-by: Alexis Métaireau <alexis@notmyidea.org>
Co-authored-by: David Larlet <david@larlet.fr>
2025-03-28 18:00:14 +01:00
Yohan Boniface
cc2625bfac wip: undo redo
Co-authored-by: Alexis Métaireau <alexis@notmyidea.org>
2025-03-28 18:00:14 +01:00
Yohan Boniface
8292608365 chore: fix HLC comparison
Some checks failed
Test & Docs / tests (postgresql, 3.10) (push) Has been cancelled
Test & Docs / tests (postgresql, 3.12) (push) Has been cancelled
Test & Docs / lint (push) Has been cancelled
This change was made by biome, but it breaks unittests, not
sure why but let's revert for now.
2025-03-28 17:59:35 +01:00
Yohan Boniface
ae8cbf39ad
feat: display maps list as a grid now (#2590)
![image](https://github.com/user-attachments/assets/db9eafd1-b4ea-48a1-a359-3e55d0011f4b)
2025-03-28 16:15:51 +01:00
Yohan Boniface
7c5d821ec8
feat: layers selector in bottom bar (#2579) 2025-03-28 16:15:20 +01:00
Yohan Boniface
4e9e828c8f feat: display maps list as a grid now
Co-authored-by: David Larlet <david@larlet.fr>
2025-03-28 16:05:11 +01:00
Yohan Boniface
79d60d0995 fix: update datalayers switcher when datalayer visibility changes
Co-authored-by: David Larlet <david@larlet.fr>
2025-03-28 15:56:28 +01:00
Yohan Boniface
75457b6d5c
fix: do not fail when trying to read metadata of a missing geojson (#2592)
Some geojson have been removed by mistake time ago (cf #1003), when
someone tries to load a map referencing them, it was until recently just
showing an error message, but since recently we try to get the metadata
from it, and this will crash.
2025-03-28 15:28:13 +01:00
Yohan Boniface
8538db278d
feat: add titles in the text formatting dialog (#2584)
![image](https://github.com/user-attachments/assets/c90549b6-6081-4b1d-8b90-49c1df42ded2)

fix #813
2025-03-28 15:27:30 +01:00
Yohan Boniface
ba9e8ffe9b
chore: apply Biome check (#2588)
This is mostly imports ordering but there are a couple of subtleties 🐉 

There are still 9 errors before we can automatize the check with the CI!
2025-03-28 15:26:52 +01:00
Yohan Boniface
dcf5f1a763
fix: make sure umap.properties.slideshow is defined (#2583) 2025-03-28 15:25:19 +01:00
Yohan Boniface
41264e740f fix: do not fail when trying to read metadata of a missing geojson
Some geojson have been removed by mistake time ago (cf #1003), when someone
tries to load a map referencing them, it was until recently just
showing an error message, but since recently we try to get the
metadata from it, and this will crash.
2025-03-28 12:58:07 +01:00
Yohan Boniface
953b37a181 fixup: fix tests 2025-03-27 13:14:20 +01:00
Yohan Boniface
9eaf33c118 wip: only show layer selector if there are at least two layers 2025-03-27 13:11:24 +01:00
David Larlet
f2cde6af4e fixup: positionning of caption bar elements 2025-03-27 13:11:24 +01:00
Yohan Boniface
a4abecbd2c fixup: only show datalayers with inCaption=true in switcher 2025-03-27 13:11:24 +01:00
Yohan Boniface
254a2018f5 chore: use toggle to switch visibility in datalayer switcher 2025-03-27 13:11:24 +01:00
Yohan Boniface
3df52e002d wip 2025-03-27 13:11:24 +01:00
David Larlet
82208d618a
chore: apply Biome check 2025-03-26 14:37:56 -04:00
Yohan Boniface
64c7fe1ec9 fix: fix icon and button for version restore
Some checks failed
Test & Docs / tests (postgresql, 3.10) (push) Has been cancelled
Test & Docs / tests (postgresql, 3.12) (push) Has been cancelled
Test & Docs / lint (push) Has been cancelled
Co-authored-by: David Larlet <david@larlet.fr>
2025-03-26 18:05:01 +01:00
Yohan Boniface
e993aa7dbc chore: bump eslint ecmaVersion from 2020 to 2021 2025-03-26 11:30:08 +01:00
Yohan Boniface
be83eddbd0
chore: bump ruff from 0.11.0 to 0.11.2 (#2587)
Some checks failed
Test & Docs / tests (postgresql, 3.10) (push) Has been cancelled
Test & Docs / tests (postgresql, 3.12) (push) Has been cancelled
Test & Docs / lint (push) Has been cancelled
2025-03-25 13:04:07 +01:00
dependabot[bot]
4df201107e
chore: bump ruff from 0.11.0 to 0.11.2
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.11.0 to 0.11.2.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.11.0...0.11.2)

---
updated-dependencies:
- dependency-name: ruff
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-24 17:42:02 +00:00
Yohan Boniface
60f16cbc76
chore: remove old JS tests (#2585)
Some checks failed
Test & Docs / tests (postgresql, 3.10) (push) Has been cancelled
Test & Docs / tests (postgresql, 3.12) (push) Has been cancelled
Test & Docs / lint (push) Has been cancelled
Those are not run since more than one year, so let's trash.

fix #2260
2025-03-20 11:50:48 +01:00
Yohan Boniface
2fa88c36f8
chore: bump ruff from 0.9.10 to 0.11.0 (#2582)
Some checks are pending
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
2025-03-19 08:22:32 +01:00
Yohan Boniface
47c5c0a2f0 chore: remove old JS tests
Those are not ran since more than one year, so let's trash.

fix #2260
2025-03-19 08:16:38 +01:00
Yohan Boniface
ecca66ccc2 feat: add titles in the text formatting dialog
fix #813
2025-03-19 08:14:33 +01:00
Yohan Boniface
360ca100ba fix: make sure umap.properties.slideshow is defined 2025-03-18 07:35:10 +01:00
dependabot[bot]
e548ec60f1
chore: bump ruff from 0.9.10 to 0.11.0
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.9.10 to 0.11.0.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.9.10...0.11.0)

---
updated-dependencies:
- dependency-name: ruff
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-18 05:58:20 +00:00
Yohan Boniface
190acbfaf0
chore: bump mkdocs-material from 9.6.7 to 9.6.9 (#2580)
Some checks failed
Test & Docs / tests (postgresql, 3.10) (push) Has been cancelled
Test & Docs / tests (postgresql, 3.12) (push) Has been cancelled
Test & Docs / lint (push) Has been cancelled
2025-03-18 06:57:13 +01:00
Yohan Boniface
1370b1a0e8
chore: bump psycopg from 3.2.5 to 3.2.6 (#2581)
Some checks are pending
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
2025-03-17 21:27:56 +01:00
dependabot[bot]
aa75b323c8
chore: bump psycopg from 3.2.5 to 3.2.6
Bumps [psycopg](https://github.com/psycopg/psycopg) from 3.2.5 to 3.2.6.
- [Changelog](https://github.com/psycopg/psycopg/blob/master/docs/news.rst)
- [Commits](https://github.com/psycopg/psycopg/compare/3.2.5...3.2.6)

---
updated-dependencies:
- dependency-name: psycopg
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-17 18:07:46 +00:00
dependabot[bot]
1c00545095
chore: bump mkdocs-material from 9.6.7 to 9.6.9
Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.6.7 to 9.6.9.
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.6.7...9.6.9)

---
updated-dependencies:
- dependency-name: mkdocs-material
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-17 18:07:38 +00:00
Yohan Boniface
54a3aae912
chore: order importers by name instead of id (#2578) 2025-03-17 16:46:22 +01:00
Yohan Boniface
9d4069d9ae chore: order importers by name instead of id
Co-authored-by: David Larlet <david@larlet.fr>
2025-03-17 16:44:23 +01:00
Yohan Boniface
167bab70c5
feat: add experimental BAN importer (#2565)
This importer takes a CSV as input, sends it to the BAN API, and then
paste it into the import textarea, so it can be imported as usual.



https://github.com/user-attachments/assets/c13f8580-5c09-4b35-b092-baac664a57a1
2025-03-17 16:39:55 +01:00
Yohan Boniface
d3ed46356d feat: add experimental BAN importer
This importer takes a CSV as input, sends it to the BAN API, and
then paste it into the import textarea, so it can be imported as usual.

Co-authored-by: David Larlet <david@larlet.fr>
2025-03-17 16:20:57 +01:00
d72debdeb2
Docs: Add documentation for local docker development 2025-03-14 15:29:25 +01:00
33525a1837
Docs: Remove old references to websocket configuration 2025-03-14 15:29:25 +01:00
3e0a6b8f10
Update the Dockerfile to expose websockets
The Dockerfile now uses ASGI by default (via uvicorn) and embeds a
redis server that is used for the synchronization.
2025-03-14 15:29:17 +01:00
Yohan Boniface
dd5add96b4
fix: iconUrl field was broken on older browsers (#2575)
Some checks failed
Test & Docs / tests (postgresql, 3.10) (push) Has been cancelled
Test & Docs / tests (postgresql, 3.12) (push) Has been cancelled
Test & Docs / lint (push) Has been cancelled
fix #2554
2025-03-14 15:07:14 +01:00
Yohan Boniface
f26536bff3 fix: iconUrl field was broken on older browsers
fix #2554
2025-03-14 14:50:47 +01:00
Yohan Boniface
1b058ce862
fixup: hide home button in edit mode (#2562)
Some checks are pending
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
The button is already on the edit bar.

Would be nicer to have a css transition (like for the bar itself), but
at least with this change it is not duplicated.
2025-03-13 16:52:41 +01:00
Yohan Boniface
a46430c420
fix: import iconUrl as absolute when possible (#2563)
This will only cover the cases where the icon is set at the map or at
the layer level, not the one of the marker itself.

cf #2552
2025-03-13 16:52:19 +01:00
Yohan Boniface
05e3f5ce3d
fix: use real redraw for datalayer, instead of hide/show (#2568)
Some checks are pending
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
The problem we've tried to fix is, during sync:
- peer A is editing a feature
- peer B changes the datalayer of this feature
- edit panel is closed for peer A
2025-03-12 17:41:18 +01:00
Yohan Boniface
c417e94698
fix(sync): fix tilelayer change not synced (#2569) 2025-03-12 17:39:19 +01:00
Yohan Boniface
e53d208d7c
fix: cast value to string before calling trim (#2567)
fix #2566
2025-03-12 17:36:42 +01:00
Yohan Boniface
e20648104b fix: fix tilelayer change not synced
Co-authored-by: Alexis Métaireau <alexis@notmyidea.org>
2025-03-12 13:01:26 +01:00
Yohan Boniface
0c9d5325ba fix: use real redraw for datalayer, instead of hide/show
The problem we've tried to fix is, during sync:
- peer A is editing a feature
- peer B changes the datalayer of this feature
- edit panel is closed for peer A

Co-authored-by: Alexis Métaireau <alexis@notmyidea.org>
2025-03-12 12:23:54 +01:00
Yohan Boniface
90be14ae89 fix: cast value to string before calling trim
fix #2566
2025-03-11 21:43:21 +01:00
Yohan Boniface
003b25d5e0 fix: import iconUrl as absolute when possible
This will only cover the cases where the icon is set at the map or
at the layer level, not the one of the marker itself.

cf #2552
2025-03-11 16:20:58 +01:00
Yohan Boniface
ef80396784 fixup: hide home button in edit mode
The button is already on the edit bar.

Would be nicer to have a css transition, but at least with this
change it is not duplicated.
2025-03-11 15:32:01 +01:00
Yohan Boniface
d85fc648b1
feat: add new "Back to home" icon (#2551)
Some checks failed
Test & Docs / tests (postgresql, 3.10) (push) Has been cancelled
Test & Docs / tests (postgresql, 3.12) (push) Has been cancelled
Test & Docs / lint (push) Has been cancelled
![image](https://github.com/user-attachments/assets/415a7e36-fb34-459e-8890-cd3c6830512b)
2025-03-10 22:31:42 +01:00
Yohan Boniface
b037915aae
chore: bump django-storages[s3] from 1.14.4 to 1.14.5 (#2560) 2025-03-10 22:06:29 +01:00
Yohan Boniface
17bbbe38bd
chore: new icon, colors and title for search buttons (#2556)
![image](https://github.com/user-attachments/assets/eca715dd-9450-4602-9e76-e8835d228df4)
2025-03-10 22:05:39 +01:00
Yohan Boniface
6cbe8cb9ad
chore: bump pytest from 8.3.4 to 8.3.5 (#2559) 2025-03-10 22:04:29 +01:00
dependabot[bot]
28741a9c94
chore: bump pytest from 8.3.4 to 8.3.5
Bumps [pytest](https://github.com/pytest-dev/pytest) from 8.3.4 to 8.3.5.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/8.3.4...8.3.5)

---
updated-dependencies:
- dependency-name: pytest
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-10 20:37:28 +00:00
Yohan Boniface
1ae1a6c51b
chore: bump moto[s3] from 5.0.28 to 5.1.1 (#2557) 2025-03-10 21:36:17 +01:00
Yohan Boniface
d5fb5b02c0
chore: bump ruff from 0.9.9 to 0.9.10 (#2558) 2025-03-10 21:35:58 +01:00
Yohan Boniface
4be64ae918
chore: bump mkdocs-material from 9.6.4 to 9.6.7 (#2561) 2025-03-10 21:35:40 +01:00
dependabot[bot]
85e9bcfa7c
chore: bump mkdocs-material from 9.6.4 to 9.6.7
Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.6.4 to 9.6.7.
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.6.4...9.6.7)

---
updated-dependencies:
- dependency-name: mkdocs-material
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-10 18:14:57 +00:00
dependabot[bot]
3cf0be5244
chore: bump django-storages[s3] from 1.14.4 to 1.14.5
Bumps [django-storages[s3]](https://github.com/jschneier/django-storages) from 1.14.4 to 1.14.5.
- [Changelog](https://github.com/jschneier/django-storages/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/jschneier/django-storages/compare/1.14.4...1.14.5)

---
updated-dependencies:
- dependency-name: django-storages[s3]
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-10 18:14:52 +00:00
dependabot[bot]
5ebb840b94
chore: bump ruff from 0.9.9 to 0.9.10
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.9.9 to 0.9.10.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.9.9...0.9.10)

---
updated-dependencies:
- dependency-name: ruff
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-10 18:14:38 +00:00
dependabot[bot]
9e9369f14b
chore: bump moto[s3] from 5.0.28 to 5.1.1
Bumps [moto[s3]](https://github.com/getmoto/moto) from 5.0.28 to 5.1.1.
- [Release notes](https://github.com/getmoto/moto/releases)
- [Changelog](https://github.com/getmoto/moto/blob/master/CHANGELOG.md)
- [Commits](https://github.com/getmoto/moto/compare/5.0.28...5.1.1)

---
updated-dependencies:
- dependency-name: moto[s3]
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-10 18:14:26 +00:00
Yohan Boniface
bfb17788a4 chore: new icon, colors and title for search buttons 2025-03-10 19:06:39 +01:00
Yohan Boniface
3b195e562a
feat: add more users counts in /stats/ (#2555)
Some checks are pending
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
2025-03-10 16:56:29 +01:00
Yohan Boniface
8599199afa feat: add more users counts in /stats/
Co-authored-by: David Larlet <david@larlet.fr>
2025-03-10 16:38:53 +01:00
Yohan Boniface
7a2bf9fc4c fixup: let the importer deal with getting the OSM url in search
Some checks failed
Test & Docs / tests (postgresql, 3.10) (push) Has been cancelled
Test & Docs / tests (postgresql, 3.12) (push) Has been cancelled
Test & Docs / lint (push) Has been cancelled
Co-authored-by: David Larlet <david@larlet.fr>
2025-03-07 17:58:56 +01:00
Yohan Boniface
b3e39bf654 fixup: square buttons in search results
Co-authored-by: David Larlet <david@larlet.fr>
2025-03-07 17:40:16 +01:00
Yohan Boniface
89e2a01d60 fixup: do not close panel when clicking on search edit buttons
Co-authored-by: David Larlet <david@larlet.fr>
2025-03-07 17:39:42 +01:00
Yohan Boniface
0def3292e1 fix: only display search edit tools in edit mode
Co-authored-by: David Larlet <david@larlet.fr>
2025-03-07 17:26:46 +01:00
Yohan Boniface
beae551367 feat: add new "Back to home" icon
Co-authored-by: David Larlet <david@larlet.fr>
2025-03-07 17:20:35 +01:00
Yohan Boniface
4ccd1e6799 changelog 2025-03-07 16:31:14 +01:00
Yohan Boniface
d4885f386a i18n 2025-03-07 16:24:11 +01:00
Yohan Boniface
869db90b28 chore: update oauth provider deprecation message
Mention that it's important to logout and login again to have the
new provider replace the old one in the session
2025-03-07 16:17:26 +01:00
David Larlet
33cbe1ab71
a11y: turn embeded maps into inert elements (#2533)
One of the side-effects is to make the content of the map un-focusable
but we also loose the ability to interact with the map itself.
2025-03-07 10:10:29 -05:00
Yohan Boniface
8bad104803
chore: refactor search UX (#2545)
This is just the UI part of #419


![image](https://github.com/user-attachments/assets/88c76b9f-b1cd-48fa-b20e-caf1c044dbf8)
2025-03-07 16:05:01 +01:00
David Larlet
1fd34be300
chore: bump django from 5.1.6 to 5.1.7 (#2546)
Some checks are pending
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
Bumps [django](https://github.com/django/django) from 5.1.6 to 5.1.7.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="691e945530"><code>691e945</code></a>
[5.1.x] Bumped version for 5.1.7 release.</li>
<li><a
href="8dbb44d342"><code>8dbb44d</code></a>
[5.1.x] Fixed CVE-2025-26699 -- Mitigated potential DoS in wordwrap
template ...</li>
<li><a
href="d7dc1f6db0"><code>d7dc1f6</code></a>
[5.1.x] Fixed typo in docs/ref/checks.txt.</li>
<li><a
href="dbd94e7ac9"><code>dbd94e7</code></a>
[5.1.x] Fixed <a
href="https://redirect.github.com/django/django/issues/36227">#36227</a>
-- Fixed outdated PostgreSQL documentation links.</li>
<li><a
href="cc405e1546"><code>cc405e1</code></a>
[5.1.x] Fixed <a
href="https://redirect.github.com/django/django/issues/36128">#36128</a>
-- Clarified auto-generated unique constraint on m2m thr...</li>
<li><a
href="03ace756ea"><code>03ace75</code></a>
[5.1.x] Fixed <a
href="https://redirect.github.com/django/django/issues/36217">#36217</a>
-- Restored pre_save/post_save signal emission via LogEn...</li>
<li><a
href="76a9f12b60"><code>76a9f12</code></a>
[5.1.x] Added some heading labels to to docs/topics/cache.txt.</li>
<li><a
href="558c616c95"><code>558c616</code></a>
[5.1.x] Added stub release notes and release date for 5.1.7, 5.0.13, and
4.2.20.</li>
<li><a
href="11243cc8f3"><code>11243cc</code></a>
[5.1.x] Added security guideline on reasonable size limitations when
renderin...</li>
<li><a
href="b80288a16d"><code>b80288a</code></a>
[5.1.x] Added security reporting guidelines.</li>
<li>Additional commits viewable in <a
href="https://github.com/django/django/compare/5.1.6...5.1.7">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=django&package-manager=pip&previous-version=5.1.6&new-version=5.1.7)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/umap-project/umap/network/alerts).

</details>
2025-03-06 18:32:52 -05:00
dependabot[bot]
6d324cdb13
chore: bump django from 5.1.6 to 5.1.7
Bumps [django](https://github.com/django/django) from 5.1.6 to 5.1.7.
- [Commits](https://github.com/django/django/compare/5.1.6...5.1.7)

---
updated-dependencies:
- dependency-name: django
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-06 22:58:33 +00:00
Yohan Boniface
782386bad4 feat: display a target on hover on search results
Co-authored-by: David Larlet <david@larlet.fr>
2025-03-06 18:51:58 +01:00
Yohan Boniface
ae5bc9746c feat: allow to import full geometries from search results
Co-authored-by: David Larlet <david@larlet.fr>
2025-03-06 17:03:13 +01:00
Yohan Boniface
a044bfd672 chore: refactor search UX
cf #419
2025-03-06 15:48:51 +01:00
Yohan Boniface
188a0d6e98 chore: bump Leaflet.Photon
Some checks are pending
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
To display state in results, cf #419
2025-03-06 09:38:51 +01:00
Yohan Boniface
b7cce7079d
chore: bump social-auth-app-django from 5.4.2 to 5.4.3 (#2518)
Some checks are pending
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
2025-03-05 17:50:16 +01:00
dependabot[bot]
0394f1f45d
chore: bump social-auth-app-django from 5.4.2 to 5.4.3
Bumps [social-auth-app-django](https://github.com/python-social-auth/social-app-django) from 5.4.2 to 5.4.3.
- [Release notes](https://github.com/python-social-auth/social-app-django/releases)
- [Changelog](https://github.com/python-social-auth/social-app-django/blob/master/CHANGELOG.md)
- [Commits](https://github.com/python-social-auth/social-app-django/compare/5.4.2...5.4.3)

---
updated-dependencies:
- dependency-name: social-auth-app-django
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-05 16:23:20 +00:00
Yohan Boniface
0d6326a7aa
chore: bump social-auth-core from 4.5.4 to 4.5.6 (#2517)
Some checks are pending
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
2025-03-05 17:22:07 +01:00
Yohan Boniface
9414d6220c
chore: bump psycopg from 3.2.4 to 3.2.5 (#2536)
Bumps [psycopg](https://github.com/psycopg/psycopg) from 3.2.4 to 3.2.5.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/psycopg/psycopg/blob/master/docs/news.rst">psycopg's
changelog</a>.</em></p>
<blockquote>
<p>.. currentmodule:: psycopg</p>
<p>.. index::
single: Release notes
single: News</p>
<h1><code>psycopg</code> release notes</h1>
<h2>Future releases</h2>
<p>Python 3.3.0 (unreleased)
^^^^^^^^^^^^^^^^^^^^^^^^^</p>
<ul>
<li>Drop support for Python 3.8.</li>
</ul>
<h2>Current release</h2>
<p>Psycopg 3.2.5
^^^^^^^^^^^^^</p>
<ul>
<li>3x faster UUID loading thanks to C implementation
(🎟️<code>[#447](https://github.com/psycopg/psycopg/issues/447),
[#998](https://github.com/psycopg/psycopg/issues/998)</code>).</li>
</ul>
<p>Psycopg 3.2.4
^^^^^^^^^^^^^</p>
<ul>
<li>Don't lose notifies received whilst the
<code>~Connection.notifies()</code> iterator
is not running
(🎫<code>[#962](https://github.com/psycopg/psycopg/issues/962)</code>).</li>
<li>Make sure that the notifies callback is called during the use of the
<code>~Connection.notifies()</code> generator
(🎫<code>[#972](https://github.com/psycopg/psycopg/issues/972)</code>).</li>
<li>Raise the correct error returned by the database (such as
<code>!AdminShutdown</code>
or <code>!IdleInTransactionSessionTimeout</code>) instead of a generic
<code>OperationalError</code> when a server error causes a client
disconnection

(🎫<code>[#988](https://github.com/psycopg/psycopg/issues/988)</code>).</li>
<li>Build macOS dependencies from sources instead using the Homebrew
versions
in order to avoid problems with <code>MACOSX_DEPLOYMENT_TARGET</code>
(🎫<code>[#858](https://github.com/psycopg/psycopg/issues/858)</code>).</li>
<li>Bump libpq to 17.2 in Linux and macOS binary packages.</li>
<li>Bump libpq to 16.4 in Windows binary packages, using the <code>vcpkg
library</code>__

(🎫<code>[#966](https://github.com/psycopg/psycopg/issues/966)</code>).</li>
</ul>
<p>.. __: <a
href="https://vcpkg.io/en/package/libpq">https://vcpkg.io/en/package/libpq</a></p>
<p>Psycopg 3.2.3
^^^^^^^^^^^^^</p>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="664b2a12d6"><code>664b2a1</code></a>
chore: bump psycopg package version to 3.2.5</li>
<li><a
href="cd6589bf35"><code>cd6589b</code></a>
chore: bump build libraries</li>
<li><a
href="68f8603ec6"><code>68f8603</code></a>
Merge branch 'cython-uuid-3.2' into maint-3.2</li>
<li><a
href="dd1cefc3ee"><code>dd1cefc</code></a>
docs: mention UUID speedup in release news</li>
<li><a
href="7f950cb843"><code>7f950cb</code></a>
chore(c): remove C UUIDDumper and UUIDBinaryDumper</li>
<li><a
href="393e162fc3"><code>393e162</code></a>
perf(uuid): speed up UUID creation using a writable subclass</li>
<li><a
href="57a3889949"><code>57a3889</code></a>
perf(c): use PyObject_CallFunctionObjArgs in UUIDBinaryLoader</li>
<li><a
href="88f73fedd2"><code>88f73fe</code></a>
perf(c): use PyObject_CallFunctionObjArgs in UUIDLoader</li>
<li><a
href="3a9ade78e7"><code>3a9ade7</code></a>
test(c): test UUID.<strong>slots</strong></li>
<li><a
href="811cb51123"><code>811cb51</code></a>
perf(c): Use hex_to_int_map in UUIDLoader</li>
<li>Additional commits viewable in <a
href="https://github.com/psycopg/psycopg/compare/3.2.4...3.2.5">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=psycopg&package-manager=pip&previous-version=3.2.4&new-version=3.2.5)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>
2025-03-05 17:21:51 +01:00
Yohan Boniface
5d1f5de551
feat: expose active sessions in stats endpoint (#2544) 2025-03-05 16:41:44 +01:00
Yohan Boniface
1981f73212 feat: expose active sessions in stats endpoint 2025-03-05 10:02:42 +01:00
Yohan Boniface
9974852975 2.9.2
Some checks are pending
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
2025-03-04 15:56:23 +01:00
Yohan Boniface
fb2fd217ab
fix: be defensive when getting the backend name from the session (#2540)
Seems that in some situation it is not defined.

We have this error in Sentry, but I'm not able to reproduce myself to
get a better context:


https://umap.sentry.io/issues/6351694806/?alert_rule_id=14960738&alert_timestamp=1741028858715&alert_type=email&environment=osmfr&notification_uuid=2c437997-d14d-4e0f-a62f-55bd19739ad2&project=4506656504020992&referrer=alert_email
2025-03-04 15:51:05 +01:00
Yohan Boniface
86d60f0b8e
fix: measure/drawing tooltip was misplaced (#2541)
Broken since 70f87d8636

fix #2539

Before:


![image](https://github.com/user-attachments/assets/5e68628c-a9f7-422a-b4b9-dd5daf0d77cd)


After:


![image](https://github.com/user-attachments/assets/c1857ab2-a8d1-43eb-a3d0-11bb24286bd6)
2025-03-04 15:48:04 +01:00
Yohan Boniface
3297296d59 fix: measure/drawing tooltip was misplaced
Since 70f87d8636

fix #2539
2025-03-04 11:52:06 +01:00
Yohan Boniface
470fc14d6d fix: be defensive when getting the backend name from the session
Seems that in some situation it is not defined.
2025-03-04 11:20:49 +01:00
Yohan Boniface
c0f7e9d50d 2.9.1
Some checks are pending
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
2025-03-03 18:40:47 +01:00
Yohan Boniface
34259f6234 i18n 2025-03-03 18:39:08 +01:00
Yohan Boniface
fc7ed42e2e
chore: be more persuasive in deprecating twitter login backend (#2538)
- always redirect user from map to their profile page when they used a
deprecated backend to log in
- change the Twitter image to make clear it is to be removed
2025-03-03 18:35:48 +01:00
David Larlet
74504df64a
chore: bump isort from 6.0.0 to 6.0.1 (#2535) 2025-03-03 12:26:54 -05:00
David Larlet
9e91a4537d
chore: bump ruff from 0.9.6 to 0.9.9 (#2537)
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.9.6 to 0.9.9.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/astral-sh/ruff/releases">ruff's
releases</a>.</em></p>
<blockquote>
<h2>0.9.9</h2>
<h2>Release Notes</h2>
<h3>Preview features</h3>
<ul>
<li>Fix caching of unsupported-syntax errors (<a
href="https://redirect.github.com/astral-sh/ruff/pull/16425">#16425</a>)</li>
</ul>
<h3>Bug fixes</h3>
<ul>
<li>Only show unsupported-syntax errors in editors when preview mode is
enabled (<a
href="https://redirect.github.com/astral-sh/ruff/pull/16429">#16429</a>)</li>
</ul>
<h2>Contributors</h2>
<ul>
<li><a
href="https://github.com/InSyncWithFoo"><code>@​InSyncWithFoo</code></a></li>
<li><a
href="https://github.com/MichaReiser"><code>@​MichaReiser</code></a></li>
<li><a
href="https://github.com/dhruvmanila"><code>@​dhruvmanila</code></a></li>
<li><a href="https://github.com/ntBre"><code>@​ntBre</code></a></li>
</ul>
<h2>Install ruff 0.9.9</h2>
<h3>Install prebuilt binaries via shell script</h3>
<pre lang="sh"><code>curl --proto '=https' --tlsv1.2 -LsSf
https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-installer.sh
| sh
</code></pre>
<h3>Install prebuilt binaries via powershell script</h3>
<pre lang="sh"><code>powershell -ExecutionPolicy ByPass -c &quot;irm
https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-installer.ps1
| iex&quot;
</code></pre>
<h2>Download ruff 0.9.9</h2>
<table>
<thead>
<tr>
<th>File</th>
<th>Platform</th>
<th>Checksum</th>
</tr>
</thead>
<tbody>
<tr>
<td><a
href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-aarch64-apple-darwin.tar.gz">ruff-aarch64-apple-darwin.tar.gz</a></td>
<td>Apple Silicon macOS</td>
<td><a
href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-aarch64-apple-darwin.tar.gz.sha256">checksum</a></td>
</tr>
<tr>
<td><a
href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-x86_64-apple-darwin.tar.gz">ruff-x86_64-apple-darwin.tar.gz</a></td>
<td>Intel macOS</td>
<td><a
href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-x86_64-apple-darwin.tar.gz.sha256">checksum</a></td>
</tr>
<tr>
<td><a
href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-aarch64-pc-windows-msvc.zip">ruff-aarch64-pc-windows-msvc.zip</a></td>
<td>ARM64 Windows</td>
<td><a
href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-aarch64-pc-windows-msvc.zip.sha256">checksum</a></td>
</tr>
<tr>
<td><a
href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-i686-pc-windows-msvc.zip">ruff-i686-pc-windows-msvc.zip</a></td>
<td>x86 Windows</td>
<td><a
href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-i686-pc-windows-msvc.zip.sha256">checksum</a></td>
</tr>
<tr>
<td><a
href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-x86_64-pc-windows-msvc.zip">ruff-x86_64-pc-windows-msvc.zip</a></td>
<td>x64 Windows</td>
<td><a
href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-x86_64-pc-windows-msvc.zip.sha256">checksum</a></td>
</tr>
<tr>
<td><a
href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-aarch64-unknown-linux-gnu.tar.gz">ruff-aarch64-unknown-linux-gnu.tar.gz</a></td>
<td>ARM64 Linux</td>
<td><a
href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256">checksum</a></td>
</tr>
<tr>
<td><a
href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-i686-unknown-linux-gnu.tar.gz">ruff-i686-unknown-linux-gnu.tar.gz</a></td>
<td>x86 Linux</td>
<td><a
href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-i686-unknown-linux-gnu.tar.gz.sha256">checksum</a></td>
</tr>
<tr>
<td><a
href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-powerpc64-unknown-linux-gnu.tar.gz">ruff-powerpc64-unknown-linux-gnu.tar.gz</a></td>
<td>PPC64 Linux</td>
<td><a
href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256">checksum</a></td>
</tr>
<tr>
<td><a
href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-powerpc64le-unknown-linux-gnu.tar.gz">ruff-powerpc64le-unknown-linux-gnu.tar.gz</a></td>
<td>PPC64LE Linux</td>
<td><a
href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256">checksum</a></td>
</tr>
<tr>
<td><a
href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-s390x-unknown-linux-gnu.tar.gz">ruff-s390x-unknown-linux-gnu.tar.gz</a></td>
<td>S390x Linux</td>
<td><a
href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-s390x-unknown-linux-gnu.tar.gz.sha256">checksum</a></td>
</tr>
<tr>
<td><a
href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-x86_64-unknown-linux-gnu.tar.gz">ruff-x86_64-unknown-linux-gnu.tar.gz</a></td>
<td>x64 Linux</td>
<td><a
href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256">checksum</a></td>
</tr>
<tr>
<td><a
href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-armv7-unknown-linux-gnueabihf.tar.gz">ruff-armv7-unknown-linux-gnueabihf.tar.gz</a></td>
<td>ARMv7 Linux</td>
<td><a
href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256">checksum</a></td>
</tr>
<tr>
<td><a
href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-aarch64-unknown-linux-musl.tar.gz">ruff-aarch64-unknown-linux-musl.tar.gz</a></td>
<td>ARM64 MUSL Linux</td>
<td><a
href="https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-aarch64-unknown-linux-musl.tar.gz.sha256">checksum</a></td>
</tr>
</tbody>
</table>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md">ruff's
changelog</a>.</em></p>
<blockquote>
<h2>0.9.9</h2>
<h3>Preview features</h3>
<ul>
<li>Fix caching of unsupported-syntax errors (<a
href="https://redirect.github.com/astral-sh/ruff/pull/16425">#16425</a>)</li>
</ul>
<h3>Bug fixes</h3>
<ul>
<li>Only show unsupported-syntax errors in editors when preview mode is
enabled (<a
href="https://redirect.github.com/astral-sh/ruff/pull/16429">#16429</a>)</li>
</ul>
<h2>0.9.8</h2>
<h3>Preview features</h3>
<ul>
<li>Start detecting version-related syntax errors in the parser (<a
href="https://redirect.github.com/astral-sh/ruff/pull/16090">#16090</a>)</li>
</ul>
<h3>Rule changes</h3>
<ul>
<li>[<code>pylint</code>] Mark fix unsafe (<code>PLW1507</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/16343">#16343</a>)</li>
<li>[<code>pylint</code>] Catch <code>case np.nan</code>/<code>case
math.nan</code> in <code>match</code> statements (<code>PLW0177</code>)
(<a
href="https://redirect.github.com/astral-sh/ruff/pull/16378">#16378</a>)</li>
<li>[<code>ruff</code>] Add more Pydantic models variants to the list of
default copy semantics (<code>RUF012</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/16291">#16291</a>)</li>
</ul>
<h3>Server</h3>
<ul>
<li>Avoid indexing the project if <code>configurationPreference</code>
is <code>editorOnly</code> (<a
href="https://redirect.github.com/astral-sh/ruff/pull/16381">#16381</a>)</li>
<li>Avoid unnecessary info at non-trace server log level (<a
href="https://redirect.github.com/astral-sh/ruff/pull/16389">#16389</a>)</li>
<li>Expand <code>ruff.configuration</code> to allow inline config (<a
href="https://redirect.github.com/astral-sh/ruff/pull/16296">#16296</a>)</li>
<li>Notify users for invalid client settings (<a
href="https://redirect.github.com/astral-sh/ruff/pull/16361">#16361</a>)</li>
</ul>
<h3>Configuration</h3>
<ul>
<li>Add <code>per-file-target-version</code> option (<a
href="https://redirect.github.com/astral-sh/ruff/pull/16257">#16257</a>)</li>
</ul>
<h3>Bug fixes</h3>
<ul>
<li>[<code>refurb</code>] Do not consider docstring(s)
(<code>FURB156</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/16391">#16391</a>)</li>
<li>[<code>flake8-self</code>] Ignore attribute accesses on
instance-like variables (<code>SLF001</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/16149">#16149</a>)</li>
<li>[<code>pylint</code>] Fix false positives, add missing methods, and
support positional-only parameters (<code>PLE0302</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/16263">#16263</a>)</li>
<li>[<code>flake8-pyi</code>] Mark <code>PYI030</code> fix unsafe when
comments are deleted (<a
href="https://redirect.github.com/astral-sh/ruff/pull/16322">#16322</a>)</li>
</ul>
<h3>Documentation</h3>
<ul>
<li>Fix example for <code>S611</code> (<a
href="https://redirect.github.com/astral-sh/ruff/pull/16316">#16316</a>)</li>
<li>Normalize inconsistent markdown headings in docstrings (<a
href="https://redirect.github.com/astral-sh/ruff/pull/16364">#16364</a>)</li>
<li>Document MSRV policy (<a
href="https://redirect.github.com/astral-sh/ruff/pull/16384">#16384</a>)</li>
</ul>
<h2>0.9.7</h2>
<h3>Preview features</h3>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="091d0af2ab"><code>091d0af</code></a>
Bump version to Ruff 0.9.9 (<a
href="https://redirect.github.com/astral-sh/ruff/issues/16434">#16434</a>)</li>
<li><a
href="3d72138740"><code>3d72138</code></a>
Check <code>LinterSettings::preview</code> for version-related syntax
errors (<a
href="https://redirect.github.com/astral-sh/ruff/issues/16429">#16429</a>)</li>
<li><a
href="4a23756024"><code>4a23756</code></a>
Avoid caching files with unsupported syntax errors (<a
href="https://redirect.github.com/astral-sh/ruff/issues/16425">#16425</a>)</li>
<li><a
href="af62f7932b"><code>af62f79</code></a>
Prioritize &quot;bug&quot; label for changelog sections (<a
href="https://redirect.github.com/astral-sh/ruff/issues/16433">#16433</a>)</li>
<li><a
href="0ced8d053c"><code>0ced8d0</code></a>
[<code>flake8-copyright</code>] Add links to applicable options
(<code>CPY001</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/issues/16421">#16421</a>)</li>
<li><a
href="a8e171f82c"><code>a8e171f</code></a>
Fix string-length limit in documentation for PYI054 (<a
href="https://redirect.github.com/astral-sh/ruff/issues/16432">#16432</a>)</li>
<li><a
href="cf83584abb"><code>cf83584</code></a>
Show version-related syntax errors in the playground (<a
href="https://redirect.github.com/astral-sh/ruff/issues/16419">#16419</a>)</li>
<li><a
href="764aa0e6a1"><code>764aa0e</code></a>
Allow passing <code>ParseOptions</code> to inline tests (<a
href="https://redirect.github.com/astral-sh/ruff/issues/16357">#16357</a>)</li>
<li><a
href="568cf88c6c"><code>568cf88</code></a>
Bump version to 0.9.8 (<a
href="https://redirect.github.com/astral-sh/ruff/issues/16414">#16414</a>)</li>
<li><a
href="040071bbc5"><code>040071b</code></a>
[red-knot] Ignore surrounding whitespace when looking for `&lt;!--
snapshot-diag...</li>
<li>Additional commits viewable in <a
href="https://github.com/astral-sh/ruff/compare/0.9.6...0.9.9">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=ruff&package-manager=pip&previous-version=0.9.6&new-version=0.9.9)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>
2025-03-03 12:26:28 -05:00
Yohan Boniface
284ca8fd9c chore: be more persuasive in deprecating twitter login backend
- always redirect user from map to their profile page when they
  used a deprecated backend to log in
- change the Twitter image to make clear it is to be removed

Co-authored-by: David Larlet <david@larlet.fr>
2025-03-03 18:24:23 +01:00
dependabot[bot]
1dc468c350
chore: bump ruff from 0.9.6 to 0.9.9
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.9.6 to 0.9.9.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.9.6...0.9.9)

---
updated-dependencies:
- dependency-name: ruff
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-03 17:19:47 +00:00
dependabot[bot]
434de70c02
chore: bump psycopg from 3.2.4 to 3.2.5
Bumps [psycopg](https://github.com/psycopg/psycopg) from 3.2.4 to 3.2.5.
- [Changelog](https://github.com/psycopg/psycopg/blob/master/docs/news.rst)
- [Commits](https://github.com/psycopg/psycopg/compare/3.2.4...3.2.5)

---
updated-dependencies:
- dependency-name: psycopg
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-03 17:19:37 +00:00
dependabot[bot]
e9389723e8
chore: bump isort from 6.0.0 to 6.0.1
Bumps [isort](https://github.com/PyCQA/isort) from 6.0.0 to 6.0.1.
- [Release notes](https://github.com/PyCQA/isort/releases)
- [Changelog](https://github.com/PyCQA/isort/blob/main/CHANGELOG.md)
- [Commits](https://github.com/PyCQA/isort/compare/6.0.0...6.0.1)

---
updated-dependencies:
- dependency-name: isort
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-03 17:19:32 +00:00
Yohan Boniface
2cf3a4e6a3 fix: honour error status in alerts
Co-authored-by: David Larlet <david@larlet.fr>
2025-03-03 16:48:44 +01:00
Yohan Boniface
bc1eaa05c9 chore: use a French quote in translation
To prevent escape from Django, as we then use it in a textContent
property for alerts.

Co-authored-by: David Larlet <david@larlet.fr>
2025-03-03 16:47:48 +01:00
Yohan Boniface
420647906d doc: fix setting name for DEPRECATED_AUTHENTICATION_BACKENDS
Co-authored-by: David Larlet <david@larlet.fr>
2025-03-03 16:47:09 +01:00
Yohan Boniface
ce024d57fd 2.9.0
Some checks are pending
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
2025-03-03 15:49:27 +01:00
David Larlet
5eab942f25
a11y: switch to better contrasted links (#2532)
And underline for external links otherwise the new green color is too
close to the text one to clearly identify links.
2025-03-03 09:36:50 -05:00
Yohan Boniface
9e791a0ab4
fix: feature edit status not disabled on hide (#2534) 2025-03-03 15:34:49 +01:00
Yohan Boniface
26fe653456 i18n 2025-03-03 15:13:03 +01:00
David Larlet
ea58f93940
a11y: update URLs and (underlined) styles for help 2025-03-03 09:10:37 -05:00
Yohan Boniface
436c083744 fix: feature edit status not disabled on hide 2025-03-03 15:09:34 +01:00
Yohan Boniface
ea00d4fc32 chore: remove _marked_for_deletion pattern
We think it's useless now that we use "editable:edited" event everywhere
(vs using the "editable:commit" which was triggered also after a delete,
when closing the edit panel)
2025-03-03 15:09:07 +01:00
David Larlet
742a23b668
a11y: set an aria-label for unlabelled search input (#2531) 2025-03-03 09:04:31 -05:00
David Larlet
abe49cc1ba
a11y: turn embeded maps into inert elements
One of the side-effects is to make the content of the map un-focusable but we also loose the ability to interact with the map itself.
2025-02-28 16:18:28 -05:00
David Larlet
4f5d37b676
a11y: switch to better contrasted links
And underline for external links otherwise the new green color is too close to the text one to clearly identify links.
2025-02-28 14:05:26 -05:00
David Larlet
949a266437
a11y: set an aria-label for unlabelled search input 2025-02-28 13:58:40 -05:00
Yohan Boniface
48daa0a77f fix: do not show tooltip with only spaces
Some checks failed
Test & Docs / tests (postgresql, 3.10) (push) Has been cancelled
Test & Docs / tests (postgresql, 3.12) (push) Has been cancelled
Test & Docs / lint (push) Has been cancelled
Co-authored-by: David Larlet <david@larlet.fr>
2025-02-27 19:28:38 +01:00
Yohan Boniface
ba20f5791c fix: shift-click on a path should toggle edit
This was broken in 4adc558560

Co-authored-by: David Larlet <david@larlet.fr>
2025-02-27 19:21:43 +01:00
Yohan Boniface
0fe2103b71 chore: bump Leaflet.Editable and DOMPurify 2025-02-27 17:12:02 +01:00
dependabot[bot]
c5eac8a8a9
chore: bump social-auth-core from 4.5.4 to 4.5.6
Bumps [social-auth-core](https://github.com/python-social-auth/social-core) from 4.5.4 to 4.5.6.
- [Release notes](https://github.com/python-social-auth/social-core/releases)
- [Changelog](https://github.com/python-social-auth/social-core/blob/master/CHANGELOG.md)
- [Commits](https://github.com/python-social-auth/social-core/compare/4.5.4...4.5.6)

---
updated-dependencies:
- dependency-name: social-auth-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-27 14:49:50 +00:00
Yohan Boniface
55d505e7d8
chore: bump rjsmin from 1.2.3 to 1.2.4 (#2519) 2025-02-27 15:48:37 +01:00
Yohan Boniface
14e90a1a0f
feat: add a quick link to layer's permalink (#2529)
This will open a new page with only this given layer shown.


![image](https://github.com/user-attachments/assets/4db637b9-03f4-4b05-9ce3-6656aba11786)
2025-02-27 15:36:45 +01:00
Yohan Boniface
e919c5f168
fix(sync): make datalayer upsert idempotent (#2528)
That fix does not really fix the original issue, but it makes it
impactless, and I think it's safer anyway to have upsert idempotent.

The pattern to reproduce is:
- peer A create a synced map, add a datalayer, save it
- peer B loads the map, click on edit
- at this time, peer B have twice the datalayer data, once from the
server AND once from the sync

So a better fix would be to make that peer B send a meaningfull HLC to
peer A I guess.
For this we may save the last HLC is the map properties, or maybe try to
merge the "reference_version" and the HLC.
2025-02-27 15:32:09 +01:00
Yohan Boniface
b1076dcb7b
fix: make sure we sync a line when hitting esc while drawing (#2526)
I first tried to handle this on Leaflet.Editable side, to make it fire
the "editable:edited" event we use to trigger the sync, but deciding
what to do with a feature on escape needs some decisions that seems hard
to implement in a generic way in Leaflet.Editable.
We call stopDrawing, which then calls cancelDrawing, so here one need to
decide if cancelDrawing should keep the already drawn line (but cancel
the point being drawn) or cancel everything.
This is why I end up making this change in uMap itself.
2025-02-27 15:26:54 +01:00
Yohan Boniface
69ca89a6ba
fix: prevent client to open two websocket connections (#2524)
To reproduce:
- create a map
- saved it
- change the "syncEnabled" setting to on
- save again
- open another tab with this map
- switch on edit mode

In this case, the second client will try to authenticate:
- once switch on edit mode
- and once receiving the operation message from peer A about the
syncEnabled (which calls render, which calls initSyncEngine in in this
case)

I think we want to keep render to call initSyncEngine, so if a map owner
switch off the syncEnabled setting, this will (should) disconnect the
other peers.
2025-02-27 15:20:16 +01:00
Yohan Boniface
df0faa75aa feat: add a quick link to layer's permalink
This will open a new page with only this given layer shown.
2025-02-26 15:38:48 +01:00
Yohan Boniface
fc6ea191cc
chore: do not try to disconnect ws if not connected (#2527)
Some checks are pending
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
cf https://umap.sentry.io/issues/6331841272/
2025-02-26 15:18:34 +01:00
Yohan Boniface
b400ade44b fix(sync): make datalayer upsert idempotent
That fix does not really fix the original issue, but it make it impactless.

The pattern is:
- peer A create a synced map, add a datalayer, save it
- peer B loads the map, click on edit
- at this time, peer B have twice the datalayer data, once from the server
  AND once from the sync

So a better fix would be to make that peer B send a meaningfull HLC to
peer A I guess.
For this we may save the last HLC is the map properties, or maybe try
to merge the "reference_version" and the HLC.
2025-02-26 11:55:21 +01:00
Yohan Boniface
dc35039af8 chore: do not try to disconnect ws if not connected
cf https://umap.sentry.io/issues/6331841272/
2025-02-26 09:41:03 +01:00
Yohan Boniface
9858fc2190 fix: make sure we sync a line when hitting esc while drawing
I first tried to handle this on Leaflet.Editable side, to make
it fire the "editable:edited" event we use to trigger the sync,
but deciding what to do with a feature on escape needs some
decisions that seems hard to implement in a generic way in
Leaflet.Editable.
We call stopDrawing, which then calls cancelDrawing, so here
one need to decide if cancelDrawing should keep the already
drawn line (but cancel the point being drawn) or cancel
everything.
This is why I end up making this change in uMap itself.
2025-02-25 17:17:49 +01:00
Yohan Boniface
5ddd973eae fix: prevent client to open two websocket connections
To reproduce:
- create a map
- saved it
- change the "syncEnabled" setting to on
- save again
- open another tab with this map
- switch on edit mode

In this case, the second client will try to authenticate:
- once switch on edit mode
- and once receiving the operation message from peer A about the
  syncEnabled (which calls render, which calls initSyncEngine in
  in this case)

I think we want to keep render to call initSyncEngine, so if a map
owner switch off the syncEnabled setting, this will (should) disconnect
the other peers.
2025-02-25 08:33:14 +01:00
Yohan Boniface
6e40388f7d
chore: use template for map advanced buttons (and fix icons) (#2523)
Some checks failed
Test & Docs / tests (postgresql, 3.10) (push) Has been cancelled
Test & Docs / tests (postgresql, 3.12) (push) Has been cancelled
Test & Docs / lint (push) Has been cancelled
Before:


![image](https://github.com/user-attachments/assets/fc8dd27f-aa03-4eaf-ba21-e041b0548e51)

After:


![image](https://github.com/user-attachments/assets/2b9b15ca-542b-4114-b57c-c88189a7260a)
2025-02-25 08:25:24 +01:00
Yohan Boniface
ab571925ff chore: use template for layer advanced buttons 2025-02-24 17:19:46 +01:00
Yohan Boniface
a70e608e42 chore: use template for map advanced buttons 2025-02-24 17:05:54 +01:00
dependabot[bot]
d342336930
chore: bump rjsmin from 1.2.3 to 1.2.4
Bumps [rjsmin](https://github.com/ndparker/rjsmin) from 1.2.3 to 1.2.4.
- [Changelog](https://github.com/ndparker/rjsmin/blob/master/CHANGES)
- [Commits](https://github.com/ndparker/rjsmin/compare/1.2.3...1.2.4)

---
updated-dependencies:
- dependency-name: rjsmin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-24 14:09:11 +00:00
Yohan Boniface
4c76f8dbde
chore: bump dompurify from 3.1.7 to 3.2.4 (#2521)
Some checks are pending
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
2025-02-24 15:08:22 +01:00
Yohan Boniface
b417d71fb7
chore: bump rcssmin from 1.2.0 to 1.2.1 (#2515) 2025-02-24 15:07:55 +01:00
dependabot[bot]
be267504da
chore: bump dompurify from 3.1.7 to 3.2.4
Bumps [dompurify](https://github.com/cure53/DOMPurify) from 3.1.7 to 3.2.4.
- [Release notes](https://github.com/cure53/DOMPurify/releases)
- [Commits](https://github.com/cure53/DOMPurify/compare/3.1.7...3.2.4)

---
updated-dependencies:
- dependency-name: dompurify
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-24 13:23:19 +00:00
Yohan Boniface
0e12efbca6
chore: bump mkdocs-material from 9.6.3 to 9.6.4 (#2516) 2025-02-24 14:22:12 +01:00
dependabot[bot]
0dfe1ac29a
chore: bump mkdocs-material from 9.6.3 to 9.6.4
Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.6.3 to 9.6.4.
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.6.3...9.6.4)

---
updated-dependencies:
- dependency-name: mkdocs-material
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-17 17:50:05 +00:00
dependabot[bot]
256613512b
chore: bump rcssmin from 1.2.0 to 1.2.1
Bumps [rcssmin](https://github.com/ndparker/rcssmin) from 1.2.0 to 1.2.1.
- [Changelog](https://github.com/ndparker/rcssmin/blob/master/CHANGES)
- [Commits](https://github.com/ndparker/rcssmin/compare/1.2.0...1.2.1)

---
updated-dependencies:
- dependency-name: rcssmin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-17 17:49:57 +00:00
Yohan Boniface
fcac4df30b
chore: use our contexmenu class for inplace toolbar (#2510)
Some checks failed
Test & Docs / tests (postgresql, 3.10) (push) Has been cancelled
Test & Docs / tests (postgresql, 3.12) (push) Has been cancelled
Test & Docs / lint (push) Has been cancelled
And remove Leaflet.Toolbar dependency.
This also teach ContextMenu how to display icons instead of text and how
to render in horizontal orientation instead of vertical.

Before:

![image](https://github.com/user-attachments/assets/196b17c4-ec6c-4023-b5bf-32033caf4408)

After:


![image](https://github.com/user-attachments/assets/29ad8628-01a6-4028-a99a-bc679c5db18d)

We've lost the bottom tip in the process, should I add this to the
ContextMenu class ?

Also, the automatic border for the focused button is a bit noisy imho,
not sure how to deal with that.
2025-02-14 17:25:13 +01:00
Yohan Boniface
b107de3421
fix(sync): wait for websocket full connection (#2503)
Websocket has now a "connect" method, which is a promise, that yields
"onconnect", so the engine can wait for it before proceding.
2025-02-14 17:22:57 +01:00
Yohan Boniface
b86db00e88
fix(sync): try to reconnect after network error when getting token (#2502)
Otherwise, if the token request fail, the process will be stopped and we
will never try to reconnect.
2025-02-14 17:22:41 +01:00
Yohan Boniface
244e637acc
chore: sync save state (#2487)
When a peer save the map, other peers in dirty state should not need to
save the map anymore.

That implementation uses the lastKnownHLC as a reference, but it changes
all dirty states at once. Another impementation could be to have each
object sync its dirty state, but in this case we do not have a HLC per
object as reference, and it also creates more messages.

ping @almet if you're around and wanna have a fresh look. :)
2025-02-14 17:17:59 +01:00
Yohan Boniface
c00de1a457
fix: use default value from schema for non inheritable fields (#2513)
Eg. moreControl
2025-02-14 17:17:15 +01:00
Yohan Boniface
48b4d61cd0 chore: add an hover on dark context menu buttons
Co-authored-by: David Larlet <david@larlet.fr>
2025-02-14 17:16:35 +01:00
Yohan Boniface
b90328f65e
feat: make vertex icons bigger (and round) (#2506)
Before:
![Screenshot From 2025-02-11
13-59-40](https://github.com/user-attachments/assets/013998f1-d9f7-4129-95b8-0ab969eee018)

After:
![Screenshot From 2025-02-11
13-59-12](https://github.com/user-attachments/assets/7d279db3-3fe2-41cb-bdc4-9255f625895d)

(Size unchanged on mobile)

cf #673
2025-02-14 16:52:54 +01:00
Yohan Boniface
2089d3b0c6 fix: use default value from schema for non inheritable fields
Eg. moreControl

Co-authored-by: David Larlet <david@larlet.fr>
2025-02-14 16:44:11 +01:00
Yohan Boniface
52b4244333 chore: add missing default values in schema 2025-02-14 16:03:15 +01:00
Yohan Boniface
1b3852d0e8 i18n 2025-02-14 16:03:05 +01:00
Yohan Boniface
20b1dd6f26 i18n
Some checks are pending
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
2025-02-14 15:38:31 +01:00
Yohan Boniface
4adc558560 chore: use our contexmenu class for inplace toolbar
And remove Leaflet.Toolbar dependency.
This also teach ContextMenu how to display icons instead of
text and how to render in horizontal orientation instead of
vertical.
2025-02-12 14:59:43 +01:00
Yohan Boniface
fb6df6f955
feat: make the tooltip sticky in hover mode for paths (#2507)
Some checks failed
Test & Docs / tests (postgresql, 3.10) (push) Has been cancelled
Test & Docs / tests (postgresql, 3.12) (push) Has been cancelled
Test & Docs / lint (push) Has been cancelled
Until now, it was displayed on the path (line or polygon) "center". So
when zoomed in, if the center is not on the screen, the tooltip will not
be visible.
2025-02-11 18:01:01 +01:00
Yohan Boniface
04966cc068 feat: make the tooltip sticky in hover mode for paths
Until now, it was displayed on the path (line or polygon)
"center". So when zoomed in, if the center is not on the
screen, the tooltip will not be visible.
2025-02-11 15:51:43 +01:00
Yohan Boniface
c71a6aafdb
fix: do not display an error for an empty CSV (#2505)
Some checks are pending
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
fix #577
fix #2491
fix #1546
2025-02-11 15:00:16 +01:00
Yohan Boniface
9c418afe37
chore: run the CI even for PR not targetting master (and remove doc build twice) (#2504)
Replaces #2493
2025-02-11 14:59:31 +01:00
Yohan Boniface
008a996bea feat: make vertex icons bigger (and round) 2025-02-11 14:00:09 +01:00
Yohan Boniface
8e13a15645 fix: do not display an error for an empty CSV
fix #577
fix #2491
fix #1546
2025-02-11 13:45:40 +01:00
Yohan Boniface
de3be9bb97 chore: only build doc once in the CI
I've chosen to keep the one in the "lint" step, instead of a
dedicated step, so to prevent one more container to be built at
each run (did I say "to save trees" ?) :p
2025-02-11 13:32:59 +01:00
Yohan Boniface
6530aaa794 chore: do not run CI if no umap code files has been changed
Co-authored-by: David Larlet <david@larlet.fr>
2025-02-11 13:31:28 +01:00
Yohan Boniface
414cc805c2 fix(sync): wait for websocket full connection
Websocket has now a "connect" method, which is a promise,
that yields "onconnect", so the engine can wait for it before
proceding.
2025-02-11 13:26:27 +01:00
Yohan Boniface
1ce491a70c fix(sync): try to reconnect after network error when getting token 2025-02-11 13:03:06 +01:00
Yohan Boniface
4dd50690b1
chore: bump ruff from 0.9.3 to 0.9.6 (#2499) 2025-02-11 12:16:20 +01:00
Yohan Boniface
f0e87bab83
Fix broken showLabel=null (on hover) (#2490)
Broken since c27e675152
2025-02-11 12:14:52 +01:00
dependabot[bot]
238de28098
chore: bump ruff from 0.9.3 to 0.9.6
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.9.3 to 0.9.6.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.9.3...0.9.6)

---
updated-dependencies:
- dependency-name: ruff
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-11 10:58:25 +00:00
Yohan Boniface
c5467e42d5
chore: bump mkdocs-material from 9.5.50 to 9.6.3 (#2496) 2025-02-11 11:57:17 +01:00
Yohan Boniface
14c388b063
chore: bump pytest-django from 4.9.0 to 4.10.0 (#2495) 2025-02-11 11:56:39 +01:00
Yohan Boniface
e3c5acd52b
chore: bump moto[s3] from 5.0.27 to 5.0.28 (#2498) 2025-02-11 11:56:08 +01:00
Yohan Boniface
c044afb43d
chore: bump django from 5.1.5 to 5.1.6 (#2497) 2025-02-11 11:55:36 +01:00
Yohan Boniface
c5417178c4 fix: "null" value was not honoured in showLabel field 2025-02-11 11:48:01 +01:00
dependabot[bot]
cfef25748b
chore: bump moto[s3] from 5.0.27 to 5.0.28
Bumps [moto[s3]](https://github.com/getmoto/moto) from 5.0.27 to 5.0.28.
- [Release notes](https://github.com/getmoto/moto/releases)
- [Changelog](https://github.com/getmoto/moto/blob/master/CHANGELOG.md)
- [Commits](https://github.com/getmoto/moto/compare/5.0.27...5.0.28)

---
updated-dependencies:
- dependency-name: moto[s3]
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-10 17:06:37 +00:00
dependabot[bot]
6c835622c0
chore: bump django from 5.1.5 to 5.1.6
Bumps [django](https://github.com/django/django) from 5.1.5 to 5.1.6.
- [Commits](https://github.com/django/django/compare/5.1.5...5.1.6)

---
updated-dependencies:
- dependency-name: django
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-10 17:06:31 +00:00
dependabot[bot]
62e23ac49b
chore: bump mkdocs-material from 9.5.50 to 9.6.3
Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.50 to 9.6.3.
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.50...9.6.3)

---
updated-dependencies:
- dependency-name: mkdocs-material
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-10 17:06:26 +00:00
dependabot[bot]
a78cdd227e
chore: bump pytest-django from 4.9.0 to 4.10.0
Bumps [pytest-django](https://github.com/pytest-dev/pytest-django) from 4.9.0 to 4.10.0.
- [Release notes](https://github.com/pytest-dev/pytest-django/releases)
- [Changelog](https://github.com/pytest-dev/pytest-django/blob/main/docs/changelog.rst)
- [Commits](https://github.com/pytest-dev/pytest-django/compare/v4.9.0...v4.10.0)

---
updated-dependencies:
- dependency-name: pytest-django
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-10 17:06:20 +00:00
Yohan Boniface
aea422a247
feat: add title attribute to layers in browser (#2489)
Some checks are pending
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
Test & Docs / docs (push) Waiting to run
Usefull when the layer title is truncated because too long.


![image](https://github.com/user-attachments/assets/267a4639-e929-4be9-8934-373afb24b6fe)


![image](https://github.com/user-attachments/assets/0c8953df-77a5-4b7f-93b3-92bf9d7894ff)
2025-02-10 17:17:55 +01:00
Yohan Boniface
46c319e5cf
chore: smaller star button and invert author and dates (#2488)
Also make created/modified lower case on caption.


![image](https://github.com/user-attachments/assets/72117435-d4ba-439d-a9c6-862bdee439a9)

cf #2424
cf #2442

cc @Aurelie-Jallut
2025-02-10 17:16:04 +01:00
Yohan Boniface
f105336d48
chore: read datalayer metadata from file if missing in DB (#2494)
When we introduced the DataLayer.settings property, we did not run a
migration for existing datalayers (because there are millions in the
French server).
Now that we simplified the `DataLayer.isLoaded()` logic in the client,
we want to be sure that created DataLayer on the client have full
metadata.
2025-02-10 16:59:49 +01:00
Yohan Boniface
9b01a4b77a chore: read datalayer metadata from file if missing in DB
When we introduced the DataLayer.settings property, we did not run
a migration for existing datalayers (because there are millions in the
French server).
Now that we simplified the `DataLayer.isLoaded()` logic in the client,
we want to be sure that created DataLayer on the client have full
metadata.

Co-authored-by: David Larlet <david@larlet.fr>
2025-02-10 16:56:15 +01:00
Yohan Boniface
e827e77bb9
chore: refactor layer.isLoaded() (#2492) 2025-02-10 16:39:15 +01:00
Yohan Boniface
a8e18c167c chore: no need to reset datalayer._needsFetch after a save
It is reset only after loading the layer data.

Co-authored-by: David Larlet <david@larlet.fr>
2025-02-10 16:30:00 +01:00
Yohan Boniface
175e27a535 chore: remove DataLayer._dataloaded in favor of isLoaded()
At the end, we only need two states: has this datalayer loaded the
data it should load ? yes / no.
Whether it local or remote data should not be a matter.
2025-02-10 15:44:41 +01:00
Yohan Boniface
ba0582deb1 chore: refactor layer.isLoaded() 2025-02-10 13:13:56 +01:00
Yohan Boniface
9fe744573c feat: add title attribute to layers in browser
Usefull when the layer title is truncated because too long.
2025-02-10 09:41:16 +01:00
Yohan Boniface
64068af393 fix: do not save "null" instead of null for showLabel 2025-02-07 21:56:02 +01:00
Yohan Boniface
6793a6bdc7 fix: do not modify schema while iterating on it 2025-02-07 21:50:11 +01:00
Yohan Boniface
c7681c0304 chore: smaller star button and invert author and dates
Also make created/modified lower case on caption.

cf #2424
cf #2442
2025-02-07 19:00:30 +01:00
Yohan Boniface
eca7ad4772 fixup: prevent to reload a datalayer after other peer has saved it
The scenario to reproduce is:
- peer A creates a datalayer
- peer B add a marker on that datalayer
- peer B saves the datalayer

Before this fix, after the save, peer A would get a new _referenceVersion
for this datalayer, and the render method would make a hide/show,
which would refetch the data from the server, duplicating it.
So forcing the _loaded to be true in this situation prevent this.

We may want to rework the "_loaded" pattern, maybe with the server
returning in a datalayer metadata the length of the data it get for
this given datalayer, so the client knows if it is worth getting
data for a layer when itself (the client) does not have any.

Co-authored-by: David Larlet <david@larlet.fr>
2025-02-07 17:58:27 +01:00
Yohan Boniface
a172c4abea fixup: do not try to sync saved state when not in sync mode
Co-authored-by: David Larlet <david@larlet.fr>
2025-02-07 17:53:48 +01:00
Yohan Boniface
b8db07a4ce chore: sync save state
When a peer save the map, other peers in dirty state should not need
to save the map anymore.

That implementation uses the lastKnownHLC as a reference, but it changes
all dirty states at once. Another impementation could be to have each
object sync its dirty state, but in this case we do not have a HLC per
object as reference, and it also creates more messages.

Co-authored-by: David Larlet <david@larlet.fr>
2025-02-07 16:47:45 +01:00
Yohan Boniface
815ff046ff chore: mention nginx mapping in asgi documentation
Some checks failed
Test & Docs / tests (postgresql, 3.10) (push) Has been cancelled
Test & Docs / tests (postgresql, 3.12) (push) Has been cancelled
Test & Docs / lint (push) Has been cancelled
Test & Docs / docs (push) Has been cancelled
Co-authored-by: David Larlet <david@larlet.fr>
2025-02-07 16:25:34 +01:00
Yohan Boniface
76c13a61a6 fixup: do not show empty helpText for editors and owner fields 2025-02-07 15:35:49 +01:00
Yohan Boniface
ad51f674ef
fix: do not import empty features (#2485) 2025-02-07 15:26:42 +01:00
Yohan Boniface
8949d6fa71
fix: do not sync twice a point move (#2486) 2025-02-07 15:26:25 +01:00
Yohan Boniface
009b32c818 fix: do not sync twice a point move 2025-02-07 10:08:58 +01:00
Yohan Boniface
c5ee9fc283
chore: use editable-edited event to sync changes (#2478)
Some checks are pending
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
Test & Docs / docs (push) Waiting to run
This is more unified between markers and paths, and it allows paths to
be synced as soon as they have been drawn (instead of when closing the
edit panel, which created a race condition when changing its properties
that were then synced to other while the feature itself was not).
2025-02-07 09:12:45 +01:00
Yohan Boniface
9af74b0a4e fix: do not import empty features 2025-02-07 09:11:16 +01:00
David Larlet
fb03c6a39e
feat: Expose teams in users’ CSV export (#2484)
Some checks are pending
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
Test & Docs / docs (push) Waiting to run
2025-02-06 11:50:52 -05:00
David Larlet
2331f4103e
chore: add very minimal documentation for deploying uMap with ASGI (#2480)
This is just about ASGI, not the websockets and the sync itself.

We may merge it, or just keep it and amend it until we have the sync
official.
2025-02-06 11:29:00 -05:00
Yohan Boniface
a1372b5f4d
chore: move DrawToolbar and SettingsToolbar to bar.js module (#2482)
This also:
- change the "set center and zoom" to be a panel instead of a direct
action (including the "defaultView" setting
- refactor the "get started dialog"

This is a first step to remove our dependency to the unmaintained
Leaflet.Toolbar plugin.


![image](https://github.com/user-attachments/assets/d9a76df1-0392-45c8-9a2f-f1a2995754d1)


![image](https://github.com/user-attachments/assets/7f40e2f5-c816-4086-9a16-b792621948de)


![image](https://github.com/user-attachments/assets/a02fd480-c50b-4d2d-9919-ca483c1c8def)

The mockup on figma glues the edit toolbar to the edit panel, but I
didn't not implement this as I don't know how to make it work in
portrait/mobile view. This step is mainly a code refactor.
2025-02-06 17:28:43 +01:00
David Larlet
0cba3ab158
fix: Do not error when escape during marker creation (#2483) 2025-02-06 11:28:26 -05:00
David Larlet
17b8d73978
feat: Expose teams in users’ CSV export
Co-authored-by: Yohan Boniface <yohanboniface@free.fr>
2025-02-06 11:26:47 -05:00
David Larlet
519302b53d
fix: Do not error when escape during marker creation
Co-authored-by: Yohan Boniface <yohanboniface@free.fr>
2025-02-06 11:14:58 -05:00
David Larlet
cbe50a0112
fixup: back to original dark grey
Co-authored-by: Yohan Boniface <yohanboniface@free.fr>
2025-02-06 11:02:38 -05:00
David Larlet
b214f4109c
fixup: restore help contents and fix button icon
Co-authored-by: Yohan Boniface <yohanboniface@free.fr>
2025-02-06 10:28:05 -05:00
David Larlet
e8e06da149
fix: consistent border radius for edit bar
Co-authored-by: Yohan Boniface <yohanboniface@free.fr>
2025-02-06 10:05:55 -05:00
David Larlet
0451b4a882
chore: highlight bar buttons according to open panel
Co-authored-by: Yohan Boniface <yohanboniface@free.fr>
2025-02-06 10:02:32 -05:00
Yohan Boniface
99db1c82f4 chore: move DrawToolbar and SettingsToolbar to bar.js module
This also:
- change the "set center and zoom" to be a panel instead of
  a direct action (including the "defaultView" setting
- refactor the "get started dialog"

This is a first step to remove our dependency to the unmaintained
Leaflet.Toolbar plugin.
2025-02-06 12:26:58 +01:00
Yohan Boniface
fe011d89e2
chore: use logging.debug instead of print for sync debugging (#2481)
Some checks are pending
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
Test & Docs / docs (push) Waiting to run
2025-02-05 19:59:59 +01:00
Yohan Boniface
3e4601c7a3 chore: use logging.debug instead of print for sync debugging 2025-02-05 09:57:58 +01:00
Yohan Boniface
e2ed239d23 chore: add very minimal documentation for deploying uMap with ASGI 2025-02-04 18:42:38 +01:00
Yohan Boniface
b35740b029
fix: error after deleting a path that was previously moved (#2479)
Some checks are pending
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
Test & Docs / docs (push) Waiting to run
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
When moving a path, this will put a once time listener on "moveend". If
we delete this feature, and move the map, we should not execute the
event callback.

A better fix would be to cancel the event listener on delete, but that
is much more work given how we deal with Leaflet events right now.
2025-02-04 18:00:09 +01:00
Yohan Boniface
c985cb3de5 fix: error after deleting a path that was previously moved
When moving a path, this will put a once time listener on "moveend".
If we delete this feature, and move the map, we should not execute the
event callback.

A better fix would be to cancel the event listener on delete, but that
is much more work given how we deal with Leaflet events right now.
2025-02-04 17:40:49 +01:00
Yohan Boniface
4a82f587fa
chore: bump isort from 5.13.2 to 6.0.0 (#2472) 2025-02-04 16:55:57 +01:00
dependabot[bot]
ed9ae0590b
chore: bump isort from 5.13.2 to 6.0.0
Bumps [isort](https://github.com/pycqa/isort) from 5.13.2 to 6.0.0.
- [Release notes](https://github.com/pycqa/isort/releases)
- [Changelog](https://github.com/PyCQA/isort/blob/main/CHANGELOG.md)
- [Commits](https://github.com/pycqa/isort/compare/5.13.2...6.0.0)

---
updated-dependencies:
- dependency-name: isort
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-04 15:38:50 +00:00
Yohan Boniface
a48513fcd7
chore: make redis python dep optional (#2470) 2025-02-04 16:38:24 +01:00
Yohan Boniface
4da5d2682a
chore: bump pymdown-extensions from 10.14.1 to 10.14.3 (#2474) 2025-02-04 16:37:45 +01:00
Yohan Boniface
79352d8a82 chore: use editable-edited event to sync changes
This is more unified between markers and paths, and it allows paths to
be synced as soon as they have been drawn (instead of when closing the
edit panel, which created a race condition when changing its properties
that were then synced to other while the feature itself was not).
2025-02-04 16:36:14 +01:00
dependabot[bot]
22293c8a44
chore: bump pymdown-extensions from 10.14.1 to 10.14.3
Bumps [pymdown-extensions](https://github.com/facelessuser/pymdown-extensions) from 10.14.1 to 10.14.3.
- [Release notes](https://github.com/facelessuser/pymdown-extensions/releases)
- [Commits](https://github.com/facelessuser/pymdown-extensions/compare/10.14.1...10.14.3)

---
updated-dependencies:
- dependency-name: pymdown-extensions
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-04 15:26:06 +00:00
Yohan Boniface
0dee5b1a3a
chore: bump mkdocs-static-i18n from 1.2.3 to 1.3.0 (#2475) 2025-02-04 16:24:44 +01:00
Yohan Boniface
97dadf0101
chore: bump pytest-playwright from 0.6.2 to 0.7.0 (#2473) 2025-02-04 16:24:07 +01:00
Yohan Boniface
22ca072364
chore: bump factory-boy from 3.3.1 to 3.3.3 (#2476) 2025-02-04 16:23:11 +01:00
Yohan Boniface
17be255ed6
fix: center "Plus" button (#2477)
Before:


![image](https://github.com/user-attachments/assets/916c6fc1-188c-442b-b364-772191531eed)

After:


![image](https://github.com/user-attachments/assets/8b07b624-b1d2-40fe-b940-20ec51cfa050)
2025-02-04 16:02:20 +01:00
Yohan Boniface
9606bd864b fix: center "Plus" button 2025-02-04 11:45:28 +01:00
David Larlet
57fa820875
docs-users: add an article in French
Some checks are pending
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
Test & Docs / docs (push) Waiting to run
2025-02-03 13:56:24 -05:00
dependabot[bot]
9b29a2efde
chore: bump factory-boy from 3.3.1 to 3.3.3
Bumps [factory-boy](https://github.com/FactoryBoy/factory_boy) from 3.3.1 to 3.3.3.
- [Changelog](https://github.com/FactoryBoy/factory_boy/blob/master/docs/changelog.rst)
- [Commits](https://github.com/FactoryBoy/factory_boy/compare/3.3.1...3.3.3)

---
updated-dependencies:
- dependency-name: factory-boy
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-03 17:18:19 +00:00
dependabot[bot]
7d1e5c676c
chore: bump mkdocs-static-i18n from 1.2.3 to 1.3.0
Bumps [mkdocs-static-i18n](https://github.com/ultrabug/mkdocs-static-i18n) from 1.2.3 to 1.3.0.
- [Changelog](https://github.com/ultrabug/mkdocs-static-i18n/blob/main/docs/changelog.md)
- [Commits](https://github.com/ultrabug/mkdocs-static-i18n/compare/1.2.3...1.3.0)

---
updated-dependencies:
- dependency-name: mkdocs-static-i18n
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-03 17:18:16 +00:00
dependabot[bot]
d024a22328
chore: bump pytest-playwright from 0.6.2 to 0.7.0
Bumps [pytest-playwright](https://github.com/microsoft/playwright-pytest) from 0.6.2 to 0.7.0.
- [Release notes](https://github.com/microsoft/playwright-pytest/releases)
- [Commits](https://github.com/microsoft/playwright-pytest/compare/v0.6.2...v0.7.0)

---
updated-dependencies:
- dependency-name: pytest-playwright
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-03 17:18:06 +00:00
Yohan Boniface
cc2f4ef81f
doc: add minimal documentation for nginx proxy (#2469)
Some checks failed
Test & Docs / tests (postgresql, 3.10) (push) Has been cancelled
Test & Docs / tests (postgresql, 3.12) (push) Has been cancelled
Test & Docs / lint (push) Has been cancelled
Test & Docs / docs (push) Has been cancelled
2025-02-01 06:34:19 +01:00
Yohan Boniface
432a0a182d i18n
Some checks are pending
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
Test & Docs / docs (push) Waiting to run
2025-01-31 19:05:22 +01:00
Yohan Boniface
545770dfb9 chore: make redis python dep optional 2025-01-31 18:55:55 +01:00
Yohan Boniface
c5478fa8d3 2.9.0b0 2025-01-31 18:44:01 +01:00
Yohan Boniface
74f81f9894 i18n 2025-01-31 18:37:18 +01:00
Yohan Boniface
3a2dd4023b doc: add minimal documentation for nginx proxy 2025-01-31 18:26:35 +01:00
Yohan Boniface
1f66377104 fix: show user URL in remote data loading error
Instead of the proxied one, which is less readable and actionable for
the user reading the alert message.
2025-01-31 18:25:20 +01:00
Yohan Boniface
a442e56cbc fixup: use correct delete function for DataLayer
Some checks are pending
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
Test & Docs / docs (push) Waiting to run
2025-01-31 17:28:09 +01:00
Yohan Boniface
718cc919f8
fix: do not try to backup an undefined geojson (#2468)
This occurs when a remote data returns an invalid geojson.
2025-01-31 17:18:43 +01:00
Yohan Boniface
aa25398a62
feat: display a more descriptive alert on invalid geojson error (#2466) 2025-01-31 17:16:44 +01:00
Yohan Boniface
18ff0de872
fix: clear previous alert timeout when opening a new alert (#2467)
Otherwise, when an infinite alert replace an alert with a finite
duration, this first alert timeout will close the second alert.
2025-01-31 17:16:27 +01:00
Yohan Boniface
1d6e74e1d2
fix: only allow to set a map as sync when it is already saved (#2465) 2025-01-31 17:10:22 +01:00
Yohan Boniface
37ecea0799 feat: display a more descriptive alert on invalid geojson error
Co-authored-by: David Larlet <david@larlet.fr>
2025-01-31 17:08:35 +01:00
Yohan Boniface
e38e0f162c fix: do not try to backup an undefined geojson
This occurs when a remote data returns an invalid geojson.

Co-authored-by: David Larlet <david@larlet.fr>
2025-01-31 16:47:17 +01:00
Yohan Boniface
bcd69ccb47 fix: clear previous alert timeout when opening a new alert
Otherwise, when an infinite alert replace an alert with a finite duration,
this first alert timeout will close the second alert.

Co-authored-by: David Larlet <david@larlet.fr>
2025-01-31 16:42:38 +01:00
Yohan Boniface
2162aaf930 fix: only allow to set a map as sync when it is already saved 2025-01-31 15:45:55 +01:00
Yohan Boniface
3e9982c8cb
Sync show usernames (#2444)
Some checks are pending
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
Test & Docs / docs (push) Waiting to run
fix #2267
2025-01-31 06:56:46 +01:00
David Larlet
1eb1f320db
chore: iterate on tooltips design 2025-01-30 14:15:56 -05:00
Yohan Boniface
48f4daf419
fix: catch cluster error at zoom in certain situation (#2464)
Some checks are pending
Test & Docs / docs (push) Waiting to run
Test & Docs / lint (push) Waiting to run
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Eg. to reproduce: a map with a limitBounds that makes uMap immediately
zoom to fit the bbox.
2025-01-30 18:49:19 +01:00
Yohan Boniface
a18b240c65 fix: catch cluster error at zoom in certain situation
Eg. to reproduce: a map with a limitBounds that makes uMap immediately
zoom to fit the bbox.

Co-authored-by: David Larlet <david@larlet.fr>
2025-01-30 18:40:05 +01:00
David Larlet
e6db23d4d3
fix: better buttons positionning for the homepage (#2463) 2025-01-30 11:35:40 -05:00
Yohan Boniface
5ae83a571b
feat: add DEPRECATED_AUTHENTICATION_PROVIDERS setting (#2461)
Some checks are pending
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
Test & Docs / docs (push) Waiting to run
![image](https://github.com/user-attachments/assets/00a55dfa-2e41-40bf-a6aa-bf70903645e4)
2025-01-30 17:15:53 +01:00
Yohan Boniface
be1fa55e9b
fix: allow to set choices for a nullablechoices field (#2462)
fix #2380
2025-01-30 17:14:27 +01:00
David Larlet
ac607370d0
a11y: include site description within page titles (#2455)
This is not the same as the short `SITE_NAME` which is displayed as the
title of the (home)page for instance.

The plan is to set `SITE_DESCRIPTION` as `uMap OpenStreetMap` for the
OSM instance and `uMap agents publics` for the ANCT one.
2025-01-30 10:45:22 -05:00
David Larlet
44aa914658
a11y: include site description within page titles
This is not the same as the short SITE_NAME which is displayed as the title of the (home)page for instance.
2025-01-30 10:36:31 -05:00
David Larlet
0e5cdec97e
fix: better buttons positionning for the homepage 2025-01-30 10:16:09 -05:00
Yohan Boniface
c27e675152 fix: allow to set choices for a nullablechoices field
fix #2380
2025-01-30 14:55:11 +01:00
Yohan Boniface
ee1a87cdeb feat: add DEPRECATED_AUTHENTICATION_PROVIDERS setting 2025-01-30 11:04:02 +01:00
Yohan Boniface
96895feea0
fix: display current configured oauth as icon instead of text (#2375)
Before:


![image](https://github.com/user-attachments/assets/b71d78c0-2a11-4d2e-adf5-2f23ccfd6b2e)


After:


![image](https://github.com/user-attachments/assets/35d3494c-275a-42b6-b646-6e025b03d7c5)
2025-01-30 11:03:21 +01:00
Yohan Boniface
359b0b41ca chore: make djlint happy 2025-01-30 09:45:56 +01:00
Yohan Boniface
3aa42d6f0f
feat: soft delete datalayers (#2459)
When deleting a datalayer, it will now be moved to a state "deleted",
and it will only be deleted for real when running the command `umap
empty_trash`.

This is what we already do for the map itself, but until now if a user
deleted a only a datalayer by mistake (not the map itself) it could not
retrieve it.
2025-01-30 09:19:58 +01:00
Yohan Boniface
5ab11428a5
fix: correctly parse http link including another http link in the path (#2460)
Some checks are pending
Test & Docs / docs (push) Waiting to run
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
fix #2457

Thoughts @jschleic ?
2025-01-30 09:12:05 +01:00
Yohan Boniface
f0751ec5dd fix: correctly parse http link including another http link in the path
fix #2457
2025-01-29 20:23:43 +01:00
Yohan Boniface
fd8a1971f8 feat: soft delete datalayers
When deleting a datalayer, it will now be moved to a state "deleted", and
it will only be deleted for real when running the command `umap empty_trash`.

This is what we already do for the map itself, but until now if a user
deleted a only a datalayer by mistake (not the map itself) it could not retrieve
it.
2025-01-29 19:08:59 +01:00
Oscar Hemelaar
8f3f67588a
chore: deploy charts to repository under github pages 2025-01-29 16:22:25 +01:00
Oscar Hemelaar
e97b619da8
feat: allow configuring env and conf using existing secret
useful for when the secret is created out of band using a vault api for
example
2025-01-29 15:49:05 +01:00
Yohan Boniface
3b9a0c0951
chore: bump ruff from 0.9.2 to 0.9.3 (#2451)
Some checks failed
Test & Docs / tests (postgresql, 3.10) (push) Has been cancelled
Test & Docs / tests (postgresql, 3.12) (push) Has been cancelled
Test & Docs / lint (push) Has been cancelled
Test & Docs / docs (push) Has been cancelled
2025-01-27 19:05:20 +01:00
Yohan Boniface
a3baf82b7b chore(templates): use images for oauth providers list
Co-authored-by: David Larlet <david@larlet.fr>
2025-01-27 19:04:13 +01:00
Yohan Boniface
70f87d8636 feat: add "accent" mode for tooltip, and use it for peers list
Co-authored-by: David Larlet <david@larlet.fr>
2025-01-27 18:43:36 +01:00
Yohan Boniface
cb5e13b218
chore: bump django-environ from 0.11.2 to 0.12.0 (#2454) 2025-01-27 18:41:12 +01:00
Yohan Boniface
c42a2b7129
chore: bump psycopg from 3.2.3 to 3.2.4 (#2453) 2025-01-27 18:40:55 +01:00
Yohan Boniface
2482111d24
chore: bump pydantic from 2.10.5 to 2.10.6 (#2450) 2025-01-27 18:40:31 +01:00
Yohan Boniface
bcd21d3697
feat(forms): add a debounce for Input and Textarea fields (#2445)
fix #2415

I'm a bit afraid this will add more hiccup to the playwright tests,
tough :(
2025-01-27 18:40:11 +01:00
Yohan Boniface
b6b47cc0d0
chore: bump pymdown-extensions from 10.14 to 10.14.1 (#2452) 2025-01-27 18:39:50 +01:00
dependabot[bot]
cb4ea1b1d2
chore: bump django-environ from 0.11.2 to 0.12.0
Bumps [django-environ](https://github.com/joke2k/django-environ) from 0.11.2 to 0.12.0.
- [Release notes](https://github.com/joke2k/django-environ/releases)
- [Changelog](https://github.com/joke2k/django-environ/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/joke2k/django-environ/compare/v0.11.2...v0.12.0)

---
updated-dependencies:
- dependency-name: django-environ
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-27 17:32:18 +00:00
dependabot[bot]
99fff916d5
chore: bump psycopg from 3.2.3 to 3.2.4
Bumps [psycopg](https://github.com/psycopg/psycopg) from 3.2.3 to 3.2.4.
- [Changelog](https://github.com/psycopg/psycopg/blob/master/docs/news.rst)
- [Commits](https://github.com/psycopg/psycopg/compare/3.2.3...3.2.4)

---
updated-dependencies:
- dependency-name: psycopg
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-27 17:31:06 +00:00
dependabot[bot]
151beb6d4c
chore: bump pymdown-extensions from 10.14 to 10.14.1
Bumps [pymdown-extensions](https://github.com/facelessuser/pymdown-extensions) from 10.14 to 10.14.1.
- [Release notes](https://github.com/facelessuser/pymdown-extensions/releases)
- [Commits](https://github.com/facelessuser/pymdown-extensions/compare/10.14...10.14.1)

---
updated-dependencies:
- dependency-name: pymdown-extensions
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-27 17:30:59 +00:00
dependabot[bot]
fe40effaaa
chore: bump ruff from 0.9.2 to 0.9.3
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.9.2 to 0.9.3.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.9.2...0.9.3)

---
updated-dependencies:
- dependency-name: ruff
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-27 17:30:53 +00:00
dependabot[bot]
0e1fa6965d
chore: bump pydantic from 2.10.5 to 2.10.6
Bumps [pydantic](https://github.com/pydantic/pydantic) from 2.10.5 to 2.10.6.
- [Release notes](https://github.com/pydantic/pydantic/releases)
- [Changelog](https://github.com/pydantic/pydantic/blob/main/HISTORY.md)
- [Commits](https://github.com/pydantic/pydantic/compare/v2.10.5...v2.10.6)

---
updated-dependencies:
- dependency-name: pydantic
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-27 17:30:34 +00:00
Yohan Boniface
49ea7ed4a5 feat(forms): add a debounce for Input and Textarea fields
fix #2415
2025-01-27 17:25:56 +01:00
Yohan Boniface
d20943a487
feat: move star button to caption (#2442)
fix #2282


![image](https://github.com/user-attachments/assets/45fda270-035b-4ec2-9ac1-3e2f2798663b)
![Screenshot From 2025-01-23
10-42-23](https://github.com/user-attachments/assets/ef323c82-bb12-41ef-97e6-b21dfeef01ba)
2025-01-27 17:18:28 +01:00
Yohan Boniface
250579eaa2 chore: better styling for star button in caption panel
Co-authored-by: David Larlet <david@larlet.fr>
2025-01-27 16:50:27 +01:00
Yohan Boniface
60918e6ca5
wip(sync): POC of using Redis for pubsub (#2426)
Some checks are pending
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
Test & Docs / docs (push) Waiting to run
## TODO

- [x] add expire to peers registry hash in redis, as for now when the
server closes the connection we have extra users (edit: we cleaned
manually, as HEXPIRE is not available in FOSS version of Redis)
- [x] make that the peer uuid is created by the client, so when it
reconnects, it uses the same, and does not create a new one
- [ ] see if we can use a connection_pool
- [x] use dynamic websocket_uri (that must include the map id)
- [x] integrate Redis in playwright tests
2025-01-27 15:58:30 +01:00
David Larlet
088f682247
fix(helm): reference secret-env by fullname instead release-name (#2406)
Related to helm Charts:
Currently the reference to secret is done by
```          
envFrom:
- secretRef:
  name: {{ .Release.Name }}-env
```

[Link](https://github.com/umap-project/umap/blob/master/charts/umap/templates/deployment.yaml#L67C1-L69C44)

but secret object is created like this:
```
metadata:
  name: {{ include "umap.fullname" . }}-env
```

[Link](https://github.com/umap-project/umap/blob/master/charts/umap/templates/secret-env.yaml#L4C3-L4C4)

Works as long as no Sub-Chart feature is used, when individual
configuration is stored within a git repo.
Then the subchart name is added to fullname. (And I think if custom
fullName is set)

To be safe, `{{ include "umap.fullname" . }}` is correct. 

Should be no breaking change, when it is working at the moment. (Because
then both return same value)
It is only a breaking change, if it is not working at the moment.
2025-01-27 09:56:29 -05:00
Yohan Boniface
d4afd5646f
feat: allow to define sortKey at layer level (#2449)
In some situation, we do not want the same sortKey for each layer.
2025-01-27 10:08:53 +01:00
Yohan Boniface
a2936d74de
Fix categorized layers colors palette not updating (#2447)
Some checks are pending
Test & Docs / lint (push) Waiting to run
Test & Docs / docs (push) Waiting to run
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
fix #2446 

A bunch of small commits, but real fixes are:
29d70552dd
and
d5efe6b8e2
and
8f2bbc6765
2025-01-26 22:21:39 +01:00
Yohan Boniface
485bd94531 feat: allow to define sortKey at layer level
In some situation, we do not want the same sortKey for each layer.
2025-01-26 22:20:19 +01:00
Yohan Boniface
8603774778 chore: do not use hx for non structural headings 2025-01-24 18:52:24 +01:00
Yohan Boniface
8f2bbc6765 fix: re-compute layer settings when type changed 2025-01-24 18:24:33 +01:00
Yohan Boniface
d5efe6b8e2 fix: get COLORS from Utils now that it has been moved there 2025-01-24 18:23:41 +01:00
Yohan Boniface
8111cf5522 fix: add a label for default colors scheme in categorized layer type 2025-01-24 18:22:33 +01:00
Yohan Boniface
609b251303 chore: use datalayer.allProperties() instead of private property 2025-01-24 18:21:29 +01:00
Yohan Boniface
29d70552dd fix: always index properties when feature properties as changed
We want the datalayer index properties to be updated when a user set
a property on the feature, as this property name may not yet be in the
index (which is used later for autocomplete, select…).
2025-01-24 18:19:57 +01:00
Yohan Boniface
1d47bfce0a chore: add redis port in Github workflow 2025-01-24 10:13:00 +01:00
Yohan Boniface
ea2bdba270
fix: display a more usefull message when error in remote data (#2443)
Some checks failed
Test & Docs / tests (postgresql, 3.10) (push) Has been cancelled
Test & Docs / tests (postgresql, 3.12) (push) Has been cancelled
Test & Docs / lint (push) Has been cancelled
Test & Docs / docs (push) Has been cancelled
fix #2379

![Screenshot From 2025-01-23
11-54-29](https://github.com/user-attachments/assets/b2000003-b9c3-404f-be91-0a9b13f512c2)
2025-01-24 09:09:14 +01:00
Yohan Boniface
22846acb99
fix: fix circle icon no longer hihlighted (#2440)
Some checks are pending
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
Test & Docs / docs (push) Waiting to run
fix #2429
2025-01-23 18:30:23 +01:00
Yohan Boniface
693e775ca8
fix: keep layer visibility after clicking on toggle all (#2439)
fix #2430

Not exactly sure how to make this DRY. What we want is to mark the layer
visibility as "controlled by user" as soon as they click on a
show/hide/showAll/hideAll button, so we do not try to infer the
visibility from the from/toZoom settings.
2025-01-23 18:29:37 +01:00
Yohan Boniface
62be6450bb feat(sync): show a very minimal list of connected peers
cf #2267

Co-authored-by: David Larlet <david@larlet.fr>
2025-01-23 18:27:47 +01:00
Yohan Boniface
3e3ce0b8f5 fix: better computation of tooltip bottom position
Co-authored-by: David Larlet <david@larlet.fr>
2025-01-23 18:08:04 +01:00
Yohan Boniface
b62085b7aa chore: add REDIS_HOST and REDIS_PORT env vars in CI 2025-01-23 18:02:28 +01:00
Yohan Boniface
222213ec87 fix(sync): add python redis package
Co-authored-by: David Larlet <david@larlet.fr>
2025-01-23 17:26:39 +01:00
Yohan Boniface
476c160fd5 wip(sync): clean stale username from redis
We wanted to use the HEXPIRE command, but discovered that this command
is only available since the Redis 7.4 version (the latest), and this version
does not have an OSI compliant licence, so it is generally not installable
through common packages managers. The OSS fork is Valkey, but it still does
not have the HEXPIRE command.

So we decide to clean those keys manually, and in order no do this clean
task at each websocket connection, we only do it when we are the first user
to connect to a given map.

Co-authored-by: David Larlet <david@larlet.fr>
2025-01-23 17:20:21 +01:00
Yohan Boniface
0d5e3047f4 wip(sync): only return peers with an active connection 2025-01-23 17:20:21 +01:00
Yohan Boniface
11fb29c456 wip(sync): log but do not crash when sending fail
This should be a race condition when sending to a closed websocket. Let's
log to track them.
2025-01-23 17:20:21 +01:00
Yohan Boniface
ef7c769abe wip(sync): remove a bit of server prints 2025-01-23 17:20:21 +01:00
Yohan Boniface
82342ea00f wip(sync): try a better pattern to unsubscribe to pubsub channels
When publishing a "STOP", this would unsubscribe every listener of the
channel.
2025-01-23 17:20:21 +01:00
Yohan Boniface
7e42331533 wip(sync): add Redis to CI and configure tests settings 2025-01-23 17:20:21 +01:00
Yohan Boniface
a07ee482ce wip(sync): use our async_live_server for websocket related PW tests
As now both http and ws are on the same domain, let's use one test server
able to serve both.

Co-authored-by: David Larlet <david@larlet.fr>
2025-01-23 17:20:20 +01:00
Yohan Boniface
1bf100d7a8 wip(sync): make the client set its peer id 2025-01-23 17:17:16 +01:00
Yohan Boniface
36d9e9bf06 wip(sync): use the correct URL for websocket
Co-authored-by: David Larlet <david@larlet.fr>
2025-01-23 17:17:16 +01:00
Yohan Boniface
acb2e967b8 wip(sync): POC of using Redis for pubsub
Co-authored-by: David Larlet <david@larlet.fr>
2025-01-23 17:17:16 +01:00
Yohan Boniface
ab7119e0a4 wip(sync): use Daphne as live_server for tests
Also clean dependencies.

We still use the channels live server for our tests, but do not use it
anymore for the actual websocket handling.
2025-01-23 17:17:13 +01:00
Yohan Boniface
460a0c9997 wip(sync): only open listen connections after authentication 2025-01-23 17:16:44 +01:00
Yohan Boniface
698c74b427 wip(sync): only save Peer after authentication 2025-01-23 17:16:44 +01:00
Yohan Boniface
a29eae138e wip(sync): websocket server with ASGI and PostgreSQL LISTEN/NOTIFY 2025-01-23 17:16:44 +01:00
Yohan Boniface
31546d6ff4 wip(sync): use django-channels to serve websockets
Co-authored-by: David Larlet <david@larlet.fr>
2025-01-23 17:16:44 +01:00
Yohan Boniface
83c3a41be5 fix: display a more usefull message when error in remote data
fix #2379
2025-01-23 12:04:25 +01:00
Yohan Boniface
48f9afdedd feat: move star button to caption
fix #2282
2025-01-23 11:25:09 +01:00
Yohan Boniface
8a207afaea
fix: do not consume ctrl-Z in textarea or input (#2441)
Some checks failed
Test & Docs / tests (postgresql, 3.10) (push) Has been cancelled
Test & Docs / tests (postgresql, 3.12) (push) Has been cancelled
Test & Docs / lint (push) Has been cancelled
Test & Docs / docs (push) Has been cancelled
fix #2422
2025-01-22 10:40:26 +01:00
Yohan Boniface
122d470e31 fix: do not consume ctrl-Z in textarea or input
fix #2422
2025-01-21 18:19:16 +01:00
Yohan Boniface
e7388f6cb0
chore: bump pymdown-extensions from 10.13 to 10.14 (#2435)
Some checks are pending
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
Test & Docs / docs (push) Waiting to run
2025-01-21 18:02:24 +01:00
Yohan Boniface
44dbf2f0df fix: fix circle icon no longer hihlighted
fix #2429
2025-01-21 11:46:57 +01:00
Yohan Boniface
f3b11b03bc fix: keep layer visibility after clicking on toggle all
fix #2430

Not exactly sure how to make this DRY. What we want is to mark the
layer visibility as "controlled by user" as soon as they click on a
show/hide/showAll/hideAll button, so we do not try to infer the
visibility from the from/toZoom settings.
2025-01-21 11:33:08 +01:00
dependabot[bot]
bb7cc86538
chore: bump pymdown-extensions from 10.13 to 10.14
Bumps [pymdown-extensions](https://github.com/facelessuser/pymdown-extensions) from 10.13 to 10.14.
- [Release notes](https://github.com/facelessuser/pymdown-extensions/releases)
- [Commits](https://github.com/facelessuser/pymdown-extensions/compare/10.13...10.14)

---
updated-dependencies:
- dependency-name: pymdown-extensions
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-21 09:53:57 +00:00
Yohan Boniface
30690bcb35
chore: bump mkdocs-material from 9.5.49 to 9.5.50 (#2433)
Some checks are pending
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
Test & Docs / docs (push) Waiting to run
2025-01-21 10:52:54 +01:00
dependabot[bot]
f7c9c469d1
chore: bump mkdocs-material from 9.5.49 to 9.5.50
Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.49 to 9.5.50.
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.49...9.5.50)

---
updated-dependencies:
- dependency-name: mkdocs-material
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-20 21:33:09 +00:00
Yohan Boniface
3c38a5e55e
chore: bump moto[s3] from 5.0.25 to 5.0.27 (#2436)
Some checks are pending
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
Test & Docs / docs (push) Waiting to run
2025-01-20 22:32:28 +01:00
Yohan Boniface
4430bddcc9
chore: bump ruff from 0.9.1 to 0.9.2 (#2434) 2025-01-20 22:32:06 +01:00
dependabot[bot]
9ba5dda507
chore: bump ruff from 0.9.1 to 0.9.2
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.9.1 to 0.9.2.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.9.1...0.9.2)

---
updated-dependencies:
- dependency-name: ruff
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-20 20:36:06 +00:00
dependabot[bot]
b15e333f6c
chore: bump moto[s3] from 5.0.25 to 5.0.27
Bumps [moto[s3]](https://github.com/getmoto/moto) from 5.0.25 to 5.0.27.
- [Release notes](https://github.com/getmoto/moto/releases)
- [Changelog](https://github.com/getmoto/moto/blob/master/CHANGELOG.md)
- [Commits](https://github.com/getmoto/moto/compare/5.0.25...5.0.27)

---
updated-dependencies:
- dependency-name: moto[s3]
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-20 20:35:47 +00:00
Yohan Boniface
4ce8f6515d
fix: test failing due to unstable FS ordering between OS (#2438) 2025-01-20 21:34:28 +01:00
Yohan Boniface
dc5a3a6b62 fix: test failing due to unstable FS ordering between OS 2025-01-20 21:12:06 +01:00
David Larlet
2ff2ee29ed
chore: bump pillow from 11.0.0 to 11.1.0 (#2417)
Some checks failed
Test & Docs / tests (postgresql, 3.10) (push) Has been cancelled
Test & Docs / tests (postgresql, 3.12) (push) Has been cancelled
Test & Docs / lint (push) Has been cancelled
Test & Docs / docs (push) Has been cancelled
2025-01-16 10:01:25 -05:00
David Larlet
02afc783cf
chore: bump django from 5.1.4 to 5.1.5 (#2432) 2025-01-16 10:00:56 -05:00
dependabot[bot]
f3fc24addf
chore: bump django from 5.1.4 to 5.1.5
Bumps [django](https://github.com/django/django) from 5.1.4 to 5.1.5.
- [Commits](https://github.com/django/django/compare/5.1.4...5.1.5)

---
updated-dependencies:
- dependency-name: django
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-16 14:52:18 +00:00
David Larlet
2beeda3c2f
chore: bump pydantic from 2.10.4 to 2.10.5 (#2427) 2025-01-16 09:51:48 -05:00
David Larlet
ac6e9a1021
chore: bump ruff from 0.8.4 to 0.9.1 (#2428) 2025-01-16 09:51:22 -05:00
dependabot[bot]
2428b0fd47
chore: bump ruff from 0.8.4 to 0.9.1
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.8.4 to 0.9.1.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.8.4...0.9.1)

---
updated-dependencies:
- dependency-name: ruff
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-13 17:24:40 +00:00
dependabot[bot]
20a1cf0c55
chore: bump pydantic from 2.10.4 to 2.10.5
Bumps [pydantic](https://github.com/pydantic/pydantic) from 2.10.4 to 2.10.5.
- [Release notes](https://github.com/pydantic/pydantic/releases)
- [Changelog](https://github.com/pydantic/pydantic/blob/main/HISTORY.md)
- [Commits](https://github.com/pydantic/pydantic/compare/v2.10.4...v2.10.5)

---
updated-dependencies:
- dependency-name: pydantic
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-13 17:24:27 +00:00
Yohan Boniface
f53d435dfd
chore: internalize FormBuilder (#2420)
Some checks failed
Test & Docs / lint (push) Has been cancelled
Test & Docs / docs (push) Has been cancelled
Test & Docs / tests (postgresql, 3.10) (push) Has been cancelled
Test & Docs / tests (postgresql, 3.12) (push) Has been cancelled
fix #2280 

That's a first step, which:
- internalize Formbuilder as a bunch of modules
- use Javascript classes instead of Leaflet ones
- remove dependencies to Leaflet (L.DomUtil…)
- replaces `L.FormBuilder` by `Form` (in theory generic, but not quite)
and `U.FormBuilder` by `MutatingForm` (knows about isDirty,
`inheritable` and such)

There is much more room for refactor, but let's do it step by step!
2025-01-11 14:29:55 +01:00
Yohan Boniface
07c29abbec chore(utils): use native events instead of array of callbacks for WithEvents
Co-authored-by: David Larlet <david@larlet.fr>
2025-01-10 16:44:48 +01:00
Yohan Boniface
86a8e17aec
fix(sync): handle sync of datalayer delete (#2416)
Some checks are pending
Test & Docs / lint (push) Waiting to run
Test & Docs / docs (push) Waiting to run
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
fix #2268

There is a tricky choice to do: the delete actually occurs in two
times, first the datalayer is hidden from the UI and set as "deleted"
(this can then be undone) then at next "save" it will totally removed.

When syncing, given we removed the "reset/undo" feature for now, and
because it was simpler, I decide to do both step in once.

When working on a proper "undo/redo", we may challenge this choice
again.
2025-01-10 16:34:47 +01:00
Yohan Boniface
75af1a4855 fix(sync): handle sync of datalayer delete
fix #2268

There is a tricky choice to do: the delete actually occurs in two
times, first the datalayer is hidden from the UI and set as "deleted"
(this can then be undone) then at next "save" it will totally removed.

When syncing, given we removed the "reset/undo" feature for now, and
because it was simpler, I decide to do both step in once.

When working on a proper "undo/redo", we may challenge this choice
again.
2025-01-10 16:33:46 +01:00
Yohan Boniface
0c52c35ae3 chore(tests): use name from data when defined in DataLayerFactory 2025-01-10 16:33:06 +01:00
Yohan Boniface
49cde00361
feat: display map's "created at" and "modified at" in the caption (#2424)
fix #2110 


![image](https://github.com/user-attachments/assets/a7db6197-4cc6-417e-b480-8e1434d73687)
2025-01-10 16:23:42 +01:00
Yohan Boniface
7072b5434a
fix: update map.modified_at when saving a datalayer (#2423)
fix #2421
2025-01-10 15:51:39 +01:00
Yohan Boniface
e7fe92c070 feat: display map's "created at" and "modified at" in the caption 2025-01-10 15:49:05 +01:00
Yohan Boniface
92b7be3ad9 fix: update map.modified_at when saving a datalayer
fix #2421
2025-01-10 12:01:13 +01:00
Yohan Boniface
0ba69e41d0 wip(forms): use events instead of callback 2025-01-09 13:02:04 +01:00
Yohan Boniface
fb4fecd337 chore(tests): fix sync tests 2025-01-09 13:00:59 +01:00
Yohan Boniface
b6c8d64c47 chore(forms): remove duplicate NullableBoolean field 2025-01-08 16:15:27 +01:00
Yohan Boniface
63e84d94c4 chore(forms): refactor icon preview of IconURL field 2025-01-08 16:14:36 +01:00
Yohan Boniface
176b8bdbcc wip(forms): refactor forms templating 2025-01-07 18:08:48 +01:00
Yohan Boniface
e0fadea749 chore: remove Leaflet dependency from form modules 2025-01-07 18:07:14 +01:00
Yohan Boniface
b88a0cc49f wip: internalize FormBuilder and move to module 2025-01-07 18:07:14 +01:00
dependabot[bot]
910995291d
chore: bump pillow from 11.0.0 to 11.1.0
Bumps [pillow](https://github.com/python-pillow/Pillow) from 11.0.0 to 11.1.0.
- [Release notes](https://github.com/python-pillow/Pillow/releases)
- [Changelog](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst)
- [Commits](https://github.com/python-pillow/Pillow/compare/11.0.0...11.1.0)

---
updated-dependencies:
- dependency-name: pillow
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-06 17:33:24 +00:00
Yohan Boniface
a7325dcb02
chore: bump mkdocs-material from 9.5.48 to 9.5.49 (#2411)
Some checks failed
Test & Docs / tests (postgresql, 3.10) (push) Has been cancelled
Test & Docs / tests (postgresql, 3.12) (push) Has been cancelled
Test & Docs / lint (push) Has been cancelled
Test & Docs / docs (push) Has been cancelled
2025-01-03 16:45:14 +01:00
Yohan Boniface
f69a3e18b7
chore: bump moto[s3] from 5.0.24 to 5.0.25 (#2410) 2025-01-03 16:44:54 +01:00
Yohan Boniface
c482a84abb
chore: bump pydantic from 2.10.3 to 2.10.4 (#2408) 2025-01-03 16:44:37 +01:00
Yohan Boniface
d79686cb31
chore: bump djlint from 1.36.3 to 1.36.4 (#2409) 2025-01-03 16:44:18 +01:00
Yohan Boniface
ebae9a8cd0
fix(sync): do not try to reconnect after end edit (#2412)
Some checks failed
Test & Docs / docs (push) Has been cancelled
Test & Docs / tests (postgresql, 3.10) (push) Has been cancelled
Test & Docs / tests (postgresql, 3.12) (push) Has been cancelled
Test & Docs / lint (push) Has been cancelled
We now set the "closeRequested" on the receiver itself, otherwise there
is a race condition between the reconnect (which create a new transport)
and the onclose checking closeRequest on an old transport.
2025-01-01 11:31:32 +01:00
Yohan Boniface
4164db357e
fix(sync): deactivate cancel and hide button when sync is active (#2413)
fix #2265

Let's reactivate when we have a proper undo-redo (cf #1107)
2025-01-01 11:31:14 +01:00
Yohan Boniface
ddeebd758c fix(sync): deactivate cancel and hide button when sync is active
cf #2265

Let's reactivate when we have a proper undo-redo (cf #1107)
2024-12-31 14:23:57 +01:00
Yohan Boniface
424cb70ac4 fix(sync): do not try to reconnect after end edit
We now save the "closeRequested" on the receiver itself, other wise
there is a race condition between the reconnect (which create a new
transport) and the onclose checking closeRequest on an old transport.
2024-12-31 14:17:30 +01:00
dependabot[bot]
7344c60baa
chore: bump mkdocs-material from 9.5.48 to 9.5.49
Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.48 to 9.5.49.
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.48...9.5.49)

---
updated-dependencies:
- dependency-name: mkdocs-material
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-30 17:39:36 +00:00
dependabot[bot]
5b5931dadb
chore: bump moto[s3] from 5.0.24 to 5.0.25
Bumps [moto[s3]](https://github.com/getmoto/moto) from 5.0.24 to 5.0.25.
- [Release notes](https://github.com/getmoto/moto/releases)
- [Changelog](https://github.com/getmoto/moto/blob/master/CHANGELOG.md)
- [Commits](https://github.com/getmoto/moto/compare/5.0.24...5.0.25)

---
updated-dependencies:
- dependency-name: moto[s3]
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-30 17:39:25 +00:00
dependabot[bot]
6c6698966d
chore: bump djlint from 1.36.3 to 1.36.4
Bumps [djlint](https://github.com/djlint/djLint) from 1.36.3 to 1.36.4.
- [Release notes](https://github.com/djlint/djLint/releases)
- [Changelog](https://github.com/djlint/djLint/blob/master/CHANGELOG.md)
- [Commits](https://github.com/djlint/djLint/compare/v1.36.3...v1.36.4)

---
updated-dependencies:
- dependency-name: djlint
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-30 17:39:18 +00:00
dependabot[bot]
2b6ae7227e
chore: bump pydantic from 2.10.3 to 2.10.4
Bumps [pydantic](https://github.com/pydantic/pydantic) from 2.10.3 to 2.10.4.
- [Release notes](https://github.com/pydantic/pydantic/releases)
- [Changelog](https://github.com/pydantic/pydantic/blob/main/HISTORY.md)
- [Commits](https://github.com/pydantic/pydantic/compare/v2.10.3...v2.10.4)

---
updated-dependencies:
- dependency-name: pydantic
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-30 17:39:13 +00:00
Stefan Warnat
d4df6aaae5
fix: Update ConfigMap reference name to fullname 2024-12-29 17:59:41 +01:00
Stefan Warnat
ed5e0c6aad
fix: reference secret-env by fullname instead release-name 2024-12-29 17:24:49 +01:00
Yohan Boniface
bf631f07de fix: display current configured oauth as icon instead of text 2024-12-17 11:44:13 +01:00
352 changed files with 18250 additions and 12261 deletions

View file

@ -5,7 +5,7 @@
"es6": true
},
"parserOptions": {
"ecmaVersion": 2020,
"ecmaVersion": 2021,
"sourceType": "module"
}
}

26
.github/workflows/release-helm.yml vendored Normal file
View file

@ -0,0 +1,26 @@
name: Release Charts
on:
push:
branches:
- master
jobs:
release:
# depending on default permission settings for your org (contents being read-only or read-write for workloads), you will have to add permissions
# see: https://docs.github.com/en/actions/security-guides/automatic-token-authentication#modifying-the-permissions-for-the-github_token
permissions:
contents: write
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Publish Helm charts
uses: stefanprodan/helm-gh-pages@v1.7.0
with:
charts_dir: charts
linting: off
token: ${{ secrets.GITHUB_TOKEN }}

View file

@ -4,7 +4,9 @@ on:
push:
branches: [master]
pull_request:
branches: [master]
path:
- umap/*
- pyproject.toml
jobs:
tests:
@ -20,7 +22,11 @@ jobs:
POSTGRES_PASSWORD: postgres
POSTGRES_DB: postgres
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
redis:
image: redis
options: --health-cmd "redis-cli ping" --health-interval 10s --health-timeout 5s --health-retries 5
ports:
- 6379:6379
strategy:
fail-fast: false
matrix:
@ -48,6 +54,8 @@ jobs:
DJANGO_SETTINGS_MODULE: 'umap.tests.settings'
UMAP_SETTINGS: 'umap/tests/settings.py'
PLAYWRIGHT_TIMEOUT: '20000'
REDIS_HOST: localhost
REDIS_PORT: 6379
lint:
runs-on: ubuntu-latest
steps:
@ -55,7 +63,7 @@ jobs:
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
python-version: '3.12'
- name: Install dependencies
run: |
python3 -m pip install -e .[test,dev]
@ -66,18 +74,3 @@ jobs:
- name: Run Docs
run: make docs
docs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install dependencies
run: |
python3 -m pip install -r docs/requirements.txt
- name: Run Docs
run: mkdocs build

View file

@ -1,10 +1,9 @@
# This part installs deps needed at runtime.
FROM python:3.11-slim AS common
FROM python:3.12-slim AS common
RUN apt-get update && \
apt-get install -y --no-install-recommends \
tini \
uwsgi \
sqlite3 \
libpq-dev \
gdal-bin \
@ -39,7 +38,7 @@ WORKDIR /srv/umap
COPY . /srv/umap
RUN /venv/bin/pip install .[docker,s3]
RUN /venv/bin/pip install .[docker,s3,sync]
FROM common

View file

@ -65,7 +65,7 @@ publish: ## Publish the Python package to Pypi
test: testpy testjs
testpy:
pytest -vv umap/tests/ --dist=loadgroup --reruns 1
pytest -vv umap/tests/ --dist=loadgroup --reruns 1 --maxfail 10
test-integration:
pytest -xv umap/tests/integration/ --dist=loadgroup

View file

@ -1,11 +1,7 @@
{
"files": {
"include": [
"umap/static/umap/js/**"
],
"ignore": [
"umap/static/umap/vendors/**"
]
"include": ["umap/static/umap/js/**"],
"ignore": ["umap/static/umap/vendors/**"]
},
"formatter": {
"enabled": true,
@ -22,7 +18,11 @@
"rules": {
"style": {
"useBlockStatements": "off",
"noShoutyConstants": "warn"
"noShoutyConstants": "warn",
"noParameterAssign": "off"
},
"complexity": {
"noForEach": "off"
},
"performance": {
"noDelete": "off"

View file

@ -66,7 +66,11 @@ spec:
{{- end }}
envFrom:
- secretRef:
name: {{ .Release.Name }}-env
{{- if .Values.umap.envFromSecret }}
name: {{ .Values.umap.envFromSecret }}
{{- else }}
name: {{ include "umap.fullname" . }}-env
{{- end }}
volumeMounts:
- name: config
mountPath: /etc/umap/
@ -80,7 +84,11 @@ spec:
volumes:
- name: config
secret:
secretName: {{ .Release.Name }}-config
{{- if .Values.umap.configFromSecret }}
secretName: {{ .Values.umap.configFromSecret }}
{{- else }}
secretName: {{ include "umap.fullname" . }}-config
{{- end }}
- name: statics
emptyDir: {}
{{- if .Values.persistence.enabled }}

View file

@ -1,3 +1,4 @@
{{ if not .Values.umap.configFromSecret }}
apiVersion: v1
kind: Secret
metadata:
@ -7,3 +8,4 @@ metadata:
type: Opaque
data:
umap.conf: {{ .Values.umap.config | b64enc }}
{{- end }}

View file

@ -1,3 +1,4 @@
{{ if not .Values.umap.envFromSecret }}
apiVersion: v1
kind: Secret
metadata:
@ -9,3 +10,4 @@ data:
{{- range $key, $value := .Values.umap.environment }}
{{ $key }}: "{{ $value | b64enc }}"
{{- end }}
{{- end }}

View file

@ -77,11 +77,18 @@ umap:
SECRET_KEY: CHANGE_ME
STATIC_ROOT: /srv/umap/static
MEDIA_ROOT: /srv/umap/uploads
# Configure environment variables using an existing secret in the same namespace.
# In this case the values above are not used
envFromSecret: null
# You can also provide umap.conf content here:
config: |
from umap.settings.base import *
# See: https://github.com/umap-project/umap/blob/master/umap/settings/local.py.sample
# Configure config file using an existing secret in the same namespace.
# In this case the values above are not used
configFromSecret: null
persistence:
enabled: true

View file

@ -1,5 +1,15 @@
services:
# Usefull only to use the real time collaboration
redis:
image: redis:latest
healthcheck:
test: ["CMD-SHELL", "redis-cli ping | grep PONG"]
interval: 1s
timeout: 3s
retries: 5
command: ["redis-server"]
db:
healthcheck:
test: [ "CMD-SHELL", "pg_isready -U postgres" ]
@ -14,18 +24,35 @@ services:
depends_on:
db:
condition: service_healthy
image: umap/umap:2.0.2
ports:
- "${PORT-8000}:8000"
redis:
condition: service_healthy
image: umap/umap:3.0.2
environment:
- STATIC_ROOT=/srv/umap/static
- MEDIA_ROOT=/srv/umap/uploads
- DATABASE_URL=postgis://postgres@db/postgres
- SECRET_KEY=some-long-and-weirdly-unrandom-secret-key
- SITE_URL=https://umap.local/
- UMAP_ALLOW_ANONYMOUS=True
- DEBUG=1
- REALTIME_ENABLED=1
- REDIS_URL=redis://redis:6379
volumes:
- data:/srv/umap/uploads
- static:/srv/umap/static
proxy:
image: nginx:latest
ports:
- "8000:80"
volumes:
- ./docker/nginx.conf:/etc/nginx/nginx.conf:ro
- static:/static:ro
- data:/data:ro
depends_on:
- app
volumes:
data:
static:
db:

View file

@ -9,5 +9,5 @@ umap collectstatic --noinput
umap wait_for_database
# then migrate the database
umap migrate
# run uWSGI
exec uwsgi --ini docker/uwsgi.ini
# run the server
exec uvicorn --proxy-headers --no-access-log --host 0.0.0.0 umap.asgi:application

111
docker/nginx.conf Normal file
View file

@ -0,0 +1,111 @@
events {
worker_connections 1024; # Adjust this to your needs
}
http {
proxy_cache_path /tmp/nginx_ajax_proxy_cache levels=1:2 keys_zone=ajax_proxy:10m inactive=60m;
proxy_cache_key "$uri$is_args$args";
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
types {
application/javascript mjs;
}
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# Server block
server {
listen 80;
server_name localhost;
# Static file serving
location /static/ {
alias /static/;
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_types text/plain application/javascript application/x-javascript text/javascript text/xml text/css;
expires 365d;
access_log /dev/null;
}
# Geojson files
location /uploads/ {
alias /data/;
expires 30d;
}
location /favicon.ico {
alias /static/favicon.ico;
}
# X-Accel-Redirect
location /internal/ {
internal;
gzip_vary on;
gzip_static on;
add_header X-DataLayer-Version $upstream_http_x_datalayer_version;
alias /data/;
}
# Ajax proxy
location ~ ^/proxy/(.*) {
internal;
add_header X-Proxy-Cache $upstream_cache_status always;
proxy_cache_background_update on;
proxy_cache_use_stale updating;
proxy_cache ajax_proxy;
proxy_cache_valid 1m; # Default. Umap will override using X-Accel-Expires
set $target_url $1;
# URL is encoded, so we need a few hack to clean it back.
if ( $target_url ~ (.+)%3A%2F%2F(.+) ){ # fix :// between scheme and destination
set $target_url $1://$2;
}
if ( $target_url ~ (.+?)%3A(.*) ){ # fix : between destination and port
set $target_url $1:$2;
}
if ( $target_url ~ (.+?)%2F(.*) ){ # fix / after port, the rest will be decoded by proxy_pass
set $target_url $1/$2;
}
resolver 8.8.8.8;
add_header X-Proxy-Target $target_url; # For debugging
proxy_pass_request_headers off;
proxy_set_header Content-Type $http_content_type;
proxy_set_header Content-Encoding $http_content_encoding;
proxy_set_header Content-Length $http_content_length;
proxy_read_timeout 10s;
proxy_connect_timeout 5s;
proxy_ssl_server_name on;
proxy_pass $target_url;
proxy_intercept_errors on;
error_page 301 302 307 = @handle_proxy_redirect;
}
location @handle_proxy_redirect {
resolver 8.8.8.8;
set $saved_redirect_location '$upstream_http_location';
proxy_pass $saved_redirect_location;
}
# Proxy pass to ASGI server
location / {
proxy_pass http://app:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_redirect off;
proxy_buffering off;
}
}
}

View file

@ -1,26 +0,0 @@
[uwsgi]
http = :$(PORT)
home = /venv
module = umap.wsgi:application
master = True
vacuum = True
max-requests = 5000
processes = 4
enable-threads = true
static-map = /static=/srv/umap/static
static-map = /uploads=/srv/umap/uploads
buffer-size = 32768
; Run the websocket server only when the env variable
; WEBSOCKET_ENABLED is set to True.
; This is enough for the base docker image, but does not
; take into account the settings as the source of truth.
if-env = WEBSOCKET_ENABLED
websocket_enabled = %(_)
endif =
if-opt = websocket_enabled=True
print = Starting the Websocket Server (WEBSOCKET_ENABLED=%(websocket_enabled))
attach-daemon = umap run_websocket_server
endif =
lazy-apps = true

View file

@ -1,5 +1,11 @@
# Articles
## [Créer des cartes interactives personnalisées : uMap ou Leaflet ?](https://www.d-booker.fr/content/242-creer-des-cartes-interactives-personnalisees-umap-ou-leaflet) (2025-02-01)
> Dans ce guide, nous comparerons deux solutions libres populaires : uMap, une plateforme en ligne intuitive, et Leaflet, une bibliothèque JavaScript puissante.
[Article complet →](https://www.d-booker.fr/content/242-creer-des-cartes-interactives-personnalisees-umap-ou-leaflet){ .md-button }
## [Vers uMap 3 😱](https://www.openstreetmap.org/user/David%20Larlet/diary/404654#vers-umap-3-) (2024-07-16)
> La dernière version 2.4.X ouvre la voie à deux fonctionnalités majeures demandées : la collaboration en temps réel et les assistants dimport de données à distance en un clic.

View file

@ -1,5 +1,5 @@
# Force rtfd to use a recent version of mkdocs
mkdocs==1.6.1
pymdown-extensions==10.13
mkdocs-material==9.5.48
mkdocs-static-i18n==1.2.3
pymdown-extensions==10.14.3
mkdocs-material==9.6.12
mkdocs-static-i18n==1.3.0

View file

@ -1,5 +1,211 @@
# Changelog
## 3.0.5 - 2025-04-25
* allow to save a remote data with unloaded data by @yohanboniface in #2657
* allow to save/undo/sync drag'n'drop of datalayers by @yohanboniface in #2677
* setting center and zoom manually should set dirty status by @yohanboniface in #2676
* fix error when saving and deleting heatmap layer by @yohanboniface in #2681
* make rules reordering syncable, savable and undoable by @yohanboniface in #2672
* loading remote data should not make the map dirty by @yohanboniface in #2679
* implement a design system for UI consistency by @davidbgk in #2654
* pass CSRF_TRUSTED_ORIGINS env to settings by @lippoliv in #2656
* do not display "saved" message if some request failed by @yohanboniface in #2669
* show an error message if saving layer failed by @yohanboniface in #2670
* naive support for GeometryCollection as Feature geometry by @yohanboniface in #2658
* add a back button in rules form by @yohanboniface in #2673
## New Contributors
* @lippoliv made their first contribution in #2656
## 3.0.4 - 2025-04-14
* do not show "back to home" button in iframes by @yohanboniface in #2644
* remove "hide home button" shown twice in map settings by @yohanboniface in #2645
* adapt Helm chart to match La Suite's expectations by @ohemelaar in #2646
* update colors by @yohanboniface in #2647
## 3.0.3 - 2025-04-11
* do not try to remove a feature not yet added by @yohanboniface in #2637
* document that nginx needs to be added in Docker stack to serve statics by @yohanboniface in #2636
* display back help button in switch fields by @yohanboniface in #2634
* use Last-Modified header from remote data when available by @yohanboniface in #2624
* fix text overflow on search results by @yohanboniface in #2628
* redirect to user dashboard after map delete by @yohanboniface in #2626
* add missing margin-bottom in importers by @yohanboniface in #2627
* fix pictogram categories always hidden by @yohanboniface in #2630
* display search category on list page by @davidbgk in #2635
* allow to hide the layer switcher from bottom bar by @davidbgk in #2639
* hidden download button in browser when embedControl=false by @yohanboniface in #2640
* allow to hide the back to home button by @davidbgk in #2638
## 3.0.2 - 2025-04-08
* fix copiable input CSS by @yohanboniface in #2616
* fix categorized layer crashing with null value by @yohanboniface in #2621
* properly call endEdit for markers by @yohanboniface in #2617
* fix result tools buttons background color by @yohanboniface in #2620
* fix min-height of select in caption bar by @yohanboniface in #2622
* give priority to small usernames on autocomplete by @yohanboniface in #2604
## 3.0.1 - 2025-04-07
* fix showLabel wrongly using MultiChoices by @yohanboniface in #2609
## 3.0.0 - 2025-04-07
This is the first release to officially support colaborative real-time map editing.
It introduces ASGI deployement, to support websockets, and adds Redis in the stack.
But it's still possible to continue deploying in WSGI for now, and Redis is only
mandatory when using the real-time feature.
How to use the real-time editing feature in your instance:
- you need to deploy with ASGI, see https://docs.umap-project.org/en/stable/deploy/asgi/
- you need to set `REALTIME_ENABLED=True` in your settings
Other notable changes:
- a first version of a real undo/redo
- map categories; those are defined through the `UMAP_TAGS` settings
Note: you may want to update your search index to include the category search,
see https://docs.umap-project.org/en/stable/config/settings/#umap_search_configuration
### Breaking change
* The Docker image will not serve assets and data files anymore, an Nginx container must
be configured. See [docker-compose.yml](https://github.com/umap-project/umap/blob/master/docker-compose.yml)
for an example.
### New features
* add collaborative real-time map editing
* add atomic undo redo by @yohanboniface in #2570
* expose active sessions in stats endpoint by @yohanboniface in #2544
* add more users counts in /stats/ by @yohanboniface in #2555
* add new "Back to home" icon by @yohanboniface in #2551
* add experimental BAN importer by @yohanboniface in #2565
* add titles in the text formatting dialog by @yohanboniface in #2584
* layers selector in bottom bar by @yohanboniface in #2579
* display maps list as a grid now by @yohanboniface in #2590
* add Map.tags and allow to edit from client by @yohanboniface in #2530
* add minimal "raw" icon shape by @yohanboniface in #2597
### Bug fixes
* cast value to string before calling trim by @yohanboniface in #2567
* import iconUrl as absolute when possible by @yohanboniface in #2563
* iconUrl field was broken on older browsers by @yohanboniface in #2575
* do not fail when trying to read metadata of a missing geojson by @yohanboniface in #2592
* remote data loading on import from umap backup by @davidbgk in #2598
* do not export layer ids in umap backup by @davidbgk in #2600
* use the multichoices for ttl in remote data form by @davidbgk in #2599
### Internal changes
* refactor search UX by @yohanboniface in #2545
* new icon, colors and title for search buttons by @yohanboniface in #2556
* use real redraw for datalayer, instead of hide/show by @yohanboniface in #2568
* order importers by name instead of id by @yohanboniface in #2578
* update the Dockerfile to expose websockets by @almet in #2576
* remove confirm delete for features and datalayers by @yohanboniface in #2603
### Accessibility
* a11y: turn embeded maps into inert elements by @davidbgk in #2533
### Changed templates
- auth/user_detail.html
- auth/user_stars.html
- umap/content.html
- umap/home.html
- umap/map_fragment.html
- umap/map_list.html
- umap/search.html
- umap/search_bar.html
- umap/team_detail.html
## 2.9.3 - 2025-03-07
* be explicit in the message that logout is needed after adding a new oauth provider
## 2.9.2 - 2025-03-04
* measure/drawing tooltip was misplaced by @yohanboniface in #2541
* be defensive when getting the backend name from the session by @yohanboniface in #2540
## 2.9.1 - 2025-03-03
* be more persuasive in deprecating twitter login backend by @yohanboniface in #2538
## 2.9.0 - 2025-03-03
This release is mainly about making the sync feature deployable and more stable (but still
not yet activated by default).
### New features
* display map's "created at" and "modified at" in the caption by @yohanboniface in #2424
* allow to define sortKey at layer level by @yohanboniface in #2449
* move star button to caption by @yohanboniface in #2442
* add a debounce for Input and Textarea fields by @yohanboniface in #2445
* soft delete datalayers by @yohanboniface in #2459
* add DEPRECATED_AUTHENTICATION_PROVIDERS setting by @yohanboniface in #2461
* expose teams in users CSV export by @davidbgk in #2484
* add title attribute to layers in browser by @yohanboniface in #2489
* make the tooltip sticky in hover mode for paths by @yohanboniface in #2507
* make vertex icons bigger (and round) by @yohanboniface in #2506
* add a quick link to layer's permalink by @yohanboniface in #2529
### Bug fixes
* display a more usefull message when error in remote data by @yohanboniface in #2443
* fix circle icon no longer hihlighted by @yohanboniface in #2440
* keep layer visibility after clicking on toggle all by @yohanboniface in #2439
* update map.modified_at when saving a datalayer by @yohanboniface in #2423
* do not consume ctrl-Z in textarea or input by @yohanboniface in #2441
* Fix categorized layers colors palette not updating by @yohanboniface in #2447
* reference secret-env by fullname instead release-name by @swarnat in #2406
* correctly parse http link including another http link in the path by @yohanboniface in #2460
* display current configured oauth as icon instead of text by @yohanboniface in #2375
* better buttons positionning for the homepage by @davidbgk in #2463
* catch cluster error at zoom in certain situation by @yohanboniface in #2464
* display a more descriptive alert on invalid geojson error by @yohanboniface in #2466
* do not try to backup an undefined geojson by @yohanboniface in #2468
* do not error when escape during marker creation by @davidbgk in #2483
* do not import empty features by @yohanboniface in #2485
* do not display an error for an empty CSV by @yohanboniface in #2505
* try to reconnect after network error when getting token by @yohanboniface in #2502
* wait for websocket full connection by @yohanboniface in #2503
* feature edit status not disabled on hide by @yohanboniface in #2534
### Internal changes
* deactivate cancel and hide button when sync is active by @yohanboniface in #2413
* do not try to reconnect after end edit by @yohanboniface in #2412
* handle sync of datalayer delete by @yohanboniface in #2416
* internalize FormBuilder by @yohanboniface in #2420
* POC of using Redis for pubsub by @yohanboniface in #2426
* include site description within page titles by @davidbgk in #2455
* Sync show usernames by @yohanboniface in #2444
* only allow to set a map as sync when it is already saved by @yohanboniface in #2465
* move DrawToolbar and SettingsToolbar to bar.js module by @yohanboniface in #2482
* add very minimal documentation for deploying uMap with ASGI by @yohanboniface in #2480
* use default value from schema for non inheritable fields by @yohanboniface in #2513
* sync save state by @yohanboniface in #2487
* use our contexmenu class for inplace toolbar by @yohanboniface in #2510
* make sure we sync a line when hitting esc while drawing by @yohanboniface in #2526
* make datalayer upsert idempotent by @yohanboniface in #2528
### Accessibility
* set an aria-label for unlabelled search input by @davidbgk in #2531
* switch to better contrasted links by @davidbgk in #2532
### New Contributors
* @swarnat made their first contribution in #2406
## 2.8.2 - 2024-12-26
### Bug fixes

View file

@ -28,6 +28,14 @@ Can be set through env var too: `ALLOWED_HOSTS=umap.mydomain.org,u.mydomain.org`
Set it to `True` for easier debugging in case of error.
#### DEPRECATED_AUTHENTICATION_BACKENDS
List of auth backends to deprecate. Defining this will display a message to
all users using this provider, to encourage them to configure another provider to
their account.
DEPRECATED_AUTHENTICATION_BACKENDS = ["social_core.backends.twitter_oauth2.TwitterOAuth2"]
#### EMAIL_BACKEND
Must be configured if you want uMap to send emails to anonymous users.
@ -80,6 +88,19 @@ Nginx configuration.
See [Django documentation for MEDIA_ROOT](https://docs.djangoproject.com/en/4.2/ref/settings/#media-root)
#### REALTIME_ENABLED
Setting `REALTIME_ENABLED` to `True` will allow users to enable real-time collaboration.
A switch will be available for them in the "advanced properties" of the map.
See [the documentation about ASGI deployment](../deploy/asgi.md) for more information.
#### REDIS_URL
Connection URL to the Redis server. Only need for the real-time editing.
Default: `redis://localhost:6379`
#### SECRET_KEY
Must be defined to something unique and secret.
@ -98,7 +119,12 @@ Eg.: `SHORT_SITE_URL=https://u.umap.org`
#### SITE_NAME
The name of the site, to be used in header and HTML title.
The name of the site, to be used in header.
#### SITE_DESCRIPTION
The description of the site, to be used in HTML title.
#### SITE_URL
@ -108,6 +134,13 @@ The final URL of you instance, including the protocol:
`SITE_URL=http://umap.org`
#### SOCIAL_AUTH_OPENSTREETMAP_OAUTH2_KEY, SOCIAL_AUTH_OPENSTREETMAP_OAUTH2_SECRET
If you use OpenStreetMap as OAuth 2 provider, you can use those settings.
Otherwise, use any valid [python-social-auth configuration](https://python-social-auth.readthedocs.io/en/latest/configuration/django.html).
#### STATIC_ROOT
Where uMap should store static files (CSS, JS…), must be consistent with your
@ -310,7 +343,10 @@ CREATE EXTENSION btree_gin;
ALTER TEXT SEARCH CONFIGURATION umapdict ALTER MAPPING FOR hword, hword_part, word WITH unaccent, simple;
# Now create the index
CREATE INDEX IF NOT EXISTS search_idx ON umap_map USING GIN(to_tsvector('umapdict', COALESCE(name, ''::character varying)::text), share_status);
CREATE INDEX IF NOT EXISTS search_idx ON umap_map USING GIN(to_tsvector('umapdict', COALESCE(name, ''::character varying)::text), share_status, tags);
# You should also create an index for tag filtering:
CREATE INDEX IF NOT EXISTS tags_idx ON umap_map USING GIN(share_status, tags);
```
Then set:
@ -332,61 +368,3 @@ Should uMap gzip datalayers geojson.
Can be set to `X-Accel-Redirect` to enable the [NGINX X-Accel](https://www.nginx.com/resources/wiki/start/topics/examples/xsendfile/) feature.
See the NGINX documentation in addition.
#### SOCIAL_AUTH_OPENSTREETMAP_OAUTH2_KEY, SOCIAL_AUTH_OPENSTREETMAP_OAUTH2_SECRET
If you use OpenStreetMap as OAuth 2 provider, you can use those settings.
Otherwise, use any valid [python-social-auth configuration](https://python-social-auth.readthedocs.io/en/latest/configuration/django.html).
#### WEBSOCKET_ENABLED
A WebSocket server is packaged with uMap, and can be turned-on to activate
"real-time collaboration". In practice, in order to enable it, a few settings
are exposed.
Setting `WEBSOCKET_ENABLED` to `True` will **not** enable real-time
collaboration on all the maps served by the server. Instead, a switch will be
available in the "advanced properties" of the map.
The websocket server can be started with the following command:
```bash
umap run_websocket_server
```
And can take optional settings `--host` and `--port` (default values are defined in
the settings).
Configuration example:
```python
WEBSOCKET_ENABLED = True
WEBSOCKET_BACK_HOST = "localhost"
WEBSOCKET_BACK_PORT = 8002
WEBSOCKET_FRONT_URI = "ws://localhost:8002"
```
These settings can also be set with the (same names) environment variables.
#### WEBSOCKET_BACK_HOST
#### WEBSOCKET_BACK_PORT
The internal host and port the websocket server will connect to.
#### WEBSOCKET_FRONT_URI
The connection string that will be used by the client to connect to the
websocket server. In practice, as it's useful to put the WebSocket server behind
TLS encryption, the values defined by `WEBSOCKET_FRONT_URI` are different than
the values defined by `WEBSOCKET_BACK_PORT` and `WEBSOCKET_BACK_HOST`.
This value is comprised of three parts:
```
protocol://host:port
```
- `protocol`: can either be `ws` for plain unencrypted WebSockets, or `wss` when using TLS encryption.
- `host`: is the address where the connection will be sent. It should be public facing.
- `port`: is the port that is open on the host.

92
docs/deploy/asgi.md Normal file
View file

@ -0,0 +1,92 @@
# ASGI
While uMap has been historically deployed using the WSGI specification,
there is now an **experimental** ASGI endpoint. This will be the way to
deploy uMap to use the live collaborative editing feature, which needs
websockets.
## Nginx
When using ASGI, the [nginx](nginx.md), the `/` entrypoint should be:
```
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_redirect off;
proxy_buffering off;
proxy_pass http://umap/;
}
```
Also add this mapping for the `$connection_upgrade` variable:
```
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
```
## Uvicorn
Uvicorn must be installed in the umap virtualenv:
/path/to/umap/venv/bin/pip install uvicorn
And could then be run like this:
/path/to/umap/venv/bin/uvicorn \
--proxy-headers \
--uds /srv/umap/umap.sock \
--no-access-log \
umap.asgi:application
## Systemd
Here is an example service to manage uvicorn with systemd:
```
[Unit]
Description=umap
After=network.target
Requires=postgresql.service
[Service]
Type=simple
User=umap
WorkingDirectory=/srv/umap/
PrivateTmp=true
EnvironmentFile=/srv/umap/env
ExecStart=/srv/umap/venv/bin/uvicorn \
--proxy-headers \
--uds /srv/umap/uvicorn.sock \
--no-access-log \
umap.asgi:application
ExecReload=/bin/kill -HUP ${MAINPID}
RestartSec=1
Restart=always
[Install]
WantedBy=multi-user.target
```
Then to install it and enable it, copy it to `/etc/systemd/system/umap.service`
and run:
sudo systemctl enable umap.service
## Env
Uvicorn can be [configured](https://www.uvicorn.org/deployment/) from env vars,
for example to define the number of workers:
```env title="/srv/umap/env"
UVICORN_WORKERS=4
```

View file

@ -14,7 +14,7 @@ services:
app:
# Check https://hub.docker.com/r/umap/umap/tags to find the latest version
image: umap/umap:2.0.2
image: umap/umap:2.9.3
ports:
# modify the external port (8001, on the left) if desired, but make sure it matches SITE_URL, below
- "8001:8000"
@ -48,3 +48,45 @@ User accounts can be managed via the Django admin page ({SITE_URL}/admin). The r
```bash
umap createsuperuser
```
## Developping with Docker
If you want to develop with podman or docker, here are commands that might be useful, given that you have a postgreSQL server running locally and that your settings are located at `umap.conf`:
You can build the docker image with:
```bash
podman build -t umap .
```
And run it with:
```bash
podman run -v ./umap.conf:/tmp/umap.conf -e UMAP_SETTINGS=/tmp/umap.conf -it --network host umap
```
## Real time collaboration
To enable real time collaboration when using Docker, a Redis service must be added. Something like this in `docker-compose.py` world:
```yaml title="docker-compose.yml"
services
redis:
image: redis:latest
healthcheck:
test: ["CMD-SHELL", "redis-cli ping | grep PONG"]
command: ["redis-server"]
app:
depends_on:
redis:
condition: service_healthy
environment:
- REALTIME_ENABLED=1
- REDIS_URL=redis://redis:6379
```

View file

@ -1,84 +1,10 @@
# Configuring Nginx
Here are some configuration files to use umap with nginx and [uWSGI](https://uwsgi-docs.readthedocs.io/en/latest/), a server for python, which will handle your processes for you.
See [WSGI](wsgi.md) or [ASGI](asgi.md) for a basic setup.
```nginx title="nginx.conf"
upstream umap {
server unix:///srv/umap/uwsgi.sock;
}
Then consider adding this configuration
server {
# the port your site will be served on
listen 80;
listen [::]:80;
listen 443 ssl;
listen [::]:443 ssl;
# the domain name it will serve for
server_name your-domain.org;
charset utf-8;
# max upload size
client_max_body_size 5M; # adjust to taste
# Finally, send all non-media requests to the Django server.
location / {
uwsgi_pass umap;
include /srv/umap/uwsgi_params;
}
}
```
## uWSGI
```nginx title="uwsgi_params"
uwsgi_param QUERY_STRING $query_string;
uwsgi_param REQUEST_METHOD $request_method;
uwsgi_param CONTENT_TYPE $content_type;
uwsgi_param CONTENT_LENGTH $content_length;
uwsgi_param REQUEST_URI $request_uri;
uwsgi_param PATH_INFO $document_uri;
uwsgi_param DOCUMENT_ROOT $document_root;
uwsgi_param SERVER_PROTOCOL $server_protocol;
uwsgi_param REQUEST_SCHEME $scheme;
uwsgi_param HTTPS $https if_not_empty;
uwsgi_param REMOTE_ADDR $remote_addr;
uwsgi_param REMOTE_PORT $remote_port;
uwsgi_param SERVER_PORT $server_port;
uwsgi_param SERVER_NAME $server_name;
```
```ini title="uwsgi.ini"
[uwsgi]
uid = umap
gid = users
# Python related settings
# the base directory (full path)
chdir = /srv/umap/
# umap's wsgi module
module = umap.wsgi
# the virtualenv (full path)
home = /srv/umap/venv
# process-related settings
# master
master = true
# maximum number of worker processes
processes = 4
# the socket (use the full path to be safe)
socket = /srv/umap/uwsgi.sock
# ... with appropriate permissions - may be needed
chmod-socket = 666
stats = /srv/umap/stats.sock
# clear environment on exit
vacuum = true
plugins = python3
```
## Static files
## Static files and geojson
```nginx title="nginx.conf"
location /static {
@ -121,3 +47,48 @@ UMAP_XSENDFILE_HEADER = 'X-Accel-Redirect'
alias /path/to/umap/var/data/;
}
```
## Ajax proxy
In order for users to load CORS protected data within a map, Nginx can act as a proxy.
Here is an example configuration for this:
```
location ~ ^/proxy/(.*) {
internal;
add_header X-Proxy-Cache $upstream_cache_status always;
proxy_cache_background_update on;
proxy_cache_use_stale updating;
proxy_cache ajax_proxy;
proxy_cache_valid 1m; # Default. Umap will override using X-Accel-Expires
set $target_url $1;
# URL is encoded, so we need a few hack to clean it back.
if ( $target_url ~ (.+)%3A%2F%2F(.+) ){ # fix :// between scheme and destination
set $target_url $1://$2;
}
if ( $target_url ~ (.+?)%3A(.*) ){ # fix : between destination and port
set $target_url $1:$2;
}
if ( $target_url ~ (.+?)%2F(.*) ){ # fix / after port, the rest will be decoded by proxy_pass
set $target_url $1/$2;
}
resolver 8.8.8.8;
add_header X-Proxy-Target $target_url; # For debugging
proxy_pass_request_headers off;
proxy_set_header Content-Type $http_content_type;
proxy_set_header Content-Encoding $http_content_encoding;
proxy_set_header Content-Length $http_content_length;
proxy_read_timeout 10s;
proxy_connect_timeout 5s;
proxy_ssl_server_name on;
proxy_pass $target_url;
proxy_intercept_errors on;
error_page 301 302 307 = @handle_proxy_redirect;
}
location @handle_proxy_redirect {
resolver 8.8.8.8;
set $saved_redirect_location '$upstream_http_location';
proxy_pass $saved_redirect_location;
}
```

37
docs/deploy/overview.md Normal file
View file

@ -0,0 +1,37 @@
# Deploying uMap
uMap is a python package, running [Django](https://docs.djangoproject.com/en/5.2/howto/deployment/),
so anyone experimented with this stack will find it familiar, but there are some speficic details
to know about.
## Data
One important design point of uMap is that while metadata are stored in a PostgreSQL database, the
data itself is stored in the file system, as geojson files. This design choice has been made
to make uMap scale better, as there are much more reads than writes, and when some
map is shared a lot (like on a national media) we want to be able to serve it without needing an
overcomplex and costly stack.
So when a request for data is made (that is on a *DataLayer*), the flow is that uMap will read
the request headers to check for permissions, and then it will forward the request to Nginx,
that will properly serve the data (a geojson file), without consuming a python worker, and with
much more efficiency than python.
In DEBUG mode, uMap will serve the geojson itself, but this is not recommended in production,
unless you have a very small audience.
Data can also be stored in a [S3 like storage](../config/storage/#using-s3).
## Assets (JS, CSS…)
As any web app, uMap also needs static files to be served. In DEBUG mode, Django will do this
kindly, but not in production. See [Nginx configuration](nginx.md) for this.
Assets can also be stored in a [S3 like storage](../config/storage/#using-s3).
## python app (metadata, permissions…)
uMap needs a python server, which can either be of [WSGI](wsgi.md) or [ASGI](asgi.md) (this later
is needed in order to use the collaborative live editing).
## Redis
Still when using the collaborative live editing, uMap needs a [Redis](../config/settings.md#redis_url) server, to act as pubsub.

87
docs/deploy/wsgi.md Normal file
View file

@ -0,0 +1,87 @@
# WSGI
WSGI is the historical standard to serve python in general, and uMap in this case.
From recently, uMap also supports [ASGI](asgi.md), which is required to use the
collaborative editing feature.
## uWSGI
In Nginx host, use:
```nginx title="nginx.conf"
upstream umap {
server unix:///srv/umap/umap.sock;
}
server {
# the port your site will be served on
listen 80;
listen [::]:80;
listen 443 ssl;
listen [::]:443 ssl;
# the domain name it will serve for
server_name your-domain.org;
charset utf-8;
# max upload size
client_max_body_size 5M; # adjust to taste
# Finally, send all non-media requests to the Django server.
location / {
uwsgi_pass umap;
include /srv/umap/uwsgi_params;
}
}
```
```nginx title="uwsgi_params"
uwsgi_param QUERY_STRING $query_string;
uwsgi_param REQUEST_METHOD $request_method;
uwsgi_param CONTENT_TYPE $content_type;
uwsgi_param CONTENT_LENGTH $content_length;
uwsgi_param REQUEST_URI $request_uri;
uwsgi_param PATH_INFO $document_uri;
uwsgi_param DOCUMENT_ROOT $document_root;
uwsgi_param SERVER_PROTOCOL $server_protocol;
uwsgi_param REQUEST_SCHEME $scheme;
uwsgi_param HTTPS $https if_not_empty;
uwsgi_param REMOTE_ADDR $remote_addr;
uwsgi_param REMOTE_PORT $remote_port;
uwsgi_param SERVER_PORT $server_port;
uwsgi_param SERVER_NAME $server_name;
```
```ini title="uwsgi.ini"
[uwsgi]
uid = umap
gid = users
# Python related settings
# the base directory (full path)
chdir = /srv/umap/
# umap's wsgi module
module = umap.wsgi
# the virtualenv (full path)
home = /srv/umap/venv
# process-related settings
# master
master = true
# maximum number of worker processes
processes = 4
# the socket (use the full path to be safe)
socket = /srv/umap/umap.sock
# ... with appropriate permissions - may be needed
chmod-socket = 666
stats = /srv/umap/stats.sock
# clear environment on exit
vacuum = true
plugins = python3
```
See also [Django documentation](https://docs.djangoproject.com/en/5.2/howto/deployment/wsgi/).

View file

@ -1,5 +1,5 @@
# Force rtfd to use a recent version of mkdocs
mkdocs==1.6.1
pymdown-extensions==10.13
mkdocs-material==9.5.48
mkdocs-static-i18n==1.2.3
pymdown-extensions==10.14.3
mkdocs-material==9.6.12
mkdocs-static-i18n==1.3.0

View file

@ -18,9 +18,12 @@ nav:
- Storage: config/storage.md
- Icon packs: config/icons.md
- Deployment:
- Overview: deploy/overview.md
- Docker: deploy/docker.md
- Helm: deploy/helm.md
- Nginx: deploy/nginx.md
- ASGI: deploy/asgi.md
- WSGI: deploy/wsgi.md
- Changelog: changelog.md
theme:
name: material

View file

@ -38,16 +38,15 @@
"dependencies": {
"@dwayneparton/geojson-to-gpx": "^0.2.0",
"@placemarkio/tokml": "0.3.4",
"@tmcw/togeojson": "^5.8.0",
"@tmcw/togeojson": "^7.1.0",
"colorbrewer": "1.5.7",
"csv2geojson": "github:umap-project/csv2geojson#patched",
"dompurify": "3.1.7",
"dompurify": "3.2.4",
"georsstogeojson": "^0.2.0",
"jsdom": "^24.0.0",
"leaflet": "1.9.4",
"leaflet-editable": "^1.3.0",
"leaflet-editable": "^1.3.1",
"leaflet-editinosm": "0.2.3",
"leaflet-formbuilder": "0.2.10",
"leaflet-fullscreen": "1.0.2",
"leaflet-hash": "0.2.1",
"leaflet-i18n": "0.3.5",
@ -60,7 +59,7 @@
"leaflet.locatecontrol": "0.81.1",
"leaflet.markercluster": "^1.5.3",
"leaflet.path.drag": "0.0.6",
"leaflet.photon": "0.9.1",
"leaflet.photon": "0.9.2",
"osmtogeojson": "^3.0.0-beta.5",
"simple-statistics": "7.8.5"
},

View file

@ -28,52 +28,52 @@ classifiers = [
"Programming Language :: Python :: 3.12",
]
dependencies = [
"Django==5.1.4",
"Django==5.1.8",
"django-agnocomplete==2.2.0",
"django-environ==0.11.2",
"django-environ==0.12.0",
"django-probes==1.7.0",
"Pillow==11.0.0",
"psycopg==3.2.3",
"Pillow==11.2.1",
"psycopg==3.2.6",
"requests==2.32.3",
"rcssmin==1.2.0",
"rjsmin==1.2.3",
"social-auth-core==4.5.4",
"social-auth-app-django==5.4.2",
"rcssmin==1.2.1",
"rjsmin==1.2.4",
"social-auth-core==4.5.6",
"social-auth-app-django==5.4.3",
]
[project.optional-dependencies]
dev = [
"hatch==1.14.0",
"ruff==0.8.4",
"djlint==1.36.3",
"hatch==1.14.1",
"ruff==0.11.6",
"djlint==1.36.4",
"mkdocs==1.6.1",
"mkdocs-material==9.5.48",
"mkdocs-static-i18n==1.2.3",
"mkdocs-material==9.6.12",
"mkdocs-static-i18n==1.3.0",
"vermin==1.6.0",
"pymdown-extensions==10.13",
"isort==5.13.2",
"pymdown-extensions==10.14.3",
"isort==6.0.1",
]
test = [
"factory-boy==3.3.1",
"daphne==4.1.2",
"factory-boy==3.3.3",
"playwright>=1.39",
"pytest==8.3.4",
"pytest-django==4.9.0",
"pytest-playwright==0.6.2",
"pytest==8.3.5",
"pytest-django==4.11.1",
"pytest-playwright==0.7.0",
"pytest-rerunfailures==15.0",
"pytest-xdist>=3.5.0,<4",
"moto[s3]==5.0.24"
"moto[s3]==5.1.4"
]
docker = [
"uwsgi==2.0.28",
"uvicorn==0.34.2",
]
s3 = [
"django-storages[s3]==1.14.4",
"django-storages[s3]==1.14.6",
]
sync = [
"channels==4.2.0",
"daphne==4.1.2",
"pydantic==2.10.3",
"websockets==13.1",
"pydantic==2.11.3",
"redis==5.2.1",
"websockets==15.0.1",
]
[project.scripts]
@ -104,3 +104,6 @@ format_css=true
blank_line_after_tag="load,extends"
line_break_after_multiline_tag=true
[lint]
# Disable autoremove of unused import.
unfixable = ["F401"]

View file

@ -16,8 +16,6 @@ mkdir -p umap/static/umap/vendors/markercluster/ && cp -r node_modules/leaflet.m
mkdir -p umap/static/umap/vendors/markercluster/ && cp -r node_modules/leaflet.markercluster/dist/MarkerCluster.* umap/static/umap/vendors/markercluster/
mkdir -p umap/static/umap/vendors/heat/ && cp -r node_modules/leaflet.heat/dist/leaflet-heat.js umap/static/umap/vendors/heat/
mkdir -p umap/static/umap/vendors/fullscreen/ && cp -r node_modules/leaflet-fullscreen/dist/** umap/static/umap/vendors/fullscreen/
mkdir -p umap/static/umap/vendors/toolbar/ && cp -r node_modules/leaflet-toolbar/dist/leaflet.toolbar.* umap/static/umap/vendors/toolbar/
mkdir -p umap/static/umap/vendors/formbuilder/ && cp -r node_modules/leaflet-formbuilder/Leaflet.FormBuilder.js umap/static/umap/vendors/formbuilder/
mkdir -p umap/static/umap/vendors/measurable/ && cp -r node_modules/leaflet-measurable/Leaflet.Measurable.* umap/static/umap/vendors/measurable/
mkdir -p umap/static/umap/vendors/photon/ && cp -r node_modules/leaflet.photon/leaflet.photon.js umap/static/umap/vendors/photon/
mkdir -p umap/static/umap/vendors/csv2geojson/ && cp -r node_modules/csv2geojson/csv2geojson.js umap/static/umap/vendors/csv2geojson/

View file

@ -1 +1 @@
VERSION = "2.8.2"
VERSION = "3.0.5"

View file

@ -69,9 +69,18 @@ class PictogramAdmin(admin.ModelAdmin):
list_filter = ("category",)
class TeamAdmin(admin.ModelAdmin):
class TeamAdmin(CSVExportMixin, admin.ModelAdmin):
csv_fields = [
"pk",
"name",
"users_count",
]
list_display = list(admin.ModelAdmin.list_display) + ["users_count"]
filter_horizontal = ("users",)
def users_count(self, obj):
return obj.users.count()
class UserAdmin(CSVExportMixin, UserAdminBase):
csv_fields = [
@ -83,13 +92,17 @@ class UserAdmin(CSVExportMixin, UserAdminBase):
"last_login",
"date_joined",
"maps_count",
"user_teams",
]
list_display = list(UserAdminBase.list_display) + ["maps_count"]
list_display = list(UserAdminBase.list_display) + ["maps_count", "user_teams"]
def maps_count(self, obj):
# owner maps + maps as editor
return obj.owned_maps.count() + obj.map_set.count()
def user_teams(self, obj):
return " ; ".join(obj.teams.values_list("name", flat=True))
admin.site.register(Map, MapAdmin)
admin.site.register(DataLayer)

View file

@ -1,15 +1,20 @@
import os
from channels.routing import ProtocolTypeRouter
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "umap.settings")
from django.core.asgi import get_asgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "umap.settings")
from .sync.app import application as ws_application
# Initialize Django ASGI application early to ensure the AppRegistry
# is populated before importing code that may import ORM models.
django_asgi_app = get_asgi_application()
application = ProtocolTypeRouter(
{
"http": django_asgi_app,
}
)
async def application(scope, receive, send):
if scope["type"] == "http":
await django_asgi_app(scope, receive, send)
elif scope["type"] == "websocket":
await ws_application(scope, receive, send)
else:
raise NotImplementedError(f"Unknown scope type {scope['type']}")

View file

@ -2,6 +2,7 @@ from agnocomplete.core import AgnocompleteModel
from agnocomplete.register import register
from django.conf import settings
from django.contrib.auth import get_user_model
from django.db.models.functions import Length
@register
@ -13,3 +14,11 @@ class AutocompleteUser(AgnocompleteModel):
data = super().item(current_item)
data["url"] = current_item.get_url()
return data
def build_extra_filtered_queryset(self, queryset, **kwargs):
order_by = []
for field_name in self.fields:
if not field_name[0].isalnum():
field_name = field_name[1:]
order_by.append(Length(field_name).asc())
return queryset.order_by(*order_by)

View file

@ -7,12 +7,14 @@ def settings(request):
return {
"UMAP_HELP_URL": djsettings.UMAP_HELP_URL,
"SITE_NAME": djsettings.SITE_NAME,
"SITE_DESCRIPTION": djsettings.SITE_DESCRIPTION,
"SITE_URL": djsettings.SITE_URL,
"ENABLE_ACCOUNT_LOGIN": djsettings.ENABLE_ACCOUNT_LOGIN,
"UMAP_READONLY": djsettings.UMAP_READONLY,
"UMAP_DEMO_SITE": djsettings.UMAP_DEMO_SITE,
"UMAP_HOST_INFOS": djsettings.UMAP_HOST_INFOS,
"UMAP_ALLOW_EDIT_PROFILE": djsettings.UMAP_ALLOW_EDIT_PROFILE,
"UMAP_TAGS": djsettings.UMAP_TAGS,
}

View file

@ -4,7 +4,6 @@ from django.contrib.auth import get_user_model
from django.contrib.gis.geos import Point
from django.forms.utils import ErrorList
from django.template.defaultfilters import slugify
from django.utils.translation import gettext_lazy as _
from .models import DataLayer, Map, Team
@ -92,7 +91,7 @@ class MapSettingsForm(forms.ModelForm):
return self.cleaned_data["center"]
class Meta:
fields = ("settings", "name", "center", "slug")
fields = ("settings", "name", "center", "slug", "tags")
model = Map

Binary file not shown.

View file

@ -3,16 +3,16 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# Dren ar Frankig <hadrienlouque@gmail.com>, 2023-2024
# Dren ar Frankig <hadrienlouque@gmail.com>, 2023-2025
# Dren ar Frankig <hadrienlouque@gmail.com>, 2023
# Dren ar Frankig <hadrienlouque@gmail.com>, 2023
msgid ""
msgstr ""
"Project-Id-Version: uMap\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-12-24 08:39+0000\n"
"POT-Creation-Date: 2025-03-03 14:11+0000\n"
"PO-Revision-Date: 2013-11-22 14:00+0000\n"
"Last-Translator: Dren ar Frankig <hadrienlouque@gmail.com>, 2023-2024\n"
"Last-Translator: Dren ar Frankig <hadrienlouque@gmail.com>, 2023-2025\n"
"Language-Team: Breton (http://app.transifex.com/openstreetmap/umap/language/br/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -26,7 +26,7 @@ msgstr "Ezporzhiadur CSV"
#: decorators.py:60
msgid "This map is not publicly available"
msgstr ""
msgstr "Ar gartenn-mañ n'eo ket publik"
#: middleware.py:13
msgid "Site is readonly for maintenance"
@ -36,7 +36,7 @@ msgstr "Al lec'hienn zo da lenn hepken rak emeur ouzh he c'hempenn"
msgid "name"
msgstr "anv"
#: models.py:62 models.py:475
#: models.py:62 models.py:485
msgid "description"
msgstr "deskrivadur"
@ -56,23 +56,23 @@ msgstr "Patrom URL a implij furmad teol OSM"
msgid "Order of the tilelayers in the edit box"
msgstr ""
#: models.py:175 models.py:469
#: models.py:175 models.py:479
msgid "Only editable with secret edit link"
msgstr "N'haller he c'hemmañ nemet gant ul liamm aozañ kuzh"
#: models.py:176 models.py:470
#: models.py:176 models.py:480
msgid "Everyone can edit"
msgstr "An holl a c'hall kemmañ"
#: models.py:179 models.py:463
#: models.py:179 models.py:473
msgid "Everyone"
msgstr "An holl"
#: models.py:180 models.py:189 models.py:464
#: models.py:180 models.py:189 models.py:474
msgid "Editors and team only"
msgstr ""
msgstr "An aozerien hag ar skipailh hepken"
#: models.py:181 models.py:465
#: models.py:181 models.py:475
msgid "Owner only"
msgstr "Ar perc'henner hepken"
@ -92,7 +92,7 @@ msgstr "Piv bennak en deus ul liamm"
msgid "Blocked"
msgstr "Stanket"
#: models.py:191
#: models.py:191 models.py:469
msgid "Deleted"
msgstr "Dilemel"
@ -132,31 +132,31 @@ msgstr "aozerien"
msgid "team"
msgstr "skipailh"
#: models.py:229 models.py:491
#: models.py:229 models.py:501
msgid "edit status"
msgstr "statud aozañ"
#: models.py:234
#: models.py:234 models.py:506
msgid "share status"
msgstr "digor da biv?"
#: models.py:237 models.py:486
#: models.py:237 models.py:496
msgid "settings"
msgstr "arventennoù"
#: models.py:402
#: models.py:407
msgid "Clone of"
msgstr "Eilenn eus"
#: models.py:462 models.py:468
#: models.py:468 models.py:472 models.py:478
msgid "Inherit"
msgstr "Dre ziouer"
#: models.py:481
#: models.py:491
msgid "display on load"
msgstr "diskwel pa vez karget"
#: models.py:482
#: models.py:492
msgid "Display this layer on load."
msgstr "Diskwel ar gwiskad-mañ pa vez karget"
@ -169,46 +169,60 @@ msgstr ""
#: templates/403.html:10 templates/404.html:8
msgid "← Go to the homepage"
msgstr ""
msgstr "← Distreiñ d'ar bajenn degemer"
#: templates/404.html:7
msgid "404 Page Not Found"
msgstr ""
msgstr "404 N'eo ket bet kavet ar bajenn"
#: templates/auth/user_detail.html:8
#: templates/auth/user_detail.html:6
#, python-format
msgid "%(current_user)ss maps"
msgstr "Kartennoù eus %(current_user)s"
#: templates/auth/user_detail.html:12
#, python-format
msgid "Browse %(current_user)s's maps"
msgstr "Merdeiñ e kartennoù %(current_user)s"
#: templates/auth/user_detail.html:17
#: templates/auth/user_detail.html:21
#, python-format
msgid "%(current_user)s has no maps."
msgstr "%(current_user)s n'en/he deus kartenn ebet."
#: templates/auth/user_form.html:21 templates/umap/team_form.html:21
#: templates/auth/user_form.html:6
msgid "My Profile"
msgstr "Ma frofil"
#: templates/auth/user_form.html:24 templates/umap/team_form.html:25
msgid "Save"
msgstr "Enrollañ"
#: templates/auth/user_form.html:27
#: templates/auth/user_form.html:30
msgid "Your current providers"
msgstr "Ho pourchaserien a-vremañ"
#: templates/auth/user_form.html:39
#: templates/auth/user_form.html:44
msgid "Connect to another provider"
msgstr "Kennaskañ ouzh ur pourchaser all"
#: templates/auth/user_form.html:42
#: templates/auth/user_form.html:47
msgid ""
"It's a good habit to connect your account to more than one provider, in case"
" one provider becomes unavailable, temporarily or even permanently."
msgstr ""
#: templates/auth/user_stars.html:8
#: templates/auth/user_stars.html:6
#, python-format
msgid "%(current_user)ss starred maps"
msgstr "Kartennoù muiañ karet eus %(current_user)s"
#: templates/auth/user_stars.html:12
#, python-format
msgid "Browse %(current_user)s's starred maps"
msgstr "Merdeiñ e kartennoù spilhennet %(current_user)s"
#: templates/auth/user_stars.html:17
#: templates/auth/user_stars.html:21
#, python-format
msgid "%(current_user)s has no starred maps yet."
msgstr "%(current_user)s n'en/he deus kartenn spilhennet ebet."
@ -225,7 +239,7 @@ msgstr "Kevreañ"
#: templates/registration/login.html:22
msgid "To save and easily find your maps, identify yourself."
msgstr ""
msgstr "Evit enrollañ ha kavout ho kartennoù en doare aes, kennaskit mar plij."
#: templates/registration/login.html:25
msgid "Please log in with your account:"
@ -243,6 +257,10 @@ msgstr "Ger-tremen"
msgid "Please choose a provider:"
msgstr "Dibabit ur pourchaser mar plij:"
#: templates/umap/about.html:5 templates/umap/navigation.html:22
msgid "About"
msgstr "Diwar-benn"
#: templates/umap/about_summary.html:12
#, python-format
msgid ""
@ -410,7 +428,7 @@ msgstr "gant"
msgid "More"
msgstr "Muioc'h"
#: templates/umap/map_table.html:8 templates/umap/user_teams.html:14
#: templates/umap/map_table.html:8 templates/umap/user_teams.html:18
msgid "Name"
msgstr "Anv"
@ -434,7 +452,7 @@ msgstr "Enrollet da ziwezhañ"
msgid "Owner"
msgstr "Perc'henner"
#: templates/umap/map_table.html:26 templates/umap/user_teams.html:20
#: templates/umap/map_table.html:26 templates/umap/user_teams.html:24
msgid "Actions"
msgstr "Oberoù"
@ -447,7 +465,7 @@ msgid "Share"
msgstr "Rannañ"
#: templates/umap/map_table.html:78 templates/umap/map_table.html:80
#: templates/umap/user_teams.html:38 templates/umap/user_teams.html:40
#: templates/umap/user_teams.html:42 templates/umap/user_teams.html:44
msgid "Edit"
msgstr "Aozañ"
@ -510,10 +528,6 @@ msgstr "Kevreañ"
msgid "Sign in"
msgstr "Krouiñ ur gont"
#: templates/umap/navigation.html:22
msgid "About"
msgstr "Diwar-benn"
#: templates/umap/navigation.html:30
msgid "Change password"
msgstr "Cheñch ar ger-tremen"
@ -522,41 +536,47 @@ msgstr "Cheñch ar ger-tremen"
msgid "Log out"
msgstr "Digevreañ"
#: templates/umap/password_change.html:7
#: templates/umap/password_change.html:6
#: templates/umap/password_change.html:11
msgid "Password change"
msgstr "Cheñch ar ger-tremen"
#: templates/umap/password_change.html:10
#: templates/umap/password_change.html:14
msgid ""
"Please enter your old password, for security's sake, and then enter your new"
" password twice so we can verify you typed it in correctly."
msgstr "Enankit ho ker-tremen kozh ha div wezh ho ker-tremen nevez war-lerc'h mar plij."
#: templates/umap/password_change.html:17
#: templates/umap/password_change.html:21
msgid "Old password"
msgstr "Ger-tremen kozh"
#: templates/umap/password_change.html:22
#: templates/umap/password_change.html:26
msgid "New password"
msgstr "Ger-tremen nevez"
#: templates/umap/password_change.html:26
#: templates/umap/password_change.html:30
msgid "New password confirmation"
msgstr "Kadarnaat ar ger-tremen nevez"
#: templates/umap/password_change.html:27
#: templates/umap/password_change.html:31
msgid "Change my password"
msgstr "Cheñch ar ger-tremen"
#: templates/umap/password_change_done.html:7
#: templates/umap/password_change_done.html:6
#: templates/umap/password_change_done.html:11
msgid "Password change successful"
msgstr "Cheñchet eo bet ar ger-tremen gant berzh"
#: templates/umap/password_change_done.html:10
#: templates/umap/password_change_done.html:14
msgid "Your password was changed."
msgstr "Cheñchet eo bet ho ker-tremen."
#: templates/umap/search.html:15
#: templates/umap/search.html:6
msgid "Explore maps"
msgstr "Ergerzhout ar gartennoù"
#: templates/umap/search.html:19
#, python-format
msgid "%(count)s map found:"
msgid_plural "%(count)s maps found:"
@ -566,11 +586,11 @@ msgstr[2] "%(count)s c'hartenn kavet :"
msgstr[3] "%(count)s kartenn kavet :"
msgstr[4] "%(count)s kartenn kavet :"
#: templates/umap/search.html:24
#: templates/umap/search.html:28
msgid "No map found."
msgstr "Kartenn ebet kavet."
#: templates/umap/search.html:29
#: templates/umap/search.html:33
msgid "Latest created maps"
msgstr "Kartennoù krouet da ziwezhañ"
@ -578,25 +598,38 @@ msgstr "Kartennoù krouet da ziwezhañ"
msgid "Search maps"
msgstr "Klask kartennoù"
#: templates/umap/search_bar.html:15
#: templates/umap/search_bar.html:16
msgid "Search"
msgstr "Klask"
#: templates/umap/team_detail.html:10
#: templates/umap/team_confirm_delete.html:6
msgid "Team deletion"
msgstr "O tilemel ar gartenn"
#: templates/umap/team_detail.html:6
#, python-format
msgid "%(current_team)ss maps"
msgstr "Kartennoù eus %(current_team)s"
#: templates/umap/team_detail.html:14
#, python-format
msgid "Browse %(current_team)s's maps"
msgstr "Merdeiñ e kartennoù %(current_team)s"
#: templates/umap/team_detail.html:22
#: templates/umap/team_detail.html:26
#, python-format
msgid "%(current_team)s has no public maps."
msgstr "%(current_team)s n'en deus kartenn publik ebet."
#: templates/umap/team_form.html:24
#: templates/umap/team_form.html:6
msgid "Create or edit a team"
msgstr "Krouiñ pe kemmañ ur skipailh"
#: templates/umap/team_form.html:28
msgid "Delete this team"
msgstr "Dilemel ar skipailh-mañ"
#: templates/umap/team_form.html:47
#: templates/umap/team_form.html:51
msgid "Add user"
msgstr "Ouzhpennañ un implijer"
@ -617,11 +650,15 @@ msgstr "Pellgargañ %(count)s a gartennoù"
msgid "You have no map yet."
msgstr "N'ho peus kartenn ebet c'hoazh."
#: templates/umap/user_teams.html:17
#: templates/umap/user_teams.html:6
msgid "My Teams"
msgstr "Ma skipailhoù"
#: templates/umap/user_teams.html:21
msgid "Users"
msgstr "Implijerien"
#: templates/umap/user_teams.html:48
#: templates/umap/user_teams.html:52
msgid "New team"
msgstr "Skipailh nevez"
@ -638,57 +675,64 @@ msgstr "Dilamet eo bet ar skipailh “%(name)s”"
msgid "View the map"
msgstr "Diskouez ar gartenn"
#: views.py:825
#: views.py:838
msgid "See full screen"
msgstr "Gwelet er mod skramm a-bezh"
#: views.py:968
#: views.py:981
msgid "Map editors updated with success!"
msgstr "Aozerien ar gartenn bet hizivaet gant berzh!"
#: views.py:1004
#: views.py:1017
#, python-format
msgid "The uMap edit link for your map: %(map_name)s"
msgstr "Al liamm uMap evit aozañ ho kartenn: %(map_name)s"
#: views.py:1007
#: views.py:1020
#, python-format
msgid "Here is your secret edit link: %(link)s"
msgstr "Setu ho liamm aozañ kuzh: %(link)s"
#: views.py:1014
#: views.py:1027
#, python-format
msgid "Can't send email to %(email)s"
msgstr "N'haller ket kas ur postel da %(email)s"
#: views.py:1017
#: views.py:1030
#, python-format
msgid "Email sent to %(email)s"
msgstr "Postel kaset da %(email)s"
#: views.py:1028
#: views.py:1041
msgid "Only its owner can delete the map."
msgstr "N'eus nemet perc'henner ar gartenn a c'hall he dilemel."
#: views.py:1031
#: views.py:1044
msgid "Map successfully deleted."
msgstr "Kartenn dilamet gant berzh."
#: views.py:1057
#: views.py:1070
#, python-format
msgid ""
"Your map has been cloned! If you want to edit this map from another "
"computer, please use this link: %(anonymous_url)s"
msgstr "Doublet eo bet ho kartenn! M'ho peus c'hoant d'he c'hemmañ diwar un urzhiataer all, implijit al liamm-mañ: %(anonymous_url)s"
#: views.py:1062
#: views.py:1075
msgid "Congratulations, your map has been cloned!"
msgstr "Doublet eo bet ho kartenn gant berzh!"
#: views.py:1313
#: views.py:1329
msgid "Layer successfully deleted."
msgstr "Gwiskad dilamet gant berzh."
#: views.py:1335
#: views.py:1351
msgid "Permissions updated with success!"
msgstr "Aotreoù hizivaet gant berzh!"
#: views.py:1430
#, python-format
msgid ""
"Using “%(name)s” to authenticate is deprecated. Please configure another "
"provider in your profile page."
msgstr ""

View file

@ -7,7 +7,7 @@
# Jakub A. Tesinsky, 2014
# Jakub A. Tesinsky, 2014
# Jiří Podhorecký, 2018-2019
# Jiří Podhorecký <jirka.p@volny.cz>, 2018-2019,2023-2024
# Jiří Podhorecký <jirka.p@volny.cz>, 2018-2019,2023-2025
# Jiří Podhorecký <jirka.p@volny.cz>, 2019
# Jiří Podhorecký <jirka.p@volny.cz>, 2018
# Jiří Podhorecký <jirka.p@volny.cz>, 2018
@ -16,9 +16,9 @@ msgid ""
msgstr ""
"Project-Id-Version: uMap\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-12-24 08:39+0000\n"
"POT-Creation-Date: 2025-03-03 17:36+0000\n"
"PO-Revision-Date: 2013-11-22 14:00+0000\n"
"Last-Translator: Aleš Fiala <f.ales1@seznam.cz>, 2023-2024\n"
"Last-Translator: Jiří Podhorecký <jirka.p@volny.cz>, 2018-2019,2023-2025\n"
"Language-Team: Czech (Czech Republic) (http://app.transifex.com/openstreetmap/umap/language/cs_CZ/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -32,17 +32,25 @@ msgstr "CSV Export"
#: decorators.py:60
msgid "This map is not publicly available"
msgstr ""
msgstr "Tato mapa není veřejně dostupná"
#: middleware.py:13
#: middleware.py:19
msgid "Site is readonly for maintenance"
msgstr "Stránka je jen ke čtení kvůli údržbě"
#: middleware.py:34
#, python-format
msgid ""
"Using “%(name)s” to authenticate is deprecated and will be removed soon. "
"Please configure another provider below before losing access to your account"
" and maps."
msgstr ""
#: models.py:60 models.py:79
msgid "name"
msgstr "název"
#: models.py:62 models.py:475
#: models.py:62 models.py:485
msgid "description"
msgstr "popis"
@ -62,23 +70,23 @@ msgstr "Vzor URL ve formátu pro dlaždice OSM "
msgid "Order of the tilelayers in the edit box"
msgstr "Pořadí vrstev při editaci"
#: models.py:175 models.py:469
#: models.py:175 models.py:479
msgid "Only editable with secret edit link"
msgstr "Lze upravovat jen pomocí tajného odkazu"
#: models.py:176 models.py:470
#: models.py:176 models.py:480
msgid "Everyone can edit"
msgstr "Kdokoli může editovat"
#: models.py:179 models.py:463
#: models.py:179 models.py:473
msgid "Everyone"
msgstr "Kdokoli"
#: models.py:180 models.py:189 models.py:464
#: models.py:180 models.py:189 models.py:474
msgid "Editors and team only"
msgstr "Pouze pro editory a tým"
#: models.py:181 models.py:465
#: models.py:181 models.py:475
msgid "Owner only"
msgstr "Jen vlastník"
@ -98,7 +106,7 @@ msgstr "Kdokoli kdo má odkaz"
msgid "Blocked"
msgstr "Blokováno"
#: models.py:191
#: models.py:191 models.py:469
msgid "Deleted"
msgstr "Smazáno"
@ -138,31 +146,31 @@ msgstr "přispěvovatelé"
msgid "team"
msgstr "tým"
#: models.py:229 models.py:491
#: models.py:229 models.py:501
msgid "edit status"
msgstr "kdo může provádět úpravy"
#: models.py:234
#: models.py:234 models.py:506
msgid "share status"
msgstr "nastavení sdílení"
#: models.py:237 models.py:486
#: models.py:237 models.py:496
msgid "settings"
msgstr "nastavení"
#: models.py:402
#: models.py:407
msgid "Clone of"
msgstr "Kopie"
#: models.py:462 models.py:468
#: models.py:468 models.py:472 models.py:478
msgid "Inherit"
msgstr "Zdědit"
#: models.py:481
#: models.py:491
msgid "display on load"
msgstr "zobrazit při startu"
#: models.py:482
#: models.py:492
msgid "Display this layer on load."
msgstr "Zobrazit tuto vrstvu na startu."
@ -171,50 +179,64 @@ msgid ""
"<a href=\"https://discover.umap-project.org/support/faq/#map-statuses\" "
"target=\"_blank\">Find out here the documentation</a> on how to manage maps"
" permissions."
msgstr ""
msgstr "<a href=\"https://discover.umap-project.org/support/faq/#map-statuses\" target=\"_blank\">Zde naleznete dokumentaci</a> ke správě oprávnění mapy."
#: templates/403.html:10 templates/404.html:8
msgid "← Go to the homepage"
msgstr ""
msgstr "← Přejít na domovskou stránku"
#: templates/404.html:7
msgid "404 Page Not Found"
msgstr ""
msgstr "404 Stránka nenalezena"
#: templates/auth/user_detail.html:8
#: templates/auth/user_detail.html:6
#, python-format
msgid "%(current_user)ss maps"
msgstr "mapy %(current_user)s"
#: templates/auth/user_detail.html:12
#, python-format
msgid "Browse %(current_user)s's maps"
msgstr "Prohlížej si mapy uživatele %(current_user)s'"
#: templates/auth/user_detail.html:17
#: templates/auth/user_detail.html:21
#, python-format
msgid "%(current_user)s has no maps."
msgstr "%(current_user)s nemá mapy."
#: templates/auth/user_form.html:21 templates/umap/team_form.html:21
#: templates/auth/user_form.html:6
msgid "My Profile"
msgstr "Můj profil"
#: templates/auth/user_form.html:24 templates/umap/team_form.html:25
msgid "Save"
msgstr "Uložit"
#: templates/auth/user_form.html:27
#: templates/auth/user_form.html:30
msgid "Your current providers"
msgstr "Vaši současní poskytovatelé"
#: templates/auth/user_form.html:39
#: templates/auth/user_form.html:44
msgid "Connect to another provider"
msgstr "Připojit se k jinému poskytovateli"
#: templates/auth/user_form.html:42
#: templates/auth/user_form.html:47
msgid ""
"It's a good habit to connect your account to more than one provider, in case"
" one provider becomes unavailable, temporarily or even permanently."
msgstr "Je dobrým zvykem připojit svůj účet k více poskytovatelům pro případ, že by jeden z nich byl dočasně nebo dokonce trvale nedostupný."
#: templates/auth/user_stars.html:8
#: templates/auth/user_stars.html:6
#, python-format
msgid "%(current_user)ss starred maps"
msgstr "mapy s hvězdičkami %(current_user)s"
#: templates/auth/user_stars.html:12
#, python-format
msgid "Browse %(current_user)s's starred maps"
msgstr "Prohlížet mapy označené hvězdičkou uživatele %(current_user)s"
#: templates/auth/user_stars.html:17
#: templates/auth/user_stars.html:21
#, python-format
msgid "%(current_user)s has no starred maps yet."
msgstr "%(current_user)s nemá zatím žádné mapy označené hvězdičkou."
@ -249,6 +271,10 @@ msgstr "Heslo"
msgid "Please choose a provider:"
msgstr "Vyberte poskytovatele mapy:"
#: templates/umap/about.html:5 templates/umap/navigation.html:22
msgid "About"
msgstr "O uMap"
#: templates/umap/about_summary.html:12
#, python-format
msgid ""
@ -416,7 +442,7 @@ msgstr ", autor:"
msgid "More"
msgstr "Více"
#: templates/umap/map_table.html:8 templates/umap/user_teams.html:14
#: templates/umap/map_table.html:8 templates/umap/user_teams.html:18
msgid "Name"
msgstr "Název"
@ -440,7 +466,7 @@ msgstr "Poslední uložení"
msgid "Owner"
msgstr "Vlastník"
#: templates/umap/map_table.html:26 templates/umap/user_teams.html:20
#: templates/umap/map_table.html:26 templates/umap/user_teams.html:24
msgid "Actions"
msgstr "Akce"
@ -453,7 +479,7 @@ msgid "Share"
msgstr "Sdílet"
#: templates/umap/map_table.html:78 templates/umap/map_table.html:80
#: templates/umap/user_teams.html:38 templates/umap/user_teams.html:40
#: templates/umap/user_teams.html:42 templates/umap/user_teams.html:44
msgid "Edit"
msgstr "Upravit"
@ -516,10 +542,6 @@ msgstr "Přihlásit se"
msgid "Sign in"
msgstr "Registrovat"
#: templates/umap/navigation.html:22
msgid "About"
msgstr "O uMap"
#: templates/umap/navigation.html:30
msgid "Change password"
msgstr "Změnit heslo"
@ -528,41 +550,47 @@ msgstr "Změnit heslo"
msgid "Log out"
msgstr "Odhlásit se"
#: templates/umap/password_change.html:7
#: templates/umap/password_change.html:6
#: templates/umap/password_change.html:11
msgid "Password change"
msgstr "Změna hesla"
#: templates/umap/password_change.html:10
#: templates/umap/password_change.html:14
msgid ""
"Please enter your old password, for security's sake, and then enter your new"
" password twice so we can verify you typed it in correctly."
msgstr "Z bezpečnostních důvodů zadejte své staré heslo a dvakrát zadejte nové heslo, abychom mohli ověřit, že jste jej zadali správně."
#: templates/umap/password_change.html:17
#: templates/umap/password_change.html:21
msgid "Old password"
msgstr "Staré heslo"
#: templates/umap/password_change.html:22
#: templates/umap/password_change.html:26
msgid "New password"
msgstr "Nové heslo"
#: templates/umap/password_change.html:26
#: templates/umap/password_change.html:30
msgid "New password confirmation"
msgstr "Potvrzení nového hesla"
#: templates/umap/password_change.html:27
#: templates/umap/password_change.html:31
msgid "Change my password"
msgstr "Změnit moje heslo"
#: templates/umap/password_change_done.html:7
#: templates/umap/password_change_done.html:6
#: templates/umap/password_change_done.html:11
msgid "Password change successful"
msgstr "Změna hesla byla úspěšná"
#: templates/umap/password_change_done.html:10
#: templates/umap/password_change_done.html:14
msgid "Your password was changed."
msgstr "Vaše heslo bylo změněno."
#: templates/umap/search.html:15
#: templates/umap/search.html:6
msgid "Explore maps"
msgstr "Prozkoumat mapy"
#: templates/umap/search.html:19
#, python-format
msgid "%(count)s map found:"
msgid_plural "%(count)s maps found:"
@ -571,11 +599,11 @@ msgstr[1] "%(count)s nalezené mapy:"
msgstr[2] "%(count)s nalezené mapy:"
msgstr[3] "%(count)s nalezených map:"
#: templates/umap/search.html:24
#: templates/umap/search.html:28
msgid "No map found."
msgstr "Mapa nenalezena."
#: templates/umap/search.html:29
#: templates/umap/search.html:33
msgid "Latest created maps"
msgstr "Nedávno vytvořené mapy"
@ -583,25 +611,38 @@ msgstr "Nedávno vytvořené mapy"
msgid "Search maps"
msgstr "Prohledávejte mapy"
#: templates/umap/search_bar.html:15
#: templates/umap/search_bar.html:16
msgid "Search"
msgstr "Hledej"
#: templates/umap/team_detail.html:10
#: templates/umap/team_confirm_delete.html:6
msgid "Team deletion"
msgstr "Smazání týmu"
#: templates/umap/team_detail.html:6
#, python-format
msgid "%(current_team)ss maps"
msgstr "mapy %(current_team)s"
#: templates/umap/team_detail.html:14
#, python-format
msgid "Browse %(current_team)s's maps"
msgstr "Prohlížet mapy týmu %(current_team)s"
#: templates/umap/team_detail.html:22
#: templates/umap/team_detail.html:26
#, python-format
msgid "%(current_team)s has no public maps."
msgstr "%(current_team)s nemá veřejné mapy."
#: templates/umap/team_form.html:24
#: templates/umap/team_form.html:6
msgid "Create or edit a team"
msgstr "Vytvořit nebo upravit tým"
#: templates/umap/team_form.html:28
msgid "Delete this team"
msgstr "Smazat tento tým"
#: templates/umap/team_form.html:47
#: templates/umap/team_form.html:51
msgid "Add user"
msgstr "Přidat uživatele"
@ -622,11 +663,15 @@ msgstr "Stáhnout %(count)s map"
msgid "You have no map yet."
msgstr "Zatím nemáte žádnou mapu."
#: templates/umap/user_teams.html:17
#: templates/umap/user_teams.html:6
msgid "My Teams"
msgstr "Moje Týmy"
#: templates/umap/user_teams.html:21
msgid "Users"
msgstr "Uživatelé"
#: templates/umap/user_teams.html:48
#: templates/umap/user_teams.html:52
msgid "New team"
msgstr "Nový tým"
@ -643,57 +688,57 @@ msgstr "Tým \"%(name)s\" byl smazán"
msgid "View the map"
msgstr "Prohlídnout si tuto mapu"
#: views.py:825
#: views.py:838
msgid "See full screen"
msgstr "Zobrazit celou obrazovku"
#: views.py:968
#: views.py:981
msgid "Map editors updated with success!"
msgstr "Seznam přispěvovatelů byl úspěšně upraven!"
#: views.py:1004
#: views.py:1017
#, python-format
msgid "The uMap edit link for your map: %(map_name)s"
msgstr "Odkaz na úpravu uMap pro vaši mapu: %(map_name)s"
#: views.py:1007
#: views.py:1020
#, python-format
msgid "Here is your secret edit link: %(link)s"
msgstr "Zde je váš tajný odkaz na úpravu: %(link)s"
#: views.py:1014
#: views.py:1027
#, python-format
msgid "Can't send email to %(email)s"
msgstr "Nelze odeslat e-mail na %(email)s"
#: views.py:1017
#: views.py:1030
#, python-format
msgid "Email sent to %(email)s"
msgstr "E-mail odeslán na %(email)s"
#: views.py:1028
#: views.py:1041
msgid "Only its owner can delete the map."
msgstr "Jen vlastník může vymzat tuto mapu."
#: views.py:1031
#: views.py:1044
msgid "Map successfully deleted."
msgstr "Mapa byla úspěšně smazána."
#: views.py:1057
#: views.py:1070
#, python-format
msgid ""
"Your map has been cloned! If you want to edit this map from another "
"computer, please use this link: %(anonymous_url)s"
msgstr "Byla vytvořena kopie mapy! Pokud chcete upravovat tuto mapu z jiného počítače, použijte tento odkaz: %(anonymous_url)s"
#: views.py:1062
#: views.py:1075
msgid "Congratulations, your map has been cloned!"
msgstr "Gratulujeme, byla vytvořena kopie mapy!"
#: views.py:1313
#: views.py:1329
msgid "Layer successfully deleted."
msgstr "Vrstva úspěšně vymazána."
#: views.py:1335
#: views.py:1351
msgid "Permissions updated with success!"
msgstr "Oprávnění úspěšně aktualizována!"

Binary file not shown.

View file

@ -11,6 +11,7 @@
# hno2 <hno2@gmx.net>, 2013-2014
# Jannis Leidel <jannis@leidel.info>, 2016
# gislars, 2024
# Metzor Metzingen, 2025
# pgeo, 2023
# Klumbumbus, 2013-2014,2018-2019
# YOHAN BONIFACE <yb@enix.org>, 2012
@ -18,9 +19,9 @@ msgid ""
msgstr ""
"Project-Id-Version: uMap\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-12-24 08:39+0000\n"
"POT-Creation-Date: 2025-04-04 16:49+0000\n"
"PO-Revision-Date: 2013-11-22 14:00+0000\n"
"Last-Translator: jakl, 2024\n"
"Last-Translator: Metzor Metzingen, 2025\n"
"Language-Team: German (http://app.transifex.com/openstreetmap/umap/language/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -30,193 +31,283 @@ msgstr ""
#: admin.py:16
msgid "CSV Export"
msgstr ""
msgstr "CSV-Export"
#: decorators.py:60
msgid "This map is not publicly available"
msgstr ""
msgstr "Diese Karte ist nicht öffentlich einsehbar"
#: middleware.py:13
#: middleware.py:19
msgid "Site is readonly for maintenance"
msgstr "Die Seite ist wegen Wartungsarbeiten im Nur-Lesen-Modus."
#: models.py:60 models.py:79
#: middleware.py:34
#, python-format
msgid ""
"Using “%(name)s” to authenticate is deprecated and will be removed soon. "
"Please configure another provider below before losing access to your account"
" and maps. Then, please logout and login again with the new provider."
msgstr "Anmelden mittels “%(name)s” ist veraltet und wird bald nicht mehr möglich sein. Bitte stelle einen anderen Anbieter ein, um den Zugang zum Benutzerkonto und den Karten nicht zu verlieren. Bitte melde dich dann ab und nutze den neuen Anbieter um dich wieder anzumelden."
#: models.py:61 models.py:80
msgid "name"
msgstr "Name"
#: models.py:62 models.py:475
#: models.py:63 models.py:493
msgid "description"
msgstr "Beschreibung"
#: models.py:110
#: models.py:111
msgid "details"
msgstr "Details"
#: models.py:111
#: models.py:112
msgid "Link to a page where the licence is detailed."
msgstr "Verlinke auf eine Seite mit der Lizenz."
#: models.py:121
#: models.py:122
msgid "URL template using OSM tile format"
msgstr "Das URL-Template nutzt das OSM Tile Format"
#: models.py:127
#: models.py:128
msgid "Order of the tilelayers in the edit box"
msgstr "Reihenfolge der Karten-Ebenen in der Bearbeiten-Box"
#: models.py:175 models.py:469
#: models.py:176 models.py:487
msgid "Only editable with secret edit link"
msgstr "Nur mit geheimem Bearbeitungslink zu bearbeiten"
#: models.py:176 models.py:470
#: models.py:177 models.py:488
msgid "Everyone can edit"
msgstr "Jeder kann bearbeiten"
#: models.py:179 models.py:463
#: models.py:180 models.py:481
msgid "Everyone"
msgstr "Jeder"
#: models.py:180 models.py:189 models.py:464
#: models.py:181 models.py:190 models.py:482
msgid "Editors and team only"
msgstr "Nur Bearbeiter und Team"
#: models.py:181 models.py:465
#: models.py:182 models.py:483
msgid "Owner only"
msgstr "Nur Ersteller"
#: models.py:184
msgid "Draft (private)"
msgstr ""
#: models.py:185
msgid "Draft (private)"
msgstr "Entwurf (privat)"
#: models.py:186
msgid "Everyone (public)"
msgstr "Jeder (Öffentlich)"
#: models.py:188
#: models.py:189
msgid "Anyone with link"
msgstr "Jeder mit Link"
#: models.py:190
#: models.py:191
msgid "Blocked"
msgstr "blockiert"
#: models.py:191
#: models.py:192 models.py:477
msgid "Deleted"
msgstr ""
msgstr "Gelöscht"
#: models.py:194
#: models.py:195
msgid "center"
msgstr "Mittelpunkt"
#: models.py:195
#: models.py:196
msgid "zoom"
msgstr "Zoom"
#: models.py:197
#: models.py:198
msgid "locate"
msgstr "lokalisiere"
#: models.py:197
#: models.py:198
msgid "Locate user on load?"
msgstr "Standort des Benutzers beim Seitenaufruf bestimmen?"
#: models.py:201
#: models.py:202
msgid "Choose the map licence."
msgstr "Kartenlizenz auswählen"
#: models.py:202
#: models.py:203
msgid "licence"
msgstr "Lizenz"
#: models.py:213
#: models.py:214
msgid "owner"
msgstr "Ersteller"
#: models.py:217
#: models.py:218
msgid "editors"
msgstr "Bearbeiter"
#: models.py:223
#: models.py:224
msgid "team"
msgstr "Team"
#: models.py:229 models.py:491
#: models.py:230 models.py:509
msgid "edit status"
msgstr "Bearbeitungsstatus"
#: models.py:234
#: models.py:235 models.py:514
msgid "share status"
msgstr "Teilen-Status"
#: models.py:237 models.py:486
#: models.py:238 models.py:504
msgid "settings"
msgstr "Einstellungen"
#: models.py:402
#: models.py:410
msgid "Clone of"
msgstr "Duplikat von"
#: models.py:462 models.py:468
#: models.py:476 models.py:480 models.py:486
msgid "Inherit"
msgstr "erben"
#: models.py:481
#: models.py:499
msgid "display on load"
msgstr "Beim Seitenaufruf einblenden"
#: models.py:482
#: models.py:500
msgid "Display this layer on load."
msgstr "Diese Ebene beim Seitenaufruf einblenden."
#: settings/base.py:295
msgid "Art and Culture"
msgstr ""
#: settings/base.py:296
msgid "Cycling"
msgstr ""
#: settings/base.py:297
msgid "Business"
msgstr ""
#: settings/base.py:298
msgid "Environment"
msgstr ""
#: settings/base.py:299
msgid "Education"
msgstr ""
#: settings/base.py:300
msgid "Food and Agriculture"
msgstr ""
#: settings/base.py:301
msgid "Geopolitics"
msgstr ""
#: settings/base.py:302
msgid "Health"
msgstr ""
#: settings/base.py:303
msgid "Hiking"
msgstr ""
#: settings/base.py:304
msgid "History"
msgstr ""
#: settings/base.py:305
msgid "Public sector"
msgstr ""
#: settings/base.py:306
msgid "Science"
msgstr ""
#: settings/base.py:307
msgid "Shopping"
msgstr ""
#: settings/base.py:308
msgid "Sport and Leisure"
msgstr ""
#: settings/base.py:309
msgid "Travel"
msgstr ""
#: settings/base.py:310
msgid "Transports"
msgstr ""
#: settings/base.py:311
msgid "Tourism"
msgstr ""
#: templates/403.html:8
msgid ""
"<a href=\"https://discover.umap-project.org/support/faq/#map-statuses\" "
"target=\"_blank\">Find out here the documentation</a> on how to manage maps"
" permissions."
msgstr ""
msgstr "<a href=\"https://discover.umap-project.org/support/faq/#map-statuses\" target=\"_blank\">Finde hier die Dokumentation</a>wie Berechtigungen der Karte verwaltet werden können."
#: templates/403.html:10 templates/404.html:8
msgid "← Go to the homepage"
msgstr ""
msgstr "← Gehe zur Homepage"
#: templates/404.html:7
msgid "404 Page Not Found"
msgstr ""
msgstr "404 Seite nicht gefunden"
#: templates/auth/user_detail.html:8
#: templates/auth/user_detail.html:6
#, python-format
msgid "%(current_user)ss maps"
msgstr "Karten von %(current_user)s"
#: templates/auth/user_detail.html:12
#, python-format
msgid "Browse %(current_user)s's maps"
msgstr "Schaue dir %(current_user)s's Karten an"
#: templates/auth/user_detail.html:17
#: templates/auth/user_detail.html:21
#, python-format
msgid "%(current_user)s has no maps."
msgstr "%(current_user)s hat keine Karten."
#: templates/auth/user_form.html:21 templates/umap/team_form.html:21
#: templates/auth/user_form.html:6
msgid "My Profile"
msgstr "Mein Profil"
#: templates/auth/user_form.html:24 templates/umap/team_form.html:25
msgid "Save"
msgstr "Speichern"
#: templates/auth/user_form.html:27
#: templates/auth/user_form.html:30
msgid "Your current providers"
msgstr "Deine aktuellen Anbieter"
#: templates/auth/user_form.html:39
#: templates/auth/user_form.html:44
msgid "Connect to another provider"
msgstr "Füge einen weiteren Anbieter hinzu"
#: templates/auth/user_form.html:42
#: templates/auth/user_form.html:47
msgid ""
"It's a good habit to connect your account to more than one provider, in case"
" one provider becomes unavailable, temporarily or even permanently."
msgstr "Es ist eine gute Praxis, das Konto mit mehr als einem Anbieter zu verbinden, für den Fall, dass ein Anbieter vorübergehend oder sogar dauerhaft nicht mehr verfügbar ist."
#: templates/auth/user_stars.html:8
#: templates/auth/user_stars.html:6
#, python-format
msgid "%(current_user)ss starred maps"
msgstr "Schaue dir die favorisierten Karten von %(current_user)s an"
#: templates/auth/user_stars.html:12
#, python-format
msgid "Browse %(current_user)s's starred maps"
msgstr "Schaue dir %(current_user)s's favorisierten Karten an"
#: templates/auth/user_stars.html:17
#: templates/auth/user_stars.html:21
#, python-format
msgid "%(current_user)s has no starred maps yet."
msgstr "%(current_user)s hat keine favorisierten Karten."
@ -233,11 +324,11 @@ msgstr "Anmeldung"
#: templates/registration/login.html:22
msgid "To save and easily find your maps, identify yourself."
msgstr ""
msgstr "Um deine Karten einfach zu speichern und wieder zu finden, merke dich an."
#: templates/registration/login.html:25
msgid "Please log in with your account:"
msgstr ""
msgstr "Bitte melden Sie sich mit Ihrem Konto an"
#: templates/registration/login.html:42
msgid "Username"
@ -249,7 +340,11 @@ msgstr "Passwort"
#: templates/registration/login.html:52
msgid "Please choose a provider:"
msgstr ""
msgstr "Bitte wähle einen Anbieter"
#: templates/umap/about.html:5 templates/umap/navigation.html:22
msgid "About"
msgstr "Über"
#: templates/umap/about_summary.html:12
#, python-format
@ -402,7 +497,7 @@ msgstr "Meine Teams"
msgid "Map of the uMaps"
msgstr "Karte aller „uMap“-Karten"
#: templates/umap/home.html:24
#: templates/umap/home.html:25
msgid "Get inspired, browse maps"
msgstr "Lass dich inspirieren, schau dir diese Karten an."
@ -410,15 +505,19 @@ msgstr "Lass dich inspirieren, schau dir diese Karten an."
msgid "You are logged in. Continuing..."
msgstr "Du bist eingeloggt. Weiterleitung..."
#: templates/umap/map_list.html:11 views.py:437
#: templates/umap/map_list.html:18 views.py:444
msgid "by"
msgstr "von"
#: templates/umap/map_list.html:20
#: templates/umap/map_list.html:22
msgid "See the map"
msgstr ""
#: templates/umap/map_list.html:28
msgid "More"
msgstr "Mehr"
#: templates/umap/map_table.html:8 templates/umap/user_teams.html:14
#: templates/umap/map_table.html:8 templates/umap/user_teams.html:18
msgid "Name"
msgstr "Name"
@ -442,7 +541,7 @@ msgstr "zuletzt gespeichert"
msgid "Owner"
msgstr "Ersteller"
#: templates/umap/map_table.html:26 templates/umap/user_teams.html:20
#: templates/umap/map_table.html:26 templates/umap/user_teams.html:24
msgid "Actions"
msgstr "Aktionen"
@ -455,7 +554,7 @@ msgid "Share"
msgstr "Teilen"
#: templates/umap/map_table.html:78 templates/umap/map_table.html:80
#: templates/umap/user_teams.html:38 templates/umap/user_teams.html:40
#: templates/umap/user_teams.html:42 templates/umap/user_teams.html:44
msgid "Edit"
msgstr "Bearbeiten"
@ -518,10 +617,6 @@ msgstr "Einloggen"
msgid "Sign in"
msgstr "Anmelden"
#: templates/umap/navigation.html:22
msgid "About"
msgstr "Über"
#: templates/umap/navigation.html:30
msgid "Change password"
msgstr "Passwort ändern"
@ -530,52 +625,58 @@ msgstr "Passwort ändern"
msgid "Log out"
msgstr "Ausloggen"
#: templates/umap/password_change.html:7
#: templates/umap/password_change.html:6
#: templates/umap/password_change.html:11
msgid "Password change"
msgstr "Passwortänderung"
#: templates/umap/password_change.html:10
#: templates/umap/password_change.html:14
msgid ""
"Please enter your old password, for security's sake, and then enter your new"
" password twice so we can verify you typed it in correctly."
msgstr "Bitte gib aus Sicherheitsgründen dein altes Passwort ein und dann zweimal dein neues, um sicherzustellen, dass du es korrekt eingegeben hast."
#: templates/umap/password_change.html:17
#: templates/umap/password_change.html:21
msgid "Old password"
msgstr "Altes Passwort"
#: templates/umap/password_change.html:22
#: templates/umap/password_change.html:26
msgid "New password"
msgstr "Neues Passwort"
#: templates/umap/password_change.html:26
#: templates/umap/password_change.html:30
msgid "New password confirmation"
msgstr "Neues Passwort bestätigen"
#: templates/umap/password_change.html:27
#: templates/umap/password_change.html:31
msgid "Change my password"
msgstr "Mein Passwort ändern"
#: templates/umap/password_change_done.html:7
#: templates/umap/password_change_done.html:6
#: templates/umap/password_change_done.html:11
msgid "Password change successful"
msgstr "Passwortänderung erfolgreich"
#: templates/umap/password_change_done.html:10
#: templates/umap/password_change_done.html:14
msgid "Your password was changed."
msgstr "Ihr Passwort wurde geändert."
#: templates/umap/search.html:15
#: templates/umap/search.html:6
msgid "Explore maps"
msgstr "Karten erkunden"
#: templates/umap/search.html:19
#, python-format
msgid "%(count)s map found:"
msgid_plural "%(count)s maps found:"
msgstr[0] "%(count)s Karte gefunden:"
msgstr[1] "%(count)s Karten gefunden:"
#: templates/umap/search.html:24
#: templates/umap/search.html:30
msgid "No map found."
msgstr "Keine Karte gefunden."
#: templates/umap/search.html:29
#: templates/umap/search.html:35
msgid "Latest created maps"
msgstr "Zuletzt erstellte Karten"
@ -583,25 +684,42 @@ msgstr "Zuletzt erstellte Karten"
msgid "Search maps"
msgstr "Karten suchen"
#: templates/umap/search_bar.html:15
#: templates/umap/search_bar.html:14
msgid "Any category"
msgstr ""
#: templates/umap/search_bar.html:19
msgid "Search"
msgstr "Suchen"
#: templates/umap/team_detail.html:10
#: templates/umap/team_confirm_delete.html:6
msgid "Team deletion"
msgstr "Team löschen"
#: templates/umap/team_detail.html:6
#, python-format
msgid "%(current_team)ss maps"
msgstr "Karten von %(current_team)s"
#: templates/umap/team_detail.html:14
#, python-format
msgid "Browse %(current_team)s's maps"
msgstr "Schaue dir %(current_team)s's Karten an"
#: templates/umap/team_detail.html:22
#: templates/umap/team_detail.html:26
#, python-format
msgid "%(current_team)s has no public maps."
msgstr "%(current_team)s hat keine öffentlichen Karten.."
#: templates/umap/team_form.html:24
#: templates/umap/team_form.html:6
msgid "Create or edit a team"
msgstr "Team erstellen oder bearbeiten"
#: templates/umap/team_form.html:28
msgid "Delete this team"
msgstr "Dieses Team löschen"
#: templates/umap/team_form.html:47
#: templates/umap/team_form.html:51
msgid "Add user"
msgstr "Benutzer hinzufügen"
@ -622,78 +740,82 @@ msgstr "Herunterladen von %(count)s Karten"
msgid "You have no map yet."
msgstr "Du hast noch keine Karte."
#: templates/umap/user_teams.html:17
#: templates/umap/user_teams.html:6
msgid "My Teams"
msgstr "Meine Teams"
#: templates/umap/user_teams.html:21
msgid "Users"
msgstr "Benutzer"
#: templates/umap/user_teams.html:48
#: templates/umap/user_teams.html:52
msgid "New team"
msgstr "Neues Team"
#: views.py:234
#: views.py:235
msgid "Cannot delete a team with more than one member"
msgstr "Teams mit mehr als einem Mitglied können nicht gelöscht werden"
#: views.py:238
#: views.py:239
#, python-format
msgid "Team “%(name)s” has been deleted"
msgstr "Team “%(name)s” wurde gelöscht"
#: views.py:442
#: views.py:449
msgid "View the map"
msgstr "Diese Karte anzeigen"
#: views.py:825
#: views.py:845
msgid "See full screen"
msgstr "Vollbildanzeige"
#: views.py:968
#: views.py:988
msgid "Map editors updated with success!"
msgstr "Bearbeiter erfolgreich geändert"
#: views.py:1004
#: views.py:1024
#, python-format
msgid "The uMap edit link for your map: %(map_name)s"
msgstr "Der uMap-Bearbeitungslink für Deine Karte: %(map_name)s"
#: views.py:1007
#: views.py:1027
#, python-format
msgid "Here is your secret edit link: %(link)s"
msgstr "Dies ist der geheime Bearbeitungslink: %(link)s"
#: views.py:1014
#: views.py:1034
#, python-format
msgid "Can't send email to %(email)s"
msgstr "E-Mail kann nicht gesendet werden an %(email)s"
#: views.py:1017
#: views.py:1037
#, python-format
msgid "Email sent to %(email)s"
msgstr "Email gesendet an %(email)s"
#: views.py:1028
#: views.py:1048
msgid "Only its owner can delete the map."
msgstr "Nur der Ersteller kann die Karte löschen."
#: views.py:1031
#: views.py:1051
msgid "Map successfully deleted."
msgstr "Karte erfolgreich gelöscht."
#: views.py:1057
#: views.py:1077
#, python-format
msgid ""
"Your map has been cloned! If you want to edit this map from another "
"computer, please use this link: %(anonymous_url)s"
msgstr "Deine Karte wurde kopiert! Wenn du diese Karte von einem anderen Computer aus bearbeiten möchtest, benutze bitte diesen Link: %(anonymous_url)s"
#: views.py:1062
#: views.py:1082
msgid "Congratulations, your map has been cloned!"
msgstr "Glückwunsch, deine Karte wurde kopiert!"
#: views.py:1313
#: views.py:1336
msgid "Layer successfully deleted."
msgstr "Ebene erfolgreich gelöscht."
#: views.py:1335
#: views.py:1358
msgid "Permissions updated with success!"
msgstr "Berechtigungen erfolgreich aktualisiert!"

Binary file not shown.

View file

@ -13,9 +13,9 @@ msgid ""
msgstr ""
"Project-Id-Version: uMap\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-12-24 08:39+0000\n"
"POT-Creation-Date: 2025-04-11 15:30+0000\n"
"PO-Revision-Date: 2013-11-22 14:00+0000\n"
"Last-Translator: Yannis Kaskamanidis <kiolalis@gmail.com>, 2021,2023-2024\n"
"Last-Translator: prendi <prendi@openmailbox.org>, 2017\n"
"Language-Team: Greek (http://app.transifex.com/openstreetmap/umap/language/el/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -25,193 +25,283 @@ msgstr ""
#: admin.py:16
msgid "CSV Export"
msgstr ""
msgstr "Εξαγωγή CSV"
#: decorators.py:60
msgid "This map is not publicly available"
msgstr ""
msgstr "Αυτός ο χάρτης δεν είναι δημοσίως διαθέσιμος"
#: middleware.py:13
#: middleware.py:19
msgid "Site is readonly for maintenance"
msgstr "Λόγω συντήρησης, ο ιστότοπος είναι μόνο για ανάγνωση"
#: models.py:60 models.py:79
#: middleware.py:34
#, python-format
msgid ""
"Using “%(name)s” to authenticate is deprecated and will be removed soon. "
"Please configure another provider below before losing access to your account"
" and maps. Then, please logout and login again with the new provider."
msgstr "Η χρήση του «%(name)s» για τον έλεγχο ταυτότητας έχει ξεπεραστεί και θα καταργηθεί σύντομα. Παρακαλούμε ρυθμίστε έναν άλλο πάροχο παρακάτω πριν χάσετε την πρόσβαση στο λογαριασμό και τους χάρτες σας. Στη συνέχεια, παρακαλούμε αποσυνδεθείτε και συνδεθείτε ξανά με τον νέο πάροχο."
#: models.py:61 models.py:80
msgid "name"
msgstr "όνομα"
#: models.py:62 models.py:475
#: models.py:63 models.py:493
msgid "description"
msgstr "περιγραφή"
#: models.py:110
#: models.py:111
msgid "details"
msgstr "λεπτομέρειες"
#: models.py:111
#: models.py:112
msgid "Link to a page where the licence is detailed."
msgstr "Σύνδεσμος σελίδας αναλυτικής Άδειας Χρήσης."
#: models.py:121
#: models.py:122
msgid "URL template using OSM tile format"
msgstr "Πρότυπο URL που χρησιμοποιεί μορφοποίηση πλακιδίων OSM"
#: models.py:127
#: models.py:128
msgid "Order of the tilelayers in the edit box"
msgstr "Σειρά των υπόβαθρων στο πλαίσιο επεξεργασίας"
#: models.py:175 models.py:469
#: models.py:176 models.py:487
msgid "Only editable with secret edit link"
msgstr "Επεξεργάσιμο μόνο με μυστικό σύνδεσμο"
#: models.py:176 models.py:470
#: models.py:177 models.py:488
msgid "Everyone can edit"
msgstr "Όλοι μπορούν να επεξεργαστούν"
#: models.py:179 models.py:463
#: models.py:180 models.py:481
msgid "Everyone"
msgstr "Οποιοσδήποτε"
#: models.py:180 models.py:189 models.py:464
#: models.py:181 models.py:190 models.py:482
msgid "Editors and team only"
msgstr ""
msgstr "Μόνο συντάκτες και ομάδα"
#: models.py:181 models.py:465
#: models.py:182 models.py:483
msgid "Owner only"
msgstr "Μόνο ο κάτοχος"
#: models.py:184
msgid "Draft (private)"
msgstr ""
#: models.py:185
msgid "Draft (private)"
msgstr "Πρόχειρο (ιδιωτικό)"
#: models.py:186
msgid "Everyone (public)"
msgstr "Όλοι (δημόσιος)"
#: models.py:188
#: models.py:189
msgid "Anyone with link"
msgstr "Οποιοδήποτε με τον σύνδεσμο"
#: models.py:190
#: models.py:191
msgid "Blocked"
msgstr "Αποκλεισμένος"
#: models.py:191
#: models.py:192 models.py:477
msgid "Deleted"
msgstr ""
msgstr "Διαγράφηκε"
#: models.py:194
#: models.py:195
msgid "center"
msgstr "κέντρο"
#: models.py:195
#: models.py:196
msgid "zoom"
msgstr "εστίαση"
#: models.py:197
#: models.py:198
msgid "locate"
msgstr "εντοπισμός θέσης"
#: models.py:197
#: models.py:198
msgid "Locate user on load?"
msgstr "Εντοπισμός θέσης χρήστη κατά την φόρτωση;"
#: models.py:201
#: models.py:202
msgid "Choose the map licence."
msgstr "Επιλογή άδειας χρήσης του χάρτη."
#: models.py:202
#: models.py:203
msgid "licence"
msgstr "άδεια"
#: models.py:213
#: models.py:214
msgid "owner"
msgstr "ιδιοκτήτης"
#: models.py:217
#: models.py:218
msgid "editors"
msgstr "συντάκτες"
#: models.py:223
#: models.py:224
msgid "team"
msgstr ""
msgstr "ομάδα"
#: models.py:229 models.py:491
#: models.py:230 models.py:509
msgid "edit status"
msgstr "κατάσταση επεξεργασίας"
#: models.py:234
#: models.py:235 models.py:514
msgid "share status"
msgstr "κατάσταση διαμοιρασμού"
#: models.py:237 models.py:486
#: models.py:238 models.py:504
msgid "settings"
msgstr "ρυθμίσεις"
#: models.py:402
#: models.py:410
msgid "Clone of"
msgstr "Κλώνος του"
#: models.py:462 models.py:468
#: models.py:476 models.py:480 models.py:486
msgid "Inherit"
msgstr "Κληρονόμοι"
#: models.py:481
#: models.py:499
msgid "display on load"
msgstr "εμφάνιση κατά τη φόρτωση"
#: models.py:482
#: models.py:500
msgid "Display this layer on load."
msgstr "Εμφάνιση αυτού του επιπέδου κατά την φόρτωση."
#: settings/base.py:295
msgid "Art and Culture"
msgstr "Τέχνες και Πολιτισμός"
#: settings/base.py:296
msgid "Cycling"
msgstr "Ποδηλασία"
#: settings/base.py:297
msgid "Business"
msgstr "Επιχειρήσεις"
#: settings/base.py:298
msgid "Environment"
msgstr "Περιβάλλον"
#: settings/base.py:299
msgid "Education"
msgstr "Εκπαίδευση"
#: settings/base.py:300
msgid "Food and Agriculture"
msgstr "Διατροφή και Γεωργία"
#: settings/base.py:301
msgid "Geopolitics"
msgstr "Γεωπολιτική"
#: settings/base.py:302
msgid "Health"
msgstr "Υγεία"
#: settings/base.py:303
msgid "Hiking"
msgstr "Πεζοπορία-Ορειβασία"
#: settings/base.py:304
msgid "History"
msgstr "Ιστορία"
#: settings/base.py:305
msgid "Public sector"
msgstr "Δημόσιος τομέας"
#: settings/base.py:306
msgid "Science"
msgstr "Επιστήμες"
#: settings/base.py:307
msgid "Shopping"
msgstr "Ψώνια"
#: settings/base.py:308
msgid "Sport and Leisure"
msgstr "Αθλητισμός και ελεύθερος χρόνος"
#: settings/base.py:309
msgid "Travel"
msgstr "Ταξίδια"
#: settings/base.py:310
msgid "Transports"
msgstr "Μεταφορές"
#: settings/base.py:311
msgid "Tourism"
msgstr "Τουρισμός"
#: templates/403.html:8
msgid ""
"<a href=\"https://discover.umap-project.org/support/faq/#map-statuses\" "
"target=\"_blank\">Find out here the documentation</a> on how to manage maps"
" permissions."
msgstr ""
msgstr "<a href=\"https://discover.umap-project.org/support/faq/#map-statuses\" target=\"_blank\">Δείτε εδώ την τεκμηρίωση</a> για το πώς να διαχειρίζεστε τα δικαιώματα του χάρτη."
#: templates/403.html:10 templates/404.html:8
msgid "← Go to the homepage"
msgstr ""
msgstr "← Μετάβαση στην αρχική σελίδα"
#: templates/404.html:7
msgid "404 Page Not Found"
msgstr ""
msgstr "404 Η σελίδα δεν βρέθηκε"
#: templates/auth/user_detail.html:8
#: templates/auth/user_detail.html:6
#, python-format
msgid "%(current_user)ss maps"
msgstr "%(current_user)ss χάρτες"
#: templates/auth/user_detail.html:12
#, python-format
msgid "Browse %(current_user)s's maps"
msgstr "Περιήγηση στους χάρτες του χρήστη %(current_user)s"
#: templates/auth/user_detail.html:17
#: templates/auth/user_detail.html:21
#, python-format
msgid "%(current_user)s has no maps."
msgstr "Ο %(current_user)s χρήστης δεν έχει χάρτες."
#: templates/auth/user_form.html:21 templates/umap/team_form.html:21
#: templates/auth/user_form.html:6
msgid "My Profile"
msgstr "Το προφίλ μου"
#: templates/auth/user_form.html:24 templates/umap/team_form.html:25
msgid "Save"
msgstr "Αποθήκευση"
#: templates/auth/user_form.html:27
#: templates/auth/user_form.html:30
msgid "Your current providers"
msgstr "Οι τρέχοντες πάροχοι σας"
#: templates/auth/user_form.html:39
#: templates/auth/user_form.html:44
msgid "Connect to another provider"
msgstr "Σύνδεση σε άλλον πάροχο"
#: templates/auth/user_form.html:42
#: templates/auth/user_form.html:47
msgid ""
"It's a good habit to connect your account to more than one provider, in case"
" one provider becomes unavailable, temporarily or even permanently."
msgstr "Είναι καλή συνήθεια να συνδέετε το λογαριασμό σας σε περισσότερους από έναν παρόχους, σε περίπτωση που ένας πάροχος δεν είναι διαθέσιμος, προσωρινά ή και μόνιμα."
#: templates/auth/user_stars.html:8
#: templates/auth/user_stars.html:6
#, python-format
msgid "%(current_user)ss starred maps"
msgstr "%(current_user)ss χάρτες με αστέρια"
#: templates/auth/user_stars.html:12
#, python-format
msgid "Browse %(current_user)s's starred maps"
msgstr "Περιήγηση στους χάρτες με αστέρι του χρήστη %(current_user)s"
#: templates/auth/user_stars.html:17
#: templates/auth/user_stars.html:21
#, python-format
msgid "%(current_user)s has no starred maps yet."
msgstr "Ο %(current_user)s δεν έχει ακόμη χάρτες με αστέρι."
@ -228,11 +318,11 @@ msgstr "Σύνδεση"
#: templates/registration/login.html:22
msgid "To save and easily find your maps, identify yourself."
msgstr ""
msgstr "Για να αποθηκεύσετε και να βρείτε εύκολα τους χάρτες σας, προσδιορίστε τον εαυτό σας."
#: templates/registration/login.html:25
msgid "Please log in with your account:"
msgstr ""
msgstr "Παρακαλούμε συνδεθείτε με το λογαριασμό σας:"
#: templates/registration/login.html:42
msgid "Username"
@ -244,7 +334,11 @@ msgstr "Κωδικός πρόσβασης"
#: templates/registration/login.html:52
msgid "Please choose a provider:"
msgstr ""
msgstr "Παρακαλώ επιλέξτε έναν πάροχο:"
#: templates/umap/about.html:5 templates/umap/navigation.html:22
msgid "About"
msgstr "Σχετικά"
#: templates/umap/about_summary.html:12
#, python-format
@ -358,19 +452,19 @@ msgstr "Αυτή είναι μια έκδοση επίδειξης, που χρ
#: templates/umap/content_footer.html:5
msgid "An OpenStreetMap project"
msgstr ""
msgstr "Ένα έργο OpenStreetMap"
#: templates/umap/content_footer.html:6
msgid "version"
msgstr ""
msgstr "έκδοση"
#: templates/umap/content_footer.html:7
msgid "Hosted by"
msgstr ""
msgstr "Φιλοξενείται από"
#: templates/umap/content_footer.html:8
msgid "Contact"
msgstr ""
msgstr "Επικοινωνία"
#: templates/umap/content_footer.html:9 templates/umap/navigation.html:25
msgid "Help"
@ -391,13 +485,13 @@ msgstr "Το προφίλ μου"
#: templates/umap/dashboard_menu.html:15
msgid "My teams"
msgstr ""
msgstr "Οι ομάδες μου"
#: templates/umap/home.html:14
msgid "Map of the uMaps"
msgstr "Χάρτης των uMaps"
#: templates/umap/home.html:24
#: templates/umap/home.html:25
msgid "Get inspired, browse maps"
msgstr "Περιηγήσου και αναζήτησε την έμπνευση στους χάρτες!"
@ -405,15 +499,19 @@ msgstr "Περιηγήσου και αναζήτησε την έμπνευση
msgid "You are logged in. Continuing..."
msgstr "Είστε συνδεδεμένοι. Συνέχεια..."
#: templates/umap/map_list.html:11 views.py:437
#: templates/umap/map_list.html:18 views.py:444
msgid "by"
msgstr "από"
#: templates/umap/map_list.html:20
#: templates/umap/map_list.html:22
msgid "See the map"
msgstr "Δες τον χάρτη"
#: templates/umap/map_list.html:28
msgid "More"
msgstr "Περισσότερα"
#: templates/umap/map_table.html:8 templates/umap/user_teams.html:14
#: templates/umap/map_table.html:8 templates/umap/user_teams.html:18
msgid "Name"
msgstr "Όνομα"
@ -437,7 +535,7 @@ msgstr "Τελευταία αποθήκευση"
msgid "Owner"
msgstr "Κάτοχος"
#: templates/umap/map_table.html:26 templates/umap/user_teams.html:20
#: templates/umap/map_table.html:26 templates/umap/user_teams.html:24
msgid "Actions"
msgstr "Ενέργειες"
@ -450,7 +548,7 @@ msgid "Share"
msgstr "Διαμοιρασμός"
#: templates/umap/map_table.html:78 templates/umap/map_table.html:80
#: templates/umap/user_teams.html:38 templates/umap/user_teams.html:40
#: templates/umap/user_teams.html:42 templates/umap/user_teams.html:44
msgid "Edit"
msgstr "Επεξεργασία"
@ -513,10 +611,6 @@ msgstr "Σύνδεση"
msgid "Sign in"
msgstr "Εγγραφή"
#: templates/umap/navigation.html:22
msgid "About"
msgstr "Σχετικά"
#: templates/umap/navigation.html:30
msgid "Change password"
msgstr "Αλλαγή κωδικού πρόσβασης"
@ -525,52 +619,62 @@ msgstr "Αλλαγή κωδικού πρόσβασης"
msgid "Log out"
msgstr "Αποσύνδεση"
#: templates/umap/password_change.html:7
#: templates/umap/password_change.html:6
#: templates/umap/password_change.html:11
msgid "Password change"
msgstr "Αλλαγή κωδικού πρόσβασης"
#: templates/umap/password_change.html:10
#: templates/umap/password_change.html:14
msgid ""
"Please enter your old password, for security's sake, and then enter your new"
" password twice so we can verify you typed it in correctly."
msgstr "Παρακαλώ εισάγετε τον παλιό κωδικό πρόσβασης και μετά εισάγετε τον νέο κωδικό πρόσβασης δύο φορές, ώστε να επιβεβαιωθεί ότι πληκτρολογήθηκε σωστά."
#: templates/umap/password_change.html:17
#: templates/umap/password_change.html:21
msgid "Old password"
msgstr "Παλιός κωδικός πρόσβασης"
#: templates/umap/password_change.html:22
#: templates/umap/password_change.html:26
msgid "New password"
msgstr "Νέος κωδικός πρόσβασης"
#: templates/umap/password_change.html:26
#: templates/umap/password_change.html:30
msgid "New password confirmation"
msgstr "Επιβεβαίωση νέου κωδικού πρόσβασης"
#: templates/umap/password_change.html:27
#: templates/umap/password_change.html:31
msgid "Change my password"
msgstr "Αλλαγή του κωδικού πρόσβασης"
#: templates/umap/password_change_done.html:7
#: templates/umap/password_change_done.html:6
#: templates/umap/password_change_done.html:11
msgid "Password change successful"
msgstr "Η αλλαγή του κωδικού πρόσβασης ήταν επιτυχημένη"
#: templates/umap/password_change_done.html:10
#: templates/umap/password_change_done.html:14
msgid "Your password was changed."
msgstr "Ο κωδικός πρόσβασής σας άλλαξε."
#: templates/umap/search.html:15
#: templates/umap/search.html:6
msgid "Explore maps"
msgstr "Εξερεύνηση χαρτών"
#: templates/umap/search.html:19
#, python-format
msgid "%(count)s map found:"
msgid_plural "%(count)s maps found:"
msgstr[0] "%(count)s χάρτης βρέθηκε:"
msgstr[1] "%(count)s χάρτες βρέθηκαν:"
#: templates/umap/search.html:24
#: templates/umap/search.html:30
msgid "No map found."
msgstr "Δεν βρέθηκε κανένας χάρτης."
#: templates/umap/search.html:29
#: templates/umap/search.html:36
msgid "Latest created maps in category"
msgstr "Τελευταία δημιουργημένοι χάρτες στην κατηγορία"
#: templates/umap/search.html:43
msgid "Latest created maps"
msgstr "Χάρτες που δημιουργήθηκαν τελευταίοι"
@ -578,27 +682,44 @@ msgstr "Χάρτες που δημιουργήθηκαν τελευταίοι"
msgid "Search maps"
msgstr "Αναζήτηση χαρτών"
#: templates/umap/search_bar.html:15
#: templates/umap/search_bar.html:14
msgid "Any category"
msgstr "Οποιαδήποτε κατηγορία"
#: templates/umap/search_bar.html:19
msgid "Search"
msgstr "Αναζήτηση"
#: templates/umap/team_detail.html:10
#: templates/umap/team_confirm_delete.html:6
msgid "Team deletion"
msgstr "Διαγραφή ομάδας"
#: templates/umap/team_detail.html:6
#, python-format
msgid "%(current_team)ss maps"
msgstr "%(current_team)ss χάρτες"
#: templates/umap/team_detail.html:14
#, python-format
msgid "Browse %(current_team)s's maps"
msgstr ""
msgstr "Περιήγηση στους χάρτες της %(current_team)s"
#: templates/umap/team_detail.html:22
#: templates/umap/team_detail.html:26
#, python-format
msgid "%(current_team)s has no public maps."
msgstr ""
msgstr "%(current_team)s δεν έχει δημόσιους χάρτες."
#: templates/umap/team_form.html:24
#: templates/umap/team_form.html:6
msgid "Create or edit a team"
msgstr "Δημιουργία ή επεξεργασία ομάδας"
#: templates/umap/team_form.html:28
msgid "Delete this team"
msgstr ""
msgstr "Διαγραφή αυτής της ομάδας"
#: templates/umap/team_form.html:47
#: templates/umap/team_form.html:51
msgid "Add user"
msgstr ""
msgstr "Προσθήκη χρήστη"
#: templates/umap/user_dashboard.html:9 templates/umap/user_dashboard.html:25
msgid "Search my maps"
@ -617,78 +738,82 @@ msgstr "Λήψη%(count)s χαρτών"
msgid "You have no map yet."
msgstr "Δεν έχετε ακόμη χάρτη."
#: templates/umap/user_teams.html:17
#: templates/umap/user_teams.html:6
msgid "My Teams"
msgstr "Οι ομάδες μου"
#: templates/umap/user_teams.html:21
msgid "Users"
msgstr ""
msgstr "Χρήστες"
#: templates/umap/user_teams.html:48
#: templates/umap/user_teams.html:52
msgid "New team"
msgstr ""
msgstr "Νέα ομάδα"
#: views.py:234
#: views.py:235
msgid "Cannot delete a team with more than one member"
msgstr ""
msgstr "Δεν είναι δυνατή η διαγραφή μιας ομάδας που έχει περισσότερα από ένα μέλη"
#: views.py:238
#: views.py:239
#, python-format
msgid "Team “%(name)s” has been deleted"
msgstr ""
msgstr "Η ομάδα «%(name)s» έχει διαγραφεί."
#: views.py:442
#: views.py:449
msgid "View the map"
msgstr "Προβολή του χάρτη"
#: views.py:825
#: views.py:845
msgid "See full screen"
msgstr "Προβολή πλήρους οθόνης"
#: views.py:968
#: views.py:988
msgid "Map editors updated with success!"
msgstr "Η ενημέρωση των συντακτών χάρτη ήταν επιτυχής!"
#: views.py:1004
#: views.py:1024
#, python-format
msgid "The uMap edit link for your map: %(map_name)s"
msgstr "Ο uMap σύνδεσμος επεξεργασίας του χάρτη σας: %(map_name)s"
#: views.py:1007
#: views.py:1027
#, python-format
msgid "Here is your secret edit link: %(link)s"
msgstr "Εδώ είναι ο μυστικός σύνδεσμος επεξεργασίας: %(link)s"
#: views.py:1014
#: views.py:1034
#, python-format
msgid "Can't send email to %(email)s"
msgstr "Αδυναμία αποστολής email στο %(email)s"
#: views.py:1017
#: views.py:1037
#, python-format
msgid "Email sent to %(email)s"
msgstr "Μήνυμα email στάλθηκε στο %(email)s"
#: views.py:1028
#: views.py:1048
msgid "Only its owner can delete the map."
msgstr "Μονό ο ιδιοκτήτης μπορεί να διαγράψει αυτό τον χάρτη."
#: views.py:1031
#: views.py:1054
msgid "Map successfully deleted."
msgstr "Ο χάρτης διαγράφηκε με επιτυχία."
#: views.py:1057
#: views.py:1080
#, python-format
msgid ""
"Your map has been cloned! If you want to edit this map from another "
"computer, please use this link: %(anonymous_url)s"
msgstr "Ο χάρτης κλωνοποιήθηκε! Αν θέλετε να τον επεξεργαστείτε από κάποιον άλλο υπολογιστή, παρακαλώ χρησιμοποιήστε αυτόν τον σύνδεσμο: %(anonymous_url)s"
#: views.py:1062
#: views.py:1085
msgid "Congratulations, your map has been cloned!"
msgstr "Συγχαρητήρια ο χάρτης σας κλωνοποιήθηκε!"
#: views.py:1313
#: views.py:1339
msgid "Layer successfully deleted."
msgstr "Το επίπεδο διαγράφηκε με επιτυχία."
#: views.py:1335
#: views.py:1361
msgid "Permissions updated with success!"
msgstr "Τα δικαιώματα ενημερώθηκαν με επιτυχία!"

View file

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-12-24 08:39+0000\n"
"POT-Creation-Date: 2025-04-25 15:38+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -25,138 +25,214 @@ msgstr ""
msgid "This map is not publicly available"
msgstr ""
#: middleware.py:13
#: middleware.py:19
msgid "Site is readonly for maintenance"
msgstr ""
#: models.py:60 models.py:79
#: middleware.py:34
#, python-format
msgid ""
"Using “%(name)s” to authenticate is deprecated and will be removed soon. "
"Please configure another provider below before losing access to your account "
"and maps. Then, please logout and login again with the new provider."
msgstr ""
#: models.py:61 models.py:80
msgid "name"
msgstr ""
#: models.py:62 models.py:475
#: models.py:63 models.py:493
msgid "description"
msgstr ""
#: models.py:110
#: models.py:111
msgid "details"
msgstr ""
#: models.py:111
#: models.py:112
msgid "Link to a page where the licence is detailed."
msgstr ""
#: models.py:121
#: models.py:122
msgid "URL template using OSM tile format"
msgstr ""
#: models.py:127
#: models.py:128
msgid "Order of the tilelayers in the edit box"
msgstr ""
#: models.py:175 models.py:469
#: models.py:176 models.py:487
msgid "Only editable with secret edit link"
msgstr ""
#: models.py:176 models.py:470
#: models.py:177 models.py:488
msgid "Everyone can edit"
msgstr ""
#: models.py:179 models.py:463
#: models.py:180 models.py:481
msgid "Everyone"
msgstr ""
#: models.py:180 models.py:189 models.py:464
#: models.py:181 models.py:190 models.py:482
msgid "Editors and team only"
msgstr ""
#: models.py:181 models.py:465
#: models.py:182 models.py:483
msgid "Owner only"
msgstr ""
#: models.py:184
#: models.py:185
msgid "Draft (private)"
msgstr ""
#: models.py:185
#: models.py:186
msgid "Everyone (public)"
msgstr ""
#: models.py:188
#: models.py:189
msgid "Anyone with link"
msgstr ""
#: models.py:190
#: models.py:191
msgid "Blocked"
msgstr ""
#: models.py:191
#: models.py:192 models.py:477
msgid "Deleted"
msgstr ""
#: models.py:194
#: models.py:195
msgid "center"
msgstr ""
#: models.py:195
#: models.py:196
msgid "zoom"
msgstr ""
#: models.py:197
#: models.py:198
msgid "locate"
msgstr ""
#: models.py:197
#: models.py:198
msgid "Locate user on load?"
msgstr ""
#: models.py:201
#: models.py:202
msgid "Choose the map licence."
msgstr ""
#: models.py:202
#: models.py:203
msgid "licence"
msgstr ""
#: models.py:213
#: models.py:214
msgid "owner"
msgstr ""
#: models.py:217
#: models.py:218
msgid "editors"
msgstr ""
#: models.py:223
#: models.py:224
msgid "team"
msgstr ""
#: models.py:229 models.py:491
#: models.py:230 models.py:509
msgid "edit status"
msgstr ""
#: models.py:234
#: models.py:235 models.py:514
msgid "share status"
msgstr ""
#: models.py:237 models.py:486
#: models.py:238 models.py:504
msgid "settings"
msgstr ""
#: models.py:402
#: models.py:410
msgid "Clone of"
msgstr ""
#: models.py:462 models.py:468
#: models.py:476 models.py:480 models.py:486
msgid "Inherit"
msgstr ""
#: models.py:481
#: models.py:499
msgid "display on load"
msgstr ""
#: models.py:482
#: models.py:500
msgid "Display this layer on load."
msgstr ""
#: settings/base.py:296
msgid "Art and Culture"
msgstr ""
#: settings/base.py:297
msgid "Cycling"
msgstr ""
#: settings/base.py:298
msgid "Business"
msgstr ""
#: settings/base.py:299
msgid "Environment"
msgstr ""
#: settings/base.py:300
msgid "Education"
msgstr ""
#: settings/base.py:301
msgid "Food and Agriculture"
msgstr ""
#: settings/base.py:302
msgid "Geopolitics"
msgstr ""
#: settings/base.py:303
msgid "Health"
msgstr ""
#: settings/base.py:304
msgid "Hiking"
msgstr ""
#: settings/base.py:305
msgid "History"
msgstr ""
#: settings/base.py:306
msgid "Public sector"
msgstr ""
#: settings/base.py:307
msgid "Science"
msgstr ""
#: settings/base.py:308
msgid "Shopping"
msgstr ""
#: settings/base.py:309
msgid "Sport and Leisure"
msgstr ""
#: settings/base.py:310
msgid "Travel"
msgstr ""
#: settings/base.py:311
msgid "Transports"
msgstr ""
#: settings/base.py:312
msgid "Tourism"
msgstr ""
#: templates/403.html:8
msgid ""
"<a href=\"https://discover.umap-project.org/support/faq/#map-statuses\" "
@ -172,40 +248,54 @@ msgstr ""
msgid "404 Page Not Found"
msgstr ""
#: templates/auth/user_detail.html:8
#: templates/auth/user_detail.html:6
#, python-format
msgid "%(current_user)ss maps"
msgstr ""
#: templates/auth/user_detail.html:12
#, python-format
msgid "Browse %(current_user)s's maps"
msgstr ""
#: templates/auth/user_detail.html:17
#: templates/auth/user_detail.html:21
#, python-format
msgid "%(current_user)s has no maps."
msgstr ""
#: templates/auth/user_form.html:21 templates/umap/team_form.html:21
#: templates/auth/user_form.html:6
msgid "My Profile"
msgstr ""
#: templates/auth/user_form.html:24 templates/umap/team_form.html:25
msgid "Save"
msgstr ""
#: templates/auth/user_form.html:27
#: templates/auth/user_form.html:30
msgid "Your current providers"
msgstr ""
#: templates/auth/user_form.html:39
#: templates/auth/user_form.html:44
msgid "Connect to another provider"
msgstr ""
#: templates/auth/user_form.html:42
#: templates/auth/user_form.html:47
msgid ""
"It's a good habit to connect your account to more than one provider, in case "
"one provider becomes unavailable, temporarily or even permanently."
msgstr ""
#: templates/auth/user_stars.html:8
#: templates/auth/user_stars.html:6
#, python-format
msgid "%(current_user)ss starred maps"
msgstr ""
#: templates/auth/user_stars.html:12
#, python-format
msgid "Browse %(current_user)s's starred maps"
msgstr ""
#: templates/auth/user_stars.html:17
#: templates/auth/user_stars.html:21
#, python-format
msgid "%(current_user)s has no starred maps yet."
msgstr ""
@ -240,6 +330,10 @@ msgstr ""
msgid "Please choose a provider:"
msgstr ""
#: templates/umap/about.html:5 templates/umap/navigation.html:22
msgid "About"
msgstr ""
#: templates/umap/about_summary.html:12
#, python-format
msgid ""
@ -391,7 +485,7 @@ msgstr ""
msgid "Map of the uMaps"
msgstr ""
#: templates/umap/home.html:24
#: templates/umap/home.html:25
msgid "Get inspired, browse maps"
msgstr ""
@ -399,15 +493,19 @@ msgstr ""
msgid "You are logged in. Continuing..."
msgstr ""
#: templates/umap/map_list.html:11 views.py:437
#: templates/umap/map_list.html:18 views.py:444
msgid "by"
msgstr ""
#: templates/umap/map_list.html:20
#: templates/umap/map_list.html:22
msgid "See the map"
msgstr ""
#: templates/umap/map_list.html:28
msgid "More"
msgstr ""
#: templates/umap/map_table.html:8 templates/umap/user_teams.html:14
#: templates/umap/map_table.html:8 templates/umap/user_teams.html:18
msgid "Name"
msgstr ""
@ -431,7 +529,7 @@ msgstr ""
msgid "Owner"
msgstr ""
#: templates/umap/map_table.html:26 templates/umap/user_teams.html:20
#: templates/umap/map_table.html:26 templates/umap/user_teams.html:24
msgid "Actions"
msgstr ""
@ -444,7 +542,7 @@ msgid "Share"
msgstr ""
#: templates/umap/map_table.html:78 templates/umap/map_table.html:80
#: templates/umap/user_teams.html:38 templates/umap/user_teams.html:40
#: templates/umap/user_teams.html:42 templates/umap/user_teams.html:44
msgid "Edit"
msgstr ""
@ -507,10 +605,6 @@ msgstr ""
msgid "Sign in"
msgstr ""
#: templates/umap/navigation.html:22
msgid "About"
msgstr ""
#: templates/umap/navigation.html:30
msgid "Change password"
msgstr ""
@ -519,52 +613,61 @@ msgstr ""
msgid "Log out"
msgstr ""
#: templates/umap/password_change.html:7
#: templates/umap/password_change.html:6 templates/umap/password_change.html:11
msgid "Password change"
msgstr ""
#: templates/umap/password_change.html:10
#: templates/umap/password_change.html:14
msgid ""
"Please enter your old password, for security's sake, and then enter your new "
"password twice so we can verify you typed it in correctly."
msgstr ""
#: templates/umap/password_change.html:17
#: templates/umap/password_change.html:21
msgid "Old password"
msgstr ""
#: templates/umap/password_change.html:22
#: templates/umap/password_change.html:26
msgid "New password"
msgstr ""
#: templates/umap/password_change.html:26
#: templates/umap/password_change.html:30
msgid "New password confirmation"
msgstr ""
#: templates/umap/password_change.html:27
#: templates/umap/password_change.html:31
msgid "Change my password"
msgstr ""
#: templates/umap/password_change_done.html:7
#: templates/umap/password_change_done.html:6
#: templates/umap/password_change_done.html:11
msgid "Password change successful"
msgstr ""
#: templates/umap/password_change_done.html:10
#: templates/umap/password_change_done.html:14
msgid "Your password was changed."
msgstr ""
#: templates/umap/search.html:15
#: templates/umap/search.html:6
msgid "Explore maps"
msgstr ""
#: templates/umap/search.html:19
#, python-format
msgid "%(count)s map found:"
msgid_plural "%(count)s maps found:"
msgstr[0] ""
msgstr[1] ""
#: templates/umap/search.html:24
#: templates/umap/search.html:30
msgid "No map found."
msgstr ""
#: templates/umap/search.html:29
#: templates/umap/search.html:36
msgid "Latest created maps in category"
msgstr ""
#: templates/umap/search.html:43
msgid "Latest created maps"
msgstr ""
@ -572,25 +675,42 @@ msgstr ""
msgid "Search maps"
msgstr ""
#: templates/umap/search_bar.html:15
#: templates/umap/search_bar.html:14
msgid "Any category"
msgstr ""
#: templates/umap/search_bar.html:19
msgid "Search"
msgstr ""
#: templates/umap/team_detail.html:10
#: templates/umap/team_confirm_delete.html:6
msgid "Team deletion"
msgstr ""
#: templates/umap/team_detail.html:6
#, python-format
msgid "%(current_team)ss maps"
msgstr ""
#: templates/umap/team_detail.html:14
#, python-format
msgid "Browse %(current_team)s's maps"
msgstr ""
#: templates/umap/team_detail.html:22
#: templates/umap/team_detail.html:26
#, python-format
msgid "%(current_team)s has no public maps."
msgstr ""
#: templates/umap/team_form.html:24
#: templates/umap/team_form.html:6
msgid "Create or edit a team"
msgstr ""
#: templates/umap/team_form.html:28
msgid "Delete this team"
msgstr ""
#: templates/umap/team_form.html:47
#: templates/umap/team_form.html:51
msgid "Add user"
msgstr ""
@ -611,78 +731,82 @@ msgstr ""
msgid "You have no map yet."
msgstr ""
#: templates/umap/user_teams.html:17
#: templates/umap/user_teams.html:6
msgid "My Teams"
msgstr ""
#: templates/umap/user_teams.html:21
msgid "Users"
msgstr ""
#: templates/umap/user_teams.html:48
#: templates/umap/user_teams.html:52
msgid "New team"
msgstr ""
#: views.py:234
#: views.py:235
msgid "Cannot delete a team with more than one member"
msgstr ""
#: views.py:238
#: views.py:239
#, python-format
msgid "Team “%(name)s” has been deleted"
msgstr ""
#: views.py:442
#: views.py:449
msgid "View the map"
msgstr ""
#: views.py:825
#: views.py:845
msgid "See full screen"
msgstr ""
#: views.py:968
#: views.py:988
msgid "Map editors updated with success!"
msgstr ""
#: views.py:1004
#: views.py:1024
#, python-format
msgid "The uMap edit link for your map: %(map_name)s"
msgstr ""
#: views.py:1007
#: views.py:1027
#, python-format
msgid "Here is your secret edit link: %(link)s"
msgstr ""
#: views.py:1014
#: views.py:1034
#, python-format
msgid "Can't send email to %(email)s"
msgstr ""
#: views.py:1017
#: views.py:1037
#, python-format
msgid "Email sent to %(email)s"
msgstr ""
#: views.py:1028
#: views.py:1048
msgid "Only its owner can delete the map."
msgstr ""
#: views.py:1031
#: views.py:1054
msgid "Map successfully deleted."
msgstr ""
#: views.py:1057
#: views.py:1080
#, python-format
msgid ""
"Your map has been cloned! If you want to edit this map from another "
"computer, please use this link: %(anonymous_url)s"
msgstr ""
#: views.py:1062
#: views.py:1085
msgid "Congratulations, your map has been cloned!"
msgstr ""
#: views.py:1313
#: views.py:1339
msgid "Layer successfully deleted."
msgstr ""
#: views.py:1335
#: views.py:1361
msgid "Permissions updated with success!"
msgstr ""

Binary file not shown.

View file

@ -8,6 +8,7 @@
# Eric Armijo, 2023
# Gonzalo Gabriel Perez <zalitoar@gmail.com>, 2019
# Ignacio L'Episcopo, 2024
# Ignacio L'Episcopo, 2024-2025
# Igor Támara <igor@tamarapatino.org>, 2013
# 3c4f354c26c2c190ba28f9c2666d7fdb_003e9d1 <b28923423b98dace80389ae64c99bf93_129697>, 2014
# 3c4f354c26c2c190ba28f9c2666d7fdb_003e9d1 <b28923423b98dace80389ae64c99bf93_129697>, 2014,2016-2017,2020
@ -16,9 +17,9 @@ msgid ""
msgstr ""
"Project-Id-Version: uMap\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-12-24 08:39+0000\n"
"POT-Creation-Date: 2025-04-11 15:30+0000\n"
"PO-Revision-Date: 2013-11-22 14:00+0000\n"
"Last-Translator: Ignacio L'Episcopo, 2024\n"
"Last-Translator: Ignacio L'Episcopo, 2024-2025\n"
"Language-Team: Spanish (http://app.transifex.com/openstreetmap/umap/language/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -32,189 +33,279 @@ msgstr "Exportar CSV"
#: decorators.py:60
msgid "This map is not publicly available"
msgstr ""
msgstr "Este mapa no está disponible públicamente"
#: middleware.py:13
#: middleware.py:19
msgid "Site is readonly for maintenance"
msgstr "Sitio en modo solo lectura por mantenimiento"
#: models.py:60 models.py:79
#: middleware.py:34
#, python-format
msgid ""
"Using “%(name)s” to authenticate is deprecated and will be removed soon. "
"Please configure another provider below before losing access to your account"
" and maps. Then, please logout and login again with the new provider."
msgstr "El uso de “%(name)s” para autenticar está obsoleto y se eliminará pronto. Por favor, configura otro proveedor a continuación antes de perder acceso a tu cuenta y mapas. Luego, cierra sesión e inicia sesión nuevamente con el nuevo proveedor."
#: models.py:61 models.py:80
msgid "name"
msgstr "nombre"
#: models.py:62 models.py:475
#: models.py:63 models.py:493
msgid "description"
msgstr "descripción"
#: models.py:110
#: models.py:111
msgid "details"
msgstr "detalles"
#: models.py:111
#: models.py:112
msgid "Link to a page where the licence is detailed."
msgstr "Enlace a una página donde se detalla la licencia."
#: models.py:121
#: models.py:122
msgid "URL template using OSM tile format"
msgstr "Plantilla de URL usando el formato de teselas OSM"
#: models.py:127
#: models.py:128
msgid "Order of the tilelayers in the edit box"
msgstr "Orden de las capas de teselas en el cuadro de edición"
#: models.py:175 models.py:469
#: models.py:176 models.py:487
msgid "Only editable with secret edit link"
msgstr "Solo editable con enlace secreto de edición"
#: models.py:176 models.py:470
#: models.py:177 models.py:488
msgid "Everyone can edit"
msgstr "Todos pueden editar"
#: models.py:179 models.py:463
#: models.py:180 models.py:481
msgid "Everyone"
msgstr "Todos"
#: models.py:180 models.py:189 models.py:464
#: models.py:181 models.py:190 models.py:482
msgid "Editors and team only"
msgstr "Solo editores y equipo"
#: models.py:181 models.py:465
#: models.py:182 models.py:483
msgid "Owner only"
msgstr "Solo el propietario"
#: models.py:184
msgid "Draft (private)"
msgstr ""
#: models.py:185
msgid "Draft (private)"
msgstr "Borrador (privado)"
#: models.py:186
msgid "Everyone (public)"
msgstr "Todos (público)"
#: models.py:188
#: models.py:189
msgid "Anyone with link"
msgstr "Cualquiera con el enlace"
#: models.py:190
#: models.py:191
msgid "Blocked"
msgstr "Bloqueado"
#: models.py:191
#: models.py:192 models.py:477
msgid "Deleted"
msgstr ""
msgstr "Eliminado"
#: models.py:194
#: models.py:195
msgid "center"
msgstr "centro"
#: models.py:195
#: models.py:196
msgid "zoom"
msgstr "zoom"
#: models.py:197
#: models.py:198
msgid "locate"
msgstr "localizar"
#: models.py:197
#: models.py:198
msgid "Locate user on load?"
msgstr "¿Localizar al usuario al cargar?"
#: models.py:201
#: models.py:202
msgid "Choose the map licence."
msgstr "Elige la licencia del mapa."
#: models.py:202
#: models.py:203
msgid "licence"
msgstr "licencia"
#: models.py:213
#: models.py:214
msgid "owner"
msgstr "propietario"
#: models.py:217
#: models.py:218
msgid "editors"
msgstr "editores"
#: models.py:223
#: models.py:224
msgid "team"
msgstr "equipo"
#: models.py:229 models.py:491
#: models.py:230 models.py:509
msgid "edit status"
msgstr "estado de edición"
#: models.py:234
#: models.py:235 models.py:514
msgid "share status"
msgstr "estado de compartir"
#: models.py:237 models.py:486
#: models.py:238 models.py:504
msgid "settings"
msgstr "ajustes"
#: models.py:402
#: models.py:410
msgid "Clone of"
msgstr "Clon de"
#: models.py:462 models.py:468
#: models.py:476 models.py:480 models.py:486
msgid "Inherit"
msgstr "Heredar"
#: models.py:481
#: models.py:499
msgid "display on load"
msgstr "mostrar al cargar"
#: models.py:482
#: models.py:500
msgid "Display this layer on load."
msgstr "Mostrar esta capa al cargar."
#: settings/base.py:295
msgid "Art and Culture"
msgstr "Arte y cultura"
#: settings/base.py:296
msgid "Cycling"
msgstr "Ciclismo"
#: settings/base.py:297
msgid "Business"
msgstr "Negocios"
#: settings/base.py:298
msgid "Environment"
msgstr "Medio ambiente"
#: settings/base.py:299
msgid "Education"
msgstr "Educación"
#: settings/base.py:300
msgid "Food and Agriculture"
msgstr "Alimentos y agricultura"
#: settings/base.py:301
msgid "Geopolitics"
msgstr "Geopolítica"
#: settings/base.py:302
msgid "Health"
msgstr "Salud"
#: settings/base.py:303
msgid "Hiking"
msgstr "Senderismo"
#: settings/base.py:304
msgid "History"
msgstr "Historia"
#: settings/base.py:305
msgid "Public sector"
msgstr "Sector público"
#: settings/base.py:306
msgid "Science"
msgstr "Ciencia"
#: settings/base.py:307
msgid "Shopping"
msgstr "Compras"
#: settings/base.py:308
msgid "Sport and Leisure"
msgstr "Deporte y ocio"
#: settings/base.py:309
msgid "Travel"
msgstr "Viajes"
#: settings/base.py:310
msgid "Transports"
msgstr "Transporte"
#: settings/base.py:311
msgid "Tourism"
msgstr "Turismo"
#: templates/403.html:8
msgid ""
"<a href=\"https://discover.umap-project.org/support/faq/#map-statuses\" "
"target=\"_blank\">Find out here the documentation</a> on how to manage maps"
" permissions."
msgstr ""
msgstr "<a href=\"https://discover.umap-project.org/support/faq/#map-statuses\" target=\"_blank\">Consulta aquí la documentación</a> sobre cómo gestionar los permisos del mapa."
#: templates/403.html:10 templates/404.html:8
msgid "← Go to the homepage"
msgstr ""
msgstr "← Ir a la página principal"
#: templates/404.html:7
msgid "404 Page Not Found"
msgstr ""
msgstr "404 Página no encontrada"
#: templates/auth/user_detail.html:8
#: templates/auth/user_detail.html:6
#, python-format
msgid "%(current_user)ss maps"
msgstr "Mapas de %(current_user)s"
#: templates/auth/user_detail.html:12
#, python-format
msgid "Browse %(current_user)s's maps"
msgstr "Explorar los mapas de %(current_user)s"
#: templates/auth/user_detail.html:17
#: templates/auth/user_detail.html:21
#, python-format
msgid "%(current_user)s has no maps."
msgstr "%(current_user)s no tiene mapas."
#: templates/auth/user_form.html:21 templates/umap/team_form.html:21
#: templates/auth/user_form.html:6
msgid "My Profile"
msgstr "Mi perfil"
#: templates/auth/user_form.html:24 templates/umap/team_form.html:25
msgid "Save"
msgstr "Guardar"
#: templates/auth/user_form.html:27
#: templates/auth/user_form.html:30
msgid "Your current providers"
msgstr "Tus proveedores actuales"
#: templates/auth/user_form.html:39
#: templates/auth/user_form.html:44
msgid "Connect to another provider"
msgstr "Conectar con otro proveedor"
#: templates/auth/user_form.html:42
#: templates/auth/user_form.html:47
msgid ""
"It's a good habit to connect your account to more than one provider, in case"
" one provider becomes unavailable, temporarily or even permanently."
msgstr "Es un buen hábito conectar tu cuenta a más de un proveedor, en caso de que uno no esté disponible, temporal o permanentemente."
#: templates/auth/user_stars.html:8
#: templates/auth/user_stars.html:6
#, python-format
msgid "%(current_user)ss starred maps"
msgstr "Mapas destacados de %(current_user)s"
#: templates/auth/user_stars.html:12
#, python-format
msgid "Browse %(current_user)s's starred maps"
msgstr "Explorar los mapas destacados de %(current_user)s"
#: templates/auth/user_stars.html:17
#: templates/auth/user_stars.html:21
#, python-format
msgid "%(current_user)s has no starred maps yet."
msgstr "%(current_user)s no tiene mapas destacados todavía."
@ -231,11 +322,11 @@ msgstr "Iniciar sesión"
#: templates/registration/login.html:22
msgid "To save and easily find your maps, identify yourself."
msgstr ""
msgstr "Para guardar y encontrar fácilmente tus mapas, identifícate."
#: templates/registration/login.html:25
msgid "Please log in with your account:"
msgstr ""
msgstr "Por favor, inicia sesión con tu cuenta:"
#: templates/registration/login.html:42
msgid "Username"
@ -247,7 +338,11 @@ msgstr "Contraseña"
#: templates/registration/login.html:52
msgid "Please choose a provider:"
msgstr ""
msgstr "Por favor, elige un proveedor:"
#: templates/umap/about.html:5 templates/umap/navigation.html:22
msgid "About"
msgstr "Acerca de"
#: templates/umap/about_summary.html:12
#, python-format
@ -400,7 +495,7 @@ msgstr "Mis equipos"
msgid "Map of the uMaps"
msgstr "Mapa de los uMaps"
#: templates/umap/home.html:24
#: templates/umap/home.html:25
msgid "Get inspired, browse maps"
msgstr "Inspírate, navega por los mapas"
@ -408,15 +503,19 @@ msgstr "Inspírate, navega por los mapas"
msgid "You are logged in. Continuing..."
msgstr "Has iniciado sesión. Continuando..."
#: templates/umap/map_list.html:11 views.py:437
#: templates/umap/map_list.html:18 views.py:444
msgid "by"
msgstr "por"
#: templates/umap/map_list.html:20
#: templates/umap/map_list.html:22
msgid "See the map"
msgstr "Ver el mapa"
#: templates/umap/map_list.html:28
msgid "More"
msgstr "Más"
#: templates/umap/map_table.html:8 templates/umap/user_teams.html:14
#: templates/umap/map_table.html:8 templates/umap/user_teams.html:18
msgid "Name"
msgstr "Nombre"
@ -440,7 +539,7 @@ msgstr "Último guardado"
msgid "Owner"
msgstr "Dueño"
#: templates/umap/map_table.html:26 templates/umap/user_teams.html:20
#: templates/umap/map_table.html:26 templates/umap/user_teams.html:24
msgid "Actions"
msgstr "Acciones"
@ -453,7 +552,7 @@ msgid "Share"
msgstr "Compartir"
#: templates/umap/map_table.html:78 templates/umap/map_table.html:80
#: templates/umap/user_teams.html:38 templates/umap/user_teams.html:40
#: templates/umap/user_teams.html:42 templates/umap/user_teams.html:44
msgid "Edit"
msgstr "Editar"
@ -516,10 +615,6 @@ msgstr "Ingresar"
msgid "Sign in"
msgstr "Regístrarse"
#: templates/umap/navigation.html:22
msgid "About"
msgstr "Acerca de"
#: templates/umap/navigation.html:30
msgid "Change password"
msgstr "Cambiar contraseña"
@ -528,41 +623,47 @@ msgstr "Cambiar contraseña"
msgid "Log out"
msgstr "Salir"
#: templates/umap/password_change.html:7
#: templates/umap/password_change.html:6
#: templates/umap/password_change.html:11
msgid "Password change"
msgstr "Contraseña cambiada"
#: templates/umap/password_change.html:10
#: templates/umap/password_change.html:14
msgid ""
"Please enter your old password, for security's sake, and then enter your new"
" password twice so we can verify you typed it in correctly."
msgstr "Introduzca su contraseña antigua, por seguridad, y luego introduzca su nueva contraseña dos veces para que podamos verificar si ha escrito correctamente."
#: templates/umap/password_change.html:17
#: templates/umap/password_change.html:21
msgid "Old password"
msgstr "Contraseña antigua"
#: templates/umap/password_change.html:22
#: templates/umap/password_change.html:26
msgid "New password"
msgstr "Nueva contraseña"
#: templates/umap/password_change.html:26
#: templates/umap/password_change.html:30
msgid "New password confirmation"
msgstr "Confirmar nueva contraseña"
#: templates/umap/password_change.html:27
#: templates/umap/password_change.html:31
msgid "Change my password"
msgstr "Cambiar mi contraseña"
#: templates/umap/password_change_done.html:7
#: templates/umap/password_change_done.html:6
#: templates/umap/password_change_done.html:11
msgid "Password change successful"
msgstr "Contraseña cambiada con éxito"
#: templates/umap/password_change_done.html:10
#: templates/umap/password_change_done.html:14
msgid "Your password was changed."
msgstr "Su contraseña fue guardada."
#: templates/umap/search.html:15
#: templates/umap/search.html:6
msgid "Explore maps"
msgstr "Explorar mapas"
#: templates/umap/search.html:19
#, python-format
msgid "%(count)s map found:"
msgid_plural "%(count)s maps found:"
@ -570,11 +671,15 @@ msgstr[0] "%(count)s mapa encontrado:"
msgstr[1] "%(count)s mapas encontrados:"
msgstr[2] "%(count)s mapas encontrados:"
#: templates/umap/search.html:24
#: templates/umap/search.html:30
msgid "No map found."
msgstr "No se ha encontrado ningún mapa."
#: templates/umap/search.html:29
#: templates/umap/search.html:36
msgid "Latest created maps in category"
msgstr "Últimos mapas creados en la categoría"
#: templates/umap/search.html:43
msgid "Latest created maps"
msgstr "Últimos mapas creados"
@ -582,25 +687,42 @@ msgstr "Últimos mapas creados"
msgid "Search maps"
msgstr "Buscar mapas"
#: templates/umap/search_bar.html:15
#: templates/umap/search_bar.html:14
msgid "Any category"
msgstr "Cualquier categoría"
#: templates/umap/search_bar.html:19
msgid "Search"
msgstr "Buscar"
#: templates/umap/team_detail.html:10
#: templates/umap/team_confirm_delete.html:6
msgid "Team deletion"
msgstr "Eliminación de equipo"
#: templates/umap/team_detail.html:6
#, python-format
msgid "%(current_team)ss maps"
msgstr "Mapas de %(current_team)s"
#: templates/umap/team_detail.html:14
#, python-format
msgid "Browse %(current_team)s's maps"
msgstr "Explorar los mapas de %(current_team)s"
#: templates/umap/team_detail.html:22
#: templates/umap/team_detail.html:26
#, python-format
msgid "%(current_team)s has no public maps."
msgstr "%(current_team)s no tiene mapas públicos."
#: templates/umap/team_form.html:24
#: templates/umap/team_form.html:6
msgid "Create or edit a team"
msgstr "Crear o editar un equipo"
#: templates/umap/team_form.html:28
msgid "Delete this team"
msgstr "Eliminar este equipo"
#: templates/umap/team_form.html:47
#: templates/umap/team_form.html:51
msgid "Add user"
msgstr "Añadir usuario"
@ -621,78 +743,82 @@ msgstr "Descargar %(count)s mapas"
msgid "You have no map yet."
msgstr "Aún no tiene mapa."
#: templates/umap/user_teams.html:17
#: templates/umap/user_teams.html:6
msgid "My Teams"
msgstr "Mis equipos"
#: templates/umap/user_teams.html:21
msgid "Users"
msgstr "Usuarios"
#: templates/umap/user_teams.html:48
#: templates/umap/user_teams.html:52
msgid "New team"
msgstr "Nuevo equipo"
#: views.py:234
#: views.py:235
msgid "Cannot delete a team with more than one member"
msgstr "No se puede eliminar un equipo con más de un miembro"
#: views.py:238
#: views.py:239
#, python-format
msgid "Team “%(name)s” has been deleted"
msgstr "El equipo “%(name)s” ha sido eliminado"
#: views.py:442
#: views.py:449
msgid "View the map"
msgstr "Ver el mapa"
#: views.py:825
#: views.py:845
msgid "See full screen"
msgstr "Ver en pantalla completa"
#: views.py:968
#: views.py:988
msgid "Map editors updated with success!"
msgstr "¡Los editores del mapas han sido actualizados con éxito!"
#: views.py:1004
#: views.py:1024
#, python-format
msgid "The uMap edit link for your map: %(map_name)s"
msgstr "El enlace de edición de uMap para tu mapa: %(map_name)s"
#: views.py:1007
#: views.py:1027
#, python-format
msgid "Here is your secret edit link: %(link)s"
msgstr "Aquí está tu enlace secreto de edición: %(link)s"
#: views.py:1014
#: views.py:1034
#, python-format
msgid "Can't send email to %(email)s"
msgstr "No se puede enviar correo electrónico a %(email)s"
#: views.py:1017
#: views.py:1037
#, python-format
msgid "Email sent to %(email)s"
msgstr "Correo electrónico enviado a %(email)s"
#: views.py:1028
#: views.py:1048
msgid "Only its owner can delete the map."
msgstr "Sólo el propietario puede borrar el mapa."
#: views.py:1031
#: views.py:1054
msgid "Map successfully deleted."
msgstr "Mapa eliminado correctamente."
#: views.py:1057
#: views.py:1080
#, python-format
msgid ""
"Your map has been cloned! If you want to edit this map from another "
"computer, please use this link: %(anonymous_url)s"
msgstr "¡Tu mapa ha sido clonado! Si quieres editar este mapa desde otro ordenador, usa este enlace: %(anonymous_url)s"
#: views.py:1062
#: views.py:1085
msgid "Congratulations, your map has been cloned!"
msgstr "¡Enhorabuena! ¡Tu mapa ha sido clonado!"
#: views.py:1313
#: views.py:1339
msgid "Layer successfully deleted."
msgstr "Se eliminó la capa con éxito."
#: views.py:1335
#: views.py:1361
msgid "Permissions updated with success!"
msgstr "¡Permisos actualizados con éxito!"

Binary file not shown.

View file

@ -4,14 +4,14 @@
#
# Translators:
# Moon Ika, 2020
# Moon Ika, 2020
# Moon Ika, 2020,2025
msgid ""
msgstr ""
"Project-Id-Version: uMap\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-12-24 08:39+0000\n"
"POT-Creation-Date: 2025-03-07 15:18+0000\n"
"PO-Revision-Date: 2013-11-22 14:00+0000\n"
"Last-Translator: Moon Ika, 2020\n"
"Last-Translator: Moon Ika, 2020,2025\n"
"Language-Team: Estonian (http://app.transifex.com/openstreetmap/umap/language/et/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -21,21 +21,29 @@ msgstr ""
#: admin.py:16
msgid "CSV Export"
msgstr ""
msgstr "CSV eksport"
#: decorators.py:60
msgid "This map is not publicly available"
msgstr ""
msgstr "See kaart pole avalikult kättesaadav"
#: middleware.py:13
#: middleware.py:19
msgid "Site is readonly for maintenance"
msgstr "Sait on hoolduseks kirjutuskaitstud"
#: middleware.py:34
#, python-format
msgid ""
"Using “%(name)s” to authenticate is deprecated and will be removed soon. "
"Please configure another provider below before losing access to your account"
" and maps. Then, please logout and login again with the new provider."
msgstr ""
#: models.py:60 models.py:79
msgid "name"
msgstr "nimi"
#: models.py:62 models.py:475
#: models.py:62 models.py:485
msgid "description"
msgstr "kirjeldus"
@ -55,33 +63,33 @@ msgstr ""
msgid "Order of the tilelayers in the edit box"
msgstr ""
#: models.py:175 models.py:469
#: models.py:175 models.py:479
msgid "Only editable with secret edit link"
msgstr "Muudetav ainult salajase muutmislingiga"
#: models.py:176 models.py:470
#: models.py:176 models.py:480
msgid "Everyone can edit"
msgstr "Igaüks saab muuta"
#: models.py:179 models.py:463
#: models.py:179 models.py:473
msgid "Everyone"
msgstr ""
msgstr "Kõik"
#: models.py:180 models.py:189 models.py:464
#: models.py:180 models.py:189 models.py:474
msgid "Editors and team only"
msgstr ""
msgstr "Ainult toimetajad ja meeskond"
#: models.py:181 models.py:465
#: models.py:181 models.py:475
msgid "Owner only"
msgstr ""
msgstr "Ainult omanik"
#: models.py:184
msgid "Draft (private)"
msgstr ""
msgstr "Mustand (privaatne)"
#: models.py:185
msgid "Everyone (public)"
msgstr ""
msgstr "Kõik (avalik)"
#: models.py:188
msgid "Anyone with link"
@ -89,11 +97,11 @@ msgstr ""
#: models.py:190
msgid "Blocked"
msgstr ""
msgstr "Blokeeritud"
#: models.py:191
#: models.py:191 models.py:469
msgid "Deleted"
msgstr ""
msgstr "Kustutatud"
#: models.py:194
msgid "center"
@ -109,7 +117,7 @@ msgstr "määra asukoht"
#: models.py:197
msgid "Locate user on load?"
msgstr "Määra kasutaja asukoht laadimisel?"
msgstr "Määra laadimisel kasutaja asukoht?"
#: models.py:201
msgid "Choose the map licence."
@ -129,33 +137,33 @@ msgstr "toimetajad"
#: models.py:223
msgid "team"
msgstr ""
msgstr "meeskond"
#: models.py:229 models.py:491
#: models.py:229 models.py:501
msgid "edit status"
msgstr "muutmise staatus"
#: models.py:234
#: models.py:234 models.py:506
msgid "share status"
msgstr "jagamise staatus"
#: models.py:237 models.py:486
#: models.py:237 models.py:496
msgid "settings"
msgstr "seaded"
#: models.py:402
#: models.py:407
msgid "Clone of"
msgstr "Koopia"
#: models.py:462 models.py:468
#: models.py:468 models.py:472 models.py:478
msgid "Inherit"
msgstr ""
#: models.py:481
#: models.py:491
msgid "display on load"
msgstr "kuva laadimisel"
#: models.py:482
#: models.py:492
msgid "Display this layer on load."
msgstr "Kuva seda kihti laadimisel"
@ -168,46 +176,60 @@ msgstr ""
#: templates/403.html:10 templates/404.html:8
msgid "← Go to the homepage"
msgstr ""
msgstr "← Mine avalehele"
#: templates/404.html:7
msgid "404 Page Not Found"
msgstr "404 Lehte ei leitud"
#: templates/auth/user_detail.html:6
#, python-format
msgid "%(current_user)ss maps"
msgstr ""
#: templates/auth/user_detail.html:8
#: templates/auth/user_detail.html:12
#, python-format
msgid "Browse %(current_user)s's maps"
msgstr "Sirvi kasutaja %(current_user)s kaarte"
#: templates/auth/user_detail.html:17
#: templates/auth/user_detail.html:21
#, python-format
msgid "%(current_user)s has no maps."
msgstr "Kasutajal %(current_user)s pole kaarte."
#: templates/auth/user_form.html:21 templates/umap/team_form.html:21
msgid "Save"
msgstr ""
#: templates/auth/user_form.html:6
msgid "My Profile"
msgstr "Minu profiil"
#: templates/auth/user_form.html:27
#: templates/auth/user_form.html:24 templates/umap/team_form.html:25
msgid "Save"
msgstr "Salvesta"
#: templates/auth/user_form.html:30
msgid "Your current providers"
msgstr ""
#: templates/auth/user_form.html:39
#: templates/auth/user_form.html:44
msgid "Connect to another provider"
msgstr ""
#: templates/auth/user_form.html:42
#: templates/auth/user_form.html:47
msgid ""
"It's a good habit to connect your account to more than one provider, in case"
" one provider becomes unavailable, temporarily or even permanently."
msgstr ""
#: templates/auth/user_stars.html:8
#: templates/auth/user_stars.html:6
#, python-format
msgid "%(current_user)ss starred maps"
msgstr ""
#: templates/auth/user_stars.html:12
#, python-format
msgid "Browse %(current_user)s's starred maps"
msgstr ""
#: templates/auth/user_stars.html:17
#: templates/auth/user_stars.html:21
#, python-format
msgid "%(current_user)s has no starred maps yet."
msgstr ""
@ -224,11 +246,11 @@ msgstr "Logi sisse"
#: templates/registration/login.html:22
msgid "To save and easily find your maps, identify yourself."
msgstr ""
msgstr "Tuvasta end kaartide salvestamiseks ja kiireks leidmiseks."
#: templates/registration/login.html:25
msgid "Please log in with your account:"
msgstr ""
msgstr "Palun logi oma kontoga sisse:"
#: templates/registration/login.html:42
msgid "Username"
@ -240,7 +262,11 @@ msgstr "Salasõna"
#: templates/registration/login.html:52
msgid "Please choose a provider:"
msgstr ""
msgstr "Vali teenusepakkuja:"
#: templates/umap/about.html:5 templates/umap/navigation.html:22
msgid "About"
msgstr "Teave"
#: templates/umap/about_summary.html:12
#, python-format
@ -307,23 +333,23 @@ msgstr ""
#: templates/umap/components/alerts/alert.html:37
msgid "Here is your secret link to edit the map, please keep it safe:"
msgstr ""
msgstr "Siin on sinu salalink kaardi toimetamiseks, hoia seda salajas:"
#: templates/umap/components/alerts/alert.html:41
msgid "Copy link"
msgstr ""
msgstr "Kopeeri link"
#: templates/umap/components/alerts/alert.html:48
msgid "Enter your email address to receive the secret link:"
msgstr ""
msgstr "Sisesta salalingi saamiseks oma e-posti aadress:"
#: templates/umap/components/alerts/alert.html:54
msgid "Email"
msgstr ""
msgstr "E-post"
#: templates/umap/components/alerts/alert.html:57
msgid "Send me the link"
msgstr ""
msgstr "Saada mulle link"
#: templates/umap/components/alerts/alert.html:81
msgid "See their edits in another tab"
@ -354,11 +380,11 @@ msgstr ""
#: templates/umap/content_footer.html:5
msgid "An OpenStreetMap project"
msgstr ""
msgstr "OpenStreetMapi projekt"
#: templates/umap/content_footer.html:6
msgid "version"
msgstr ""
msgstr "versioon"
#: templates/umap/content_footer.html:7
msgid "Hosted by"
@ -366,32 +392,32 @@ msgstr ""
#: templates/umap/content_footer.html:8
msgid "Contact"
msgstr ""
msgstr "Kontakt"
#: templates/umap/content_footer.html:9 templates/umap/navigation.html:25
msgid "Help"
msgstr ""
msgstr "Abi"
#: templates/umap/dashboard_menu.html:6
#, python-format
msgid "My Maps (%(count)s)"
msgstr ""
msgstr "Minu kaardid (%(count)s)"
#: templates/umap/dashboard_menu.html:8
msgid "My Maps"
msgstr ""
msgstr "Minu kaardid"
#: templates/umap/dashboard_menu.html:12
msgid "My profile"
msgstr ""
msgstr "Minu profiil"
#: templates/umap/dashboard_menu.html:15
msgid "My teams"
msgstr ""
msgstr "Minu meeskonnad"
#: templates/umap/home.html:14
msgid "Map of the uMaps"
msgstr "uMaps'i kaart"
msgstr "uMapsi kaart"
#: templates/umap/home.html:24
msgid "Get inspired, browse maps"
@ -401,7 +427,7 @@ msgstr "Sirvi kaarte ja ammuta inspiratsiooni"
msgid "You are logged in. Continuing..."
msgstr "Oled sisse logitud. Jätkamine..."
#: templates/umap/map_list.html:11 views.py:437
#: templates/umap/map_list.html:11 views.py:438
msgid "by"
msgstr "kasutajalt"
@ -409,31 +435,31 @@ msgstr "kasutajalt"
msgid "More"
msgstr "Rohkem"
#: templates/umap/map_table.html:8 templates/umap/user_teams.html:14
#: templates/umap/map_table.html:8 templates/umap/user_teams.html:18
msgid "Name"
msgstr ""
msgstr "Nimi"
#: templates/umap/map_table.html:11
msgid "Preview"
msgstr ""
msgstr "Eelvaade"
#: templates/umap/map_table.html:14
msgid "Who can see"
msgstr ""
msgstr "Kes saavad vaadata"
#: templates/umap/map_table.html:17
msgid "Who can edit"
msgstr ""
msgstr "Kes saavad toimetada"
#: templates/umap/map_table.html:20
msgid "Last save"
msgstr ""
msgstr "Viimane salvestamine"
#: templates/umap/map_table.html:23
msgid "Owner"
msgstr ""
msgstr "Omanik"
#: templates/umap/map_table.html:26 templates/umap/user_teams.html:20
#: templates/umap/map_table.html:26 templates/umap/user_teams.html:24
msgid "Actions"
msgstr ""
@ -443,16 +469,16 @@ msgstr ""
#: templates/umap/map_table.html:72 templates/umap/map_table.html:74
msgid "Share"
msgstr ""
msgstr "Jaga"
#: templates/umap/map_table.html:78 templates/umap/map_table.html:80
#: templates/umap/user_teams.html:38 templates/umap/user_teams.html:40
#: templates/umap/user_teams.html:42 templates/umap/user_teams.html:44
msgid "Edit"
msgstr ""
msgstr "Redigeeri"
#: templates/umap/map_table.html:84 templates/umap/map_table.html:86
msgid "Download"
msgstr ""
msgstr "Laadi alla"
#: templates/umap/map_table.html:90 templates/umap/map_table.html:92
msgid "Clone"
@ -460,38 +486,38 @@ msgstr ""
#: templates/umap/map_table.html:101 templates/umap/map_table.html:103
msgid "Delete"
msgstr ""
msgstr "Kustuta"
#: templates/umap/map_table.html:117
msgid "first"
msgstr ""
msgstr "esimene"
#: templates/umap/map_table.html:118
msgid "previous"
msgstr ""
msgstr "eelmine"
#: templates/umap/map_table.html:126
#, python-format
msgid "Page %(maps_number)s of %(num_pages)s"
msgstr ""
msgstr "%(maps_number)s. lehekülg %(num_pages)s-st"
#: templates/umap/map_table.html:131
msgid "next"
msgstr ""
msgstr "järgmine"
#: templates/umap/map_table.html:132
msgid "last"
msgstr ""
msgstr "viimane"
#: templates/umap/map_table.html:140
#, python-format
msgid "Lines per page: %(per_page)s"
msgstr ""
msgstr "Jooni leheküljel: %(per_page)s"
#: templates/umap/map_table.html:145
#, python-format
msgid "%(count)s maps"
msgstr ""
msgstr "%(count)s kaarti"
#: templates/umap/navigation.html:11 templates/umap/user_dashboard.html:6
msgid "My Dashboard"
@ -509,10 +535,6 @@ msgstr "Logi sisse"
msgid "Sign in"
msgstr "Loo konto"
#: templates/umap/navigation.html:22
msgid "About"
msgstr "Teave"
#: templates/umap/navigation.html:30
msgid "Change password"
msgstr "Muuda salasõna"
@ -521,88 +543,107 @@ msgstr "Muuda salasõna"
msgid "Log out"
msgstr "Logi välja"
#: templates/umap/password_change.html:7
#: templates/umap/password_change.html:6
#: templates/umap/password_change.html:11
msgid "Password change"
msgstr "Salasõna vahetamine"
#: templates/umap/password_change.html:10
#: templates/umap/password_change.html:14
msgid ""
"Please enter your old password, for security's sake, and then enter your new"
" password twice so we can verify you typed it in correctly."
msgstr "Sisesta palun oma vana salasõna, seejärel kaks korda uus salasõna."
#: templates/umap/password_change.html:17
#: templates/umap/password_change.html:21
msgid "Old password"
msgstr "Vana salasõna"
#: templates/umap/password_change.html:22
#: templates/umap/password_change.html:26
msgid "New password"
msgstr "Uus salasõna"
#: templates/umap/password_change.html:26
#: templates/umap/password_change.html:30
msgid "New password confirmation"
msgstr "Uue salasõna kinnitamine"
#: templates/umap/password_change.html:27
#: templates/umap/password_change.html:31
msgid "Change my password"
msgstr "Muuda salasõna"
#: templates/umap/password_change_done.html:7
#: templates/umap/password_change_done.html:6
#: templates/umap/password_change_done.html:11
msgid "Password change successful"
msgstr "Salasõna vahetamine õnnestus"
#: templates/umap/password_change_done.html:10
#: templates/umap/password_change_done.html:14
msgid "Your password was changed."
msgstr "Sinu salasõna on muudetud."
#: templates/umap/search.html:15
#: templates/umap/search.html:6
msgid "Explore maps"
msgstr ""
#: templates/umap/search.html:19
#, python-format
msgid "%(count)s map found:"
msgid_plural "%(count)s maps found:"
msgstr[0] ""
msgstr[1] ""
#: templates/umap/search.html:24
#: templates/umap/search.html:28
msgid "No map found."
msgstr ""
msgstr "Kaarti ei leitud."
#: templates/umap/search.html:29
#: templates/umap/search.html:33
msgid "Latest created maps"
msgstr ""
msgstr "Viimati loodud kaardid."
#: templates/umap/search_bar.html:4
msgid "Search maps"
msgstr "Otsi kaarte"
#: templates/umap/search_bar.html:15
#: templates/umap/search_bar.html:16
msgid "Search"
msgstr "Otsi"
#: templates/umap/team_detail.html:10
#: templates/umap/team_confirm_delete.html:6
msgid "Team deletion"
msgstr ""
#: templates/umap/team_detail.html:6
#, python-format
msgid "%(current_team)ss maps"
msgstr ""
#: templates/umap/team_detail.html:14
#, python-format
msgid "Browse %(current_team)s's maps"
msgstr ""
#: templates/umap/team_detail.html:22
#: templates/umap/team_detail.html:26
#, python-format
msgid "%(current_team)s has no public maps."
msgstr ""
#: templates/umap/team_form.html:24
msgid "Delete this team"
#: templates/umap/team_form.html:6
msgid "Create or edit a team"
msgstr ""
#: templates/umap/team_form.html:47
#: templates/umap/team_form.html:28
msgid "Delete this team"
msgstr "Kustuta see meeskond"
#: templates/umap/team_form.html:51
msgid "Add user"
msgstr ""
msgstr "Lisa kasutaja"
#: templates/umap/user_dashboard.html:9 templates/umap/user_dashboard.html:25
msgid "Search my maps"
msgstr ""
msgstr "Otsi minu kaarte"
#: templates/umap/user_dashboard.html:17 templates/umap/user_dashboard.html:22
msgid "Maps title"
msgstr ""
msgstr "Kaardi pealkiri"
#: templates/umap/user_dashboard.html:30
#, python-format
@ -613,78 +654,82 @@ msgstr ""
msgid "You have no map yet."
msgstr ""
#: templates/umap/user_teams.html:17
#: templates/umap/user_teams.html:6
msgid "My Teams"
msgstr "Minu meeskonnad"
#: templates/umap/user_teams.html:21
msgid "Users"
msgstr ""
msgstr "Kasutajad"
#: templates/umap/user_teams.html:48
#: templates/umap/user_teams.html:52
msgid "New team"
msgstr ""
msgstr "Uus meeskond"
#: views.py:234
#: views.py:235
msgid "Cannot delete a team with more than one member"
msgstr ""
#: views.py:238
#: views.py:239
#, python-format
msgid "Team “%(name)s” has been deleted"
msgstr ""
msgstr "Meeskond “%(name)s” on kustutatud"
#: views.py:442
#: views.py:443
msgid "View the map"
msgstr "Vaata kaarti"
#: views.py:825
#: views.py:839
msgid "See full screen"
msgstr ""
msgstr "Vaata täisekraanil"
#: views.py:968
#: views.py:982
msgid "Map editors updated with success!"
msgstr "Kaardi toimetajaid uuendati edukalt!"
#: views.py:1004
#: views.py:1018
#, python-format
msgid "The uMap edit link for your map: %(map_name)s"
msgstr ""
msgstr "Redigeerimislink sinu uMapi kaardile: %(map_name)s"
#: views.py:1007
#: views.py:1021
#, python-format
msgid "Here is your secret edit link: %(link)s"
msgstr ""
#: views.py:1014
#, python-format
msgid "Can't send email to %(email)s"
msgstr ""
#: views.py:1017
#, python-format
msgid "Email sent to %(email)s"
msgstr ""
msgstr "Siin on sinu salajane redigeerimislink: %(link)s"
#: views.py:1028
msgid "Only its owner can delete the map."
msgstr "Kaarti saab kustutada vaid selle omanik."
#, python-format
msgid "Can't send email to %(email)s"
msgstr "Ei saa saata e-kirja aadressile %(email)s"
#: views.py:1031
msgid "Map successfully deleted."
msgstr ""
#, python-format
msgid "Email sent to %(email)s"
msgstr "E-kiri saadetud aadressile %(email)s"
#: views.py:1057
#: views.py:1042
msgid "Only its owner can delete the map."
msgstr "Kaardi saab kustutada vaid selle omanik."
#: views.py:1045
msgid "Map successfully deleted."
msgstr "Kaart on kustutatud."
#: views.py:1071
#, python-format
msgid ""
"Your map has been cloned! If you want to edit this map from another "
"computer, please use this link: %(anonymous_url)s"
msgstr "Sinu kaart on kopeeritud! Kui sa soovid oma kaarti muuta teisest arvutist, kasuta palun seda linki: %(anonymous_url)s"
#: views.py:1062
#: views.py:1076
msgid "Congratulations, your map has been cloned!"
msgstr "Sinu kaart on kopeeritud!"
#: views.py:1313
#: views.py:1330
msgid "Layer successfully deleted."
msgstr "Kiht on kustutatud."
#: views.py:1335
#: views.py:1352
msgid "Permissions updated with success!"
msgstr ""

Binary file not shown.

View file

@ -3,15 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# Alexander Gabilondo <alexgabi@disroot.org>, 2024
# Alexander Gabilondo <alexgabi@disroot.org>, 2024-2025
# Mikel Larreategi <mlarreategi@codesyntax.com>, 2023
msgid ""
msgstr ""
"Project-Id-Version: uMap\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-12-24 08:39+0000\n"
"POT-Creation-Date: 2025-03-07 15:18+0000\n"
"PO-Revision-Date: 2013-11-22 14:00+0000\n"
"Last-Translator: Alexander Gabilondo <alexgabi@disroot.org>, 2024\n"
"Last-Translator: Alexander Gabilondo <alexgabi@disroot.org>, 2024-2025\n"
"Language-Team: Basque (http://app.transifex.com/openstreetmap/umap/language/eu/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -25,17 +25,25 @@ msgstr "CSV esportazioa"
#: decorators.py:60
msgid "This map is not publicly available"
msgstr ""
msgstr "Mapa hau ez dago publikoki erabilgarri"
#: middleware.py:13
#: middleware.py:19
msgid "Site is readonly for maintenance"
msgstr "Webgunea irakurtzeko moduan dago mantentze-lanak direla-eta"
#: middleware.py:34
#, python-format
msgid ""
"Using “%(name)s” to authenticate is deprecated and will be removed soon. "
"Please configure another provider below before losing access to your account"
" and maps. Then, please logout and login again with the new provider."
msgstr ""
#: models.py:60 models.py:79
msgid "name"
msgstr "izena"
#: models.py:62 models.py:475
#: models.py:62 models.py:485
msgid "description"
msgstr "deskribapena"
@ -55,23 +63,23 @@ msgstr "URLaren txantiloia OSMren lauzen formatua erabiliz"
msgid "Order of the tilelayers in the edit box"
msgstr "Lauzen geruzek edizio kutxan duten ordena"
#: models.py:175 models.py:469
#: models.py:175 models.py:479
msgid "Only editable with secret edit link"
msgstr "Bakarrik esteka sekretuarekin bakarrik editatu daiteke"
#: models.py:176 models.py:470
#: models.py:176 models.py:480
msgid "Everyone can edit"
msgstr "Edonork editatu dezake"
#: models.py:179 models.py:463
#: models.py:179 models.py:473
msgid "Everyone"
msgstr "Edonork"
#: models.py:180 models.py:189 models.py:464
#: models.py:180 models.py:189 models.py:474
msgid "Editors and team only"
msgstr "Editoreak eta taldea soilik"
#: models.py:181 models.py:465
#: models.py:181 models.py:475
msgid "Owner only"
msgstr "Jabea bakarrik"
@ -91,7 +99,7 @@ msgstr "Esteka duen edonork"
msgid "Blocked"
msgstr "Blokeatuta"
#: models.py:191
#: models.py:191 models.py:469
msgid "Deleted"
msgstr "Ezabatua"
@ -131,31 +139,31 @@ msgstr "editoreak"
msgid "team"
msgstr "taldea"
#: models.py:229 models.py:491
#: models.py:229 models.py:501
msgid "edit status"
msgstr "editatu egoera"
#: models.py:234
#: models.py:234 models.py:506
msgid "share status"
msgstr "partekatu egoera"
#: models.py:237 models.py:486
#: models.py:237 models.py:496
msgid "settings"
msgstr "ezarpenak"
#: models.py:402
#: models.py:407
msgid "Clone of"
msgstr "Beste honen klona"
#: models.py:462 models.py:468
#: models.py:468 models.py:472 models.py:478
msgid "Inherit"
msgstr "Heredatu"
#: models.py:481
#: models.py:491
msgid "display on load"
msgstr "erakutsi kargatzean"
#: models.py:482
#: models.py:492
msgid "Display this layer on load."
msgstr "Erakutsi geruza hau kargatzean"
@ -164,50 +172,64 @@ msgid ""
"<a href=\"https://discover.umap-project.org/support/faq/#map-statuses\" "
"target=\"_blank\">Find out here the documentation</a> on how to manage maps"
" permissions."
msgstr ""
msgstr " <a href=\"https://discover.umap-project.org/support/faq/#map-statuses\" target=\"_blank\">Ikusi hemen</a> maparen baimenak kudeatzeko dokumentazioa."
#: templates/403.html:10 templates/404.html:8
msgid "← Go to the homepage"
msgstr ""
msgstr "← Joan hasierara"
#: templates/404.html:7
msgid "404 Page Not Found"
msgstr ""
msgstr "404 Ez da orrialdea aurkitu"
#: templates/auth/user_detail.html:8
#: templates/auth/user_detail.html:6
#, python-format
msgid "%(current_user)ss maps"
msgstr "%(current_user)s-ren mapak"
#: templates/auth/user_detail.html:12
#, python-format
msgid "Browse %(current_user)s's maps"
msgstr "Arakatu %(current_user)s erabiltzailearen mapak"
#: templates/auth/user_detail.html:17
#: templates/auth/user_detail.html:21
#, python-format
msgid "%(current_user)s has no maps."
msgstr "%(current_user)s erabiltzaileak ez du maparik."
#: templates/auth/user_form.html:21 templates/umap/team_form.html:21
#: templates/auth/user_form.html:6
msgid "My Profile"
msgstr "Nire profila"
#: templates/auth/user_form.html:24 templates/umap/team_form.html:25
msgid "Save"
msgstr "Gorde"
#: templates/auth/user_form.html:27
#: templates/auth/user_form.html:30
msgid "Your current providers"
msgstr "Zure egungo hornitzaileak"
#: templates/auth/user_form.html:39
#: templates/auth/user_form.html:44
msgid "Connect to another provider"
msgstr "Konektatu beste hornitzaile batekin"
#: templates/auth/user_form.html:42
#: templates/auth/user_form.html:47
msgid ""
"It's a good habit to connect your account to more than one provider, in case"
" one provider becomes unavailable, temporarily or even permanently."
msgstr "Ohitura ona da zure kontua hornitzaile bati baino gehiagori konektatzea, hornitzaileren bat erabilgarri ez badago, aldi baterako edo baita betiko."
#: templates/auth/user_stars.html:8
#: templates/auth/user_stars.html:6
#, python-format
msgid "%(current_user)ss starred maps"
msgstr "%(current_user)s-ren mapa izardunak"
#: templates/auth/user_stars.html:12
#, python-format
msgid "Browse %(current_user)s's starred maps"
msgstr "Arakatu %(current_user)s erabiltzailearen gogoko mapak"
#: templates/auth/user_stars.html:17
#: templates/auth/user_stars.html:21
#, python-format
msgid "%(current_user)s has no starred maps yet."
msgstr "%(current_user)s erabiltzaileak ez du gogoko maparik oraindik."
@ -242,6 +264,10 @@ msgstr "Pasahitza"
msgid "Please choose a provider:"
msgstr "Aukeratu hornitzaile bat:"
#: templates/umap/about.html:5 templates/umap/navigation.html:22
msgid "About"
msgstr "Honi buruz"
#: templates/umap/about_summary.html:12
#, python-format
msgid ""
@ -401,7 +427,7 @@ msgstr "Inspira zaitez dauden mapak arakatzen"
msgid "You are logged in. Continuing..."
msgstr "Sartu egin zara. Jarraitu..."
#: templates/umap/map_list.html:11 views.py:437
#: templates/umap/map_list.html:11 views.py:438
msgid "by"
msgstr "nork eginda"
@ -409,7 +435,7 @@ msgstr "nork eginda"
msgid "More"
msgstr "Gehiago"
#: templates/umap/map_table.html:8 templates/umap/user_teams.html:14
#: templates/umap/map_table.html:8 templates/umap/user_teams.html:18
msgid "Name"
msgstr "Izena"
@ -427,13 +453,13 @@ msgstr "Nork edita dezake"
#: templates/umap/map_table.html:20
msgid "Last save"
msgstr "Azken gordetzea"
msgstr "Gordetako azkena"
#: templates/umap/map_table.html:23
msgid "Owner"
msgstr "Jabea"
#: templates/umap/map_table.html:26 templates/umap/user_teams.html:20
#: templates/umap/map_table.html:26 templates/umap/user_teams.html:24
msgid "Actions"
msgstr "Ekintzak"
@ -446,7 +472,7 @@ msgid "Share"
msgstr "Partekatu"
#: templates/umap/map_table.html:78 templates/umap/map_table.html:80
#: templates/umap/user_teams.html:38 templates/umap/user_teams.html:40
#: templates/umap/user_teams.html:42 templates/umap/user_teams.html:44
msgid "Edit"
msgstr "Editatu"
@ -509,10 +535,6 @@ msgstr "Sartu"
msgid "Sign in"
msgstr "Izena eman"
#: templates/umap/navigation.html:22
msgid "About"
msgstr "Honi buruz"
#: templates/umap/navigation.html:30
msgid "Change password"
msgstr "Aldatu pasahitza"
@ -521,52 +543,58 @@ msgstr "Aldatu pasahitza"
msgid "Log out"
msgstr "Irten"
#: templates/umap/password_change.html:7
#: templates/umap/password_change.html:6
#: templates/umap/password_change.html:11
msgid "Password change"
msgstr "Pasahiz aldaketa"
#: templates/umap/password_change.html:10
#: templates/umap/password_change.html:14
msgid ""
"Please enter your old password, for security's sake, and then enter your new"
" password twice so we can verify you typed it in correctly."
msgstr "Idatzi zure pasahitz zaharra, eta ondoren zure pasahitz berria birritan, horrela ondo sartu duzula egiaztatuko dugu."
#: templates/umap/password_change.html:17
#: templates/umap/password_change.html:21
msgid "Old password"
msgstr "Pasahitz zaharra"
#: templates/umap/password_change.html:22
#: templates/umap/password_change.html:26
msgid "New password"
msgstr "Pasahitz berria"
#: templates/umap/password_change.html:26
#: templates/umap/password_change.html:30
msgid "New password confirmation"
msgstr "Pasahitz berriaren egiaztapena"
#: templates/umap/password_change.html:27
#: templates/umap/password_change.html:31
msgid "Change my password"
msgstr "Aldatu nire pasahitza"
#: templates/umap/password_change_done.html:7
#: templates/umap/password_change_done.html:6
#: templates/umap/password_change_done.html:11
msgid "Password change successful"
msgstr "Pasahitza ondo aldatu da"
#: templates/umap/password_change_done.html:10
#: templates/umap/password_change_done.html:14
msgid "Your password was changed."
msgstr "Zure pasahitza aldatu egin da"
#: templates/umap/search.html:15
#: templates/umap/search.html:6
msgid "Explore maps"
msgstr "Arakatu mapak"
#: templates/umap/search.html:19
#, python-format
msgid "%(count)s map found:"
msgid_plural "%(count)s maps found:"
msgstr[0] "mapa %(count)s aurkitu da:"
msgstr[1] "%(count)s mapa aurkitu dira:"
#: templates/umap/search.html:24
#: templates/umap/search.html:28
msgid "No map found."
msgstr "Ez da maparik aurkitu"
#: templates/umap/search.html:29
#: templates/umap/search.html:33
msgid "Latest created maps"
msgstr "Sortutako azken mapak"
@ -574,25 +602,38 @@ msgstr "Sortutako azken mapak"
msgid "Search maps"
msgstr "Bilatu mapak"
#: templates/umap/search_bar.html:15
#: templates/umap/search_bar.html:16
msgid "Search"
msgstr "Bilatu"
#: templates/umap/team_detail.html:10
#: templates/umap/team_confirm_delete.html:6
msgid "Team deletion"
msgstr "Taldea ezabatzea"
#: templates/umap/team_detail.html:6
#, python-format
msgid "%(current_team)ss maps"
msgstr "%(current_team)s-ren mapak"
#: templates/umap/team_detail.html:14
#, python-format
msgid "Browse %(current_team)s's maps"
msgstr "Arakatu %(current_team)s-ren mapak"
#: templates/umap/team_detail.html:22
#: templates/umap/team_detail.html:26
#, python-format
msgid "%(current_team)s has no public maps."
msgstr "%(current_team)s-k ez dauka mapa publikorik."
#: templates/umap/team_form.html:24
#: templates/umap/team_form.html:6
msgid "Create or edit a team"
msgstr "Sortu edo editatu talde bat"
#: templates/umap/team_form.html:28
msgid "Delete this team"
msgstr "Ezabatu talde hau"
#: templates/umap/team_form.html:47
#: templates/umap/team_form.html:51
msgid "Add user"
msgstr "Gehitu erabiltzailea"
@ -613,78 +654,82 @@ msgstr "Deskargatu %(count)s mapa"
msgid "You have no map yet."
msgstr "Oraindik ez daukazu maparik."
#: templates/umap/user_teams.html:17
#: templates/umap/user_teams.html:6
msgid "My Teams"
msgstr "Nire taldeak"
#: templates/umap/user_teams.html:21
msgid "Users"
msgstr "Erabiltzaileak"
#: templates/umap/user_teams.html:48
#: templates/umap/user_teams.html:52
msgid "New team"
msgstr "Talde berria"
#: views.py:234
#: views.py:235
msgid "Cannot delete a team with more than one member"
msgstr "Ezin da ezabatu kide bat baino gehiago dituen talde bat"
#: views.py:238
#: views.py:239
#, python-format
msgid "Team “%(name)s” has been deleted"
msgstr "“%(name)s” taldea ezabatu da"
#: views.py:442
#: views.py:443
msgid "View the map"
msgstr "Mapa ikusi"
#: views.py:825
#: views.py:839
msgid "See full screen"
msgstr "Ikusi pantaila osoan"
#: views.py:968
#: views.py:982
msgid "Map editors updated with success!"
msgstr "Maparen editoreak ondo eguneratu dira!"
#: views.py:1004
#: views.py:1018
#, python-format
msgid "The uMap edit link for your map: %(map_name)s"
msgstr "Zure mapa editatzeko uMap-en esteka: %(map_name)s"
#: views.py:1007
#: views.py:1021
#, python-format
msgid "Here is your secret edit link: %(link)s"
msgstr "Hona hemen zure editatzeko esteka sekretua:: %(link)s"
#: views.py:1014
#: views.py:1028
#, python-format
msgid "Can't send email to %(email)s"
msgstr "Ezin da posta elektronikorik bidali %(email)s-ri"
#: views.py:1017
#: views.py:1031
#, python-format
msgid "Email sent to %(email)s"
msgstr "Posta elektronikoa bidalita %(email)s-ri"
#: views.py:1028
#: views.py:1042
msgid "Only its owner can delete the map."
msgstr "Jabeak bakarrik ezabatu dezake mapa."
#: views.py:1031
#: views.py:1045
msgid "Map successfully deleted."
msgstr "Mapa behar bezala ezabatu da."
#: views.py:1057
#: views.py:1071
#, python-format
msgid ""
"Your map has been cloned! If you want to edit this map from another "
"computer, please use this link: %(anonymous_url)s"
msgstr "Zure mapa klonatu egin da! Mapa hau beste nabigatzaile batetik editatzeko erabili esteka hau: %(anonymous_url)s"
#: views.py:1062
#: views.py:1076
msgid "Congratulations, your map has been cloned!"
msgstr "Zorionak, zure mapa ondo klonatu da!"
#: views.py:1313
#: views.py:1330
msgid "Layer successfully deleted."
msgstr "Geruza ondo ezabatu da."
#: views.py:1335
#: views.py:1352
msgid "Permissions updated with success!"
msgstr "Baimenak behar bezala eguneratu dira!"

Binary file not shown.

View file

@ -17,16 +17,16 @@
# spf, 2019
# Syl Martin, 2023
# Philippe Verdy, 2017
# yohanboniface <yohanboniface@free.fr>, 2013-2014,2018-2019,2023-2024
# yohanboniface <yohanboniface@free.fr>, 2013-2014,2018-2019,2023-2025
# YOHAN BONIFACE <yb@enix.org>, 2012
# yohanboniface <yohanboniface@free.fr>, 2014,2016
msgid ""
msgstr ""
"Project-Id-Version: uMap\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-12-24 08:39+0000\n"
"POT-Creation-Date: 2025-04-11 15:30+0000\n"
"PO-Revision-Date: 2013-11-22 14:00+0000\n"
"Last-Translator: yohanboniface <yohanboniface@free.fr>, 2013-2014,2018-2019,2023-2024\n"
"Last-Translator: yohanboniface <yohanboniface@free.fr>, 2013-2014,2018-2019,2023-2025\n"
"Language-Team: French (http://app.transifex.com/openstreetmap/umap/language/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -42,138 +42,214 @@ msgstr "Export CSV"
msgid "This map is not publicly available"
msgstr "Cette carte n'est pas publique"
#: middleware.py:13
#: middleware.py:19
msgid "Site is readonly for maintenance"
msgstr "Le site est en lecture seule pour maintenance."
#: models.py:60 models.py:79
#: middleware.py:34
#, python-format
msgid ""
"Using “%(name)s” to authenticate is deprecated and will be removed soon. "
"Please configure another provider below before losing access to your account"
" and maps. Then, please logout and login again with the new provider."
msgstr "Lutilisation de “%(name)s” pour sauthentifier est dépréciée et sera bientôt rendue impossible. Veuillez configurer un nouveau fournisseur ci-dessous avant de perdre laccès à votre compte et à vos cartes. Puis veuillez vous déconnecter et reconnecter avec le nouveau fournisseur."
#: models.py:61 models.py:80
msgid "name"
msgstr "nom"
#: models.py:62 models.py:475
#: models.py:63 models.py:493
msgid "description"
msgstr "description"
#: models.py:110
#: models.py:111
msgid "details"
msgstr "détails"
#: models.py:111
#: models.py:112
msgid "Link to a page where the licence is detailed."
msgstr "Lien vers une page détaillant la licence."
#: models.py:121
#: models.py:122
msgid "URL template using OSM tile format"
msgstr "Modèle d'URL au format des tuiles OSM"
#: models.py:127
#: models.py:128
msgid "Order of the tilelayers in the edit box"
msgstr "Ordre des calques de tuiles dans le panneau de modification"
#: models.py:175 models.py:469
#: models.py:176 models.py:487
msgid "Only editable with secret edit link"
msgstr "Modifiable seulement avec le lien de modification secret"
#: models.py:176 models.py:470
#: models.py:177 models.py:488
msgid "Everyone can edit"
msgstr "Tout le monde peut modifier"
#: models.py:179 models.py:463
#: models.py:180 models.py:481
msgid "Everyone"
msgstr "Tout le monde"
#: models.py:180 models.py:189 models.py:464
#: models.py:181 models.py:190 models.py:482
msgid "Editors and team only"
msgstr "Éditeurs et équipe seulement"
#: models.py:181 models.py:465
#: models.py:182 models.py:483
msgid "Owner only"
msgstr "Propriétaire uniquement"
#: models.py:184
#: models.py:185
msgid "Draft (private)"
msgstr "Brouillon (privé)"
#: models.py:185
#: models.py:186
msgid "Everyone (public)"
msgstr "Tout le monde (public)"
#: models.py:188
#: models.py:189
msgid "Anyone with link"
msgstr "Quiconque a le lien"
#: models.py:190
#: models.py:191
msgid "Blocked"
msgstr "Bloquée"
#: models.py:191
#: models.py:192 models.py:477
msgid "Deleted"
msgstr "Supprimé"
#: models.py:194
#: models.py:195
msgid "center"
msgstr "centre"
#: models.py:195
#: models.py:196
msgid "zoom"
msgstr "zoom"
#: models.py:197
#: models.py:198
msgid "locate"
msgstr "géolocaliser"
#: models.py:197
#: models.py:198
msgid "Locate user on load?"
msgstr "Géolocaliser l'utilisateur au chargement ?"
#: models.py:201
#: models.py:202
msgid "Choose the map licence."
msgstr "Choisir une licence pour la carte"
#: models.py:202
#: models.py:203
msgid "licence"
msgstr "licence"
#: models.py:213
#: models.py:214
msgid "owner"
msgstr "créateur"
#: models.py:217
#: models.py:218
msgid "editors"
msgstr "éditeurs"
#: models.py:223
#: models.py:224
msgid "team"
msgstr "équipe"
#: models.py:229 models.py:491
#: models.py:230 models.py:509
msgid "edit status"
msgstr "statut de modification"
#: models.py:234
#: models.py:235 models.py:514
msgid "share status"
msgstr "qui a accès"
#: models.py:237 models.py:486
#: models.py:238 models.py:504
msgid "settings"
msgstr "réglages"
#: models.py:402
#: models.py:410
msgid "Clone of"
msgstr "Clone de"
#: models.py:462 models.py:468
#: models.py:476 models.py:480 models.py:486
msgid "Inherit"
msgstr "Par défaut"
#: models.py:481
#: models.py:499
msgid "display on load"
msgstr "afficher au chargement."
#: models.py:482
#: models.py:500
msgid "Display this layer on load."
msgstr "Afficher ce calque au chargement."
#: settings/base.py:295
msgid "Art and Culture"
msgstr "Art et culture"
#: settings/base.py:296
msgid "Cycling"
msgstr "Vélo"
#: settings/base.py:297
msgid "Business"
msgstr "Économie"
#: settings/base.py:298
msgid "Environment"
msgstr "Environnement"
#: settings/base.py:299
msgid "Education"
msgstr "Éducation"
#: settings/base.py:300
msgid "Food and Agriculture"
msgstr "Nourriture et agriculture"
#: settings/base.py:301
msgid "Geopolitics"
msgstr "Géopolitique"
#: settings/base.py:302
msgid "Health"
msgstr "Santé"
#: settings/base.py:303
msgid "Hiking"
msgstr "Rando"
#: settings/base.py:304
msgid "History"
msgstr "Histoire"
#: settings/base.py:305
msgid "Public sector"
msgstr "Secteur public"
#: settings/base.py:306
msgid "Science"
msgstr "Science"
#: settings/base.py:307
msgid "Shopping"
msgstr "Commerces"
#: settings/base.py:308
msgid "Sport and Leisure"
msgstr "Sport et loisirs"
#: settings/base.py:309
msgid "Travel"
msgstr "Voyage"
#: settings/base.py:310
msgid "Transports"
msgstr "Transports"
#: settings/base.py:311
msgid "Tourism"
msgstr "Tourisme"
#: templates/403.html:8
msgid ""
"<a href=\"https://discover.umap-project.org/support/faq/#map-statuses\" "
@ -189,40 +265,54 @@ msgstr "← Retour à la page d'accueil"
msgid "404 Page Not Found"
msgstr "404 Page Non Trouvée"
#: templates/auth/user_detail.html:8
#: templates/auth/user_detail.html:6
#, python-format
msgid "%(current_user)ss maps"
msgstr "Cartes de %(current_user)s"
#: templates/auth/user_detail.html:12
#, python-format
msgid "Browse %(current_user)s's maps"
msgstr "Consulter les cartes de %(current_user)s"
#: templates/auth/user_detail.html:17
#: templates/auth/user_detail.html:21
#, python-format
msgid "%(current_user)s has no maps."
msgstr "%(current_user)s n'a aucune carte."
#: templates/auth/user_form.html:21 templates/umap/team_form.html:21
#: templates/auth/user_form.html:6
msgid "My Profile"
msgstr "Mon profil"
#: templates/auth/user_form.html:24 templates/umap/team_form.html:25
msgid "Save"
msgstr "Enregistrer"
#: templates/auth/user_form.html:27
#: templates/auth/user_form.html:30
msgid "Your current providers"
msgstr "Vos fournisseurs associés"
#: templates/auth/user_form.html:39
#: templates/auth/user_form.html:44
msgid "Connect to another provider"
msgstr "Associer un autre fournisseur"
#: templates/auth/user_form.html:42
#: templates/auth/user_form.html:47
msgid ""
"It's a good habit to connect your account to more than one provider, in case"
" one provider becomes unavailable, temporarily or even permanently."
msgstr "C'est une bonne habitude d'avoir plusieurs fournisseurs d'identité, notamment dans le cas où l'un d'eux deviendrait inaccessible, temporairement ou même définitivement."
#: templates/auth/user_stars.html:8
#: templates/auth/user_stars.html:6
#, python-format
msgid "%(current_user)ss starred maps"
msgstr "Favoris de %(current_user)s"
#: templates/auth/user_stars.html:12
#, python-format
msgid "Browse %(current_user)s's starred maps"
msgstr "Consulter les cartes favorites de %(current_user)s"
#: templates/auth/user_stars.html:17
#: templates/auth/user_stars.html:21
#, python-format
msgid "%(current_user)s has no starred maps yet."
msgstr "%(current_user)s n'a aucune carte favorite."
@ -257,6 +347,10 @@ msgstr "Mot de passe"
msgid "Please choose a provider:"
msgstr "Choisissez un fournisseur :"
#: templates/umap/about.html:5 templates/umap/navigation.html:22
msgid "About"
msgstr "À propos"
#: templates/umap/about_summary.html:12
#, python-format
msgid ""
@ -408,7 +502,7 @@ msgstr "Mes équipes"
msgid "Map of the uMaps"
msgstr "La carte des uMaps"
#: templates/umap/home.html:24
#: templates/umap/home.html:25
msgid "Get inspired, browse maps"
msgstr "Naviguer dans les cartes"
@ -416,15 +510,19 @@ msgstr "Naviguer dans les cartes"
msgid "You are logged in. Continuing..."
msgstr "Vous êtes maintenant identifié. Merci de patienter..."
#: templates/umap/map_list.html:11 views.py:437
#: templates/umap/map_list.html:18 views.py:444
msgid "by"
msgstr "par"
#: templates/umap/map_list.html:20
#: templates/umap/map_list.html:22
msgid "See the map"
msgstr "Voir la carte"
#: templates/umap/map_list.html:28
msgid "More"
msgstr "Plus"
#: templates/umap/map_table.html:8 templates/umap/user_teams.html:14
#: templates/umap/map_table.html:8 templates/umap/user_teams.html:18
msgid "Name"
msgstr "Nom"
@ -448,7 +546,7 @@ msgstr "Dernière modification"
msgid "Owner"
msgstr "Propriétaire"
#: templates/umap/map_table.html:26 templates/umap/user_teams.html:20
#: templates/umap/map_table.html:26 templates/umap/user_teams.html:24
msgid "Actions"
msgstr "Actions"
@ -461,7 +559,7 @@ msgid "Share"
msgstr "Partager"
#: templates/umap/map_table.html:78 templates/umap/map_table.html:80
#: templates/umap/user_teams.html:38 templates/umap/user_teams.html:40
#: templates/umap/user_teams.html:42 templates/umap/user_teams.html:44
msgid "Edit"
msgstr "Éditer"
@ -524,10 +622,6 @@ msgstr "Connexion"
msgid "Sign in"
msgstr "Créer un compte"
#: templates/umap/navigation.html:22
msgid "About"
msgstr "À propos"
#: templates/umap/navigation.html:30
msgid "Change password"
msgstr "Changer le mot de passe"
@ -536,41 +630,47 @@ msgstr "Changer le mot de passe"
msgid "Log out"
msgstr "Déconnexion"
#: templates/umap/password_change.html:7
#: templates/umap/password_change.html:6
#: templates/umap/password_change.html:11
msgid "Password change"
msgstr "Changer le mot de passe"
#: templates/umap/password_change.html:10
#: templates/umap/password_change.html:14
msgid ""
"Please enter your old password, for security's sake, and then enter your new"
" password twice so we can verify you typed it in correctly."
msgstr "Merci de renseigner votre mot de passe actuel, puis deux fois le nouveau."
#: templates/umap/password_change.html:17
#: templates/umap/password_change.html:21
msgid "Old password"
msgstr "Ancien mot de passe"
#: templates/umap/password_change.html:22
#: templates/umap/password_change.html:26
msgid "New password"
msgstr "Nouveau mot de passe"
#: templates/umap/password_change.html:26
#: templates/umap/password_change.html:30
msgid "New password confirmation"
msgstr "Confirmation du nouveau mot de passe"
#: templates/umap/password_change.html:27
#: templates/umap/password_change.html:31
msgid "Change my password"
msgstr "Changer de mot de passe"
#: templates/umap/password_change_done.html:7
#: templates/umap/password_change_done.html:6
#: templates/umap/password_change_done.html:11
msgid "Password change successful"
msgstr "Le mot de passe a été modifié"
#: templates/umap/password_change_done.html:10
#: templates/umap/password_change_done.html:14
msgid "Your password was changed."
msgstr "Votre mot de passe a été modifié"
#: templates/umap/search.html:15
#: templates/umap/search.html:6
msgid "Explore maps"
msgstr "Explorer les cartes"
#: templates/umap/search.html:19
#, python-format
msgid "%(count)s map found:"
msgid_plural "%(count)s maps found:"
@ -578,11 +678,15 @@ msgstr[0] "%(count)s carte trouvée:"
msgstr[1] "%(count)s cartes trouvées:"
msgstr[2] "%(count)s cartes trouvées :"
#: templates/umap/search.html:24
#: templates/umap/search.html:30
msgid "No map found."
msgstr "Aucune carte trouvée."
#: templates/umap/search.html:29
#: templates/umap/search.html:36
msgid "Latest created maps in category"
msgstr "Dernières cartes créées dans la catégorie"
#: templates/umap/search.html:43
msgid "Latest created maps"
msgstr "Dernières cartes créées."
@ -590,25 +694,42 @@ msgstr "Dernières cartes créées."
msgid "Search maps"
msgstr "Chercher des cartes"
#: templates/umap/search_bar.html:15
#: templates/umap/search_bar.html:14
msgid "Any category"
msgstr "Toutes catégories"
#: templates/umap/search_bar.html:19
msgid "Search"
msgstr "Chercher"
#: templates/umap/team_detail.html:10
#: templates/umap/team_confirm_delete.html:6
msgid "Team deletion"
msgstr "Suppression d'équipe"
#: templates/umap/team_detail.html:6
#, python-format
msgid "%(current_team)ss maps"
msgstr "Cartes de %(current_team)s"
#: templates/umap/team_detail.html:14
#, python-format
msgid "Browse %(current_team)s's maps"
msgstr "Les cartes de %(current_team)s"
#: templates/umap/team_detail.html:22
#: templates/umap/team_detail.html:26
#, python-format
msgid "%(current_team)s has no public maps."
msgstr "%(current_team)s n'a pas de cartes publiques"
#: templates/umap/team_form.html:24
#: templates/umap/team_form.html:6
msgid "Create or edit a team"
msgstr "Créer ou modifier une équipe"
#: templates/umap/team_form.html:28
msgid "Delete this team"
msgstr "Supprimer cette équipe"
#: templates/umap/team_form.html:47
#: templates/umap/team_form.html:51
msgid "Add user"
msgstr "Ajouter un membre"
@ -629,78 +750,82 @@ msgstr "Télécharger %(count)s cartes"
msgid "You have no map yet."
msgstr "Vous n'avez pas encore de carte."
#: templates/umap/user_teams.html:17
#: templates/umap/user_teams.html:6
msgid "My Teams"
msgstr "Mes équipes"
#: templates/umap/user_teams.html:21
msgid "Users"
msgstr "Membres"
#: templates/umap/user_teams.html:48
#: templates/umap/user_teams.html:52
msgid "New team"
msgstr "Nouvelle équipe"
#: views.py:234
#: views.py:235
msgid "Cannot delete a team with more than one member"
msgstr "Impossible de supprimer une équipe ayant plus d'un membre"
#: views.py:238
#: views.py:239
#, python-format
msgid "Team “%(name)s” has been deleted"
msgstr "L'équipe «%(name)s» a été supprimée"
#: views.py:442
#: views.py:449
msgid "View the map"
msgstr "Voir la carte"
#: views.py:825
#: views.py:845
msgid "See full screen"
msgstr "Plein écran"
#: views.py:968
#: views.py:988
msgid "Map editors updated with success!"
msgstr "Éditeurs de la carte mis à jour !"
#: views.py:1004
#: views.py:1024
#, python-format
msgid "The uMap edit link for your map: %(map_name)s"
msgstr "Le lien d'édition uMap pour votre carte : %(map_name)s"
#: views.py:1007
#: views.py:1027
#, python-format
msgid "Here is your secret edit link: %(link)s"
msgstr "Voici votre lien d'édition secret : %(link)s"
#: views.py:1014
#: views.py:1034
#, python-format
msgid "Can't send email to %(email)s"
msgstr "Impossible d'envoyer un courriel vers %(email)s"
#: views.py:1017
#: views.py:1037
#, python-format
msgid "Email sent to %(email)s"
msgstr "Courriel envoyé à %(email)s"
#: views.py:1028
#: views.py:1048
msgid "Only its owner can delete the map."
msgstr "Seul le créateur de la carte peut la supprimer."
#: views.py:1031
#: views.py:1054
msgid "Map successfully deleted."
msgstr "La carte a bien été supprimée."
#: views.py:1057
#: views.py:1080
#, python-format
msgid ""
"Your map has been cloned! If you want to edit this map from another "
"computer, please use this link: %(anonymous_url)s"
msgstr "Votre carte a été dupliquée ! Si vous souhaitez la modifier depuis un autre ordinateur, veuillez utiliser ce lien : %(anonymous_url)s"
#: views.py:1062
#: views.py:1085
msgid "Congratulations, your map has been cloned!"
msgstr "Votre carte a été dupliquée !"
#: views.py:1313
#: views.py:1339
msgid "Layer successfully deleted."
msgstr "Calque supprimé."
#: views.py:1335
#: views.py:1361
msgid "Permissions updated with success!"
msgstr "Les permissions ont bien été modifiées !"

Binary file not shown.

View file

@ -5,6 +5,7 @@
# Translators:
# Navhy, 2019
# Navhy, 2019
# Miguel Anxo Bouzada <mbouzada@gmail.com>, 2025
# Navhy, 2019
# Nemigo Galiza <lescamposines@gmail.com>, 2017
# Rafael Ávila Coya <ravilacoya@gmail.com>, 2014
@ -12,9 +13,9 @@ msgid ""
msgstr ""
"Project-Id-Version: uMap\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-12-24 08:39+0000\n"
"POT-Creation-Date: 2025-03-03 17:36+0000\n"
"PO-Revision-Date: 2013-11-22 14:00+0000\n"
"Last-Translator: Rafael Ávila Coya <ravilacoya@gmail.com>, 2014\n"
"Last-Translator: Miguel Anxo Bouzada <mbouzada@gmail.com>, 2025\n"
"Language-Team: Galician (http://app.transifex.com/openstreetmap/umap/language/gl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -24,21 +25,29 @@ msgstr ""
#: admin.py:16
msgid "CSV Export"
msgstr ""
msgstr "Exportar CSV"
#: decorators.py:60
msgid "This map is not publicly available"
msgstr ""
msgstr "Este mapa non está dispoñíbel publicamente"
#: middleware.py:13
#: middleware.py:19
msgid "Site is readonly for maintenance"
msgstr "O sitio está só para o mantemento"
msgstr "O sitio é só de lectura por mantemento"
#: middleware.py:34
#, python-format
msgid ""
"Using “%(name)s” to authenticate is deprecated and will be removed soon. "
"Please configure another provider below before losing access to your account"
" and maps."
msgstr ""
#: models.py:60 models.py:79
msgid "name"
msgstr "nome"
#: models.py:62 models.py:475
#: models.py:62 models.py:485
msgid "description"
msgstr "descrición"
@ -58,45 +67,45 @@ msgstr "Modelo de URL que usa o formato de teselas de OSM"
msgid "Order of the tilelayers in the edit box"
msgstr "Orde das capas base na caixa de edición"
#: models.py:175 models.py:469
#: models.py:175 models.py:479
msgid "Only editable with secret edit link"
msgstr "Só pode editarse ca ligazón secreta de edición"
msgstr "Só é posíbel editalo coa ligazón secreta de edición"
#: models.py:176 models.py:470
#: models.py:176 models.py:480
msgid "Everyone can edit"
msgstr "Calquera pode editar"
msgstr "Calquera pode editalo"
#: models.py:179 models.py:463
#: models.py:179 models.py:473
msgid "Everyone"
msgstr ""
msgstr "Calquera"
#: models.py:180 models.py:189 models.py:464
#: models.py:180 models.py:189 models.py:474
msgid "Editors and team only"
msgstr ""
msgstr "Só editores e equipo"
#: models.py:181 models.py:465
#: models.py:181 models.py:475
msgid "Owner only"
msgstr ""
msgstr "Só o propietario"
#: models.py:184
msgid "Draft (private)"
msgstr ""
msgstr "Borrador (privado)"
#: models.py:185
msgid "Everyone (public)"
msgstr ""
msgstr "Calquera (público)"
#: models.py:188
msgid "Anyone with link"
msgstr ""
msgstr "Calquera con ligazón"
#: models.py:190
msgid "Blocked"
msgstr ""
msgstr "Bloqueado"
#: models.py:191
#: models.py:191 models.py:469
msgid "Deleted"
msgstr ""
msgstr "Eliminado"
#: models.py:194
msgid "center"
@ -104,7 +113,7 @@ msgstr "centrar"
#: models.py:195
msgid "zoom"
msgstr "achegar/afastar"
msgstr "zoom"
#: models.py:197
msgid "locate"
@ -124,7 +133,7 @@ msgstr "licenza"
#: models.py:213
msgid "owner"
msgstr "dono"
msgstr "propietario"
#: models.py:217
msgid "editors"
@ -132,33 +141,33 @@ msgstr "editores"
#: models.py:223
msgid "team"
msgstr ""
msgstr "equipo"
#: models.py:229 models.py:491
#: models.py:229 models.py:501
msgid "edit status"
msgstr "estado da edición"
#: models.py:234
#: models.py:234 models.py:506
msgid "share status"
msgstr "compartir o estado"
#: models.py:237 models.py:486
#: models.py:237 models.py:496
msgid "settings"
msgstr "axustes"
#: models.py:402
#: models.py:407
msgid "Clone of"
msgstr "Clon de"
#: models.py:462 models.py:468
#: models.py:468 models.py:472 models.py:478
msgid "Inherit"
msgstr ""
msgstr "Herdar"
#: models.py:481
#: models.py:491
msgid "display on load"
msgstr "amosar na carga"
#: models.py:482
#: models.py:492
msgid "Display this layer on load."
msgstr "Amosar esta capa na carga."
@ -167,71 +176,85 @@ msgid ""
"<a href=\"https://discover.umap-project.org/support/faq/#map-statuses\" "
"target=\"_blank\">Find out here the documentation</a> on how to manage maps"
" permissions."
msgstr ""
msgstr "<a href=\"https://discover.umap-project.org/support/faq/#map-statuses\" target=\"_blank\">Consulta aquí a documentación</a> sobre como xestionar os permisos dos mapas."
#: templates/403.html:10 templates/404.html:8
msgid "← Go to the homepage"
msgstr ""
msgstr "← Ir á páxina de inicio"
#: templates/404.html:7
msgid "404 Page Not Found"
msgstr ""
msgstr "404 Páxina non atopada"
#: templates/auth/user_detail.html:8
#: templates/auth/user_detail.html:6
#, python-format
msgid "%(current_user)ss maps"
msgstr "Mapas de %(current_user)s"
#: templates/auth/user_detail.html:12
#, python-format
msgid "Browse %(current_user)s's maps"
msgstr "Navegador %(current_user)s dos mapas"
#: templates/auth/user_detail.html:17
#: templates/auth/user_detail.html:21
#, python-format
msgid "%(current_user)s has no maps."
msgstr "%(current_user)s non ten mapas."
#: templates/auth/user_form.html:21 templates/umap/team_form.html:21
#: templates/auth/user_form.html:6
msgid "My Profile"
msgstr "O meu perfil"
#: templates/auth/user_form.html:24 templates/umap/team_form.html:25
msgid "Save"
msgstr ""
msgstr "Gardar"
#: templates/auth/user_form.html:27
#: templates/auth/user_form.html:30
msgid "Your current providers"
msgstr ""
msgstr "Os teus provedores actuais"
#: templates/auth/user_form.html:39
#: templates/auth/user_form.html:44
msgid "Connect to another provider"
msgstr ""
msgstr "Conecta con outro provedor"
#: templates/auth/user_form.html:42
#: templates/auth/user_form.html:47
msgid ""
"It's a good habit to connect your account to more than one provider, in case"
" one provider becomes unavailable, temporarily or even permanently."
msgstr ""
msgstr "É un bo hábito conectar a túa conta a máis dun provedor, no caso de que un provedor non estea dispoñíbel, de xeito temporal ou incluso permanente."
#: templates/auth/user_stars.html:8
#: templates/auth/user_stars.html:6
#, python-format
msgid "%(current_user)ss starred maps"
msgstr "Mapas destacados de %(current_user)s"
#: templates/auth/user_stars.html:12
#, python-format
msgid "Browse %(current_user)s's starred maps"
msgstr ""
msgstr "Consultar os mapas favoritos de %(current_user)s"
#: templates/auth/user_stars.html:17
#: templates/auth/user_stars.html:21
#, python-format
msgid "%(current_user)s has no starred maps yet."
msgstr ""
msgstr "%(current_user)s aínda non ten mapas destacados con estrela."
#: templates/base.html:13
msgid ""
"uMap lets you create maps with OpenStreetMap layers in a minute and embed "
"them in your site."
msgstr ""
msgstr "uMap permíteche crear mapas con capas de OpenStreetMap nun minuto e incrustalos no teu sitio web."
#: templates/registration/login.html:6 templates/registration/login.html:46
msgid "Login"
msgstr "Sesión iniciada"
msgstr "Acceder"
#: templates/registration/login.html:22
msgid "To save and easily find your maps, identify yourself."
msgstr ""
msgstr "Para gardar e atopar doadamente os seus mapas, identifíquese."
#: templates/registration/login.html:25
msgid "Please log in with your account:"
msgstr ""
msgstr "Accede coa túa conta"
#: templates/registration/login.html:42
msgid "Username"
@ -243,14 +266,18 @@ msgstr "Contrasinal"
#: templates/registration/login.html:52
msgid "Please choose a provider:"
msgstr ""
msgstr "Escolle un provedor"
#: templates/umap/about.html:5 templates/umap/navigation.html:22
msgid "About"
msgstr "Sobre"
#: templates/umap/about_summary.html:12
#, python-format
msgid ""
"uMap lets you create maps with <a href=\"%(osm_url)s\" />OpenStreetMap</a> "
"layers in a minute and embed them in your site."
msgstr "O uMap permíteche crear mapas con capas do <a href=\"%(osm_url)s\" />OpenStreetMap</a> nun minuto e poñelos na túa páxina web."
msgstr "uMap permíteche crear mapas con capas de <a href=\"%(osm_url)s\" />OpenStreetMap</a> nun minuto e incrustalos no teu sitio web."
#: templates/umap/about_summary.html:23
msgid "Choose the layers of your map"
@ -298,7 +325,7 @@ msgstr "Xogar ca versión de proba"
#: templates/umap/components/alerts/alert.html:66
#: templates/umap/components/alerts/alert.html:94
msgid "Close"
msgstr ""
msgstr "Pechar"
#: templates/umap/components/alerts/alert.html:32
#, python-format
@ -306,45 +333,45 @@ msgid ""
"Pro-tip: to easily find back your maps, <a href=\"%(login_url)s\" "
"target=\"_blank\">create an account</a> or <a href=\"%(login_url)s\" "
"target=\"_blank\">log in</a>."
msgstr ""
msgstr "Consello pro: para atopar doadamente os teus mapas, <a href=\"%(login_url)s\" target=\"_blank\">crea unha conta</a> ou <a href=\"%(login_url)s\" target=\"_blank\">accede</a>."
#: templates/umap/components/alerts/alert.html:37
msgid "Here is your secret link to edit the map, please keep it safe:"
msgstr ""
msgstr "Aquí tes a túa ligazón secreta para editar o mapa, gárdeo a seguro:"
#: templates/umap/components/alerts/alert.html:41
msgid "Copy link"
msgstr ""
msgstr "Copiar a ligazón"
#: templates/umap/components/alerts/alert.html:48
msgid "Enter your email address to receive the secret link:"
msgstr ""
msgstr "Introduce o teu enderezo de correo para recibir a ligazón secreta:"
#: templates/umap/components/alerts/alert.html:54
msgid "Email"
msgstr ""
msgstr "Correo"
#: templates/umap/components/alerts/alert.html:57
msgid "Send me the link"
msgstr ""
msgstr "Enviádeme a ligazón"
#: templates/umap/components/alerts/alert.html:81
msgid "See their edits in another tab"
msgstr ""
msgstr "Consulta as súas edicións noutra lapela"
#: templates/umap/components/alerts/alert.html:84
msgid "Keep your changes and loose theirs"
msgstr ""
msgstr "Conserva os teus cambios e deixa os seus"
#: templates/umap/components/alerts/alert.html:87
msgid "Keep their changes and loose yours"
msgstr ""
msgstr "Conserva os seus cambios e deixa os teus"
#: templates/umap/content.html:26
msgid ""
"This instance of uMap is currently in read only mode, no creation/edit is "
"allowed."
msgstr ""
msgstr "Esta instancia de uMap está actualmente en modo de só lectura, non se permite a creación ou edición."
#: templates/umap/content.html:34
#, python-format
@ -353,44 +380,44 @@ msgid ""
"need a stable instance, please use <a "
"href=\"%(stable_url)s\">%(stable_url)s</a>. You can also host your own "
"instance, it's <a href=\"%(repo_url)s\">open source</a>!"
msgstr "Esta é unha instancia de proba, empregada para probas e lanzamentos previos. Se precisas unha instancia estábel, emprega <a href=\"%(stable_url)s\">%(stable_url)s</a>. Tamén podes ter a túa propia instancia, é de <a href=\"%(repo_url)s\">código aberto</a>!"
msgstr "Esta é unha instancia de demostración, empregada para probas e publicacións previas. Se precisas unha instancia estábel, emprega <a href=\"%(stable_url)s\">%(stable_url)s</a>. Tamén podes aloxar a túa propia instancia, é de <a href=\"%(repo_url)s\">código aberto</a>!"
#: templates/umap/content_footer.html:5
msgid "An OpenStreetMap project"
msgstr ""
msgstr "Un proxecto de OpenStreetMap"
#: templates/umap/content_footer.html:6
msgid "version"
msgstr ""
msgstr "versión"
#: templates/umap/content_footer.html:7
msgid "Hosted by"
msgstr ""
msgstr "Aloxado por"
#: templates/umap/content_footer.html:8
msgid "Contact"
msgstr ""
msgstr "Contacto"
#: templates/umap/content_footer.html:9 templates/umap/navigation.html:25
msgid "Help"
msgstr ""
msgstr "Axuda"
#: templates/umap/dashboard_menu.html:6
#, python-format
msgid "My Maps (%(count)s)"
msgstr ""
msgstr "Os meus mapas (%(count)s)"
#: templates/umap/dashboard_menu.html:8
msgid "My Maps"
msgstr ""
msgstr "Os meus mapas"
#: templates/umap/dashboard_menu.html:12
msgid "My profile"
msgstr ""
msgstr "O meu perfil"
#: templates/umap/dashboard_menu.html:15
msgid "My teams"
msgstr ""
msgstr "Os meus equipos"
#: templates/umap/home.html:14
msgid "Map of the uMaps"
@ -398,7 +425,7 @@ msgstr "Mapa do uMaps"
#: templates/umap/home.html:24
msgid "Get inspired, browse maps"
msgstr "Inspírate e procura mapas"
msgstr "Inspírate, consulta mapas"
#: templates/umap/login_popup_end.html:4
msgid "You are logged in. Continuing..."
@ -412,97 +439,97 @@ msgstr "por"
msgid "More"
msgstr "Máis"
#: templates/umap/map_table.html:8 templates/umap/user_teams.html:14
#: templates/umap/map_table.html:8 templates/umap/user_teams.html:18
msgid "Name"
msgstr ""
msgstr "Nome"
#: templates/umap/map_table.html:11
msgid "Preview"
msgstr ""
msgstr "Vista previa"
#: templates/umap/map_table.html:14
msgid "Who can see"
msgstr ""
msgstr "Quen pode ver"
#: templates/umap/map_table.html:17
msgid "Who can edit"
msgstr ""
msgstr "Quen pode editar"
#: templates/umap/map_table.html:20
msgid "Last save"
msgstr ""
msgstr "Última modificación"
#: templates/umap/map_table.html:23
msgid "Owner"
msgstr ""
msgstr "Propietario"
#: templates/umap/map_table.html:26 templates/umap/user_teams.html:20
#: templates/umap/map_table.html:26 templates/umap/user_teams.html:24
msgid "Actions"
msgstr ""
msgstr "Accións"
#: templates/umap/map_table.html:41 templates/umap/map_table.html:43
msgid "Open preview"
msgstr ""
msgstr "Abrir a vista previa"
#: templates/umap/map_table.html:72 templates/umap/map_table.html:74
msgid "Share"
msgstr ""
msgstr "Compartir"
#: templates/umap/map_table.html:78 templates/umap/map_table.html:80
#: templates/umap/user_teams.html:38 templates/umap/user_teams.html:40
#: templates/umap/user_teams.html:42 templates/umap/user_teams.html:44
msgid "Edit"
msgstr ""
msgstr "Editar"
#: templates/umap/map_table.html:84 templates/umap/map_table.html:86
msgid "Download"
msgstr ""
msgstr "Descargar"
#: templates/umap/map_table.html:90 templates/umap/map_table.html:92
msgid "Clone"
msgstr ""
msgstr "Clonar"
#: templates/umap/map_table.html:101 templates/umap/map_table.html:103
msgid "Delete"
msgstr ""
msgstr "Eliminar"
#: templates/umap/map_table.html:117
msgid "first"
msgstr ""
msgstr "primeira"
#: templates/umap/map_table.html:118
msgid "previous"
msgstr ""
msgstr "anterior"
#: templates/umap/map_table.html:126
#, python-format
msgid "Page %(maps_number)s of %(num_pages)s"
msgstr ""
msgstr "Páxina %(maps_number)s de %(num_pages)s"
#: templates/umap/map_table.html:131
msgid "next"
msgstr ""
msgstr "seguinte"
#: templates/umap/map_table.html:132
msgid "last"
msgstr ""
msgstr "última"
#: templates/umap/map_table.html:140
#, python-format
msgid "Lines per page: %(per_page)s"
msgstr ""
msgstr "Liñas por páxina: %(per_page)s"
#: templates/umap/map_table.html:145
#, python-format
msgid "%(count)s maps"
msgstr ""
msgstr "%(count)s mapas"
#: templates/umap/navigation.html:11 templates/umap/user_dashboard.html:6
msgid "My Dashboard"
msgstr ""
msgstr "O meu taboleiro"
#: templates/umap/navigation.html:14
msgid "Starred maps"
msgstr ""
msgstr "Mapas destacados con estrelas"
#: templates/umap/navigation.html:18
msgid "Log in"
@ -512,182 +539,201 @@ msgstr "Iniciar a sesión"
msgid "Sign in"
msgstr "Rexistrarse"
#: templates/umap/navigation.html:22
msgid "About"
msgstr "Acerca de"
#: templates/umap/navigation.html:30
msgid "Change password"
msgstr "Mudar contrasinal"
msgstr "Cambiar o contrasinal"
#: templates/umap/navigation.html:34
msgid "Log out"
msgstr "Saír"
#: templates/umap/password_change.html:7
#: templates/umap/password_change.html:6
#: templates/umap/password_change.html:11
msgid "Password change"
msgstr "Contrasinal mudada"
msgstr "Contrasinal cambiado"
#: templates/umap/password_change.html:10
#: templates/umap/password_change.html:14
msgid ""
"Please enter your old password, for security's sake, and then enter your new"
" password twice so we can verify you typed it in correctly."
msgstr "Insire o teu contrasinal antigo, por seguranza, e despois insire o teu novo contrasinal dúas veces para que poidamos verificar se o escribiches de xeito correcto."
msgstr "Introduce o teu contrasinal antigo, por seguranza, e após introduce o teu novo contrasinal dúas veces para que poidamos verificar que o escribiches de xeito correcto."
#: templates/umap/password_change.html:17
#: templates/umap/password_change.html:21
msgid "Old password"
msgstr "Contrasinal antigo"
#: templates/umap/password_change.html:22
#: templates/umap/password_change.html:26
msgid "New password"
msgstr "Novo contrasinal"
#: templates/umap/password_change.html:26
#: templates/umap/password_change.html:30
msgid "New password confirmation"
msgstr "Confirmar novo contrasinal"
#: templates/umap/password_change.html:27
#: templates/umap/password_change.html:31
msgid "Change my password"
msgstr "Mudar o meu contrasinal"
msgstr "Cambiar o meu contrasinal"
#: templates/umap/password_change_done.html:7
#: templates/umap/password_change_done.html:6
#: templates/umap/password_change_done.html:11
msgid "Password change successful"
msgstr "O contrasinal foi mudado de xeito correcto"
msgstr "O contrasinal foi cambiado correctamente"
#: templates/umap/password_change_done.html:10
#: templates/umap/password_change_done.html:14
msgid "Your password was changed."
msgstr "O seu contrasinal foi mudado."
msgstr "O teu contrasinal foi cambiado."
#: templates/umap/search.html:15
#: templates/umap/search.html:6
msgid "Explore maps"
msgstr "Examinar mapas"
#: templates/umap/search.html:19
#, python-format
msgid "%(count)s map found:"
msgid_plural "%(count)s maps found:"
msgstr[0] ""
msgstr[1] ""
msgstr[0] "Atopouse %(count)s mapa:"
msgstr[1] "Atopáronse %(count)s mapas:"
#: templates/umap/search.html:24
#: templates/umap/search.html:28
msgid "No map found."
msgstr ""
msgstr "Non se atopou ningún mapa."
#: templates/umap/search.html:29
#: templates/umap/search.html:33
msgid "Latest created maps"
msgstr ""
msgstr "Últimos mapas creados"
#: templates/umap/search_bar.html:4
msgid "Search maps"
msgstr "Procurar mapas"
msgstr "Buscar mapas"
#: templates/umap/search_bar.html:15
#: templates/umap/search_bar.html:16
msgid "Search"
msgstr "Procurar"
msgstr "Buscar"
#: templates/umap/team_detail.html:10
#: templates/umap/team_confirm_delete.html:6
msgid "Team deletion"
msgstr "Eliminación do equipo"
#: templates/umap/team_detail.html:6
#, python-format
msgid "%(current_team)ss maps"
msgstr "Mapas de %(current_team)s"
#: templates/umap/team_detail.html:14
#, python-format
msgid "Browse %(current_team)s's maps"
msgstr ""
msgstr "Os mapas de %(current_team)s"
#: templates/umap/team_detail.html:22
#: templates/umap/team_detail.html:26
#, python-format
msgid "%(current_team)s has no public maps."
msgstr ""
msgstr "%(current_team)s non ten mapas públicos"
#: templates/umap/team_form.html:24
#: templates/umap/team_form.html:6
msgid "Create or edit a team"
msgstr "Crear ou editar un equipo"
#: templates/umap/team_form.html:28
msgid "Delete this team"
msgstr ""
msgstr "Eliminar este equipo"
#: templates/umap/team_form.html:47
#: templates/umap/team_form.html:51
msgid "Add user"
msgstr ""
msgstr "Engadir usuario"
#: templates/umap/user_dashboard.html:9 templates/umap/user_dashboard.html:25
msgid "Search my maps"
msgstr ""
msgstr "Buscar nos meus mapas"
#: templates/umap/user_dashboard.html:17 templates/umap/user_dashboard.html:22
msgid "Maps title"
msgstr ""
msgstr "Título do mapa"
#: templates/umap/user_dashboard.html:30
#, python-format
msgid "Download %(count)s maps"
msgstr ""
msgstr "Descargar %(count)s mapas"
#: templates/umap/user_dashboard.html:40
msgid "You have no map yet."
msgstr ""
msgstr "Aínda non tes ningún mapa."
#: templates/umap/user_teams.html:17
#: templates/umap/user_teams.html:6
msgid "My Teams"
msgstr "Os meus equipos"
#: templates/umap/user_teams.html:21
msgid "Users"
msgstr ""
msgstr "Usuarios"
#: templates/umap/user_teams.html:48
#: templates/umap/user_teams.html:52
msgid "New team"
msgstr ""
msgstr "Novo equipo"
#: views.py:234
msgid "Cannot delete a team with more than one member"
msgstr ""
msgstr "Non é posíbel eliminar un equipo con máis dun membro"
#: views.py:238
#, python-format
msgid "Team “%(name)s” has been deleted"
msgstr ""
msgstr "Foi eliminado o equipo %(name)s"
#: views.py:442
msgid "View the map"
msgstr "Ollar o mapa"
msgstr "Ver o mapa"
#: views.py:825
#: views.py:838
msgid "See full screen"
msgstr ""
msgstr "Ver a pantalla completa"
#: views.py:968
#: views.py:981
msgid "Map editors updated with success!"
msgstr "O editores do mapa foron actualizados de xeito exitoso!"
#: views.py:1004
#, python-format
msgid "The uMap edit link for your map: %(map_name)s"
msgstr ""
#: views.py:1007
#, python-format
msgid "Here is your secret edit link: %(link)s"
msgstr ""
#: views.py:1014
#, python-format
msgid "Can't send email to %(email)s"
msgstr ""
msgstr "O editores do mapa foron actualizados correctamente!"
#: views.py:1017
#, python-format
msgid "Email sent to %(email)s"
msgstr ""
msgid "The uMap edit link for your map: %(map_name)s"
msgstr "A ligazón de edición de uMap para o teu mapa: %(map_name)s"
#: views.py:1028
#: views.py:1020
#, python-format
msgid "Here is your secret edit link: %(link)s"
msgstr "Aquí tes a túa ligazón secret de edicióna: %(link)s"
#: views.py:1027
#, python-format
msgid "Can't send email to %(email)s"
msgstr "Non é posíbel enviar o correo a %(email)s"
#: views.py:1030
#, python-format
msgid "Email sent to %(email)s"
msgstr "Correo enviado a %(email)s"
#: views.py:1041
msgid "Only its owner can delete the map."
msgstr "Só o seu dono pode eliminar o mapa."
#: views.py:1031
#: views.py:1044
msgid "Map successfully deleted."
msgstr ""
msgstr "O mapa foi eliminado correctamente."
#: views.py:1057
#: views.py:1070
#, python-format
msgid ""
"Your map has been cloned! If you want to edit this map from another "
"computer, please use this link: %(anonymous_url)s"
msgstr "O teu mapa foi clonado! Se desexas editar este mapa dende outra computadora, emprega esta ligazón: %(anonymous_url)s"
msgstr "O teu mapa foi clonado! Se queres editar este mapa desde outro computador, emprega esta ligazón: %(anonymous_url)s"
#: views.py:1062
#: views.py:1075
msgid "Congratulations, your map has been cloned!"
msgstr "Parabéns! O teu mapa foi clonado!"
#: views.py:1313
#: views.py:1329
msgid "Layer successfully deleted."
msgstr "A capa foi eliminada de xeito exitoso."
msgstr "A capa foi eliminada correctamente."
#: views.py:1335
#: views.py:1351
msgid "Permissions updated with success!"
msgstr ""
msgstr "Os permisos foron actualizados correctamente!"

Binary file not shown.

View file

@ -3,15 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# Gábor Babos <gabor.babos@gmail.com>, 2017-2019,2023-2024
# Gábor Babos <gabor.babos@gmail.com>, 2017-2019,2023-2025
# Peter Velosy <peter.velosy@gmail.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: uMap\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-12-24 08:39+0000\n"
"POT-Creation-Date: 2025-04-04 16:49+0000\n"
"PO-Revision-Date: 2013-11-22 14:00+0000\n"
"Last-Translator: Gábor Babos <gabor.babos@gmail.com>, 2017-2019,2023-2024\n"
"Last-Translator: Gábor Babos <gabor.babos@gmail.com>, 2017-2019,2023-2025\n"
"Language-Team: Hungarian (http://app.transifex.com/openstreetmap/umap/language/hu/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -27,138 +27,214 @@ msgstr "CSV exportálás"
msgid "This map is not publicly available"
msgstr "Ez a térkép nem nyilvános"
#: middleware.py:13
#: middleware.py:19
msgid "Site is readonly for maintenance"
msgstr "Karbantartás miatt a webhely csak olvasható"
#: models.py:60 models.py:79
#: middleware.py:34
#, python-format
msgid ""
"Using “%(name)s” to authenticate is deprecated and will be removed soon. "
"Please configure another provider below before losing access to your account"
" and maps. Then, please logout and login again with the new provider."
msgstr "A „%(name)s” használata a hitelesítéshez elavult, és hamarosan eltávolításra kerül. Kérjük, állítson be egy másik szolgáltatót az alábbiakban, mielőtt elveszítené a fiókjához és a térképekhez való hozzáférést. Ezután jelentkezzen ki, majd jelentkezzen be újra az új szolgáltatóval."
#: models.py:61 models.py:80
msgid "name"
msgstr "név"
#: models.py:62 models.py:475
#: models.py:63 models.py:493
msgid "description"
msgstr "leírás"
#: models.py:110
#: models.py:111
msgid "details"
msgstr "részletek"
#: models.py:111
#: models.py:112
msgid "Link to a page where the licence is detailed."
msgstr "Link egy részletes licencinformációkat tartalmazó lapra."
#: models.py:121
#: models.py:122
msgid "URL template using OSM tile format"
msgstr "OSM-csempeformátumot használó URL-sablon"
#: models.py:127
#: models.py:128
msgid "Order of the tilelayers in the edit box"
msgstr "Csemperétegek sorrendje a szerkesztődobozban"
#: models.py:175 models.py:469
#: models.py:176 models.py:487
msgid "Only editable with secret edit link"
msgstr "Kizárólag titkos szerkesztési linkkel szerkeszthető"
#: models.py:176 models.py:470
#: models.py:177 models.py:488
msgid "Everyone can edit"
msgstr "Bárki szerkesztheti"
#: models.py:179 models.py:463
#: models.py:180 models.py:481
msgid "Everyone"
msgstr "Mindenki"
#: models.py:180 models.py:189 models.py:464
#: models.py:181 models.py:190 models.py:482
msgid "Editors and team only"
msgstr "Csak a szerkesztők és a csoport"
#: models.py:181 models.py:465
#: models.py:182 models.py:483
msgid "Owner only"
msgstr "Csak a tulajdonos"
#: models.py:184
#: models.py:185
msgid "Draft (private)"
msgstr "Piszkozat (privát)"
#: models.py:185
#: models.py:186
msgid "Everyone (public)"
msgstr "Mindenki (nyilvános)"
#: models.py:188
#: models.py:189
msgid "Anyone with link"
msgstr "A link birtokában bárki"
#: models.py:190
#: models.py:191
msgid "Blocked"
msgstr "Blokkolva"
#: models.py:191
#: models.py:192 models.py:477
msgid "Deleted"
msgstr "Törölve"
#: models.py:194
#: models.py:195
msgid "center"
msgstr "középpont"
#: models.py:195
#: models.py:196
msgid "zoom"
msgstr "nagyítás"
#: models.py:197
#: models.py:198
msgid "locate"
msgstr "helymeghatározás"
#: models.py:197
#: models.py:198
msgid "Locate user on load?"
msgstr "Bekérje a felhasználó pozícióját betöltéskor?"
#: models.py:201
#: models.py:202
msgid "Choose the map licence."
msgstr "Térképlicenc kiválasztása"
#: models.py:202
#: models.py:203
msgid "licence"
msgstr "licenc"
#: models.py:213
#: models.py:214
msgid "owner"
msgstr "tulajdonos"
#: models.py:217
#: models.py:218
msgid "editors"
msgstr "szerkesztők"
#: models.py:223
#: models.py:224
msgid "team"
msgstr "csoport"
#: models.py:229 models.py:491
#: models.py:230 models.py:509
msgid "edit status"
msgstr "szerkeszthetőség"
#: models.py:234
#: models.py:235 models.py:514
msgid "share status"
msgstr "megoszthatóság"
#: models.py:237 models.py:486
#: models.py:238 models.py:504
msgid "settings"
msgstr "beállítások"
#: models.py:402
#: models.py:410
msgid "Clone of"
msgstr "Másolat erről: "
#: models.py:462 models.py:468
#: models.py:476 models.py:480 models.py:486
msgid "Inherit"
msgstr "Öröklés"
#: models.py:481
#: models.py:499
msgid "display on load"
msgstr "megjelenítés betöltéskor"
#: models.py:482
#: models.py:500
msgid "Display this layer on load."
msgstr "Réteg megjelenítése betöltéskor"
#: settings/base.py:295
msgid "Art and Culture"
msgstr ""
#: settings/base.py:296
msgid "Cycling"
msgstr ""
#: settings/base.py:297
msgid "Business"
msgstr ""
#: settings/base.py:298
msgid "Environment"
msgstr ""
#: settings/base.py:299
msgid "Education"
msgstr ""
#: settings/base.py:300
msgid "Food and Agriculture"
msgstr ""
#: settings/base.py:301
msgid "Geopolitics"
msgstr ""
#: settings/base.py:302
msgid "Health"
msgstr ""
#: settings/base.py:303
msgid "Hiking"
msgstr ""
#: settings/base.py:304
msgid "History"
msgstr ""
#: settings/base.py:305
msgid "Public sector"
msgstr ""
#: settings/base.py:306
msgid "Science"
msgstr ""
#: settings/base.py:307
msgid "Shopping"
msgstr ""
#: settings/base.py:308
msgid "Sport and Leisure"
msgstr ""
#: settings/base.py:309
msgid "Travel"
msgstr ""
#: settings/base.py:310
msgid "Transports"
msgstr ""
#: settings/base.py:311
msgid "Tourism"
msgstr ""
#: templates/403.html:8
msgid ""
"<a href=\"https://discover.umap-project.org/support/faq/#map-statuses\" "
@ -174,40 +250,54 @@ msgstr "← Ugrás a főoldalra"
msgid "404 Page Not Found"
msgstr "404 hiba: ez az oldal nem található. Eltévedtél a térképek között"
#: templates/auth/user_detail.html:8
#: templates/auth/user_detail.html:6
#, python-format
msgid "%(current_user)ss maps"
msgstr "%(current_user)s térképei"
#: templates/auth/user_detail.html:12
#, python-format
msgid "Browse %(current_user)s's maps"
msgstr "%(current_user)s térképeinek böngészése"
#: templates/auth/user_detail.html:17
#: templates/auth/user_detail.html:21
#, python-format
msgid "%(current_user)s has no maps."
msgstr "%(current_user)s felhasználónak nincs térképe."
#: templates/auth/user_form.html:21 templates/umap/team_form.html:21
#: templates/auth/user_form.html:6
msgid "My Profile"
msgstr "Profilom"
#: templates/auth/user_form.html:24 templates/umap/team_form.html:25
msgid "Save"
msgstr "Mentés"
#: templates/auth/user_form.html:27
#: templates/auth/user_form.html:30
msgid "Your current providers"
msgstr "Jelenlegi szolgáltatói"
#: templates/auth/user_form.html:39
#: templates/auth/user_form.html:44
msgid "Connect to another provider"
msgstr "Újabb szolgáltató csatlakoztatása"
#: templates/auth/user_form.html:42
#: templates/auth/user_form.html:47
msgid ""
"It's a good habit to connect your account to more than one provider, in case"
" one provider becomes unavailable, temporarily or even permanently."
msgstr "Jó szokás, ha fiókját több szolgáltatóhoz is hozzáköti, ha esetleg az egyik szolgáltató átmenetileg vagy akár véglegesen elérhetetlenné válna."
#: templates/auth/user_stars.html:8
#: templates/auth/user_stars.html:6
#, python-format
msgid "%(current_user)ss starred maps"
msgstr "%(current_user)s megcsillagozott térképei"
#: templates/auth/user_stars.html:12
#, python-format
msgid "Browse %(current_user)s's starred maps"
msgstr "%(current_user)s megcsillagozott térképeinek böngészése"
#: templates/auth/user_stars.html:17
#: templates/auth/user_stars.html:21
#, python-format
msgid "%(current_user)s has no starred maps yet."
msgstr "%(current_user)s felhasználónak még nincs megcsillagozott térképe."
@ -242,6 +332,10 @@ msgstr "Jelszó"
msgid "Please choose a provider:"
msgstr "Válassz egy szolgáltatót:"
#: templates/umap/about.html:5 templates/umap/navigation.html:22
msgid "About"
msgstr "Névjegy"
#: templates/umap/about_summary.html:12
#, python-format
msgid ""
@ -383,7 +477,7 @@ msgstr "Térképeim"
#: templates/umap/dashboard_menu.html:12
msgid "My profile"
msgstr "Saját profil"
msgstr "Profilom"
#: templates/umap/dashboard_menu.html:15
msgid "My teams"
@ -393,7 +487,7 @@ msgstr "Csoportjaim"
msgid "Map of the uMaps"
msgstr "uMap-térképek térképe"
#: templates/umap/home.html:24
#: templates/umap/home.html:25
msgid "Get inspired, browse maps"
msgstr "Szerezzen ihletet, böngésszen a térképek között!"
@ -401,15 +495,19 @@ msgstr "Szerezzen ihletet, böngésszen a térképek között!"
msgid "You are logged in. Continuing..."
msgstr "Be van jelentkezve. Továbblépés…"
#: templates/umap/map_list.html:11 views.py:437
#: templates/umap/map_list.html:18 views.py:444
msgid "by"
msgstr " készítette:"
#: templates/umap/map_list.html:20
#: templates/umap/map_list.html:22
msgid "See the map"
msgstr ""
#: templates/umap/map_list.html:28
msgid "More"
msgstr "Még több"
#: templates/umap/map_table.html:8 templates/umap/user_teams.html:14
#: templates/umap/map_table.html:8 templates/umap/user_teams.html:18
msgid "Name"
msgstr "Név"
@ -433,7 +531,7 @@ msgstr "Utolsó mentés"
msgid "Owner"
msgstr "Tulajdonos"
#: templates/umap/map_table.html:26 templates/umap/user_teams.html:20
#: templates/umap/map_table.html:26 templates/umap/user_teams.html:24
msgid "Actions"
msgstr "Műveletek"
@ -446,7 +544,7 @@ msgid "Share"
msgstr "Megosztás"
#: templates/umap/map_table.html:78 templates/umap/map_table.html:80
#: templates/umap/user_teams.html:38 templates/umap/user_teams.html:40
#: templates/umap/user_teams.html:42 templates/umap/user_teams.html:44
msgid "Edit"
msgstr "Szerkesztés"
@ -509,10 +607,6 @@ msgstr "Bejelentkezés"
msgid "Sign in"
msgstr "Regisztráció"
#: templates/umap/navigation.html:22
msgid "About"
msgstr "Névjegy"
#: templates/umap/navigation.html:30
msgid "Change password"
msgstr "Jelszó módosítása"
@ -521,52 +615,58 @@ msgstr "Jelszó módosítása"
msgid "Log out"
msgstr "Kijelentkezés"
#: templates/umap/password_change.html:7
#: templates/umap/password_change.html:6
#: templates/umap/password_change.html:11
msgid "Password change"
msgstr "Jelszó módosítása"
#: templates/umap/password_change.html:10
#: templates/umap/password_change.html:14
msgid ""
"Please enter your old password, for security's sake, and then enter your new"
" password twice so we can verify you typed it in correctly."
msgstr "Biztonsági okokból írja be a régi jelszavát, majd adja meg kétszer a kívánt új jelszót!"
#: templates/umap/password_change.html:17
#: templates/umap/password_change.html:21
msgid "Old password"
msgstr "Régi jelszó"
#: templates/umap/password_change.html:22
#: templates/umap/password_change.html:26
msgid "New password"
msgstr "Új jelszó"
#: templates/umap/password_change.html:26
#: templates/umap/password_change.html:30
msgid "New password confirmation"
msgstr "Új jelszó ismét"
#: templates/umap/password_change.html:27
#: templates/umap/password_change.html:31
msgid "Change my password"
msgstr "Jelszavam módosítása"
#: templates/umap/password_change_done.html:7
#: templates/umap/password_change_done.html:6
#: templates/umap/password_change_done.html:11
msgid "Password change successful"
msgstr "A jelszómódosítás sikeres"
#: templates/umap/password_change_done.html:10
#: templates/umap/password_change_done.html:14
msgid "Your password was changed."
msgstr "A jelszava megváltozott."
#: templates/umap/search.html:15
#: templates/umap/search.html:6
msgid "Explore maps"
msgstr "Térképek felfedezése"
#: templates/umap/search.html:19
#, python-format
msgid "%(count)s map found:"
msgid_plural "%(count)s maps found:"
msgstr[0] "%(count)s térképet találtunk:"
msgstr[1] "%(count)s térképet találtunk:"
#: templates/umap/search.html:24
#: templates/umap/search.html:30
msgid "No map found."
msgstr "Nem található ilyen térkép."
#: templates/umap/search.html:29
#: templates/umap/search.html:35
msgid "Latest created maps"
msgstr "Legutóbb létrehozott térképek"
@ -574,25 +674,42 @@ msgstr "Legutóbb létrehozott térképek"
msgid "Search maps"
msgstr "Térképek keresése"
#: templates/umap/search_bar.html:15
#: templates/umap/search_bar.html:14
msgid "Any category"
msgstr ""
#: templates/umap/search_bar.html:19
msgid "Search"
msgstr "Keresés"
#: templates/umap/team_detail.html:10
#: templates/umap/team_confirm_delete.html:6
msgid "Team deletion"
msgstr "Csoport törlése"
#: templates/umap/team_detail.html:6
#, python-format
msgid "%(current_team)ss maps"
msgstr "%(current_team)s csoport térképei"
#: templates/umap/team_detail.html:14
#, python-format
msgid "Browse %(current_team)s's maps"
msgstr "%(current_team)s csoport térképeinek böngészése"
#: templates/umap/team_detail.html:22
#: templates/umap/team_detail.html:26
#, python-format
msgid "%(current_team)s has no public maps."
msgstr "%(current_team)s csoportnak nincs nyilvános térképe."
#: templates/umap/team_form.html:24
#: templates/umap/team_form.html:6
msgid "Create or edit a team"
msgstr "Csoport létrehozása vagy szerkesztése"
#: templates/umap/team_form.html:28
msgid "Delete this team"
msgstr "Csoport törlése"
#: templates/umap/team_form.html:47
#: templates/umap/team_form.html:51
msgid "Add user"
msgstr "Felhasználó hozzáadása"
@ -613,78 +730,82 @@ msgstr "%(count)s térkép letöltése"
msgid "You have no map yet."
msgstr "Önnek még nincs térképe."
#: templates/umap/user_teams.html:17
#: templates/umap/user_teams.html:6
msgid "My Teams"
msgstr "Csoportjaim"
#: templates/umap/user_teams.html:21
msgid "Users"
msgstr "Felhasználók"
#: templates/umap/user_teams.html:48
#: templates/umap/user_teams.html:52
msgid "New team"
msgstr "Új csoport"
#: views.py:234
#: views.py:235
msgid "Cannot delete a team with more than one member"
msgstr "Egynél több tagú csoport nem törölhető"
#: views.py:238
#: views.py:239
#, python-format
msgid "Team “%(name)s” has been deleted"
msgstr "%(name)s csoport törölve"
#: views.py:442
#: views.py:449
msgid "View the map"
msgstr "Térkép megtekintése"
#: views.py:825
#: views.py:845
msgid "See full screen"
msgstr "Teljes képernyős nézet megtekintése"
#: views.py:968
#: views.py:988
msgid "Map editors updated with success!"
msgstr "A térképszerkesztők sikeresen frissültek."
#: views.py:1004
#: views.py:1024
#, python-format
msgid "The uMap edit link for your map: %(map_name)s"
msgstr "A térképéhez tartozó uMap szerkesztési link: %(map_name)s"
#: views.py:1007
#: views.py:1027
#, python-format
msgid "Here is your secret edit link: %(link)s"
msgstr "Az Ön titkos szerkesztési linkje: %(link)s"
#: views.py:1014
#: views.py:1034
#, python-format
msgid "Can't send email to %(email)s"
msgstr "Nem sikerül e-mailt küldeni ide: %(email)s"
#: views.py:1017
#: views.py:1037
#, python-format
msgid "Email sent to %(email)s"
msgstr "E-mail elküldve ide: %(email)s"
#: views.py:1028
#: views.py:1048
msgid "Only its owner can delete the map."
msgstr "A térképet csak a tulajdonosa törölheti."
#: views.py:1031
#: views.py:1051
msgid "Map successfully deleted."
msgstr "Térkép sikeresen törölve."
#: views.py:1057
#: views.py:1077
#, python-format
msgid ""
"Your map has been cloned! If you want to edit this map from another "
"computer, please use this link: %(anonymous_url)s"
msgstr "Elkészült a térképe másolata. Ha egy másik számítógépről szeretné szerkeszteni, ezt a linket használja: %(anonymous_url)s"
#: views.py:1062
#: views.py:1082
msgid "Congratulations, your map has been cloned!"
msgstr "Gratulálunk, elkészült a térképe másolata!"
#: views.py:1313
#: views.py:1336
msgid "Layer successfully deleted."
msgstr "A réteg sikeresen törlődött."
#: views.py:1335
#: views.py:1358
msgid "Permissions updated with success!"
msgstr "Az engedélyek sikeresen frissültek!"

Binary file not shown.

View file

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: uMap\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-12-24 08:39+0000\n"
"POT-Creation-Date: 2025-04-04 16:49+0000\n"
"PO-Revision-Date: 2013-11-22 14:00+0000\n"
"Last-Translator: Sveinn í Felli <sv1@fellsnet.is>, 2020\n"
"Language-Team: Icelandic (http://app.transifex.com/openstreetmap/umap/language/is/)\n"
@ -20,202 +20,292 @@ msgstr ""
#: admin.py:16
msgid "CSV Export"
msgstr ""
msgstr "CSV-útflutningur"
#: decorators.py:60
msgid "This map is not publicly available"
msgstr ""
msgstr "Þetta kort er ekki aðgengilegt opinberlega"
#: middleware.py:13
#: middleware.py:19
msgid "Site is readonly for maintenance"
msgstr "Vefsvæðið er núna skrifvarið vegna viðhaldsvinnu"
#: models.py:60 models.py:79
#: middleware.py:34
#, python-format
msgid ""
"Using “%(name)s” to authenticate is deprecated and will be removed soon. "
"Please configure another provider below before losing access to your account"
" and maps. Then, please logout and login again with the new provider."
msgstr "Notkun á “%(name)s” til auðkenningar er úreld aðferð sem verður fljótlega fjarlægð. Veldu aðra þjónustuveitu hér fyrir neðan áður en þú missir aðgang að aðgangnum þínum kortum. Síðan skaltu skrá þig út og svo aftur inn í gegnum nýju þjónustuveituna."
#: models.py:61 models.py:80
msgid "name"
msgstr "nafn"
#: models.py:62 models.py:475
#: models.py:63 models.py:493
msgid "description"
msgstr "lýsing"
#: models.py:110
#: models.py:111
msgid "details"
msgstr "nánar"
#: models.py:111
#: models.py:112
msgid "Link to a page where the licence is detailed."
msgstr "Tengill á síðu þar sem notkunarleyfi er útskýrt."
#: models.py:121
#: models.py:122
msgid "URL template using OSM tile format"
msgstr "URL-sniðmát sem notar OSM-kortatíglasnið"
#: models.py:127
#: models.py:128
msgid "Order of the tilelayers in the edit box"
msgstr "Röð kortatíglalaga í breytingareitnum"
#: models.py:175 models.py:469
#: models.py:176 models.py:487
msgid "Only editable with secret edit link"
msgstr "Aðeins breytanlegt með leynilegum breytingatengli"
#: models.py:176 models.py:470
#: models.py:177 models.py:488
msgid "Everyone can edit"
msgstr "Allir geta breytt"
#: models.py:179 models.py:463
#: models.py:180 models.py:481
msgid "Everyone"
msgstr ""
msgstr "Allir"
#: models.py:180 models.py:189 models.py:464
#: models.py:181 models.py:190 models.py:482
msgid "Editors and team only"
msgstr ""
msgstr "Einungis ritstjórar og teymið"
#: models.py:181 models.py:465
#: models.py:182 models.py:483
msgid "Owner only"
msgstr ""
#: models.py:184
msgid "Draft (private)"
msgstr ""
msgstr "Aðeins eigandi"
#: models.py:185
msgid "Draft (private)"
msgstr "Drög (einka)"
#: models.py:186
msgid "Everyone (public)"
msgstr ""
msgstr "Allir (opinbert)"
#: models.py:188
#: models.py:189
msgid "Anyone with link"
msgstr ""
#: models.py:190
msgid "Blocked"
msgstr ""
msgstr "Hver sá sem er með tengil"
#: models.py:191
msgid "Deleted"
msgstr ""
msgid "Blocked"
msgstr "Útilokað"
#: models.py:194
#: models.py:192 models.py:477
msgid "Deleted"
msgstr "Eytt"
#: models.py:195
msgid "center"
msgstr "miðja"
#: models.py:195
#: models.py:196
msgid "zoom"
msgstr "aðdráttur"
#: models.py:197
#: models.py:198
msgid "locate"
msgstr "staðsetja"
#: models.py:197
#: models.py:198
msgid "Locate user on load?"
msgstr "Staðsetja notanda við innhleðslu?"
#: models.py:201
#: models.py:202
msgid "Choose the map licence."
msgstr "Veldu notkunarleyfi fyrir kortið."
#: models.py:202
#: models.py:203
msgid "licence"
msgstr "notkunarleyfi"
#: models.py:213
#: models.py:214
msgid "owner"
msgstr "eigandi"
#: models.py:217
#: models.py:218
msgid "editors"
msgstr "ritstjórar"
#: models.py:223
#: models.py:224
msgid "team"
msgstr ""
msgstr "teymi"
#: models.py:229 models.py:491
#: models.py:230 models.py:509
msgid "edit status"
msgstr "staða vinnslu"
#: models.py:234
#: models.py:235 models.py:514
msgid "share status"
msgstr "staða deilingar"
#: models.py:237 models.py:486
#: models.py:238 models.py:504
msgid "settings"
msgstr "stillingar"
#: models.py:402
#: models.py:410
msgid "Clone of"
msgstr "Klón af"
#: models.py:462 models.py:468
#: models.py:476 models.py:480 models.py:486
msgid "Inherit"
msgstr ""
msgstr "Erfa"
#: models.py:481
#: models.py:499
msgid "display on load"
msgstr "birta við innhleðslu"
#: models.py:482
#: models.py:500
msgid "Display this layer on load."
msgstr "Birta þetta lag við innhleðslu."
#: settings/base.py:295
msgid "Art and Culture"
msgstr ""
#: settings/base.py:296
msgid "Cycling"
msgstr ""
#: settings/base.py:297
msgid "Business"
msgstr ""
#: settings/base.py:298
msgid "Environment"
msgstr ""
#: settings/base.py:299
msgid "Education"
msgstr ""
#: settings/base.py:300
msgid "Food and Agriculture"
msgstr ""
#: settings/base.py:301
msgid "Geopolitics"
msgstr ""
#: settings/base.py:302
msgid "Health"
msgstr ""
#: settings/base.py:303
msgid "Hiking"
msgstr ""
#: settings/base.py:304
msgid "History"
msgstr ""
#: settings/base.py:305
msgid "Public sector"
msgstr ""
#: settings/base.py:306
msgid "Science"
msgstr ""
#: settings/base.py:307
msgid "Shopping"
msgstr ""
#: settings/base.py:308
msgid "Sport and Leisure"
msgstr ""
#: settings/base.py:309
msgid "Travel"
msgstr ""
#: settings/base.py:310
msgid "Transports"
msgstr ""
#: settings/base.py:311
msgid "Tourism"
msgstr ""
#: templates/403.html:8
msgid ""
"<a href=\"https://discover.umap-project.org/support/faq/#map-statuses\" "
"target=\"_blank\">Find out here the documentation</a> on how to manage maps"
" permissions."
msgstr ""
msgstr "<a href=\"https://discover.umap-project.org/support/faq/#map-statuses\" target=\"_blank\">Hér geturðu fundið leiðbeiningar</a> um hvernig sé hægt að stýra heimildum landakortsins."
#: templates/403.html:10 templates/404.html:8
msgid "← Go to the homepage"
msgstr ""
msgstr "← Fara á heimasíðuna"
#: templates/404.html:7
msgid "404 Page Not Found"
msgstr ""
msgstr "404 Síðan finnst ekki"
#: templates/auth/user_detail.html:8
#: templates/auth/user_detail.html:6
#, python-format
msgid "%(current_user)ss maps"
msgstr "Kort frá %(current_user)s"
#: templates/auth/user_detail.html:12
#, python-format
msgid "Browse %(current_user)s's maps"
msgstr "Skoða landakort frá %(current_user)s"
#: templates/auth/user_detail.html:17
#: templates/auth/user_detail.html:21
#, python-format
msgid "%(current_user)s has no maps."
msgstr "%(current_user)s er ekki með nein landakort."
#: templates/auth/user_form.html:21 templates/umap/team_form.html:21
#: templates/auth/user_form.html:6
msgid "My Profile"
msgstr "Sniðið mitt"
#: templates/auth/user_form.html:24 templates/umap/team_form.html:25
msgid "Save"
msgstr ""
msgstr "Vista"
#: templates/auth/user_form.html:27
#: templates/auth/user_form.html:30
msgid "Your current providers"
msgstr ""
msgstr "Núverandi þjónustur þínar"
#: templates/auth/user_form.html:39
#: templates/auth/user_form.html:44
msgid "Connect to another provider"
msgstr ""
msgstr "Tengjast við aðra þjónustu"
#: templates/auth/user_form.html:42
#: templates/auth/user_form.html:47
msgid ""
"It's a good habit to connect your account to more than one provider, in case"
" one provider becomes unavailable, temporarily or even permanently."
msgstr ""
msgstr "Það er góð regla að tengja aðganginn þinn við fleiri en eina þjónustuveitu, fari svo að tiltekin þjónusta verði óaðgengileg, hvort sem er tímabundið eða endanlega."
#: templates/auth/user_stars.html:8
#: templates/auth/user_stars.html:6
#, python-format
msgid "%(current_user)ss starred maps"
msgstr "Stjörnumerkt landakort frá %(current_user)s"
#: templates/auth/user_stars.html:12
#, python-format
msgid "Browse %(current_user)s's starred maps"
msgstr ""
msgstr "Skoða stjörnumerkt landakort frá %(current_user)s"
#: templates/auth/user_stars.html:17
#: templates/auth/user_stars.html:21
#, python-format
msgid "%(current_user)s has no starred maps yet."
msgstr ""
msgstr "%(current_user)s er ekki ennþá með nein stjörnumerkt kort."
#: templates/base.html:13
msgid ""
"uMap lets you create maps with OpenStreetMap layers in a minute and embed "
"them in your site."
msgstr ""
msgstr "uMap gerir þér kleift að útbúa landakort með OpenStreetMap lögum á nokkrum mínútum og birta þau á vefsvæðinu þínu."
#: templates/registration/login.html:6 templates/registration/login.html:46
msgid "Login"
@ -223,11 +313,11 @@ msgstr "Innskráning"
#: templates/registration/login.html:22
msgid "To save and easily find your maps, identify yourself."
msgstr ""
msgstr "Til þess að finna aftur kortin þín á einfaldan máta, skaltu auðkenna þig."
#: templates/registration/login.html:25
msgid "Please log in with your account:"
msgstr ""
msgstr "Skráðu þig inn í notandaaðganginn þinn:"
#: templates/registration/login.html:42
msgid "Username"
@ -239,7 +329,11 @@ msgstr "Lykilorð"
#: templates/registration/login.html:52
msgid "Please choose a provider:"
msgstr ""
msgstr "Veldu þjónustu:"
#: templates/umap/about.html:5 templates/umap/navigation.html:22
msgid "About"
msgstr "Um hugbúnaðinn"
#: templates/umap/about_summary.html:12
#, python-format
@ -294,7 +388,7 @@ msgstr "Leiktu þér með sýnisútgáfuna"
#: templates/umap/components/alerts/alert.html:66
#: templates/umap/components/alerts/alert.html:94
msgid "Close"
msgstr ""
msgstr "Loka"
#: templates/umap/components/alerts/alert.html:32
#, python-format
@ -302,45 +396,45 @@ msgid ""
"Pro-tip: to easily find back your maps, <a href=\"%(login_url)s\" "
"target=\"_blank\">create an account</a> or <a href=\"%(login_url)s\" "
"target=\"_blank\">log in</a>."
msgstr ""
msgstr "Til þess að finna aftur kortin þín á einfaldan máta, skaltu annaðhvort <a href=\"%(login_url)s\" target=\"_blank\">búa til aðgang</a> eða <a href=\"%(login_url)s\" target=\"_blank\">skrá þig inn</a>."
#: templates/umap/components/alerts/alert.html:37
msgid "Here is your secret link to edit the map, please keep it safe:"
msgstr ""
msgstr "Hér er leynilegi tengillinn þinn til að breyta kortinu, haltu honum öruggum:"
#: templates/umap/components/alerts/alert.html:41
msgid "Copy link"
msgstr ""
msgstr "Afrita tengil"
#: templates/umap/components/alerts/alert.html:48
msgid "Enter your email address to receive the secret link:"
msgstr ""
msgstr "Settu inn tölvupóstfangið þitt til að taka við leynilega tenglinum:"
#: templates/umap/components/alerts/alert.html:54
msgid "Email"
msgstr ""
msgstr "Tölvupóstur"
#: templates/umap/components/alerts/alert.html:57
msgid "Send me the link"
msgstr ""
msgstr "Senda mér tengilinn"
#: templates/umap/components/alerts/alert.html:81
msgid "See their edits in another tab"
msgstr ""
msgstr "Skoða breytingar þeirra í öðrum flipa"
#: templates/umap/components/alerts/alert.html:84
msgid "Keep your changes and loose theirs"
msgstr ""
msgstr "Halda þínum breytingum og tapa þeirra"
#: templates/umap/components/alerts/alert.html:87
msgid "Keep their changes and loose yours"
msgstr ""
msgstr "Halda breytingum þeirra og tapa þínum"
#: templates/umap/content.html:26
msgid ""
"This instance of uMap is currently in read only mode, no creation/edit is "
"allowed."
msgstr ""
msgstr "Þetta uMap-tilvik er nú í skrifvörðum ham, engin ný kort eða breytingar eru mögulegar."
#: templates/umap/content.html:34
#, python-format
@ -353,46 +447,46 @@ msgstr "Þetta er sýnitilvik, notað fyrir prófanir og skoðun á eiginleikum
#: templates/umap/content_footer.html:5
msgid "An OpenStreetMap project"
msgstr ""
msgstr "OpenStreetMap-verkefni"
#: templates/umap/content_footer.html:6
msgid "version"
msgstr ""
msgstr "útgáfa"
#: templates/umap/content_footer.html:7
msgid "Hosted by"
msgstr ""
msgstr "Hýst hjá"
#: templates/umap/content_footer.html:8
msgid "Contact"
msgstr ""
msgstr "Hafa samband"
#: templates/umap/content_footer.html:9 templates/umap/navigation.html:25
msgid "Help"
msgstr ""
msgstr "Hjálp"
#: templates/umap/dashboard_menu.html:6
#, python-format
msgid "My Maps (%(count)s)"
msgstr ""
msgstr "Kortin mín (%(count)s)"
#: templates/umap/dashboard_menu.html:8
msgid "My Maps"
msgstr ""
msgstr "Kortin mín"
#: templates/umap/dashboard_menu.html:12
msgid "My profile"
msgstr ""
msgstr "Sniðið mitt"
#: templates/umap/dashboard_menu.html:15
msgid "My teams"
msgstr ""
msgstr "Teymin mín"
#: templates/umap/home.html:14
msgid "Map of the uMaps"
msgstr "Kort í uMaps"
#: templates/umap/home.html:24
#: templates/umap/home.html:25
msgid "Get inspired, browse maps"
msgstr "Fáðu hugmyndir, skoðaðu önnur landakort"
@ -400,105 +494,109 @@ msgstr "Fáðu hugmyndir, skoðaðu önnur landakort"
msgid "You are logged in. Continuing..."
msgstr "Þú ert skráð/ur inn. Held áfram..."
#: templates/umap/map_list.html:11 views.py:437
#: templates/umap/map_list.html:18 views.py:444
msgid "by"
msgstr "eftir"
#: templates/umap/map_list.html:20
#: templates/umap/map_list.html:22
msgid "See the map"
msgstr ""
#: templates/umap/map_list.html:28
msgid "More"
msgstr "Meira"
#: templates/umap/map_table.html:8 templates/umap/user_teams.html:14
#: templates/umap/map_table.html:8 templates/umap/user_teams.html:18
msgid "Name"
msgstr ""
msgstr "Nafn"
#: templates/umap/map_table.html:11
msgid "Preview"
msgstr ""
msgstr "Forskoðun"
#: templates/umap/map_table.html:14
msgid "Who can see"
msgstr ""
msgstr "Hver getur skoðað"
#: templates/umap/map_table.html:17
msgid "Who can edit"
msgstr ""
msgstr "Hver getur breytt"
#: templates/umap/map_table.html:20
msgid "Last save"
msgstr ""
msgstr "Síðast vistað"
#: templates/umap/map_table.html:23
msgid "Owner"
msgstr ""
msgstr "Eigandi"
#: templates/umap/map_table.html:26 templates/umap/user_teams.html:20
#: templates/umap/map_table.html:26 templates/umap/user_teams.html:24
msgid "Actions"
msgstr ""
msgstr "Aðgerðir"
#: templates/umap/map_table.html:41 templates/umap/map_table.html:43
msgid "Open preview"
msgstr ""
msgstr "Opna forskoðun"
#: templates/umap/map_table.html:72 templates/umap/map_table.html:74
msgid "Share"
msgstr ""
msgstr "Deila"
#: templates/umap/map_table.html:78 templates/umap/map_table.html:80
#: templates/umap/user_teams.html:38 templates/umap/user_teams.html:40
#: templates/umap/user_teams.html:42 templates/umap/user_teams.html:44
msgid "Edit"
msgstr ""
msgstr "Breyta"
#: templates/umap/map_table.html:84 templates/umap/map_table.html:86
msgid "Download"
msgstr ""
msgstr "Sækja"
#: templates/umap/map_table.html:90 templates/umap/map_table.html:92
msgid "Clone"
msgstr ""
msgstr "Klóna"
#: templates/umap/map_table.html:101 templates/umap/map_table.html:103
msgid "Delete"
msgstr ""
msgstr "Eyða"
#: templates/umap/map_table.html:117
msgid "first"
msgstr ""
msgstr "fyrsta"
#: templates/umap/map_table.html:118
msgid "previous"
msgstr ""
msgstr "fyrra"
#: templates/umap/map_table.html:126
#, python-format
msgid "Page %(maps_number)s of %(num_pages)s"
msgstr ""
msgstr "Síða %(maps_number)s af %(num_pages)s"
#: templates/umap/map_table.html:131
msgid "next"
msgstr ""
msgstr "næsta"
#: templates/umap/map_table.html:132
msgid "last"
msgstr ""
msgstr "síðasta"
#: templates/umap/map_table.html:140
#, python-format
msgid "Lines per page: %(per_page)s"
msgstr ""
msgstr "Línur á síðu: %(per_page)s"
#: templates/umap/map_table.html:145
#, python-format
msgid "%(count)s maps"
msgstr ""
msgstr "%(count)s landakort"
#: templates/umap/navigation.html:11 templates/umap/user_dashboard.html:6
msgid "My Dashboard"
msgstr ""
msgstr "Stjórnskjárinn minn"
#: templates/umap/navigation.html:14
msgid "Starred maps"
msgstr ""
msgstr "Stjörnumerkt kort"
#: templates/umap/navigation.html:18
msgid "Log in"
@ -508,10 +606,6 @@ msgstr "Skrá inn"
msgid "Sign in"
msgstr "Nýskrá"
#: templates/umap/navigation.html:22
msgid "About"
msgstr "Um hugbúnaðinn"
#: templates/umap/navigation.html:30
msgid "Change password"
msgstr "Breyta lykilorði"
@ -520,170 +614,197 @@ msgstr "Breyta lykilorði"
msgid "Log out"
msgstr "Skrá út"
#: templates/umap/password_change.html:7
#: templates/umap/password_change.html:6
#: templates/umap/password_change.html:11
msgid "Password change"
msgstr "Breyting á lykilorði"
#: templates/umap/password_change.html:10
#: templates/umap/password_change.html:14
msgid ""
"Please enter your old password, for security's sake, and then enter your new"
" password twice so we can verify you typed it in correctly."
msgstr "Settu gamla lykilorðið þitt inn í öryggisskyni og settu síðan nýja lykilorðið þitt inn tvisvar, svo að við getum sannreynt að þú hafir slegið það rétt inn."
#: templates/umap/password_change.html:17
#: templates/umap/password_change.html:21
msgid "Old password"
msgstr "Gamla lykilorðið"
#: templates/umap/password_change.html:22
#: templates/umap/password_change.html:26
msgid "New password"
msgstr "Nýtt lykilorð"
#: templates/umap/password_change.html:26
#: templates/umap/password_change.html:30
msgid "New password confirmation"
msgstr "Staðfesting á nýju lykilorði"
#: templates/umap/password_change.html:27
#: templates/umap/password_change.html:31
msgid "Change my password"
msgstr "Breyta lykilorðinu mínu"
#: templates/umap/password_change_done.html:7
#: templates/umap/password_change_done.html:6
#: templates/umap/password_change_done.html:11
msgid "Password change successful"
msgstr "Breyting á lykilorði tókst"
#: templates/umap/password_change_done.html:10
#: templates/umap/password_change_done.html:14
msgid "Your password was changed."
msgstr "Lykilorðinu þínu hefur verið breytt"
#: templates/umap/search.html:15
#: templates/umap/search.html:6
msgid "Explore maps"
msgstr "Skoða landakort"
#: templates/umap/search.html:19
#, python-format
msgid "%(count)s map found:"
msgid_plural "%(count)s maps found:"
msgstr[0] ""
msgstr[1] ""
msgstr[0] "%(count)s kort fannst:"
msgstr[1] "%(count)s kort fundust:"
#: templates/umap/search.html:24
#: templates/umap/search.html:30
msgid "No map found."
msgstr ""
msgstr "Engin kort fundust."
#: templates/umap/search.html:29
#: templates/umap/search.html:35
msgid "Latest created maps"
msgstr ""
msgstr "Síðast útbúnu kortin"
#: templates/umap/search_bar.html:4
msgid "Search maps"
msgstr "Leita í landakortum"
#: templates/umap/search_bar.html:15
#: templates/umap/search_bar.html:14
msgid "Any category"
msgstr ""
#: templates/umap/search_bar.html:19
msgid "Search"
msgstr "Leita"
#: templates/umap/team_detail.html:10
#: templates/umap/team_confirm_delete.html:6
msgid "Team deletion"
msgstr "Eyðing teymis"
#: templates/umap/team_detail.html:6
#, python-format
msgid "%(current_team)ss maps"
msgstr "Kort frá %(current_team)s"
#: templates/umap/team_detail.html:14
#, python-format
msgid "Browse %(current_team)s's maps"
msgstr ""
msgstr "Skoða kort frá %(current_team)s"
#: templates/umap/team_detail.html:22
#: templates/umap/team_detail.html:26
#, python-format
msgid "%(current_team)s has no public maps."
msgstr ""
msgstr "%(current_team)s er ekki með nein opinber landakort."
#: templates/umap/team_form.html:24
#: templates/umap/team_form.html:6
msgid "Create or edit a team"
msgstr "Búa til eða breyta teymi"
#: templates/umap/team_form.html:28
msgid "Delete this team"
msgstr ""
msgstr "Eyða þessu teymi"
#: templates/umap/team_form.html:47
#: templates/umap/team_form.html:51
msgid "Add user"
msgstr ""
msgstr "Bæta við notanda"
#: templates/umap/user_dashboard.html:9 templates/umap/user_dashboard.html:25
msgid "Search my maps"
msgstr ""
msgstr "Leita í landakortunum mínum"
#: templates/umap/user_dashboard.html:17 templates/umap/user_dashboard.html:22
msgid "Maps title"
msgstr ""
msgstr "Titill landakortsins"
#: templates/umap/user_dashboard.html:30
#, python-format
msgid "Download %(count)s maps"
msgstr ""
msgstr "Sækja %(count)s landakort"
#: templates/umap/user_dashboard.html:40
msgid "You have no map yet."
msgstr ""
msgstr "Þú ert ekki með nein kort ennþá."
#: templates/umap/user_teams.html:17
#: templates/umap/user_teams.html:6
msgid "My Teams"
msgstr "Teymin mín"
#: templates/umap/user_teams.html:21
msgid "Users"
msgstr ""
msgstr "Notendur"
#: templates/umap/user_teams.html:48
#: templates/umap/user_teams.html:52
msgid "New team"
msgstr ""
msgstr "Nýtt teymi"
#: views.py:234
#: views.py:235
msgid "Cannot delete a team with more than one member"
msgstr ""
msgstr "Get ekki eytt teymi með fleiri en einum meðlim"
#: views.py:238
#: views.py:239
#, python-format
msgid "Team “%(name)s” has been deleted"
msgstr ""
msgstr "Teyminu “%(name)s” hefur verið eytt"
#: views.py:442
#: views.py:449
msgid "View the map"
msgstr "Skoða kortið"
#: views.py:825
#: views.py:845
msgid "See full screen"
msgstr ""
msgstr "Fylla skjáinn"
#: views.py:968
#: views.py:988
msgid "Map editors updated with success!"
msgstr "Tókst að uppfæra vinnslu korta!"
#: views.py:1004
#: views.py:1024
#, python-format
msgid "The uMap edit link for your map: %(map_name)s"
msgstr ""
msgstr "uMap-breytingatengillinn fyrir landakortið þitt: %(map_name)s"
#: views.py:1007
#: views.py:1027
#, python-format
msgid "Here is your secret edit link: %(link)s"
msgstr ""
msgstr "Hér er leynilegi breytingatengillinn þinn: %(link)s"
#: views.py:1014
#: views.py:1034
#, python-format
msgid "Can't send email to %(email)s"
msgstr ""
msgstr "Tekst ekki að senda tölvupóst á %(email)s"
#: views.py:1017
#: views.py:1037
#, python-format
msgid "Email sent to %(email)s"
msgstr ""
msgstr "Tölvupóstur var sendur á %(email)s"
#: views.py:1028
#: views.py:1048
msgid "Only its owner can delete the map."
msgstr "Aðeins eigandinn getur eytt landakortinu."
#: views.py:1031
#: views.py:1051
msgid "Map successfully deleted."
msgstr ""
msgstr "Tókst að eyða korti."
#: views.py:1057
#: views.py:1077
#, python-format
msgid ""
"Your map has been cloned! If you want to edit this map from another "
"computer, please use this link: %(anonymous_url)s"
msgstr "Það tókst að klóna landakortið þitt! Ef þú ætlar að breyta þessu landakorti úr annarri tölvu, ættirðu að nota þennan tengil: %(anonymous_url)s"
#: views.py:1062
#: views.py:1082
msgid "Congratulations, your map has been cloned!"
msgstr "Til hamingju, það tókst að klóna landakortið þitt!"
#: views.py:1313
#: views.py:1336
msgid "Layer successfully deleted."
msgstr "Tókst að eyða lagi."
#: views.py:1335
#: views.py:1358
msgid "Permissions updated with success!"
msgstr ""
msgstr "Tókst að uppfæra heimildir!"

Binary file not shown.

View file

@ -8,10 +8,10 @@
# Marco <marcxosm@gmail.com>, 2017
# lucacorsato <lucors@gmail.com>, 2014
# lucacorsato <lucors@gmail.com>, 2014
# Marco <marcxosm@gmail.com>, 2017-2019,2024
# Marco <marcxosm@gmail.com>, 2017-2019,2024-2025
# Marco <marcxosm@gmail.com>, 2018
# Maurizio Napolitano <maurizio.napolitano@okfn.org>, 2013,2017,2023
# Maurizio Napolitano <napo@fbk.eu>, 2024
# Maurizio Napolitano <napo@fbk.eu>, 2024-2025
# Mirco Zorzo <mircozorzo@gmail.com>, 2020
# Mirco Zorzo <mircozorzo@gmail.com>, 2020
# claudiamocci <moccicm@gmail.com>, 2013
@ -21,9 +21,9 @@ msgid ""
msgstr ""
"Project-Id-Version: uMap\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-12-24 08:39+0000\n"
"POT-Creation-Date: 2025-03-03 17:36+0000\n"
"PO-Revision-Date: 2013-11-22 14:00+0000\n"
"Last-Translator: Maurizio Napolitano <napo@fbk.eu>, 2024\n"
"Last-Translator: Marco <marcxosm@gmail.com>, 2017-2019,2024-2025\n"
"Language-Team: Italian (http://app.transifex.com/openstreetmap/umap/language/it/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -33,21 +33,29 @@ msgstr ""
#: admin.py:16
msgid "CSV Export"
msgstr ""
msgstr "Esporta CSV"
#: decorators.py:60
msgid "This map is not publicly available"
msgstr ""
msgstr "La mappa non è disponibile pubblicamente"
#: middleware.py:13
#: middleware.py:19
msgid "Site is readonly for maintenance"
msgstr "Il sito in sola lettura per manutenzione"
#: middleware.py:34
#, python-format
msgid ""
"Using “%(name)s” to authenticate is deprecated and will be removed soon. "
"Please configure another provider below before losing access to your account"
" and maps."
msgstr ""
#: models.py:60 models.py:79
msgid "name"
msgstr "nome"
#: models.py:62 models.py:475
#: models.py:62 models.py:485
msgid "description"
msgstr "descrizione"
@ -67,29 +75,29 @@ msgstr "Modello dell'URL usando il formato delle tile OSM"
msgid "Order of the tilelayers in the edit box"
msgstr "Ordine degli sfondi (tilelayers) nel box di modifica"
#: models.py:175 models.py:469
#: models.py:175 models.py:479
msgid "Only editable with secret edit link"
msgstr "Modificabile solo con il link segreto"
#: models.py:176 models.py:470
#: models.py:176 models.py:480
msgid "Everyone can edit"
msgstr "Chiunque può modificare"
#: models.py:179 models.py:463
#: models.py:179 models.py:473
msgid "Everyone"
msgstr "Chiunque"
#: models.py:180 models.py:189 models.py:464
#: models.py:180 models.py:189 models.py:474
msgid "Editors and team only"
msgstr ""
msgstr "Soltanto editor e team"
#: models.py:181 models.py:465
#: models.py:181 models.py:475
msgid "Owner only"
msgstr "Solo chi ha la proprietà"
#: models.py:184
msgid "Draft (private)"
msgstr ""
msgstr "Bozza (privata)"
#: models.py:185
msgid "Everyone (public)"
@ -103,9 +111,9 @@ msgstr "Chiunque abbia il link"
msgid "Blocked"
msgstr "Bloccata"
#: models.py:191
#: models.py:191 models.py:469
msgid "Deleted"
msgstr ""
msgstr "Eliminato"
#: models.py:194
msgid "center"
@ -141,33 +149,33 @@ msgstr "contributore"
#: models.py:223
msgid "team"
msgstr ""
msgstr "team"
#: models.py:229 models.py:491
#: models.py:229 models.py:501
msgid "edit status"
msgstr "stato della modifica"
#: models.py:234
#: models.py:234 models.py:506
msgid "share status"
msgstr "stato condivisione"
#: models.py:237 models.py:486
#: models.py:237 models.py:496
msgid "settings"
msgstr "impostazioni"
#: models.py:402
#: models.py:407
msgid "Clone of"
msgstr "Duplicata da "
#: models.py:462 models.py:468
#: models.py:468 models.py:472 models.py:478
msgid "Inherit"
msgstr "Inherit"
#: models.py:481
#: models.py:491
msgid "display on load"
msgstr "mostra al caricamento"
#: models.py:482
#: models.py:492
msgid "Display this layer on load."
msgstr "Visualizza questo layer al caricamento."
@ -176,50 +184,64 @@ msgid ""
"<a href=\"https://discover.umap-project.org/support/faq/#map-statuses\" "
"target=\"_blank\">Find out here the documentation</a> on how to manage maps"
" permissions."
msgstr ""
msgstr "<a href=\"https://discover.umap-project.org/support/faq/#map-statuses\" target=\"_blank\">Qui si trova la documentazione</a>su come gestire i permessi delle mappe."
#: templates/403.html:10 templates/404.html:8
msgid "← Go to the homepage"
msgstr ""
msgstr "← Torna alla pagina principale"
#: templates/404.html:7
msgid "404 Page Not Found"
msgstr ""
msgstr "404 Pagina Non Trovata"
#: templates/auth/user_detail.html:8
#: templates/auth/user_detail.html:6
#, python-format
msgid "%(current_user)ss maps"
msgstr "Mappe di %(current_user)s"
#: templates/auth/user_detail.html:12
#, python-format
msgid "Browse %(current_user)s's maps"
msgstr "Vedi le mappe di %(current_user)s"
#: templates/auth/user_detail.html:17
#: templates/auth/user_detail.html:21
#, python-format
msgid "%(current_user)s has no maps."
msgstr "%(current_user)s non ha mappe."
#: templates/auth/user_form.html:21 templates/umap/team_form.html:21
#: templates/auth/user_form.html:6
msgid "My Profile"
msgstr "Il mio profilo"
#: templates/auth/user_form.html:24 templates/umap/team_form.html:25
msgid "Save"
msgstr "Salva"
#: templates/auth/user_form.html:27
#: templates/auth/user_form.html:30
msgid "Your current providers"
msgstr "I tuoi fornitori attuali"
#: templates/auth/user_form.html:39
#: templates/auth/user_form.html:44
msgid "Connect to another provider"
msgstr "Collegati ad un altro fornitore"
#: templates/auth/user_form.html:42
#: templates/auth/user_form.html:47
msgid ""
"It's a good habit to connect your account to more than one provider, in case"
" one provider becomes unavailable, temporarily or even permanently."
msgstr "È una buona abitudine connettere il tuo account a più di un fornitore, nel caso in cui un fornitore diventi non disponibile, temporaneamente o addirittura permanentemente."
#: templates/auth/user_stars.html:8
#: templates/auth/user_stars.html:6
#, python-format
msgid "%(current_user)ss starred maps"
msgstr ""
#: templates/auth/user_stars.html:12
#, python-format
msgid "Browse %(current_user)s's starred maps"
msgstr "Sfoglia le mappe selezionate da %(current_user)s"
#: templates/auth/user_stars.html:17
#: templates/auth/user_stars.html:21
#, python-format
msgid "%(current_user)s has no starred maps yet."
msgstr "%(current_user)snon ha ancora selezionato mappe"
@ -236,11 +258,11 @@ msgstr "Login"
#: templates/registration/login.html:22
msgid "To save and easily find your maps, identify yourself."
msgstr ""
msgstr "Identificati per salva re e trovare facilmente le tue mappe"
#: templates/registration/login.html:25
msgid "Please log in with your account:"
msgstr ""
msgstr "Accedi al sito con il tuo account:"
#: templates/registration/login.html:42
msgid "Username"
@ -252,7 +274,11 @@ msgstr "Password"
#: templates/registration/login.html:52
msgid "Please choose a provider:"
msgstr ""
msgstr "Scegli un fornitore"
#: templates/umap/about.html:5 templates/umap/navigation.html:22
msgid "About"
msgstr "Informazioni"
#: templates/umap/about_summary.html:12
#, python-format
@ -307,7 +333,7 @@ msgstr "Gioca con la demo"
#: templates/umap/components/alerts/alert.html:66
#: templates/umap/components/alerts/alert.html:94
msgid "Close"
msgstr ""
msgstr "Chiudi"
#: templates/umap/components/alerts/alert.html:32
#, python-format
@ -315,39 +341,39 @@ msgid ""
"Pro-tip: to easily find back your maps, <a href=\"%(login_url)s\" "
"target=\"_blank\">create an account</a> or <a href=\"%(login_url)s\" "
"target=\"_blank\">log in</a>."
msgstr ""
msgstr "Pro-tip: per trovare facilmente le tue mappe, <a href=\"%(login_url)s\" target=\"_blank\">crea un account</a> o <a href=\"%(login_url)s\" target=\"_blank\">effettua il log in</a>."
#: templates/umap/components/alerts/alert.html:37
msgid "Here is your secret link to edit the map, please keep it safe:"
msgstr ""
msgstr "Ecco il tuo link segreto per modificare la mappa, fa attenzione a tenerlo al sicuro:"
#: templates/umap/components/alerts/alert.html:41
msgid "Copy link"
msgstr ""
msgstr "Copia link"
#: templates/umap/components/alerts/alert.html:48
msgid "Enter your email address to receive the secret link:"
msgstr ""
msgstr "Fornisci la tua email per ricevere il link segreto:"
#: templates/umap/components/alerts/alert.html:54
msgid "Email"
msgstr ""
msgstr "Email"
#: templates/umap/components/alerts/alert.html:57
msgid "Send me the link"
msgstr ""
msgstr "Inviami il link"
#: templates/umap/components/alerts/alert.html:81
msgid "See their edits in another tab"
msgstr ""
msgstr "Vedi le loro modifiche in un'altra scheda"
#: templates/umap/components/alerts/alert.html:84
msgid "Keep your changes and loose theirs"
msgstr ""
msgstr "Mantieni i tuoi cambiamenti e perdi i precedenti"
#: templates/umap/components/alerts/alert.html:87
msgid "Keep their changes and loose yours"
msgstr ""
msgstr "Mantieni i loro cambiamenti e perdi i tuoi"
#: templates/umap/content.html:26
msgid ""
@ -366,19 +392,19 @@ msgstr "Questa è una demo da utilizzare solo per test e prototipi. Qualora sia
#: templates/umap/content_footer.html:5
msgid "An OpenStreetMap project"
msgstr ""
msgstr "Un progetto OpenStreetMap"
#: templates/umap/content_footer.html:6
msgid "version"
msgstr ""
msgstr "versione"
#: templates/umap/content_footer.html:7
msgid "Hosted by"
msgstr ""
msgstr "Ospitato da"
#: templates/umap/content_footer.html:8
msgid "Contact"
msgstr ""
msgstr "Contatto"
#: templates/umap/content_footer.html:9 templates/umap/navigation.html:25
msgid "Help"
@ -399,7 +425,7 @@ msgstr "Mio profilo"
#: templates/umap/dashboard_menu.html:15
msgid "My teams"
msgstr ""
msgstr "I miei team"
#: templates/umap/home.html:14
msgid "Map of the uMaps"
@ -421,7 +447,7 @@ msgstr "di"
msgid "More"
msgstr "Altre mappe"
#: templates/umap/map_table.html:8 templates/umap/user_teams.html:14
#: templates/umap/map_table.html:8 templates/umap/user_teams.html:18
msgid "Name"
msgstr "Nome"
@ -445,7 +471,7 @@ msgstr "Ultimo salvataggio"
msgid "Owner"
msgstr "Proprietario"
#: templates/umap/map_table.html:26 templates/umap/user_teams.html:20
#: templates/umap/map_table.html:26 templates/umap/user_teams.html:24
msgid "Actions"
msgstr "Azioni"
@ -458,7 +484,7 @@ msgid "Share"
msgstr "Condividi"
#: templates/umap/map_table.html:78 templates/umap/map_table.html:80
#: templates/umap/user_teams.html:38 templates/umap/user_teams.html:40
#: templates/umap/user_teams.html:42 templates/umap/user_teams.html:44
msgid "Edit"
msgstr "Modifica"
@ -521,10 +547,6 @@ msgstr "Accedi"
msgid "Sign in"
msgstr "Registrati"
#: templates/umap/navigation.html:22
msgid "About"
msgstr "Informazioni"
#: templates/umap/navigation.html:30
msgid "Change password"
msgstr "Cambia password"
@ -533,41 +555,47 @@ msgstr "Cambia password"
msgid "Log out"
msgstr "Esci"
#: templates/umap/password_change.html:7
#: templates/umap/password_change.html:6
#: templates/umap/password_change.html:11
msgid "Password change"
msgstr "Cambia password"
#: templates/umap/password_change.html:10
#: templates/umap/password_change.html:14
msgid ""
"Please enter your old password, for security's sake, and then enter your new"
" password twice so we can verify you typed it in correctly."
msgstr "Per motivi di sicurezza inserire la vecchia password, poi inserire quella nuova due volte così da verificare che sia stata scritta correttamente"
#: templates/umap/password_change.html:17
#: templates/umap/password_change.html:21
msgid "Old password"
msgstr "Password vecchia"
#: templates/umap/password_change.html:22
#: templates/umap/password_change.html:26
msgid "New password"
msgstr "Nuova password"
#: templates/umap/password_change.html:26
#: templates/umap/password_change.html:30
msgid "New password confirmation"
msgstr "Conferma della nuova password"
#: templates/umap/password_change.html:27
#: templates/umap/password_change.html:31
msgid "Change my password"
msgstr "Cambia la mia password"
#: templates/umap/password_change_done.html:7
#: templates/umap/password_change_done.html:6
#: templates/umap/password_change_done.html:11
msgid "Password change successful"
msgstr "Cambio della password effettuato con successo!"
#: templates/umap/password_change_done.html:10
#: templates/umap/password_change_done.html:14
msgid "Your password was changed."
msgstr "La tua password è stata cambiata."
#: templates/umap/search.html:15
#: templates/umap/search.html:6
msgid "Explore maps"
msgstr "Esplora mappe"
#: templates/umap/search.html:19
#, python-format
msgid "%(count)s map found:"
msgid_plural "%(count)s maps found:"
@ -575,11 +603,11 @@ msgstr[0] "%(count)s mappa trovata"
msgstr[1] "%(count)s mappe trovate"
msgstr[2] "%(count)s mappe trovate:"
#: templates/umap/search.html:24
#: templates/umap/search.html:28
msgid "No map found."
msgstr "Nessuna mappa trovata."
#: templates/umap/search.html:29
#: templates/umap/search.html:33
msgid "Latest created maps"
msgstr "Ultime mappe create"
@ -587,27 +615,40 @@ msgstr "Ultime mappe create"
msgid "Search maps"
msgstr "Cerca mappe"
#: templates/umap/search_bar.html:15
#: templates/umap/search_bar.html:16
msgid "Search"
msgstr "Cerca"
#: templates/umap/team_detail.html:10
#: templates/umap/team_confirm_delete.html:6
msgid "Team deletion"
msgstr ""
#: templates/umap/team_detail.html:6
#, python-format
msgid "%(current_team)ss maps"
msgstr ""
#: templates/umap/team_detail.html:14
#, python-format
msgid "Browse %(current_team)s's maps"
msgstr ""
msgstr "Sfoglia mappe team %(current_team)s"
#: templates/umap/team_detail.html:22
#: templates/umap/team_detail.html:26
#, python-format
msgid "%(current_team)s has no public maps."
msgstr ""
msgstr "%(current_team)snon ha mappe pubbliche"
#: templates/umap/team_form.html:24
#: templates/umap/team_form.html:6
msgid "Create or edit a team"
msgstr "Crea o modifica un team"
#: templates/umap/team_form.html:28
msgid "Delete this team"
msgstr ""
msgstr "Elimina questo team"
#: templates/umap/team_form.html:47
#: templates/umap/team_form.html:51
msgid "Add user"
msgstr ""
msgstr "Aggiungi utente"
#: templates/umap/user_dashboard.html:9 templates/umap/user_dashboard.html:25
msgid "Search my maps"
@ -626,78 +667,82 @@ msgstr "Scarica %(count)s mappe"
msgid "You have no map yet."
msgstr "Non hai ancora alcuna mappa."
#: templates/umap/user_teams.html:17
msgid "Users"
msgstr ""
#: templates/umap/user_teams.html:6
msgid "My Teams"
msgstr "I miei team"
#: templates/umap/user_teams.html:48
#: templates/umap/user_teams.html:21
msgid "Users"
msgstr "Utenti"
#: templates/umap/user_teams.html:52
msgid "New team"
msgstr ""
msgstr "Nuovo team"
#: views.py:234
msgid "Cannot delete a team with more than one member"
msgstr ""
msgstr "Non si può eliminare un team con più di un membro"
#: views.py:238
#, python-format
msgid "Team “%(name)s” has been deleted"
msgstr ""
msgstr "il team \"%(name)s\" è stato cancellato"
#: views.py:442
msgid "View the map"
msgstr "Visualizza la mappa"
#: views.py:825
#: views.py:838
msgid "See full screen"
msgstr "Vedi a schermo interno"
#: views.py:968
#: views.py:981
msgid "Map editors updated with success!"
msgstr "Aggiornato l'elenco degli editor abilitati alla modifica della mappa!"
#: views.py:1004
#: views.py:1017
#, python-format
msgid "The uMap edit link for your map: %(map_name)s"
msgstr "Link uMap per la modifica della tua mappa: %(map_name)s"
#: views.py:1007
#: views.py:1020
#, python-format
msgid "Here is your secret edit link: %(link)s"
msgstr "Qui il tuo link segreto: %(link)s"
#: views.py:1014
#: views.py:1027
#, python-format
msgid "Can't send email to %(email)s"
msgstr "Non riesco ad inviare email a 1%(email)s"
#: views.py:1017
#: views.py:1030
#, python-format
msgid "Email sent to %(email)s"
msgstr "Email inviata a %(email)s"
#: views.py:1028
#: views.py:1041
msgid "Only its owner can delete the map."
msgstr "Solo il proprietario può eliminare la mappa."
#: views.py:1031
#: views.py:1044
msgid "Map successfully deleted."
msgstr ""
msgstr "La mappa è stata eliminata definitivamente."
#: views.py:1057
#: views.py:1070
#, python-format
msgid ""
"Your map has been cloned! If you want to edit this map from another "
"computer, please use this link: %(anonymous_url)s"
msgstr "La mappa è stata clonata! Per modificarla usando un altro computer, si deve utilizzare questo link: %(anonymous_url)s"
#: views.py:1062
#: views.py:1075
msgid "Congratulations, your map has been cloned!"
msgstr "Perfetto, la tua mappa è stata clonata!"
#: views.py:1313
#: views.py:1329
msgid "Layer successfully deleted."
msgstr "Layer eliminato correttamente"
#: views.py:1335
#: views.py:1351
msgid "Permissions updated with success!"
msgstr "Autorizzazioni aggiornate con successo!"

Binary file not shown.

View file

@ -6,13 +6,14 @@
# Cees Geuze <info@cgid.nl>, 2020
# danieldegroot2 <danieldegroot18@gmail.com>, 2022
# danieldegroot2 <danieldegroot18@gmail.com>, 2022
# Gideon van Melle <translations@gvmelle.com>, 2025
msgid ""
msgstr ""
"Project-Id-Version: uMap\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-12-24 08:39+0000\n"
"POT-Creation-Date: 2025-04-11 15:30+0000\n"
"PO-Revision-Date: 2013-11-22 14:00+0000\n"
"Last-Translator: danieldegroot2 <danieldegroot18@gmail.com>, 2022\n"
"Last-Translator: Gideon van Melle <translations@gvmelle.com>, 2025\n"
"Language-Team: Dutch (http://app.transifex.com/openstreetmap/umap/language/nl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -22,202 +23,292 @@ msgstr ""
#: admin.py:16
msgid "CSV Export"
msgstr ""
msgstr "CSV Export"
#: decorators.py:60
msgid "This map is not publicly available"
msgstr ""
msgstr "Deze kaart is niet openbaar beschikbaar"
#: middleware.py:13
#: middleware.py:19
msgid "Site is readonly for maintenance"
msgstr "Site is 'alleen lezen' wegens onderhoud"
#: models.py:60 models.py:79
#: middleware.py:34
#, python-format
msgid ""
"Using “%(name)s” to authenticate is deprecated and will be removed soon. "
"Please configure another provider below before losing access to your account"
" and maps. Then, please logout and login again with the new provider."
msgstr "Het gebruik van %(name)s om te verifiëren is afgeschaft en zal binnenkort worden verwijderd. Configureer hieronder een andere provider voordat u de toegang tot uw account en kaarten verliest. Log uit en log opnieuw in met de nieuwe provider."
#: models.py:61 models.py:80
msgid "name"
msgstr "naam"
#: models.py:62 models.py:475
#: models.py:63 models.py:493
msgid "description"
msgstr "omschrijving"
#: models.py:110
#: models.py:111
msgid "details"
msgstr "details"
#: models.py:111
#: models.py:112
msgid "Link to a page where the licence is detailed."
msgstr "Link naar pagina waar de licentie details staan"
#: models.py:121
#: models.py:122
msgid "URL template using OSM tile format"
msgstr "URL-sjabloon met OSM tegel-formaat"
#: models.py:127
#: models.py:128
msgid "Order of the tilelayers in the edit box"
msgstr "Volgorde van de tegel-lagen in het bewerkingsvak."
#: models.py:175 models.py:469
#: models.py:176 models.py:487
msgid "Only editable with secret edit link"
msgstr "Alleen te bewerken met een geheime link"
#: models.py:176 models.py:470
#: models.py:177 models.py:488
msgid "Everyone can edit"
msgstr "Iedereen kan wijzigingen maken"
#: models.py:179 models.py:463
#: models.py:180 models.py:481
msgid "Everyone"
msgstr ""
msgstr "Iedereen"
#: models.py:180 models.py:189 models.py:464
#: models.py:181 models.py:190 models.py:482
msgid "Editors and team only"
msgstr ""
msgstr "Alleen redacteuren en team"
#: models.py:181 models.py:465
#: models.py:182 models.py:483
msgid "Owner only"
msgstr ""
#: models.py:184
msgid "Draft (private)"
msgstr ""
msgstr "Alleen eigenaar"
#: models.py:185
msgid "Draft (private)"
msgstr "Ontwerp (privé)"
#: models.py:186
msgid "Everyone (public)"
msgstr ""
msgstr "Iedereen (openbaar)"
#: models.py:188
#: models.py:189
msgid "Anyone with link"
msgstr ""
#: models.py:190
msgid "Blocked"
msgstr ""
msgstr "Iedereen met een link"
#: models.py:191
msgid "Deleted"
msgstr ""
msgid "Blocked"
msgstr "geblokkeerd"
#: models.py:194
#: models.py:192 models.py:477
msgid "Deleted"
msgstr "Verwijderd"
#: models.py:195
msgid "center"
msgstr "centreer"
#: models.py:195
#: models.py:196
msgid "zoom"
msgstr "zoom"
#: models.py:197
#: models.py:198
msgid "locate"
msgstr "zoek"
#: models.py:197
#: models.py:198
msgid "Locate user on load?"
msgstr "Gebruiker zoeken tijdens laden?"
#: models.py:201
#: models.py:202
msgid "Choose the map licence."
msgstr "Kies de kaartlicentie"
#: models.py:202
#: models.py:203
msgid "licence"
msgstr "Licentie"
#: models.py:213
#: models.py:214
msgid "owner"
msgstr "eigenaar"
#: models.py:217
#: models.py:218
msgid "editors"
msgstr "editors"
#: models.py:223
#: models.py:224
msgid "team"
msgstr ""
msgstr "team"
#: models.py:229 models.py:491
#: models.py:230 models.py:509
msgid "edit status"
msgstr "wijzig status"
#: models.py:234
#: models.py:235 models.py:514
msgid "share status"
msgstr "deel status"
#: models.py:237 models.py:486
#: models.py:238 models.py:504
msgid "settings"
msgstr "instellingen"
#: models.py:402
#: models.py:410
msgid "Clone of"
msgstr "Kopie van"
#: models.py:462 models.py:468
#: models.py:476 models.py:480 models.py:486
msgid "Inherit"
msgstr ""
msgstr "overerven"
#: models.py:481
#: models.py:499
msgid "display on load"
msgstr "toon tijdens laden"
#: models.py:482
#: models.py:500
msgid "Display this layer on load."
msgstr "Toon deze laag tijdens laden."
#: settings/base.py:295
msgid "Art and Culture"
msgstr "Kunst en cultuur"
#: settings/base.py:296
msgid "Cycling"
msgstr "Fietsen"
#: settings/base.py:297
msgid "Business"
msgstr "Zakelijk"
#: settings/base.py:298
msgid "Environment"
msgstr "Mlieu"
#: settings/base.py:299
msgid "Education"
msgstr "Educatie"
#: settings/base.py:300
msgid "Food and Agriculture"
msgstr "Voedsel en landbouw"
#: settings/base.py:301
msgid "Geopolitics"
msgstr "Geopolitiek"
#: settings/base.py:302
msgid "Health"
msgstr "Gezondheid"
#: settings/base.py:303
msgid "Hiking"
msgstr "Hiking"
#: settings/base.py:304
msgid "History"
msgstr "Geschiedenis"
#: settings/base.py:305
msgid "Public sector"
msgstr "Publieke sector"
#: settings/base.py:306
msgid "Science"
msgstr "Wetenschap"
#: settings/base.py:307
msgid "Shopping"
msgstr "Winkelen"
#: settings/base.py:308
msgid "Sport and Leisure"
msgstr "Sport en vrijetijd"
#: settings/base.py:309
msgid "Travel"
msgstr "Reizen"
#: settings/base.py:310
msgid "Transports"
msgstr "Transport"
#: settings/base.py:311
msgid "Tourism"
msgstr "Toerisme"
#: templates/403.html:8
msgid ""
"<a href=\"https://discover.umap-project.org/support/faq/#map-statuses\" "
"target=\"_blank\">Find out here the documentation</a> on how to manage maps"
" permissions."
msgstr ""
msgstr "<a href=\"https://discover.umap-project.org/support/faq/#map-statuses\" target=\"_blank\">Ontdek hier de documentatie</a> over het beheren van de machtigingen van Map."
#: templates/403.html:10 templates/404.html:8
msgid "← Go to the homepage"
msgstr ""
msgstr "← Ga naar de thuispagina"
#: templates/404.html:7
msgid "404 Page Not Found"
msgstr ""
msgstr "404 Pagina niet gevonden"
#: templates/auth/user_detail.html:8
#: templates/auth/user_detail.html:6
#, python-format
msgid "%(current_user)ss maps"
msgstr "%(current_user)ss kaarten"
#: templates/auth/user_detail.html:12
#, python-format
msgid "Browse %(current_user)s's maps"
msgstr "Toon %(current_user)s's kaarten"
#: templates/auth/user_detail.html:17
#: templates/auth/user_detail.html:21
#, python-format
msgid "%(current_user)s has no maps."
msgstr "%(current_user)sheeft geen kaarten."
#: templates/auth/user_form.html:21 templates/umap/team_form.html:21
#: templates/auth/user_form.html:6
msgid "My Profile"
msgstr "Mijn profiel"
#: templates/auth/user_form.html:24 templates/umap/team_form.html:25
msgid "Save"
msgstr ""
msgstr "Opslaan"
#: templates/auth/user_form.html:27
#: templates/auth/user_form.html:30
msgid "Your current providers"
msgstr ""
msgstr "Je huidige providers"
#: templates/auth/user_form.html:39
#: templates/auth/user_form.html:44
msgid "Connect to another provider"
msgstr ""
msgstr "Verbinding maken met een andere provider"
#: templates/auth/user_form.html:42
#: templates/auth/user_form.html:47
msgid ""
"It's a good habit to connect your account to more than one provider, in case"
" one provider becomes unavailable, temporarily or even permanently."
msgstr ""
msgstr "Het is een goede gewoonte om uw account aan meer dan één provider te koppelen, voor het geval een provider tijdelijk of zelfs permanent niet beschikbaar is."
#: templates/auth/user_stars.html:8
#: templates/auth/user_stars.html:6
#, python-format
msgid "%(current_user)ss starred maps"
msgstr "%(current_user)ss Kaarten met ster"
#: templates/auth/user_stars.html:12
#, python-format
msgid "Browse %(current_user)s's starred maps"
msgstr ""
msgstr "Browse %(current_user)s's Kaarten met ster"
#: templates/auth/user_stars.html:17
#: templates/auth/user_stars.html:21
#, python-format
msgid "%(current_user)s has no starred maps yet."
msgstr ""
msgstr "%(current_user)s Heeft nog geen kaarten met ster."
#: templates/base.html:13
msgid ""
"uMap lets you create maps with OpenStreetMap layers in a minute and embed "
"them in your site."
msgstr ""
msgstr "Met uMap kunt u in één minuut kaarten maken met OpenStreetMap-lagen en deze in uw site insluiten."
#: templates/registration/login.html:6 templates/registration/login.html:46
msgid "Login"
@ -225,11 +316,11 @@ msgstr "Inloggen"
#: templates/registration/login.html:22
msgid "To save and easily find your maps, identify yourself."
msgstr ""
msgstr "Identificeer uzelf om uw kaarten op te slaan en gemakkelijk terug te vinden."
#: templates/registration/login.html:25
msgid "Please log in with your account:"
msgstr ""
msgstr "Log in met uw account:"
#: templates/registration/login.html:42
msgid "Username"
@ -241,7 +332,11 @@ msgstr "Wachtwoord"
#: templates/registration/login.html:52
msgid "Please choose a provider:"
msgstr ""
msgstr "Kies een provider:"
#: templates/umap/about.html:5 templates/umap/navigation.html:22
msgid "About"
msgstr "Over"
#: templates/umap/about_summary.html:12
#, python-format
@ -296,7 +391,7 @@ msgstr "Speel met de demo"
#: templates/umap/components/alerts/alert.html:66
#: templates/umap/components/alerts/alert.html:94
msgid "Close"
msgstr ""
msgstr "Afsluiten"
#: templates/umap/components/alerts/alert.html:32
#, python-format
@ -304,45 +399,45 @@ msgid ""
"Pro-tip: to easily find back your maps, <a href=\"%(login_url)s\" "
"target=\"_blank\">create an account</a> or <a href=\"%(login_url)s\" "
"target=\"_blank\">log in</a>."
msgstr ""
msgstr "Pro-tip: om je kaarten gemakkelijk terug te vinden, <a href=\"%(login_url)s\" target=\"_blank\">maak een account aan</a> of <a href=\"%(login_url)s\" target=\"_blank\">log in</a>."
#: templates/umap/components/alerts/alert.html:37
msgid "Here is your secret link to edit the map, please keep it safe:"
msgstr ""
msgstr "Hier is je geheime link om de kaart te bewerken, houd deze alsjeblieft veilig:"
#: templates/umap/components/alerts/alert.html:41
msgid "Copy link"
msgstr ""
msgstr "Kopieer link"
#: templates/umap/components/alerts/alert.html:48
msgid "Enter your email address to receive the secret link:"
msgstr ""
msgstr "Voer je e-mailadres in om de geheime link te ontvangen:"
#: templates/umap/components/alerts/alert.html:54
msgid "Email"
msgstr ""
msgstr "E-mail"
#: templates/umap/components/alerts/alert.html:57
msgid "Send me the link"
msgstr ""
msgstr "Stuur mij de link"
#: templates/umap/components/alerts/alert.html:81
msgid "See their edits in another tab"
msgstr ""
msgstr "Bekijk hun bewerkingen in een ander tabblad"
#: templates/umap/components/alerts/alert.html:84
msgid "Keep your changes and loose theirs"
msgstr ""
msgstr "Bewaar uw wijzigingen en verlies die van hen"
#: templates/umap/components/alerts/alert.html:87
msgid "Keep their changes and loose yours"
msgstr ""
msgstr "Behoud hun wijzigingen en verlies de jouwe"
#: templates/umap/content.html:26
msgid ""
"This instance of uMap is currently in read only mode, no creation/edit is "
"allowed."
msgstr ""
msgstr "Deze instantie van uMap bevindt zich momenteel in de modus Alleen-lezen, aanmaken/bewerken is niet toegestaan."
#: templates/umap/content.html:34
#, python-format
@ -355,46 +450,46 @@ msgstr "Dit is een demo-versie, gebruikt voor tests en pre-rolling releases. Als
#: templates/umap/content_footer.html:5
msgid "An OpenStreetMap project"
msgstr ""
msgstr "Een OpenStreetMap-project"
#: templates/umap/content_footer.html:6
msgid "version"
msgstr ""
msgstr "versie"
#: templates/umap/content_footer.html:7
msgid "Hosted by"
msgstr ""
msgstr "Hosted door"
#: templates/umap/content_footer.html:8
msgid "Contact"
msgstr ""
msgstr "Contact"
#: templates/umap/content_footer.html:9 templates/umap/navigation.html:25
msgid "Help"
msgstr ""
msgstr "Hulp"
#: templates/umap/dashboard_menu.html:6
#, python-format
msgid "My Maps (%(count)s)"
msgstr ""
msgstr "Mijn kaarten (%(count)s)"
#: templates/umap/dashboard_menu.html:8
msgid "My Maps"
msgstr ""
msgstr "Mijn kaarten"
#: templates/umap/dashboard_menu.html:12
msgid "My profile"
msgstr ""
msgstr "Mijn profiel"
#: templates/umap/dashboard_menu.html:15
msgid "My teams"
msgstr ""
msgstr "Mijn teams"
#: templates/umap/home.html:14
msgid "Map of the uMaps"
msgstr "Kaart van de uMaps"
#: templates/umap/home.html:24
#: templates/umap/home.html:25
msgid "Get inspired, browse maps"
msgstr "Laat u inspireren, blader door kaarten"
@ -402,105 +497,109 @@ msgstr "Laat u inspireren, blader door kaarten"
msgid "You are logged in. Continuing..."
msgstr "U bent ingelogd. Ga verder..."
#: templates/umap/map_list.html:11 views.py:437
#: templates/umap/map_list.html:18 views.py:444
msgid "by"
msgstr "door"
#: templates/umap/map_list.html:20
#: templates/umap/map_list.html:22
msgid "See the map"
msgstr "Zie de kaart"
#: templates/umap/map_list.html:28
msgid "More"
msgstr "Meer"
#: templates/umap/map_table.html:8 templates/umap/user_teams.html:14
#: templates/umap/map_table.html:8 templates/umap/user_teams.html:18
msgid "Name"
msgstr ""
msgstr "Naam"
#: templates/umap/map_table.html:11
msgid "Preview"
msgstr ""
msgstr "Voorbeeld"
#: templates/umap/map_table.html:14
msgid "Who can see"
msgstr ""
msgstr "Wie kan bekijken"
#: templates/umap/map_table.html:17
msgid "Who can edit"
msgstr ""
msgstr "Wie kan bewerken"
#: templates/umap/map_table.html:20
msgid "Last save"
msgstr ""
msgstr "Laatst opgeslagen"
#: templates/umap/map_table.html:23
msgid "Owner"
msgstr ""
msgstr "Eigenaar"
#: templates/umap/map_table.html:26 templates/umap/user_teams.html:20
#: templates/umap/map_table.html:26 templates/umap/user_teams.html:24
msgid "Actions"
msgstr ""
msgstr "Acties"
#: templates/umap/map_table.html:41 templates/umap/map_table.html:43
msgid "Open preview"
msgstr ""
msgstr "Open Voorbeeld"
#: templates/umap/map_table.html:72 templates/umap/map_table.html:74
msgid "Share"
msgstr ""
msgstr "Delen"
#: templates/umap/map_table.html:78 templates/umap/map_table.html:80
#: templates/umap/user_teams.html:38 templates/umap/user_teams.html:40
#: templates/umap/user_teams.html:42 templates/umap/user_teams.html:44
msgid "Edit"
msgstr ""
msgstr "Bewerken"
#: templates/umap/map_table.html:84 templates/umap/map_table.html:86
msgid "Download"
msgstr ""
msgstr "Downloaden"
#: templates/umap/map_table.html:90 templates/umap/map_table.html:92
msgid "Clone"
msgstr ""
msgstr "Klonen"
#: templates/umap/map_table.html:101 templates/umap/map_table.html:103
msgid "Delete"
msgstr ""
msgstr "Verwijderen"
#: templates/umap/map_table.html:117
msgid "first"
msgstr ""
msgstr "eerste"
#: templates/umap/map_table.html:118
msgid "previous"
msgstr ""
msgstr "vorige"
#: templates/umap/map_table.html:126
#, python-format
msgid "Page %(maps_number)s of %(num_pages)s"
msgstr ""
msgstr "Pagina %(maps_number)s van %(num_pages)s"
#: templates/umap/map_table.html:131
msgid "next"
msgstr ""
msgstr "volgende"
#: templates/umap/map_table.html:132
msgid "last"
msgstr ""
msgstr "laatste"
#: templates/umap/map_table.html:140
#, python-format
msgid "Lines per page: %(per_page)s"
msgstr ""
msgstr "Regels per pagina: %(per_page)s"
#: templates/umap/map_table.html:145
#, python-format
msgid "%(count)s maps"
msgstr ""
msgstr "%(count)s kaarten"
#: templates/umap/navigation.html:11 templates/umap/user_dashboard.html:6
msgid "My Dashboard"
msgstr ""
msgstr "Mijn Dashboard"
#: templates/umap/navigation.html:14
msgid "Starred maps"
msgstr ""
msgstr "Kaarten met ster"
#: templates/umap/navigation.html:18
msgid "Log in"
@ -510,10 +609,6 @@ msgstr "Inloggen"
msgid "Sign in"
msgstr "Aanmelden"
#: templates/umap/navigation.html:22
msgid "About"
msgstr "Over"
#: templates/umap/navigation.html:30
msgid "Change password"
msgstr "Wijzig wachtwoord"
@ -522,170 +617,201 @@ msgstr "Wijzig wachtwoord"
msgid "Log out"
msgstr "Uitloggen"
#: templates/umap/password_change.html:7
#: templates/umap/password_change.html:6
#: templates/umap/password_change.html:11
msgid "Password change"
msgstr "Wachtwoord wijziging"
#: templates/umap/password_change.html:10
#: templates/umap/password_change.html:14
msgid ""
"Please enter your old password, for security's sake, and then enter your new"
" password twice so we can verify you typed it in correctly."
msgstr "Vul uw oude wachtwoord in -om veiligheidsredenen- en vul daarna tweemaal uw nieuwe wachtwoord in, zodat we zeker weten dat u het correct hebt ingevoerd."
#: templates/umap/password_change.html:17
#: templates/umap/password_change.html:21
msgid "Old password"
msgstr "Oude wachtwoord"
#: templates/umap/password_change.html:22
#: templates/umap/password_change.html:26
msgid "New password"
msgstr "Nieuwe wachtwoord"
#: templates/umap/password_change.html:26
#: templates/umap/password_change.html:30
msgid "New password confirmation"
msgstr "Bevestig nieuwe wachtwoord"
#: templates/umap/password_change.html:27
#: templates/umap/password_change.html:31
msgid "Change my password"
msgstr "Wijzig mijn wachtwoord"
#: templates/umap/password_change_done.html:7
#: templates/umap/password_change_done.html:6
#: templates/umap/password_change_done.html:11
msgid "Password change successful"
msgstr "Wachtwoord wijzigen geslaagd"
#: templates/umap/password_change_done.html:10
#: templates/umap/password_change_done.html:14
msgid "Your password was changed."
msgstr "Uw wachtwoord is gewijzigd."
#: templates/umap/search.html:15
#: templates/umap/search.html:6
msgid "Explore maps"
msgstr "Kaarten verkennen"
#: templates/umap/search.html:19
#, python-format
msgid "%(count)s map found:"
msgid_plural "%(count)s maps found:"
msgstr[0] ""
msgstr[1] ""
msgstr[0] "%(count)s kaarten gevonden:"
msgstr[1] "%(count)s kaarten gevonden:"
#: templates/umap/search.html:24
#: templates/umap/search.html:30
msgid "No map found."
msgstr ""
msgstr "Geen kaart gevonden."
#: templates/umap/search.html:29
#: templates/umap/search.html:36
msgid "Latest created maps in category"
msgstr "Laatst gemaakte kaarten in categorie"
#: templates/umap/search.html:43
msgid "Latest created maps"
msgstr ""
msgstr "Laatste gemaakte kaarten"
#: templates/umap/search_bar.html:4
msgid "Search maps"
msgstr "Zoek kaarten"
#: templates/umap/search_bar.html:15
#: templates/umap/search_bar.html:14
msgid "Any category"
msgstr "Elke categorie"
#: templates/umap/search_bar.html:19
msgid "Search"
msgstr "Zoeken"
#: templates/umap/team_detail.html:10
#: templates/umap/team_confirm_delete.html:6
msgid "Team deletion"
msgstr "Team verwijdering"
#: templates/umap/team_detail.html:6
#, python-format
msgid "%(current_team)ss maps"
msgstr "%(current_team)ss kaarten"
#: templates/umap/team_detail.html:14
#, python-format
msgid "Browse %(current_team)s's maps"
msgstr ""
msgstr "Browse %(current_team)s's kaarten"
#: templates/umap/team_detail.html:22
#: templates/umap/team_detail.html:26
#, python-format
msgid "%(current_team)s has no public maps."
msgstr ""
msgstr "%(current_team)s Heeft geen openbare kaarten."
#: templates/umap/team_form.html:24
#: templates/umap/team_form.html:6
msgid "Create or edit a team"
msgstr "Maak of bewerk een team"
#: templates/umap/team_form.html:28
msgid "Delete this team"
msgstr ""
msgstr "Verwijder dit team"
#: templates/umap/team_form.html:47
#: templates/umap/team_form.html:51
msgid "Add user"
msgstr ""
msgstr "Gebruiker toevoegen"
#: templates/umap/user_dashboard.html:9 templates/umap/user_dashboard.html:25
msgid "Search my maps"
msgstr ""
msgstr "Doorzoek mijn kaarten"
#: templates/umap/user_dashboard.html:17 templates/umap/user_dashboard.html:22
msgid "Maps title"
msgstr ""
msgstr "Titel van de kaart"
#: templates/umap/user_dashboard.html:30
#, python-format
msgid "Download %(count)s maps"
msgstr ""
msgstr "Download %(count)s kaarten"
#: templates/umap/user_dashboard.html:40
msgid "You have no map yet."
msgstr ""
msgstr "Je hebt nog geen kaart."
#: templates/umap/user_teams.html:17
#: templates/umap/user_teams.html:6
msgid "My Teams"
msgstr "Mijn Teams"
#: templates/umap/user_teams.html:21
msgid "Users"
msgstr ""
msgstr "Gebruikers"
#: templates/umap/user_teams.html:48
#: templates/umap/user_teams.html:52
msgid "New team"
msgstr ""
msgstr "Nieuw Team"
#: views.py:234
#: views.py:235
msgid "Cannot delete a team with more than one member"
msgstr ""
msgstr "Kan een team met meer dan één lid niet verwijderen"
#: views.py:238
#: views.py:239
#, python-format
msgid "Team “%(name)s” has been deleted"
msgstr ""
msgstr "Team “%(name)s” is verwijderd"
#: views.py:442
#: views.py:449
msgid "View the map"
msgstr "Bekijk de kaart"
#: views.py:825
#: views.py:845
msgid "See full screen"
msgstr ""
msgstr "Volledig scherm weergeven"
#: views.py:968
#: views.py:988
msgid "Map editors updated with success!"
msgstr "Kaarteditors met succes bijgewerkt!"
#: views.py:1004
#: views.py:1024
#, python-format
msgid "The uMap edit link for your map: %(map_name)s"
msgstr ""
msgstr "De uMap-bewerkingslink voor uw kaart: %(map_name)s"
#: views.py:1007
#: views.py:1027
#, python-format
msgid "Here is your secret edit link: %(link)s"
msgstr ""
msgstr "Hier is je geheime bewerkingslink: %(link)s"
#: views.py:1014
#: views.py:1034
#, python-format
msgid "Can't send email to %(email)s"
msgstr ""
msgstr "Kan geen e-mail verzenden naar %(email)s"
#: views.py:1017
#: views.py:1037
#, python-format
msgid "Email sent to %(email)s"
msgstr ""
msgstr "E-mail verzonden naar %(email)s"
#: views.py:1028
#: views.py:1048
msgid "Only its owner can delete the map."
msgstr "Kaart kan alleen door eigenaar worden verwijderd."
#: views.py:1031
#: views.py:1054
msgid "Map successfully deleted."
msgstr ""
msgstr "Kaart succesvol verwijderd."
#: views.py:1057
#: views.py:1080
#, python-format
msgid ""
"Your map has been cloned! If you want to edit this map from another "
"computer, please use this link: %(anonymous_url)s"
msgstr "Uw kaart is gekopieerd! Als u deze kaart wilt wijzigen vanaf een andere computer, gebruik dan deze link: %(anonymous_url)s"
#: views.py:1062
#: views.py:1085
msgid "Congratulations, your map has been cloned!"
msgstr "Gefeliciteerd, uw kaart is gekopieerd!"
#: views.py:1313
#: views.py:1339
msgid "Layer successfully deleted."
msgstr "Laag is verwijderd."
#: views.py:1335
#: views.py:1361
msgid "Permissions updated with success!"
msgstr ""
msgstr "Machtigingen met succes bijgewerkt!"

Binary file not shown.

View file

@ -4,15 +4,15 @@
#
# Translators:
# Joao Ponce de Leao Paulouro <joao.ponceleao@gmail.com>, 2014
# lecalam, 2024
# lecalam, 2024-2025
# Rui <xymarior@yandex.com>, 2016,2018-2019
msgid ""
msgstr ""
"Project-Id-Version: uMap\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-12-24 08:39+0000\n"
"POT-Creation-Date: 2025-03-03 17:36+0000\n"
"PO-Revision-Date: 2013-11-22 14:00+0000\n"
"Last-Translator: lecalam, 2024\n"
"Last-Translator: lecalam, 2024-2025\n"
"Language-Team: Portuguese (http://app.transifex.com/openstreetmap/umap/language/pt/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -22,21 +22,29 @@ msgstr ""
#: admin.py:16
msgid "CSV Export"
msgstr ""
msgstr "Exportação CSV"
#: decorators.py:60
msgid "This map is not publicly available"
msgstr ""
msgstr "Este mapa não está disponível ao público"
#: middleware.py:13
#: middleware.py:19
msgid "Site is readonly for maintenance"
msgstr "O site está em modo de leitura para manutenção"
#: middleware.py:34
#, python-format
msgid ""
"Using “%(name)s” to authenticate is deprecated and will be removed soon. "
"Please configure another provider below before losing access to your account"
" and maps."
msgstr ""
#: models.py:60 models.py:79
msgid "name"
msgstr "nome"
#: models.py:62 models.py:475
#: models.py:62 models.py:485
msgid "description"
msgstr "descrição"
@ -56,29 +64,29 @@ msgstr "Modelo de URL no formato de mosaicos OSM"
msgid "Order of the tilelayers in the edit box"
msgstr "Ordem das camadas de mosaicos na caixa de edição"
#: models.py:175 models.py:469
#: models.py:175 models.py:479
msgid "Only editable with secret edit link"
msgstr "Unicamente editável através de hiperligação secreta"
#: models.py:176 models.py:470
#: models.py:176 models.py:480
msgid "Everyone can edit"
msgstr "Todos podem editar"
#: models.py:179 models.py:463
#: models.py:179 models.py:473
msgid "Everyone"
msgstr "Todos"
#: models.py:180 models.py:189 models.py:464
#: models.py:180 models.py:189 models.py:474
msgid "Editors and team only"
msgstr "Apenas editores e equipa"
#: models.py:181 models.py:465
#: models.py:181 models.py:475
msgid "Owner only"
msgstr "Apenas o proprietário"
#: models.py:184
msgid "Draft (private)"
msgstr ""
msgstr "Rascunho (privado)"
#: models.py:185
msgid "Everyone (public)"
@ -92,9 +100,9 @@ msgstr "Quem tiver a hiperligação"
msgid "Blocked"
msgstr "Bloqueado"
#: models.py:191
#: models.py:191 models.py:469
msgid "Deleted"
msgstr ""
msgstr "Eliminado"
#: models.py:194
msgid "center"
@ -132,31 +140,31 @@ msgstr "editores"
msgid "team"
msgstr "equipa"
#: models.py:229 models.py:491
#: models.py:229 models.py:501
msgid "edit status"
msgstr "editar estado"
#: models.py:234
#: models.py:234 models.py:506
msgid "share status"
msgstr "partilhar estado"
#: models.py:237 models.py:486
#: models.py:237 models.py:496
msgid "settings"
msgstr "parâmetros"
#: models.py:402
#: models.py:407
msgid "Clone of"
msgstr "Clone de"
#: models.py:462 models.py:468
#: models.py:468 models.py:472 models.py:478
msgid "Inherit"
msgstr "Herdado"
#: models.py:481
#: models.py:491
msgid "display on load"
msgstr "mostrar no início"
#: models.py:482
#: models.py:492
msgid "Display this layer on load."
msgstr "Mostrar esta camada ao carregar."
@ -165,50 +173,64 @@ msgid ""
"<a href=\"https://discover.umap-project.org/support/faq/#map-statuses\" "
"target=\"_blank\">Find out here the documentation</a> on how to manage maps"
" permissions."
msgstr ""
msgstr "<a href=\"https://discover.umap-project.org/support/faq/#map-statuses\" target=\"_blank\">Descubra aqui a documentação</a> sobre como gerir as permissões do mapa."
#: templates/403.html:10 templates/404.html:8
msgid "← Go to the homepage"
msgstr ""
msgstr "← Ir para a página inicial"
#: templates/404.html:7
msgid "404 Page Not Found"
msgstr ""
msgstr "Página 404 não encontrada"
#: templates/auth/user_detail.html:8
#: templates/auth/user_detail.html:6
#, python-format
msgid "%(current_user)ss maps"
msgstr "Mapas de %(current_user)s"
#: templates/auth/user_detail.html:12
#, python-format
msgid "Browse %(current_user)s's maps"
msgstr "Ver mapas de %(current_user)s"
#: templates/auth/user_detail.html:17
#: templates/auth/user_detail.html:21
#, python-format
msgid "%(current_user)s has no maps."
msgstr "%(current_user)s não tem mapas."
#: templates/auth/user_form.html:21 templates/umap/team_form.html:21
#: templates/auth/user_form.html:6
msgid "My Profile"
msgstr "Meu perfil"
#: templates/auth/user_form.html:24 templates/umap/team_form.html:25
msgid "Save"
msgstr "Guardar"
#: templates/auth/user_form.html:27
#: templates/auth/user_form.html:30
msgid "Your current providers"
msgstr "Os seus fornecedores atuais"
#: templates/auth/user_form.html:39
#: templates/auth/user_form.html:44
msgid "Connect to another provider"
msgstr "Conectar a outro fornecedor"
#: templates/auth/user_form.html:42
#: templates/auth/user_form.html:47
msgid ""
"It's a good habit to connect your account to more than one provider, in case"
" one provider becomes unavailable, temporarily or even permanently."
msgstr "É um bom hábito conectar a sua conta a mais do que um fornecedor, no caso de um fornecedor ficar indisponível, temporariamente ou mesmo permanentemente."
#: templates/auth/user_stars.html:8
#: templates/auth/user_stars.html:6
#, python-format
msgid "%(current_user)ss starred maps"
msgstr "Mapas com estrela de %(current_user)s"
#: templates/auth/user_stars.html:12
#, python-format
msgid "Browse %(current_user)s's starred maps"
msgstr "Ver mapas com estrela de %(current_user)s's"
#: templates/auth/user_stars.html:17
#: templates/auth/user_stars.html:21
#, python-format
msgid "%(current_user)s has no starred maps yet."
msgstr "%(current_user)s não tem mapas com estrela."
@ -225,11 +247,11 @@ msgstr "Entrar"
#: templates/registration/login.html:22
msgid "To save and easily find your maps, identify yourself."
msgstr ""
msgstr "Para guardar e encontrar facilmente os seus mapas, identifique-se."
#: templates/registration/login.html:25
msgid "Please log in with your account:"
msgstr ""
msgstr "Inicie sessão com a sua conta:"
#: templates/registration/login.html:42
msgid "Username"
@ -241,7 +263,11 @@ msgstr "Palavra-passe"
#: templates/registration/login.html:52
msgid "Please choose a provider:"
msgstr ""
msgstr "Escolha um fornecedor:"
#: templates/umap/about.html:5 templates/umap/navigation.html:22
msgid "About"
msgstr "Sobre"
#: templates/umap/about_summary.html:12
#, python-format
@ -410,7 +436,7 @@ msgstr "por"
msgid "More"
msgstr "Mais"
#: templates/umap/map_table.html:8 templates/umap/user_teams.html:14
#: templates/umap/map_table.html:8 templates/umap/user_teams.html:18
msgid "Name"
msgstr "Nome"
@ -434,7 +460,7 @@ msgstr "Último guardar"
msgid "Owner"
msgstr "Proprietário"
#: templates/umap/map_table.html:26 templates/umap/user_teams.html:20
#: templates/umap/map_table.html:26 templates/umap/user_teams.html:24
msgid "Actions"
msgstr "Ações"
@ -447,7 +473,7 @@ msgid "Share"
msgstr "Partilhar"
#: templates/umap/map_table.html:78 templates/umap/map_table.html:80
#: templates/umap/user_teams.html:38 templates/umap/user_teams.html:40
#: templates/umap/user_teams.html:42 templates/umap/user_teams.html:44
msgid "Edit"
msgstr "Editar"
@ -510,10 +536,6 @@ msgstr "Entrar"
msgid "Sign in"
msgstr "Criar conta"
#: templates/umap/navigation.html:22
msgid "About"
msgstr "Sobre"
#: templates/umap/navigation.html:30
msgid "Change password"
msgstr "Alterar palavra-passe"
@ -522,41 +544,47 @@ msgstr "Alterar palavra-passe"
msgid "Log out"
msgstr "Sair"
#: templates/umap/password_change.html:7
#: templates/umap/password_change.html:6
#: templates/umap/password_change.html:11
msgid "Password change"
msgstr "Alterar palavra-passe"
#: templates/umap/password_change.html:10
#: templates/umap/password_change.html:14
msgid ""
"Please enter your old password, for security's sake, and then enter your new"
" password twice so we can verify you typed it in correctly."
msgstr "Por favor introduza a sua palavra-passe antiga, por motivos de segurança, e então introduza a sua nova palavra-passe 2 vezes para que possamos verificar se a digitou corretamente."
#: templates/umap/password_change.html:17
#: templates/umap/password_change.html:21
msgid "Old password"
msgstr "Palavra-passe antiga"
#: templates/umap/password_change.html:22
#: templates/umap/password_change.html:26
msgid "New password"
msgstr "Nova palavra-passe"
#: templates/umap/password_change.html:26
#: templates/umap/password_change.html:30
msgid "New password confirmation"
msgstr "Confirmação da palavra-passe"
#: templates/umap/password_change.html:27
#: templates/umap/password_change.html:31
msgid "Change my password"
msgstr "Alterar a minha palavra-passe"
#: templates/umap/password_change_done.html:7
#: templates/umap/password_change_done.html:6
#: templates/umap/password_change_done.html:11
msgid "Password change successful"
msgstr "Alteração da palavra-passe bem sucedida"
#: templates/umap/password_change_done.html:10
#: templates/umap/password_change_done.html:14
msgid "Your password was changed."
msgstr "A sua palavra-passe foi alterada"
#: templates/umap/search.html:15
#: templates/umap/search.html:6
msgid "Explore maps"
msgstr "Explorar mapas"
#: templates/umap/search.html:19
#, python-format
msgid "%(count)s map found:"
msgid_plural "%(count)s maps found:"
@ -564,11 +592,11 @@ msgstr[0] "%(count)s mapa encontrado:"
msgstr[1] "%(count)s mapas encontrados:"
msgstr[2] "%(count)s mapas encontrados:"
#: templates/umap/search.html:24
#: templates/umap/search.html:28
msgid "No map found."
msgstr "Não foi encontrado nenhum mapa."
#: templates/umap/search.html:29
#: templates/umap/search.html:33
msgid "Latest created maps"
msgstr "Últimos mapas criados"
@ -576,25 +604,38 @@ msgstr "Últimos mapas criados"
msgid "Search maps"
msgstr "Procurar mapas"
#: templates/umap/search_bar.html:15
#: templates/umap/search_bar.html:16
msgid "Search"
msgstr "Procurar"
#: templates/umap/team_detail.html:10
#: templates/umap/team_confirm_delete.html:6
msgid "Team deletion"
msgstr "Eliminação de equipa"
#: templates/umap/team_detail.html:6
#, python-format
msgid "%(current_team)ss maps"
msgstr "Mapas de %(current_team)s"
#: templates/umap/team_detail.html:14
#, python-format
msgid "Browse %(current_team)s's maps"
msgstr "Ver mapas de %(current_team)s"
#: templates/umap/team_detail.html:22
#: templates/umap/team_detail.html:26
#, python-format
msgid "%(current_team)s has no public maps."
msgstr "%(current_team)s não tem mapas públicos."
#: templates/umap/team_form.html:24
#: templates/umap/team_form.html:6
msgid "Create or edit a team"
msgstr "Criar ou editar uma equipa"
#: templates/umap/team_form.html:28
msgid "Delete this team"
msgstr "Eliminar esta equipa"
#: templates/umap/team_form.html:47
#: templates/umap/team_form.html:51
msgid "Add user"
msgstr "Adicionar utilizador"
@ -615,11 +656,15 @@ msgstr "Descarregar %(count)s mapas"
msgid "You have no map yet."
msgstr "Ainda não tem nenhum mapa."
#: templates/umap/user_teams.html:17
#: templates/umap/user_teams.html:6
msgid "My Teams"
msgstr "As minhas equipas"
#: templates/umap/user_teams.html:21
msgid "Users"
msgstr "Utilizadores"
#: templates/umap/user_teams.html:48
#: templates/umap/user_teams.html:52
msgid "New team"
msgstr "Nova equipa"
@ -636,57 +681,57 @@ msgstr "A equipa “%(name)s” foi eliminada"
msgid "View the map"
msgstr "Ver o mapa"
#: views.py:825
#: views.py:838
msgid "See full screen"
msgstr "Ver em ecrã inteiro"
#: views.py:968
#: views.py:981
msgid "Map editors updated with success!"
msgstr "Os editores do mapa foram atualizados com sucesso!"
#: views.py:1004
#: views.py:1017
#, python-format
msgid "The uMap edit link for your map: %(map_name)s"
msgstr "A hiperligação de edição do uMap para o seu mapa: %(map_name)s"
#: views.py:1007
#: views.py:1020
#, python-format
msgid "Here is your secret edit link: %(link)s"
msgstr "Aqui está a hiperligação de edição secreta: %(link)s"
#: views.py:1014
#: views.py:1027
#, python-format
msgid "Can't send email to %(email)s"
msgstr "Não é possível enviar o email para %(email)s"
#: views.py:1017
#: views.py:1030
#, python-format
msgid "Email sent to %(email)s"
msgstr "Email enviado para %(email)s"
#: views.py:1028
#: views.py:1041
msgid "Only its owner can delete the map."
msgstr "Só o proprietário pode eliminar o mapa."
#: views.py:1031
#: views.py:1044
msgid "Map successfully deleted."
msgstr "Mapa eliminado com sucesso."
#: views.py:1057
#: views.py:1070
#, python-format
msgid ""
"Your map has been cloned! If you want to edit this map from another "
"computer, please use this link: %(anonymous_url)s"
msgstr "O seu mapa foi clonado! Se quiser editar este mapa noutro computador, por favor utilize esta hiperligação: %(anonymous_url)s"
#: views.py:1062
#: views.py:1075
msgid "Congratulations, your map has been cloned!"
msgstr "Parabéns, o seu mapa foi clonado!"
#: views.py:1313
#: views.py:1329
msgid "Layer successfully deleted."
msgstr "Camada eliminada com sucesso."
#: views.py:1335
#: views.py:1351
msgid "Permissions updated with success!"
msgstr "Permissões atualizadas com sucesso!"

View file

@ -3,7 +3,7 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# Supaplex <bejokeup@gmail.com>, 2019,2023-2024
# Supaplex <bejokeup@gmail.com>, 2019,2023-2025
# Chia-liang Kao <clkao@clkao.org>, 2014
# coop.shen <coop.shen@gmail.com>, 2014
# coop.shen <coop.shen@gmail.com>, 2014
@ -15,9 +15,9 @@ msgid ""
msgstr ""
"Project-Id-Version: uMap\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-12-24 08:39+0000\n"
"POT-Creation-Date: 2025-03-03 17:36+0000\n"
"PO-Revision-Date: 2013-11-22 14:00+0000\n"
"Last-Translator: Supaplex <bejokeup@gmail.com>, 2019,2023-2024\n"
"Last-Translator: Supaplex <bejokeup@gmail.com>, 2019,2023-2025\n"
"Language-Team: Chinese (Taiwan) (http://app.transifex.com/openstreetmap/umap/language/zh_TW/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -31,17 +31,25 @@ msgstr "CSV 匯出"
#: decorators.py:60
msgid "This map is not publicly available"
msgstr ""
msgstr "這份地圖並非公開可及的"
#: middleware.py:13
#: middleware.py:19
msgid "Site is readonly for maintenance"
msgstr "網站目前因維護中設定為唯讀狀態"
#: middleware.py:34
#, python-format
msgid ""
"Using “%(name)s” to authenticate is deprecated and will be removed soon. "
"Please configure another provider below before losing access to your account"
" and maps."
msgstr ""
#: models.py:60 models.py:79
msgid "name"
msgstr "名稱"
#: models.py:62 models.py:475
#: models.py:62 models.py:485
msgid "description"
msgstr "描述"
@ -61,23 +69,23 @@ msgstr "URL 樣板,使用 OSM 地圖磚格式"
msgid "Order of the tilelayers in the edit box"
msgstr "編輯方塊中地圖磚的圖層順序"
#: models.py:175 models.py:469
#: models.py:175 models.py:479
msgid "Only editable with secret edit link"
msgstr "僅能由私密連結編輯"
#: models.py:176 models.py:470
#: models.py:176 models.py:480
msgid "Everyone can edit"
msgstr "所有人皆可編輯"
#: models.py:179 models.py:463
#: models.py:179 models.py:473
msgid "Everyone"
msgstr "所有人"
#: models.py:180 models.py:189 models.py:464
#: models.py:180 models.py:189 models.py:474
msgid "Editors and team only"
msgstr "只有編輯者與團隊"
#: models.py:181 models.py:465
#: models.py:181 models.py:475
msgid "Owner only"
msgstr "只有擁有者"
@ -97,7 +105,7 @@ msgstr "任何有連結的人"
msgid "Blocked"
msgstr "已經封銷了"
#: models.py:191
#: models.py:191 models.py:469
msgid "Deleted"
msgstr "已刪除"
@ -137,31 +145,31 @@ msgstr "編輯者"
msgid "team"
msgstr "團隊"
#: models.py:229 models.py:491
#: models.py:229 models.py:501
msgid "edit status"
msgstr "編輯狀態"
#: models.py:234
#: models.py:234 models.py:506
msgid "share status"
msgstr "分享狀態"
#: models.py:237 models.py:486
#: models.py:237 models.py:496
msgid "settings"
msgstr "設定"
#: models.py:402
#: models.py:407
msgid "Clone of"
msgstr "複製"
#: models.py:462 models.py:468
#: models.py:468 models.py:472 models.py:478
msgid "Inherit"
msgstr "繼承"
#: models.py:481
#: models.py:491
msgid "display on load"
msgstr "載入時顯示"
#: models.py:482
#: models.py:492
msgid "Display this layer on load."
msgstr "載入此圖層時顯示"
@ -170,50 +178,64 @@ msgid ""
"<a href=\"https://discover.umap-project.org/support/faq/#map-statuses\" "
"target=\"_blank\">Find out here the documentation</a> on how to manage maps"
" permissions."
msgstr ""
msgstr "<a href=\"https://discover.umap-project.org/support/faq/#map-statuses\" target=\"_blank\">在說明文件尋找資訊</a>,要如何管理地圖權限。"
#: templates/403.html:10 templates/404.html:8
msgid "← Go to the homepage"
msgstr ""
msgstr "← 回到首頁"
#: templates/404.html:7
msgid "404 Page Not Found"
msgstr ""
msgstr "404 頁面"
#: templates/auth/user_detail.html:8
#: templates/auth/user_detail.html:6
#, python-format
msgid "%(current_user)ss maps"
msgstr "%(current_user)s的地圖"
#: templates/auth/user_detail.html:12
#, python-format
msgid "Browse %(current_user)s's maps"
msgstr "瀏覽 %(current_user)s 的地圖"
#: templates/auth/user_detail.html:17
#: templates/auth/user_detail.html:21
#, python-format
msgid "%(current_user)s has no maps."
msgstr "%(current_user)s 沒有任何地圖。"
#: templates/auth/user_form.html:21 templates/umap/team_form.html:21
#: templates/auth/user_form.html:6
msgid "My Profile"
msgstr "我的檔案"
#: templates/auth/user_form.html:24 templates/umap/team_form.html:25
msgid "Save"
msgstr "儲存"
#: templates/auth/user_form.html:27
#: templates/auth/user_form.html:30
msgid "Your current providers"
msgstr "你目前的供應商"
#: templates/auth/user_form.html:39
#: templates/auth/user_form.html:44
msgid "Connect to another provider"
msgstr "連線到其他供應商"
#: templates/auth/user_form.html:42
#: templates/auth/user_form.html:47
msgid ""
"It's a good habit to connect your account to more than one provider, in case"
" one provider becomes unavailable, temporarily or even permanently."
msgstr "用你的帳號連到多個供應商是好的習慣,因為有時候供應商會出狀況,甚至永久停止運作。"
#: templates/auth/user_stars.html:8
#: templates/auth/user_stars.html:6
#, python-format
msgid "%(current_user)ss starred maps"
msgstr "%(current_user)s的打星號地圖"
#: templates/auth/user_stars.html:12
#, python-format
msgid "Browse %(current_user)s's starred maps"
msgstr "瀏覽 %(current_user)s 已打心號的地圖"
#: templates/auth/user_stars.html:17
#: templates/auth/user_stars.html:21
#, python-format
msgid "%(current_user)s has no starred maps yet."
msgstr "%(current_user)s 沒有任何打心號的地圖。"
@ -248,6 +270,10 @@ msgstr "密碼"
msgid "Please choose a provider:"
msgstr "請選擇提供商:"
#: templates/umap/about.html:5 templates/umap/navigation.html:22
msgid "About"
msgstr "關於"
#: templates/umap/about_summary.html:12
#, python-format
msgid ""
@ -415,7 +441,7 @@ msgstr "由"
msgid "More"
msgstr "更多"
#: templates/umap/map_table.html:8 templates/umap/user_teams.html:14
#: templates/umap/map_table.html:8 templates/umap/user_teams.html:18
msgid "Name"
msgstr "名稱"
@ -439,7 +465,7 @@ msgstr "最後儲存"
msgid "Owner"
msgstr "擁有者"
#: templates/umap/map_table.html:26 templates/umap/user_teams.html:20
#: templates/umap/map_table.html:26 templates/umap/user_teams.html:24
msgid "Actions"
msgstr "動作"
@ -452,7 +478,7 @@ msgid "Share"
msgstr "分享"
#: templates/umap/map_table.html:78 templates/umap/map_table.html:80
#: templates/umap/user_teams.html:38 templates/umap/user_teams.html:40
#: templates/umap/user_teams.html:42 templates/umap/user_teams.html:44
msgid "Edit"
msgstr "編輯"
@ -515,10 +541,6 @@ msgstr "登入"
msgid "Sign in"
msgstr "註冊"
#: templates/umap/navigation.html:22
msgid "About"
msgstr "關於"
#: templates/umap/navigation.html:30
msgid "Change password"
msgstr "更改密碼"
@ -527,51 +549,57 @@ msgstr "更改密碼"
msgid "Log out"
msgstr "登出"
#: templates/umap/password_change.html:7
#: templates/umap/password_change.html:6
#: templates/umap/password_change.html:11
msgid "Password change"
msgstr "密碼變更"
#: templates/umap/password_change.html:10
#: templates/umap/password_change.html:14
msgid ""
"Please enter your old password, for security's sake, and then enter your new"
" password twice so we can verify you typed it in correctly."
msgstr "為確保賬戸安全,請先輸入你的舊有密碼。然後輸入新密碼兩次,以便確認新密碼輸入正確。"
#: templates/umap/password_change.html:17
#: templates/umap/password_change.html:21
msgid "Old password"
msgstr "舊密碼"
#: templates/umap/password_change.html:22
#: templates/umap/password_change.html:26
msgid "New password"
msgstr "新密碼"
#: templates/umap/password_change.html:26
#: templates/umap/password_change.html:30
msgid "New password confirmation"
msgstr "再次輸入新密碼"
#: templates/umap/password_change.html:27
#: templates/umap/password_change.html:31
msgid "Change my password"
msgstr "更改我的密碼"
#: templates/umap/password_change_done.html:7
#: templates/umap/password_change_done.html:6
#: templates/umap/password_change_done.html:11
msgid "Password change successful"
msgstr "成功更改密碼"
#: templates/umap/password_change_done.html:10
#: templates/umap/password_change_done.html:14
msgid "Your password was changed."
msgstr "你的密碼已更改。"
#: templates/umap/search.html:15
#: templates/umap/search.html:6
msgid "Explore maps"
msgstr "瀏覽地圖"
#: templates/umap/search.html:19
#, python-format
msgid "%(count)s map found:"
msgid_plural "%(count)s maps found:"
msgstr[0] "已找到%(count)s份地圖"
#: templates/umap/search.html:24
#: templates/umap/search.html:28
msgid "No map found."
msgstr "找不到地圖。"
#: templates/umap/search.html:29
#: templates/umap/search.html:33
msgid "Latest created maps"
msgstr "最新創建地圖"
@ -579,25 +607,38 @@ msgstr "最新創建地圖"
msgid "Search maps"
msgstr "搜尋地圖"
#: templates/umap/search_bar.html:15
#: templates/umap/search_bar.html:16
msgid "Search"
msgstr "搜尋"
#: templates/umap/team_detail.html:10
#: templates/umap/team_confirm_delete.html:6
msgid "Team deletion"
msgstr "團隊刪除"
#: templates/umap/team_detail.html:6
#, python-format
msgid "%(current_team)ss maps"
msgstr "%(current_team)s的地圖"
#: templates/umap/team_detail.html:14
#, python-format
msgid "Browse %(current_team)s's maps"
msgstr "瀏覽%(current_team)s的地圖"
#: templates/umap/team_detail.html:22
#: templates/umap/team_detail.html:26
#, python-format
msgid "%(current_team)s has no public maps."
msgstr "%(current_team)s沒有公開地圖"
#: templates/umap/team_form.html:24
#: templates/umap/team_form.html:6
msgid "Create or edit a team"
msgstr "創建或是編輯團隊"
#: templates/umap/team_form.html:28
msgid "Delete this team"
msgstr "刪除這個團隊"
#: templates/umap/team_form.html:47
#: templates/umap/team_form.html:51
msgid "Add user"
msgstr "新增使用者"
@ -618,11 +659,15 @@ msgstr "下載%(count)s地圖"
msgid "You have no map yet."
msgstr "你目前還沒有地圖。"
#: templates/umap/user_teams.html:17
#: templates/umap/user_teams.html:6
msgid "My Teams"
msgstr "我的團隊"
#: templates/umap/user_teams.html:21
msgid "Users"
msgstr "使用者"
#: templates/umap/user_teams.html:48
#: templates/umap/user_teams.html:52
msgid "New team"
msgstr "新的團隊"
@ -639,57 +684,57 @@ msgstr "已經刪除團隊 \"%(name)s\" "
msgid "View the map"
msgstr "檢視地圖"
#: views.py:825
#: views.py:838
msgid "See full screen"
msgstr "檢視全螢幕"
#: views.py:968
#: views.py:981
msgid "Map editors updated with success!"
msgstr "地圖編輯者更新完成"
#: views.py:1004
#: views.py:1017
#, python-format
msgid "The uMap edit link for your map: %(map_name)s"
msgstr "你的地圖 uMap 編輯連結:%(map_name)s"
#: views.py:1007
#: views.py:1020
#, python-format
msgid "Here is your secret edit link: %(link)s"
msgstr "這是你的祕密編輯連結:%(link)s"
#: views.py:1014
#: views.py:1027
#, python-format
msgid "Can't send email to %(email)s"
msgstr "無法傳送電子郵件到%(email)s"
#: views.py:1017
#: views.py:1030
#, python-format
msgid "Email sent to %(email)s"
msgstr "電子郵件寄至 %(email)s"
#: views.py:1028
#: views.py:1041
msgid "Only its owner can delete the map."
msgstr "只有擁有者可以刪除此地圖"
#: views.py:1031
#: views.py:1044
msgid "Map successfully deleted."
msgstr "成功刪除地圖"
#: views.py:1057
#: views.py:1070
#, python-format
msgid ""
"Your map has been cloned! If you want to edit this map from another "
"computer, please use this link: %(anonymous_url)s"
msgstr "您的地圖已複製完成!如果您想在不同的機器編輯這個地圖,請使用這個連結:%(anonymous_url)s"
#: views.py:1062
#: views.py:1075
msgid "Congratulations, your map has been cloned!"
msgstr "恭喜,您的地圖已被複製!"
#: views.py:1313
#: views.py:1329
msgid "Layer successfully deleted."
msgstr "圖層已刪除"
#: views.py:1335
#: views.py:1351
msgid "Permissions updated with success!"
msgstr "權限更新完成"

View file

@ -2,7 +2,7 @@ from datetime import datetime, timedelta
from django.core.management.base import BaseCommand
from umap.models import Map
from umap.models import DataLayer, Map
class Command(BaseCommand):
@ -33,3 +33,14 @@ class Command(BaseCommand):
if not options["dry_run"]:
map.delete()
print(f"Deleted map {map_name} ({map_id}), trashed at {trashed_at}")
print(f"Deleting layers in trash since {since}")
layers = DataLayer.objects.filter(
share_status=DataLayer.DELETED, modified_at__lt=since
)
for layer in layers:
layer_id = layer.uuid
layer_name = layer.name
trashed_at = layer.modified_at.date()
if not options["dry_run"]:
layer.delete()
print(f"Deleted layer {layer_name} ({layer_id}), trashed at {trashed_at}")

View file

@ -1,23 +0,0 @@
from django.conf import settings
from django.core.management.base import BaseCommand
from umap import websocket_server
class Command(BaseCommand):
help = "Run the websocket server"
def add_arguments(self, parser):
parser.add_argument(
"--host",
help="The server host to bind to.",
default=settings.WEBSOCKET_BACK_HOST,
)
parser.add_argument(
"--port",
help="The server port to bind to.",
default=settings.WEBSOCKET_BACK_PORT,
)
def handle(self, *args, **options):
websocket_server.run(options["host"], options["port"])

View file

@ -1,6 +1,12 @@
from django.conf import settings
from django.contrib import messages
from django.contrib.auth import BACKEND_SESSION_KEY
from django.core.exceptions import MiddlewareNotUsed
from django.http import HttpResponseForbidden
from django.http import (
HttpResponseForbidden,
HttpResponseRedirect,
)
from django.urls import reverse
from django.utils.translation import gettext as _
@ -15,3 +21,27 @@ def readonly_middleware(get_response):
return get_response(request)
return middleware
def deprecated_auth_backend(get_response):
def middleware(request):
backend = request.session.get(BACKEND_SESSION_KEY)
if backend in settings.DEPRECATED_AUTHENTICATION_BACKENDS:
name = backend.split(".")[-1]
messages.error(
request,
_(
"Using “%(name)s” to authenticate is deprecated and will be "
"removed soon. "
"Please configure another provider below before losing access "
"to your account and maps. Then, please logout and login "
"again with the new provider."
)
% {"name": name},
)
if "/map/" in request.path:
return HttpResponseRedirect(reverse("user_profile"))
return get_response(request)
return middleware

View file

@ -0,0 +1,26 @@
# Generated by Django 5.1.4 on 2025-01-29 18:06
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("umap", "0025_alter_datalayer_geojson"),
]
operations = [
migrations.AddField(
model_name="datalayer",
name="modified_at",
field=models.DateTimeField(auto_now=True),
),
migrations.AddField(
model_name="datalayer",
name="share_status",
field=models.SmallIntegerField(
choices=[(0, "Inherit"), (99, "Deleted")],
default=0,
verbose_name="share status",
),
),
]

View file

@ -0,0 +1,23 @@
# Generated by Django 5.1.6 on 2025-02-26 16:18
import django.contrib.postgres.fields
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("umap", "0026_datalayer_modified_at_datalayer_share_status"),
]
operations = [
migrations.AddField(
model_name="map",
name="tags",
field=django.contrib.postgres.fields.ArrayField(
base_field=models.CharField(max_length=200),
blank=True,
default=list,
size=None,
),
),
]

View file

@ -4,6 +4,7 @@ import uuid
from django.conf import settings
from django.contrib.auth.models import User
from django.contrib.gis.db import models
from django.contrib.postgres.fields import ArrayField
from django.core.files.base import File
from django.core.files.storage import storages
from django.core.signing import Signer
@ -236,6 +237,7 @@ class Map(NamedModel):
settings = models.JSONField(
blank=True, null=True, verbose_name=_("settings"), default=dict
)
tags = ArrayField(models.CharField(max_length=200), blank=True, default=list)
objects = models.Manager()
public = PublicManager()
@ -247,9 +249,13 @@ class Map(NamedModel):
except KeyError:
return ""
@property
def datalayers(self):
return self.datalayer_set.filter(share_status=DataLayer.INHERIT).all()
@property
def preview_settings(self):
layers = self.datalayer_set.all()
layers = self.datalayers
datalayer_data = [c.metadata() for c in layers]
map_settings = self.settings
if "properties" not in map_settings:
@ -278,6 +284,7 @@ class Map(NamedModel):
def delete(self, **kwargs):
# Explicitely call datalayers.delete, so we can deal with removing files
# (the cascade delete would not call the model delete method)
# Use datalayer_set so to get also the deleted ones.
for datalayer in self.datalayer_set.all():
datalayer.delete()
return super().delete(**kwargs)
@ -287,10 +294,11 @@ class Map(NamedModel):
umapjson["type"] = "umap"
umapjson["uri"] = request.build_absolute_uri(self.get_absolute_url())
datalayers = []
for datalayer in self.datalayer_set.all():
for datalayer in self.datalayers:
with datalayer.geojson.open("rb") as f:
layer = json.loads(f.read())
if datalayer.settings:
datalayer.settings.pop("id", None)
layer["_umap_options"] = datalayer.settings
datalayers.append(layer)
umapjson["layers"] = datalayers
@ -406,16 +414,21 @@ class Map(NamedModel):
new.save()
for editor in self.editors.all():
new.editors.add(editor)
for datalayer in self.datalayer_set.all():
for datalayer in self.datalayers:
datalayer.clone(map_inst=new)
return new
def get_tags_display(self):
labels = dict(settings.UMAP_TAGS)
return [(t, labels.get(t, t)) for t in self.tags]
@classproperty
def extra_schema(self):
return {
"iconUrl": {
"default": "%sumap/img/marker.svg" % settings.STATIC_URL,
}
},
"tags": {"choices": sorted(settings.UMAP_TAGS, key=lambda i: i[0])},
}
@ -458,6 +471,11 @@ class DataLayer(NamedModel):
ANONYMOUS = 1
COLLABORATORS = 2
OWNER = 3
DELETED = 99
SHARE_STATUS = (
(INHERIT, _("Inherit")),
(DELETED, _("Deleted")),
)
EDIT_STATUS = (
(INHERIT, _("Inherit")),
(ANONYMOUS, _("Everyone")),
@ -490,6 +508,12 @@ class DataLayer(NamedModel):
default=INHERIT,
verbose_name=_("edit status"),
)
share_status = models.SmallIntegerField(
choices=SHARE_STATUS,
default=INHERIT,
verbose_name=_("share status"),
)
modified_at = models.DateTimeField(auto_now=True)
class Meta:
ordering = ("rank",)
@ -507,17 +531,31 @@ class DataLayer(NamedModel):
def metadata(self, request=None):
# Retrocompat: minimal settings for maps not saved after settings property
# has been introduced
obj = self.settings or {
"name": self.name,
"displayOnLoad": self.display_on_load,
}
metadata = self.settings
if not metadata:
# Fallback to file for old datalayers.
try:
data = json.loads(self.geojson.read().decode())
except FileNotFoundError:
data = {}
metadata = data.get("_umap_options")
if not metadata:
metadata = {
"name": self.name,
"displayOnLoad": self.display_on_load,
}
# Save it to prevent file reading at each map load.
self.settings = metadata
# Do not update the modified_at.
self.save(update_fields=["settings"])
if self.old_id:
obj["old_id"] = self.old_id
obj["id"] = self.pk
obj["permissions"] = {"edit_status": self.edit_status}
obj["editMode"] = "advanced" if self.can_edit(request) else "disabled"
obj["_referenceVersion"] = self.reference_version
return obj
metadata["old_id"] = self.old_id
metadata["id"] = self.pk
metadata["rank"] = self.rank
metadata["permissions"] = {"edit_status": self.edit_status}
metadata["editMode"] = "advanced" if self.can_edit(request) else "disabled"
metadata["_referenceVersion"] = self.reference_version
return metadata
def clone(self, map_inst=None):
new = self.__class__.objects.get(pk=self.pk)
@ -568,6 +606,10 @@ class DataLayer(NamedModel):
can = True
return can
def move_to_trash(self):
self.share_status = DataLayer.DELETED
self.save()
class Star(models.Model):
at = models.DateTimeField(auto_now=True)

View file

@ -6,6 +6,7 @@ from email.utils import parseaddr
import environ
from django.conf.locale import LANG_INFO
from django.utils.translation import gettext_lazy as _
import umap as project_module
@ -18,6 +19,7 @@ env = environ.Env()
INTERNAL_IPS = env.list("INTERNAL_IPS", default=["127.0.0.1"])
ALLOWED_HOSTS = env.list("ALLOWED_HOSTS", default=["*"])
CSRF_TRUSTED_ORIGINS = env.list("CSRF_TRUSTED_ORIGINS", default=[])
ADMINS = tuple(parseaddr(email) for email in env.list("ADMINS", default=[]))
ASGI_APPLICATION = "umap.asgi.application"
@ -163,8 +165,8 @@ LOGIN_REDIRECT_URL = "login_popup_end"
STATIC_URL = "/static/"
MEDIA_URL = "/uploads/"
STATIC_ROOT = os.path.join("static")
MEDIA_ROOT = os.path.join("uploads")
STATIC_ROOT = env("STATIC_ROOT", default=os.path.join("static"))
MEDIA_ROOT = env("MEDIA_ROOT", default=os.path.join("uploads"))
STATICFILES_FINDERS = [
"django.contrib.staticfiles.finders.FileSystemFinder",
@ -235,6 +237,7 @@ MIDDLEWARE = (
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"umap.middleware.deprecated_auth_backend",
)
@ -267,13 +270,14 @@ UMAP_KEEP_VERSIONS = env.int("UMAP_KEEP_VERSIONS", default=10)
SITE_URL = env("SITE_URL", default="http://umap.org")
SHORT_SITE_URL = env("SHORT_SITE_URL", default=None)
SITE_NAME = "uMap"
SITE_DESCRIPTION = "Online map creator"
UMAP_DEMO_SITE = env("UMAP_DEMO_SITE", default=False)
UMAP_EXCLUDE_DEFAULT_MAPS = False
UMAP_MAPS_PER_PAGE = 5
UMAP_MAPS_PER_SEARCH = 25
UMAP_MAPS_PER_PAGE_OWNER = 10
UMAP_SEARCH_CONFIGURATION = "simple"
UMAP_HELP_URL = "https://wiki.openstreetmap.org/wiki/UMap#Feedback_and_help"
UMAP_HELP_URL = "https://discover.umap-project.org/"
USER_MAPS_URL = "user_maps"
DATABASES = {
"default": env.db(
@ -288,6 +292,25 @@ UMAP_HOME_FEED = "latest"
UMAP_IMPORTERS = {}
UMAP_HOST_INFOS = {}
UMAP_LABEL_KEYS = ["name", "title"]
UMAP_TAGS = (
("arts", _("Art and Culture")),
("cycling", _("Cycling")),
("business", _("Business")),
("environment", _("Environment")),
("education", _("Education")),
("food", _("Food and Agriculture")),
("geopolitics", _("Geopolitics")),
("health", _("Health")),
("hiking", _("Hiking")),
("history", _("History")),
("public", _("Public sector")),
("science", _("Science")),
("shopping", _("Shopping")),
("sport", _("Sport and Leisure")),
("travel", _("Travel")),
("transports", _("Transports")),
("tourism", _("Tourism")),
)
UMAP_READONLY = env("UMAP_READONLY", default=False)
UMAP_GZIP = True
@ -305,6 +328,7 @@ LOGIN_URL = "login"
SOCIAL_AUTH_LOGIN_REDIRECT_URL = "/login/popup/end/"
AUTHENTICATION_BACKENDS = ()
DEPRECATED_AUTHENTICATION_BACKENDS = []
SOCIAL_AUTH_OPENSTREETMAP_OAUTH2_KEY = env(
"SOCIAL_AUTH_OPENSTREETMAP_OAUTH2_KEY", default=""
@ -337,9 +361,8 @@ LOGGING = {
},
}
# WebSocket configuration
# Real-time editing configuration
WEBSOCKET_ENABLED = env.bool("WEBSOCKET_ENABLED", default=False)
WEBSOCKET_BACK_HOST = env("WEBSOCKET_BACK_HOST", default="localhost")
WEBSOCKET_BACK_PORT = env.int("WEBSOCKET_BACK_PORT", default=8001)
WEBSOCKET_FRONT_URI = env("WEBSOCKET_FRONT_URI", default="ws://localhost:8001")
REALTIME_ENABLED = env.bool("REALTIME_ENABLED", default=False)
REDIS_URL = env("REDIS_URL", default="redis://localhost:6379")

View file

@ -3,9 +3,7 @@
*/
body, div, ul, ol, li, a, section, nav,
h1, h2, h3, h4, h5, h6, label,
hr, input, textarea {
-moz-box-sizing:border-box;
-webkit-box-sizing:border-box;
hr, input, textarea, select {
box-sizing: border-box;
margin: 0;
padding: 0;
@ -19,7 +17,14 @@ h1, h2, h3, h4, h5, h6, label, hr {
}
a {
text-decoration: none;
color: SeaGreen;
color: var(--link-color);
}
a.main {
font-weight: bold;
text-decoration: underline;
}
a[href^="http"]:not(nav.umap-nav a) {
text-decoration: underline;
}
button {
cursor: pointer;
@ -46,7 +51,7 @@ h3, h4, h5 {
margin-bottom: 14px;
}
p {
line-height: 21px;
line-height: 1.4;
margin-top: 14px;
margin-bottom: 14px;
}
@ -78,10 +83,12 @@ hgroup > * {
hgroup {
margin-bottom: var(--box-margin);
}
hgroup > :not(:first-child):last-child {
font-weight: normal;
hgroup p,
hgroup button {
margin: 0;
}
/*
* List
*/
@ -155,10 +162,23 @@ dt {
}
.grid-container {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
--grid-layout-gap: calc(var(--gutter) * 2);
--grid-column-count: 3;
--grid-item--min-width: 300px;
/**
* Calculated values.
*/
--gap-count: calc(var(--grid-column-count) - 1);
--total-gap-width: calc(var(--gap-count) * var(--grid-layout-gap));
--grid-item--max-width: calc((100% - var(--total-gap-width)) / var(--grid-column-count));
grid-template-columns: repeat(auto-fill, minmax(max(var(--grid-item--min-width), var(--grid-item--max-width)), 1fr));
grid-gap: var(--grid-layout-gap);
}
.grid-container.by4 {
grid-template-columns: repeat(4, minmax(0, 1fr));
--grid-column-count: 4;
--grid-item--min-width: 60px;
}
.grid-container > * {
text-align: center;
@ -181,6 +201,10 @@ dt {
/* Various */
/* *********** */
.nobr {
white-space: nowrap;
}
.text {
word-break: break-word;
white-space: pre-line;
@ -199,3 +223,19 @@ dt {
height: 100vh;
opacity: 0.5;
}
.table-scrollable {
background-image: linear-gradient(to right, var(--background-color), var(--background-color)),
linear-gradient(to right, var(--background-color), var(--background-color)),
linear-gradient(to right, rgba(0, 0, 20, .50), rgba(255, 255, 255, 0)),
linear-gradient(to left, rgba(0, 0, 20, .50), rgba(255, 255, 255, 0));
background-position: left center, right center, left center, right center;
background-repeat: no-repeat;
background-size: 20px 100%, 20px 100%, 10px 100%, 10px 100%;
background-attachment: local, local, scroll, scroll;
display: block;
overflow-x: auto;
}
mark {
background-color: var(--color-lightCyan);
padding: 0 var(--small-box-padding);
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.9 KiB

View file

@ -16,6 +16,21 @@ input::-webkit-input-placeholder, ::-webkit-input-placeholder {
input:-moz-placeholder, :-moz-placeholder {
color: #a5a5a5;
}
.search-form {
display: flex;
align-items: baseline;
max-width: 800px;
margin: 0 auto;
}
.search-form select {
max-width: 200px;
}
.search-form input[type=submit] {
min-width: 200px;
}
.flex-break {
justify-content: center;
}
/* **************** */
@ -41,33 +56,14 @@ body.login header {
display: inline-block;
}
.login-grid span,
.login-grid a {
border: 1px solid #e5e5e5;
padding: 5px;
color: #000;
background-position: center bottom;
background-repeat: no-repeat;
background-size: 92px 92px;
height: 92px;
width: 92px;
margin-inline-end: 10px;
}
.login-grid .login-github {
background-image: url("./github.png");
}
.login-grid .login-bitbucket {
background-image: url("./bitbucket.png");
}
.login-grid .login-twitter-oauth2 {
background-image: url("./twitter.png");
}
.login-grid .login-openstreetmap,
.login-grid .login-openstreetmap-oauth2 {
background-image: url("./openstreetmap.png");
}
.login-grid .login-keycloak {
background-image: url("./keycloak.png");
}
/* **************************** */
/* home */
@ -75,30 +71,12 @@ body.login header {
.map_fragment {
width: 100%;
}
.map_list .map_fragment,
.map_fragment,
.demo_map .map_fragment {
height: 210px;
height: var(--map-fragment-height);
}
.map_list .legend {
padding-top: 7px;
margin-bottom: 28px;
text-align: center;
font-size: 1.2em;
}
.map_list .legend a {
color: #222;
font-weight: bold;
}
.map_list .legend em,
.map_list .legend em a {
color: #444;
font-weight: normal;
}
.map_list hr {
display: none;
}
.map_list .wide + hr {
display: block;
.grid-container hgroup {
text-align: left;
}
.umap-features-list ul {
margin-top: 14px;
@ -164,6 +142,7 @@ h2.tabs a:hover {
}
.highlights {
text-align: center;
margin-bottom: calc(var(--box-margin) * 2);
}
.highlights img.colophon {
display: inline-block;
@ -182,13 +161,59 @@ h2.tabs a:hover {
color: #efefef;
text-decoration: underline;
}
.more_button {
min-height: var(--map-fragment-height);
}
.tag-list {
margin-top: var(--text-margin);
margin-bottom: var(--text-margin);
display: flex;
flex-wrap: wrap;
gap: calc(var(--gutter) / 2 );
}
.tag-list li {
border: 1px solid var(--color-darkBlue);
border-radius: 3vmin;
display: inline-block;
padding: var(--button-padding-small);
}
.tag-list li a {
color: var(--color-darkBlue);
max-width: 125px;
display: inline-block;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
vertical-align: middle;
font-size: small;
padding: 0 3px;
}
.card {
border: 1px solid var(--color-lightGray);
border-radius: var(--border-radius);
padding: var(--box-padding);
display: flex;
flex-direction: column;
}
.card .button {
margin-bottom: 0;
}
.card hgroup {
display: flex;
flex-direction: column;
justify-content: space-between;
margin-bottom: 0;
flex-grow: 1;
gap: var(--gutter);
}
.card h3 {
margin-bottom: 0;
}
/* **************************** */
/* colors */
/* **************************** */
input[type="submit"],
.button {
background-color: var(--button-primary-background);
color: var(--button-primary-color);
@ -202,8 +227,6 @@ input[type="submit"],
}
.wrapper .button,
.wrapper input {
height: 56px;
line-height: 43px;
font-weight: bold;
}
@ -382,22 +405,9 @@ html[dir="rtl"] .content .icon-delete {
align-items: center;
}
}
.table-header form input {
border: 2px solid var(--color-darkBlue);
border-radius: 0;
padding: .5rem 1rem;
margin-bottom: 0;
line-height: inherit;
height: 40px;
}
.table-header form input[type="search"] {
width: 30ch;
}
.table-header form input[type="submit"] {
background-color: var(--color-darkBlue);
color: white;
font-weight: bold;
}
.table-header .button-download {
width: inherit;
@ -558,4 +568,9 @@ dialog::backdrop {
.mhide {
display: none;
}
.flex-break {
flex-direction: column;
align-items: center;
}
}

View file

@ -1,27 +1,31 @@
.umap-main-edit-toolbox [type=button] {
color: #fff;
font-size: 1em;
border: none;
font-size: 0.8rem;
background-color: var(--color-darkGray);
width: auto;
margin-bottom: 0;
min-height: initial;
}
.umap-main-edit-toolbox [type=button]:hover {
text-decoration: underline;
}
.leaflet-container [type=button].umap-help-link {
padding-bottom: 3px;
padding: 0 var(--text-margin);
background-color: inherit;
}
.leaflet-container .edit-undo {
margin-left: var(--box-margin);
}
.leaflet-container .edit-undo[disabled],
.leaflet-container .edit-redo[disabled] {
filter: invert(.5);
}
.leaflet-container .edit-save,
.leaflet-container .edit-cancel,
.leaflet-container .edit-disable,
.leaflet-container .connected-peers
{
display: block;
border: none;
border-radius: 20px;
display: inline-block;
height: 32px;
line-height: 30px;
padding: 0 20px;
@ -32,17 +36,16 @@
background-color: var(--color-lightCyan);
color: var(--color-dark);
}
.dark [type=button].connected-peers:hover
{
text-decoration: none;
border: 0.5px solid var(--color-brightCyan);
}
.dark .off.connected-peers {
background-color: var(--color-lightGray);
color: var(--color-darkGray);
}
.leaflet-container .edit-cancel,
.leaflet-container .edit-disable,
.leaflet-container .connected-peers{
border: 0.5px solid rgba(153, 153, 153, 0.40);
}
.leaflet-container .edit-cancel:hover,
.leaflet-container .edit-disable:hover {
border: 0.5px solid rgba(153, 153, 153, 0.80);
text-decoration: none;
@ -79,19 +82,13 @@
background: rgba(66, 236, 230, 0.10);
}
.leaflet-container .edit-save,
.leaflet-container .edit-cancel,
.leaflet-container .edit-disable,
.umap-edit-enabled .edit-enable {
display: none;
}
.umap-edit-enabled .edit-save,
.umap-edit-enabled .edit-disable,
.umap-edit-enabled.umap-is-dirty .edit-cancel {
.umap-edit-enabled .edit-disable {
display: inline-block;
}
.umap-is-dirty .edit-disable {
display: none;
}
.umap-caption-bar {
display: none;
}
@ -118,9 +115,7 @@
.umap-right-edit-toolbox {
display: flex;
column-gap: 10px;
}
.umap-right-edit-toolbox {
align-items: baseline;
align-items: center;
}
.umap-main-edit-toolbox .logo {
@ -138,17 +133,20 @@
text-indent: -9999px;
}
.umap-main-edit-toolbox .map-name {
display: inline-block;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
font-weight: bold;
text-align: start;
}
.truncate {
display: inline-flex;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.umap-main-edit-toolbox .username {
max-width: 100px;
}
.umap-main-edit-toolbox .share-status {
font-style: italic;
overflow: hidden;
text-overflow: ellipsis;
}
.map-name:after {
content: '\00a0';
@ -166,11 +164,13 @@
.umap-main-edit-toolbox h3 {
display: inline;
}
.umap-caption-bar button {
margin-inline-start: 10px;
.umap-caption-bar .umap-map-author {
margin-inline-end: 10px;
}
.umap-caption-bar button + button:before {
.umap-caption-bar:has(select:not([hidden])) > button + button:after,
.umap-caption-bar > button + button:before {
content: '|';
padding-inline-start: 10px;
padding-inline-end: 10px;
}
.umap-main-edit-toolbox .umap-user:hover {
@ -199,8 +199,60 @@
z-index: var(--zindex-panels);
}
.umap-caption-bar-enabled .umap-caption-bar {
display: block;
display: flex;
align-items: baseline;
}
.umap-caption-bar select {
margin-top: 0;
line-height: initial;
height: initial;
min-height: initial;
width: auto;
padding: 0 var(--text-margin);
}
.umap-caption-bar-enabled {
--current-footer-height: var(--footer-height);
}
.umap-edit-bar {
position: absolute;
right: var(--panel-gutter);
display: none;
top: calc(var(--current-header-height) + var(--panel-gutter));
flex-direction: column;
z-index: var(--zindex-panels);
width: var(--control-size);
background-color: var(--background-color);
border-radius: var(--border-radius);
}
.umap-edit-enabled .umap-edit-bar {
display: flex;
}
.umap-edit-bar li {
width: var(--control-size);
height: var(--control-size);
}
.umap-edit-bar button {
padding: 0;
border-radius: 0;
}
.umap-edit-bar li:first-of-type button {
border-radius: var(--border-radius) var(--border-radius) 0 0;
}
.umap-edit-bar li:last-of-type button {
border-radius: 0 0 var(--border-radius) var(--border-radius);
}
.umap-edit-bar hr {
padding: 0;
margin: 0;
}
@media all and (max-width: 980px) {
.umap-main-edit-toolbox button span {
display: none;
}
}
@media all and (max-width: 770px) {
.umap-main-edit-toolbox .umap-help-link,
.umap-main-edit-toolbox .share-status {
display: none !important;
}
}

View file

@ -1,12 +1,20 @@
.umap-contextmenu {
background-color: var(--background-color);
padding: calc(var(--box-padding) / 2) var(--box-padding);
padding: calc(var(--box-padding) / 2) calc(var(--box-padding) / 2);
position: fixed;
z-index: var(--zindex-contextmenu);
border-radius: var(--border-radius);
box-shadow: var(--block-shadow);
display: flex;
flex-direction: column;
}
.umap-contextmenu li + li {
.umap-contextmenu-rows {
flex-direction: row;
align-items: center;
justify-content: center;
align-content: center;
}
.umap-contextmenu:not(.umap-contextmenu-rows) li + li {
margin-top: var(--text-margin);
}
@ -14,3 +22,7 @@
margin-top: var(--text-margin);
margin-bottom: var(--text-margin);
}
.dark.umap-contextmenu li button .icon:hover {
background-color: var(--color-mediumGray);
}

View file

@ -2,7 +2,7 @@
z-index: var(--zindex-dialog);
margin: auto;
margin-top: 100px;
width: 40vw;
width: var(--dialog-width);
max-width: 100vw;
max-height: 50vh;
padding: 20px;
@ -14,6 +14,9 @@
height: fit-content;
max-height: 90vh;
}
.umap-dialog ul + h4 {
margin-top: var(--box-margin);
}
:where([data-component="no-dialog"]:not([hidden])) {
display: block;
position: relative;

View file

@ -1,3 +1,4 @@
.umap-form-inline .formbox,
.umap-form-inline {
display: inline;
}
@ -5,17 +6,15 @@ input[type="text"], input[type="password"], input[type="date"],
input[type="datetime-local"], input[type="email"], input[type="number"],
input[type="search"], input[type="tel"], input[type="time"], input[type="file"],
input[type="url"], textarea {
background-color: white;
border: 1px solid #CCCCCC;
border-radius: 2px 2px 2px 2px;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1) inset;
color: rgba(0, 0, 0, 0.75);
background-color: var(--color-light);
border: 2px solid var(--color-darkBlue);
color: var(--text-color);
display: block;
font-family: inherit;
margin: 0;
margin-bottom: var(--box-margin);
padding: 7px;
padding: .5rem 1rem;
width: 100%;
min-height: 40px;
}
input[type="range"] {
margin-top: 10px;
@ -46,10 +45,14 @@ input[type=checkbox]:checked:after {
content: '✓';
color: var(--color-darkGray);
}
input[data-modified=true] {
background-color: var(--color-lightCyan);
border: 1px solid var(--color-darkGray);
border: 1px solid var(--color-veryDarkGray);
}
input + select,
select + input,
input + input {
border-left: none;
}
textarea {
height: inherit;
@ -58,16 +61,18 @@ textarea {
min-height: 6rlh;
}
select {
border: 1px solid #222;
border: 2px solid var(--color-darkBlue);
width: 100%;
height: 28px;
line-height: 28px;
margin-top: 5px;
margin-bottom: var(--box-margin);
padding: var(--button-padding);
background-color: var(--background-color);
color: var(--text-color);
min-height: 40px;
}
.dark select {
color: #efefef;
background-color: #393F3F;
color: var(--text-color);
background-color: var(--color-darkGray);
border-color: var(--color-veryDarkGray);
border-width: 1px;
}
select[multiple="multiple"] {
height: auto;
@ -75,35 +80,38 @@ select[multiple="multiple"] {
.button,
[type="button"],
input[type="submit"] {
display: block;
margin-bottom: 14px;
display: flex;
align-items: center;
text-align: center;
border-radius: 2px;
font-weight: normal;
cursor: pointer;
padding: 7px 14px;
min-height: 32px;
line-height: 32px;
padding: var(--button-padding);
border: none;
text-decoration: none;
background-color: white;
justify-content: center;
background-color: var(--color-darkBlue);
color: var(--color-light);
font-weight: normal;
min-height: 40px;
}
.dark .button,
.dark [type="button"] {
background-color: var(--color-darkerGray);
color: var(--text-color);
border: 1px solid #1b1f20;
border: 1px solid var(--color-veryDarkGray);
}
.button.primary {
font-weight: bold;
}
.dark .button.primary:not([disabled]),
.dark [type="button"].primary:not([disabled]) {
background-color: var(--color-brightCyan);
background-color: var(--color-verySoftCyan);
color: var(--color-dark);
border: 1px solid #1b1f20;
border: 1px solid var(--color-veryDarkGray);
}
.dark .button:hover,
.dark [type="button"]:hover,
.dark input[type="submit"]:hover {
background-color: #2e3436;
background-color: var(--color-darkerGray);
}
.dark a {
color: var(--text-color);
@ -131,18 +139,26 @@ button.flat:hover,
.dark [type="button"].flat:hover {
text-decoration: underline;
}
.dark button.round,
button.round {
border-radius: 20px;
border: 0.5px solid rgba(153, 153, 153, 0.40);
}
button.round.small {
padding: var(--button-padding-small);
}
.help-text, .helptext {
display: block;
padding: 7px 7px;
margin-bottom: 14px;
background: #393F3F;
background: var(--color-mediumGray);
color: var(--color-lightGray);
font-size: 10px;
border-radius: 0 2px;
}
.content .helptext {
background-color: #eee;
color: #000;
background-color: var(--color-lightGray);
color: var(--color-dark);
}
input + .help-text {
margin-top: -14px;
@ -154,6 +170,14 @@ input + .help-text {
.formbox.with-switch {
padding-top: 2px;
}
.with-switch {
overflow: hidden;
}
.formbox select,
.formbox textarea,
.formbox input {
margin-bottom: var(--text-margin);
}
fieldset.formbox {
border: none;
border-top: 1px solid var(--color-lightGray);
@ -181,8 +205,8 @@ input + .error {
margin-top: -14px;
margin-bottom: 14px;
background: var(--color-lightGray);
color: #fff;
background-color: #cc0000;
color: var(--color-light);
background-color: var(--color-red);
font-size: 11px;
border-radius: 0 2px;
}
@ -190,13 +214,14 @@ input[type="file"] + .error {
margin-top: 0;
}
input[value]:invalid {
border-color: red;
background-color: darkred;
border-color: var(--color-red);
background-color: var(--color-darkRed);
}
.dark input, .dark textarea {
background-color: #232729;
border-color: #1b1f20;
color: #efefef;
background-color: var(--color-darkerGray);
border-color: var(--color-veryDarkGray);
border-width: 1px;
color: var(--color-lightGray);
}
details {
margin-bottom: 5px;
@ -204,7 +229,7 @@ details {
border-start-end-radius: 4px;
}
.dark details {
border: 1px solid #222;
border: 1px solid var(--color-veryDarkGray);
}
details fieldset {
overflow: hidden;
@ -220,8 +245,8 @@ details summary {
padding: 0 5px;
}
.dark details summary {
background-color: #232729;
color: #fff;
background-color: var(--color-darkerGray);
color: var(--color-light);
}
.dark details fieldset {
border: 1px solid var(--color-darkGray);
@ -271,9 +296,6 @@ input.switch:empty ~ label {
text-indent: 6em;
margin: 0.2em 0;
cursor: pointer;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
text-shadow: 0 1px rgba(0, 0, 0, 0.1);
width: 80px;
@ -289,33 +311,34 @@ input.switch:empty ~ label:after {
width: 6em;
-webkit-transition: all 100ms ease-in;
transition: all 100ms ease-in;
color: #c9c9c7;
color: var(--color-mediumGray);
font-weight: bold;
background-color: #ededed;
background-color: var(--color-lighterGray);
}
.dark input.switch:empty ~ label:before,
.dark input.switch:empty ~ label:after {
background-color: #272c2e;
background-color: var(--color-darkerGray);
}
input.switch:empty ~ label:after {
width: 3em;
margin-inline-start: 0.1em;
background-color: #ededed;
background-color: var(--color-lightGray);
content: "OFF";
text-indent: 3.5em;
border: 1px solid #374E75;
border: 1px solid var(--color-darkerGray);
font-weight: bold;
}
.dark input.switch:empty ~ label:after {
border: 1px solid #202425;
background-color: #2c3233;
border: 1px solid var(--color-veryDarkGray);
background-color: var(--color-darkerGray);
color: var(--color-lightGray);
}
input.switch:checked:empty ~ label:after {
content: ' ';
}
.dark input.switch:checked ~ label:before,
input.switch:checked ~ label:before {
background-color: var(--color-lightCyan);
background-color: var(--color-verySoftCyan);
border: 1px solid var(--color-lightGray);
color: var(--color-darkGray);
content: "ON";
@ -325,7 +348,7 @@ input.switch:checked ~ label:before {
}
.dark input.switch:checked ~ label:before {
border: none;
background-color: var(--color-accent);
background-color: var(--color-verySoftCyan);
}
input.switch:checked ~ label:after {
margin-inline-start: 3em;
@ -337,11 +360,12 @@ input.switch:checked ~ label:after {
width: 100%
}
.button-bar {
grid-gap: 7px;
grid-gap: var(--gutter);
}
.umap-multiplechoice.by2,
.button-bar.half {
grid-template-columns: 1fr 1fr;
justify-items: center;
}
.button-bar.by3,
.button-bar.by5,
@ -358,14 +382,15 @@ input.switch:checked ~ label:after {
.button-bar .button,
.button-bar [type="button"] {
display: inline-block;
width: 100%;
}
.umap-multiplechoice input[type='radio'] {
display: none;
}
.umap-multiplechoice label {
border: 1px solid #374E75;
border: 1px solid var(--color-veryDarkGray);
cursor: pointer;
background-color: #c9c9c7;
background-color: var(--color-lightGray);
min-height: 30px;
line-height: 30px;
text-align: center;
@ -373,49 +398,40 @@ input.switch:checked ~ label:after {
display: inline-block;
}
.dark .umap-multiplechoice label {
border: 1px solid black;
background-color: #2c3233;
border: 1px solid var(--color-veryDarkGray);
background-color: var(--color-darkGray);
}
.umap-multiplechoice input[type='radio']:checked + label {
background-color: var(--color-accent);
box-shadow: inset 0 0 6px 0px #2c3233;
background-color: var(--color-verySoftCyan);
color: var(--color-darkGray);
}
.inheritable .header,
.inheritable {
clear: both;
overflow: hidden;
.inheritable .header .buttons {
padding: 0;
}
.inheritable .header {
margin-bottom: 5px;
display: flex;
align-items: center;
align-content: center;
justify-content: space-between;
}
.inheritable .header label {
padding-top: 6px;
width: initial;
}
.inheritable + .inheritable {
border-top: 1px solid #222;
border-top: 1px solid var(--color-darkerGray);
padding-top: 5px;
margin-top: 5px;
}
.umap-field-iconUrl .action-button,
.inheritable .define,
.inheritable .undefine {
float: inline-end;
width: initial;
min-height: 18px;
line-height: 18px;
margin-bottom: 0;
}
.inheritable .quick-actions {
float: inline-end;
}
.inheritable .quick-actions .formbox {
margin-bottom: 0;
}
.inheritable .quick-actions input {
width: 100px;
margin-inline-end: 5px;
}
.inheritable .define,
.inheritable.undefined .undefine,
.inheritable.undefined .show-on-defined {
@ -476,15 +492,6 @@ i.info {
.umap-download:before {
background-position: -72px -78px;
}
.permissions-panel,
.umap-upload,
.umap-share,
.umap-datalayer-container,
.umap-layer-properties-container,
.umap-browse-data,
.umap-tilelayer-switcher-container {
padding: 0 10px;
}
.umap-field-datalist {
display: flex;
justify-content: space-between;
@ -497,7 +504,7 @@ i.info {
justify-content: space-around;
font-size: 1.2em;
margin-bottom: 20px;
border-bottom: 1px solid #bebebe;
border-bottom: 1px solid var(--color-lighterGray);
}
.flat-tabs button {
padding: 10px;
@ -508,14 +515,14 @@ i.info {
.flat-tabs button:hover,
.flat-tabs .on {
font-weight: bold;
border-bottom: 1px solid #444;
border-bottom: 1px solid var(--color-mediumGray);
}
.dark .flat-tabs button {
color: #fff;
color: var(--color-light);
}
.dark .flat-tabs button:hover,
.dark .flat-tabs .on {
border-bottom: 1px solid #fff;
border-bottom: 1px solid var(--color-light);
}
.umap-pictogram-category h6 {
font-size: 1.3em;
@ -531,12 +538,13 @@ i.info {
height: 30px;
line-height: 30px;
cursor: pointer;
background-color: #999;
background-color: var(--color-lightGray);
text-align: center;
margin-bottom: 5px;
display: block;
color: black;
display: inline-block;
color: var(--color-dark);
font-weight: bold;
overflow: hidden;
}
.umap-pictogram-choice img {
vertical-align: middle;
@ -544,10 +552,10 @@ i.info {
}
.umap-pictogram-choice:hover,
.umap-color-picker span:hover {
background-color: #bebebe;
background-color: var(--color-lighterGray);
}
.umap-pictogram-choice.selected {
box-shadow: inset 0 0 0 1px #e9e9e9;
box-shadow: inset 0 0 0 1px var(--color-lighterGray);
}
.umap-pictogram-choice .leaflet-marker-icon {
@ -559,7 +567,6 @@ i.info {
clear: both;
margin-bottom: 20px;
overflow: hidden;
display: none;
}
.umap-color-picker span {
width: 20px;
@ -576,18 +583,13 @@ input.blur {
vertical-align: middle;
border-start-end-radius: 0;
border-end-end-radius: 0;
}
.blur + .button:before,
.blur + [type="button"]:before {
content: '✔';
margin-bottom: 0;
}
.blur + .button,
.blur + [type="button"] {
width: 40px;
height: 18px;
display: inline-block;
vertical-align: middle;
line-height: 18px;
border-start-start-radius: 0;
border-end-start-radius: 0;
box-sizing: border-box;
@ -596,6 +598,10 @@ input[type=hidden].blur + .button,
input[type=hidden].blur + [type="button"] {
display: none;
}
.blur-container {
display: flex;
align-items: stretch;
}
.copiable-input {
display: flex;
align-items: end;
@ -604,17 +610,15 @@ input[type=hidden].blur + [type="button"] {
border-radius: initial;
}
.copiable-input button {
background-position: -46px -92px;
display: inline;
padding: 0 10px;
height: 32px;
width: 32px;
border: 1px solid #202425;
border-radius: initial;
background-color: var(--background-color);
color: var(--text-color);
border: 2px solid var(--color-darkBlue);
border-left: none;
width: 40px;
}
input.highlightable:not(:placeholder-shown) {
border: 1px solid var(--color-brightCyan);
}
.umap-upload [type=url] {
.umap-import [type=url] {
margin-bottom: 0;
}

View file

@ -17,11 +17,11 @@
background-image: url('../img/24.svg');
--tile: -36px;
height: 36px;
line-height: 36px;
width: 36px;
}
.icon + span {
margin-inline-start: 10px;
margin-inline-start: 5px;
margin-inline-end: 5px;
}
html[dir="rtl"] .icon {
transform: scaleX(-1);
@ -62,15 +62,30 @@ html[dir="rtl"] .icon {
.icon-caption {
background-position: calc(var(--tile) * 4) var(--tile);
}
.icon-center {
background-position: calc(var(--tile) * 4) calc(var(--tile) * 2);
}
.icon-clone {
background-position: calc(var(--tile) * 7) calc(var(--tile) * 2);
}
.icon-close {
background-position: var(--tile) 0px;
}
.icon-continue-line {
background-position: calc(var(--tile) * 4) 0;
}
.icon-copy {
background-position: calc(var(--tile) * 2) calc(var(--tile) * 4);
background-position: calc(var(--tile) * 4) calc(var(--tile) * 7);
}
.icon-delete {
background-position: calc(var(--tile) * 5) calc(var(--tile) * 2);
}
.icon-delete-shape {
background-position: calc(var(--tile) * 4) calc(var(--tile) * 3);
}
.icon-delete-vertex {
background-position: calc(var(--tile) * 5) calc(var(--tile) * 4);
}
.readonly .icon-delete,
.off .icon-delete {
background-position: calc(var(--tile) * 5) calc(var(--tile) * 5);
@ -83,6 +98,9 @@ html[dir="rtl"] .icon {
cursor: move;
float: inline-end;
}
.icon-empty {
background-position: calc(var(--tile) * 7) calc(var(--tile) * 3);
}
.icon-eye {
background-position: calc(var(--tile) * 2) var(--tile);
}
@ -95,12 +113,21 @@ html[dir="rtl"] .icon {
.off .icon-edit {
background-position: calc(var(--tile) * 2) calc(var(--tile) * 3);
}
.icon-extract-shape {
background-position: calc(var(--tile) * 5) 0;
}
.icon-filters {
background-position: 0px var(--tile);
}
.icon-forward {
background-position: calc(var(--tile) * 6) calc(var(--tile) * 6);
}
.icon-help {
background-position: 0 0;
}
.icon-hole {
background-position: calc(var(--tile) * 3) calc(var(--tile) * 4);
}
.icon-key {
background-position: calc(var(--tile) * 6) calc(var(--tile) * 5);
}
@ -114,25 +141,41 @@ html[dir="rtl"] .icon {
background-position: calc(var(--tile) * 7) 0;
}
.icon-marker {
background-position: calc(var(--tile) * 3) calc(var(--tile) * 5);
background-position: calc(var(--tile) * 7) var(--tile);
}
.icon-marker-plus {
background-position: calc(var(--tile) * 8) var(--tile);
}
.icon-multipolygon {
background-position: calc(var(--tile) * 7) calc(var(--tile) * 5);
}
.icon-multiline {
background-position: calc(var(--tile) * 7) calc(var(--tile) * 7);
}
.icon-peers {
background-position: calc(var(--tile) * 3) calc(var(--tile) * 2);
}
.icon-polygon {
background-position: var(--tile) calc(var(--tile) * 3);
background-position: calc(var(--tile) * 7) calc(var(--tile) * 4);
}
.icon-polygon-plus {
background-position: calc(var(--tile) * 8) calc(var(--tile) * 4);
}
.icon-polyline {
background-position: 0 calc(var(--tile) * 3);
background-position: calc(var(--tile) * 7) calc(var(--tile) * 6);
}
.icon-profile {
background-position: 0 calc(var(--tile) * 4);
}
.icon-redo {
background-position: calc(var(--tile) * 3) calc(var(--tile) * 7);
}
.icon-resize {
background-position: calc(var(--tile) * 3) calc(var(--tile) * 6);
}
.icon-undo,
.icon-restore {
background-position: calc(var(--tile) * 5) calc(var(--tile) * 3);
background-position: calc(var(--tile) * 2) calc(var(--tile) * 7);
}
.expanded .icon-resize {
background-position: calc(var(--tile) * 2) calc(var(--tile) * 6);
@ -153,6 +196,15 @@ html[dir="rtl"] .icon {
.icon-share {
background-position: 0px calc(var(--tile) * 5);
}
.icon-split-line {
background-position: calc(var(--tile) * 5) var(--tile);
}
.icon-star {
background-position: var(--tile) calc(var(--tile) * 7);
}
.icon-starred {
background-position: 0 calc(var(--tile) * 7);
}
.icon-table {
background-position: calc(var(--tile) * 2) 0px;
}

View file

@ -55,3 +55,10 @@
.importers ul .datasets:before {
background-image: url(../img/importers/datasets.svg);
}
.importer.banfr h3:before,
.importers ul .banfr:before {
background-image: url(../img/importers/banfr.svg);
}
.importer table {
width: calc(var(--dialog-width) - 2 * var(--box-margin));
}

View file

@ -9,7 +9,7 @@
background-color: var(--background-color);
color: var(--text-color);
cursor: initial;
border-radius: 5px;
border-radius: var(--border-radius);
border: 1px solid var(--color-lightGray);
bottom: calc(var(--current-footer-height) + var(--panel-bottom));
box-sizing: border-box;
@ -42,7 +42,8 @@
padding: var(--panel-gutter);
}
.panel h3 {
line-height: 120%;
display: flex;
align-items: center;
}
.panel .counter::before {
counter-increment: step;
@ -106,3 +107,20 @@
border-bottom-right-radius: 0;
}
}
:has(.right[data-highlight="caption"]) li[data-ref="caption"] button,
:has(.right[data-highlight="caption"]) li[data-ref="caption"] button:hover,
:has(.right[data-highlight="import"]) li[data-ref="import"] button,
:has(.right[data-highlight="import"]) li[data-ref="import"] button:hover,
:has(.right[data-highlight="layers"]) li[data-ref="layers"] button,
:has(.right[data-highlight="layers"]) li[data-ref="layers"] button:hover,
:has(.right[data-highlight="tilelayers"]) li[data-ref="tilelayers"] button,
:has(.right[data-highlight="tilelayers"]) li[data-ref="tilelayers"] button:hover,
:has(.right[data-highlight="center"]) li[data-ref="center"] button,
:has(.right[data-highlight="center"]) li[data-ref="center"] button:hover,
:has(.right[data-highlight="permissions"]) li[data-ref="permissions"] button,
:has(.right[data-highlight="permissions"]) li[data-ref="permissions"] button:hover,
:has(.right[data-highlight="settings"]) li[data-ref="settings"] button,
:has(.right[data-highlight="settings"]) li[data-ref="settings"] button:hover {
background-color: var(--color-mediumGray);
}

View file

@ -89,7 +89,6 @@ span.popup-icon {
.umap-popup-container ul {
list-style-type: disc;
}
.leaflet-control-toolbar,
.leaflet-bar {
box-shadow: none;
}

View file

@ -1,59 +1,74 @@
#umap-tooltip-container {
line-height: 20px;
.umap-tooltip-container {
padding: 5px 10px;
width: auto;
min-width: 100px;
max-width: 300px;
position: absolute;
box-shadow: var(--block-shadow);
display: none;
background-color: rgba(40, 40, 40, 0.9);
color: #eeeeec;
font-size: 0.8em;
border-radius: 2px;
border-radius: var(--border-radius);
z-index: var(--zindex-tooltip);
font-weight: normal;
max-width: 300px;
--tooltip-color: var(--color-darkGray);
background-color: var(--tooltip-color);
--arrow-size: 8px;
}
.umap-tooltip #umap-tooltip-container {
.tooltip-accent {
--tooltip-color: var(--color-lightCyan);
}
.umap-tooltip .umap-tooltip-container {
display: block;
}
#umap-tooltip-container.tooltip-top:after {
.umap-tooltip-container.tooltip-top:after {
top: 100%;
left: calc(50% - 11px);
left: calc(50% - var(--arrow-size));
border: solid transparent;
content: " ";
height: 0;
width: 0;
position: absolute;
pointer-events: none;
border-top-color: rgba(30, 30, 30, 0.8);
border-width: 11px;
margin-left: calc(-50% + 21px);
border-top-color: var(--tooltip-color);
border-width: var(--arrow-size);
margin-left: calc(-50% + 2 * var(--arrow-size));
}
#umap-tooltip-container.tooltip-bottom:before {
top: -22px;
left: calc(50% - 11px);
.umap-tooltip-container.tooltip-bottom:before {
top: calc(var(--arrow-size) * -2);
left: calc(50% - var(--arrow-size));
border: solid transparent;
content: " ";
height: 0;
width: 0;
position: absolute;
pointer-events: none;
border-top-color: rgba(30, 30, 30, 0.7);
border-width: 11px;
border-top-color: var(--tooltip-color);
border-width: var(--arrow-size);
transform: rotate(180deg);
}
#umap-tooltip-container.tooltip.tooltip-left:after {
left: 100%;
top: 50%;
.tooltip-accent ul {
padding-top: var(--small-box-padding);
padding-bottom: var(--small-box-padding);
}
.tooltip-accent li {
background-color: var(--color-light);
color: var(--color-dark);
padding: var(--small-box-padding);
margin-bottom: var(--small-box-padding);
}
.tooltip-accent li:last-of-type {
margin-bottom: 0;
}
.umap-tooltip-container.tooltip-right:before {
right: 100%;
top: calc(50% - var(--arrow-size));
border: solid transparent;
content: " ";
height: 0;
width: 0;
position: absolute;
pointer-events: none;
border-color: rgba(136, 183, 213, 0);
border-left-color: #333;
border-width: 11px;
margin-top: -10px;
border-right-color: var(--tooltip-color);
border-width: var(--arrow-size);
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

View file

@ -1,4 +1,4 @@
<svg id="svg2" width="192" height="192" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<svg id="svg2" width="216" height="192" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<defs id="defs4">
<clipPath id="clip0_241_10857">
<rect id="rect586" width="18.05" height="19.01" fill="#fff"/>
@ -15,6 +15,12 @@
<clipPath id="clip0_2695_1939">
<rect id="rect1" width="20" height="20" fill="#fff"/>
</clipPath>
<clipPath id="clip0_3071_861">
<rect id="rect3" width="18" height="20" fill="#fff"/>
</clipPath>
<clipPath id="clip0_241_10857-3">
<rect id="rect586-6" width="18.05" height="19.01" fill="#fff"/>
</clipPath>
</defs>
<metadata id="metadata7">
<rdf:RDF>
@ -64,9 +70,12 @@
</g>
</g>
<path id="path4873" d="m108.15 816.36v3.8267h3.8544v-3.8267zm0.51755 4.3517-1.2459 2.3132 1.1669 0.61848 1.244-2.3151zm-1.8689 3.4717-0.27666 0.51571h-2.426v2.2441l-4.0916 4.064 1.3626 1.3528 3.862-3.8342h2.7214v-3.6959l0.015-0.028-0.015-8e-3v-0.0953h-0.17879l-0.97303-0.51571z" color="#000000" color-rendering="auto" fill="#f2f2f2" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" stroke="#999" stroke-width=".25" style="isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/>
<g id="g4244" transform="matrix(.51357 -.54309 .54309 .51357 -518.02 506.23)">
<g id="g4244" transform="matrix(.51357 -.54309 .54309 .51357 -590.02 601.73)">
<path id="path4240" transform="matrix(.91922 .97205 -.97205 .91922 152.14 647.93)" d="m220.49 133.52c-0.33017 0.01-0.66239 0.0456-0.99414 0.10742-2.2249 0.41425-4.0267 1.9575-4.832 4.0098l-0.87696-1.8164a0.50005 0.50005 0 0 0-0.83398-0.11328 0.50005 0.50005 0 0 0-0.0664 0.54883l1.459 3.0195a0.50005 0.50005 0 0 0 0.60742 0.25586l2.8438-0.94532a0.50028 0.50028 0 1 0-0.31641-0.94922l-2.002 0.66797c0.61312-1.8902 2.2073-3.3241 4.2012-3.6953 2.2474-0.41845 4.5146 0.59912 5.6953 2.5566 1.1807 1.9575 1.022 4.4377-0.39648 6.2305-1.4185 1.7928-3.7961 2.5154-5.9727 1.8164a0.50005 0.50005 0 1 0-0.30469 0.95117c2.5704 0.82539 5.3874-0.0294 7.0625-2.1465 0.4188-0.52924 0.74532-1.1114 0.97657-1.7207 0.69373-1.828 0.53599-3.9147-0.50977-5.6484-1.22-2.0227-3.4291-3.1977-5.7402-3.1289z" color="#000000" color-rendering="auto" fill="#f2f2f2" image-rendering="auto" shape-rendering="auto" solid-color="#000000" stroke="#999" stroke-linecap="round" stroke-linejoin="round" stroke-width=".25" style="isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/>
</g>
<g id="g4244-6" transform="matrix(-.51357 -.54309 -.54309 .51357 734.02 601.73)">
<path id="path4240-7" transform="matrix(.91922 .97205 -.97205 .91922 152.14 647.93)" d="m220.49 133.52c-0.33017 0.01-0.66239 0.0456-0.99414 0.10742-2.2249 0.41425-4.0267 1.9575-4.832 4.0098l-0.87696-1.8164a0.50005 0.50005 0 0 0-0.83398-0.11328 0.50005 0.50005 0 0 0-0.0664 0.54883l1.459 3.0195a0.50005 0.50005 0 0 0 0.60742 0.25586l2.8438-0.94532a0.50028 0.50028 0 1 0-0.31641-0.94922l-2.002 0.66797c0.61312-1.8902 2.2073-3.3241 4.2012-3.6953 2.2474-0.41845 4.5146 0.59912 5.6953 2.5566 1.1807 1.9575 1.022 4.4377-0.39648 6.2305-1.4185 1.7928-3.7961 2.5154-5.9727 1.8164a0.50005 0.50005 0 1 0-0.30469 0.95117c2.5704 0.82539 5.3874-0.0294 7.0625-2.1465 0.4188-0.52924 0.74532-1.1114 0.97657-1.7207 0.69373-1.828 0.53599-3.9147-0.50977-5.6484-1.22-2.0227-3.4291-3.1977-5.7402-3.1289z" color="#000000" color-rendering="auto" fill="#f2f2f2" image-rendering="auto" shape-rendering="auto" solid-color="#000000" stroke="#999" stroke-linecap="round" stroke-linejoin="round" stroke-width=".25" style="isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/>
</g>
<g id="delete-vertex" transform="translate(-90,-64)">
<path id="path4349-2-2-9-3-8-3-5" transform="translate(0 852.36)" d="m227.55 53.105-6.0547 3.0273h-3.4414v3.5176l-2.9512 5.9023 1.7891 0.89453 3.1562-6.3145h2.0059v-2.043l6.3906-3.1953z" color="#000000" color-rendering="auto" fill="#f2f2f2" image-rendering="auto" shape-rendering="auto" solid-color="#000000" stroke="#999" stroke-width=".25" style="isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/>
<path id="path4353-1-6-1-3-5-1-9" d="m217 907.36 6 6" fill="none" stroke="#fff" stroke-width="2.482"/>
@ -130,9 +139,9 @@
<rect id="rect4243-2-5" x="89" y="901.36" width="2" height="2" fill="#f2f2f2"/>
<path id="delete-30-7" d="m131 937.36v1c-1.4286 0-3.2857 0.5999-4 2v1h10v-1c-0.71429-1.4001-2.5714-2-4-2v-1zm-4 5 2 9h6l2-9z" fill="#b3b3b3" stroke="#999" stroke-width=".25"/>
<path id="path437" d="m113.29 943.47 0.9072 0.5491c0.1786 0.10817 0.2366 0.34196 0.1294 0.52223-0.0319 0.0535-0.0764 0.0983-0.1294 0.13055l-7.0072 4.2412-7.0071-4.2412c-0.17869-0.10817-0.23664-0.34196-0.12942-0.52222 0.0319-0.0536 0.0763-0.0984 0.12942-0.13056l0.90714-0.5491 6.0999 3.6922zm0 3.578 0.9072 0.5491c0.1786 0.1081 0.2366 0.3419 0.1294 0.5222-0.0319 0.0535-0.0764 0.0983-0.1294 0.1306l-6.6189 4.0061c-0.239 0.1447-0.53753 0.1447-0.77652 0l-6.6188-4.0061c-0.17869-0.1082-0.23664-0.342-0.12942-0.5223 0.0319-0.0536 0.0763-0.0984 0.12942-0.1305l0.90714-0.5491 6.0999 3.6921zm-5.7117-10.575 6.6189 4.0062c0.1786 0.10815 0.2366 0.34196 0.1294 0.52222-0.0319 0.0536-0.0764 0.0984-0.1294 0.13056l-7.0072 4.2412-7.0071-4.2412c-0.17869-0.10815-0.23664-0.34196-0.12942-0.52222 0.0319-0.0536 0.0763-0.0984 0.12942-0.13056l6.6188-4.0062c0.23899-0.14465 0.53752-0.14465 0.77652 0z" fill="#f2f2f2" stroke="#999" stroke-width=".178"/>
<path id="linestring" d="m7 889.36v2h1.8828l6.1172 3.0586v0.23438l-6.707 6.707h-1.293v2h2v-1.293l6.707-6.707h1.293v-2h-1.8828l-6.1172-3.0586v-0.94141z" color="#000000" fill="#f2f2f2" fill-rule="evenodd" stroke="#999" stroke-width=".2"/>
<path id="polygon" d="m29 888.36v2h0.92773l-0.85547 12h-1.0723v2h2v-1.1992l8-1.6016v0.80078h2v-2h-0.77734l1.5547-7h1.2227v-2h-2v0.72656l-9-2.4531v-1.2734z" fill="#f2f2f2" fill-rule="evenodd" stroke="#999" stroke-width=".2"/>
<path id="marker" d="m84 936.36c-2.625 0-5.25 1.7022-6 5.1064 0 2.0426 1.5 6.1277 6 10.894 4.5-4.7659 6-8.851 6-10.894-0.75-3.4042-3.375-5.1064-6-5.1064zm0 2.383c1.6569 0 3 1.2193 3 2.7234s-1.3431 2.7234-3 2.7234c-1.6568 0-3-1.2194-3-2.7234s1.3432-2.7234 3-2.7234z" fill="#f2f2f2" stroke="#999" stroke-width=".25"/>
<path id="linestring" d="m175 961.25v2h1.8828l6.1172 3.0586v0.23437l-6.707 6.707h-1.293v2h2v-1.293l6.707-6.707h1.293v-2h-1.8828l-6.1172-3.0586v-0.94141z" color="#000000" fill="#f2f2f2" fill-rule="evenodd" stroke="#999" stroke-width=".2"/>
<path id="polygon" d="m174 912.36v2h0.92773l-0.85547 12h-1.0723v2h2v-1.1992l8-1.6016v0.80078h2v-2h-0.77735l1.5547-7h1.2227v-2h-2v0.72656l-9-2.4531v-1.2734z" fill="#f2f2f2" fill-rule="evenodd" stroke="#999" stroke-width=".2"/>
<path id="marker" d="m180 840.36c-2.625 0-5.25 1.7022-6 5.1064 0 2.0426 1.5 6.1277 6 10.894 4.5-4.7659 6-8.851 6-10.894-0.75-3.4042-3.375-5.1064-6-5.1064zm0 2.383c1.6569 0 3 1.2193 3 2.7234s-1.3431 2.7234-3 2.7234c-1.6568 0-3-1.2194-3-2.7234s1.3432-2.7234 3-2.7234z" fill="#f2f2f2" stroke="#999" stroke-width=".25"/>
<g id="settings" class="sprite" transform="matrix(.16295 0 0 .16296 27.835 912.23)" fill="#f2f2f2" stroke="#999" stroke-width="1.4974">
<path id="path27812" d="m98.762 43.652c-0.186-1.386-1.481-2.582-2.876-2.659l-6.172-0.337c-1.395-0.076-2.899-1.224-3.341-2.55l-2.28-5.518c-0.629-1.249-0.379-3.121 0.553-4.161l4.122-4.6c0.933-1.042 0.962-2.77 0.066-3.842l-8.813-8.813c-1.073-0.897-2.803-0.867-3.845 0.065l-4.598 4.122c-1.039 0.934-2.915 1.182-4.161 0.551l-5.521-2.279c-1.324-0.442-2.472-1.945-2.549-3.34l-0.337-6.17c-0.077-1.396-1.272-2.691-2.659-2.878 0 0-3.252-0.44-6.248-0.44-2.991 0-6.243 0.44-6.243 0.44-1.386 0.188-2.582 1.483-2.658 2.878l-0.338 6.17c-0.076 1.396-1.224 2.898-2.551 3.34l-5.517 2.279c-1.249 0.631-3.122 0.382-4.161-0.551l-4.601-4.122c-1.042-0.932-2.769-0.962-3.842-0.065l-8.813 8.813c-0.897 1.073-0.867 2.801 0.066 3.842l4.122 4.6c0.933 1.041 1.182 2.913 0.551 4.161l-2.279 5.518c-0.442 1.326-1.946 2.474-3.34 2.55l-6.17 0.337c-1.396 0.077-2.691 1.272-2.879 2.659 0 0-0.439 3.253-0.439 6.243s0.44 6.24 0.44 6.24c0.188 1.389 1.483 2.582 2.879 2.659l6.169 0.339c1.396 0.075 2.898 1.225 3.341 2.549l2.278 5.517c0.631 1.248 0.381 3.122-0.551 4.163l-4.122 4.598c-0.933 1.042-0.963 2.771-0.066 3.845l8.814 8.813c1.073 0.896 2.801 0.866 3.842-0.066l4.6-4.122c1.041-0.932 2.913-1.182 4.161-0.553l5.517 2.28c1.327 0.441 2.475 1.946 2.55 3.343l0.338 6.168c0.076 1.395 1.272 2.692 2.658 2.88 0 0 3.252 0.439 6.244 0.439 2.996 0 6.25-0.439 6.25-0.439 1.385-0.188 2.58-1.485 2.657-2.88l0.337-6.168c0.077-1.396 1.225-2.901 2.551-3.343l5.517-2.28c1.248-0.629 3.122-0.379 4.163 0.553l4.598 4.122c1.042 0.933 2.771 0.964 3.843 0.067l8.815-8.814c0.896-1.073 0.866-2.803-0.066-3.845l-4.122-4.598c-0.932-1.041-1.182-2.915-0.553-4.163l2.28-5.517c0.441-1.324 1.946-2.474 3.341-2.549l6.172-0.339c1.395-0.077 2.692-1.271 2.876-2.659 0 0 0.441-3.25 0.441-6.24s-0.441-6.243-0.441-6.243zm-48.658 18.709c-6.886 0-12.468-5.585-12.468-12.467 0-6.885 5.582-12.467 12.468-12.467 6.89 0 12.475 5.582 12.475 12.467-1e-3 6.882-5.586 12.467-12.475 12.467z" fill="#f2f2f2" stroke="#999" stroke-width="1.4974"/>
</g>
@ -140,6 +149,10 @@
<path id="path580" d="m1.07 4.41h9.42c0.9234-0.0066 1.8391 0.16957 2.6941 0.5184 0.8551 0.34883 1.6327 0.8634 2.288 1.5141s1.1754 1.4246 1.5303 2.2771c0.3549 0.85256 0.5376 1.767 0.5376 2.6904 0.0067 0.9277-0.1712 1.8474-0.5231 2.7058-0.3519 0.8583-0.871 1.6382-1.527 2.2941-0.656 0.656-1.4358 1.1751-2.2941 1.527-0.8584 0.352-1.7781 0.5298-2.7058 0.5231h-9.42"/>
<path id="path582" d="m4.75 8.45-4.04-4.05 4.04-4.05"/>
</g>
<g id="undo-5" transform="matrix(-.71301 0 0 .66261 90.012 938.13)" clip-path="url(#clip0_241_10857-3)" fill="none" stroke="#f2f2f2" stroke-miterlimit="10" stroke-width="1.4549">
<path id="path580-3" d="m1.07 4.41h9.42c0.9234-0.0066 1.8391 0.16957 2.6941 0.5184 0.8551 0.34883 1.6327 0.8634 2.288 1.5141s1.1754 1.4246 1.5303 2.2771c0.3549 0.85256 0.5376 1.767 0.5376 2.6904 0.0067 0.9277-0.1712 1.8474-0.5231 2.7058-0.3519 0.8583-0.871 1.6382-1.527 2.2941-0.656 0.656-1.4358 1.1751-2.2941 1.527-0.8584 0.352-1.7781 0.5298-2.7058 0.5231h-9.42"/>
<path id="path582-5" d="m4.75 8.45-4.04-4.05 4.04-4.05"/>
</g>
<g id="g1" transform="translate(144 -24)" fill="none" stroke="#999">
<path id="path438" d="m9 849.94v4.05c0 0.20708 0.1679 0.375 0.375 0.375h5.25c0.20708 0 0.375-0.16792 0.375-0.375v-4.05c0-0.20708-0.16792-0.375-0.375-0.375h-5.25c-0.2071 0-0.375 0.16792-0.375 0.375z"/>
<path id="save" d="m15.213 842.36h-8.8376c-0.2071 0-0.375 0.1679-0.375 0.37499v11.25c0 0.20708 0.1679 0.375 0.375 0.375h11.25c0.20708 0 0.375-0.16792 0.375-0.375v-8.6766c0-0.0953-0.0363-0.18697-0.1014-0.25648l-2.4124-2.5733c-0.07095-0.0756-0.16995-0.11853-0.2736-0.11853z"/>
@ -189,7 +202,7 @@
<path id="path8" transform="translate(0 812.36)" d="m8.1903 37.424c-0.48722-0.17411-0.79231-0.44207-0.99467-0.87363l-0.1908-0.40689-1.3703-0.0034c-1.4983-0.0037-1.5911-0.03214-1.5406-0.47225l0.026557-0.23161 2.8423-0.0451 0.19827-0.3895c0.34789-0.68343 0.86349-1.0091 1.5923-1.0058 0.71771 0.0033 1.3415 0.43242 1.6291 1.1207l0.11636 0.27848h4.6574c4.5203 0 4.66 0.0047 4.7428 0.1594 0.1159 0.21656 0.10767 0.30093-0.04419 0.45278-0.11466 0.11466-0.66063 0.1295-4.7632 0.1295h-4.6337l-0.10498 0.2903c-0.15257 0.42194-0.62749 0.84447-1.1103 0.98785-0.49622 0.14736-0.6615 0.14879-1.0524 0.0091zm0.96896-0.84513c0.698-0.33122 0.698-1.3772 0-1.7084-0.35156-0.16682-0.49258-0.16849-0.82704-0.0098-0.33761 0.16021-0.5445 0.51333-0.5445 0.92936 0 0.36801 0.16007 0.60614 0.53566 0.79693 0.31576 0.16039 0.48419 0.15875 0.83587-0.0081z" fill="#f2f2f2" stroke="#999" stroke-width=".25" style="paint-order:fill markers stroke"/>
<path id="path9" transform="translate(0 812.36)" d="m12.773 42.244c-0.4045-0.18728-0.73246-0.52685-0.9029-0.93487l-0.12875-0.30821-7.6214-0.04285-0.026557-0.23161c-0.055311-0.48238-0.16774-0.4688 3.8893-0.46961l3.7189-7.33e-4 0.21287-0.43192c0.65163-1.3222 2.4726-1.2846 3.1257 0.06446l0.17859 0.36892h2.2972c2.2584 0 2.2988 3e-3 2.391 0.17524 0.06808 0.12721 0.06936 0.22886 0.0047 0.37084l-0.08912 0.1956h-4.6108l-0.15493 0.35024c-0.38713 0.87516-1.4373 1.2865-2.2839 0.89448zm1.0632-0.70036c0.37802-0.15795 0.5443-0.42579 0.54116-0.87174-4e-3 -0.57358-0.36338-0.90877-0.9743-0.90877-0.31204 0-0.40386 0.04292-0.64992 0.30383-0.25777 0.27331-0.28248 0.33986-0.2461 0.66262 0.04524 0.40136 0.22819 0.65122 0.5956 0.81339 0.31718 0.14001 0.39991 0.14008 0.73356 6.68e-4z" fill="#f2f2f2" stroke="#999" stroke-width=".25" style="paint-order:fill markers stroke"/>
<path id="path1-67-5" d="m154.68 963.54 4.7344 4.7344-5.0508 4.6836-1.3594-1.4668 3.5274-3.2695-3.2656-3.2656z" color="#000000" fill="#f2f2f2" fill-rule="evenodd" stroke="#999" stroke-width=".25"/>
<path id="copy" d="m58 914.36v3.5h4v4h3.5v-7.5zm-4 4v7.5h7.5v-7.5z" fill="#f2f2f2" style="paint-order:fill markers stroke"/>
<path id="copy" d="m106.17 986.36v3.6522h4.1739v4.1739h3.6522v-7.8261zm-4.1739 4.1739v7.8261h7.8261v-7.8261z" fill="#f2f2f2" style="paint-order:fill markers stroke"/>
<g id="g1-5" transform="translate(.1 .1)">
<g id="g24" fill="#f2f2f2" stroke="#999" stroke-width=".2">
<path id="path24" d="m12 912.36c-4.4183 0-8 3.5817-8 8 0.00463 1.6156 0.49829 3.1919 1.416 4.5215 0.19802 0.28729 0.41463 0.56131 0.64844 0.82032 1.5128 1.6866 3.6699 2.6526 5.9355 2.6582 2.2669-6e-3 4.4249-0.97357 5.9375-2.6621 0.23535-0.26077 0.45327-0.53676 0.65234-0.82617 0.91377-1.3275 1.4053-2.9001 1.4102-4.5117 0-4.4183-3.5817-8-8-8zm-5.3242 12.506c1.3285-1.5609 3.2745-2.461 5.3242-2.4629 2.0504 1e-3 3.9972 0.90149 5.3262 2.4629 0 0-0.0035-3e-3 0.0059 6e-3 0 0-0.5371 0.5762-0.83984 0.82812-0.17533 0.14821-0.35784 0.2877-0.54687 0.41797-0.06626 0.0467-0.13333 0.0923-0.20117 0.13672-0.2448 0.15763-0.4992 0.29983-0.76172 0.42578-0.93187 0.44366-1.9503 0.67577-2.9824 0.67969-0.61808-5e-3 -1.2328-0.0915-1.8281-0.25781-0.67532-0.18416-1.3192-0.46858-1.9102-0.84375-0.0685-0.0444-0.13622-0.09-0.20312-0.13672-0.00521-4e-3 -0.010422-8e-3 -0.015625-0.0117-0.18766-0.12974-0.36887-0.26858-0.54297-0.41602-0.29972-0.24977-0.57803-0.52416-0.83203-0.82031m-0.5918-0.81445c-0.69766-1.1081-1.0705-2.3898-1.0762-3.6992 0-3.866 3.134-7 7-7l-4.1e-5 -1.6e-4c3.866 0 7 3.134 7 7-0.0054 1.3023-0.37406 2.5773-1.0645 3.6816-1.5163-1.6794-3.6729-2.6381-5.9355-2.6387-2.2613 8e-3 -4.4134 0.97341-5.9238 2.6562" style="paint-order:fill markers stroke"/>
@ -208,5 +221,15 @@
<g id="g2-67" transform="translate(170.12 814.31)" clip-path="url(#clip0_2695_1939)">
<path id="path1-5" d="m8.8453 14.83c-0.28116 0.6439-1.1722 0.6439-1.4533 0l-0.73138-1.6751c-0.65086-1.4907-1.8224-2.6774-3.2837-3.326l-2.0131-0.89358c-0.64004-0.28408-0.64004-1.2152 0-1.4993l1.9502-0.86569c1.4989-0.66535 2.6914-1.8959 3.3312-3.4375l0.74086-1.7852c0.27491-0.66247 1.1902-0.66247 1.4652 0l0.74083 1.7852c0.63972 1.5416 1.8322 2.7722 3.3311 3.4375l1.9503 0.86569c0.64 0.2841 0.64 1.2152 0 1.4993l-2.0131 0.89358c-1.4613 0.64864-2.6328 1.8353-3.2837 3.326zm-5.0624-6.6444c1.9049 0.84555 3.4537 2.2354 4.3357 4.1478 0.88202-1.9124 2.4308-3.3022 4.3356-4.1478-1.9276-0.85565-3.4813-2.3132-4.3356-4.2596-0.85434 1.9463-2.4081 3.4039-4.3357 4.2596zm12.385 10.723 0.2057-0.4714c0.3667-0.8405 1.0271-1.5098 1.8511-1.8758l0.6336-0.2816c0.3428-0.1523 0.3428-0.6504 0-0.8026l-0.5981-0.2658c-0.8453-0.3755-1.5175-1.0695-1.8779-1.9386l-0.2112-0.5094c-0.1473-0.355-0.6381-0.355-0.7853 0l-0.2112 0.5094c-0.3603 0.8691-1.0326 1.5631-1.8778 1.9386l-0.5983 0.2658c-0.3427 0.1522-0.3427 0.6503 0 0.8026l0.6337 0.2816c0.8241 0.366 1.4844 1.0353 1.8511 1.8758l0.2057 0.4714c0.1505 0.3451 0.6283 0.3451 0.7789 0zm-0.8557-3.0358 0.4687-0.4655 0.459 0.4655-0.459 0.4524z" fill="#efefef"/>
</g>
<path id="star" class="sprite" d="m7.6698 998.86 1.3886-5.255-4.0585-3.2468h5.1831l1.8193-5.4949 1.8147 5.4939h5.1829l-4.0615 3.2496 1.3838 5.2564-4.3249-3.0123z" fill="#efefef"/>
<path id="starred" class="sprite" d="m31.67 998.86 1.3886-5.255-4.0585-3.2468h5.1831l1.8193-5.4949 1.8147 5.4939h5.1829l-4.0615 3.2496 1.3838 5.2565-4.3249-3.0123z" fill="none" stroke="#efefef" stroke-linecap="square" stroke-linejoin="round"/>
<g id="g3" transform="translate(194.89 910.26)" clip-path="url(#clip0_3071_861)" stroke="#efefef">
<path id="path1-9" d="m1.8947 0.69727v2.3256h1.1013l-1.0184 13.953h-1.2671v2.3256h2.3684v-1.3953l9.4737-1.8605v0.9302h2.3684v-2.3255h-0.9237l1.8355-8.1396h1.4448v-2.3256h-2.3685v0.84883l-10.646-2.8605v-1.4767z" clip-rule="evenodd" fill="none" fill-rule="evenodd" stroke-width="1.2"/>
<path id="path2-1" d="m8.5972 6.8457v5.8915" stroke-width="1.0133"/>
<path id="path3-2" d="m11.598 9.791h-6" stroke-width="1.0133"/>
</g>
<path id="path1-0" d="m204.42 838.96c-2.9773 0-5.9659 1.9462-6.8182 5.85 0 2.3354 1.7046 7.0178 6.8182 12.467 5.1136-5.4608 6.8182-10.132 6.8182-12.467-0.8523-3.8924-3.8409-5.85-6.8182-5.85z" fill="none" stroke="#efefef" stroke-width="1.2"/>
<path id="path2-9" d="m204.42 843.98v6.0446" fill="none" stroke="#efefef" stroke-width="1.056"/>
<path id="path3-36" d="m207.42 847h-6" fill="none" stroke="#efefef" stroke-width="1.056"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 46 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 28 KiB

View file

@ -1,46 +1,46 @@
<svg id="svg2876" width="252" height="252" version="1.1" viewBox="0 0 66.675 66.675" xmlns="http://www.w3.org/2000/svg">
<svg id="svg2876" width="288" height="288" version="1.1" viewBox="0 0 76.2 76.2" xmlns="http://www.w3.org/2000/svg">
<defs id="defs2873">
<mask id="mask0_181_11916" x="2" y="2" width="15" height="15" maskUnits="userSpaceOnUse">
<path id="path1259" d="m16.04 2.3158h-14.035v14.035h14.035z" fill="#fff"/>
</mask>
</defs>
<g id="layer1">
<path id="edit" class="sprite" d="m6.35 2.1167-0.52917 0.52917 1.0583 1.0583 0.52917-0.52917zm-0.79375 0.79375-2.9104 2.9104 1.0583 1.0583 2.9104-2.9104zm-2.9104 2.9104-0.79375 1.8521 1.8521-0.79375z" fill="#f2f2f2" stroke="#999" stroke-width=".066146"/>
<path id="edit" class="sprite" d="m25.532 21.035-0.52917 0.52917 1.0583 1.0583 0.52917-0.52917zm-0.79375 0.79375-2.9104 2.9104 1.0583 1.0583 2.9104-2.9104zm-2.9104 2.9104-0.79375 1.8521 1.8521-0.79375z" fill="#f2f2f2" stroke="#999" stroke-width=".066146"/>
<path id="delete" class="sprite" d="m51.858 21.167v0.52917c-0.52917 0-1.0583 0-1.3229 0.52917v0.26458h3.7042v-0.26458c-0.26458-0.52917-0.79375-0.52917-1.3229-0.52917v-0.52917zm-1.3229 1.5875 0.79375 3.7042h2.1167l0.79375-3.7042z" fill="#f2f2f2" stroke="#999" stroke-width=".066146"/>
<g id="markers" class="sprite" transform="matrix(.26458 0 0 .26458 14.287 -226.05)" fill="#f2f2f2" stroke="#999" stroke-width=".25">
<g id="markers" class="sprite" transform="matrix(.26458 0 0 .26458 42.862 -226.05)" fill="#f2f2f2" stroke="#999" stroke-width=".25">
<path id="rect2985" d="m105.25 934.36c-3.1775 0-6.346 2.1278-7.2539 6.3794 0 2.551 1.8067 7.6679 7.2539 13.62 1.4637-1.5994 2.6694-3.1177 3.644-4.5613-1.4505-2.1639-2.415-4.0873-2.9628-5.7095-0.22599 0.041-0.44225 0.063-0.68112 0.063-2.0056 0-3.644-1.5346-3.644-3.413 0-1.8785 1.6384-3.3811 3.644-3.3811 0.51205 0 0.98854 0.076 1.4303 0.2552 0.64347-0.9222 1.4345-1.6571 2.3158-2.169-1.1444-0.7114-2.4463-1.0845-3.7461-1.0845z"/>
<path id="path3378" d="m111 934.36c-3.0625 0-6.125 2.1277-7 6.383 0 2.5532 1.75 7.6596 7 13.617 5.25-5.9574 7-11.064 7-13.617-0.875-4.2553-3.9375-6.383-7-6.383zm0 2.9788c1.933 0 3.5 1.5241 3.5 3.4042s-1.567 3.4043-3.5 3.4043c-1.933 0-3.5-1.5242-3.5-3.4043s1.567-3.4042 3.5-3.4042z"/>
</g>
<path id="marker" class="sprite" d="m42.862 11.112c-0.92604 0-1.8521 0.66146-2.1167 1.9844 0 0.79375 0.52917 2.3812 2.1167 4.2333 1.5875-1.8521 2.1167-3.4396 2.1167-4.2333-0.26458-1.3229-1.1906-1.9844-2.1167-1.9844zm0 0.92604c0.5845 0 1.0583 0.47383 1.0583 1.0583s-0.47383 1.0583-1.0583 1.0583c-0.5845 0-1.0583-0.47383-1.0583-1.0583s0.47383-1.0583 1.0583-1.0583z" fill="#f2f2f2" stroke="#999" stroke-width=".066146"/>
<path id="polyline" class="sprite" d="m30.956 11.112v1.0583h1.0583v-0.22324l2.6458 1.0583v0.47129l-1.8769 2.927h-0.76894v1.0583h1.0583v-1.0253l1.8769-2.9435h0.76895v-1.0583h-1.0583v0.28112l-2.6458-1.0583v-0.5457h-0.92604zm0.26458 0.26458h0.52917v0.52917h-0.52917zm3.7042 1.3229h0.52917v0.52917h-0.52917zm-2.6458 3.9688h0.52917v0.52917h-0.52917z" fill="#f2f2f2" stroke="#999" stroke-width=".064558"/>
<path id="polyogn" class="sprite" d="m21.696 11.377v1.0583h0.47956l-0.42168 3.7042h-0.58704v1.0583h1.0583v-0.55396l2.6458-0.1819v0.47128h1.0583v-1.0583h-0.43822l0.3638-2.1167h0.60358v-1.0583h-1.0583v0.34727l-2.6458-0.95083v-0.71935h-0.92604zm0.26458 0.26458h0.52917v0.52917h-0.52917zm3.7042 1.3229h0.52917v0.52917h-0.52917zm-0.52917 3.175h0.52917v0.52917h-0.52917zm-3.7042 0.26458h0.52917v0.52917h-0.52917z" fill="#f2f2f2" stroke="#999" stroke-width=".064558"/>
<g id="settings" class="sprite" transform="matrix(.064669 0 0 .064669 30.097 1.5356)" fill="#f2f2f2" stroke="#999" stroke-width=".99828">
<path id="marker" class="sprite" d="m71.437 11.245c-0.92604 0-1.8521 0.66146-2.1167 1.9844 0 0.79375 0.52917 2.3812 2.1167 4.2333 1.5875-1.8521 2.1167-3.4396 2.1167-4.2333-0.26458-1.3229-1.1906-1.9844-2.1167-1.9844zm0 0.92604c0.5845 0 1.0583 0.47383 1.0583 1.0583s-0.47383 1.0583-1.0583 1.0583c-0.5845 0-1.0583-0.47383-1.0583-1.0583s0.47383-1.0583 1.0583-1.0583z" fill="#f2f2f2" stroke="#999" stroke-width=".066146"/>
<path id="polyline" class="sprite" d="m69.056 58.737v1.0583h1.0583v-0.22324l2.6458 1.0583v0.47129l-1.8769 2.927h-0.76894v1.0583h1.0583v-1.0253l1.8769-2.9435h0.76895v-1.0583h-1.0583v0.28112l-2.6458-1.0583v-0.5457h-0.92604zm0.26458 0.26458h0.52917v0.52917h-0.52917zm3.7042 1.3229h0.52917v0.52917h-0.52917zm-2.6458 3.9688h0.52917v0.52917h-0.52917z" fill="#f2f2f2" stroke="#999" stroke-width=".064558"/>
<path id="polyogn" class="sprite" d="m69.321 39.952v1.0583h0.47956l-0.42168 3.7042h-0.58704v1.0583h1.0583v-0.55396l2.6458-0.1819v0.47128h1.0583v-1.0583h-0.43822l0.3638-2.1167h0.60358v-1.0583h-1.0583v0.34727l-2.6458-0.95083v-0.71935h-0.92604zm0.26458 0.26458h0.52917v0.52917h-0.52917zm3.7042 1.3229h0.52917v0.52917h-0.52917zm-0.52917 3.175h0.52917v0.52917h-0.52917zm-3.7042 0.26458h0.52917v0.52917h-0.52917z" fill="#f2f2f2" stroke="#999" stroke-width=".064558"/>
<g id="settings" class="sprite" transform="matrix(.064669 0 0 .064669 11.047 39.636)" fill="#f2f2f2" stroke="#999" stroke-width=".99828">
<path id="path27812" d="m98.762 43.652c-0.186-1.386-1.481-2.582-2.876-2.659l-6.172-0.337c-1.395-0.076-2.899-1.224-3.341-2.55l-2.28-5.518c-0.629-1.249-0.379-3.121 0.553-4.161l4.122-4.6c0.933-1.042 0.962-2.77 0.066-3.842l-8.813-8.813c-1.073-0.897-2.803-0.867-3.845 0.065l-4.598 4.122c-1.039 0.934-2.915 1.182-4.161 0.551l-5.521-2.279c-1.324-0.442-2.472-1.945-2.549-3.34l-0.337-6.17c-0.077-1.396-1.272-2.691-2.659-2.878 0 0-3.252-0.44-6.248-0.44-2.991 0-6.243 0.44-6.243 0.44-1.386 0.188-2.582 1.483-2.658 2.878l-0.338 6.17c-0.076 1.396-1.224 2.898-2.551 3.34l-5.517 2.279c-1.249 0.631-3.122 0.382-4.161-0.551l-4.601-4.122c-1.042-0.932-2.769-0.962-3.842-0.065l-8.813 8.813c-0.897 1.073-0.867 2.801 0.066 3.842l4.122 4.6c0.933 1.041 1.182 2.913 0.551 4.161l-2.279 5.518c-0.442 1.326-1.946 2.474-3.34 2.55l-6.17 0.337c-1.396 0.077-2.691 1.272-2.879 2.659 0 0-0.439 3.253-0.439 6.243s0.44 6.24 0.44 6.24c0.188 1.389 1.483 2.582 2.879 2.659l6.169 0.339c1.396 0.075 2.898 1.225 3.341 2.549l2.278 5.517c0.631 1.248 0.381 3.122-0.551 4.163l-4.122 4.598c-0.933 1.042-0.963 2.771-0.066 3.845l8.814 8.813c1.073 0.896 2.801 0.866 3.842-0.066l4.6-4.122c1.041-0.932 2.913-1.182 4.161-0.553l5.517 2.28c1.327 0.441 2.475 1.946 2.55 3.343l0.338 6.168c0.076 1.395 1.272 2.692 2.658 2.88 0 0 3.252 0.439 6.244 0.439 2.996 0 6.25-0.439 6.25-0.439 1.385-0.188 2.58-1.485 2.657-2.88l0.337-6.168c0.077-1.396 1.225-2.901 2.551-3.343l5.517-2.28c1.248-0.629 3.122-0.379 4.163 0.553l4.598 4.122c1.042 0.933 2.771 0.964 3.843 0.067l8.815-8.814c0.896-1.073 0.866-2.803-0.066-3.845l-4.122-4.598c-0.932-1.041-1.182-2.915-0.553-4.163l2.28-5.517c0.441-1.324 1.946-2.474 3.341-2.549l6.172-0.339c1.395-0.077 2.692-1.271 2.876-2.659 0 0 0.441-3.25 0.441-6.24s-0.441-6.243-0.441-6.243zm-48.658 18.709c-6.886 0-12.468-5.585-12.468-12.467 0-6.885 5.582-12.467 12.468-12.467 6.89 0 12.475 5.582 12.475 12.467-1e-3 6.882-5.586 12.467-12.475 12.467z" fill="#f2f2f2" stroke="#999" stroke-width=".99828"/>
</g>
<path id="import" class="sprite" d="m42.862 1.5875c-1.7535 0-3.175 1.4215-3.175 3.175 0 1.7535 1.4215 3.175 3.175 3.175s3.175-1.4215 3.175-3.175c0-1.7535-1.4215-3.175-3.175-3.175zm0 1.3229 1.8521 1.8521h-1.3229v1.5875h-1.0583v-1.5875h-1.3229z" fill="#f2f2f2" stroke="#999" stroke-width=".066146"/>
<g id="set-zoom" class="sprite" transform="translate(-.68348 -1.3229)" fill="#f2f2f2" stroke="#999">
<path id="import" class="sprite" d="m61.912 39.687c-1.7535 0-3.175 1.4215-3.175 3.175 0 1.7535 1.4215 3.175 3.175 3.175s3.175-1.4215 3.175-3.175c0-1.7535-1.4215-3.175-3.175-3.175zm0 1.3229 1.8521 1.8521h-1.3229v1.5875h-1.0583v-1.5875h-1.3229z" fill="#f2f2f2" stroke="#999" stroke-width=".066146"/>
<g id="set-zoom" class="sprite" transform="translate(36.946 8.477)" fill="#f2f2f2" stroke="#999">
<polygon id="polygon3044" transform="matrix(.0635 0 0 .0635 2.271 12.435)" points="28.965 82.305 11.27 100 0 88.737 17.702 71.042 9.297 62.644 37.37 62.644 37.37 90.703" stroke-width="1.0417"/>
<polygon id="polygon3048" transform="matrix(.0635 0 0 .0635 2.271 12.435)" points="62.644 37.357 90.71 37.37 82.298 28.958 100 11.263 88.743 0 71.042 17.708 62.644 9.31" stroke-width="1.0417"/>
<path id="path3052" d="m5.446 14.835c-0.42831 0-0.77552 0.34728-0.77552 0.77552 0 0.42913 0.34728 0.77642 0.77552 0.77642 0.42831 0 0.77597-0.34728 0.77597-0.77642 0-0.42831-0.34766-0.77552-0.77597-0.77552z" stroke-width=".066146"/>
</g>
<path id="permissions" class="sprite" d="m12.46 12.7c-0.89012-0.0021-1.6103 0.71168-1.6123 1.5875 2e-3 0.87776 0.72218 1.5861 1.6123 1.5875 0.59351-8.73e-4 1.1105-0.32112 1.3891-0.79375h0.65319l0.5209-0.50436 0.39688 0.38034 0.38034-0.37207 0.38861 0.38034 0.39688-0.38034 0.38861 0.38034 0.678-0.65319c0.09761-0.09927 0.10002-0.17419 0-0.27285l-0.55397-0.5457h-3.2411c-0.27712-0.47713-0.79976-0.79498-1.3973-0.79375zm-0.7028 1.1576c0.23396-0.0011 0.4199 0.18746 0.42168 0.42168-0.0017 0.23096-0.18761 0.41954-0.42168 0.42168-0.23793-0.0024-0.43214-0.19072-0.42995-0.42168-0.0022-0.23422 0.19202-0.4228 0.42995-0.42168z" fill="#f2f2f2" stroke="#999" stroke-width=".066146"/>
<path id="permissions" class="sprite" d="m60.085 50.8c-0.89012-0.0021-1.6103 0.71168-1.6123 1.5875 2e-3 0.87776 0.72218 1.5861 1.6123 1.5875 0.59351-8.73e-4 1.1105-0.32112 1.3891-0.79375h0.65319l0.5209-0.50436 0.39688 0.38034 0.38034-0.37207 0.38861 0.38034 0.39688-0.38034 0.38861 0.38034 0.678-0.65319c0.09761-0.09927 0.10002-0.17419 0-0.27285l-0.55397-0.5457h-3.2411c-0.27712-0.47713-0.79976-0.79498-1.3973-0.79375zm-0.7028 1.1576c0.23396-0.0011 0.4199 0.18746 0.42168 0.42168-0.0017 0.23096-0.18761 0.41954-0.42168 0.42168-0.23793-0.0024-0.43214-0.19072-0.42995-0.42168-0.0022-0.23422 0.19202-0.4228 0.42995-0.42168z" fill="#f2f2f2" stroke="#999" stroke-width=".066146"/>
<path id="search" class="sprite" d="m7.9375 26.143-1.7031-1.7035c0.22923-0.37814 0.36356-0.8213 0.36356-1.296 0-1.3847-1.1206-2.506-2.5052-2.5064-1.3837 5.29e-4 -2.5052 1.1218-2.5052 2.5062 0 1.3835 1.1218 2.5048 2.506 2.5048 0.47495 0 0.91739-0.13434 1.2955-0.36356l1.704 1.704zm-5.3941-2.9998c0.0014-0.8562 0.6939-1.5487 1.5499-1.5501 0.85572 0.0019 1.5484 0.6939 1.5499 1.5501-0.0017 0.85548-0.69414 1.5484-1.5499 1.5496-0.8562 0-1.5487-0.69414-1.5499-1.5496z" fill="#f2f2f2" stroke="#999" stroke-width=".066146"/>
<g id="delete-marker" class="sprite" transform="matrix(.26458 0 0 .26458 -14.439 -237.92)" fill="#f2f2f2" stroke="#999" stroke-width=".25">
<g id="delete-marker" class="sprite" transform="matrix(.26458 0 0 .26458 23.529 -228.26)" fill="#f2f2f2" stroke="#999" stroke-width=".25">
<path id="path3378-6" d="m178.57 979.22c-3.0625 0-6.125 2.1197-7 6.375 0 2.5532 1.75 7.6676 7 13.625 3.4166-3.877 5.3157-7.3755 6.25-10.062-1.3142-0.1622-2.497-0.7235-3.4062-1.5938-0.63462 0.8653-1.6677 1.4375-2.8438 1.4375-1.933 0-3.5-1.5261-3.5-3.4062s1.567-3.4063 3.5-3.4063c0.36776 0 0.72951 0.085 1.0625 0.1875 0.14352-1.0312 0.55799-1.956 1.1562-2.75-0.72276-0.259-1.4631-0.4062-2.2188-0.4062z"/>
<path id="path6764" d="m185.57 978.22c-2.7614 0-5 2.2386-5 5 0 2.7615 2.2386 5 5 5s5-2.2385 5-5c0-2.7614-2.2386-5-5-5zm-1.8182 2.2727 1.8182 1.8182 1.8182-1.8182 0.90909 0.9091-1.8182 1.8182 1.8182 1.8182-0.90909 0.9091-1.8182-1.8182-1.8182 1.8182-0.90909-0.9091 1.8182-1.8182-1.8182-1.8182z"/>
</g>
<g id="multipolygon" class="sprite" transform="translate(-.73309 -3.9687)" fill="#f2f2f2" stroke="#999" stroke-width=".066146">
<g id="multipolygon" class="sprite" transform="translate(65.967 15.081)" fill="#f2f2f2" stroke="#999" stroke-width=".066146">
<path id="rect4058-1-2" d="m2.8498 33.337v0.13229 0.79375 0.13229h0.13229 0.34727l-0.42168 3.7042h-0.45475-0.13229v0.13229 0.79375 0.13229h0.13229 0.79375 0.13229v-0.13229-0.42169s3.6292-2.8856 3.6298-2.8856h0.47129 0.13229v-0.13229-0.79375-0.13229h-0.13229-0.79375-0.13229v0.13229 0.21497l-2.6458-0.95086v-0.58703-0.13229h-0.13229-0.79375zm0.26458 0.26458h0.52917v0.52917h-0.52917zm3.7042 1.3229h0.52917v0.52917h-0.52917zm-4.2333 3.4396h0.52917v0.52917h-0.52917z" color="#000000" style="text-decoration-line:none;text-indent:0;text-transform:none"/>
<path id="rect4058-1-2-0" d="m4.9168 40.217h-0.92604-0.13229v0.13229 0.79375 0.13229h0.13229 0.79375 0.13229v-0.13229-0.42167l2.6458-0.1819v0.33898 0.13229h0.13229 0.79375 0.13229v-0.13229-0.79375-0.13229h-0.13229-0.30592l-0.64492-2.1167h0.47129 0.13229v-0.13229-0.79375-0.13229h-0.13229-0.79375-0.1819v0.79375s-2.0671 2.6458-2.1167 2.6458zm2.4309-3.175h0.52917v0.52917h-0.52917zm0.47956 3.175h0.52917v0.52917h-0.52917zm-3.7042 0.26458h0.52917v0.52917h-0.52917z" color="#000000" style="text-decoration-line:none;text-indent:0;text-transform:none"/>
</g>
<g id="multiline" fill="#f2f2f2" stroke="#999" stroke-width=".066146">
<g id="multiline" transform="translate(57.15 38.1)" fill="#f2f2f2" stroke="#999" stroke-width=".066146">
<path id="rect4058-9" d="m11.906 29.898v0.13229 0.79375 0.13229h0.13229 0.79375 0.13229v-0.13229-0.09096l2.6458 1.0583v0.35555 0.11576l0.28939 0.0164h0.63665 0.13229v-0.13229-0.79375-0.13229h-0.13229-0.79375-0.13229v0.13229 0.14883l-2.6458-1.0583v-0.41341-0.13229h-0.13229-0.79375zm0.26458 0.26458h0.52917v0.52917h-0.52917zm3.7042 1.3229h0.52917v0.52917h-0.52917z" color="#000000" style="text-decoration-line:none;text-indent:0;text-transform:none"/>
<path id="rect4058-9-5" d="m12.989 32.32v0.35555 0.11576l1.8769 2.927h0.63665 0.13229v0.13229 0.79375 0.13229h-0.13229-0.79375-0.13229v-0.13229-0.79375-0.09922l-1.8769-2.9435h-0.63665-0.13229v-0.13229-0.79375-0.13229h0.13229 0.79375 0.13229v0.13229 0.14883zm-0.26458-0.30591h-0.52917v0.52917h0.52917zm2.6458 3.9688h-0.52917v0.52917h0.52917z" color="#000000" style="text-decoration-line:none;text-indent:0;text-transform:none"/>
</g>
<path id="arrow-up" d="m33.329 32.279-2.1078 2.1167h4.2333z" fill="#f2f2f2" fill-rule="evenodd" stroke="#999" stroke-width=".046891"/>
<path id="arrow-down" d="m23.812 34.396 2.1167-2.1167h-4.2333z" fill="#f2f2f2" fill-rule="evenodd" stroke="#999" stroke-width=".046831"/>
<path id="datalayers" d="m11.394 23.743h4e-6c0.0102-0.0168 0.02435-0.0308 0.04124-0.04083l9e-6 -2.6e-5 0.35309-0.20972 2.4753 1.4703 0.01763 0.01048 0.01763-0.01048 2.4753-1.4703 0.35309 0.20972c0.05689 0.03382 0.07555 0.10711 0.04128 0.16374-0.01019 0.01679-0.02442 0.03085-0.0413 0.04091l-2.846 1.6904-2.846-1.6904h-3e-6c-0.05691-0.03382-0.07557-0.10716-0.04125-0.16379zm0 1.435h4e-6c0.0102-0.01682 0.02435-0.03083 0.04124-0.04086h9e-6l0.35309-0.20975 2.4753 1.4703 0.01763 0.01046 0.01763-0.01046 2.4753-1.4703 0.35309 0.20975c0.05689 0.03379 0.07555 0.10713 0.04125 0.16376l0.02915 0.01701-0.02912-0.01703c-0.01019 0.0168-0.02442 0.03083-0.0413 0.04091l-2.7049 1.6066c-0.08683 0.05158-0.19526 0.05158-0.28209 0l-2.7049-1.6067h-3e-6c-0.05691-0.03382-0.07557-0.10713-0.04125-0.16376zm0.04125-2.6909-0.01757 0.02848 0.01757-0.02848c-0.05691-0.0338-0.07557-0.10714-0.04125-0.16376l2e-6 -2e-6c0.01019-0.01679 0.02435-0.03081 0.04125-0.04086h2e-6l2.7049-1.6067c0.08683-0.05157 0.19526-0.05157 0.28209 0l2.7049 1.6067c0.05689 0.0338 0.07555 0.10714 0.04125 0.16377-0.01019 0.01681-0.02438 0.03082-0.04125 0.04086l-2.846 1.6905z" fill="#f2f2f2" stroke="#999" stroke-width=".066146"/>
<g id="tilelayers" transform="matrix(1.0025 0 0 1.0105 .44603 -.58487)" stroke-width=".99354">
<path id="datalayers" d="m39.969 52.318h4e-6c0.0102-0.0168 0.02435-0.0308 0.04124-0.04083l9e-6 -2.6e-5 0.35309-0.20972 2.4753 1.4703 0.01763 0.01048 0.01763-0.01048 2.4753-1.4703 0.35309 0.20972c0.05689 0.03382 0.07555 0.10711 0.04128 0.16374-0.01019 0.01679-0.02442 0.03085-0.0413 0.04091l-2.846 1.6904-2.846-1.6904h-3e-6c-0.05691-0.03382-0.07557-0.10716-0.04125-0.16379zm0 1.435h4e-6c0.0102-0.01682 0.02435-0.03083 0.04124-0.04086h9e-6l0.35309-0.20975 2.4753 1.4703 0.01763 0.01046 0.01763-0.01046 2.4753-1.4703 0.35309 0.20975c0.05689 0.03379 0.07555 0.10713 0.04125 0.16376l0.02915 0.01701-0.02912-0.01703c-0.01019 0.0168-0.02442 0.03083-0.0413 0.04091l-2.7049 1.6066c-0.08683 0.05158-0.19526 0.05158-0.28209 0l-2.7049-1.6067h-3e-6c-0.05691-0.03382-0.07557-0.10713-0.04125-0.16376zm0.04125-2.6909-0.01757 0.02848 0.01757-0.02848c-0.05691-0.0338-0.07557-0.10714-0.04125-0.16376l2e-6 -2e-6c0.01019-0.01679 0.02435-0.03081 0.04125-0.04086h2e-6l2.7049-1.6067c0.08683-0.05157 0.19526-0.05157 0.28209 0l2.7049 1.6067c0.05689 0.0338 0.07555 0.10714 0.04125 0.16377-0.01019 0.01681-0.02438 0.03082-0.04125 0.04086l-2.846 1.6905z" fill="#f2f2f2" stroke="#999" stroke-width=".066146"/>
<g id="tilelayers" transform="matrix(1.0025 0 0 1.0105 19.496 56.565)" stroke-width=".99354">
<path id="path1257" d="m25.978 7.8844h0.03307v-3.6125h-3.7796v3.6125h0.03307zm-3.9787-4.1591h4.2439c0.06157 0 0.12062 0.024461 0.16417 0.068001 0.04352 0.04354 0.068 0.10259 0.068 0.16417v4.2439c0 0.061569-0.02447 0.12062-0.068 0.16417-0.04355 0.04355-0.1026 0.067998-0.16417 0.067998h-4.2439c-0.06158 0-0.12063-0.024448-0.16417-0.067998-0.04354-0.04355-0.068-0.10261-0.068-0.16417v-4.2439c0-0.061577 0.02446-0.12063 0.068-0.16417 0.04354-0.04354 0.1026-0.068001 0.16417-0.068001z" fill="#f2f2f2" stroke="#999" stroke-width=".065719"/>
<g id="g1284" transform="matrix(.26458 0 0 .26458 20.108 2.1167)" mask="url(#mask0_181_11916)">
<path id="path1262" d="m16.04 2.3158h-14.035v14.035h14.035z" fill="#d5ecbe" stroke-width=".99231"/>
@ -57,9 +57,11 @@
</g>
<path id="path1286" d="m24.352 6.3088h0.03307v-3.6125h-3.7796v3.6125h0.03307zm-3.9787-4.1591h4.2439c0.06157 0 0.12062 0.024461 0.16417 0.068002s0.068 0.1026 0.068 0.16417v4.2439c0 0.061569-0.02445 0.12062-0.068 0.16417-0.04355 0.04355-0.1026 0.067998-0.16417 0.067998h-4.2439c-0.06158 0-0.12063-0.024447-0.16417-0.067998-0.04354-0.04355-0.068-0.10261-0.068-0.16417v-4.2439c0-0.061577 0.02446-0.12063 0.068-0.16417 0.04354-0.043541 0.1026-0.068002 0.16417-0.068002z" fill="#f2f2f2" stroke="#999" stroke-width=".065719"/>
</g>
<g id="info" transform="matrix(.33073 0 0 .33073 -11.906 -256.1)" stroke-width=".8">
<g id="info" transform="matrix(.33073 0 0 .33073 7.1437 -265.81)" stroke-width=".8">
<path id="path3762" d="m108 838.36a8 8 0 0 0-8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0-8-8zm0 2.5a1.5 1.5 0 0 1 1.5 1.5 1.5 1.5 0 0 1-1.5 1.5 1.5 1.5 0 0 1-1.5-1.5 1.5 1.5 0 0 1 1.5-1.5zm-1 4.5h2v6h-2z" fill="#f2f2f2" stroke="#999" stroke-width=".2"/>
</g>
<path id="downloadfile" d="m5.6444 59.434v1.035h1.0542zm1.1759 1.6123h-1.1759c-0.32472 0-0.58796-0.25845-0.58796-0.57727v-1.1545h-2.3519v5.1955h4.1157zm-4.1157-2.3091h3.0616l1.6421 1.6123v4.1605c0 0.31882-0.26324 0.57728-0.58796 0.57728h-4.1157c-0.32472 0-0.58796-0.25845-0.58796-0.57728v-5.1955c0-0.31882 0.26324-0.57727 0.58796-0.57727zm1.7639 3.9214v-1.3236h0.58796v1.3236l0.38009-0.37318 0.41575 0.4082-1.0898 1.07-1.0898-1.07 0.41575-0.4082z" fill="#f2f2f2" fill-rule="evenodd" stroke="#999" stroke-opacity=".5098" stroke-width=".066146"/>
<path id="path3014" d="m4.6307 2.6463c-1.5327 0-2.7792 1.2449-2.7792 2.7776 0 1.5327 1.2464 2.7771 2.7792 2.7771 1.5327 0 2.7776-1.2443 2.7776-2.7771 0-1.5327-1.2449-2.7776-2.7776-2.7776zm0 0.26355c1.3898-1e-7 2.5141 1.1243 2.5141 2.5141 0 1.3898-1.1243 2.5135-2.5141 2.5135-1.3898-1e-7 -2.5135-1.1238-2.5135-2.5135 1e-7 -1.3898 1.1238-2.5141 2.5135-2.5141zm-0.0041342 0.75034c-0.14358 0-0.29261 0.015464-0.447 0.046509-0.15439 0.030939-0.3253 0.078749-0.51211 0.14366v0.72864c0.15748-0.10213 0.30911-0.17843 0.45424-0.22944 0.14512-0.052458 0.28009-0.079065 0.40514-0.079065 0.13277 0 0.23595 0.03107 0.31006 0.093018 0.074105 0.06029 0.1111 0.14436 0.1111 0.2527-1.6e-6 0.071155-0.020845 0.1422-0.062528 0.21342-0.040142 0.071155-0.10424 0.14694-0.19224 0.22738l-0.14779 0.13488c-0.16365 0.15162-0.271 0.27666-0.32194 0.37569-0.050949 0.097508-0.076481 0.21007-0.076481 0.33693v0.11369h0.83612v-0.10439c-1.7e-6 -0.069638 0.016152-0.13347 0.048576-0.19069 0.03242-0.058808 0.1012-0.13607 0.20619-0.23203l0.14779-0.13229c0.14512-0.13769 0.24778-0.26586 0.30799-0.38499 0.060208-0.12069 0.090431-0.25714 0.090434-0.40876-2.5e-6 -0.29549-0.098491-0.51969-0.29611-0.67283-0.19762-0.15469-0.48474-0.23203-0.86145-0.23203zm-0.47956 2.7016v0.82579h0.83612v-0.82579h-0.83612z" fill="#f2f2f2" stroke="#999" stroke-width=".066146"/>
<path id="copy" d="m42.218 69.321v1.2884h1.4725v1.4725h1.2884v-2.7609zm-1.4725 1.4725v2.7609h2.7609v-2.7609z" fill="#f2f2f2" stroke-width=".26458" style="paint-order:fill markers stroke"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View file

@ -1,37 +1,37 @@
<svg id="svg6237" width="252" height="252" version="1.1" viewBox="0 0 66.675 66.675" xmlns="http://www.w3.org/2000/svg">
<svg id="svg6237" width="288" height="288" version="1.1" viewBox="0 0 76.2 76.2" xmlns="http://www.w3.org/2000/svg">
<defs id="defs6234">
<mask id="mask0_181_11898" x="2" y="2" width="15" height="15" maskUnits="userSpaceOnUse">
<path id="path2351" d="m16.04 2.3158h-14.035v14.035h14.035z" fill="#fff"/>
</mask>
</defs>
<g id="layer1">
<path id="edit" class="sprite" d="m6.6146 2.1167-0.52917 0.52917 1.0583 1.0583 0.52917-0.52917zm-0.79375 0.79375-2.9104 2.9104 1.0583 1.0583 2.9104-2.9104zm-2.9104 2.9104-0.79375 1.8521 1.8521-0.79375z" fill="#4d4d4d"/>
<path id="edit" class="sprite" d="m25.532 20.902-0.52917 0.52917 1.0583 1.0583 0.52917-0.52917zm-0.79375 0.79375-2.9104 2.9104 1.0583 1.0583 2.9104-2.9104zm-2.9104 2.9104-0.79375 1.8521 1.8521-0.79375z" fill="#4d4d4d"/>
<path id="delete" class="sprite" d="m51.858 21.167v0.52917c-0.52917 0-1.0583 0-1.3229 0.52917v0.26458h3.7042v-0.26458c-0.26458-0.52917-0.79375-0.52917-1.3229-0.52917v-0.52917zm-1.3229 1.5875 0.79375 3.7042h2.1167l0.79375-3.7042z" fill="#4d4d4d"/>
<g id="measure" class="sprite" transform="matrix(.26458 0 0 .26458 -11.112 -232.45)" fill="#4d4d4d">
<path id="rect4452" d="m48 965.36h3v8h2v-8h2v5h1v-5h2v5h1v-5h2v5h1v-5h2v5h1v-5h2v8h2v-8h3v11h-24z"/>
<text id="text4455" x="49.170559" y="964.36218" font-family="sans-serif" letter-spacing="0px" word-spacing="0px" style="line-height:0%" xml:space="preserve"><tspan id="tspan4457" x="49.170559" y="964.36218" fill="#4d4d4d" font-family="sans-serif" font-size="8px" font-weight="bold" style="line-height:1.25">0</tspan></text>
<text id="text4459" x="65.048965" y="964.36218" font-family="sans-serif" letter-spacing="0px" word-spacing="0px" style="line-height:0%" xml:space="preserve"><tspan id="tspan4461" x="65.048965" y="964.36218" fill="#4d4d4d" font-family="sans-serif" font-size="8px" font-weight="bold" style="line-height:1.25">1</tspan></text>
</g>
<g id="markers" class="sprite" transform="matrix(.26458 0 0 .26458 14.287 -226.05)" fill="#4d4d4d">
<path id="rect2985" d="m105.25 934.36c-3.1775 0-6.346 2.1278-7.2539 6.3794 0 2.551 1.8067 7.6679 7.2539 13.62 1.4637-1.5994 2.6694-3.1177 3.644-4.5613-1.4505-2.1639-2.415-4.0873-2.9628-5.7095-0.22599 0.041-0.44225 0.063-0.68112 0.063-2.0056 0-3.644-1.5346-3.644-3.413 0-1.8785 1.6384-3.3811 3.644-3.3811 0.51205 0 0.98854 0.076 1.4303 0.2552 0.64347-0.9222 1.4345-1.6571 2.3158-2.169-1.1444-0.7114-2.4463-1.0845-3.7461-1.0845z"/>
<path id="path3378" d="m111 934.36c-3.0625 0-6.125 2.1277-7 6.383 0 2.5532 1.75 7.6596 7 13.617 5.25-5.9574 7-11.064 7-13.617-0.875-4.2553-3.9375-6.383-7-6.383zm0 2.9788c1.933 0 3.5 1.5241 3.5 3.4042s-1.567 3.4043-3.5 3.4043c-1.933 0-3.5-1.5242-3.5-3.4043s1.567-3.4042 3.5-3.4042z"/>
<g id="markers" class="sprite" transform="matrix(.26458 0 0 .26458 42.862 -225.92)" fill="#4d4d4d">
<path id="rect2985" d="m105.25 934.36c-3.1775 0-6.6788 2.0702-7.2539 6.3794-0.33746 2.5286 1.8067 7.6679 7.2539 13.62 1.4637-1.5994 2.6694-3.1177 3.644-4.5613-1.4505-2.1639-2.415-4.0873-2.9628-5.7095-0.22599 0.041-0.44225 0.063-0.68112 0.063-2.0056 0-3.644-1.5346-3.644-3.413 0-1.8785 1.6384-3.3811 3.644-3.3811 0.51205 0 0.98854 0.076 1.4303 0.2552 0.64347-0.9222 1.4345-1.6571 2.3158-2.169-1.1444-0.7114-2.4463-1.0845-3.7461-1.0845z"/>
<path id="path3378" d="m111 934.36c-3.0625 0-6.4462 2.0741-7 6.383-0.32545 2.5324 1.75 7.6596 7 13.617 5.25-5.9574 7.3254-11.085 7-13.617-0.55376-4.3089-3.9375-6.383-7-6.383zm0 2.9788c1.933 0 3.5 1.5241 3.5 3.4042s-1.567 3.4043-3.5 3.4043c-1.933 0-3.5-1.5242-3.5-3.4043s1.567-3.4042 3.5-3.4042z"/>
</g>
<path id="marker" class="sprite" d="m42.862 11.112c-0.92604 0-1.8521 0.66146-2.1167 1.9844 0 0.79375 0.52917 2.3812 2.1167 4.2333 1.5875-1.8521 2.1167-3.4396 2.1167-4.2333-0.26458-1.3229-1.1906-1.9844-2.1167-1.9844zm0 0.92604c0.5845 0 1.0583 0.47383 1.0583 1.0583 0 0.5845-0.47383 1.0583-1.0583 1.0583-0.5845 0-1.0583-0.47383-1.0583-1.0583 0-0.5845 0.47383-1.0583 1.0583-1.0583z" fill="#4d4d4d"/>
<path id="polyline" class="sprite" d="m30.956 11.113v1.0583h1.0583v-0.22324l2.6458 1.0583v0.47129l-1.8769 2.927h-0.76894v1.0583h1.0583v-1.0253l1.8769-2.9435h0.76894v-1.0583h-1.0583v0.28112l-2.6458-1.0583v-0.5457h-0.92604zm0.26458 0.26458h0.52917v0.52917h-0.52917zm3.7042 1.3229h0.52917v0.52917h-0.52917zm-2.6458 3.9688h0.52917v0.52917h-0.52917z" fill="#4d4d4d" stroke-width=".26458"/>
<path id="polygon" class="sprite" d="m21.696 11.906v1.0583h0.47956l-0.42168 3.7042h-0.58704v1.0583h1.0583v-0.55396l2.6458-0.1819v0.47128h1.0583v-1.0583h-0.43822l0.3638-2.1167h0.60358v-1.0583h-1.0583v0.34726l-2.6458-0.95083v-0.71935h-0.92604zm0.26458 0.26458h0.52917v0.52917h-0.52917zm3.7042 1.3229h0.52917v0.52917h-0.52917zm-0.52917 3.175h0.52917v0.52917h-0.52917zm-3.7042 0.26458h0.52917v0.52917h-0.52917z" fill="#4d4d4d" stroke-width=".26458"/>
<g id="settings" class="sprite" transform="matrix(.064669 0 0 .064669 30.097 1.5356)" fill="#4d4d4d">
<path id="marker" class="sprite" d="m71.437 11.179c-0.92604 0-1.9493 0.64568-2.1167 1.9844-0.09845 0.78762 0.52917 2.3812 2.1167 4.2333 1.5875-1.8521 2.2151-3.4457 2.1167-4.2333-0.16734-1.3387-1.1906-1.9844-2.1167-1.9844zm0 0.92604c0.5845 0 1.0583 0.47383 1.0583 1.0583 0 0.5845-0.47383 1.0583-1.0583 1.0583-0.5845 0-1.0583-0.47383-1.0583-1.0583 0-0.5845 0.47383-1.0583 1.0583-1.0583z" fill="#4d4d4d"/>
<path id="polyline" class="sprite" d="m69.056 58.737v1.0583h1.0583v-0.22324l2.6458 1.0583v0.47129l-1.8769 2.927h-0.76894v1.0583h1.0583v-1.0253l1.8769-2.9435h0.76894v-1.0583h-1.0583v0.28112l-2.6458-1.0583v-0.5457h-0.92604zm0.26458 0.26458h0.52917v0.52917h-0.52917zm3.7042 1.3229h0.52917v0.52917h-0.52917zm-2.6458 3.9688h0.52917v0.52917h-0.52917z" fill="#4d4d4d" stroke-width=".26458"/>
<path id="polygon" class="sprite" d="m69.321 39.952v1.0583h0.47956l-0.42168 3.7042h-0.58704v1.0583h1.0583v-0.55396l2.6458-0.1819v0.47128h1.0583v-1.0583h-0.43822l0.3638-2.1167h0.60358v-1.0583h-1.0583v0.34726l-2.6458-0.95083v-0.71935h-0.92604zm0.26458 0.26458h0.52917v0.52917h-0.52917zm3.7042 1.3229h0.52917v0.52917h-0.52917zm-0.52917 3.175h0.52917v0.52917h-0.52917zm-3.7042 0.26458h0.52917v0.52917h-0.52917z" fill="#4d4d4d" stroke-width=".26458"/>
<g id="settings" class="sprite" transform="matrix(.064669 0 0 .064669 11.047 39.636)" fill="#4d4d4d">
<path id="path27812" d="m98.762 43.652c-0.186-1.386-1.481-2.582-2.876-2.659l-6.172-0.337c-1.395-0.076-2.899-1.224-3.341-2.55l-2.28-5.518c-0.629-1.249-0.379-3.121 0.553-4.161l4.122-4.6c0.933-1.042 0.962-2.77 0.066-3.842l-8.813-8.813c-1.073-0.897-2.803-0.867-3.845 0.065l-4.598 4.122c-1.039 0.934-2.915 1.182-4.161 0.551l-5.521-2.279c-1.324-0.442-2.472-1.945-2.549-3.34l-0.337-6.17c-0.077-1.396-1.272-2.691-2.659-2.878 0 0-3.252-0.44-6.248-0.44-2.991 0-6.243 0.44-6.243 0.44-1.386 0.188-2.582 1.483-2.658 2.878l-0.338 6.17c-0.076 1.396-1.224 2.898-2.551 3.34l-5.517 2.279c-1.249 0.631-3.122 0.382-4.161-0.551l-4.601-4.122c-1.042-0.932-2.769-0.962-3.842-0.065l-8.813 8.813c-0.897 1.073-0.867 2.801 0.066 3.842l4.122 4.6c0.933 1.041 1.182 2.913 0.551 4.161l-2.279 5.518c-0.442 1.326-1.946 2.474-3.34 2.55l-6.17 0.337c-1.396 0.077-2.691 1.272-2.879 2.659 0 0-0.439 3.253-0.439 6.243s0.44 6.24 0.44 6.24c0.188 1.389 1.483 2.582 2.879 2.659l6.169 0.339c1.396 0.075 2.898 1.225 3.341 2.549l2.278 5.517c0.631 1.248 0.381 3.122-0.551 4.163l-4.122 4.598c-0.933 1.042-0.963 2.771-0.066 3.845l8.814 8.813c1.073 0.896 2.801 0.866 3.842-0.066l4.6-4.122c1.041-0.932 2.913-1.182 4.161-0.553l5.517 2.28c1.327 0.441 2.475 1.946 2.55 3.343l0.338 6.168c0.076 1.395 1.272 2.692 2.658 2.88 0 0 3.252 0.439 6.244 0.439 2.996 0 6.25-0.439 6.25-0.439 1.385-0.188 2.58-1.485 2.657-2.88l0.337-6.168c0.077-1.396 1.225-2.901 2.551-3.343l5.517-2.28c1.248-0.629 3.122-0.379 4.163 0.553l4.598 4.122c1.042 0.933 2.771 0.964 3.843 0.067l8.815-8.814c0.896-1.073 0.866-2.803-0.066-3.845l-4.122-4.598c-0.932-1.041-1.182-2.915-0.553-4.163l2.28-5.517c0.441-1.324 1.946-2.474 3.341-2.549l6.172-0.339c1.395-0.077 2.692-1.271 2.876-2.659 0 0 0.441-3.25 0.441-6.24s-0.441-6.243-0.441-6.243zm-48.658 18.709c-6.886 0-12.468-5.585-12.468-12.467 0-6.885 5.582-12.467 12.468-12.467 6.89 0 12.475 5.582 12.475 12.467-1e-3 6.882-5.586 12.467-12.475 12.467z" fill="#4d4d4d"/>
</g>
<path id="import" class="sprite" d="m42.862 1.5875c-1.7535 0-3.175 1.4215-3.175 3.175 0 1.7535 1.4215 3.175 3.175 3.175 1.7535 0 3.175-1.4215 3.175-3.175 0-1.7535-1.4215-3.175-3.175-3.175zm0 1.3229 1.8521 1.8521h-1.3229v1.5875h-1.0583v-1.5875h-1.3229z" fill="#464646"/>
<path id="import" class="sprite" d="m61.912 39.688c-1.7535 0-3.175 1.4215-3.175 3.175 0 1.7535 1.4215 3.175 3.175 3.175 1.7535 0 3.175-1.4215 3.175-3.175 0-1.7535-1.4215-3.175-3.175-3.175zm0 1.3229 1.8521 1.8521h-1.3229v1.5875h-1.0583v-1.5875h-1.3229z" fill="#464646"/>
<g id="set-zoom" class="sprite" transform="matrix(.26458 0 0 .26458 -.52917 -227.11)" fill="#4d4d4d">
<polygon id="polygon3044" transform="matrix(.24 0 0 .24 8 900.36)" points="0 88.737 17.702 71.042 9.297 62.644 37.37 62.644 37.37 90.703 28.965 82.305 11.27 100"/>
<polygon id="polygon3048" transform="matrix(.24 0 0 .24 8 900.36)" points="82.298 28.958 100 11.263 88.743 0 71.042 17.708 62.644 9.31 62.644 37.357 90.71 37.37"/>
<polygon id="polygon3044" transform="matrix(.24 0 0 .24 8 900.36)" points="9.297 62.644 37.37 62.644 37.37 90.703 28.965 82.305 11.27 100 0 88.737 17.702 71.042"/>
<polygon id="polygon3048" transform="matrix(.24 0 0 .24 8 900.36)" points="88.743 0 71.042 17.708 62.644 9.31 62.644 37.357 90.71 37.37 82.298 28.958 100 11.263"/>
<path id="path3052" d="m20 909.43c-1.6188 0-2.9311 1.3126-2.9311 2.9311 0 1.6219 1.3126 2.9345 2.9311 2.9345 1.6188 0 2.9328-1.3126 2.9328-2.9345 0-1.6188-1.314-2.9311-2.9328-2.9311z"/>
</g>
<path id="permissions" class="sprite" d="m12.46 12.7c-0.89012-0.0021-1.6103 0.71168-1.6123 1.5875 2e-3 0.87776 0.72218 1.5861 1.6123 1.5875 0.59351-8.73e-4 1.1105-0.32112 1.3891-0.79375h0.65319l0.5209-0.50436 0.39688 0.38034 0.38034-0.37207 0.38861 0.38034 0.39688-0.38034 0.38861 0.38034 0.67799-0.65319c0.09761-0.09927 0.10002-0.17419 0-0.27285l-0.55397-0.5457h-3.2411c-0.27712-0.47713-0.79976-0.79498-1.3973-0.79375zm-0.7028 1.1576c0.23396-0.0011 0.4199 0.18746 0.42168 0.42168-0.0017 0.23096-0.18761 0.41954-0.42168 0.42168-0.23793-0.0024-0.43214-0.19072-0.42995-0.42168-0.0022-0.23422 0.19202-0.4228 0.42995-0.42168z" fill="#4d4d4d" stroke-width=".26458"/>
<polygon id="home" class="sprite" transform="matrix(.0635 0 0 .0635 30.162 20.902)" points="43.75 87.5 43.75 62.5 56.25 62.5 56.25 87.5 87.5 87.5 87.5 50 100 50 50 0 0 50 12.5 50 12.5 87.5" fill="#4d4d4d"/>
<path id="permissions" class="sprite" d="m60.085 50.8c-0.89012-0.0021-1.6103 0.71168-1.6123 1.5875 2e-3 0.87776 0.72218 1.5861 1.6123 1.5875 0.59351-8.73e-4 1.1105-0.32112 1.3891-0.79375h0.65319l0.5209-0.50436 0.39688 0.38034 0.38034-0.37207 0.38861 0.38034 0.39688-0.38034 0.38861 0.38034 0.67799-0.65319c0.09761-0.09927 0.10002-0.17419 0-0.27285l-0.55397-0.5457h-3.2411c-0.27712-0.47713-0.79976-0.79498-1.3973-0.79375zm-0.7028 1.1576c0.23396-0.0011 0.4199 0.18746 0.42168 0.42168-0.0017 0.23096-0.18761 0.41954-0.42168 0.42168-0.23793-0.0024-0.43214-0.19072-0.42995-0.42168-0.0022-0.23422 0.19202-0.4228 0.42995-0.42168z" fill="#4d4d4d" stroke-width=".26458"/>
<polygon id="home" class="sprite" transform="matrix(.0635 0 0 .0635 30.162 20.902)" points="12.5 50 12.5 87.5 43.75 87.5 43.75 62.5 56.25 62.5 56.25 87.5 87.5 87.5 87.5 50 100 50 50 0 0 50" fill="#4d4d4d"/>
<path id="geolocation" class="sprite" d="m7.9375 33.338c0-0.11924-0.0078-0.23671-0.02082-0.35278h-0.35666c-0.1591-1.276-1.1688-2.2856-2.4448-2.4451v-0.35631c-0.11606-0.01304-0.23354-0.02082-0.35278-0.02082s-0.23671 0.0078-0.35278 0.02082v0.35666c-1.276 0.1591-2.2856 1.1688-2.4451 2.4448h-0.3563c-0.01305 0.11606-0.02081 0.23354-0.02081 0.35278 0 0.11924 0.0078 0.23671 0.02081 0.35278h0.35666c0.1591 1.276 1.1688 2.2857 2.4448 2.4451v0.35666c0.11606 0.0127 0.23354 0.02037 0.35278 0.02037s0.23671-0.0077 0.35278-0.0209v-0.35666c1.2756-0.15944 2.2856-1.1688 2.4451-2.4448h0.35666c0.0127-0.11571 0.02046-0.23319 0.02046-0.35278zm-2.8222 2.0849v-0.32104c0-0.19508-0.15804-0.35278-0.35278-0.35278-0.19473 0-0.35278 0.15769-0.35278 0.35278v0.32104c-0.88547-0.14888-1.5829-0.84597-1.7318-1.7318l0.32068-2.65e-4c0.19509 0 0.35278-0.15805 0.35278-0.35278s-0.15769-0.35278-0.35278-0.35278h-0.32103c0.14922-0.88547 0.84667-1.5829 1.7321-1.7321v0.32103c0 0.19473 0.15804 0.35278 0.35278 0.35278 0.19473 0 0.35278-0.15804 0.35278-0.35278v-0.32103c0.88582 0.14887 1.5833 0.84632 1.7321 1.7321h-0.32103c-0.19509 0-0.35278 0.15804-0.35278 0.35278s0.15769 0.35278 0.35278 0.35278l0.32103 2.65e-4c-0.14922 0.88582-0.84631 1.5829-1.7321 1.7318z" fill="#4d4d4d" stroke-width=".26458"/>
<g id="share" class="sprite" transform="matrix(.26458 0 0 .26458 -2.6458 -229.23)">
<g id="share" class="sprite" transform="matrix(.26458 0 0 .26458 -21.696 -210.18)">
<circle id="path4309" cx="100" cy="992.36" r="11" fill="none" stroke="#464646" stroke-width="2"/>
<circle id="path4819" transform="rotate(248.18)" cx="-963.89" cy="-276.04" r="2.5" fill="#464646"/>
<circle id="path4819-2" transform="rotate(248.18)" cx="-956.38" cy="-281.16" r="2.5" fill="#464646"/>
@ -46,15 +46,15 @@
</g>
<path id="path5801" d="m36.287 38.821c-0.45737 0.45258-0.51256 0.50483-0.93876 0.93452l1.3111-0.30964c0.03951-0.17777 0.08574-0.39794 0.09827-0.44962-0.20697-7e-3 -0.32498-0.0729-0.47056-0.17526zm1.4165-0.51574c-0.04859 0.57856-0.30047 0.62169-0.77774 0.69763-0.034 0.15229-0.05699 0.25818-0.0969 0.43779l1.224 0.30398c0.16421-0.70158 0.29613-1.2699 0.29325-1.2731-0.0043-0.0046-0.32763-0.08748-0.6426-0.16631zm-0.58777-0.14159c-0.0016 0.0027-0.06999 0.30471-0.1581 0.6989 0.55906-0.08996 0.57597-0.27099 0.59287-0.59497-0.2294-0.05691-0.43229-0.10608-0.43477-0.10392zm-0.16448-0.0092c-0.13598 0.01159-0.20407 0.02561-0.35317 0.06753 0.04792 0.09125 0.07023 0.27883-0.20004 0.49792 0.14156 0.08791 0.26526 0.12201 0.39001 0.13735 0.11436-0.5324 0.17296-0.61535 0.1632-0.70284zm-2.6775-0.0065-0.23715 0.94314 0.8058-0.79894c-0.18084-0.04602-0.34599-0.08797-0.56865-0.1442zm5.6125-0.03249c-0.75018 0.19483-1.3621 0.35585-1.3642 0.35855-0.0019 0.0027-0.13728 0.57465-0.30345 1.2809l1.3375-0.33256zm-2.1828-0.19747v0.21176c0.2765 0.0699 0.56006 0.13964 0.61837 0.14029 0 0-0.03096-0.12652-0.06757-0.2832h-0.0026c-0.23872 0.0062-0.32188-0.0081-0.54825-0.06885zm-0.67957-0.31568-0.0026 0.0027 0.09817 0.38583c0.02307-0.0027 0.215 0.04675 0.43095 0.10131 2.4e-5 -0.0864 1.64e-4 -0.15711 0.0013-0.21952-0.18513-0.06365-0.36302-0.15391-0.52785-0.27023zm-2.8662-0.12471 0.13133 0.50016s0.36398 0.08961 0.69742 0.17148l0.03825-0.03769c-0.49456-0.17868-0.50142-0.55268-0.867-0.63396zm5.5794-0.11172c-0.49436 0.4184-0.75886 0.52502-1.3145 0.61446 0.03396 0.13897 0.06369 0.25816 0.07268 0.28581 0.0076 0.02345 0.46733-0.08354 1.3885-0.32089zm-3.2079-0.25462c-0.06109-0.08511-0.11524-0.17367-0.16192-0.26503-0.35986 0.0798-0.95298 0.22249-0.97027 0.23775-0.0073 0.0065 0.04546 0.24465 0.11857 0.54044 0.17884-0.16801 0.38427-0.13773 0.52049-0.04456m0.50728 0.49614c0.125-0.04259 0.29706-0.07581 0.40659-0.08915-0.01373-0.10039-0.0232-0.16366-0.06247-0.26762m-2.9108-0.98342 0.13133 0.52874c0.66252 0.256 0.71188 0.76848 1.0672 0.69763l0.22822-0.22605c-0.07081-0.29894-0.15348-0.61368-0.1734-0.63396-0.0046-0.0046-1.2533-0.36637-1.2533-0.36637zm2.1866-1.1406-0.4437 0.11172c-0.09333 0.39866-0.21902 0.89726-0.29452 1.1926 0.36387-0.10263 0.46268-0.12417 0.8721-0.20785-0.14371-0.34911-0.18889-0.72844-0.13387-1.0964zm-1.8742-0.28581-0.31365 1.2497c0.48303 0.13938 0.76356 0.21858 1.252 0.33515 0.10314-0.32458 0.21945-0.68316 0.30345-1.1978-0.32576-0.10325-0.52105-0.16679-1.2418-0.38712zm2.3511-1.4147-1.2202 0.30269c0.17212 0.76144 0.29818 1.3051 0.306 1.3134 0.0075 0.0078 0.22525-0.03952 0.47302-0.09743 0.11655-0.47002 0.21792-0.6329 0.56355-0.98989-0.03709-0.16213-0.07823-0.3396-0.1224-0.52874zm0.1632-0.01698c0.05038 0.21499 0.05503 0.2305 0.09945 0.41961 0.14044-0.11506 0.29321-0.20863 0.45262-0.2819zm-2.8522 0 0.31875 1.2497c0.7 0.21006 1.2587 0.37524 1.2622 0.37154 0.0038-4e-3 -0.12334-0.58605-0.28305-1.3095zm5.6049-0.01159-0.49342 0.1221c0.22714 0.09573 0.44034 0.23324 0.62857 0.41182zm-2.7174 2.3343c0.10949 0.68124 0.84234 1.1934 1.6065 1.1085 0.28504-0.6862 0.48458-0.65293 0.59454-1.3403 0.0044-0.61101-0.78411-0.23411-1.1425-0.2147-0.61562-0.01995-0.58498-0.75842-0.65178-0.86766-0.19007 0.14237-0.52182 0.58737-0.40673 1.3141zm0.70296-1.5496c0.20064 0.64566 0.24369 0.86631 0.88357 0.61317 0.48132-0.14218 0.86499 0.05125 0.9273 0.28328 0.10209 0.34596-0.06402 0.85291-0.5091 1.642 0.69715-0.37944 0.91768-1.2092 0.66726-1.846-0.34115-0.72645-1.1354-1.0878-1.969-0.69246z"/>
</g>
<g id="delete-marker" class="sprite" transform="matrix(.26458 0 0 .26458 -4.9137 -228.13)" fill="#4d4d4d">
<path id="path3378-6" d="m178.57 979.22c-3.0625 0-6.125 2.1197-7 6.375 0 2.5532 1.75 7.6676 7 13.625 3.4166-3.877 5.3157-7.3755 6.25-10.062-1.3142-0.1622-2.497-0.7235-3.4062-1.5938-0.63462 0.8653-1.6677 1.4375-2.8438 1.4375-1.933 0-3.5-1.5261-3.5-3.4062s1.567-3.4063 3.5-3.4063c0.36776 0 0.72951 0.085 1.0625 0.1875 0.14352-1.0312 0.55799-1.956 1.1562-2.75-0.72276-0.259-1.4631-0.4062-2.2188-0.4062z"/>
<g id="delete-marker" class="sprite" transform="matrix(.26458 0 0 .26458 23.529 -228.26)" fill="#4d4d4d">
<path id="path3378-6" d="m178.57 979.22c-3.0625 0-6.4462 2.0661-7 6.375-0.32545 2.5324 1.75 7.6676 7 13.625 3.4166-3.877 5.3157-7.3755 6.25-10.062-1.3142-0.1622-2.497-0.7235-3.4062-1.5938-0.63462 0.8653-1.6677 1.4375-2.8438 1.4375-1.933 0-3.5-1.5261-3.5-3.4062s1.567-3.4063 3.5-3.4063c0.36776 0 0.72951 0.085 1.0625 0.1875 0.14352-1.0312 0.55799-1.956 1.1562-2.75-0.72276-0.259-1.4631-0.4062-2.2188-0.4062z"/>
<path id="path6764" d="m185.57 978.22c-2.7614 0-5 2.2386-5 5 0 2.7615 2.2386 5 5 5s5-2.2385 5-5c0-2.7614-2.2386-5-5-5zm-1.8182 2.2727 1.8182 1.8182 1.8182-1.8182 0.90909 0.9091-1.8182 1.8182 1.8182 1.8182-0.90909 0.9091-1.8182-1.8182-1.8182 1.8182-0.90909-0.9091 1.8182-1.8182-1.8182-1.8182z"/>
</g>
<g id="multipolygon" class="sprite" transform="matrix(.26458 0 0 .26458 -.57878 -230.28)" fill="#4d4d4d">
<g id="multipolygon" class="sprite" transform="matrix(.26458 0 0 .26458 66.121 -220.76)" fill="#4d4d4d">
<path id="rect4058-1-2" d="m10.188 1017.4v0.5 3 0.5h0.5 1.3125l-1.5938 14h-1.7188-0.5v0.5 3 0.5h0.5 3 0.5v-0.5-1.5938s13.717-10.906 13.719-10.906h1.7812 0.5v-0.5-3-0.5h-0.5-3-0.5v0.5 0.8125l-10-3.5938v-2.2187-0.5h-0.5-3zm1 1h2v2h-2zm14 5h2v2h-2zm-16 13h2v2h-2z" color="#000000" style="text-decoration-line:none;text-indent:0;text-transform:none"/>
<path id="rect4058-1-2-0" d="m18 1043.4h-3.5-0.5v0.5 3 0.5h0.5 3 0.5v-0.5-1.5937l10-0.6875v1.2812 0.5h0.5 3 0.5v-0.5-3-0.5h-0.5-1.1562l-2.4375-8h1.7812 0.5v-0.5-3-0.5h-0.5-3-0.6875v3s-7.8125 10-8 10zm9.1875-12h2v2h-2zm1.8125 12h2v2h-2zm-14 1h2v2h-2z" color="#000000" style="text-decoration-line:none;text-indent:0;text-transform:none"/>
</g>
<g id="multiline" class="sprite" transform="matrix(.26458 0 0 .26458 -1.5875 -230.81)" fill="#4d4d4d">
<g id="multiline" class="sprite" transform="matrix(.26458 0 0 .26458 55.562 -201.97)" fill="#4d4d4d">
<path id="rect4058-9" d="m51 1020.4v0.5 3 0.5h0.5 3 0.5v-0.5-0.3438l10 4v1.3438 0.4375l1.0938 0.062h2.4062 0.5v-0.5-3-0.5h-0.5-3-0.5v0.5 0.5625l-10-4v-1.5625-0.5h-0.5-3zm1 1h2v2h-2zm14 5h2v2h-2z" color="#000000" style="text-decoration-line:none;text-indent:0;text-transform:none"/>
<path id="rect4058-9-5" d="m55.094 1030.5v1.3438 0.4375l7.0938 11.062h2.4062 0.5v0.5 3 0.5h-0.5-3-0.5v-0.5-3-0.375l-7.0938-11.125h-2.4062-0.5v-0.5-3-0.5h0.5 3 0.5v0.5 0.5625zm-1-1.1562h-2v2h2zm10 15h-2v2h2z" color="#000000" style="text-decoration-line:none;text-indent:0;text-transform:none"/>
</g>
@ -64,8 +64,8 @@
</g>
<path id="star" class="sprite" d="m31.537 45.772 0.57736-2.1849-1.6874-1.3499h2.155l0.75644-2.2846 0.7545 2.2842h2.1549l-1.6887 1.3511 0.57537 2.1855-1.7982-1.2524z" fill="#464646"/>
<path id="starred" class="sprite" d="m40.742 45.772 0.57736-2.1849-1.6874-1.3499h2.155l0.75644-2.2846 0.7545 2.2842h2.1549l-1.6887 1.3511 0.57537 2.1855-1.7982-1.2524z" fill="none" stroke="#464646" stroke-linecap="square" stroke-linejoin="round" stroke-width=".26458"/>
<path id="datalayers" d="m16.757 23.458 0.36718 0.21791c0.07232 0.04294 0.09577 0.13573 0.0524 0.20728-0.01292 0.02122-0.03092 0.03903-0.0524 0.0518l-2.8363 1.6832-2.8362-1.6832c-0.07233-0.04294-0.09579-0.1357-0.05238-0.20727 0.0129-0.02125 0.03089-0.03905 0.05238-0.05181l0.36718-0.21791 2.4691 1.4653zm0 1.42 0.36718 0.21791c0.07232 0.04294 0.09577 0.13573 0.0524 0.20727-0.01292 0.02125-0.03092 0.03903-0.0524 0.05181l-2.6791 1.59c-0.09674 0.05739-0.21758 0.05739-0.31432 0l-2.6791-1.59c-0.07233-0.04292-0.09579-0.1357-0.05238-0.20725 0.0129-0.02127 0.03089-0.03908 0.05238-0.05183l0.36718-0.21791 2.4691 1.4653zm-2.3119-4.1969 2.6791 1.59c0.07232 0.04292 0.09577 0.13572 0.0524 0.20726-0.01292 0.02126-0.03092 0.03906-0.0524 0.05182l-2.8363 1.6832-2.8362-1.6832c-0.07233-0.04292-0.09579-0.13572-0.05238-0.20726 0.0129-0.02126 0.03089-0.03906 0.05238-0.05182l2.6791-1.59c0.09674-0.05741 0.21758-0.05741 0.31432 0z" fill="#4d4d4d" stroke-width=".26458"/>
<g id="tilelayers" transform="translate(0 -.26458)">
<path id="datalayers" d="m45.332 52.033 0.36718 0.21791c0.07232 0.04294 0.09577 0.13573 0.0524 0.20728-0.01292 0.02122-0.03092 0.03903-0.0524 0.0518l-2.8363 1.6832-2.8362-1.6832c-0.07233-0.04294-0.09579-0.1357-0.05238-0.20727 0.0129-0.02125 0.03089-0.03905 0.05238-0.05181l0.36718-0.21791 2.4691 1.4653zm0 1.42 0.36718 0.21791c0.07232 0.04294 0.09577 0.13573 0.0524 0.20727-0.01292 0.02125-0.03092 0.03903-0.0524 0.05181l-2.6791 1.59c-0.09674 0.05739-0.21758 0.05739-0.31432 0l-2.6791-1.59c-0.07233-0.04292-0.09579-0.1357-0.05238-0.20725 0.0129-0.02127 0.03089-0.03908 0.05238-0.05183l0.36718-0.21791 2.4691 1.4653zm-2.3119-4.1969 2.6791 1.59c0.07232 0.04292 0.09577 0.13572 0.0524 0.20726-0.01292 0.02126-0.03092 0.03906-0.0524 0.05182l-2.8363 1.6832-2.8362-1.6832c-0.07233-0.04292-0.09579-0.13572-0.05238-0.20726 0.0129-0.02126 0.03089-0.03906 0.05238-0.05182l2.6791-1.59c0.09674-0.05741 0.21758-0.05741 0.31432 0z" fill="#4d4d4d" stroke-width=".26458"/>
<g id="tilelayers" transform="translate(19.05 56.885)">
<path id="path2349" d="m26.773 3.4277h-4.2439c-0.07035 0-0.13781 0.027945-0.18756 0.077687-0.04974 0.049744-0.07769 0.11721-0.07769 0.18756v4.2439c0 0.070353 0.02794 0.13782 0.07769 0.18756 0.04974 0.049742 0.11721 0.077682 0.18756 0.077682h4.2439c0.07035 0 0.13782-0.02794 0.18756-0.077682 0.04974-0.049742 0.07768-0.11721 0.07768-0.18756v-4.2439c0-0.070347-0.02794-0.13781-0.07768-0.18756-0.04974-0.049742-0.11721-0.077687-0.18756-0.077687zm-0.26524 4.1591h-3.7135v-3.5463h3.7135z" fill="#464646" stroke-width=".26458"/>
<g id="g2376" transform="matrix(.26458 0 0 .26458 20.638 1.8521)" mask="url(#mask0_181_11898)">
<path id="path2354" d="m16.04 2.3158h-14.035v14.035h14.035z" fill="#d5ecbe"/>
@ -82,9 +82,21 @@
</g>
<path id="path2378" d="m25.147 1.8521h-4.2439c-0.07035 0-0.13782 0.027946-0.18756 0.077689-0.04974 0.049744-0.07769 0.11721-0.07769 0.18756v4.2439c0 0.070353 0.02795 0.13782 0.07769 0.18756 0.04974 0.049742 0.11721 0.077682 0.18756 0.077682h4.2439c0.07035 0 0.13782-0.02794 0.18756-0.077682 0.04974-0.049742 0.07768-0.11721 0.07768-0.18756v-4.2439c0-0.070349-0.02794-0.13782-0.07768-0.18756-0.04974-0.049743-0.11721-0.077689-0.18756-0.077689zm-0.26524 4.1591h-3.7135v-3.5463h3.7135z" fill="#464646" stroke-width=".26458"/>
</g>
<g id="info" transform="matrix(.33073 0 0 .33073 -11.906 -256.1)" fill="#4d4d4d" stroke-width=".8">
<g id="info" transform="matrix(.33073 0 0 .33073 7.1437 -265.63)" fill="#4d4d4d" stroke-width=".8">
<path id="path3762" d="m108 838.36a8 8 0 0 0-8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0-8-8zm0 2.5a1.5 1.5 0 0 1 1.5 1.5 1.5 1.5 0 0 1-1.5 1.5 1.5 1.5 0 0 1-1.5-1.5 1.5 1.5 0 0 1 1.5-1.5zm-1 4.5h2v6h-2z" fill="#4d4d4d"/>
</g>
<path id="downloadfile" d="m5.6444 59.434v1.035h1.0542zm1.1759 1.6123h-1.1759c-0.32472 0-0.58796-0.25845-0.58796-0.57727v-1.1545h-2.3519v5.1955h4.1157zm-4.1157-2.3091h3.0616l1.6421 1.6123v4.1605c0 0.31882-0.26324 0.57728-0.58796 0.57728h-4.1157c-0.32472 0-0.58796-0.25845-0.58796-0.57728v-5.1955c0-0.31882 0.26324-0.57727 0.58796-0.57727zm1.7639 3.9214v-1.3236h0.58796v1.3236l0.38009-0.37318 0.41575 0.4082-1.0898 1.07-1.0898-1.07 0.41575-0.4082z" fill="#464646" fill-rule="evenodd" stroke-width=".19242"/>
<g id="set-zoom-6" class="sprite" transform="translate(37.659 8.0698)" fill="#4d4d4d" stroke="#999">
<polygon id="polygon3044-7" transform="matrix(.0635 0 0 .0635 2.271 12.435)" points="37.37 62.644 37.37 90.703 28.965 82.305 11.27 100 0 88.737 17.702 71.042 9.297 62.644" stroke-width="1.0417"/>
<polygon id="polygon3048-5" transform="matrix(.0635 0 0 .0635 2.271 12.435)" points="71.042 17.708 62.644 9.31 62.644 37.357 90.71 37.37 82.298 28.958 100 11.263 88.743 0" stroke-width="1.0417"/>
<path id="path3052-3" d="m5.446 14.835c-0.42831 0-0.77552 0.34728-0.77552 0.77552 0 0.42913 0.34728 0.77642 0.77552 0.77642 0.42831 0 0.77597-0.34728 0.77597-0.77642 0-0.42831-0.34766-0.77552-0.77597-0.77552z" stroke-width=".066146"/>
</g>
<g id="help" transform="matrix(.35278 0 0 .35278 -7.6749 -328.17)" stroke-width=".75">
<circle id="path3014" transform="matrix(1.0714 0 0 1.0714 26.684 934.11)" cx="8" cy="9" r="7" fill="none" stroke="#4d4d4d" stroke-width=".7"/>
<g id="text3784" transform="translate(27.256 -100.61)" fill="#4d4d4d">
<path id="path3789" d="m9 1046h-2.3698v-0.3223c0-0.3596 0.072207-0.6775 0.21663-0.9539 0.14442-0.2807 0.44857-0.636 0.91247-1.0658l0.42013-0.3816c0.24945-0.228 0.43107-0.4429 0.54486-0.6446 0.11816-0.2019 0.17724-0.4036 0.17724-0.6053-4.6e-6 -0.3071-0.10504-0.5462-0.3151-0.7171-0.21007-0.1756-0.50329-0.2632-0.87965-0.2632-0.35449 0-0.73742 0.075-1.1488 0.2237-0.41138 0.1446-0.84026 0.3618-1.2867 0.6513v-2.0659c0.52954-0.184 1.0131-0.32 1.4508-0.4077 0.43763-0.088 0.85995-0.1317 1.267-0.1317 1.0678 0 1.8818 0.2194 2.442 0.6579 0.56017 0.4341 0.84026 1.0702 0.84026 1.9078-7e-6 0.4298-0.08535 0.8159-0.25602 1.158-0.17068 0.3377-0.46171 0.7017-0.87308 1.092l-0.42013 0.375c-0.2976 0.272-0.49235 0.4913-0.58425 0.658-0.091909 0.1622-0.13786 0.342-0.13786 0.5394v0.296m-2.3698 0.9739h2.3698v2.342h-2.3698v-2.342" fill="#4d4d4d" stroke-width=".75"/>
</g>
</g>
<path id="copy" d="m42.218 69.321v1.2884h1.4725v1.4725h1.2884v-2.7609zm-1.4725 1.4725v2.7609h2.7609v-2.7609z" fill="#4d4d4d" stroke-width=".26458" style="paint-order:fill markers stroke"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 27 KiB

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="38" height="38" viewBox="0 0 38 38" fill="none" version="1.1" id="svg3" sodipodi:docname="home.svg" inkscape:version="1.4 (e7c3feb100, 2024-10-09)" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
<defs id="defs3" />
<sodipodi:namedview id="namedview3" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1" inkscape:zoom="18.394737" inkscape:cx="19" inkscape:cy="19.027182" inkscape:window-width="1920" inkscape:window-height="1011" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" inkscape:current-layer="svg3" />
<path d="M14.2749 9C12.0205 10.0243 10.1979 11.7511 9.10659 13.8966C8.01529 16.042 7.72026 18.4785 8.27002 20.8054C8.81977 23.1324 10.1816 25.2114 12.1316 26.7006C14.0816 28.1898 16.5038 29.0007 19 29C10.4948 21.4138 8.53607 12.0542 14.2749 9ZM19 29C21.4962 29.0007 23.9184 28.1898 25.8684 26.7006C27.8184 25.2114 29.1802 23.1324 29.73 20.8054C30.2797 18.4785 29.9847 16.042 28.8934 13.8966C27.8021 11.7511 25.9795 10.0243 23.7251 9C29.4639 12.0542 27.5052 21.4138 19 29Z" fill="#263B58" id="path2" />
<path d="M23.072 13.532C23.072 14.0431 22.9666 14.5491 22.762 15.0213C22.5574 15.4934 22.2574 15.9224 21.8793 16.2838C21.5011 16.6452 21.0522 16.9318 20.5582 17.1274C20.0641 17.323 19.5346 17.4236 18.9998 17.4236C18.465 17.4236 17.9355 17.323 17.4415 17.1274C16.9474 16.9318 16.4985 16.6452 16.1203 16.2838C15.7422 15.9224 15.4423 15.4934 15.2376 15.0213C15.033 14.5491 14.9276 14.0431 14.9276 13.532C14.9276 12.4999 15.3567 11.51 16.1203 10.7802C16.884 10.0504 17.9198 9.64039 18.9998 9.64039C20.0798 9.64039 21.1156 10.0504 21.8793 10.7802C22.6429 11.51 23.072 12.4999 23.072 13.532Z" fill="#263B58" id="path3" />
</svg>

After

Width:  |  Height:  |  Size: 2 KiB

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="50" height="50" fill="none"><path fill="#bebebe" d="M40 0H10C4.477 0 0 4.477 0 10v30c0 5.523 4.477 10 10 10h30c5.523 0 10-4.477 10-10V10c0-5.523-4.477-10-10-10z" style="stroke-width:1"/><path fill="#bfbfbf" fill-opacity=".9" fill-rule="evenodd" d="M29.023 20.012v6.053a1.226 1.226 0 0 0 2.451 0v-6.053a1.226 1.226 0 0 0-2.451 0z" clip-rule="evenodd" style="fill:#323737;fill-opacity:1;stroke-width:1"/><path fill="#E1000F" fill-opacity=".9" fill-rule="evenodd" d="m24.393 18.047 5.242 3.027a1.226 1.226 0 0 0 1.225-2.123l-5.241-3.027a1.226 1.226 0 0 0-1.226 2.123z" clip-rule="evenodd" style="fill:#323737;fill-opacity:1;stroke-width:1"/><path fill="#000091" fill-opacity=".9" fill-rule="evenodd" d="m29.635 25.004-5.242 3.026a1.226 1.226 0 0 0 1.226 2.123l5.241-3.027a1.226 1.226 0 0 0-1.225-2.122z" clip-rule="evenodd" style="fill:#323737;fill-opacity:1;stroke-width:1"/><path fill="#bfbfbf" fill-opacity=".9" fill-rule="evenodd" d="M20.99 26.065v-6.053a1.226 1.226 0 0 0-2.451 0v6.053a1.226 1.226 0 0 0 2.451 0z" clip-rule="evenodd" style="fill:#323737;fill-opacity:1;stroke-width:1"/><path fill="#000091" fill-opacity=".9" fill-rule="evenodd" d="m20.377 21.074 5.242-3.027a1.226 1.226 0 0 0-1.226-2.123l-5.241 3.027a1.226 1.226 0 0 0 1.225 2.123z" clip-rule="evenodd" style="fill:#323737;fill-opacity:1;stroke-width:1"/><path fill="#E1000F" fill-opacity=".9" fill-rule="evenodd" d="m14.934 27.326 4.84-.035a1.226 1.226 0 0 0-.018-2.452l-4.84.035a1.226 1.226 0 0 0 .018 2.452z" clip-rule="evenodd" style="fill:#323737;fill-opacity:1;stroke-width:1"/><path fill="#bfbfbf" fill-opacity=".9" fill-rule="evenodd" d="M18.62 14.22A9.977 9.977 0 0 1 25 11.924c2.424 0 4.648.864 6.38 2.298a1.226 1.226 0 0 0 1.564-1.888A12.417 12.417 0 0 0 25 9.471a12.417 12.417 0 0 0-7.944 2.862 1.226 1.226 0 0 0 1.564 1.888z" clip-rule="evenodd" style="fill:#323737;fill-opacity:1;stroke-width:1"/><path fill="#000091" fill-opacity=".9" fill-rule="evenodd" d="M16.022 25.565c-.622-1.309-1.035-2.553-1.035-3.628a9.998 9.998 0 0 1 3.632-7.716 1.225 1.225 0 1 0-1.563-1.888 12.443 12.443 0 0 0-4.52 9.604c0 1.385.473 2.997 1.271 4.679a1.226 1.226 0 0 0 2.215-1.051z" clip-rule="evenodd" style="fill:#323737;fill-opacity:1;stroke-width:1"/><path fill="#E1000F" fill-opacity=".9" fill-rule="evenodd" d="M31.38 14.221a9.997 9.997 0 0 1 3.633 7.716c0 1.682-.967 3.75-2.248 5.846-3.235 5.298-8.629 10.652-8.629 10.652a1.224 1.224 0 1 0 1.728 1.737s5.62-5.586 8.993-11.11c1.551-2.541 2.607-5.087 2.607-7.125 0-3.861-1.759-7.318-4.52-9.604a1.226 1.226 0 0 0-1.564 1.888z" clip-rule="evenodd" style="fill:#323737;fill-opacity:1;stroke-width:1"/><path fill="#000091" fill-opacity=".9" fill-rule="evenodd" d="M25.864 38.435s-3.874-3.85-7.03-8.252a1.227 1.227 0 0 0-1.992 1.427c3.275 4.57 7.294 8.562 7.294 8.562.48.478 1.257.475 1.734-.006a1.224 1.224 0 0 0-.006-1.731z" clip-rule="evenodd" style="fill:#323737;fill-opacity:1;stroke-width:1"/></svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

View file

@ -1,6 +1,3 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg version="1.1" id="circle" width="15" height="15" viewBox="0 0 15 15" sodipodi:docname="marker.svg" inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
<defs id="defs1" />
<sodipodi:namedview id="namedview1" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1" inkscape:zoom="53.666667" inkscape:cx="7.4906832" inkscape:cy="7.5" inkscape:window-width="1920" inkscape:window-height="1011" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" inkscape:current-layer="circle" />
<path d="M14,7.5c0,3.5899-2.9101,6.5-6.5,6.5S1,11.0899,1,7.5S3.9101,1,7.5,1S14,3.9101,14,7.5z" id="path1" style="fill:#ffffff" />
<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 15 15">
<path d="M14 7.5a6.5 6.5 0 1 1-13 0 6.5 6.5 0 0 1 13 0z" fill="#fff" stroke="#3e4444" stroke-width=".5"/>
</svg>

Before

Width:  |  Height:  |  Size: 1 KiB

After

Width:  |  Height:  |  Size: 199 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 608 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg width="192" height="192" id="svg2" version="1.1" inkscape:version="1.4 (e7c3feb100, 2024-10-09)" sodipodi:docname="16-white.svg" inkscape:export-filename="16-white.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
<svg width="216" height="192" id="svg2" version="1.1" inkscape:version="1.4.1 (93de688d07, 2025-03-30)" sodipodi:docname="16-white.svg" inkscape:export-filename="16-white.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
<defs id="defs4">
<clipPath id="clip0_241_10857">
<rect width="18.049999" height="19.01" fill="#ffffff" id="rect586" x="0" y="0" />
@ -18,8 +18,14 @@
<clipPath id="clip0_2695_1939">
<rect width="20" height="20" fill="#ffffff" id="rect1" x="0" y="0" />
</clipPath>
<clipPath id="clip0_3071_861">
<rect width="18" height="20" fill="#ffffff" id="rect3" x="0" y="0" />
</clipPath>
<clipPath id="clip0_241_10857-3">
<rect width="18.049999" height="19.01" fill="#ffffff" id="rect586-6" x="0" y="0" />
</clipPath>
</defs>
<sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="14.041122" inkscape:cx="165.15774" inkscape:cy="24.998002" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="true" inkscape:window-width="1920" inkscape:window-height="1011" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" showguides="true" inkscape:guide-bbox="true" inkscape:snap-grids="true" inkscape:snap-to-guides="true" inkscape:showpageshadow="2" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1">
<sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="25.78129" inkscape:cx="104.97923" inkscape:cy="178.69548" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="true" inkscape:window-width="1920" inkscape:window-height="1011" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" showguides="true" inkscape:guide-bbox="true" inkscape:snap-grids="true" inkscape:snap-to-guides="true" inkscape:showpageshadow="2" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1">
<inkscape:grid type="xygrid" id="grid3004" empspacing="4" visible="true" enabled="true" snapvisiblegridlinesonly="true" originx="0" originy="0" spacingy="1" spacingx="1" units="px" />
<inkscape:grid id="grid1" units="px" originx="0" originy="0" spacingx="24" spacingy="24" empcolor="#203fff" empopacity="0.85490196" color="#3f3fff" opacity="0.1254902" empspacing="1" enabled="true" visible="true" />
</sodipodi:namedview>
@ -75,9 +81,12 @@
</g>
</g>
<path style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#f2f2f2;fill-opacity:1;fill-rule:evenodd;stroke:#999999;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 108.14555,816.36218 v 3.8267 h 3.85445 v -3.8267 z m 0.51755,4.35174 -1.24591,2.31321 1.16687,0.61848 1.24404,-2.31507 z m -1.86888,3.47168 -0.27666,0.51571 h -2.42597 v 2.24408 l -4.09159,4.06399 1.36261,1.3528 3.86198,-3.83417 h 2.72145 v -3.6959 l 0.015,-0.028 -0.015,-0.008 v -0.0953 h -0.17879 l -0.97303,-0.51571 z" id="path4873" inkscape:connector-curvature="0" />
<g id="g4244" transform="matrix(0.51357238,-0.54309229,0.54309229,0.51357238,-518.0199,506.22551)">
<g id="g4244" transform="matrix(0.51357238,-0.54309229,0.54309229,0.51357238,-590.0195,601.72586)">
<path style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#f2f2f2;fill-opacity:1;fill-rule:nonzero;stroke:#999999;stroke-width:0.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 220.49219,133.52344 c -0.33017,0.01 -0.66239,0.0456 -0.99414,0.10742 -2.22487,0.41425 -4.02666,1.95747 -4.83203,4.00976 l -0.87696,-1.8164 a 0.50004998,0.50004998 0 0 0 -0.83398,-0.11328 0.50004998,0.50004998 0 0 0 -0.0664,0.54883 l 1.45899,3.01953 a 0.50004998,0.50004998 0 0 0 0.60742,0.25586 l 2.84375,-0.94532 a 0.50028339,0.50028339 0 1 0 -0.31641,-0.94922 l -2.00195,0.66797 c 0.61312,-1.89015 2.20733,-3.32407 4.20117,-3.69531 2.24744,-0.41845 4.51458,0.59912 5.69531,2.55664 1.18073,1.95754 1.02202,4.43774 -0.39648,6.23047 -1.41851,1.79275 -3.79606,2.51535 -5.97266,1.81641 a 0.50004998,0.50004998 0 1 0 -0.30469,0.95117 c 2.57038,0.82539 5.38736,-0.0294 7.0625,-2.14649 0.4188,-0.52924 0.74532,-1.11137 0.97657,-1.7207 0.69373,-1.828 0.53599,-3.91467 -0.50977,-5.64844 -1.22005,-2.02271 -3.42908,-3.19767 -5.74023,-3.1289 z" transform="matrix(0.91921787,0.9720541,-0.9720541,0.91921787,152.1356,647.93271)" id="path4240" inkscape:connector-curvature="0" />
</g>
<g id="g4244-6" transform="matrix(-0.51357238,-0.54309229,-0.54309229,0.51357238,734.0195,601.72586)">
<path style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#f2f2f2;fill-opacity:1;fill-rule:nonzero;stroke:#999999;stroke-width:0.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 220.49219,133.52344 c -0.33017,0.01 -0.66239,0.0456 -0.99414,0.10742 -2.22487,0.41425 -4.02666,1.95747 -4.83203,4.00976 l -0.87696,-1.8164 a 0.50004998,0.50004998 0 0 0 -0.83398,-0.11328 0.50004998,0.50004998 0 0 0 -0.0664,0.54883 l 1.45899,3.01953 a 0.50004998,0.50004998 0 0 0 0.60742,0.25586 l 2.84375,-0.94532 a 0.50028339,0.50028339 0 1 0 -0.31641,-0.94922 l -2.00195,0.66797 c 0.61312,-1.89015 2.20733,-3.32407 4.20117,-3.69531 2.24744,-0.41845 4.51458,0.59912 5.69531,2.55664 1.18073,1.95754 1.02202,4.43774 -0.39648,6.23047 -1.41851,1.79275 -3.79606,2.51535 -5.97266,1.81641 a 0.50004998,0.50004998 0 1 0 -0.30469,0.95117 c 2.57038,0.82539 5.38736,-0.0294 7.0625,-2.14649 0.4188,-0.52924 0.74532,-1.11137 0.97657,-1.7207 0.69373,-1.828 0.53599,-3.91467 -0.50977,-5.64844 -1.22005,-2.02271 -3.42908,-3.19767 -5.74023,-3.1289 z" transform="matrix(0.91921787,0.9720541,-0.9720541,0.91921787,152.1356,647.93271)" id="path4240-7" inkscape:connector-curvature="0" />
</g>
<g id="delete-vertex" transform="translate(-90,-64)">
<path style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#f2f2f2;fill-opacity:1;fill-rule:nonzero;stroke:#999999;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 227.55273,53.105469 -6.05468,3.027343 h -3.44141 v 3.517579 l -2.95117,5.902343 1.78906,0.894532 3.15625,-6.314454 h 2.00586 v -2.042968 l 6.39063,-3.195313 z" transform="translate(0,852.36218)" id="path4349-2-2-9-3-8-3-5" inkscape:connector-curvature="0" />
<path sodipodi:nodetypes="cc" style="fill:none;stroke:#ffffff;stroke-width:2.482;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="m 217,907.36218 6,6" id="path4353-1-6-1-3-5-1-9" inkscape:connector-curvature="0" />
@ -141,9 +150,9 @@
<rect style="fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="rect4243-2-5" width="2" height="2" x="89" y="901.36218" />
<path style="fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:#999999;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="m 131,937.3621 v 1 c -1.42857,0 -3.28571,0.5999 -4,2 v 1 h 10 v -1 c -0.71429,-1.4001 -2.57143,-2 -4,-2 v -1 z m -4,5 2,9 h 6 l 2,-9 z" id="delete-30-7" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccccccccc" inkscape:label="delete-30" />
<path d="m 113.2903,943.46769 0.9072,0.5491 c 0.1786,0.10817 0.2366,0.34196 0.1294,0.52223 -0.0319,0.0535 -0.0764,0.0983 -0.1294,0.13055 l -7.00717,4.24121 -7.00708,-4.24121 c -0.17869,-0.10817 -0.236639,-0.34196 -0.12942,-0.52222 0.0319,-0.0536 0.0763,-0.0984 0.12942,-0.13056 l 0.90714,-0.5491 6.09994,3.69219 z m 0,3.57799 0.9072,0.5491 c 0.1786,0.1081 0.2366,0.3419 0.1294,0.5222 -0.0319,0.0535 -0.0764,0.0983 -0.1294,0.1306 l -6.61891,4.0061 c -0.239,0.1447 -0.53753,0.1447 -0.77652,0 l -6.61882,-4.0061 c -0.17869,-0.1082 -0.236639,-0.342 -0.12942,-0.5223 0.0319,-0.0536 0.0763,-0.0984 0.12942,-0.1305 l 0.90714,-0.5491 6.09994,3.6921 z m -5.71171,-10.57501 6.61891,4.00621 c 0.1786,0.10815 0.2366,0.34196 0.1294,0.52222 -0.0319,0.0536 -0.0764,0.0984 -0.1294,0.13056 l -7.00717,4.24119 -7.00708,-4.24119 c -0.17869,-0.10815 -0.236639,-0.34196 -0.12942,-0.52222 0.0319,-0.0536 0.0763,-0.0984 0.12942,-0.13056 l 6.61882,-4.00621 c 0.23899,-0.14465 0.53752,-0.14465 0.77652,0 z" fill="#4d4d4d" id="path437" style="fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:0.178;stroke-dasharray:none;stroke-opacity:1" />
<path id="linestring" style="color:#000000;fill:#f2f2f2;fill-opacity:1;fill-rule:evenodd;stroke:#999999;stroke-width:0.2;stroke-dasharray:none;stroke-opacity:1" d="m 7,889.36218 v 2 h 1.8828125 l 6.1171875,3.05859 v 0.23438 l -6.7070312,6.70703 h -1.2929688 v 2 h 2 v -1.29297 l 6.707031,-6.70703 h 1.292969 v -2 h -1.882812 l -6.117188,-3.05859 v -0.94141 z" />
<path id="polygon" style="fill:#f2f2f2;fill-opacity:1;fill-rule:evenodd;stroke:#999999;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" d="m 29,888.36218 v 2 h 0.927734 l -0.855468,12 h -1.072266 v 2 h 2 v -1.19922 l 8,-1.60156 v 0.80078 h 2 v -2 h -0.777344 l 1.554688,-7 h 1.222656 v -2 h -2 v 0.72656 l -9,-2.45312 v -1.27344 z" />
<path id="marker" d="m 84,936.36218 c -2.625,0 -5.25,1.70216 -6,5.1064 0,2.04256 1.5,6.12768 6,10.8936 4.5,-4.76592 6,-8.85104 6,-10.8936 -0.75,-3.40424 -3.375,-5.1064 -6,-5.1064 z m 0,2.38304 c 1.656857,0 3,1.21928 3,2.72336 0,1.50408 -1.343143,2.72344 -3,2.72344 -1.656848,0 -3,-1.21936 -3,-2.72344 0,-1.50408 1.343152,-2.72336 3,-2.72336 z" style="fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" inkscape:connector-curvature="0" />
<path id="linestring" style="color:#000000;fill:#f2f2f2;fill-opacity:1;fill-rule:evenodd;stroke:#999999;stroke-width:0.2;stroke-dasharray:none;stroke-opacity:1" d="m 175,961.24801 v 2 h 1.88281 l 6.11719,3.05859 v 0.23437 l -6.70703,6.70704 h -1.29297 v 2 h 2 v -1.29297 l 6.70703,-6.70703 h 1.29297 v -2 h -1.88281 l -6.11719,-3.05859 v -0.94141 z" />
<path id="polygon" style="fill:#f2f2f2;fill-opacity:1;fill-rule:evenodd;stroke:#999999;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" d="m 174,912.36306 v 2 h 0.92773 l -0.85547,12 h -1.07226 v 2 h 2 v -1.19921 l 8,-1.60156 v 0.80078 h 2 v -2 h -0.77735 l 1.55469,-7 h 1.22266 v -2 h -2 v 0.72656 l -9,-2.45312 v -1.27345 z" />
<path id="marker" d="m 180,840.36218 c -2.625,0 -5.25,1.70216 -6,5.1064 0,2.04256 1.5,6.12768 6,10.8936 4.5,-4.76592 6,-8.85104 6,-10.8936 -0.75,-3.40424 -3.375,-5.1064 -6,-5.1064 z m 0,2.38304 c 1.65686,0 3,1.21928 3,2.72336 0,1.50408 -1.34314,2.72344 -3,2.72344 -1.65684,0 -3,-1.21936 -3,-2.72344 0,-1.50408 1.34316,-2.72336 3,-2.72336 z" style="fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" inkscape:connector-curvature="0" />
<g transform="matrix(0.16294606,0,0,0.16295934,27.835262,912.23132)" id="settings" style="fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:1.49736;stroke-miterlimit:4;stroke-dasharray:none" class="sprite">
<path inkscape:connector-curvature="0" d="m 98.762,43.652 c -0.186,-1.386 -1.481,-2.582 -2.876,-2.659 l -6.172,-0.337 c -1.395,-0.076 -2.899,-1.224 -3.341,-2.55 l -2.28,-5.518 c -0.629,-1.249 -0.379,-3.121 0.553,-4.161 l 4.122,-4.6 c 0.933,-1.042 0.962,-2.77 0.066,-3.842 l -8.813,-8.813 c -1.073,-0.897 -2.803,-0.867 -3.845,0.065 l -4.598,4.122 c -1.039,0.934 -2.915,1.182 -4.161,0.551 l -5.521,-2.279 c -1.324,-0.442 -2.472,-1.945 -2.549,-3.34 l -0.337,-6.17 c -0.077,-1.396 -1.272,-2.691 -2.659,-2.878 0,0 -3.252,-0.44 -6.248,-0.44 -2.991,0 -6.243,0.44 -6.243,0.44 -1.386,0.188 -2.582,1.483 -2.658,2.878 l -0.338,6.17 c -0.076,1.396 -1.224,2.898 -2.551,3.34 l -5.517,2.279 c -1.249,0.631 -3.122,0.382 -4.161,-0.551 l -4.601,-4.122 c -1.042,-0.932 -2.769,-0.962 -3.842,-0.065 l -8.813,8.813 c -0.897,1.073 -0.867,2.801 0.066,3.842 l 4.122,4.6 c 0.933,1.041 1.182,2.913 0.551,4.161 l -2.279,5.518 c -0.442,1.326 -1.946,2.474 -3.34,2.55 l -6.17,0.337 c -1.396,0.077 -2.691,1.272 -2.879,2.659 0,0 -0.439,3.253 -0.439,6.243 0,2.99 0.44,6.24 0.44,6.24 0.188,1.389 1.483,2.582 2.879,2.659 l 6.169,0.339 c 1.396,0.075 2.898,1.225 3.341,2.549 l 2.278,5.517 c 0.631,1.248 0.381,3.122 -0.551,4.163 l -4.122,4.598 c -0.933,1.042 -0.963,2.771 -0.066,3.845 l 8.814,8.813 c 1.073,0.896 2.801,0.866 3.842,-0.066 l 4.6,-4.122 c 1.041,-0.932 2.913,-1.182 4.161,-0.553 l 5.517,2.28 c 1.327,0.441 2.475,1.946 2.55,3.343 l 0.338,6.168 c 0.076,1.395 1.272,2.692 2.658,2.88 0,0 3.252,0.439 6.244,0.439 2.996,0 6.25,-0.439 6.25,-0.439 1.385,-0.188 2.58,-1.485 2.657,-2.88 l 0.337,-6.168 c 0.077,-1.396 1.225,-2.901 2.551,-3.343 l 5.517,-2.28 c 1.248,-0.629 3.122,-0.379 4.163,0.553 l 4.598,4.122 c 1.042,0.933 2.771,0.964 3.843,0.067 l 8.815,-8.814 c 0.896,-1.073 0.866,-2.803 -0.066,-3.845 l -4.122,-4.598 c -0.932,-1.041 -1.182,-2.915 -0.553,-4.163 l 2.28,-5.517 c 0.441,-1.324 1.946,-2.474 3.341,-2.549 l 6.172,-0.339 c 1.395,-0.077 2.692,-1.271 2.876,-2.659 0,0 0.441,-3.25 0.441,-6.24 0,-2.99 -0.441,-6.243 -0.441,-6.243 z m -48.658,18.709 c -6.886,0 -12.468,-5.585 -12.468,-12.467 0,-6.885 5.582,-12.467 12.468,-12.467 6.89,0 12.475,5.582 12.475,12.467 -10e-4,6.882 -5.586,12.467 -12.475,12.467 z" id="path27812" style="fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:1.49736;stroke-miterlimit:4;stroke-dasharray:none" />
</g>
@ -151,6 +160,10 @@
<path d="m 1.07001,4.41003 h 9.41999 c 0.9234,-0.0066 1.8391,0.16957 2.6941,0.5184 0.8551,0.34883 1.6327,0.8634 2.288,1.51407 0.6553,0.65067 1.1754,1.42458 1.5303,2.27713 0.3549,0.85256 0.5376,1.76697 0.5376,2.69037 0.0067,0.9277 -0.1712,1.8474 -0.5231,2.7058 -0.3519,0.8583 -0.871,1.6382 -1.527,2.2941 -0.656,0.656 -1.4358,1.1751 -2.2941,1.527 -0.8584,0.352 -1.7781,0.5298 -2.7058,0.5231 h -9.41999" stroke="#f2f2f2" stroke-miterlimit="10" id="path580" style="fill:none;stroke:#f2f2f2;stroke-width:1.45486;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
<path d="m 4.75002,8.44998 -4.039998,-4.05 4.039998,-4.050004" stroke="#f2f2f2" stroke-miterlimit="10" id="path582" style="fill:none;stroke:#f2f2f2;stroke-width:1.45486;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
</g>
<g clip-path="url(#clip0_241_10857-3)" id="undo-5" transform="matrix(-0.71300568,0,0,0.66260978,90.012499,938.13028)" style="fill:none;stroke:#f2f2f2;stroke-width:1.45488;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1">
<path d="m 1.07001,4.41003 h 9.41999 c 0.9234,-0.0066 1.8391,0.16957 2.6941,0.5184 0.8551,0.34883 1.6327,0.8634 2.288,1.51407 0.6553,0.65067 1.1754,1.42458 1.5303,2.27713 0.3549,0.85256 0.5376,1.76697 0.5376,2.69037 0.0067,0.9277 -0.1712,1.8474 -0.5231,2.7058 -0.3519,0.8583 -0.871,1.6382 -1.527,2.2941 -0.656,0.656 -1.4358,1.1751 -2.2941,1.527 -0.8584,0.352 -1.7781,0.5298 -2.7058,0.5231 h -9.41999" stroke="#f2f2f2" stroke-miterlimit="10" id="path580-3" style="fill:none;stroke:#f2f2f2;stroke-width:1.45486;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
<path d="m 4.75002,8.44998 -4.039998,-4.05 4.039998,-4.050004" stroke="#f2f2f2" stroke-miterlimit="10" id="path582-5" style="fill:none;stroke:#f2f2f2;stroke-width:1.45486;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
</g>
<g id="g1" transform="translate(144,-24.00004)">
<path d="m 9,849.93721 v 4.04997 c 0,0.20708 0.167895,0.375 0.375,0.375 h 5.25 c 0.207075,0 0.375,-0.16792 0.375,-0.375 v -4.04997 c 0,-0.20708 -0.167925,-0.375 -0.375,-0.375 h -5.25 c -0.207105,0 -0.375,0.16792 -0.375,0.375 z" stroke="#f2f2f2" id="path438" style="fill:none;stroke:#999999;stroke-width:0.999997;stroke-opacity:1" />
<path d="m 15.21255,842.36218 h -8.83755 c -0.207105,0 -0.375,0.1679 -0.375,0.37499 v 11.24993 c 0,0.20708 0.167895,0.375 0.375,0.375 h 11.25 c 0.207075,0 0.375,-0.16792 0.375,-0.375 v -8.67664 c 0,-0.0953 -0.0363,-0.18697 -0.1014,-0.25648 l -2.41245,-2.57327 c -0.07095,-0.0756 -0.16995,-0.11853 -0.2736,-0.11853 z" stroke="#f2f2f2" id="save" style="fill:none;stroke:#999999;stroke-width:0.999997;stroke-opacity:1" />
@ -200,7 +213,7 @@
<path style="fill:#f2f2f2;stroke:#999999;stroke-width:0.25;paint-order:fill markers stroke" d="m 8.1902877,37.423896 c -0.4872187,-0.174113 -0.7923051,-0.442073 -0.9946703,-0.873627 l -0.1907982,-0.406887 -1.3702708,-0.0034 c -1.4982701,-0.0037 -1.5910875,-0.03214 -1.5406237,-0.47225 l 0.026557,-0.23161 1.4211632,-0.02255 1.4211632,-0.02255 0.1982698,-0.389502 c 0.347892,-0.683434 0.8634941,-1.009111 1.592299,-1.005764 0.7177082,0.0033 1.3415151,0.432422 1.6290831,1.120669 l 0.116359,0.278485 h 4.65745 c 4.520341,0 4.659962,0.0047 4.742759,0.159402 0.1159,0.216562 0.107667,0.300926 -0.04419,0.452784 -0.114657,0.114657 -0.660626,0.129501 -4.763204,0.129501 h -4.633703 l -0.104975,0.290304 c -0.152574,0.421935 -0.6274874,0.844474 -1.1103021,0.987854 -0.4962156,0.147361 -0.6614998,0.148792 -1.0523644,0.0091 z m 0.9689602,-0.845129 c 0.6980003,-0.331223 0.6980003,-1.377155 0,-1.708378 -0.3515556,-0.166824 -0.4925823,-0.168492 -0.8270409,-0.0098 -0.3376099,0.160207 -0.5444962,0.513326 -0.5444962,0.929363 0,0.368008 0.1600657,0.606145 0.5356626,0.796928 0.3157622,0.16039 0.4841923,0.158752 0.8358745,-0.0081 z" id="path8" transform="translate(0,812.36218)" />
<path style="fill:#f2f2f2;stroke:#999999;stroke-width:0.25;paint-order:fill markers stroke" d="m 12.773494,42.243521 c -0.4045,-0.187277 -0.732456,-0.526846 -0.902897,-0.934868 l -0.128748,-0.308213 -3.8106837,-0.02143 -3.8106834,-0.02142 -0.026557,-0.23161 c -0.055311,-0.482381 -0.1677415,-0.468805 3.8892984,-0.469606 l 3.7189457,-7.33e-4 0.21287,-0.431917 c 0.651632,-1.322166 2.472575,-1.284611 3.125651,0.06446 l 0.178591,0.36892 h 2.297219 c 2.258426,0 2.298803,0.003 2.391007,0.175244 0.06808,0.127207 0.06936,0.228859 0.0047,0.370843 l -0.08912,0.1956 h -2.305381 -2.30538 l -0.15493,0.350241 c -0.387132,0.875164 -1.437261,1.286451 -2.283867,0.894485 z m 1.063202,-0.700358 c 0.378023,-0.157949 0.544298,-0.425794 0.541165,-0.871741 -0.004,-0.573585 -0.363385,-0.908772 -0.974299,-0.908772 -0.312041,0 -0.40386,0.04292 -0.649922,0.303826 -0.257768,0.273313 -0.282484,0.339859 -0.246104,0.662621 0.04524,0.401361 0.228194,0.651219 0.595596,0.813394 0.317179,0.140006 0.399909,0.140082 0.733564,6.68e-4 z" id="path9" transform="translate(0,812.36218)" />
<path style="color:#000000;fill:#f2f2f2;fill-opacity:1;fill-rule:evenodd;stroke:#999999;stroke-width:0.25;stroke-dasharray:none;stroke-opacity:1" d="m 154.67579,963.53902 4.73437,4.73437 -5.05078,4.6836 -1.35938,-1.4668 3.52735,-3.26953 -3.26563,-3.26563 z" id="path1-67-5" />
<path id="copy" style="fill:#f2f2f2;fill-opacity:1;paint-order:fill markers stroke" d="m 58,914.36218 v 3.5 h 4 v 4 h 3.5 v -7.5 z m -4,4 v 7.5 h 7.5 v -7.5 z" />
<path id="copy" style="fill:#f2f2f2;fill-opacity:1;stroke-width:1;paint-order:fill markers stroke" d="m 106.17392,986.36222 v 3.65217 h 4.17391 v 4.17392 h 3.65217 v -7.82609 z m -4.17392,4.17391 v 7.82609 h 7.82609 v -7.82609 z" />
<g id="g1-5" transform="translate(0.1,0.1)">
<g id="g24">
<path d="m 12,912.36218 c -4.4182692,0 -8,3.58172 -8,8 0.00463,1.61557 0.4982915,3.19189 1.4160156,4.52148 0.1980248,0.28729 0.4146342,0.56131 0.6484375,0.82032 1.5128357,1.68659 3.6698868,2.65261 5.9355469,2.6582 2.266949,-0.006 4.424914,-0.97357 5.9375,-2.66211 0.23535,-0.26077 0.45327,-0.53676 0.652344,-0.82617 0.913769,-1.32754 1.405284,-2.9001 1.410156,-4.51172 0,-4.41828 -3.58173,-8 -8,-8 z m -5.3242188,12.50586 c 1.3285496,-1.56088 3.274489,-2.46104 5.3242188,-2.46289 2.050412,10e-4 3.997179,0.90149 5.326172,2.46289 0,0 -0.0035,-0.003 0.0059,0.006 0,0 -0.537098,0.5762 -0.839844,0.82812 -0.175326,0.14821 -0.35784,0.2877 -0.546874,0.41797 -0.06626,0.0467 -0.133328,0.0923 -0.201172,0.13672 -0.244804,0.15763 -0.499205,0.29983 -0.761719,0.42578 -0.931874,0.44366 -1.950332,0.67577 -2.982422,0.67969 -0.618083,-0.005 -1.232807,-0.0915 -1.828125,-0.25781 -0.6753225,-0.18416 -1.3192066,-0.46858 -1.9101562,-0.84375 -0.0685,-0.0444 -0.1362192,-0.09 -0.203125,-0.13672 -0.00521,-0.004 -0.010422,-0.008 -0.015625,-0.0117 -0.1876607,-0.12974 -0.3688672,-0.26858 -0.5429688,-0.41602 -0.2997188,-0.24977 -0.5780329,-0.52416 -0.8320313,-0.82031 m -0.5917968,-0.81445 c -0.6976631,-1.10814 -1.0705109,-2.38976 -1.0761719,-3.69922 0,-3.86599 3.1340146,-7 7,-7 l -4.1e-5,-1.6e-4 c 3.865985,0 7,3.13401 7,7 -0.0054,1.30234 -0.374061,2.57734 -1.064453,3.68164 -1.516341,-1.67935 -3.672913,-2.63806 -5.935547,-2.63867 -2.2612709,0.008 -4.4133749,0.97341 -5.9238281,2.65625" style="fill:#f2f2f2;stroke:#999999;stroke-width:0.2;paint-order:fill markers stroke" id="path24" sodipodi:nodetypes="scccccccsccccccccccccccccccccccc" />
@ -219,5 +232,15 @@
<g clip-path="url(#clip0_2695_1939)" id="g2-67" transform="translate(170.11621,814.31159)">
<path d="m 8.84533,14.8298 c -0.28116,0.6439 -1.1722,0.6439 -1.45333,0 l -0.73138,-1.6751 c -0.65086,-1.4907 -1.82238,-2.6774 -3.2837,-3.32604 l -2.0131,-0.89358 c -0.64004,-0.28408 -0.64004,-1.21518 0,-1.49928 l 1.95022,-0.86569 c 1.4989,-0.66535 2.69143,-1.89594 3.33118,-3.43751 l 0.74086,-1.78516 c 0.27491,-0.662471 1.19025,-0.662472 1.46517,0 l 0.74083,1.78517 c 0.63972,1.54156 1.83222,2.77215 3.33112,3.4375 l 1.9503,0.86569 c 0.64,0.2841 0.64,1.2152 0,1.49928 l -2.0131,0.89358 c -1.4613,0.64864 -2.6328,1.83534 -3.28374,3.32604 z m -5.06236,-6.64435 c 1.90486,0.84555 3.45371,2.23535 4.33568,4.14775 0.88202,-1.9124 2.43085,-3.3022 4.33565,-4.14775 -1.9276,-0.85565 -3.4813,-2.31323 -4.33564,-4.25955 -0.85434,1.94633 -2.4081,3.4039 -4.33569,4.25955 z m 12.38483,10.72295 0.2057,-0.4714 c 0.3667,-0.8405 1.0271,-1.5098 1.8511,-1.8758 l 0.6336,-0.2816 c 0.3428,-0.1523 0.3428,-0.6504 0,-0.8026 l -0.5981,-0.2658 c -0.8453,-0.3755 -1.5175,-1.0695 -1.8779,-1.9386 l -0.2112,-0.5094 c -0.1473,-0.355 -0.6381,-0.355 -0.7853,0 l -0.2112,0.5094 c -0.3603,0.8691 -1.0326,1.5631 -1.8778,1.9386 l -0.5983,0.2658 c -0.3427,0.1522 -0.3427,0.6503 0,0.8026 l 0.6337,0.2816 c 0.8241,0.366 1.4844,1.0353 1.8511,1.8758 l 0.2057,0.4714 c 0.1505,0.3451 0.6283,0.3451 0.7789,0 z m -0.8557,-3.0358 0.4687,-0.4655 0.459,0.4655 -0.459,0.4524 z" fill="#efefef" id="path1-5" />
</g>
<path style="fill:#efefef;fill-opacity:1;stroke:none;stroke-width:6.97518;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" inkscape:transform-center-x="-0.0010932573" inkscape:transform-center-y="-0.7377641" d="m 7.6698317,998.8588 1.3886278,-5.25497 -4.0584591,-3.24679 h 5.1830926 l 1.819345,-5.49493 1.81469,5.49392 h 5.182872 l -4.06154,3.24965 1.383849,5.25642 -4.324867,-3.01228 z" id="star" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccccccccc" class="sprite" />
<path style="fill:none;fill-opacity:1;stroke:#efefef;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" inkscape:transform-center-x="-0.0010925804" inkscape:transform-center-y="-0.73776941" d="m 31.669832,998.8588 1.388628,-5.25501 -4.05846,-3.24679 h 5.183093 l 1.819345,-5.49493 1.814694,5.49392 h 5.182868 l -4.06154,3.24964 1.383849,5.25647 -4.324874,-3.01232 z" id="starred" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccccccccc" class="sprite" />
<g clip-path="url(#clip0_3071_861)" id="g3" transform="translate(194.88955,910.26491)">
<path fill-rule="evenodd" clip-rule="evenodd" d="m 1.89466,0.697266 v 2.325584 h 1.10132 l -1.01843,13.95345 h -1.267101 v 2.3256 h 2.368421 v -1.3953 l 9.47373,-1.8605 v 0.9302 h 2.3684 v -2.3255 h -0.9237 l 1.8355,-8.13958 h 1.4448 v -2.32558 h -2.3685 v 0.84883 l -10.64602,-2.86046 v -1.476744 z" stroke="#efefef" stroke-width="1.2" id="path1-9" style="fill:none" />
<path d="m 8.59717,6.8457 v 5.8915" stroke="#efefef" stroke-width="1.01333" id="path2-1" />
<path d="m 11.5977,9.79102 h -6.00004" stroke="#efefef" stroke-width="1.01333" id="path3-2" />
</g>
<path d="m 204.41818,838.96218 c -2.97727,0 -5.96591,1.94619 -6.81818,5.85003 0,2.33543 1.70455,7.01777 6.81818,12.46707 5.11362,-5.4608 6.81822,-10.13164 6.81822,-12.46707 -0.8523,-3.89239 -3.8409,-5.85003 -6.81822,-5.85003 z" stroke="#efefef" stroke-width="1.2" id="path1-0" style="fill:none" />
<path d="m 204.41812,843.97585 v 6.04463" stroke="#efefef" stroke-width="1.056" id="path2-9" style="fill:none" />
<path d="m 207.4181,846.99929 h -5.99998" stroke="#efefef" stroke-width="1.056" id="path3-36" style="fill:none" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 80 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 50 KiB

View file

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg width="252" height="252" viewBox="0 0 66.674992 66.674992" version="1.1" id="svg2876" inkscape:version="1.4 (e7c3feb100, 2024-10-09)" sodipodi:docname="24-white.svg" inkscape:export-filename="../24-white.svg" inkscape:export-xdpi="7.52" inkscape:export-ydpi="7.52" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview id="namedview2878" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1" inkscape:document-units="px" showgrid="true" showguides="true" inkscape:zoom="5.3566812" inkscape:cx="50.030978" inkscape:cy="170.06799" inkscape:window-width="1920" inkscape:window-height="1011" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" inkscape:current-layer="layer1">
<svg width="288" height="288" viewBox="0 0 76.199991 76.199991" version="1.1" id="svg2876" inkscape:version="1.4.1 (93de688d07, 2025-03-30)" sodipodi:docname="24-white.svg" inkscape:export-filename="../24-white.svg" inkscape:export-xdpi="7.52" inkscape:export-ydpi="7.52" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview id="namedview2878" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1" inkscape:document-units="px" showgrid="true" showguides="true" inkscape:zoom="7.9044052" inkscape:cx="138.0243" inkscape:cy="242.26997" inkscape:window-width="1920" inkscape:window-height="1011" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" inkscape:current-layer="layer1">
<inkscape:grid type="xygrid" id="grid2997" empspacing="6" originx="0" originy="0" spacingy="0.2645833" spacingx="0.2645833" units="px" visible="true" />
<inkscape:grid id="grid1" units="px" originx="0" originy="0" spacingx="9.5249989" spacingy="9.5249989" empcolor="#3f3fff" empopacity="0.25098039" color="#3f3fff" opacity="0.1254902" empspacing="1" dotted="false" gridanglex="30" gridanglez="30" visible="true" />
</sodipodi:namedview>
@ -19,42 +19,42 @@
</defs>
<g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1">
<g transform="matrix(0.06466922,0,0,0.06466922,31.636347,225.50198)" id="Layer_1" />
<path style="fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:0.0661458;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="m 6.3499993,2.1166664 -0.529166,0.529167 1.0583331,1.058333 0.529166,-0.529167 z m -0.79375,0.79375 -2.9104161,2.910417 1.0583329,1.058333 2.9104172,-2.910417 z m -2.9104161,2.910417 -0.7937501,1.852083 1.852083,-0.79375 z" id="edit" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccccccccc" class="sprite" />
<path style="fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:0.0661458;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="m 25.532287,21.035092 -0.529166,0.529168 1.058333,1.058333 0.529166,-0.529167 z m -0.79375,0.79375 -2.910416,2.910417 1.058333,1.058333 2.910417,-2.910416 z m -2.910416,2.910417 -0.79375,1.852083 1.852083,-0.79375 z" id="edit" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccccccccc" class="sprite" />
<path style="fill:#f2f2f2;fill-opacity:1;fill-rule:nonzero;stroke:#999999;stroke-width:0.0661458;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="m 51.858325,21.166657 v 0.529167 c -0.529167,0 -1.058333,0 -1.322917,0.529166 v 0.264584 h 3.704167 v -0.264584 c -0.264583,-0.529166 -0.79375,-0.529166 -1.322917,-0.529166 v -0.529167 z m -1.322917,1.5875 0.79375,3.704172 h 2.116667 l 0.79375,-3.704172 z" id="delete" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccccccccc" inkscape:label="" class="sprite" />
<g id="markers" transform="matrix(0.26458333,0,0,0.26458333,14.287495,-226.04994)" style="fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" class="sprite">
<g id="markers" transform="matrix(0.26458333,0,0,0.26458333,42.862495,-226.04997)" style="fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" class="sprite">
<path sodipodi:nodetypes="sccccsssccs" inkscape:connector-curvature="0" id="rect2985" d="m 105.25387,934.36268 c -3.17753,0 -6.346004,2.1278 -7.25387,6.3794 0,2.551 1.806672,7.6679 7.25387,13.6201 1.46368,-1.5994 2.66945,-3.1177 3.64397,-4.5613 -1.4505,-2.1639 -2.41497,-4.0873 -2.96285,-5.7095 -0.22599,0.041 -0.44225,0.063 -0.68112,0.063 -2.0056,0 -3.64396,-1.5346 -3.64396,-3.413 0,-1.8785 1.63836,-3.3811 3.64396,-3.3811 0.51205,0 0.98854,0.076 1.43034,0.2552 0.64347,-0.9222 1.4345,-1.6571 2.31579,-2.169 -1.14444,-0.7114 -2.44633,-1.0845 -3.74613,-1.0845 z" style="fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path id="path3378" d="m 111,934.36218 c -3.0625,0 -6.125,2.1277 -7,6.383 0,2.5532 1.75,7.6596 7,13.617 5.25,-5.9574 7,-11.0638 7,-13.617 -0.875,-4.2553 -3.9375,-6.383 -7,-6.383 z m 0,2.9788 c 1.933,0 3.5,1.5241 3.5,3.4042 0,1.8801 -1.567,3.4043 -3.5,3.4043 -1.93299,0 -3.5,-1.5242 -3.5,-3.4043 0,-1.8801 1.56701,-3.4042 3.5,-3.4042 z" style="fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" inkscape:connector-curvature="0" />
</g>
<path inkscape:connector-curvature="0" style="fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:0.0661458;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="m 42.862495,11.112499 c -0.926042,0 -1.852084,0.661458 -2.116667,1.984375 0,0.79375 0.529167,2.38125 2.116667,4.233334 1.5875,-1.852084 2.116666,-3.439584 2.116666,-4.233334 -0.264583,-1.322917 -1.190625,-1.984375 -2.116666,-1.984375 z m 0,0.926042 c 0.584501,0 1.058333,0.473831 1.058333,1.058333 0,0.584502 -0.473832,1.058334 -1.058333,1.058334 -0.584502,0 -1.058334,-0.473832 -1.058334,-1.058334 0,-0.584502 0.473832,-1.058333 1.058334,-1.058333 z" id="marker" class="sprite" />
<path d="m 30.956246,11.112499 v 0.132292 0.79375 0.132292 h 0.132291 0.79375 0.132292 v -0.132292 -0.09095 l 2.645833,1.058334 v 0.355534 0.115755 l -1.876888,2.926953 h -0.636653 -0.132292 v 0.132292 0.79375 0.132292 h 0.132292 0.79375 0.132291 v -0.132292 -0.79375 -0.09922 l 1.876888,-2.94349 h 0.636654 0.132292 v -0.132291 -0.79375 -0.132292 h -0.132292 -0.79375 -0.132292 v 0.132292 0.148828 l -2.645833,-1.058334 v -0.413411 -0.132292 h -0.132292 -0.79375 z m 0.264583,0.264584 h 0.529167 v 0.529166 h -0.529167 z m 3.704167,1.322916 h 0.529166 v 0.529167 h -0.529166 z m -2.645834,3.968751 h 0.529167 v 0.529166 h -0.529167 z" id="polyline" class="sprite" style="fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:0.0645583;stroke-dasharray:none;stroke-opacity:1" />
<path d="m 21.69583,11.377082 v 0.132291 0.79375 0.132292 h 0.132292 0.347266 l -0.42168,3.704167 h -0.454753 -0.132291 v 0.132292 0.79375 0.132291 h 0.132291 0.79375 0.132292 v -0.132291 -0.421667 l 2.645833,-0.181901 v 0.338984 0.132292 h 0.132292 0.79375 0.132291 v -0.132292 -0.79375 -0.132291 h -0.132291 -0.305925 l 0.363802,-2.116667 h 0.471289 0.132292 v -0.132292 -0.79375 -0.132292 h -0.132292 -0.79375 -0.132291 v 0.132292 0.214974 l -2.645833,-0.950833 v -0.587058 -0.132291 h -0.132292 -0.79375 z m 0.264584,0.264583 h 0.529166 v 0.529167 h -0.529166 z m 3.704166,1.322917 h 0.529167 v 0.529167 h -0.529167 z m -0.529167,3.175 h 0.529167 v 0.529167 h -0.529167 z m -3.704166,0.264583 c 0.529167,0 0,0 0.529167,0 v 0.529167 h -0.529167 z" id="polyogn" class="sprite" style="fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:0.0645583;stroke-dasharray:none;stroke-opacity:1" />
<g transform="matrix(0.06466922,0,0,0.06466922,30.097116,1.5355704)" id="settings" style="fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:0.998285;stroke-miterlimit:4;stroke-dasharray:none" class="sprite">
<path inkscape:connector-curvature="0" style="fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:0.0661458;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="m 71.437495,11.24479 c -0.926042,0 -1.852084,0.661458 -2.116667,1.984375 0,0.79375 0.529167,2.38125 2.116667,4.233334 1.5875,-1.852084 2.116666,-3.439584 2.116666,-4.233334 -0.264583,-1.322917 -1.190625,-1.984375 -2.116666,-1.984375 z m 0,0.926042 c 0.584501,0 1.058333,0.473831 1.058333,1.058333 0,0.584502 -0.473832,1.058334 -1.058333,1.058334 -0.584502,0 -1.058334,-0.473832 -1.058334,-1.058334 0,-0.584502 0.473832,-1.058333 1.058334,-1.058333 z" id="marker" class="sprite" />
<path d="m 69.056244,58.737492 v 0.132292 0.79375 0.132292 h 0.132291 0.79375 0.132292 v -0.132292 -0.09095 l 2.645833,1.058334 v 0.355534 0.115755 l -1.876888,2.926953 h -0.636653 -0.132292 v 0.132291 0.79375 0.132293 h 0.132292 0.79375 0.132291 v -0.132293 -0.79375 -0.09922 l 1.876888,-2.94349 h 0.636654 0.132292 v -0.132291 -0.79375 -0.132292 h -0.132292 -0.79375 -0.132292 v 0.132292 0.148828 l -2.645833,-1.058334 v -0.413411 -0.132292 h -0.132292 -0.79375 z m 0.264583,0.264584 h 0.529167 v 0.529166 h -0.529167 z m 3.704167,1.322916 h 0.529166 v 0.529167 h -0.529166 z m -2.645834,3.968751 h 0.529167 v 0.529166 h -0.529167 z" id="polyline" class="sprite" style="fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:0.0645583;stroke-dasharray:none;stroke-opacity:1" />
<path d="m 69.320827,39.952078 v 0.132291 0.793751 0.132292 h 0.132292 0.347266 l -0.42168,3.704167 h -0.454753 -0.132291 v 0.132292 0.79375 0.132291 h 0.132291 0.79375 0.132292 v -0.132291 -0.421667 l 2.645833,-0.181901 v 0.338984 0.132292 h 0.132292 0.79375 0.132291 v -0.132292 -0.79375 -0.132292 h -0.132291 -0.305925 l 0.363803,-2.116667 h 0.471289 0.132292 v -0.132292 -0.79375 -0.132292 h -0.132292 -0.793751 -0.13229 v 0.132292 0.214974 l -2.645833,-0.950833 v -0.587058 -0.132291 h -0.132292 -0.793751 z m 0.264584,0.264583 h 0.529166 v 0.529168 h -0.529166 z m 3.704166,1.322917 h 0.529167 v 0.529167 h -0.529167 z m -0.529167,3.175 h 0.529167 v 0.529167 h -0.529167 z m -3.704166,0.264583 c 0.529167,0 0,0 0.529167,0 v 0.529167 h -0.529167 z" id="polyogn" class="sprite" style="fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:0.0645583;stroke-dasharray:none;stroke-opacity:1" />
<g transform="matrix(0.06466922,0,0,0.06466922,11.047118,39.635566)" id="settings" style="fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:0.998285;stroke-miterlimit:4;stroke-dasharray:none" class="sprite">
<path inkscape:connector-curvature="0" d="m 98.762,43.652 c -0.186,-1.386 -1.481,-2.582 -2.876,-2.659 l -6.172,-0.337 c -1.395,-0.076 -2.899,-1.224 -3.341,-2.55 l -2.28,-5.518 c -0.629,-1.249 -0.379,-3.121 0.553,-4.161 l 4.122,-4.6 c 0.933,-1.042 0.962,-2.77 0.066,-3.842 l -8.813,-8.813 c -1.073,-0.897 -2.803,-0.867 -3.845,0.065 l -4.598,4.122 c -1.039,0.934 -2.915,1.182 -4.161,0.551 l -5.521,-2.279 c -1.324,-0.442 -2.472,-1.945 -2.549,-3.34 l -0.337,-6.17 c -0.077,-1.396 -1.272,-2.691 -2.659,-2.878 0,0 -3.252,-0.44 -6.248,-0.44 -2.991,0 -6.243,0.44 -6.243,0.44 -1.386,0.188 -2.582,1.483 -2.658,2.878 l -0.338,6.17 c -0.076,1.396 -1.224,2.898 -2.551,3.34 l -5.517,2.279 c -1.249,0.631 -3.122,0.382 -4.161,-0.551 l -4.601,-4.122 c -1.042,-0.932 -2.769,-0.962 -3.842,-0.065 l -8.813,8.813 c -0.897,1.073 -0.867,2.801 0.066,3.842 l 4.122,4.6 c 0.933,1.041 1.182,2.913 0.551,4.161 l -2.279,5.518 c -0.442,1.326 -1.946,2.474 -3.34,2.55 l -6.17,0.337 c -1.396,0.077 -2.691,1.272 -2.879,2.659 0,0 -0.439,3.253 -0.439,6.243 0,2.99 0.44,6.24 0.44,6.24 0.188,1.389 1.483,2.582 2.879,2.659 l 6.169,0.339 c 1.396,0.075 2.898,1.225 3.341,2.549 l 2.278,5.517 c 0.631,1.248 0.381,3.122 -0.551,4.163 l -4.122,4.598 c -0.933,1.042 -0.963,2.771 -0.066,3.845 l 8.814,8.813 c 1.073,0.896 2.801,0.866 3.842,-0.066 l 4.6,-4.122 c 1.041,-0.932 2.913,-1.182 4.161,-0.553 l 5.517,2.28 c 1.327,0.441 2.475,1.946 2.55,3.343 l 0.338,6.168 c 0.076,1.395 1.272,2.692 2.658,2.88 0,0 3.252,0.439 6.244,0.439 2.996,0 6.25,-0.439 6.25,-0.439 1.385,-0.188 2.58,-1.485 2.657,-2.88 l 0.337,-6.168 c 0.077,-1.396 1.225,-2.901 2.551,-3.343 l 5.517,-2.28 c 1.248,-0.629 3.122,-0.379 4.163,0.553 l 4.598,4.122 c 1.042,0.933 2.771,0.964 3.843,0.067 l 8.815,-8.814 c 0.896,-1.073 0.866,-2.803 -0.066,-3.845 l -4.122,-4.598 c -0.932,-1.041 -1.182,-2.915 -0.553,-4.163 l 2.28,-5.517 c 0.441,-1.324 1.946,-2.474 3.341,-2.549 l 6.172,-0.339 c 1.395,-0.077 2.692,-1.271 2.876,-2.659 0,0 0.441,-3.25 0.441,-6.24 0,-2.99 -0.441,-6.243 -0.441,-6.243 z m -48.658,18.709 c -6.886,0 -12.468,-5.585 -12.468,-12.467 0,-6.885 5.582,-12.467 12.468,-12.467 6.89,0 12.475,5.582 12.475,12.467 -10e-4,6.882 -5.586,12.467 -12.475,12.467 z" id="path27812" style="fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:0.998285;stroke-miterlimit:4;stroke-dasharray:none" />
</g>
<path style="fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:0.0661458;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="m 42.862495,1.5874998 c -1.753505,0 -3.175,1.421495 -3.175,3.175 0,1.753504 1.421495,3.175 3.175,3.175 1.753505,0 3.175,-1.421496 3.175,-3.175 0,-1.753505 -1.421495,-3.175 -3.175,-3.175 z m 0,1.322916 1.852083,1.852084 h -1.322917 v 1.5875 h -1.058333 v -1.5875 h -1.322917 z" id="import" class="sprite" />
<g id="set-zoom" class="sprite" transform="translate(-0.6834795,-1.3228864)">
<path style="fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:0.0661458;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="m 61.912493,39.687495 c -1.753505,0 -3.175,1.421495 -3.175,3.175 0,1.753504 1.421495,3.175 3.175,3.175 1.753505,0 3.175,-1.421496 3.175,-3.175 0,-1.753505 -1.421495,-3.175 -3.175,-3.175 z m 0,1.322916 1.852083,1.852084 h -1.322917 v 1.5875 h -1.058333 v -1.5875 h -1.322917 z" id="import" class="sprite" />
<g id="set-zoom" class="sprite" transform="translate(36.946025,8.4770146)">
<polygon points="28.965,82.305 11.27,100 0,88.737 17.702,71.042 9.297,62.644 37.37,62.644 37.37,90.703 " id="polygon3044" transform="matrix(0.0635,0,0,0.0635,2.2709793,12.435385)" style="fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:1.04167;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<polygon points="62.644,37.357 90.71,37.37 82.298,28.958 100,11.263 88.743,0 71.042,17.708 62.644,9.31 " id="polygon3048" transform="matrix(0.0635,0,0,0.0635,2.2709793,12.435385)" style="fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:1.04167;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path inkscape:connector-curvature="0" d="m 5.4459792,14.83486 c -0.428308,0 -0.775525,0.347281 -0.775525,0.775525 0,0.429133 0.347281,0.776415 0.775525,0.776415 0.428308,0 0.77597,-0.347282 0.77597,-0.776415 0,-0.428307 -0.347662,-0.775525 -0.77597,-0.775525 z" id="path3052" style="fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:0.0661458;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
<path d="m 12.46022,12.700003 c -0.890121,-0.0021 -1.610322,0.711677 -1.612305,1.5875 0.002,0.877761 0.722184,1.586074 1.612305,1.5875 0.593513,-8.73e-4 1.110529,-0.321123 1.389062,-0.79375 h 0.65319 l 0.520899,-0.504362 0.396875,0.380339 0.380338,-0.372071 0.388607,0.380339 0.396875,-0.380339 0.388607,0.380339 0.677995,-0.65319 c 0.09761,-0.09927 0.100015,-0.174188 0,-0.272852 l -0.553972,-0.545703 h -3.241145 c -0.277125,-0.47713 -0.799764,-0.794984 -1.397331,-0.79375 z m -0.7028,1.157552 c 0.233963,-0.0011 0.419905,0.187463 0.42168,0.42168 -0.0017,0.230957 -0.187613,0.419542 -0.42168,0.42168 -0.237929,-0.0024 -0.43214,-0.190723 -0.429948,-0.42168 -0.0022,-0.234217 0.192019,-0.422799 0.429948,-0.42168 z" id="permissions" style="fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:0.0661458;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" class="sprite" />
<path d="m 60.085215,50.799999 c -0.890121,-0.0021 -1.610322,0.711677 -1.612305,1.5875 0.002,0.877761 0.722184,1.586074 1.612305,1.5875 0.593513,-8.73e-4 1.110529,-0.321123 1.389062,-0.79375 h 0.65319 l 0.520899,-0.504362 0.396875,0.380339 0.380338,-0.372071 0.388607,0.380339 0.396875,-0.380339 0.388607,0.380339 0.677995,-0.65319 c 0.09761,-0.09927 0.100015,-0.174188 0,-0.272852 l -0.553972,-0.545703 h -3.241145 c -0.277125,-0.47713 -0.799764,-0.794984 -1.397331,-0.79375 z m -0.7028,1.157552 c 0.233963,-0.0011 0.419905,0.187463 0.42168,0.42168 -0.0017,0.230957 -0.187613,0.419542 -0.42168,0.42168 -0.237929,-0.0024 -0.43214,-0.190723 -0.429948,-0.42168 -0.0022,-0.234217 0.192019,-0.422799 0.429948,-0.42168 z" id="permissions" style="fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:0.0661458;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" class="sprite" />
<path inkscape:connector-curvature="0" id="search" d="m 7.9375008,26.143489 -1.70307,-1.703547 c 0.229227,-0.378139 0.363561,-0.821298 0.363561,-1.296006 0,-1.384683 -1.120561,-2.50596 -2.505246,-2.506439 -1.383729,5.29e-4 -2.505246,1.121756 -2.505246,2.506201 0,1.383491 1.121756,2.504776 2.505963,2.504776 0.474948,0 0.917387,-0.134337 1.295528,-0.363564 l 1.704026,1.704028 z m -5.39413,-2.999791 c 0.0014,-0.856197 0.693896,-1.548659 1.549853,-1.550093 0.855718,0.0019 1.548419,0.693896 1.549853,1.550093 -0.0017,0.855478 -0.694135,1.548424 -1.549853,1.54962 -0.856196,0 -1.548658,-0.694142 -1.549853,-1.54962 z" style="fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:0.0661458;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" class="sprite" />
<g id="delete-marker" transform="matrix(0.2645833,0,0,0.26458333,-14.438689,-237.91845)" style="fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" class="sprite">
<g id="delete-marker" transform="matrix(0.2645833,0,0,0.26458333,23.529018,-228.26116)" style="fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" class="sprite">
<path id="path3378-6" d="m 178.57143,979.21934 c -3.0625,0 -6.125,2.1197 -7,6.375 0,2.5532 1.75,7.6676 7,13.625 3.4166,-3.877 5.31568,-7.3755 6.25,-10.0625 -1.31416,-0.1622 -2.497,-0.7235 -3.40625,-1.5938 -0.63462,0.8653 -1.6677,1.4375 -2.84375,1.4375 -1.933,0 -3.5,-1.5261 -3.5,-3.4062 0,-1.8801 1.567,-3.4063 3.5,-3.4063 0.36776,0 0.72951,0.085 1.0625,0.1875 0.14352,-1.0312 0.55799,-1.956 1.15625,-2.75 -0.72276,-0.259 -1.46314,-0.4062 -2.21875,-0.4062 z" style="fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" inkscape:connector-curvature="0" />
<path inkscape:connector-curvature="0" id="path6764" d="m 185.57143,978.21934 c -2.76142,0 -5,2.2386 -5,5 0,2.7615 2.23858,5 5,5 2.76142,0 5,-2.2385 5,-5 0,-2.7614 -2.23858,-5 -5,-5 z m -1.81818,2.2727 1.81818,1.8182 1.81818,-1.8182 0.90909,0.9091 -1.81818,1.8182 1.81818,1.8182 -0.90909,0.9091 -1.81818,-1.8182 -1.81818,1.8182 -0.90909,-0.9091 1.81818,-1.8182 -1.81818,-1.8182 z" style="fill:#f2f2f2;fill-opacity:1;fill-rule:nonzero;stroke:#999999;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
<g id="multipolygon" class="sprite" transform="translate(-0.7330895,-3.9687147)">
<g id="multipolygon" class="sprite" transform="translate(65.96671,15.081286)">
<path style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:0.0661458;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker:none;enable-background:accumulate" d="m 2.8497553,33.337461 v 0.132292 0.79375 0.132292 h 0.132292 0.347266 l -0.42168,3.704166 h -0.454753 -0.132291 v 0.132292 0.79375 0.132292 h 0.132291 0.79375 0.132292 v -0.132292 -0.421693 c 0,0 3.6291619,-2.885599 3.6297519,-2.885599 h 0.47129 0.132291 v -0.132291 -0.79375 -0.132292 h -0.132291 -0.79375 -0.132292 v 0.132292 0.214974 l -2.645833,-0.95086 v -0.587031 -0.132292 h -0.132292 -0.7937499 z m 0.264584,0.264584 h 0.5291659 v 0.529166 h -0.5291659 z m 3.7041659,1.322916 h 0.529167 v 0.529167 h -0.529167 z m -4.2333329,3.439584 h 0.529167 v 0.529166 h -0.529167 z" id="rect4058-1-2" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccc" />
<path style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:0.0661458;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker:none;enable-background:accumulate" d="m 4.9168132,40.216628 h -0.926042 -0.132292 v 0.132292 0.79375 0.132291 h 0.132292 0.79375 0.132292 v -0.132291 -0.421667 l 2.645833,-0.181901 v 0.338984 0.132292 h 0.132292 0.793749 0.132292 v -0.132292 -0.79375 -0.132291 h -0.132292 -0.305924 l -0.644922,-2.116667 h 0.471289 0.132292 v -0.132292 -0.79375 -0.132291 h -0.132292 -0.79375 -0.181901 c 0,0.79375 0,0.79375 0,0.79375 0,0 -2.067057,2.645833 -2.116666,2.645833 z m 2.430859,-3.175 h 0.529167 v 0.529167 h -0.529167 z m 0.479557,3.175 h 0.529167 v 0.529167 h -0.529167 z m -3.704166,0.264583 c 0.529166,0 0,0 0.529166,0 v 0.529167 h -0.529166 z" id="rect4058-1-2-0" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccccccccccc" />
</g>
<g id="multiline">
<g id="multiline" transform="translate(57.149996,38.099996)">
<path inkscape:connector-curvature="0" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:0.0661458;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker:none;enable-background:accumulate" d="m 11.906249,29.898045 v 0.132292 0.79375 0.132292 h 0.132291 0.79375 0.132292 v -0.132292 -0.09096 l 2.645832,1.058334 v 0.355547 0.115755 l 0.289388,0.0164 h 0.636654 0.132292 v -0.132292 -0.79375 -0.132291 h -0.132292 -0.79375 -0.132292 v 0.132291 0.148829 l -2.645832,-1.058334 v -0.413411 -0.132292 h -0.132292 -0.79375 z m 0.264583,0.264584 h 0.529167 v 0.529166 h -0.529167 z m 3.704166,1.322916 h 0.529166 v 0.529167 h -0.529166 z" id="rect4058-9" sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccc" />
<path inkscape:connector-curvature="0" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:0.0661458;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker:none;enable-background:accumulate" d="m 12.989387,32.320492 v 0.355547 0.115755 l 1.876888,2.926953 h 0.636653 0.132292 v 0.132292 0.79375 0.132291 h -0.132292 -0.79375 -0.132291 v -0.132291 -0.79375 -0.09922 l -1.876888,-2.94349 h -0.636654 -0.132292 v -0.132291 -0.79375 -0.132292 h 0.132292 0.79375 0.132292 v 0.132292 0.148828 z m -0.264584,-0.305912 h -0.529166 v 0.529167 h 0.529166 z m 2.645834,3.96875 h -0.529167 v 0.529167 h 0.529167 z" id="rect4058-9-5" sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccc" />
</g>
<path style="fill:#f2f2f2;fill-opacity:1;fill-rule:evenodd;stroke:#999999;stroke-width:0.0468913;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="m 33.328633,32.279163 -2.107805,2.116665 h 4.233333 z" id="arrow-up" inkscape:connector-curvature="0" sodipodi:nodetypes="cccc" />
<path style="fill:#f2f2f2;fill-opacity:1;fill-rule:evenodd;stroke:#999999;stroke-width:0.0468312;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="m 23.812496,34.395828 2.116666,-2.116667 h -4.233332 z" id="arrow-down" inkscape:connector-curvature="0" sodipodi:nodetypes="cccc" />
<path d="m 11.394294,23.74341 h 4e-6 c 0.0102,-0.0168 0.02435,-0.0308 0.04124,-0.04083 l 9e-6,-2.6e-5 0.353087,-0.209723 2.475253,1.470258 0.01763,0.01048 0.01763,-0.01048 2.475273,-1.470258 0.353093,0.209723 c 0,0 0,0 0,0 0.05689,0.03382 0.07555,0.107108 0.04128,0.163737 -0.01019,0.01679 -0.02442,0.03085 -0.0413,0.04091 0,0 0,0 0,0 l -2.845967,1.690437 -2.845965,-1.690437 c -10e-7,0 -2e-6,0 -3e-6,0 -0.05691,-0.03382 -0.07557,-0.107161 -0.04125,-0.16379 z m 0,1.434967 h 4e-6 c 0.0102,-0.01682 0.02435,-0.03083 0.04124,-0.04086 h 9e-6 l 0.353087,-0.209751 2.475253,1.470286 0.01763,0.01046 0.01763,-0.01046 2.475273,-1.470286 0.353093,0.209751 c 0.05689,0.03379 0.07555,0.107134 0.04125,0.163763 l 0.02915,0.01701 -0.02912,-0.01703 c -0.01019,0.0168 -0.02442,0.03083 -0.0413,0.04091 0,0 0,0 0,0 l -2.70492,1.606643 c -0.08683,0.05158 -0.195264,0.05158 -0.282094,0 l -2.704918,-1.60667 c -10e-7,0 -2e-6,0 -3e-6,0 -0.05691,-0.03382 -0.07557,-0.107134 -0.04125,-0.163763 z m 0.04125,-2.690882 -0.01757,0.02848 0.01757,-0.02848 c -0.05691,-0.0338 -0.07557,-0.107135 -0.04125,-0.163761 l 2e-6,-2e-6 c 0.01019,-0.01679 0.02435,-0.03081 0.04125,-0.04086 h 2e-6 l 2.704921,-1.606703 c 0.08683,-0.05157 0.195264,-0.05157 0.282093,0 l 2.704948,1.6067 c 0.05689,0.0338 0.07555,0.107141 0.04125,0.163771 -0.01019,0.01681 -0.02438,0.03082 -0.04125,0.04086 l -2.845994,1.690461 z" fill="#f2f2f2" stroke="#999999" stroke-width="0.0661458" id="datalayers" />
<g id="tilelayers" transform="matrix(1.0024854,0,0,1.0105262,0.44603182,-0.58486809)" style="stroke-width:0.993545">
<path d="m 39.96929,52.318413 h 4e-6 c 0.0102,-0.0168 0.02435,-0.0308 0.04124,-0.04083 l 9e-6,-2.6e-5 0.353087,-0.209723 2.475253,1.470258 0.01763,0.01048 0.01763,-0.01048 2.475273,-1.470258 0.353093,0.209723 c 0,0 0,0 0,0 0.05689,0.03382 0.07555,0.107108 0.04128,0.163737 -0.01019,0.01679 -0.02442,0.03085 -0.0413,0.04091 0,0 0,0 0,0 l -2.845967,1.690437 -2.845965,-1.690437 c -10e-7,0 -2e-6,0 -3e-6,0 -0.05691,-0.03382 -0.07557,-0.107161 -0.04125,-0.16379 z m 0,1.434967 h 4e-6 c 0.0102,-0.01682 0.02435,-0.03083 0.04124,-0.04086 h 9e-6 l 0.353087,-0.209751 2.475253,1.470286 0.01763,0.01046 0.01763,-0.01046 2.475273,-1.470286 0.353093,0.209751 c 0.05689,0.03379 0.07555,0.107134 0.04125,0.163763 l 0.02915,0.01701 -0.02912,-0.01703 c -0.01019,0.0168 -0.02442,0.03083 -0.0413,0.04091 0,0 0,0 0,0 l -2.70492,1.606643 c -0.08683,0.05158 -0.195264,0.05158 -0.282094,0 l -2.704918,-1.60667 c -10e-7,0 -2e-6,0 -3e-6,0 -0.05691,-0.03382 -0.07557,-0.107134 -0.04125,-0.163763 z m 0.04125,-2.690882 -0.01757,0.02848 0.01757,-0.02848 c -0.05691,-0.0338 -0.07557,-0.107135 -0.04125,-0.163761 l 2e-6,-2e-6 c 0.01019,-0.01679 0.02435,-0.03081 0.04125,-0.04086 h 2e-6 l 2.704921,-1.606703 c 0.08683,-0.05157 0.195264,-0.05157 0.282093,0 l 2.704948,1.6067 c 0.05689,0.0338 0.07555,0.107141 0.04125,0.163771 -0.01019,0.01681 -0.02438,0.03082 -0.04125,0.04086 l -2.845994,1.690461 z" fill="#f2f2f2" stroke="#999999" stroke-width="0.0661458" id="datalayers" />
<g id="tilelayers" transform="matrix(1.0024854,0,0,1.0105262,19.49603,56.565125)" style="stroke-width:0.993545">
<path d="m 25.978244,7.8843707 h 0.03307 v -0.033073 -3.5463476 -0.033073 h -0.03307 -3.713453 -0.03307 v 0.033073 3.5463476 0.033073 h 0.03307 z m -3.978701,-4.1590643 h 4.243946 c 0.06157,0 0.120623,0.024461 0.164173,0.068001 0.04352,0.04354 0.068,0.1025948 0.068,0.1641713 v 4.2439425 c 0,0.061569 -0.02447,0.1206236 -0.068,0.164174 -0.04355,0.04355 -0.102605,0.067998 -0.164173,0.067998 h -4.243946 c -0.06158,0 -0.120628,-0.024448 -0.164171,-0.067998 -0.04354,-0.04355 -0.068,-0.1026054 -0.068,-0.164174 v -4.2439425 c 0,-0.061577 0.02446,-0.1206315 0.068,-0.1641713 0.04354,-0.04354 0.102595,-0.068001 0.164171,-0.068001 z" fill="#f2f2f2" stroke="#999999" stroke-width="0.0657188" id="path1257" />
<g mask="url(#mask0_181_11916)" id="g1284" transform="matrix(0.2645833,0,0,0.2645833,20.108331,2.1166664)" style="stroke-width:0.993545">
<path d="m 16.0401,2.3158 h -14.0351 v 14.0351 h 14.0351 z" fill="#d5ecbe" id="path1262" style="stroke-width:0.992312" />
@ -71,9 +71,12 @@
</g>
<path d="m 24.352274,6.3088036 h 0.03307 v -0.033073 -3.5463449 -0.033073 h -0.03307 -3.713451 -0.03307 v 0.033073 3.5463449 0.033073 h 0.03307 z m -3.978696,-4.1590643 h 4.24394 c 0.06157,0 0.120624,0.024461 0.164174,0.068002 0.04355,0.043541 0.068,0.102595 0.068,0.1641723 v 4.2439399 c 0,0.061569 -0.02445,0.1206236 -0.068,0.164174 -0.04355,0.04355 -0.102605,0.067998 -0.164174,0.067998 h -4.24394 c -0.06158,0 -0.120631,-0.024447 -0.164172,-0.067998 -0.04354,-0.04355 -0.068,-0.1026054 -0.068,-0.164174 v -4.2439399 c 0,-0.061577 0.02446,-0.1206315 0.068,-0.1641723 0.04354,-0.043541 0.102595,-0.068002 0.164172,-0.068002 z" fill="#f2f2f2" stroke="#999999" stroke-width="0.0657188" id="path1286" />
</g>
<g id="info" transform="matrix(0.33072916,0,0,0.33072916,-11.906249,-256.10415)" style="stroke-width:0.8">
<g id="info" transform="matrix(0.33072916,0,0,0.33072916,7.1437485,-265.81337)" style="stroke-width:0.8">
<path id="path3762" style="fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:0.2;stroke-dasharray:none;stroke-opacity:1" d="m 107.99999,838.36217 a 8,8 0 0 0 -7.999998,8 8,8 0 0 0 7.999998,8 8,8 0 0 0 8,-8 8,8 0 0 0 -8,-8 z m 0,2.5 a 1.5,1.5 0 0 1 1.5,1.5 1.5,1.5 0 0 1 -1.5,1.5 1.5,1.5 0 0 1 -1.5,-1.5 1.5,1.5 0 0 1 1.5,-1.5 z m -1,4.5 h 2 v 6 h -2 z" />
</g>
<path d="m 5.6444435,59.43432 v 1.034991 h 1.0541546 z m 1.1759257,1.612262 h -1.1759257 c -0.3247228,0 -0.5879626,-0.258453 -0.5879626,-0.577271 v -1.154545 h -2.3518514 v 5.195451 h 4.1157397 z m -4.1157397,-2.309089 h 3.0615854 l 1.6421175,1.612259 v 4.160465 c 0,0.318822 -0.2632403,0.577275 -0.5879632,0.577275 h -4.1157397 c -0.3247231,0 -0.5879631,-0.258453 -0.5879631,-0.577275 v -5.195451 c 0,-0.31882 0.26324,-0.577273 0.5879631,-0.577273 z m 1.7638882,3.92135 v -1.323625 h 0.5879632 v 1.323625 l 0.3800861,-0.373177 0.415753,0.408196 -1.0898206,1.070004 -1.0898208,-1.070004 0.4157526,-0.408196 z" fill-rule="evenodd" id="downloadfile" style="fill:#f2f2f2;fill-opacity:1;stroke-width:0.06614583;stroke:#999999;stroke-opacity:0.50980395;stroke-dasharray:none" />
<path d="m 5.6444435,59.43432 v 1.034991 h 1.0541546 z m 1.1759257,1.612262 h -1.1759257 c -0.3247228,0 -0.5879626,-0.258453 -0.5879626,-0.577271 v -1.154545 h -2.3518514 v 5.195451 h 4.1157397 z m -4.1157397,-2.309089 h 3.0615854 l 1.6421175,1.612259 v 4.160465 c 0,0.318822 -0.2632403,0.577275 -0.5879632,0.577275 h -4.1157397 c -0.3247231,0 -0.5879631,-0.258453 -0.5879631,-0.577275 v -5.195451 c 0,-0.31882 0.26324,-0.577273 0.5879631,-0.577273 z m 1.7638882,3.92135 v -1.323625 h 0.5879632 v 1.323625 l 0.3800861,-0.373177 0.415753,0.408196 -1.0898206,1.070004 -1.0898208,-1.070004 0.4157526,-0.408196 z" fill-rule="evenodd" id="downloadfile" style="fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:0.0661458;stroke-dasharray:none;stroke-opacity:0.509804" />
<path id="path3014" style="fill:#f2f2f2;stroke:#999999;stroke-opacity:1;stroke-width:0.06614583;stroke-dasharray:none;fill-opacity:1" d="M 4.6307246 2.6463498 C 3.0979756 2.6463498 1.8515665 3.8912088 1.8515664 5.4239577 C 1.8515664 6.9567067 3.0979756 8.2010487 4.6307246 8.2010488 C 6.1634736 8.2010488 7.4083325 6.9567067 7.4083325 5.4239577 C 7.4083325 3.8912088 6.1634735 2.6463498 4.6307246 2.6463498 z M 4.6307246 2.9098996 C 6.0204823 2.9098995 7.1447827 4.0342 7.1447827 5.4239577 C 7.1447827 6.8137155 6.0204823 7.9374991 4.6307246 7.9374991 C 3.2409669 7.937499 2.1171832 6.8137154 2.1171832 5.4239577 C 2.1171833 4.0342 3.2409669 2.9098996 4.6307246 2.9098996 z M 4.6265904 3.6602413 C 4.4830079 3.6602413 4.3339769 3.6757056 4.1795894 3.7067501 C 4.0252001 3.7376887 3.8542856 3.7854994 3.667476 3.8504105 L 3.667476 4.5790481 C 3.8249518 4.476919 3.9765859 4.4006165 4.1217118 4.3496048 C 4.2668361 4.2971467 4.4017991 4.2705399 4.5268549 4.2705399 C 4.6596277 4.2705399 4.7628056 4.3016097 4.8369135 4.3635574 C 4.9110183 4.4238471 4.9480162 4.5079171 4.9480178 4.6162552 C 4.9480162 4.6874104 4.9271727 4.758453 4.8854893 4.8296788 C 4.8453469 4.9008341 4.7812531 4.9766217 4.693253 5.0570551 L 4.5454584 5.1919305 C 4.3818056 5.3435544 4.2744616 5.4685934 4.2235143 5.5676182 C 4.172565 5.6651259 4.1470332 5.7776896 4.1470332 5.9045485 L 4.1470332 6.0182366 L 4.9831578 6.0182366 L 4.9831578 5.9138502 C 4.9831561 5.8442119 4.9993102 5.7803848 5.0317336 5.7231642 C 5.0641535 5.6643561 5.1329366 5.5870926 5.2379226 5.491137 L 5.3857171 5.3588454 C 5.53084 5.2211562 5.6334948 5.0929891 5.6937086 4.973856 C 5.7539162 4.8531707 5.7841399 4.7167194 5.7841424 4.5650955 C 5.7841399 4.2696088 5.6856516 4.0454092 5.4880365 3.8922684 C 5.2904177 3.7375754 5.0032968 3.6602413 4.6265904 3.6602413 z M 4.1470332 6.3618848 L 4.1470332 7.1876741 L 4.9831578 7.1876741 L 4.9831578 6.3618848 L 4.1470332 6.3618848 z " />
<g id="text3784" style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.75" transform="matrix(0.35277776,0,0,0.35277776,1.8079862,-363.00384)" />
<path id="copy" style="fill:#f2f2f2;stroke-width:0.264582;paint-order:fill markers stroke;fill-opacity:1" d="m 42.218298,69.320832 v 1.288405 h 1.472463 v 1.472465 h 1.288405 v -2.76087 z m -1.472465,1.472463 v 2.760871 h 2.760869 v -2.760871 z" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Some files were not shown because too many files have changed in this diff Show more