OpenLayers OpenLayers

Ticket #1649: patch-1649-r7658-D0.diff

File patch-1649-r7658-D0.diff, 8.3 kB (added by elemoine, 5 months ago)
  • tests/Protocol.html

    old new  
    44  <script type="text/javascript"> 
    55 
    66    function test_initialize(t) { 
    7         t.plan(2); 
     7        t.plan(3); 
    88        var options = {}; 
    99        var protocol = new OpenLayers.Protocol(options); 
    1010 
    1111        t.ok(protocol instanceof OpenLayers.Protocol, 
    1212             "new OpenLayers.Protocol returns object" ); 
    1313        t.eq(protocol.options, options, "constructor sets this.options"); 
     14        t.eq(protocol.autoDestroy, true, "constructor does not modify this.autoDestroy"); 
    1415    } 
    1516     
    1617    function test_destroy(t) { 
  • tests/Strategy.html

    old new  
    44  <script type="text/javascript"> 
    55 
    66    function test_initialize(t) { 
    7         t.plan(2); 
     7        t.plan(5); 
    88        var options = {}; 
    99        var strategy = new OpenLayers.Strategy(options); 
    1010 
    1111        t.ok(strategy instanceof OpenLayers.Strategy, 
    1212             "new OpenLayers.Strategy returns object" ); 
    1313        t.eq(strategy.options, options, "constructor sets this.options"); 
     14        t.eq(strategy.active, false, "constructor sets this.active to false"); 
     15        t.eq(strategy.autoActivate, true, "constructor does not modify this.autoActivate"); 
     16        t.eq(strategy.autoDestroy, true, "constructor does not modify this.autoDestroy"); 
    1417    } 
    1518 
    1619    function test_activate(t) { 
     
    4649        t.eq(strategy.options, null, "destroy nullify protocol.options"); 
    4750    } 
    4851 
     52    function test_activate(t) { 
     53        t.plan(4); 
     54        var strategy = new OpenLayers.Strategy({ 
     55            layer: 'foo' 
     56        }); 
     57 
     58        var ret; 
     59        ret = strategy.activate(); 
     60 
     61        t.eq(strategy.active, true, "activate sets this.active to true on first call"); 
     62        t.eq(ret, true, "activate returns true on first call"); 
     63 
     64        ret = strategy.activate(); 
     65 
     66        t.eq(strategy.active, true, "activate does not modify this.active on second call"); 
     67        t.eq(ret, false, "activate returns false on second call"); 
     68    } 
     69 
     70    function test_deactivate(t) { 
     71        t.plan(4); 
     72        var strategy = new OpenLayers.Strategy({ 
     73            layer: 'foo' 
     74        }); 
     75        strategy.activate(); 
     76 
     77        var ret; 
     78        ret = strategy.deactivate(); 
     79 
     80        t.eq(strategy.active, false, "deactivate sets this.active to false on first call"); 
     81        t.eq(ret, true, "deactivate returns true on first call"); 
     82 
     83        ret = strategy.deactivate(); 
     84 
     85        t.eq(strategy.active, false, "deactivate does not modify this.active on second call"); 
     86        t.eq(ret, false, "deactivate returns false on second call"); 
     87    } 
     88 
    4989  </script> 
    5090</head> 
    5191<body> 
  • lib/OpenLayers/Strategy/Fixed.js

    old new  
    4141     * to the layer. 
    4242     */ 
    4343    activate: function() { 
    44         OpenLayers.Strategy.prototype.activate.apply(this, arguments); 
    45         this.layer.protocol.read({ 
    46             callback: this.merge, 
    47             scope: this 
    48         }); 
     44        if(OpenLayers.Strategy.prototype.activate.apply(this, arguments)) { 
     45            this.layer.protocol.read({ 
     46                callback: this.merge, 
     47                scope: this 
     48            }); 
     49        } 
    4950    }, 
    5051 
    5152    /** 
  • lib/OpenLayers/Layer/Vector.js

    old new  
    229229     */ 
    230230    destroy: function() { 
    231231        if (this.strategies) { 
    232             for(var i=0, len=this.strategies.length; i<len; i++) { 
    233                 this.strategies[i].destroy(); 
     232            var strategy, i, len; 
     233            for(i=0, len=this.strategies.length; i<len; i++) { 
     234                strategy = this.strategies[i]; 
     235                if(strategy.autoDestroy) { 
     236                    strategy.destroy(); 
     237                } 
    234238            } 
    235239            this.strategies = null; 
    236240        } 
    237241        if (this.protocol) { 
    238             this.protocol.destroy(); 
     242            if(this.protocol.autoDestroy) { 
     243                this.protocol.destroy(); 
     244            } 
    239245            this.protocol = null; 
    240246        } 
    241247        this.destroyFeatures(); 
     
    296302            this.renderer.setSize(this.map.getSize()); 
    297303        } 
    298304        if(this.strategies) { 
    299             for(var i=0, len=this.strategies.length; i<len; i++) { 
    300                 this.strategies[i].activate(); 
     305            var strategy, i, len; 
     306            for(i=0, len=this.strategies.length; i<len; i++) { 
     307                strategy = this.strategies[i]; 
     308                if(strategy.autoActivate) { 
     309                    strategy.activate(); 
     310                } 
    301311            } 
    302312        } 
    303313    }, 
     314 
     315    /** 
     316     * Method: removeMap 
     317     * The layer has been removed from the map. 
     318     * 
     319     * Parameters: 
     320     * map - {<OpenLayers.Map>} 
     321     */ 
     322    removeMap: function(map) { 
     323        if(this.strategies) { 
     324            var strategy, i, len; 
     325            for(i=0, len=this.strategies.length; i<len; i++) { 
     326                strategy = this.strategies[i]; 
     327                if(strategy.autoActivate) { 
     328                    strategy.deactivate(); 
     329                } 
     330            } 
     331        } 
     332    }, 
    304333     
    305334    /** 
    306335     * Method: onMapResize 
  • lib/OpenLayers/Protocol.js

    old new  
    2020     * Any options sent to the constructor. 
    2121     */ 
    2222    options: null, 
    23      
     23 
    2424    /** 
     25     * Property: autoDestroy 
     26     * {Boolean} The creator of the protocol can set autoDestroy to false 
     27     *      to fully control when the protocol is destroyed. Defaults to 
     28     *      true. 
     29     */ 
     30    autoDestroy: true, 
     31    
     32    /** 
    2533     * Constructor: OpenLayers.Protocol 
    2634     * Abstract class for vector protocols.  Create instances of a subclass. 
    2735     * 
  • lib/OpenLayers/Strategy.js

    old new  
    2121     */ 
    2222    options: null, 
    2323 
     24    /**  
     25     * Property: active  
     26     * {Boolean} The control is active. 
     27     */ 
     28    active: null, 
     29 
    2430    /** 
     31     * Property: autoActivate 
     32     * {Boolean} The creator of the strategy can set autoActivate to false 
     33     *      to fully control when the protocol is activated and deactivated. 
     34     *      Defaults to true. 
     35     */ 
     36    autoActivate: true, 
     37 
     38    /** 
     39     * Property: autoDestroy 
     40     * {Boolean} The creator of the strategy can set autoDestroy to false 
     41     *      to fully control when the strategy is destroyed. Defaults to 
     42     *      true. 
     43     */ 
     44    autoDestroy: true, 
     45 
     46    /** 
    2547     * Constructor: OpenLayers.Strategy 
    2648     * Abstract class for vector strategies.  Create instances of a subclass. 
    2749     * 
     
    3254    initialize: function(options) { 
    3355        OpenLayers.Util.extend(this, options); 
    3456        this.options = options; 
     57        this.active = false; 
    3558    }, 
    3659     
    3760    /** 
     
    5780    /** 
    5881     * Method: activate 
    5982     * Activate the strategy.  Register any listeners, do appropriate setup. 
     83     * 
     84     * Returns: 
     85     * {Boolean} True if the strategy was effectively deactivated and false 
     86     *     if it was already activated. 
    6087     */ 
    6188    activate: function() { 
     89        if (!this.active) { 
     90            this.active = true; 
     91            return true; 
     92        } 
     93        return false; 
    6294    }, 
    6395     
    6496    /** 
    6597     * Method: deactivate 
    6698     * Deactivate the strategy.  Unregister any listeners, do appropriate 
    6799     *     tear-down. 
     100     * 
     101     * Returns: 
     102     * {Boolean} True if the strategy was effectively activated and false 
     103     *     if it was already deactivated. 
    68104     */ 
    69105    deactivate: function() { 
     106        if (this.active) { 
     107            this.active = false; 
     108            return true; 
     109        } 
     110        return false; 
    70111    }, 
    71112    
    72113    CLASS_NAME: "OpenLayers.Strategy"