umap-project 2.4.2__py3-none-any.whl → 2.5.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.
- umap/__init__.py +1 -1
- umap/locale/el/LC_MESSAGES/django.mo +0 -0
- umap/locale/eu/LC_MESSAGES/django.mo +0 -0
- umap/locale/hu/LC_MESSAGES/django.mo +0 -0
- umap/locale/hu/LC_MESSAGES/django.po +100 -50
- umap/static/umap/base.css +4 -1
- umap/static/umap/css/contextmenu.css +11 -0
- umap/static/umap/css/dialog.css +24 -3
- umap/static/umap/css/panel.css +4 -2
- umap/static/umap/css/slideshow.css +69 -0
- umap/static/umap/css/tableeditor.css +69 -0
- umap/static/umap/css/tooltip.css +3 -3
- umap/static/umap/img/16-white.svg +4 -0
- umap/static/umap/img/source/16-white.svg +5 -1
- umap/static/umap/js/components/alerts/alert.css +10 -10
- umap/static/umap/js/modules/autocomplete.js +23 -1
- umap/static/umap/js/modules/browser.js +14 -8
- umap/static/umap/js/modules/facets.js +40 -10
- umap/static/umap/js/modules/formatter.js +153 -0
- umap/static/umap/js/modules/global.js +10 -1
- umap/static/umap/js/modules/help.js +25 -25
- umap/static/umap/js/modules/importer.js +4 -4
- umap/static/umap/js/modules/importers/communesfr.js +3 -1
- umap/static/umap/js/modules/importers/datasets.js +8 -6
- umap/static/umap/js/modules/importers/geodatamine.js +10 -10
- umap/static/umap/js/modules/importers/overpass.js +18 -14
- umap/static/umap/js/modules/rules.js +13 -1
- umap/static/umap/js/modules/schema.js +16 -12
- umap/static/umap/js/{umap.share.js → modules/share.js} +60 -99
- umap/static/umap/js/modules/slideshow.js +141 -0
- umap/static/umap/js/modules/tableeditor.js +329 -0
- umap/static/umap/js/modules/ui/base.js +93 -0
- umap/static/umap/js/modules/ui/contextmenu.js +50 -0
- umap/static/umap/js/modules/ui/dialog.js +169 -31
- umap/static/umap/js/modules/ui/panel.js +6 -4
- umap/static/umap/js/modules/ui/tooltip.js +5 -75
- umap/static/umap/js/modules/utils.js +20 -0
- umap/static/umap/js/umap.controls.js +1 -1
- umap/static/umap/js/umap.features.js +22 -14
- umap/static/umap/js/umap.forms.js +157 -154
- umap/static/umap/js/umap.js +48 -34
- umap/static/umap/js/umap.layer.js +232 -164
- umap/static/umap/js/umap.permissions.js +1 -1
- umap/static/umap/js/umap.popup.js +1 -1
- umap/static/umap/locale/am_ET.js +22 -5
- umap/static/umap/locale/am_ET.json +19 -5
- umap/static/umap/locale/ar.js +22 -5
- umap/static/umap/locale/ar.json +19 -5
- umap/static/umap/locale/ast.js +22 -5
- umap/static/umap/locale/ast.json +19 -5
- umap/static/umap/locale/bg.js +22 -5
- umap/static/umap/locale/bg.json +19 -5
- umap/static/umap/locale/br.js +22 -5
- umap/static/umap/locale/br.json +19 -5
- umap/static/umap/locale/ca.js +56 -39
- umap/static/umap/locale/ca.json +53 -39
- umap/static/umap/locale/cs_CZ.js +22 -5
- umap/static/umap/locale/cs_CZ.json +19 -5
- umap/static/umap/locale/da.js +22 -5
- umap/static/umap/locale/da.json +19 -5
- umap/static/umap/locale/de.js +22 -5
- umap/static/umap/locale/de.json +19 -5
- umap/static/umap/locale/el.js +27 -10
- umap/static/umap/locale/el.json +19 -5
- umap/static/umap/locale/en.js +22 -6
- umap/static/umap/locale/en.json +19 -5
- umap/static/umap/locale/en_US.json +19 -5
- umap/static/umap/locale/es.js +22 -6
- umap/static/umap/locale/es.json +19 -5
- umap/static/umap/locale/et.js +22 -5
- umap/static/umap/locale/et.json +19 -5
- umap/static/umap/locale/eu.js +167 -150
- umap/static/umap/locale/eu.json +167 -150
- umap/static/umap/locale/fa_IR.js +22 -5
- umap/static/umap/locale/fa_IR.json +19 -5
- umap/static/umap/locale/fi.js +22 -5
- umap/static/umap/locale/fi.json +19 -5
- umap/static/umap/locale/fr.js +22 -6
- umap/static/umap/locale/fr.json +19 -5
- umap/static/umap/locale/gl.js +22 -5
- umap/static/umap/locale/gl.json +19 -5
- umap/static/umap/locale/he.js +22 -5
- umap/static/umap/locale/he.json +19 -5
- umap/static/umap/locale/hr.js +22 -5
- umap/static/umap/locale/hr.json +19 -5
- umap/static/umap/locale/hu.js +89 -72
- umap/static/umap/locale/hu.json +89 -75
- umap/static/umap/locale/id.js +22 -5
- umap/static/umap/locale/id.json +19 -5
- umap/static/umap/locale/is.js +22 -5
- umap/static/umap/locale/is.json +19 -5
- umap/static/umap/locale/it.js +22 -5
- umap/static/umap/locale/it.json +19 -5
- umap/static/umap/locale/ja.js +22 -5
- umap/static/umap/locale/ja.json +19 -5
- umap/static/umap/locale/ko.js +22 -5
- umap/static/umap/locale/ko.json +19 -5
- umap/static/umap/locale/lt.js +22 -5
- umap/static/umap/locale/lt.json +19 -5
- umap/static/umap/locale/ms.js +22 -5
- umap/static/umap/locale/ms.json +19 -5
- umap/static/umap/locale/nl.js +22 -5
- umap/static/umap/locale/nl.json +19 -5
- umap/static/umap/locale/no.js +22 -5
- umap/static/umap/locale/no.json +19 -5
- umap/static/umap/locale/pl.js +22 -5
- umap/static/umap/locale/pl.json +19 -5
- umap/static/umap/locale/pl_PL.json +19 -5
- umap/static/umap/locale/pt.js +22 -6
- umap/static/umap/locale/pt.json +21 -7
- umap/static/umap/locale/pt_BR.js +22 -5
- umap/static/umap/locale/pt_BR.json +19 -5
- umap/static/umap/locale/pt_PT.js +22 -5
- umap/static/umap/locale/pt_PT.json +19 -5
- umap/static/umap/locale/ro.js +22 -5
- umap/static/umap/locale/ro.json +19 -5
- umap/static/umap/locale/ru.js +22 -5
- umap/static/umap/locale/ru.json +19 -5
- umap/static/umap/locale/sk_SK.js +22 -5
- umap/static/umap/locale/sk_SK.json +19 -5
- umap/static/umap/locale/sl.js +22 -5
- umap/static/umap/locale/sl.json +19 -5
- umap/static/umap/locale/sr.js +22 -5
- umap/static/umap/locale/sr.json +19 -5
- umap/static/umap/locale/sv.js +22 -5
- umap/static/umap/locale/sv.json +19 -5
- umap/static/umap/locale/th_TH.js +22 -5
- umap/static/umap/locale/th_TH.json +19 -5
- umap/static/umap/locale/tr.js +22 -5
- umap/static/umap/locale/tr.json +19 -5
- umap/static/umap/locale/uk_UA.js +22 -5
- umap/static/umap/locale/uk_UA.json +19 -5
- umap/static/umap/locale/vi.js +22 -5
- umap/static/umap/locale/vi.json +19 -5
- umap/static/umap/locale/vi_VN.json +19 -5
- umap/static/umap/locale/zh.js +22 -5
- umap/static/umap/locale/zh.json +19 -5
- umap/static/umap/locale/zh_CN.json +19 -5
- umap/static/umap/locale/zh_TW.Big5.json +19 -5
- umap/static/umap/locale/zh_TW.js +22 -5
- umap/static/umap/locale/zh_TW.json +19 -5
- umap/static/umap/map.css +2 -145
- umap/static/umap/vars.css +5 -0
- umap/static/umap/vendors/formbuilder/Leaflet.FormBuilder.js +410 -428
- umap/static/umap/vendors/geojson-to-gpx/index.js +155 -0
- umap/static/umap/vendors/osmtogeojson/osmtogeojson.js +1 -2
- umap/static/umap/vendors/togeojson/togeojson.es.js +1109 -0
- umap/static/umap/vendors/togeojson/{togeojson.umd.js.map → togeojson.es.mjs.map} +1 -1
- umap/static/umap/vendors/tokml/tokml.es.js +895 -0
- umap/static/umap/vendors/tokml/tokml.es.mjs.map +1 -0
- umap/storage.py +5 -1
- umap/templates/umap/components/alerts/alert.html +3 -3
- umap/templates/umap/css.html +3 -0
- umap/templates/umap/js.html +0 -6
- umap/tests/fixtures/categorized_highway.geojson +1 -0
- umap/tests/fixtures/test_import_osm_relation.json +130 -0
- umap/tests/integration/conftest.py +8 -1
- umap/tests/integration/test_browser.py +3 -2
- umap/tests/integration/test_categorized_layer.py +141 -0
- umap/tests/integration/test_conditional_rules.py +21 -0
- umap/tests/integration/test_datalayer.py +9 -4
- umap/tests/integration/test_edit_datalayer.py +1 -0
- umap/tests/integration/test_edit_polygon.py +1 -1
- umap/tests/integration/test_export_map.py +2 -3
- umap/tests/integration/test_import.py +22 -0
- umap/tests/integration/test_tableeditor.py +158 -4
- umap/tests/integration/test_websocket_sync.py +2 -2
- {umap_project-2.4.2.dist-info → umap_project-2.5.0.dist-info}/METADATA +8 -8
- {umap_project-2.4.2.dist-info → umap_project-2.5.0.dist-info}/RECORD +172 -162
- umap/static/umap/js/umap.slideshow.js +0 -163
- umap/static/umap/js/umap.tableeditor.js +0 -118
- umap/static/umap/vendors/togeojson/togeojson.umd.js +0 -2
- umap/static/umap/vendors/togpx/togpx.js +0 -547
- umap/static/umap/vendors/tokml/tokml.js +0 -343
- {umap_project-2.4.2.dist-info → umap_project-2.5.0.dist-info}/WHEEL +0 -0
- {umap_project-2.4.2.dist-info → umap_project-2.5.0.dist-info}/entry_points.txt +0 -0
- {umap_project-2.4.2.dist-info → umap_project-2.5.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
U.Slideshow = L.Class.extend({
|
|
2
|
-
statics: {
|
|
3
|
-
CLASSNAME: 'umap-slideshow-active',
|
|
4
|
-
},
|
|
5
|
-
|
|
6
|
-
options: {
|
|
7
|
-
delay: 5000,
|
|
8
|
-
autoplay: false,
|
|
9
|
-
},
|
|
10
|
-
|
|
11
|
-
initialize: function (map, options) {
|
|
12
|
-
this.setOptions(options)
|
|
13
|
-
this.map = map
|
|
14
|
-
this._id = null
|
|
15
|
-
|
|
16
|
-
// current feature
|
|
17
|
-
let current = null
|
|
18
|
-
try {
|
|
19
|
-
Object.defineProperty(this, 'current', {
|
|
20
|
-
get: function () {
|
|
21
|
-
if (!current) {
|
|
22
|
-
const datalayer = this.defaultDatalayer()
|
|
23
|
-
if (datalayer) current = datalayer.getFeatureByIndex(0)
|
|
24
|
-
}
|
|
25
|
-
return current
|
|
26
|
-
},
|
|
27
|
-
set: (feature) => {
|
|
28
|
-
current = feature
|
|
29
|
-
},
|
|
30
|
-
})
|
|
31
|
-
} catch (e) {
|
|
32
|
-
// Certainly IE8, which has a limited version of defineProperty
|
|
33
|
-
}
|
|
34
|
-
try {
|
|
35
|
-
Object.defineProperty(this, 'next', {
|
|
36
|
-
get: () => {
|
|
37
|
-
if (!current) {
|
|
38
|
-
return this.current
|
|
39
|
-
}
|
|
40
|
-
return current.getNext()
|
|
41
|
-
},
|
|
42
|
-
})
|
|
43
|
-
} catch (e) {
|
|
44
|
-
// Certainly IE8, which has a limited version of defineProperty
|
|
45
|
-
}
|
|
46
|
-
if (this.options.autoplay) {
|
|
47
|
-
this.map.onceDataLoaded(function () {
|
|
48
|
-
this.play()
|
|
49
|
-
}, this)
|
|
50
|
-
}
|
|
51
|
-
this.map.on(
|
|
52
|
-
'edit:enabled',
|
|
53
|
-
function () {
|
|
54
|
-
this.stop()
|
|
55
|
-
},
|
|
56
|
-
this
|
|
57
|
-
)
|
|
58
|
-
},
|
|
59
|
-
|
|
60
|
-
setOptions: function (options) {
|
|
61
|
-
L.setOptions(this, options)
|
|
62
|
-
this.timeSpinner()
|
|
63
|
-
},
|
|
64
|
-
|
|
65
|
-
defaultDatalayer: function () {
|
|
66
|
-
return this.map.findDataLayer((d) => d.canBrowse())
|
|
67
|
-
},
|
|
68
|
-
|
|
69
|
-
timeSpinner: function () {
|
|
70
|
-
const time = Number.parseInt(this.options.delay, 10)
|
|
71
|
-
if (!time) return
|
|
72
|
-
const css = `rotation ${time / 1000}s infinite linear`
|
|
73
|
-
const spinners = document.querySelectorAll('.umap-slideshow-toolbox .play .spinner')
|
|
74
|
-
for (let i = 0; i < spinners.length; i++) {
|
|
75
|
-
spinners[i].style.animation = css
|
|
76
|
-
spinners[i].style['-webkit-animation'] = css
|
|
77
|
-
spinners[i].style['-moz-animation'] = css
|
|
78
|
-
spinners[i].style['-o-animation'] = css
|
|
79
|
-
}
|
|
80
|
-
},
|
|
81
|
-
|
|
82
|
-
resetSpinners: () => {
|
|
83
|
-
// Make that animnation is coordinated with user actions
|
|
84
|
-
const spinners = document.querySelectorAll('.umap-slideshow-toolbox .play .spinner')
|
|
85
|
-
|
|
86
|
-
let el
|
|
87
|
-
let newOne
|
|
88
|
-
for (let i = 0; i < spinners.length; i++) {
|
|
89
|
-
el = spinners[i]
|
|
90
|
-
newOne = el.cloneNode(true)
|
|
91
|
-
el.parentNode.replaceChild(newOne, el)
|
|
92
|
-
}
|
|
93
|
-
},
|
|
94
|
-
|
|
95
|
-
play: function () {
|
|
96
|
-
if (this._id) return
|
|
97
|
-
if (this.map.editEnabled || !this.map.options.slideshow.active) return
|
|
98
|
-
L.DomUtil.addClass(document.body, U.Slideshow.CLASSNAME)
|
|
99
|
-
this._id = window.setInterval(L.bind(this.loop, this), this.options.delay)
|
|
100
|
-
this.resetSpinners()
|
|
101
|
-
this.loop()
|
|
102
|
-
},
|
|
103
|
-
|
|
104
|
-
loop: function () {
|
|
105
|
-
this.current = this.next
|
|
106
|
-
this.step()
|
|
107
|
-
},
|
|
108
|
-
|
|
109
|
-
pause: function () {
|
|
110
|
-
if (this._id) {
|
|
111
|
-
L.DomUtil.removeClass(document.body, U.Slideshow.CLASSNAME)
|
|
112
|
-
window.clearInterval(this._id)
|
|
113
|
-
this._id = null
|
|
114
|
-
}
|
|
115
|
-
},
|
|
116
|
-
|
|
117
|
-
stop: function () {
|
|
118
|
-
this.pause()
|
|
119
|
-
this.current = null
|
|
120
|
-
},
|
|
121
|
-
|
|
122
|
-
forward: function () {
|
|
123
|
-
this.pause()
|
|
124
|
-
this.current = this.next
|
|
125
|
-
this.step()
|
|
126
|
-
},
|
|
127
|
-
|
|
128
|
-
backward: function () {
|
|
129
|
-
this.pause()
|
|
130
|
-
if (this.current) this.current = this.current.getPrevious()
|
|
131
|
-
this.step()
|
|
132
|
-
},
|
|
133
|
-
|
|
134
|
-
step: function () {
|
|
135
|
-
if (!this.current) return this.stop()
|
|
136
|
-
this.current.zoomTo({ easing: this.options.easing })
|
|
137
|
-
this.current.view()
|
|
138
|
-
},
|
|
139
|
-
|
|
140
|
-
renderToolbox: function (container) {
|
|
141
|
-
const box = L.DomUtil.create('ul', 'umap-slideshow-toolbox')
|
|
142
|
-
const play = L.DomUtil.create('li', 'play', box)
|
|
143
|
-
const stop = L.DomUtil.create('li', 'stop', box)
|
|
144
|
-
const prev = L.DomUtil.create('li', 'prev', box)
|
|
145
|
-
const next = L.DomUtil.create('li', 'next', box)
|
|
146
|
-
L.DomUtil.create('div', 'spinner', play)
|
|
147
|
-
play.title = L._('Start slideshow')
|
|
148
|
-
stop.title = L._('Stop slideshow')
|
|
149
|
-
next.title = L._('Zoom to the next')
|
|
150
|
-
prev.title = L._('Zoom to the previous')
|
|
151
|
-
const toggle = function () {
|
|
152
|
-
if (this._id) this.pause()
|
|
153
|
-
else this.play()
|
|
154
|
-
}
|
|
155
|
-
L.DomEvent.on(play, 'click', L.DomEvent.stop).on(play, 'click', toggle, this)
|
|
156
|
-
L.DomEvent.on(stop, 'click', L.DomEvent.stop).on(stop, 'click', this.stop, this)
|
|
157
|
-
L.DomEvent.on(prev, 'click', L.DomEvent.stop).on(prev, 'click', this.backward, this)
|
|
158
|
-
L.DomEvent.on(next, 'click', L.DomEvent.stop).on(next, 'click', this.forward, this)
|
|
159
|
-
container.appendChild(box)
|
|
160
|
-
this.timeSpinner()
|
|
161
|
-
return box
|
|
162
|
-
},
|
|
163
|
-
})
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
U.TableEditor = L.Class.extend({
|
|
2
|
-
initialize: function (datalayer) {
|
|
3
|
-
this.datalayer = datalayer
|
|
4
|
-
this.table = L.DomUtil.create('div', 'table')
|
|
5
|
-
this.header = L.DomUtil.create('div', 'thead', this.table)
|
|
6
|
-
this.body = L.DomUtil.create('div', 'tbody', this.table)
|
|
7
|
-
this.resetProperties()
|
|
8
|
-
},
|
|
9
|
-
|
|
10
|
-
renderHeaders: function () {
|
|
11
|
-
this.header.innerHTML = ''
|
|
12
|
-
for (let i = 0; i < this.properties.length; i++) {
|
|
13
|
-
this.renderHeader(this.properties[i])
|
|
14
|
-
}
|
|
15
|
-
},
|
|
16
|
-
|
|
17
|
-
renderHeader: function (property) {
|
|
18
|
-
const container = L.DomUtil.create('div', 'tcell', this.header)
|
|
19
|
-
const title = L.DomUtil.add('span', '', container, property)
|
|
20
|
-
const del = L.DomUtil.create('i', 'umap-delete', container)
|
|
21
|
-
const rename = L.DomUtil.create('i', 'umap-edit', container)
|
|
22
|
-
del.title = L._('Delete this property on all the features')
|
|
23
|
-
rename.title = L._('Rename this property on all the features')
|
|
24
|
-
const doDelete = function () {
|
|
25
|
-
if (
|
|
26
|
-
confirm(
|
|
27
|
-
L._('Are you sure you want to delete this property on all the features?')
|
|
28
|
-
)
|
|
29
|
-
) {
|
|
30
|
-
this.datalayer.eachLayer((feature) => {
|
|
31
|
-
feature.deleteProperty(property)
|
|
32
|
-
})
|
|
33
|
-
this.datalayer.deindexProperty(property)
|
|
34
|
-
this.resetProperties()
|
|
35
|
-
this.edit()
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
const doRename = function () {
|
|
39
|
-
const newName = prompt(
|
|
40
|
-
L._('Please enter the new name of this property'),
|
|
41
|
-
property
|
|
42
|
-
)
|
|
43
|
-
if (!newName || !this.validateName(newName)) return
|
|
44
|
-
this.datalayer.eachLayer((feature) => {
|
|
45
|
-
feature.renameProperty(property, newName)
|
|
46
|
-
})
|
|
47
|
-
this.datalayer.deindexProperty(property)
|
|
48
|
-
this.datalayer.indexProperty(newName)
|
|
49
|
-
this.edit()
|
|
50
|
-
}
|
|
51
|
-
L.DomEvent.on(del, 'click', doDelete, this)
|
|
52
|
-
L.DomEvent.on(rename, 'click', doRename, this)
|
|
53
|
-
},
|
|
54
|
-
|
|
55
|
-
renderRow: function (feature) {
|
|
56
|
-
const builder = new U.FormBuilder(feature, this.field_properties, {
|
|
57
|
-
id: `umap-feature-properties_${L.stamp(feature)}`,
|
|
58
|
-
className: 'trow',
|
|
59
|
-
callback: feature.resetTooltip,
|
|
60
|
-
})
|
|
61
|
-
this.body.appendChild(builder.build())
|
|
62
|
-
},
|
|
63
|
-
|
|
64
|
-
compileProperties: function () {
|
|
65
|
-
this.resetProperties()
|
|
66
|
-
if (this.properties.length === 0) this.properties = ['name']
|
|
67
|
-
// description is a forced textarea, don't edit it in a text input, or you lose cariage returns
|
|
68
|
-
if (this.properties.indexOf('description') !== -1)
|
|
69
|
-
this.properties.splice(this.properties.indexOf('description'), 1)
|
|
70
|
-
this.properties.sort()
|
|
71
|
-
this.field_properties = []
|
|
72
|
-
for (let i = 0; i < this.properties.length; i++) {
|
|
73
|
-
this.field_properties.push([
|
|
74
|
-
`properties.${this.properties[i]}`,
|
|
75
|
-
{ wrapper: 'div', wrapperClass: 'tcell' },
|
|
76
|
-
])
|
|
77
|
-
}
|
|
78
|
-
},
|
|
79
|
-
|
|
80
|
-
resetProperties: function () {
|
|
81
|
-
this.properties = this.datalayer._propertiesIndex
|
|
82
|
-
},
|
|
83
|
-
|
|
84
|
-
validateName: (name) => {
|
|
85
|
-
if (name.indexOf('.') !== -1) {
|
|
86
|
-
U.Alert.error(L._('Invalide property name: {name}', { name: name }))
|
|
87
|
-
return false
|
|
88
|
-
}
|
|
89
|
-
return true
|
|
90
|
-
},
|
|
91
|
-
|
|
92
|
-
edit: function () {
|
|
93
|
-
const id = 'tableeditor:edit'
|
|
94
|
-
this.compileProperties()
|
|
95
|
-
this.renderHeaders()
|
|
96
|
-
this.body.innerHTML = ''
|
|
97
|
-
this.datalayer.eachLayer(this.renderRow, this)
|
|
98
|
-
const addButton = L.DomUtil.createButton(
|
|
99
|
-
'flat',
|
|
100
|
-
undefined,
|
|
101
|
-
L._('Add a new property')
|
|
102
|
-
)
|
|
103
|
-
const iconElement = L.DomUtil.createIcon(addButton, 'icon-add')
|
|
104
|
-
addButton.insertBefore(iconElement, addButton.firstChild)
|
|
105
|
-
const addProperty = function () {
|
|
106
|
-
const newName = prompt(L._('Please enter the name of the property'))
|
|
107
|
-
if (!newName || !this.validateName(newName)) return
|
|
108
|
-
this.datalayer.indexProperty(newName)
|
|
109
|
-
this.edit()
|
|
110
|
-
}
|
|
111
|
-
L.DomEvent.on(addButton, 'click', addProperty, this)
|
|
112
|
-
this.datalayer.map.fullPanel.open({
|
|
113
|
-
content: this.table,
|
|
114
|
-
className: 'umap-table-editor',
|
|
115
|
-
actions: [addButton],
|
|
116
|
-
})
|
|
117
|
-
},
|
|
118
|
-
})
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).toGeoJSON={})}(this,(function(t){"use strict";function e(t,e){return Array.from(t.getElementsByTagName(e))}function n(t){return"#"===t[0]?t:`#${t}`}function o(t){return t?.normalize(),t&&t.textContent||""}function r(t,e,n){const o=t.getElementsByTagName(e),r=o.length?o[0]:null;return r&&n&&n(r),r}function i(t,e,n){const o={};if(!t)return o;const r=t.getElementsByTagName(e),i=r.length?r[0]:null;return i&&n?n(i,o):o}function s(t,e,n){const i=o(r(t,e));return i&&n&&n(i)||{}}function c(t,e,n){const i=parseFloat(o(r(t,e)));if(!isNaN(i))return i&&n&&n(i)||{}}function a(t,e,n){const i=parseFloat(o(r(t,e)));if(!isNaN(i))return n&&n(i),i}function l(t,e){const n={};for(const o of e)s(t,o,(t=>{n[o]=t}));return n}function u(t){return 1===t?.nodeType}function f(t){return i(t,"line",(t=>Object.assign({},s(t,"color",(t=>({stroke:`#${t}`}))),c(t,"opacity",(t=>({"stroke-opacity":t}))),c(t,"width",(t=>({"stroke-width":96*t/25.4}))))))}function p(t){let e=[];if(null===t)return e;for(const n of Array.from(t.childNodes)){if(!u(n))continue;const t=g(n.nodeName);if("gpxtpx:TrackPointExtension"===t)e=e.concat(p(n));else{const r=o(n);e.push([t,d(r)])}}return e}function g(t){return["heart","gpxtpx:hr","hr"].includes(t)?"heart":t}function d(t){const e=parseFloat(t);return isNaN(e)?t:e}function m(t){const e=[parseFloat(t.getAttribute("lon")||""),parseFloat(t.getAttribute("lat")||"")];if(isNaN(e[0])||isNaN(e[1]))return null;a(t,"ele",(t=>{e.push(t)}));const n=r(t,"time");return{coordinates:e,time:n?o(n):null,extendedValues:p(r(t,"extensions"))}}function h(t){const n=l(t,["name","cmt","desc","type","time","keywords"]),r=Array.from(t.getElementsByTagNameNS("http://www.garmin.com/xmlschemas/GpxExtensions/v3","*"));for(const e of r)e.parentNode?.parentNode===t&&(n[e.tagName.replace(":","_")]=o(e));const i=e(t,"link");return i.length&&(n.links=i.map((t=>Object.assign({href:t.getAttribute("href")},l(t,["text","type"]))))),n}function y(t,n){const o=e(t,n),r=[],i=[],s={};for(let t=0;t<o.length;t++){const e=m(o[t]);if(e){r.push(e.coordinates),e.time&&i.push(e.time);for(const[n,r]of e.extendedValues){const e="heart"===n?n:n.replace("gpxtpx:","")+"s";s[e]||(s[e]=Array(o.length).fill(null)),s[e][t]=r}}}if(!(r.length<2))return{line:r,times:i,extendedValues:s}}function b(t){const e=y(t,"rtept");if(e)return{type:"Feature",properties:Object.assign({_gpxType:"rte"},h(t),f(r(t,"extensions"))),geometry:{type:"LineString",coordinates:e.line}}}function N(t){const n=e(t,"trkseg"),o=[],i=[],s=[];for(const t of n){const e=y(t,"trkpt");e&&(s.push(e),e.times&&e.times.length&&i.push(e.times))}if(0===s.length)return null;const c=s.length>1,a=Object.assign({_gpxType:"trk"},h(t),f(r(t,"extensions")),i.length?{coordinateProperties:{times:c?i:i[0]}}:{});for(const t of s){o.push(t.line),a.coordinateProperties||(a.coordinateProperties={});const e=a.coordinateProperties,n=Object.entries(t.extendedValues);for(let t=0;t<n.length;t++){const[o,r]=n[t];c?(e[o]||(e[o]=s.map((t=>new Array(t.line.length).fill(null)))),e[o][t]=r):e[o]=r}}return{type:"Feature",properties:a,geometry:c?{type:"MultiLineString",coordinates:o}:{type:"LineString",coordinates:o[0]}}}function x(t){const e=Object.assign(h(t),l(t,["sym"])),n=m(t);return n?{type:"Feature",properties:e,geometry:{type:"Point",coordinates:n.coordinates}}:null}function*k(t){for(const n of e(t,"trk")){const t=N(n);t&&(yield t)}for(const n of e(t,"rte")){const t=b(n);t&&(yield t)}for(const n of e(t,"wpt")){const t=x(n);t&&(yield t)}}const A=[["heartRate","heartRates"],["Cadence","cadences"],["Speed","speeds"],["Watts","watts"]],S=[["TotalTimeSeconds","totalTimeSeconds"],["DistanceMeters","distanceMeters"],["MaximumSpeed","maxSpeed"],["AverageHeartRateBpm","avgHeartRate"],["MaximumHeartRateBpm","maxHeartRate"],["AvgSpeed","avgSpeed"],["AvgWatts","avgWatts"],["MaxWatts","maxWatts"]];function v(t,e){const n=[];for(const[i,s]of e){let e=r(t,i);if(!e){const n=t.getElementsByTagNameNS("http://www.garmin.com/xmlschemas/ActivityExtension/v2",i);n.length&&(e=n[0])}const c=parseFloat(o(e));isNaN(c)||n.push([s,c])}return n}function T(t){const e=[a(t,"LongitudeDegrees"),a(t,"LatitudeDegrees")];if(void 0===e[0]||isNaN(e[0])||void 0===e[1]||isNaN(e[1]))return null;const n=r(t,"HeartRateBpm"),i=o(r(t,"Time"));return r(t,"AltitudeMeters",(t=>{const n=parseFloat(o(t));isNaN(n)||e.push(n)})),{coordinates:e,time:i||null,heartRate:n?parseFloat(o(n)):null,extensions:v(t,A)}}function F(t){const n=e(t,"Trackpoint"),o=[],r=[],i=[];if(n.length<2)return null;const s={},c={extendedProperties:s};for(let t=0;t<n.length;t++){const e=T(n[t]);if(null===e)continue;o.push(e.coordinates);const{time:c,heartRate:a,extensions:l}=e;c&&r.push(c),a&&i.push(a);for(const[e,o]of l)s[e]||(s[e]=Array(n.length).fill(null)),s[e][t]=o}return o.length<2?null:Object.assign(c,{line:o,times:r,heartRates:i})}function P(t){const n=e(t,"Track"),r=[],s=[],c=[],a=[];let l;const u=Object.assign(Object.fromEntries(v(t,S)),i(t,"Name",(t=>({name:o(t)}))));for(const t of n)l=F(t),l&&(r.push(l.line),l.times.length&&s.push(l.times),l.heartRates.length&&c.push(l.heartRates),a.push(l.extendedProperties));for(let t=0;t<a.length;t++){const e=a[t];for(const o in e)1===n.length?l&&(u[o]=l.extendedProperties[o]):(u[o]||(u[o]=r.map((t=>Array(t.length).fill(null)))),u[o][t]=e[o])}return 0===r.length?null:((s.length||c.length)&&(u.coordinateProperties=Object.assign(s.length?{times:1===r.length?s[0]:s}:{},c.length?{heart:1===r.length?c[0]:c}:{})),{type:"Feature",properties:u,geometry:1===r.length?{type:"LineString",coordinates:r[0]}:{type:"MultiLineString",coordinates:r}})}function*O(t){for(const n of e(t,"Lap")){const t=P(n);t&&(yield t)}for(const n of e(t,"Courses")){const t=P(n);t&&(yield t)}}function w(t,e){const n={},o="stroke"==e||"fill"===e?e:e+"-color";return"#"===t[0]&&(t=t.substring(1)),6===t.length||3===t.length?n[o]="#"+t:8===t.length&&(n[e+"-opacity"]=parseInt(t.substring(0,2),16)/255,n[o]="#"+t.substring(6,8)+t.substring(4,6)+t.substring(2,4)),n}function M(t,e,n){const o={};return a(t,e,(t=>{o[n]=t})),o}function j(t,e){return i(t,"color",(t=>w(o(t),e)))}function L(t){return i(t,"Icon",((t,e)=>(s(t,"href",(t=>{e.icon=t})),e)))}function G(t){return Object.assign({},function(t){return i(t,"PolyStyle",((t,e)=>Object.assign(e,i(t,"color",(t=>w(o(t),"fill"))),s(t,"fill",(t=>{if("0"===t)return{"fill-opacity":0}})),s(t,"outline",(t=>{if("0"===t)return{"stroke-opacity":0}})))))}(t),function(t){return i(t,"LineStyle",(t=>Object.assign(j(t,"stroke"),M(t,"width","stroke-width"))))}(t),function(t){return i(t,"LabelStyle",(t=>Object.assign(j(t,"label"),M(t,"scale","label-scale"))))}(t),function(t){return i(t,"IconStyle",(t=>Object.assign(j(t,"icon"),M(t,"scale","icon-scale"),M(t,"heading","icon-heading"),i(t,"hotSpot",(t=>{const e=parseFloat(t.getAttribute("x")||""),n=parseFloat(t.getAttribute("y")||""),o=t.getAttribute("xunits")||"",r=t.getAttribute("yunits")||"";return isNaN(e)||isNaN(n)?{}:{"icon-offset":[e,n],"icon-offset-units":[o,r]}})),L(t))))}(t))}const R=t=>Number(t),B={string:t=>t,int:R,uint:R,short:R,ushort:R,float:R,double:R,bool:t=>Boolean(t)};function E(t,n){return i(t,"ExtendedData",((t,i)=>{for(const n of e(t,"Data"))i[n.getAttribute("name")||""]=o(r(n,"value"));for(const r of e(t,"SimpleData")){const t=r.getAttribute("name")||"",e=n[t]||B.string;i[t]=e(o(r))}return i}))}function C(t){const e=r(t,"description");for(const t of Array.from(e?.childNodes||[]))if(4===t.nodeType)return{description:{"@type":"html",value:o(t)}};return{}}function D(t){return i(t,"TimeSpan",(t=>({timespan:{begin:o(r(t,"begin")),end:o(r(t,"end"))}})))}function W(t){return i(t,"TimeStamp",(t=>({timestamp:o(r(t,"when"))})))}function H(t,e){return s(t,"styleUrl",(t=>(t=n(t),e[t]?Object.assign({styleUrl:t},e[t]):{styleUrl:t})))}const _=/\s*/g,I=/^\s*|\s*$/g,U=/\s+/;function V(t){return t.replace(_,"").split(",").map(parseFloat).filter((t=>!isNaN(t))).slice(0,3)}function $(t){return t.replace(I,"").split(U).map(V).filter((t=>t.length>=2))}function q(t){let n=e(t,"coord");var r,i,s;0===n.length&&(r=t,i="coord",s="*",n=Array.from(r.getElementsByTagNameNS(s,i)));const c=n.map((t=>o(t).split(" ").map(parseFloat)));return 0===c.length?null:{geometry:c.length>2?{type:"LineString",coordinates:c}:{type:"Point",coordinates:c[0]},times:e(t,"when").map((t=>o(t)))}}function z(t){if(0===t.length)return t;const e=t[0],n=t[t.length-1];let o=!0;for(let t=0;t<Math.max(e.length,n.length);t++)if(e[t]!==n[t]){o=!1;break}return o?t:t.concat([t[0]])}function J(t){return o(r(t,"coordinates"))}function Q(t){let n=[],o=[];for(let r=0;r<t.childNodes.length;r++){const i=t.childNodes.item(r);if(u(i))switch(i.tagName){case"MultiGeometry":case"MultiTrack":case"gx:MultiTrack":{const t=Q(i);n=n.concat(t.geometries),o=o.concat(t.coordTimes);break}case"Point":{const t=V(J(i));t.length>=2&&n.push({type:"Point",coordinates:t});break}case"LinearRing":case"LineString":{const t=$(J(i));t.length>=2&&n.push({type:"LineString",coordinates:t});break}case"Polygon":{const t=[];for(const n of e(i,"LinearRing")){const e=z($(J(n)));e.length>=4&&t.push(e)}t.length&&n.push({type:"Polygon",coordinates:t});break}case"Track":case"gx:Track":{const t=q(i);if(!t)break;const{times:e,geometry:r}=t;n.push(r),e.length&&o.push(e);break}}}return{geometries:n,coordTimes:o}}function K(t,e,n,o){const{coordTimes:r,geometries:i}=Q(t),s=function(t){return 0===t.length?null:1===t.length?t[0]:{type:"GeometryCollection",geometries:t}}(i);if(!s&&o.skipNullGeometry)return null;const c={type:"Feature",geometry:s,properties:Object.assign(l(t,["name","address","visibility","open","phoneNumber","description"]),C(t),H(t,e),G(t),E(t,n),D(t),W(t),r.length?{coordinateProperties:{times:1===r.length?r[0]:r}}:{})};void 0!==c.properties?.visibility&&(c.properties.visibility="0"!==c.properties.visibility);const a=t.getAttribute("id");return null!==a&&""!==a&&(c.id=a),c}function X(t){if(r(t,"gx:LatLonQuad")){return{geometry:{type:"Polygon",coordinates:[z($(J(t)))]}}}return function(t){const e=r(t,"LatLonBox");if(e){const t=a(e,"north"),n=a(e,"west"),o=a(e,"east"),r=a(e,"south"),i=a(e,"rotation");if("number"==typeof t&&"number"==typeof r&&"number"==typeof n&&"number"==typeof o){const e=[n,r,o,t];let s=[[[n,t],[o,t],[o,r],[n,r],[n,t]]];return"number"==typeof i&&(s=function(t,e,n){const o=[(t[0]+t[2])/2,(t[1]+t[3])/2];return[e[0].map((t=>{const e=t[1]-o[1],r=t[0]-o[0],i=Math.sqrt(Math.pow(e,2)+Math.pow(r,2)),s=Math.atan2(e,r)+n*Y;return[o[0]+Math.cos(s)*i,o[1]+Math.sin(s)*i]}))]}(e,s,i)),{bbox:e,geometry:{type:"Polygon",coordinates:s}}}}return null}(t)}const Y=Math.PI/180;function Z(t,e,n,o){const r=X(t),i=r?.geometry||null;if(!i&&o.skipNullGeometry)return null;const s={type:"Feature",geometry:i,properties:Object.assign({"@geometry-type":"groundoverlay"},l(t,["name","address","visibility","open","phoneNumber","description"]),C(t),H(t,e),G(t),L(t),E(t,n),D(t),W(t))};r?.bbox&&(s.bbox=r.bbox),void 0!==s.properties?.visibility&&(s.properties.visibility="0"!==s.properties.visibility);const c=t.getAttribute("id");return null!==c&&""!==c&&(s.id=c),s}function tt(t){let e=t.getAttribute("id");const o=t.parentNode;return!e&&u(o)&&"CascadingStyle"===o.localName&&(e=o.getAttribute("kml:id")||o.getAttribute("id")),n(e||"")}function et(t){const o={};for(const n of e(t,"Style"))o[tt(n)]=G(n);for(const r of e(t,"StyleMap")){const t=n(r.getAttribute("id")||"");s(r,"styleUrl",(e=>{e=n(e),o[e]&&(o[t]=o[e])}))}return o}function nt(t){const n={};for(const o of e(t,"SimpleField"))n[o.getAttribute("name")||""]=B[o.getAttribute("type")||""]||B.string;return n}const ot=["name","visibility","open","address","description","phoneNumber","visibility"];function*rt(t,n={skipNullGeometry:!1}){const o=et(t),r=nt(t);for(const i of e(t,"Placemark")){const t=K(i,o,r,n);t&&(yield t)}for(const i of e(t,"GroundOverlay")){const t=Z(i,o,r,n);t&&(yield t)}}t.gpx=function(t){return{type:"FeatureCollection",features:Array.from(k(t))}},t.gpxGen=k,t.kml=function(t,e={skipNullGeometry:!1}){return{type:"FeatureCollection",features:Array.from(rt(t,e))}},t.kmlGen=rt,t.kmlWithFolders=function(t,e={skipNullGeometry:!1}){const n=et(t),r=nt(t),i={type:"root",children:[]};return function t(e,i,s){if(u(e))switch(e.tagName){case"GroundOverlay":{const t=Z(e,n,r,s);t&&i.children.push(t);break}case"Placemark":{const t=K(e,n,r,s);t&&i.children.push(t);break}case"Folder":{const t=function(t){const e={};for(const n of Array.from(t.childNodes))u(n)&&ot.includes(n.tagName)&&(e[n.tagName]=o(n));return{type:"folder",meta:e,children:[]}}(e);i.children.push(t),i=t;break}}if(e.childNodes)for(let n=0;n<e.childNodes.length;n++)t(e.childNodes[n],i,s)}(t,i,e),i},t.tcx=function(t){return{type:"FeatureCollection",features:Array.from(O(t))}},t.tcxGen=O,Object.defineProperty(t,"__esModule",{value:!0})}));
|
|
2
|
-
//# sourceMappingURL=togeojson.umd.js.map
|