fix select-one toggle in layer chooser for desktop browsers
This commit is contained in:
parent
dbdf98ddfb
commit
70211b700c
24
code/boot.js
24
code/boot.js
@ -54,18 +54,34 @@ window.setupLayerChooserSelectOne = function() {
|
||||
$('.leaflet-control-layers-overlays').on('click taphold', 'label', function(e) {
|
||||
if(!e) return;
|
||||
if(!(e.metaKey || e.ctrlKey || e.shiftKey || e.altKey || e.type === 'taphold')) return;
|
||||
var m = window.map;
|
||||
|
||||
var isChecked = $(this).find('input').is(':checked');
|
||||
var add = function(layer) {
|
||||
if(!m.hasLayer(layer.layer)) m.addLayer(layer.layer);
|
||||
};
|
||||
var rem = function(layer) {
|
||||
if(m.hasLayer(layer.layer)) m.removeLayer(layer.layer);
|
||||
};
|
||||
|
||||
var isChecked = $(e.target).find('input').is(':checked');
|
||||
var checkSize = $('.leaflet-control-layers-overlays input:checked').length;
|
||||
if((isChecked && checkSize === 1) || checkSize === 0) {
|
||||
// if nothing is selected or the users long-clicks the only
|
||||
// selected element, assume all boxes should be checked again
|
||||
$('.leaflet-control-layers-overlays input:not(:checked)').click();
|
||||
$.each(window.layerChooser._layers, function(ind, layer) {
|
||||
if(!layer.overlay) return true;
|
||||
add(layer);
|
||||
});
|
||||
} else {
|
||||
// uncheck all
|
||||
$('.leaflet-control-layers-overlays input:checked').click();
|
||||
$(this).find('input').click();
|
||||
var keep = $.trim($(e.target).text());
|
||||
$.each(window.layerChooser._layers, function(ind, layer) {
|
||||
if(layer.overlay !== true) return true;
|
||||
if(layer.name === keep) { add(layer); return true; }
|
||||
rem(layer);
|
||||
});
|
||||
}
|
||||
e.preventDefault();
|
||||
});
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user