umap-project 3.4.0b1__py3-none-any.whl → 3.4.2__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.
Files changed (202) hide show
  1. umap/__init__.py +1 -1
  2. umap/context_processors.py +1 -1
  3. umap/locale/da/LC_MESSAGES/django.mo +0 -0
  4. umap/locale/da/LC_MESSAGES/django.po +20 -16
  5. umap/locale/en/LC_MESSAGES/django.po +18 -14
  6. umap/locale/es/LC_MESSAGES/django.mo +0 -0
  7. umap/locale/es/LC_MESSAGES/django.po +20 -16
  8. umap/locale/fr/LC_MESSAGES/django.mo +0 -0
  9. umap/locale/fr/LC_MESSAGES/django.po +18 -14
  10. umap/locale/pl/LC_MESSAGES/django.mo +0 -0
  11. umap/locale/pl/LC_MESSAGES/django.po +72 -71
  12. umap/migrations/0018_datalayer_uuid.py +1 -1
  13. umap/models.py +7 -3
  14. umap/settings/local.py.sample +1 -1
  15. umap/static/umap/content.css +0 -3
  16. umap/static/umap/css/bar.css +9 -6
  17. umap/static/umap/css/form.css +27 -11
  18. umap/static/umap/css/popup.css +1 -0
  19. umap/static/umap/js/components/base.js +1 -1
  20. umap/static/umap/js/components/copiable.js +47 -0
  21. umap/static/umap/js/modules/autocomplete.js +31 -58
  22. umap/static/umap/js/modules/browser.js +8 -8
  23. umap/static/umap/js/modules/data/features.js +33 -36
  24. umap/static/umap/js/modules/data/fields.js +446 -0
  25. umap/static/umap/js/modules/data/layer.js +76 -93
  26. umap/static/umap/js/modules/domutils.js +24 -4
  27. umap/static/umap/js/modules/filters.js +20 -47
  28. umap/static/umap/js/modules/form/fields.js +4 -4
  29. umap/static/umap/js/modules/formatter.js +9 -1
  30. umap/static/umap/js/modules/help.js +13 -14
  31. umap/static/umap/js/modules/i18n.js +1 -1
  32. umap/static/umap/js/modules/importer.js +18 -27
  33. umap/static/umap/js/modules/importers/banfr.js +0 -1
  34. umap/static/umap/js/modules/importers/cadastrefr.js +19 -19
  35. umap/static/umap/js/modules/importers/communesfr.js +7 -8
  36. umap/static/umap/js/modules/importers/datasets.js +14 -14
  37. umap/static/umap/js/modules/importers/geodatamine.js +20 -22
  38. umap/static/umap/js/modules/importers/opendata.js +10 -0
  39. umap/static/umap/js/modules/importers/overpass.js +19 -18
  40. umap/static/umap/js/modules/managers.js +1 -265
  41. umap/static/umap/js/modules/permissions.js +5 -3
  42. umap/static/umap/js/modules/rendering/controls.js +6 -4
  43. umap/static/umap/js/modules/rendering/icon.js +5 -9
  44. umap/static/umap/js/modules/rendering/layers/base.js +1 -1
  45. umap/static/umap/js/modules/rendering/layers/classified.js +16 -11
  46. umap/static/umap/js/modules/rendering/layers/heat.js +27 -21
  47. umap/static/umap/js/modules/rendering/map.js +22 -22
  48. umap/static/umap/js/modules/rendering/popup.js +6 -3
  49. umap/static/umap/js/modules/rendering/template.js +31 -37
  50. umap/static/umap/js/modules/rendering/ui.js +1 -2
  51. umap/static/umap/js/modules/rules.js +34 -41
  52. umap/static/umap/js/modules/schema.js +0 -7
  53. umap/static/umap/js/modules/share.js +36 -69
  54. umap/static/umap/js/modules/slideshow.js +3 -3
  55. umap/static/umap/js/modules/tableeditor.js +0 -1
  56. umap/static/umap/js/modules/ui/bar.js +51 -32
  57. umap/static/umap/js/modules/ui/dialog.js +10 -1
  58. umap/static/umap/js/modules/ui/panel.js +28 -23
  59. umap/static/umap/js/modules/ui/tooltip.js +1 -1
  60. umap/static/umap/js/modules/umap.js +84 -84
  61. umap/static/umap/js/modules/utils.js +13 -4
  62. umap/static/umap/js/umap.controls.js +33 -14
  63. umap/static/umap/locale/am_ET.js +19 -8
  64. umap/static/umap/locale/am_ET.json +19 -8
  65. umap/static/umap/locale/ar.js +19 -8
  66. umap/static/umap/locale/ar.json +19 -8
  67. umap/static/umap/locale/ast.js +19 -8
  68. umap/static/umap/locale/ast.json +19 -8
  69. umap/static/umap/locale/bg.js +19 -8
  70. umap/static/umap/locale/bg.json +19 -8
  71. umap/static/umap/locale/br.js +20 -9
  72. umap/static/umap/locale/br.json +20 -9
  73. umap/static/umap/locale/ca.js +19 -8
  74. umap/static/umap/locale/ca.json +19 -8
  75. umap/static/umap/locale/cs_CZ.js +20 -9
  76. umap/static/umap/locale/cs_CZ.json +20 -9
  77. umap/static/umap/locale/da.js +54 -43
  78. umap/static/umap/locale/da.json +54 -43
  79. umap/static/umap/locale/de.js +44 -33
  80. umap/static/umap/locale/de.json +44 -33
  81. umap/static/umap/locale/el.js +20 -9
  82. umap/static/umap/locale/el.json +20 -9
  83. umap/static/umap/locale/en.js +20 -9
  84. umap/static/umap/locale/en.json +20 -9
  85. umap/static/umap/locale/en_US.json +19 -8
  86. umap/static/umap/locale/es.js +55 -44
  87. umap/static/umap/locale/es.json +55 -44
  88. umap/static/umap/locale/et.js +20 -9
  89. umap/static/umap/locale/et.json +20 -9
  90. umap/static/umap/locale/eu.js +25 -14
  91. umap/static/umap/locale/eu.json +25 -14
  92. umap/static/umap/locale/fa_IR.js +20 -9
  93. umap/static/umap/locale/fa_IR.json +20 -9
  94. umap/static/umap/locale/fi.js +19 -8
  95. umap/static/umap/locale/fi.json +19 -8
  96. umap/static/umap/locale/fr.js +21 -10
  97. umap/static/umap/locale/fr.json +21 -10
  98. umap/static/umap/locale/gl.js +147 -136
  99. umap/static/umap/locale/gl.json +147 -136
  100. umap/static/umap/locale/he.js +19 -8
  101. umap/static/umap/locale/he.json +19 -8
  102. umap/static/umap/locale/hr.js +19 -8
  103. umap/static/umap/locale/hr.json +19 -8
  104. umap/static/umap/locale/hu.js +62 -51
  105. umap/static/umap/locale/hu.json +62 -51
  106. umap/static/umap/locale/id.js +19 -8
  107. umap/static/umap/locale/id.json +19 -8
  108. umap/static/umap/locale/is.js +20 -9
  109. umap/static/umap/locale/is.json +20 -9
  110. umap/static/umap/locale/it.js +20 -9
  111. umap/static/umap/locale/it.json +20 -9
  112. umap/static/umap/locale/ja.js +19 -8
  113. umap/static/umap/locale/ja.json +19 -8
  114. umap/static/umap/locale/ko.js +19 -8
  115. umap/static/umap/locale/ko.json +19 -8
  116. umap/static/umap/locale/lt.js +19 -8
  117. umap/static/umap/locale/lt.json +19 -8
  118. umap/static/umap/locale/ms.js +20 -9
  119. umap/static/umap/locale/ms.json +20 -9
  120. umap/static/umap/locale/nl.js +20 -9
  121. umap/static/umap/locale/nl.json +20 -9
  122. umap/static/umap/locale/no.js +19 -8
  123. umap/static/umap/locale/no.json +19 -8
  124. umap/static/umap/locale/pl.js +56 -45
  125. umap/static/umap/locale/pl.json +56 -45
  126. umap/static/umap/locale/pl_PL.json +19 -8
  127. umap/static/umap/locale/pt.js +20 -9
  128. umap/static/umap/locale/pt.json +20 -9
  129. umap/static/umap/locale/pt_BR.js +19 -8
  130. umap/static/umap/locale/pt_BR.json +19 -8
  131. umap/static/umap/locale/pt_PT.js +19 -8
  132. umap/static/umap/locale/pt_PT.json +19 -8
  133. umap/static/umap/locale/ro.js +19 -8
  134. umap/static/umap/locale/ro.json +19 -8
  135. umap/static/umap/locale/ru.js +19 -8
  136. umap/static/umap/locale/ru.json +19 -8
  137. umap/static/umap/locale/si.js +1 -1
  138. umap/static/umap/locale/si.json +1 -1
  139. umap/static/umap/locale/sk_SK.js +19 -8
  140. umap/static/umap/locale/sk_SK.json +19 -8
  141. umap/static/umap/locale/sl.js +19 -8
  142. umap/static/umap/locale/sl.json +19 -8
  143. umap/static/umap/locale/sr.js +19 -8
  144. umap/static/umap/locale/sr.json +19 -8
  145. umap/static/umap/locale/sv.js +19 -8
  146. umap/static/umap/locale/sv.json +19 -8
  147. umap/static/umap/locale/th_TH.js +19 -8
  148. umap/static/umap/locale/th_TH.json +19 -8
  149. umap/static/umap/locale/tr.js +19 -8
  150. umap/static/umap/locale/tr.json +19 -8
  151. umap/static/umap/locale/uk_UA.js +19 -8
  152. umap/static/umap/locale/uk_UA.json +19 -8
  153. umap/static/umap/locale/vi.js +19 -8
  154. umap/static/umap/locale/vi.json +19 -8
  155. umap/static/umap/locale/vi_VN.json +19 -8
  156. umap/static/umap/locale/zh.js +19 -8
  157. umap/static/umap/locale/zh.json +19 -8
  158. umap/static/umap/locale/zh_CN.json +19 -8
  159. umap/static/umap/locale/zh_TW.Big5.json +19 -8
  160. umap/static/umap/locale/zh_TW.js +53 -42
  161. umap/static/umap/locale/zh_TW.json +53 -42
  162. umap/static/umap/map.css +8 -7
  163. umap/static/umap/unittests/utils.js +7 -7
  164. umap/templates/umap/content_footer.html +1 -0
  165. umap/templates/umap/css.html +0 -2
  166. umap/templates/umap/js.html +1 -3
  167. umap/templates/umap/login_popup_end.html +2 -2
  168. umap/tests/integration/conftest.py +11 -2
  169. umap/tests/integration/test_anonymous_owned_map.py +2 -2
  170. umap/tests/integration/test_conditional_rules.py +107 -52
  171. umap/tests/integration/test_draw_polygon.py +4 -0
  172. umap/tests/integration/test_draw_polyline.py +11 -0
  173. umap/tests/integration/test_edit_datalayer.py +1 -1
  174. umap/tests/integration/test_fields.py +19 -0
  175. umap/tests/integration/test_filters.py +6 -7
  176. umap/tests/integration/test_iframe.py +1 -1
  177. umap/tests/integration/test_import.py +23 -0
  178. umap/tests/integration/test_map.py +2 -2
  179. umap/tests/integration/test_map_preview.py +1 -1
  180. umap/tests/integration/test_owned_map.py +2 -2
  181. umap/tests/integration/test_picto.py +1 -1
  182. umap/tests/integration/test_popup.py +31 -0
  183. umap/tests/integration/test_remote_data.py +4 -4
  184. umap/tests/integration/test_save.py +1 -1
  185. umap/tests/integration/test_search.py +41 -0
  186. umap/tests/integration/test_share.py +2 -2
  187. umap/tests/integration/test_team.py +1 -1
  188. umap/tests/integration/test_websocket_sync.py +69 -20
  189. umap/tests/test_dashboard.py +1 -1
  190. umap/tests/test_statics.py +2 -2
  191. umap/tests/test_utils.py +4 -1
  192. umap/tests/test_views.py +1 -1
  193. umap/utils.py +3 -2
  194. {umap_project-3.4.0b1.dist-info → umap_project-3.4.2.dist-info}/METADATA +17 -17
  195. {umap_project-3.4.0b1.dist-info → umap_project-3.4.2.dist-info}/RECORD +198 -199
  196. umap/static/umap/js/umap.core.js +0 -93
  197. umap/static/umap/vendors/editinosm/Leaflet.EditInOSM.css +0 -46
  198. umap/static/umap/vendors/editinosm/Leaflet.EditInOSM.js +0 -240
  199. umap/static/umap/vendors/editinosm/edit-in-osm.png +0 -0
  200. {umap_project-3.4.0b1.dist-info → umap_project-3.4.2.dist-info}/WHEEL +0 -0
  201. {umap_project-3.4.0b1.dist-info → umap_project-3.4.2.dist-info}/entry_points.txt +0 -0
  202. {umap_project-3.4.0b1.dist-info → umap_project-3.4.2.dist-info}/licenses/LICENSE +0 -0
@@ -70,7 +70,7 @@ const locale = {
70
70
  "color": "色彩",
71
71
  "Comma separated list of numbers, including min and max values.": "用逗號分隔數字,包括最小與最大值。",
72
72
  "Comma separated list of properties to use for sorting features. To reverse the sort, put a minus sign (-) before. Eg. mykey,-otherkey.": "用逗號分隔屬性清單來排序圖徵。要保存排序,在槊面加上減號 (-1),例如 mykey,-otherkey。",
73
- "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "使用逗號、定位鍵或是分號分隔的地理數據。預設座標系為 SRS WGS84。只會匯入地理座標點。匯入時抓取 «lat» 與 «lon» 開頭的欄位資料,不分大小寫。其他欄位則歸入屬性資料。",
73
+ "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the beginning of the header, case insensitive. All other column are imported as properties.": "使用逗號、定位鍵或是分號分隔的地理數據。預設座標系為 SRS WGS84。只會匯入地理座標點。匯入時抓取 «lat» 與 «lon» 開頭的欄位資料,不分大小寫。其他欄位則歸入屬性資料。",
74
74
  "Congratulations, your map has been created!": "恭喜您的地圖已經新增完成",
75
75
  "Continue line": "連續線段",
76
76
  "Coordinates": "座標",
@@ -99,7 +99,6 @@ const locale = {
99
99
  "Delete this vertex (Alt+Click)": "刪除頂點 (Alt+Click)",
100
100
  "Delete": "刪除",
101
101
  "description": "描述",
102
- "Direct link": "直接連結",
103
102
  "Directions from here": "從此處開始導航",
104
103
  "Display label": "顯示標籤",
105
104
  "Display measure": "Display measure",
@@ -135,7 +134,6 @@ const locale = {
135
134
  "Edit this feature": "編輯此圖徵",
136
135
  "Edit": "編輯",
137
136
  "Embed and link options": "嵌入與連結選項",
138
- "Embed the map": "嵌入地圖",
139
137
  "Emoji & Character": "表情符號和字元",
140
138
  "Empty": "空白",
141
139
  "Equidistant": "等距",
@@ -159,7 +157,6 @@ const locale = {
159
157
  "Go to \"{coords}\"": "去 \"{coords}\"",
160
158
  "Go to the homepage": "前往首頁",
161
159
  "Go to «{feature}»": "轉至 «{feature}»",
162
- "Heatmap intensity property": "熱點圖強度屬性",
163
160
  "Heatmap radius": "熱點圖半徑",
164
161
  "Heatmap": "熱點圖",
165
162
  "height": "高度",
@@ -240,7 +237,6 @@ const locale = {
240
237
  "No licence has been set": "尚未設定授權條例",
241
238
  "No results": "沒有結果",
242
239
  "no": "否",
243
- "No.": "無。",
244
240
  "None": "以上皆非",
245
241
  "Number of desired classes (default 5)": "偏好的類別數量 (預設為 5)",
246
242
  "On the bottom": "在底部",
@@ -255,7 +251,6 @@ const locale = {
255
251
  "Open share & download panel": "開啟分享與下載面板",
256
252
  "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "在地圖編輯器中打開此地圖,提供更多準確資料給 OpenStreetMap",
257
253
  "OpenStreetMap": "開放街圖",
258
- "Optional intensity property for heatmap": "選用的熱圖 heatmap 強度屬性",
259
254
  "Optional. Same as color if not set.": "可選,若您未選取顏色,則採用預設值",
260
255
  "Optional.": "可選",
261
256
  "Override clustering radius (default 80)": "覆蓋群集分析半徑 (預設80)",
@@ -297,7 +292,6 @@ const locale = {
297
292
  "settings": "設定",
298
293
  "Shape properties": "形狀屬性",
299
294
  "Share and download": "分享與下載",
300
- "Share this link to open a customized map view": "分享這連結來開啟客製化地圖檢視",
301
295
  "Short credits": "簡短工作人員名單",
302
296
  "Short link": "短網址",
303
297
  "Show this layer in the caption": "在標題顯示此圖層",
@@ -604,44 +598,61 @@ const locale = {
604
598
  "Right-click to edit": "按右鍵來編輯",
605
599
  "Draw along routes": "沿著路線繪製",
606
600
  "Skipping invalid geometry": "略過無效的地理空間",
607
- "Add filter": "Add filter",
608
- "Min/Max": "Min/Max",
609
- "Multiple choices": "Multiple choices",
610
- "Exclusive choice": "Exclusive choice",
611
- "Yes/No": "Yes/No",
612
- "Add a field prior to create a filter.": "Add a field prior to create a filter.",
613
- "Edit this filter": "Edit this filter",
614
- "Remove this filter": "Remove this filter",
615
- "Apply filter to": "Apply filter to",
616
- "Filter on": "Filter on",
617
- "Human readable name of the filter": "Human readable name of the filter",
618
- "Widget for the filter": "Widget for the filter",
619
- "Edit filter": "Edit filter",
620
- "Edit this field": "Edit this field",
621
- "all layers": "all layers",
622
- "single layer": "single layer",
623
- "unset": "unset",
624
- "Filters will be displayed in the data browser to ease data selection.": "Filters will be displayed in the data browser to ease data selection.",
601
+ "Add filter": "新增篩選",
602
+ "Min/Max": "最小/最大",
603
+ "Multiple choices": "多重選擇",
604
+ "Exclusive choice": "單一選擇",
605
+ "Yes/No": "是/否",
606
+ "Add a field prior to create a filter.": "在新增篩選前新增欄位。",
607
+ "Edit this filter": "編輯這個篩選",
608
+ "Remove this filter": "移除這個篩選",
609
+ "Apply filter to": "套用篩選到",
610
+ "Filter on": "篩選啟用",
611
+ "Human readable name of the filter": "這個篩選的人類可讀名稱",
612
+ "Widget for the filter": "這個篩選的小工具",
613
+ "Edit filter": "編輯篩選",
614
+ "Edit this field": "編輯這個欄位",
615
+ "all layers": "所有圖層",
616
+ "single layer": "單一圖層",
617
+ "unset": "取消設定",
618
+ "Filters will be displayed in the data browser to ease data selection.": "資料瀏覽器會顯示篩選,來減少資料選擇程度。",
625
619
  "[key=\"value\"][key2=\"value2\"] (eg. [boundary=\"educational\"][name=\"Académie de Lyon\"])": "[key=\"value\"][key2=\"value2\"] (eg. [boundary=\"educational\"][name=\"Académie de Lyon\"])",
626
- "Field Name": "Field Name",
627
- "Field Type": "Field Type",
628
- "Manage field": "Manage field",
629
- "Add filter for this field": "Add filter for this field",
630
- "Name cannot be empty.": "Name cannot be empty.",
631
- "Are you sure you want to delete this field on all the data?": "Are you sure you want to delete this field on all the data?",
632
- "Anonymous map": "Anonymous map",
633
- "Edit filter for this field": "Edit filter for this field",
634
- "Fields, filters and keys": "Fields, filters and keys",
635
- "Hey, you created a map without an account!": "Hey, you created a map without an account!",
636
- "This map is anonymous, do you want to attach it to your account?": "This map is anonymous, do you want to attach it to your account?",
637
- "The map has been upgraded to latest version, please save it.": "The map has been upgraded to latest version, please save it.",
638
- "Elevation has been added!": "Elevation has been added!",
620
+ "Field Name": "欄位名稱",
621
+ "Field Type": "欄位類型",
622
+ "Manage field": "管理欄位",
623
+ "Add filter for this field": "新增篩選到這一欄位",
624
+ "Name cannot be empty.": "名稱無法是空白的。",
625
+ "Are you sure you want to delete this field on all the data?": "你確定要刪除所有資料當中的這個欄位?",
626
+ "Anonymous map": "暱名地圖",
627
+ "Edit filter for this field": "為這個欄位編輯篩選",
628
+ "Hey, you created a map without an account!": "嗨,你在沒有帳號狀態下創建地圖!",
629
+ "This map is anonymous, do you want to attach it to your account?": "這份地圖是暱名的,你想要連結到你的帳號嗎?",
630
+ "The map has been upgraded to latest version, please save it.": "這份地圖已經更新至最新版本,請先儲存。",
631
+ "Elevation has been added!": "已經新增海拔高度了!",
639
632
  "Mapillary": "Mapillary",
640
633
  "Wikidata": "Wikidata",
641
- "Wikipedia contributors": "Wikipedia contributors",
642
- "See on Wikipedia": "See on Wikipedia",
643
- "Anonymous map: update who can see and edit it": "Anonymous map: update who can see and edit it",
644
- "Login": "Login"
634
+ "Wikipedia contributors": "維基百科貢獻者",
635
+ "See on Wikipedia": "在維基百科上檢視",
636
+ "Anonymous map: update who can see and edit it": "暱名地圖,任何人都可以檢視與編輯",
637
+ "Login": "登入",
638
+ "Manage filters": "管理篩選",
639
+ "Map (all layers)": "地圖 (所有圖層)",
640
+ "Add a filter for this field": "新增篩選到這欄位",
641
+ "Short text": "簡短文字",
642
+ "Text": "文字",
643
+ "Number": "數值",
644
+ "Date": "日期",
645
+ "Date and time": "日期與時間",
646
+ "List of values": "變數列表",
647
+ "Yes / No": "是 / 否",
648
+ "Select field to compute intensity": "選擇欄位運算強度",
649
+ "Optional intensity field to compute heatmap": "選擇性強度欄位來計算熱力圖",
650
+ "All layers": "所有圖層",
651
+ "Comma separated list of values": "逗號分隔清單的值",
652
+ "Share": "分享",
653
+ "Customized link": "自訂連結",
654
+ "Iframe": "頁面框",
655
+ "№": "№"
645
656
  }
646
657
  L.registerLocale("zh_TW", locale)
647
658
  L.setLocale("zh_TW")
@@ -70,7 +70,7 @@
70
70
  "color": "色彩",
71
71
  "Comma separated list of numbers, including min and max values.": "用逗號分隔數字,包括最小與最大值。",
72
72
  "Comma separated list of properties to use for sorting features. To reverse the sort, put a minus sign (-) before. Eg. mykey,-otherkey.": "用逗號分隔屬性清單來排序圖徵。要保存排序,在槊面加上減號 (-1),例如 mykey,-otherkey。",
73
- "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "使用逗號、定位鍵或是分號分隔的地理數據。預設座標系為 SRS WGS84。只會匯入地理座標點。匯入時抓取 «lat» 與 «lon» 開頭的欄位資料,不分大小寫。其他欄位則歸入屬性資料。",
73
+ "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the beginning of the header, case insensitive. All other column are imported as properties.": "使用逗號、定位鍵或是分號分隔的地理數據。預設座標系為 SRS WGS84。只會匯入地理座標點。匯入時抓取 «lat» 與 «lon» 開頭的欄位資料,不分大小寫。其他欄位則歸入屬性資料。",
74
74
  "Congratulations, your map has been created!": "恭喜您的地圖已經新增完成",
75
75
  "Continue line": "連續線段",
76
76
  "Coordinates": "座標",
@@ -99,7 +99,6 @@
99
99
  "Delete this vertex (Alt+Click)": "刪除頂點 (Alt+Click)",
100
100
  "Delete": "刪除",
101
101
  "description": "描述",
102
- "Direct link": "直接連結",
103
102
  "Directions from here": "從此處開始導航",
104
103
  "Display label": "顯示標籤",
105
104
  "Display measure": "Display measure",
@@ -135,7 +134,6 @@
135
134
  "Edit this feature": "編輯此圖徵",
136
135
  "Edit": "編輯",
137
136
  "Embed and link options": "嵌入與連結選項",
138
- "Embed the map": "嵌入地圖",
139
137
  "Emoji & Character": "表情符號和字元",
140
138
  "Empty": "空白",
141
139
  "Equidistant": "等距",
@@ -159,7 +157,6 @@
159
157
  "Go to \"{coords}\"": "去 \"{coords}\"",
160
158
  "Go to the homepage": "前往首頁",
161
159
  "Go to «{feature}»": "轉至 «{feature}»",
162
- "Heatmap intensity property": "熱點圖強度屬性",
163
160
  "Heatmap radius": "熱點圖半徑",
164
161
  "Heatmap": "熱點圖",
165
162
  "height": "高度",
@@ -240,7 +237,6 @@
240
237
  "No licence has been set": "尚未設定授權條例",
241
238
  "No results": "沒有結果",
242
239
  "no": "否",
243
- "No.": "無。",
244
240
  "None": "以上皆非",
245
241
  "Number of desired classes (default 5)": "偏好的類別數量 (預設為 5)",
246
242
  "On the bottom": "在底部",
@@ -255,7 +251,6 @@
255
251
  "Open share & download panel": "開啟分享與下載面板",
256
252
  "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "在地圖編輯器中打開此地圖,提供更多準確資料給 OpenStreetMap",
257
253
  "OpenStreetMap": "開放街圖",
258
- "Optional intensity property for heatmap": "選用的熱圖 heatmap 強度屬性",
259
254
  "Optional. Same as color if not set.": "可選,若您未選取顏色,則採用預設值",
260
255
  "Optional.": "可選",
261
256
  "Override clustering radius (default 80)": "覆蓋群集分析半徑 (預設80)",
@@ -297,7 +292,6 @@
297
292
  "settings": "設定",
298
293
  "Shape properties": "形狀屬性",
299
294
  "Share and download": "分享與下載",
300
- "Share this link to open a customized map view": "分享這連結來開啟客製化地圖檢視",
301
295
  "Short credits": "簡短工作人員名單",
302
296
  "Short link": "短網址",
303
297
  "Show this layer in the caption": "在標題顯示此圖層",
@@ -604,42 +598,59 @@
604
598
  "Right-click to edit": "按右鍵來編輯",
605
599
  "Draw along routes": "沿著路線繪製",
606
600
  "Skipping invalid geometry": "略過無效的地理空間",
607
- "Add filter": "Add filter",
608
- "Min/Max": "Min/Max",
609
- "Multiple choices": "Multiple choices",
610
- "Exclusive choice": "Exclusive choice",
611
- "Yes/No": "Yes/No",
612
- "Add a field prior to create a filter.": "Add a field prior to create a filter.",
613
- "Edit this filter": "Edit this filter",
614
- "Remove this filter": "Remove this filter",
615
- "Apply filter to": "Apply filter to",
616
- "Filter on": "Filter on",
617
- "Human readable name of the filter": "Human readable name of the filter",
618
- "Widget for the filter": "Widget for the filter",
619
- "Edit filter": "Edit filter",
620
- "Edit this field": "Edit this field",
621
- "all layers": "all layers",
622
- "single layer": "single layer",
623
- "unset": "unset",
624
- "Filters will be displayed in the data browser to ease data selection.": "Filters will be displayed in the data browser to ease data selection.",
601
+ "Add filter": "新增篩選",
602
+ "Min/Max": "最小/最大",
603
+ "Multiple choices": "多重選擇",
604
+ "Exclusive choice": "單一選擇",
605
+ "Yes/No": "是/否",
606
+ "Add a field prior to create a filter.": "在新增篩選前新增欄位。",
607
+ "Edit this filter": "編輯這個篩選",
608
+ "Remove this filter": "移除這個篩選",
609
+ "Apply filter to": "套用篩選到",
610
+ "Filter on": "篩選啟用",
611
+ "Human readable name of the filter": "這個篩選的人類可讀名稱",
612
+ "Widget for the filter": "這個篩選的小工具",
613
+ "Edit filter": "編輯篩選",
614
+ "Edit this field": "編輯這個欄位",
615
+ "all layers": "所有圖層",
616
+ "single layer": "單一圖層",
617
+ "unset": "取消設定",
618
+ "Filters will be displayed in the data browser to ease data selection.": "資料瀏覽器會顯示篩選,來減少資料選擇程度。",
625
619
  "[key=\"value\"][key2=\"value2\"] (eg. [boundary=\"educational\"][name=\"Académie de Lyon\"])": "[key=\"value\"][key2=\"value2\"] (eg. [boundary=\"educational\"][name=\"Académie de Lyon\"])",
626
- "Field Name": "Field Name",
627
- "Field Type": "Field Type",
628
- "Manage field": "Manage field",
629
- "Add filter for this field": "Add filter for this field",
630
- "Name cannot be empty.": "Name cannot be empty.",
631
- "Are you sure you want to delete this field on all the data?": "Are you sure you want to delete this field on all the data?",
632
- "Anonymous map": "Anonymous map",
633
- "Edit filter for this field": "Edit filter for this field",
634
- "Fields, filters and keys": "Fields, filters and keys",
635
- "Hey, you created a map without an account!": "Hey, you created a map without an account!",
636
- "This map is anonymous, do you want to attach it to your account?": "This map is anonymous, do you want to attach it to your account?",
637
- "The map has been upgraded to latest version, please save it.": "The map has been upgraded to latest version, please save it.",
638
- "Elevation has been added!": "Elevation has been added!",
620
+ "Field Name": "欄位名稱",
621
+ "Field Type": "欄位類型",
622
+ "Manage field": "管理欄位",
623
+ "Add filter for this field": "新增篩選到這一欄位",
624
+ "Name cannot be empty.": "名稱無法是空白的。",
625
+ "Are you sure you want to delete this field on all the data?": "你確定要刪除所有資料當中的這個欄位?",
626
+ "Anonymous map": "暱名地圖",
627
+ "Edit filter for this field": "為這個欄位編輯篩選",
628
+ "Hey, you created a map without an account!": "嗨,你在沒有帳號狀態下創建地圖!",
629
+ "This map is anonymous, do you want to attach it to your account?": "這份地圖是暱名的,你想要連結到你的帳號嗎?",
630
+ "The map has been upgraded to latest version, please save it.": "這份地圖已經更新至最新版本,請先儲存。",
631
+ "Elevation has been added!": "已經新增海拔高度了!",
639
632
  "Mapillary": "Mapillary",
640
633
  "Wikidata": "Wikidata",
641
- "Wikipedia contributors": "Wikipedia contributors",
642
- "See on Wikipedia": "See on Wikipedia",
643
- "Anonymous map: update who can see and edit it": "Anonymous map: update who can see and edit it",
644
- "Login": "Login"
634
+ "Wikipedia contributors": "維基百科貢獻者",
635
+ "See on Wikipedia": "在維基百科上檢視",
636
+ "Anonymous map: update who can see and edit it": "暱名地圖,任何人都可以檢視與編輯",
637
+ "Login": "登入",
638
+ "Manage filters": "管理篩選",
639
+ "Map (all layers)": "地圖 (所有圖層)",
640
+ "Add a filter for this field": "新增篩選到這欄位",
641
+ "Short text": "簡短文字",
642
+ "Text": "文字",
643
+ "Number": "數值",
644
+ "Date": "日期",
645
+ "Date and time": "日期與時間",
646
+ "List of values": "變數列表",
647
+ "Yes / No": "是 / 否",
648
+ "Select field to compute intensity": "選擇欄位運算強度",
649
+ "Optional intensity field to compute heatmap": "選擇性強度欄位來計算熱力圖",
650
+ "All layers": "所有圖層",
651
+ "Comma separated list of values": "逗號分隔清單的值",
652
+ "Share": "分享",
653
+ "Customized link": "自訂連結",
654
+ "Iframe": "頁面框",
655
+ "№": "№"
645
656
  }
umap/static/umap/map.css CHANGED
@@ -369,7 +369,7 @@ ul.photon-autocomplete {
369
369
  margin: 0;
370
370
  }
371
371
 
372
- .photon-autocomplete button:hover {
372
+ .photon-autocomplete button[type="button"]:hover {
373
373
  background-color: var(--color-darkCyan);
374
374
  }
375
375
 
@@ -405,8 +405,8 @@ ul.photon-autocomplete {
405
405
  display: none;
406
406
  }
407
407
 
408
- .search-result-tools button {
409
- padding: 8px;
408
+ .search-result-tools button[type="button"] {
409
+ padding: var(--text-margin);
410
410
  background-color: var(--background-color);
411
411
  }
412
412
 
@@ -420,6 +420,11 @@ ul.photon-autocomplete {
420
420
  /* ***************************** */
421
421
  /* Share and download panel */
422
422
  /* ***************************** */
423
+ .downloads {
424
+ columns: 4;
425
+ margin-bottom: var(--box-margin);
426
+ }
427
+
423
428
  .downloads li {
424
429
  height: 1.7em;
425
430
  padding: 0;
@@ -427,10 +432,6 @@ ul.photon-autocomplete {
427
432
  vertical-align: bottom;
428
433
  }
429
434
 
430
- .vspace {
431
- height: 32px;
432
- }
433
-
434
435
  /* *********** */
435
436
  /* Draw */
436
437
  /* *********** */
@@ -120,28 +120,28 @@ describe('Utils', () => {
120
120
  it('should handle iframe', () => {
121
121
  assert.equal(
122
122
  Utils.toHTML('A simple iframe: {{{http://osm.org/pouet.html}}}'),
123
- 'A simple iframe: <div><iframe height="300px" width="100%" src="http://osm.org/pouet.html" frameborder="0"></iframe></div>'
123
+ 'A simple iframe: <div><iframe style="width: 100%; height: 300px; border: 0;" src="http://osm.org/pouet.html" allowfullscreen=""></iframe></div>'
124
124
  )
125
125
  })
126
126
 
127
127
  it('should handle iframe with height', () => {
128
128
  assert.equal(
129
129
  Utils.toHTML('A simple iframe: {{{http://osm.org/pouet.html|200}}}'),
130
- 'A simple iframe: <div><iframe height="200px" width="100%" src="http://osm.org/pouet.html" frameborder="0"></iframe></div>'
130
+ 'A simple iframe: <div><iframe style="width: 100%; height: 200px; border: 0;" src="http://osm.org/pouet.html" allowfullscreen=""></iframe></div>'
131
131
  )
132
132
  })
133
133
 
134
134
  it('should handle iframe with height and width', () => {
135
135
  assert.equal(
136
136
  Utils.toHTML('A simple iframe: {{{http://osm.org/pouet.html|200*400}}}'),
137
- 'A simple iframe: <div><iframe height="200px" width="400px" src="http://osm.org/pouet.html" frameborder="0"></iframe></div>'
137
+ 'A simple iframe: <div><iframe style="width: 400px; height: 200px; border: 0;" src="http://osm.org/pouet.html" allowfullscreen=""></iframe></div>'
138
138
  )
139
139
  })
140
140
 
141
141
  it('should handle iframe with height with px', () => {
142
142
  assert.equal(
143
143
  Utils.toHTML('A simple iframe: {{{http://osm.org/pouet.html|200px}}}'),
144
- 'A simple iframe: <div><iframe height="200px" width="100%" src="http://osm.org/pouet.html" frameborder="0"></iframe></div>'
144
+ 'A simple iframe: <div><iframe style="width: 100%; height: 200px; border: 0;" src="http://osm.org/pouet.html" allowfullscreen=""></iframe></div>'
145
145
  )
146
146
  })
147
147
 
@@ -150,7 +150,7 @@ describe('Utils', () => {
150
150
  Utils.toHTML(
151
151
  'A simple iframe: {{{https://osm.org/?url=https%3A//anotherurl.com}}}'
152
152
  ),
153
- 'A simple iframe: <div><iframe height="300px" width="100%" src="https://osm.org/?url=https%3A//anotherurl.com" frameborder="0"></iframe></div>'
153
+ 'A simple iframe: <div><iframe style="width: 100%; height: 300px; border: 0;" src="https://osm.org/?url=https%3A//anotherurl.com" allowfullscreen=""></iframe></div>'
154
154
  )
155
155
  })
156
156
 
@@ -159,7 +159,7 @@ describe('Utils', () => {
159
159
  Utils.toHTML(
160
160
  'A double iframe: {{{https://osm.org/pouet}}}{{{https://osm.org/boudin}}}'
161
161
  ),
162
- 'A double iframe: <div><iframe height="300px" width="100%" src="https://osm.org/pouet" frameborder="0"></iframe></div><div><iframe height="300px" width="100%" src="https://osm.org/boudin" frameborder="0"></iframe></div>'
162
+ 'A double iframe: <div><iframe style="width: 100%; height: 300px; border: 0;" src="https://osm.org/pouet" allowfullscreen=""></iframe></div><div><iframe style="width: 100%; height: 300px; border: 0;" src="https://osm.org/boudin" allowfullscreen=""></iframe></div>'
163
163
  )
164
164
  })
165
165
 
@@ -168,7 +168,7 @@ describe('Utils', () => {
168
168
  Utils.toHTML(
169
169
  'An iframe with query string: {{{https://osm.org/pouet.html?name=foobar&description=baz baz}}}'
170
170
  ),
171
- 'An iframe with query string: <div><iframe height="300px" width="100%" src="https://osm.org/pouet.html?name=foobar&amp;description=baz baz" frameborder="0"></iframe></div>'
171
+ 'An iframe with query string: <div><iframe style="width: 100%; height: 300px; border: 0;" src="https://osm.org/pouet.html?name=foobar&amp;description=baz baz" allowfullscreen=""></iframe></div>'
172
172
  )
173
173
  })
174
174
 
@@ -7,6 +7,7 @@
7
7
  {% if UMAP_HOST_INFOS.url and UMAP_HOST_INFOS.name %}<span>{% trans "Hosted by" %} <a href="{{ UMAP_HOST_INFOS.url }}">{{ UMAP_HOST_INFOS.name }}</a></span>{% endif %}
8
8
  {% if UMAP_HOST_INFOS.email %}<a href="mailto:{{ UMAP_HOST_INFOS.email }}">{% trans "Contact" %}</a>{% endif %}
9
9
  {% if UMAP_HELP_URL %}<a href="{{ UMAP_HELP_URL }}">{% trans "Help" %}</a>{% endif %}
10
+ {% if UMAP_HOST_INFOS.tos %}<a href="{{ UMAP_HOST_INFOS.tos }}">{% trans "Terms of Service" %}</a>{% endif %}
10
11
  {% get_language_info_list for LANGUAGES as languages %}
11
12
  <form action="{% url "set_language" %}" method="post" class="i18n_switch">
12
13
  {% csrf_token %}
@@ -4,8 +4,6 @@
4
4
 
5
5
  <link rel="stylesheet"
6
6
  href="{% static 'umap/vendors/leaflet/leaflet.css' %}" />
7
- <link rel="stylesheet"
8
- href="{% static 'umap/vendors/editinosm/Leaflet.EditInOSM.css' %}" />
9
7
  <link rel="stylesheet"
10
8
  href="{% static 'umap/vendors/minimap/Control.MiniMap.min.css' %}" />
11
9
  <link rel="stylesheet"
@@ -17,8 +17,6 @@
17
17
  <script src="{% static 'umap/vendors/editable/Leaflet.Editable.js' %}" defer></script>
18
18
  <script type="module" src="{% static 'umap/js/modules/global.js' %}" defer></script>
19
19
  <script src="{% static 'umap/vendors/hash/leaflet-hash.js' %}" defer></script>
20
- <script src="{% static 'umap/vendors/editinosm/Leaflet.EditInOSM.js' %}"
21
- defer></script>
22
20
  <script src="{% static 'umap/vendors/minimap/Control.MiniMap.min.js' %}"
23
21
  defer></script>
24
22
  <script src="{% static 'umap/vendors/csv2geojson/csv2geojson.js' %}" defer></script>
@@ -36,8 +34,8 @@
36
34
  defer></script>
37
35
  <script src="{% static 'umap/vendors/simple-statistics/simple-statistics.min.js' %}"
38
36
  defer></script>
39
- <script src="{% static 'umap/js/umap.core.js' %}" defer></script>
40
37
  <script src="{% static 'umap/js/umap.controls.js' %}" defer></script>
41
38
  <script type="module" src="{% static 'umap/js/components/fragment.js' %}" defer></script>
42
39
  <script type="module" src="{% static 'umap/js/components/modal.js' %}" defer></script>
40
+ <script type="module" src="{% static 'umap/js/components/copiable.js' %}" defer></script>
43
41
  {% endautoescape %}
@@ -14,8 +14,8 @@
14
14
  }
15
15
  bc.postMessage('auth:ok')
16
16
  }
17
- // In case the login was started in Javascript, the broadcasting whould close this
18
- // window, so we wait for the broacasting to have a chance to finish the communication
17
+ // In case the login was started in Javascript, the broadcasting would close this
18
+ // window, so we wait for the broadcasting to have a chance to finish the communication
19
19
  // before trying to load the dashboard.
20
20
  window.setTimeout(() => {
21
21
  // We should arrive here in three situations:
@@ -26,8 +26,9 @@ def set_timeout(context):
26
26
 
27
27
  @pytest.fixture
28
28
  def new_page(context):
29
- def make_page(prefix="console"):
30
- page = context.new_page()
29
+ def make_page(prefix="console", custom_context=None):
30
+ _context = custom_context or context
31
+ page = _context.new_page()
31
32
  page.on(
32
33
  "console",
33
34
  lambda msg: print(f"{prefix}: {msg.text}")
@@ -47,6 +48,14 @@ def page(new_page):
47
48
  return new_page()
48
49
 
49
50
 
51
+ @pytest.fixture
52
+ def wait_for_loaded():
53
+ def _(page):
54
+ page.wait_for_function("() => U.MAP.dataloaded === true")
55
+
56
+ return _
57
+
58
+
50
59
  @pytest.fixture
51
60
  def login(new_page, settings, live_server):
52
61
  def do_login(user, **kwargs):
@@ -133,7 +133,7 @@ def test_can_change_perms_after_create(tilelayer, live_server, page):
133
133
  page.goto(f"{live_server.url}/en/map/new")
134
134
  # Create a layer
135
135
  page.get_by_title("Manage layers").click()
136
- page.get_by_title("Add a layer").click()
136
+ page.get_by_role("button", name="Add a layer").click()
137
137
  page.locator("input[name=name]").fill("Layer 1")
138
138
  expect(
139
139
  page.get_by_role("button", name="Visibility: Draft (private)")
@@ -193,7 +193,7 @@ def test_alert_message_after_create(
193
193
  )
194
194
 
195
195
 
196
- def test_email_sending_error_are_catched(tilelayer, page, live_server):
196
+ def test_email_sending_error_are_caught(tilelayer, page, live_server):
197
197
  page.goto(f"{live_server.url}/en/map/new")
198
198
  alert_creation = page.locator('umap-alert-creation div[role="dialog"]')
199
199
  with page.expect_response(re.compile(r".*/map/create/")):