OpenLayers OpenLayers

Ticket #577: layerswitcherMem.3.patch

File layerswitcherMem.3.patch, 6.1 kB (added by euzuro, 2 years ago)

one little tiny but was leftover from original. this.checked -> this.inputElem.checked

  • lib/OpenLayers/Control/LayerSwitcher.js

    old new  
    2525    baseLayersDiv: null, 
    2626 
    2727    /** @type Array */ 
    28     baseLayerInputs: null, 
     28    baseLayers: null, 
    2929     
    3030     
    3131    /** @type DOMElement */ 
     
    3535    dataLayersDiv: null, 
    3636 
    3737    /** @type Array */ 
    38     dataLayerInputs: null, 
     38    dataLayers: null, 
    3939 
    4040 
    4141    /** @type DOMElement */ 
     
    8585        return this.div; 
    8686    }, 
    8787 
     88    /** user specifies either "base" or "data". we then clear all the  
     89     *    corresponding listeners, the div, and reinitialize a new array. 
     90     *  
     91     * @private 
     92     *  
     93     * @param {String} layersType Ei 
     94     */ 
     95    clearLayersArray: function(layersType) { 
     96        var layers = this[layersType + "Layers"]; 
     97        if (layers) { 
     98            for(var i=0; i < layers.length; i++) { 
     99                var layer = layers[i]; 
     100                OpenLayers.Event.stopObservingElement(layer.inputElem); 
     101                OpenLayers.Event.stopObservingElement(layer.labelSpan); 
     102            } 
     103        } 
     104        this[layersType + "LayersDiv"].innerHTML = ""; 
     105        this[layersType + "Layers"] = new Array(); 
     106    }, 
     107 
     108 
    88109    /** Goes through and takes the current state of the Map and rebuilds the 
    89110     *   control to display that state. Groups base layers into a radio-button 
    90111     *   group and lists each data layer with a checkbox. 
     
    95116    redraw: function() { 
    96117 
    97118        //clear out previous layers  
    98         this.baseLayersDiv.innerHTML = ""
    99         this.baseLayerInputs = new Array(); 
     119        this.clearLayersArray("base")
     120        this.clearLayersArray("data"); 
    100121         
    101         this.dataLayersDiv.innerHTML = ""; 
    102         this.dataLayerInputs = new Array(); 
    103          
    104122        var containsOverlays = false; 
    105123         
    106124        var layers = this.map.layers.slice(); 
     
    128146                inputElem.value = layer.name; 
    129147                inputElem.checked = checked; 
    130148                inputElem.defaultChecked = checked; 
    131                 inputElem.layer = layer; 
    132                 inputElem.control = this; 
    133149 
    134150                if (!baseLayer && !layer.inRange) { 
    135151                    inputElem.disabled = true; 
    136152                } 
     153                var context = { 
     154                    'inputElem': inputElem, 
     155                    'layer': layer, 
     156                    'layerSwitcher': this 
     157                } 
    137158                OpenLayers.Event.observe(inputElem, "mouseup",  
    138                               this.onInputClick.bindAsEventListener(inputElem)); 
     159                              this.onInputClick.bindAsEventListener(context)); 
    139160                 
    140161                // create span 
    141162                var labelSpan = document.createElement("span"); 
     
    143164                    labelSpan.style.color = "gray"; 
    144165                } 
    145166                labelSpan.innerHTML = layer.name; 
    146                 labelSpan.style.verticalAlign = (baseLayer) ? "bottom" : "baseline"; 
     167                labelSpan.style.verticalAlign = (baseLayer) ? "bottom"  
     168                                                            : "baseline"; 
    147169                OpenLayers.Event.observe(labelSpan, "click",  
    148                               this.onInputClick.bindAsEventListener(inputElem)); 
     170                              this.onInputClick.bindAsEventListener(context)); 
    149171                // create line break 
    150172                var br = document.createElement("br"); 
    151173     
    152174                 
    153                 var groupArray = (baseLayer) ? this.baseLayerInputs 
    154                                              : this.dataLayerInputs; 
    155                 groupArray.push(inputElem); 
     175                var groupArray = (baseLayer) ? this.baseLayers 
     176                                             : this.dataLayers; 
     177                groupArray.push({ 
     178                    'layer': layer, 
     179                    'inputElem': inputElem, 
     180                    'labelSpan': labelSpan 
     181                }); 
    156182                                                      
    157183     
    158184                var groupDiv = (baseLayer) ? this.baseLayersDiv 
     
    173199     *  
    174200     * @private 
    175201     *  
     202     * @context  
     203     *      {DOMElement} inputElem 
     204     *      {OpenLayers.Control.LayerSwitcher} layerSwitcher 
     205     *      {OpenLayers.Layer} layer 
     206     *  
    176207     * @param {Event} e 
    177208     */ 
    178209 
    179210    onInputClick: function(e) { 
    180         if (!this.disabled) { 
    181             if (this.type == "radio") { 
    182                 this.checked = true; 
     211 
     212        if (!this.inputElem.disabled) { 
     213            if (this.inputElem.type == "radio") { 
     214                this.inputElem.checked = true; 
    183215                this.layer.map.setBaseLayer(this.layer, true); 
    184216                this.layer.map.events.triggerEvent("changebaselayer"); 
    185217            } else { 
    186                 this.checked = !this.checked; 
    187                 this.control.updateMap(); 
     218                this.inputElem.checked = !this.inputElem.checked; 
     219                this.layerSwitcher.updateMap(); 
    188220            } 
    189221        } 
    190222        OpenLayers.Event.stop(e); 
     
    211243    updateMap: function() { 
    212244 
    213245        // set the newly selected base layer         
    214         for(var i=0; i < this.baseLayerInputs.length; i++) { 
    215             var input = this.baseLayerInputs[i];    
    216             if (input.checked) { 
    217                 this.map.setBaseLayer(input.layer, false); 
     246        for(var i=0; i < this.baseLayers.length; i++) { 
     247            var layerEntry = this.baseLayers[i]; 
     248            if (layerEntry.inputElem.checked) { 
     249                this.map.setBaseLayer(layerEntry.layer, false); 
    218250            } 
    219251        } 
    220252 
    221253        // set the correct visibilities for the overlays 
    222         for(var i=0; i < this.dataLayerInputs.length; i++) { 
    223             var input = this.dataLayerInputs[i];    
    224             input.layer.setVisibility(input.checked, true); 
     254        for(var i=0; i < this.dataLayers.length; i++) { 
     255            var layerEntry = this.dataLayers[i];    
     256            layerEntry.layer.setVisibility(layerEntry.inputElem.checked, true); 
    225257        } 
    226258 
    227259    },