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
@@ -62,8 +62,10 @@ U.Map = L.Map.extend({
62
62
  this.editPanel = new U.EditPanel(this)
63
63
  this.fullPanel = new U.FullPanel(this)
64
64
  }
65
- L.DomEvent.on(document.body, 'dataloading', (e) => this.fire('dataloading', e))
66
- L.DomEvent.on(document.body, 'dataload', (e) => this.fire('dataload', e))
65
+ if (!this.options.noControl) {
66
+ L.DomEvent.on(document.body, 'dataloading', (e) => this.fire('dataloading', e))
67
+ L.DomEvent.on(document.body, 'dataload', (e) => this.fire('dataload', e))
68
+ }
67
69
  this.server = new U.ServerRequest()
68
70
  this.request = new U.Request()
69
71
 
@@ -193,7 +195,7 @@ U.Map = L.Map.extend({
193
195
  window.onbeforeunload = () => (this.editEnabled && this.isDirty) || null
194
196
  this.backup()
195
197
  this.initContextMenu()
196
- this.on('click contextmenu.show', this.closeInplaceToolbar)
198
+ this.on('click', this.closeInplaceToolbar)
197
199
  },
198
200
 
199
201
  initSyncEngine: async function () {
@@ -393,7 +395,7 @@ U.Map = L.Map.extend({
393
395
  this._controls.search = new U.SearchControl()
394
396
  this._controls.embed = new L.Control.Embed(this)
395
397
  this._controls.tilelayersChooser = new U.TileLayerChooser(this)
396
- if (this.options.user) this._controls.star = new U.StarControl(this)
398
+ if (this.options.user?.id) this._controls.star = new U.StarControl(this)
397
399
  this._controls.editinosm = new L.Control.EditInOSM({
398
400
  position: 'topleft',
399
401
  widgetOptions: {
@@ -841,11 +843,9 @@ U.Map = L.Map.extend({
841
843
  this.options.tilelayer = tilelayer.toJSON()
842
844
  this.isDirty = true
843
845
  }
844
- if (this._controls.tilelayersChooser)
845
- this._controls.tilelayersChooser.openSwitcher({
846
- callback: callback,
847
- className: 'dark',
848
- })
846
+ if (this._controls.tilelayersChooser) {
847
+ this._controls.tilelayersChooser.openSwitcher({ callback, edit: true })
848
+ }
849
849
  },
850
850
 
851
851
  toGeoJSON: function () {
@@ -863,7 +863,7 @@ U.Map = L.Map.extend({
863
863
  },
864
864
 
865
865
  eachFeature: function (callback, context) {
866
- this.eachDataLayer((datalayer) => {
866
+ this.eachBrowsableDataLayer((datalayer) => {
867
867
  if (datalayer.isVisible()) datalayer.eachFeature(callback, context)
868
868
  })
869
869
  },
@@ -1048,7 +1048,15 @@ U.Map = L.Map.extend({
1048
1048
  if (error) {
1049
1049
  return
1050
1050
  }
1051
-
1051
+ if (data.login_required) {
1052
+ window.onLogin = () => this.saveSelf()
1053
+ window.open(data.login_required)
1054
+ return
1055
+ }
1056
+ if (data.user?.id) {
1057
+ this.options.user = data.user
1058
+ this.renderEditToolbar()
1059
+ }
1052
1060
  if (!this.options.umap_id) {
1053
1061
  this.options.umap_id = data.id
1054
1062
  this.permissions.setOptions(data.permissions)
@@ -1219,46 +1227,12 @@ U.Map = L.Map.extend({
1219
1227
  _editDefaultProperties: function (container) {
1220
1228
  const optionsFields = [
1221
1229
  'options.zoomTo',
1222
- ['options.easing', { handler: 'Switch', label: L._('Animated transitions') }],
1230
+ 'options.easing',
1223
1231
  'options.labelKey',
1224
- [
1225
- 'options.sortKey',
1226
- {
1227
- handler: 'BlurInput',
1228
- helpEntries: 'sortKey',
1229
- placeholder: L._('Default: name'),
1230
- label: L._('Sort key'),
1231
- inheritable: true,
1232
- },
1233
- ],
1234
- [
1235
- 'options.filterKey',
1236
- {
1237
- handler: 'Input',
1238
- helpEntries: 'filterKey',
1239
- placeholder: L._('Default: name'),
1240
- label: L._('Search keys'),
1241
- inheritable: true,
1242
- },
1243
- ],
1244
- [
1245
- 'options.facetKey',
1246
- {
1247
- handler: 'BlurInput',
1248
- helpEntries: 'facetKey',
1249
- placeholder: L._('Example: key1,key2|Label 2,key3|Label 3|checkbox'),
1250
- label: L._('Filters keys'),
1251
- },
1252
- ],
1253
- [
1254
- 'options.slugKey',
1255
- {
1256
- handler: 'BlurInput',
1257
- helpEntries: 'slugKey',
1258
- placeholder: L._('Default: name'),
1259
- label: L._('Feature identifier key'),
1260
- },
1261
- ],
1232
+ 'options.sortKey',
1233
+ 'options.filterKey',
1234
+ 'options.facetKey',
1235
+ 'options.slugKey',
1262
1236
  ]
1263
1237
 
1264
1238
  builder = new U.FormBuilder(this, optionsFields)
@@ -1485,13 +1459,13 @@ U.Map = L.Map.extend({
1485
1459
  const advancedActions = L.DomUtil.createFieldset(container, L._('Advanced actions'))
1486
1460
  const advancedButtons = L.DomUtil.create('div', 'button-bar half', advancedActions)
1487
1461
  if (this.permissions.isOwner()) {
1488
- L.DomUtil.createButton(
1489
- 'button umap-delete',
1490
- advancedButtons,
1491
- L._('Delete'),
1492
- this.del,
1493
- this
1494
- )
1462
+ const deleteButton = U.Utils.loadTemplate(`
1463
+ <button class="button" type="button">
1464
+ <i class="icon icon-24 icon-delete"></i>${L._('Delete')}
1465
+ </button>`)
1466
+ deleteButton.addEventListener('click', () => this.del())
1467
+ advancedButtons.appendChild(deleteButton)
1468
+
1495
1469
  L.DomUtil.createButton(
1496
1470
  'button umap-empty',
1497
1471
  advancedButtons,
@@ -1589,6 +1563,7 @@ U.Map = L.Map.extend({
1589
1563
  this.editPanel.close()
1590
1564
  this.fullPanel.close()
1591
1565
  this.sync.stop()
1566
+ this.closeInplaceToolbar()
1592
1567
  },
1593
1568
 
1594
1569
  hasEditMode: function () {
@@ -1607,7 +1582,7 @@ U.Map = L.Map.extend({
1607
1582
  )
1608
1583
  const name = L.DomUtil.create('h3', '', container)
1609
1584
  L.DomEvent.disableClickPropagation(container)
1610
- this.permissions.addOwnerLink('span', container)
1585
+ this.addAuthorLink('span', container)
1611
1586
  if (this.getOption('captionMenus')) {
1612
1587
  L.DomUtil.createButton(
1613
1588
  'umap-about-link flat',
@@ -1663,11 +1638,13 @@ U.Map = L.Map.extend({
1663
1638
  },
1664
1639
 
1665
1640
  del: async function () {
1666
- if (confirm(L._('Are you sure you want to delete this map?'))) {
1667
- const url = this.urls.get('map_delete', { map_id: this.options.umap_id })
1668
- const [data, response, error] = await this.server.post(url)
1669
- if (data.redirect) window.location = data.redirect
1670
- }
1641
+ this.dialog
1642
+ .confirm(L._('Are you sure you want to delete this map?'))
1643
+ .then(async () => {
1644
+ const url = this.urls.get('map_delete', { map_id: this.options.umap_id })
1645
+ const [data, response, error] = await this.server.post(url)
1646
+ if (data.redirect) window.location = data.redirect
1647
+ })
1671
1648
  },
1672
1649
 
1673
1650
  clone: async function () {
@@ -1866,6 +1843,14 @@ U.Map = L.Map.extend({
1866
1843
  return url
1867
1844
  },
1868
1845
 
1846
+ getFeatureById: function (id) {
1847
+ let feature
1848
+ for (const datalayer of Object.values(this.datalayers)) {
1849
+ feature = datalayer.getFeatureById(id)
1850
+ if (feature) return feature
1851
+ }
1852
+ },
1853
+
1869
1854
  closeInplaceToolbar: function () {
1870
1855
  const toolbar = this._toolbars[L.Toolbar.Popup._toolbar_class_id]
1871
1856
  if (toolbar) toolbar.remove()
@@ -1902,4 +1887,21 @@ U.Map = L.Map.extend({
1902
1887
  .filter((val, idx, arr) => arr.indexOf(val) === idx)
1903
1888
  .sort(U.Utils.naturalSort)
1904
1889
  },
1890
+
1891
+ addAuthorLink: function (element, container) {
1892
+ if (this.options.author?.name) {
1893
+ const authorContainer = L.DomUtil.add(
1894
+ element,
1895
+ 'umap-map-author',
1896
+ container,
1897
+ ` ${L._('by')} `
1898
+ )
1899
+ L.DomUtil.createLink(
1900
+ '',
1901
+ authorContainer,
1902
+ this.options.author.name,
1903
+ this.options.author.url
1904
+ )
1905
+ }
1906
+ },
1905
1907
  })
@@ -426,15 +426,15 @@ const locale = {
426
426
  "Filters keys": "Filters keys",
427
427
  "Filter data": "Roadennoù ar sil",
428
428
  "Search map features…": "Klask perzhioù ar gartenn..",
429
- "Reset all": "Reset all",
430
- "Open browser": "Open browser",
429
+ "Reset all": "Adlakaat pep tra",
430
+ "Open browser": "Digeriñ ar merdeer",
431
431
  "Open caption": "Open caption",
432
432
  "Your map has been created with an anonymous account!": "Your map has been created with an anonymous account!",
433
433
  "Real-time collaboration": "Real-time collaboration",
434
- "Cannot parse data": "Cannot parse data",
435
- "Start typing...": "Start typing...",
436
- "No result": "No result",
437
- "Data browser": "Data browser",
434
+ "Cannot parse data": "N'haller ket dielfennañ ar roadennoù",
435
+ "Start typing...": "Krogit da skrivañ...",
436
+ "No result": "Disoc'h ebet",
437
+ "Data browser": "Furchal ar roadennoù",
438
438
  "When providing an URL, uMap can copy the remote data in a layer, or add this URL as remote source of the layer. In that case, data will always be fetched from that URL, and thus be up to date, but it will not be possible to edit it inside uMap.": "When providing an URL, uMap can copy the remote data in a layer, or add this URL as remote source of the layer. In that case, data will always be fetched from that URL, and thus be up to date, but it will not be possible to edit it inside uMap.",
439
439
  "Overpass supported expressions": "Overpass supported expressions",
440
440
  "key (eg. building)": "key (eg. building)",
@@ -445,25 +445,25 @@ const locale = {
445
445
  "key=\"value|value2\" (eg. name=\"Paris|Berlin\")": "key=\"value|value2\" (eg. name=\"Paris|Berlin\")",
446
446
  "More info about Overpass syntax": "More info about Overpass syntax",
447
447
  "For more complex needs, see": "For more complex needs, see",
448
- "Choose data": "Choose data",
448
+ "Choose data": "Dibab ar roadennoù",
449
449
  "Import helpers:": "Import helpers:",
450
- "Choose the format": "Choose the format",
451
- "Choose the layer": "Choose the layer",
452
- "Layer name": "Layer name",
450
+ "Choose the format": "Dibab ar furmad",
451
+ "Choose the layer": "Dibab ar gwiskad",
452
+ "Layer name": "Anv ar gwiskad",
453
453
  "Choose import mode": "Choose import mode",
454
- "Copy into the layer": "Copy into the layer",
454
+ "Copy into the layer": "Eilañ e-barzh ar gwiskad",
455
455
  "Link to the layer as remote data": "Link to the layer as remote data",
456
456
  "Condition": "Condition",
457
- "key=value or key!=value": "key=value or key!=value",
458
- "Are you sure you want to delete this rule?": "Are you sure you want to delete this rule?",
459
- "empty rule": "empty rule",
457
+ "key=value or key!=value": "key=value pe key!=value",
458
+ "Are you sure you want to delete this rule?": "Ha sur oc'h e faot deoc'h dilemel ar reolenn-mañ?",
459
+ "empty rule": "Reolenn goullo",
460
460
  "Conditional style rules": "Conditional style rules",
461
- "Add rule": "Add rule",
462
- "Browser: data": "Browser: data",
463
- "Browser: layers": "Browser: layers",
464
- "Browser: filters": "Browser: filters",
461
+ "Add rule": "Ouzhpennañ ur reolenn",
462
+ "Browser: data": "Merdeer: roadennoù",
463
+ "Browser: layers": "Merdeer: gwiskadoù",
464
+ "Browser: filters": "Merdeer: siloù",
465
465
  "Enable real-time collaboration": "Enable real-time collaboration",
466
- "✅ Copied!": "✅ Copied!",
466
+ "✅ Copied!": "✅ Eilet !",
467
467
  "Choose a dataset": "Choose a dataset",
468
468
  "Choose this dataset": "Choose this dataset",
469
469
  "GeoDataMine: thematic data from OpenStreetMap": "GeoDataMine: thematic data from OpenStreetMap",
@@ -473,32 +473,32 @@ const locale = {
473
473
  "Search admin boundary": "Search admin boundary",
474
474
  "Please choose a theme and a boundary first.": "Please choose a theme and a boundary first.",
475
475
  "Expression": "Expression",
476
- "Geometry mode": "Geometry mode",
476
+ "Geometry mode": "Mod mentoniezh",
477
477
  "Only geometry centers": "Only geometry centers",
478
478
  "Search area": "Search area",
479
479
  "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",
480
- "Data successfully imported!": "Data successfully imported!",
481
- "My Dashboard ({username})": "My Dashboard ({username})",
482
- "Clear data": "Clear data",
483
- "Remove layers": "Remove layers",
484
- "Categorized": "Categorized",
485
- "Alphabetical": "Alphabetical",
486
- "Category property": "Category property",
480
+ "Data successfully imported!": "Roadennoù enporzhiet gant berzh!",
481
+ "My Dashboard ({username})": "Ma Zaolenn-vourzh ({username})",
482
+ "Clear data": "Skarzhañ ar roadennoù",
483
+ "Remove layers": "Lemel ar gwiskadoù",
484
+ "Categorized": "Dre rummad",
485
+ "Alphabetical": "Urzh al lizherenneg",
486
+ "Category property": "Perzh",
487
487
  "Color palette": "Color palette",
488
- "Categories": "Categories",
488
+ "Categories": "Rummadoù",
489
489
  "Comma separated list of categories.": "Comma separated list of categories.",
490
490
  "Categories mode": "Categories mode",
491
491
  "Remove filter for this column": "Remove filter for this column",
492
492
  "Add filter for this column": "Add filter for this column",
493
- "Rename this column": "Rename this column",
494
- "Delete this column": "Delete this column",
495
- "Name “{name}” should not contain a dot.": "Name “{name}” should not contain a dot.",
496
- "This name already exists: “{name}”": "This name already exists: “{name}”",
497
- "Delete selected rows": "Delete selected rows",
493
+ "Rename this column": "Adenvel ar bann-mañ",
494
+ "Delete this column": "Dilemel ar bann-mañ",
495
+ "Name “{name}” should not contain a dot.": "Ne rankfe ket bout ur pik e-barzh an anv “{name}”.",
496
+ "This name already exists: “{name}”": "Bout 'zo an anv-se dija: “{name}”",
497
+ "Delete selected rows": "Dilemel al linennoù diuzet",
498
498
  "Found {count} rows. Are you sure you want to delete all?": "Found {count} rows. Are you sure you want to delete all?",
499
499
  "Expression is empty": "Expression is empty",
500
- "OK": "OK",
501
- "Cancel": "Cancel"
500
+ "OK": "Mat eo",
501
+ "Cancel": "Nullañ"
502
502
  }
503
503
  L.registerLocale("br", locale)
504
504
  L.setLocale("br")
@@ -426,15 +426,15 @@
426
426
  "Filters keys": "Filters keys",
427
427
  "Filter data": "Roadennoù ar sil",
428
428
  "Search map features…": "Klask perzhioù ar gartenn..",
429
- "Reset all": "Reset all",
430
- "Open browser": "Open browser",
429
+ "Reset all": "Adlakaat pep tra",
430
+ "Open browser": "Digeriñ ar merdeer",
431
431
  "Open caption": "Open caption",
432
432
  "Your map has been created with an anonymous account!": "Your map has been created with an anonymous account!",
433
433
  "Real-time collaboration": "Real-time collaboration",
434
- "Cannot parse data": "Cannot parse data",
435
- "Start typing...": "Start typing...",
436
- "No result": "No result",
437
- "Data browser": "Data browser",
434
+ "Cannot parse data": "N'haller ket dielfennañ ar roadennoù",
435
+ "Start typing...": "Krogit da skrivañ...",
436
+ "No result": "Disoc'h ebet",
437
+ "Data browser": "Furchal ar roadennoù",
438
438
  "When providing an URL, uMap can copy the remote data in a layer, or add this URL as remote source of the layer. In that case, data will always be fetched from that URL, and thus be up to date, but it will not be possible to edit it inside uMap.": "When providing an URL, uMap can copy the remote data in a layer, or add this URL as remote source of the layer. In that case, data will always be fetched from that URL, and thus be up to date, but it will not be possible to edit it inside uMap.",
439
439
  "Overpass supported expressions": "Overpass supported expressions",
440
440
  "key (eg. building)": "key (eg. building)",
@@ -445,25 +445,25 @@
445
445
  "key=\"value|value2\" (eg. name=\"Paris|Berlin\")": "key=\"value|value2\" (eg. name=\"Paris|Berlin\")",
446
446
  "More info about Overpass syntax": "More info about Overpass syntax",
447
447
  "For more complex needs, see": "For more complex needs, see",
448
- "Choose data": "Choose data",
448
+ "Choose data": "Dibab ar roadennoù",
449
449
  "Import helpers:": "Import helpers:",
450
- "Choose the format": "Choose the format",
451
- "Choose the layer": "Choose the layer",
452
- "Layer name": "Layer name",
450
+ "Choose the format": "Dibab ar furmad",
451
+ "Choose the layer": "Dibab ar gwiskad",
452
+ "Layer name": "Anv ar gwiskad",
453
453
  "Choose import mode": "Choose import mode",
454
- "Copy into the layer": "Copy into the layer",
454
+ "Copy into the layer": "Eilañ e-barzh ar gwiskad",
455
455
  "Link to the layer as remote data": "Link to the layer as remote data",
456
456
  "Condition": "Condition",
457
- "key=value or key!=value": "key=value or key!=value",
458
- "Are you sure you want to delete this rule?": "Are you sure you want to delete this rule?",
459
- "empty rule": "empty rule",
457
+ "key=value or key!=value": "key=value pe key!=value",
458
+ "Are you sure you want to delete this rule?": "Ha sur oc'h e faot deoc'h dilemel ar reolenn-mañ?",
459
+ "empty rule": "Reolenn goullo",
460
460
  "Conditional style rules": "Conditional style rules",
461
- "Add rule": "Add rule",
462
- "Browser: data": "Browser: data",
463
- "Browser: layers": "Browser: layers",
464
- "Browser: filters": "Browser: filters",
461
+ "Add rule": "Ouzhpennañ ur reolenn",
462
+ "Browser: data": "Merdeer: roadennoù",
463
+ "Browser: layers": "Merdeer: gwiskadoù",
464
+ "Browser: filters": "Merdeer: siloù",
465
465
  "Enable real-time collaboration": "Enable real-time collaboration",
466
- "✅ Copied!": "✅ Copied!",
466
+ "✅ Copied!": "✅ Eilet !",
467
467
  "Choose a dataset": "Choose a dataset",
468
468
  "Choose this dataset": "Choose this dataset",
469
469
  "GeoDataMine: thematic data from OpenStreetMap": "GeoDataMine: thematic data from OpenStreetMap",
@@ -473,30 +473,30 @@
473
473
  "Search admin boundary": "Search admin boundary",
474
474
  "Please choose a theme and a boundary first.": "Please choose a theme and a boundary first.",
475
475
  "Expression": "Expression",
476
- "Geometry mode": "Geometry mode",
476
+ "Geometry mode": "Mod mentoniezh",
477
477
  "Only geometry centers": "Only geometry centers",
478
478
  "Search area": "Search area",
479
479
  "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",
480
- "Data successfully imported!": "Data successfully imported!",
481
- "My Dashboard ({username})": "My Dashboard ({username})",
482
- "Clear data": "Clear data",
483
- "Remove layers": "Remove layers",
484
- "Categorized": "Categorized",
485
- "Alphabetical": "Alphabetical",
486
- "Category property": "Category property",
480
+ "Data successfully imported!": "Roadennoù enporzhiet gant berzh!",
481
+ "My Dashboard ({username})": "Ma Zaolenn-vourzh ({username})",
482
+ "Clear data": "Skarzhañ ar roadennoù",
483
+ "Remove layers": "Lemel ar gwiskadoù",
484
+ "Categorized": "Dre rummad",
485
+ "Alphabetical": "Urzh al lizherenneg",
486
+ "Category property": "Perzh",
487
487
  "Color palette": "Color palette",
488
- "Categories": "Categories",
488
+ "Categories": "Rummadoù",
489
489
  "Comma separated list of categories.": "Comma separated list of categories.",
490
490
  "Categories mode": "Categories mode",
491
491
  "Remove filter for this column": "Remove filter for this column",
492
492
  "Add filter for this column": "Add filter for this column",
493
- "Rename this column": "Rename this column",
494
- "Delete this column": "Delete this column",
495
- "Name “{name}” should not contain a dot.": "Name “{name}” should not contain a dot.",
496
- "This name already exists: “{name}”": "This name already exists: “{name}”",
497
- "Delete selected rows": "Delete selected rows",
493
+ "Rename this column": "Adenvel ar bann-mañ",
494
+ "Delete this column": "Dilemel ar bann-mañ",
495
+ "Name “{name}” should not contain a dot.": "Ne rankfe ket bout ur pik e-barzh an anv “{name}”.",
496
+ "This name already exists: “{name}”": "Bout 'zo an anv-se dija: “{name}”",
497
+ "Delete selected rows": "Dilemel al linennoù diuzet",
498
498
  "Found {count} rows. Are you sure you want to delete all?": "Found {count} rows. Are you sure you want to delete all?",
499
499
  "Expression is empty": "Expression is empty",
500
- "OK": "OK",
501
- "Cancel": "Cancel"
500
+ "OK": "Mat eo",
501
+ "Cancel": "Nullañ"
502
502
  }