diff --git a/code/boot.js b/code/boot.js index cc2b5020..1d12689b 100644 --- a/code/boot.js +++ b/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(); }); }