fix dirty flags when re-ordering layers

The index of the top layer in the view starts with zero, while the rank of
the layers count backwards. Thus moving the second-last to the last
position should set the dirty flag of rank 0 and 1.
Instead the former implementation set the dirty flag for layers >= 19 in
a list of 20 layers - resulting in the wrong layers saved.

Fixes #375
This commit is contained in:
Joachim Schleicher 2023-12-30 21:22:22 +01:00
parent 0a099b6ee1
commit 70e5dbe7dd

View file

@ -632,12 +632,14 @@ L.U.DataLayersControl = L.Control.extend({
function (e) { function (e) {
const 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(layer.getRank(), other.getRank()),
maxIndex = Math.max(layer.getRank(), other.getRank())
if (e.finalIndex === 0) layer.bringToTop() if (e.finalIndex === 0) layer.bringToTop()
else if (e.finalIndex > e.initialIndex) layer.insertBefore(other) else if (e.finalIndex > e.initialIndex) layer.insertBefore(other)
else layer.insertAfter(other) else layer.insertAfter(other)
this.map.eachDataLayerReverse((datalayer) => { this.map.eachDataLayerReverse((datalayer) => {
if (datalayer.getRank() >= minIndex) datalayer.isDirty = true if (datalayer.getRank() >= minIndex && datalayer.getRank() <= maxIndex)
datalayer.isDirty = true
}) })
this.map.indexDatalayers() this.map.indexDatalayers()
}, },