diff --git a/src/control/Control.Layers.js b/src/control/Control.Layers.js index 6fc2cbcb..99dfffab 100644 --- a/src/control/Control.Layers.js +++ b/src/control/Control.Layers.js @@ -29,43 +29,35 @@ L.Control.Layers = L.Control.extend({ this._initLayout(); this._update(); - map - .on('layeradd', this._onLayerChange, this) - .on('layerremove', this._onLayerChange, this); + map.on('layeradd layerremove', this._onLayerChange, this); return this._container; }, onRemove: function (map) { - map - .off('layeradd', this._onLayerChange) - .off('layerremove', this._onLayerChange); + map.off('layeradd layerremove', this._onLayerChange, this); }, addBaseLayer: function (layer, name) { this._addLayer(layer, name); - this._update(); - return this; + return this._update(); }, addOverlay: function (layer, name) { this._addLayer(layer, name, true); - this._update(); - return this; + return this._update(); }, removeLayer: function (layer) { - var id = L.stamp(layer); - delete this._layers[id]; - this._update(); - return this; + delete this._layers[L.stamp(layer)]; + return this._update(); }, _initLayout: function () { var className = 'leaflet-control-layers', container = this._container = L.DomUtil.create('div', className); - //Makes this work on IE10 Touch devices by stopping it from firing a mouseout event when the touch is released + // makes this work on IE touch devices by stopping it from firing a mouseout event when the touch is released container.setAttribute('aria-haspopup', true); if (!L.Browser.touch) { @@ -84,6 +76,7 @@ L.Control.Layers = L.Control.extend({ .on(container, 'mouseover', this._expand, this) .on(container, 'mouseout', this._collapse, this); } + var link = this._layersLink = L.DomUtil.create('a', className + '-toggle', container); link.href = '#'; link.title = 'Layers'; @@ -92,11 +85,11 @@ L.Control.Layers = L.Control.extend({ L.DomEvent .on(link, 'click', L.DomEvent.stop) .on(link, 'click', this._expand, this); - } - else { + } else { L.DomEvent.on(link, 'focus', this._expand, this); } - //Work around for Firefox android issue https://github.com/Leaflet/Leaflet/issues/2033 + + // work around for Firefox Android issue https://github.com/Leaflet/Leaflet/issues/2033 L.DomEvent.on(form, 'click', function () { setTimeout(L.bind(this._onInputClick, this), 0); }, this); @@ -130,16 +123,12 @@ L.Control.Layers = L.Control.extend({ }, _update: function () { - if (!this._container) { - return; - } + if (!this._container) { return; } this._baseLayersList.innerHTML = ''; this._overlaysList.innerHTML = ''; - var baseLayersPresent = false, - overlaysPresent = false, - i, obj; + var baseLayersPresent, overlaysPresent, i, obj; for (i in this._layers) { obj = this._layers[i]; @@ -149,6 +138,8 @@ L.Control.Layers = L.Control.extend({ } this._separator.style.display = overlaysPresent && baseLayersPresent ? '' : 'none'; + + return this; }, _onLayerChange: function (e) { @@ -172,11 +163,8 @@ L.Control.Layers = L.Control.extend({ // IE7 bugs out if you create a radio dynamically, so you have to do it this hacky way (see http://bit.ly/PqYLBe) _createRadioElement: function (name, checked) { - var radioHtml = ''; var radioFragment = document.createElement('div'); radioFragment.innerHTML = radioHtml; @@ -186,8 +174,8 @@ L.Control.Layers = L.Control.extend({ _addItem: function (obj) { var label = document.createElement('label'), - input, - checked = this._map.hasLayer(obj.layer); + checked = this._map.hasLayer(obj.layer), + input; if (obj.overlay) { input = document.createElement('input'); @@ -215,21 +203,21 @@ L.Control.Layers = L.Control.extend({ }, _onInputClick: function () { - var i, input, obj, - inputs = this._form.getElementsByTagName('input'), - inputsLen = inputs.length; + var inputs = this._form.getElementsByTagName('input'), + input, layer, hasLayer; this._handlingClick = true; - for (i = 0; i < inputsLen; i++) { + for (var i = 0, len = inputs.length; i < len; i++) { input = inputs[i]; - obj = this._layers[input.layerId]; + layer = this._layers[input.layerId].layer; + hasLayer = this._map.hasLayer(layer); - if (input.checked && !this._map.hasLayer(obj.layer)) { - this._map.addLayer(obj.layer); + if (input.checked && !hasLayer) { + this._map.addLayer(layer); - } else if (!input.checked && this._map.hasLayer(obj.layer)) { - this._map.removeLayer(obj.layer); + } else if (!input.checked && hasLayer) { + this._map.removeLayer(layer); } }