umap-project 2.7.3__py3-none-any.whl → 2.8.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.
Files changed (292) hide show
  1. umap/__init__.py +1 -1
  2. umap/forms.py +4 -14
  3. umap/locale/am_ET/LC_MESSAGES/django.mo +0 -0
  4. umap/locale/am_ET/LC_MESSAGES/django.po +278 -151
  5. umap/locale/ar/LC_MESSAGES/django.mo +0 -0
  6. umap/locale/ar/LC_MESSAGES/django.po +335 -141
  7. umap/locale/bg/LC_MESSAGES/django.mo +0 -0
  8. umap/locale/bg/LC_MESSAGES/django.po +279 -152
  9. umap/locale/br/LC_MESSAGES/django.mo +0 -0
  10. umap/locale/br/LC_MESSAGES/django.po +95 -79
  11. umap/locale/ca/LC_MESSAGES/django.mo +0 -0
  12. umap/locale/ca/LC_MESSAGES/django.po +85 -68
  13. umap/locale/cs_CZ/LC_MESSAGES/django.mo +0 -0
  14. umap/locale/cs_CZ/LC_MESSAGES/django.po +78 -66
  15. umap/locale/da/LC_MESSAGES/django.mo +0 -0
  16. umap/locale/da/LC_MESSAGES/django.po +280 -153
  17. umap/locale/de/LC_MESSAGES/django.mo +0 -0
  18. umap/locale/de/LC_MESSAGES/django.po +80 -64
  19. umap/locale/el/LC_MESSAGES/django.mo +0 -0
  20. umap/locale/el/LC_MESSAGES/django.po +82 -66
  21. umap/locale/en/LC_MESSAGES/django.po +73 -61
  22. umap/locale/es/LC_MESSAGES/django.mo +0 -0
  23. umap/locale/es/LC_MESSAGES/django.po +75 -63
  24. umap/locale/et/LC_MESSAGES/django.mo +0 -0
  25. umap/locale/et/LC_MESSAGES/django.po +280 -153
  26. umap/locale/eu/LC_MESSAGES/django.mo +0 -0
  27. umap/locale/eu/LC_MESSAGES/django.po +82 -66
  28. umap/locale/fa_IR/LC_MESSAGES/django.mo +0 -0
  29. umap/locale/fa_IR/LC_MESSAGES/django.po +80 -64
  30. umap/locale/fi/LC_MESSAGES/django.mo +0 -0
  31. umap/locale/fi/LC_MESSAGES/django.po +278 -151
  32. umap/locale/fr/LC_MESSAGES/django.mo +0 -0
  33. umap/locale/fr/LC_MESSAGES/django.po +75 -63
  34. umap/locale/gl/LC_MESSAGES/django.mo +0 -0
  35. umap/locale/gl/LC_MESSAGES/django.po +280 -153
  36. umap/locale/he/LC_MESSAGES/django.mo +0 -0
  37. umap/locale/he/LC_MESSAGES/django.po +281 -154
  38. umap/locale/hu/LC_MESSAGES/django.mo +0 -0
  39. umap/locale/hu/LC_MESSAGES/django.po +80 -64
  40. umap/locale/is/LC_MESSAGES/django.mo +0 -0
  41. umap/locale/is/LC_MESSAGES/django.po +280 -153
  42. umap/locale/it/LC_MESSAGES/django.mo +0 -0
  43. umap/locale/it/LC_MESSAGES/django.po +82 -66
  44. umap/locale/ja/LC_MESSAGES/django.mo +0 -0
  45. umap/locale/ja/LC_MESSAGES/django.po +280 -153
  46. umap/locale/ko/LC_MESSAGES/django.mo +0 -0
  47. umap/locale/ko/LC_MESSAGES/django.po +280 -153
  48. umap/locale/lt/LC_MESSAGES/django.mo +0 -0
  49. umap/locale/lt/LC_MESSAGES/django.po +280 -153
  50. umap/locale/ms/LC_MESSAGES/django.mo +0 -0
  51. umap/locale/ms/LC_MESSAGES/django.po +82 -66
  52. umap/locale/nl/LC_MESSAGES/django.mo +0 -0
  53. umap/locale/nl/LC_MESSAGES/django.po +280 -153
  54. umap/locale/pl/LC_MESSAGES/django.mo +0 -0
  55. umap/locale/pl/LC_MESSAGES/django.po +82 -66
  56. umap/locale/pt/LC_MESSAGES/django.mo +0 -0
  57. umap/locale/pt/LC_MESSAGES/django.po +75 -63
  58. umap/locale/pt_BR/LC_MESSAGES/django.mo +0 -0
  59. umap/locale/pt_BR/LC_MESSAGES/django.po +280 -153
  60. umap/locale/pt_PT/LC_MESSAGES/django.mo +0 -0
  61. umap/locale/pt_PT/LC_MESSAGES/django.po +280 -153
  62. umap/locale/ru/LC_MESSAGES/django.mo +0 -0
  63. umap/locale/ru/LC_MESSAGES/django.po +280 -153
  64. umap/locale/sk_SK/LC_MESSAGES/django.mo +0 -0
  65. umap/locale/sk_SK/LC_MESSAGES/django.po +280 -153
  66. umap/locale/sl/LC_MESSAGES/django.mo +0 -0
  67. umap/locale/sl/LC_MESSAGES/django.po +280 -153
  68. umap/locale/sr/LC_MESSAGES/django.mo +0 -0
  69. umap/locale/sr/LC_MESSAGES/django.po +280 -153
  70. umap/locale/sv/LC_MESSAGES/django.mo +0 -0
  71. umap/locale/sv/LC_MESSAGES/django.po +81 -65
  72. umap/locale/th_TH/LC_MESSAGES/django.mo +0 -0
  73. umap/locale/th_TH/LC_MESSAGES/django.po +257 -185
  74. umap/locale/tr/LC_MESSAGES/django.mo +0 -0
  75. umap/locale/tr/LC_MESSAGES/django.po +280 -153
  76. umap/locale/uk_UA/LC_MESSAGES/django.mo +0 -0
  77. umap/locale/uk_UA/LC_MESSAGES/django.po +280 -153
  78. umap/locale/vi/LC_MESSAGES/django.mo +0 -0
  79. umap/locale/vi/LC_MESSAGES/django.po +278 -151
  80. umap/locale/zh/LC_MESSAGES/django.mo +0 -0
  81. umap/locale/zh/LC_MESSAGES/django.po +278 -151
  82. umap/locale/zh_TW/LC_MESSAGES/django.mo +0 -0
  83. umap/locale/zh_TW/LC_MESSAGES/django.po +97 -81
  84. umap/management/commands/empty_trash.py +35 -0
  85. umap/management/commands/migrate_to_S3.py +29 -0
  86. umap/migrations/0023_alter_datalayer_uuid.py +19 -0
  87. umap/migrations/0024_alter_map_share_status.py +30 -0
  88. umap/migrations/0025_alter_datalayer_geojson.py +24 -0
  89. umap/models.py +68 -116
  90. umap/settings/base.py +23 -3
  91. umap/settings/local_s3.py +45 -0
  92. umap/static/umap/base.css +3 -603
  93. umap/static/umap/content.css +5 -3
  94. umap/static/umap/css/bar.css +202 -0
  95. umap/static/umap/css/form.css +620 -0
  96. umap/static/umap/css/icon.css +21 -1
  97. umap/static/umap/css/popup.css +125 -0
  98. umap/static/umap/img/16-white.svg +16 -4
  99. umap/static/umap/img/16.svg +1 -1
  100. umap/static/umap/img/source/16-white.svg +46 -45
  101. umap/static/umap/img/source/16.svg +1 -753
  102. umap/static/umap/js/components/fragment.js +3 -1
  103. umap/static/umap/js/modules/browser.js +20 -19
  104. umap/static/umap/js/modules/caption.js +21 -22
  105. umap/static/umap/js/modules/data/features.js +120 -78
  106. umap/static/umap/js/modules/data/layer.js +195 -153
  107. umap/static/umap/js/modules/facets.js +9 -9
  108. umap/static/umap/js/modules/formatter.js +5 -5
  109. umap/static/umap/js/modules/global.js +4 -52
  110. umap/static/umap/js/modules/help.js +18 -21
  111. umap/static/umap/js/modules/importer.js +133 -56
  112. umap/static/umap/js/modules/importers/cadastrefr.js +4 -0
  113. umap/static/umap/js/modules/importers/geodatamine.js +3 -3
  114. umap/static/umap/js/modules/importers/overpass.js +5 -0
  115. umap/static/umap/js/modules/permissions.js +85 -87
  116. umap/static/umap/js/modules/rendering/icon.js +2 -1
  117. umap/static/umap/js/modules/rendering/layers/base.js +15 -15
  118. umap/static/umap/js/modules/rendering/layers/classified.js +1 -1
  119. umap/static/umap/js/modules/rendering/layers/cluster.js +1 -1
  120. umap/static/umap/js/modules/rendering/layers/heat.js +1 -1
  121. umap/static/umap/js/modules/rendering/map.js +390 -0
  122. umap/static/umap/js/modules/rendering/popup.js +19 -19
  123. umap/static/umap/js/modules/rendering/template.js +88 -21
  124. umap/static/umap/js/modules/rendering/ui.js +63 -14
  125. umap/static/umap/js/modules/request.js +2 -2
  126. umap/static/umap/js/modules/rules.js +22 -25
  127. umap/static/umap/js/modules/saving.js +47 -0
  128. umap/static/umap/js/modules/schema.js +6 -0
  129. umap/static/umap/js/modules/share.js +21 -24
  130. umap/static/umap/js/modules/slideshow.js +24 -20
  131. umap/static/umap/js/modules/sync/updaters.js +7 -9
  132. umap/static/umap/js/modules/tableeditor.js +20 -19
  133. umap/static/umap/js/modules/ui/bar.js +196 -0
  134. umap/static/umap/js/modules/ui/dialog.js +5 -0
  135. umap/static/umap/js/modules/ui/panel.js +10 -9
  136. umap/static/umap/js/modules/umap.js +1691 -0
  137. umap/static/umap/js/modules/urls.js +2 -2
  138. umap/static/umap/js/modules/utils.js +22 -6
  139. umap/static/umap/js/umap.controls.js +81 -305
  140. umap/static/umap/js/umap.core.js +29 -50
  141. umap/static/umap/js/umap.forms.js +78 -27
  142. umap/static/umap/keycloak.png +0 -0
  143. umap/static/umap/locale/am_ET.js +26 -10
  144. umap/static/umap/locale/am_ET.json +26 -10
  145. umap/static/umap/locale/ar.js +26 -10
  146. umap/static/umap/locale/ar.json +26 -10
  147. umap/static/umap/locale/ast.js +26 -10
  148. umap/static/umap/locale/ast.json +26 -10
  149. umap/static/umap/locale/bg.js +26 -10
  150. umap/static/umap/locale/bg.json +26 -10
  151. umap/static/umap/locale/br.js +27 -20
  152. umap/static/umap/locale/br.json +27 -20
  153. umap/static/umap/locale/ca.js +32 -29
  154. umap/static/umap/locale/ca.json +32 -29
  155. umap/static/umap/locale/cs_CZ.js +24 -17
  156. umap/static/umap/locale/cs_CZ.json +24 -17
  157. umap/static/umap/locale/da.js +26 -10
  158. umap/static/umap/locale/da.json +26 -10
  159. umap/static/umap/locale/de.js +21 -14
  160. umap/static/umap/locale/de.json +21 -14
  161. umap/static/umap/locale/el.js +28 -12
  162. umap/static/umap/locale/el.json +28 -12
  163. umap/static/umap/locale/en.js +14 -9
  164. umap/static/umap/locale/en.json +14 -9
  165. umap/static/umap/locale/en_US.json +26 -10
  166. umap/static/umap/locale/es.js +16 -13
  167. umap/static/umap/locale/es.json +16 -13
  168. umap/static/umap/locale/et.js +26 -10
  169. umap/static/umap/locale/et.json +26 -10
  170. umap/static/umap/locale/eu.js +16 -9
  171. umap/static/umap/locale/eu.json +16 -9
  172. umap/static/umap/locale/fa_IR.js +16 -9
  173. umap/static/umap/locale/fa_IR.json +16 -9
  174. umap/static/umap/locale/fi.js +26 -10
  175. umap/static/umap/locale/fi.json +26 -10
  176. umap/static/umap/locale/fr.js +14 -9
  177. umap/static/umap/locale/fr.json +14 -9
  178. umap/static/umap/locale/gl.js +26 -10
  179. umap/static/umap/locale/gl.json +26 -10
  180. umap/static/umap/locale/he.js +26 -10
  181. umap/static/umap/locale/he.json +26 -10
  182. umap/static/umap/locale/hr.js +26 -10
  183. umap/static/umap/locale/hr.json +26 -10
  184. umap/static/umap/locale/hu.js +16 -9
  185. umap/static/umap/locale/hu.json +16 -9
  186. umap/static/umap/locale/id.js +26 -10
  187. umap/static/umap/locale/id.json +26 -10
  188. umap/static/umap/locale/is.js +26 -10
  189. umap/static/umap/locale/is.json +26 -10
  190. umap/static/umap/locale/it.js +26 -10
  191. umap/static/umap/locale/it.json +26 -10
  192. umap/static/umap/locale/ja.js +26 -10
  193. umap/static/umap/locale/ja.json +26 -10
  194. umap/static/umap/locale/ko.js +26 -10
  195. umap/static/umap/locale/ko.json +26 -10
  196. umap/static/umap/locale/lt.js +26 -10
  197. umap/static/umap/locale/lt.json +26 -10
  198. umap/static/umap/locale/ms.js +28 -12
  199. umap/static/umap/locale/ms.json +28 -12
  200. umap/static/umap/locale/nl.js +28 -12
  201. umap/static/umap/locale/nl.json +28 -12
  202. umap/static/umap/locale/no.js +26 -10
  203. umap/static/umap/locale/no.json +26 -10
  204. umap/static/umap/locale/pl.js +28 -12
  205. umap/static/umap/locale/pl.json +28 -12
  206. umap/static/umap/locale/pl_PL.json +26 -10
  207. umap/static/umap/locale/pt.js +16 -9
  208. umap/static/umap/locale/pt.json +16 -9
  209. umap/static/umap/locale/pt_BR.js +26 -10
  210. umap/static/umap/locale/pt_BR.json +26 -10
  211. umap/static/umap/locale/pt_PT.js +16 -9
  212. umap/static/umap/locale/pt_PT.json +16 -9
  213. umap/static/umap/locale/ro.js +26 -10
  214. umap/static/umap/locale/ro.json +26 -10
  215. umap/static/umap/locale/ru.js +26 -10
  216. umap/static/umap/locale/ru.json +26 -10
  217. umap/static/umap/locale/si.js +7 -7
  218. umap/static/umap/locale/si.json +7 -7
  219. umap/static/umap/locale/sk_SK.js +26 -10
  220. umap/static/umap/locale/sk_SK.json +26 -10
  221. umap/static/umap/locale/sl.js +26 -10
  222. umap/static/umap/locale/sl.json +26 -10
  223. umap/static/umap/locale/sr.js +26 -10
  224. umap/static/umap/locale/sr.json +26 -10
  225. umap/static/umap/locale/sv.js +27 -11
  226. umap/static/umap/locale/sv.json +27 -11
  227. umap/static/umap/locale/th_TH.js +28 -12
  228. umap/static/umap/locale/th_TH.json +28 -12
  229. umap/static/umap/locale/tr.js +26 -10
  230. umap/static/umap/locale/tr.json +26 -10
  231. umap/static/umap/locale/uk_UA.js +26 -10
  232. umap/static/umap/locale/uk_UA.json +26 -10
  233. umap/static/umap/locale/vi.js +26 -10
  234. umap/static/umap/locale/vi.json +26 -10
  235. umap/static/umap/locale/vi_VN.json +26 -10
  236. umap/static/umap/locale/zh.js +26 -10
  237. umap/static/umap/locale/zh.json +26 -10
  238. umap/static/umap/locale/zh_CN.json +26 -10
  239. umap/static/umap/locale/zh_TW.Big5.json +26 -10
  240. umap/static/umap/locale/zh_TW.js +34 -27
  241. umap/static/umap/locale/zh_TW.json +34 -27
  242. umap/static/umap/map.css +39 -530
  243. umap/static/umap/unittests/URLs.js +15 -15
  244. umap/static/umap/unittests/utils.js +23 -1
  245. umap/static/umap/vars.css +2 -1
  246. umap/static/umap/vendors/formbuilder/Leaflet.FormBuilder.js +5 -1
  247. umap/storage/__init__.py +3 -0
  248. umap/storage/fs.py +101 -0
  249. umap/storage/s3.py +61 -0
  250. umap/templates/base.html +2 -0
  251. umap/templates/registration/login.html +7 -6
  252. umap/templates/umap/components/alerts/alert.html +4 -0
  253. umap/templates/umap/css.html +6 -0
  254. umap/templates/umap/js.html +3 -2
  255. umap/templates/umap/map_init.html +6 -5
  256. umap/templates/umap/user_dashboard.html +20 -19
  257. umap/tests/base.py +5 -1
  258. umap/tests/fixtures/test_upload_simple_marker.json +19 -0
  259. umap/tests/integration/conftest.py +2 -1
  260. umap/tests/integration/test_anonymous_owned_map.py +18 -10
  261. umap/tests/integration/test_browser.py +16 -1
  262. umap/tests/integration/test_dashboard.py +1 -1
  263. umap/tests/integration/test_edit_datalayer.py +29 -7
  264. umap/tests/integration/test_import.py +28 -6
  265. umap/tests/integration/test_optimistic_merge.py +31 -8
  266. umap/tests/integration/test_owned_map.py +22 -16
  267. umap/tests/integration/test_popup.py +44 -0
  268. umap/tests/integration/test_save.py +35 -0
  269. umap/tests/integration/test_view_marker.py +12 -0
  270. umap/tests/integration/test_view_polyline.py +257 -0
  271. umap/tests/integration/test_websocket_sync.py +81 -9
  272. umap/tests/test_dashboard.py +82 -0
  273. umap/tests/test_datalayer.py +6 -7
  274. umap/tests/test_datalayer_s3.py +135 -0
  275. umap/tests/test_datalayer_views.py +28 -10
  276. umap/tests/test_empty_trash.py +34 -0
  277. umap/tests/test_map.py +12 -3
  278. umap/tests/test_map_views.py +69 -37
  279. umap/tests/test_statics.py +1 -1
  280. umap/tests/test_team_views.py +35 -1
  281. umap/tests/test_views.py +31 -52
  282. umap/urls.py +3 -3
  283. umap/views.py +126 -90
  284. {umap_project-2.7.3.dist-info → umap_project-2.8.0.dist-info}/METADATA +16 -13
  285. {umap_project-2.7.3.dist-info → umap_project-2.8.0.dist-info}/RECORD +289 -269
  286. umap/management/commands/purge_purgatory.py +0 -28
  287. umap/static/umap/js/umap.js +0 -1903
  288. umap/tests/test_purge_purgatory.py +0 -25
  289. /umap/{storage.py → storage/staticfiles.py} +0 -0
  290. {umap_project-2.7.3.dist-info → umap_project-2.8.0.dist-info}/WHEEL +0 -0
  291. {umap_project-2.7.3.dist-info → umap_project-2.8.0.dist-info}/entry_points.txt +0 -0
  292. {umap_project-2.7.3.dist-info → umap_project-2.8.0.dist-info}/licenses/LICENSE +0 -0
@@ -25,48 +25,6 @@ L.Util.copyToClipboard = (textToCopy) => {
25
25
  }
26
26
  }
27
27
 
28
- L.Util.queryString = (name, fallback) => {
29
- const decode = (s) => decodeURIComponent(s.replace(/\+/g, ' '))
30
- const qs = window.location.search.slice(1).split('&')
31
- const qa = {}
32
- for (const i in qs) {
33
- const key = qs[i].split('=')
34
- if (!key) continue
35
- qa[decode(key[0])] = key[1] ? decode(key[1]) : 1
36
- }
37
- return qa[name] || fallback
38
- }
39
-
40
- L.Util.booleanFromQueryString = (name) => {
41
- const value = L.Util.queryString(name)
42
- return value === '1' || value === 'true'
43
- }
44
-
45
- L.Util.setFromQueryString = (options, name) => {
46
- const value = L.Util.queryString(name)
47
- if (typeof value !== 'undefined') options[name] = value
48
- }
49
-
50
- L.Util.setBooleanFromQueryString = (options, name) => {
51
- const value = L.Util.queryString(name)
52
- if (typeof value !== 'undefined') options[name] = value === '1' || value === 'true'
53
- }
54
-
55
- L.Util.setNumberFromQueryString = (options, name) => {
56
- const value = +L.Util.queryString(name)
57
- if (!Number.isNaN(value)) options[name] = value
58
- }
59
-
60
- L.Util.setNullableBooleanFromQueryString = (options, name) => {
61
- let value = L.Util.queryString(name)
62
- if (typeof value !== 'undefined') {
63
- if (value === 'null') value = null
64
- else if (value === '0' || value === 'false') value = false
65
- else value = true
66
- options[name] = value
67
- }
68
- }
69
-
70
28
  L.DomUtil.add = (tagName, className, container, content) => {
71
29
  const el = L.DomUtil.create(tagName, className, container)
72
30
  if (content) {
@@ -212,22 +170,43 @@ L.DomUtil.contrastWCAG21 = (rgb) => {
212
170
  const contrast = (whiteLum + 0.05) / (lum + 0.05)
213
171
  return contrast > 3 ? 1 : 0
214
172
  }
173
+ L.DomUtil.colorNameToHex = (str) => {
174
+ const ctx = document.createElement('canvas').getContext('2d')
175
+ ctx.fillStyle = str
176
+ return ctx.fillStyle
177
+ }
178
+ L.DomUtil.hexToRGB = (hex) => {
179
+ return hex
180
+ .replace(
181
+ /^#?([a-f\d])([a-f\d])([a-f\d])$/i,
182
+ (m, r, g, b) => `#${r}${r}${g}${g}${b}${b}`
183
+ )
184
+ .substring(1)
185
+ .match(/.{2}/g)
186
+ .map((x) => Number.parseInt(x, 16))
187
+ }
215
188
 
216
189
  const _CACHE_CONSTRAST = {}
217
190
  L.DomUtil.contrastedColor = (el, bgcolor) => {
218
191
  // Return 0 for black and 1 for white
219
192
  // bgcolor is a human color, it can be a any keyword (purple…)
220
193
  if (typeof _CACHE_CONSTRAST[bgcolor] !== 'undefined') return _CACHE_CONSTRAST[bgcolor]
221
- let out = 0
222
194
  let rgb = window.getComputedStyle(el).getPropertyValue('background-color')
223
195
  rgb = L.DomUtil.RGBRegex.exec(rgb)
224
- if (!rgb || rgb.length !== 4) return out
225
- rgb = [
226
- Number.parseInt(rgb[1], 10),
227
- Number.parseInt(rgb[2], 10),
228
- Number.parseInt(rgb[3], 10),
229
- ]
230
- out = L.DomUtil.contrastWCAG21(rgb)
196
+ if (rgb && rgb.length === 4) {
197
+ rgb = [
198
+ Number.parseInt(rgb[1], 10),
199
+ Number.parseInt(rgb[2], 10),
200
+ Number.parseInt(rgb[3], 10),
201
+ ]
202
+ } else {
203
+ // The element may not yet be added to the DOM, so let's try
204
+ // another way
205
+ const hex = L.DomUtil.colorNameToHex(bgcolor)
206
+ rgb = L.DomUtil.hexToRGB(hex)
207
+ }
208
+ if (!rgb) return 1
209
+ const out = L.DomUtil.contrastWCAG21(rgb)
231
210
  if (bgcolor) _CACHE_CONSTRAST[bgcolor] = out
232
211
  return out
233
212
  }
@@ -221,21 +221,16 @@ L.FormBuilder.Element.include({
221
221
  this.label = L.DomUtil.create('label', '', this.getLabelParent())
222
222
  this.label.textContent = this.label.title = this.options.label
223
223
  if (this.options.helpEntries) {
224
- this.builder.map.help.button(this.label, this.options.helpEntries)
224
+ this.builder._umap.help.button(this.label, this.options.helpEntries)
225
225
  } else if (this.options.helpTooltip) {
226
226
  const info = L.DomUtil.create('i', 'info', this.label)
227
- L.DomEvent.on(
228
- info,
229
- 'mouseover',
230
- function () {
231
- this.builder.map.tooltip.open({
232
- anchor: info,
233
- content: this.options.helpTooltip,
234
- position: 'top',
235
- })
236
- },
237
- this
238
- )
227
+ L.DomEvent.on(info, 'mouseover', () => {
228
+ this.builder._umap.tooltip.open({
229
+ anchor: info,
230
+ content: this.options.helpTooltip,
231
+ position: 'top',
232
+ })
233
+ })
239
234
  }
240
235
  }
241
236
  },
@@ -264,6 +259,35 @@ L.FormBuilder.CheckBox.include({
264
259
  },
265
260
  })
266
261
 
262
+ L.FormBuilder.EditableText = L.FormBuilder.Element.extend({
263
+ build: function () {
264
+ this.input = L.DomUtil.create('span', this.options.className || '', this.parentNode)
265
+ this.input.contentEditable = true
266
+ this.fetch()
267
+ L.DomEvent.on(this.input, 'input', this.sync, this)
268
+ L.DomEvent.on(this.input, 'keypress', this.onKeyPress, this)
269
+ },
270
+
271
+ getParentNode: function () {
272
+ return this.form
273
+ },
274
+
275
+ value: function () {
276
+ return this.input.textContent
277
+ },
278
+
279
+ fetch: function () {
280
+ this.input.textContent = this.toHTML()
281
+ },
282
+
283
+ onKeyPress: function (event) {
284
+ if (event.keyCode === 13) {
285
+ event.preventDefault()
286
+ this.input.blur()
287
+ }
288
+ },
289
+ })
290
+
267
291
  L.FormBuilder.ColorPicker = L.FormBuilder.Input.extend({
268
292
  colors: U.COLORS,
269
293
  getParentNode: function () {
@@ -359,7 +383,7 @@ L.FormBuilder.SlideshowDelay = L.FormBuilder.IntSelect.extend({
359
383
  L.FormBuilder.DataLayerSwitcher = L.FormBuilder.Select.extend({
360
384
  getOptions: function () {
361
385
  const options = []
362
- this.builder.map.eachDataLayerReverse((datalayer) => {
386
+ this.builder._umap.eachDataLayerReverse((datalayer) => {
363
387
  if (
364
388
  datalayer.isLoaded() &&
365
389
  !datalayer.isDataReadOnly() &&
@@ -376,11 +400,11 @@ L.FormBuilder.DataLayerSwitcher = L.FormBuilder.Select.extend({
376
400
  },
377
401
 
378
402
  toJS: function () {
379
- return this.builder.map.datalayers[this.value()]
403
+ return this.builder._umap.datalayers[this.value()]
380
404
  },
381
405
 
382
406
  set: function () {
383
- this.builder.map.lastUsedDataLayer = this.toJS()
407
+ this.builder._umap.lastUsedDataLayer = this.toJS()
384
408
  this.obj.changeDataLayer(this.toJS())
385
409
  },
386
410
  })
@@ -400,7 +424,7 @@ L.FormBuilder.DataFormat = L.FormBuilder.Select.extend({
400
424
  L.FormBuilder.LicenceChooser = L.FormBuilder.Select.extend({
401
425
  getOptions: function () {
402
426
  const licences = []
403
- const licencesList = this.builder.obj.options.licences
427
+ const licencesList = this.builder.obj.properties.licences
404
428
  let licence
405
429
  for (const i in licencesList) {
406
430
  licence = licencesList[i]
@@ -410,11 +434,11 @@ L.FormBuilder.LicenceChooser = L.FormBuilder.Select.extend({
410
434
  },
411
435
 
412
436
  toHTML: function () {
413
- return this.get().name
437
+ return this.get()?.name
414
438
  },
415
439
 
416
440
  toJS: function () {
417
- return this.builder.obj.options.licences[this.value()]
441
+ return this.builder.obj.properties.licences[this.value()]
418
442
  },
419
443
  })
420
444
 
@@ -453,6 +477,17 @@ L.FormBuilder.BlurInput.include({
453
477
  },
454
478
  })
455
479
 
480
+ // Adds an autocomplete using all available user defined properties
481
+ L.FormBuilder.PropertyInput = L.FormBuilder.BlurInput.extend({
482
+ build: function () {
483
+ L.FormBuilder.BlurInput.prototype.build.call(this)
484
+ const autocomplete = new U.AutocompleteDatalist(this.input)
485
+ // Will be used on Umap and DataLayer
486
+ const properties = this.builder.obj.allProperties()
487
+ autocomplete.suggestions = properties
488
+ },
489
+ })
490
+
456
491
  L.FormBuilder.IconUrl = L.FormBuilder.BlurInput.extend({
457
492
  type: () => 'hidden',
458
493
 
@@ -469,8 +504,8 @@ L.FormBuilder.IconUrl = L.FormBuilder.BlurInput.extend({
469
504
  onDefine: async function () {
470
505
  this.buttons.innerHTML = ''
471
506
  this.footer.innerHTML = ''
472
- const [{ pictogram_list }, response, error] = await this.builder.map.server.get(
473
- this.builder.map.options.urls.pictogram_list_json
507
+ const [{ pictogram_list }, response, error] = await this.builder._umap.server.get(
508
+ this.builder._umap.properties.urls.pictogram_list_json
474
509
  )
475
510
  if (!error) this.pictogram_list = pictogram_list
476
511
  this.buildTabs()
@@ -616,7 +651,7 @@ L.FormBuilder.IconUrl = L.FormBuilder.BlurInput.extend({
616
651
  categories[category].push(props)
617
652
  }
618
653
  const sorted = Object.entries(categories).toSorted(([a], [b]) =>
619
- U.Utils.naturalSort(a, b, L.lang)
654
+ U.Utils.naturalSort(a, b, U.lang)
620
655
  )
621
656
  for (const [name, items] of sorted) {
622
657
  this.addCategory(items, name)
@@ -1115,10 +1150,11 @@ U.FormBuilder = L.FormBuilder.extend({
1115
1150
  },
1116
1151
 
1117
1152
  customHandlers: {
1118
- sortKey: 'BlurInput',
1153
+ sortKey: 'PropertyInput',
1119
1154
  easing: 'Switch',
1120
- facetKey: 'BlurInput',
1121
- slugKey: 'BlurInput',
1155
+ facetKey: 'PropertyInput',
1156
+ slugKey: 'PropertyInput',
1157
+ labelKey: 'PropertyInput',
1122
1158
  },
1123
1159
 
1124
1160
  computeDefaultOptions: function () {
@@ -1167,8 +1203,8 @@ U.FormBuilder = L.FormBuilder.extend({
1167
1203
  }
1168
1204
  },
1169
1205
 
1170
- initialize: function (obj, fields, options) {
1171
- this.map = obj.map || obj.getMap()
1206
+ initialize: function (obj, fields, options = {}) {
1207
+ this._umap = obj._umap || options.umap
1172
1208
  this.computeDefaultOptions()
1173
1209
  L.FormBuilder.prototype.initialize.call(this, obj, fields, options)
1174
1210
  this.on('finish', this.finish)
@@ -1185,6 +1221,21 @@ U.FormBuilder = L.FormBuilder.extend({
1185
1221
  }
1186
1222
  },
1187
1223
 
1224
+ getter: function (field) {
1225
+ const path = field.split('.')
1226
+ let value = this.obj
1227
+ let sub
1228
+ for (sub of path) {
1229
+ try {
1230
+ value = value[sub]
1231
+ } catch {
1232
+ console.log(field)
1233
+ }
1234
+ }
1235
+ if (value === undefined) values = U.SCHEMA[sub]?.default
1236
+ return value
1237
+ },
1238
+
1188
1239
  finish: (event) => {
1189
1240
  event.helper?.input?.blur()
1190
1241
  },
Binary file
@@ -183,12 +183,12 @@ const locale = {
183
183
  "Icon shape": "Icon shape",
184
184
  "Icon symbol": "Icon symbol",
185
185
  "If false, the polygon or line will act as a part of the underlying map.": "If false, the polygon or line will act as a part of the underlying map.",
186
- "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "|ፍሬሙ ከተሻሻለ ቁመት ጋር (በፒክሰል) {{{http://iframe.url.com|height}}}",
187
- "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}",
186
+ "Iframe with custom height (in px): {{{https://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{https://iframe.url.com|height}}}",
187
+ "Iframe with custom height and width (in px): {{{https://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{https://iframe.url.com|height*width}}}",
188
188
  "iframe": "iframe",
189
- "Iframe: {{{http://iframe.url.com}}}": "|ፍሬም፡ {{{http://iframe.url.com}}}",
190
- "Image with custom width (in px): {{http://image.url.com|width}}": "የተስተካከለ ጉን ያለው ምስል (በፒክስል) {{http://image.url.com|width}}",
191
- "Image: {{http://image.url.com}}": "ምስል፡{{http://image.url.com}}",
189
+ "Iframe: {{{https://iframe.url.com}}}": "Iframe: {{{https://iframe.url.com}}}",
190
+ "Image with custom width (in px): {{https://image.url.com|width}}": "Image with custom width (in px): {{https://image.url.com|width}}",
191
+ "Image: {{https://image.url.com}}": "Image: {{https://image.url.com}}",
192
192
  "Import data": "መረጃ አምጣ",
193
193
  "Import in a new layer": "አዲስ ሌየር አምጣ",
194
194
  "Imports all umap data, including layers and settings.": "ሌየር እና ሁኔታዎቹን ጨምሮ ሁሉንም የዩማፕ መረጃ ያመጣል",
@@ -216,7 +216,7 @@ const locale = {
216
216
  "Limit bounds": "መድረሻዎቹን ምረጥ",
217
217
  "Link to view the map": "Link to view the map",
218
218
  "Link to…": "Link to…",
219
- "Link with text: [[http://example.com|text of the link]]": "ከዚህ ፅሁፍ ጋር አስተሳስር፡ [[http://example.com|text of the link]]",
219
+ "Link with text: [[https://example.com|text of the link]]": "Link with text: [[https://example.com|text of the link]]",
220
220
  "Long credits": "ክሬዲቶች በመጫን ላይ",
221
221
  "Longitude": "ሎንጊትዩድ",
222
222
  "Make main shape": "ዋና ቅርፅ አድርግ",
@@ -320,7 +320,7 @@ const locale = {
320
320
  "Show this layer in the caption": "Show this layer in the caption",
321
321
  "Show/hide layer": "ሌየሩን አሳይ/ደብቅ",
322
322
  "Side panel": "የጎን ፓኔል",
323
- "Simple link: [[http://example.com]]": "ቀላል መገኛ: [[http://example.com]]",
323
+ "Simple link: [[https://example.com]]": "Simple link: [[https://example.com]]",
324
324
  "Simplify": "Simplify",
325
325
  "Skipping unknown geometry.type: {type}": "Skipping unknown geometry.type: {type}",
326
326
  "Slideshow": "ስላይድሾው",
@@ -445,7 +445,6 @@ const locale = {
445
445
  "More info about Overpass syntax": "More info about Overpass syntax",
446
446
  "For more complex needs, see": "For more complex needs, see",
447
447
  "Choose data": "Choose data",
448
- "Import helpers:": "Import helpers:",
449
448
  "Choose the format": "Choose the format",
450
449
  "Choose the layer": "Choose the layer",
451
450
  "Layer name": "Layer name",
@@ -477,7 +476,6 @@ const locale = {
477
476
  "Search area": "Search area",
478
477
  "Type area name, or let empty to load data in current map view": "Type area name, or let empty to load data in current map view",
479
478
  "Data successfully imported!": "Data successfully imported!",
480
- "My Dashboard ({username})": "My Dashboard ({username})",
481
479
  "Clear data": "Clear data",
482
480
  "Remove layers": "Remove layers",
483
481
  "Categorized": "Categorized",
@@ -504,7 +502,25 @@ const locale = {
504
502
  "Property name to compute circles": "Property name to compute circles",
505
503
  "Min circle radius": "Min circle radius",
506
504
  "Max circle radius": "Max circle radius",
507
- "Display the open browser control": "Display the open browser control"
505
+ "Display the open browser control": "Display the open browser control",
506
+ "Copy as GeoJSON": "Copy as GeoJSON",
507
+ "Please zoom in to edit the geometry": "Please zoom in to edit the geometry",
508
+ "New map": "New map",
509
+ "My maps": "My maps",
510
+ "My teams": "My teams",
511
+ "My profile": "My profile",
512
+ "Type new owner's username": "Type new owner's username",
513
+ "Type editor's username": "Type editor's username",
514
+ "Map": "Map",
515
+ "Manage collaborators": "Manage collaborators",
516
+ "show/hide all layers": "show/hide all layers",
517
+ "zoom to data extent": "zoom to data extent",
518
+ "download visible data": "download visible data",
519
+ "{connectedPeers} peer(s) currently connected to this map": "{connectedPeers} peer(s) currently connected to this map",
520
+ "Import helpers": "Import helpers",
521
+ "Import helpers will fill the URL field for you.": "Import helpers will fill the URL field for you.",
522
+ "Wikipedia": "Wikipedia",
523
+ "Save draft": "Save draft"
508
524
  }
509
525
  L.registerLocale("am_ET", locale)
510
526
  L.setLocale("am_ET")
@@ -183,12 +183,12 @@
183
183
  "Icon shape": "Icon shape",
184
184
  "Icon symbol": "Icon symbol",
185
185
  "If false, the polygon or line will act as a part of the underlying map.": "If false, the polygon or line will act as a part of the underlying map.",
186
- "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "|ፍሬሙ ከተሻሻለ ቁመት ጋር (በፒክሰል) {{{http://iframe.url.com|height}}}",
187
- "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}",
186
+ "Iframe with custom height (in px): {{{https://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{https://iframe.url.com|height}}}",
187
+ "Iframe with custom height and width (in px): {{{https://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{https://iframe.url.com|height*width}}}",
188
188
  "iframe": "iframe",
189
- "Iframe: {{{http://iframe.url.com}}}": "|ፍሬም፡ {{{http://iframe.url.com}}}",
190
- "Image with custom width (in px): {{http://image.url.com|width}}": "የተስተካከለ ጉን ያለው ምስል (በፒክስል) {{http://image.url.com|width}}",
191
- "Image: {{http://image.url.com}}": "ምስል፡{{http://image.url.com}}",
189
+ "Iframe: {{{https://iframe.url.com}}}": "Iframe: {{{https://iframe.url.com}}}",
190
+ "Image with custom width (in px): {{https://image.url.com|width}}": "Image with custom width (in px): {{https://image.url.com|width}}",
191
+ "Image: {{https://image.url.com}}": "Image: {{https://image.url.com}}",
192
192
  "Import data": "መረጃ አምጣ",
193
193
  "Import in a new layer": "አዲስ ሌየር አምጣ",
194
194
  "Imports all umap data, including layers and settings.": "ሌየር እና ሁኔታዎቹን ጨምሮ ሁሉንም የዩማፕ መረጃ ያመጣል",
@@ -216,7 +216,7 @@
216
216
  "Limit bounds": "መድረሻዎቹን ምረጥ",
217
217
  "Link to view the map": "Link to view the map",
218
218
  "Link to…": "Link to…",
219
- "Link with text: [[http://example.com|text of the link]]": "ከዚህ ፅሁፍ ጋር አስተሳስር፡ [[http://example.com|text of the link]]",
219
+ "Link with text: [[https://example.com|text of the link]]": "Link with text: [[https://example.com|text of the link]]",
220
220
  "Long credits": "ክሬዲቶች በመጫን ላይ",
221
221
  "Longitude": "ሎንጊትዩድ",
222
222
  "Make main shape": "ዋና ቅርፅ አድርግ",
@@ -320,7 +320,7 @@
320
320
  "Show this layer in the caption": "Show this layer in the caption",
321
321
  "Show/hide layer": "ሌየሩን አሳይ/ደብቅ",
322
322
  "Side panel": "የጎን ፓኔል",
323
- "Simple link: [[http://example.com]]": "ቀላል መገኛ: [[http://example.com]]",
323
+ "Simple link: [[https://example.com]]": "Simple link: [[https://example.com]]",
324
324
  "Simplify": "Simplify",
325
325
  "Skipping unknown geometry.type: {type}": "Skipping unknown geometry.type: {type}",
326
326
  "Slideshow": "ስላይድሾው",
@@ -445,7 +445,6 @@
445
445
  "More info about Overpass syntax": "More info about Overpass syntax",
446
446
  "For more complex needs, see": "For more complex needs, see",
447
447
  "Choose data": "Choose data",
448
- "Import helpers:": "Import helpers:",
449
448
  "Choose the format": "Choose the format",
450
449
  "Choose the layer": "Choose the layer",
451
450
  "Layer name": "Layer name",
@@ -477,7 +476,6 @@
477
476
  "Search area": "Search area",
478
477
  "Type area name, or let empty to load data in current map view": "Type area name, or let empty to load data in current map view",
479
478
  "Data successfully imported!": "Data successfully imported!",
480
- "My Dashboard ({username})": "My Dashboard ({username})",
481
479
  "Clear data": "Clear data",
482
480
  "Remove layers": "Remove layers",
483
481
  "Categorized": "Categorized",
@@ -504,5 +502,23 @@
504
502
  "Property name to compute circles": "Property name to compute circles",
505
503
  "Min circle radius": "Min circle radius",
506
504
  "Max circle radius": "Max circle radius",
507
- "Display the open browser control": "Display the open browser control"
505
+ "Display the open browser control": "Display the open browser control",
506
+ "Copy as GeoJSON": "Copy as GeoJSON",
507
+ "Please zoom in to edit the geometry": "Please zoom in to edit the geometry",
508
+ "New map": "New map",
509
+ "My maps": "My maps",
510
+ "My teams": "My teams",
511
+ "My profile": "My profile",
512
+ "Type new owner's username": "Type new owner's username",
513
+ "Type editor's username": "Type editor's username",
514
+ "Map": "Map",
515
+ "Manage collaborators": "Manage collaborators",
516
+ "show/hide all layers": "show/hide all layers",
517
+ "zoom to data extent": "zoom to data extent",
518
+ "download visible data": "download visible data",
519
+ "{connectedPeers} peer(s) currently connected to this map": "{connectedPeers} peer(s) currently connected to this map",
520
+ "Import helpers": "Import helpers",
521
+ "Import helpers will fill the URL field for you.": "Import helpers will fill the URL field for you.",
522
+ "Wikipedia": "Wikipedia",
523
+ "Save draft": "Save draft"
508
524
  }
@@ -183,12 +183,12 @@ const locale = {
183
183
  "Icon shape": "Icon shape",
184
184
  "Icon symbol": "Icon symbol",
185
185
  "If false, the polygon or line will act as a part of the underlying map.": "If false, the polygon or line will act as a part of the underlying map.",
186
- "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}",
187
- "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}",
186
+ "Iframe with custom height (in px): {{{https://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{https://iframe.url.com|height}}}",
187
+ "Iframe with custom height and width (in px): {{{https://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{https://iframe.url.com|height*width}}}",
188
188
  "iframe": "iframe",
189
- "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}",
190
- "Image with custom width (in px): {{http://image.url.com|width}}": "Image with custom width (in px): {{http://image.url.com|width}}",
191
- "Image: {{http://image.url.com}}": "Image: {{http://image.url.com}}",
189
+ "Iframe: {{{https://iframe.url.com}}}": "Iframe: {{{https://iframe.url.com}}}",
190
+ "Image with custom width (in px): {{https://image.url.com|width}}": "Image with custom width (in px): {{https://image.url.com|width}}",
191
+ "Image: {{https://image.url.com}}": "Image: {{https://image.url.com}}",
192
192
  "Import data": "Import data",
193
193
  "Import in a new layer": "Import in a new layer",
194
194
  "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.",
@@ -216,7 +216,7 @@ const locale = {
216
216
  "Limit bounds": "Limit bounds",
217
217
  "Link to view the map": "Link to view the map",
218
218
  "Link to…": "الرابط إلى...",
219
- "Link with text: [[http://example.com|text of the link]]": "Link with text: [[http://example.com|text of the link]]",
219
+ "Link with text: [[https://example.com|text of the link]]": "Link with text: [[https://example.com|text of the link]]",
220
220
  "Long credits": "Long credits",
221
221
  "Longitude": "Longitude",
222
222
  "Make main shape": "Make main shape",
@@ -320,7 +320,7 @@ const locale = {
320
320
  "Show this layer in the caption": "Show this layer in the caption",
321
321
  "Show/hide layer": "Show/hide layer",
322
322
  "Side panel": "لوحة جانبية",
323
- "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]",
323
+ "Simple link: [[https://example.com]]": "Simple link: [[https://example.com]]",
324
324
  "Simplify": "بسّط",
325
325
  "Skipping unknown geometry.type: {type}": "Skipping unknown geometry.type: {type}",
326
326
  "Slideshow": "Slideshow",
@@ -445,7 +445,6 @@ const locale = {
445
445
  "More info about Overpass syntax": "More info about Overpass syntax",
446
446
  "For more complex needs, see": "For more complex needs, see",
447
447
  "Choose data": "Choose data",
448
- "Import helpers:": "Import helpers:",
449
448
  "Choose the format": "Choose the format",
450
449
  "Choose the layer": "Choose the layer",
451
450
  "Layer name": "Layer name",
@@ -477,7 +476,6 @@ const locale = {
477
476
  "Search area": "Search area",
478
477
  "Type area name, or let empty to load data in current map view": "Type area name, or let empty to load data in current map view",
479
478
  "Data successfully imported!": "Data successfully imported!",
480
- "My Dashboard ({username})": "My Dashboard ({username})",
481
479
  "Clear data": "Clear data",
482
480
  "Remove layers": "Remove layers",
483
481
  "Categorized": "Categorized",
@@ -504,7 +502,25 @@ const locale = {
504
502
  "Property name to compute circles": "Property name to compute circles",
505
503
  "Min circle radius": "Min circle radius",
506
504
  "Max circle radius": "Max circle radius",
507
- "Display the open browser control": "Display the open browser control"
505
+ "Display the open browser control": "Display the open browser control",
506
+ "Copy as GeoJSON": "Copy as GeoJSON",
507
+ "Please zoom in to edit the geometry": "Please zoom in to edit the geometry",
508
+ "New map": "New map",
509
+ "My maps": "My maps",
510
+ "My teams": "My teams",
511
+ "My profile": "My profile",
512
+ "Type new owner's username": "Type new owner's username",
513
+ "Type editor's username": "Type editor's username",
514
+ "Map": "Map",
515
+ "Manage collaborators": "Manage collaborators",
516
+ "show/hide all layers": "show/hide all layers",
517
+ "zoom to data extent": "zoom to data extent",
518
+ "download visible data": "download visible data",
519
+ "{connectedPeers} peer(s) currently connected to this map": "{connectedPeers} peer(s) currently connected to this map",
520
+ "Import helpers": "Import helpers",
521
+ "Import helpers will fill the URL field for you.": "Import helpers will fill the URL field for you.",
522
+ "Wikipedia": "Wikipedia",
523
+ "Save draft": "Save draft"
508
524
  }
509
525
  L.registerLocale("ar", locale)
510
526
  L.setLocale("ar")
@@ -183,12 +183,12 @@
183
183
  "Icon shape": "Icon shape",
184
184
  "Icon symbol": "Icon symbol",
185
185
  "If false, the polygon or line will act as a part of the underlying map.": "If false, the polygon or line will act as a part of the underlying map.",
186
- "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}",
187
- "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}",
186
+ "Iframe with custom height (in px): {{{https://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{https://iframe.url.com|height}}}",
187
+ "Iframe with custom height and width (in px): {{{https://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{https://iframe.url.com|height*width}}}",
188
188
  "iframe": "iframe",
189
- "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}",
190
- "Image with custom width (in px): {{http://image.url.com|width}}": "Image with custom width (in px): {{http://image.url.com|width}}",
191
- "Image: {{http://image.url.com}}": "Image: {{http://image.url.com}}",
189
+ "Iframe: {{{https://iframe.url.com}}}": "Iframe: {{{https://iframe.url.com}}}",
190
+ "Image with custom width (in px): {{https://image.url.com|width}}": "Image with custom width (in px): {{https://image.url.com|width}}",
191
+ "Image: {{https://image.url.com}}": "Image: {{https://image.url.com}}",
192
192
  "Import data": "Import data",
193
193
  "Import in a new layer": "Import in a new layer",
194
194
  "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.",
@@ -216,7 +216,7 @@
216
216
  "Limit bounds": "Limit bounds",
217
217
  "Link to view the map": "Link to view the map",
218
218
  "Link to…": "الرابط إلى...",
219
- "Link with text: [[http://example.com|text of the link]]": "Link with text: [[http://example.com|text of the link]]",
219
+ "Link with text: [[https://example.com|text of the link]]": "Link with text: [[https://example.com|text of the link]]",
220
220
  "Long credits": "Long credits",
221
221
  "Longitude": "Longitude",
222
222
  "Make main shape": "Make main shape",
@@ -320,7 +320,7 @@
320
320
  "Show this layer in the caption": "Show this layer in the caption",
321
321
  "Show/hide layer": "Show/hide layer",
322
322
  "Side panel": "لوحة جانبية",
323
- "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]",
323
+ "Simple link: [[https://example.com]]": "Simple link: [[https://example.com]]",
324
324
  "Simplify": "بسّط",
325
325
  "Skipping unknown geometry.type: {type}": "Skipping unknown geometry.type: {type}",
326
326
  "Slideshow": "Slideshow",
@@ -445,7 +445,6 @@
445
445
  "More info about Overpass syntax": "More info about Overpass syntax",
446
446
  "For more complex needs, see": "For more complex needs, see",
447
447
  "Choose data": "Choose data",
448
- "Import helpers:": "Import helpers:",
449
448
  "Choose the format": "Choose the format",
450
449
  "Choose the layer": "Choose the layer",
451
450
  "Layer name": "Layer name",
@@ -477,7 +476,6 @@
477
476
  "Search area": "Search area",
478
477
  "Type area name, or let empty to load data in current map view": "Type area name, or let empty to load data in current map view",
479
478
  "Data successfully imported!": "Data successfully imported!",
480
- "My Dashboard ({username})": "My Dashboard ({username})",
481
479
  "Clear data": "Clear data",
482
480
  "Remove layers": "Remove layers",
483
481
  "Categorized": "Categorized",
@@ -504,5 +502,23 @@
504
502
  "Property name to compute circles": "Property name to compute circles",
505
503
  "Min circle radius": "Min circle radius",
506
504
  "Max circle radius": "Max circle radius",
507
- "Display the open browser control": "Display the open browser control"
505
+ "Display the open browser control": "Display the open browser control",
506
+ "Copy as GeoJSON": "Copy as GeoJSON",
507
+ "Please zoom in to edit the geometry": "Please zoom in to edit the geometry",
508
+ "New map": "New map",
509
+ "My maps": "My maps",
510
+ "My teams": "My teams",
511
+ "My profile": "My profile",
512
+ "Type new owner's username": "Type new owner's username",
513
+ "Type editor's username": "Type editor's username",
514
+ "Map": "Map",
515
+ "Manage collaborators": "Manage collaborators",
516
+ "show/hide all layers": "show/hide all layers",
517
+ "zoom to data extent": "zoom to data extent",
518
+ "download visible data": "download visible data",
519
+ "{connectedPeers} peer(s) currently connected to this map": "{connectedPeers} peer(s) currently connected to this map",
520
+ "Import helpers": "Import helpers",
521
+ "Import helpers will fill the URL field for you.": "Import helpers will fill the URL field for you.",
522
+ "Wikipedia": "Wikipedia",
523
+ "Save draft": "Save draft"
508
524
  }