umap-project 3.4.0b1__py3-none-any.whl → 3.4.2__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.
- umap/__init__.py +1 -1
- umap/context_processors.py +1 -1
- umap/locale/da/LC_MESSAGES/django.mo +0 -0
- umap/locale/da/LC_MESSAGES/django.po +20 -16
- umap/locale/en/LC_MESSAGES/django.po +18 -14
- umap/locale/es/LC_MESSAGES/django.mo +0 -0
- umap/locale/es/LC_MESSAGES/django.po +20 -16
- umap/locale/fr/LC_MESSAGES/django.mo +0 -0
- umap/locale/fr/LC_MESSAGES/django.po +18 -14
- umap/locale/pl/LC_MESSAGES/django.mo +0 -0
- umap/locale/pl/LC_MESSAGES/django.po +72 -71
- umap/migrations/0018_datalayer_uuid.py +1 -1
- umap/models.py +7 -3
- umap/settings/local.py.sample +1 -1
- umap/static/umap/content.css +0 -3
- umap/static/umap/css/bar.css +9 -6
- umap/static/umap/css/form.css +27 -11
- umap/static/umap/css/popup.css +1 -0
- umap/static/umap/js/components/base.js +1 -1
- umap/static/umap/js/components/copiable.js +47 -0
- umap/static/umap/js/modules/autocomplete.js +31 -58
- umap/static/umap/js/modules/browser.js +8 -8
- umap/static/umap/js/modules/data/features.js +33 -36
- umap/static/umap/js/modules/data/fields.js +446 -0
- umap/static/umap/js/modules/data/layer.js +76 -93
- umap/static/umap/js/modules/domutils.js +24 -4
- umap/static/umap/js/modules/filters.js +20 -47
- umap/static/umap/js/modules/form/fields.js +4 -4
- umap/static/umap/js/modules/formatter.js +9 -1
- umap/static/umap/js/modules/help.js +13 -14
- umap/static/umap/js/modules/i18n.js +1 -1
- umap/static/umap/js/modules/importer.js +18 -27
- umap/static/umap/js/modules/importers/banfr.js +0 -1
- umap/static/umap/js/modules/importers/cadastrefr.js +19 -19
- umap/static/umap/js/modules/importers/communesfr.js +7 -8
- umap/static/umap/js/modules/importers/datasets.js +14 -14
- umap/static/umap/js/modules/importers/geodatamine.js +20 -22
- umap/static/umap/js/modules/importers/opendata.js +10 -0
- umap/static/umap/js/modules/importers/overpass.js +19 -18
- umap/static/umap/js/modules/managers.js +1 -265
- umap/static/umap/js/modules/permissions.js +5 -3
- umap/static/umap/js/modules/rendering/controls.js +6 -4
- umap/static/umap/js/modules/rendering/icon.js +5 -9
- umap/static/umap/js/modules/rendering/layers/base.js +1 -1
- umap/static/umap/js/modules/rendering/layers/classified.js +16 -11
- umap/static/umap/js/modules/rendering/layers/heat.js +27 -21
- umap/static/umap/js/modules/rendering/map.js +22 -22
- umap/static/umap/js/modules/rendering/popup.js +6 -3
- umap/static/umap/js/modules/rendering/template.js +31 -37
- umap/static/umap/js/modules/rendering/ui.js +1 -2
- umap/static/umap/js/modules/rules.js +34 -41
- umap/static/umap/js/modules/schema.js +0 -7
- umap/static/umap/js/modules/share.js +36 -69
- umap/static/umap/js/modules/slideshow.js +3 -3
- umap/static/umap/js/modules/tableeditor.js +0 -1
- umap/static/umap/js/modules/ui/bar.js +51 -32
- umap/static/umap/js/modules/ui/dialog.js +10 -1
- umap/static/umap/js/modules/ui/panel.js +28 -23
- umap/static/umap/js/modules/ui/tooltip.js +1 -1
- umap/static/umap/js/modules/umap.js +84 -84
- umap/static/umap/js/modules/utils.js +13 -4
- umap/static/umap/js/umap.controls.js +33 -14
- umap/static/umap/locale/am_ET.js +19 -8
- umap/static/umap/locale/am_ET.json +19 -8
- umap/static/umap/locale/ar.js +19 -8
- umap/static/umap/locale/ar.json +19 -8
- umap/static/umap/locale/ast.js +19 -8
- umap/static/umap/locale/ast.json +19 -8
- umap/static/umap/locale/bg.js +19 -8
- umap/static/umap/locale/bg.json +19 -8
- umap/static/umap/locale/br.js +20 -9
- umap/static/umap/locale/br.json +20 -9
- umap/static/umap/locale/ca.js +19 -8
- umap/static/umap/locale/ca.json +19 -8
- umap/static/umap/locale/cs_CZ.js +20 -9
- umap/static/umap/locale/cs_CZ.json +20 -9
- umap/static/umap/locale/da.js +54 -43
- umap/static/umap/locale/da.json +54 -43
- umap/static/umap/locale/de.js +44 -33
- umap/static/umap/locale/de.json +44 -33
- umap/static/umap/locale/el.js +20 -9
- umap/static/umap/locale/el.json +20 -9
- umap/static/umap/locale/en.js +20 -9
- umap/static/umap/locale/en.json +20 -9
- umap/static/umap/locale/en_US.json +19 -8
- umap/static/umap/locale/es.js +55 -44
- umap/static/umap/locale/es.json +55 -44
- umap/static/umap/locale/et.js +20 -9
- umap/static/umap/locale/et.json +20 -9
- umap/static/umap/locale/eu.js +25 -14
- umap/static/umap/locale/eu.json +25 -14
- umap/static/umap/locale/fa_IR.js +20 -9
- umap/static/umap/locale/fa_IR.json +20 -9
- umap/static/umap/locale/fi.js +19 -8
- umap/static/umap/locale/fi.json +19 -8
- umap/static/umap/locale/fr.js +21 -10
- umap/static/umap/locale/fr.json +21 -10
- umap/static/umap/locale/gl.js +147 -136
- umap/static/umap/locale/gl.json +147 -136
- umap/static/umap/locale/he.js +19 -8
- umap/static/umap/locale/he.json +19 -8
- umap/static/umap/locale/hr.js +19 -8
- umap/static/umap/locale/hr.json +19 -8
- umap/static/umap/locale/hu.js +62 -51
- umap/static/umap/locale/hu.json +62 -51
- umap/static/umap/locale/id.js +19 -8
- umap/static/umap/locale/id.json +19 -8
- umap/static/umap/locale/is.js +20 -9
- umap/static/umap/locale/is.json +20 -9
- umap/static/umap/locale/it.js +20 -9
- umap/static/umap/locale/it.json +20 -9
- umap/static/umap/locale/ja.js +19 -8
- umap/static/umap/locale/ja.json +19 -8
- umap/static/umap/locale/ko.js +19 -8
- umap/static/umap/locale/ko.json +19 -8
- umap/static/umap/locale/lt.js +19 -8
- umap/static/umap/locale/lt.json +19 -8
- umap/static/umap/locale/ms.js +20 -9
- umap/static/umap/locale/ms.json +20 -9
- umap/static/umap/locale/nl.js +20 -9
- umap/static/umap/locale/nl.json +20 -9
- umap/static/umap/locale/no.js +19 -8
- umap/static/umap/locale/no.json +19 -8
- umap/static/umap/locale/pl.js +56 -45
- umap/static/umap/locale/pl.json +56 -45
- umap/static/umap/locale/pl_PL.json +19 -8
- umap/static/umap/locale/pt.js +20 -9
- umap/static/umap/locale/pt.json +20 -9
- umap/static/umap/locale/pt_BR.js +19 -8
- umap/static/umap/locale/pt_BR.json +19 -8
- umap/static/umap/locale/pt_PT.js +19 -8
- umap/static/umap/locale/pt_PT.json +19 -8
- umap/static/umap/locale/ro.js +19 -8
- umap/static/umap/locale/ro.json +19 -8
- umap/static/umap/locale/ru.js +19 -8
- umap/static/umap/locale/ru.json +19 -8
- umap/static/umap/locale/si.js +1 -1
- umap/static/umap/locale/si.json +1 -1
- umap/static/umap/locale/sk_SK.js +19 -8
- umap/static/umap/locale/sk_SK.json +19 -8
- umap/static/umap/locale/sl.js +19 -8
- umap/static/umap/locale/sl.json +19 -8
- umap/static/umap/locale/sr.js +19 -8
- umap/static/umap/locale/sr.json +19 -8
- umap/static/umap/locale/sv.js +19 -8
- umap/static/umap/locale/sv.json +19 -8
- umap/static/umap/locale/th_TH.js +19 -8
- umap/static/umap/locale/th_TH.json +19 -8
- umap/static/umap/locale/tr.js +19 -8
- umap/static/umap/locale/tr.json +19 -8
- umap/static/umap/locale/uk_UA.js +19 -8
- umap/static/umap/locale/uk_UA.json +19 -8
- umap/static/umap/locale/vi.js +19 -8
- umap/static/umap/locale/vi.json +19 -8
- umap/static/umap/locale/vi_VN.json +19 -8
- umap/static/umap/locale/zh.js +19 -8
- umap/static/umap/locale/zh.json +19 -8
- umap/static/umap/locale/zh_CN.json +19 -8
- umap/static/umap/locale/zh_TW.Big5.json +19 -8
- umap/static/umap/locale/zh_TW.js +53 -42
- umap/static/umap/locale/zh_TW.json +53 -42
- umap/static/umap/map.css +8 -7
- umap/static/umap/unittests/utils.js +7 -7
- umap/templates/umap/content_footer.html +1 -0
- umap/templates/umap/css.html +0 -2
- umap/templates/umap/js.html +1 -3
- umap/templates/umap/login_popup_end.html +2 -2
- umap/tests/integration/conftest.py +11 -2
- umap/tests/integration/test_anonymous_owned_map.py +2 -2
- umap/tests/integration/test_conditional_rules.py +107 -52
- umap/tests/integration/test_draw_polygon.py +4 -0
- umap/tests/integration/test_draw_polyline.py +11 -0
- umap/tests/integration/test_edit_datalayer.py +1 -1
- umap/tests/integration/test_fields.py +19 -0
- umap/tests/integration/test_filters.py +6 -7
- umap/tests/integration/test_iframe.py +1 -1
- umap/tests/integration/test_import.py +23 -0
- umap/tests/integration/test_map.py +2 -2
- umap/tests/integration/test_map_preview.py +1 -1
- umap/tests/integration/test_owned_map.py +2 -2
- umap/tests/integration/test_picto.py +1 -1
- umap/tests/integration/test_popup.py +31 -0
- umap/tests/integration/test_remote_data.py +4 -4
- umap/tests/integration/test_save.py +1 -1
- umap/tests/integration/test_search.py +41 -0
- umap/tests/integration/test_share.py +2 -2
- umap/tests/integration/test_team.py +1 -1
- umap/tests/integration/test_websocket_sync.py +69 -20
- umap/tests/test_dashboard.py +1 -1
- umap/tests/test_statics.py +2 -2
- umap/tests/test_utils.py +4 -1
- umap/tests/test_views.py +1 -1
- umap/utils.py +3 -2
- {umap_project-3.4.0b1.dist-info → umap_project-3.4.2.dist-info}/METADATA +17 -17
- {umap_project-3.4.0b1.dist-info → umap_project-3.4.2.dist-info}/RECORD +198 -199
- umap/static/umap/js/umap.core.js +0 -93
- umap/static/umap/vendors/editinosm/Leaflet.EditInOSM.css +0 -46
- umap/static/umap/vendors/editinosm/Leaflet.EditInOSM.js +0 -240
- umap/static/umap/vendors/editinosm/edit-in-osm.png +0 -0
- {umap_project-3.4.0b1.dist-info → umap_project-3.4.2.dist-info}/WHEEL +0 -0
- {umap_project-3.4.0b1.dist-info → umap_project-3.4.2.dist-info}/entry_points.txt +0 -0
- {umap_project-3.4.0b1.dist-info → umap_project-3.4.2.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { DomUtil } from '../../vendors/leaflet/leaflet-src.esm.js'
|
|
2
1
|
import { MutatingForm } from './form/builder.js'
|
|
3
2
|
import { EXPORT_FORMATS } from './formatter.js'
|
|
4
3
|
import { translate } from './i18n.js'
|
|
@@ -11,39 +10,35 @@ export default class Share {
|
|
|
11
10
|
}
|
|
12
11
|
|
|
13
12
|
build() {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
13
|
+
const downloadUrl = this._umap.urls.get('map_download', {
|
|
14
|
+
map_id: this._umap.id,
|
|
15
|
+
})
|
|
16
|
+
const [container, { shortUrl, list, customLink, textarea, iframeOptionsWrapper }] =
|
|
17
|
+
DOMUtils.loadTemplateWithRefs(`
|
|
18
|
+
<div>
|
|
19
|
+
<h3><i class="icon icon-16 icon-share"></i> ${translate('Share and download')}</h3>
|
|
20
|
+
<h4>${translate('Share')}</h4>
|
|
21
|
+
<copiable-input data-label="${translate('Link to view the map')}" data-value="${window.location.protocol + Utils.getBaseUrl()}"></copiable-input>
|
|
22
|
+
<copiable-input data-label="${translate('Short link')}" data-value="${this._umap.properties.shortUrl}" data-ref="shortUrl" hidden></copiable-input>
|
|
23
|
+
<copiable-textarea data-label="${translate('Customized link')}" data-ref="customLink"></copiable-textarea>
|
|
24
|
+
<copiable-textarea data-label="${translate('Iframe')}" data-ref="textarea"></copiable-textarea>
|
|
25
|
+
<div data-ref="iframeOptionsWrapper"></div>
|
|
26
|
+
<hr>
|
|
27
|
+
<h4>${translate('Download')}</h4>
|
|
28
|
+
<h5>${translate("Only visible layers' data")}</h5>
|
|
29
|
+
<ul data-ref="list" class="downloads"></ul>
|
|
30
|
+
<h5>${translate('All data and settings of the map')}</h5>
|
|
31
|
+
<p>
|
|
32
|
+
<a href="${downloadUrl}" download="backup.umap">
|
|
33
|
+
<i class="icon icon-16 icon-backup"></i>${translate('full backup')}
|
|
34
|
+
</a>
|
|
35
|
+
</p>
|
|
36
|
+
</div>
|
|
37
|
+
`)
|
|
38
|
+
this.container = container
|
|
27
39
|
if (this._umap.properties.shortUrl) {
|
|
28
|
-
|
|
29
|
-
this.container,
|
|
30
|
-
translate('Short link'),
|
|
31
|
-
this._umap.properties.shortUrl
|
|
32
|
-
)
|
|
40
|
+
shortUrl.hidden = false
|
|
33
41
|
}
|
|
34
|
-
|
|
35
|
-
DomUtil.create('hr', '', this.container)
|
|
36
|
-
|
|
37
|
-
DomUtil.add('h4', '', this.container, translate('Download'))
|
|
38
|
-
DomUtil.add(
|
|
39
|
-
'small',
|
|
40
|
-
'label',
|
|
41
|
-
this.container,
|
|
42
|
-
translate("Only visible layers' data")
|
|
43
|
-
)
|
|
44
|
-
const list = document.createElement('ul')
|
|
45
|
-
list.classList.add('downloads')
|
|
46
|
-
this.container.appendChild(list)
|
|
47
42
|
for (const format of Object.keys(EXPORT_FORMATS).concat('jpg', 'png')) {
|
|
48
43
|
const button = Utils.loadTemplate(`
|
|
49
44
|
<li>
|
|
@@ -55,38 +50,7 @@ export default class Share {
|
|
|
55
50
|
button.addEventListener('click', () => this.download(format))
|
|
56
51
|
list.appendChild(button)
|
|
57
52
|
}
|
|
58
|
-
DomUtil.create('div', 'vspace', this.container)
|
|
59
|
-
DomUtil.add(
|
|
60
|
-
'small',
|
|
61
|
-
'label',
|
|
62
|
-
this.container,
|
|
63
|
-
translate('All data and settings of the map')
|
|
64
|
-
)
|
|
65
|
-
const downloadUrl = this._umap.urls.get('map_download', {
|
|
66
|
-
map_id: this._umap.id,
|
|
67
|
-
})
|
|
68
|
-
const link = Utils.loadTemplate(`
|
|
69
|
-
<div>
|
|
70
|
-
<a href="${downloadUrl}">
|
|
71
|
-
<i class="icon icon-16 icon-backup"></i>${translate('full backup')}
|
|
72
|
-
</a>
|
|
73
|
-
</div>
|
|
74
|
-
`)
|
|
75
|
-
this.container.appendChild(link)
|
|
76
|
-
// File will be named by back-office
|
|
77
|
-
link.setAttribute('download', 'backup.umap')
|
|
78
|
-
DomUtil.create('hr', '', this.container)
|
|
79
53
|
|
|
80
|
-
const embedTitle = DomUtil.add('h4', '', this.container, translate('Embed the map'))
|
|
81
|
-
const iframe = DomUtil.create('textarea', 'umap-share-iframe', this.container)
|
|
82
|
-
const urlTitle = DomUtil.add('h4', '', this.container, translate('Direct link'))
|
|
83
|
-
const exportUrl = DOMUtils.copiableInput(
|
|
84
|
-
this.container,
|
|
85
|
-
translate('Share this link to open a customized map view'),
|
|
86
|
-
''
|
|
87
|
-
)
|
|
88
|
-
|
|
89
|
-
exportUrl.type = 'text'
|
|
90
54
|
const UIFields = [
|
|
91
55
|
['dimensions.width', { handler: 'Input', label: translate('width') }],
|
|
92
56
|
['dimensions.height', { handler: 'Input', label: translate('height') }],
|
|
@@ -123,14 +87,17 @@ export default class Share {
|
|
|
123
87
|
}
|
|
124
88
|
const iframeExporter = new IframeExporter(this._umap)
|
|
125
89
|
const buildIframeCode = () => {
|
|
126
|
-
|
|
127
|
-
|
|
90
|
+
textarea.setAttribute('value', iframeExporter.build())
|
|
91
|
+
customLink.setAttribute(
|
|
92
|
+
'value',
|
|
93
|
+
window.location.protocol + iframeExporter.buildUrl()
|
|
94
|
+
)
|
|
128
95
|
}
|
|
129
96
|
buildIframeCode()
|
|
130
97
|
const builder = new MutatingForm(iframeExporter, UIFields)
|
|
131
98
|
builder.on('set', buildIframeCode)
|
|
132
|
-
const iframeOptions =
|
|
133
|
-
|
|
99
|
+
const iframeOptions = DOMUtils.createFieldset(
|
|
100
|
+
iframeOptionsWrapper,
|
|
134
101
|
translate('Embed and link options')
|
|
135
102
|
)
|
|
136
103
|
iframeOptions.appendChild(builder.build())
|
|
@@ -222,13 +189,13 @@ class IframeExporter {
|
|
|
222
189
|
delete this.queryString.datalayers
|
|
223
190
|
}
|
|
224
191
|
const currentView = this.options.currentView ? window.location.hash : ''
|
|
225
|
-
const queryString =
|
|
192
|
+
const queryString = Object.assign({}, this.queryString, options)
|
|
226
193
|
return `${this.baseUrl}?${Utils.buildQueryString(queryString)}${currentView}`
|
|
227
194
|
}
|
|
228
195
|
|
|
229
196
|
build() {
|
|
230
197
|
const iframeUrl = this.buildUrl()
|
|
231
|
-
let code = `<iframe
|
|
198
|
+
let code = `<iframe style="width: ${this.dimensions.width}; height: ${this.dimensions.height}; border: 0;" allowfullscreen allow="geolocation" src="${iframeUrl}"></iframe>`
|
|
232
199
|
if (this.options.includeFullScreenLink) {
|
|
233
200
|
const fullUrl = this.buildUrl({ scrollWheelZoom: true })
|
|
234
201
|
code += `<p><a href="${fullUrl}">${translate('See full screen')}</a></p>`
|
|
@@ -89,8 +89,8 @@ export default class Slideshow extends WithTemplate {
|
|
|
89
89
|
play() {
|
|
90
90
|
if (this._id) return
|
|
91
91
|
if (this._umap.editEnabled || !this.isEnabled()) return
|
|
92
|
-
|
|
93
|
-
this._id = window.setInterval(
|
|
92
|
+
document.body.classList.add(this.CLASSNAME)
|
|
93
|
+
this._id = window.setInterval(() => this.loop(), this.properties.delay)
|
|
94
94
|
this.startSpinner()
|
|
95
95
|
this.loop()
|
|
96
96
|
}
|
|
@@ -103,7 +103,7 @@ export default class Slideshow extends WithTemplate {
|
|
|
103
103
|
pause() {
|
|
104
104
|
if (this._id) {
|
|
105
105
|
this.stopSpinner()
|
|
106
|
-
|
|
106
|
+
document.body.classList.remove(this.CLASSNAME)
|
|
107
107
|
window.clearInterval(this._id)
|
|
108
108
|
this._id = null
|
|
109
109
|
}
|
|
@@ -236,12 +236,18 @@ export class BottomBar extends WithTemplate {
|
|
|
236
236
|
this.elements.layers.addEventListener('change', () => {
|
|
237
237
|
const select = this.elements.layers
|
|
238
238
|
const selected = select.options[select.selectedIndex].value
|
|
239
|
-
|
|
240
|
-
this._umap.datalayers.active().map((datalayer) => {
|
|
239
|
+
for (const datalayer of this._umap.datalayers.active()) {
|
|
241
240
|
if (datalayer.properties.inCaption !== false) {
|
|
242
|
-
|
|
241
|
+
if (!selected) {
|
|
242
|
+
datalayer.autoVisibility = true
|
|
243
|
+
if (datalayer.showAtZoom() && !datalayer.isVisible()) {
|
|
244
|
+
datalayer.show()
|
|
245
|
+
}
|
|
246
|
+
} else {
|
|
247
|
+
datalayer.toggle(datalayer.id === selected)
|
|
248
|
+
}
|
|
243
249
|
}
|
|
244
|
-
}
|
|
250
|
+
}
|
|
245
251
|
})
|
|
246
252
|
}
|
|
247
253
|
|
|
@@ -263,7 +269,9 @@ export class BottomBar extends WithTemplate {
|
|
|
263
269
|
if (datalayers.length < 2) {
|
|
264
270
|
this.elements.layers.hidden = true
|
|
265
271
|
} else {
|
|
266
|
-
this.elements.layers.appendChild(
|
|
272
|
+
this.elements.layers.appendChild(
|
|
273
|
+
Utils.loadTemplate(`<option value="">${translate('All layers')}</option>`)
|
|
274
|
+
)
|
|
267
275
|
this.elements.layers.hidden = !this._umap.getProperty('layerSwitcher')
|
|
268
276
|
const visible = datalayers.filter((datalayer) => datalayer.isVisible())
|
|
269
277
|
for (const datalayer of datalayers) {
|
|
@@ -279,27 +287,30 @@ export class BottomBar extends WithTemplate {
|
|
|
279
287
|
}
|
|
280
288
|
|
|
281
289
|
const EDIT_BAR_TEMPLATE = `
|
|
282
|
-
<
|
|
283
|
-
<
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
<
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
<
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
<
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
290
|
+
<div class="umap-edit-bar dark with-transition">
|
|
291
|
+
<ul>
|
|
292
|
+
<li data-ref="marker"><button class="drawing-tool" type="button" data-getstarted><i class="icon icon-24 icon-marker"></i></button></li>
|
|
293
|
+
<li data-ref="polyline"><button class="drawing-tool" type="button" data-getstarted><i class="icon icon-24 icon-polyline"></i></button></li>
|
|
294
|
+
<li data-ref="multiline" hidden>
|
|
295
|
+
<button class="drawing-tool" type="button" title="${translate('Add a line to the current multi')}"><i class="icon icon-24 icon-multiline"></i></button>
|
|
296
|
+
</li>
|
|
297
|
+
<li data-ref="polygon"><button class="drawing-tool" type="button" data-getstarted><i class="icon icon-24 icon-polygon"></i></button></li>
|
|
298
|
+
<li data-ref="multipolygon" hidden>
|
|
299
|
+
<button class="drawing-tool" type="button" title="${translate('Add a polygon to the current multi')}"><i class="icon icon-24 icon-multipolygon"></i></button>
|
|
300
|
+
</li>
|
|
301
|
+
<li data-ref="route" hidden><button class="drawing-tool" type="button" data-getstarted title="${translate('Draw along routes')}"><i class="icon icon-24 icon-route"></i></button></li>
|
|
302
|
+
</ul>
|
|
303
|
+
<ul>
|
|
304
|
+
<li data-ref="caption" hidden><button data-getstarted type="button" title="${translate('Edit map name and caption')}"><i class="icon icon-24 icon-info"></i></button></li>
|
|
305
|
+
<li data-ref="import" hidden><button type="button"><i class="icon icon-24 icon-upload"></i></button></li>
|
|
306
|
+
<li data-ref="templates" hidden><button type="button" title="${translate('Load template')}" data-getstarted><i class="icon icon-24 icon-template"></i></button></li>
|
|
307
|
+
<li data-ref="layers" hidden><button type="button" title="${translate('Manage layers')}"><i class="icon icon-24 icon-layers"></i></button></li>
|
|
308
|
+
<li data-ref="tilelayers" hidden><button type="button" title="${translate('Change tilelayers')}"><i class="icon icon-24 icon-tilelayer"></i></button></li>
|
|
309
|
+
<li data-ref="center" hidden><button type="button"><i class="icon icon-24 icon-center"></i></button></li>
|
|
310
|
+
<li data-ref="permissions" hidden><button type="button" title="${translate('Update permissions and editors')}"><i class="icon icon-24 icon-key"></i></button></li>
|
|
311
|
+
<li data-ref="settings" hidden><button data-getstarted type="button" title="${translate('Map advanced properties')}"><i class="icon icon-24 icon-settings"></i></button></li>
|
|
312
|
+
</ul>
|
|
313
|
+
</div>
|
|
303
314
|
`
|
|
304
315
|
|
|
305
316
|
export class EditBar extends WithTemplate {
|
|
@@ -315,12 +326,12 @@ export class EditBar extends WithTemplate {
|
|
|
315
326
|
setup() {
|
|
316
327
|
this.parent.appendChild(this.element)
|
|
317
328
|
DomEvent.disableClickPropagation(this.element)
|
|
318
|
-
this.
|
|
319
|
-
this.
|
|
320
|
-
this.
|
|
321
|
-
this.
|
|
322
|
-
this.
|
|
323
|
-
this.
|
|
329
|
+
this._onDrawing('marker', () => this._leafletMap.editTools.startMarker())
|
|
330
|
+
this._onDrawing('polyline', () => this._leafletMap.editTools.startPolyline())
|
|
331
|
+
this._onDrawing('multiline', () => this._umap.editedFeature.ui.editor.newShape())
|
|
332
|
+
this._onDrawing('polygon', () => this._leafletMap.editTools.startPolygon())
|
|
333
|
+
this._onDrawing('multipolygon', () => this._umap.editedFeature.ui.editor.newShape())
|
|
334
|
+
this._onDrawing('route', () => this._leafletMap.editTools.startRoute())
|
|
324
335
|
this._onClick('caption', () => this._umap.editCaption())
|
|
325
336
|
this._onClick('import', () => this._umap.importer.open())
|
|
326
337
|
this._onClick('templates', () => this.templateIimporter.open())
|
|
@@ -359,6 +370,14 @@ export class EditBar extends WithTemplate {
|
|
|
359
370
|
)
|
|
360
371
|
}
|
|
361
372
|
|
|
373
|
+
_onDrawing(ref, realAction) {
|
|
374
|
+
const action = (event) => {
|
|
375
|
+
event.target.closest('button').classList.add('on')
|
|
376
|
+
realAction(event)
|
|
377
|
+
}
|
|
378
|
+
this._onClick(ref, action)
|
|
379
|
+
}
|
|
380
|
+
|
|
362
381
|
_onClick(ref, action) {
|
|
363
382
|
// Put the click on the button, not on the li, but keep the data-ref on the li
|
|
364
383
|
// so to hide/show it when needed.
|
|
@@ -161,7 +161,16 @@ export default class Dialog extends WithTemplate {
|
|
|
161
161
|
|
|
162
162
|
accept() {
|
|
163
163
|
this.dialog.returnValue = 'accept'
|
|
164
|
-
|
|
164
|
+
return new Promise((resolve) => {
|
|
165
|
+
this.dialog.addEventListener(
|
|
166
|
+
'close',
|
|
167
|
+
() => {
|
|
168
|
+
resolve()
|
|
169
|
+
},
|
|
170
|
+
{ once: true }
|
|
171
|
+
)
|
|
172
|
+
this.close()
|
|
173
|
+
})
|
|
165
174
|
}
|
|
166
175
|
|
|
167
176
|
waitForUser() {
|
|
@@ -1,13 +1,15 @@
|
|
|
1
|
-
import { DomEvent
|
|
1
|
+
import { DomEvent } from '../../../vendors/leaflet/leaflet-src.esm.js'
|
|
2
2
|
import { translate } from '../i18n.js'
|
|
3
|
+
import * as DOMUtils from '../domutils.js'
|
|
3
4
|
|
|
4
5
|
export class Panel {
|
|
5
6
|
constructor(umap, leafletMap) {
|
|
6
7
|
this.parent = leafletMap._controlContainer
|
|
7
8
|
this._umap = umap
|
|
8
9
|
this._leafletMap = leafletMap
|
|
9
|
-
this.container =
|
|
10
|
-
|
|
10
|
+
this.container = document.createElement('div')
|
|
11
|
+
this.parent.appendChild(this.container)
|
|
12
|
+
// This will be set once according to the panel configured at load
|
|
11
13
|
// or by using panels as popups
|
|
12
14
|
this.mode = null
|
|
13
15
|
this.className = 'left'
|
|
@@ -37,44 +39,46 @@ export class Panel {
|
|
|
37
39
|
}
|
|
38
40
|
document.body.classList.add(`panel-${this.className.split(' ')[0]}-on`)
|
|
39
41
|
this.container.innerHTML = ''
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
+
const template = `
|
|
43
|
+
<div>
|
|
44
|
+
<ul class="buttons" data-ref="buttons">
|
|
45
|
+
<li><button class="icon icon-16 icon-close" data-ref="close" title="${translate('Close')}"></button></li>
|
|
46
|
+
<li><button class="icon icon-16 icon-resize" data-ref="resize" title="${translate('Toggle size')}"></button></li>
|
|
47
|
+
</ul>
|
|
48
|
+
<div class="body" data-ref="body">
|
|
49
|
+
</div>
|
|
50
|
+
</div>
|
|
51
|
+
`
|
|
52
|
+
const [root, { close, resize, body, buttons }] =
|
|
53
|
+
DOMUtils.loadTemplateWithRefs(template)
|
|
42
54
|
body.appendChild(content)
|
|
43
|
-
|
|
44
|
-
DomUtil.create('li', '', actionsContainer),
|
|
45
|
-
'icon-close',
|
|
46
|
-
translate('Close')
|
|
47
|
-
)
|
|
48
|
-
const resizeButton = DomUtil.createButtonIcon(
|
|
49
|
-
DomUtil.create('li', '', actionsContainer),
|
|
50
|
-
'icon-resize',
|
|
51
|
-
translate('Toggle size')
|
|
52
|
-
)
|
|
55
|
+
this.container.appendChild(root)
|
|
53
56
|
for (const action of actions) {
|
|
54
|
-
const
|
|
55
|
-
|
|
57
|
+
const li = document.createElement('li')
|
|
58
|
+
li.appendChild(action)
|
|
59
|
+
buttons.appendChild(li)
|
|
56
60
|
}
|
|
57
|
-
if (className)
|
|
61
|
+
if (className) body.classList.add(className)
|
|
58
62
|
const promise = new Promise((resolve, reject) => {
|
|
59
63
|
if (isOpen) {
|
|
60
64
|
resolve(this)
|
|
61
65
|
} else {
|
|
66
|
+
this.container.classList.add('on')
|
|
62
67
|
Promise.all(
|
|
63
|
-
this.container.getAnimations().map((animation) => animation.finished)
|
|
68
|
+
this.container.getAnimations?.().map((animation) => animation.finished)
|
|
64
69
|
)
|
|
65
70
|
.then(() => {
|
|
66
71
|
resolve(this)
|
|
67
72
|
})
|
|
68
73
|
.catch(() => {
|
|
69
74
|
// Panel has been removed, so the DOM has changed, so the animations
|
|
70
|
-
// were cancelled, we want the new panel
|
|
75
|
+
// were cancelled, we want the new panel callback to be called anyway.
|
|
71
76
|
resolve(this)
|
|
72
77
|
})
|
|
73
|
-
this.container.classList.add('on')
|
|
74
78
|
}
|
|
75
79
|
})
|
|
76
|
-
|
|
77
|
-
|
|
80
|
+
close.addEventListener('click', () => this.close())
|
|
81
|
+
resize.addEventListener('click', () => this.resize())
|
|
78
82
|
return promise
|
|
79
83
|
}
|
|
80
84
|
|
|
@@ -102,6 +106,7 @@ export class Panel {
|
|
|
102
106
|
this._leafletMap.invalidateSize({ pan: false })
|
|
103
107
|
}
|
|
104
108
|
}
|
|
109
|
+
|
|
105
110
|
scrollTo(selector) {
|
|
106
111
|
const fieldset = this.container.querySelector(selector)
|
|
107
112
|
if (!fieldset) return
|
|
@@ -27,7 +27,7 @@ export default class Tooltip extends Positioned {
|
|
|
27
27
|
this.parent.appendChild(this.container)
|
|
28
28
|
this.openAt(opts)
|
|
29
29
|
}
|
|
30
|
-
this.TOOLTIP_ID = window.setTimeout(
|
|
30
|
+
this.TOOLTIP_ID = window.setTimeout(() => showIt(), opts.delay || 0)
|
|
31
31
|
const id = this.TOOLTIP_ID
|
|
32
32
|
const closeIt = () => {
|
|
33
33
|
this.close(id)
|