umap-project 2.5.1__py3-none-any.whl → 2.6.0b0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of umap-project might be problematic. Click here for more details.

Files changed (193) hide show
  1. umap/__init__.py +1 -1
  2. umap/admin.py +6 -1
  3. umap/context_processors.py +2 -1
  4. umap/decorators.py +13 -2
  5. umap/forms.py +26 -2
  6. umap/locale/br/LC_MESSAGES/django.mo +0 -0
  7. umap/locale/br/LC_MESSAGES/django.po +252 -146
  8. umap/locale/ca/LC_MESSAGES/django.mo +0 -0
  9. umap/locale/ca/LC_MESSAGES/django.po +274 -162
  10. umap/locale/cs_CZ/LC_MESSAGES/django.mo +0 -0
  11. umap/locale/cs_CZ/LC_MESSAGES/django.po +261 -150
  12. umap/locale/de/LC_MESSAGES/django.mo +0 -0
  13. umap/locale/de/LC_MESSAGES/django.po +299 -187
  14. umap/locale/el/LC_MESSAGES/django.mo +0 -0
  15. umap/locale/el/LC_MESSAGES/django.po +215 -159
  16. umap/locale/en/LC_MESSAGES/django.po +211 -155
  17. umap/locale/es/LC_MESSAGES/django.mo +0 -0
  18. umap/locale/es/LC_MESSAGES/django.po +255 -144
  19. umap/locale/eu/LC_MESSAGES/django.mo +0 -0
  20. umap/locale/eu/LC_MESSAGES/django.po +254 -198
  21. umap/locale/fa_IR/LC_MESSAGES/django.mo +0 -0
  22. umap/locale/fa_IR/LC_MESSAGES/django.po +346 -234
  23. umap/locale/fr/LC_MESSAGES/django.mo +0 -0
  24. umap/locale/fr/LC_MESSAGES/django.po +216 -160
  25. umap/locale/hu/LC_MESSAGES/django.mo +0 -0
  26. umap/locale/hu/LC_MESSAGES/django.po +215 -159
  27. umap/locale/it/LC_MESSAGES/django.mo +0 -0
  28. umap/locale/it/LC_MESSAGES/django.po +252 -146
  29. umap/locale/ms/LC_MESSAGES/django.mo +0 -0
  30. umap/locale/ms/LC_MESSAGES/django.po +252 -146
  31. umap/locale/pl/LC_MESSAGES/django.mo +0 -0
  32. umap/locale/pl/LC_MESSAGES/django.po +254 -148
  33. umap/locale/pt/LC_MESSAGES/django.mo +0 -0
  34. umap/locale/pt/LC_MESSAGES/django.po +215 -159
  35. umap/locale/sv/LC_MESSAGES/django.mo +0 -0
  36. umap/locale/sv/LC_MESSAGES/django.po +254 -143
  37. umap/locale/th_TH/LC_MESSAGES/django.mo +0 -0
  38. umap/locale/th_TH/LC_MESSAGES/django.po +125 -70
  39. umap/locale/zh_TW/LC_MESSAGES/django.mo +0 -0
  40. umap/locale/zh_TW/LC_MESSAGES/django.po +256 -145
  41. umap/migrations/0022_add_team.py +94 -0
  42. umap/models.py +45 -10
  43. umap/settings/__init__.py +2 -0
  44. umap/settings/base.py +3 -2
  45. umap/static/umap/base.css +32 -41
  46. umap/static/umap/content.css +19 -25
  47. umap/static/umap/css/icon.css +63 -37
  48. umap/static/umap/css/importers.css +1 -1
  49. umap/static/umap/css/slideshow.css +7 -5
  50. umap/static/umap/css/tableeditor.css +4 -3
  51. umap/static/umap/img/16-white.svg +1 -4
  52. umap/static/umap/img/16.svg +2 -6
  53. umap/static/umap/img/24-white.svg +4 -4
  54. umap/static/umap/img/24.svg +6 -6
  55. umap/static/umap/img/source/16-white.svg +2 -5
  56. umap/static/umap/img/source/16.svg +3 -7
  57. umap/static/umap/img/source/24-white.svg +7 -14
  58. umap/static/umap/img/source/24.svg +10 -17
  59. umap/static/umap/js/components/alerts/alert.css +20 -8
  60. umap/static/umap/js/modules/autocomplete.js +3 -3
  61. umap/static/umap/js/modules/browser.js +4 -3
  62. umap/static/umap/js/modules/caption.js +9 -11
  63. umap/static/umap/js/modules/data/features.js +994 -0
  64. umap/static/umap/js/modules/data/layer.js +1210 -0
  65. umap/static/umap/js/modules/formatter.js +12 -3
  66. umap/static/umap/js/modules/global.js +21 -5
  67. umap/static/umap/js/modules/permissions.js +280 -0
  68. umap/static/umap/js/{umap.icon.js → modules/rendering/icon.js} +77 -56
  69. umap/static/umap/js/modules/rendering/layers/base.js +105 -0
  70. umap/static/umap/js/modules/rendering/layers/classified.js +484 -0
  71. umap/static/umap/js/modules/rendering/layers/cluster.js +103 -0
  72. umap/static/umap/js/modules/rendering/layers/heat.js +182 -0
  73. umap/static/umap/js/modules/rendering/popup.js +99 -0
  74. umap/static/umap/js/modules/rendering/template.js +217 -0
  75. umap/static/umap/js/modules/rendering/ui.js +573 -0
  76. umap/static/umap/js/modules/schema.js +24 -0
  77. umap/static/umap/js/modules/share.js +66 -45
  78. umap/static/umap/js/modules/sync/updaters.js +9 -10
  79. umap/static/umap/js/modules/tableeditor.js +7 -7
  80. umap/static/umap/js/modules/ui/dialog.js +8 -4
  81. umap/static/umap/js/modules/utils.js +22 -13
  82. umap/static/umap/js/umap.controls.js +79 -146
  83. umap/static/umap/js/umap.core.js +9 -9
  84. umap/static/umap/js/umap.forms.js +32 -12
  85. umap/static/umap/js/umap.js +65 -63
  86. umap/static/umap/locale/br.js +35 -35
  87. umap/static/umap/locale/br.json +35 -35
  88. umap/static/umap/locale/ca.js +50 -50
  89. umap/static/umap/locale/ca.json +50 -50
  90. umap/static/umap/locale/de.js +136 -136
  91. umap/static/umap/locale/de.json +136 -136
  92. umap/static/umap/locale/el.js +47 -47
  93. umap/static/umap/locale/el.json +47 -47
  94. umap/static/umap/locale/en.js +7 -1
  95. umap/static/umap/locale/en.json +7 -1
  96. umap/static/umap/locale/fa_IR.js +44 -44
  97. umap/static/umap/locale/fa_IR.json +44 -44
  98. umap/static/umap/locale/fr.js +8 -2
  99. umap/static/umap/locale/fr.json +8 -2
  100. umap/static/umap/locale/pt.js +17 -17
  101. umap/static/umap/locale/pt.json +17 -17
  102. umap/static/umap/locale/pt_PT.js +207 -207
  103. umap/static/umap/locale/pt_PT.json +207 -207
  104. umap/static/umap/locale/th_TH.js +25 -25
  105. umap/static/umap/locale/th_TH.json +25 -25
  106. umap/static/umap/map.css +107 -104
  107. umap/static/umap/nav.css +19 -10
  108. umap/static/umap/unittests/utils.js +230 -107
  109. umap/static/umap/vendors/csv2geojson/csv2geojson.js +62 -40
  110. umap/static/umap/vendors/markercluster/MarkerCluster.Default.css +1 -1
  111. umap/storage.py +1 -0
  112. umap/templates/404.html +5 -1
  113. umap/templates/500.html +3 -1
  114. umap/templates/auth/user_detail.html +8 -2
  115. umap/templates/auth/user_form.html +19 -10
  116. umap/templates/auth/user_stars.html +8 -2
  117. umap/templates/base.html +1 -0
  118. umap/templates/registration/login.html +18 -3
  119. umap/templates/umap/about.html +1 -0
  120. umap/templates/umap/about_summary.html +22 -7
  121. umap/templates/umap/components/alerts/alert.html +42 -21
  122. umap/templates/umap/content.html +2 -0
  123. umap/templates/umap/content_footer.html +6 -2
  124. umap/templates/umap/css.html +1 -0
  125. umap/templates/umap/dashboard_menu.html +15 -0
  126. umap/templates/umap/home.html +14 -4
  127. umap/templates/umap/js.html +4 -9
  128. umap/templates/umap/login_popup_end.html +10 -4
  129. umap/templates/umap/map_detail.html +8 -2
  130. umap/templates/umap/map_fragment.html +3 -1
  131. umap/templates/umap/map_init.html +2 -1
  132. umap/templates/umap/map_list.html +4 -3
  133. umap/templates/umap/map_table.html +36 -12
  134. umap/templates/umap/messages.html +0 -1
  135. umap/templates/umap/navigation.html +2 -1
  136. umap/templates/umap/password_change.html +5 -1
  137. umap/templates/umap/password_change_done.html +8 -2
  138. umap/templates/umap/search.html +8 -2
  139. umap/templates/umap/search_bar.html +1 -0
  140. umap/templates/umap/team_confirm_delete.html +19 -0
  141. umap/templates/umap/team_detail.html +27 -0
  142. umap/templates/umap/team_form.html +60 -0
  143. umap/templates/umap/user_dashboard.html +7 -9
  144. umap/templates/umap/user_teams.html +51 -0
  145. umap/tests/base.py +8 -1
  146. umap/tests/conftest.py +6 -0
  147. umap/tests/fixtures/test_circles_layer.geojson +219 -0
  148. umap/tests/fixtures/test_upload_georss.xml +20 -0
  149. umap/tests/integration/conftest.py +18 -4
  150. umap/tests/integration/helpers.py +12 -0
  151. umap/tests/integration/test_anonymous_owned_map.py +23 -0
  152. umap/tests/integration/test_basics.py +29 -0
  153. umap/tests/integration/test_caption.py +20 -0
  154. umap/tests/integration/test_circles_layer.py +69 -0
  155. umap/tests/integration/test_draw_polygon.py +110 -13
  156. umap/tests/integration/test_draw_polyline.py +8 -18
  157. umap/tests/integration/test_edit_datalayer.py +1 -1
  158. umap/tests/integration/test_import.py +64 -5
  159. umap/tests/integration/test_owned_map.py +21 -13
  160. umap/tests/integration/test_team.py +47 -0
  161. umap/tests/integration/test_tilelayer.py +19 -2
  162. umap/tests/integration/test_view_marker.py +28 -1
  163. umap/tests/integration/test_websocket_sync.py +5 -5
  164. umap/tests/test_datalayer.py +32 -7
  165. umap/tests/test_datalayer_views.py +1 -1
  166. umap/tests/test_map.py +30 -4
  167. umap/tests/test_map_views.py +2 -2
  168. umap/tests/test_statics.py +40 -0
  169. umap/tests/test_team_views.py +131 -0
  170. umap/tests/test_views.py +15 -1
  171. umap/urls.py +23 -13
  172. umap/views.py +116 -10
  173. {umap_project-2.5.1.dist-info → umap_project-2.6.0b0.dist-info}/METADATA +9 -9
  174. {umap_project-2.5.1.dist-info → umap_project-2.6.0b0.dist-info}/RECORD +177 -170
  175. umap/static/umap/js/umap.datalayer.permissions.js +0 -70
  176. umap/static/umap/js/umap.features.js +0 -1290
  177. umap/static/umap/js/umap.layer.js +0 -1837
  178. umap/static/umap/js/umap.permissions.js +0 -208
  179. umap/static/umap/js/umap.popup.js +0 -341
  180. umap/static/umap/test/TableEditor.js +0 -104
  181. umap/static/umap/vendors/leaflet/leaflet-src.js +0 -14512
  182. umap/static/umap/vendors/leaflet/leaflet-src.js.map +0 -1
  183. umap/static/umap/vendors/leaflet/leaflet.js +0 -6
  184. umap/static/umap/vendors/leaflet/leaflet.js.map +0 -1
  185. umap/static/umap/vendors/markercluster/WhereAreTheJavascriptFiles.txt +0 -5
  186. umap/static/umap/vendors/markercluster/leaflet.markercluster-src.js +0 -2718
  187. umap/static/umap/vendors/markercluster/leaflet.markercluster-src.js.map +0 -1
  188. umap/static/umap/vendors/toolbar/leaflet.toolbar-src.css +0 -117
  189. umap/static/umap/vendors/toolbar/leaflet.toolbar-src.js +0 -365
  190. umap/tests/integration/test_statics.py +0 -47
  191. {umap_project-2.5.1.dist-info → umap_project-2.6.0b0.dist-info}/WHEEL +0 -0
  192. {umap_project-2.5.1.dist-info → umap_project-2.6.0b0.dist-info}/entry_points.txt +0 -0
  193. {umap_project-2.5.1.dist-info → umap_project-2.6.0b0.dist-info}/licenses/LICENSE +0 -0
@@ -266,34 +266,36 @@ module.exports.format = format;
266
266
  module.exports.formatPair = formatPair;
267
267
  module.exports.coordToDMS = coordToDMS;
268
268
 
269
- function element(x, dims) {
270
- return search(x, dims).val;
269
+
270
+ function element(input, dims) {
271
+ var result = search(input, dims);
272
+ return (result === null) ? null : result.val;
271
273
  }
272
274
 
273
- function formatPair(x) {
274
- return format(x.lat, 'lat') + ' ' + format(x.lon, 'lon');
275
+
276
+ function formatPair(input) {
277
+ return format(input.lat, 'lat') + ' ' + format(input.lon, 'lon');
275
278
  }
276
279
 
280
+
277
281
  // Is 0 North or South?
278
- function format(x, dim) {
279
- var dms = coordToDMS(x,dim);
282
+ function format(input, dim) {
283
+ var dms = coordToDMS(input, dim);
280
284
  return dms.whole + '° ' +
281
285
  (dms.minutes ? dms.minutes + '\' ' : '') +
282
286
  (dms.seconds ? dms.seconds + '" ' : '') + dms.dir;
283
287
  }
284
288
 
285
- function coordToDMS(x,dim) {
286
- var dirs = {
287
- lat: ['N', 'S'],
288
- lon: ['E', 'W']
289
- }[dim] || '',
290
- dir = dirs[x >= 0 ? 0 : 1],
291
- abs = Math.abs(x),
292
- whole = Math.floor(abs),
293
- fraction = abs - whole,
294
- fractionMinutes = fraction * 60,
295
- minutes = Math.floor(fractionMinutes),
296
- seconds = Math.floor((fractionMinutes - minutes) * 60);
289
+
290
+ function coordToDMS(input, dim) {
291
+ var dirs = { lat: ['N', 'S'], lon: ['E', 'W'] }[dim] || '';
292
+ var dir = dirs[input >= 0 ? 0 : 1];
293
+ var abs = Math.abs(input);
294
+ var whole = Math.floor(abs);
295
+ var fraction = abs - whole;
296
+ var fractionMinutes = fraction * 60;
297
+ var minutes = Math.floor(fractionMinutes);
298
+ var seconds = Math.floor((fractionMinutes - minutes) * 60);
297
299
 
298
300
  return {
299
301
  whole: whole,
@@ -303,37 +305,56 @@ function coordToDMS(x,dim) {
303
305
  };
304
306
  }
305
307
 
306
- function search(x, dims, r) {
308
+
309
+ function search(input, dims) {
307
310
  if (!dims) dims = 'NSEW';
308
- if (typeof x !== 'string') return { val: null, regex: r };
311
+ if (typeof input !== 'string') return null;
312
+
313
+ input = input.toUpperCase();
314
+ var regex = /^[\s\,]*([NSEW])?\s*([\-|\—|\―]?[0-9.]+)[°º˚]?\s*(?:([0-9.]+)['’′‘]\s*)?(?:([0-9.]+)(?:''|"|”|″)\s*)?([NSEW])?/;
315
+
316
+ var m = input.match(regex);
317
+ if (!m) return null; // no match
309
318
 
310
- r = r || /[\s\,]*([NSEW])?\s*([\-|\—|\―]?[0-9.]+)°?\s*(?:([0-9.]+)['’′‘]\s*)?(?:([0-9.]+)(?:''|"|”|″)\s*)?([NSEW])?/gi;
319
+ var matched = m[0];
311
320
 
312
- var m = r.exec(x);
313
- if (!m) return { val: null, regex: r };
321
+ // extract dimension.. m[1] = leading, m[5] = trailing
322
+ var dim;
323
+ if (m[1] && m[5]) { // if matched both..
324
+ dim = m[1]; // keep leading
325
+ matched = matched.slice(0, -1); // remove trailing dimension from match
326
+ } else {
327
+ dim = m[1] || m[5];
328
+ }
314
329
 
315
- var dim = m[1] || m[5];
316
- if (dim && dims.indexOf(dim) === -1) return { val: null, regex: r };
330
+ // if unrecognized dimension
331
+ if (dim && dims.indexOf(dim) === -1) return null;
332
+
333
+ // extract DMS
334
+ var deg = m[2] ? parseFloat(m[2]) : 0;
335
+ var min = m[3] ? parseFloat(m[3]) / 60 : 0;
336
+ var sec = m[4] ? parseFloat(m[4]) / 3600 : 0;
337
+ var sign = (deg < 0) ? -1 : 1;
338
+ if (dim === 'S' || dim === 'W') sign *= -1;
317
339
 
318
340
  return {
319
- val: (((m[2]) ? parseFloat(m[2]) : 0) +
320
- ((m[3] ? parseFloat(m[3]) / 60 : 0)) +
321
- ((m[4] ? parseFloat(m[4]) / 3600 : 0))) *
322
- ((dim === 'S' || dim === 'W') ? -1 : 1),
323
- regex: r,
324
- raw: m[0],
325
- dim: dim
341
+ val: (Math.abs(deg) + min + sec) * sign,
342
+ dim: dim,
343
+ matched: matched,
344
+ remain: input.slice(matched.length)
326
345
  };
327
346
  }
328
347
 
329
- function pair(x, dims) {
330
- x = x.trim();
331
- var one = search(x, dims);
332
- if (one.val === null) return null;
333
- var two = search(x, dims, one.regex);
334
- if (two.val === null) return null;
335
- // null if one/two are not contiguous.
336
- if (one.raw + two.raw !== x) return null;
348
+
349
+ function pair(input, dims) {
350
+ input = input.trim();
351
+ var one = search(input, dims);
352
+ if (!one) return null;
353
+
354
+ input = one.remain.trim();
355
+ var two = search(input, dims);
356
+ if (!two || two.remain) return null;
357
+
337
358
  if (one.dim) {
338
359
  return swapdim(one.val, two.val, one.dim);
339
360
  } else {
@@ -341,6 +362,7 @@ function pair(x, dims) {
341
362
  }
342
363
  }
343
364
 
365
+
344
366
  function swapdim(a, b, dim) {
345
367
  if (dim === 'N' || dim === 'S') return [a, b];
346
368
  if (dim === 'W' || dim === 'E') return [b, a];
@@ -57,4 +57,4 @@
57
57
  }
58
58
  .marker-cluster span {
59
59
  line-height: 30px;
60
- }
60
+ }
umap/storage.py CHANGED
@@ -8,6 +8,7 @@ from rjsmin import jsmin
8
8
 
9
9
  class UmapManifestStaticFilesStorage(ManifestStaticFilesStorage):
10
10
  support_js_module_import_aggregation = True
11
+ max_post_process_passes = 15
11
12
 
12
13
  # We remove `;` at the end of all regexps to match our biome config.
13
14
  _js_module_import_aggregation_patterns = (
umap/templates/404.html CHANGED
@@ -1,5 +1,7 @@
1
1
  {% extends "base.html" %}
2
+
2
3
  {% load i18n static %}
4
+
3
5
  {% block content %}
4
6
  <div class="content404">
5
7
  <a href="{% url "home" %}"
@@ -9,7 +11,9 @@
9
11
  <img alt="0" width="128px" height="128px" src="{% static "umap/img/logo.svg" %}">
10
12
  4
11
13
  </h1>
12
- <h2>Not Found</h2>
14
+ <h2>
15
+ Not Found
16
+ </h2>
13
17
  </a>
14
18
  </div>
15
19
  {% endblock content %}
umap/templates/500.html CHANGED
@@ -22,7 +22,9 @@
22
22
  width="128px"
23
23
  height="128px"
24
24
  src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iMTI4IgogICBoZWlnaHQ9IjEyOCIKICAgaWQ9InN2ZzIiCiAgIHZlcnNpb249IjEuMSIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMC40OC40IHI5OTM5IgogICBzb2RpcG9kaTpkb2NuYW1lPSJsb2dvLnN2ZyIKICAgaW5rc2NhcGU6ZXhwb3J0LWZpbGVuYW1lPSIvaG9tZS95Ym9uL0NvZGUvcHJvamVjdHMvdW1hcC91bWFwL3N0YXRpYy91bWFwL2ltZy9sb2dvX2ZpbGlncmVlLnBuZyIKICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjExNS4yIgogICBpbmtzY2FwZTpleHBvcnQteWRwaT0iMTE1LjIiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0IiAvPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBpZD0iYmFzZSIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp6b29tPSI0IgogICAgIGlua3NjYXBlOmN4PSI1OC40MDU5NTIiCiAgICAgaW5rc2NhcGU6Y3k9IjYwLjAxMTEyMiIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgogICAgIHNob3dncmlkPSJ0cnVlIgogICAgIGlua3NjYXBlOnNuYXAtcGFnZT0iZmFsc2UiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxMzY2IgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9Ijc0NCIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iMCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMjQiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSI+CiAgICA8aW5rc2NhcGU6Z3JpZAogICAgICAgdHlwZT0ieHlncmlkIgogICAgICAgaWQ9ImdyaWQyOTg1IgogICAgICAgZW1wc3BhY2luZz0iNCIKICAgICAgIHZpc2libGU9InRydWUiCiAgICAgICBlbmFibGVkPSJ0cnVlIgogICAgICAgc25hcHZpc2libGVncmlkbGluZXNvbmx5PSJ0cnVlIgogICAgICAgZW1wY29sb3I9IiMwMDAwM2IiCiAgICAgICBlbXBvcGFjaXR5PSIwLjI1MDk4MDM5IiAvPgogIDwvc29kaXBvZGk6bmFtZWR2aWV3PgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTciPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgICAgPGRjOnRpdGxlIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIxIgogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTkyNC4zNjIxOCkiPgogICAgPGcKICAgICAgIHN0eWxlPSJzdHJva2U6bm9uZTtkaXNwbGF5OmJsb2NrIgogICAgICAgaWQ9ImxheWVyNCIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuMDg3OTg0MDUsMCwwLDAuMDg1OTUyMTIsLTExMS44MDEzNywxMDIzLjI4NzkpIgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LWZpbGVuYW1lPSIvaG9tZS95Ym9uL1dvcmsvb3NtdG91Y2g2NC5wbmciCiAgICAgICBpbmtzY2FwZTpleHBvcnQteGRwaT0iMjguNzk5OTk5IgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjI4Ljc5OTk5OSIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDojMzIzZTU2O2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgZD0iTSAzNi41MzEyNSA2LjE4NzUgQyAxNC45MzEzMTUgMTYuNDY3NjY5IDAgMzguNDg1OTA4IDAgNjQgQyAwIDk5LjM0NjIyNCAyOC42NTM3NzYgMTI4IDY0IDEyOCBDIDE0LjUzMTY5NyA4MS44Mjk1ODQgMy4xNDE4OTY1IDI0Ljc5MTUyIDM2LjUzMTI1IDYuMTg3NSB6IE0gNjQgMTI4IEMgOTkuMzQ2MjI0IDEyOCAxMjggOTkuMzQ2MjI0IDEyOCA2NCBDIDEyOCAzOC40ODU5MDggMTEzLjA2ODY4IDE2LjQ2NzY2OSA5MS40Njg3NSA2LjE4NzUgQyAxMjQuODU4MSAyNC43OTE1MiAxMTMuNDY4MyA4MS44Mjk1ODQgNjQgMTI4IHogIgogICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCw5MjQuMzYyMTgpIgogICAgICAgaWQ9InBhdGgyOTg3IiAvPgogICAgPGcKICAgICAgIGlkPSJnNDkxMiIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDIuNTYsMCwwLDIuNTYsLTE4MS4xMiwtMTM2Ny43NjUpIgogICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtzdHJva2U6bm9uZSIgLz4KICAgIDxwYXRoCiAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiCiAgICAgICBzdHlsZT0iZmlsbDojMzIzZTU2O2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgaWQ9InBhdGg1MjYzIgogICAgICAgc29kaXBvZGk6Y3g9IjcwIgogICAgICAgc29kaXBvZGk6Y3k9IjE4IgogICAgICAgc29kaXBvZGk6cng9IjE4IgogICAgICAgc29kaXBvZGk6cnk9IjE4IgogICAgICAgZD0iTSA4OCwxOCBDIDg4LDI3Ljk0MTEyNSA3OS45NDExMjUsMzYgNzAsMzYgNjAuMDU4ODc1LDM2IDUyLDI3Ljk0MTEyNSA1MiwxOCA1Miw4LjA1ODg3NDUgNjAuMDU4ODc1LDAgNzAsMCA3OS45NDExMjUsMCA4OCw4LjA1ODg3NDUgODgsMTggeiIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMzE0MjY5NywwLDAsMS4zMTQyNjk3LC0yNy45OTg4NzgsOTM0LjUyODU1KSIgLz4KICA8L2c+Cjwvc3ZnPgo=" />
25
- <h1>Oops, Server error…</h1>
25
+ <h1>
26
+ Oops, Server error…
27
+ </h1>
26
28
  </div>
27
29
  </body>
28
30
  </html>
@@ -1,15 +1,21 @@
1
1
  {% extends "umap/content.html" %}
2
+
2
3
  {% load i18n %}
4
+
3
5
  {% block maincontent %}
4
6
  <div class="col wide">
5
- <h2 class="section">{% blocktrans %}Browse {{ current_user }}'s maps{% endblocktrans %}</h2>
7
+ <h2 class="section">
8
+ {% blocktrans %}Browse {{ current_user }}'s maps{% endblocktrans %}
9
+ </h2>
6
10
  </div>
7
11
  <div class="wrapper">
8
12
  <div class="map_list row">
9
13
  {% if maps %}
10
14
  {% include "umap/map_list.html" %}
11
15
  {% else %}
12
- <div>{% blocktrans %}{{ current_user }} has no maps.{% endblocktrans %}</div>
16
+ <div>
17
+ {% blocktrans %}{{ current_user }} has no maps.{% endblocktrans %}
18
+ </div>
13
19
  {% endif %}
14
20
  </div>
15
21
  </div>
@@ -1,17 +1,18 @@
1
1
  {% extends "umap/content.html" %}
2
+
2
3
  {% load i18n %}
4
+
3
5
  {% block maincontent %}
4
- <div class="row">
5
- <h2 class="section tabs">
6
- <a href="{% url "user_dashboard" %}">{% trans "My Maps" %}</a>
7
- <a class="selected" href="{% url 'user_profile' %}">{% trans "My Profile" %}</a>
8
- </h2>
9
- </div>
6
+ {% include "umap/dashboard_menu.html" with selected="profile" %}
10
7
  <div class="wrapper">
11
8
  <div class="row">
12
9
  {% if form.non_field_errors %}
13
10
  <ul class="form-errors">
14
- {% for error in form.non_field_errors %}<li>{{ error }}</li>{% endfor %}
11
+ {% for error in form.non_field_errors %}
12
+ <li>
13
+ {{ error }}
14
+ </li>
15
+ {% endfor %}
15
16
  </ul>
16
17
  {% endif %}
17
18
  <form id="user_form" method="post">
@@ -22,13 +23,21 @@
22
23
  </div>
23
24
  {% if backends.backends|length %}
24
25
  <div class="row">
25
- <h3>{% trans "Your current providers" %}</h3>
26
+ <h3>
27
+ {% trans "Your current providers" %}
28
+ </h3>
26
29
  <ul>
27
- {% for name in providers %}<li>{{ name|title }}</li>{% endfor %}
30
+ {% for name in providers %}
31
+ <li>
32
+ {{ name|title }}
33
+ </li>
34
+ {% endfor %}
28
35
  </ul>
29
36
  </div>
30
37
  <div class="row">
31
- <h3>{% trans "Connect to another provider" %}</h3>
38
+ <h3>
39
+ {% trans "Connect to another provider" %}
40
+ </h3>
32
41
  <p>
33
42
  {% blocktrans %}It's a good habit to connect your account to more than one provider, in case one provider becomes unavailable, temporarily or even permanently.{% endblocktrans %}
34
43
  </p>
@@ -1,15 +1,21 @@
1
1
  {% extends "umap/content.html" %}
2
+
2
3
  {% load i18n %}
4
+
3
5
  {% block maincontent %}
4
6
  <div class="col wide">
5
- <h2 class="section">{% blocktrans %}Browse {{ current_user }}'s starred maps{% endblocktrans %}</h2>
7
+ <h2 class="section">
8
+ {% blocktrans %}Browse {{ current_user }}'s starred maps{% endblocktrans %}
9
+ </h2>
6
10
  </div>
7
11
  <div class="wrapper">
8
12
  <div class="map_list row">
9
13
  {% if maps %}
10
14
  {% include "umap/map_list.html" %}
11
15
  {% else %}
12
- <div>{% blocktrans %}{{ current_user }} has no starred maps yet.{% endblocktrans %}</div>
16
+ <div>
17
+ {% blocktrans %}{{ current_user }} has no starred maps yet.{% endblocktrans %}
18
+ </div>
13
19
  {% endif %}
14
20
  </div>
15
21
  </div>
umap/templates/base.html CHANGED
@@ -1,4 +1,5 @@
1
1
  {% load umap_tags i18n static %}
2
+
2
3
  <!DOCTYPE html>
3
4
  <html {% if LANGUAGE_BIDI %}dir="rtl"{% endif %}>
4
5
  <head>
@@ -1,5 +1,12 @@
1
1
  {% extends "base.html" %}
2
+
3
+ {% load i18n %}
4
+
5
+ {% block head_title %}
6
+ {% trans "Login" %}
7
+ {% endblock head_title %}
2
8
  {% load umap_tags i18n %}
9
+
3
10
  {% block extra_head %}
4
11
  {% umap_css %}
5
12
  {{ block.super }}
@@ -13,11 +20,17 @@
13
20
  {% include "umap/branding.html" %}
14
21
  </header>
15
22
  {% if ENABLE_ACCOUNT_LOGIN %}
16
- <h2>{% trans "Please log in with your account" %}</h2>
23
+ <h2>
24
+ {% trans "Please log in with your account" %}
25
+ </h2>
17
26
  <div>
18
27
  {% if form.non_field_errors %}
19
28
  <ul class="form-errors">
20
- {% for error in form.non_field_errors %}<li>{{ error }}</li>{% endfor %}
29
+ {% for error in form.non_field_errors %}
30
+ <li>
31
+ {{ error }}
32
+ </li>
33
+ {% endfor %}
21
34
  </ul>
22
35
  {% endif %}
23
36
  <form id="login_form" action="{% url "login" %}" method="post">
@@ -34,7 +47,9 @@
34
47
  </div>
35
48
  {% endif %}
36
49
  {% if backends.backends|length %}
37
- <h2>{% trans "Please choose a provider" %}</h2>
50
+ <h2>
51
+ {% trans "Please choose a provider" %}
52
+ </h2>
38
53
  <div>
39
54
  <ul class="login-grid block-grid">
40
55
  {% for name in backends.backends %}
@@ -1,4 +1,5 @@
1
1
  {% extends "umap/content.html" %}
2
+
2
3
  {% block maincontent %}
3
4
  {% include "umap/about_summary.html" %}
4
5
  {% endblock maincontent %}
@@ -1,4 +1,5 @@
1
1
  {% load i18n static %}
2
+
2
3
  <div class="wrapper about_summary highlights">
3
4
  <div class="row">
4
5
  <div class="col quarter mwide">
@@ -18,13 +19,27 @@
18
19
  width="128px"
19
20
  height="128px" />
20
21
  <ul>
21
- <li>{% trans "Choose the layers of your map" %}</li>
22
- <li>{% trans "Add POIs: markers, lines, polygons..." %}</li>
23
- <li>{% trans "Manage POIs colours and icons" %}</li>
24
- <li>{% trans "Manage map options: display a minimap, locate user on load…" %}</li>
25
- <li>{% trans "Batch import geostructured data (geojson, gpx, kml, osm...)" %}</li>
26
- <li>{% trans "Choose the license for your data" %}</li>
27
- <li>{% trans "Embed and share your map" %}</li>
22
+ <li>
23
+ {% trans "Choose the layers of your map" %}
24
+ </li>
25
+ <li>
26
+ {% trans "Add POIs: markers, lines, polygons..." %}
27
+ </li>
28
+ <li>
29
+ {% trans "Manage POIs colours and icons" %}
30
+ </li>
31
+ <li>
32
+ {% trans "Manage map options: display a minimap, locate user on load…" %}
33
+ </li>
34
+ <li>
35
+ {% trans "Batch import geostructured data (geojson, gpx, kml, osm...)" %}
36
+ </li>
37
+ <li>
38
+ {% trans "Choose the license for your data" %}
39
+ </li>
40
+ <li>
41
+ {% trans "Embed and share your map" %}
42
+ </li>
28
43
  </ul>
29
44
  </div>
30
45
  <div class="col quarter mwide">
@@ -1,33 +1,39 @@
1
1
  {% load i18n static %}
2
2
 
3
3
  <style type="text/css">
4
- @import "{% static 'umap/js/components/alerts/alert.css' %}";
4
+ @import "{% static 'umap/js/components/alerts/alert.css' %}";
5
5
  </style>
6
-
7
6
  <template id="umap-alert-template">
8
7
  <div role="dialog" class="dark window umap-alert">
9
8
  <div>
10
- <p role="alert"></p>
9
+ <p role="alert">
10
+ </p>
11
11
  </div>
12
12
  <ul class="buttons">
13
13
  <li>
14
- <button class="icon icon-16 icon-close" aria-label="{% translate "Close" %}" data-close></button>
14
+ <button class="icon icon-16 icon-close"
15
+ aria-label="{% translate "Close" %}"
16
+ data-close>
17
+ </button>
15
18
  </li>
16
19
  </ul>
17
20
  </div>
18
21
  </template>
19
-
20
22
  <umap-alert></umap-alert>
21
-
22
23
  <template id="umap-alert-creation-template">
23
24
  <div role="dialog" class="dark window umap-alert">
24
25
  <div>
25
- <h3 role="alert"></h3>
26
+ <h3 role="alert">
27
+ </h3>
26
28
  {% url "login" as login_url %}
27
- <p><em>{% blocktranslate %}Pro-tip: to easily find back your maps, <a href="{{ login_url }}" target="_blank">create an account</a> or <a href="{{ login_url }}" target="_blank">log in</a>.{% endblocktranslate %}</em></p>
29
+ <p>
30
+ <em>{% blocktranslate %}Pro-tip: to easily find back your maps, <a href="{{ login_url }}" target="_blank">create an account</a> or <a href="{{ login_url }}" target="_blank">log in</a>.{% endblocktranslate %}</em>
31
+ </p>
28
32
  <div id="link-wrapper">
29
33
  <form>
30
- <label for="url">{% translate "Here is your secret link to edit the map, please keep it safe:" %}</label>
34
+ <label for="url">
35
+ {% translate "Here is your secret link to edit the map, please keep it safe:" %}
36
+ </label>
31
37
  <fieldset role="group">
32
38
  <input type="url" name="url" id="url">
33
39
  <input type="button" value="{% translate "Copy link" %}">
@@ -36,46 +42,61 @@
36
42
  </div>
37
43
  <div id="form-wrapper" hidden>
38
44
  <form>
39
- <label for="email">{% translate "Enter your email address to receive the secret link:" %}</label>
45
+ <label for="email">
46
+ {% translate "Enter your email address to receive the secret link:" %}
47
+ </label>
40
48
  <fieldset role="group">
41
- <input type="email" name="email" id="email" placeholder="{% translate "Email" %}" required>
42
- <input type="submit" value="{% translate "Send me the link" %}" class="umap-action">
49
+ <input type="email"
50
+ name="email"
51
+ id="email"
52
+ placeholder="{% translate "Email" %}"
53
+ required>
54
+ <input type="submit"
55
+ value="{% translate "Send me the link" %}"
56
+ class="umap-action">
43
57
  </fieldset>
44
58
  </form>
45
59
  </div>
46
60
  </div>
47
61
  <ul class="buttons">
48
62
  <li>
49
- <button class="icon icon-16 icon-close" aria-label="{% translate "Close" %}" data-close></button>
63
+ <button class="icon icon-16 icon-close"
64
+ aria-label="{% translate "Close" %}"
65
+ data-close>
66
+ </button>
50
67
  </li>
51
68
  </ul>
52
69
  </div>
53
70
  </template>
54
-
55
71
  <umap-alert-creation></umap-alert-creation>
56
-
57
72
  <template id="umap-alert-conflict-template">
58
73
  <div role="dialog" class="dark window umap-alert">
59
74
  <div>
60
- <p role="alert"></p>
75
+ <p role="alert">
76
+ </p>
61
77
  <div id="conflict-wrapper">
62
78
  <form>
63
79
  <a href="#" onclick="document.url" target="_blank">{% translate "See their edits in another tab" %}</a>
64
- <input id="your-changes" type="submit" value="{% translate "Keep your changes and loose theirs" %}">
65
- <input id="their-changes" type="submit" value="{% translate "Keep their changes and loose yours" %}">
80
+ <input id="your-changes"
81
+ type="submit"
82
+ value="{% translate "Keep your changes and loose theirs" %}">
83
+ <input id="their-changes"
84
+ type="submit"
85
+ value="{% translate "Keep their changes and loose yours" %}">
66
86
  </form>
67
87
  </div>
68
88
  </div>
69
89
  <ul class="buttons">
70
90
  <li>
71
- <button class="icon icon-16 icon-close" aria-label="{% translate "Close" %}" data-close></button>
91
+ <button class="icon icon-16 icon-close"
92
+ aria-label="{% translate "Close" %}"
93
+ data-close>
94
+ </button>
72
95
  </li>
73
96
  </ul>
74
97
  </div>
75
98
  </template>
76
-
77
99
  <umap-alert-conflict></umap-alert-conflict>
78
-
79
100
  <script type="module">
80
101
  import { register } from '{% static 'umap/js/components/base.js' %}'
81
102
  import {
@@ -1,5 +1,7 @@
1
1
  {% extends "base.html" %}
2
+
2
3
  {% load umap_tags i18n %}
4
+
3
5
  {% block body_class %}
4
6
  content
5
7
  {% endblock body_class %}
@@ -1,8 +1,12 @@
1
1
  {% load i18n %}
2
+
2
3
  <footer>
3
4
  <a href="https://wiki.openstreetmap.org/wiki/UMap" class="branding">uMap</a>
4
- an OpenStreetMap project
5
- (version <a href="https://umap-project.readthedocs.io/en/master/changelog/">{{ UMAP_VERSION }}</a>)
5
+ <span>{% trans "An OpenStreetMap project" %}
6
+ ({% trans "version" %} <a href="https://docs.umap-project.org/en/stable/changelog/">{{ UMAP_VERSION }}</a>)</span>
7
+ {% if UMAP_HOST_INFOS.url and UMAP_HOST_INFOS.name %}<span>{% trans "Hosted by" %} <a href="{{ UMAP_HOST_INFOS.url }}">{{ UMAP_HOST_INFOS.name }}</a></span>{% endif %}
8
+ {% if UMAP_HOST_INFOS.email %}<a href="mailto:{{ UMAP_HOST_INFOS.email }}">{% trans "Contact" %}</a>{% endif %}
9
+ {% if UMAP_HELP_URL %}<a href="{{ UMAP_HELP_URL }}">{% trans "Help" %}</a>{% endif %}
6
10
  {% get_language_info_list for LANGUAGES as languages %}
7
11
  <form action="{% url "set_language" %}" method="post" class="i18n_switch">
8
12
  {% csrf_token %}
@@ -1,4 +1,5 @@
1
1
  {% load static %}
2
+
2
3
  <link rel="stylesheet"
3
4
  href="{% static 'umap/vendors/leaflet/leaflet.css' %}" />
4
5
  <link rel="stylesheet"
@@ -0,0 +1,15 @@
1
+ {% load i18n %}
2
+
3
+ <div class="row">
4
+ <h2 class="section tabs">
5
+ {% if selected == "maps" %}
6
+ <a class="selected" href="{% url 'user_dashboard' %}">{% blocktranslate with count=maps.paginator.count %}My Maps ({{ count }}){% endblocktranslate %}</a>
7
+ {% else %}
8
+ <a href="{% url 'user_dashboard' %}">{% trans "My Maps" %}</a>
9
+ {% endif %}
10
+ <a {% if selected == "profile" %}class="selected"{% endif %}
11
+ href="{% url 'user_profile' %}">{% trans "My profile" %}</a>
12
+ <a {% if selected == "teams" %}class="selected"{% endif %}
13
+ href="{% url 'user_teams' %}">{% trans "My teams" %}</a>
14
+ </h2>
15
+ </div>
@@ -1,5 +1,7 @@
1
1
  {% extends "umap/content.html" %}
2
+
2
3
  {% load umap_tags i18n %}
4
+
3
5
  {% block messages %}
4
6
  {# We don't want maps in the list to display errors. #}
5
7
  {% endblock messages %}
@@ -8,14 +10,22 @@
8
10
  {% include "umap/about_summary.html" %}
9
11
  {% if showcase_map %}
10
12
  <div class="wrapper showcase-map">
11
- <h2 class="section">{% blocktrans %}Map of the uMaps{% endblocktrans %}</h2>
12
- <div class="row">{% map_fragment showcase_map zoomControl=1 %}</div>
13
+ <h2 class="section">
14
+ {% blocktrans %}Map of the uMaps{% endblocktrans %}
15
+ </h2>
16
+ <div class="row">
17
+ {% map_fragment showcase_map zoomControl=1 %}
18
+ </div>
13
19
  </div>
14
20
  {% endif %}
15
21
  <div class="wrapper">
16
22
  {% if maps %}
17
- <h2 class="section">{% blocktrans %}Get inspired, browse maps{% endblocktrans %}</h2>
18
- <div class="map_list row">{% include "umap/map_list.html" %}</div>
23
+ <h2 class="section">
24
+ {% blocktrans %}Get inspired, browse maps{% endblocktrans %}
25
+ </h2>
26
+ <div class="map_list row">
27
+ {% include "umap/map_list.html" %}
28
+ </div>
19
29
  {% endif %}
20
30
  </div>
21
31
  {% endblock maincontent %}
@@ -1,10 +1,14 @@
1
1
  {% load static %}
2
+
2
3
  <script type="module"
3
4
  src="{% static 'umap/vendors/leaflet/leaflet-src.esm.js' %}"
4
5
  defer></script>
5
6
  <script type="module"
6
7
  src="{% static 'umap/js/modules/leaflet-configure.js' %}"
7
8
  defer></script>
9
+ <script src="{% static 'umap/vendors/markercluster/leaflet.markercluster.js' %}"
10
+ defer></script>
11
+ <script src="{% static 'umap/vendors/heat/leaflet-heat.js' %}" defer></script>
8
12
  {% if locale %}
9
13
  {% with "umap/locale/"|add:locale|add:".js" as path %}
10
14
  <script src="{% static path %}" defer></script>
@@ -21,14 +25,11 @@
21
25
  <script src="{% static 'umap/vendors/csv2geojson/csv2geojson.js' %}" defer></script>
22
26
  <script src="{% static 'umap/vendors/osmtogeojson/osmtogeojson.js' %}" defer></script>
23
27
  <script src="{% static 'umap/vendors/loading/Control.Loading.js' %}" defer></script>
24
- <script src="{% static 'umap/vendors/markercluster/leaflet.markercluster.js' %}"
25
- defer></script>
26
28
  <script src="{% static 'umap/vendors/contextmenu/leaflet.contextmenu.min.js' %}"
27
29
  defer></script>
28
30
  <script src="{% static 'umap/vendors/photon/leaflet.photon.js' %}" defer></script>
29
31
  <script src="{% static 'umap/vendors/georsstogeojson/GeoRSSToGeoJSON.js' %}"
30
32
  defer></script>
31
- <script src="{% static 'umap/vendors/heat/leaflet-heat.js' %}" defer></script>
32
33
  <script src="{% static 'umap/vendors/fullscreen/Leaflet.fullscreen.min.js' %}"
33
34
  defer></script>
34
35
  <script src="{% static 'umap/vendors/toolbar/leaflet.toolbar.js' %}" defer></script>
@@ -43,13 +44,7 @@
43
44
  <script src="{% static 'umap/vendors/simple-statistics/simple-statistics.min.js' %}"
44
45
  defer></script>
45
46
  <script src="{% static 'umap/js/umap.core.js' %}" defer></script>
46
- <script src="{% static 'umap/js/umap.popup.js' %}" defer></script>
47
47
  <script src="{% static 'umap/js/umap.forms.js' %}" defer></script>
48
- <script src="{% static 'umap/js/umap.icon.js' %}" defer></script>
49
- <script src="{% static 'umap/js/umap.features.js' %}" defer></script>
50
- <script src="{% static 'umap/js/umap.permissions.js' %}" defer></script>
51
- <script src="{% static 'umap/js/umap.datalayer.permissions.js' %}" defer></script>
52
- <script src="{% static 'umap/js/umap.layer.js' %}" defer></script>
53
48
  <script src="{% static 'umap/js/umap.controls.js' %}" defer></script>
54
49
  <script src="{% static 'umap/js/umap.js' %}" defer></script>
55
50
  <script src="{% static 'umap/js/components/fragment.js' %}" defer></script>