Add a 'sortLayers' option to L.Control.Layers (#4711)

* Add a 'sortLayers' option to L.Control.Layers

* Add a sortFunction option to L.Control.Layers

* Fix default sort function; modify test
This commit is contained in:
Iván Sánchez Ortega
2016-11-17 12:52:29 +01:00
committed by Per Liedman
parent 0be6ee89da
commit 4e979514c3
2 changed files with 105 additions and 1 deletions

View File

@ -140,4 +140,87 @@ describe("Control.Layers", function () {
});
});
describe("sortLayers", function () {
beforeEach(function () {
map.setView([0, 0], 14);
});
it("keeps original order by default", function () {
var baseLayerOne = L.tileLayer('').addTo(map);
var baseLayerTwo = L.tileLayer('').addTo(map);
var markerC = L.marker([0, 2]).addTo(map);
var markerB = L.marker([0, 1]).addTo(map);
var markerA = L.marker([0, 0]).addTo(map);
var layersCtrl = L.control.layers({
'Base One': baseLayerOne,
'Base Two': baseLayerTwo
}, {
'Marker C': markerC,
'Marker B': markerB,
'Marker A': markerA
}).addTo(map);
var elems = map.getContainer().querySelectorAll('div.leaflet-control-layers label span');
expect(elems[0].innerHTML.trim()).to.be.equal('Base One');
expect(elems[1].innerHTML.trim()).to.be.equal('Base Two');
expect(elems[2].innerHTML.trim()).to.be.equal('Marker C');
expect(elems[3].innerHTML.trim()).to.be.equal('Marker B');
expect(elems[4].innerHTML.trim()).to.be.equal('Marker A');
});
it("sorts alphabetically if no function is specified", function () {
var baseLayerOne = L.tileLayer('').addTo(map);
var baseLayerTwo = L.tileLayer('').addTo(map);
var markerA = L.marker([0, 0]).addTo(map);
var markerB = L.marker([0, 1]).addTo(map);
var markerC = L.marker([0, 2]).addTo(map);
var layersCtrl = L.control.layers({
'Base Two': baseLayerTwo,
'Base One': baseLayerOne
}, {
'Marker A': markerA,
'Marker C': markerC,
'Marker B': markerB
}, {
sortLayers: true
}).addTo(map);
var elems = map.getContainer().querySelectorAll('div.leaflet-control-layers label span');
expect(elems[0].innerHTML.trim()).to.be.equal('Base One');
expect(elems[1].innerHTML.trim()).to.be.equal('Base Two');
expect(elems[2].innerHTML.trim()).to.be.equal('Marker A');
expect(elems[3].innerHTML.trim()).to.be.equal('Marker B');
expect(elems[4].innerHTML.trim()).to.be.equal('Marker C');
});
it("uses the compare function to sort layers", function () {
var baseLayerOne = L.tileLayer('', {customOption: 999}).addTo(map);
var baseLayerTwo = L.tileLayer('', {customOption: 998}).addTo(map);
var markerA = L.marker([0, 0], {customOption: 102}).addTo(map);
var markerB = L.marker([0, 1], {customOption: 100}).addTo(map);
var markerC = L.marker([0, 2], {customOption: 101}).addTo(map);
var layersCtrl = L.control.layers({
'Base One': baseLayerOne,
'Base Two': baseLayerTwo
}, {
'Marker A': markerA,
'Marker B': markerB,
'Marker C': markerC
}, {
sortLayers: true,
sortFunction: function (a, b) { return a.options.customOption - b.options.customOption; }
}).addTo(map);
var elems = map.getContainer().querySelectorAll('div.leaflet-control-layers label span');
expect(elems[0].innerHTML.trim()).to.be.equal('Base Two');
expect(elems[1].innerHTML.trim()).to.be.equal('Base One');
expect(elems[2].innerHTML.trim()).to.be.equal('Marker B');
expect(elems[3].innerHTML.trim()).to.be.equal('Marker C');
expect(elems[4].innerHTML.trim()).to.be.equal('Marker A');
});
});
});