From a2789864427e3809a453d17b26323af912740730 Mon Sep 17 00:00:00 2001 From: ahocevar Date: Thu, 2 Feb 2012 00:02:51 +0100 Subject: [PATCH] No additional events registered on the LayerSwitcher. With the buttonclick event, we can also handle clicks on layer names and checkboxes/radiobuttons when they get the olButton class. To make this work on iOS, we have to add a check in buttonclick.js to handle the case where the event occurred on a text element (nodeType === 3). --- lib/OpenLayers/Control/LayerSwitcher.js | 93 +++++++------------------ lib/OpenLayers/Events/buttonclick.js | 2 +- 2 files changed, 26 insertions(+), 69 deletions(-) diff --git a/lib/OpenLayers/Control/LayerSwitcher.js b/lib/OpenLayers/Control/LayerSwitcher.js index 2b5d3e9bac..a0e480e385 100644 --- a/lib/OpenLayers/Control/LayerSwitcher.js +++ b/lib/OpenLayers/Control/LayerSwitcher.js @@ -197,11 +197,25 @@ OpenLayers.Control.LayerSwitcher = * evt - {Event} */ onButtonClick: function(evt) { - if (evt.buttonElement === this.minimizeDiv) { + var button = evt.buttonElement; + if (button === this.minimizeDiv) { this.minimizeControl(); - } else if (evt.buttonElement === this.maximizeDiv) { + } else if (button === this.maximizeDiv) { this.maximizeControl(); - }; + } else if (button._layerSwitcher === this.id) { + if (button["for"]) { + button = document.getElementById(button["for"]); + } + if (!button.disabled) { + if (button.type == "radio") { + button.checked = true; + this.map.setBaseLayer(this.map.getLayer(button._layer)); + } else { + button.checked = !button.checked; + this.updateMap(); + } + } + } }, /** @@ -213,14 +227,6 @@ OpenLayers.Control.LayerSwitcher = * layersType - {String} */ clearLayersArray: function(layersType) { - var layers = this[layersType + "Layers"]; - if (layers) { - for(var i=0, len=layers.length; i} - * layer - {} - */ - - onInputClick: function(e) { - - if (!this.inputElem.disabled) { - if (this.inputElem.type == "radio") { - this.inputElem.checked = true; - this.layer.map.setBaseLayer(this.layer); - } else { - this.inputElem.checked = !this.inputElem.checked; - this.layerSwitcher.updateMap(); - } - } - OpenLayers.Event.stop(e); - }, - - /** - * Method: onLayerClick - * Need to update the map accordingly whenever user clicks in either of - * the layers. - * - * Parameters: - * e - {Event} - */ - onLayerClick: function(e) { - this.updateMap(); - }, - - /** * Method: updateMap * Cycles through the loaded data and base layer input arrays and makes diff --git a/lib/OpenLayers/Events/buttonclick.js b/lib/OpenLayers/Events/buttonclick.js index 1412833920..351248bf0c 100644 --- a/lib/OpenLayers/Events/buttonclick.js +++ b/lib/OpenLayers/Events/buttonclick.js @@ -108,7 +108,7 @@ OpenLayers.Events.buttonclick = OpenLayers.Class({ var propagate = true, element = OpenLayers.Event.element(evt); if (element && (OpenLayers.Event.isLeftClick(evt) || !~evt.type.indexOf("mouse"))) { - if (OpenLayers.Element.hasClass(element, "olAlphaImg")) { + if (element.nodeType === 3 || OpenLayers.Element.hasClass(element, "olAlphaImg")) { element = element.parentNode; } if (OpenLayers.Element.hasClass(element, "olButton")) {