umap-project 2.8.1__py3-none-any.whl → 2.9.0b0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of umap-project might be problematic. Click here for more details.
- umap/__init__.py +1 -1
- umap/asgi.py +12 -7
- umap/context_processors.py +1 -0
- umap/locale/en/LC_MESSAGES/django.po +102 -59
- umap/locale/fr/LC_MESSAGES/django.mo +0 -0
- umap/locale/fr/LC_MESSAGES/django.po +105 -61
- umap/locale/hu/LC_MESSAGES/django.mo +0 -0
- umap/locale/hu/LC_MESSAGES/django.po +10 -10
- umap/management/commands/empty_trash.py +12 -1
- umap/migrations/0026_datalayer_modified_at_datalayer_share_status.py +26 -0
- umap/models.py +23 -3
- umap/settings/base.py +4 -1
- umap/static/umap/base.css +1 -1
- umap/static/umap/content.css +2 -22
- umap/static/umap/css/bar.css +7 -10
- umap/static/umap/css/form.css +28 -29
- umap/static/umap/css/icon.css +8 -2
- umap/static/umap/css/panel.css +2 -1
- umap/static/umap/css/tooltip.css +33 -31
- umap/static/umap/img/16-white.svg +2 -0
- umap/static/umap/img/16.svg +1 -1
- umap/static/umap/img/providers/bitbucket.png +0 -0
- umap/static/umap/img/providers/github.png +0 -0
- umap/static/umap/img/providers/keycloak.png +0 -0
- umap/static/umap/img/providers/openstreetmap-oauth2.png +0 -0
- umap/static/umap/img/providers/twitter-oauth2.png +0 -0
- umap/static/umap/img/source/16-white.svg +3 -1
- umap/static/umap/img/source/16.svg +1 -1
- umap/static/umap/js/components/alerts/alert.js +4 -1
- umap/static/umap/js/modules/browser.js +6 -6
- umap/static/umap/js/modules/caption.js +30 -7
- umap/static/umap/js/modules/data/features.js +21 -24
- umap/static/umap/js/modules/data/layer.js +71 -33
- umap/static/umap/js/modules/form/builder.js +241 -0
- umap/static/umap/js/modules/form/fields.js +1338 -0
- umap/static/umap/js/modules/formatter.js +5 -8
- umap/static/umap/js/modules/help.js +3 -1
- umap/static/umap/js/modules/importer.js +1 -1
- umap/static/umap/js/modules/permissions.js +5 -4
- umap/static/umap/js/modules/rendering/icon.js +5 -1
- umap/static/umap/js/modules/rendering/layers/classified.js +11 -7
- umap/static/umap/js/modules/rendering/layers/cluster.js +11 -1
- umap/static/umap/js/modules/rendering/map.js +0 -2
- umap/static/umap/js/modules/rules.js +2 -1
- umap/static/umap/js/modules/schema.js +5 -6
- umap/static/umap/js/modules/share.js +3 -3
- umap/static/umap/js/modules/sync/engine.js +18 -13
- umap/static/umap/js/modules/sync/updaters.js +8 -0
- umap/static/umap/js/modules/sync/websocket.js +10 -5
- umap/static/umap/js/modules/tableeditor.js +3 -2
- umap/static/umap/js/modules/ui/bar.js +17 -9
- umap/static/umap/js/modules/ui/base.js +7 -24
- umap/static/umap/js/modules/ui/tooltip.js +19 -11
- umap/static/umap/js/modules/umap.js +39 -27
- umap/static/umap/js/modules/utils.js +196 -12
- umap/static/umap/js/umap.controls.js +1 -13
- umap/static/umap/locale/br.js +21 -13
- umap/static/umap/locale/br.json +21 -13
- umap/static/umap/locale/ca.js +12 -4
- umap/static/umap/locale/ca.json +12 -4
- umap/static/umap/locale/cs_CZ.js +10 -4
- umap/static/umap/locale/cs_CZ.json +10 -4
- umap/static/umap/locale/de.js +12 -4
- umap/static/umap/locale/de.json +12 -4
- umap/static/umap/locale/el.js +12 -4
- umap/static/umap/locale/el.json +12 -4
- umap/static/umap/locale/en.js +9 -4
- umap/static/umap/locale/en.json +9 -4
- umap/static/umap/locale/es.js +20 -12
- umap/static/umap/locale/es.json +20 -12
- umap/static/umap/locale/eu.js +12 -4
- umap/static/umap/locale/eu.json +12 -4
- umap/static/umap/locale/fa_IR.js +12 -4
- umap/static/umap/locale/fa_IR.json +12 -4
- umap/static/umap/locale/fr.js +10 -5
- umap/static/umap/locale/fr.json +10 -5
- umap/static/umap/locale/gl.js +353 -345
- umap/static/umap/locale/gl.json +353 -345
- umap/static/umap/locale/hu.js +34 -26
- umap/static/umap/locale/hu.json +34 -26
- umap/static/umap/locale/it.js +100 -92
- umap/static/umap/locale/it.json +100 -92
- umap/static/umap/locale/ms.js +12 -4
- umap/static/umap/locale/ms.json +12 -4
- umap/static/umap/locale/nl.js +12 -4
- umap/static/umap/locale/nl.json +12 -4
- umap/static/umap/locale/pl.js +12 -4
- umap/static/umap/locale/pl.json +12 -4
- umap/static/umap/locale/pt.js +12 -4
- umap/static/umap/locale/pt.json +12 -4
- umap/static/umap/locale/pt_PT.js +12 -4
- umap/static/umap/locale/pt_PT.json +12 -4
- umap/static/umap/locale/th_TH.js +12 -4
- umap/static/umap/locale/th_TH.json +12 -4
- umap/static/umap/locale/zh_TW.js +10 -4
- umap/static/umap/locale/zh_TW.json +10 -4
- umap/static/umap/map.css +12 -8
- umap/static/umap/nav.css +2 -3
- umap/static/umap/unittests/utils.js +14 -0
- umap/static/umap/vars.css +2 -0
- umap/sync/__init__.py +0 -0
- umap/sync/app.py +181 -0
- umap/sync/payloads.py +49 -0
- umap/templates/auth/user_detail.html +4 -0
- umap/templates/auth/user_form.html +9 -6
- umap/templates/auth/user_stars.html +4 -0
- umap/templates/base.html +1 -1
- umap/templates/registration/login.html +2 -5
- umap/templates/umap/about.html +5 -0
- umap/templates/umap/about_summary.html +2 -2
- umap/templates/umap/components/provider.html +8 -0
- umap/templates/umap/js.html +0 -3
- umap/templates/umap/map_detail.html +1 -1
- umap/templates/umap/password_change.html +4 -0
- umap/templates/umap/password_change_done.html +4 -0
- umap/templates/umap/search.html +4 -0
- umap/templates/umap/team_confirm_delete.html +4 -0
- umap/templates/umap/team_detail.html +4 -0
- umap/templates/umap/team_form.html +4 -0
- umap/templates/umap/user_dashboard.html +1 -1
- umap/templates/umap/user_teams.html +4 -0
- umap/tests/base.py +3 -1
- umap/tests/integration/conftest.py +16 -23
- umap/tests/integration/test_basics.py +2 -2
- umap/tests/integration/test_caption.py +1 -0
- umap/tests/integration/test_draw_polygon.py +3 -3
- umap/tests/integration/test_edit_datalayer.py +1 -1
- umap/tests/integration/test_edit_map.py +3 -3
- umap/tests/integration/test_edit_polygon.py +1 -1
- umap/tests/integration/test_import.py +23 -1
- umap/tests/integration/test_optimistic_merge.py +1 -0
- umap/tests/integration/test_picto.py +8 -8
- umap/tests/integration/test_save.py +1 -0
- umap/tests/integration/test_star.py +13 -9
- umap/tests/integration/test_tableeditor.py +1 -0
- umap/tests/integration/test_websocket_sync.py +112 -33
- umap/tests/settings.py +2 -0
- umap/tests/test_datalayer.py +2 -3
- umap/tests/test_datalayer_views.py +20 -1
- umap/tests/test_empty_trash.py +10 -3
- umap/tests/test_map_views.py +11 -0
- umap/utils.py +24 -11
- umap/views.py +37 -6
- {umap_project-2.8.1.dist-info → umap_project-2.9.0b0.dist-info}/METADATA +15 -15
- {umap_project-2.8.1.dist-info → umap_project-2.9.0b0.dist-info}/RECORD +148 -147
- {umap_project-2.8.1.dist-info → umap_project-2.9.0b0.dist-info}/WHEEL +1 -1
- umap/management/commands/run_websocket_server.py +0 -23
- umap/settings/local_s3.py +0 -45
- umap/static/umap/bitbucket.png +0 -0
- umap/static/umap/github.png +0 -0
- umap/static/umap/js/umap.forms.js +0 -1242
- umap/static/umap/keycloak.png +0 -0
- umap/static/umap/openstreetmap.png +0 -0
- umap/static/umap/twitter.png +0 -0
- umap/static/umap/vendors/formbuilder/Leaflet.FormBuilder.js +0 -468
- umap/tests/test_websocket_server.py +0 -22
- umap/websocket_server.py +0 -202
- {umap_project-2.8.1.dist-info → umap_project-2.9.0b0.dist-info}/entry_points.txt +0 -0
- {umap_project-2.8.1.dist-info → umap_project-2.9.0b0.dist-info}/licenses/LICENSE +0 -0
|
@@ -17,16 +17,16 @@
|
|
|
17
17
|
# spf, 2019
|
|
18
18
|
# Syl Martin, 2023
|
|
19
19
|
# Philippe Verdy, 2017
|
|
20
|
-
# yohanboniface <yohanboniface@free.fr>, 2013-2014,2018-2019,2023-
|
|
20
|
+
# yohanboniface <yohanboniface@free.fr>, 2013-2014,2018-2019,2023-2025
|
|
21
21
|
# YOHAN BONIFACE <yb@enix.org>, 2012
|
|
22
22
|
# yohanboniface <yohanboniface@free.fr>, 2014,2016
|
|
23
23
|
msgid ""
|
|
24
24
|
msgstr ""
|
|
25
25
|
"Project-Id-Version: uMap\n"
|
|
26
26
|
"Report-Msgid-Bugs-To: \n"
|
|
27
|
-
"POT-Creation-Date:
|
|
27
|
+
"POT-Creation-Date: 2025-01-31 17:29+0000\n"
|
|
28
28
|
"PO-Revision-Date: 2013-11-22 14:00+0000\n"
|
|
29
|
-
"Last-Translator: yohanboniface <yohanboniface@free.fr>, 2013-2014,2018-2019,2023-
|
|
29
|
+
"Last-Translator: yohanboniface <yohanboniface@free.fr>, 2013-2014,2018-2019,2023-2025\n"
|
|
30
30
|
"Language-Team: French (http://app.transifex.com/openstreetmap/umap/language/fr/)\n"
|
|
31
31
|
"MIME-Version: 1.0\n"
|
|
32
32
|
"Content-Type: text/plain; charset=UTF-8\n"
|
|
@@ -50,7 +50,7 @@ msgstr "Le site est en lecture seule pour maintenance."
|
|
|
50
50
|
msgid "name"
|
|
51
51
|
msgstr "nom"
|
|
52
52
|
|
|
53
|
-
#: models.py:62 models.py:
|
|
53
|
+
#: models.py:62 models.py:485
|
|
54
54
|
msgid "description"
|
|
55
55
|
msgstr "description"
|
|
56
56
|
|
|
@@ -70,23 +70,23 @@ msgstr "Modèle d'URL au format des tuiles OSM"
|
|
|
70
70
|
msgid "Order of the tilelayers in the edit box"
|
|
71
71
|
msgstr "Ordre des calques de tuiles dans le panneau de modification"
|
|
72
72
|
|
|
73
|
-
#: models.py:175 models.py:
|
|
73
|
+
#: models.py:175 models.py:479
|
|
74
74
|
msgid "Only editable with secret edit link"
|
|
75
75
|
msgstr "Modifiable seulement avec le lien de modification secret"
|
|
76
76
|
|
|
77
|
-
#: models.py:176 models.py:
|
|
77
|
+
#: models.py:176 models.py:480
|
|
78
78
|
msgid "Everyone can edit"
|
|
79
79
|
msgstr "Tout le monde peut modifier"
|
|
80
80
|
|
|
81
|
-
#: models.py:179 models.py:
|
|
81
|
+
#: models.py:179 models.py:473
|
|
82
82
|
msgid "Everyone"
|
|
83
83
|
msgstr "Tout le monde"
|
|
84
84
|
|
|
85
|
-
#: models.py:180 models.py:189 models.py:
|
|
85
|
+
#: models.py:180 models.py:189 models.py:474
|
|
86
86
|
msgid "Editors and team only"
|
|
87
87
|
msgstr "Éditeurs et équipe seulement"
|
|
88
88
|
|
|
89
|
-
#: models.py:181 models.py:
|
|
89
|
+
#: models.py:181 models.py:475
|
|
90
90
|
msgid "Owner only"
|
|
91
91
|
msgstr "Propriétaire uniquement"
|
|
92
92
|
|
|
@@ -106,7 +106,7 @@ msgstr "Quiconque a le lien"
|
|
|
106
106
|
msgid "Blocked"
|
|
107
107
|
msgstr "Bloquée"
|
|
108
108
|
|
|
109
|
-
#: models.py:191
|
|
109
|
+
#: models.py:191 models.py:469
|
|
110
110
|
msgid "Deleted"
|
|
111
111
|
msgstr "Supprimé"
|
|
112
112
|
|
|
@@ -146,31 +146,31 @@ msgstr "éditeurs"
|
|
|
146
146
|
msgid "team"
|
|
147
147
|
msgstr "équipe"
|
|
148
148
|
|
|
149
|
-
#: models.py:229 models.py:
|
|
149
|
+
#: models.py:229 models.py:501
|
|
150
150
|
msgid "edit status"
|
|
151
151
|
msgstr "statut de modification"
|
|
152
152
|
|
|
153
|
-
#: models.py:234
|
|
153
|
+
#: models.py:234 models.py:506
|
|
154
154
|
msgid "share status"
|
|
155
155
|
msgstr "qui a accès"
|
|
156
156
|
|
|
157
|
-
#: models.py:237 models.py:
|
|
157
|
+
#: models.py:237 models.py:496
|
|
158
158
|
msgid "settings"
|
|
159
159
|
msgstr "réglages"
|
|
160
160
|
|
|
161
|
-
#: models.py:
|
|
161
|
+
#: models.py:407
|
|
162
162
|
msgid "Clone of"
|
|
163
163
|
msgstr "Clone de"
|
|
164
164
|
|
|
165
|
-
#: models.py:
|
|
165
|
+
#: models.py:468 models.py:472 models.py:478
|
|
166
166
|
msgid "Inherit"
|
|
167
167
|
msgstr "Par défaut"
|
|
168
168
|
|
|
169
|
-
#: models.py:
|
|
169
|
+
#: models.py:491
|
|
170
170
|
msgid "display on load"
|
|
171
171
|
msgstr "afficher au chargement."
|
|
172
172
|
|
|
173
|
-
#: models.py:
|
|
173
|
+
#: models.py:492
|
|
174
174
|
msgid "Display this layer on load."
|
|
175
175
|
msgstr "Afficher ce calque au chargement."
|
|
176
176
|
|
|
@@ -189,40 +189,54 @@ msgstr "← Retour à la page d'accueil"
|
|
|
189
189
|
msgid "404 Page Not Found"
|
|
190
190
|
msgstr "404 Page Non Trouvée"
|
|
191
191
|
|
|
192
|
-
#: templates/auth/user_detail.html:
|
|
192
|
+
#: templates/auth/user_detail.html:6
|
|
193
|
+
#, python-format
|
|
194
|
+
msgid "%(current_user)s’s maps"
|
|
195
|
+
msgstr "Cartes de %(current_user)s"
|
|
196
|
+
|
|
197
|
+
#: templates/auth/user_detail.html:12
|
|
193
198
|
#, python-format
|
|
194
199
|
msgid "Browse %(current_user)s's maps"
|
|
195
200
|
msgstr "Consulter les cartes de %(current_user)s"
|
|
196
201
|
|
|
197
|
-
#: templates/auth/user_detail.html:
|
|
202
|
+
#: templates/auth/user_detail.html:21
|
|
198
203
|
#, python-format
|
|
199
204
|
msgid "%(current_user)s has no maps."
|
|
200
205
|
msgstr "%(current_user)s n'a aucune carte."
|
|
201
206
|
|
|
202
|
-
#: templates/auth/user_form.html:
|
|
207
|
+
#: templates/auth/user_form.html:6
|
|
208
|
+
msgid "My Profile"
|
|
209
|
+
msgstr "Mon profil"
|
|
210
|
+
|
|
211
|
+
#: templates/auth/user_form.html:24 templates/umap/team_form.html:25
|
|
203
212
|
msgid "Save"
|
|
204
213
|
msgstr "Enregistrer"
|
|
205
214
|
|
|
206
|
-
#: templates/auth/user_form.html:
|
|
215
|
+
#: templates/auth/user_form.html:30
|
|
207
216
|
msgid "Your current providers"
|
|
208
217
|
msgstr "Vos fournisseurs associés"
|
|
209
218
|
|
|
210
|
-
#: templates/auth/user_form.html:
|
|
219
|
+
#: templates/auth/user_form.html:44
|
|
211
220
|
msgid "Connect to another provider"
|
|
212
221
|
msgstr "Associer un autre fournisseur"
|
|
213
222
|
|
|
214
|
-
#: templates/auth/user_form.html:
|
|
223
|
+
#: templates/auth/user_form.html:47
|
|
215
224
|
msgid ""
|
|
216
225
|
"It's a good habit to connect your account to more than one provider, in case"
|
|
217
226
|
" one provider becomes unavailable, temporarily or even permanently."
|
|
218
227
|
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."
|
|
219
228
|
|
|
220
|
-
#: templates/auth/user_stars.html:
|
|
229
|
+
#: templates/auth/user_stars.html:6
|
|
230
|
+
#, python-format
|
|
231
|
+
msgid "%(current_user)s’s starred maps"
|
|
232
|
+
msgstr "Favoris de %(current_user)s"
|
|
233
|
+
|
|
234
|
+
#: templates/auth/user_stars.html:12
|
|
221
235
|
#, python-format
|
|
222
236
|
msgid "Browse %(current_user)s's starred maps"
|
|
223
237
|
msgstr "Consulter les cartes favorites de %(current_user)s"
|
|
224
238
|
|
|
225
|
-
#: templates/auth/user_stars.html:
|
|
239
|
+
#: templates/auth/user_stars.html:21
|
|
226
240
|
#, python-format
|
|
227
241
|
msgid "%(current_user)s has no starred maps yet."
|
|
228
242
|
msgstr "%(current_user)s n'a aucune carte favorite."
|
|
@@ -257,6 +271,10 @@ msgstr "Mot de passe"
|
|
|
257
271
|
msgid "Please choose a provider:"
|
|
258
272
|
msgstr "Choisissez un fournisseur :"
|
|
259
273
|
|
|
274
|
+
#: templates/umap/about.html:5 templates/umap/navigation.html:22
|
|
275
|
+
msgid "About"
|
|
276
|
+
msgstr "À propos"
|
|
277
|
+
|
|
260
278
|
#: templates/umap/about_summary.html:12
|
|
261
279
|
#, python-format
|
|
262
280
|
msgid ""
|
|
@@ -424,7 +442,7 @@ msgstr "par"
|
|
|
424
442
|
msgid "More"
|
|
425
443
|
msgstr "Plus"
|
|
426
444
|
|
|
427
|
-
#: templates/umap/map_table.html:8 templates/umap/user_teams.html:
|
|
445
|
+
#: templates/umap/map_table.html:8 templates/umap/user_teams.html:18
|
|
428
446
|
msgid "Name"
|
|
429
447
|
msgstr "Nom"
|
|
430
448
|
|
|
@@ -448,7 +466,7 @@ msgstr "Dernière modification"
|
|
|
448
466
|
msgid "Owner"
|
|
449
467
|
msgstr "Propriétaire"
|
|
450
468
|
|
|
451
|
-
#: templates/umap/map_table.html:26 templates/umap/user_teams.html:
|
|
469
|
+
#: templates/umap/map_table.html:26 templates/umap/user_teams.html:24
|
|
452
470
|
msgid "Actions"
|
|
453
471
|
msgstr "Actions"
|
|
454
472
|
|
|
@@ -461,7 +479,7 @@ msgid "Share"
|
|
|
461
479
|
msgstr "Partager"
|
|
462
480
|
|
|
463
481
|
#: templates/umap/map_table.html:78 templates/umap/map_table.html:80
|
|
464
|
-
#: templates/umap/user_teams.html:
|
|
482
|
+
#: templates/umap/user_teams.html:42 templates/umap/user_teams.html:44
|
|
465
483
|
msgid "Edit"
|
|
466
484
|
msgstr "Éditer"
|
|
467
485
|
|
|
@@ -524,10 +542,6 @@ msgstr "Connexion"
|
|
|
524
542
|
msgid "Sign in"
|
|
525
543
|
msgstr "Créer un compte"
|
|
526
544
|
|
|
527
|
-
#: templates/umap/navigation.html:22
|
|
528
|
-
msgid "About"
|
|
529
|
-
msgstr "À propos"
|
|
530
|
-
|
|
531
545
|
#: templates/umap/navigation.html:30
|
|
532
546
|
msgid "Change password"
|
|
533
547
|
msgstr "Changer le mot de passe"
|
|
@@ -536,41 +550,47 @@ msgstr "Changer le mot de passe"
|
|
|
536
550
|
msgid "Log out"
|
|
537
551
|
msgstr "Déconnexion"
|
|
538
552
|
|
|
539
|
-
#: templates/umap/password_change.html:
|
|
553
|
+
#: templates/umap/password_change.html:6
|
|
554
|
+
#: templates/umap/password_change.html:11
|
|
540
555
|
msgid "Password change"
|
|
541
556
|
msgstr "Changer le mot de passe"
|
|
542
557
|
|
|
543
|
-
#: templates/umap/password_change.html:
|
|
558
|
+
#: templates/umap/password_change.html:14
|
|
544
559
|
msgid ""
|
|
545
560
|
"Please enter your old password, for security's sake, and then enter your new"
|
|
546
561
|
" password twice so we can verify you typed it in correctly."
|
|
547
562
|
msgstr "Merci de renseigner votre mot de passe actuel, puis deux fois le nouveau."
|
|
548
563
|
|
|
549
|
-
#: templates/umap/password_change.html:
|
|
564
|
+
#: templates/umap/password_change.html:21
|
|
550
565
|
msgid "Old password"
|
|
551
566
|
msgstr "Ancien mot de passe"
|
|
552
567
|
|
|
553
|
-
#: templates/umap/password_change.html:
|
|
568
|
+
#: templates/umap/password_change.html:26
|
|
554
569
|
msgid "New password"
|
|
555
570
|
msgstr "Nouveau mot de passe"
|
|
556
571
|
|
|
557
|
-
#: templates/umap/password_change.html:
|
|
572
|
+
#: templates/umap/password_change.html:30
|
|
558
573
|
msgid "New password confirmation"
|
|
559
574
|
msgstr "Confirmation du nouveau mot de passe"
|
|
560
575
|
|
|
561
|
-
#: templates/umap/password_change.html:
|
|
576
|
+
#: templates/umap/password_change.html:31
|
|
562
577
|
msgid "Change my password"
|
|
563
578
|
msgstr "Changer de mot de passe"
|
|
564
579
|
|
|
565
|
-
#: templates/umap/password_change_done.html:
|
|
580
|
+
#: templates/umap/password_change_done.html:6
|
|
581
|
+
#: templates/umap/password_change_done.html:11
|
|
566
582
|
msgid "Password change successful"
|
|
567
583
|
msgstr "Le mot de passe a été modifié"
|
|
568
584
|
|
|
569
|
-
#: templates/umap/password_change_done.html:
|
|
585
|
+
#: templates/umap/password_change_done.html:14
|
|
570
586
|
msgid "Your password was changed."
|
|
571
587
|
msgstr "Votre mot de passe a été modifié"
|
|
572
588
|
|
|
573
|
-
#: templates/umap/search.html:
|
|
589
|
+
#: templates/umap/search.html:6
|
|
590
|
+
msgid "Explore maps"
|
|
591
|
+
msgstr "Explorer les cartes"
|
|
592
|
+
|
|
593
|
+
#: templates/umap/search.html:19
|
|
574
594
|
#, python-format
|
|
575
595
|
msgid "%(count)s map found:"
|
|
576
596
|
msgid_plural "%(count)s maps found:"
|
|
@@ -578,11 +598,11 @@ msgstr[0] "%(count)s carte trouvée:"
|
|
|
578
598
|
msgstr[1] "%(count)s cartes trouvées:"
|
|
579
599
|
msgstr[2] "%(count)s cartes trouvées :"
|
|
580
600
|
|
|
581
|
-
#: templates/umap/search.html:
|
|
601
|
+
#: templates/umap/search.html:28
|
|
582
602
|
msgid "No map found."
|
|
583
603
|
msgstr "Aucune carte trouvée."
|
|
584
604
|
|
|
585
|
-
#: templates/umap/search.html:
|
|
605
|
+
#: templates/umap/search.html:33
|
|
586
606
|
msgid "Latest created maps"
|
|
587
607
|
msgstr "Dernières cartes créées."
|
|
588
608
|
|
|
@@ -594,21 +614,34 @@ msgstr "Chercher des cartes"
|
|
|
594
614
|
msgid "Search"
|
|
595
615
|
msgstr "Chercher"
|
|
596
616
|
|
|
597
|
-
#: templates/umap/
|
|
617
|
+
#: templates/umap/team_confirm_delete.html:6
|
|
618
|
+
msgid "Team deletion"
|
|
619
|
+
msgstr "Suppression d'équipe"
|
|
620
|
+
|
|
621
|
+
#: templates/umap/team_detail.html:6
|
|
622
|
+
#, python-format
|
|
623
|
+
msgid "%(current_team)s’s maps"
|
|
624
|
+
msgstr "Cartes de %(current_team)s"
|
|
625
|
+
|
|
626
|
+
#: templates/umap/team_detail.html:14
|
|
598
627
|
#, python-format
|
|
599
628
|
msgid "Browse %(current_team)s's maps"
|
|
600
629
|
msgstr "Les cartes de %(current_team)s"
|
|
601
630
|
|
|
602
|
-
#: templates/umap/team_detail.html:
|
|
631
|
+
#: templates/umap/team_detail.html:26
|
|
603
632
|
#, python-format
|
|
604
633
|
msgid "%(current_team)s has no public maps."
|
|
605
634
|
msgstr "%(current_team)s n'a pas de cartes publiques"
|
|
606
635
|
|
|
607
|
-
#: templates/umap/team_form.html:
|
|
636
|
+
#: templates/umap/team_form.html:6
|
|
637
|
+
msgid "Create or edit a team"
|
|
638
|
+
msgstr "Créer ou modifier une équipe"
|
|
639
|
+
|
|
640
|
+
#: templates/umap/team_form.html:28
|
|
608
641
|
msgid "Delete this team"
|
|
609
642
|
msgstr "Supprimer cette équipe"
|
|
610
643
|
|
|
611
|
-
#: templates/umap/team_form.html:
|
|
644
|
+
#: templates/umap/team_form.html:51
|
|
612
645
|
msgid "Add user"
|
|
613
646
|
msgstr "Ajouter un membre"
|
|
614
647
|
|
|
@@ -629,11 +662,15 @@ msgstr "Télécharger %(count)s cartes"
|
|
|
629
662
|
msgid "You have no map yet."
|
|
630
663
|
msgstr "Vous n'avez pas encore de carte."
|
|
631
664
|
|
|
632
|
-
#: templates/umap/user_teams.html:
|
|
665
|
+
#: templates/umap/user_teams.html:6
|
|
666
|
+
msgid "My Teams"
|
|
667
|
+
msgstr "Mes équipes"
|
|
668
|
+
|
|
669
|
+
#: templates/umap/user_teams.html:21
|
|
633
670
|
msgid "Users"
|
|
634
671
|
msgstr "Membres"
|
|
635
672
|
|
|
636
|
-
#: templates/umap/user_teams.html:
|
|
673
|
+
#: templates/umap/user_teams.html:52
|
|
637
674
|
msgid "New team"
|
|
638
675
|
msgstr "Nouvelle équipe"
|
|
639
676
|
|
|
@@ -650,57 +687,64 @@ msgstr "L'équipe «%(name)s» a été supprimée"
|
|
|
650
687
|
msgid "View the map"
|
|
651
688
|
msgstr "Voir la carte"
|
|
652
689
|
|
|
653
|
-
#: views.py:
|
|
690
|
+
#: views.py:838
|
|
654
691
|
msgid "See full screen"
|
|
655
692
|
msgstr "Plein écran"
|
|
656
693
|
|
|
657
|
-
#: views.py:
|
|
694
|
+
#: views.py:981
|
|
658
695
|
msgid "Map editors updated with success!"
|
|
659
696
|
msgstr "Éditeurs de la carte mis à jour !"
|
|
660
697
|
|
|
661
|
-
#: views.py:
|
|
698
|
+
#: views.py:1017
|
|
662
699
|
#, python-format
|
|
663
700
|
msgid "The uMap edit link for your map: %(map_name)s"
|
|
664
701
|
msgstr "Le lien d'édition uMap pour votre carte : %(map_name)s"
|
|
665
702
|
|
|
666
|
-
#: views.py:
|
|
703
|
+
#: views.py:1020
|
|
667
704
|
#, python-format
|
|
668
705
|
msgid "Here is your secret edit link: %(link)s"
|
|
669
706
|
msgstr "Voici votre lien d'édition secret : %(link)s"
|
|
670
707
|
|
|
671
|
-
#: views.py:
|
|
708
|
+
#: views.py:1027
|
|
672
709
|
#, python-format
|
|
673
710
|
msgid "Can't send email to %(email)s"
|
|
674
711
|
msgstr "Impossible d'envoyer un courriel vers %(email)s"
|
|
675
712
|
|
|
676
|
-
#: views.py:
|
|
713
|
+
#: views.py:1030
|
|
677
714
|
#, python-format
|
|
678
715
|
msgid "Email sent to %(email)s"
|
|
679
716
|
msgstr "Courriel envoyé à %(email)s"
|
|
680
717
|
|
|
681
|
-
#: views.py:
|
|
718
|
+
#: views.py:1041
|
|
682
719
|
msgid "Only its owner can delete the map."
|
|
683
720
|
msgstr "Seul le créateur de la carte peut la supprimer."
|
|
684
721
|
|
|
685
|
-
#: views.py:
|
|
722
|
+
#: views.py:1044
|
|
686
723
|
msgid "Map successfully deleted."
|
|
687
724
|
msgstr "La carte a bien été supprimée."
|
|
688
725
|
|
|
689
|
-
#: views.py:
|
|
726
|
+
#: views.py:1070
|
|
690
727
|
#, python-format
|
|
691
728
|
msgid ""
|
|
692
729
|
"Your map has been cloned! If you want to edit this map from another "
|
|
693
730
|
"computer, please use this link: %(anonymous_url)s"
|
|
694
731
|
msgstr "Votre carte a été dupliquée ! Si vous souhaitez la modifier depuis un autre ordinateur, veuillez utiliser ce lien : %(anonymous_url)s"
|
|
695
732
|
|
|
696
|
-
#: views.py:
|
|
733
|
+
#: views.py:1075
|
|
697
734
|
msgid "Congratulations, your map has been cloned!"
|
|
698
735
|
msgstr "Votre carte a été dupliquée !"
|
|
699
736
|
|
|
700
|
-
#: views.py:
|
|
737
|
+
#: views.py:1329
|
|
701
738
|
msgid "Layer successfully deleted."
|
|
702
739
|
msgstr "Calque supprimé."
|
|
703
740
|
|
|
704
|
-
#: views.py:
|
|
741
|
+
#: views.py:1351
|
|
705
742
|
msgid "Permissions updated with success!"
|
|
706
743
|
msgstr "Les permissions ont bien été modifiées !"
|
|
744
|
+
|
|
745
|
+
#: views.py:1430
|
|
746
|
+
#, python-format
|
|
747
|
+
msgid ""
|
|
748
|
+
"Using “%(name)s” to authenticate is deprecated. Please configure another "
|
|
749
|
+
"provider in your profile page."
|
|
750
|
+
msgstr "L'utilisation de “%(name)s” pour s'authentifier est déprécié. Veuillez configurer un nouveau fournisseur sur votre page profil."
|
|
Binary file
|
|
@@ -21,11 +21,11 @@ msgstr ""
|
|
|
21
21
|
|
|
22
22
|
#: admin.py:16
|
|
23
23
|
msgid "CSV Export"
|
|
24
|
-
msgstr ""
|
|
24
|
+
msgstr "CSV exportálás"
|
|
25
25
|
|
|
26
26
|
#: decorators.py:60
|
|
27
27
|
msgid "This map is not publicly available"
|
|
28
|
-
msgstr ""
|
|
28
|
+
msgstr "Ez a térkép nem nyilvános"
|
|
29
29
|
|
|
30
30
|
#: middleware.py:13
|
|
31
31
|
msgid "Site is readonly for maintenance"
|
|
@@ -77,7 +77,7 @@ msgstr "Csak a tulajdonos"
|
|
|
77
77
|
|
|
78
78
|
#: models.py:184
|
|
79
79
|
msgid "Draft (private)"
|
|
80
|
-
msgstr ""
|
|
80
|
+
msgstr "Piszkozat (privát)"
|
|
81
81
|
|
|
82
82
|
#: models.py:185
|
|
83
83
|
msgid "Everyone (public)"
|
|
@@ -93,7 +93,7 @@ msgstr "Blokkolva"
|
|
|
93
93
|
|
|
94
94
|
#: models.py:191
|
|
95
95
|
msgid "Deleted"
|
|
96
|
-
msgstr ""
|
|
96
|
+
msgstr "Törölve"
|
|
97
97
|
|
|
98
98
|
#: models.py:194
|
|
99
99
|
msgid "center"
|
|
@@ -164,15 +164,15 @@ msgid ""
|
|
|
164
164
|
"<a href=\"https://discover.umap-project.org/support/faq/#map-statuses\" "
|
|
165
165
|
"target=\"_blank\">Find out here the documentation</a> on how to manage map’s"
|
|
166
166
|
" permissions."
|
|
167
|
-
msgstr ""
|
|
167
|
+
msgstr "A térképekhez tartozó engedélyek kezeléséről szóló <a href=\"https://discover.umap-project.org/support/faq/#map-statuses\" target=\"_blank\">dokumentációt itt találod</a>."
|
|
168
168
|
|
|
169
169
|
#: templates/403.html:10 templates/404.html:8
|
|
170
170
|
msgid "← Go to the homepage"
|
|
171
|
-
msgstr ""
|
|
171
|
+
msgstr "← Ugrás a főoldalra"
|
|
172
172
|
|
|
173
173
|
#: templates/404.html:7
|
|
174
174
|
msgid "404 Page Not Found"
|
|
175
|
-
msgstr ""
|
|
175
|
+
msgstr "404 hiba: ez az oldal nem található. Eltévedtél a térképek között"
|
|
176
176
|
|
|
177
177
|
#: templates/auth/user_detail.html:8
|
|
178
178
|
#, python-format
|
|
@@ -224,11 +224,11 @@ msgstr "Belépés"
|
|
|
224
224
|
|
|
225
225
|
#: templates/registration/login.html:22
|
|
226
226
|
msgid "To save and easily find your maps, identify yourself."
|
|
227
|
-
msgstr ""
|
|
227
|
+
msgstr "Azonosítsd magad, hogy el tudd menteni a térképet, és később könnyen megtaláld."
|
|
228
228
|
|
|
229
229
|
#: templates/registration/login.html:25
|
|
230
230
|
msgid "Please log in with your account:"
|
|
231
|
-
msgstr ""
|
|
231
|
+
msgstr "Jelentkezz be a fiókoddal:"
|
|
232
232
|
|
|
233
233
|
#: templates/registration/login.html:42
|
|
234
234
|
msgid "Username"
|
|
@@ -240,7 +240,7 @@ msgstr "Jelszó"
|
|
|
240
240
|
|
|
241
241
|
#: templates/registration/login.html:52
|
|
242
242
|
msgid "Please choose a provider:"
|
|
243
|
-
msgstr ""
|
|
243
|
+
msgstr "Válassz egy szolgáltatót:"
|
|
244
244
|
|
|
245
245
|
#: templates/umap/about_summary.html:12
|
|
246
246
|
#, python-format
|
|
@@ -2,7 +2,7 @@ from datetime import datetime, timedelta
|
|
|
2
2
|
|
|
3
3
|
from django.core.management.base import BaseCommand
|
|
4
4
|
|
|
5
|
-
from umap.models import Map
|
|
5
|
+
from umap.models import DataLayer, Map
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
class Command(BaseCommand):
|
|
@@ -33,3 +33,14 @@ class Command(BaseCommand):
|
|
|
33
33
|
if not options["dry_run"]:
|
|
34
34
|
map.delete()
|
|
35
35
|
print(f"Deleted map {map_name} ({map_id}), trashed at {trashed_at}")
|
|
36
|
+
print(f"Deleting layers in trash since {since}")
|
|
37
|
+
layers = DataLayer.objects.filter(
|
|
38
|
+
share_status=DataLayer.DELETED, modified_at__lt=since
|
|
39
|
+
)
|
|
40
|
+
for layer in layers:
|
|
41
|
+
layer_id = layer.uuid
|
|
42
|
+
layer_name = layer.name
|
|
43
|
+
trashed_at = layer.modified_at.date()
|
|
44
|
+
if not options["dry_run"]:
|
|
45
|
+
layer.delete()
|
|
46
|
+
print(f"Deleted layer {layer_name} ({layer_id}), trashed at {trashed_at}")
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Generated by Django 5.1.4 on 2025-01-29 18:06
|
|
2
|
+
|
|
3
|
+
from django.db import migrations, models
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Migration(migrations.Migration):
|
|
7
|
+
dependencies = [
|
|
8
|
+
("umap", "0025_alter_datalayer_geojson"),
|
|
9
|
+
]
|
|
10
|
+
|
|
11
|
+
operations = [
|
|
12
|
+
migrations.AddField(
|
|
13
|
+
model_name="datalayer",
|
|
14
|
+
name="modified_at",
|
|
15
|
+
field=models.DateTimeField(auto_now=True),
|
|
16
|
+
),
|
|
17
|
+
migrations.AddField(
|
|
18
|
+
model_name="datalayer",
|
|
19
|
+
name="share_status",
|
|
20
|
+
field=models.SmallIntegerField(
|
|
21
|
+
choices=[(0, "Inherit"), (99, "Deleted")],
|
|
22
|
+
default=0,
|
|
23
|
+
verbose_name="share status",
|
|
24
|
+
),
|
|
25
|
+
),
|
|
26
|
+
]
|
umap/models.py
CHANGED
|
@@ -247,9 +247,13 @@ class Map(NamedModel):
|
|
|
247
247
|
except KeyError:
|
|
248
248
|
return ""
|
|
249
249
|
|
|
250
|
+
@property
|
|
251
|
+
def datalayers(self):
|
|
252
|
+
return self.datalayer_set.filter(share_status=DataLayer.INHERIT).all()
|
|
253
|
+
|
|
250
254
|
@property
|
|
251
255
|
def preview_settings(self):
|
|
252
|
-
layers = self.
|
|
256
|
+
layers = self.datalayers
|
|
253
257
|
datalayer_data = [c.metadata() for c in layers]
|
|
254
258
|
map_settings = self.settings
|
|
255
259
|
if "properties" not in map_settings:
|
|
@@ -278,6 +282,7 @@ class Map(NamedModel):
|
|
|
278
282
|
def delete(self, **kwargs):
|
|
279
283
|
# Explicitely call datalayers.delete, so we can deal with removing files
|
|
280
284
|
# (the cascade delete would not call the model delete method)
|
|
285
|
+
# Use datalayer_set so to get also the deleted ones.
|
|
281
286
|
for datalayer in self.datalayer_set.all():
|
|
282
287
|
datalayer.delete()
|
|
283
288
|
return super().delete(**kwargs)
|
|
@@ -287,7 +292,7 @@ class Map(NamedModel):
|
|
|
287
292
|
umapjson["type"] = "umap"
|
|
288
293
|
umapjson["uri"] = request.build_absolute_uri(self.get_absolute_url())
|
|
289
294
|
datalayers = []
|
|
290
|
-
for datalayer in self.
|
|
295
|
+
for datalayer in self.datalayers:
|
|
291
296
|
with datalayer.geojson.open("rb") as f:
|
|
292
297
|
layer = json.loads(f.read())
|
|
293
298
|
if datalayer.settings:
|
|
@@ -406,7 +411,7 @@ class Map(NamedModel):
|
|
|
406
411
|
new.save()
|
|
407
412
|
for editor in self.editors.all():
|
|
408
413
|
new.editors.add(editor)
|
|
409
|
-
for datalayer in self.
|
|
414
|
+
for datalayer in self.datalayers:
|
|
410
415
|
datalayer.clone(map_inst=new)
|
|
411
416
|
return new
|
|
412
417
|
|
|
@@ -458,6 +463,11 @@ class DataLayer(NamedModel):
|
|
|
458
463
|
ANONYMOUS = 1
|
|
459
464
|
COLLABORATORS = 2
|
|
460
465
|
OWNER = 3
|
|
466
|
+
DELETED = 99
|
|
467
|
+
SHARE_STATUS = (
|
|
468
|
+
(INHERIT, _("Inherit")),
|
|
469
|
+
(DELETED, _("Deleted")),
|
|
470
|
+
)
|
|
461
471
|
EDIT_STATUS = (
|
|
462
472
|
(INHERIT, _("Inherit")),
|
|
463
473
|
(ANONYMOUS, _("Everyone")),
|
|
@@ -490,6 +500,12 @@ class DataLayer(NamedModel):
|
|
|
490
500
|
default=INHERIT,
|
|
491
501
|
verbose_name=_("edit status"),
|
|
492
502
|
)
|
|
503
|
+
share_status = models.SmallIntegerField(
|
|
504
|
+
choices=SHARE_STATUS,
|
|
505
|
+
default=INHERIT,
|
|
506
|
+
verbose_name=_("share status"),
|
|
507
|
+
)
|
|
508
|
+
modified_at = models.DateTimeField(auto_now=True)
|
|
493
509
|
|
|
494
510
|
class Meta:
|
|
495
511
|
ordering = ("rank",)
|
|
@@ -568,6 +584,10 @@ class DataLayer(NamedModel):
|
|
|
568
584
|
can = True
|
|
569
585
|
return can
|
|
570
586
|
|
|
587
|
+
def move_to_trash(self):
|
|
588
|
+
self.share_status = DataLayer.DELETED
|
|
589
|
+
self.save()
|
|
590
|
+
|
|
571
591
|
|
|
572
592
|
class Star(models.Model):
|
|
573
593
|
at = models.DateTimeField(auto_now=True)
|
umap/settings/base.py
CHANGED
|
@@ -267,6 +267,7 @@ UMAP_KEEP_VERSIONS = env.int("UMAP_KEEP_VERSIONS", default=10)
|
|
|
267
267
|
SITE_URL = env("SITE_URL", default="http://umap.org")
|
|
268
268
|
SHORT_SITE_URL = env("SHORT_SITE_URL", default=None)
|
|
269
269
|
SITE_NAME = "uMap"
|
|
270
|
+
SITE_DESCRIPTION = "Online map creator"
|
|
270
271
|
UMAP_DEMO_SITE = env("UMAP_DEMO_SITE", default=False)
|
|
271
272
|
UMAP_EXCLUDE_DEFAULT_MAPS = False
|
|
272
273
|
UMAP_MAPS_PER_PAGE = 5
|
|
@@ -305,6 +306,7 @@ LOGIN_URL = "login"
|
|
|
305
306
|
SOCIAL_AUTH_LOGIN_REDIRECT_URL = "/login/popup/end/"
|
|
306
307
|
|
|
307
308
|
AUTHENTICATION_BACKENDS = ()
|
|
309
|
+
DEPRECATED_AUTHENTICATION_BACKENDS = []
|
|
308
310
|
|
|
309
311
|
SOCIAL_AUTH_OPENSTREETMAP_OAUTH2_KEY = env(
|
|
310
312
|
"SOCIAL_AUTH_OPENSTREETMAP_OAUTH2_KEY", default=""
|
|
@@ -342,4 +344,5 @@ LOGGING = {
|
|
|
342
344
|
WEBSOCKET_ENABLED = env.bool("WEBSOCKET_ENABLED", default=False)
|
|
343
345
|
WEBSOCKET_BACK_HOST = env("WEBSOCKET_BACK_HOST", default="localhost")
|
|
344
346
|
WEBSOCKET_BACK_PORT = env.int("WEBSOCKET_BACK_PORT", default=8001)
|
|
345
|
-
|
|
347
|
+
|
|
348
|
+
REDIS_URL = "redis://localhost:6379"
|