umap-project 2.8.0a2__py3-none-any.whl → 2.8.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.
- umap/__init__.py +1 -1
- umap/settings/local_s3.py +45 -0
- umap/static/umap/css/form.css +3 -0
- umap/static/umap/js/modules/data/features.js +12 -0
- umap/static/umap/js/modules/data/layer.js +4 -6
- umap/static/umap/js/modules/importer.js +10 -5
- umap/static/umap/js/modules/rendering/icon.js +2 -1
- umap/static/umap/js/modules/rendering/map.js +7 -7
- umap/static/umap/js/modules/rendering/ui.js +6 -2
- umap/static/umap/js/modules/request.js +2 -2
- umap/static/umap/js/modules/ui/dialog.js +5 -0
- umap/static/umap/js/modules/umap.js +27 -6
- umap/static/umap/js/umap.controls.js +7 -4
- umap/static/umap/js/umap.forms.js +44 -0
- umap/static/umap/map.css +34 -166
- umap/static/umap/vars.css +0 -1
- umap/templates/base.html +2 -0
- umap/templates/umap/components/alerts/alert.html +4 -0
- umap/templates/umap/css.html +3 -0
- umap/templates/umap/js.html +2 -0
- umap/templates/umap/map_init.html +2 -0
- umap/templates/umap/user_dashboard.html +2 -0
- umap/tests/fixtures/test_upload_simple_marker.json +19 -0
- umap/tests/integration/test_edit_datalayer.py +11 -0
- umap/tests/integration/test_import.py +20 -1
- umap/tests/test_dashboard.py +82 -0
- umap/tests/test_team_views.py +35 -1
- umap/tests/test_views.py +0 -74
- umap/views.py +5 -1
- {umap_project-2.8.0a2.dist-info → umap_project-2.8.0b0.dist-info}/METADATA +1 -1
- {umap_project-2.8.0a2.dist-info → umap_project-2.8.0b0.dist-info}/RECORD +34 -31
- {umap_project-2.8.0a2.dist-info → umap_project-2.8.0b0.dist-info}/WHEEL +0 -0
- {umap_project-2.8.0a2.dist-info → umap_project-2.8.0b0.dist-info}/entry_points.txt +0 -0
- {umap_project-2.8.0a2.dist-info → umap_project-2.8.0b0.dist-info}/licenses/LICENSE +0 -0
umap/__init__.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
VERSION = "2.8.
|
|
1
|
+
VERSION = "2.8.0b0"
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
from umap.settings.local import *
|
|
2
|
+
|
|
3
|
+
DATABASES = {
|
|
4
|
+
"default": {
|
|
5
|
+
"ENGINE": "django.contrib.gis.db.backends.postgis",
|
|
6
|
+
"NAME": "umaps3",
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
STORAGES = {
|
|
11
|
+
"default": {
|
|
12
|
+
"BACKEND": "storages.backends.s3.S3Storage",
|
|
13
|
+
"OPTIONS": {
|
|
14
|
+
"access_key": "OScTD3CClCcO54Ax2DLz",
|
|
15
|
+
"secret_key": "eK9tfPRHoFh0nKLkZpJJoC4RJS1ptGfko3iBBd5k",
|
|
16
|
+
"bucket_name": "umap-default",
|
|
17
|
+
"region_name": "eu",
|
|
18
|
+
"endpoint_url": "http://127.0.0.1:9000",
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
"data": {
|
|
22
|
+
"BACKEND": "umap.storage.s3.S3DataStorage",
|
|
23
|
+
"OPTIONS": {
|
|
24
|
+
"access_key": "OScTD3CClCcO54Ax2DLz",
|
|
25
|
+
"secret_key": "eK9tfPRHoFh0nKLkZpJJoC4RJS1ptGfko3iBBd5k",
|
|
26
|
+
"bucket_name": "umap",
|
|
27
|
+
"region_name": "eu",
|
|
28
|
+
"endpoint_url": "http://127.0.0.1:9000",
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
"staticfiles": {
|
|
32
|
+
"BACKEND": "storages.backends.s3.S3Storage",
|
|
33
|
+
"OPTIONS": {
|
|
34
|
+
"access_key": "OScTD3CClCcO54Ax2DLz",
|
|
35
|
+
"secret_key": "eK9tfPRHoFh0nKLkZpJJoC4RJS1ptGfko3iBBd5k",
|
|
36
|
+
"bucket_name": "umap-staticfiles",
|
|
37
|
+
"region_name": "eu",
|
|
38
|
+
"endpoint_url": "http://127.0.0.1:9000",
|
|
39
|
+
"default_acl": "public-read",
|
|
40
|
+
# "querystring_auth": False,
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
# STATIC_URL = "http://127.0.0.1:9000/umap-staticfiles/"
|
umap/static/umap/css/form.css
CHANGED
|
@@ -658,6 +658,18 @@ class Feature {
|
|
|
658
658
|
)
|
|
659
659
|
return items
|
|
660
660
|
}
|
|
661
|
+
|
|
662
|
+
isActive() {
|
|
663
|
+
return this._umap.activeFeature === this
|
|
664
|
+
}
|
|
665
|
+
|
|
666
|
+
activate() {
|
|
667
|
+
this._umap.activeFeature = this
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
deactivate() {
|
|
671
|
+
if (this._umap.activeFeature === this) this._umap.activeFeature = undefined
|
|
672
|
+
}
|
|
661
673
|
}
|
|
662
674
|
|
|
663
675
|
export class Point extends Feature {
|
|
@@ -526,15 +526,13 @@ export class DataLayer extends ServerStored {
|
|
|
526
526
|
}
|
|
527
527
|
|
|
528
528
|
async importFromFiles(files, type) {
|
|
529
|
-
|
|
529
|
+
const toLoad = []
|
|
530
530
|
for (const file of files) {
|
|
531
|
-
|
|
532
|
-
if (features) {
|
|
533
|
-
all = all.concat(features)
|
|
534
|
-
}
|
|
531
|
+
toLoad.push(this.importFromFile(file, type))
|
|
535
532
|
}
|
|
533
|
+
const features = await Promise.all(toLoad)
|
|
536
534
|
return new Promise((resolve) => {
|
|
537
|
-
resolve(
|
|
535
|
+
resolve([].concat(...features))
|
|
538
536
|
})
|
|
539
537
|
}
|
|
540
538
|
|
|
@@ -64,7 +64,10 @@ export default class Importer extends Utils.WithTemplate {
|
|
|
64
64
|
this.TYPES = ['geojson', 'csv', 'gpx', 'kml', 'osm', 'georss', 'umap']
|
|
65
65
|
this.IMPORTERS = []
|
|
66
66
|
this.loadImporters()
|
|
67
|
-
this.dialog = new Dialog({
|
|
67
|
+
this.dialog = new Dialog({
|
|
68
|
+
className: 'importers dark',
|
|
69
|
+
back: () => this.showImporters(),
|
|
70
|
+
})
|
|
68
71
|
}
|
|
69
72
|
|
|
70
73
|
loadImporters() {
|
|
@@ -172,7 +175,7 @@ export default class Importer extends Utils.WithTemplate {
|
|
|
172
175
|
button.addEventListener('click', () => plugin.open(this))
|
|
173
176
|
grid.appendChild(button)
|
|
174
177
|
}
|
|
175
|
-
this.dialog.open({ template: element, cancel: false, accept: false })
|
|
178
|
+
this.dialog.open({ template: element, cancel: false, accept: false, back: false })
|
|
176
179
|
}
|
|
177
180
|
|
|
178
181
|
build() {
|
|
@@ -355,9 +358,11 @@ export default class Importer extends Utils.WithTemplate {
|
|
|
355
358
|
|
|
356
359
|
onSuccess(count) {
|
|
357
360
|
if (count) {
|
|
358
|
-
Alert.success(
|
|
359
|
-
count
|
|
360
|
-
|
|
361
|
+
Alert.success(
|
|
362
|
+
translate('Successfully imported {count} feature(s)', {
|
|
363
|
+
count: count,
|
|
364
|
+
})
|
|
365
|
+
)
|
|
361
366
|
} else {
|
|
362
367
|
Alert.success(translate('Data successfully imported!'))
|
|
363
368
|
}
|
|
@@ -22,7 +22,7 @@ export function getClass(name) {
|
|
|
22
22
|
|
|
23
23
|
export const RECENT = []
|
|
24
24
|
|
|
25
|
-
const BaseIcon =
|
|
25
|
+
const BaseIcon = DivIcon.extend({
|
|
26
26
|
initialize: function (options) {
|
|
27
27
|
const default_options = {
|
|
28
28
|
iconSize: null, // Made in css
|
|
@@ -86,6 +86,7 @@ const DefaultIcon = BaseIcon.extend({
|
|
|
86
86
|
},
|
|
87
87
|
|
|
88
88
|
_setIconStyles: function (img, name) {
|
|
89
|
+
if (this.feature.isActive()) this.options.className += ' umap-icon-active'
|
|
89
90
|
BaseIcon.prototype._setIconStyles.call(this, img, name)
|
|
90
91
|
const color = this._getColor()
|
|
91
92
|
const opacity = this._getOpacity()
|
|
@@ -233,12 +233,8 @@ const ManageTilelayerMixin = {
|
|
|
233
233
|
},
|
|
234
234
|
|
|
235
235
|
updateTileLayers: function () {
|
|
236
|
-
const callback = (tilelayer) => {
|
|
237
|
-
this.options.tilelayer = tilelayer.toJSON()
|
|
238
|
-
this._umap.isDirty = true
|
|
239
|
-
}
|
|
240
236
|
if (this._controls.tilelayersChooser) {
|
|
241
|
-
this._controls.tilelayersChooser.openSwitcher({
|
|
237
|
+
this._controls.tilelayersChooser.openSwitcher({ edit: true })
|
|
242
238
|
}
|
|
243
239
|
},
|
|
244
240
|
}
|
|
@@ -263,8 +259,12 @@ export const LeafletMap = BaseMap.extend({
|
|
|
263
259
|
this.loader.onAdd(this)
|
|
264
260
|
|
|
265
261
|
if (!this.options.noControl) {
|
|
266
|
-
DomEvent.on(document.body, 'dataloading', (
|
|
267
|
-
|
|
262
|
+
DomEvent.on(document.body, 'dataloading', (event) =>
|
|
263
|
+
this.fire('dataloading', event.detail)
|
|
264
|
+
)
|
|
265
|
+
DomEvent.on(document.body, 'dataload', (event) =>
|
|
266
|
+
this.fire('dataload', event.detail)
|
|
267
|
+
)
|
|
268
268
|
this.on('click', this.closeInplaceToolbar)
|
|
269
269
|
}
|
|
270
270
|
|
|
@@ -238,11 +238,15 @@ export const LeafletMarker = Marker.extend({
|
|
|
238
238
|
},
|
|
239
239
|
|
|
240
240
|
highlight: function () {
|
|
241
|
-
|
|
241
|
+
this.feature.activate()
|
|
242
|
+
this._redraw()
|
|
243
|
+
this._bringToFront()
|
|
242
244
|
},
|
|
243
245
|
|
|
244
246
|
resetHighlight: function () {
|
|
245
|
-
|
|
247
|
+
this.feature.deactivate()
|
|
248
|
+
this._redraw()
|
|
249
|
+
this._resetZIndex()
|
|
246
250
|
},
|
|
247
251
|
|
|
248
252
|
getPopupToolbarAnchor: function () {
|
|
@@ -47,8 +47,8 @@ class BaseRequest {
|
|
|
47
47
|
// In case of error, an alert is sent, but non 20X status are not handled
|
|
48
48
|
// The consumer must check the response status by hand
|
|
49
49
|
export class Request extends BaseRequest {
|
|
50
|
-
fire(name,
|
|
51
|
-
document.body.dispatchEvent(new CustomEvent(name,
|
|
50
|
+
fire(name, detail) {
|
|
51
|
+
document.body.dispatchEvent(new CustomEvent(name, { detail }))
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
async _fetch(method, uri, headers, data) {
|
|
@@ -6,6 +6,7 @@ const TEMPLATE = `
|
|
|
6
6
|
<form method="dialog" data-ref="form">
|
|
7
7
|
<ul class="buttons">
|
|
8
8
|
<li><i class="icon icon-16 icon-close" data-close></i></li>
|
|
9
|
+
<li hidden data-ref="back"><i class="icon icon-16 icon-back"></i></li>
|
|
9
10
|
</ul>
|
|
10
11
|
<h3 data-ref="message" id="${Math.round(Date.now()).toString(36)}"></h3>
|
|
11
12
|
<fieldset data-ref="fieldset" role="document">
|
|
@@ -123,6 +124,10 @@ export default class Dialog extends WithTemplate {
|
|
|
123
124
|
} else {
|
|
124
125
|
this.elements.template.innerHTML = dialog.template || ''
|
|
125
126
|
}
|
|
127
|
+
this.elements.back.hidden = !dialog.back
|
|
128
|
+
if (dialog.back) {
|
|
129
|
+
this.elements.back.addEventListener('click', dialog.back)
|
|
130
|
+
}
|
|
126
131
|
|
|
127
132
|
this.focusable = this.getFocusable()
|
|
128
133
|
this.hasFormData = this.elements.fieldset.elements.length > 0
|
|
@@ -218,6 +218,14 @@ export default class Umap extends ServerStored {
|
|
|
218
218
|
this.fire('seteditedfeature')
|
|
219
219
|
}
|
|
220
220
|
|
|
221
|
+
get activeFeature() {
|
|
222
|
+
return this._activeFeature
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
set activeFeature(feature) {
|
|
226
|
+
this._activeFeature = feature
|
|
227
|
+
}
|
|
228
|
+
|
|
221
229
|
setPropertiesFromQueryString() {
|
|
222
230
|
const asBoolean = (key) => {
|
|
223
231
|
const value = this.searchParams.get(key)
|
|
@@ -570,9 +578,11 @@ export default class Umap extends ServerStored {
|
|
|
570
578
|
}
|
|
571
579
|
this.datalayersLoaded = true
|
|
572
580
|
this.fire('datalayersloaded')
|
|
581
|
+
const toLoad = []
|
|
573
582
|
for (const datalayer of this.datalayersIndex) {
|
|
574
|
-
if (datalayer.showAtLoad())
|
|
583
|
+
if (datalayer.showAtLoad()) toLoad.push(datalayer.show())
|
|
575
584
|
}
|
|
585
|
+
await Promise.all(toLoad)
|
|
576
586
|
this.dataloaded = true
|
|
577
587
|
this.fire('dataloaded')
|
|
578
588
|
}
|
|
@@ -643,6 +653,12 @@ export default class Umap extends ServerStored {
|
|
|
643
653
|
// have changed, we'll be more subtil when we'll remove the
|
|
644
654
|
// save action
|
|
645
655
|
this.render(['name', 'user', 'permissions'])
|
|
656
|
+
if (!this._leafletMap.listens('saved')) {
|
|
657
|
+
// When we save only layers, we don't have the map feedback message
|
|
658
|
+
this._leafletMap.on('saved', () => {
|
|
659
|
+
Alert.success(translate('Map has been saved!'))
|
|
660
|
+
})
|
|
661
|
+
}
|
|
646
662
|
this.fire('saved')
|
|
647
663
|
}
|
|
648
664
|
|
|
@@ -1184,7 +1200,7 @@ export default class Umap extends ServerStored {
|
|
|
1184
1200
|
geometry() {
|
|
1185
1201
|
/* Return a GeoJSON geometry Object */
|
|
1186
1202
|
const latlng = this._leafletMap.latLng(
|
|
1187
|
-
this.
|
|
1203
|
+
this.properties.center || this._leafletMap.getCenter()
|
|
1188
1204
|
)
|
|
1189
1205
|
return {
|
|
1190
1206
|
type: 'Point',
|
|
@@ -1426,9 +1442,14 @@ export default class Umap extends ServerStored {
|
|
|
1426
1442
|
const row = DomUtil.create('li', 'orderable', ul)
|
|
1427
1443
|
DomUtil.createIcon(row, 'icon-drag', translate('Drag to reorder'))
|
|
1428
1444
|
datalayer.renderToolbox(row)
|
|
1429
|
-
const
|
|
1445
|
+
const builder = new U.FormBuilder(
|
|
1446
|
+
datalayer,
|
|
1447
|
+
[['options.name', { handler: 'EditableText' }]],
|
|
1448
|
+
{ className: 'umap-form-inline' }
|
|
1449
|
+
)
|
|
1450
|
+
const form = builder.build()
|
|
1451
|
+
row.appendChild(form)
|
|
1430
1452
|
row.classList.toggle('off', !datalayer.isVisible())
|
|
1431
|
-
title.textContent = datalayer.options.name
|
|
1432
1453
|
row.dataset.id = stamp(datalayer)
|
|
1433
1454
|
})
|
|
1434
1455
|
const onReorder = (src, dst, initialIndex, finalIndex) => {
|
|
@@ -1662,8 +1683,8 @@ export default class Umap extends ServerStored {
|
|
|
1662
1683
|
}
|
|
1663
1684
|
|
|
1664
1685
|
_setCenterAndZoom() {
|
|
1665
|
-
this.
|
|
1666
|
-
this.
|
|
1686
|
+
this.properties.center = this._leafletMap.getCenter()
|
|
1687
|
+
this.properties.zoom = this._leafletMap.getZoom()
|
|
1667
1688
|
this.isDirty = true
|
|
1668
1689
|
this._defaultExtent = false
|
|
1669
1690
|
}
|
|
@@ -683,10 +683,13 @@ U.TileLayerChooser = L.Control.extend({
|
|
|
683
683
|
L.DomEvent.on(
|
|
684
684
|
el,
|
|
685
685
|
'click',
|
|
686
|
-
|
|
686
|
+
() => {
|
|
687
687
|
this.map.selectTileLayer(tilelayer)
|
|
688
688
|
this.map._controls.tilelayers.setLayers()
|
|
689
|
-
if (options?.
|
|
689
|
+
if (options?.edit) {
|
|
690
|
+
this.map._umap.properties.tilelayer = tilelayer.toJSON()
|
|
691
|
+
this.map._umap.isDirty = true
|
|
692
|
+
}
|
|
690
693
|
},
|
|
691
694
|
this
|
|
692
695
|
)
|
|
@@ -942,11 +945,11 @@ L.Control.Loading.include({
|
|
|
942
945
|
},
|
|
943
946
|
|
|
944
947
|
_showIndicator: function () {
|
|
945
|
-
|
|
948
|
+
this._map._container.classList.add('umap-loading')
|
|
946
949
|
},
|
|
947
950
|
|
|
948
951
|
_hideIndicator: function () {
|
|
949
|
-
|
|
952
|
+
this._map._container.classList.remove('umap-loading')
|
|
950
953
|
},
|
|
951
954
|
})
|
|
952
955
|
|
|
@@ -259,6 +259,35 @@ L.FormBuilder.CheckBox.include({
|
|
|
259
259
|
},
|
|
260
260
|
})
|
|
261
261
|
|
|
262
|
+
L.FormBuilder.EditableText = L.FormBuilder.Element.extend({
|
|
263
|
+
build: function () {
|
|
264
|
+
this.input = L.DomUtil.create('span', this.options.className || '', this.parentNode)
|
|
265
|
+
this.input.contentEditable = true
|
|
266
|
+
this.fetch()
|
|
267
|
+
L.DomEvent.on(this.input, 'input', this.sync, this)
|
|
268
|
+
L.DomEvent.on(this.input, 'keypress', this.onKeyPress, this)
|
|
269
|
+
},
|
|
270
|
+
|
|
271
|
+
getParentNode: function () {
|
|
272
|
+
return this.form
|
|
273
|
+
},
|
|
274
|
+
|
|
275
|
+
value: function () {
|
|
276
|
+
return this.input.textContent
|
|
277
|
+
},
|
|
278
|
+
|
|
279
|
+
fetch: function () {
|
|
280
|
+
this.input.textContent = this.toHTML()
|
|
281
|
+
},
|
|
282
|
+
|
|
283
|
+
onKeyPress: function (event) {
|
|
284
|
+
if (event.keyCode === 13) {
|
|
285
|
+
event.preventDefault()
|
|
286
|
+
this.input.blur()
|
|
287
|
+
}
|
|
288
|
+
},
|
|
289
|
+
})
|
|
290
|
+
|
|
262
291
|
L.FormBuilder.ColorPicker = L.FormBuilder.Input.extend({
|
|
263
292
|
colors: U.COLORS,
|
|
264
293
|
getParentNode: function () {
|
|
@@ -1192,6 +1221,21 @@ U.FormBuilder = L.FormBuilder.extend({
|
|
|
1192
1221
|
}
|
|
1193
1222
|
},
|
|
1194
1223
|
|
|
1224
|
+
getter: function (field) {
|
|
1225
|
+
const path = field.split('.')
|
|
1226
|
+
let value = this.obj
|
|
1227
|
+
let sub
|
|
1228
|
+
for (sub of path) {
|
|
1229
|
+
try {
|
|
1230
|
+
value = value[sub]
|
|
1231
|
+
} catch {
|
|
1232
|
+
console.log(field)
|
|
1233
|
+
}
|
|
1234
|
+
}
|
|
1235
|
+
if (value === undefined) values = U.SCHEMA[sub]?.default
|
|
1236
|
+
return value
|
|
1237
|
+
},
|
|
1238
|
+
|
|
1195
1239
|
finish: (event) => {
|
|
1196
1240
|
event.helper?.input?.blur()
|
|
1197
1241
|
},
|
umap/static/umap/map.css
CHANGED
|
@@ -924,7 +924,6 @@ a.umap-control-caption,
|
|
|
924
924
|
width: 2px;
|
|
925
925
|
}
|
|
926
926
|
.umap-icon-active {
|
|
927
|
-
z-index: var(--zindex-icon-active)!important;
|
|
928
927
|
opacity: 1.0!important;
|
|
929
928
|
}
|
|
930
929
|
.umap-edit-enabled .readonly {
|
|
@@ -935,173 +934,42 @@ a.umap-control-caption,
|
|
|
935
934
|
/* ********************************* */
|
|
936
935
|
/* Ajax loader */
|
|
937
936
|
/* ********************************* */
|
|
938
|
-
.umap-loading .umap-loader
|
|
939
|
-
{
|
|
940
|
-
display: block;
|
|
941
|
-
-webkit-animation: shift-rightwards 3s ease-in-out infinite;
|
|
942
|
-
-moz-animation: shift-rightwards 3s ease-in-out infinite;
|
|
943
|
-
-ms-animation: shift-rightwards 3s ease-in-out infinite;
|
|
944
|
-
-o-animation: shift-rightwards 3s ease-in-out infinite;
|
|
945
|
-
animation: shift-rightwards 3s ease-in-out infinite;
|
|
946
|
-
-webkit-animation-delay: .2s;
|
|
947
|
-
-moz-animation-delay: .2s;
|
|
948
|
-
-o-animation-delay: .2s;
|
|
949
|
-
animation-delay: .2s;
|
|
950
|
-
}
|
|
951
937
|
.umap-loader {
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
}
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
60%
|
|
986
|
-
{
|
|
987
|
-
-webkit-transform:translateX(0%);
|
|
988
|
-
-moz-transform:translateX(0%);
|
|
989
|
-
-o-transform:translateX(0%);
|
|
990
|
-
transform:translateX(0%);
|
|
991
|
-
}
|
|
992
|
-
|
|
993
|
-
100%
|
|
994
|
-
{
|
|
995
|
-
-webkit-transform:translateX(100%);
|
|
996
|
-
-moz-transform:translateX(100%);
|
|
997
|
-
-o-transform:translateX(100%);
|
|
998
|
-
transform:translateX(100%);
|
|
999
|
-
}
|
|
1000
|
-
|
|
1001
|
-
}
|
|
1002
|
-
@-moz-keyframes shift-rightwards
|
|
1003
|
-
{
|
|
1004
|
-
0%
|
|
1005
|
-
{
|
|
1006
|
-
-webkit-transform:translateX(-100%);
|
|
1007
|
-
-moz-transform:translateX(-100%);
|
|
1008
|
-
-o-transform:translateX(-100%);
|
|
1009
|
-
transform:translateX(-100%);
|
|
1010
|
-
}
|
|
1011
|
-
|
|
1012
|
-
40%
|
|
1013
|
-
{
|
|
1014
|
-
-webkit-transform:translateX(0%);
|
|
1015
|
-
-moz-transform:translateX(0%);
|
|
1016
|
-
-o-transform:translateX(0%);
|
|
1017
|
-
transform:translateX(0%);
|
|
1018
|
-
}
|
|
1019
|
-
|
|
1020
|
-
60%
|
|
1021
|
-
{
|
|
1022
|
-
-webkit-transform:translateX(0%);
|
|
1023
|
-
-moz-transform:translateX(0%);
|
|
1024
|
-
-o-transform:translateX(0%);
|
|
1025
|
-
transform:translateX(0%);
|
|
1026
|
-
}
|
|
1027
|
-
|
|
1028
|
-
100%
|
|
1029
|
-
{
|
|
1030
|
-
-webkit-transform:translateX(100%);
|
|
1031
|
-
-moz-transform:translateX(100%);
|
|
1032
|
-
-o-transform:translateX(100%);
|
|
1033
|
-
transform:translateX(100%);
|
|
1034
|
-
}
|
|
1035
|
-
|
|
1036
|
-
}
|
|
1037
|
-
@-o-keyframes shift-rightwards
|
|
1038
|
-
{
|
|
1039
|
-
0%
|
|
1040
|
-
{
|
|
1041
|
-
-webkit-transform:translateX(-100%);
|
|
1042
|
-
-moz-transform:translateX(-100%);
|
|
1043
|
-
-o-transform:translateX(-100%);
|
|
1044
|
-
transform:translateX(-100%);
|
|
1045
|
-
}
|
|
1046
|
-
|
|
1047
|
-
40%
|
|
1048
|
-
{
|
|
1049
|
-
-webkit-transform:translateX(0%);
|
|
1050
|
-
-moz-transform:translateX(0%);
|
|
1051
|
-
-o-transform:translateX(0%);
|
|
1052
|
-
transform:translateX(0%);
|
|
1053
|
-
}
|
|
1054
|
-
|
|
1055
|
-
60%
|
|
1056
|
-
{
|
|
1057
|
-
-webkit-transform:translateX(0%);
|
|
1058
|
-
-moz-transform:translateX(0%);
|
|
1059
|
-
-o-transform:translateX(0%);
|
|
1060
|
-
transform:translateX(0%);
|
|
1061
|
-
}
|
|
1062
|
-
|
|
1063
|
-
100%
|
|
1064
|
-
{
|
|
1065
|
-
-webkit-transform:translateX(100%);
|
|
1066
|
-
-moz-transform:translateX(100%);
|
|
1067
|
-
-o-transform:translateX(100%);
|
|
1068
|
-
transform:translateX(100%);
|
|
1069
|
-
}
|
|
1070
|
-
|
|
938
|
+
width: 100%;
|
|
939
|
+
height: 6px;
|
|
940
|
+
display: inline-block;
|
|
941
|
+
position: absolute;
|
|
942
|
+
background: var(--color-brightCyan);
|
|
943
|
+
overflow: hidden;
|
|
944
|
+
display: none;
|
|
945
|
+
top: 0;
|
|
946
|
+
left: 0;
|
|
947
|
+
right: 0;
|
|
948
|
+
height: 4px;
|
|
949
|
+
z-index: var(--zindex-loader);
|
|
950
|
+
}
|
|
951
|
+
.umap-loader::after {
|
|
952
|
+
content: '';
|
|
953
|
+
box-sizing: border-box;
|
|
954
|
+
width: 0;
|
|
955
|
+
height: 4.8px;
|
|
956
|
+
background: var(--color-darkerGray);
|
|
957
|
+
position: absolute;
|
|
958
|
+
top: 0;
|
|
959
|
+
left: 0;
|
|
960
|
+
animation: animFw 10s linear infinite;
|
|
961
|
+
}
|
|
962
|
+
|
|
963
|
+
@keyframes animFw {
|
|
964
|
+
0% {
|
|
965
|
+
width: 0;
|
|
966
|
+
}
|
|
967
|
+
100% {
|
|
968
|
+
width: 100%;
|
|
969
|
+
}
|
|
1071
970
|
}
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
0%
|
|
1075
|
-
{
|
|
1076
|
-
-webkit-transform:translateX(-100%);
|
|
1077
|
-
-moz-transform:translateX(-100%);
|
|
1078
|
-
-o-transform:translateX(-100%);
|
|
1079
|
-
transform:translateX(-100%);
|
|
1080
|
-
}
|
|
1081
|
-
|
|
1082
|
-
40%
|
|
1083
|
-
{
|
|
1084
|
-
-webkit-transform:translateX(0%);
|
|
1085
|
-
-moz-transform:translateX(0%);
|
|
1086
|
-
-o-transform:translateX(0%);
|
|
1087
|
-
transform:translateX(0%);
|
|
1088
|
-
}
|
|
1089
|
-
|
|
1090
|
-
60%
|
|
1091
|
-
{
|
|
1092
|
-
-webkit-transform:translateX(0%);
|
|
1093
|
-
-moz-transform:translateX(0%);
|
|
1094
|
-
-o-transform:translateX(0%);
|
|
1095
|
-
transform:translateX(0%);
|
|
1096
|
-
}
|
|
1097
|
-
|
|
1098
|
-
100%
|
|
1099
|
-
{
|
|
1100
|
-
-webkit-transform:translateX(100%);
|
|
1101
|
-
-moz-transform:translateX(100%);
|
|
1102
|
-
-o-transform:translateX(100%);
|
|
1103
|
-
transform:translateX(100%);
|
|
1104
|
-
}
|
|
971
|
+
.umap-loading .umap-loader {
|
|
972
|
+
display: block;
|
|
1105
973
|
}
|
|
1106
974
|
|
|
1107
975
|
/* *************************** */
|
umap/static/umap/vars.css
CHANGED
umap/templates/base.html
CHANGED
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
<meta name="viewport"
|
|
19
19
|
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
|
|
20
20
|
{# See https://evilmartians.com/chronicles/how-to-favicon-in-2021-six-files-that-fit-most-needs #}
|
|
21
|
+
{% autoescape off %}
|
|
21
22
|
<link rel="icon"
|
|
22
23
|
href="{% static 'umap/favicons/favicon.ico' %}"
|
|
23
24
|
sizes="32x32">
|
|
@@ -28,6 +29,7 @@
|
|
|
28
29
|
href="{% static 'umap/favicons/apple-touch-icon.png' %}">
|
|
29
30
|
<!-- 180×180 -->
|
|
30
31
|
<link rel="manifest" href="/manifest.webmanifest">
|
|
32
|
+
{% endautoescape %}
|
|
31
33
|
</head>
|
|
32
34
|
<body class="{% block body_class %}{% endblock body_class %}">
|
|
33
35
|
{% block header %}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
{% load i18n static %}
|
|
2
2
|
|
|
3
|
+
{% autoescape off %}
|
|
3
4
|
<style type="text/css">
|
|
4
5
|
@import "{% static 'umap/js/components/alerts/alert.css' %}";
|
|
5
6
|
</style>
|
|
7
|
+
{% endautoescape %}
|
|
6
8
|
<template id="umap-alert-template">
|
|
7
9
|
<div role="dialog" class="dark window umap-alert">
|
|
8
10
|
<div>
|
|
@@ -97,6 +99,7 @@
|
|
|
97
99
|
</div>
|
|
98
100
|
</template>
|
|
99
101
|
<umap-alert-conflict></umap-alert-conflict>
|
|
102
|
+
{% autoescape off %}
|
|
100
103
|
<script type="module">
|
|
101
104
|
import { register } from '{% static 'umap/js/components/base.js' %}'
|
|
102
105
|
import {
|
|
@@ -108,3 +111,4 @@
|
|
|
108
111
|
register(uMapAlertCreation, 'umap-alert-creation')
|
|
109
112
|
register(uMapAlertConflict, 'umap-alert-conflict')
|
|
110
113
|
</script>
|
|
114
|
+
{% endautoescape %}
|
umap/templates/umap/css.html
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
{% load static %}
|
|
2
2
|
|
|
3
|
+
{% autoescape off %}
|
|
4
|
+
|
|
3
5
|
<link rel="stylesheet"
|
|
4
6
|
href="{% static 'umap/vendors/leaflet/leaflet.css' %}" />
|
|
5
7
|
<link rel="stylesheet"
|
|
@@ -39,3 +41,4 @@
|
|
|
39
41
|
<link rel="stylesheet" href="{% static 'umap/css/tableeditor.css' %}" />
|
|
40
42
|
<link rel="stylesheet" href="{% static 'umap/css/bar.css' %}" />
|
|
41
43
|
<link rel="stylesheet" href="{% static 'umap/theme.css' %}" />
|
|
44
|
+
{% endautoescape %}
|
umap/templates/umap/js.html
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
{% load static %}
|
|
2
2
|
|
|
3
|
+
{% autoescape off %}
|
|
3
4
|
<script type="module"
|
|
4
5
|
src="{% static 'umap/vendors/leaflet/leaflet-src.esm.js' %}"
|
|
5
6
|
defer></script>
|
|
@@ -42,3 +43,4 @@
|
|
|
42
43
|
<script src="{% static 'umap/js/umap.forms.js' %}" defer></script>
|
|
43
44
|
<script src="{% static 'umap/js/umap.controls.js' %}" defer></script>
|
|
44
45
|
<script type="module" src="{% static 'umap/js/components/fragment.js' %}" defer></script>
|
|
46
|
+
{% endautoescape %}
|
|
@@ -46,7 +46,9 @@
|
|
|
46
46
|
{% block bottom_js %}
|
|
47
47
|
{{ block.super }}
|
|
48
48
|
<script type="module">
|
|
49
|
+
{% autoescape off %}
|
|
49
50
|
import Umap from '{% static "umap/js/modules/umap.js" %}'
|
|
51
|
+
{% endautoescape %}
|
|
50
52
|
const CACHE = {}
|
|
51
53
|
for (const mapOpener of document.querySelectorAll("button.map-opener")) {
|
|
52
54
|
mapOpener.addEventListener('click', (event) => {
|
|
@@ -221,3 +221,14 @@ def test_deleting_datalayer_should_remove_from_caption(
|
|
|
221
221
|
page.locator(".panel.right").get_by_title("Delete layer").click()
|
|
222
222
|
page.get_by_role("button", name="OK").click()
|
|
223
223
|
expect(panel.get_by_text("test datalayer")).to_be_hidden()
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
def test_can_edit_datalayer_name_in_list(live_server, openmap, datalayer, page):
|
|
227
|
+
page.goto(f"{live_server.url}{openmap.get_absolute_url()}?edit")
|
|
228
|
+
page.get_by_role("link", name="Manage layers").click()
|
|
229
|
+
page.get_by_text("test datalayer").click()
|
|
230
|
+
page.get_by_text("test datalayer").fill("test datalayer foobar")
|
|
231
|
+
page.get_by_role("button", name="Open browser").click()
|
|
232
|
+
expect(
|
|
233
|
+
page.locator(".panel.left").get_by_text("test datalayer foobar")
|
|
234
|
+
).to_be_visible()
|
|
@@ -9,7 +9,6 @@ from playwright.sync_api import expect
|
|
|
9
9
|
|
|
10
10
|
from umap.models import DataLayer
|
|
11
11
|
|
|
12
|
-
from ..base import mock_tiles
|
|
13
12
|
from .helpers import save_and_get_json
|
|
14
13
|
|
|
15
14
|
pytestmark = pytest.mark.django_db
|
|
@@ -765,3 +764,23 @@ def test_import_georss_from_textarea(tilelayer, live_server, page):
|
|
|
765
764
|
# A layer has been created
|
|
766
765
|
expect(layers).to_have_count(1)
|
|
767
766
|
expect(markers).to_have_count(1)
|
|
767
|
+
|
|
768
|
+
|
|
769
|
+
def test_import_from_multiple_files(live_server, page, tilelayer):
|
|
770
|
+
page.goto(f"{live_server.url}/map/new/")
|
|
771
|
+
page.get_by_title("Import data").click()
|
|
772
|
+
file_input = page.locator("input[type='file']")
|
|
773
|
+
with page.expect_file_chooser() as fc_info:
|
|
774
|
+
file_input.click()
|
|
775
|
+
file_chooser = fc_info.value
|
|
776
|
+
FIXTURES = Path(__file__).parent.parent / "fixtures"
|
|
777
|
+
paths = [
|
|
778
|
+
FIXTURES / "test_upload_data.json",
|
|
779
|
+
FIXTURES / "test_upload_simple_marker.json",
|
|
780
|
+
]
|
|
781
|
+
file_chooser.set_files(paths)
|
|
782
|
+
markers = page.locator(".leaflet-marker-icon")
|
|
783
|
+
expect(markers).to_have_count(0)
|
|
784
|
+
page.get_by_role("button", name="Import data", exact=True).click()
|
|
785
|
+
# Two in one file, one in the other
|
|
786
|
+
expect(markers).to_have_count(3)
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import pytest
|
|
2
|
+
from django.contrib.auth import get_user_model
|
|
3
|
+
from django.urls import reverse
|
|
4
|
+
|
|
5
|
+
from umap.models import Map
|
|
6
|
+
|
|
7
|
+
from .base import MapFactory, UserFactory
|
|
8
|
+
|
|
9
|
+
User = get_user_model()
|
|
10
|
+
|
|
11
|
+
pytestmark = pytest.mark.django_db
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def test_user_dashboard_is_restricted_to_logged_in(client):
|
|
15
|
+
response = client.get(reverse("user_dashboard"))
|
|
16
|
+
assert response.status_code == 302
|
|
17
|
+
assert response["Location"] == "/en/login/?next=/en/me"
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def test_user_dashboard_display_user_maps(client, map):
|
|
21
|
+
client.login(username=map.owner.username, password="123123")
|
|
22
|
+
response = client.get(reverse("user_dashboard"))
|
|
23
|
+
assert response.status_code == 200
|
|
24
|
+
body = response.content.decode()
|
|
25
|
+
assert map.name in body
|
|
26
|
+
assert f"{map.get_absolute_url()}?edit" in body
|
|
27
|
+
assert f"{map.get_absolute_url()}?share" in body
|
|
28
|
+
assert f"/map/{map.pk}/download" in body
|
|
29
|
+
assert "Everyone (public)" in body
|
|
30
|
+
assert "Owner only" in body
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def test_user_dashboard_do_not_display_blocked_user_maps(client, map):
|
|
34
|
+
map.share_status = Map.BLOCKED
|
|
35
|
+
map.save()
|
|
36
|
+
client.login(username=map.owner.username, password="123123")
|
|
37
|
+
response = client.get(reverse("user_dashboard"))
|
|
38
|
+
assert response.status_code == 200
|
|
39
|
+
body = response.content.decode()
|
|
40
|
+
assert map.name not in body
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def test_user_dashboard_do_not_display_deleted_user_maps(client, map):
|
|
44
|
+
map.share_status = Map.DELETED
|
|
45
|
+
map.save()
|
|
46
|
+
client.login(username=map.owner.username, password="123123")
|
|
47
|
+
response = client.get(reverse("user_dashboard"))
|
|
48
|
+
assert response.status_code == 200
|
|
49
|
+
body = response.content.decode()
|
|
50
|
+
assert map.name not in body
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
@pytest.mark.parametrize("share_status", [Map.DRAFT, Map.PRIVATE, Map.PUBLIC, Map.OPEN])
|
|
54
|
+
def test_user_dashboard_display_user_team_maps(client, map, team, user, share_status):
|
|
55
|
+
user.teams.add(team)
|
|
56
|
+
user.save()
|
|
57
|
+
map.team = team
|
|
58
|
+
map.share_status = share_status
|
|
59
|
+
map.save()
|
|
60
|
+
assert map.owner != user
|
|
61
|
+
client.login(username=user.username, password="123123")
|
|
62
|
+
response = client.get(reverse("user_dashboard"))
|
|
63
|
+
assert response.status_code == 200
|
|
64
|
+
body = response.content.decode()
|
|
65
|
+
assert map.name in body
|
|
66
|
+
assert map.get_absolute_url() in body
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def test_user_dashboard_display_user_maps_distinct(client, map):
|
|
70
|
+
# cf https://github.com/umap-project/umap/issues/1325
|
|
71
|
+
anonymap = MapFactory(name="Map witout owner should not appear")
|
|
72
|
+
user1 = UserFactory(username="user1")
|
|
73
|
+
user2 = UserFactory(username="user2")
|
|
74
|
+
map.editors.add(user1)
|
|
75
|
+
map.editors.add(user2)
|
|
76
|
+
map.save()
|
|
77
|
+
client.login(username=map.owner.username, password="123123")
|
|
78
|
+
response = client.get(reverse("user_dashboard"))
|
|
79
|
+
assert response.status_code == 200
|
|
80
|
+
body = response.content.decode()
|
|
81
|
+
assert body.count(f'<a href="/en/map/test-map_{map.pk}">test map</a>') == 1
|
|
82
|
+
assert body.count(anonymap.name) == 0
|
umap/tests/test_team_views.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import pytest
|
|
2
2
|
from django.urls import reverse
|
|
3
3
|
|
|
4
|
-
from umap.models import Team
|
|
4
|
+
from umap.models import Map, Team
|
|
5
5
|
|
|
6
6
|
pytestmark = pytest.mark.django_db
|
|
7
7
|
|
|
@@ -15,6 +15,40 @@ def test_can_see_team_maps(client, map, team):
|
|
|
15
15
|
assert map.name in response.content.decode()
|
|
16
16
|
|
|
17
17
|
|
|
18
|
+
@pytest.mark.parametrize("share_status", [Map.PRIVATE, Map.DRAFT])
|
|
19
|
+
def test_others_cannot_see_team_private_maps_in_team_page(
|
|
20
|
+
client, map, team, user, share_status
|
|
21
|
+
):
|
|
22
|
+
map.team = team
|
|
23
|
+
map.share_status = share_status
|
|
24
|
+
map.save()
|
|
25
|
+
url = reverse("team_maps", args=(team.pk,))
|
|
26
|
+
response = client.get(url)
|
|
27
|
+
assert response.status_code == 200
|
|
28
|
+
assert map.name not in response.content.decode()
|
|
29
|
+
# User is not in team
|
|
30
|
+
client.login(username=user.username, password="123123")
|
|
31
|
+
response = client.get(url)
|
|
32
|
+
assert response.status_code == 200
|
|
33
|
+
assert map.name not in response.content.decode()
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
@pytest.mark.parametrize("share_status", [Map.PRIVATE, Map.DRAFT])
|
|
37
|
+
def test_members_can_see_private_maps_in_team_page(
|
|
38
|
+
client, map, team, user, share_status
|
|
39
|
+
):
|
|
40
|
+
map.team = team
|
|
41
|
+
map.share_status = share_status
|
|
42
|
+
map.save()
|
|
43
|
+
user.teams.add(team)
|
|
44
|
+
user.save()
|
|
45
|
+
url = reverse("team_maps", args=(team.pk,))
|
|
46
|
+
client.login(username=user.username, password="123123")
|
|
47
|
+
response = client.get(url)
|
|
48
|
+
assert response.status_code == 200
|
|
49
|
+
assert map.name in response.content.decode()
|
|
50
|
+
|
|
51
|
+
|
|
18
52
|
def test_user_can_see_their_teams(client, team, user):
|
|
19
53
|
user.teams.add(team)
|
|
20
54
|
user.save()
|
umap/tests/test_views.py
CHANGED
|
@@ -267,80 +267,6 @@ def test_change_user_slug(client, user, settings):
|
|
|
267
267
|
assert f"/en/user/{user.pk}/" in response.content.decode()
|
|
268
268
|
|
|
269
269
|
|
|
270
|
-
@pytest.mark.django_db
|
|
271
|
-
def test_user_dashboard_is_restricted_to_logged_in(client):
|
|
272
|
-
response = client.get(reverse("user_dashboard"))
|
|
273
|
-
assert response.status_code == 302
|
|
274
|
-
assert response["Location"] == "/en/login/?next=/en/me"
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
@pytest.mark.django_db
|
|
278
|
-
def test_user_dashboard_display_user_maps(client, map):
|
|
279
|
-
client.login(username=map.owner.username, password="123123")
|
|
280
|
-
response = client.get(reverse("user_dashboard"))
|
|
281
|
-
assert response.status_code == 200
|
|
282
|
-
body = response.content.decode()
|
|
283
|
-
assert map.name in body
|
|
284
|
-
assert f"{map.get_absolute_url()}?edit" in body
|
|
285
|
-
assert f"{map.get_absolute_url()}?share" in body
|
|
286
|
-
assert f"/map/{map.pk}/download" in body
|
|
287
|
-
assert "Everyone (public)" in body
|
|
288
|
-
assert "Owner only" in body
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
@pytest.mark.django_db
|
|
292
|
-
def test_user_dashboard_do_not_display_blocked_user_maps(client, map):
|
|
293
|
-
map.share_status = Map.BLOCKED
|
|
294
|
-
map.save()
|
|
295
|
-
client.login(username=map.owner.username, password="123123")
|
|
296
|
-
response = client.get(reverse("user_dashboard"))
|
|
297
|
-
assert response.status_code == 200
|
|
298
|
-
body = response.content.decode()
|
|
299
|
-
assert map.name not in body
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
@pytest.mark.django_db
|
|
303
|
-
def test_user_dashboard_do_not_display_deleted_user_maps(client, map):
|
|
304
|
-
map.share_status = Map.DELETED
|
|
305
|
-
map.save()
|
|
306
|
-
client.login(username=map.owner.username, password="123123")
|
|
307
|
-
response = client.get(reverse("user_dashboard"))
|
|
308
|
-
assert response.status_code == 200
|
|
309
|
-
body = response.content.decode()
|
|
310
|
-
assert map.name not in body
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
@pytest.mark.django_db
|
|
314
|
-
def test_user_dashboard_display_user_team_maps(client, map, team, user):
|
|
315
|
-
user.teams.add(team)
|
|
316
|
-
user.save()
|
|
317
|
-
map.team = team
|
|
318
|
-
map.save()
|
|
319
|
-
client.login(username=user.username, password="123123")
|
|
320
|
-
response = client.get(reverse("user_dashboard"))
|
|
321
|
-
assert response.status_code == 200
|
|
322
|
-
body = response.content.decode()
|
|
323
|
-
assert map.name in body
|
|
324
|
-
assert map.get_absolute_url() in body
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
@pytest.mark.django_db
|
|
328
|
-
def test_user_dashboard_display_user_maps_distinct(client, map):
|
|
329
|
-
# cf https://github.com/umap-project/umap/issues/1325
|
|
330
|
-
anonymap = MapFactory(name="Map witout owner should not appear")
|
|
331
|
-
user1 = UserFactory(username="user1")
|
|
332
|
-
user2 = UserFactory(username="user2")
|
|
333
|
-
map.editors.add(user1)
|
|
334
|
-
map.editors.add(user2)
|
|
335
|
-
map.save()
|
|
336
|
-
client.login(username=map.owner.username, password="123123")
|
|
337
|
-
response = client.get(reverse("user_dashboard"))
|
|
338
|
-
assert response.status_code == 200
|
|
339
|
-
body = response.content.decode()
|
|
340
|
-
assert body.count(f'<a href="/en/map/test-map_{map.pk}">test map</a>') == 1
|
|
341
|
-
assert body.count(anonymap.name) == 0
|
|
342
|
-
|
|
343
|
-
|
|
344
270
|
@pytest.mark.django_db
|
|
345
271
|
def test_logout_should_return_redirect(client, user, settings):
|
|
346
272
|
client.login(username=user.username, password="123123")
|
umap/views.py
CHANGED
|
@@ -317,7 +317,11 @@ class TeamMaps(PaginatorMixin, DetailView):
|
|
|
317
317
|
context_object_name = "current_team"
|
|
318
318
|
|
|
319
319
|
def get_maps(self):
|
|
320
|
-
|
|
320
|
+
qs = Map.public
|
|
321
|
+
user = self.request.user
|
|
322
|
+
if user.is_authenticated and user in self.object.users.all():
|
|
323
|
+
qs = Map.objects
|
|
324
|
+
return qs.filter(team=self.object).order_by("-modified_at")
|
|
321
325
|
|
|
322
326
|
def get_context_data(self, **kwargs):
|
|
323
327
|
kwargs.update(
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
umap/__init__.py,sha256=
|
|
1
|
+
umap/__init__.py,sha256=HZ0yMvM34f8qnnOHbQ9kawpYuPlBrkN42-iKFemdmLQ,20
|
|
2
2
|
umap/admin.py,sha256=LoQytPGK6pLBqZ5QgQ9DIPAxhTG31cTtHOCqO9BY5S4,2645
|
|
3
3
|
umap/apps.py,sha256=5ssKqPUuNJlapaBmr4LY_HDb7J1NFCT3wzythxQOOfs,109
|
|
4
4
|
umap/asgi.py,sha256=CuVSNBwNb4AvuaD_Ha3ehtvf-c46ijZoVOSoP6WhXp8,432
|
|
@@ -12,7 +12,7 @@ umap/middleware.py,sha256=p8EPW_gYW8Wh2lk0DNIAkZQbYlBZugW7Yq4iiA7L4aE,514
|
|
|
12
12
|
umap/models.py,sha256=4SzhKdyWXfJMdzEpCyVPnzbTT-TGbDusAy7SP_8UuwI,17929
|
|
13
13
|
umap/urls.py,sha256=LA3zxyu-GDo8kVqdyU7_bdbDGhDJV8_yFW4oEPTXw4s,7559
|
|
14
14
|
umap/utils.py,sha256=19i8ibi-1IXxafT4k_yOHMhD-DsPH74Ll9qw-UrUkM4,5856
|
|
15
|
-
umap/views.py,sha256=
|
|
15
|
+
umap/views.py,sha256=Z1_X5FaAhco-O_Np6FP8nXDgG-bqOL005R_qWT_GsMg,46414
|
|
16
16
|
umap/websocket_server.py,sha256=D9sTHhKg0DG37b8bw7KWTKMDc6TPyTkNLCVkh2mlFOo,6604
|
|
17
17
|
umap/wsgi.py,sha256=IopIgnDZbCus3XpSetTHnra9VyzWi0Y2tJo-CmfTWCY,1132
|
|
18
18
|
umap/bin/__init__.py,sha256=iA3ON4A6NCpenrn3q2OgefUKF5QRFIQS-FtS0pxruI8,234
|
|
@@ -149,6 +149,7 @@ umap/settings/__init__.py,sha256=aPJkOTk0uFusIBA-uOjdUi10R5Cxt4jl5yv2_uCTUvo,170
|
|
|
149
149
|
umap/settings/base.py,sha256=rhaIDby2wSb4v8IBx_6xqHVnIigD4G0xzdHX2-9UfNM,11096
|
|
150
150
|
umap/settings/dev.py,sha256=pj1mpmZXiI2syW8pB01wcVeqCFABF3V-nlOxArir4cw,386
|
|
151
151
|
umap/settings/local.py.sample,sha256=wpnoe7qtXer_xBuhWbcbqcSCotTJRu6h8hG7N-sD0b4,3157
|
|
152
|
+
umap/settings/local_s3.py,sha256=tunaCRn_I7P0IZH-UJpB1I5ft2kE0ZIBY8GYZeLYyfM,1387
|
|
152
153
|
umap/static/.gitignore,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
153
154
|
umap/static/umap/base.css,sha256=oUvs6YBtFZCgOEk7tVhnlkooORFZ5e1I9qSFGNeBrlw,3771
|
|
154
155
|
umap/static/umap/bitbucket.png,sha256=Z-xsnM3QOUn9tJQ0RjPXCpALghrzaDDZP7wSePSjSr8,9125
|
|
@@ -156,16 +157,16 @@ umap/static/umap/content.css,sha256=04_50AU8iF26_979Ds0sMby4LlKIpm3J08zsv1-blIY,
|
|
|
156
157
|
umap/static/umap/font.css,sha256=fYmTKNd_Ts6TrmBbnLRgyeUS4vpfxkEqhLR-pkd3KrA,904
|
|
157
158
|
umap/static/umap/github.png,sha256=Yiw6VX71qO87vNgJaDuirn3JVlUwrzIpkT9vbtROg1o,1564
|
|
158
159
|
umap/static/umap/keycloak.png,sha256=K-23F1dda0wD_39dXN5KmGqmgFvde6baNiZ8gdk0NyY,16598
|
|
159
|
-
umap/static/umap/map.css,sha256=
|
|
160
|
+
umap/static/umap/map.css,sha256=B82ED0WSOrJs4kh943ThK-vi5sU6250DStSsDkfYhVw,25208
|
|
160
161
|
umap/static/umap/nav.css,sha256=IKB8Ga8TRal8naxjsgrcrnCO2eaKUL3YNofJB9IN9l0,1865
|
|
161
162
|
umap/static/umap/openstreetmap.png,sha256=xccBb_RsN7uchm7fRowVLjrzmCtj1-1PLByurkdjcr8,19408
|
|
162
163
|
umap/static/umap/theme.css,sha256=gkbyghlT5kNfz0Qyg1JL7xalqvHVx321eO9qlnvcaAU,49
|
|
163
164
|
umap/static/umap/twitter.png,sha256=BnVH7PcYlgKW56KHSOMRPevji2DvhJmvzFjl3-iF7c0,3225
|
|
164
|
-
umap/static/umap/vars.css,sha256=
|
|
165
|
+
umap/static/umap/vars.css,sha256=OUwPeNbExmoMkyCwmBtqOese9JqjvC87hvJRDP4u4S8,1825
|
|
165
166
|
umap/static/umap/css/bar.css,sha256=u40xqJQtYgBDfhdELlXxkh9kPmn7T2pMEJQWeiG6EvA,4851
|
|
166
167
|
umap/static/umap/css/contextmenu.css,sha256=AdPajFTy2M_yHbkMKDYdh45gRO4amNd0OXRYYDNZSI4,437
|
|
167
168
|
umap/static/umap/css/dialog.css,sha256=9qwy9rOcTQY6SPkteM7dW1t36XQBJVoGETQatSOvffM,879
|
|
168
|
-
umap/static/umap/css/form.css,sha256=
|
|
169
|
+
umap/static/umap/css/form.css,sha256=BW5R_mr4xXN1HaT97v6IPSFMQUH4tsxOm1eJkrpyVJI,13632
|
|
169
170
|
umap/static/umap/css/icon.css,sha256=-lFltPt6bgAhzXPWqYW97JTY3Y22dbR7KXoOmLZQiU8,4328
|
|
170
171
|
umap/static/umap/css/importers.css,sha256=iS3krkVPpqUQlPNQXSyByyho7rHBzxYqm04bPyKo_qY,1455
|
|
171
172
|
umap/static/umap/css/panel.css,sha256=fRPw-dyrcRegoOxTOWTDjBwuI_aHNPmmBOY16flsCBI,3073
|
|
@@ -221,9 +222,9 @@ umap/static/umap/img/source/16-white.svg,sha256=0xOMZOwpZW72QHt4SPao4BEr2lE6kZvW
|
|
|
221
222
|
umap/static/umap/img/source/16.svg,sha256=r3ZFL-rjyozbiboXDQOkoCLHW-0LTQa4Di9qF7z7qV0,44441
|
|
222
223
|
umap/static/umap/img/source/24-white.svg,sha256=t5713m3RdG9vunV2nUhLY4o4xT9v7ke3NY42g9FeAnE,29206
|
|
223
224
|
umap/static/umap/img/source/24.svg,sha256=2HY-QmZc2_eV3TyqGLlzqgJXCLVbrzKQV5Q6JLWgNiI,38319
|
|
224
|
-
umap/static/umap/js/umap.controls.js,sha256=
|
|
225
|
+
umap/static/umap/js/umap.controls.js,sha256=gk6IFPepAJ6QRAX48PJWwukVjbxpzf3UANw0fF0VabQ,30016
|
|
225
226
|
umap/static/umap/js/umap.core.js,sha256=FGx6GVcfrE_sn_izOt5r4DLkbO3-bv28jeXV8kwwUio,7029
|
|
226
|
-
umap/static/umap/js/umap.forms.js,sha256=
|
|
227
|
+
umap/static/umap/js/umap.forms.js,sha256=clc4Kb3F8jpGXlLiilgW6EQtFmEXmnXx9BfmkFEhkFo,32962
|
|
227
228
|
umap/static/umap/js/components/base.js,sha256=gDb1fGuNCC1KEu4PlQflC1PDNyrulhqLhmlsjyCJpps,1575
|
|
228
229
|
umap/static/umap/js/components/fragment.js,sha256=-rOrcyPpZ5ihD_hh0C1qrYpaim11JYh5fg0x_od_m5U,379
|
|
229
230
|
umap/static/umap/js/components/alerts/alert.css,sha256=fSmbDDjXjEYLfgnEAVDhyqWiBOUy2YhVRy0_den-7Dk,4930
|
|
@@ -237,32 +238,32 @@ umap/static/umap/js/modules/formatter.js,sha256=drbIxbDGrcHOUtzJtC4B5iKpm8-YNg_b
|
|
|
237
238
|
umap/static/umap/js/modules/global.js,sha256=7jm6NLZ5PM2yrkbWHdWkoDFcevgIAMqE-vZQRXcIgEo,934
|
|
238
239
|
umap/static/umap/js/modules/help.js,sha256=0vsDTFGcPz2coG_LBeGPSUQupZTFUes6kCwQCPBUjuU,9694
|
|
239
240
|
umap/static/umap/js/modules/i18n.js,sha256=dEpjsWoEZa-Tr5_MDO0tuWkt7kLL3crxXqhttyP-khU,1387
|
|
240
|
-
umap/static/umap/js/modules/importer.js,sha256=
|
|
241
|
+
umap/static/umap/js/modules/importer.js,sha256=1RTRY9w_fn24lMTlpH_ktbDvvNCO1VHDihN3oSu25co,11045
|
|
241
242
|
umap/static/umap/js/modules/leaflet-configure.js,sha256=P3aD8iNGxuVNv-xW4Di4txAjNmnlpKtCCzDvPaKEdQ8,243
|
|
242
243
|
umap/static/umap/js/modules/orderable.js,sha256=zDtcElZ_MVPoGba8Iv9bxOzk4vuN7C-5XVl4UomDYHE,2521
|
|
243
244
|
umap/static/umap/js/modules/permissions.js,sha256=RxKrfjLo6hdGuAvwQrzUUJJznD5RkmSkAHVMidA9iKQ,8497
|
|
244
|
-
umap/static/umap/js/modules/request.js,sha256=
|
|
245
|
+
umap/static/umap/js/modules/request.js,sha256=9GRJoOPbdkHL9OFP6Joaf5wzsJckPyiG2O7AxQciTik,3885
|
|
245
246
|
umap/static/umap/js/modules/rules.js,sha256=z_QmGH5HdS1HVtJXBjQsGkz7kus_E2NocZAqaP7BN1g,7433
|
|
246
247
|
umap/static/umap/js/modules/saving.js,sha256=oO6S23KldT19e3xM_iupw0ZDruyyCNHBx5e5wtrejhI,689
|
|
247
248
|
umap/static/umap/js/modules/schema.js,sha256=RuBO5obpccTPH_iPXRU-lwyj1SoX9bp619tknrPiZjI,13141
|
|
248
249
|
umap/static/umap/js/modules/share.js,sha256=s1X59VpMqut_Vhg7l7LV2IZDm9obRVbDH9wZbG5kX3c,7182
|
|
249
250
|
umap/static/umap/js/modules/slideshow.js,sha256=zcRzOMkJvhps1npGRjHkdK4Ce3UkqOsv8OsDgQWO-bg,3567
|
|
250
251
|
umap/static/umap/js/modules/tableeditor.js,sha256=6p2YE2-NF4NkwLDQkqrl90P_PwOYdFao0-ac_AkOwWs,9854
|
|
251
|
-
umap/static/umap/js/modules/umap.js,sha256=
|
|
252
|
+
umap/static/umap/js/modules/umap.js,sha256=4ZlODvjcUXMV6w1232yV95eD1YlJYajUy4l27E3rRxU,50575
|
|
252
253
|
umap/static/umap/js/modules/urls.js,sha256=76cFqycj2O8huuoYYBvxnVt2Fc2UDbgrRsiv6lQmcSY,890
|
|
253
254
|
umap/static/umap/js/modules/utils.js,sha256=fYzo-WjRzDZsdjv3CI9U4Es3AqOfuBCJuRq997m2EfQ,12309
|
|
254
|
-
umap/static/umap/js/modules/data/features.js,sha256=
|
|
255
|
-
umap/static/umap/js/modules/data/layer.js,sha256=
|
|
255
|
+
umap/static/umap/js/modules/data/features.js,sha256=rYkQ-rMDN6t69K0WyAqyHrg5YAMS3GDbkrK1LrudXAU,31890
|
|
256
|
+
umap/static/umap/js/modules/data/layer.js,sha256=rLoAqwPfxURJNSSweoaq1WsAlxOyGT1yFHAIuta4AsY,35097
|
|
256
257
|
umap/static/umap/js/modules/importers/cadastrefr.js,sha256=KHqxHleFRFzNi98gegvUM1R6eJorAGGcMft_ktUg-ug,2262
|
|
257
258
|
umap/static/umap/js/modules/importers/communesfr.js,sha256=6q6ilmYhhuSmgdrvfTyEDNyMLbc9J9Bt8VMZVXB8ZOA,1723
|
|
258
259
|
umap/static/umap/js/modules/importers/datasets.js,sha256=StZbRiq_1vqe0OO1w66k5Lwzju8RntmHpWe9HWIDfRE,1372
|
|
259
260
|
umap/static/umap/js/modules/importers/geodatamine.js,sha256=vIxANzNc1TAe3QcZroIxqNvos1vexBmKDTtzErBNiY4,2949
|
|
260
261
|
umap/static/umap/js/modules/importers/overpass.js,sha256=cY2kb3Fs8tA6PqBjGyc5bI0mg7L1ijapIAkVGwEhSwI,3341
|
|
261
|
-
umap/static/umap/js/modules/rendering/icon.js,sha256=
|
|
262
|
-
umap/static/umap/js/modules/rendering/map.js,sha256=
|
|
262
|
+
umap/static/umap/js/modules/rendering/icon.js,sha256=ZMN6R6ji1au3Iq7XrVLkXgDOzTveU-bMsnFewL0Kaz0,7938
|
|
263
|
+
umap/static/umap/js/modules/rendering/map.js,sha256=tASIpjHaTDlveiErTbmxH4eMywdVMQ9pZjZHQUykSf4,12880
|
|
263
264
|
umap/static/umap/js/modules/rendering/popup.js,sha256=EHfOSPb8BmbGK6-DcGekfbIDpNjH-y8L2QnpfbJEr3Y,2604
|
|
264
265
|
umap/static/umap/js/modules/rendering/template.js,sha256=LRLhU8kKoZpvyPR2h1E3XyfS4BY07p3b82KPZPk5rbU,7890
|
|
265
|
-
umap/static/umap/js/modules/rendering/ui.js,sha256=
|
|
266
|
+
umap/static/umap/js/modules/rendering/ui.js,sha256=Pz7vS8jhbTy7k70mXBFwR8OH1McI98NeRCT6Fc_x7pM,14317
|
|
266
267
|
umap/static/umap/js/modules/rendering/layers/base.js,sha256=DeXxRwTatoxxGStT1tWyNQVCrIkbgd7ZaawIPxWIcOQ,2525
|
|
267
268
|
umap/static/umap/js/modules/rendering/layers/classified.js,sha256=h4cKB4sZ05MTwlE_kur292HRHxdaSkuwIMmW5JaU-Ac,14679
|
|
268
269
|
umap/static/umap/js/modules/rendering/layers/cluster.js,sha256=970BbIdiOUQTdNRRRA_4sY2L-1fTe6wb0wBFeuHZxww,3368
|
|
@@ -274,7 +275,7 @@ umap/static/umap/js/modules/sync/websocket.js,sha256=1UtvsTAm-gkfpBRcLPykPvDyax3
|
|
|
274
275
|
umap/static/umap/js/modules/ui/bar.js,sha256=zoWNOKhs-Sf5pFTlPFoEAysS-AUF6ZlXdO5UA9jom2A,7570
|
|
275
276
|
umap/static/umap/js/modules/ui/base.js,sha256=8PN8TRIBqTANRufwVvV0XzOdaYQuRCnlWGbTGq8FZiM,2491
|
|
276
277
|
umap/static/umap/js/modules/ui/contextmenu.js,sha256=VzC94uGUt8DkzC60Gcbz-MxivfSITEqUC91Fkpq1gjk,2550
|
|
277
|
-
umap/static/umap/js/modules/ui/dialog.js,sha256=
|
|
278
|
+
umap/static/umap/js/modules/ui/dialog.js,sha256=geAcMf2ajpNpDePDbaOz_kOiWOZWtpOHT7kBYqOHEa0,5620
|
|
278
279
|
umap/static/umap/js/modules/ui/panel.js,sha256=phPWwCFxQ9AJ9auPPayD5Xtf6yQemQSZHlVlLANfTx0,3240
|
|
279
280
|
umap/static/umap/js/modules/ui/tooltip.js,sha256=M2KBb5CA4AvaA-6QgfpUKMYQuGXzTqx4ZVA9fkMRBEs,1642
|
|
280
281
|
umap/static/umap/locale/am_ET.js,sha256=TsgZgJkMMmFAJE0nJIq62r8hHvFgLLjcA6axXQlkbog,33822
|
|
@@ -454,7 +455,7 @@ umap/storage/s3.py,sha256=KAYu3vAqXbd5UhaoPxG6zcGtBfKZOzzi-6uY6YEuIcY,1962
|
|
|
454
455
|
umap/storage/staticfiles.py,sha256=mxFcenC1JECmpNy4H0e7vX8GObDZVXzs1RPjQFWNd5k,2473
|
|
455
456
|
umap/templates/404.html,sha256=1yLlD8rSF_9cfjm5FYy--P46HLVbHeFkJiW9nRzM--E,399
|
|
456
457
|
umap/templates/500.html,sha256=Z8x47OVfYXquAYAlmRB0EJVTCiCaBppFFiFEmoYsMYY,5202
|
|
457
|
-
umap/templates/base.html,sha256=
|
|
458
|
+
umap/templates/base.html,sha256=wb-WxYqyJ-GVQWJYrpVqLE4FYz3hOu0lJic6XL8VPxY,1548
|
|
458
459
|
umap/templates/auth/user_detail.html,sha256=ud6AnM2ZK9WN8SuAnmKhZlGN0Wbi-GOzy09hoPfL04I,525
|
|
459
460
|
umap/templates/auth/user_form.html,sha256=h9NZi9KIC_5jkvj5KAsxX5CdiYCrQ2lrl9qpr5ObPcg,1730
|
|
460
461
|
umap/templates/auth/user_stars.html,sha256=LAGZU50ki2SCqZ0o_NBfN7T2RDl-L_1EGLixu5OH4AY,545
|
|
@@ -464,17 +465,17 @@ umap/templates/umap/about_summary.html,sha256=5pvCvX34YHk_XCtZfcRSznvRwi_-UJMioD
|
|
|
464
465
|
umap/templates/umap/branding.html,sha256=8IzkIWqiZckgkX9FC-n1v6f8JIB2q7DcX3JHscxsaYA,60
|
|
465
466
|
umap/templates/umap/content.html,sha256=KfNQ18LcbxFd00tHQeirGy5Vh75qQNM6pj0bQbcy4Bo,2246
|
|
466
467
|
umap/templates/umap/content_footer.html,sha256=wkdc4Usuq4-vDIJHPxv-KS6KL4gBkUl7ARyU7zz1Zis,1154
|
|
467
|
-
umap/templates/umap/css.html,sha256=
|
|
468
|
+
umap/templates/umap/css.html,sha256=rlqw64vDT-mpl3Ckv6izFuU-BQHJwXw9Aw1TeFmhL80,2308
|
|
468
469
|
umap/templates/umap/dashboard_menu.html,sha256=DEzGwiL_U1ntDpY0Ybda5ijDMSNw-n7Vb-V7HrsqYgo,688
|
|
469
470
|
umap/templates/umap/footer.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
470
471
|
umap/templates/umap/header.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
471
472
|
umap/templates/umap/home.html,sha256=021I4eVLjMWvhsIqo2k2FADXla2c4UClAJ1uy9R5KVI,839
|
|
472
|
-
umap/templates/umap/js.html,sha256=
|
|
473
|
+
umap/templates/umap/js.html,sha256=5BFbBGsBpebyGgn8yTnj-TEZ1qrWQUTjDC4AJHLdnug,2466
|
|
473
474
|
umap/templates/umap/locale.js,sha256=AP-mSJQq5RyC3eNaBbk-sOsD80r0_qlvuK1afXdsVo4,112
|
|
474
475
|
umap/templates/umap/login_popup_end.html,sha256=kcENvhycpVvvIzbNasX1rcSI_67A6pttkWCxy0vHC8g,693
|
|
475
476
|
umap/templates/umap/map_detail.html,sha256=xMOsbF7NWJ-mpShR0ciJ8MrTeG2OYDm8OIL0yHbW6eg,1192
|
|
476
477
|
umap/templates/umap/map_fragment.html,sha256=ZRIA3W2tuIecv2LtxyKNSW4k7PmCxRlFmI6TIKC1EV8,152
|
|
477
|
-
umap/templates/umap/map_init.html,sha256=
|
|
478
|
+
umap/templates/umap/map_init.html,sha256=5hX7FE0vN6P70KFf8aKusOCERGzy9JoCPg7oyoIWfLQ,334
|
|
478
479
|
umap/templates/umap/map_list.html,sha256=Jb-VU3dQdRWsW80nyyRq1Eb6UrhAoIfGleu1cNMJKwc,673
|
|
479
480
|
umap/templates/umap/map_table.html,sha256=WrH86ybY_GzzRmALfON_oni9aFuIswgOtpTSJ5h8SEY,5778
|
|
480
481
|
umap/templates/umap/messages.html,sha256=liEsg-I26XHb0FOBAbzFsZl2RfNQtGt-HKoE6jHefbI,190
|
|
@@ -487,9 +488,9 @@ umap/templates/umap/success.html,sha256=3FG4yWwtdF3zvVWQ2ZAjCkgv0kcSNZlUjgYy_b-X
|
|
|
487
488
|
umap/templates/umap/team_confirm_delete.html,sha256=D4EKfuzVjAexHKPHRsSHpjuAjMNl0iCPtaW2NEGUk2A,448
|
|
488
489
|
umap/templates/umap/team_detail.html,sha256=4gd8YjvVqGysXNJtzAaZwOpBAADLzJ_ekFRPQp1sHYM,699
|
|
489
490
|
umap/templates/umap/team_form.html,sha256=yG_zxmJfEwLC5Mof-4SHYcx6lfkOjbGVusQGT7iqSNs,1922
|
|
490
|
-
umap/templates/umap/user_dashboard.html,sha256=
|
|
491
|
+
umap/templates/umap/user_dashboard.html,sha256=nls1Nzhwvv1QKI3fOV_2QPuQocCKVZ3STvBKXaKUJZ8,2527
|
|
491
492
|
umap/templates/umap/user_teams.html,sha256=MfelqIwoLRVjvX-KpVtwqh0I7pNx3oDRhqmSRdpT4bs,1570
|
|
492
|
-
umap/templates/umap/components/alerts/alert.html,sha256=
|
|
493
|
+
umap/templates/umap/components/alerts/alert.html,sha256=ZvisQkz2GfK2jxEqTosYH72N5gIK1604ATVNa_vHT7U,3564
|
|
493
494
|
umap/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
494
495
|
umap/templatetags/umap_tags.py,sha256=OumX1AI9uWzNP3zbjexTz7lGp10FweW0NRFSsdQ_cuU,1759
|
|
495
496
|
umap/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -497,6 +498,7 @@ umap/tests/base.py,sha256=x9GVS5eAzc1CHyNxx5gd2w0AJCeHIr4nmX4yak8LhyM,4768
|
|
|
497
498
|
umap/tests/conftest.py,sha256=KQCZanCTl1ABLIKOuyxS_cpBoXGiwjDc29jsLBiSWxY,1633
|
|
498
499
|
umap/tests/settings.py,sha256=tY70LMFXyo_WijswqGyeWai7vBzM62k7IA8pkkbc9y4,816
|
|
499
500
|
umap/tests/test_clean_tilelayer.py,sha256=wGTd_AHOTmQ4QMswAyc-1_lJmQOSyhY3OahLAusEIdA,2515
|
|
501
|
+
umap/tests/test_dashboard.py,sha256=w9IgKdupP9JpixLqvNl6UKbglgFVN_dG_R9Zvw1SJy0,2880
|
|
500
502
|
umap/tests/test_datalayer.py,sha256=NWX7o-sLOrq3nHT0GDywz5vtJU4HJhZZh11r_rWxhVA,9539
|
|
501
503
|
umap/tests/test_datalayer_s3.py,sha256=6V3AK22AXkFNjx5__SyBk0Uj0rTDAjJQv67r7D_MDVc,4155
|
|
502
504
|
umap/tests/test_datalayer_views.py,sha256=Fx_oQF3hBC2FVHTTjTScXbFS2d7FRKdBL7QFFexvKkg,22880
|
|
@@ -506,10 +508,10 @@ umap/tests/test_map.py,sha256=vrtheSMQNk45kBIcJ0QY9K7HKYee5yg4Vnp78DyaIwQ,5170
|
|
|
506
508
|
umap/tests/test_map_views.py,sha256=EKLJnQ-xk_bkaJ6P7OJ2bnya5orbaSnWFV8GIYcjDNk,33823
|
|
507
509
|
umap/tests/test_merge_features.py,sha256=uLZSW00WAI8_nZS0KPP8gg8U4nnky-XGb-VhhKUxv1M,2275
|
|
508
510
|
umap/tests/test_statics.py,sha256=xKuxT8Xj5Ii7gKISuiSfDj7dpjmJ2Ierby3Lg-haZCg,1264
|
|
509
|
-
umap/tests/test_team_views.py,sha256=
|
|
511
|
+
umap/tests/test_team_views.py,sha256=edmqn_tx4XQ1sEQtB7CpuJT6WwQQiUyUYu8-ESZxFcw,5615
|
|
510
512
|
umap/tests/test_tilelayer.py,sha256=toVpVutEvMLWKx5uH7ZbGNPGzqICZx1_S2OOpIfYPfQ,603
|
|
511
513
|
umap/tests/test_utils.py,sha256=noh-AFL3qV-dNZYr8L1acsYC02SI710Bq2ZXV-jBEzk,407
|
|
512
|
-
umap/tests/test_views.py,sha256=
|
|
514
|
+
umap/tests/test_views.py,sha256=5KXUH46dtjCItm4nqyrpvgnmM6_YMQ3zjcRPTC8rKBo,15820
|
|
513
515
|
umap/tests/test_websocket_server.py,sha256=BQ9Sy5VC9kBAfPWVxqcXoi9yfq12nfNvBE_j5rTFk7w,696
|
|
514
516
|
umap/tests/fixtures/categorized_highway.geojson,sha256=p7QHOd8nXi7yVq37gY6Ca8BXkjaLnDxW9Fq0Zcm3Fk4,15830
|
|
515
517
|
umap/tests/fixtures/choropleth_region_chomage.geojson,sha256=mVVbYlf92Sr3wWH9ETm43FdHz1U3zjsn91HuU5H5r4Y,21325
|
|
@@ -529,6 +531,7 @@ umap/tests/fixtures/test_upload_empty_coordinates.json,sha256=-mJ_1orzUAROfE4PXc
|
|
|
529
531
|
umap/tests/fixtures/test_upload_georss.xml,sha256=lfmVA0qGDakCG48jjsLmSIE1U6iZ9yyFuqqX6Srt8Js,1160
|
|
530
532
|
umap/tests/fixtures/test_upload_missing_name.json,sha256=klSMHb6laTghzU4AdIG1_p5UZ1LbAJCCKnJea0qEFAI,4566
|
|
531
533
|
umap/tests/fixtures/test_upload_non_linear_ring.json,sha256=WOR0NnJHNUUW6VKzZyIxU7WL1llnAmEVJwCWla6XOds,1525
|
|
534
|
+
umap/tests/fixtures/test_upload_simple_marker.json,sha256=jH15G5PxgVO-DZb4TPxVMAi1_uzhkvZcFkVUb50CS3Q,393
|
|
532
535
|
umap/tests/integration/__init__.py,sha256=nqQ2miDnSZOKDuFhQ5saFN3qQuK73Cs6xL9Od-mEKG4,57
|
|
533
536
|
umap/tests/integration/conftest.py,sha256=OTKeDdLBpFUsqFCnHD-QY2X1iv5m4jIaE__4T4qKdDY,2468
|
|
534
537
|
umap/tests/integration/helpers.py,sha256=vvGX5b-DS2fMVDdeXz1lH2IleZkRHjyL7DVvatJU8Do,344
|
|
@@ -545,14 +548,14 @@ umap/tests/integration/test_dashboard.py,sha256=LClLBc8lgDM1-NGhkvUSUMLmMuKt3sR1
|
|
|
545
548
|
umap/tests/integration/test_datalayer.py,sha256=cxsf65noYTucEMLuUz8DfJ9abXHhAq0n65MvdBmBRVo,5492
|
|
546
549
|
umap/tests/integration/test_draw_polygon.py,sha256=Ub_1Witps_BLwMMmQ4M0vPIyQOEQ_Bq82znpJdWpCfY,25385
|
|
547
550
|
umap/tests/integration/test_draw_polyline.py,sha256=lPr5hz-wHL9oC2B3yveNHC-OxdzWvcf8fHMBZbXTuss,14801
|
|
548
|
-
umap/tests/integration/test_edit_datalayer.py,sha256=
|
|
551
|
+
umap/tests/integration/test_edit_datalayer.py,sha256=vC_bpfw_eMvYzhu3x6E2vS4gDFb55Ud5p64mfRqZBf4,10292
|
|
549
552
|
umap/tests/integration/test_edit_map.py,sha256=d76M4J6rumDQ6sKaOyTA45dWAkwAOtoUuNkW-GsA-fo,7134
|
|
550
553
|
umap/tests/integration/test_edit_marker.py,sha256=sj4n2mCYQ-qZ02jFHA566Wg_y9F6oXb1AxddnthSQHI,4746
|
|
551
554
|
umap/tests/integration/test_edit_polygon.py,sha256=JeIW6NcBltIl958uJ_T-0dRCT5gOo9JrNtULvg7nxf4,5286
|
|
552
555
|
umap/tests/integration/test_export_map.py,sha256=jH0BXm-7Ov26OEkve9-xKMfRwXwR73zRrZLIQusyUOY,12112
|
|
553
556
|
umap/tests/integration/test_facets_browser.py,sha256=J--y2rpI__0RIPzcTx4Kn2UwuurFdh-6i_Y4c6GxUyY,10658
|
|
554
557
|
umap/tests/integration/test_features_id_generation.py,sha256=e99_8AxeMAi53JjVGlsI32zlrXGAU19FHJfTuYdiBVQ,1511
|
|
555
|
-
umap/tests/integration/test_import.py,sha256=
|
|
558
|
+
umap/tests/integration/test_import.py,sha256=dBkj-E9LSUTZvcMK8-MratR5aDz0jLrWEuh6Mek0vzg,31266
|
|
556
559
|
umap/tests/integration/test_map.py,sha256=2ZO54RFVycJKGczfioX0nU1oCu29FVC9hR6wbT4s1NE,8736
|
|
557
560
|
umap/tests/integration/test_map_list.py,sha256=l1FImKnJkY7DupYX8waKaUZqhnORR20L8dzaqu-eF8E,1280
|
|
558
561
|
umap/tests/integration/test_map_preview.py,sha256=kP0vkEiUN7EJNCvZgNeUAzrrXfgwpU0S2UnmOBV4P5A,3540
|
|
@@ -572,8 +575,8 @@ umap/tests/integration/test_view_marker.py,sha256=ZLS6-GOWYpjeoYGHiHa7HesXJTLu9w
|
|
|
572
575
|
umap/tests/integration/test_view_polygon.py,sha256=NMJC6Nt9VpQ8FIU9Pqq2OspHv49xsWlsoXCr8iBa0VA,2060
|
|
573
576
|
umap/tests/integration/test_view_polyline.py,sha256=aJoXKmLhJaN0yhPdDCVskZNGx3q3mLDkjVPhZ30cadA,13959
|
|
574
577
|
umap/tests/integration/test_websocket_sync.py,sha256=Xjn8z7Gj2PAmPmLkMTsHztFmhzsfyE3vg-wfewpA2I4,15511
|
|
575
|
-
umap_project-2.8.
|
|
576
|
-
umap_project-2.8.
|
|
577
|
-
umap_project-2.8.
|
|
578
|
-
umap_project-2.8.
|
|
579
|
-
umap_project-2.8.
|
|
578
|
+
umap_project-2.8.0b0.dist-info/METADATA,sha256=ekXJ1EOo5be6Xif-mk4mOSVmu58OjcCme27jSfmpLEA,2993
|
|
579
|
+
umap_project-2.8.0b0.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
|
|
580
|
+
umap_project-2.8.0b0.dist-info/entry_points.txt,sha256=gz-KDQfEsMLBae8ABOD3foJsCYGPW1tA4Y394R_1RW8,39
|
|
581
|
+
umap_project-2.8.0b0.dist-info/licenses/LICENSE,sha256=kQtrtRKgiPhcl7aO0-lmvbrNAXu7WHyiXvPrUk-TD2Q,820
|
|
582
|
+
umap_project-2.8.0b0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|