OpenLayers OpenLayers

Ticket #1535: patch-1535-r7051-A0.diff

File patch-1535-r7051-A0.diff, 5.7 kB (added by elemoine, 4 months ago)
  • tests/Layer/Vector.html

    old new  
    6767    } 
    6868 
    6969    function test_Layer_Vector_removeFeatures(t) { 
    70         t.plan(3); 
     70        t.plan(6); 
    7171     
    7272        var layer = new OpenLayers.Layer.Vector(name); 
    7373 
     
    7575        var pointFeature1 = new OpenLayers.Feature.Vector(layer, point1); 
    7676        var point2 = new OpenLayers.Geometry.Point(-111.14, 45.78); 
    7777        var pointFeature2 = new OpenLayers.Feature.Vector(layer, point2); 
    78          
     78       
    7979        layer.addFeatures([pointFeature1, pointFeature2]); 
    8080        var features = layer.removeFeatures([pointFeature1]); 
    8181         
     
    8888         
    8989        t.ok(layer.features.length == 0, 
    9090             "OpenLayers.Layer.Vector.removeFeatures(layer.features) removes all feature from the features array"); 
    91     } 
     91 
     92        // 3 tests 
     93        layer.events.register('beforefeatureremoved', null, function(obj) { 
     94            t.ok(pointFeature1 == obj.feature, 
     95                 "OpenLayers.Layer.Vector.removeFeatures triggers beforefeatureremoved with correct feature passed to callback"); 
     96        }); 
     97        layer.events.register('featureremoved', null, function(obj) { 
     98            t.ok(pointFeature1 == obj.feature, 
     99                 "OpenLayers.Layer.Vector.removeFeatures triggers featureremoved with correct feature passed to callback"); 
     100        }); 
     101        layer.events.register('featuresremoved', null, function(obj) { 
     102            t.ok(pointFeature1 == obj.features[0], 
     103                 "OpenLayers.Layer.Vector.removeFeatures triggers featuresremoved with correct features passed to callback"); 
     104        }); 
     105        layer.addFeatures([pointFeature1]); 
     106        layer.removeFeatures([pointFeature1]); 
     107 
     108        // 0 test 
     109        layer.events.register('beforefeatureremoved', null, function(obj) { 
     110            t.fail("OpenLayers.Layer.Vector.removeFeatures triggers beforefeatureremoved while it must not"); 
     111        }); 
     112        layer.events.register('featureremoved', null, function(obj) { 
     113            t.fail("OpenLayers.Layer.Vector.removeFeatures triggers featureremoved while it must not"); 
     114        }); 
     115        layer.events.register('featuresremoved', null, function(obj) { 
     116            t.fail("OpenLayers.Layer.Vector.removeFeatures triggers featuresremoved while it must not"); 
     117        }); 
     118        layer.addFeatures([pointFeature1]); 
     119        layer.removeFeatures([pointFeature1], {silent: true}); 
     120     } 
    92121     
    93122    function test_Layer_Vector_drawFeature(t) { 
    94123        t.plan(4); 
  • lib/OpenLayers/Layer/Vector.js

    old new  
    4545     *  - *featuresadded* Triggered after features are added.  The event 
    4646     *      object passed to listeners will have a *features* property with a 
    4747     *      reference to an array of added features. 
     48     *  - *beforefeatureremoved* Triggered before a feature is removed. Listeners 
     49     *      wll receive an object with a *feature* property referencing the 
     50     *      feature to be removed. 
     51     *  - *featureremoved* Triggerd after a feature is removed. The event 
     52     *      object passed to listeners will have a *feature* property with a 
     53     *      reference to the removed feature. 
     54     *  - *featuresremoved* Triggered after features are removed. The event 
     55     *      object passed to listeners will have a *features* property with a 
     56     *      reference to an array of removed features. 
    4857     *  - *featureselected* Triggered after a feature is selected.  Listeners 
    4958     *      will receive an object with a *feature* property referencing the 
    5059     *      selected feature. 
     
    6170     *      Listeners will receive an object with a *feature* property referencing  
    6271     *      the modified feature. 
    6372     */ 
    64     EVENT_TYPES: ["beforefeatureadded", "featureadded", 
    65                   "featuresadded", "featureselected", "featureunselected",  
     73    EVENT_TYPES: ["beforefeatureadded", "featureadded", "featuresadded", 
     74                  "beforefeatureremoved", "featureremoved", "featuresremoved", 
     75                  "featureselected", "featureunselected",  
    6676                  "beforefeaturemodified", "featuremodified", "afterfeaturemodified"], 
    6777 
    6878    /** 
     
    367377     *  
    368378     * Parameters: 
    369379     * features - {Array(<OpenLayers.Feature.Vector>)}  
     380     * options - {Object} 
    370381     */ 
    371     removeFeatures: function(features) { 
     382    removeFeatures: function(features, options) { 
    372383        if (!(features instanceof Array)) { 
    373384            features = [features]; 
    374385        } 
     386        if (features.length <= 0) { 
     387            return; 
     388        } 
    375389 
     390        var notify = !options || !options.silent; 
     391 
    376392        for (var i = features.length - 1; i >= 0; i--) { 
    377393            var feature = features[i]; 
     394 
     395            if (notify) { 
     396                this.events.triggerEvent("beforefeatureremoved", { 
     397                    feature: feature 
     398                }); 
     399            } 
     400 
    378401            this.features = OpenLayers.Util.removeItem(this.features, feature); 
    379402 
    380403            if (feature.geometry) { 
     
    386409            if (OpenLayers.Util.indexOf(this.selectedFeatures, feature) != -1){ 
    387410                OpenLayers.Util.removeItem(this.selectedFeatures, feature); 
    388411            } 
     412 
     413            if (notify) { 
     414                this.events.triggerEvent("featureremoved", { 
     415                    feature: feature 
     416                }); 
     417            } 
    389418        } 
     419 
     420        if (notify) { 
     421            this.events.triggerEvent("featuresremoved", {features: features}); 
     422        } 
    390423    }, 
    391424 
    392425    /**