umap-project 2.8.2__py3-none-any.whl → 2.9.0__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/admin.py +15 -2
- umap/asgi.py +12 -7
- umap/context_processors.py +1 -0
- umap/locale/br/LC_MESSAGES/django.mo +0 -0
- umap/locale/br/LC_MESSAGES/django.po +111 -67
- umap/locale/cs_CZ/LC_MESSAGES/django.mo +0 -0
- umap/locale/cs_CZ/LC_MESSAGES/django.po +110 -66
- umap/locale/el/LC_MESSAGES/django.mo +0 -0
- umap/locale/el/LC_MESSAGES/django.po +129 -85
- umap/locale/en/LC_MESSAGES/django.po +103 -60
- umap/locale/es/LC_MESSAGES/django.mo +0 -0
- umap/locale/es/LC_MESSAGES/django.po +114 -69
- umap/locale/fr/LC_MESSAGES/django.mo +0 -0
- umap/locale/fr/LC_MESSAGES/django.po +105 -61
- umap/locale/gl/LC_MESSAGES/django.mo +0 -0
- umap/locale/gl/LC_MESSAGES/django.po +216 -171
- umap/locale/it/LC_MESSAGES/django.mo +0 -0
- umap/locale/it/LC_MESSAGES/django.po +142 -98
- umap/locale/nl/LC_MESSAGES/django.mo +0 -0
- umap/locale/nl/LC_MESSAGES/django.po +196 -151
- umap/locale/pt/LC_MESSAGES/django.mo +0 -0
- umap/locale/pt/LC_MESSAGES/django.po +115 -71
- umap/locale/zh_TW/LC_MESSAGES/django.mo +0 -0
- umap/locale/zh_TW/LC_MESSAGES/django.po +109 -65
- umap/management/commands/empty_trash.py +12 -1
- umap/migrations/0026_datalayer_modified_at_datalayer_share_status.py +26 -0
- umap/models.py +43 -13
- umap/settings/base.py +5 -2
- umap/static/umap/base.css +5 -2
- umap/static/umap/content.css +2 -22
- umap/static/umap/css/bar.css +39 -10
- umap/static/umap/css/contextmenu.css +14 -2
- umap/static/umap/css/form.css +33 -39
- umap/static/umap/css/icon.css +47 -5
- umap/static/umap/css/panel.css +20 -2
- umap/static/umap/css/popup.css +0 -1
- umap/static/umap/css/tooltip.css +33 -31
- umap/static/umap/img/16-white.svg +5 -3
- umap/static/umap/img/16.svg +1 -1
- umap/static/umap/img/24-white.svg +17 -16
- umap/static/umap/img/24.svg +29 -18
- 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 +6 -4
- umap/static/umap/img/source/16.svg +1 -1
- umap/static/umap/img/source/24-white.svg +20 -18
- umap/static/umap/img/source/24.svg +30 -19
- umap/static/umap/js/components/alerts/alert.js +4 -1
- umap/static/umap/js/modules/browser.js +8 -8
- umap/static/umap/js/modules/caption.js +30 -7
- umap/static/umap/js/modules/data/features.js +101 -56
- umap/static/umap/js/modules/data/layer.js +108 -83
- umap/static/umap/js/modules/form/builder.js +242 -0
- umap/static/umap/js/modules/form/fields.js +1346 -0
- umap/static/umap/js/modules/formatter.js +9 -8
- umap/static/umap/js/modules/help.js +20 -24
- umap/static/umap/js/modules/importer.js +6 -3
- umap/static/umap/js/modules/permissions.js +11 -6
- umap/static/umap/js/modules/rendering/icon.js +5 -1
- umap/static/umap/js/modules/rendering/layers/classified.js +12 -8
- umap/static/umap/js/modules/rendering/layers/cluster.js +11 -1
- umap/static/umap/js/modules/rendering/map.js +1 -23
- umap/static/umap/js/modules/rendering/ui.js +20 -38
- umap/static/umap/js/modules/rules.js +3 -2
- umap/static/umap/js/modules/saving.js +5 -0
- umap/static/umap/js/modules/schema.js +8 -6
- umap/static/umap/js/modules/share.js +3 -3
- umap/static/umap/js/modules/sync/engine.js +56 -26
- umap/static/umap/js/modules/sync/updaters.js +15 -6
- umap/static/umap/js/modules/sync/websocket.js +50 -37
- umap/static/umap/js/modules/tableeditor.js +3 -2
- umap/static/umap/js/modules/ui/bar.js +101 -9
- umap/static/umap/js/modules/ui/base.js +7 -24
- umap/static/umap/js/modules/ui/contextmenu.js +9 -2
- umap/static/umap/js/modules/ui/panel.js +5 -1
- umap/static/umap/js/modules/ui/tooltip.js +19 -11
- umap/static/umap/js/modules/umap.js +121 -68
- umap/static/umap/js/modules/utils.js +196 -12
- umap/static/umap/js/umap.controls.js +11 -353
- umap/static/umap/locale/am_ET.js +17 -5
- umap/static/umap/locale/am_ET.json +17 -5
- umap/static/umap/locale/ar.js +17 -5
- umap/static/umap/locale/ar.json +17 -5
- umap/static/umap/locale/ast.js +17 -5
- umap/static/umap/locale/ast.json +17 -5
- umap/static/umap/locale/bg.js +17 -5
- umap/static/umap/locale/bg.json +17 -5
- umap/static/umap/locale/br.js +33 -20
- umap/static/umap/locale/br.json +33 -20
- umap/static/umap/locale/ca.js +17 -5
- umap/static/umap/locale/ca.json +17 -5
- umap/static/umap/locale/cs_CZ.js +15 -5
- umap/static/umap/locale/cs_CZ.json +15 -5
- umap/static/umap/locale/da.js +17 -5
- umap/static/umap/locale/da.json +17 -5
- umap/static/umap/locale/de.js +17 -5
- umap/static/umap/locale/de.json +17 -5
- umap/static/umap/locale/el.js +63 -51
- umap/static/umap/locale/el.json +63 -51
- umap/static/umap/locale/en.js +15 -5
- umap/static/umap/locale/en.json +15 -5
- umap/static/umap/locale/en_US.json +17 -5
- umap/static/umap/locale/es.js +25 -13
- umap/static/umap/locale/es.json +25 -13
- umap/static/umap/locale/et.js +17 -5
- umap/static/umap/locale/et.json +17 -5
- umap/static/umap/locale/eu.js +17 -5
- umap/static/umap/locale/eu.json +17 -5
- umap/static/umap/locale/fa_IR.js +17 -5
- umap/static/umap/locale/fa_IR.json +17 -5
- umap/static/umap/locale/fi.js +17 -5
- umap/static/umap/locale/fi.json +17 -5
- umap/static/umap/locale/fr.js +16 -6
- umap/static/umap/locale/fr.json +16 -6
- umap/static/umap/locale/gl.js +357 -345
- umap/static/umap/locale/gl.json +357 -345
- umap/static/umap/locale/he.js +17 -5
- umap/static/umap/locale/he.json +17 -5
- umap/static/umap/locale/hr.js +17 -5
- umap/static/umap/locale/hr.json +17 -5
- umap/static/umap/locale/hu.js +14 -5
- umap/static/umap/locale/hu.json +14 -5
- umap/static/umap/locale/id.js +17 -5
- umap/static/umap/locale/id.json +17 -5
- umap/static/umap/locale/is.js +17 -5
- umap/static/umap/locale/is.json +17 -5
- umap/static/umap/locale/it.js +125 -113
- umap/static/umap/locale/it.json +125 -113
- umap/static/umap/locale/ja.js +17 -5
- umap/static/umap/locale/ja.json +17 -5
- umap/static/umap/locale/ko.js +17 -5
- umap/static/umap/locale/ko.json +17 -5
- umap/static/umap/locale/lt.js +17 -5
- umap/static/umap/locale/lt.json +17 -5
- umap/static/umap/locale/ms.js +17 -5
- umap/static/umap/locale/ms.json +17 -5
- umap/static/umap/locale/nl.js +132 -119
- umap/static/umap/locale/nl.json +132 -119
- umap/static/umap/locale/no.js +17 -5
- umap/static/umap/locale/no.json +17 -5
- umap/static/umap/locale/pl.js +17 -5
- umap/static/umap/locale/pl.json +17 -5
- umap/static/umap/locale/pl_PL.json +17 -5
- umap/static/umap/locale/pt.js +38 -25
- umap/static/umap/locale/pt.json +38 -25
- umap/static/umap/locale/pt_BR.js +17 -5
- umap/static/umap/locale/pt_BR.json +17 -5
- umap/static/umap/locale/pt_PT.js +17 -5
- umap/static/umap/locale/pt_PT.json +17 -5
- umap/static/umap/locale/ro.js +17 -5
- umap/static/umap/locale/ro.json +17 -5
- umap/static/umap/locale/ru.js +17 -5
- umap/static/umap/locale/ru.json +17 -5
- umap/static/umap/locale/sk_SK.js +17 -5
- umap/static/umap/locale/sk_SK.json +17 -5
- umap/static/umap/locale/sl.js +17 -5
- umap/static/umap/locale/sl.json +17 -5
- umap/static/umap/locale/sr.js +17 -5
- umap/static/umap/locale/sr.json +17 -5
- umap/static/umap/locale/sv.js +17 -5
- umap/static/umap/locale/sv.json +17 -5
- umap/static/umap/locale/th_TH.js +17 -5
- umap/static/umap/locale/th_TH.json +17 -5
- umap/static/umap/locale/tr.js +17 -5
- umap/static/umap/locale/tr.json +17 -5
- umap/static/umap/locale/uk_UA.js +17 -5
- umap/static/umap/locale/uk_UA.json +17 -5
- umap/static/umap/locale/vi.js +17 -5
- umap/static/umap/locale/vi.json +17 -5
- umap/static/umap/locale/vi_VN.json +17 -5
- umap/static/umap/locale/zh.js +17 -5
- umap/static/umap/locale/zh.json +17 -5
- umap/static/umap/locale/zh_CN.json +17 -5
- umap/static/umap/locale/zh_TW.Big5.json +17 -5
- umap/static/umap/locale/zh_TW.js +15 -5
- umap/static/umap/locale/zh_TW.json +15 -5
- umap/static/umap/map.css +29 -76
- umap/static/umap/nav.css +6 -3
- umap/static/umap/unittests/utils.js +14 -0
- umap/static/umap/vars.css +3 -0
- umap/static/umap/vendors/dompurify/purify.es.js +138 -354
- umap/static/umap/vendors/dompurify/purify.es.mjs.map +1 -1
- umap/static/umap/vendors/editable/Leaflet.Editable.js +1 -0
- umap/sync/__init__.py +0 -0
- umap/sync/app.py +187 -0
- umap/sync/payloads.py +56 -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/content_footer.html +1 -1
- umap/templates/umap/css.html +0 -2
- umap/templates/umap/js.html +0 -4
- 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/search_bar.html +1 -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_anonymous_owned_map.py +2 -2
- umap/tests/integration/test_basics.py +4 -7
- umap/tests/integration/test_caption.py +1 -0
- umap/tests/integration/test_categorized_layer.py +4 -8
- umap/tests/integration/test_choropleth.py +1 -1
- umap/tests/integration/test_conditional_rules.py +3 -3
- umap/tests/integration/test_draw_polygon.py +14 -22
- umap/tests/integration/test_draw_polyline.py +6 -14
- umap/tests/integration/test_edit_datalayer.py +11 -11
- umap/tests/integration/test_edit_map.py +30 -4
- umap/tests/integration/test_edit_marker.py +5 -5
- umap/tests/integration/test_edit_polygon.py +6 -6
- umap/tests/integration/test_features_id_generation.py +2 -6
- umap/tests/integration/test_import.py +115 -29
- umap/tests/integration/test_optimistic_merge.py +1 -0
- umap/tests/integration/test_owned_map.py +1 -1
- umap/tests/integration/test_picto.py +8 -8
- umap/tests/integration/test_save.py +3 -2
- umap/tests/integration/test_star.py +13 -9
- umap/tests/integration/test_tableeditor.py +8 -7
- umap/tests/integration/test_view_marker.py +10 -0
- umap/tests/integration/test_websocket_sync.py +239 -64
- 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 +27 -11
- umap/views.py +37 -6
- {umap_project-2.8.2.dist-info → umap_project-2.9.0.dist-info}/METADATA +22 -22
- {umap_project-2.8.2.dist-info → umap_project-2.9.0.dist-info}/RECORD +247 -248
- {umap_project-2.8.2.dist-info → umap_project-2.9.0.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/static/umap/vendors/toolbar/leaflet.toolbar.css +0 -1
- umap/static/umap/vendors/toolbar/leaflet.toolbar.js +0 -1
- umap/tests/test_websocket_server.py +0 -22
- umap/websocket_server.py +0 -202
- {umap_project-2.8.2.dist-info → umap_project-2.9.0.dist-info}/entry_points.txt +0 -0
- {umap_project-2.8.2.dist-info → umap_project-2.9.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
# This file is distributed under the same license as the PACKAGE package.
|
|
4
4
|
#
|
|
5
5
|
# Translators:
|
|
6
|
-
# Supaplex <bejokeup@gmail.com>, 2019,2023-
|
|
6
|
+
# Supaplex <bejokeup@gmail.com>, 2019,2023-2025
|
|
7
7
|
# Chia-liang Kao <clkao@clkao.org>, 2014
|
|
8
8
|
# coop.shen <coop.shen@gmail.com>, 2014
|
|
9
9
|
# coop.shen <coop.shen@gmail.com>, 2014
|
|
@@ -15,9 +15,9 @@ msgid ""
|
|
|
15
15
|
msgstr ""
|
|
16
16
|
"Project-Id-Version: uMap\n"
|
|
17
17
|
"Report-Msgid-Bugs-To: \n"
|
|
18
|
-
"POT-Creation-Date:
|
|
18
|
+
"POT-Creation-Date: 2025-01-31 17:29+0000\n"
|
|
19
19
|
"PO-Revision-Date: 2013-11-22 14:00+0000\n"
|
|
20
|
-
"Last-Translator: Supaplex <bejokeup@gmail.com>, 2019,2023-
|
|
20
|
+
"Last-Translator: Supaplex <bejokeup@gmail.com>, 2019,2023-2025\n"
|
|
21
21
|
"Language-Team: Chinese (Taiwan) (http://app.transifex.com/openstreetmap/umap/language/zh_TW/)\n"
|
|
22
22
|
"MIME-Version: 1.0\n"
|
|
23
23
|
"Content-Type: text/plain; charset=UTF-8\n"
|
|
@@ -31,7 +31,7 @@ msgstr "CSV 匯出"
|
|
|
31
31
|
|
|
32
32
|
#: decorators.py:60
|
|
33
33
|
msgid "This map is not publicly available"
|
|
34
|
-
msgstr ""
|
|
34
|
+
msgstr "這份地圖並非公開可及的"
|
|
35
35
|
|
|
36
36
|
#: middleware.py:13
|
|
37
37
|
msgid "Site is readonly for maintenance"
|
|
@@ -41,7 +41,7 @@ msgstr "網站目前因維護中設定為唯讀狀態"
|
|
|
41
41
|
msgid "name"
|
|
42
42
|
msgstr "名稱"
|
|
43
43
|
|
|
44
|
-
#: models.py:62 models.py:
|
|
44
|
+
#: models.py:62 models.py:485
|
|
45
45
|
msgid "description"
|
|
46
46
|
msgstr "描述"
|
|
47
47
|
|
|
@@ -61,23 +61,23 @@ msgstr "URL 樣板,使用 OSM 地圖磚格式"
|
|
|
61
61
|
msgid "Order of the tilelayers in the edit box"
|
|
62
62
|
msgstr "編輯方塊中地圖磚的圖層順序"
|
|
63
63
|
|
|
64
|
-
#: models.py:175 models.py:
|
|
64
|
+
#: models.py:175 models.py:479
|
|
65
65
|
msgid "Only editable with secret edit link"
|
|
66
66
|
msgstr "僅能由私密連結編輯"
|
|
67
67
|
|
|
68
|
-
#: models.py:176 models.py:
|
|
68
|
+
#: models.py:176 models.py:480
|
|
69
69
|
msgid "Everyone can edit"
|
|
70
70
|
msgstr "所有人皆可編輯"
|
|
71
71
|
|
|
72
|
-
#: models.py:179 models.py:
|
|
72
|
+
#: models.py:179 models.py:473
|
|
73
73
|
msgid "Everyone"
|
|
74
74
|
msgstr "所有人"
|
|
75
75
|
|
|
76
|
-
#: models.py:180 models.py:189 models.py:
|
|
76
|
+
#: models.py:180 models.py:189 models.py:474
|
|
77
77
|
msgid "Editors and team only"
|
|
78
78
|
msgstr "只有編輯者與團隊"
|
|
79
79
|
|
|
80
|
-
#: models.py:181 models.py:
|
|
80
|
+
#: models.py:181 models.py:475
|
|
81
81
|
msgid "Owner only"
|
|
82
82
|
msgstr "只有擁有者"
|
|
83
83
|
|
|
@@ -97,7 +97,7 @@ msgstr "任何有連結的人"
|
|
|
97
97
|
msgid "Blocked"
|
|
98
98
|
msgstr "已經封銷了"
|
|
99
99
|
|
|
100
|
-
#: models.py:191
|
|
100
|
+
#: models.py:191 models.py:469
|
|
101
101
|
msgid "Deleted"
|
|
102
102
|
msgstr "已刪除"
|
|
103
103
|
|
|
@@ -137,31 +137,31 @@ msgstr "編輯者"
|
|
|
137
137
|
msgid "team"
|
|
138
138
|
msgstr "團隊"
|
|
139
139
|
|
|
140
|
-
#: models.py:229 models.py:
|
|
140
|
+
#: models.py:229 models.py:501
|
|
141
141
|
msgid "edit status"
|
|
142
142
|
msgstr "編輯狀態"
|
|
143
143
|
|
|
144
|
-
#: models.py:234
|
|
144
|
+
#: models.py:234 models.py:506
|
|
145
145
|
msgid "share status"
|
|
146
146
|
msgstr "分享狀態"
|
|
147
147
|
|
|
148
|
-
#: models.py:237 models.py:
|
|
148
|
+
#: models.py:237 models.py:496
|
|
149
149
|
msgid "settings"
|
|
150
150
|
msgstr "設定"
|
|
151
151
|
|
|
152
|
-
#: models.py:
|
|
152
|
+
#: models.py:407
|
|
153
153
|
msgid "Clone of"
|
|
154
154
|
msgstr "複製"
|
|
155
155
|
|
|
156
|
-
#: models.py:
|
|
156
|
+
#: models.py:468 models.py:472 models.py:478
|
|
157
157
|
msgid "Inherit"
|
|
158
158
|
msgstr "繼承"
|
|
159
159
|
|
|
160
|
-
#: models.py:
|
|
160
|
+
#: models.py:491
|
|
161
161
|
msgid "display on load"
|
|
162
162
|
msgstr "載入時顯示"
|
|
163
163
|
|
|
164
|
-
#: models.py:
|
|
164
|
+
#: models.py:492
|
|
165
165
|
msgid "Display this layer on load."
|
|
166
166
|
msgstr "載入此圖層時顯示"
|
|
167
167
|
|
|
@@ -170,50 +170,64 @@ msgid ""
|
|
|
170
170
|
"<a href=\"https://discover.umap-project.org/support/faq/#map-statuses\" "
|
|
171
171
|
"target=\"_blank\">Find out here the documentation</a> on how to manage map’s"
|
|
172
172
|
" permissions."
|
|
173
|
-
msgstr ""
|
|
173
|
+
msgstr "<a href=\"https://discover.umap-project.org/support/faq/#map-statuses\" target=\"_blank\">在說明文件尋找資訊</a>,要如何管理地圖權限。"
|
|
174
174
|
|
|
175
175
|
#: templates/403.html:10 templates/404.html:8
|
|
176
176
|
msgid "← Go to the homepage"
|
|
177
|
-
msgstr ""
|
|
177
|
+
msgstr "← 回到首頁"
|
|
178
178
|
|
|
179
179
|
#: templates/404.html:7
|
|
180
180
|
msgid "404 Page Not Found"
|
|
181
|
-
msgstr ""
|
|
181
|
+
msgstr "404 頁面"
|
|
182
182
|
|
|
183
|
-
#: templates/auth/user_detail.html:
|
|
183
|
+
#: templates/auth/user_detail.html:6
|
|
184
|
+
#, python-format
|
|
185
|
+
msgid "%(current_user)s’s maps"
|
|
186
|
+
msgstr "%(current_user)s的地圖"
|
|
187
|
+
|
|
188
|
+
#: templates/auth/user_detail.html:12
|
|
184
189
|
#, python-format
|
|
185
190
|
msgid "Browse %(current_user)s's maps"
|
|
186
191
|
msgstr "瀏覽 %(current_user)s 的地圖"
|
|
187
192
|
|
|
188
|
-
#: templates/auth/user_detail.html:
|
|
193
|
+
#: templates/auth/user_detail.html:21
|
|
189
194
|
#, python-format
|
|
190
195
|
msgid "%(current_user)s has no maps."
|
|
191
196
|
msgstr "%(current_user)s 沒有任何地圖。"
|
|
192
197
|
|
|
193
|
-
#: templates/auth/user_form.html:
|
|
198
|
+
#: templates/auth/user_form.html:6
|
|
199
|
+
msgid "My Profile"
|
|
200
|
+
msgstr "我的檔案"
|
|
201
|
+
|
|
202
|
+
#: templates/auth/user_form.html:24 templates/umap/team_form.html:25
|
|
194
203
|
msgid "Save"
|
|
195
204
|
msgstr "儲存"
|
|
196
205
|
|
|
197
|
-
#: templates/auth/user_form.html:
|
|
206
|
+
#: templates/auth/user_form.html:30
|
|
198
207
|
msgid "Your current providers"
|
|
199
208
|
msgstr "你目前的供應商"
|
|
200
209
|
|
|
201
|
-
#: templates/auth/user_form.html:
|
|
210
|
+
#: templates/auth/user_form.html:44
|
|
202
211
|
msgid "Connect to another provider"
|
|
203
212
|
msgstr "連線到其他供應商"
|
|
204
213
|
|
|
205
|
-
#: templates/auth/user_form.html:
|
|
214
|
+
#: templates/auth/user_form.html:47
|
|
206
215
|
msgid ""
|
|
207
216
|
"It's a good habit to connect your account to more than one provider, in case"
|
|
208
217
|
" one provider becomes unavailable, temporarily or even permanently."
|
|
209
218
|
msgstr "用你的帳號連到多個供應商是好的習慣,因為有時候供應商會出狀況,甚至永久停止運作。"
|
|
210
219
|
|
|
211
|
-
#: templates/auth/user_stars.html:
|
|
220
|
+
#: templates/auth/user_stars.html:6
|
|
221
|
+
#, python-format
|
|
222
|
+
msgid "%(current_user)s’s starred maps"
|
|
223
|
+
msgstr "%(current_user)s的打星號地圖"
|
|
224
|
+
|
|
225
|
+
#: templates/auth/user_stars.html:12
|
|
212
226
|
#, python-format
|
|
213
227
|
msgid "Browse %(current_user)s's starred maps"
|
|
214
228
|
msgstr "瀏覽 %(current_user)s 已打心號的地圖"
|
|
215
229
|
|
|
216
|
-
#: templates/auth/user_stars.html:
|
|
230
|
+
#: templates/auth/user_stars.html:21
|
|
217
231
|
#, python-format
|
|
218
232
|
msgid "%(current_user)s has no starred maps yet."
|
|
219
233
|
msgstr "%(current_user)s 沒有任何打心號的地圖。"
|
|
@@ -248,6 +262,10 @@ msgstr "密碼"
|
|
|
248
262
|
msgid "Please choose a provider:"
|
|
249
263
|
msgstr "請選擇提供商:"
|
|
250
264
|
|
|
265
|
+
#: templates/umap/about.html:5 templates/umap/navigation.html:22
|
|
266
|
+
msgid "About"
|
|
267
|
+
msgstr "關於"
|
|
268
|
+
|
|
251
269
|
#: templates/umap/about_summary.html:12
|
|
252
270
|
#, python-format
|
|
253
271
|
msgid ""
|
|
@@ -415,7 +433,7 @@ msgstr "由"
|
|
|
415
433
|
msgid "More"
|
|
416
434
|
msgstr "更多"
|
|
417
435
|
|
|
418
|
-
#: templates/umap/map_table.html:8 templates/umap/user_teams.html:
|
|
436
|
+
#: templates/umap/map_table.html:8 templates/umap/user_teams.html:18
|
|
419
437
|
msgid "Name"
|
|
420
438
|
msgstr "名稱"
|
|
421
439
|
|
|
@@ -439,7 +457,7 @@ msgstr "最後儲存"
|
|
|
439
457
|
msgid "Owner"
|
|
440
458
|
msgstr "擁有者"
|
|
441
459
|
|
|
442
|
-
#: templates/umap/map_table.html:26 templates/umap/user_teams.html:
|
|
460
|
+
#: templates/umap/map_table.html:26 templates/umap/user_teams.html:24
|
|
443
461
|
msgid "Actions"
|
|
444
462
|
msgstr "動作"
|
|
445
463
|
|
|
@@ -452,7 +470,7 @@ msgid "Share"
|
|
|
452
470
|
msgstr "分享"
|
|
453
471
|
|
|
454
472
|
#: templates/umap/map_table.html:78 templates/umap/map_table.html:80
|
|
455
|
-
#: templates/umap/user_teams.html:
|
|
473
|
+
#: templates/umap/user_teams.html:42 templates/umap/user_teams.html:44
|
|
456
474
|
msgid "Edit"
|
|
457
475
|
msgstr "編輯"
|
|
458
476
|
|
|
@@ -515,10 +533,6 @@ msgstr "登入"
|
|
|
515
533
|
msgid "Sign in"
|
|
516
534
|
msgstr "註冊"
|
|
517
535
|
|
|
518
|
-
#: templates/umap/navigation.html:22
|
|
519
|
-
msgid "About"
|
|
520
|
-
msgstr "關於"
|
|
521
|
-
|
|
522
536
|
#: templates/umap/navigation.html:30
|
|
523
537
|
msgid "Change password"
|
|
524
538
|
msgstr "更改密碼"
|
|
@@ -527,51 +541,57 @@ msgstr "更改密碼"
|
|
|
527
541
|
msgid "Log out"
|
|
528
542
|
msgstr "登出"
|
|
529
543
|
|
|
530
|
-
#: templates/umap/password_change.html:
|
|
544
|
+
#: templates/umap/password_change.html:6
|
|
545
|
+
#: templates/umap/password_change.html:11
|
|
531
546
|
msgid "Password change"
|
|
532
547
|
msgstr "密碼變更"
|
|
533
548
|
|
|
534
|
-
#: templates/umap/password_change.html:
|
|
549
|
+
#: templates/umap/password_change.html:14
|
|
535
550
|
msgid ""
|
|
536
551
|
"Please enter your old password, for security's sake, and then enter your new"
|
|
537
552
|
" password twice so we can verify you typed it in correctly."
|
|
538
553
|
msgstr "為確保賬戸安全,請先輸入你的舊有密碼。然後輸入新密碼兩次,以便確認新密碼輸入正確。"
|
|
539
554
|
|
|
540
|
-
#: templates/umap/password_change.html:
|
|
555
|
+
#: templates/umap/password_change.html:21
|
|
541
556
|
msgid "Old password"
|
|
542
557
|
msgstr "舊密碼"
|
|
543
558
|
|
|
544
|
-
#: templates/umap/password_change.html:
|
|
559
|
+
#: templates/umap/password_change.html:26
|
|
545
560
|
msgid "New password"
|
|
546
561
|
msgstr "新密碼"
|
|
547
562
|
|
|
548
|
-
#: templates/umap/password_change.html:
|
|
563
|
+
#: templates/umap/password_change.html:30
|
|
549
564
|
msgid "New password confirmation"
|
|
550
565
|
msgstr "再次輸入新密碼"
|
|
551
566
|
|
|
552
|
-
#: templates/umap/password_change.html:
|
|
567
|
+
#: templates/umap/password_change.html:31
|
|
553
568
|
msgid "Change my password"
|
|
554
569
|
msgstr "更改我的密碼"
|
|
555
570
|
|
|
556
|
-
#: templates/umap/password_change_done.html:
|
|
571
|
+
#: templates/umap/password_change_done.html:6
|
|
572
|
+
#: templates/umap/password_change_done.html:11
|
|
557
573
|
msgid "Password change successful"
|
|
558
574
|
msgstr "成功更改密碼"
|
|
559
575
|
|
|
560
|
-
#: templates/umap/password_change_done.html:
|
|
576
|
+
#: templates/umap/password_change_done.html:14
|
|
561
577
|
msgid "Your password was changed."
|
|
562
578
|
msgstr "你的密碼已更改。"
|
|
563
579
|
|
|
564
|
-
#: templates/umap/search.html:
|
|
580
|
+
#: templates/umap/search.html:6
|
|
581
|
+
msgid "Explore maps"
|
|
582
|
+
msgstr "瀏覽地圖"
|
|
583
|
+
|
|
584
|
+
#: templates/umap/search.html:19
|
|
565
585
|
#, python-format
|
|
566
586
|
msgid "%(count)s map found:"
|
|
567
587
|
msgid_plural "%(count)s maps found:"
|
|
568
588
|
msgstr[0] "已找到%(count)s份地圖:"
|
|
569
589
|
|
|
570
|
-
#: templates/umap/search.html:
|
|
590
|
+
#: templates/umap/search.html:28
|
|
571
591
|
msgid "No map found."
|
|
572
592
|
msgstr "找不到地圖。"
|
|
573
593
|
|
|
574
|
-
#: templates/umap/search.html:
|
|
594
|
+
#: templates/umap/search.html:33
|
|
575
595
|
msgid "Latest created maps"
|
|
576
596
|
msgstr "最新創建地圖"
|
|
577
597
|
|
|
@@ -583,21 +603,34 @@ msgstr "搜尋地圖"
|
|
|
583
603
|
msgid "Search"
|
|
584
604
|
msgstr "搜尋"
|
|
585
605
|
|
|
586
|
-
#: templates/umap/
|
|
606
|
+
#: templates/umap/team_confirm_delete.html:6
|
|
607
|
+
msgid "Team deletion"
|
|
608
|
+
msgstr "團隊刪除"
|
|
609
|
+
|
|
610
|
+
#: templates/umap/team_detail.html:6
|
|
611
|
+
#, python-format
|
|
612
|
+
msgid "%(current_team)s’s maps"
|
|
613
|
+
msgstr "%(current_team)s的地圖"
|
|
614
|
+
|
|
615
|
+
#: templates/umap/team_detail.html:14
|
|
587
616
|
#, python-format
|
|
588
617
|
msgid "Browse %(current_team)s's maps"
|
|
589
618
|
msgstr "瀏覽%(current_team)s的地圖"
|
|
590
619
|
|
|
591
|
-
#: templates/umap/team_detail.html:
|
|
620
|
+
#: templates/umap/team_detail.html:26
|
|
592
621
|
#, python-format
|
|
593
622
|
msgid "%(current_team)s has no public maps."
|
|
594
623
|
msgstr "%(current_team)s沒有公開地圖"
|
|
595
624
|
|
|
596
|
-
#: templates/umap/team_form.html:
|
|
625
|
+
#: templates/umap/team_form.html:6
|
|
626
|
+
msgid "Create or edit a team"
|
|
627
|
+
msgstr "創建或是編輯團隊"
|
|
628
|
+
|
|
629
|
+
#: templates/umap/team_form.html:28
|
|
597
630
|
msgid "Delete this team"
|
|
598
631
|
msgstr "刪除這個團隊"
|
|
599
632
|
|
|
600
|
-
#: templates/umap/team_form.html:
|
|
633
|
+
#: templates/umap/team_form.html:51
|
|
601
634
|
msgid "Add user"
|
|
602
635
|
msgstr "新增使用者"
|
|
603
636
|
|
|
@@ -618,11 +651,15 @@ msgstr "下載%(count)s地圖"
|
|
|
618
651
|
msgid "You have no map yet."
|
|
619
652
|
msgstr "你目前還沒有地圖。"
|
|
620
653
|
|
|
621
|
-
#: templates/umap/user_teams.html:
|
|
654
|
+
#: templates/umap/user_teams.html:6
|
|
655
|
+
msgid "My Teams"
|
|
656
|
+
msgstr "我的團隊"
|
|
657
|
+
|
|
658
|
+
#: templates/umap/user_teams.html:21
|
|
622
659
|
msgid "Users"
|
|
623
660
|
msgstr "使用者"
|
|
624
661
|
|
|
625
|
-
#: templates/umap/user_teams.html:
|
|
662
|
+
#: templates/umap/user_teams.html:52
|
|
626
663
|
msgid "New team"
|
|
627
664
|
msgstr "新的團隊"
|
|
628
665
|
|
|
@@ -639,57 +676,64 @@ msgstr "已經刪除團隊 \"%(name)s\" "
|
|
|
639
676
|
msgid "View the map"
|
|
640
677
|
msgstr "檢視地圖"
|
|
641
678
|
|
|
642
|
-
#: views.py:
|
|
679
|
+
#: views.py:838
|
|
643
680
|
msgid "See full screen"
|
|
644
681
|
msgstr "檢視全螢幕"
|
|
645
682
|
|
|
646
|
-
#: views.py:
|
|
683
|
+
#: views.py:981
|
|
647
684
|
msgid "Map editors updated with success!"
|
|
648
685
|
msgstr "地圖編輯者更新完成"
|
|
649
686
|
|
|
650
|
-
#: views.py:
|
|
687
|
+
#: views.py:1017
|
|
651
688
|
#, python-format
|
|
652
689
|
msgid "The uMap edit link for your map: %(map_name)s"
|
|
653
690
|
msgstr "你的地圖 uMap 編輯連結:%(map_name)s"
|
|
654
691
|
|
|
655
|
-
#: views.py:
|
|
692
|
+
#: views.py:1020
|
|
656
693
|
#, python-format
|
|
657
694
|
msgid "Here is your secret edit link: %(link)s"
|
|
658
695
|
msgstr "這是你的祕密編輯連結:%(link)s"
|
|
659
696
|
|
|
660
|
-
#: views.py:
|
|
697
|
+
#: views.py:1027
|
|
661
698
|
#, python-format
|
|
662
699
|
msgid "Can't send email to %(email)s"
|
|
663
700
|
msgstr "無法傳送電子郵件到%(email)s"
|
|
664
701
|
|
|
665
|
-
#: views.py:
|
|
702
|
+
#: views.py:1030
|
|
666
703
|
#, python-format
|
|
667
704
|
msgid "Email sent to %(email)s"
|
|
668
705
|
msgstr "電子郵件寄至 %(email)s"
|
|
669
706
|
|
|
670
|
-
#: views.py:
|
|
707
|
+
#: views.py:1041
|
|
671
708
|
msgid "Only its owner can delete the map."
|
|
672
709
|
msgstr "只有擁有者可以刪除此地圖"
|
|
673
710
|
|
|
674
|
-
#: views.py:
|
|
711
|
+
#: views.py:1044
|
|
675
712
|
msgid "Map successfully deleted."
|
|
676
713
|
msgstr "成功刪除地圖"
|
|
677
714
|
|
|
678
|
-
#: views.py:
|
|
715
|
+
#: views.py:1070
|
|
679
716
|
#, python-format
|
|
680
717
|
msgid ""
|
|
681
718
|
"Your map has been cloned! If you want to edit this map from another "
|
|
682
719
|
"computer, please use this link: %(anonymous_url)s"
|
|
683
720
|
msgstr "您的地圖已複製完成!如果您想在不同的機器編輯這個地圖,請使用這個連結:%(anonymous_url)s"
|
|
684
721
|
|
|
685
|
-
#: views.py:
|
|
722
|
+
#: views.py:1075
|
|
686
723
|
msgid "Congratulations, your map has been cloned!"
|
|
687
724
|
msgstr "恭喜,您的地圖已被複製!"
|
|
688
725
|
|
|
689
|
-
#: views.py:
|
|
726
|
+
#: views.py:1329
|
|
690
727
|
msgid "Layer successfully deleted."
|
|
691
728
|
msgstr "圖層已刪除"
|
|
692
729
|
|
|
693
|
-
#: views.py:
|
|
730
|
+
#: views.py:1351
|
|
694
731
|
msgid "Permissions updated with success!"
|
|
695
732
|
msgstr "權限更新完成"
|
|
733
|
+
|
|
734
|
+
#: views.py:1430
|
|
735
|
+
#, python-format
|
|
736
|
+
msgid ""
|
|
737
|
+
"Using “%(name)s” to authenticate is deprecated. Please configure another "
|
|
738
|
+
"provider in your profile page."
|
|
739
|
+
msgstr "使用\"%(name)s\"來認證已經廢棄了,請在你的個人檔案頁面使用其他供應商來設定認證。"
|
|
@@ -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",)
|
|
@@ -507,17 +523,27 @@ class DataLayer(NamedModel):
|
|
|
507
523
|
def metadata(self, request=None):
|
|
508
524
|
# Retrocompat: minimal settings for maps not saved after settings property
|
|
509
525
|
# has been introduced
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
526
|
+
metadata = self.settings
|
|
527
|
+
if not metadata:
|
|
528
|
+
# Fallback to file for old datalayers.
|
|
529
|
+
data = json.loads(self.geojson.read().decode())
|
|
530
|
+
metadata = data.get("_umap_options")
|
|
531
|
+
if not metadata:
|
|
532
|
+
metadata = {
|
|
533
|
+
"name": self.name,
|
|
534
|
+
"displayOnLoad": self.display_on_load,
|
|
535
|
+
}
|
|
536
|
+
# Save it to prevent file reading at each map load.
|
|
537
|
+
self.settings = metadata
|
|
538
|
+
# Do not update the modified_at.
|
|
539
|
+
self.save(update_fields=["settings"])
|
|
514
540
|
if self.old_id:
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
return
|
|
541
|
+
metadata["old_id"] = self.old_id
|
|
542
|
+
metadata["id"] = self.pk
|
|
543
|
+
metadata["permissions"] = {"edit_status": self.edit_status}
|
|
544
|
+
metadata["editMode"] = "advanced" if self.can_edit(request) else "disabled"
|
|
545
|
+
metadata["_referenceVersion"] = self.reference_version
|
|
546
|
+
return metadata
|
|
521
547
|
|
|
522
548
|
def clone(self, map_inst=None):
|
|
523
549
|
new = self.__class__.objects.get(pk=self.pk)
|
|
@@ -568,6 +594,10 @@ class DataLayer(NamedModel):
|
|
|
568
594
|
can = True
|
|
569
595
|
return can
|
|
570
596
|
|
|
597
|
+
def move_to_trash(self):
|
|
598
|
+
self.share_status = DataLayer.DELETED
|
|
599
|
+
self.save()
|
|
600
|
+
|
|
571
601
|
|
|
572
602
|
class Star(models.Model):
|
|
573
603
|
at = models.DateTimeField(auto_now=True)
|
umap/settings/base.py
CHANGED
|
@@ -267,13 +267,14 @@ 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
|
|
273
274
|
UMAP_MAPS_PER_SEARCH = 25
|
|
274
275
|
UMAP_MAPS_PER_PAGE_OWNER = 10
|
|
275
276
|
UMAP_SEARCH_CONFIGURATION = "simple"
|
|
276
|
-
UMAP_HELP_URL = "https://
|
|
277
|
+
UMAP_HELP_URL = "https://discover.umap-project.org/"
|
|
277
278
|
USER_MAPS_URL = "user_maps"
|
|
278
279
|
DATABASES = {
|
|
279
280
|
"default": env.db(
|
|
@@ -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"
|
umap/static/umap/base.css
CHANGED
|
@@ -19,7 +19,10 @@ h1, h2, h3, h4, h5, h6, label, hr {
|
|
|
19
19
|
}
|
|
20
20
|
a {
|
|
21
21
|
text-decoration: none;
|
|
22
|
-
color:
|
|
22
|
+
color: #1F5C39;
|
|
23
|
+
}
|
|
24
|
+
a[href^="http"]:not(nav.umap-nav a) {
|
|
25
|
+
text-decoration: underline;
|
|
23
26
|
}
|
|
24
27
|
button {
|
|
25
28
|
cursor: pointer;
|
|
@@ -46,7 +49,7 @@ h3, h4, h5 {
|
|
|
46
49
|
margin-bottom: 14px;
|
|
47
50
|
}
|
|
48
51
|
p {
|
|
49
|
-
line-height:
|
|
52
|
+
line-height: 1.4;
|
|
50
53
|
margin-top: 14px;
|
|
51
54
|
margin-bottom: 14px;
|
|
52
55
|
}
|