Merge pull request #1098 from umap-project/lebab-let-const

Apply Lebab for let/const conversions
This commit is contained in:
David Larlet 2023-05-30 14:19:27 -04:00 committed by GitHub
commit 4f5674073f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 718 additions and 679 deletions

View file

@ -60,6 +60,7 @@ pretty: ## Apply PrettierJS to all JS files (or specified `filepath`)
lebab: ## Convert JS `filepath` to modern syntax with Lebab, then prettify lebab: ## Convert JS `filepath` to modern syntax with Lebab, then prettify
./node_modules/lebab/bin/index.js --replace ${filepath} --transform arrow,arrow-return ./node_modules/lebab/bin/index.js --replace ${filepath} --transform arrow,arrow-return
./node_modules/lebab/bin/index.js --replace ${filepath} --transform let
$(MAKE) pretty filepath=${filepath} $(MAKE) pretty filepath=${filepath}
lebab-all: $(jsdir)* ## Convert all JS files to modern syntax with Lebab + prettify lebab-all: $(jsdir)* ## Convert all JS files to modern syntax with Lebab + prettify

View file

@ -12,10 +12,10 @@ L.U.AutoComplete = L.Class.extend({
initialize: function (el, options) { initialize: function (el, options) {
this.el = el this.el = el
var ui = new L.U.UI(document.querySelector('header')) const ui = new L.U.UI(document.querySelector('header'))
this.xhr = new L.U.Xhr(ui) this.xhr = new L.U.Xhr(ui)
L.setOptions(this, options) L.setOptions(this, options)
var CURRENT = null let CURRENT = null
try { try {
Object.defineProperty(this, 'CURRENT', { Object.defineProperty(this, 'CURRENT', {
get: function () { get: function () {
@ -59,11 +59,11 @@ L.U.AutoComplete = L.Class.extend({
}, },
resizeContainer: function () { resizeContainer: function () {
var l = this.getLeft(this.input) const l = this.getLeft(this.input)
var t = this.getTop(this.input) + this.input.offsetHeight const t = this.getTop(this.input) + this.input.offsetHeight
this.container.style.left = l + 'px' this.container.style.left = l + 'px'
this.container.style.top = t + 'px' this.container.style.top = t + 'px'
var width = this.options.width ? this.options.width : this.input.offsetWidth - 2 const width = this.options.width ? this.options.width : this.input.offsetWidth - 2
this.container.style.width = width + 'px' this.container.style.width = width + 'px'
}, },
@ -111,7 +111,7 @@ L.U.AutoComplete = L.Class.extend({
}, },
onKeyUp: function (e) { onKeyUp: function (e) {
var special = [ const special = [
L.U.Keys.TAB, L.U.Keys.TAB,
L.U.Keys.ENTER, L.U.Keys.ENTER,
L.U.Keys.LEFT, L.U.Keys.LEFT,
@ -159,7 +159,7 @@ L.U.AutoComplete = L.Class.extend({
}, },
search: function () { search: function () {
var val = this.input.value const val = this.input.value
if (val.length < this.options.minChar) { if (val.length < this.options.minChar) {
this.clear() this.clear()
return return
@ -176,9 +176,9 @@ L.U.AutoComplete = L.Class.extend({
}, },
createResult: function (item) { createResult: function (item) {
var el = L.DomUtil.element('li', {}, this.container) const el = L.DomUtil.element('li', {}, this.container)
el.textContent = item.label el.textContent = item.label
var result = { const result = {
item: item, item: item,
el: el, el: el,
} }
@ -203,7 +203,7 @@ L.U.AutoComplete = L.Class.extend({
}, },
resultToIndex: function (result) { resultToIndex: function (result) {
var out = null let out = null
this.forEach(this.RESULTS, (item, index) => { this.forEach(this.RESULTS, (item, index) => {
if (item.item.value == result.item.value) { if (item.item.value == result.item.value) {
out = index out = index
@ -233,7 +233,7 @@ L.U.AutoComplete = L.Class.extend({
}, },
getLeft: function (el) { getLeft: function (el) {
var tmp = el.offsetLeft let tmp = el.offsetLeft
el = el.offsetParent el = el.offsetParent
while (el) { while (el) {
tmp += el.offsetLeft tmp += el.offsetLeft
@ -243,7 +243,7 @@ L.U.AutoComplete = L.Class.extend({
}, },
getTop: function (el) { getTop: function (el) {
var tmp = el.offsetTop let tmp = el.offsetTop
el = el.offsetParent el = el.offsetParent
while (el) { while (el) {
tmp += el.offsetTop tmp += el.offsetTop
@ -291,9 +291,9 @@ L.U.AutoComplete.Ajax.SelectMultiple = L.U.AutoComplete.Ajax.extend({
}, },
displaySelected: function (result) { displaySelected: function (result) {
var result_el = L.DomUtil.element('li', {}, this.selected_container) const result_el = L.DomUtil.element('li', {}, this.selected_container)
result_el.textContent = result.item.label result_el.textContent = result.item.label
var close = L.DomUtil.element('span', { className: 'close' }, result_el) const close = L.DomUtil.element('span', { className: 'close' }, result_el)
close.textContent = '×' close.textContent = '×'
L.DomEvent.on( L.DomEvent.on(
close, close,
@ -317,9 +317,9 @@ L.U.AutoComplete.Ajax.Select = L.U.AutoComplete.Ajax.extend({
}, },
displaySelected: function (result) { displaySelected: function (result) {
var result_el = L.DomUtil.element('div', {}, this.selected_container) const result_el = L.DomUtil.element('div', {}, this.selected_container)
result_el.textContent = result.item.label result_el.textContent = result.item.label
var close = L.DomUtil.element('span', { className: 'close' }, result_el) const close = L.DomUtil.element('span', { className: 'close' }, result_el)
close.textContent = '×' close.textContent = '×'
this.input.style.display = 'none' this.input.style.display = 'none'
L.DomEvent.on( L.DomEvent.on(

View file

@ -302,7 +302,7 @@ L.U.DrawToolbar = L.Toolbar.Control.extend({
}, },
redraw: function () { redraw: function () {
var container = this._control.getContainer() const container = this._control.getContainer()
container.innerHTML = '' container.innerHTML = ''
this.appendToContainer(container) this.appendToContainer(container)
}, },
@ -314,7 +314,10 @@ L.U.EditControl = L.Control.extend({
}, },
onAdd: function (map) { onAdd: function (map) {
var container = L.DomUtil.create('div', 'leaflet-control-edit-enable umap-control'), const container = L.DomUtil.create(
'div',
'leaflet-control-edit-enable umap-control'
),
edit = L.DomUtil.create('a', '', container) edit = L.DomUtil.create('a', '', container)
edit.href = '#' edit.href = '#'
edit.title = L._('Enable editing') + ' (Ctrl+E)' edit.title = L._('Enable editing') + ' (Ctrl+E)'
@ -336,9 +339,9 @@ L.Control.Embed = L.Control.extend({
}, },
onAdd: function (map) { onAdd: function (map) {
var container = L.DomUtil.create('div', 'leaflet-control-embed umap-control') const container = L.DomUtil.create('div', 'leaflet-control-embed umap-control')
var link = L.DomUtil.create('a', '', container) const link = L.DomUtil.create('a', '', container)
link.href = '#' link.href = '#'
link.title = L._('Embed and share this map') link.title = L._('Embed and share this map')
@ -356,7 +359,7 @@ L.U.MoreControls = L.Control.extend({
}, },
onAdd: function () { onAdd: function () {
var container = L.DomUtil.create('div', ''), const container = L.DomUtil.create('div', ''),
more = L.DomUtil.create('a', 'umap-control-more umap-control-text', container), more = L.DomUtil.create('a', 'umap-control-more umap-control-text', container),
less = L.DomUtil.create('a', 'umap-control-less umap-control-text', container) less = L.DomUtil.create('a', 'umap-control-less umap-control-text', container)
more.href = '#' more.href = '#'
@ -373,7 +376,7 @@ L.U.MoreControls = L.Control.extend({
}, },
toggle: function () { toggle: function () {
var pos = this.getPosition(), const pos = this.getPosition(),
corner = this._map._controlCorners[pos], corner = this._map._controlCorners[pos],
className = 'umap-more-controls' className = 'umap-more-controls'
if (L.DomUtil.hasClass(corner, className)) L.DomUtil.removeClass(corner, className) if (L.DomUtil.hasClass(corner, className)) L.DomUtil.removeClass(corner, className)
@ -392,7 +395,7 @@ L.U.PermanentCreditsControl = L.Control.extend({
}, },
onAdd: function () { onAdd: function () {
var paragraphContainer = L.DomUtil.create( const paragraphContainer = L.DomUtil.create(
'div', 'div',
'umap-permanent-credits-container' 'umap-permanent-credits-container'
), ),
@ -435,7 +438,7 @@ L.U.DataLayersControl = L.Control.extend({
}, },
_initLayout: function (map) { _initLayout: function (map) {
var container = (this._container = L.DomUtil.create( const container = (this._container = L.DomUtil.create(
'div', 'div',
'leaflet-control-browse umap-control' 'leaflet-control-browse umap-control'
)), )),
@ -446,11 +449,11 @@ L.U.DataLayersControl = L.Control.extend({
actions actions
) )
var link = L.DomUtil.create('a', 'umap-browse-link', actions) const link = L.DomUtil.create('a', 'umap-browse-link', actions)
link.href = '#' link.href = '#'
link.title = link.textContent = L._('Browse data') link.title = link.textContent = L._('Browse data')
var toggle = L.DomUtil.create('a', 'umap-browse-toggle', container) const toggle = L.DomUtil.create('a', 'umap-browse-toggle', container)
toggle.href = '#' toggle.href = '#'
toggle.title = L._('See data layers') toggle.title = L._('See data layers')
@ -524,7 +527,7 @@ L.U.DataLayersControl = L.Control.extend({
}, },
addDataLayer: function (container, datalayer, draggable) { addDataLayer: function (container, datalayer, draggable) {
var datalayerLi = L.DomUtil.create('li', '', container) const datalayerLi = L.DomUtil.create('li', '', container)
if (draggable) if (draggable)
L.DomUtil.element( L.DomUtil.element(
'i', 'i',
@ -532,7 +535,7 @@ L.U.DataLayersControl = L.Control.extend({
datalayerLi datalayerLi
) )
datalayer.renderToolbox(datalayerLi) datalayer.renderToolbox(datalayerLi)
var title = L.DomUtil.add( const title = L.DomUtil.add(
'span', 'span',
'layer-title', 'layer-title',
datalayerLi, datalayerLi,
@ -546,21 +549,21 @@ L.U.DataLayersControl = L.Control.extend({
}, },
newDataLayer: function () { newDataLayer: function () {
var datalayer = this.map.createDataLayer({}) const datalayer = this.map.createDataLayer({})
datalayer.edit() datalayer.edit()
}, },
openPanel: function () { openPanel: function () {
if (!this.map.editEnabled) return if (!this.map.editEnabled) return
var container = L.DomUtil.create('ul', 'umap-browse-datalayers') const container = L.DomUtil.create('ul', 'umap-browse-datalayers')
this.map.eachDataLayerReverse(function (datalayer) { this.map.eachDataLayerReverse(function (datalayer) {
this.addDataLayer(container, datalayer, true) this.addDataLayer(container, datalayer, true)
}, this) }, this)
var orderable = new L.U.Orderable(container) const orderable = new L.U.Orderable(container)
orderable.on( orderable.on(
'drop', 'drop',
function (e) { function (e) {
var layer = this.map.datalayers[e.src.dataset.id], const layer = this.map.datalayers[e.src.dataset.id],
other = this.map.datalayers[e.dst.dataset.id], other = this.map.datalayers[e.dst.dataset.id],
minIndex = Math.min(e.initialIndex, e.finalIndex) minIndex = Math.min(e.initialIndex, e.finalIndex)
if (e.finalIndex === 0) layer.bringToTop() if (e.finalIndex === 0) layer.bringToTop()
@ -574,7 +577,7 @@ L.U.DataLayersControl = L.Control.extend({
this this
) )
var bar = L.DomUtil.create('div', 'button-bar', container), const bar = L.DomUtil.create('div', 'button-bar', container),
add = L.DomUtil.create('a', 'show-on-edit block add-datalayer button', bar) add = L.DomUtil.create('a', 'show-on-edit block add-datalayer button', bar)
add.href = '#' add.href = '#'
add.textContent = add.title = L._('Add a layer') add.textContent = add.title = L._('Add a layer')
@ -592,7 +595,7 @@ L.U.DataLayersControl = L.Control.extend({
L.U.DataLayer.include({ L.U.DataLayer.include({
renderToolbox: function (container) { renderToolbox: function (container) {
var toggle = L.DomUtil.create('i', 'layer-toggle', container), const toggle = L.DomUtil.create('i', 'layer-toggle', container),
zoomTo = L.DomUtil.create('i', 'layer-zoom_to', container), zoomTo = L.DomUtil.create('i', 'layer-zoom_to', container),
edit = L.DomUtil.create('i', 'layer-edit show-on-edit', container), edit = L.DomUtil.create('i', 'layer-edit show-on-edit', container),
table = L.DomUtil.create('i', 'layer-table-edit show-on-edit', container), table = L.DomUtil.create('i', 'layer-table-edit show-on-edit', container),
@ -631,23 +634,23 @@ L.U.DataLayer.include({
}, },
propagateRemote: function () { propagateRemote: function () {
var els = this.getHidableElements() const els = this.getHidableElements()
for (var i = 0; i < els.length; i++) { for (let i = 0; i < els.length; i++) {
L.DomUtil.classIf(els[i], 'remotelayer', this.isRemoteLayer()) L.DomUtil.classIf(els[i], 'remotelayer', this.isRemoteLayer())
} }
}, },
propagateHide: function () { propagateHide: function () {
var els = this.getHidableElements() const els = this.getHidableElements()
for (var i = 0; i < els.length; i++) { for (let i = 0; i < els.length; i++) {
L.DomUtil.addClass(els[i], 'off') L.DomUtil.addClass(els[i], 'off')
} }
}, },
propagateShow: function () { propagateShow: function () {
this.onceLoaded(function () { this.onceLoaded(function () {
var els = this.getHidableElements() const els = this.getHidableElements()
for (var i = 0; i < els.length; i++) { for (let i = 0; i < els.length; i++) {
L.DomUtil.removeClass(els[i], 'off') L.DomUtil.removeClass(els[i], 'off')
} }
}, this) }, this)
@ -662,27 +665,31 @@ L.U.DataLayer.addInitHook(function () {
L.U.Map.include({ L.U.Map.include({
_openBrowser: function () { _openBrowser: function () {
var browserContainer = L.DomUtil.create('div', 'umap-browse-data'), const browserContainer = L.DomUtil.create('div', 'umap-browse-data')
title = L.DomUtil.add(
const title = L.DomUtil.add(
'h3', 'h3',
'umap-browse-title', 'umap-browse-title',
browserContainer, browserContainer,
this.options.name this.options.name
), )
filter = L.DomUtil.create('input', '', browserContainer),
filterValue = '', const filter = L.DomUtil.create('input', '', browserContainer)
featuresContainer = L.DomUtil.create( let filterValue = ''
const featuresContainer = L.DomUtil.create(
'div', 'div',
'umap-browse-features', 'umap-browse-features',
browserContainer browserContainer
), )
filterKeys = this.getFilterKeys()
const filterKeys = this.getFilterKeys()
filter.type = 'text' filter.type = 'text'
filter.placeholder = L._('Filter…') filter.placeholder = L._('Filter…')
filter.value = this.options.filter || '' filter.value = this.options.filter || ''
var addFeature = (feature) => { const addFeature = (feature) => {
var feature_li = L.DomUtil.create('li', feature.getClassName() + ' feature'), const feature_li = L.DomUtil.create('li', feature.getClassName() + ' feature'),
zoom_to = L.DomUtil.create('i', 'feature-zoom_to', feature_li), zoom_to = L.DomUtil.create('i', 'feature-zoom_to', feature_li),
edit = L.DomUtil.create('i', 'show-on-edit feature-edit', feature_li), edit = L.DomUtil.create('i', 'show-on-edit feature-edit', feature_li),
color = L.DomUtil.create('i', 'feature-color', feature_li), color = L.DomUtil.create('i', 'feature-color', feature_li),
@ -726,8 +733,8 @@ L.U.Map.include({
return feature_li return feature_li
} }
var append = (datalayer) => { const append = (datalayer) => {
var container = L.DomUtil.create( const container = L.DomUtil.create(
'div', 'div',
datalayer.getHidableClass(), datalayer.getHidableClass(),
featuresContainer featuresContainer
@ -736,10 +743,10 @@ L.U.Map.include({
container.id = 'browse_data_datalayer_' + datalayer.umap_id container.id = 'browse_data_datalayer_' + datalayer.umap_id
datalayer.renderToolbox(headline) datalayer.renderToolbox(headline)
L.DomUtil.add('span', '', headline, datalayer.options.name) L.DomUtil.add('span', '', headline, datalayer.options.name)
var ul = L.DomUtil.create('ul', '', container) const ul = L.DomUtil.create('ul', '', container)
L.DomUtil.classIf(container, 'off', !datalayer.isVisible()) L.DomUtil.classIf(container, 'off', !datalayer.isVisible())
var build = () => { const build = () => {
ul.innerHTML = '' ul.innerHTML = ''
datalayer.eachFeature((feature) => { datalayer.eachFeature((feature) => {
if ( if (
@ -762,14 +769,14 @@ L.U.Map.include({
}) })
} }
var appendAll = function () { const appendAll = function () {
this.options.filter = filterValue = filter.value this.options.filter = filterValue = filter.value
featuresContainer.innerHTML = '' featuresContainer.innerHTML = ''
this.eachBrowsableDataLayer((datalayer) => { this.eachBrowsableDataLayer((datalayer) => {
append(datalayer) append(datalayer)
}) })
} }
var resetLayers = function () { const resetLayers = function () {
this.eachBrowsableDataLayer((datalayer) => { this.eachBrowsableDataLayer((datalayer) => {
datalayer.resetLayer(true) datalayer.resetLayer(true)
}) })
@ -777,16 +784,16 @@ L.U.Map.include({
L.bind(appendAll, this)() L.bind(appendAll, this)()
L.DomEvent.on(filter, 'input', appendAll, this) L.DomEvent.on(filter, 'input', appendAll, this)
L.DomEvent.on(filter, 'input', resetLayers, this) L.DomEvent.on(filter, 'input', resetLayers, this)
var link = L.DomUtil.create('li', '') const link = L.DomUtil.create('li', '')
L.DomUtil.create('i', 'umap-icon-16 umap-caption', link) L.DomUtil.create('i', 'umap-icon-16 umap-caption', link)
var label = L.DomUtil.create('span', '', link) const label = L.DomUtil.create('span', '', link)
label.textContent = label.title = L._('About') label.textContent = label.title = L._('About')
L.DomEvent.on(link, 'click', this.displayCaption, this) L.DomEvent.on(link, 'click', this.displayCaption, this)
this.ui.openPanel({ data: { html: browserContainer }, actions: [link] }) this.ui.openPanel({ data: { html: browserContainer }, actions: [link] })
}, },
_openFilter: function () { _openFilter: function () {
var filterContainer = L.DomUtil.create('div', 'umap-filter-data'), const filterContainer = L.DomUtil.create('div', 'umap-filter-data'),
title = L.DomUtil.add( title = L.DomUtil.add(
'h3', 'h3',
'umap-filter-title', 'umap-filter-title',
@ -800,8 +807,8 @@ L.U.Map.include({
), ),
advancedFilterKeys = this.getAdvancedFilterKeys() advancedFilterKeys = this.getAdvancedFilterKeys()
var advancedFiltersFull = {} const advancedFiltersFull = {}
var filtersAlreadyLoaded = true let filtersAlreadyLoaded = true
if (!this.getMap().options.advancedFilters) { if (!this.getMap().options.advancedFilters) {
this.getMap().options.advancedFilters = {} this.getMap().options.advancedFilters = {}
filtersAlreadyLoaded = false filtersAlreadyLoaded = false
@ -824,8 +831,8 @@ L.U.Map.include({
}) })
}) })
var addPropertyValue = function (property, value) { const addPropertyValue = function (property, value) {
var property_li = L.DomUtil.create('li', ''), const property_li = L.DomUtil.create('li', ''),
filter_check = L.DomUtil.create('input', '', property_li), filter_check = L.DomUtil.create('input', '', property_li),
filter_label = L.DomUtil.create('label', '', property_li) filter_label = L.DomUtil.create('label', '', property_li)
filter_check.type = 'checkbox' filter_check.type = 'checkbox'
@ -841,8 +848,8 @@ L.U.Map.include({
filter_check, filter_check,
'change', 'change',
function (e) { function (e) {
var property = e.srcElement.dataset.property const property = e.srcElement.dataset.property
var value = e.srcElement.dataset.value const value = e.srcElement.dataset.value
if (e.srcElement.checked) { if (e.srcElement.checked) {
this.getMap().options.advancedFilters[property].push(value) this.getMap().options.advancedFilters[property].push(value)
} else { } else {
@ -858,23 +865,23 @@ L.U.Map.include({
return property_li return property_li
} }
var addProperty = function (property) { const addProperty = function (property) {
var container = L.DomUtil.create( const container = L.DomUtil.create(
'div', 'div',
'property-container', 'property-container',
propertiesContainer propertiesContainer
), ),
headline = L.DomUtil.add('h5', '', container, property) headline = L.DomUtil.add('h5', '', container, property)
var ul = L.DomUtil.create('ul', '', container) const ul = L.DomUtil.create('ul', '', container)
var orderedValues = advancedFiltersFull[property] const orderedValues = advancedFiltersFull[property]
orderedValues.sort() orderedValues.sort()
orderedValues.forEach((value) => { orderedValues.forEach((value) => {
ul.appendChild(L.bind(addPropertyValue, this)(property, value)) ul.appendChild(L.bind(addPropertyValue, this)(property, value))
}) })
} }
var filterFeatures = function () { const filterFeatures = function () {
var noResults = true let noResults = true
this.eachDataLayer((datalayer) => { this.eachDataLayer((datalayer) => {
datalayer.eachFeature(function (feature) { datalayer.eachFeature(function (feature) {
feature.properties.isVisible = true feature.properties.isVisible = true
@ -913,9 +920,9 @@ L.U.Map.include({
L.bind(addProperty, this)(property) L.bind(addProperty, this)(property)
}) })
var link = L.DomUtil.create('li', '') const link = L.DomUtil.create('li', '')
L.DomUtil.create('i', 'umap-icon-16 umap-caption', link) L.DomUtil.create('i', 'umap-icon-16 umap-caption', link)
var label = L.DomUtil.create('span', '', link) const label = L.DomUtil.create('span', '', link)
label.textContent = label.title = L._('About') label.textContent = label.title = L._('About')
L.DomEvent.on(link, 'click', this.displayCaption, this) L.DomEvent.on(link, 'click', this.displayCaption, this)
this.ui.openPanel({ data: { html: filterContainer }, actions: [link] }) this.ui.openPanel({ data: { html: filterContainer }, actions: [link] })
@ -933,9 +940,9 @@ L.U.TileLayerControl = L.Control.extend({
}, },
onAdd: function () { onAdd: function () {
var container = L.DomUtil.create('div', 'leaflet-control-tilelayers umap-control') const container = L.DomUtil.create('div', 'leaflet-control-tilelayers umap-control')
var link = L.DomUtil.create('a', '', container) const link = L.DomUtil.create('a', '', container)
link.href = '#' link.href = '#'
link.title = L._('Change map background') link.title = L._('Change map background')
@ -970,7 +977,7 @@ L.U.TileLayerControl = L.Control.extend({
}, },
addTileLayerElement: function (tilelayer, options) { addTileLayerElement: function (tilelayer, options) {
var selectedClass = this.map.hasLayer(tilelayer) ? 'selected' : '', const selectedClass = this.map.hasLayer(tilelayer) ? 'selected' : '',
el = L.DomUtil.create('li', selectedClass, this._tilelayers_container), el = L.DomUtil.create('li', selectedClass, this._tilelayers_container),
img = L.DomUtil.create('img', '', el), img = L.DomUtil.create('img', '', el),
name = L.DomUtil.create('div', '', el) name = L.DomUtil.create('div', '', el)
@ -1006,14 +1013,14 @@ L.U.AttributionControl = L.Control.Attribution.extend({
) )
} }
if (this._map.options.captionMenus) { if (this._map.options.captionMenus) {
var link = L.DomUtil.add('a', '', this._container, ' — ' + L._('About')) const link = L.DomUtil.add('a', '', this._container, ' — ' + L._('About'))
L.DomEvent.on(link, 'click', L.DomEvent.stop) L.DomEvent.on(link, 'click', L.DomEvent.stop)
.on(link, 'click', this._map.displayCaption, this._map) .on(link, 'click', this._map.displayCaption, this._map)
.on(link, 'dblclick', L.DomEvent.stop) .on(link, 'dblclick', L.DomEvent.stop)
} }
if (window.top === window.self && this._map.options.captionMenus) { if (window.top === window.self && this._map.options.captionMenus) {
// We are not in iframe mode // We are not in iframe mode
var home = L.DomUtil.add('a', '', this._container, ' — ' + L._('Home')) const home = L.DomUtil.add('a', '', this._container, ' — ' + L._('Home'))
home.href = '/' home.href = '/'
} }
}, },
@ -1025,8 +1032,8 @@ L.U.StarControl = L.Control.extend({
}, },
onAdd: function (map) { onAdd: function (map) {
var status = map.options.starred ? ' starred' : '' const status = map.options.starred ? ' starred' : ''
var container = L.DomUtil.create( const container = L.DomUtil.create(
'div', 'div',
'leaflet-control-star umap-control' + status 'leaflet-control-star umap-control' + status
), ),
@ -1053,8 +1060,8 @@ L.U.Search = L.PhotonSearch.extend({
}, },
formatResult: function (feature, el) { formatResult: function (feature, el) {
var self = this const self = this
var tools = L.DomUtil.create('span', 'search-result-tools', el), const tools = L.DomUtil.create('span', 'search-result-tools', el),
zoom = L.DomUtil.create('i', 'feature-zoom_to', tools), zoom = L.DomUtil.create('i', 'feature-zoom_to', tools),
edit = L.DomUtil.create('i', 'feature-edit show-on-edit', tools) edit = L.DomUtil.create('i', 'feature-edit show-on-edit', tools)
zoom.title = L._('Zoom to this place') zoom.title = L._('Zoom to this place')
@ -1067,8 +1074,8 @@ L.U.Search = L.PhotonSearch.extend({
}) })
L.DomEvent.on(edit, 'mousedown', (e) => { L.DomEvent.on(edit, 'mousedown', (e) => {
L.DomEvent.stop(e) L.DomEvent.stop(e)
var datalayer = self.map.defaultDataLayer() const datalayer = self.map.defaultDataLayer()
var layer = datalayer.geojsonToFeatures(feature) const layer = datalayer.geojsonToFeatures(feature)
layer.isDirty = true layer.isDirty = true
layer.edit() layer.edit()
}) })
@ -1076,7 +1083,7 @@ L.U.Search = L.PhotonSearch.extend({
}, },
zoomToFeature: function (feature) { zoomToFeature: function (feature) {
var zoom = Math.max(this.map.getZoom(), 16) // Never unzoom. const zoom = Math.max(this.map.getZoom(), 16) // Never unzoom.
this.map.setView( this.map.setView(
[feature.geometry.coordinates[1], feature.geometry.coordinates[0]], [feature.geometry.coordinates[1], feature.geometry.coordinates[0]],
zoom zoom
@ -1095,11 +1102,11 @@ L.U.SearchControl = L.Control.extend({
}, },
onAdd: function (map) { onAdd: function (map) {
var container = L.DomUtil.create('div', 'leaflet-control-search umap-control'), const container = L.DomUtil.create('div', 'leaflet-control-search umap-control'),
self = this self = this
L.DomEvent.disableClickPropagation(container) L.DomEvent.disableClickPropagation(container)
var link = L.DomUtil.create('a', '', container) const link = L.DomUtil.create('a', '', container)
link.href = '#' link.href = '#'
link.title = L._('Search a place name') link.title = L._('Search a place name')
L.DomEvent.on(link, 'click', (e) => { L.DomEvent.on(link, 'click', (e) => {
@ -1110,19 +1117,19 @@ L.U.SearchControl = L.Control.extend({
}, },
openPanel: function (map) { openPanel: function (map) {
var options = { const options = {
limit: 10, limit: 10,
noResultLabel: L._('No results'), noResultLabel: L._('No results'),
} }
if (map.options.photonUrl) options.url = map.options.photonUrl if (map.options.photonUrl) options.url = map.options.photonUrl
var container = L.DomUtil.create('div', '') const container = L.DomUtil.create('div', '')
var title = L.DomUtil.create('h3', '', container) const title = L.DomUtil.create('h3', '', container)
title.textContent = L._('Search location') title.textContent = L._('Search location')
var input = L.DomUtil.create('input', 'photon-input', container) const input = L.DomUtil.create('input', 'photon-input', container)
var resultsContainer = L.DomUtil.create('div', 'photon-autocomplete', container) const resultsContainer = L.DomUtil.create('div', 'photon-autocomplete', container)
this.search = new L.U.Search(map, input, options) this.search = new L.U.Search(map, input, options)
var id = Math.random() const id = Math.random()
this.search.on('ajax:send', () => { this.search.on('ajax:send', () => {
map.fire('dataloading', { id: id }) map.fire('dataloading', { id: id })
}) })
@ -1144,7 +1151,7 @@ L.Control.MiniMap.include({
}, },
onMainMapBaseLayerChange: function (e) { onMainMapBaseLayerChange: function (e) {
var layer = this._cloneLayer(e.layer) const layer = this._cloneLayer(e.layer)
if (this._miniMap.hasLayer(this._layer)) { if (this._miniMap.hasLayer(this._layer)) {
this._miniMap.removeLayer(this._layer) this._miniMap.removeLayer(this._layer)
} }
@ -1232,7 +1239,7 @@ L.U.IframeExporter = L.Evented.extend({
}, },
buildUrl: function () { buildUrl: function () {
var datalayers = [] const datalayers = []
if (this.options.viewCurrentFeature && this.map.currentFeature) { if (this.options.viewCurrentFeature && this.map.currentFeature) {
this.queryString.feature = this.map.currentFeature.getSlug() this.queryString.feature = this.map.currentFeature.getSlug()
} }
@ -1246,13 +1253,13 @@ L.U.IframeExporter = L.Evented.extend({
} else { } else {
delete this.queryString.datalayers delete this.queryString.datalayers
} }
var currentView = this.options.currentView ? window.location.hash : '' const currentView = this.options.currentView ? window.location.hash : ''
return this.baseUrl + '?' + L.Util.buildQueryString(this.queryString) + currentView return this.baseUrl + '?' + L.Util.buildQueryString(this.queryString) + currentView
}, },
build: function () { build: function () {
var iframeUrl = this.buildUrl() const iframeUrl = this.buildUrl()
var code = const code =
'<iframe width="' + '<iframe width="' +
this.dimensions.width + this.dimensions.width +
'" height="' + '" height="' +
@ -1286,7 +1293,7 @@ L.U.Editable = L.Editable.extend({
if (this.map.editedFeature !== e.layer) e.layer.edit(e) if (this.map.editedFeature !== e.layer) e.layer.edit(e)
}) })
this.on('editable:editing', (e) => { this.on('editable:editing', (e) => {
var layer = e.layer const layer = e.layer
layer.isDirty = true layer.isDirty = true
if (layer._tooltip && layer.isTooltipOpen()) { if (layer._tooltip && layer.isTooltipOpen()) {
layer._tooltip.setLatLng(layer.getCenter()) layer._tooltip.setLatLng(layer.getCenter())
@ -1294,7 +1301,7 @@ L.U.Editable = L.Editable.extend({
} }
}) })
this.on('editable:vertex:ctrlclick', (e) => { this.on('editable:vertex:ctrlclick', (e) => {
var index = e.vertex.getIndex() const index = e.vertex.getIndex()
if (index === 0 || (index === e.vertex.getLastIndex() && e.vertex.continue)) if (index === 0 || (index === e.vertex.getLastIndex() && e.vertex.continue))
e.vertex.continue() e.vertex.continue()
}) })
@ -1309,7 +1316,7 @@ L.U.Editable = L.Editable.extend({
}, },
createPolygon: function (latlngs) { createPolygon: function (latlngs) {
var polygon = new L.U.Polygon(this.map, latlngs) const polygon = new L.U.Polygon(this.map, latlngs)
return polygon return polygon
}, },
@ -1319,7 +1326,7 @@ L.U.Editable = L.Editable.extend({
connectCreatedToMap: function (layer) { connectCreatedToMap: function (layer) {
// Overrided from Leaflet.Editable // Overrided from Leaflet.Editable
var datalayer = this.map.defaultDataLayer() const datalayer = this.map.defaultDataLayer()
datalayer.addLayer(layer) datalayer.addLayer(layer)
layer.isDirty = true layer.isDirty = true
return layer return layer
@ -1334,8 +1341,8 @@ L.U.Editable = L.Editable.extend({
return return
} }
var content let content
var measure let measure
if (e.layer.editor._drawnLatLngs) { if (e.layer.editor._drawnLatLngs) {
// when drawing (a Polyline or Polygon) // when drawing (a Polyline or Polygon)
if (!e.layer.editor._drawnLatLngs.length) { if (!e.layer.editor._drawnLatLngs.length) {
@ -1346,7 +1353,7 @@ L.U.Editable = L.Editable.extend({
content = L._('Click to start drawing a line') content = L._('Click to start drawing a line')
} }
} else { } else {
var tmpLatLngs = e.layer.editor._drawnLatLngs.slice() const tmpLatLngs = e.layer.editor._drawnLatLngs.slice()
tmpLatLngs.push(e.latlng) tmpLatLngs.push(e.latlng)
measure = e.layer.getMeasure(tmpLatLngs) measure = e.layer.getMeasure(tmpLatLngs)

View file

@ -8,11 +8,11 @@ L.U.Map = L.Map.extend({})
* Utils * Utils
*/ */
L.Util.queryString = (name, fallback) => { L.Util.queryString = (name, fallback) => {
var decode = (s) => decodeURIComponent(s.replace(/\+/g, ' ')) const decode = (s) => decodeURIComponent(s.replace(/\+/g, ' '))
var qs = window.location.search.slice(1).split('&'), const qs = window.location.search.slice(1).split('&'),
qa = {} qa = {}
for (var i in qs) { for (const i in qs) {
var key = qs[i].split('=') const key = qs[i].split('=')
if (!key) continue if (!key) continue
qa[decode(key[0])] = key[1] ? decode(key[1]) : 1 qa[decode(key[0])] = key[1] ? decode(key[1]) : 1
} }
@ -20,21 +20,21 @@ L.Util.queryString = (name, fallback) => {
} }
L.Util.booleanFromQueryString = (name) => { L.Util.booleanFromQueryString = (name) => {
var value = L.Util.queryString(name) const value = L.Util.queryString(name)
return value === '1' || value === 'true' return value === '1' || value === 'true'
} }
L.Util.setFromQueryString = (options, name) => { L.Util.setFromQueryString = (options, name) => {
var value = L.Util.queryString(name) const value = L.Util.queryString(name)
if (typeof value !== 'undefined') options[name] = value if (typeof value !== 'undefined') options[name] = value
} }
L.Util.setBooleanFromQueryString = (options, name) => { L.Util.setBooleanFromQueryString = (options, name) => {
var value = L.Util.queryString(name) const value = L.Util.queryString(name)
if (typeof value !== 'undefined') options[name] = value == '1' || value == 'true' if (typeof value !== 'undefined') options[name] = value == '1' || value == 'true'
} }
L.Util.setNullableBooleanFromQueryString = (options, name) => { L.Util.setNullableBooleanFromQueryString = (options, name) => {
var value = L.Util.queryString(name) let value = L.Util.queryString(name)
if (typeof value !== 'undefined') { if (typeof value !== 'undefined') {
if (value === 'null') value = null if (value === 'null') value = null
else if (value === '0' || value === 'false') value = false else if (value === '0' || value === 'false') value = false
@ -48,10 +48,10 @@ L.Util.escapeHTML = (s) => {
} }
L.Util.toHTML = (r) => { L.Util.toHTML = (r) => {
if (!r) return '' if (!r) return ''
var ii let ii
// detect newline format // detect newline format
var newline = r.indexOf('\r\n') != -1 ? '\r\n' : r.indexOf('\n') != -1 ? '\n' : '' const newline = r.indexOf('\r\n') != -1 ? '\r\n' : r.indexOf('\n') != -1 ? '\n' : ''
// Escape tags // Escape tags
r = r.replace(/</gm, '&lt;') r = r.replace(/</gm, '&lt;')
@ -114,7 +114,7 @@ L.Util.toHTML = (r) => {
L.Util.isObject = (what) => typeof what === 'object' && what !== null L.Util.isObject = (what) => typeof what === 'object' && what !== null
L.Util.CopyJSON = (geojson) => JSON.parse(JSON.stringify(geojson)) L.Util.CopyJSON = (geojson) => JSON.parse(JSON.stringify(geojson))
L.Util.detectFileType = (f) => { L.Util.detectFileType = (f) => {
var filename = f.name ? escape(f.name.toLowerCase()) : '' const filename = f.name ? escape(f.name.toLowerCase()) : ''
function ext(_) { function ext(_) {
return filename.indexOf(_) !== -1 return filename.indexOf(_) !== -1
} }
@ -135,8 +135,8 @@ L.Util.usableOption = (options, option) =>
L.Util.greedyTemplate = (str, data, ignore) => { L.Util.greedyTemplate = (str, data, ignore) => {
function getValue(data, path) { function getValue(data, path) {
var value = data let value = data
for (var i = 0; i < path.length; i++) { for (let i = 0; i < path.length; i++) {
value = value[path[i]] value = value[path[i]]
if (value === undefined) break if (value === undefined) break
} }
@ -146,13 +146,13 @@ L.Util.greedyTemplate = (str, data, ignore) => {
return str.replace( return str.replace(
/\{ *([\w_\:\.\|]+)(?:\|("[^"]*"))? *\}/g, /\{ *([\w_\:\.\|]+)(?:\|("[^"]*"))? *\}/g,
(str, key, staticFallback) => { (str, key, staticFallback) => {
var vars = key.split('|'), const vars = key.split('|')
value, let value
path let path
if (staticFallback !== undefined) { if (staticFallback !== undefined) {
vars.push(staticFallback) vars.push(staticFallback)
} }
for (var i = 0; i < vars.length; i++) { for (let i = 0; i < vars.length; i++) {
path = vars[i] path = vars[i]
if (path.startsWith('"') && path.endsWith('"')) if (path.startsWith('"') && path.endsWith('"'))
value = path.substring(1, path.length - 1) // static default value. value = path.substring(1, path.length - 1) // static default value.
@ -169,13 +169,13 @@ L.Util.greedyTemplate = (str, data, ignore) => {
} }
L.Util.sortFeatures = (features, sortKey) => { L.Util.sortFeatures = (features, sortKey) => {
var sortKeys = (sortKey || 'name').split(',') const sortKeys = (sortKey || 'name').split(',')
var sort = (a, b, i) => { const sort = (a, b, i) => {
var sortKey = sortKeys[i], const sortKey = sortKeys[i]
score, let score
valA = a.properties[sortKey] || '', const valA = a.properties[sortKey] || ''
valB = b.properties[sortKey] || '' const valB = b.properties[sortKey] || ''
if (!valA) { if (!valA) {
score = -1 score = -1
} else if (!valB) { } else if (!valB) {
@ -203,8 +203,8 @@ L.Util.flattenCoordinates = (coords) => {
} }
L.Util.buildQueryString = (params) => { L.Util.buildQueryString = (params) => {
var query_string = [] const query_string = []
for (var key in params) { for (const key in params) {
query_string.push(encodeURIComponent(key) + '=' + encodeURIComponent(params[key])) query_string.push(encodeURIComponent(key) + '=' + encodeURIComponent(params[key]))
} }
return query_string.join('&') return query_string.join('&')
@ -213,7 +213,7 @@ L.Util.buildQueryString = (params) => {
L.Util.getBaseUrl = () => '//' + window.location.host + window.location.pathname L.Util.getBaseUrl = () => '//' + window.location.host + window.location.pathname
L.DomUtil.add = (tagName, className, container, content) => { L.DomUtil.add = (tagName, className, container, content) => {
var el = L.DomUtil.create(tagName, className, container) const el = L.DomUtil.create(tagName, className, container)
if (content) { if (content) {
if (content.nodeType && content.nodeType === 1) { if (content.nodeType && content.nodeType === 1) {
el.appendChild(content) el.appendChild(content)
@ -226,9 +226,9 @@ L.DomUtil.add = (tagName, className, container, content) => {
L.DomUtil.createFieldset = (container, legend, options) => { L.DomUtil.createFieldset = (container, legend, options) => {
options = options || {} options = options || {}
var fieldset = L.DomUtil.create('div', 'fieldset toggle', container) const fieldset = L.DomUtil.create('div', 'fieldset toggle', container)
var legendEl = L.DomUtil.add('h5', 'legend style_options_toggle', fieldset, legend) const legendEl = L.DomUtil.add('h5', 'legend style_options_toggle', fieldset, legend)
var fieldsEl = L.DomUtil.add('div', 'fields with-transition', fieldset) const fieldsEl = L.DomUtil.add('div', 'fields with-transition', fieldset)
L.DomEvent.on(legendEl, 'click', function () { L.DomEvent.on(legendEl, 'click', function () {
if (L.DomUtil.hasClass(fieldset, 'on')) { if (L.DomUtil.hasClass(fieldset, 'on')) {
L.DomUtil.removeClass(fieldset, 'on') L.DomUtil.removeClass(fieldset, 'on')
@ -246,8 +246,8 @@ L.DomUtil.classIf = (el, className, bool) => {
} }
L.DomUtil.element = (what, attrs, parent) => { L.DomUtil.element = (what, attrs, parent) => {
var el = document.createElement(what) const el = document.createElement(what)
for (var attr in attrs) { for (const attr in attrs) {
el[attr] = attrs[attr] el[attr] = attrs[attr]
} }
if (typeof parent !== 'undefined') { if (typeof parent !== 'undefined') {
@ -269,11 +269,11 @@ L.DomUtil.after = (target, el) => {
L.DomUtil.RGBRegex = /rgb *\( *([0-9]{1,3}) *, *([0-9]{1,3}) *, *([0-9]{1,3}) *\)/ L.DomUtil.RGBRegex = /rgb *\( *([0-9]{1,3}) *, *([0-9]{1,3}) *, *([0-9]{1,3}) *\)/
L.DomUtil.TextColorFromBackgroundColor = (el) => { L.DomUtil.TextColorFromBackgroundColor = (el) => {
var out = '#000000' let out = '#000000'
if (!window.getComputedStyle) { if (!window.getComputedStyle) {
return out return out
} }
var rgb = window.getComputedStyle(el).getPropertyValue('background-color') let rgb = window.getComputedStyle(el).getPropertyValue('background-color')
rgb = L.DomUtil.RGBRegex.exec(rgb) rgb = L.DomUtil.RGBRegex.exec(rgb)
if (!rgb || rgb.length !== 4) { if (!rgb || rgb.length !== 4) {
return out return out
@ -288,13 +288,13 @@ L.DomEvent.once = (el, types, fn, context) => {
// cf https://github.com/Leaflet/Leaflet/pull/3528#issuecomment-134551575 // cf https://github.com/Leaflet/Leaflet/pull/3528#issuecomment-134551575
if (typeof types === 'object') { if (typeof types === 'object') {
for (var type in types) { for (const type in types) {
L.DomEvent.once(el, type, types[type], fn) L.DomEvent.once(el, type, types[type], fn)
} }
return L.DomEvent return L.DomEvent
} }
var handler = L.bind(() => { const handler = L.bind(() => {
L.DomEvent.off(el, types, fn, context).off(el, types, handler, context) L.DomEvent.off(el, types, fn, context).off(el, types, handler, context)
}, L.DomEvent) }, L.DomEvent)
@ -336,17 +336,17 @@ L.U.Help = L.Class.extend({
'umap-help-box with-transition dark', 'umap-help-box with-transition dark',
document.body document.body
) )
var closeLink = L.DomUtil.create('a', 'umap-close-link', this.box) const closeLink = L.DomUtil.create('a', 'umap-close-link', this.box)
closeLink.href = '#' closeLink.href = '#'
L.DomUtil.add('i', 'umap-close-icon', closeLink) L.DomUtil.add('i', 'umap-close-icon', closeLink)
var label = L.DomUtil.create('span', '', closeLink) const label = L.DomUtil.create('span', '', closeLink)
label.title = label.textContent = L._('Close') label.title = label.textContent = L._('Close')
this.content = L.DomUtil.create('div', 'umap-help-content', this.box) this.content = L.DomUtil.create('div', 'umap-help-content', this.box)
L.DomEvent.on(closeLink, 'click', this.hide, this) L.DomEvent.on(closeLink, 'click', this.hide, this)
}, },
onKeyDown: function (e) { onKeyDown: function (e) {
var key = e.keyCode, const key = e.keyCode,
ESC = 27 ESC = 27
if (key === ESC) { if (key === ESC) {
this.hide() this.hide()
@ -355,7 +355,7 @@ L.U.Help = L.Class.extend({
show: function () { show: function () {
this.content.innerHTML = '' this.content.innerHTML = ''
for (var i = 0, name; i < arguments.length; i++) { for (let i = 0, name; i < arguments.length; i++) {
name = arguments[i] name = arguments[i]
L.DomUtil.add('div', 'umap-help-entry', this.content, this.resolve(name)) L.DomUtil.add('div', 'umap-help-entry', this.content, this.resolve(name))
} }
@ -375,14 +375,14 @@ L.U.Help = L.Class.extend({
}, },
button: function (container, entries) { button: function (container, entries) {
var helpButton = L.DomUtil.create('a', 'umap-help-button', container) const helpButton = L.DomUtil.create('a', 'umap-help-button', container)
helpButton.href = '#' helpButton.href = '#'
if (entries) { if (entries) {
L.DomEvent.on(helpButton, 'click', L.DomEvent.stop).on( L.DomEvent.on(helpButton, 'click', L.DomEvent.stop).on(
helpButton, helpButton,
'click', 'click',
function (e) { function (e) {
var args = typeof entries === 'string' ? [entries] : entries const args = typeof entries === 'string' ? [entries] : entries
this.show.apply(this, args) this.show.apply(this, args)
}, },
this this
@ -392,26 +392,26 @@ L.U.Help = L.Class.extend({
}, },
edit: function () { edit: function () {
var container = L.DomUtil.create('div', ''), const container = L.DomUtil.create('div', ''),
self = this, self = this,
title = L.DomUtil.create('h3', '', container), title = L.DomUtil.create('h3', '', container),
actionsContainer = L.DomUtil.create('ul', 'umap-edit-actions', container) actionsContainer = L.DomUtil.create('ul', 'umap-edit-actions', container)
var addAction = (action) => { const addAction = (action) => {
var actionContainer = L.DomUtil.add('li', '', actionsContainer) const actionContainer = L.DomUtil.add('li', '', actionsContainer)
L.DomUtil.add('i', action.options.className, actionContainer), L.DomUtil.add('i', action.options.className, actionContainer),
L.DomUtil.add('span', '', actionContainer, action.options.tooltip) L.DomUtil.add('span', '', actionContainer, action.options.tooltip)
L.DomEvent.on(actionContainer, 'click', action.addHooks, action) L.DomEvent.on(actionContainer, 'click', action.addHooks, action)
L.DomEvent.on(actionContainer, 'click', self.hide, self) L.DomEvent.on(actionContainer, 'click', self.hide, self)
} }
title.textContent = L._('Where do we go from here?') title.textContent = L._('Where do we go from here?')
for (var id in this.map.helpMenuActions) { for (const id in this.map.helpMenuActions) {
addAction(this.map.helpMenuActions[id]) addAction(this.map.helpMenuActions[id])
} }
return container return container
}, },
importFormats: function () { importFormats: function () {
var container = L.DomUtil.create('div') const container = L.DomUtil.create('div')
L.DomUtil.add('h3', '', container, 'GeojSON') L.DomUtil.add('h3', '', container, 'GeojSON')
L.DomUtil.add('p', '', container, L._('All properties are imported.')) L.DomUtil.add('p', '', container, L._('All properties are imported.'))
L.DomUtil.add('h3', '', container, 'GPX') L.DomUtil.add('h3', '', container, 'GPX')
@ -438,7 +438,7 @@ L.U.Help = L.Class.extend({
}, },
textFormatting: function () { textFormatting: function () {
var container = L.DomUtil.create('div'), const container = L.DomUtil.create('div'),
title = L.DomUtil.add('h3', '', container, L._('Text formatting')), title = L.DomUtil.add('h3', '', container, L._('Text formatting')),
elements = L.DomUtil.create('ul', '', container) elements = L.DomUtil.create('ul', '', container)
L.DomUtil.add('li', '', elements, L._('*simple star for italic*')) L.DomUtil.add('li', '', elements, L._('*simple star for italic*'))
@ -480,7 +480,7 @@ L.U.Help = L.Class.extend({
}, },
dynamicProperties: function () { dynamicProperties: function () {
var container = L.DomUtil.create('div') const container = L.DomUtil.create('div')
L.DomUtil.add('h3', '', container, L._('Dynamic properties')) L.DomUtil.add('h3', '', container, L._('Dynamic properties'))
L.DomUtil.add( L.DomUtil.add(
'p', 'p',
@ -544,7 +544,7 @@ L.U.Orderable = L.Evented.extend({
this.src = null this.src = null
this.dst = null this.dst = null
this.els = this.parent.querySelectorAll(this.options.selector) this.els = this.parent.querySelectorAll(this.options.selector)
for (var i = 0; i < this.els.length; i++) this.makeDraggable(this.els[i]) for (let i = 0; i < this.els.length; i++) this.makeDraggable(this.els[i])
}, },
makeDraggable: function (node) { makeDraggable: function (node) {
@ -586,10 +586,10 @@ L.U.Orderable = L.Evented.extend({
onDragEnter: function (e) { onDragEnter: function (e) {
// e.target is the current hover target. // e.target is the current hover target.
var dst = this.findTarget(e.target) const dst = this.findTarget(e.target)
if (!dst || dst === this.src) return if (!dst || dst === this.src) return
this.dst = dst this.dst = dst
var targetIndex = this.nodeIndex(this.dst), const targetIndex = this.nodeIndex(this.dst),
srcIndex = this.nodeIndex(this.src) srcIndex = this.nodeIndex(this.src)
if (targetIndex > srcIndex) this.parent.insertBefore(this.dst, this.src) if (targetIndex > srcIndex) this.parent.insertBefore(this.dst, this.src)
else this.parent.insertBefore(this.src, this.dst) else this.parent.insertBefore(this.src, this.dst)

View file

@ -12,8 +12,8 @@ L.U.FeatureMixin = {
if (options.geojson) { if (options.geojson) {
this.populate(options.geojson) this.populate(options.geojson)
} }
var isDirty = false, let isDirty = false
self = this const self = this
try { try {
Object.defineProperty(this, 'isDirty', { Object.defineProperty(this, 'isDirty', {
get: function () { get: function () {
@ -60,7 +60,7 @@ L.U.FeatureMixin = {
view: function (e) { view: function (e) {
if (this.map.editEnabled) return if (this.map.editEnabled) return
var outlink = this.properties._umap_options.outlink, const outlink = this.properties._umap_options.outlink,
target = this.properties._umap_options.outlinkTarget target = this.properties._umap_options.outlinkTarget
if (outlink) { if (outlink) {
switch (target) { switch (target) {
@ -71,7 +71,7 @@ L.U.FeatureMixin = {
window.top.location = outlink window.top.location = outlink
break break
default: default:
var win = window.open(this.properties._umap_options.outlink) const win = window.open(this.properties._umap_options.outlink)
} }
return return
} }
@ -89,18 +89,18 @@ L.U.FeatureMixin = {
edit: function (e) { edit: function (e) {
if (!this.map.editEnabled || this.isReadOnly()) return if (!this.map.editEnabled || this.isReadOnly()) return
var container = L.DomUtil.create('div', 'umap-datalayer-container') const container = L.DomUtil.create('div', 'umap-datalayer-container')
var builder = new L.U.FormBuilder(this, ['datalayer'], { let builder = new L.U.FormBuilder(this, ['datalayer'], {
callback: function () { callback: function () {
this.edit(e) this.edit(e)
}, // removeLayer step will close the edit panel, let's reopen it }, // removeLayer step will close the edit panel, let's reopen it
}) })
container.appendChild(builder.build()) container.appendChild(builder.build())
var properties = [], const properties = []
property let property
for (var i = 0; i < this.datalayer._propertiesIndex.length; i++) { for (let i = 0; i < this.datalayer._propertiesIndex.length; i++) {
property = this.datalayer._propertiesIndex[i] property = this.datalayer._propertiesIndex[i]
if (L.Util.indexOf(['name', 'description'], property) !== -1) { if (L.Util.indexOf(['name', 'description'], property) !== -1) {
continue continue
@ -116,7 +116,7 @@ L.U.FeatureMixin = {
}) })
container.appendChild(builder.build()) container.appendChild(builder.build())
this.appendEditFieldsets(container) this.appendEditFieldsets(container)
var advancedActions = L.DomUtil.createFieldset(container, L._('Advanced actions')) const advancedActions = L.DomUtil.createFieldset(container, L._('Advanced actions'))
this.getAdvancedEditActions(advancedActions) this.getAdvancedEditActions(advancedActions)
this.map.ui.openPanel({ data: { html: container }, className: 'dark' }) this.map.ui.openPanel({ data: { html: container }, className: 'dark' })
this.map.editedFeature = this this.map.editedFeature = this
@ -124,7 +124,7 @@ L.U.FeatureMixin = {
}, },
getAdvancedEditActions: function (container) { getAdvancedEditActions: function (container) {
var deleteLink = L.DomUtil.create('a', 'button umap-delete', container) const deleteLink = L.DomUtil.create('a', 'button umap-delete', container)
deleteLink.href = '#' deleteLink.href = '#'
deleteLink.textContent = L._('Delete') deleteLink.textContent = L._('Delete')
L.DomEvent.on( L.DomEvent.on(
@ -139,30 +139,33 @@ L.U.FeatureMixin = {
}, },
appendEditFieldsets: function (container) { appendEditFieldsets: function (container) {
var optionsFields = this.getShapeOptions() const optionsFields = this.getShapeOptions()
var builder = new L.U.FormBuilder(this, optionsFields, { let builder = new L.U.FormBuilder(this, optionsFields, {
id: 'umap-feature-shape-properties', id: 'umap-feature-shape-properties',
callback: this._redraw, callback: this._redraw,
}) })
var shapeProperties = L.DomUtil.createFieldset(container, L._('Shape properties')) const shapeProperties = L.DomUtil.createFieldset(container, L._('Shape properties'))
shapeProperties.appendChild(builder.build()) shapeProperties.appendChild(builder.build())
var advancedOptions = this.getAdvancedOptions() const advancedOptions = this.getAdvancedOptions()
var builder = new L.U.FormBuilder(this, advancedOptions, { builder = new L.U.FormBuilder(this, advancedOptions, {
id: 'umap-feature-advanced-properties', id: 'umap-feature-advanced-properties',
callback: this._redraw, callback: this._redraw,
}) })
var advancedProperties = L.DomUtil.createFieldset( const advancedProperties = L.DomUtil.createFieldset(
container, container,
L._('Advanced properties') L._('Advanced properties')
) )
advancedProperties.appendChild(builder.build()) advancedProperties.appendChild(builder.build())
var interactionOptions = this.getInteractionOptions() const interactionOptions = this.getInteractionOptions()
builder = new L.U.FormBuilder(this, interactionOptions, { builder = new L.U.FormBuilder(this, interactionOptions, {
callback: this._redraw, callback: this._redraw,
}) })
var popupFieldset = L.DomUtil.createFieldset(container, L._('Interaction options')) const popupFieldset = L.DomUtil.createFieldset(
container,
L._('Interaction options')
)
popupFieldset.appendChild(builder.build()) popupFieldset.appendChild(builder.build())
}, },
@ -180,7 +183,7 @@ L.U.FeatureMixin = {
getDisplayName: function (fallback) { getDisplayName: function (fallback) {
if (fallback === undefined) fallback = this.datalayer.options.name if (fallback === undefined) fallback = this.datalayer.options.name
var key = this.getOption('labelKey') || 'name' const key = this.getOption('labelKey') || 'name'
// Variables mode. // Variables mode.
if (key.indexOf('{') != -1) if (key.indexOf('{') != -1)
return L.Util.greedyTemplate(key, this.extendedProperties()) return L.Util.greedyTemplate(key, this.extendedProperties())
@ -196,12 +199,12 @@ L.U.FeatureMixin = {
}, },
getPopupClass: function () { getPopupClass: function () {
var old = this.getOption('popupTemplate') // Retrocompat. const old = this.getOption('popupTemplate') // Retrocompat.
return L.U.Popup[this.getOption('popupShape') || old] || L.U.Popup return L.U.Popup[this.getOption('popupShape') || old] || L.U.Popup
}, },
attachPopup: function () { attachPopup: function () {
var Class = this.getPopupClass() const Class = this.getPopupClass()
this.bindPopup(new Class(this)) this.bindPopup(new Class(this))
}, },
@ -258,7 +261,7 @@ L.U.FeatureMixin = {
}, },
getOption: function (option, fallback) { getOption: function (option, fallback) {
var value = fallback let value = fallback
if (typeof this.staticOptions[option] !== 'undefined') { if (typeof this.staticOptions[option] !== 'undefined') {
value = this.staticOptions[option] value = this.staticOptions[option]
} else if (L.Util.usableOption(this.properties._umap_options, option)) { } else if (L.Util.usableOption(this.properties._umap_options, option)) {
@ -273,11 +276,11 @@ L.U.FeatureMixin = {
zoomTo: function (e) { zoomTo: function (e) {
e = e || {} e = e || {}
var easing = e.easing !== undefined ? e.easing : this.map.options.easing const easing = e.easing !== undefined ? e.easing : this.map.options.easing
if (easing) { if (easing) {
this.map.flyTo(this.getCenter(), this.getBestZoom()) this.map.flyTo(this.getCenter(), this.getBestZoom())
} else { } else {
var latlng = e.latlng || this.getCenter() const latlng = e.latlng || this.getCenter()
this.map.setView(latlng, this.getBestZoom() || this.map.getZoom()) this.map.setView(latlng, this.getBestZoom() || this.map.getZoom())
} }
if (e.callback) e.callback.call(this) if (e.callback) e.callback.call(this)
@ -296,7 +299,7 @@ L.U.FeatureMixin = {
}, },
cloneProperties: function () { cloneProperties: function () {
var properties = L.extend({}, this.properties) const properties = L.extend({}, this.properties)
properties._umap_options = L.extend({}, properties._umap_options) properties._umap_options = L.extend({}, properties._umap_options)
if (Object.keys && Object.keys(properties._umap_options).length === 0) { if (Object.keys && Object.keys(properties._umap_options).length === 0) {
delete properties._umap_options // It can make a difference on big data sets delete properties._umap_options // It can make a difference on big data sets
@ -315,7 +318,7 @@ L.U.FeatureMixin = {
}, },
toGeoJSON: function () { toGeoJSON: function () {
var geojson = this.parentClass.prototype.toGeoJSON.call(this) const geojson = this.parentClass.prototype.toGeoJSON.call(this)
geojson.properties = this.cloneProperties() geojson.properties = this.cloneProperties()
delete geojson.properties._storage_options delete geojson.properties._storage_options
return geojson return geojson
@ -356,7 +359,7 @@ L.U.FeatureMixin = {
_showContextMenu: function (e) { _showContextMenu: function (e) {
L.DomEvent.stop(e) L.DomEvent.stop(e)
var pt = this.map.mouseEventToContainerPoint(e.originalEvent) const pt = this.map.mouseEventToContainerPoint(e.originalEvent)
e.relatedTarget = this e.relatedTarget = this
this.map.contextmenu.showAt(pt, e) this.map.contextmenu.showAt(pt, e)
}, },
@ -370,8 +373,8 @@ L.U.FeatureMixin = {
}, },
getContextMenuItems: function (e) { getContextMenuItems: function (e) {
var permalink = this.getPermalink(), const permalink = this.getPermalink()
items = [] let items = []
if (permalink) if (permalink)
items.push({ items.push({
text: L._('Permalink'), text: L._('Permalink'),
@ -386,7 +389,7 @@ L.U.FeatureMixin = {
}, },
getContextMenuEditItems: function () { getContextMenuEditItems: function () {
var items = ['-'] let items = ['-']
if (this.map.editedFeature !== this) { if (this.map.editedFeature !== this) {
items.push({ items.push({
text: L._('Edit this feature'), text: L._('Edit this feature'),
@ -426,13 +429,15 @@ L.U.FeatureMixin = {
}, },
resetTooltip: function () { resetTooltip: function () {
var displayName = this.getDisplayName(null), const displayName = this.getDisplayName(null)
showLabel = this.getOption('showLabel'), let showLabel = this.getOption('showLabel')
oldLabelHover = this.getOption('labelHover'), const oldLabelHover = this.getOption('labelHover')
options = {
const options = {
direction: this.getOption('labelDirection'), direction: this.getOption('labelDirection'),
interactive: this.getOption('labelInteractive'), interactive: this.getOption('labelInteractive'),
} }
if (oldLabelHover && showLabel) showLabel = null // Retrocompat. if (oldLabelHover && showLabel) showLabel = null // Retrocompat.
options.permanent = showLabel === true options.permanent = showLabel === true
this.unbindTooltip() this.unbindTooltip()
@ -442,7 +447,7 @@ L.U.FeatureMixin = {
matchFilter: function (filter, keys) { matchFilter: function (filter, keys) {
filter = filter.toLowerCase() filter = filter.toLowerCase()
for (var i = 0; i < keys.length; i++) { for (let i = 0; i < keys.length; i++) {
if ((this.properties[keys[i]] || '').toLowerCase().indexOf(filter) !== -1) if ((this.properties[keys[i]] || '').toLowerCase().indexOf(filter) !== -1)
return true return true
} }
@ -465,7 +470,7 @@ L.U.FeatureMixin = {
}, },
clone: function () { clone: function () {
var layer = this.datalayer.geojsonToFeatures(this.toGeoJSON()) const layer = this.datalayer.geojsonToFeatures(this.toGeoJSON())
layer.isDirty = true layer.isDirty = true
layer.edit() layer.edit()
return layer return layer
@ -573,7 +578,7 @@ L.U.Marker = L.Marker.extend({
}, },
getIcon: function () { getIcon: function () {
var Class = L.U.Icon[this.getIconClass()] || L.U.Icon.Default const Class = L.U.Icon[this.getIconClass()] || L.U.Icon.Default
return new Class(this.map, { feature: this }) return new Class(this.map, { feature: this })
}, },
@ -599,11 +604,11 @@ L.U.Marker = L.Marker.extend({
appendEditFieldsets: function (container) { appendEditFieldsets: function (container) {
L.U.FeatureMixin.appendEditFieldsets.call(this, container) L.U.FeatureMixin.appendEditFieldsets.call(this, container)
var coordinatesOptions = [ const coordinatesOptions = [
['_latlng.lat', { handler: 'FloatInput', label: L._('Latitude') }], ['_latlng.lat', { handler: 'FloatInput', label: L._('Latitude') }],
['_latlng.lng', { handler: 'FloatInput', label: L._('Longitude') }], ['_latlng.lng', { handler: 'FloatInput', label: L._('Longitude') }],
] ]
var builder = new L.U.FormBuilder(this, coordinatesOptions, { const builder = new L.U.FormBuilder(this, coordinatesOptions, {
callback: function () { callback: function () {
if (!this._latlng.isValid()) if (!this._latlng.isValid())
return this.map.ui.alert({ return this.map.ui.alert({
@ -615,7 +620,7 @@ L.U.Marker = L.Marker.extend({
}, },
callbackContext: this, callbackContext: this,
}) })
var fieldset = L.DomUtil.createFieldset(container, L._('Coordinates')) const fieldset = L.DomUtil.createFieldset(container, L._('Coordinates'))
fieldset.appendChild(builder.build()) fieldset.appendChild(builder.build())
}, },
@ -629,7 +634,7 @@ L.U.Marker = L.Marker.extend({
}, },
isOnScreen: function () { isOnScreen: function () {
var bounds = this.map.getBounds() const bounds = this.map.getBounds()
return bounds.contains(this._latlng) return bounds.contains(this._latlng)
}, },
@ -696,8 +701,8 @@ L.U.PathMixin = {
setStyle: function (options) { setStyle: function (options) {
options = options || {} options = options || {}
var option let option
for (var idx in this.styleOptions) { for (const idx in this.styleOptions) {
option = this.styleOptions[idx] option = this.styleOptions[idx]
options[option] = this.getOption(option) options[option] = this.getOption(option)
} }
@ -759,7 +764,7 @@ L.U.PathMixin = {
}, },
transferShape: function (at, to) { transferShape: function (at, to) {
var shape = this.enableEdit().deleteShapeAt(at) const shape = this.enableEdit().deleteShapeAt(at)
this.disableEdit() this.disableEdit()
if (!shape) return if (!shape) return
to.enableEdit().appendShape(shape) to.enableEdit().appendShape(shape)
@ -768,11 +773,11 @@ L.U.PathMixin = {
isolateShape: function (at) { isolateShape: function (at) {
if (!this.isMulti()) return if (!this.isMulti()) return
var shape = this.enableEdit().deleteShapeAt(at) const shape = this.enableEdit().deleteShapeAt(at)
this.disableEdit() this.disableEdit()
if (!shape) return if (!shape) return
var properties = this.cloneProperties() const properties = this.cloneProperties()
var other = new (this instanceof L.U.Polyline ? L.U.Polyline : L.U.Polygon)( const other = new (this instanceof L.U.Polyline ? L.U.Polyline : L.U.Polygon)(
this.map, this.map,
shape, shape,
{ geojson: { properties: properties } } { geojson: { properties: properties } }
@ -783,7 +788,7 @@ L.U.PathMixin = {
}, },
getContextMenuItems: function (e) { getContextMenuItems: function (e) {
var items = L.U.FeatureMixin.getContextMenuItems.call(this, e) let items = L.U.FeatureMixin.getContextMenuItems.call(this, e)
items.push({ items.push({
text: L._('Display measure'), text: L._('Display measure'),
callback: function () { callback: function () {
@ -798,7 +803,7 @@ L.U.PathMixin = {
}, },
getContextMenuMultiItems: function (e) { getContextMenuMultiItems: function (e) {
var items = [ const items = [
'-', '-',
{ {
text: L._('Remove shape from the multi'), text: L._('Remove shape from the multi'),
@ -808,7 +813,7 @@ L.U.PathMixin = {
context: this, context: this,
}, },
] ]
var shape = this.shapeAt(e.latlng) const shape = this.shapeAt(e.latlng)
if (this._latlngs.indexOf(shape) > 0) { if (this._latlngs.indexOf(shape) > 0) {
items.push({ items.push({
text: L._('Make main shape'), text: L._('Make main shape'),
@ -823,7 +828,7 @@ L.U.PathMixin = {
}, },
getContextMenuEditItems: function (e) { getContextMenuEditItems: function (e) {
var items = L.U.FeatureMixin.getContextMenuEditItems.call(this, e) const items = L.U.FeatureMixin.getContextMenuEditItems.call(this, e)
if ( if (
this.map.editedFeature && this.map.editedFeature &&
this.isSameClass(this.map.editedFeature) && this.isSameClass(this.map.editedFeature) &&
@ -850,7 +855,7 @@ L.U.PathMixin = {
}, },
getInplaceToolbarActions: function (e) { getInplaceToolbarActions: function (e) {
var items = L.U.FeatureMixin.getInplaceToolbarActions.call(this, e) const items = L.U.FeatureMixin.getInplaceToolbarActions.call(this, e)
if (this.isMulti()) { if (this.isMulti()) {
items.push(L.U.DeleteShapeAction) items.push(L.U.DeleteShapeAction)
items.push(L.U.ExtractShapeFromMultiAction) items.push(L.U.ExtractShapeFromMultiAction)
@ -859,7 +864,7 @@ L.U.PathMixin = {
}, },
isOnScreen: function () { isOnScreen: function () {
var bounds = this.map.getBounds() const bounds = this.map.getBounds()
return bounds.overlaps(this.getBounds()) return bounds.overlaps(this.getBounds())
}, },
} }
@ -882,14 +887,14 @@ L.U.Polyline = L.Polyline.extend({
}, },
getMeasure: function (shape) { getMeasure: function (shape) {
var length = L.GeoUtil.lineLength(this.map, shape || this._defaultShape()) const length = L.GeoUtil.lineLength(this.map, shape || this._defaultShape())
return L.GeoUtil.readableDistance(length, this.map.measureTools.getMeasureUnit()) return L.GeoUtil.readableDistance(length, this.map.measureTools.getMeasureUnit())
}, },
getContextMenuEditItems: function (e) { getContextMenuEditItems: function (e) {
var items = L.U.PathMixin.getContextMenuEditItems.call(this, e), const items = L.U.PathMixin.getContextMenuEditItems.call(this, e)
vertexClicked = e.vertex, const vertexClicked = e.vertex
index let index
if (!this.isMulti()) { if (!this.isMulti()) {
items.push({ items.push({
text: L._('Transform to polygon'), text: L._('Transform to polygon'),
@ -917,7 +922,7 @@ L.U.Polyline = L.Polyline.extend({
}, },
getContextMenuMultiItems: function (e) { getContextMenuMultiItems: function (e) {
var items = L.U.PathMixin.getContextMenuMultiItems.call(this, e) const items = L.U.PathMixin.getContextMenuMultiItems.call(this, e)
items.push({ items.push({
text: L._('Merge lines'), text: L._('Merge lines'),
callback: this.mergeShapes, callback: this.mergeShapes,
@ -927,34 +932,34 @@ L.U.Polyline = L.Polyline.extend({
}, },
toPolygon: function () { toPolygon: function () {
var geojson = this.toGeoJSON() const geojson = this.toGeoJSON()
geojson.geometry.type = 'Polygon' geojson.geometry.type = 'Polygon'
geojson.geometry.coordinates = [ geojson.geometry.coordinates = [
L.Util.flattenCoordinates(geojson.geometry.coordinates), L.Util.flattenCoordinates(geojson.geometry.coordinates),
] ]
var polygon = this.datalayer.geojsonToFeatures(geojson) const polygon = this.datalayer.geojsonToFeatures(geojson)
polygon.edit() polygon.edit()
this.del() this.del()
}, },
getAdvancedEditActions: function (container) { getAdvancedEditActions: function (container) {
L.U.FeatureMixin.getAdvancedEditActions.call(this, container) L.U.FeatureMixin.getAdvancedEditActions.call(this, container)
var toPolygon = L.DomUtil.create('a', 'button umap-to-polygon', container) const toPolygon = L.DomUtil.create('a', 'button umap-to-polygon', container)
toPolygon.href = '#' toPolygon.href = '#'
toPolygon.textContent = L._('Transform to polygon') toPolygon.textContent = L._('Transform to polygon')
L.DomEvent.on(toPolygon, 'click', this.toPolygon, this) L.DomEvent.on(toPolygon, 'click', this.toPolygon, this)
}, },
_mergeShapes: function (from, to) { _mergeShapes: function (from, to) {
var toLeft = to[0], const toLeft = to[0]
toRight = to[to.length - 1], const toRight = to[to.length - 1]
fromLeft = from[0], const fromLeft = from[0]
fromRight = from[from.length - 1], const fromRight = from[from.length - 1]
l2ldistance = toLeft.distanceTo(fromLeft), const l2ldistance = toLeft.distanceTo(fromLeft)
l2rdistance = toLeft.distanceTo(fromRight), const l2rdistance = toLeft.distanceTo(fromRight)
r2ldistance = toRight.distanceTo(fromLeft), const r2ldistance = toRight.distanceTo(fromLeft)
r2rdistance = toRight.distanceTo(fromRight), const r2rdistance = toRight.distanceTo(fromRight)
toMerge let toMerge
if (l2rdistance < Math.min(l2ldistance, r2ldistance, r2rdistance)) { if (l2rdistance < Math.min(l2ldistance, r2ldistance, r2rdistance)) {
toMerge = [from, to] toMerge = [from, to]
} else if (r2ldistance < Math.min(l2ldistance, l2rdistance, r2rdistance)) { } else if (r2ldistance < Math.min(l2ldistance, l2rdistance, r2rdistance)) {
@ -966,7 +971,7 @@ L.U.Polyline = L.Polyline.extend({
from.reverse() from.reverse()
toMerge = [from, to] toMerge = [from, to]
} }
var a = toMerge[0], const a = toMerge[0],
b = toMerge[1], b = toMerge[1],
p1 = this.map.latLngToContainerPoint(a[a.length - 1]), p1 = this.map.latLngToContainerPoint(a[a.length - 1]),
p2 = this.map.latLngToContainerPoint(b[0]), p2 = this.map.latLngToContainerPoint(b[0]),
@ -979,7 +984,7 @@ L.U.Polyline = L.Polyline.extend({
mergeShapes: function () { mergeShapes: function () {
if (!this.isMulti()) return if (!this.isMulti()) return
var latlngs = this.getLatLngs() const latlngs = this.getLatLngs()
if (!latlngs.length) return if (!latlngs.length) return
while (latlngs.length > 1) { while (latlngs.length > 1) {
latlngs.splice(0, 2, this._mergeShapes(latlngs[1], latlngs[0])) latlngs.splice(0, 2, this._mergeShapes(latlngs[1], latlngs[0]))
@ -995,7 +1000,7 @@ L.U.Polyline = L.Polyline.extend({
}, },
getVertexActions: function (e) { getVertexActions: function (e) {
var actions = L.U.FeatureMixin.getVertexActions.call(this, e), const actions = L.U.FeatureMixin.getVertexActions.call(this, e),
index = e.vertex.getIndex() index = e.vertex.getIndex()
if (index === 0 || index === e.vertex.getLastIndex()) if (index === 0 || index === e.vertex.getLastIndex())
actions.push(L.U.ContinueLineAction) actions.push(L.U.ContinueLineAction)
@ -1017,7 +1022,7 @@ L.U.Polygon = L.Polygon.extend({
}, },
getShapeOptions: function () { getShapeOptions: function () {
var options = L.U.PathMixin.getShapeOptions() const options = L.U.PathMixin.getShapeOptions()
options.push( options.push(
'properties._umap_options.stroke', 'properties._umap_options.stroke',
'properties._umap_options.fill', 'properties._umap_options.fill',
@ -1028,7 +1033,7 @@ L.U.Polygon = L.Polygon.extend({
}, },
getInteractionOptions: function () { getInteractionOptions: function () {
var options = [ const options = [
[ [
'properties._umap_options.interactive', 'properties._umap_options.interactive',
{ {
@ -1056,12 +1061,12 @@ L.U.Polygon = L.Polygon.extend({
}, },
getMeasure: function (shape) { getMeasure: function (shape) {
var area = L.GeoUtil.geodesicArea(shape || this._defaultShape()) const area = L.GeoUtil.geodesicArea(shape || this._defaultShape())
return L.GeoUtil.readableArea(area, this.map.measureTools.getMeasureUnit()) return L.GeoUtil.readableArea(area, this.map.measureTools.getMeasureUnit())
}, },
getContextMenuEditItems: function (e) { getContextMenuEditItems: function (e) {
var items = L.U.PathMixin.getContextMenuEditItems.call(this, e), const items = L.U.PathMixin.getContextMenuEditItems.call(this, e),
shape = this.shapeAt(e.latlng) shape = this.shapeAt(e.latlng)
// No multi and no holes. // No multi and no holes.
if (shape && !this.isMulti() && (L.LineUtil.isFlat(shape) || shape.length === 1)) { if (shape && !this.isMulti() && (L.LineUtil.isFlat(shape) || shape.length === 1)) {
@ -1084,19 +1089,19 @@ L.U.Polygon = L.Polygon.extend({
}, },
toPolyline: function () { toPolyline: function () {
var geojson = this.toGeoJSON() const geojson = this.toGeoJSON()
geojson.geometry.type = 'LineString' geojson.geometry.type = 'LineString'
geojson.geometry.coordinates = L.Util.flattenCoordinates( geojson.geometry.coordinates = L.Util.flattenCoordinates(
geojson.geometry.coordinates geojson.geometry.coordinates
) )
var polyline = this.datalayer.geojsonToFeatures(geojson) const polyline = this.datalayer.geojsonToFeatures(geojson)
polyline.edit() polyline.edit()
this.del() this.del()
}, },
getAdvancedEditActions: function (container) { getAdvancedEditActions: function (container) {
L.U.FeatureMixin.getAdvancedEditActions.call(this, container) L.U.FeatureMixin.getAdvancedEditActions.call(this, container)
var toPolyline = L.DomUtil.create('a', 'button umap-to-polyline', container) const toPolyline = L.DomUtil.create('a', 'button umap-to-polyline', container)
toPolyline.href = '#' toPolyline.href = '#'
toPolyline.textContent = L._('Transform to lines') toPolyline.textContent = L._('Transform to lines')
L.DomEvent.on(toPolyline, 'click', this.toPolyline, this) L.DomEvent.on(toPolyline, 'click', this.toPolyline, this)
@ -1112,7 +1117,7 @@ L.U.Polygon = L.Polygon.extend({
}, },
getInplaceToolbarActions: function (e) { getInplaceToolbarActions: function (e) {
var items = L.U.PathMixin.getInplaceToolbarActions.call(this, e) const items = L.U.PathMixin.getInplaceToolbarActions.call(this, e)
items.push(L.U.CreateHoleAction) items.push(L.U.CreateHoleAction)
return items return items
}, },

View file

@ -7,7 +7,7 @@ L.FormBuilder.Element.include({
this.form this.form
) )
} }
var className = 'formbox' let className = 'formbox'
if (this.options.inheritable) { if (this.options.inheritable) {
className += className +=
this.get(true) === undefined ? ' inheritable undefined' : ' inheritable ' this.get(true) === undefined ? ' inheritable undefined' : ' inheritable '
@ -16,8 +16,8 @@ L.FormBuilder.Element.include({
this.wrapper = L.DomUtil.create('div', className, this.form) this.wrapper = L.DomUtil.create('div', className, this.form)
this.header = L.DomUtil.create('div', 'header', this.wrapper) this.header = L.DomUtil.create('div', 'header', this.wrapper)
if (this.options.inheritable) { if (this.options.inheritable) {
var undefine = L.DomUtil.add('a', 'button undefine', this.header, L._('clear')) const undefine = L.DomUtil.add('a', 'button undefine', this.header, L._('clear'))
var define = L.DomUtil.add('a', 'button define', this.header, L._('define')) const define = L.DomUtil.add('a', 'button define', this.header, L._('define'))
L.DomEvent.on( L.DomEvent.on(
define, define,
'click', 'click',
@ -60,7 +60,7 @@ L.FormBuilder.Element.include({
get: function (own) { get: function (own) {
if (!this.options.inheritable || own) return this.builder.getter(this.field) if (!this.options.inheritable || own) return this.builder.getter(this.field)
var path = this.field.split('.'), const path = this.field.split('.'),
key = path[path.length - 1] key = path[path.length - 1]
return this.obj.getOption(key) return this.obj.getOption(key)
}, },
@ -72,7 +72,7 @@ L.FormBuilder.Element.include({
if (this.options.helpEntries) if (this.options.helpEntries)
this.builder.map.help.button(this.label, this.options.helpEntries) this.builder.map.help.button(this.label, this.options.helpEntries)
else if (this.options.helpTooltip) { else if (this.options.helpTooltip) {
var info = L.DomUtil.create('i', 'info', this.label) const info = L.DomUtil.create('i', 'info', this.label)
L.DomEvent.on( L.DomEvent.on(
info, info,
'mouseover', 'mouseover',
@ -278,7 +278,7 @@ L.FormBuilder.ColorPicker = L.FormBuilder.Input.extend({
this.extendedContainer this.extendedContainer
) )
this.container.style.display = 'none' this.container.style.display = 'none'
for (var idx in this.colors) { for (const idx in this.colors) {
this.addColor(this.colors[idx]) this.addColor(this.colors[idx])
} }
this.spreadColor() this.spreadColor()
@ -295,7 +295,7 @@ L.FormBuilder.ColorPicker = L.FormBuilder.Input.extend({
}, },
onBlur: function () { onBlur: function () {
var self = this, const self = this,
closePicker = () => { closePicker = () => {
self.container.style.display = 'none' self.container.style.display = 'none'
} }
@ -314,9 +314,9 @@ L.FormBuilder.ColorPicker = L.FormBuilder.Input.extend({
}, },
addColor: function (colorName) { addColor: function (colorName) {
var span = L.DomUtil.create('span', '', this.container) const span = L.DomUtil.create('span', '', this.container)
span.style.backgroundColor = span.title = colorName span.style.backgroundColor = span.title = colorName
var updateColorInput = function () { const updateColorInput = function () {
this.input.value = colorName this.input.value = colorName
this.sync() this.sync()
this.container.style.display = 'none' this.container.style.display = 'none'
@ -384,8 +384,8 @@ L.FormBuilder.LayerTypeChooser = L.FormBuilder.Select.extend({
L.FormBuilder.SlideshowDelay = L.FormBuilder.IntSelect.extend({ L.FormBuilder.SlideshowDelay = L.FormBuilder.IntSelect.extend({
getOptions: function () { getOptions: function () {
var options = [] const options = []
for (var i = 1; i < 30; i++) { for (let i = 1; i < 30; i++) {
options.push([i * 1000, L._('{delay} seconds', { delay: i })]) options.push([i * 1000, L._('{delay} seconds', { delay: i })])
} }
return options return options
@ -394,7 +394,7 @@ L.FormBuilder.SlideshowDelay = L.FormBuilder.IntSelect.extend({
L.FormBuilder.DataLayerSwitcher = L.FormBuilder.Select.extend({ L.FormBuilder.DataLayerSwitcher = L.FormBuilder.Select.extend({
getOptions: function () { getOptions: function () {
var options = [] const options = []
this.builder.map.eachDataLayerReverse((datalayer) => { this.builder.map.eachDataLayerReverse((datalayer) => {
if (datalayer.isLoaded() && !datalayer.isRemoteLayer() && datalayer.canBrowse()) { if (datalayer.isLoaded() && !datalayer.isRemoteLayer() && datalayer.canBrowse()) {
options.push([L.stamp(datalayer), datalayer.getName()]) options.push([L.stamp(datalayer), datalayer.getName()])
@ -450,10 +450,10 @@ L.FormBuilder.LabelDirection = L.FormBuilder.Select.extend({
L.FormBuilder.LicenceChooser = L.FormBuilder.Select.extend({ L.FormBuilder.LicenceChooser = L.FormBuilder.Select.extend({
getOptions: function () { getOptions: function () {
var licences = [], const licences = []
licencesList = this.builder.obj.options.licences, const licencesList = this.builder.obj.options.licences
licence let licence
for (var i in licencesList) { for (const i in licencesList) {
licence = licencesList[i] licence = licencesList[i]
licences.push([i, licence.name]) licences.push([i, licence.name])
} }
@ -477,7 +477,7 @@ L.FormBuilder.NullableBoolean = L.FormBuilder.Select.extend({
], ],
toJS: function () { toJS: function () {
var value = this.value() let value = this.value()
switch (value) { switch (value) {
case 'true': case 'true':
case true: case true:
@ -498,7 +498,7 @@ L.FormBuilder.BlurInput.include({
build: function () { build: function () {
this.options.className = 'blur' this.options.className = 'blur'
L.FormBuilder.Input.prototype.build.call(this) L.FormBuilder.Input.prototype.build.call(this)
var button = L.DomUtil.create('span', 'button blur-button') const button = L.DomUtil.create('span', 'button blur-button')
L.DomUtil.after(this.input, button) L.DomUtil.after(this.input, button)
}, },
}) })
@ -536,7 +536,7 @@ L.FormBuilder.IconUrl = L.FormBuilder.BlurInput.extend({
if (this.value() && this.value().indexOf('{') === -1) { if (this.value() && this.value().indexOf('{') === -1) {
// Do not try to render URL with variables // Do not try to render URL with variables
if (this.isUrl()) { if (this.isUrl()) {
var img = L.DomUtil.create( const img = L.DomUtil.create(
'img', 'img',
'', '',
L.DomUtil.create('div', 'umap-icon-choice', this.buttonsContainer) L.DomUtil.create('div', 'umap-icon-choice', this.buttonsContainer)
@ -544,7 +544,7 @@ L.FormBuilder.IconUrl = L.FormBuilder.BlurInput.extend({
img.src = this.value() img.src = this.value()
L.DomEvent.on(img, 'click', this.fetchIconList, this) L.DomEvent.on(img, 'click', this.fetchIconList, this)
} else { } else {
var el = L.DomUtil.create( const el = L.DomUtil.create(
'span', 'span',
'', '',
L.DomUtil.create('div', 'umap-icon-choice', this.buttonsContainer) L.DomUtil.create('div', 'umap-icon-choice', this.buttonsContainer)
@ -565,7 +565,7 @@ L.FormBuilder.IconUrl = L.FormBuilder.BlurInput.extend({
}, },
addIconPreview: function (pictogram) { addIconPreview: function (pictogram) {
var baseClass = 'umap-icon-choice', const baseClass = 'umap-icon-choice',
value = pictogram.src, value = pictogram.src,
className = value === this.value() ? baseClass + ' selected' : baseClass, className = value === this.value() ? baseClass + ' selected' : baseClass,
container = L.DomUtil.create('div', className, this.pictogramsContainer), container = L.DomUtil.create('div', className, this.pictogramsContainer),
@ -600,10 +600,10 @@ L.FormBuilder.IconUrl = L.FormBuilder.BlurInput.extend({
buildIconList: function (data) { buildIconList: function (data) {
this.pictogramsContainer.innerHTML = '' this.pictogramsContainer.innerHTML = ''
this.buttonsContainer.innerHTML = '' this.buttonsContainer.innerHTML = ''
for (var idx in data.pictogram_list) { for (const idx in data.pictogram_list) {
this.addIconPreview(data.pictogram_list[idx]) this.addIconPreview(data.pictogram_list[idx])
} }
var cancelButton = L.DomUtil.create('a', '', this.pictogramsContainer) const cancelButton = L.DomUtil.create('a', '', this.pictogramsContainer)
cancelButton.textContent = L._('Cancel') cancelButton.textContent = L._('Cancel')
cancelButton.href = '#' cancelButton.href = '#'
cancelButton.style.display = 'block' cancelButton.style.display = 'block'
@ -617,7 +617,7 @@ L.FormBuilder.IconUrl = L.FormBuilder.BlurInput.extend({
}, },
this this
) )
var customButton = L.DomUtil.create('a', '', this.pictogramsContainer) const customButton = L.DomUtil.create('a', '', this.pictogramsContainer)
customButton.textContent = L._('Set symbol') customButton.textContent = L._('Set symbol')
customButton.href = '#' customButton.href = '#'
customButton.style.display = 'block' customButton.style.display = 'block'
@ -642,8 +642,8 @@ L.FormBuilder.IconUrl = L.FormBuilder.BlurInput.extend({
}, },
unselectAll: function (container) { unselectAll: function (container) {
var els = container.querySelectorAll('div.selected') const els = container.querySelectorAll('div.selected')
for (var el in els) { for (const el in els) {
if (els.hasOwnProperty(el)) L.DomUtil.removeClass(els[el], 'selected') if (els.hasOwnProperty(el)) L.DomUtil.removeClass(els[el], 'selected')
} }
}, },
@ -668,7 +668,7 @@ L.FormBuilder.Switch = L.FormBuilder.CheckBox.extend({
this.label = L.DomUtil.create('label', '', this.input.parentNode) this.label = L.DomUtil.create('label', '', this.input.parentNode)
else this.input.parentNode.appendChild(this.label) else this.input.parentNode.appendChild(this.label)
L.DomUtil.addClass(this.input.parentNode, 'with-switch') L.DomUtil.addClass(this.input.parentNode, 'with-switch')
var id = (this.builder.options.id || Date.now()) + '.' + this.name const id = (this.builder.options.id || Date.now()) + '.' + this.name
this.label.setAttribute('for', id) this.label.setAttribute('for', id)
L.DomUtil.addClass(this.input, 'switch') L.DomUtil.addClass(this.input, 'switch')
this.input.id = id this.input.id = id
@ -680,12 +680,12 @@ L.FormBuilder.MultiChoice = L.FormBuilder.Element.extend({
className: 'umap-multiplechoice', className: 'umap-multiplechoice',
clear: function () { clear: function () {
var checked = this.container.querySelector('input[type="radio"]:checked') const checked = this.container.querySelector('input[type="radio"]:checked')
if (checked) checked.checked = false if (checked) checked.checked = false
}, },
fetch: function () { fetch: function () {
var value = (this.backup = this.toHTML()) let value = (this.backup = this.toHTML())
if (!this.container.querySelector('input[type="radio"][value="' + value + '"]')) if (!this.container.querySelector('input[type="radio"][value="' + value + '"]'))
value = this.default value = this.default
this.container.querySelector( this.container.querySelector(
@ -694,7 +694,7 @@ L.FormBuilder.MultiChoice = L.FormBuilder.Element.extend({
}, },
value: function () { value: function () {
var checked = this.container.querySelector('input[type="radio"]:checked') const checked = this.container.querySelector('input[type="radio"]:checked')
if (checked) return checked.value if (checked) return checked.value
}, },
@ -703,25 +703,25 @@ L.FormBuilder.MultiChoice = L.FormBuilder.Element.extend({
}, },
build: function () { build: function () {
var choices = this.getChoices() const choices = this.getChoices()
this.container = L.DomUtil.create( this.container = L.DomUtil.create(
'div', 'div',
this.className + ' by' + choices.length, this.className + ' by' + choices.length,
this.parentNode this.parentNode
) )
for (var i = 0; i < choices.length; i++) { for (let i = 0; i < choices.length; i++) {
this.addChoice(choices[i][0], choices[i][1], i) this.addChoice(choices[i][0], choices[i][1], i)
} }
this.fetch() this.fetch()
}, },
addChoice: function (value, label, counter) { addChoice: function (value, label, counter) {
var input = L.DomUtil.create('input', '', this.container) const input = L.DomUtil.create('input', '', this.container)
label = L.DomUtil.add('label', '', this.container, label) label = L.DomUtil.add('label', '', this.container, label)
input.type = 'radio' input.type = 'radio'
input.name = this.name input.name = this.name
input.value = value input.value = value
var id = Date.now() + '.' + this.name + '.' + counter const id = Date.now() + '.' + this.name + '.' + counter
label.setAttribute('for', id) label.setAttribute('for', id)
input.id = id input.id = id
L.DomEvent.on(input, 'change', this.sync, this) L.DomEvent.on(input, 'change', this.sync, this)
@ -732,7 +732,7 @@ L.FormBuilder.TernaryChoices = L.FormBuilder.MultiChoice.extend({
default: 'null', default: 'null',
toJS: function () { toJS: function () {
var value = this.value() let value = this.value()
switch (value) { switch (value) {
case 'true': case 'true':
case true: case true:
@ -776,7 +776,7 @@ L.FormBuilder.DataLayersControl = L.FormBuilder.ControlChoice.extend({
], ],
toJS: function () { toJS: function () {
var value = this.value() let value = this.value()
if (value !== 'expanded') if (value !== 'expanded')
value = L.FormBuilder.ControlChoice.prototype.toJS.call(this) value = L.FormBuilder.ControlChoice.prototype.toJS.call(this)
return value return value
@ -803,15 +803,15 @@ L.FormBuilder.Range = L.FormBuilder.Input.extend({
}, },
buildHelpText: function () { buildHelpText: function () {
var datalist = L.DomUtil.create( const datalist = L.DomUtil.create(
'datalist', 'datalist',
'umap-field-datalist', 'umap-field-datalist',
this.getHelpTextParent() this.getHelpTextParent()
) )
datalist.id = `range-${this.options.label || this.name}` datalist.id = `range-${this.options.label || this.name}`
this.input.setAttribute('list', datalist.id) this.input.setAttribute('list', datalist.id)
var options = '' let options = ''
for (var i = this.options.min; i <= this.options.max; i += this.options.step) { for (let i = this.options.min; i <= this.options.max; i += this.options.step) {
options += `<option value="${i.toPrecision(2)}" label="${i.toPrecision( options += `<option value="${i.toPrecision(2)}" label="${i.toPrecision(
2 2
)}"></option>` )}"></option>`
@ -822,12 +822,12 @@ L.FormBuilder.Range = L.FormBuilder.Input.extend({
L.FormBuilder.ManageOwner = L.FormBuilder.Element.extend({ L.FormBuilder.ManageOwner = L.FormBuilder.Element.extend({
build: function () { build: function () {
var options = { const options = {
className: 'edit-owner', className: 'edit-owner',
on_select: L.bind(this.onSelect, this), on_select: L.bind(this.onSelect, this),
} }
this.autocomplete = new L.U.AutoComplete.Ajax.Select(this.parentNode, options) this.autocomplete = new L.U.AutoComplete.Ajax.Select(this.parentNode, options)
var owner = this.toHTML() const owner = this.toHTML()
if (owner) if (owner)
this.autocomplete.displaySelected({ this.autocomplete.displaySelected({
item: { value: owner.id, label: owner.name }, item: { value: owner.id, label: owner.name },
@ -850,7 +850,7 @@ L.FormBuilder.ManageOwner = L.FormBuilder.Element.extend({
L.FormBuilder.ManageEditors = L.FormBuilder.Element.extend({ L.FormBuilder.ManageEditors = L.FormBuilder.Element.extend({
build: function () { build: function () {
var options = { const options = {
className: 'edit-editors', className: 'edit-editors',
on_select: L.bind(this.onSelect, this), on_select: L.bind(this.onSelect, this),
on_unselect: L.bind(this.onUnselect, this), on_unselect: L.bind(this.onUnselect, this),
@ -861,7 +861,7 @@ L.FormBuilder.ManageEditors = L.FormBuilder.Element.extend({
) )
this._values = this.toHTML() this._values = this.toHTML()
if (this._values) if (this._values)
for (var i = 0; i < this._values.length; i++) for (let i = 0; i < this._values.length; i++)
this.autocomplete.displaySelected({ this.autocomplete.displaySelected({
item: { value: this._values[i].id, label: this._values[i].name }, item: { value: this._values[i].id, label: this._values[i].name },
}) })
@ -881,7 +881,7 @@ L.FormBuilder.ManageEditors = L.FormBuilder.Element.extend({
}, },
onUnselect: function (choice) { onUnselect: function (choice) {
var index = this._values.findIndex((item) => item.id === choice.item.value) const index = this._values.findIndex((item) => item.id === choice.item.value)
if (index !== -1) { if (index !== -1) {
this._values.splice(index, 1) this._values.splice(index, 1)
this.set() this.set()

View file

@ -1,7 +1,7 @@
L.U.Icon = L.DivIcon.extend({ L.U.Icon = L.DivIcon.extend({
initialize: function (map, options) { initialize: function (map, options) {
this.map = map this.map = map
var default_options = { const default_options = {
iconSize: null, // Made in css iconSize: null, // Made in css
iconUrl: this.map.getDefaultOption('iconUrl'), iconUrl: this.map.getDefaultOption('iconUrl'),
feature: null, feature: null,
@ -15,7 +15,7 @@ L.U.Icon = L.DivIcon.extend({
}, },
_getIconUrl: function (name) { _getIconUrl: function (name) {
var url let url
if (this.feature && this.feature._getIconUrl(name)) if (this.feature && this.feature._getIconUrl(name))
url = this.feature._getIconUrl(name) url = this.feature._getIconUrl(name)
else url = this.options[name + 'Url'] else url = this.options[name + 'Url']
@ -23,7 +23,7 @@ L.U.Icon = L.DivIcon.extend({
}, },
_getColor: function () { _getColor: function () {
var color let color
if (this.feature) color = this.feature.getOption('color') if (this.feature) color = this.feature.getOption('color')
else if (this.options.color) color = this.options.color else if (this.options.color) color = this.options.color
else color = this.map.getDefaultOption('color') else color = this.map.getDefaultOption('color')
@ -49,7 +49,7 @@ L.U.Icon.Default = L.U.Icon.extend({
}, },
_setColor: function () { _setColor: function () {
var color = this._getColor() const color = this._getColor()
this.elements.container.style.backgroundColor = color this.elements.container.style.backgroundColor = color
this.elements.arrow.style.borderTopColor = color this.elements.arrow.style.borderTopColor = color
}, },
@ -63,7 +63,7 @@ L.U.Icon.Default = L.U.Icon.extend({
this.elements.main this.elements.main
) )
this.elements.arrow = L.DomUtil.create('div', 'icon_arrow', this.elements.main) this.elements.arrow = L.DomUtil.create('div', 'icon_arrow', this.elements.main)
var src = this._getIconUrl('icon') const src = this._getIconUrl('icon')
if (src) { if (src) {
// An url. // An url.
if ( if (
@ -86,7 +86,7 @@ L.U.Icon.Default = L.U.Icon.extend({
L.U.Icon.Circle = L.U.Icon.extend({ L.U.Icon.Circle = L.U.Icon.extend({
initialize: function (map, options) { initialize: function (map, options) {
var default_options = { const default_options = {
iconAnchor: new L.Point(6, 6), iconAnchor: new L.Point(6, 6),
popupAnchor: new L.Point(0, -6), popupAnchor: new L.Point(0, -6),
tooltipAnchor: new L.Point(6, 0), tooltipAnchor: new L.Point(6, 0),
@ -142,8 +142,8 @@ L.U.Icon.Ball = L.U.Icon.Default.extend({
}, },
_setColor: function () { _setColor: function () {
var color = this._getColor('color'), const color = this._getColor('color')
background let background
if (L.Browser.ielt9) { if (L.Browser.ielt9) {
background = color background = color
} else if (L.Browser.webkit) { } else if (L.Browser.webkit) {
@ -159,7 +159,7 @@ L.U.Icon.Ball = L.U.Icon.Default.extend({
}, },
}) })
var _CACHE_COLOR = {} const _CACHE_COLOR = {}
L.U.Icon.Cluster = L.DivIcon.extend({ L.U.Icon.Cluster = L.DivIcon.extend({
options: { options: {
iconSize: [40, 40], iconSize: [40, 40],
@ -171,7 +171,7 @@ L.U.Icon.Cluster = L.DivIcon.extend({
}, },
createIcon: function () { createIcon: function () {
var container = L.DomUtil.create('div', 'leaflet-marker-icon marker-cluster'), const container = L.DomUtil.create('div', 'leaflet-marker-icon marker-cluster'),
div = L.DomUtil.create('div', '', container), div = L.DomUtil.create('div', '', container),
span = L.DomUtil.create('span', '', div), span = L.DomUtil.create('span', '', div),
backgroundColor = this.datalayer.getColor() backgroundColor = this.datalayer.getColor()
@ -181,8 +181,8 @@ L.U.Icon.Cluster = L.DivIcon.extend({
}, },
computeTextColor: function (el) { computeTextColor: function (el) {
var color, let color
backgroundColor = this.datalayer.getColor() const backgroundColor = this.datalayer.getColor()
if (this.datalayer.options.cluster && this.datalayer.options.cluster.textColor) { if (this.datalayer.options.cluster && this.datalayer.options.cluster.textColor) {
color = this.datalayer.options.cluster.textColor color = this.datalayer.options.cluster.textColor
} }

View file

@ -68,12 +68,12 @@ L.U.Map.include({
L.setLocale(geojson.properties.locale) L.setLocale(geojson.properties.locale)
// Don't let default autocreation of controls // Don't let default autocreation of controls
var zoomControl = const zoomControl =
typeof geojson.properties.zoomControl !== 'undefined' typeof geojson.properties.zoomControl !== 'undefined'
? geojson.properties.zoomControl ? geojson.properties.zoomControl
: true : true
geojson.properties.zoomControl = false geojson.properties.zoomControl = false
var fullscreenControl = const fullscreenControl =
typeof geojson.properties.fullscreenControl !== 'undefined' typeof geojson.properties.fullscreenControl !== 'undefined'
? geojson.properties.fullscreenControl ? geojson.properties.fullscreenControl
: true : true
@ -105,7 +105,7 @@ L.U.Map.include({
L.Util.setBooleanFromQueryString(this.options, 'displayCaptionOnLoad') L.Util.setBooleanFromQueryString(this.options, 'displayCaptionOnLoad')
L.Util.setBooleanFromQueryString(this.options, 'captionBar') L.Util.setBooleanFromQueryString(this.options, 'captionBar')
L.Util.setBooleanFromQueryString(this.options, 'captionMenus') L.Util.setBooleanFromQueryString(this.options, 'captionMenus')
for (var i = 0; i < this.HIDDABLE_CONTROLS.length; i++) { for (let i = 0; i < this.HIDDABLE_CONTROLS.length; i++) {
L.Util.setNullableBooleanFromQueryString( L.Util.setNullableBooleanFromQueryString(
this.options, this.options,
this.HIDDABLE_CONTROLS[i] + 'Control' this.HIDDABLE_CONTROLS[i] + 'Control'
@ -121,8 +121,8 @@ L.U.Map.include({
if (L.Browser.ielt9) this.options.allowEdit = false // TODO include ie9 if (L.Browser.ielt9) this.options.allowEdit = false // TODO include ie9
var editedFeature = null, let editedFeature = null
self = this const self = this
try { try {
Object.defineProperty(this, 'editedFeature', { Object.defineProperty(this, 'editedFeature', {
get: function () { get: function () {
@ -188,7 +188,7 @@ L.U.Map.include({
this this
) )
var isDirty = false // global status let isDirty = false // global status
try { try {
Object.defineProperty(this, 'isDirty', { Object.defineProperty(this, 'isDirty', {
get: function () { get: function () {
@ -217,11 +217,11 @@ L.U.Map.include({
this._default_extent = true this._default_extent = true
this.options.name = L._('Untitled map') this.options.name = L._('Untitled map')
this.options.allowEdit = true this.options.allowEdit = true
var datalayer = this.createDataLayer() const datalayer = this.createDataLayer()
datalayer.connectToMap() datalayer.connectToMap()
this.enableEdit() this.enableEdit()
var dataUrl = L.Util.queryString('dataUrl', null), let dataUrl = L.Util.queryString('dataUrl', null)
dataFormat = L.Util.queryString('dataFormat', 'geojson') const dataFormat = L.Util.queryString('dataFormat', 'geojson')
if (dataUrl) { if (dataUrl) {
dataUrl = decodeURIComponent(dataUrl) dataUrl = decodeURIComponent(dataUrl)
dataUrl = this.localizeUrl(dataUrl) dataUrl = this.localizeUrl(dataUrl)
@ -257,7 +257,7 @@ L.U.Map.include({
}) })
window.onbeforeunload = (e) => { window.onbeforeunload = (e) => {
var msg = L._('You have unsaved changes.') const msg = L._('You have unsaved changes.')
if (self.isDirty) { if (self.isDirty) {
e.returnValue = msg e.returnValue = msg
return msg return msg
@ -277,7 +277,7 @@ L.U.Map.include({
new L.U.DrawToolbar({ map: this }).addTo(this) new L.U.DrawToolbar({ map: this }).addTo(this)
var editActions = [ const editActions = [
L.U.ImportAction, L.U.ImportAction,
L.U.EditPropertiesAction, L.U.EditPropertiesAction,
L.U.ChangeTileLayerAction, L.U.ChangeTileLayerAction,
@ -340,7 +340,7 @@ L.U.Map.include({
'umap-slideshow-enabled', 'umap-slideshow-enabled',
this.options.slideshow && this.options.slideshow.active this.options.slideshow && this.options.slideshow.active
) )
for (var i in this._controls) { for (const i in this._controls) {
this.removeControl(this._controls[i]) this.removeControl(this._controls[i])
} }
if (this.options.noControl) return if (this.options.noControl) return
@ -356,8 +356,8 @@ L.U.Map.include({
} }
}) })
} }
var name, status, control let name, status, control
for (var i = 0; i < this.HIDDABLE_CONTROLS.length; i++) { for (let i = 0; i < this.HIDDABLE_CONTROLS.length; i++) {
name = this.HIDDABLE_CONTROLS[i] name = this.HIDDABLE_CONTROLS[i]
status = this.options[name + 'Control'] status = this.options[name + 'Control']
if (status === false) continue if (status === false) continue
@ -373,26 +373,26 @@ L.U.Map.include({
}, },
initDatalayers: function () { initDatalayers: function () {
var toload = (dataToload = seen = this.options.datalayers.length), let toload = (dataToload = seen = this.options.datalayers.length)
self = this, const self = this
datalayer let datalayer
var loaded = () => { const loaded = () => {
self.datalayersLoaded = true self.datalayersLoaded = true
self.fire('datalayersloaded') self.fire('datalayersloaded')
} }
var decrementToLoad = () => { const decrementToLoad = () => {
toload-- toload--
if (toload === 0) loaded() if (toload === 0) loaded()
} }
var dataLoaded = () => { const dataLoaded = () => {
self.dataLoaded = true self.dataLoaded = true
self.fire('dataloaded') self.fire('dataloaded')
} }
var decrementDataToLoad = () => { const decrementDataToLoad = () => {
dataToload-- dataToload--
if (dataToload === 0) dataLoaded() if (dataToload === 0) dataLoaded()
} }
for (var j = 0; j < this.options.datalayers.length; j++) { for (let j = 0; j < this.options.datalayers.length; j++) {
datalayer = this.createDataLayer(this.options.datalayers[j]) datalayer = this.createDataLayer(this.options.datalayers[j])
if (datalayer.displayedOnLoad()) datalayer.onceLoaded(decrementToLoad) if (datalayer.displayedOnLoad()) datalayer.onceLoaded(decrementToLoad)
else decrementToLoad() else decrementToLoad()
@ -403,10 +403,10 @@ L.U.Map.include({
}, },
indexDatalayers: function () { indexDatalayers: function () {
var panes = this.getPane('overlayPane'), const panes = this.getPane('overlayPane')
pane let pane
this.datalayers_index = [] this.datalayers_index = []
for (var i = 0; i < panes.children.length; i++) { for (let i = 0; i < panes.children.length; i++) {
pane = panes.children[i] pane = panes.children[i]
if (!pane.dataset || !pane.dataset.id) continue if (!pane.dataset || !pane.dataset.id) continue
this.datalayers_index.push(this.datalayers[pane.dataset.id]) this.datalayers_index.push(this.datalayers[pane.dataset.id])
@ -458,8 +458,8 @@ L.U.Map.include({
}, },
initShortcuts: function () { initShortcuts: function () {
var globalShortcuts = function (e) { const globalShortcuts = function (e) {
var key = e.keyCode, const key = e.keyCode,
modifierKey = e.ctrlKey || e.metaKey modifierKey = e.ctrlKey || e.metaKey
/* Generic shortcuts */ /* Generic shortcuts */
@ -527,7 +527,7 @@ L.U.Map.include({
initTileLayers: function () { initTileLayers: function () {
this.tilelayers = [] this.tilelayers = []
for (var i in this.options.tilelayers) { for (const i in this.options.tilelayers) {
if (this.options.tilelayers.hasOwnProperty(i)) { if (this.options.tilelayers.hasOwnProperty(i)) {
this.tilelayers.push(this.createTileLayer(this.options.tilelayers[i])) this.tilelayers.push(this.createTileLayer(this.options.tilelayers[i]))
if ( if (
@ -592,8 +592,8 @@ L.U.Map.include({
}, },
eachTileLayer: function (method, context) { eachTileLayer: function (method, context) {
var urls = [] const urls = []
for (var i in this.tilelayers) { for (const i in this.tilelayers) {
if (this.tilelayers.hasOwnProperty(i)) { if (this.tilelayers.hasOwnProperty(i)) {
method.call(context, this.tilelayers[i]) method.call(context, this.tilelayers[i])
urls.push(this.tilelayers[i]._url) urls.push(this.tilelayers[i]._url)
@ -610,7 +610,7 @@ L.U.Map.include({
setOverlay: function () { setOverlay: function () {
if (!this.options.overlay || !this.options.overlay.url_template) return if (!this.options.overlay || !this.options.overlay.url_template) return
var overlay = this.createTileLayer(this.options.overlay) const overlay = this.createTileLayer(this.options.overlay)
try { try {
this.addLayer(overlay) this.addLayer(overlay)
if (this.overlay) this.removeLayer(this.overlay) if (this.overlay) this.removeLayer(this.overlay)
@ -649,12 +649,12 @@ L.U.Map.include({
}, },
handleLimitBounds: function () { handleLimitBounds: function () {
var south = parseFloat(this.options.limitBounds.south), const south = parseFloat(this.options.limitBounds.south),
west = parseFloat(this.options.limitBounds.west), west = parseFloat(this.options.limitBounds.west),
north = parseFloat(this.options.limitBounds.north), north = parseFloat(this.options.limitBounds.north),
east = parseFloat(this.options.limitBounds.east) east = parseFloat(this.options.limitBounds.east)
if (!isNaN(south) && !isNaN(west) && !isNaN(north) && !isNaN(east)) { if (!isNaN(south) && !isNaN(west) && !isNaN(north) && !isNaN(east)) {
var bounds = L.latLngBounds([ const bounds = L.latLngBounds([
[south, west], [south, west],
[north, east], [north, east],
]) ])
@ -715,7 +715,7 @@ L.U.Map.include({
}, },
updateTileLayers: function () { updateTileLayers: function () {
var self = this, const self = this,
callback = (tilelayer) => { callback = (tilelayer) => {
self.options.tilelayer = tilelayer.toJSON() self.options.tilelayer = tilelayer.toJSON()
self.isDirty = true self.isDirty = true
@ -729,14 +729,14 @@ L.U.Map.include({
}, },
renderShareBox: function () { renderShareBox: function () {
var container = L.DomUtil.create('div', 'umap-share'), const container = L.DomUtil.create('div', 'umap-share')
embedTitle = L.DomUtil.add('h4', '', container, L._('Embed the map')), const embedTitle = L.DomUtil.add('h4', '', container, L._('Embed the map'))
iframe = L.DomUtil.create('textarea', 'umap-share-iframe', container), const iframe = L.DomUtil.create('textarea', 'umap-share-iframe', container)
urlTitle = L.DomUtil.add('h4', '', container, L._('Direct link')), const urlTitle = L.DomUtil.add('h4', '', container, L._('Direct link'))
exportUrl = L.DomUtil.create('input', 'umap-share-url', container), const exportUrl = L.DomUtil.create('input', 'umap-share-url', container)
option let option
exportUrl.type = 'text' exportUrl.type = 'text'
var UIFields = [ const UIFields = [
['dimensions.width', { handler: 'Input', label: L._('width') }], ['dimensions.width', { handler: 'Input', label: L._('width') }],
['dimensions.height', { handler: 'Input', label: L._('height') }], ['dimensions.height', { handler: 'Input', label: L._('height') }],
[ [
@ -763,47 +763,44 @@ L.U.Map.include({
'queryString.captionBar', 'queryString.captionBar',
'queryString.captionMenus', 'queryString.captionMenus',
] ]
for (var i = 0; i < this.HIDDABLE_CONTROLS.length; i++) { for (let i = 0; i < this.HIDDABLE_CONTROLS.length; i++) {
UIFields.push('queryString.' + this.HIDDABLE_CONTROLS[i] + 'Control') UIFields.push('queryString.' + this.HIDDABLE_CONTROLS[i] + 'Control')
} }
var iframeExporter = new L.U.IframeExporter(this) const iframeExporter = new L.U.IframeExporter(this)
var buildIframeCode = () => { const buildIframeCode = () => {
iframe.innerHTML = iframeExporter.build() iframe.innerHTML = iframeExporter.build()
exportUrl.value = window.location.protocol + iframeExporter.buildUrl() exportUrl.value = window.location.protocol + iframeExporter.buildUrl()
} }
buildIframeCode() buildIframeCode()
var builder = new L.U.FormBuilder(iframeExporter, UIFields, { const builder = new L.U.FormBuilder(iframeExporter, UIFields, {
callback: buildIframeCode, callback: buildIframeCode,
}) })
var iframeOptions = L.DomUtil.createFieldset( const iframeOptions = L.DomUtil.createFieldset(container, L._('Export options'))
container,
L._('Export options')
)
iframeOptions.appendChild(builder.build()) iframeOptions.appendChild(builder.build())
if (this.options.shortUrl) { if (this.options.shortUrl) {
L.DomUtil.create('hr', '', container) L.DomUtil.create('hr', '', container)
L.DomUtil.add('h4', '', container, L._('Short URL')) L.DomUtil.add('h4', '', container, L._('Short URL'))
var shortUrl = L.DomUtil.create('input', 'umap-short-url', container) const shortUrl = L.DomUtil.create('input', 'umap-short-url', container)
shortUrl.type = 'text' shortUrl.type = 'text'
shortUrl.value = this.options.shortUrl shortUrl.value = this.options.shortUrl
} }
L.DomUtil.create('hr', '', container) L.DomUtil.create('hr', '', container)
L.DomUtil.add('h4', '', container, L._('Download data')) L.DomUtil.add('h4', '', container, L._('Download data'))
var typeInput = L.DomUtil.create('select', '', container) const typeInput = L.DomUtil.create('select', '', container)
typeInput.name = 'format' typeInput.name = 'format'
var exportCaveat = L.DomUtil.add( const exportCaveat = L.DomUtil.add(
'small', 'small',
'help-text', 'help-text',
container, container,
L._('Only visible features will be downloaded.') L._('Only visible features will be downloaded.')
) )
exportCaveat.id = 'export_caveat_text' exportCaveat.id = 'export_caveat_text'
var toggleCaveat = () => { const toggleCaveat = () => {
if (typeInput.value === 'umap') exportCaveat.style.display = 'none' if (typeInput.value === 'umap') exportCaveat.style.display = 'none'
else exportCaveat.style.display = 'inherit' else exportCaveat.style.display = 'inherit'
} }
L.DomEvent.on(typeInput, 'change', toggleCaveat) L.DomEvent.on(typeInput, 'change', toggleCaveat)
var types = { const types = {
geojson: { geojson: {
formatter: function (map) { formatter: function (map) {
return JSON.stringify(map.toGeoJSON(), null, 2) return JSON.stringify(map.toGeoJSON(), null, 2)
@ -835,7 +832,7 @@ L.U.Map.include({
selected: true, selected: true,
}, },
} }
for (var key in types) { for (const key in types) {
if (types.hasOwnProperty(key)) { if (types.hasOwnProperty(key)) {
option = L.DomUtil.create('option', '', typeInput) option = L.DomUtil.create('option', '', typeInput)
option.value = key option.value = key
@ -844,19 +841,19 @@ L.U.Map.include({
} }
} }
toggleCaveat() toggleCaveat()
var download = L.DomUtil.create('a', 'button', container) const download = L.DomUtil.create('a', 'button', container)
download.textContent = L._('Download data') download.textContent = L._('Download data')
L.DomEvent.on( L.DomEvent.on(
download, download,
'click', 'click',
function () { () => {
var type = types[typeInput.value], const type = types[typeInput.value]
content = type.formatter(this), const content = type.formatter(this)
name = this.options.name || 'data' let name = this.options.name || 'data'
name = name.replace(/[^a-z0-9]/gi, '_').toLowerCase() name = name.replace(/[^a-z0-9]/gi, '_').toLowerCase()
download.download = name + type.ext download.download = name + type.ext
window.URL = window.URL || window.webkitURL window.URL = window.URL || window.webkitURL
var blob = new Blob([content], { type: type.filetype }) const blob = new Blob([content], { type: type.filetype })
download.href = window.URL.createObjectURL(blob) download.href = window.URL.createObjectURL(blob)
}, },
this this
@ -865,13 +862,13 @@ L.U.Map.include({
}, },
toGeoJSON: function () { toGeoJSON: function () {
var features = [] let features = []
this.eachDataLayer((datalayer) => { this.eachDataLayer((datalayer) => {
if (datalayer.isVisible()) { if (datalayer.isVisible()) {
features = features.concat(datalayer.featuresToGeoJSON()) features = features.concat(datalayer.featuresToGeoJSON())
} }
}) })
var geojson = { const geojson = {
type: 'FeatureCollection', type: 'FeatureCollection',
features: features, features: features,
} }
@ -879,21 +876,21 @@ L.U.Map.include({
}, },
importPanel: function () { importPanel: function () {
var container = L.DomUtil.create('div', 'umap-upload'), const container = L.DomUtil.create('div', 'umap-upload')
title = L.DomUtil.create('h4', '', container), const title = L.DomUtil.create('h4', '', container)
presetBox = L.DomUtil.create('div', 'formbox', container), const presetBox = L.DomUtil.create('div', 'formbox', container)
presetSelect = L.DomUtil.create('select', '', presetBox), const presetSelect = L.DomUtil.create('select', '', presetBox)
fileBox = L.DomUtil.create('div', 'formbox', container), const fileBox = L.DomUtil.create('div', 'formbox', container)
fileInput = L.DomUtil.create('input', '', fileBox), const fileInput = L.DomUtil.create('input', '', fileBox)
urlInput = L.DomUtil.create('input', '', container), const urlInput = L.DomUtil.create('input', '', container)
rawInput = L.DomUtil.create('textarea', '', container), const rawInput = L.DomUtil.create('textarea', '', container)
typeLabel = L.DomUtil.create('label', '', container), const typeLabel = L.DomUtil.create('label', '', container)
layerLabel = L.DomUtil.create('label', '', container), const layerLabel = L.DomUtil.create('label', '', container)
clearLabel = L.DomUtil.create('label', '', container), const clearLabel = L.DomUtil.create('label', '', container)
submitInput = L.DomUtil.create('input', '', container), const submitInput = L.DomUtil.create('input', '', container)
map = this, const map = this
option, let option
types = ['geojson', 'csv', 'gpx', 'kml', 'osm', 'georss', 'umap'] const types = ['geojson', 'csv', 'gpx', 'kml', 'osm', 'georss', 'umap']
title.textContent = L._('Import data') title.textContent = L._('Import data')
fileInput.type = 'file' fileInput.type = 'file'
fileInput.multiple = 'multiple' fileInput.multiple = 'multiple'
@ -902,21 +899,21 @@ L.U.Map.include({
submitInput.className = 'button' submitInput.className = 'button'
typeLabel.textContent = L._('Choose the format of the data to import') typeLabel.textContent = L._('Choose the format of the data to import')
this.help.button(typeLabel, 'importFormats') this.help.button(typeLabel, 'importFormats')
var typeInput = L.DomUtil.create('select', '', typeLabel) const typeInput = L.DomUtil.create('select', '', typeLabel)
typeInput.name = 'format' typeInput.name = 'format'
layerLabel.textContent = L._('Choose the layer to import in') layerLabel.textContent = L._('Choose the layer to import in')
var layerInput = L.DomUtil.create('select', '', layerLabel) const layerInput = L.DomUtil.create('select', '', layerLabel)
layerInput.name = 'datalayer' layerInput.name = 'datalayer'
urlInput.type = 'text' urlInput.type = 'text'
urlInput.placeholder = L._('Provide an URL here') urlInput.placeholder = L._('Provide an URL here')
rawInput.placeholder = L._('Paste your data here') rawInput.placeholder = L._('Paste your data here')
clearLabel.textContent = L._('Replace layer content') clearLabel.textContent = L._('Replace layer content')
var clearFlag = L.DomUtil.create('input', '', clearLabel) const clearFlag = L.DomUtil.create('input', '', clearLabel)
clearFlag.type = 'checkbox' clearFlag.type = 'checkbox'
clearFlag.name = 'clear' clearFlag.name = 'clear'
this.eachDataLayerReverse((datalayer) => { this.eachDataLayerReverse((datalayer) => {
if (datalayer.isLoaded() && !datalayer.isRemoteLayer()) { if (datalayer.isLoaded() && !datalayer.isRemoteLayer()) {
var id = L.stamp(datalayer) const id = L.stamp(datalayer)
option = L.DomUtil.create('option', '', layerInput) option = L.DomUtil.create('option', '', layerInput)
option.value = id option.value = id
option.textContent = datalayer.options.name option.textContent = datalayer.options.name
@ -932,14 +929,14 @@ L.U.Map.include({
{ value: '', textContent: L._('Choose the data format') }, { value: '', textContent: L._('Choose the data format') },
typeInput typeInput
) )
for (var i = 0; i < types.length; i++) { for (let i = 0; i < types.length; i++) {
option = L.DomUtil.create('option', '', typeInput) option = L.DomUtil.create('option', '', typeInput)
option.value = option.textContent = types[i] option.value = option.textContent = types[i]
} }
if (this.options.importPresets.length) { if (this.options.importPresets.length) {
var noPreset = L.DomUtil.create('option', '', presetSelect) const noPreset = L.DomUtil.create('option', '', presetSelect)
noPreset.value = noPreset.textContent = L._('Choose a preset') noPreset.value = noPreset.textContent = L._('Choose a preset')
for (var j = 0; j < this.options.importPresets.length; j++) { for (let j = 0; j < this.options.importPresets.length; j++) {
option = L.DomUtil.create('option', '', presetSelect) option = L.DomUtil.create('option', '', presetSelect)
option.value = this.options.importPresets[j].url option.value = this.options.importPresets[j].url
option.textContent = this.options.importPresets[j].label option.textContent = this.options.importPresets[j].label
@ -948,10 +945,10 @@ L.U.Map.include({
presetBox.style.display = 'none' presetBox.style.display = 'none'
} }
var submit = function () { const submit = function () {
var type = typeInput.value, let type = typeInput.value
layerId = layerInput[layerInput.selectedIndex].value, const layerId = layerInput[layerInput.selectedIndex].value
layer let layer
if (type === 'umap') { if (type === 'umap') {
this.once('postsync', function () { this.once('postsync', function () {
this.setView(this.latLng(this.options.center), this.options.zoom) this.setView(this.latLng(this.options.center), this.options.zoom)
@ -960,8 +957,8 @@ L.U.Map.include({
if (layerId) layer = map.datalayers[layerId] if (layerId) layer = map.datalayers[layerId]
if (layer && clearFlag.checked) layer.empty() if (layer && clearFlag.checked) layer.empty()
if (fileInput.files.length) { if (fileInput.files.length) {
var file let file
for (var i = 0, file; (file = fileInput.files[i]); i++) { for (let i = 0, file; (file = fileInput.files[i]); i++) {
type = type || L.Util.detectFileType(file) type = type || L.Util.detectFileType(file)
if (!type) { if (!type) {
this.ui.alert({ this.ui.alert({
@ -975,7 +972,7 @@ L.U.Map.include({
if (type === 'umap') { if (type === 'umap') {
this.importFromFile(file, 'umap') this.importFromFile(file, 'umap')
} else { } else {
var importLayer = layer let importLayer = layer
if (!layer) importLayer = this.createDataLayer({ name: file.name }) if (!layer) importLayer = this.createDataLayer({ name: file.name })
importLayer.importFromFile(file, type) importLayer.importFromFile(file, type)
} }
@ -1007,9 +1004,9 @@ L.U.Map.include({
fileInput, fileInput,
'change', 'change',
(e) => { (e) => {
var type = '', let type = '',
newType newType
for (var i = 0; i < e.target.files.length; i++) { for (let i = 0; i < e.target.files.length; i++) {
newType = L.Util.detectFileType(e.target.files[i]) newType = L.Util.detectFileType(e.target.files[i])
if (!type && newType) type = newType if (!type && newType) type = newType
if (type && newType !== type) { if (type && newType !== type) {
@ -1025,12 +1022,12 @@ L.U.Map.include({
}, },
importRaw: function (rawData) { importRaw: function (rawData) {
var importedData = JSON.parse(rawData) const importedData = JSON.parse(rawData)
var mustReindex = false let mustReindex = false
for (var i = 0; i < this.editableOptions.length; i++) { for (let i = 0; i < this.editableOptions.length; i++) {
var option = this.editableOptions[i] const option = this.editableOptions[i]
if (typeof importedData.properties[option] !== 'undefined') { if (typeof importedData.properties[option] !== 'undefined') {
this.options[option] = importedData.properties[option] this.options[option] = importedData.properties[option]
if (option === 'sortKey') mustReindex = true if (option === 'sortKey') mustReindex = true
@ -1038,9 +1035,9 @@ L.U.Map.include({
} }
if (importedData.geometry) this.options.center = this.latLng(importedData.geometry) if (importedData.geometry) this.options.center = this.latLng(importedData.geometry)
var self = this const self = this
importedData.layers.forEach((geojson) => { importedData.layers.forEach((geojson) => {
var dataLayer = self.createDataLayer() const dataLayer = self.createDataLayer()
dataLayer.fromUmapGeoJSON(geojson) dataLayer.fromUmapGeoJSON(geojson)
}) })
@ -1056,11 +1053,11 @@ L.U.Map.include({
}, },
importFromFile: function (file) { importFromFile: function (file) {
var reader = new FileReader() const reader = new FileReader()
reader.readAsText(file) reader.readAsText(file)
var self = this const self = this
reader.onload = (e) => { reader.onload = (e) => {
var rawData = e.target.result const rawData = e.target.result
try { try {
self.importRaw(rawData) self.importRaw(rawData)
} catch (e) { } catch (e) {
@ -1086,17 +1083,17 @@ L.U.Map.include({
}, },
displayCaption: function () { displayCaption: function () {
var container = L.DomUtil.create('div', 'umap-caption'), const container = L.DomUtil.create('div', 'umap-caption')
title = L.DomUtil.create('h3', '', container) let title = L.DomUtil.create('h3', '', container)
title.textContent = this.options.name title.textContent = this.options.name
this.permissions.addOwnerLink('h5', container) this.permissions.addOwnerLink('h5', container)
if (this.options.description) { if (this.options.description) {
var description = L.DomUtil.create('div', 'umap-map-description', container) const description = L.DomUtil.create('div', 'umap-map-description', container)
description.innerHTML = L.Util.toHTML(this.options.description) description.innerHTML = L.Util.toHTML(this.options.description)
} }
var datalayerContainer = L.DomUtil.create('div', 'datalayer-container', container) const datalayerContainer = L.DomUtil.create('div', 'datalayer-container', container)
this.eachVisibleDataLayer((datalayer) => { this.eachVisibleDataLayer((datalayer) => {
var p = L.DomUtil.create('p', '', datalayerContainer), const p = L.DomUtil.create('p', '', datalayerContainer),
color = L.DomUtil.create('span', 'datalayer-color', p), color = L.DomUtil.create('span', 'datalayer-color', p),
headline = L.DomUtil.create('strong', '', p), headline = L.DomUtil.create('strong', '', p),
description = L.DomUtil.create('span', '', p) description = L.DomUtil.create('span', '', p)
@ -1109,7 +1106,7 @@ L.U.Map.include({
datalayer.renderToolbox(headline) datalayer.renderToolbox(headline)
L.DomUtil.add('span', '', headline, datalayer.options.name + ' ') L.DomUtil.add('span', '', headline, datalayer.options.name + ' ')
}) })
var creditsContainer = L.DomUtil.create('div', 'credits-container', container), const creditsContainer = L.DomUtil.create('div', 'credits-container', container),
credits = L.DomUtil.createFieldset(creditsContainer, L._('Credits')) credits = L.DomUtil.createFieldset(creditsContainer, L._('Credits'))
title = L.DomUtil.add('h5', '', credits, L._('User content credits')) title = L.DomUtil.add('h5', '', credits, L._('User content credits'))
if (this.options.shortCredit || this.options.longCredit) { if (this.options.shortCredit || this.options.longCredit) {
@ -1121,7 +1118,7 @@ L.U.Map.include({
) )
} }
if (this.options.licence) { if (this.options.licence) {
var licence = L.DomUtil.add( const licence = L.DomUtil.add(
'p', 'p',
'', '',
credits, credits,
@ -1135,13 +1132,13 @@ L.U.Map.include({
L.DomUtil.create('hr', '', credits) L.DomUtil.create('hr', '', credits)
title = L.DomUtil.create('h5', '', credits) title = L.DomUtil.create('h5', '', credits)
title.textContent = L._('Map background credits') title.textContent = L._('Map background credits')
var tilelayerCredit = L.DomUtil.create('p', '', credits), const tilelayerCredit = L.DomUtil.create('p', '', credits),
name = L.DomUtil.create('strong', '', tilelayerCredit), name = L.DomUtil.create('strong', '', tilelayerCredit),
attribution = L.DomUtil.create('span', '', tilelayerCredit) attribution = L.DomUtil.create('span', '', tilelayerCredit)
name.textContent = this.selected_tilelayer.options.name + ' ' name.textContent = this.selected_tilelayer.options.name + ' '
attribution.innerHTML = this.selected_tilelayer.getAttribution() attribution.innerHTML = this.selected_tilelayer.getAttribution()
L.DomUtil.create('hr', '', credits) L.DomUtil.create('hr', '', credits)
var umapCredit = L.DomUtil.create('p', '', credits), const umapCredit = L.DomUtil.create('p', '', credits),
urls = { urls = {
leaflet: 'http://leafletjs.com', leaflet: 'http://leafletjs.com',
django: 'https://www.djangoproject.com', django: 'https://www.djangoproject.com',
@ -1151,16 +1148,16 @@ L.U.Map.include({
'Powered by <a href="{leaflet}">Leaflet</a> and <a href="{django}">Django</a>, glued by <a href="{umap}">uMap project</a>.', 'Powered by <a href="{leaflet}">Leaflet</a> and <a href="{django}">Django</a>, glued by <a href="{umap}">uMap project</a>.',
urls urls
) )
var browser = L.DomUtil.create('li', '') const browser = L.DomUtil.create('li', '')
L.DomUtil.create('i', 'umap-icon-16 umap-list', browser) L.DomUtil.create('i', 'umap-icon-16 umap-list', browser)
var labelBrowser = L.DomUtil.create('span', '', browser) const labelBrowser = L.DomUtil.create('span', '', browser)
labelBrowser.textContent = labelBrowser.title = L._('Browse data') labelBrowser.textContent = labelBrowser.title = L._('Browse data')
L.DomEvent.on(browser, 'click', this.openBrowser, this) L.DomEvent.on(browser, 'click', this.openBrowser, this)
var actions = [browser] const actions = [browser]
if (this.options.advancedFilterKey) { if (this.options.advancedFilterKey) {
var filter = L.DomUtil.create('li', '') const filter = L.DomUtil.create('li', '')
L.DomUtil.create('i', 'umap-icon-16 umap-add', filter) L.DomUtil.create('i', 'umap-icon-16 umap-add', filter)
var labelFilter = L.DomUtil.create('span', '', filter) const labelFilter = L.DomUtil.create('span', '', filter)
labelFilter.textContent = labelFilter.title = L._('Select data') labelFilter.textContent = labelFilter.title = L._('Select data')
L.DomEvent.on(filter, 'click', this.openFilter, this) L.DomEvent.on(filter, 'click', this.openFilter, this)
actions.push(filter) actions.push(filter)
@ -1169,13 +1166,13 @@ L.U.Map.include({
}, },
eachDataLayer: function (method, context) { eachDataLayer: function (method, context) {
for (var i = 0; i < this.datalayers_index.length; i++) { for (let i = 0; i < this.datalayers_index.length; i++) {
method.call(context, this.datalayers_index[i]) method.call(context, this.datalayers_index[i])
} }
}, },
eachDataLayerReverse: function (method, context, filter) { eachDataLayerReverse: function (method, context, filter) {
for (var i = this.datalayers_index.length - 1; i >= 0; i--) { for (let i = this.datalayers_index.length - 1; i >= 0; i--) {
if (filter && !filter.call(context, this.datalayers_index[i])) continue if (filter && !filter.call(context, this.datalayers_index[i])) continue
method.call(context, this.datalayers_index[i]) method.call(context, this.datalayers_index[i])
} }
@ -1190,7 +1187,7 @@ L.U.Map.include({
}, },
findDataLayer: function (method, context) { findDataLayer: function (method, context) {
for (var i = this.datalayers_index.length - 1; i >= 0; i--) { for (let i = this.datalayers_index.length - 1; i >= 0; i--) {
if (method.call(context, this.datalayers_index[i])) if (method.call(context, this.datalayers_index[i]))
return this.datalayers_index[i] return this.datalayers_index[i]
} }
@ -1297,8 +1294,8 @@ L.U.Map.include({
], ],
exportOptions: function () { exportOptions: function () {
var properties = {} const properties = {}
for (var i = this.editableOptions.length - 1; i >= 0; i--) { for (let i = this.editableOptions.length - 1; i >= 0; i--) {
if (typeof this.options[this.editableOptions[i]] !== 'undefined') { if (typeof this.options[this.editableOptions[i]] !== 'undefined') {
properties[this.editableOptions[i]] = this.options[this.editableOptions[i]] properties[this.editableOptions[i]] = this.options[this.editableOptions[i]]
} }
@ -1307,7 +1304,7 @@ L.U.Map.include({
}, },
serialize: function () { serialize: function () {
var umapfile = { const umapfile = {
type: 'umap', type: 'umap',
uri: window.location.href, uri: window.location.href,
properties: this.exportOptions(), properties: this.exportOptions(),
@ -1325,13 +1322,13 @@ L.U.Map.include({
save: function () { save: function () {
if (!this.isDirty) return if (!this.isDirty) return
if (this._default_extent) this.updateExtent() if (this._default_extent) this.updateExtent()
var geojson = { const geojson = {
type: 'Feature', type: 'Feature',
geometry: this.geometry(), geometry: this.geometry(),
properties: this.exportOptions(), properties: this.exportOptions(),
} }
this.backup() this.backup()
var formData = new FormData() const formData = new FormData()
formData.append('name', this.options.name) formData.append('name', this.options.name)
formData.append('center', JSON.stringify(this.geometry())) formData.append('center', JSON.stringify(this.geometry()))
formData.append('settings', JSON.stringify(geojson)) formData.append('settings', JSON.stringify(geojson))
@ -1339,7 +1336,7 @@ L.U.Map.include({
data: formData, data: formData,
context: this, context: this,
callback: function (data) { callback: function (data) {
var duration = 3000 let duration = 3000
if (!this.options.umap_id) { if (!this.options.umap_id) {
duration = 100000 // we want a longer message at map creation (TODO UGLY) duration = 100000 // we want a longer message at map creation (TODO UGLY)
this.options.umap_id = data.id this.options.umap_id = data.id
@ -1403,7 +1400,7 @@ L.U.Map.include({
geometry: function () { geometry: function () {
/* Return a GeoJSON geometry Object */ /* Return a GeoJSON geometry Object */
var latlng = this.latLng(this.options.center || this.getCenter()) const latlng = this.latLng(this.options.center || this.getCenter())
return { return {
type: 'Point', type: 'Point',
coordinates: [latlng.lng, latlng.lat], coordinates: [latlng.lng, latlng.lat],
@ -1411,7 +1408,7 @@ L.U.Map.include({
}, },
defaultDataLayer: function () { defaultDataLayer: function () {
var datalayer, fallback let datalayer, fallback
datalayer = this.lastUsedDataLayer datalayer = this.lastUsedDataLayer
if ( if (
datalayer && datalayer &&
@ -1441,8 +1438,8 @@ L.U.Map.include({
}, },
_editControls: function (container) { _editControls: function (container) {
var UIFields = [] let UIFields = []
for (var i = 0; i < this.HIDDABLE_CONTROLS.length; i++) { for (let i = 0; i < this.HIDDABLE_CONTROLS.length; i++) {
UIFields.push('options.' + this.HIDDABLE_CONTROLS[i] + 'Control') UIFields.push('options.' + this.HIDDABLE_CONTROLS[i] + 'Control')
} }
UIFields = UIFields.concat([ UIFields = UIFields.concat([
@ -1462,7 +1459,7 @@ L.U.Map.include({
}, },
callbackContext: this, callbackContext: this,
}) })
var controlsOptions = L.DomUtil.createFieldset( const controlsOptions = L.DomUtil.createFieldset(
container, container,
L._('User interface options') L._('User interface options')
) )
@ -1470,7 +1467,7 @@ L.U.Map.include({
}, },
_editShapeProperties: function (container) { _editShapeProperties: function (container) {
var shapeOptions = [ const shapeOptions = [
'options.color', 'options.color',
'options.iconClass', 'options.iconClass',
'options.iconUrl', 'options.iconUrl',
@ -1488,7 +1485,7 @@ L.U.Map.include({
}) })
}, },
}) })
var defaultShapeProperties = L.DomUtil.createFieldset( const defaultShapeProperties = L.DomUtil.createFieldset(
container, container,
L._('Default shape properties') L._('Default shape properties')
) )
@ -1496,7 +1493,7 @@ L.U.Map.include({
}, },
_editDefaultProperties: function (container) { _editDefaultProperties: function (container) {
var optionsFields = [ const optionsFields = [
'options.smoothFactor', 'options.smoothFactor',
'options.dashArray', 'options.dashArray',
'options.zoomTo', 'options.zoomTo',
@ -1552,7 +1549,7 @@ L.U.Map.include({
}) })
}, },
}) })
var defaultProperties = L.DomUtil.createFieldset( const defaultProperties = L.DomUtil.createFieldset(
container, container,
L._('Default properties') L._('Default properties')
) )
@ -1560,7 +1557,7 @@ L.U.Map.include({
}, },
_editInteractionsProperties: function (container) { _editInteractionsProperties: function (container) {
var popupFields = [ const popupFields = [
'options.popupShape', 'options.popupShape',
'options.popupTemplate', 'options.popupTemplate',
'options.popupContentTemplate', 'options.popupContentTemplate',
@ -1581,7 +1578,7 @@ L.U.Map.include({
}) })
}, },
}) })
var popupFieldset = L.DomUtil.createFieldset( const popupFieldset = L.DomUtil.createFieldset(
container, container,
L._('Default interaction options') L._('Default interaction options')
) )
@ -1592,7 +1589,7 @@ L.U.Map.include({
if (!L.Util.isObject(this.options.tilelayer)) { if (!L.Util.isObject(this.options.tilelayer)) {
this.options.tilelayer = {} this.options.tilelayer = {}
} }
var tilelayerFields = [ const tilelayerFields = [
[ [
'options.tilelayer.name', 'options.tilelayer.name',
{ handler: 'BlurInput', placeholder: L._('display name') }, { handler: 'BlurInput', placeholder: L._('display name') },
@ -1619,7 +1616,10 @@ L.U.Map.include({
], ],
['options.tilelayer.tms', { handler: 'Switch', label: L._('TMS format') }], ['options.tilelayer.tms', { handler: 'Switch', label: L._('TMS format') }],
] ]
var customTilelayer = L.DomUtil.createFieldset(container, L._('Custom background')) const customTilelayer = L.DomUtil.createFieldset(
container,
L._('Custom background')
)
builder = new L.U.FormBuilder(this, tilelayerFields, { builder = new L.U.FormBuilder(this, tilelayerFields, {
callback: this.initTileLayers, callback: this.initTileLayers,
callbackContext: this, callbackContext: this,
@ -1631,7 +1631,7 @@ L.U.Map.include({
if (!L.Util.isObject(this.options.overlay)) { if (!L.Util.isObject(this.options.overlay)) {
this.options.overlay = {} this.options.overlay = {}
} }
var overlayFields = [ const overlayFields = [
[ [
'options.overlay.url_template', 'options.overlay.url_template',
{ {
@ -1659,7 +1659,7 @@ L.U.Map.include({
], ],
['options.overlay.tms', { handler: 'Switch', label: L._('TMS format') }], ['options.overlay.tms', { handler: 'Switch', label: L._('TMS format') }],
] ]
var overlay = L.DomUtil.createFieldset(container, L._('Custom overlay')) const overlay = L.DomUtil.createFieldset(container, L._('Custom overlay'))
builder = new L.U.FormBuilder(this, overlayFields, { builder = new L.U.FormBuilder(this, overlayFields, {
callback: this.initTileLayers, callback: this.initTileLayers,
callbackContext: this, callbackContext: this,
@ -1671,8 +1671,8 @@ L.U.Map.include({
if (!L.Util.isObject(this.options.limitBounds)) { if (!L.Util.isObject(this.options.limitBounds)) {
this.options.limitBounds = {} this.options.limitBounds = {}
} }
var limitBounds = L.DomUtil.createFieldset(container, L._('Limit bounds')) const limitBounds = L.DomUtil.createFieldset(container, L._('Limit bounds'))
var boundsFields = [ const boundsFields = [
[ [
'options.limitBounds.south', 'options.limitBounds.south',
{ handler: 'BlurFloatInput', placeholder: L._('max South') }, { handler: 'BlurFloatInput', placeholder: L._('max South') },
@ -1690,13 +1690,13 @@ L.U.Map.include({
{ handler: 'BlurFloatInput', placeholder: L._('max East') }, { handler: 'BlurFloatInput', placeholder: L._('max East') },
], ],
] ]
var boundsBuilder = new L.U.FormBuilder(this, boundsFields, { const boundsBuilder = new L.U.FormBuilder(this, boundsFields, {
callback: this.handleLimitBounds, callback: this.handleLimitBounds,
callbackContext: this, callbackContext: this,
}) })
limitBounds.appendChild(boundsBuilder.build()) limitBounds.appendChild(boundsBuilder.build())
var boundsButtons = L.DomUtil.create('div', 'button-bar half', limitBounds) const boundsButtons = L.DomUtil.create('div', 'button-bar half', limitBounds)
var setCurrentButton = L.DomUtil.add( const setCurrentButton = L.DomUtil.add(
'a', 'a',
'button', 'button',
boundsButtons, boundsButtons,
@ -1707,7 +1707,7 @@ L.U.Map.include({
setCurrentButton, setCurrentButton,
'click', 'click',
function () { function () {
var bounds = this.getBounds() const bounds = this.getBounds()
this.options.limitBounds.south = L.Util.formatNum(bounds.getSouth()) this.options.limitBounds.south = L.Util.formatNum(bounds.getSouth())
this.options.limitBounds.west = L.Util.formatNum(bounds.getWest()) this.options.limitBounds.west = L.Util.formatNum(bounds.getWest())
this.options.limitBounds.north = L.Util.formatNum(bounds.getNorth()) this.options.limitBounds.north = L.Util.formatNum(bounds.getNorth())
@ -1718,7 +1718,7 @@ L.U.Map.include({
}, },
this this
) )
var emptyBounds = L.DomUtil.add('a', 'button', boundsButtons, L._('Empty')) const emptyBounds = L.DomUtil.add('a', 'button', boundsButtons, L._('Empty'))
emptyBounds.href = '#' emptyBounds.href = '#'
L.DomEvent.on( L.DomEvent.on(
emptyBounds, emptyBounds,
@ -1737,8 +1737,8 @@ L.U.Map.include({
}, },
_editSlideshow: function (container) { _editSlideshow: function (container) {
var slideshow = L.DomUtil.createFieldset(container, L._('Slideshow')) const slideshow = L.DomUtil.createFieldset(container, L._('Slideshow'))
var slideshowFields = [ const slideshowFields = [
[ [
'options.slideshow.active', 'options.slideshow.active',
{ handler: 'Switch', label: L._('Activate slideshow mode') }, { handler: 'Switch', label: L._('Activate slideshow mode') },
@ -1759,11 +1759,11 @@ L.U.Map.include({
{ handler: 'Switch', label: L._('Autostart when map is loaded') }, { handler: 'Switch', label: L._('Autostart when map is loaded') },
], ],
] ]
var slideshowHandler = function () { const slideshowHandler = function () {
this.slideshow.setOptions(this.options.slideshow) this.slideshow.setOptions(this.options.slideshow)
this.renderControls() this.renderControls()
} }
var slideshowBuilder = new L.U.FormBuilder(this, slideshowFields, { const slideshowBuilder = new L.U.FormBuilder(this, slideshowFields, {
callback: slideshowHandler, callback: slideshowHandler,
callbackContext: this, callbackContext: this,
}) })
@ -1771,8 +1771,8 @@ L.U.Map.include({
}, },
_editCredits: function (container) { _editCredits: function (container) {
var credits = L.DomUtil.createFieldset(container, L._('Credits')) const credits = L.DomUtil.createFieldset(container, L._('Credits'))
var creditsFields = [ const creditsFields = [
['options.licence', { handler: 'LicenceChooser', label: L._('licence') }], ['options.licence', { handler: 'LicenceChooser', label: L._('licence') }],
[ [
'options.shortCredit', 'options.shortCredit',
@ -1803,7 +1803,7 @@ L.U.Map.include({
{ handler: 'Switch', label: L._('Permanent credits background') }, { handler: 'Switch', label: L._('Permanent credits background') },
], ],
] ]
var creditsBuilder = new L.U.FormBuilder(this, creditsFields, { const creditsBuilder = new L.U.FormBuilder(this, creditsFields, {
callback: this.renderControls, callback: this.renderControls,
callbackContext: this, callbackContext: this,
}) })
@ -1811,23 +1811,23 @@ L.U.Map.include({
}, },
_advancedActions: function (container) { _advancedActions: function (container) {
var advancedActions = L.DomUtil.createFieldset(container, L._('Advanced actions')) const advancedActions = L.DomUtil.createFieldset(container, L._('Advanced actions'))
var advancedButtons = L.DomUtil.create('div', 'button-bar half', advancedActions) const advancedButtons = L.DomUtil.create('div', 'button-bar half', advancedActions)
var del = L.DomUtil.create('a', 'button umap-delete', advancedButtons) const del = L.DomUtil.create('a', 'button umap-delete', advancedButtons)
del.href = '#' del.href = '#'
del.textContent = L._('Delete') del.textContent = L._('Delete')
L.DomEvent.on(del, 'click', L.DomEvent.stop).on(del, 'click', this.del, this) L.DomEvent.on(del, 'click', L.DomEvent.stop).on(del, 'click', this.del, this)
var clone = L.DomUtil.create('a', 'button umap-clone', advancedButtons) const clone = L.DomUtil.create('a', 'button umap-clone', advancedButtons)
clone.href = '#' clone.href = '#'
clone.textContent = L._('Clone') clone.textContent = L._('Clone')
clone.title = L._('Clone this map') clone.title = L._('Clone this map')
L.DomEvent.on(clone, 'click', L.DomEvent.stop).on(clone, 'click', this.clone, this) L.DomEvent.on(clone, 'click', L.DomEvent.stop).on(clone, 'click', this.clone, this)
var empty = L.DomUtil.create('a', 'button umap-empty', advancedButtons) const empty = L.DomUtil.create('a', 'button umap-empty', advancedButtons)
empty.href = '#' empty.href = '#'
empty.textContent = L._('Empty') empty.textContent = L._('Empty')
empty.title = L._('Delete all layers') empty.title = L._('Delete all layers')
L.DomEvent.on(empty, 'click', L.DomEvent.stop).on(empty, 'click', this.empty, this) L.DomEvent.on(empty, 'click', L.DomEvent.stop).on(empty, 'click', this.empty, this)
var download = L.DomUtil.create('a', 'button umap-download', advancedButtons) const download = L.DomUtil.create('a', 'button umap-download', advancedButtons)
download.href = '#' download.href = '#'
download.textContent = L._('Download') download.textContent = L._('Download')
download.title = L._('Open download panel') download.title = L._('Open download panel')
@ -1841,12 +1841,12 @@ L.U.Map.include({
edit: function () { edit: function () {
if (!this.editEnabled) return if (!this.editEnabled) return
var container = L.DomUtil.create('div', 'umap-edit-container'), const container = L.DomUtil.create('div', 'umap-edit-container'),
metadataFields = ['options.name', 'options.description'], metadataFields = ['options.name', 'options.description'],
title = L.DomUtil.create('h4', '', container) title = L.DomUtil.create('h4', '', container)
title.textContent = L._('Edit map properties') title.textContent = L._('Edit map properties')
var builder = new L.U.FormBuilder(this, metadataFields) const builder = new L.U.FormBuilder(this, metadataFields)
var form = builder.build() const form = builder.build()
container.appendChild(form) container.appendChild(form)
this._editControls(container) this._editControls(container)
this._editShapeProperties(container) this._editShapeProperties(container)
@ -1881,15 +1881,24 @@ L.U.Map.include({
}, },
initCaptionBar: function () { initCaptionBar: function () {
var container = L.DomUtil.create('div', 'umap-caption-bar', this._controlContainer), const container = L.DomUtil.create(
'div',
'umap-caption-bar',
this._controlContainer
),
name = L.DomUtil.create('h3', '', container) name = L.DomUtil.create('h3', '', container)
L.DomEvent.disableClickPropagation(container) L.DomEvent.disableClickPropagation(container)
this.permissions.addOwnerLink('span', container) this.permissions.addOwnerLink('span', container)
if (this.options.captionMenus) { if (this.options.captionMenus) {
var about = L.DomUtil.add('a', 'umap-about-link', container, ' — ' + L._('About')) const about = L.DomUtil.add(
'a',
'umap-about-link',
container,
' — ' + L._('About')
)
about.href = '#' about.href = '#'
L.DomEvent.on(about, 'click', this.displayCaption, this) L.DomEvent.on(about, 'click', this.displayCaption, this)
var browser = L.DomUtil.add( const browser = L.DomUtil.add(
'a', 'a',
'umap-open-browser-link', 'umap-open-browser-link',
container, container,
@ -1903,7 +1912,7 @@ L.U.Map.include({
this this
) )
if (this.options.advancedFilterKey) { if (this.options.advancedFilterKey) {
var filter = L.DomUtil.add( const filter = L.DomUtil.add(
'a', 'a',
'umap-open-filter-link', 'umap-open-filter-link',
container, container,
@ -1918,7 +1927,7 @@ L.U.Map.include({
) )
} }
} }
var setName = function () { const setName = function () {
name.textContent = this.getDisplayName() name.textContent = this.getDisplayName()
} }
L.bind(setName, this)() L.bind(setName, this)()
@ -1929,7 +1938,7 @@ L.U.Map.include({
}, },
initEditBar: function () { initEditBar: function () {
var container = L.DomUtil.create( const container = L.DomUtil.create(
'div', 'div',
'umap-main-edit-toolbox with-transition dark', 'umap-main-edit-toolbox with-transition dark',
this._controlContainer this._controlContainer
@ -1943,15 +1952,19 @@ L.U.Map.include({
L.DomEvent.on(name, 'click', this.edit, this) L.DomEvent.on(name, 'click', this.edit, this)
this.on('postsync', L.bind(setName, this)) this.on('postsync', L.bind(setName, this))
this.help.button(title, 'edit') this.help.button(title, 'edit')
var save = L.DomUtil.create('a', 'leaflet-control-edit-save button', container) const save = L.DomUtil.create('a', 'leaflet-control-edit-save button', container)
save.href = '#' save.href = '#'
save.title = L._('Save current edits') + ' (Ctrl+S)' save.title = L._('Save current edits') + ' (Ctrl+S)'
save.textContent = L._('Save') save.textContent = L._('Save')
var cancel = L.DomUtil.create('a', 'leaflet-control-edit-cancel button', container) const cancel = L.DomUtil.create(
'a',
'leaflet-control-edit-cancel button',
container
)
cancel.href = '#' cancel.href = '#'
cancel.title = L._('Cancel edits') cancel.title = L._('Cancel edits')
cancel.textContent = L._('Cancel') cancel.textContent = L._('Cancel')
var disable = L.DomUtil.create('a', 'leaflet-control-edit-disable', container) const disable = L.DomUtil.create('a', 'leaflet-control-edit-disable', container)
disable.href = '#' disable.href = '#'
disable.title = disable.textContent = L._('Disable editing') disable.title = disable.textContent = L._('Disable editing')
@ -2001,7 +2014,7 @@ L.U.Map.include({
del: function () { del: function () {
if (confirm(L._('Are you sure you want to delete this map?'))) { if (confirm(L._('Are you sure you want to delete this map?'))) {
var url = L.Util.template(this.options.urls.map_delete, { const url = L.Util.template(this.options.urls.map_delete, {
map_id: this.options.umap_id, map_id: this.options.umap_id,
}) })
this.post(url) this.post(url)
@ -2012,7 +2025,7 @@ L.U.Map.include({
if ( if (
confirm(L._('Are you sure you want to clone this map and all its datalayers?')) confirm(L._('Are you sure you want to clone this map and all its datalayers?'))
) { ) {
var url = L.Util.template(this.options.urls.map_clone, { const url = L.Util.template(this.options.urls.map_clone, {
map_id: this.options.umap_id, map_id: this.options.umap_id,
}) })
this.post(url) this.post(url)
@ -2053,7 +2066,7 @@ L.U.Map.include({
}, },
setContextMenuItems: function (e) { setContextMenuItems: function (e) {
var items = [] let items = []
if (this._zoom !== this.getMaxZoom()) { if (this._zoom !== this.getMaxZoom()) {
items.push({ items.push({
text: L._('Zoom in'), text: L._('Zoom in'),
@ -2149,9 +2162,9 @@ L.U.Map.include({
}, },
openExternalRouting: function (e) { openExternalRouting: function (e) {
var url = this.options.urls.routing const url = this.options.urls.routing
if (url) { if (url) {
var params = { const params = {
lat: e.latlng.lat, lat: e.latlng.lat,
lng: e.latlng.lng, lng: e.latlng.lng,
locale: L.locale, locale: L.locale,
@ -2167,7 +2180,7 @@ L.U.Map.include({
}, },
getGeoContext: function () { getGeoContext: function () {
var context = { const context = {
bbox: this.getBounds().toBBoxString(), bbox: this.getBounds().toBBoxString(),
north: this.getBounds().getNorthEast().lat, north: this.getBounds().getNorthEast().lat,
east: this.getBounds().getNorthEast().lng, east: this.getBounds().getNorthEast().lng,
@ -2199,7 +2212,7 @@ L.U.Map.include({
}, },
closeInplaceToolbar: function () { closeInplaceToolbar: function () {
var toolbar = this._toolbars[L.Toolbar.Popup._toolbar_class_id] const toolbar = this._toolbars[L.Toolbar.Popup._toolbar_class_id]
if (toolbar) toolbar.remove() if (toolbar) toolbar.remove()
}, },

View file

@ -28,7 +28,7 @@ L.U.MarkerCluster = L.MarkerCluster.extend({
_initIcon: function () { _initIcon: function () {
L.MarkerCluster.prototype._initIcon.call(this) L.MarkerCluster.prototype._initIcon.call(this)
var div = this._icon.querySelector('div') const div = this._icon.querySelector('div')
// Compute text color only when icon is added to the DOM. // Compute text color only when icon is added to the DOM.
div.style.color = this._iconObj.computeTextColor(div) div.style.color = this._iconObj.computeTextColor(div)
}, },
@ -40,7 +40,7 @@ L.U.Layer.Cluster = L.MarkerClusterGroup.extend({
initialize: function (datalayer) { initialize: function (datalayer) {
this.datalayer = datalayer this.datalayer = datalayer
var options = { const options = {
polygonOptions: { polygonOptions: {
color: this.datalayer.getColor(), color: this.datalayer.getColor(),
}, },
@ -103,7 +103,7 @@ L.U.Layer.Heat = L.HeatLayer.extend({
addLayer: function (layer) { addLayer: function (layer) {
if (layer instanceof L.Marker) { if (layer instanceof L.Marker) {
var latlng = layer.getLatLng(), let latlng = layer.getLatLng(),
alt alt
if ( if (
this.datalayer.options.heat && this.datalayer.options.heat &&
@ -192,9 +192,9 @@ L.U.DataLayer = L.Evented.extend({
this.pane.dataset.id = L.stamp(this) this.pane.dataset.id = L.stamp(this)
this.renderer = L.svg({ pane: this.pane }) this.renderer = L.svg({ pane: this.pane })
var isDirty = false, let isDirty = false
isDeleted = false, let isDeleted = false
self = this const self = this
try { try {
Object.defineProperty(this, 'isDirty', { Object.defineProperty(this, 'isDirty', {
get: function () { get: function () {
@ -267,13 +267,13 @@ L.U.DataLayer = L.Evented.extend({
resetLayer: function (force) { resetLayer: function (force) {
if (this.layer && this.options.type === this.layer._type && !force) return if (this.layer && this.options.type === this.layer._type && !force) return
var visible = this.isVisible() const visible = this.isVisible()
if (this.layer) this.layer.clearLayers() if (this.layer) this.layer.clearLayers()
// delete this.layer? // delete this.layer?
if (visible) this.map.removeLayer(this.layer) if (visible) this.map.removeLayer(this.layer)
var Class = L.U.Layer[this.options.type] || L.U.Layer.Default const Class = L.U.Layer[this.options.type] || L.U.Layer.Default
this.layer = new Class(this) this.layer = new Class(this)
var filterKeys = this.map.getFilterKeys(), const filterKeys = this.map.getFilterKeys(),
filter = this.map.options.filter filter = this.map.options.filter
this.eachLayer(function (layer) { this.eachLayer(function (layer) {
if (filter && !layer.matchFilter(filter, filterKeys)) return if (filter && !layer.matchFilter(filter, filterKeys)) return
@ -284,7 +284,7 @@ L.U.DataLayer = L.Evented.extend({
}, },
eachLayer: function (method, context) { eachLayer: function (method, context) {
for (var i in this._layers) { for (const i in this._layers) {
method.call(context || this, this._layers[i]) method.call(context || this, this._layers[i])
} }
return this return this
@ -292,7 +292,7 @@ L.U.DataLayer = L.Evented.extend({
eachFeature: function (method, context) { eachFeature: function (method, context) {
if (this.layer && this.layer.canBrowse) { if (this.layer && this.layer.canBrowse) {
for (var i = 0; i < this._index.length; i++) { for (let i = 0; i < this._index.length; i++) {
method.call(context || this, this._layers[this._index[i]]) method.call(context || this, this._layers[this._index[i]])
} }
} }
@ -342,18 +342,18 @@ L.U.DataLayer = L.Evented.extend({
}, },
reindex: function () { reindex: function () {
var features = [] const features = []
this.eachFeature((feature) => features.push(feature)) this.eachFeature((feature) => features.push(feature))
L.Util.sortFeatures(features, this.map.getOption('sortKey')) L.Util.sortFeatures(features, this.map.getOption('sortKey'))
this._index = [] this._index = []
for (var i = 0; i < features.length; i++) { for (let i = 0; i < features.length; i++) {
this._index.push(L.Util.stamp(features[i])) this._index.push(L.Util.stamp(features[i]))
} }
}, },
fetchRemoteData: function () { fetchRemoteData: function () {
if (!this.isRemoteLayer()) return if (!this.isRemoteLayer()) return
var from = parseInt(this.options.remoteData.from, 10), const from = parseInt(this.options.remoteData.from, 10),
to = parseInt(this.options.remoteData.to, 10) to = parseInt(this.options.remoteData.to, 10)
if ( if (
(!isNaN(from) && this.map.getZoom() < from) || (!isNaN(from) && this.map.getZoom() < from) ||
@ -364,7 +364,7 @@ L.U.DataLayer = L.Evented.extend({
} }
if (!this.options.remoteData.dynamic && this.hasDataLoaded()) return if (!this.options.remoteData.dynamic && this.hasDataLoaded()) return
if (!this.isVisible()) return if (!this.isVisible()) return
var url = this.map.localizeUrl(this.options.remoteData.url) let url = this.map.localizeUrl(this.options.remoteData.url)
if (this.options.remoteData.proxy) if (this.options.remoteData.proxy)
url = this.map.proxyUrl(url, this.options.remoteData.ttl) url = this.map.proxyUrl(url, this.options.remoteData.ttl)
this.map.ajax({ this.map.ajax({
@ -423,7 +423,7 @@ L.U.DataLayer = L.Evented.extend({
}, },
connectToMap: function () { connectToMap: function () {
var id = L.stamp(this) const id = L.stamp(this)
if (!this.map.datalayers[id]) { if (!this.map.datalayers[id]) {
this.map.datalayers[id] = this this.map.datalayers[id] = this
if (L.Util.indexOf(this.map.datalayers_index, this) === -1) if (L.Util.indexOf(this.map.datalayers_index, this) === -1)
@ -433,11 +433,13 @@ L.U.DataLayer = L.Evented.extend({
}, },
_dataUrl: function () { _dataUrl: function () {
var template = this.map.options.urls.datalayer_view, const template = this.map.options.urls.datalayer_view
url = L.Util.template(template, {
let url = L.Util.template(template, {
pk: this.umap_id, pk: this.umap_id,
map_id: this.map.options.umap_id, map_id: this.map.options.umap_id,
}) })
// No browser cache for owners/editors. // No browser cache for owners/editors.
if (this.map.options.allowEdit) url = url + '?' + Date.now() if (this.map.options.allowEdit) url = url + '?' + Date.now()
return url return url
@ -456,7 +458,7 @@ L.U.DataLayer = L.Evented.extend({
}, },
addLayer: function (feature) { addLayer: function (feature) {
var id = L.stamp(feature) const id = L.stamp(feature)
feature.connectToDataLayer(this) feature.connectToDataLayer(this)
this._index.push(id) this._index.push(id)
this._layers[id] = feature this._layers[id] = feature
@ -467,7 +469,7 @@ L.U.DataLayer = L.Evented.extend({
}, },
removeLayer: function (feature) { removeLayer: function (feature) {
var id = L.stamp(feature) const id = L.stamp(feature)
feature.disconnectFromDataLayer(this) feature.disconnectFromDataLayer(this)
this._index.splice(this._index.indexOf(id), 1) this._index.splice(this._index.indexOf(id), 1)
delete this._layers[id] delete this._layers[id]
@ -477,7 +479,7 @@ L.U.DataLayer = L.Evented.extend({
}, },
indexProperties: function (feature) { indexProperties: function (feature) {
for (var i in feature.properties) for (const i in feature.properties)
if (typeof feature.properties[i] !== 'object') this.indexProperty(i) if (typeof feature.properties[i] !== 'object') this.indexProperty(i)
}, },
@ -489,7 +491,7 @@ L.U.DataLayer = L.Evented.extend({
}, },
deindexProperty: function (name) { deindexProperty: function (name) {
var idx = this._propertiesIndex.indexOf(name) const idx = this._propertiesIndex.indexOf(name)
if (idx !== -1) this._propertiesIndex.splice(idx, 1) if (idx !== -1) this._propertiesIndex.splice(idx, 1)
}, },
@ -509,7 +511,7 @@ L.U.DataLayer = L.Evented.extend({
}, },
rawToGeoJSON: function (c, type, callback) { rawToGeoJSON: function (c, type, callback) {
var toDom = (x) => new DOMParser().parseFromString(x, 'text/xml') const toDom = (x) => new DOMParser().parseFromString(x, 'text/xml')
// TODO add a duck typing guessType // TODO add a duck typing guessType
if (type === 'csv') { if (type === 'csv') {
@ -521,7 +523,7 @@ L.U.DataLayer = L.Evented.extend({
}, },
(err, result) => { (err, result) => {
if (err) { if (err) {
var message let message
if (err.type === 'Error') { if (err.type === 'Error') {
message = err.message message = err.message
} else { } else {
@ -545,7 +547,7 @@ L.U.DataLayer = L.Evented.extend({
} else if (type === 'kml') { } else if (type === 'kml') {
callback(toGeoJSON.kml(toDom(c))) callback(toGeoJSON.kml(toDom(c)))
} else if (type === 'osm') { } else if (type === 'osm') {
var d let d
try { try {
d = JSON.parse(c) d = JSON.parse(c)
} catch (e) { } catch (e) {
@ -554,7 +556,7 @@ L.U.DataLayer = L.Evented.extend({
callback(osmtogeojson(d, { flatProperties: true })) callback(osmtogeojson(d, { flatProperties: true }))
} else if (type === 'geojson') { } else if (type === 'geojson') {
try { try {
var gj = JSON.parse(c) const gj = JSON.parse(c)
callback(gj) callback(gj)
} catch (err) { } catch (err) {
this.map.ui.alert({ content: 'Invalid JSON file: ' + err }) this.map.ui.alert({ content: 'Invalid JSON file: ' + err })
@ -565,11 +567,11 @@ L.U.DataLayer = L.Evented.extend({
geojsonToFeatures: function (geojson) { geojsonToFeatures: function (geojson) {
if (!geojson) return if (!geojson) return
var features = geojson instanceof Array ? geojson : geojson.features, const features = geojson instanceof Array ? geojson : geojson.features
i, let i
len, let len
latlng, let latlng
latlngs let latlngs
if (features) { if (features) {
L.Util.sortFeatures(features, this.map.getOption('sortKey')) L.Util.sortFeatures(features, this.map.getOption('sortKey'))
@ -579,11 +581,11 @@ L.U.DataLayer = L.Evented.extend({
return this return this
} }
var geometry = geojson.type === 'Feature' ? geojson.geometry : geojson const geometry = geojson.type === 'Feature' ? geojson.geometry : geojson
if (!geometry) return // null geometry is valid geojson. if (!geometry) return // null geometry is valid geojson.
var coords = geometry.coordinates, const coords = geometry.coordinates
layer, let layer
tmp let tmp
switch (geometry.type) { switch (geometry.type) {
case 'Point': case 'Point':
@ -642,7 +644,7 @@ L.U.DataLayer = L.Evented.extend({
_polygonToLayer: function (geojson, latlngs) { _polygonToLayer: function (geojson, latlngs) {
// Ensure no empty hole // Ensure no empty hole
// for (var i = latlngs.length - 1; i > 0; i--) { // for (let i = latlngs.length - 1; i > 0; i--) {
// if (!latlngs.slice()[i].length) latlngs.splice(i, 1); // if (!latlngs.slice()[i].length) latlngs.splice(i, 1);
// } // }
return new L.U.Polygon(this.map, latlngs, { geojson: geojson, datalayer: this }) return new L.U.Polygon(this.map, latlngs, { geojson: geojson, datalayer: this })
@ -655,13 +657,13 @@ L.U.DataLayer = L.Evented.extend({
}, },
importFromFiles: function (files, type) { importFromFiles: function (files, type) {
for (var i = 0, f; (f = files[i]); i++) { for (let i = 0, f; (f = files[i]); i++) {
this.importFromFile(f, type) this.importFromFile(f, type)
} }
}, },
importFromFile: function (f, type) { importFromFile: function (f, type) {
var reader = new FileReader() const reader = new FileReader()
type = type || L.Util.detectFileType(f) type = type || L.Util.detectFileType(f)
reader.readAsText(f) reader.readAsText(f)
reader.onload = (e) => this.importRaw(e.target.result, type) reader.onload = (e) => this.importRaw(e.target.result, type)
@ -731,10 +733,10 @@ L.U.DataLayer = L.Evented.extend({
}, },
clone: function () { clone: function () {
var options = L.Util.CopyJSON(this.options) const options = L.Util.CopyJSON(this.options)
options.name = L._('Clone of {name}', { name: this.options.name }) options.name = L._('Clone of {name}', { name: this.options.name })
delete options.id delete options.id
var geojson = L.Util.CopyJSON(this._geojson), const geojson = L.Util.CopyJSON(this._geojson),
datalayer = this.map.createDataLayer(options) datalayer = this.map.createDataLayer(options)
datalayer.fromGeoJSON(geojson) datalayer.fromGeoJSON(geojson)
return datalayer return datalayer
@ -779,7 +781,7 @@ L.U.DataLayer = L.Evented.extend({
if (!this.map.editEnabled || !this.isLoaded()) { if (!this.map.editEnabled || !this.isLoaded()) {
return return
} }
var container = L.DomUtil.create('div', 'umap-layer-properties-container'), const container = L.DomUtil.create('div', 'umap-layer-properties-container'),
metadataFields = [ metadataFields = [
'options.name', 'options.name',
'options.description', 'options.description',
@ -794,8 +796,8 @@ L.U.DataLayer = L.Evented.extend({
}, },
], ],
] ]
var title = L.DomUtil.add('h3', '', container, L._('Layer properties')) const title = L.DomUtil.add('h3', '', container, L._('Layer properties'))
var builder = new L.U.FormBuilder(this, metadataFields, { let builder = new L.U.FormBuilder(this, metadataFields, {
callback: function (e) { callback: function (e) {
this.map.updateDatalayersControl() this.map.updateDatalayersControl()
if (e.helper.field === 'options.type') { if (e.helper.field === 'options.type') {
@ -806,7 +808,7 @@ L.U.DataLayer = L.Evented.extend({
}) })
container.appendChild(builder.build()) container.appendChild(builder.build())
var shapeOptions = [ let shapeOptions = [
'options.color', 'options.color',
'options.iconClass', 'options.iconClass',
'options.iconUrl', 'options.iconUrl',
@ -820,7 +822,7 @@ L.U.DataLayer = L.Evented.extend({
shapeOptions = shapeOptions.concat(this.layer.getEditableOptions()) shapeOptions = shapeOptions.concat(this.layer.getEditableOptions())
var redrawCallback = function (field) { const redrawCallback = function (field) {
this.hide() this.hide()
this.layer.postUpdate(field) this.layer.postUpdate(field)
this.show() this.show()
@ -830,10 +832,10 @@ L.U.DataLayer = L.Evented.extend({
id: 'datalayer-advanced-properties', id: 'datalayer-advanced-properties',
callback: redrawCallback, callback: redrawCallback,
}) })
var shapeProperties = L.DomUtil.createFieldset(container, L._('Shape properties')) const shapeProperties = L.DomUtil.createFieldset(container, L._('Shape properties'))
shapeProperties.appendChild(builder.build()) shapeProperties.appendChild(builder.build())
var optionsFields = [ let optionsFields = [
'options.smoothFactor', 'options.smoothFactor',
'options.dashArray', 'options.dashArray',
'options.zoomTo', 'options.zoomTo',
@ -846,13 +848,13 @@ L.U.DataLayer = L.Evented.extend({
id: 'datalayer-advanced-properties', id: 'datalayer-advanced-properties',
callback: redrawCallback, callback: redrawCallback,
}) })
var advancedProperties = L.DomUtil.createFieldset( const advancedProperties = L.DomUtil.createFieldset(
container, container,
L._('Advanced properties') L._('Advanced properties')
) )
advancedProperties.appendChild(builder.build()) advancedProperties.appendChild(builder.build())
var popupFields = [ const popupFields = [
'options.popupShape', 'options.popupShape',
'options.popupTemplate', 'options.popupTemplate',
'options.popupContentTemplate', 'options.popupContentTemplate',
@ -861,13 +863,16 @@ L.U.DataLayer = L.Evented.extend({
'options.labelInteractive', 'options.labelInteractive',
] ]
builder = new L.U.FormBuilder(this, popupFields, { callback: redrawCallback }) builder = new L.U.FormBuilder(this, popupFields, { callback: redrawCallback })
var popupFieldset = L.DomUtil.createFieldset(container, L._('Interaction options')) const popupFieldset = L.DomUtil.createFieldset(
container,
L._('Interaction options')
)
popupFieldset.appendChild(builder.build()) popupFieldset.appendChild(builder.build())
if (!L.Util.isObject(this.options.remoteData)) { if (!L.Util.isObject(this.options.remoteData)) {
this.options.remoteData = {} this.options.remoteData = {}
} }
var remoteDataFields = [ const remoteDataFields = [
[ [
'options.remoteData.url', 'options.remoteData.url',
{ handler: 'Url', label: L._('Url'), helpEntries: 'formatURL' }, { handler: 'Url', label: L._('Url'), helpEntries: 'formatURL' },
@ -905,15 +910,15 @@ L.U.DataLayer = L.Evented.extend({
]) ])
} }
var remoteDataContainer = L.DomUtil.createFieldset(container, L._('Remote data')) const remoteDataContainer = L.DomUtil.createFieldset(container, L._('Remote data'))
builder = new L.U.FormBuilder(this, remoteDataFields) builder = new L.U.FormBuilder(this, remoteDataFields)
remoteDataContainer.appendChild(builder.build()) remoteDataContainer.appendChild(builder.build())
if (this.map.options.urls.datalayer_versions) this.buildVersionsFieldset(container) if (this.map.options.urls.datalayer_versions) this.buildVersionsFieldset(container)
var advancedActions = L.DomUtil.createFieldset(container, L._('Advanced actions')) const advancedActions = L.DomUtil.createFieldset(container, L._('Advanced actions'))
var advancedButtons = L.DomUtil.create('div', 'button-bar half', advancedActions) const advancedButtons = L.DomUtil.create('div', 'button-bar half', advancedActions)
var deleteLink = L.DomUtil.create( const deleteLink = L.DomUtil.create(
'a', 'a',
'button delete_datalayer_button umap-delete', 'button delete_datalayer_button umap-delete',
advancedButtons advancedButtons
@ -930,7 +935,7 @@ L.U.DataLayer = L.Evented.extend({
this this
) )
if (!this.isRemoteLayer()) { if (!this.isRemoteLayer()) {
var emptyLink = L.DomUtil.create('a', 'button umap-empty', advancedButtons) const emptyLink = L.DomUtil.create('a', 'button umap-empty', advancedButtons)
emptyLink.textContent = L._('Empty') emptyLink.textContent = L._('Empty')
emptyLink.href = '#' emptyLink.href = '#'
L.DomEvent.on(emptyLink, 'click', L.DomEvent.stop).on( L.DomEvent.on(emptyLink, 'click', L.DomEvent.stop).on(
@ -940,20 +945,20 @@ L.U.DataLayer = L.Evented.extend({
this this
) )
} }
var cloneLink = L.DomUtil.create('a', 'button umap-clone', advancedButtons) const cloneLink = L.DomUtil.create('a', 'button umap-clone', advancedButtons)
cloneLink.textContent = L._('Clone') cloneLink.textContent = L._('Clone')
cloneLink.href = '#' cloneLink.href = '#'
L.DomEvent.on(cloneLink, 'click', L.DomEvent.stop).on( L.DomEvent.on(cloneLink, 'click', L.DomEvent.stop).on(
cloneLink, cloneLink,
'click', 'click',
function () { function () {
var datalayer = this.clone() const datalayer = this.clone()
datalayer.edit() datalayer.edit()
}, },
this this
) )
if (this.umap_id) { if (this.umap_id) {
var download = L.DomUtil.create('a', 'button umap-download', advancedButtons) const download = L.DomUtil.create('a', 'button umap-download', advancedButtons)
download.textContent = L._('Download') download.textContent = L._('Download')
download.href = this._dataUrl() download.href = this._dataUrl()
download.target = '_blank' download.target = '_blank'
@ -967,30 +972,28 @@ L.U.DataLayer = L.Evented.extend({
}, },
buildVersionsFieldset: function (container) { buildVersionsFieldset: function (container) {
var appendVersion = function (data) { const appendVersion = function (data) {
var date = new Date(parseInt(data.at, 10)) const date = new Date(parseInt(data.at, 10))
var content = const content =
date.toLocaleDateString(L.locale) + ' (' + parseInt(data.size) / 1000 + 'Kb)' date.toLocaleDateString(L.locale) + ' (' + parseInt(data.size) / 1000 + 'Kb)'
var el = L.DomUtil.create('div', 'umap-datalayer-version', versionsContainer) const el = L.DomUtil.create('div', 'umap-datalayer-version', versionsContainer)
var a = L.DomUtil.create('a', '', el) const a = L.DomUtil.create('a', '', el)
L.DomUtil.add('span', '', el, content) L.DomUtil.add('span', '', el, content)
a.href = '#' a.href = '#'
a.title = L._('Restore this version') a.title = L._('Restore this version')
L.DomEvent.on(a, 'click', L.DomEvent.stop).on( L.DomEvent.on(a, 'click', L.DomEvent.stop).on(
a, a,
'click', 'click',
function () { () => this.restore(data.name),
this.restore(data.name)
},
this this
) )
} }
var versionsContainer = L.DomUtil.createFieldset(container, L._('Versions'), { const versionsContainer = L.DomUtil.createFieldset(container, L._('Versions'), {
callback: function () { callback: function () {
this.map.xhr.get(this.getVersionsUrl(), { this.map.xhr.get(this.getVersionsUrl(), {
callback: function (data) { callback: function (data) {
for (var i = 0; i < data.versions.length; i++) { for (let i = 0; i < data.versions.length; i++) {
appendVersion.call(this, data.versions[i]) appendVersion.call(this, data.versions[i])
} }
}, },
@ -1018,7 +1021,7 @@ L.U.DataLayer = L.Evented.extend({
}, },
featuresToGeoJSON: function () { featuresToGeoJSON: function () {
var features = [] const features = []
this.eachLayer((layer) => features.push(layer.toGeoJSON())) this.eachLayer((layer) => features.push(layer.toGeoJSON()))
return features return features
}, },
@ -1041,7 +1044,7 @@ L.U.DataLayer = L.Evented.extend({
zoomTo: function () { zoomTo: function () {
if (!this.isVisible()) return if (!this.isVisible()) return
var bounds = this.layer.getBounds() const bounds = this.layer.getBounds()
if (bounds.isValid()) this.map.fitBounds(bounds) if (bounds.isValid()) this.map.fitBounds(bounds)
}, },
@ -1063,13 +1066,13 @@ L.U.DataLayer = L.Evented.extend({
getFeatureByIndex: function (index) { getFeatureByIndex: function (index) {
if (index === -1) index = this._index.length - 1 if (index === -1) index = this._index.length - 1
var id = this._index[index] const id = this._index[index]
return this._layers[id] return this._layers[id]
}, },
getNextFeature: function (feature) { getNextFeature: function (feature) {
var id = this._index.indexOf(L.stamp(feature)), const id = this._index.indexOf(L.stamp(feature))
nextId = this._index[id + 1] const nextId = this._index[id + 1]
return nextId ? this._layers[nextId] : this.getNextBrowsable().getFeatureByIndex(0) return nextId ? this._layers[nextId] : this.getNextBrowsable().getFeatureByIndex(0)
}, },
@ -1077,17 +1080,17 @@ L.U.DataLayer = L.Evented.extend({
if (this._index <= 1) { if (this._index <= 1) {
return null return null
} }
var id = this._index.indexOf(L.stamp(feature)), const id = this._index.indexOf(L.stamp(feature))
previousId = this._index[id - 1] const previousId = this._index[id - 1]
return previousId return previousId
? this._layers[previousId] ? this._layers[previousId]
: this.getPreviousBrowsable().getFeatureByIndex(-1) : this.getPreviousBrowsable().getFeatureByIndex(-1)
}, },
getPreviousBrowsable: function () { getPreviousBrowsable: function () {
var id = this.getRank(), let id = this.getRank()
next, let next
index = this.map.datalayers_index const index = this.map.datalayers_index
while (((id = index[++id] ? id : 0), (next = index[id]))) { while (((id = index[++id] ? id : 0), (next = index[id]))) {
if (next === this || (next.allowBrowse() && next.hasData())) break if (next === this || (next.allowBrowse() && next.hasData())) break
} }
@ -1095,9 +1098,9 @@ L.U.DataLayer = L.Evented.extend({
}, },
getNextBrowsable: function () { getNextBrowsable: function () {
var id = this.getRank(), let id = this.getRank()
prev, let prev
index = this.map.datalayers_index const index = this.map.datalayers_index
while (((id = index[--id] ? id : index.length - 1), (prev = index[id]))) { while (((id = index[--id] ? id : index.length - 1), (prev = index[id]))) {
if (prev === this || (prev.allowBrowse() && prev.hasData())) break if (prev === this || (prev.allowBrowse() && prev.hasData())) break
} }
@ -1129,13 +1132,13 @@ L.U.DataLayer = L.Evented.extend({
if (!this.isLoaded()) { if (!this.isLoaded()) {
return return
} }
var geojson = this.umapGeoJSON() const geojson = this.umapGeoJSON()
var formData = new FormData() const formData = new FormData()
formData.append('name', this.options.name) formData.append('name', this.options.name)
formData.append('display_on_load', !!this.options.displayOnLoad) formData.append('display_on_load', !!this.options.displayOnLoad)
formData.append('rank', this.getRank()) formData.append('rank', this.getRank())
// Filename support is shaky, don't do it for now. // Filename support is shaky, don't do it for now.
var blob = new Blob([JSON.stringify(geojson)], { type: 'application/json' }) const blob = new Blob([JSON.stringify(geojson)], { type: 'application/json' })
formData.append('geojson', blob) formData.append('geojson', blob)
this.map.post(this.getSaveUrl(), { this.map.post(this.getSaveUrl(), {
data: formData, data: formData,
@ -1159,7 +1162,7 @@ L.U.DataLayer = L.Evented.extend({
}, },
saveDelete: function () { saveDelete: function () {
var callback = function () { const callback = function () {
this.isDirty = false this.isDirty = false
this.map.continueSaving() this.map.continueSaving()
} }
@ -1180,7 +1183,7 @@ L.U.DataLayer = L.Evented.extend({
tableEdit: function () { tableEdit: function () {
if (this.isRemoteLayer() || !this.isVisible()) return if (this.isRemoteLayer() || !this.isVisible()) return
var editor = new L.U.TableEditor(this) const editor = new L.U.TableEditor(this)
editor.edit() editor.edit()
}, },
}) })

View file

@ -11,8 +11,8 @@ L.U.MapPermissions = L.Class.extend({
initialize: function (map) { initialize: function (map) {
this.setOptions(map.options.permissions) this.setOptions(map.options.permissions)
this.map = map this.map = map
var isDirty = false, let isDirty = false
self = this const self = this
try { try {
Object.defineProperty(this, 'isDirty', { Object.defineProperty(this, 'isDirty', {
get: function () { get: function () {
@ -54,12 +54,12 @@ L.U.MapPermissions = L.Class.extend({
content: L._('Please save the map first'), content: L._('Please save the map first'),
level: 'info', level: 'info',
}) })
var container = L.DomUtil.create('div', 'permissions-panel'), const container = L.DomUtil.create('div', 'permissions-panel'),
fields = [], fields = [],
title = L.DomUtil.create('h4', '', container) title = L.DomUtil.create('h4', '', container)
if (this.isAnonymousMap()) { if (this.isAnonymousMap()) {
if (this.options.anonymous_edit_url) { if (this.options.anonymous_edit_url) {
var helpText = L._('Secret edit link is:<br>{link}', { const helpText = L._('Secret edit link is:<br>{link}', {
link: this.options.anonymous_edit_url, link: this.options.anonymous_edit_url,
}) })
fields.push([ fields.push([
@ -101,15 +101,18 @@ L.U.MapPermissions = L.Class.extend({
]) ])
} }
title.textContent = L._('Update permissions') title.textContent = L._('Update permissions')
var builder = new L.U.FormBuilder(this, fields) const builder = new L.U.FormBuilder(this, fields)
var form = builder.build() const form = builder.build()
container.appendChild(form) container.appendChild(form)
if (this.isAnonymousMap() && this.map.options.user) { if (this.isAnonymousMap() && this.map.options.user) {
// We have a user, and this user has come through here, so they can edit the map, so let's allow to own the map. // We have a user, and this user has come through here, so they can edit the map, so let's allow to own the map.
// Note: real check is made on the back office anyway. // Note: real check is made on the back office anyway.
var advancedActions = L.DomUtil.createFieldset(container, L._('Advanced actions')) const advancedActions = L.DomUtil.createFieldset(
var advancedButtons = L.DomUtil.create('div', 'button-bar', advancedActions) container,
var download = L.DomUtil.create('a', 'button', advancedButtons) L._('Advanced actions')
)
const advancedButtons = L.DomUtil.create('div', 'button-bar', advancedActions)
const download = L.DomUtil.create('a', 'button', advancedButtons)
download.href = '#' download.href = '#'
download.textContent = L._('Attach the map to my account') download.textContent = L._('Attach the map to my account')
L.DomEvent.on(download, 'click', L.DomEvent.stop).on( L.DomEvent.on(download, 'click', L.DomEvent.stop).on(
@ -138,10 +141,10 @@ L.U.MapPermissions = L.Class.extend({
save: function () { save: function () {
if (!this.isDirty) return this.map.continueSaving() if (!this.isDirty) return this.map.continueSaving()
var formData = new FormData() const formData = new FormData()
if (!this.isAnonymousMap() && this.options.editors) { if (!this.isAnonymousMap() && this.options.editors) {
var editors = this.options.editors.map((u) => u.id) const editors = this.options.editors.map((u) => u.id)
for (var i = 0; i < this.options.editors.length; i++) for (let i = 0; i < this.options.editors.length; i++)
formData.append('editors', this.options.editors[i].id) formData.append('editors', this.options.editors[i].id)
} }
if (this.isOwner() || this.isAnonymousMap()) if (this.isOwner() || this.isAnonymousMap())
@ -175,7 +178,7 @@ L.U.MapPermissions = L.Class.extend({
addOwnerLink: function (element, container) { addOwnerLink: function (element, container) {
if (this.options.owner && this.options.owner.name && this.options.owner.url) { if (this.options.owner && this.options.owner.name && this.options.owner.url) {
var ownerContainer = L.DomUtil.add( const ownerContainer = L.DomUtil.add(
element, element,
'umap-map-owner', 'umap-map-owner',
container, container,

View file

@ -14,12 +14,12 @@ L.U.Popup = L.Popup.extend({
}, },
format: function () { format: function () {
var mode = this.feature.getOption('popupTemplate') || 'Default', const mode = this.feature.getOption('popupTemplate') || 'Default',
klass = L.U.PopupTemplate[mode] || L.U.PopupTemplate.Default klass = L.U.PopupTemplate[mode] || L.U.PopupTemplate.Default
this.content = new klass(this.feature, this.container) this.content = new klass(this.feature, this.container)
this.content.render() this.content.render()
var els = this.container.querySelectorAll('img,iframe') const els = this.container.querySelectorAll('img,iframe')
for (var i = 0; i < els.length; i++) { for (let i = 0; i < els.length; i++) {
this.onElementLoaded(els[i]) this.onElementLoaded(els[i])
} }
if (!els.length && this.container.textContent.replace('\n', '') === '') { if (!els.length && this.container.textContent.replace('\n', '') === '') {
@ -55,9 +55,9 @@ L.U.Popup.Panel = L.U.Popup.extend({
}, },
allButton: function () { allButton: function () {
var button = L.DomUtil.create('li', '') const button = L.DomUtil.create('li', '')
L.DomUtil.create('i', 'umap-icon-16 umap-list', button) L.DomUtil.create('i', 'umap-icon-16 umap-list', button)
var label = L.DomUtil.create('span', '', button) const label = L.DomUtil.create('span', '', button)
label.textContent = label.title = L._('See all') label.textContent = label.title = L._('See all')
L.DomEvent.on(button, 'click', this.feature.map.openBrowser, this.feature.map) L.DomEvent.on(button, 'click', this.feature.map.openBrowser, this.feature.map)
return button return button
@ -97,11 +97,11 @@ L.U.PopupTemplate.Default = L.Class.extend({
renderTitle: function () {}, renderTitle: function () {},
renderBody: function () { renderBody: function () {
var template = this.feature.getOption('popupContentTemplate'), const template = this.feature.getOption('popupContentTemplate')
container = L.DomUtil.create('div', 'umap-popup-container'), const container = L.DomUtil.create('div', 'umap-popup-container')
content = '', let content = ''
properties, let properties
center let center
properties = this.feature.extendedProperties() properties = this.feature.extendedProperties()
// Resolve properties inside description // Resolve properties inside description
properties.description = L.Util.greedyTemplate( properties.description = L.Util.greedyTemplate(
@ -116,7 +116,7 @@ L.U.PopupTemplate.Default = L.Class.extend({
renderFooter: function () { renderFooter: function () {
if (this.feature.hasPopupFooter()) { if (this.feature.hasPopupFooter()) {
var footerContainer = L.DomUtil.create( const footerContainer = L.DomUtil.create(
'div', 'div',
'umap-footer-container', 'umap-footer-container',
this.container this.container
@ -154,9 +154,9 @@ L.U.PopupTemplate.Default = L.Class.extend({
}, },
render: function () { render: function () {
var title = this.renderTitle() const title = this.renderTitle()
if (title) this.container.appendChild(title) if (title) this.container.appendChild(title)
var body = this.renderBody() const body = this.renderBody()
if (body) L.DomUtil.add('div', 'umap-popup-content', this.container, body) if (body) L.DomUtil.add('div', 'umap-popup-content', this.container, body)
this.renderFooter() this.renderFooter()
}, },
@ -164,7 +164,7 @@ L.U.PopupTemplate.Default = L.Class.extend({
L.U.PopupTemplate.BaseWithTitle = L.U.PopupTemplate.Default.extend({ L.U.PopupTemplate.BaseWithTitle = L.U.PopupTemplate.Default.extend({
renderTitle: function () { renderTitle: function () {
var title let title
if (this.feature.getDisplayName()) { if (this.feature.getDisplayName()) {
title = L.DomUtil.create('h3', 'popup-title') title = L.DomUtil.create('h3', 'popup-title')
title.textContent = this.feature.getDisplayName() title.textContent = this.feature.getDisplayName()
@ -182,15 +182,15 @@ L.U.PopupTemplate.Table = L.U.PopupTemplate.BaseWithTitle.extend({
}, },
addRow: function (container, key, value) { addRow: function (container, key, value) {
var tr = L.DomUtil.create('tr', '', container) const tr = L.DomUtil.create('tr', '', container)
L.DomUtil.add('th', '', tr, key) L.DomUtil.add('th', '', tr, key)
L.DomUtil.add('td', '', tr, this.formatRow(key, value)) L.DomUtil.add('td', '', tr, this.formatRow(key, value))
}, },
renderBody: function () { renderBody: function () {
var table = L.DomUtil.create('table') const table = L.DomUtil.create('table')
for (var key in this.feature.properties) { for (const key in this.feature.properties) {
if (typeof this.feature.properties[key] === 'object' || key === 'name') continue if (typeof this.feature.properties[key] === 'object' || key === 'name') continue
// TODO, manage links (url, mailto, wikipedia...) // TODO, manage links (url, mailto, wikipedia...)
this.addRow(table, key, L.Util.escapeHTML(this.feature.properties[key]).trim()) this.addRow(table, key, L.Util.escapeHTML(this.feature.properties[key]).trim())
@ -207,11 +207,11 @@ L.U.PopupTemplate.GeoRSSImage = L.U.PopupTemplate.BaseWithTitle.extend({
}, },
renderBody: function () { renderBody: function () {
var container = L.DomUtil.create('a') const container = L.DomUtil.create('a')
container.href = this.feature.properties.link container.href = this.feature.properties.link
container.target = '_blank' container.target = '_blank'
if (this.feature.properties.img) { if (this.feature.properties.img) {
var img = L.DomUtil.create('img', '', container) const img = L.DomUtil.create('img', '', container)
img.src = this.feature.properties.img img.src = this.feature.properties.img
// Sadly, we are unable to override this from JS the clean way // Sadly, we are unable to override this from JS the clean way
// See https://github.com/Leaflet/Leaflet/commit/61d746818b99d362108545c151a27f09d60960ee#commitcomment-6061847 // See https://github.com/Leaflet/Leaflet/commit/61d746818b99d362108545c151a27f09d60960ee#commitcomment-6061847
@ -229,7 +229,7 @@ L.U.PopupTemplate.GeoRSSLink = L.U.PopupTemplate.Default.extend({
}, },
renderBody: function () { renderBody: function () {
var title = this.renderTitle(this), const title = this.renderTitle(this),
a = L.DomUtil.add('a') a = L.DomUtil.add('a')
a.href = this.feature.properties.link a.href = this.feature.properties.link
a.target = '_blank' a.target = '_blank'

View file

@ -12,13 +12,16 @@ L.U.Slideshow = L.Class.extend({
this.setOptions(options) this.setOptions(options)
this.map = map this.map = map
this._id = null this._id = null
var current = null, // current feature
self = this // current feature
let current = null
const self = this
try { try {
Object.defineProperty(this, 'current', { Object.defineProperty(this, 'current', {
get: function () { get: function () {
if (!current) { if (!current) {
var datalayer = this.defaultDatalayer() const datalayer = this.defaultDatalayer()
if (datalayer) current = datalayer.getFeatureByIndex(0) if (datalayer) current = datalayer.getFeatureByIndex(0)
} }
return current return current
@ -66,11 +69,11 @@ L.U.Slideshow = L.Class.extend({
}, },
timeSpinner: function () { timeSpinner: function () {
var time = parseInt(this.options.delay, 10) const time = parseInt(this.options.delay, 10)
if (!time) return if (!time) return
var css = 'rotation ' + time / 1000 + 's infinite linear', const css = 'rotation ' + time / 1000 + 's infinite linear',
spinners = document.querySelectorAll('.umap-slideshow-toolbox .play .spinner') spinners = document.querySelectorAll('.umap-slideshow-toolbox .play .spinner')
for (var i = 0; i < spinners.length; i++) { for (let i = 0; i < spinners.length; i++) {
spinners[i].style.animation = css spinners[i].style.animation = css
spinners[i].style['-webkit-animation'] = css spinners[i].style['-webkit-animation'] = css
spinners[i].style['-moz-animation'] = css spinners[i].style['-moz-animation'] = css
@ -80,10 +83,11 @@ L.U.Slideshow = L.Class.extend({
resetSpinners: function () { resetSpinners: function () {
// Make that animnation is coordinated with user actions // Make that animnation is coordinated with user actions
var spinners = document.querySelectorAll('.umap-slideshow-toolbox .play .spinner'), const spinners = document.querySelectorAll('.umap-slideshow-toolbox .play .spinner')
el,
newOne let el
for (var i = 0; i < spinners.length; i++) { let newOne
for (let i = 0; i < spinners.length; i++) {
el = spinners[i] el = spinners[i]
newOne = el.cloneNode(true) newOne = el.cloneNode(true)
el.parentNode.replaceChild(newOne, el) el.parentNode.replaceChild(newOne, el)
@ -136,7 +140,7 @@ L.U.Slideshow = L.Class.extend({
}, },
renderToolbox: function (container) { renderToolbox: function (container) {
var box = L.DomUtil.create('ul', 'umap-slideshow-toolbox'), const box = L.DomUtil.create('ul', 'umap-slideshow-toolbox'),
play = L.DomUtil.create('li', 'play', box), play = L.DomUtil.create('li', 'play', box),
stop = L.DomUtil.create('li', 'stop', box), stop = L.DomUtil.create('li', 'stop', box),
prev = L.DomUtil.create('li', 'prev', box), prev = L.DomUtil.create('li', 'prev', box),
@ -146,7 +150,7 @@ L.U.Slideshow = L.Class.extend({
stop.title = L._('Stop slideshow') stop.title = L._('Stop slideshow')
next.title = L._('Zoom to the next') next.title = L._('Zoom to the next')
prev.title = L._('Zoom to the previous') prev.title = L._('Zoom to the previous')
var toggle = function () { const toggle = function () {
if (this._id) this.pause() if (this._id) this.pause()
else this.play() else this.play()
} }

View file

@ -9,19 +9,19 @@ L.U.TableEditor = L.Class.extend({
renderHeaders: function () { renderHeaders: function () {
this.header.innerHTML = '' this.header.innerHTML = ''
for (var i = 0; i < this.properties.length; i++) { for (let i = 0; i < this.properties.length; i++) {
this.renderHeader(this.properties[i]) this.renderHeader(this.properties[i])
} }
}, },
renderHeader: function (property) { renderHeader: function (property) {
var container = L.DomUtil.create('div', 'tcell', this.header), const container = L.DomUtil.create('div', 'tcell', this.header),
title = L.DomUtil.add('span', '', container, property), title = L.DomUtil.add('span', '', container, property),
del = L.DomUtil.create('i', 'umap-delete', container), del = L.DomUtil.create('i', 'umap-delete', container),
rename = L.DomUtil.create('i', 'umap-edit', container) rename = L.DomUtil.create('i', 'umap-edit', container)
del.title = L._('Delete this property on all the features') del.title = L._('Delete this property on all the features')
rename.title = L._('Rename this property on all the features') rename.title = L._('Rename this property on all the features')
var doDelete = function () { const doDelete = function () {
if ( if (
confirm( confirm(
L._('Are you sure you want to delete this property on all the features?') L._('Are you sure you want to delete this property on all the features?')
@ -35,8 +35,11 @@ L.U.TableEditor = L.Class.extend({
this.edit() this.edit()
} }
} }
var doRename = function () { const doRename = function () {
var newName = prompt(L._('Please enter the new name of this property'), property) const newName = prompt(
L._('Please enter the new name of this property'),
property
)
if (!newName || !this.validateName(newName)) return if (!newName || !this.validateName(newName)) return
this.datalayer.eachLayer((feature) => { this.datalayer.eachLayer((feature) => {
feature.renameProperty(property, newName) feature.renameProperty(property, newName)
@ -51,7 +54,7 @@ L.U.TableEditor = L.Class.extend({
}, },
renderRow: function (feature) { renderRow: function (feature) {
var builder = new L.U.FormBuilder(feature, this.field_properties, { const builder = new L.U.FormBuilder(feature, this.field_properties, {
id: 'umap-feature-properties_' + L.stamp(feature), id: 'umap-feature-properties_' + L.stamp(feature),
className: 'trow', className: 'trow',
callback: feature.resetTooltip, callback: feature.resetTooltip,
@ -66,7 +69,7 @@ L.U.TableEditor = L.Class.extend({
this.properties.splice(this.properties.indexOf('description'), 1) this.properties.splice(this.properties.indexOf('description'), 1)
this.properties.sort() this.properties.sort()
this.field_properties = [] this.field_properties = []
for (var i = 0; i < this.properties.length; i++) { for (let i = 0; i < this.properties.length; i++) {
this.field_properties.push([ this.field_properties.push([
'properties.' + this.properties[i], 'properties.' + this.properties[i],
{ wrapper: 'div', wrapperClass: 'tcell' }, { wrapper: 'div', wrapperClass: 'tcell' },
@ -90,24 +93,24 @@ L.U.TableEditor = L.Class.extend({
}, },
edit: function () { edit: function () {
var id = 'tableeditor:edit' const id = 'tableeditor:edit'
this.datalayer.map.fire('dataloading', { id: id }) this.datalayer.map.fire('dataloading', { id: id })
this.compileProperties() this.compileProperties()
this.renderHeaders() this.renderHeaders()
this.body.innerHTML = '' this.body.innerHTML = ''
this.datalayer.eachLayer(this.renderRow, this) this.datalayer.eachLayer(this.renderRow, this)
var addButton = L.DomUtil.create('li', 'add-property') const addButton = L.DomUtil.create('li', 'add-property')
L.DomUtil.create('i', 'umap-icon-16 umap-add', addButton) L.DomUtil.create('i', 'umap-icon-16 umap-add', addButton)
var label = L.DomUtil.create('span', '', addButton) const label = L.DomUtil.create('span', '', addButton)
label.textContent = label.title = L._('Add a new property') label.textContent = label.title = L._('Add a new property')
var addProperty = function () { const addProperty = function () {
var newName = prompt(L._('Please enter the name of the property')) const newName = prompt(L._('Please enter the name of the property'))
if (!newName || !this.validateName(newName)) return if (!newName || !this.validateName(newName)) return
this.datalayer.indexProperty(newName) this.datalayer.indexProperty(newName)
this.edit() this.edit()
} }
L.DomEvent.on(addButton, 'click', addProperty, this) L.DomEvent.on(addButton, 'click', addProperty, this)
var className = const className =
this.properties.length > 2 this.properties.length > 2
? 'umap-table-editor fullwidth dark' ? 'umap-table-editor fullwidth dark'
: 'umap-table-editor dark' : 'umap-table-editor dark'

View file

@ -31,17 +31,17 @@ L.U.UI = L.Evented.extend({
// by previous ui processes... // by previous ui processes...
this.resetPanelClassName() this.resetPanelClassName()
this._panel.innerHTML = '' this._panel.innerHTML = ''
var actionsContainer = L.DomUtil.create('ul', 'toolbox', this._panel) const actionsContainer = L.DomUtil.create('ul', 'toolbox', this._panel)
var body = L.DomUtil.create('div', 'body', this._panel) const body = L.DomUtil.create('div', 'body', this._panel)
if (e.data.html.nodeType && e.data.html.nodeType === 1) if (e.data.html.nodeType && e.data.html.nodeType === 1)
body.appendChild(e.data.html) body.appendChild(e.data.html)
else body.innerHTML = e.data.html else body.innerHTML = e.data.html
var closeLink = L.DomUtil.create('li', 'umap-close-link', actionsContainer) const closeLink = L.DomUtil.create('li', 'umap-close-link', actionsContainer)
L.DomUtil.add('i', 'umap-close-icon', closeLink) L.DomUtil.add('i', 'umap-close-icon', closeLink)
var label = L.DomUtil.create('span', '', closeLink) const label = L.DomUtil.create('span', '', closeLink)
label.title = label.textContent = L._('Close') label.title = label.textContent = L._('Close')
if (e.actions) { if (e.actions) {
for (var i = 0; i < e.actions.length; i++) { for (let i = 0; i < e.actions.length; i++) {
actionsContainer.appendChild(e.actions[i]) actionsContainer.appendChild(e.actions[i])
} }
} }
@ -75,17 +75,17 @@ L.U.UI = L.Evented.extend({
}, },
popAlert: function (e) { popAlert: function (e) {
var self = this const self = this
if (!e) { if (!e) {
if (this.ALERTS.length) e = this.ALERTS.pop() if (this.ALERTS.length) e = this.ALERTS.pop()
else return else return
} }
var timeoutID, let timeoutID
level_class = e.level && e.level == 'info' ? 'info' : 'error' const level_class = e.level && e.level == 'info' ? 'info' : 'error'
this._alert.innerHTML = '' this._alert.innerHTML = ''
L.DomUtil.addClass(this.parent, 'umap-alert') L.DomUtil.addClass(this.parent, 'umap-alert')
L.DomUtil.addClass(this._alert, level_class) L.DomUtil.addClass(this._alert, level_class)
var close = function () { function close() {
if (timeoutID !== this.ALERT_ID) { if (timeoutID !== this.ALERT_ID) {
return return
} // Another alert has been forced } // Another alert has been forced
@ -95,10 +95,10 @@ L.U.UI = L.Evented.extend({
if (timeoutID) window.clearTimeout(timeoutID) if (timeoutID) window.clearTimeout(timeoutID)
this.popAlert() this.popAlert()
} }
var closeLink = L.DomUtil.create('a', 'umap-close-link', this._alert) const closeLink = L.DomUtil.create('a', 'umap-close-link', this._alert)
closeLink.href = '#' closeLink.href = '#'
L.DomUtil.add('i', 'umap-close-icon', closeLink) L.DomUtil.add('i', 'umap-close-icon', closeLink)
var label = L.DomUtil.create('span', '', closeLink) const label = L.DomUtil.create('span', '', closeLink)
label.title = label.textContent = L._('Close') label.title = label.textContent = L._('Close')
L.DomEvent.on(closeLink, 'click', L.DomEvent.stop).on( L.DomEvent.on(closeLink, 'click', L.DomEvent.stop).on(
closeLink, closeLink,
@ -108,8 +108,8 @@ L.U.UI = L.Evented.extend({
) )
L.DomUtil.add('div', '', this._alert, e.content) L.DomUtil.add('div', '', this._alert, e.content)
if (e.actions) { if (e.actions) {
var action, el let action, el
for (var i = 0; i < e.actions.length; i++) { for (let i = 0; i < e.actions.length; i++) {
action = e.actions[i] action = e.actions[i]
el = L.DomUtil.element('a', { className: 'umap-action' }, this._alert) el = L.DomUtil.element('a', { className: 'umap-action' }, this._alert)
el.href = '#' el.href = '#'
@ -132,7 +132,7 @@ L.U.UI = L.Evented.extend({
tooltip: function (e) { tooltip: function (e) {
this.TOOLTIP_ID = Math.random() this.TOOLTIP_ID = Math.random()
var id = this.TOOLTIP_ID const id = this.TOOLTIP_ID
L.DomUtil.addClass(this.parent, 'umap-tooltip') L.DomUtil.addClass(this.parent, 'umap-tooltip')
if (e.anchor && e.position === 'top') this.anchorTooltipTop(e.anchor) if (e.anchor && e.position === 'top') this.anchorTooltipTop(e.anchor)
else if (e.anchor && e.position === 'left') this.anchorTooltipLeft(e.anchor) else if (e.anchor && e.position === 'left') this.anchorTooltipLeft(e.anchor)
@ -148,7 +148,7 @@ L.U.UI = L.Evented.extend({
anchorTooltipAbsolute: function () { anchorTooltipAbsolute: function () {
this._tooltip.className = '' this._tooltip.className = ''
var left = const left =
this.parent.offsetLeft + this.parent.offsetLeft +
this.parent.clientWidth / 2 - this.parent.clientWidth / 2 -
this._tooltip.clientWidth / 2, this._tooltip.clientWidth / 2,
@ -158,7 +158,7 @@ L.U.UI = L.Evented.extend({
anchorTooltipTop: function (el) { anchorTooltipTop: function (el) {
this._tooltip.className = 'tooltip-top' this._tooltip.className = 'tooltip-top'
var coords = this.getPosition(el) const coords = this.getPosition(el)
this.setTooltipPosition({ this.setTooltipPosition({
left: coords.left - 10, left: coords.left - 10,
bottom: this.getDocHeight() - coords.top + 11, bottom: this.getDocHeight() - coords.top + 11,
@ -167,7 +167,7 @@ L.U.UI = L.Evented.extend({
anchorTooltipLeft: function (el) { anchorTooltipLeft: function (el) {
this._tooltip.className = 'tooltip-left' this._tooltip.className = 'tooltip-left'
var coords = this.getPosition(el) const coords = this.getPosition(el)
this.setTooltipPosition({ this.setTooltipPosition({
top: coords.top, top: coords.top,
right: document.documentElement.offsetWidth - coords.left + 11, right: document.documentElement.offsetWidth - coords.left + 11,
@ -196,7 +196,7 @@ L.U.UI = L.Evented.extend({
}, },
getDocHeight: function () { getDocHeight: function () {
var D = document const D = document
return Math.max( return Math.max(
D.body.scrollHeight, D.body.scrollHeight,
D.documentElement.scrollHeight, D.documentElement.scrollHeight,

View file

@ -4,7 +4,7 @@ L.U.Xhr = L.Evented.extend({
}, },
_wrapper: function () { _wrapper: function () {
var wrapper let wrapper
if (window.XMLHttpRequest === undefined) { if (window.XMLHttpRequest === undefined) {
wrapper = () => { wrapper = () => {
try { try {
@ -24,11 +24,11 @@ L.U.Xhr = L.Evented.extend({
}, },
_ajax: function (settings) { _ajax: function (settings) {
var xhr = this._wrapper(), const xhr = this._wrapper(),
id = Math.random(), id = Math.random(),
self = this self = this
this.fire('dataloading', { id: id }) this.fire('dataloading', { id: id })
var loaded = () => { const loaded = () => {
self.fire('dataload', { id: id }) self.fire('dataload', { id: id })
} }
@ -53,7 +53,7 @@ L.U.Xhr = L.Evented.extend({
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest') xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest')
} }
if (settings.headers) { if (settings.headers) {
for (var name in settings.headers) { for (const name in settings.headers) {
xhr.setRequestHeader(name, settings.headers[name]) xhr.setRequestHeader(name, settings.headers[name])
} }
} }
@ -68,10 +68,10 @@ L.U.Xhr = L.Evented.extend({
level: 'error', level: 'error',
}) })
} else if (xhr.status === 412) { } else if (xhr.status === 412) {
var msg = L._( const msg = L._(
'Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.' 'Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.'
) )
var actions = [ const actions = [
{ {
label: L._('Save anyway'), label: L._('Save anyway'),
callback: function () { callback: function () {
@ -111,20 +111,20 @@ L.U.Xhr = L.Evented.extend({
// supports only JSON as response data type // supports only JSON as response data type
_json: function (verb, uri, options) { _json: function (verb, uri, options) {
var args = arguments, const args = arguments,
self = this self = this
var default_options = { const default_options = {
async: true, async: true,
callback: null, callback: null,
responseType: 'text', responseType: 'text',
data: null, data: null,
listen_form: null, // optional form to listen in default callback listen_form: null, // optional form to listen in default callback
} }
var settings = L.Util.extend({}, default_options, options) const settings = L.Util.extend({}, default_options, options)
if (verb === 'POST') { if (verb === 'POST') {
// find a way not to make this django specific // find a way not to make this django specific
var token = document.cookie.replace( const token = document.cookie.replace(
/(?:(?:^|.*;\s*)csrftoken\s*\=\s*([^;]*).*$)|^.*$/, /(?:(?:^|.*;\s*)csrftoken\s*\=\s*([^;]*).*$)|^.*$/,
'$1' '$1'
) )
@ -134,8 +134,8 @@ L.U.Xhr = L.Evented.extend({
} }
} }
var callback = function (responseText, response) { const callback = function (responseText, response) {
var data let data
try { try {
data = JSON.parse(responseText) data = JSON.parse(responseText)
} catch (err) { } catch (err) {
@ -180,8 +180,8 @@ L.U.Xhr = L.Evented.extend({
submit_form: function (form_id, options) { submit_form: function (form_id, options) {
if (typeof options === 'undefined') options = {} if (typeof options === 'undefined') options = {}
var form = L.DomUtil.get(form_id) const form = L.DomUtil.get(form_id)
var formData = new FormData(form) const formData = new FormData(form)
if (options.extraFormData) formData.append(options.extraFormData) if (options.extraFormData) formData.append(options.extraFormData)
options.data = formData options.data = formData
this.post(form.action, options) this.post(form.action, options)
@ -189,7 +189,7 @@ L.U.Xhr = L.Evented.extend({
}, },
listen_form: function (form_id, options) { listen_form: function (form_id, options) {
var form = L.DomUtil.get(form_id), const form = L.DomUtil.get(form_id),
self = this self = this
if (!form) return if (!form) return
L.DomEvent.on(form, 'submit', L.DomEvent.stopPropagation) L.DomEvent.on(form, 'submit', L.DomEvent.stopPropagation)
@ -200,7 +200,7 @@ L.U.Xhr = L.Evented.extend({
}, },
listen_link: function (link_id, options) { listen_link: function (link_id, options) {
var link = L.DomUtil.get(link_id), const link = L.DomUtil.get(link_id),
self = this self = this
if (link) { if (link) {
L.DomEvent.on(link, 'click', L.DomEvent.stop).on(link, 'click', () => { L.DomEvent.on(link, 'click', L.DomEvent.stop).on(link, 'click', () => {
@ -215,7 +215,7 @@ L.U.Xhr = L.Evented.extend({
default_callback: function (data, options) { default_callback: function (data, options) {
// default callback, to avoid boilerplate // default callback, to avoid boilerplate
if (data.redirect) { if (data.redirect) {
var newPath = data.redirect const newPath = data.redirect
if (window.location.pathname == newPath) if (window.location.pathname == newPath)
window.location.reload() // Keep the hash, so the current view window.location.reload() // Keep the hash, so the current view
else window.location = newPath else window.location = newPath
@ -225,8 +225,8 @@ L.U.Xhr = L.Evented.extend({
} else if (data.error) { } else if (data.error) {
this.ui.alert({ content: data.error, level: 'error' }) this.ui.alert({ content: data.error, level: 'error' })
} else if (data.html) { } else if (data.html) {
var ui_options = { data: data }, const ui_options = { data: data }
listen_options let listen_options
if (options.className) ui_options.className = options.className if (options.className) ui_options.className = options.className
this.ui.openPanel(ui_options) this.ui.openPanel(ui_options)
// To low boilerplate, if there is a form, listen it // To low boilerplate, if there is a form, listen it
@ -236,7 +236,7 @@ L.U.Xhr = L.Evented.extend({
this.listen_form(options.listen_form.id, listen_options) this.listen_form(options.listen_form.id, listen_options)
} }
if (options.listen_link) { if (options.listen_link) {
for (var i = 0, l = options.listen_link.length; i < l; i++) { for (let i = 0, l = options.listen_link.length; i < l; i++) {
// Listen link again // Listen link again
listen_options = L.Util.extend({}, options, options.listen_link[i].options) listen_options = L.Util.extend({}, options, options.listen_link[i].options)
this.listen_link(options.listen_link[i].id, listen_options) this.listen_link(options.listen_link[i].id, listen_options)
@ -251,13 +251,13 @@ L.U.Xhr = L.Evented.extend({
login: function (data, args) { login: function (data, args) {
// data.html: login form // data.html: login form
// args: args of the first _json call, to call again at process end // args: args of the first _json call, to call again at process end
var self = this const self = this
var proceed = () => { const proceed = () => {
self.ui.closePanel() self.ui.closePanel()
if (typeof args !== 'undefined') self._json.apply(self, args) if (typeof args !== 'undefined') self._json.apply(self, args)
else self.default_callback(data, {}) else self.default_callback(data, {})
} }
var ask_for_login = (data) => { const ask_for_login = (data) => {
self.ui.openPanel({ data: data, className: 'login-panel' }) self.ui.openPanel({ data: data, className: 'login-panel' })
self.listen_form('login_form', { self.listen_form('login_form', {
callback: function (data) { callback: function (data) {
@ -266,12 +266,12 @@ L.U.Xhr = L.Evented.extend({
}, },
}) })
// Auth links // Auth links
var links = document.getElementsByClassName('umap-login-popup') const links = document.getElementsByClassName('umap-login-popup')
Object.keys(links).forEach((el) => { Object.keys(links).forEach((el) => {
var link = links[el] const link = links[el]
L.DomEvent.on(link, 'click', L.DomEvent.stop).on(link, 'click', () => { L.DomEvent.on(link, 'click', L.DomEvent.stop).on(link, 'click', () => {
self.ui.closePanel() self.ui.closePanel()
var win = window.open(link.href) const win = window.open(link.href)
window.umap_proceed = () => { window.umap_proceed = () => {
proceed() proceed()
win.close() win.close()

View file

@ -1,3 +1,3 @@
var locale = {{ locale|safe }}; const locale = {{ locale|safe }}
L.registerLocale("{{ locale_code }}", locale); L.registerLocale("{{ locale_code }}", locale)
L.setLocale("{{ locale_code }}"); L.setLocale("{{ locale_code }}")