umap-project 3.0.5__py3-none-any.whl → 3.1.0__py3-none-any.whl

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

Potentially problematic release.


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

Files changed (145) hide show
  1. umap/__init__.py +1 -1
  2. umap/forms.py +1 -1
  3. umap/locale/br/LC_MESSAGES/django.mo +0 -0
  4. umap/locale/br/LC_MESSAGES/django.po +219 -72
  5. umap/locale/ca/LC_MESSAGES/django.mo +0 -0
  6. umap/locale/ca/LC_MESSAGES/django.po +286 -95
  7. umap/locale/cs_CZ/LC_MESSAGES/django.mo +0 -0
  8. umap/locale/cs_CZ/LC_MESSAGES/django.po +211 -65
  9. umap/locale/da/LC_MESSAGES/django.mo +0 -0
  10. umap/locale/da/LC_MESSAGES/django.po +394 -202
  11. umap/locale/de/LC_MESSAGES/django.mo +0 -0
  12. umap/locale/de/LC_MESSAGES/django.po +146 -75
  13. umap/locale/el/LC_MESSAGES/django.mo +0 -0
  14. umap/locale/el/LC_MESSAGES/django.po +125 -59
  15. umap/locale/en/LC_MESSAGES/django.mo +0 -0
  16. umap/locale/en/LC_MESSAGES/django.po +124 -58
  17. umap/locale/es/LC_MESSAGES/django.mo +0 -0
  18. umap/locale/es/LC_MESSAGES/django.po +125 -59
  19. umap/locale/et/LC_MESSAGES/django.mo +0 -0
  20. umap/locale/et/LC_MESSAGES/django.po +210 -64
  21. umap/locale/eu/LC_MESSAGES/django.mo +0 -0
  22. umap/locale/eu/LC_MESSAGES/django.po +212 -65
  23. umap/locale/fa_IR/LC_MESSAGES/django.mo +0 -0
  24. umap/locale/fa_IR/LC_MESSAGES/django.po +286 -95
  25. umap/locale/fr/LC_MESSAGES/django.mo +0 -0
  26. umap/locale/fr/LC_MESSAGES/django.po +125 -59
  27. umap/locale/gl/LC_MESSAGES/django.mo +0 -0
  28. umap/locale/gl/LC_MESSAGES/django.po +212 -66
  29. umap/locale/hu/LC_MESSAGES/django.mo +0 -0
  30. umap/locale/hu/LC_MESSAGES/django.po +148 -78
  31. umap/locale/is/LC_MESSAGES/django.mo +0 -0
  32. umap/locale/is/LC_MESSAGES/django.po +130 -60
  33. umap/locale/it/LC_MESSAGES/django.mo +0 -0
  34. umap/locale/it/LC_MESSAGES/django.po +219 -73
  35. umap/locale/ms/LC_MESSAGES/django.mo +0 -0
  36. umap/locale/ms/LC_MESSAGES/django.po +289 -98
  37. umap/locale/nl/LC_MESSAGES/django.mo +0 -0
  38. umap/locale/nl/LC_MESSAGES/django.po +128 -61
  39. umap/locale/pl/LC_MESSAGES/django.mo +0 -0
  40. umap/locale/pl/LC_MESSAGES/django.po +287 -96
  41. umap/locale/pt/LC_MESSAGES/django.mo +0 -0
  42. umap/locale/pt/LC_MESSAGES/django.po +211 -65
  43. umap/locale/zh_TW/LC_MESSAGES/django.mo +0 -0
  44. umap/locale/zh_TW/LC_MESSAGES/django.po +212 -66
  45. umap/management/commands/migrate_to_S3.py +42 -20
  46. umap/management/commands/purge_old_versions.py +63 -0
  47. umap/management/commands/switch_user.py +52 -0
  48. umap/managers.py +29 -2
  49. umap/middleware.py +1 -1
  50. umap/migrations/0028_map_is_template.py +21 -0
  51. umap/models.py +14 -4
  52. umap/settings/base.py +22 -0
  53. umap/static/umap/base.css +4 -2
  54. umap/static/umap/content.css +1 -1
  55. umap/static/umap/css/dialog.css +5 -2
  56. umap/static/umap/css/form.css +19 -12
  57. umap/static/umap/css/icon.css +6 -0
  58. umap/static/umap/css/importers.css +4 -0
  59. umap/static/umap/css/panel.css +2 -0
  60. umap/static/umap/img/16-white.svg +5 -1
  61. umap/static/umap/img/16.svg +1 -1
  62. umap/static/umap/img/24-white.svg +3 -2
  63. umap/static/umap/img/24.svg +3 -4
  64. umap/static/umap/img/importers/opendata.svg +1 -0
  65. umap/static/umap/img/source/16-white.svg +8 -4
  66. umap/static/umap/img/source/16.svg +1 -1
  67. umap/static/umap/img/source/24-white.svg +5 -4
  68. umap/static/umap/img/source/24.svg +5 -6
  69. umap/static/umap/js/components/modal.js +27 -0
  70. umap/static/umap/js/modules/caption.js +4 -4
  71. umap/static/umap/js/modules/data/features.js +40 -4
  72. umap/static/umap/js/modules/data/layer.js +208 -138
  73. umap/static/umap/js/modules/form/builder.js +6 -14
  74. umap/static/umap/js/modules/form/fields.js +2 -2
  75. umap/static/umap/js/modules/help.js +15 -3
  76. umap/static/umap/js/modules/importer.js +7 -4
  77. umap/static/umap/js/modules/importers/opendata.js +142 -0
  78. umap/static/umap/js/modules/permissions.js +3 -3
  79. umap/static/umap/js/modules/rendering/controls.js +34 -2
  80. umap/static/umap/js/modules/rendering/icon.js +2 -2
  81. umap/static/umap/js/modules/rendering/layers/base.js +1 -1
  82. umap/static/umap/js/modules/rendering/layers/classified.js +55 -49
  83. umap/static/umap/js/modules/rendering/layers/cluster.js +16 -9
  84. umap/static/umap/js/modules/rendering/layers/heat.js +13 -11
  85. umap/static/umap/js/modules/rendering/map.js +5 -0
  86. umap/static/umap/js/modules/rendering/ui.js +23 -0
  87. umap/static/umap/js/modules/rules.js +24 -23
  88. umap/static/umap/js/modules/schema.js +60 -4
  89. umap/static/umap/js/modules/sync/updaters.js +7 -3
  90. umap/static/umap/js/modules/tableeditor.js +7 -30
  91. umap/static/umap/js/modules/templates.js +122 -0
  92. umap/static/umap/js/modules/ui/bar.js +13 -3
  93. umap/static/umap/js/modules/ui/panel.js +1 -1
  94. umap/static/umap/js/modules/umap.js +28 -13
  95. umap/static/umap/js/umap.controls.js +11 -4
  96. umap/static/umap/locale/br.js +51 -18
  97. umap/static/umap/locale/br.json +51 -18
  98. umap/static/umap/locale/da.js +343 -310
  99. umap/static/umap/locale/da.json +343 -310
  100. umap/static/umap/locale/de.js +40 -7
  101. umap/static/umap/locale/de.json +40 -7
  102. umap/static/umap/locale/el.js +31 -4
  103. umap/static/umap/locale/el.json +31 -4
  104. umap/static/umap/locale/en.js +34 -1
  105. umap/static/umap/locale/en.json +34 -1
  106. umap/static/umap/locale/es.js +37 -4
  107. umap/static/umap/locale/es.json +37 -4
  108. umap/static/umap/locale/fr.js +34 -1
  109. umap/static/umap/locale/fr.json +34 -1
  110. umap/static/umap/locale/hu.js +44 -17
  111. umap/static/umap/locale/hu.json +44 -17
  112. umap/static/umap/locale/it.js +74 -41
  113. umap/static/umap/locale/it.json +74 -41
  114. umap/static/umap/locale/nl.js +42 -9
  115. umap/static/umap/locale/nl.json +42 -9
  116. umap/static/umap/map.css +3 -23
  117. umap/static/umap/vendors/textpath/leaflet.textpath.js +184 -0
  118. umap/storage/fs.py +19 -9
  119. umap/templates/umap/dashboard_menu.html +5 -0
  120. umap/templates/umap/design_system.html +9 -0
  121. umap/templates/umap/js.html +3 -0
  122. umap/templates/umap/map_init.html +3 -1
  123. umap/templates/umap/map_list.html +2 -2
  124. umap/templates/umap/map_table.html +18 -18
  125. umap/templates/umap/user_dashboard.html +9 -58
  126. umap/templates/umap/user_map_table.html +36 -0
  127. umap/templates/umap/user_templates.html +19 -0
  128. umap/templatetags/umap_tags.py +5 -0
  129. umap/tests/integration/test_basics.py +9 -1
  130. umap/tests/integration/test_conditional_rules.py +57 -0
  131. umap/tests/integration/test_datalayer.py +16 -9
  132. umap/tests/integration/test_edit_marker.py +11 -0
  133. umap/tests/integration/test_tableeditor.py +42 -7
  134. umap/tests/integration/test_templates.py +44 -0
  135. umap/tests/test_dashboard.py +19 -0
  136. umap/tests/test_purge_old_versions.py +91 -0
  137. umap/tests/test_switch_user.py +31 -0
  138. umap/tests/test_views.py +67 -0
  139. umap/urls.py +7 -1
  140. umap/views.py +65 -19
  141. {umap_project-3.0.5.dist-info → umap_project-3.1.0.dist-info}/METADATA +15 -15
  142. {umap_project-3.0.5.dist-info → umap_project-3.1.0.dist-info}/RECORD +145 -132
  143. {umap_project-3.0.5.dist-info → umap_project-3.1.0.dist-info}/WHEEL +0 -0
  144. {umap_project-3.0.5.dist-info → umap_project-3.1.0.dist-info}/entry_points.txt +0 -0
  145. {umap_project-3.0.5.dist-info → umap_project-3.1.0.dist-info}/licenses/LICENSE +0 -0
@@ -4,6 +4,7 @@ import { translate } from '../i18n.js'
4
4
  import { WithTemplate } from '../utils.js'
5
5
  import * as Utils from '../utils.js'
6
6
  import ContextMenu from './contextmenu.js'
7
+ import TemplateImporter from '../templates.js'
7
8
 
8
9
  const TOP_BAR_TEMPLATE = `
9
10
  <div class="umap-main-edit-toolbox with-transition dark">
@@ -37,6 +38,7 @@ const TOP_BAR_TEMPLATE = `
37
38
  <i class="icon icon-16 icon-save-disabled"></i>
38
39
  <span hidden data-ref="saveLabel">${translate('Save')}</span>
39
40
  <span hidden data-ref="saveDraftLabel">${translate('Save draft')}</span>
41
+ <span hidden data-ref="saveTemplateLabel">${translate('Save template')}</span>
40
42
  </button>
41
43
  </div>
42
44
  </div>`
@@ -167,8 +169,11 @@ export class TopBar extends WithTemplate {
167
169
  const syncEnabled = this._umap.getProperty('syncEnabled')
168
170
  this.elements.peers.hidden = !syncEnabled
169
171
  this.elements.view.disabled = this._umap.sync._undoManager.isDirty()
170
- this.elements.saveLabel.hidden = this._umap.permissions.isDraft()
171
- this.elements.saveDraftLabel.hidden = !this._umap.permissions.isDraft()
172
+ const isDraft = this._umap.permissions.isDraft()
173
+ const isTemplate = this._umap.getProperty('is_template')
174
+ this.elements.saveLabel.hidden = isDraft || isTemplate
175
+ this.elements.saveDraftLabel.hidden = !isDraft || isTemplate
176
+ this.elements.saveTemplateLabel.hidden = !isTemplate
172
177
  this._umap.sync._undoManager.toggleState()
173
178
  }
174
179
  }
@@ -228,7 +233,7 @@ export class BottomBar extends WithTemplate {
228
233
 
229
234
  buildDataLayerSwitcher() {
230
235
  this.elements.layers.innerHTML = ''
231
- const datalayers = this._umap.datalayers.filter((d) => d.options.inCaption)
236
+ const datalayers = this._umap.datalayers.filter((d) => d.properties.inCaption)
232
237
  if (datalayers.length < 2) {
233
238
  this.elements.layers.hidden = true
234
239
  } else {
@@ -261,6 +266,7 @@ const EDIT_BAR_TEMPLATE = `
261
266
  <hr>
262
267
  <li data-ref="caption" hidden><button data-getstarted type="button" title="${translate('Edit map name and caption')}"><i class="icon icon-24 icon-caption"></i></button></li>
263
268
  <li data-ref="import" hidden><button type="button"><i class="icon icon-24 icon-upload"></i></button></li>
269
+ <li data-ref="templates" hidden><button type="button" title="${translate('Load template')}" data-getstarted><i class="icon icon-24 icon-template"></i></button></li>
264
270
  <li data-ref="layers" hidden><button type="button" title="${translate('Manage layers')}"><i class="icon icon-24 icon-layers"></i></button></li>
265
271
  <li data-ref="tilelayers" hidden><button type="button" title="${translate('Change tilelayers')}"><i class="icon icon-24 icon-tilelayer"></i></button></li>
266
272
  <li data-ref="center" hidden><button type="button"><i class="icon icon-24 icon-center"></i></button></li>
@@ -272,6 +278,7 @@ const EDIT_BAR_TEMPLATE = `
272
278
  export class EditBar extends WithTemplate {
273
279
  constructor(umap, leafletMap, parent) {
274
280
  super()
281
+ this.templateIimporter = new TemplateImporter(umap)
275
282
  this._umap = umap
276
283
  this._leafletMap = leafletMap
277
284
  this.loadTemplate(EDIT_BAR_TEMPLATE)
@@ -288,6 +295,7 @@ export class EditBar extends WithTemplate {
288
295
  this._onClick('multipolygon', () => this._umap.editedFeature.ui.editor.newShape())
289
296
  this._onClick('caption', () => this._umap.editCaption())
290
297
  this._onClick('import', () => this._umap.importer.open())
298
+ this._onClick('templates', () => this.templateIimporter.open())
291
299
  this._onClick('layers', () => this._umap.editDatalayers())
292
300
  this._onClick('tilelayers', () => this._leafletMap.editTileLayers())
293
301
  this._onClick('center', () => this._umap.editCenter())
@@ -306,6 +314,8 @@ export class EditBar extends WithTemplate {
306
314
  this.elements.multipolygon.hidden = !(editedFeature instanceof Polygon)
307
315
  this.elements.caption.hidden = this._umap.properties.editMode !== 'advanced'
308
316
  this.elements.import.hidden = this._umap.properties.editMode !== 'advanced'
317
+ this.elements.templates.hidden =
318
+ this._umap.properties.editMode !== 'advanced' && !this._umap.datalayers.count()
309
319
  this.elements.layers.hidden = this._umap.properties.editMode !== 'advanced'
310
320
  this.elements.tilelayers.hidden = this._umap.properties.editMode !== 'advanced'
311
321
  this.elements.center.hidden = this._umap.properties.editMode !== 'advanced'
@@ -57,7 +57,7 @@ export class Panel {
57
57
  if (className) DomUtil.addClass(body, className)
58
58
  const promise = new Promise((resolve, reject) => {
59
59
  DomUtil.addClass(this.container, 'on')
60
- resolve()
60
+ resolve(this)
61
61
  })
62
62
  DomEvent.on(closeButton, 'click', this.close, this)
63
63
  DomEvent.on(resizeButton, 'click', this.resize, this)
@@ -137,7 +137,7 @@ export default class Umap {
137
137
  this.caption = new Caption(this, this._leafletMap)
138
138
  this.importer = new Importer(this)
139
139
  this.share = new Share(this)
140
- this.rules = new Rules(this)
140
+ this.rules = new Rules(this, this)
141
141
 
142
142
  if (this.hasEditMode()) {
143
143
  this.editPanel = new EditPanel(this, this._leafletMap)
@@ -205,6 +205,7 @@ export default class Umap {
205
205
  }
206
206
  this._defaultExtent = true
207
207
  this.properties.name = translate('Untitled map')
208
+ await this.loadTemplateFromQueryString()
208
209
  await this.loadDataFromQueryString()
209
210
  }
210
211
 
@@ -349,6 +350,16 @@ export default class Umap {
349
350
  }
350
351
  }
351
352
 
353
+ async loadTemplateFromQueryString() {
354
+ const templateUrl = this.searchParams.get('templateUrl')
355
+ if (templateUrl) {
356
+ this.importer.build()
357
+ this.importer.url = templateUrl
358
+ this.importer.format = 'umap'
359
+ this.importer.submit()
360
+ }
361
+ }
362
+
352
363
  async loadDataFromQueryString() {
353
364
  let data = this.searchParams.get('data')
354
365
  const dataUrls = this.searchParams.getAll('dataUrl')
@@ -493,8 +504,7 @@ export default class Umap {
493
504
  }
494
505
 
495
506
  getOption(key, feature) {
496
- // TODO: remove when umap.forms.js is refactored and does not call blindly
497
- // obj.getOption anymore
507
+ // TODO: remove when field.js does not call blindly obj.getOption anymore
498
508
  return this.getProperty(key, feature)
499
509
  }
500
510
 
@@ -627,20 +637,20 @@ export default class Umap {
627
637
  this.fire('dataloaded')
628
638
  }
629
639
 
630
- createDataLayer(options = {}, sync = true) {
631
- options.name =
632
- options.name || `${translate('Layer')} ${this.datalayers.count() + 1}`
633
- const datalayer = new DataLayer(this, this._leafletMap, options)
640
+ createDataLayer(properties = {}, sync = true) {
641
+ properties.name =
642
+ properties.name || `${translate('Layer')} ${this.datalayers.count() + 1}`
643
+ const datalayer = new DataLayer(this, this._leafletMap, properties)
634
644
 
635
645
  if (sync !== false) {
636
- datalayer.sync.upsert(datalayer.options)
646
+ datalayer.sync.upsert(datalayer.properties)
637
647
  }
638
648
  return datalayer
639
649
  }
640
650
 
641
- createDirtyDataLayer(options) {
642
- const datalayer = this.createDataLayer(options, true)
643
- return datalayer
651
+ // TODO: remove me in favor of createDataLayer
652
+ createDirtyDataLayer(properties) {
653
+ return this.createDataLayer(properties, true)
644
654
  }
645
655
 
646
656
  newDataLayer() {
@@ -747,7 +757,11 @@ export default class Umap {
747
757
  if (!this.editEnabled) return
748
758
  if (this.properties.editMode !== 'advanced') return
749
759
  const container = DomUtil.create('div')
750
- const metadataFields = ['properties.name', 'properties.description']
760
+ const metadataFields = [
761
+ 'properties.name',
762
+ 'properties.description',
763
+ 'properties.is_template',
764
+ ]
751
765
 
752
766
  DomUtil.createTitle(container, translate('Edit map details'), 'icon-caption')
753
767
  const builder = new MutatingForm(this, metadataFields, {
@@ -1176,6 +1190,7 @@ export default class Umap {
1176
1190
  }
1177
1191
  const formData = new FormData()
1178
1192
  formData.append('name', this.properties.name)
1193
+ formData.append('is_template', Boolean(this.properties.is_template))
1179
1194
  formData.append('center', JSON.stringify(this.geometry()))
1180
1195
  formData.append('tags', this.properties.tags || [])
1181
1196
  formData.append('settings', JSON.stringify(geojson))
@@ -1480,7 +1495,7 @@ export default class Umap {
1480
1495
  datalayer.renderToolbox(row)
1481
1496
  const builder = new MutatingForm(
1482
1497
  datalayer,
1483
- [['options.name', { handler: 'EditableText' }]],
1498
+ [['properties.name', { handler: 'EditableText' }]],
1484
1499
  { className: 'umap-form-inline' }
1485
1500
  )
1486
1501
  const form = builder.build()
@@ -96,7 +96,7 @@ U.Locate = L.Control.Locate.extend({
96
96
  })
97
97
 
98
98
  U.Search = L.PhotonSearch.extend({
99
- initialize: function (map, input, options) {
99
+ initialize: function (map, input, layer, options) {
100
100
  this.options.placeholder = L._('Type a place name or coordinates')
101
101
  this.options.location_bias_scale = 0.5
102
102
  L.PhotonSearch.prototype.initialize.call(this, map, input, options)
@@ -107,6 +107,7 @@ U.Search = L.PhotonSearch.extend({
107
107
  this.handleResultsWithReverse(geojson)
108
108
  },
109
109
  })
110
+ this.layer = layer
110
111
  },
111
112
 
112
113
  handleResultsWithReverse: function (geojson) {
@@ -123,6 +124,7 @@ U.Search = L.PhotonSearch.extend({
123
124
  },
124
125
 
125
126
  search: function () {
127
+ this.layer.clearLayers()
126
128
  const pattern = /^(?<lat>[-+]?\d{1,2}[.,]\d+)\s*[ ,]\s*(?<lng>[-+]?\d{1,3}[.,]\d+)$/
127
129
  if (pattern.test(this.input.value)) {
128
130
  this.hide()
@@ -188,10 +190,10 @@ U.Search = L.PhotonSearch.extend({
188
190
  const coords = feature.geometry.coordinates
189
191
  const target = L.marker([coords[1], coords[0]], { icon })
190
192
  el.addEventListener('mouseover', (event) => {
191
- target.addTo(this.map)
193
+ target.addTo(this.layer)
192
194
  })
193
195
  el.addEventListener('mouseout', (event) => {
194
- target.removeFrom(this.map)
196
+ target.removeFrom(this.layer)
195
197
  })
196
198
  },
197
199
 
@@ -227,9 +229,14 @@ U.SearchControl = L.Control.extend({
227
229
  },
228
230
  this
229
231
  )
232
+ this.layer = L.layerGroup().addTo(map)
230
233
  return container
231
234
  },
232
235
 
236
+ onRemove: function () {
237
+ this.layer.remove()
238
+ },
239
+
233
240
  open: function () {
234
241
  const options = {
235
242
  limit: 10,
@@ -241,7 +248,7 @@ U.SearchControl = L.Control.extend({
241
248
  L.DomUtil.createTitle(container, L._('Search location'), 'icon-search')
242
249
  const input = L.DomUtil.create('input', 'photon-input', container)
243
250
  const resultsContainer = L.DomUtil.create('div', 'photon-autocomplete', container)
244
- this.search = new U.Search(this.map, input, options)
251
+ this.search = new U.Search(this.map, input, this.layer, options)
245
252
  const id = Math.random()
246
253
  this.search.on('ajax:send', () => {
247
254
  this.map.fire('dataloading', { id: id })
@@ -404,7 +404,7 @@ const locale = {
404
404
  "Max": "Brasañ",
405
405
  "From": "Adalek",
406
406
  "Until": "Betek",
407
- "Example: key1,key2|Label 2,key3|Label 3|checkbox": "Example: key1,key2|Label 2,key3|Label 3|checkbox",
407
+ "Example: key1,key2|Label 2,key3|Label 3|checkbox": "Skouer: key1,key2|Label 2,key3|Label 3|checkbox",
408
408
  "Edit in OpenStreetMap": "Kemmañ e-barzh OpenStreetMap",
409
409
  "Cannot determine latitude and longitude columns.": "Cannot determine latitude and longitude columns.",
410
410
  "Back to layers": "Distreiñ d'ar gwiskadoù",
@@ -513,7 +513,7 @@ const locale = {
513
513
  "Successfully imported {count} feature(s)": "{count} elfenn bet enporzhiet gant berzh",
514
514
  "Disconnected": "Digennasket",
515
515
  "You must be logged in": "Ret eo deoc'h bezañ kennasket",
516
- "on hover": "on hover",
516
+ "on hover": "pa dremen al logodenn war-c'hore",
517
517
  "Cannot load remote data for layer \"{layer}\" with url \"{url}\"": "Cannot load remote data for layer \"{layer}\" with url \"{url}\"",
518
518
  "Cannot parse remote data for layer \"{layer}\" with url \"{url}\"": "Cannot parse remote data for layer \"{layer}\" with url \"{url}\"",
519
519
  "Import failed: invalid data": "Enporzhiadur c'hwitet: roadennoù direizh",
@@ -523,27 +523,60 @@ const locale = {
523
523
  "Default zoom": "Zoum dre ziouer",
524
524
  "Default latitude": "Ledred dre ziouer",
525
525
  "Default longitude": "Hedred dre ziouer",
526
- "Edit map default view": "Edit map default view",
527
- "Use current center and zoom": "Use current center and zoom",
528
- "Layer permalink": "Layer permalink",
529
- "Back to home": "Back to home",
530
- "Home logo": "Home logo",
531
- "Add this geometry to my map": "Add this geometry to my map",
532
- "Add this place to my map": "Add this place to my map",
533
- "Cancel last edit": "Cancel last edit",
534
- "Redo last edit": "Redo last edit",
535
- "Links": "Links",
536
- "Images": "Images",
526
+ "Edit map default view": "Kemmañ gwel dre ziouer ar gartenn",
527
+ "Use current center and zoom": "Implij ar c'hreiz hag ar zoum a-vremañ",
528
+ "Layer permalink": "Liamm padus ar gwiskad",
529
+ "Back to home": "Distreiñ d'an degemer",
530
+ "Home logo": "Logo an degemer",
531
+ "Add this geometry to my map": "Ouzhpennañ ar c'heometriezh-mañ d'am c'hartenn",
532
+ "Add this place to my map": "Ouzhpennañ al lec'h-mañ d'am c'hartenn",
533
+ "Cancel last edit": "Nullañ ar c'hemm diwezhañ",
534
+ "Redo last edit": "Adober ar c'hemm diwezhañ",
535
+ "Links": "Liammoù",
536
+ "Images": "Skeudennoù",
537
537
  "Iframes": "Iframes",
538
- "Tags": "Tags",
538
+ "Tags": "Tikedennoù",
539
539
  "Geocode": "Geocode",
540
- "Display the back to home icon": "Display the back to home icon",
540
+ "Display the back to home icon": "Diskouez ar bouton \"distreiñ d'an degemer\"",
541
541
  "Do you want to display layer switcher in caption bar?": "Do you want to display layer switcher in caption bar?",
542
542
  "Simplify all geometries to points": "Simplify all geometries to points",
543
- "Back to list": "Back to list",
543
+ "Back to list": "Distreiñ d'al listenn",
544
544
  "Toggle rule": "Toggle rule",
545
- "Delete rule": "Delete rule",
546
- "Cannot save layer, please try again in a few minutes.": "Cannot save layer, please try again in a few minutes."
545
+ "Delete rule": "Dilemel ar reolenn",
546
+ "Cannot save layer, please try again in a few minutes.": "Cannot save layer, please try again in a few minutes.",
547
+ "Activate collaborative live editing on this map. Other users must reload the map after changing this setting.": "Activate collaborative live editing on this map. Other users must reload the map after changing this setting.",
548
+ "More help resources": "Titouroù skoazell all",
549
+ "This map is a template": "Ur patrom eo ar gartenn-mañ",
550
+ "Add text along path": "Ouzhpennañ an destenn a-hed al linenn",
551
+ "Text color": "Liv an destenn",
552
+ "Text offset": "Dilec'h an destenn",
553
+ "Text position": "Lec'hiadur an destenn",
554
+ "start": "deroù",
555
+ "center": "kreiz",
556
+ "end": "dibenn",
557
+ "Text repeat": "Adskrivañ an destenn",
558
+ "Text rotate": "C'hwelañ an destenn",
559
+ "Text size": "Ment an destenn",
560
+ "Load map template": "Kargañ patrom ar gartenn",
561
+ "My templates": "Ma fatromoù",
562
+ "From staff": "Erbedet",
563
+ "From community": "Eus ar gumuniezh",
564
+ "You must select a template.": "Dav eo deoc'h diuzañ ur patrom.",
565
+ "Line decoration": "Line decoration",
566
+ "Reuse this template": "Adimplij ar patrom-mañ",
567
+ "Create a new map using this template": "Krouiñ ur gartenn nevez en ur implij ar patrom-mañ",
568
+ "Save template": "Enrollañ ar patrom",
569
+ "Load template": "Kargañ ar patrom",
570
+ "Loading a template will apply predefined styles and settings to your map": "Loading a template will apply predefined styles and settings to your map",
571
+ "Load template with data": "Load template with data",
572
+ "You have no registered template yet. You can add one by creating a new map and flagging it as \"template\".": "You have no registered template yet. You can add one by creating a new map and flagging it as \"template\".",
573
+ "There is no recommended template yet. Recommended templates are the ones starred by uMap administrators.": "There is no recommended template yet. Recommended templates are the ones starred by uMap administrators.",
574
+ "There is no public template yet.": "There is no public template yet.",
575
+ "Explore": "Explore",
576
+ "Import data from public open data portals": "Import data from public open data portals",
577
+ "Choose a portal": "Choose a portal",
578
+ "Limit results to current map view": "Limit results to current map view",
579
+ "Please choose an instance first.": "Please choose an instance first."
547
580
  }
548
581
  L.registerLocale("br", locale)
549
582
  L.setLocale("br")
@@ -404,7 +404,7 @@
404
404
  "Max": "Brasañ",
405
405
  "From": "Adalek",
406
406
  "Until": "Betek",
407
- "Example: key1,key2|Label 2,key3|Label 3|checkbox": "Example: key1,key2|Label 2,key3|Label 3|checkbox",
407
+ "Example: key1,key2|Label 2,key3|Label 3|checkbox": "Skouer: key1,key2|Label 2,key3|Label 3|checkbox",
408
408
  "Edit in OpenStreetMap": "Kemmañ e-barzh OpenStreetMap",
409
409
  "Cannot determine latitude and longitude columns.": "Cannot determine latitude and longitude columns.",
410
410
  "Back to layers": "Distreiñ d'ar gwiskadoù",
@@ -513,7 +513,7 @@
513
513
  "Successfully imported {count} feature(s)": "{count} elfenn bet enporzhiet gant berzh",
514
514
  "Disconnected": "Digennasket",
515
515
  "You must be logged in": "Ret eo deoc'h bezañ kennasket",
516
- "on hover": "on hover",
516
+ "on hover": "pa dremen al logodenn war-c'hore",
517
517
  "Cannot load remote data for layer \"{layer}\" with url \"{url}\"": "Cannot load remote data for layer \"{layer}\" with url \"{url}\"",
518
518
  "Cannot parse remote data for layer \"{layer}\" with url \"{url}\"": "Cannot parse remote data for layer \"{layer}\" with url \"{url}\"",
519
519
  "Import failed: invalid data": "Enporzhiadur c'hwitet: roadennoù direizh",
@@ -523,25 +523,58 @@
523
523
  "Default zoom": "Zoum dre ziouer",
524
524
  "Default latitude": "Ledred dre ziouer",
525
525
  "Default longitude": "Hedred dre ziouer",
526
- "Edit map default view": "Edit map default view",
527
- "Use current center and zoom": "Use current center and zoom",
528
- "Layer permalink": "Layer permalink",
529
- "Back to home": "Back to home",
530
- "Home logo": "Home logo",
531
- "Add this geometry to my map": "Add this geometry to my map",
532
- "Add this place to my map": "Add this place to my map",
533
- "Cancel last edit": "Cancel last edit",
534
- "Redo last edit": "Redo last edit",
535
- "Links": "Links",
536
- "Images": "Images",
526
+ "Edit map default view": "Kemmañ gwel dre ziouer ar gartenn",
527
+ "Use current center and zoom": "Implij ar c'hreiz hag ar zoum a-vremañ",
528
+ "Layer permalink": "Liamm padus ar gwiskad",
529
+ "Back to home": "Distreiñ d'an degemer",
530
+ "Home logo": "Logo an degemer",
531
+ "Add this geometry to my map": "Ouzhpennañ ar c'heometriezh-mañ d'am c'hartenn",
532
+ "Add this place to my map": "Ouzhpennañ al lec'h-mañ d'am c'hartenn",
533
+ "Cancel last edit": "Nullañ ar c'hemm diwezhañ",
534
+ "Redo last edit": "Adober ar c'hemm diwezhañ",
535
+ "Links": "Liammoù",
536
+ "Images": "Skeudennoù",
537
537
  "Iframes": "Iframes",
538
- "Tags": "Tags",
538
+ "Tags": "Tikedennoù",
539
539
  "Geocode": "Geocode",
540
- "Display the back to home icon": "Display the back to home icon",
540
+ "Display the back to home icon": "Diskouez ar bouton \"distreiñ d'an degemer\"",
541
541
  "Do you want to display layer switcher in caption bar?": "Do you want to display layer switcher in caption bar?",
542
542
  "Simplify all geometries to points": "Simplify all geometries to points",
543
- "Back to list": "Back to list",
543
+ "Back to list": "Distreiñ d'al listenn",
544
544
  "Toggle rule": "Toggle rule",
545
- "Delete rule": "Delete rule",
546
- "Cannot save layer, please try again in a few minutes.": "Cannot save layer, please try again in a few minutes."
545
+ "Delete rule": "Dilemel ar reolenn",
546
+ "Cannot save layer, please try again in a few minutes.": "Cannot save layer, please try again in a few minutes.",
547
+ "Activate collaborative live editing on this map. Other users must reload the map after changing this setting.": "Activate collaborative live editing on this map. Other users must reload the map after changing this setting.",
548
+ "More help resources": "Titouroù skoazell all",
549
+ "This map is a template": "Ur patrom eo ar gartenn-mañ",
550
+ "Add text along path": "Ouzhpennañ an destenn a-hed al linenn",
551
+ "Text color": "Liv an destenn",
552
+ "Text offset": "Dilec'h an destenn",
553
+ "Text position": "Lec'hiadur an destenn",
554
+ "start": "deroù",
555
+ "center": "kreiz",
556
+ "end": "dibenn",
557
+ "Text repeat": "Adskrivañ an destenn",
558
+ "Text rotate": "C'hwelañ an destenn",
559
+ "Text size": "Ment an destenn",
560
+ "Load map template": "Kargañ patrom ar gartenn",
561
+ "My templates": "Ma fatromoù",
562
+ "From staff": "Erbedet",
563
+ "From community": "Eus ar gumuniezh",
564
+ "You must select a template.": "Dav eo deoc'h diuzañ ur patrom.",
565
+ "Line decoration": "Line decoration",
566
+ "Reuse this template": "Adimplij ar patrom-mañ",
567
+ "Create a new map using this template": "Krouiñ ur gartenn nevez en ur implij ar patrom-mañ",
568
+ "Save template": "Enrollañ ar patrom",
569
+ "Load template": "Kargañ ar patrom",
570
+ "Loading a template will apply predefined styles and settings to your map": "Loading a template will apply predefined styles and settings to your map",
571
+ "Load template with data": "Load template with data",
572
+ "You have no registered template yet. You can add one by creating a new map and flagging it as \"template\".": "You have no registered template yet. You can add one by creating a new map and flagging it as \"template\".",
573
+ "There is no recommended template yet. Recommended templates are the ones starred by uMap administrators.": "There is no recommended template yet. Recommended templates are the ones starred by uMap administrators.",
574
+ "There is no public template yet.": "There is no public template yet.",
575
+ "Explore": "Explore",
576
+ "Import data from public open data portals": "Import data from public open data portals",
577
+ "Choose a portal": "Choose a portal",
578
+ "Limit results to current map view": "Limit results to current map view",
579
+ "Please choose an instance first.": "Please choose an instance first."
547
580
  }