umap-project 2.8.1__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.

Files changed (262) hide show
  1. umap/__init__.py +1 -1
  2. umap/admin.py +15 -2
  3. umap/asgi.py +12 -7
  4. umap/context_processors.py +1 -0
  5. umap/locale/br/LC_MESSAGES/django.mo +0 -0
  6. umap/locale/br/LC_MESSAGES/django.po +111 -67
  7. umap/locale/cs_CZ/LC_MESSAGES/django.mo +0 -0
  8. umap/locale/cs_CZ/LC_MESSAGES/django.po +110 -66
  9. umap/locale/el/LC_MESSAGES/django.mo +0 -0
  10. umap/locale/el/LC_MESSAGES/django.po +129 -85
  11. umap/locale/en/LC_MESSAGES/django.po +103 -60
  12. umap/locale/es/LC_MESSAGES/django.mo +0 -0
  13. umap/locale/es/LC_MESSAGES/django.po +114 -69
  14. umap/locale/fr/LC_MESSAGES/django.mo +0 -0
  15. umap/locale/fr/LC_MESSAGES/django.po +105 -61
  16. umap/locale/gl/LC_MESSAGES/django.mo +0 -0
  17. umap/locale/gl/LC_MESSAGES/django.po +216 -171
  18. umap/locale/hu/LC_MESSAGES/django.mo +0 -0
  19. umap/locale/hu/LC_MESSAGES/django.po +10 -10
  20. umap/locale/it/LC_MESSAGES/django.mo +0 -0
  21. umap/locale/it/LC_MESSAGES/django.po +142 -98
  22. umap/locale/nl/LC_MESSAGES/django.mo +0 -0
  23. umap/locale/nl/LC_MESSAGES/django.po +196 -151
  24. umap/locale/pt/LC_MESSAGES/django.mo +0 -0
  25. umap/locale/pt/LC_MESSAGES/django.po +115 -71
  26. umap/locale/zh_TW/LC_MESSAGES/django.mo +0 -0
  27. umap/locale/zh_TW/LC_MESSAGES/django.po +109 -65
  28. umap/management/commands/empty_trash.py +12 -1
  29. umap/migrations/0026_datalayer_modified_at_datalayer_share_status.py +26 -0
  30. umap/models.py +43 -13
  31. umap/settings/base.py +5 -2
  32. umap/static/umap/base.css +5 -2
  33. umap/static/umap/content.css +2 -22
  34. umap/static/umap/css/bar.css +39 -10
  35. umap/static/umap/css/contextmenu.css +14 -2
  36. umap/static/umap/css/form.css +33 -39
  37. umap/static/umap/css/icon.css +47 -5
  38. umap/static/umap/css/panel.css +20 -2
  39. umap/static/umap/css/popup.css +0 -1
  40. umap/static/umap/css/tooltip.css +33 -31
  41. umap/static/umap/img/16-white.svg +5 -3
  42. umap/static/umap/img/16.svg +1 -1
  43. umap/static/umap/img/24-white.svg +17 -16
  44. umap/static/umap/img/24.svg +29 -18
  45. umap/static/umap/img/providers/bitbucket.png +0 -0
  46. umap/static/umap/img/providers/github.png +0 -0
  47. umap/static/umap/img/providers/keycloak.png +0 -0
  48. umap/static/umap/img/providers/openstreetmap-oauth2.png +0 -0
  49. umap/static/umap/img/providers/twitter-oauth2.png +0 -0
  50. umap/static/umap/img/source/16-white.svg +6 -4
  51. umap/static/umap/img/source/16.svg +1 -1
  52. umap/static/umap/img/source/24-white.svg +20 -18
  53. umap/static/umap/img/source/24.svg +30 -19
  54. umap/static/umap/js/components/alerts/alert.js +4 -1
  55. umap/static/umap/js/modules/browser.js +8 -8
  56. umap/static/umap/js/modules/caption.js +30 -7
  57. umap/static/umap/js/modules/data/features.js +101 -56
  58. umap/static/umap/js/modules/data/layer.js +108 -83
  59. umap/static/umap/js/modules/form/builder.js +242 -0
  60. umap/static/umap/js/modules/form/fields.js +1346 -0
  61. umap/static/umap/js/modules/formatter.js +9 -8
  62. umap/static/umap/js/modules/help.js +20 -24
  63. umap/static/umap/js/modules/importer.js +6 -3
  64. umap/static/umap/js/modules/permissions.js +11 -6
  65. umap/static/umap/js/modules/rendering/icon.js +5 -1
  66. umap/static/umap/js/modules/rendering/layers/classified.js +12 -8
  67. umap/static/umap/js/modules/rendering/layers/cluster.js +11 -1
  68. umap/static/umap/js/modules/rendering/map.js +1 -23
  69. umap/static/umap/js/modules/rendering/ui.js +20 -38
  70. umap/static/umap/js/modules/rules.js +3 -2
  71. umap/static/umap/js/modules/saving.js +5 -0
  72. umap/static/umap/js/modules/schema.js +8 -6
  73. umap/static/umap/js/modules/share.js +3 -3
  74. umap/static/umap/js/modules/sync/engine.js +56 -26
  75. umap/static/umap/js/modules/sync/updaters.js +15 -6
  76. umap/static/umap/js/modules/sync/websocket.js +50 -37
  77. umap/static/umap/js/modules/tableeditor.js +3 -2
  78. umap/static/umap/js/modules/ui/bar.js +101 -9
  79. umap/static/umap/js/modules/ui/base.js +7 -24
  80. umap/static/umap/js/modules/ui/contextmenu.js +9 -2
  81. umap/static/umap/js/modules/ui/panel.js +5 -1
  82. umap/static/umap/js/modules/ui/tooltip.js +19 -11
  83. umap/static/umap/js/modules/umap.js +124 -71
  84. umap/static/umap/js/modules/utils.js +196 -12
  85. umap/static/umap/js/umap.controls.js +12 -354
  86. umap/static/umap/locale/am_ET.js +17 -5
  87. umap/static/umap/locale/am_ET.json +17 -5
  88. umap/static/umap/locale/ar.js +17 -5
  89. umap/static/umap/locale/ar.json +17 -5
  90. umap/static/umap/locale/ast.js +17 -5
  91. umap/static/umap/locale/ast.json +17 -5
  92. umap/static/umap/locale/bg.js +17 -5
  93. umap/static/umap/locale/bg.json +17 -5
  94. umap/static/umap/locale/br.js +33 -20
  95. umap/static/umap/locale/br.json +33 -20
  96. umap/static/umap/locale/ca.js +17 -5
  97. umap/static/umap/locale/ca.json +17 -5
  98. umap/static/umap/locale/cs_CZ.js +15 -5
  99. umap/static/umap/locale/cs_CZ.json +15 -5
  100. umap/static/umap/locale/da.js +17 -5
  101. umap/static/umap/locale/da.json +17 -5
  102. umap/static/umap/locale/de.js +17 -5
  103. umap/static/umap/locale/de.json +17 -5
  104. umap/static/umap/locale/el.js +63 -51
  105. umap/static/umap/locale/el.json +63 -51
  106. umap/static/umap/locale/en.js +15 -5
  107. umap/static/umap/locale/en.json +15 -5
  108. umap/static/umap/locale/en_US.json +17 -5
  109. umap/static/umap/locale/es.js +25 -13
  110. umap/static/umap/locale/es.json +25 -13
  111. umap/static/umap/locale/et.js +17 -5
  112. umap/static/umap/locale/et.json +17 -5
  113. umap/static/umap/locale/eu.js +17 -5
  114. umap/static/umap/locale/eu.json +17 -5
  115. umap/static/umap/locale/fa_IR.js +17 -5
  116. umap/static/umap/locale/fa_IR.json +17 -5
  117. umap/static/umap/locale/fi.js +17 -5
  118. umap/static/umap/locale/fi.json +17 -5
  119. umap/static/umap/locale/fr.js +16 -6
  120. umap/static/umap/locale/fr.json +16 -6
  121. umap/static/umap/locale/gl.js +357 -345
  122. umap/static/umap/locale/gl.json +357 -345
  123. umap/static/umap/locale/he.js +17 -5
  124. umap/static/umap/locale/he.json +17 -5
  125. umap/static/umap/locale/hr.js +17 -5
  126. umap/static/umap/locale/hr.json +17 -5
  127. umap/static/umap/locale/hu.js +39 -27
  128. umap/static/umap/locale/hu.json +39 -27
  129. umap/static/umap/locale/id.js +17 -5
  130. umap/static/umap/locale/id.json +17 -5
  131. umap/static/umap/locale/is.js +17 -5
  132. umap/static/umap/locale/is.json +17 -5
  133. umap/static/umap/locale/it.js +125 -113
  134. umap/static/umap/locale/it.json +125 -113
  135. umap/static/umap/locale/ja.js +17 -5
  136. umap/static/umap/locale/ja.json +17 -5
  137. umap/static/umap/locale/ko.js +17 -5
  138. umap/static/umap/locale/ko.json +17 -5
  139. umap/static/umap/locale/lt.js +17 -5
  140. umap/static/umap/locale/lt.json +17 -5
  141. umap/static/umap/locale/ms.js +17 -5
  142. umap/static/umap/locale/ms.json +17 -5
  143. umap/static/umap/locale/nl.js +132 -119
  144. umap/static/umap/locale/nl.json +132 -119
  145. umap/static/umap/locale/no.js +17 -5
  146. umap/static/umap/locale/no.json +17 -5
  147. umap/static/umap/locale/pl.js +17 -5
  148. umap/static/umap/locale/pl.json +17 -5
  149. umap/static/umap/locale/pl_PL.json +17 -5
  150. umap/static/umap/locale/pt.js +38 -25
  151. umap/static/umap/locale/pt.json +38 -25
  152. umap/static/umap/locale/pt_BR.js +17 -5
  153. umap/static/umap/locale/pt_BR.json +17 -5
  154. umap/static/umap/locale/pt_PT.js +17 -5
  155. umap/static/umap/locale/pt_PT.json +17 -5
  156. umap/static/umap/locale/ro.js +17 -5
  157. umap/static/umap/locale/ro.json +17 -5
  158. umap/static/umap/locale/ru.js +17 -5
  159. umap/static/umap/locale/ru.json +17 -5
  160. umap/static/umap/locale/sk_SK.js +17 -5
  161. umap/static/umap/locale/sk_SK.json +17 -5
  162. umap/static/umap/locale/sl.js +17 -5
  163. umap/static/umap/locale/sl.json +17 -5
  164. umap/static/umap/locale/sr.js +17 -5
  165. umap/static/umap/locale/sr.json +17 -5
  166. umap/static/umap/locale/sv.js +17 -5
  167. umap/static/umap/locale/sv.json +17 -5
  168. umap/static/umap/locale/th_TH.js +17 -5
  169. umap/static/umap/locale/th_TH.json +17 -5
  170. umap/static/umap/locale/tr.js +17 -5
  171. umap/static/umap/locale/tr.json +17 -5
  172. umap/static/umap/locale/uk_UA.js +17 -5
  173. umap/static/umap/locale/uk_UA.json +17 -5
  174. umap/static/umap/locale/vi.js +17 -5
  175. umap/static/umap/locale/vi.json +17 -5
  176. umap/static/umap/locale/vi_VN.json +17 -5
  177. umap/static/umap/locale/zh.js +17 -5
  178. umap/static/umap/locale/zh.json +17 -5
  179. umap/static/umap/locale/zh_CN.json +17 -5
  180. umap/static/umap/locale/zh_TW.Big5.json +17 -5
  181. umap/static/umap/locale/zh_TW.js +15 -5
  182. umap/static/umap/locale/zh_TW.json +15 -5
  183. umap/static/umap/map.css +29 -76
  184. umap/static/umap/nav.css +6 -3
  185. umap/static/umap/unittests/utils.js +14 -0
  186. umap/static/umap/vars.css +3 -0
  187. umap/static/umap/vendors/dompurify/purify.es.js +138 -354
  188. umap/static/umap/vendors/dompurify/purify.es.mjs.map +1 -1
  189. umap/static/umap/vendors/editable/Leaflet.Editable.js +1 -0
  190. umap/sync/__init__.py +0 -0
  191. umap/sync/app.py +187 -0
  192. umap/sync/payloads.py +56 -0
  193. umap/templates/auth/user_detail.html +4 -0
  194. umap/templates/auth/user_form.html +9 -6
  195. umap/templates/auth/user_stars.html +4 -0
  196. umap/templates/base.html +1 -1
  197. umap/templates/registration/login.html +2 -5
  198. umap/templates/umap/about.html +5 -0
  199. umap/templates/umap/about_summary.html +2 -2
  200. umap/templates/umap/components/provider.html +8 -0
  201. umap/templates/umap/content_footer.html +1 -1
  202. umap/templates/umap/css.html +0 -2
  203. umap/templates/umap/js.html +0 -4
  204. umap/templates/umap/map_detail.html +1 -1
  205. umap/templates/umap/password_change.html +4 -0
  206. umap/templates/umap/password_change_done.html +4 -0
  207. umap/templates/umap/search.html +4 -0
  208. umap/templates/umap/search_bar.html +1 -0
  209. umap/templates/umap/team_confirm_delete.html +4 -0
  210. umap/templates/umap/team_detail.html +4 -0
  211. umap/templates/umap/team_form.html +4 -0
  212. umap/templates/umap/user_dashboard.html +1 -1
  213. umap/templates/umap/user_teams.html +4 -0
  214. umap/tests/base.py +3 -1
  215. umap/tests/integration/conftest.py +16 -23
  216. umap/tests/integration/test_anonymous_owned_map.py +2 -2
  217. umap/tests/integration/test_basics.py +4 -7
  218. umap/tests/integration/test_caption.py +1 -0
  219. umap/tests/integration/test_categorized_layer.py +4 -8
  220. umap/tests/integration/test_choropleth.py +1 -1
  221. umap/tests/integration/test_conditional_rules.py +3 -3
  222. umap/tests/integration/test_draw_polygon.py +14 -22
  223. umap/tests/integration/test_draw_polyline.py +6 -14
  224. umap/tests/integration/test_edit_datalayer.py +11 -11
  225. umap/tests/integration/test_edit_map.py +30 -4
  226. umap/tests/integration/test_edit_marker.py +5 -5
  227. umap/tests/integration/test_edit_polygon.py +6 -6
  228. umap/tests/integration/test_features_id_generation.py +2 -6
  229. umap/tests/integration/test_import.py +115 -29
  230. umap/tests/integration/test_optimistic_merge.py +1 -0
  231. umap/tests/integration/test_owned_map.py +1 -1
  232. umap/tests/integration/test_picto.py +8 -8
  233. umap/tests/integration/test_save.py +3 -2
  234. umap/tests/integration/test_star.py +13 -9
  235. umap/tests/integration/test_tableeditor.py +8 -7
  236. umap/tests/integration/test_view_marker.py +10 -0
  237. umap/tests/integration/test_websocket_sync.py +239 -64
  238. umap/tests/settings.py +2 -0
  239. umap/tests/test_datalayer.py +2 -3
  240. umap/tests/test_datalayer_views.py +20 -1
  241. umap/tests/test_empty_trash.py +10 -3
  242. umap/tests/test_map_views.py +11 -0
  243. umap/utils.py +27 -11
  244. umap/views.py +37 -6
  245. {umap_project-2.8.1.dist-info → umap_project-2.9.0.dist-info}/METADATA +22 -22
  246. {umap_project-2.8.1.dist-info → umap_project-2.9.0.dist-info}/RECORD +249 -250
  247. {umap_project-2.8.1.dist-info → umap_project-2.9.0.dist-info}/WHEEL +1 -1
  248. umap/management/commands/run_websocket_server.py +0 -23
  249. umap/settings/local_s3.py +0 -45
  250. umap/static/umap/bitbucket.png +0 -0
  251. umap/static/umap/github.png +0 -0
  252. umap/static/umap/js/umap.forms.js +0 -1242
  253. umap/static/umap/keycloak.png +0 -0
  254. umap/static/umap/openstreetmap.png +0 -0
  255. umap/static/umap/twitter.png +0 -0
  256. umap/static/umap/vendors/formbuilder/Leaflet.FormBuilder.js +0 -468
  257. umap/static/umap/vendors/toolbar/leaflet.toolbar.css +0 -1
  258. umap/static/umap/vendors/toolbar/leaflet.toolbar.js +0 -1
  259. umap/tests/test_websocket_server.py +0 -22
  260. umap/websocket_server.py +0 -202
  261. {umap_project-2.8.1.dist-info → umap_project-2.9.0.dist-info}/entry_points.txt +0 -0
  262. {umap_project-2.8.1.dist-info → umap_project-2.9.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,8 +1,8 @@
1
1
  <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
2
  <!-- Created with Inkscape (http://www.inkscape.org/) -->
3
3
 
4
- <svg width="252" height="252" viewBox="0 0 66.674999 66.674999" version="1.1" id="svg6237" inkscape:version="1.4 (e7c3feb100, 2024-10-09)" sodipodi:docname="24.svg" inkscape:export-filename="../24.svg" inkscape:export-xdpi="7.52" inkscape:export-ydpi="7.52" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
5
- <sodipodi:namedview id="namedview6239" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1" inkscape:document-units="px" showgrid="true" showguides="true" inkscape:zoom="3.1596124" inkscape:cx="118.68544" inkscape:cy="166.47612" inkscape:window-width="1920" inkscape:window-height="1011" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" inkscape:current-layer="layer1">
4
+ <svg width="288" height="288" viewBox="0 0 76.199999 76.199999" version="1.1" id="svg6237" inkscape:version="1.4 (e7c3feb100, 2024-10-09)" sodipodi:docname="24.svg" inkscape:export-filename="../24.svg" inkscape:export-xdpi="7.52" inkscape:export-ydpi="7.52" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
5
+ <sodipodi:namedview id="namedview6239" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1" inkscape:document-units="px" showgrid="true" showguides="true" inkscape:zoom="22.223397" inkscape:cx="25.378659" inkscape:cy="18.269034" inkscape:window-width="1920" inkscape:window-height="1011" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" inkscape:current-layer="layer1">
6
6
  <inkscape:grid type="xygrid" id="grid6358" empspacing="6" originx="0" originy="0" spacingy="0.26458333" spacingx="0.26458333" units="px" visible="true" />
7
7
  <inkscape:grid id="grid1" units="px" originx="0" originy="0" spacingx="9.5249999" spacingy="9.5249999" empcolor="#3f3fff" empopacity="0.25098039" color="#ff0000" opacity="0.83529412" empspacing="0" dotted="false" gridanglex="30" gridanglez="30" visible="true" />
8
8
  </sodipodi:namedview>
@@ -18,31 +18,31 @@
18
18
  </mask>
19
19
  </defs>
20
20
  <g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1">
21
- <path style="fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.264583" d="m 6.6145836,2.1166666 -0.529167,0.529167 1.058333,1.058333 0.529167,-0.529167 z m -0.79375,0.79375 -2.910417,2.910417 1.058333,1.058333 2.910417,-2.910417 z m -2.910417,2.910417 -0.79375,1.852083 1.852083,-0.79375 z" id="edit" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccccccccc" class="sprite" />
21
+ <path style="fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.264583" d="m 25.532291,20.902083 -0.529167,0.529167 1.058333,1.058333 0.529167,-0.529167 z m -0.79375,0.79375 -2.910417,2.910417 1.058333,1.058333 2.910417,-2.910417 z m -2.910417,2.910417 -0.79375,1.852083 1.852083,-0.79375 z" id="edit" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccccccccc" class="sprite" />
22
22
  <path style="fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.264583" d="m 51.858331,21.16666 v 0.529167 c -0.529167,0 -1.058333,0 -1.322917,0.529166 v 0.264584 h 3.704167 v -0.264584 c -0.264583,-0.529166 -0.79375,-0.529166 -1.322917,-0.529166 v -0.529167 z m -1.322917,1.5875 0.79375,3.704172 h 2.116667 l 0.79375,-3.704172 z" id="delete" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccccccccc" inkscape:label="delete-30" class="sprite" />
23
23
  <g id="measure" transform="matrix(0.26458333,0,0,0.26458333,-11.112499,-232.45291)" class="sprite">
24
24
  <path sodipodi:nodetypes="ccccccccccccccccccccccccccccc" inkscape:connector-curvature="0" id="rect4452" d="m 47.999998,965.36218 h 3.000002 v 8 h 2 v -8 h 2 v 5 h 1 v -5 h 2 v 5 h 1 v -5 h 2 v 5 h 1 v -5 h 2 v 5 h 1 v -5 h 2 v 8 h 2 v -8 h 3 v 11 h -24 z" style="fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:none" />
25
25
  <text id="text4455" y="964.36218" x="49.170559" style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#4d4d4d;fill-opacity:1;stroke:none" xml:space="preserve"><tspan style="font-weight:bold;font-size:8px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'Sans Bold';fill:#4d4d4d;fill-opacity:1" y="964.36218" x="49.170559" id="tspan4457" sodipodi:role="line">0</tspan></text>
26
26
  <text xml:space="preserve" style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#4d4d4d;fill-opacity:1;stroke:none" x="65.048965" y="964.36218" id="text4459"><tspan sodipodi:role="line" id="tspan4461" x="65.048965" y="964.36218" style="font-weight:bold;font-size:8px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'Sans Bold';fill:#4d4d4d;fill-opacity:1">1</tspan></text>
27
27
  </g>
28
- <g id="markers" transform="matrix(0.26458333,0,0,0.26458333,14.287499,-226.04994)" class="sprite">
28
+ <g id="markers" transform="matrix(0.26458333,0,0,0.26458333,42.862499,-225.92402)" class="sprite">
29
29
  <path sodipodi:nodetypes="sccccsssccs" inkscape:connector-curvature="0" id="rect2985" d="m 105.25387,934.36268 c -3.17753,0 -6.346004,2.1278 -7.25387,6.3794 0,2.551 1.806672,7.6679 7.25387,13.6201 1.46368,-1.5994 2.66945,-3.1177 3.64397,-4.5613 -1.4505,-2.1639 -2.41497,-4.0873 -2.96285,-5.7095 -0.22599,0.041 -0.44225,0.063 -0.68112,0.063 -2.0056,0 -3.64396,-1.5346 -3.64396,-3.413 0,-1.8785 1.63836,-3.3811 3.64396,-3.3811 0.51205,0 0.98854,0.076 1.43034,0.2552 0.64347,-0.9222 1.4345,-1.6571 2.31579,-2.169 -1.14444,-0.7114 -2.44633,-1.0845 -3.74613,-1.0845 z" style="fill:#4d4d4d;fill-opacity:1;stroke:none" />
30
30
  <path id="path3378" d="m 111,934.36218 c -3.0625,0 -6.125,2.1277 -7,6.383 0,2.5532 1.75,7.6596 7,13.617 5.25,-5.9574 7,-11.0638 7,-13.617 -0.875,-4.2553 -3.9375,-6.383 -7,-6.383 z m 0,2.9788 c 1.933,0 3.5,1.5241 3.5,3.4042 0,1.8801 -1.567,3.4043 -3.5,3.4043 -1.93299,0 -3.5,-1.5242 -3.5,-3.4043 0,-1.8801 1.56701,-3.4042 3.5,-3.4042 z" style="fill:#4d4d4d;fill-opacity:1;stroke:none" inkscape:connector-curvature="0" />
31
31
  </g>
32
- <path inkscape:connector-curvature="0" style="fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.264583" d="m 42.862498,11.1125 c -0.926041,0 -1.852083,0.661458 -2.116666,1.984375 0,0.793749 0.529166,2.381249 2.116666,4.233333 1.5875,-1.852084 2.116667,-3.439584 2.116667,-4.233333 -0.264583,-1.322917 -1.190625,-1.984375 -2.116667,-1.984375 z m 0,0.926041 c 0.584502,0 1.058334,0.473832 1.058334,1.058334 0,0.584501 -0.473832,1.058333 -1.058334,1.058333 -0.584501,0 -1.058333,-0.473832 -1.058333,-1.058333 0,-0.584502 0.473832,-1.058334 1.058333,-1.058334 z" id="marker" class="sprite" />
33
- <path inkscape:connector-curvature="0" d="m 30.956249,11.112501 v 0.132291 0.79375 0.132292 h 0.132292 0.79375 0.132292 v -0.132292 -0.09095 l 2.645833,1.058334 v 0.355533 0.115756 l -1.876888,2.926953 h -0.636654 -0.132291 v 0.132291 0.79375 0.132292 h 0.132291 0.79375 0.132292 v -0.132292 -0.79375 -0.09922 l 1.876888,-2.943489 h 0.636654 0.132291 v -0.132292 -0.79375 -0.132291 h -0.132291 -0.79375 -0.132292 v 0.132291 0.148828 l -2.645833,-1.058333 v -0.413411 -0.132292 h -0.132292 -0.79375 z m 0.264584,0.264583 h 0.529166 v 0.529167 h -0.529166 z m 3.704166,1.322917 h 0.529167 v 0.529166 h -0.529167 z m -2.645833,3.96875 h 0.529167 v 0.529166 h -0.529167 z" id="polyline" class="sprite" style="fill:#4d4d4d;fill-opacity:1;stroke-width:0.264583" />
34
- <path d="m 21.695833,11.90625 v 0.132292 0.79375 0.132291 h 0.132292 0.347265 l -0.421679,3.704167 h -0.454753 -0.132292 v 0.132292 0.79375 0.132291 h 0.132292 0.79375 0.132292 v -0.132291 -0.421667 l 2.645833,-0.181901 v 0.338984 0.132292 h 0.132292 0.79375 0.132291 v -0.132292 -0.79375 -0.132291 h -0.132291 -0.305925 l 0.363802,-2.116667 h 0.471289 0.132292 v -0.132292 -0.79375 -0.132291 h -0.132292 -0.79375 -0.132291 v 0.132291 0.214974 l -2.645834,-0.950833 v -0.587057 -0.132292 h -0.132291 -0.79375 z m 0.264583,0.264583 h 0.529167 v 0.529167 h -0.529167 z m 3.704167,1.322917 h 0.529167 v 0.529167 h -0.529167 z m -0.529167,3.175 h 0.529167 v 0.529167 h -0.529167 z m -3.704166,0.264583 c 0.529166,0 0,0 0.529166,0 v 0.529167 h -0.529166 z" id="polygon" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" class="sprite" style="fill:#4d4d4d;fill-opacity:1;stroke-width:0.264583" />
35
- <g transform="matrix(0.06466922,0,0,0.06466922,30.097119,1.5355706)" id="settings" style="fill:#4d4d4d;fill-opacity:1;stroke:none" class="sprite">
32
+ <path inkscape:connector-curvature="0" style="fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.264583" d="m 71.437498,11.178646 c -0.926041,0 -1.852083,0.661458 -2.116666,1.984375 0,0.793749 0.529166,2.381249 2.116666,4.233333 1.5875,-1.852084 2.116667,-3.439584 2.116667,-4.233333 -0.264583,-1.322917 -1.190625,-1.984375 -2.116667,-1.984375 z m 0,0.926041 c 0.584502,0 1.058334,0.473832 1.058334,1.058334 0,0.584501 -0.473832,1.058333 -1.058334,1.058333 -0.584501,0 -1.058333,-0.473832 -1.058333,-1.058333 0,-0.584502 0.473832,-1.058334 1.058333,-1.058334 z" id="marker" class="sprite" />
33
+ <path inkscape:connector-curvature="0" d="m 69.056248,58.737493 v 0.132291 0.79375 0.132292 h 0.132293 0.79375 0.132292 v -0.132292 -0.09095 l 2.645833,1.058334 v 0.355533 0.115756 l -1.876888,2.926953 h -0.636654 -0.132291 v 0.132291 0.79375 0.132292 h 0.132291 0.79375 0.132292 v -0.132292 -0.79375 -0.09922 l 1.876888,-2.943489 h 0.636654 0.132291 v -0.132292 -0.79375 -0.132291 h -0.132291 -0.79375 -0.132292 v 0.132291 0.148828 l -2.645833,-1.058333 v -0.413411 -0.132292 h -0.132292 -0.79375 z m 0.264584,0.264583 h 0.529166 v 0.529167 h -0.529166 z m 3.704166,1.322917 h 0.529167 v 0.529166 h -0.529167 z m -2.645833,3.96875 h 0.529167 v 0.529166 h -0.529167 z" id="polyline" class="sprite" style="fill:#4d4d4d;fill-opacity:1;stroke-width:0.264583" />
34
+ <path d="m 69.320832,39.952089 v 0.132292 0.793751 0.132291 h 0.132292 0.347265 l -0.421679,3.704167 h -0.454753 -0.132292 v 0.132292 0.79375 0.132291 h 0.132292 0.79375 0.132292 v -0.132291 -0.421667 l 2.645833,-0.181901 v 0.338984 0.132292 h 0.132292 0.79375 0.132291 v -0.132292 -0.79375 -0.132292 h -0.132291 -0.305925 l 0.363802,-2.116667 h 0.471289 0.132292 v -0.132291 -0.793751 -0.132291 h -0.132292 -0.79375 -0.132291 v 0.132291 0.214974 l -2.645834,-0.950833 v -0.587057 -0.132292 h -0.132291 -0.79375 z m 0.264583,0.264584 h 0.529167 v 0.529167 h -0.529167 z m 3.704167,1.322916 h 0.529167 v 0.529167 h -0.529167 z m -0.529167,3.175 h 0.529167 v 0.529167 h -0.529167 z m -3.704166,0.264583 c 0.529166,0 0,0 0.529166,0 v 0.529167 h -0.529166 z" id="polygon" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" class="sprite" style="fill:#4d4d4d;fill-opacity:1;stroke-width:0.264583" />
35
+ <g transform="matrix(0.06466922,0,0,0.06466922,11.047119,39.63557)" id="settings" style="fill:#4d4d4d;fill-opacity:1;stroke:none" class="sprite">
36
36
  <path inkscape:connector-curvature="0" d="m 98.762,43.652 c -0.186,-1.386 -1.481,-2.582 -2.876,-2.659 l -6.172,-0.337 c -1.395,-0.076 -2.899,-1.224 -3.341,-2.55 l -2.28,-5.518 c -0.629,-1.249 -0.379,-3.121 0.553,-4.161 l 4.122,-4.6 c 0.933,-1.042 0.962,-2.77 0.066,-3.842 l -8.813,-8.813 c -1.073,-0.897 -2.803,-0.867 -3.845,0.065 l -4.598,4.122 c -1.039,0.934 -2.915,1.182 -4.161,0.551 l -5.521,-2.279 c -1.324,-0.442 -2.472,-1.945 -2.549,-3.34 l -0.337,-6.17 c -0.077,-1.396 -1.272,-2.691 -2.659,-2.878 0,0 -3.252,-0.44 -6.248,-0.44 -2.991,0 -6.243,0.44 -6.243,0.44 -1.386,0.188 -2.582,1.483 -2.658,2.878 l -0.338,6.17 c -0.076,1.396 -1.224,2.898 -2.551,3.34 l -5.517,2.279 c -1.249,0.631 -3.122,0.382 -4.161,-0.551 l -4.601,-4.122 c -1.042,-0.932 -2.769,-0.962 -3.842,-0.065 l -8.813,8.813 c -0.897,1.073 -0.867,2.801 0.066,3.842 l 4.122,4.6 c 0.933,1.041 1.182,2.913 0.551,4.161 l -2.279,5.518 c -0.442,1.326 -1.946,2.474 -3.34,2.55 l -6.17,0.337 c -1.396,0.077 -2.691,1.272 -2.879,2.659 0,0 -0.439,3.253 -0.439,6.243 0,2.99 0.44,6.24 0.44,6.24 0.188,1.389 1.483,2.582 2.879,2.659 l 6.169,0.339 c 1.396,0.075 2.898,1.225 3.341,2.549 l 2.278,5.517 c 0.631,1.248 0.381,3.122 -0.551,4.163 l -4.122,4.598 c -0.933,1.042 -0.963,2.771 -0.066,3.845 l 8.814,8.813 c 1.073,0.896 2.801,0.866 3.842,-0.066 l 4.6,-4.122 c 1.041,-0.932 2.913,-1.182 4.161,-0.553 l 5.517,2.28 c 1.327,0.441 2.475,1.946 2.55,3.343 l 0.338,6.168 c 0.076,1.395 1.272,2.692 2.658,2.88 0,0 3.252,0.439 6.244,0.439 2.996,0 6.25,-0.439 6.25,-0.439 1.385,-0.188 2.58,-1.485 2.657,-2.88 l 0.337,-6.168 c 0.077,-1.396 1.225,-2.901 2.551,-3.343 l 5.517,-2.28 c 1.248,-0.629 3.122,-0.379 4.163,0.553 l 4.598,4.122 c 1.042,0.933 2.771,0.964 3.843,0.067 l 8.815,-8.814 c 0.896,-1.073 0.866,-2.803 -0.066,-3.845 l -4.122,-4.598 c -0.932,-1.041 -1.182,-2.915 -0.553,-4.163 l 2.28,-5.517 c 0.441,-1.324 1.946,-2.474 3.341,-2.549 l 6.172,-0.339 c 1.395,-0.077 2.692,-1.271 2.876,-2.659 0,0 0.441,-3.25 0.441,-6.24 0,-2.99 -0.441,-6.243 -0.441,-6.243 z m -48.658,18.709 c -6.886,0 -12.468,-5.585 -12.468,-12.467 0,-6.885 5.582,-12.467 12.468,-12.467 6.89,0 12.475,5.582 12.475,12.467 -10e-4,6.882 -5.586,12.467 -12.475,12.467 z" id="path27812" style="fill:#4d4d4d;fill-opacity:1;stroke:none" />
37
37
  </g>
38
- <path style="fill:#464646;fill-opacity:1;stroke:none;stroke-width:0.264583" d="m 42.862499,1.5875 c -1.753504,0 -3.175,1.421495 -3.175,3.175 0,1.753504 1.421496,3.175 3.175,3.175 1.753505,0 3.175,-1.421496 3.175,-3.175 0,-1.753505 -1.421495,-3.175 -3.175,-3.175 z m 0,1.322916 1.852084,1.852084 h -1.322917 v 1.5875 h -1.058333 v -1.5875 h -1.322917 z" id="import" inkscape:connector-curvature="0" sodipodi:nodetypes="ssssscccccccc" class="sprite" />
38
+ <path style="fill:#464646;fill-opacity:1;stroke:none;stroke-width:0.264583" d="m 61.912499,39.687506 c -1.753504,0 -3.175,1.421495 -3.175,3.175 0,1.753504 1.421496,3.175 3.175,3.175 1.753505,0 3.175,-1.421496 3.175,-3.175 0,-1.753505 -1.421495,-3.175 -3.175,-3.175 z m 0,1.322916 1.852084,1.852084 h -1.322917 v 1.5875 h -1.058333 v -1.5875 h -1.322917 z" id="import" inkscape:connector-curvature="0" sodipodi:nodetypes="ssssscccccccc" class="sprite" />
39
39
  <g id="set-zoom" class="sprite" transform="matrix(0.26458333,0,0,0.26458333,-0.52916667,-227.10832)">
40
- <polygon points="0,88.737 17.702,71.042 9.297,62.644 37.37,62.644 37.37,90.703 28.965,82.305 11.27,100 " id="polygon3044" transform="matrix(0.24,0,0,0.24,8,900.36218)" style="fill:#4d4d4d;fill-opacity:1" />
41
- <polygon points="82.298,28.958 100,11.263 88.743,0 71.042,17.708 62.644,9.31 62.644,37.357 90.71,37.37 " id="polygon3048" transform="matrix(0.24,0,0,0.24,8,900.36218)" style="fill:#4d4d4d;fill-opacity:1" />
40
+ <polygon points="9.297,62.644 37.37,62.644 37.37,90.703 28.965,82.305 11.27,100 0,88.737 17.702,71.042 " id="polygon3044" transform="matrix(0.24,0,0,0.24,8,900.36218)" style="fill:#4d4d4d;fill-opacity:1" />
41
+ <polygon points="88.743,0 71.042,17.708 62.644,9.31 62.644,37.357 90.71,37.37 82.298,28.958 100,11.263 " id="polygon3048" transform="matrix(0.24,0,0,0.24,8,900.36218)" style="fill:#4d4d4d;fill-opacity:1" />
42
42
  <path inkscape:connector-curvature="0" d="m 20,909.43106 c -1.618801,0 -2.93112,1.31256 -2.93112,2.93112 0,1.62192 1.31256,2.93448 2.93112,2.93448 1.6188,0 2.9328,-1.31256 2.9328,-2.93448 0,-1.6188 -1.314,-2.93112 -2.9328,-2.93112 z" id="path3052" style="fill:#4d4d4d;fill-opacity:1" />
43
43
  </g>
44
- <path d="m 12.460221,12.700004 c -0.890121,-0.0021 -1.610321,0.711677 -1.612305,1.5875 0.002,0.877761 0.722184,1.586074 1.612305,1.5875 0.593513,-8.73e-4 1.110529,-0.321123 1.389062,-0.79375 h 0.65319 l 0.520899,-0.504362 0.396875,0.380339 0.380338,-0.37207 0.388607,0.380338 0.396875,-0.380338 0.388607,0.380338 0.677994,-0.65319 c 0.09761,-0.09927 0.100016,-0.174188 0,-0.272852 l -0.553971,-0.545703 h -3.241146 c -0.277124,-0.47713 -0.799763,-0.794983 -1.39733,-0.79375 z m -0.7028,1.157552 c 0.233962,-0.0011 0.419905,0.187463 0.42168,0.42168 -0.0017,0.230958 -0.187613,0.419542 -0.42168,0.42168 -0.237929,-0.0024 -0.43214,-0.190722 -0.429948,-0.42168 -0.0022,-0.234217 0.192019,-0.422799 0.429948,-0.42168 z" id="permissions" style="fill:#4d4d4d;fill-opacity:1;stroke-width:0.264583" class="sprite" />
45
- <polygon points="43.75,87.5 43.75,62.5 56.25,62.5 56.25,87.5 87.5,87.5 87.5,50 100,50 50,0 0,50 12.5,50 12.5,87.5 " id="home" transform="matrix(0.0635,0,0,0.0635,30.162499,20.902083)" style="fill:#4d4d4d;fill-opacity:1" class="sprite" />
44
+ <path d="m 60.085221,50.800004 c -0.890121,-0.0021 -1.610321,0.711677 -1.612305,1.5875 0.002,0.877761 0.722184,1.586074 1.612305,1.5875 0.593513,-8.73e-4 1.110529,-0.321123 1.389062,-0.79375 h 0.65319 l 0.520899,-0.504362 0.396875,0.380339 0.380338,-0.37207 0.388607,0.380338 0.396875,-0.380338 0.388607,0.380338 0.677994,-0.65319 c 0.09761,-0.09927 0.100016,-0.174188 0,-0.272852 l -0.553971,-0.545703 h -3.241146 c -0.277124,-0.47713 -0.799763,-0.794983 -1.39733,-0.79375 z m -0.7028,1.157552 c 0.233962,-0.0011 0.419905,0.187463 0.42168,0.42168 -0.0017,0.230958 -0.187613,0.419542 -0.42168,0.42168 -0.237929,-0.0024 -0.43214,-0.190722 -0.429948,-0.42168 -0.0022,-0.234217 0.192019,-0.422799 0.429948,-0.42168 z" id="permissions" style="fill:#4d4d4d;fill-opacity:1;stroke-width:0.264583" class="sprite" />
45
+ <polygon points="12.5,50 12.5,87.5 43.75,87.5 43.75,62.5 56.25,62.5 56.25,87.5 87.5,87.5 87.5,50 100,50 50,0 0,50 " id="home" transform="matrix(0.0635,0,0,0.0635,30.162499,20.902083)" style="fill:#4d4d4d;fill-opacity:1" class="sprite" />
46
46
  <path inkscape:connector-curvature="0" d="m 7.937502,33.337505 c 0,-0.119238 -0.0078,-0.236713 -0.02082,-0.352777 h -0.356658 c -0.159103,-1.275998 -1.168753,-2.285648 -2.44475,-2.445102 v -0.356307 c -0.116064,-0.01304 -0.233539,-0.02082 -0.352778,-0.02082 -0.119239,0 -0.236714,0.0078 -0.352778,0.02082 v 0.356659 c -1.275997,0.159102 -2.285647,1.168752 -2.445103,2.44475 h -0.356305 c -0.01305,0.116064 -0.02081,0.233539 -0.02081,0.352777 0,0.119239 0.0078,0.236714 0.02081,0.352779 h 0.356658 c 0.159103,1.275996 1.168753,2.285659 2.44475,2.445123 v 0.356658 c 0.116064,0.0127 0.233539,0.02037 0.352778,0.02037 0.119239,0 0.236714,-0.0077 0.352778,-0.0209 v -0.356658 c 1.275644,-0.159438 2.285647,-1.168757 2.445102,-2.444753 h 0.356659 c 0.0127,-0.115712 0.02046,-0.233187 0.02046,-0.352779 z m -2.822223,2.084929 v -0.32104 c 0,-0.195085 -0.158044,-0.352777 -0.352777,-0.352777 -0.194734,0 -0.352778,0.157692 -0.352778,0.352777 v 0.32104 c -0.885472,-0.148883 -1.582914,-0.845973 -1.731786,-1.731798 l 0.320675,-2.65e-4 c 0.195086,0 0.352778,-0.158046 0.352778,-0.352779 0,-0.194733 -0.157692,-0.352777 -0.352778,-0.352777 h -0.321028 c 0.149225,-0.885473 0.846667,-1.582915 1.732139,-1.73214 v 0.32103 c 0,0.194733 0.158044,0.352777 0.352778,0.352777 0.194733,0 0.352777,-0.158044 0.352777,-0.352777 v -0.32103 c 0.885825,0.148873 1.583267,0.846315 1.732139,1.73214 h -0.321028 c -0.195086,0 -0.352777,0.158044 -0.352777,0.352777 0,0.194733 0.157691,0.352779 0.352777,0.352779 l 0.321028,2.65e-4 c -0.149225,0.885825 -0.846314,1.582915 -1.732139,1.731798 z" id="geolocation" style="fill:#4d4d4d;fill-opacity:1;stroke-width:0.264583" class="sprite" />
47
47
  <g id="share" class="sprite" transform="matrix(0.26458333,0,0,0.26458333,-2.6458336,-229.22505)">
48
48
  <circle id="path4309" style="fill:none;stroke:#464646;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" cx="100" cy="992.3623" r="11" />
@@ -59,15 +59,15 @@
59
59
  </g>
60
60
  <path inkscape:export-ydpi="28.799999" inkscape:export-xdpi="28.799999" inkscape:export-filename="/home/ybon/Work/osmtouch64.png" d="m 36.286947,38.82145 c -0.457367,0.452579 -0.512559,0.504833 -0.938758,0.934524 l 1.311056,-0.309645 c 0.03951,-0.177773 0.08574,-0.397942 0.09827,-0.449622 -0.206968,-0.007 -0.324977,-0.0729 -0.470564,-0.175257 z m 1.416518,-0.515743 c -0.04859,0.578556 -0.300471,0.62169 -0.777745,0.697632 -0.034,0.152288 -0.05699,0.258181 -0.0969,0.437787 l 1.223994,0.303984 c 0.164208,-0.701576 0.296132,-1.269942 0.293248,-1.273096 -0.0043,-0.0046 -0.327631,-0.08748 -0.642597,-0.166307 z m -0.587772,-0.141586 c -0.0016,0.0027 -0.06999,0.304712 -0.158099,0.698899 0.559065,-0.08996 0.575972,-0.270987 0.592873,-0.594974 -0.229404,-0.05691 -0.432289,-0.106081 -0.434774,-0.103925 z m -0.164475,-0.0092 c -0.135978,0.01159 -0.204073,0.02561 -0.353171,0.06753 0.04792,0.09125 0.07023,0.278832 -0.200036,0.497924 0.141563,0.08791 0.265261,0.122014 0.390009,0.137353 0.114356,-0.532403 0.172961,-0.615354 0.163198,-0.702835 z m -2.677486,-0.0065 -0.237148,0.943143 0.805796,-0.798942 c -0.18084,-0.04602 -0.34599,-0.08797 -0.568648,-0.144201 z m 5.612522,-0.03249 c -0.750179,0.194829 -1.362065,0.355852 -1.364242,0.358548 -0.0019,0.0027 -0.137285,0.574647 -0.303451,1.280914 l 1.337469,-0.33256 z m -2.182789,-0.197471 v 0.211759 c 0.276503,0.0699 0.560065,0.139645 0.618371,0.140292 0,0 -0.03096,-0.126516 -0.06757,-0.283199 -7.93e-4,0 -0.0016,0 -0.0026,0 -0.238721,0.0062 -0.321882,-0.0081 -0.548246,-0.06885 z m -0.679572,-0.315683 -0.0026,0.0027 0.09817,0.38583 c 0.02307,-0.0027 0.214998,0.04675 0.430948,0.10131 2.4e-5,-0.0864 1.64e-4,-0.157114 0.0013,-0.219523 -0.185131,-0.06365 -0.363024,-0.153906 -0.527846,-0.270232 z m -2.866186,-0.12471 0.131326,0.50016 c 0,0 0.363977,0.08961 0.697421,0.171483 l 0.03825,-0.03769 c -0.494559,-0.17868 -0.501422,-0.552676 -0.866997,-0.633955 z m 5.579372,-0.111716 c -0.494358,0.418395 -0.758865,0.525016 -1.314519,0.614464 0.03396,0.138971 0.06369,0.258155 0.07268,0.285814 0.0076,0.02345 0.467328,-0.08354 1.388467,-0.320887 z m -3.207882,-0.254623 c -0.06109,-0.08511 -0.11524,-0.173667 -0.161925,-0.265029 -0.359863,0.0798 -0.952985,0.222488 -0.97027,0.237747 -0.0073,0.0065 0.04546,0.244648 0.118573,0.540437 0.178835,-0.168006 0.384271,-0.137731 0.520491,-0.04456 m 0.507283,0.496144 c 0.125,-0.04259 0.297064,-0.07581 0.406593,-0.08915 -0.01373,-0.100393 -0.0232,-0.163665 -0.06247,-0.267616 m -2.910811,-0.983419 0.131326,0.528737 c 0.662519,0.255998 0.711877,0.768478 1.067168,0.697631 l 0.228224,-0.226046 c -0.07081,-0.298943 -0.153485,-0.613683 -0.173397,-0.633956 -0.0046,-0.0046 -1.253321,-0.366366 -1.253321,-0.366366 z m 2.186615,-1.140587 -0.443699,0.111716 c -0.09333,0.398662 -0.219022,0.89726 -0.294523,1.192563 0.363871,-0.102631 0.462682,-0.124171 0.872095,-0.20785 -0.143711,-0.349112 -0.188886,-0.728445 -0.133873,-1.096429 z m -1.87424,-0.285813 -0.313648,1.249741 c 0.483029,0.139375 0.763559,0.218579 1.252043,0.335148 0.10314,-0.32458 0.219451,-0.683155 0.303448,-1.197766 -0.325758,-0.103251 -0.521049,-0.166792 -1.241843,-0.387123 z m 2.351088,-1.414701 -1.220169,0.30269 c 0.172125,0.761442 0.298183,1.305114 0.305999,1.313364 0.0075,0.0078 0.225253,-0.03952 0.473022,-0.09743 0.116554,-0.470022 0.217924,-0.632905 0.563546,-0.989889 -0.03709,-0.162128 -0.07823,-0.339596 -0.122398,-0.528737 z m 0.163197,-0.01698 c 0.05038,0.214994 0.05503,0.230495 0.09945,0.419609 0.140443,-0.115059 0.293208,-0.208632 0.452622,-0.281905 z m -2.852158,0 0.318746,1.249742 c 0.700001,0.21006 1.258697,0.375235 1.262245,0.371542 0.0038,-0.004 -0.123335,-0.586051 -0.283048,-1.309482 z m 5.60487,-0.01159 -0.493422,0.122095 c 0.227135,0.09573 0.440336,0.233245 0.628571,0.411818 z m -2.717445,2.334255 c 0.109487,0.68124 0.842335,1.193371 1.606491,1.108532 0.285036,-0.686201 0.484585,-0.652934 0.594535,-1.340268 0.0044,-0.611014 -0.784114,-0.234107 -1.142519,-0.214697 -0.615619,-0.01995 -0.584985,-0.758423 -0.651779,-0.867659 -0.190072,0.142368 -0.521817,0.587372 -0.406728,1.314092 z m 0.702955,-1.549601 c 0.200636,0.645656 0.243692,0.866311 0.883571,0.613171 0.481322,-0.142179 0.864986,0.05125 0.927298,0.283279 0.102087,0.345959 -0.06402,0.852913 -0.5091,1.641961 0.697153,-0.379441 0.91768,-1.209169 0.667258,-1.845956 -0.341146,-0.72645 -1.135436,-1.087828 -1.969027,-0.692455 z" style="fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.264583" id="path5801" inkscape:connector-curvature="0" />
61
61
  </g>
62
- <g id="delete-marker" transform="matrix(0.26458333,0,0,0.26458333,-4.9136911,-228.12889)" class="sprite">
62
+ <g id="delete-marker" transform="matrix(0.26458333,0,0,0.26458333,23.529017,-228.26118)" class="sprite">
63
63
  <path id="path3378-6" d="m 178.57143,979.21934 c -3.0625,0 -6.125,2.1197 -7,6.375 0,2.5532 1.75,7.6676 7,13.625 3.4166,-3.877 5.31568,-7.3755 6.25,-10.0625 -1.31416,-0.1622 -2.497,-0.7235 -3.40625,-1.5938 -0.63462,0.8653 -1.6677,1.4375 -2.84375,1.4375 -1.933,0 -3.5,-1.5261 -3.5,-3.4062 0,-1.8801 1.567,-3.4063 3.5,-3.4063 0.36776,0 0.72951,0.085 1.0625,0.1875 0.14352,-1.0312 0.55799,-1.956 1.15625,-2.75 -0.72276,-0.259 -1.46314,-0.4062 -2.21875,-0.4062 z" style="fill:#4d4d4d;fill-opacity:1;stroke:none" inkscape:connector-curvature="0" />
64
64
  <path inkscape:connector-curvature="0" id="path6764" d="m 185.57143,978.21934 c -2.76142,0 -5,2.2386 -5,5 0,2.7615 2.23858,5 5,5 2.76142,0 5,-2.2385 5,-5 0,-2.7614 -2.23858,-5 -5,-5 z m -1.81818,2.2727 1.81818,1.8182 1.81818,-1.8182 0.90909,0.9091 -1.81818,1.8182 1.81818,1.8182 -0.90909,0.9091 -1.81818,-1.8182 -1.81818,1.8182 -0.90909,-0.9091 1.81818,-1.8182 -1.81818,-1.8182 z" style="fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:none" />
65
65
  </g>
66
- <g id="multipolygon" class="sprite" transform="matrix(0.26458333,0,0,0.26458333,-0.57877605,-230.28333)">
66
+ <g id="multipolygon" class="sprite" transform="matrix(0.26458333,0,0,0.26458333,66.121027,-220.75833)">
67
67
  <path style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 10.1875,1017.3622 v 0.5 3 0.5 h 0.5 1.3125 l -1.59375,14 h -1.71875 -0.5 v 0.5 3 0.5 h 0.5 3 0.5 v -0.5 -1.5938 c 0,0 13.716518,-10.9062 13.71875,-10.9062 h 1.78125 0.5 v -0.5 -3 -0.5 h -0.5 -3 -0.5 v 0.5 0.8125 l -10,-3.5938 v -2.2187 -0.5 h -0.5 -3 z m 1,1 h 2 v 2 h -2 z m 14,5 h 2 v 2 h -2 z m -16,13 h 2 v 2 h -2 z" id="rect4058-1-2" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccc" />
68
68
  <path style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 18,1043.3622 h -3.5 -0.5 v 0.5 3 0.5 h 0.5 3 0.5 v -0.5 -1.5937 l 10,-0.6875 v 1.2812 0.5 h 0.5 3 0.5 v -0.5 -3 -0.5 h -0.5 -1.15625 l -2.4375,-8 h 1.78125 0.5 v -0.5 -3 -0.5 h -0.5 -3 -0.6875 c 0,3 0,3 0,3 0,0 -7.8125,10 -8,10 z m 9.1875,-12 h 2 v 2 h -2 z m 1.8125,12 h 2 v 2 h -2 z m -14,1 c 2,0 0,0 2,0 v 2 h -2 z" id="rect4058-1-2-0" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccccccccccc" />
69
69
  </g>
70
- <g id="multiline" class="sprite" transform="matrix(0.26458333,0,0,0.26458333,-1.5875001,-230.81236)">
70
+ <g id="multiline" class="sprite" transform="matrix(0.26458333,0,0,0.26458333,55.562499,-201.97278)">
71
71
  <path sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccc" id="rect4058-9" d="m 51,1020.3622 v 0.5 3 0.5 h 0.5 3 0.5 v -0.5 -0.3438 l 10,4 v 1.3438 0.4375 l 1.09375,0.062 h 2.40625 0.5 v -0.5 -3 -0.5 h -0.5 -3 -0.5 v 0.5 0.5625 l -10,-4 v -1.5625 -0.5 h -0.5 -3 z m 1,1 h 2 v 2 h -2 z m 14,5 h 2 v 2 h -2 z" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0" />
72
72
  <path sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccc" id="rect4058-9-5" d="m 55.09375,1030.5184 v 1.3438 0.4375 l 7.09375,11.0625 h 2.40625 0.5 v 0.5 3 0.5 h -0.5 -3 -0.5 v -0.5 -3 -0.375 l -7.09375,-11.125 h -2.40625 -0.5 v -0.5 -3 -0.5 h 0.5 3 0.5 v 0.5 0.5625 z m -1,-1.1562 h -2 v 2 h 2 z m 10,15 h -2 v 2 h 2 z" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0" />
73
73
  </g>
@@ -77,8 +77,8 @@
77
77
  </g>
78
78
  <path style="fill:#464646;fill-opacity:1;stroke:none;stroke-width:1.84551;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" inkscape:transform-center-x="-0.0017170804" inkscape:transform-center-y="-1.1593678" d="m 31.537126,45.771563 0.577355,-2.184903 -1.687401,-1.349931 h 2.154994 l 0.756436,-2.28465 0.754501,2.284227 h 2.154902 l -1.688682,1.351121 0.575368,2.185485 -1.798166,-1.252432 z" id="star" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccccccccc" class="sprite" />
79
79
  <path style="fill:none;fill-opacity:1;stroke:#464646;stroke-width:0.264583;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" inkscape:transform-center-x="-0.0017170804" inkscape:transform-center-y="-1.1593678" d="m 40.742193,45.771563 0.577355,-2.184903 -1.687401,-1.349931 h 2.154994 l 0.756436,-2.28465 0.754502,2.284227 h 2.154901 l -1.688682,1.351121 0.575368,2.185485 -1.798169,-1.252432 z" id="starred" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccccccccc" class="sprite" />
80
- <path d="m 16.75657,23.457511 0.367177,0.21791 c 0.07232,0.04294 0.09577,0.135732 0.0524,0.207275 -0.01292,0.02122 -0.03092,0.03903 -0.0524,0.0518 l -2.836254,1.6832 -2.836235,-1.6832 c -0.07233,-0.04294 -0.09579,-0.135704 -0.05238,-0.207274 0.0129,-0.02125 0.03089,-0.03905 0.05238,-0.05181 l 0.367179,-0.21791 2.469056,1.465315 z m 0,1.419992 0.367177,0.217911 c 0.07232,0.04294 0.09577,0.135731 0.0524,0.207274 -0.01292,0.02125 -0.03092,0.03903 -0.0524,0.05181 l -2.679097,1.58996 c -0.09674,0.05739 -0.217576,0.05739 -0.314315,0 l -2.679077,-1.58996 c -0.07233,-0.04292 -0.09579,-0.135705 -0.05238,-0.207249 0.0129,-0.02127 0.03089,-0.03908 0.05238,-0.05183 l 0.367179,-0.217911 2.469056,1.465315 z m -2.31192,-4.196946 2.679097,1.589967 c 0.07232,0.04292 0.09577,0.135715 0.0524,0.207256 -0.01292,0.02126 -0.03092,0.03906 -0.0524,0.05182 l -2.836254,1.683221 -2.836235,-1.683221 c -0.07233,-0.04292 -0.09579,-0.135716 -0.05238,-0.207256 0.0129,-0.02126 0.03089,-0.03906 0.05238,-0.05182 l 2.679077,-1.589967 c 0.09674,-0.05741 0.217576,-0.05741 0.314315,0 z" fill="#4d4d4d" id="datalayers" style="stroke-width:0.264583" />
81
- <g id="tilelayers" transform="translate(0,-0.26458333)">
80
+ <path d="m 45.33157,52.032511 0.367177,0.21791 c 0.07232,0.04294 0.09577,0.135732 0.0524,0.207275 -0.01292,0.02122 -0.03092,0.03903 -0.0524,0.0518 l -2.836254,1.6832 -2.836235,-1.6832 c -0.07233,-0.04294 -0.09579,-0.135704 -0.05238,-0.207274 0.0129,-0.02125 0.03089,-0.03905 0.05238,-0.05181 l 0.367179,-0.21791 2.469056,1.465315 z m 0,1.419992 0.367177,0.217911 c 0.07232,0.04294 0.09577,0.135731 0.0524,0.207274 -0.01292,0.02125 -0.03092,0.03903 -0.0524,0.05181 l -2.679097,1.58996 c -0.09674,0.05739 -0.217576,0.05739 -0.314315,0 l -2.679077,-1.58996 c -0.07233,-0.04292 -0.09579,-0.135705 -0.05238,-0.207249 0.0129,-0.02127 0.03089,-0.03908 0.05238,-0.05183 l 0.367179,-0.217911 2.469056,1.465315 z m -2.31192,-4.196946 2.679097,1.589967 c 0.07232,0.04292 0.09577,0.135715 0.0524,0.207256 -0.01292,0.02126 -0.03092,0.03906 -0.0524,0.05182 l -2.836254,1.683221 -2.836235,-1.683221 c -0.07233,-0.04292 -0.09579,-0.135716 -0.05238,-0.207256 0.0129,-0.02126 0.03089,-0.03906 0.05238,-0.05182 l 2.679077,-1.589967 c 0.09674,-0.05741 0.217576,-0.05741 0.314315,0 z" fill="#4d4d4d" id="datalayers" style="stroke-width:0.264583" />
81
+ <g id="tilelayers" transform="translate(19.049999,56.885416)">
82
82
  <path d="m 26.772659,3.4276506 h -4.243945 c -0.07035,0 -0.137814,0.027945 -0.187558,0.077687 -0.04974,0.049744 -0.07769,0.1172104 -0.07769,0.1875578 v 4.2439431 c 0,0.070353 0.02794,0.1378215 0.07769,0.1875631 0.04974,0.049742 0.11721,0.077682 0.187558,0.077682 h 4.243945 c 0.07035,0 0.137822,-0.02794 0.187563,-0.077682 0.04974,-0.049742 0.07768,-0.1172104 0.07768,-0.1875631 v -4.2439431 c 0,-0.070347 -0.02794,-0.1378135 -0.07768,-0.1875578 -0.04974,-0.049742 -0.11721,-0.077687 -0.187563,-0.077687 z m -0.265245,4.1590648 h -3.713453 v -3.546348 h 3.713453 z" fill="#464646" id="path2349" style="stroke-width:0.264583" />
83
83
  <g mask="url(#mask0_181_11898)" id="g2376" transform="matrix(0.26458333,0,0,0.26458333,20.637501,1.8520833)">
84
84
  <path d="m 16.0401,2.3158 h -14.0351 v 14.0351 h 14.0351 z" fill="#d5ecbe" id="path2354" />
@@ -95,9 +95,20 @@
95
95
  </g>
96
96
  <path d="m 25.146689,1.8520833 h -4.243941 c -0.07035,0 -0.137815,0.027946 -0.187558,0.077689 -0.04974,0.049744 -0.07769,0.1172099 -0.07769,0.1875586 v 4.2439405 c 0,0.070353 0.02795,0.1378215 0.07769,0.1875632 0.04974,0.049742 0.11721,0.077682 0.187558,0.077682 h 4.243941 c 0.07035,0 0.137821,-0.02794 0.187563,-0.077682 0.04974,-0.049742 0.07768,-0.1172105 0.07768,-0.1875632 v -4.2439405 c 0,-0.070349 -0.02794,-0.1378151 -0.07768,-0.1875586 -0.04974,-0.049743 -0.11721,-0.077689 -0.187563,-0.077689 z m -0.265245,4.1590648 h -3.713451 v -3.5463453 h 3.713451 z" fill="#464646" id="path2378" style="stroke-width:0.264583" />
97
97
  </g>
98
- <g id="info" transform="matrix(0.33072916,0,0,0.33072916,-11.90625,-256.10415)" style="fill:#4d4d4d;fill-opacity:1;stroke-width:0.8">
98
+ <g id="info" transform="matrix(0.33072916,0,0,0.33072916,7.1437494,-265.62915)" style="fill:#4d4d4d;fill-opacity:1;stroke-width:0.8">
99
99
  <path id="path3762" style="fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.8" d="m 108,838.36217 a 8,8 0 0 0 -8,8 8,8 0 0 0 8,8 8,8 0 0 0 8,-8 8,8 0 0 0 -8,-8 z m 0,2.5 a 1.5,1.5 0 0 1 1.5,1.5 1.5,1.5 0 0 1 -1.5,1.5 1.5,1.5 0 0 1 -1.5,-1.5 1.5,1.5 0 0 1 1.5,-1.5 z m -1,4.5 h 2 v 6 h -2 z" />
100
100
  </g>
101
101
  <path d="m 5.6444435,59.43432 v 1.034991 h 1.0541546 z m 1.1759257,1.612262 h -1.1759257 c -0.3247228,0 -0.5879626,-0.258453 -0.5879626,-0.577271 v -1.154545 h -2.3518514 v 5.195451 h 4.1157397 z m -4.1157397,-2.309089 h 3.0615854 l 1.6421175,1.612259 v 4.160465 c 0,0.318822 -0.2632403,0.577275 -0.5879632,0.577275 h -4.1157397 c -0.3247231,0 -0.5879631,-0.258453 -0.5879631,-0.577275 v -5.195451 c 0,-0.31882 0.26324,-0.577273 0.5879631,-0.577273 z m 1.7638882,3.92135 v -1.323625 h 0.5879632 v 1.323625 l 0.3800861,-0.373177 0.415753,0.408196 -1.0898206,1.070004 -1.0898208,-1.070004 0.4157526,-0.408196 z" fill-rule="evenodd" id="downloadfile" style="fill:#464646;fill-opacity:1;stroke-width:0.192424" />
102
+ <g id="set-zoom-6" class="sprite" transform="translate(37.659368,8.069823)" style="fill:#4d4d4d;fill-opacity:1">
103
+ <polygon points="37.37,62.644 37.37,90.703 28.965,82.305 11.27,100 0,88.737 17.702,71.042 9.297,62.644 " id="polygon3044-7" transform="matrix(0.0635,0,0,0.0635,2.2709793,12.435385)" style="fill:#4d4d4d;fill-opacity:1;stroke:#999999;stroke-width:1.04167;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
104
+ <polygon points="71.042,17.708 62.644,9.31 62.644,37.357 90.71,37.37 82.298,28.958 100,11.263 88.743,0 " id="polygon3048-5" transform="matrix(0.0635,0,0,0.0635,2.2709793,12.435385)" style="fill:#4d4d4d;fill-opacity:1;stroke:#999999;stroke-width:1.04167;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
105
+ <path inkscape:connector-curvature="0" d="m 5.4459792,14.83486 c -0.428308,0 -0.775525,0.347281 -0.775525,0.775525 0,0.429133 0.347281,0.776415 0.775525,0.776415 0.428308,0 0.77597,-0.347282 0.77597,-0.776415 0,-0.428307 -0.347662,-0.775525 -0.77597,-0.775525 z" id="path3052-3" style="fill:#4d4d4d;fill-opacity:1;stroke:#999999;stroke-width:0.0661458;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
106
+ </g>
107
+ <g id="help" transform="matrix(0.35277776,0,0,0.35277776,-7.6749272,-328.17103)" style="stroke-width:0.75">
108
+ <circle transform="matrix(1.0714286,0,0,1.0714286,26.684272,934.10579)" id="path3014" style="fill:none;stroke:#4d4d4d;stroke-width:0.7;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" cx="8" cy="9" r="7" />
109
+ <g id="text3784" style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.75" transform="translate(27.255701,-100.61365)">
110
+ <path inkscape:connector-curvature="0" id="path3789" style="font-weight:bold;font-size:12px;-inkscape-font-specification:'Sans Bold';fill:#4d4d4d;stroke-width:0.75" d="m 9,1046.0464 h -2.3698034 v -0.3223 c 0,-0.3596 0.072207,-0.6775 0.2166302,-0.9539 0.1444174,-0.2807 0.4485749,-0.636 0.9124728,-1.0658 l 0.4201314,-0.3816 c 0.249449,-0.228 0.4310681,-0.4429 0.5448577,-0.6446 0.1181576,-0.2019 0.1772384,-0.4036 0.177243,-0.6053 -4.6e-6,-0.3071 -0.1050376,-0.5462 -0.3150985,-0.7171 -0.2100697,-0.1756 -0.5032861,-0.2632 -0.87965,-0.2632 -0.3544889,0 -0.7374207,0.075 -1.1487968,0.2237 -0.4113804,0.1446 -0.840264,0.3618 -1.2866522,0.6513 v -2.0659 c 0.5295391,-0.184 1.0131273,-0.32 1.4507661,-0.4077 0.437634,-0.088 0.8599531,-0.1317 1.2669587,-0.1317 1.0678292,0 1.8818328,0.2194 2.442012,0.6579 0.560169,0.4341 0.840256,1.0702 0.840263,1.9078 -7e-6,0.4298 -0.08535,0.8159 -0.256017,1.158 -0.170685,0.3377 -0.461713,0.7017 -0.873085,1.092 l -0.4201313,0.375 c -0.297598,0.272 -0.4923463,0.4913 -0.5842451,0.658 -0.091909,0.1622 -0.1378603,0.342 -0.1378556,0.5394 v 0.296 m -2.3698034,0.9739 h 2.3698034 v 2.342 h -2.3698034 v -2.342" sodipodi:nodetypes="ccsccccccsccccsccccccccccccc" />
111
+ </g>
112
+ </g>
102
113
  </g>
103
114
  </svg>
@@ -57,8 +57,11 @@ class uMapAlert extends uMapElement {
57
57
  this.container.dataset.duration = duration
58
58
  this.element.textContent = message
59
59
  this.setAttribute('open', 'open')
60
+ if (this._timeoutId) {
61
+ clearTimeout(this._timeoutId)
62
+ }
60
63
  if (Number.isFinite(duration)) {
61
- setTimeout(() => {
64
+ this._timeoutId = setTimeout(() => {
62
65
  this._hide()
63
66
  }, duration)
64
67
  }
@@ -4,6 +4,7 @@ import * as Icon from './rendering/icon.js'
4
4
  import * as Utils from './utils.js'
5
5
  import { EXPORT_FORMATS } from './formatter.js'
6
6
  import ContextMenu from './ui/contextmenu.js'
7
+ import { Form } from './form/builder.js'
7
8
 
8
9
  export default class Browser {
9
10
  constructor(umap, leafletMap) {
@@ -45,7 +46,7 @@ export default class Browser {
45
46
  const symbol = feature._getIconUrl
46
47
  ? Icon.formatUrl(feature._getIconUrl(), feature)
47
48
  : null
48
- title.textContent = feature.getDisplayName() || '—'
49
+ title.textContent = title.title = feature.getDisplayName() || '—'
49
50
  const bgcolor = feature.getPreviewColor()
50
51
  colorBox.style.backgroundColor = bgcolor
51
52
  if (symbol && symbol !== U.SCHEMA.iconUrl.default) {
@@ -96,7 +97,7 @@ export default class Browser {
96
97
  DomEvent.on(toggle, 'click', toggleList)
97
98
  datalayer.renderToolbox(headline)
98
99
  const name = DomUtil.create('span', 'datalayer-name', headline)
99
- name.textContent = datalayer.options.name
100
+ name.textContent = name.title = datalayer.options.name
100
101
  DomEvent.on(name, 'click', toggleList)
101
102
  container.innerHTML = ''
102
103
  datalayer.eachFeature((feature) => this.addFeature(feature, container))
@@ -179,9 +180,8 @@ export default class Browser {
179
180
  ],
180
181
  ['options.inBbox', { handler: 'Switch', label: translate('Current map view') }],
181
182
  ]
182
- const builder = new L.FormBuilder(this, fields, {
183
- callback: () => this.onFormChange(),
184
- })
183
+ const builder = new Form(this, fields)
184
+ builder.on('set', () => this.onFormChange())
185
185
  let filtersBuilder
186
186
  this.formContainer.appendChild(builder.build())
187
187
  DomEvent.on(builder.form, 'reset', () => {
@@ -189,9 +189,8 @@ export default class Browser {
189
189
  })
190
190
  if (this._umap.properties.facetKey) {
191
191
  fields = this._umap.facets.build()
192
- filtersBuilder = new L.FormBuilder(this._umap.facets, fields, {
193
- callback: () => this.onFormChange(),
194
- })
192
+ filtersBuilder = new Form(this._umap.facets, fields)
193
+ filtersBuilder.on('set', () => this.onFormChange())
195
194
  DomEvent.on(filtersBuilder.form, 'reset', () => {
196
195
  window.setTimeout(filtersBuilder.syncAll.bind(filtersBuilder))
197
196
  })
@@ -255,6 +254,7 @@ export default class Browser {
255
254
  if (datalayer.isVisible()) allHidden = false
256
255
  })
257
256
  this._umap.eachBrowsableDataLayer((datalayer) => {
257
+ datalayer._forcedVisibility = true
258
258
  if (allHidden) {
259
259
  datalayer.show()
260
260
  } else {
@@ -1,15 +1,18 @@
1
1
  import { translate } from './i18n.js'
2
2
  import * as Utils from './utils.js'
3
+ import { uMapAlert as Alert } from '../components/alerts/alert.js'
3
4
 
4
5
  const TEMPLATE = `
5
6
  <div class="umap-caption">
6
- <hgroup>
7
- <h3>
8
- <i class="icon icon-16 icon-caption icon-block"></i>
9
- <span class="map-name" data-ref="name"></span>
10
- </h3>
11
- <h4 data-ref="author"></h4>
12
- </hgroup>
7
+ <div class="header">
8
+ <i class="icon icon-16 icon-caption icon-block"></i>
9
+ <hgroup>
10
+ <h3><span class="map-name" data-ref="name"></span></h3>
11
+ <p data-ref="author"></p>
12
+ <p class="dates" data-ref="dates"></p>
13
+ <p><button type="button" class="round small" data-ref="star" title="${translate('Star this map')}"><i class="icon icon-16 icon-star map-star"></i><span class="map-stars"></span></button></p>
14
+ </hgroup>
15
+ </div>
13
16
  <div class="umap-map-description text" data-ref="description"></div>
14
17
  <div class="datalayer-container" data-ref="datalayersContainer"></div>
15
18
  <div class="credits-container">
@@ -34,6 +37,14 @@ export default class Caption extends Utils.WithTemplate {
34
37
  this._umap = umap
35
38
  this._leafletMap = leafletMap
36
39
  this.loadTemplate(TEMPLATE)
40
+ this.elements.star.addEventListener('click', async () => {
41
+ if (this._umap.properties.user?.id) {
42
+ await this._umap.star()
43
+ this.refresh()
44
+ } else {
45
+ Alert.error(translate('You must be logged in'))
46
+ }
47
+ })
37
48
  }
38
49
 
39
50
  isOpen() {
@@ -61,9 +72,21 @@ export default class Caption extends Utils.WithTemplate {
61
72
  this.addDataLayer(datalayer, this.elements.datalayersContainer)
62
73
  )
63
74
  this.addCredits()
75
+ if (this._umap.properties.created_at) {
76
+ const created_at = translate('created at {date}', {
77
+ date: new Date(this._umap.properties.created_at).toLocaleDateString(),
78
+ })
79
+ const modified_at = translate('modified at {date}', {
80
+ date: new Date(this._umap.properties.modified_at).toLocaleDateString(),
81
+ })
82
+ this.elements.dates.innerHTML = `${created_at} - ${modified_at}`
83
+ } else {
84
+ this.elements.dates.hidden = true
85
+ }
64
86
  this._umap.panel.open({ content: this.element }).then(() => {
65
87
  // Create the legend when the panel is actually on the DOM
66
88
  this._umap.eachDataLayerReverse((datalayer) => datalayer.renderLegend())
89
+ this._umap.propagate()
67
90
  })
68
91
  }
69
92
 
@@ -16,12 +16,12 @@ import {
16
16
  MaskPolygon,
17
17
  } from '../rendering/ui.js'
18
18
  import loadPopup from '../rendering/popup.js'
19
+ import { MutatingForm } from '../form/builder.js'
19
20
 
20
21
  class Feature {
21
22
  constructor(umap, datalayer, geojson = {}, id = null) {
22
23
  this._umap = umap
23
24
  this.sync = umap.syncEngine.proxy(this)
24
- this._marked_for_deletion = false
25
25
  this._isDirty = false
26
26
  this._ui = null
27
27
 
@@ -146,17 +146,6 @@ class Feature {
146
146
  // When the layer is a remote layer, we don't want to sync the creation of the
147
147
  // points via the websocket, as the other peers will get them themselves.
148
148
  if (this.datalayer?.isRemoteLayer()) return
149
-
150
- // The "endEdit" event is triggered at the end of an edition,
151
- // and will trigger the sync.
152
- // In the case of a deletion (or a change of layer), we don't want this
153
- // event triggered to cause a sync event, as it would reintroduce
154
- // deleted features.
155
- // The `._marked_for_deletion` private property is here to track this status.
156
- if (this._marked_for_deletion === true) {
157
- this._marked_for_deletion = false
158
- return
159
- }
160
149
  this.sync.upsert(this.toGeoJSON())
161
150
  }
162
151
 
@@ -212,6 +201,7 @@ class Feature {
212
201
  if (this._umap.currentFeature === this) {
213
202
  this.view()
214
203
  }
204
+ this.datalayer.indexProperties(this)
215
205
  }
216
206
  this.redraw()
217
207
  }
@@ -225,20 +215,16 @@ class Feature {
225
215
  `icon-${this.getClassName()}`
226
216
  )
227
217
 
228
- let builder = new U.FormBuilder(
229
- this,
230
- [['datalayer', { handler: 'DataLayerSwitcher' }]],
231
- {
232
- callback() {
233
- this.edit(event)
234
- }, // removeLayer step will close the edit panel, let's reopen it
235
- }
236
- )
218
+ let builder = new MutatingForm(this, [
219
+ ['datalayer', { handler: 'DataLayerSwitcher' }],
220
+ ])
221
+ // removeLayer step will close the edit panel, let's reopen it
222
+ builder.on('set', () => this.edit(event))
237
223
  container.appendChild(builder.build())
238
224
 
239
225
  const properties = []
240
226
  let labelKeyFound = undefined
241
- for (const property of this.datalayer._propertiesIndex) {
227
+ for (const property of this.datalayer.allProperties()) {
242
228
  if (!labelKeyFound && U.LABEL_KEYS.includes(property)) {
243
229
  labelKeyFound = property
244
230
  continue
@@ -254,7 +240,7 @@ class Feature {
254
240
  labelKeyFound = U.DEFAULT_LABEL_KEY
255
241
  }
256
242
  properties.unshift([`properties.${labelKeyFound}`, { label: labelKeyFound }])
257
- builder = new U.FormBuilder(this, properties, {
243
+ builder = new MutatingForm(this, properties, {
258
244
  id: 'umap-feature-properties',
259
245
  })
260
246
  container.appendChild(builder.build())
@@ -272,6 +258,10 @@ class Feature {
272
258
  if (!this.ui.isOnScreen(this._umap._leafletMap.getBounds())) this.zoomTo(event)
273
259
  }
274
260
 
261
+ toggleEditing() {
262
+ this.edit()
263
+ }
264
+
275
265
  getAdvancedEditActions(container) {
276
266
  const button = Utils.loadTemplate(`
277
267
  <button class="button" type="button">
@@ -285,7 +275,7 @@ class Feature {
285
275
 
286
276
  appendEditFieldsets(container) {
287
277
  const optionsFields = this.getShapeOptions()
288
- let builder = new U.FormBuilder(this, optionsFields, {
278
+ let builder = new MutatingForm(this, optionsFields, {
289
279
  id: 'umap-feature-shape-properties',
290
280
  })
291
281
  const shapeProperties = DomUtil.createFieldset(
@@ -295,7 +285,7 @@ class Feature {
295
285
  shapeProperties.appendChild(builder.build())
296
286
 
297
287
  const advancedOptions = this.getAdvancedOptions()
298
- builder = new U.FormBuilder(this, advancedOptions, {
288
+ builder = new MutatingForm(this, advancedOptions, {
299
289
  id: 'umap-feature-advanced-properties',
300
290
  })
301
291
  const advancedProperties = DomUtil.createFieldset(
@@ -305,7 +295,7 @@ class Feature {
305
295
  advancedProperties.appendChild(builder.build())
306
296
 
307
297
  const interactionOptions = this.getInteractionOptions()
308
- builder = new U.FormBuilder(this, interactionOptions)
298
+ builder = new MutatingForm(this, interactionOptions)
309
299
  const popupFieldset = DomUtil.createFieldset(
310
300
  container,
311
301
  translate('Interaction options')
@@ -333,15 +323,15 @@ class Feature {
333
323
  // Variables mode.
334
324
  if (labelKey) {
335
325
  if (Utils.hasVar(labelKey)) {
336
- return Utils.greedyTemplate(labelKey, this.extendedProperties())
326
+ return Utils.greedyTemplate(labelKey, this.extendedProperties()).trim()
337
327
  }
338
328
  keys.unshift(labelKey)
339
329
  }
340
330
  for (const key of keys) {
341
331
  const value = this.properties[key]
342
- if (value) return value
332
+ if (value) return value.trim()
343
333
  }
344
- return this.datalayer.getName()
334
+ return this.datalayer.getName().trim()
345
335
  }
346
336
 
347
337
  hasPopupFooter() {
@@ -510,8 +500,19 @@ class Feature {
510
500
  })
511
501
  }
512
502
 
513
- getInplaceToolbarActions() {
514
- return [U.ToggleEditAction, U.DeleteFeatureAction]
503
+ getInplaceEditMenu() {
504
+ return [
505
+ {
506
+ action: () => this.toggleEditing(),
507
+ title: translate('Toggle edit mode (⇧+Click)'),
508
+ icon: 'icon-edit',
509
+ },
510
+ {
511
+ action: () => this.confirmDelete(),
512
+ title: translate('Delete this feature'),
513
+ icon: 'icon-delete',
514
+ },
515
+ ]
515
516
  }
516
517
 
517
518
  isFiltered() {
@@ -566,6 +567,10 @@ class Feature {
566
567
  return false
567
568
  }
568
569
 
570
+ isEmpty() {
571
+ return !this.coordinates.length
572
+ }
573
+
569
574
  clone() {
570
575
  const geojson = this.toGeoJSON()
571
576
  delete geojson.id
@@ -623,6 +628,12 @@ class Feature {
623
628
  window.open(permalink)
624
629
  },
625
630
  })
631
+ items.push({
632
+ label: translate('Layer permalink'),
633
+ action: () => {
634
+ window.open(this.datalayer.getPermalink())
635
+ },
636
+ })
626
637
  }
627
638
  items.push({
628
639
  label: translate('Copy as GeoJSON'),
@@ -733,16 +744,15 @@ export class Point extends Feature {
733
744
  ['ui._latlng.lat', { handler: 'FloatInput', label: translate('Latitude') }],
734
745
  ['ui._latlng.lng', { handler: 'FloatInput', label: translate('Longitude') }],
735
746
  ]
736
- const builder = new U.FormBuilder(this, coordinatesOptions, {
737
- callback: () => {
738
- if (!this.ui._latlng.isValid()) {
739
- Alert.error(translate('Invalid latitude or longitude'))
740
- builder.restoreField('ui._latlng.lat')
741
- builder.restoreField('ui._latlng.lng')
742
- }
743
- this.pullGeometry()
744
- this.zoomTo({ easing: false })
745
- },
747
+ const builder = new MutatingForm(this, coordinatesOptions)
748
+ builder.on('set', () => {
749
+ if (!this.ui._latlng.isValid()) {
750
+ Alert.error(translate('Invalid latitude or longitude'))
751
+ builder.restoreField('ui._latlng.lat')
752
+ builder.restoreField('ui._latlng.lng')
753
+ }
754
+ this.pullGeometry()
755
+ this.zoomTo({ easing: false })
746
756
  })
747
757
  const fieldset = DomUtil.createFieldset(container, translate('Coordinates'))
748
758
  fieldset.appendChild(builder.build())
@@ -784,17 +794,15 @@ class Path extends Feature {
784
794
  }
785
795
  }
786
796
 
787
- _toggleEditing(event) {
797
+ toggleEditing() {
788
798
  if (this._umap.editEnabled) {
789
799
  if (this.ui.editEnabled()) {
790
800
  this.endEdit()
791
801
  this._umap.editPanel.close()
792
802
  } else {
793
- this.edit(event)
803
+ this.edit()
794
804
  }
795
805
  }
796
- // FIXME: disable when disabling global edit
797
- L.DomEvent.stop(event)
798
806
  }
799
807
 
800
808
  getShapeOptions() {
@@ -845,15 +853,33 @@ class Path extends Feature {
845
853
  return other
846
854
  }
847
855
 
848
- getInplaceToolbarActions(event) {
849
- const items = super.getInplaceToolbarActions(event)
856
+ getInplaceEditMenu(event) {
857
+ const items = super.getInplaceEditMenu()
850
858
  if (this.isMulti()) {
851
- items.push(U.DeleteShapeAction)
852
- items.push(U.ExtractShapeFromMultiAction)
859
+ items.push({
860
+ action: () => this.ui.enableEdit().deleteShapeAt(event.latlng),
861
+ title: translate('Delete this shape'),
862
+ icon: 'icon-delete-shape',
863
+ })
864
+ items.push({
865
+ action: () => this.ui.isolateShape(event.latlng),
866
+ title: translate('Extract shape to separate feature'),
867
+ icon: 'icon-extract-shape',
868
+ })
853
869
  }
854
870
  return items
855
871
  }
856
872
 
873
+ getInplaceEditVertexMenu(event) {
874
+ return [
875
+ {
876
+ action: () => event.vertex.delete(),
877
+ title: translate('Delete this vertex (Alt+Click)'),
878
+ icon: 'icon-delete-vertex',
879
+ },
880
+ ]
881
+ }
882
+
857
883
  zoomTo({ easing, callback }) {
858
884
  // Use bounds instead of centroid for paths.
859
885
  easing = easing || this._umap.getProperty('easing')
@@ -954,10 +980,6 @@ export class LineString extends Path {
954
980
  return { coordinates, type }
955
981
  }
956
982
 
957
- isEmpty() {
958
- return !this.coordinates.length
959
- }
960
-
961
983
  getUIClass() {
962
984
  return super.getUIClass() || LeafletPolyline
963
985
  }
@@ -1080,6 +1102,25 @@ export class LineString extends Path {
1080
1102
  const [gain, loss] = this.ui.getElevation()
1081
1103
  return Object.assign({ gain, loss }, super.extendedProperties())
1082
1104
  }
1105
+
1106
+ getInplaceEditVertexMenu(event) {
1107
+ const items = super.getInplaceEditVertexMenu(event)
1108
+ const index = event.vertex.getIndex()
1109
+ if (index === 0 || index === event.vertex.getLastIndex()) {
1110
+ items.push({
1111
+ action: () => event.vertex.continue(),
1112
+ title: translate('Continue line'),
1113
+ icon: 'icon-continue-line',
1114
+ })
1115
+ } else {
1116
+ items.push({
1117
+ action: () => event.vertex.split(),
1118
+ title: translate('Split line'),
1119
+ icon: 'icon-split-line',
1120
+ })
1121
+ }
1122
+ return items
1123
+ }
1083
1124
  }
1084
1125
 
1085
1126
  export class Polygon extends Path {
@@ -1185,9 +1226,13 @@ export class Polygon extends Path {
1185
1226
  )
1186
1227
  }
1187
1228
 
1188
- getInplaceToolbarActions(event) {
1189
- const items = super.getInplaceToolbarActions(event)
1190
- items.push(U.CreateHoleAction)
1229
+ getInplaceEditMenu(event) {
1230
+ const items = super.getInplaceEditMenu()
1231
+ items.push({
1232
+ action: () => this.ui.startHole(event),
1233
+ title: translate('Start a hole here'),
1234
+ icon: 'icon-hole',
1235
+ })
1191
1236
  return items
1192
1237
  }
1193
1238