fix select-one toggle in layer chooser for desktop browsers

This commit is contained in:
Stefan Breunig 2013-03-10 14:16:33 +01:00
parent dbdf98ddfb
commit 70211b700c

View File

@ -54,18 +54,34 @@ window.setupLayerChooserSelectOne = function() {
$('.leaflet-control-layers-overlays').on('click taphold', 'label', function(e) { $('.leaflet-control-layers-overlays').on('click taphold', 'label', function(e) {
if(!e) return; if(!e) return;
if(!(e.metaKey || e.ctrlKey || e.shiftKey || e.altKey || e.type === 'taphold')) 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; var checkSize = $('.leaflet-control-layers-overlays input:checked').length;
if((isChecked && checkSize === 1) || checkSize === 0) { if((isChecked && checkSize === 1) || checkSize === 0) {
// if nothing is selected or the users long-clicks the only // if nothing is selected or the users long-clicks the only
// selected element, assume all boxes should be checked again // 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 { } else {
// uncheck all // uncheck all
$('.leaflet-control-layers-overlays input:checked').click(); var keep = $.trim($(e.target).text());
$(this).find('input').click(); $.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();
}); });
} }