diff --git a/examples/openmnnd.html b/examples/openmnnd.html
index 63c702c23d..30a0c17ec6 100644
--- a/examples/openmnnd.html
+++ b/examples/openmnnd.html
@@ -29,15 +29,42 @@
map.addLayer(wms);
wfs = new OpenLayers.Layer.WFS("Minnesota Streams (WFS)", wfs_url, {'typename':'streams'}, {ratio:1.25, minZoomLevel:4});
- wfs.onFeatureInsert= function(feature) { feature.style.strokeWidth="3"; feature.style.strokeColor="blue"; feature.layer.renderer.drawGeometry(feature.geometry,feature.style); $('stream_features').innerHTML = feature.layer.features.length;}
+
+ // preFeatureInsert can be used to set style before the feature is drawn
+ wfs.preFeatureInsert= function(feature) { feature.style.strokeWidth="3"; feature.style.strokeColor="blue";
+ }
+ wfs.onFeatureInsert = function() {
+ $('stream_features').innerHTML = feature.layer.features.length;
+ }
map.addLayer(wfs);
- pwfs = new OpenLayers.Layer.WFS("Minnesota Plat (WFS)", wfs_url, {'typename':'plat'}, {ratio:1.25, minZoomLevel:8, extractAttributes: true});
- pwfs.onFeatureInsert= function(feature) { feature.style.fillColor="green"; feature.layer.renderer.drawGeometry(feature.geometry,feature.style); $('plat_features').innerHTML = feature.layer.features.length;}
+ // Or a style can be set on the layer.
+ pwfsstyle = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']);
+ OpenLayers.Util.extend(pwfsstyle, {'fillColor': 'green'});
+
+ pwfs = new OpenLayers.Layer.WFS("Minnesota Plat (WFS)", wfs_url,
+ {'typename':'plat'},
+ {
+ ratio:1.25,
+ minZoomLevel:8,
+ extractAttributes: true,
+ style: pwfsstyle
+ });
+
+ pwfs.onFeatureInsert= function(feature) {
+ $('plat_features').innerHTML = feature.layer.features.length;
+ }
map.addLayer(pwfs);
- rwfs = new OpenLayers.Layer.WFS("Minnesota Roads (WFS)", wfs_url, {'typename':'roads'}, {ratio:1.25, minZoomLevel:7, extractAttributes: true});
- rwfs.onFeatureInsert= function(feature) { feature.style.strokeColor="white"; feature.style.strokeWidth="4"; feature.layer.renderer.drawGeometry(feature.geometry,feature.style); $('road_features').innerHTML = feature.layer.features.length; }
+ rstyle = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']);
+ OpenLayers.Util.extend(rstyle, {'strokeColor': 'white', strokeWIdth: "4"});
+ rwfs = new OpenLayers.Layer.WFS("Minnesota Roads (WFS)", wfs_url, {'typename':'roads'},
+ {ratio:1.25, minZoomLevel:7, extractAttributes: true, style:rstyle});
+
+ rwfs.onFeatureInsert= function(feature) {
+ $('road_features').innerHTML = feature.layer.features.length;
+ }
+
map.addLayer(rwfs);
map.events.register('moveend', null, function() {
diff --git a/lib/OpenLayers/Feature/Vector.js b/lib/OpenLayers/Feature/Vector.js
index 386591596c..5bf186eb7f 100644
--- a/lib/OpenLayers/Feature/Vector.js
+++ b/lib/OpenLayers/Feature/Vector.js
@@ -51,7 +51,7 @@ OpenLayers.Feature.Vector.prototype =
if (data) {
OpenLayers.Util.extend(this.attributes, data);
}
- this.style = style ? style : OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']);
+ this.style = style ? style : null;
},
diff --git a/lib/OpenLayers/Layer/Vector.js b/lib/OpenLayers/Layer/Vector.js
index 829e427c0d..484b7bbe83 100644
--- a/lib/OpenLayers/Layer/Vector.js
+++ b/lib/OpenLayers/Layer/Vector.js
@@ -36,6 +36,9 @@ OpenLayers.Layer.Vector.prototype =
/** @type {Boolean} */
reportError: true,
+ /** @type {Object} */
+ style: null,
+
/**
* List of supported Renderer classes. Add to this list to
* add support for additional renderers. This list is ordered:
@@ -224,6 +227,16 @@ OpenLayers.Layer.Vector.prototype =
//give feature reference to its layer
feature.layer = this;
+ if (!feature.style) {
+ if (this.style) {
+ feature.style = OpenLayers.Util.extend({}, this.style);
+ } else {
+ feature.style = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']);
+ }
+ }
+
+ this.preFeatureInsert(feature);
+
if (this.drawn) {
this.renderer.drawGeometry(feature.geometry, feature.style);
}
@@ -315,6 +328,17 @@ OpenLayers.Layer.Vector.prototype =
*/
onFeatureInsert: function(feature) {
},
+
+ /**
+ * method called before a feature is inserted.
+ * Does nothing by default. Override this if you
+ * need to do something when features are first added to the
+ * layer, but before they are drawn, such as adjust the style.
+ *
+ * @param {OpenLayers.Feature.Vector} feature
+ */
+ preFeatureInsert: function(feature) {
+ },
/** @final @type String */
CLASS_NAME: "OpenLayers.Layer.Vector"
diff --git a/tests/Layer/test_Vector.html b/tests/Layer/test_Vector.html
index ecc4b4ad41..32ebd938ff 100644
--- a/tests/Layer/test_Vector.html
+++ b/tests/Layer/test_Vector.html
@@ -44,6 +44,17 @@
t.ok(layer.features.length == 1, "OpenLayers.Layer.Vector.removeFeatures removes a feature from the features array");
}
+
+ function test_Layer_Vector_addsStyle (t) {
+ t.plan(2);
+ layer = new OpenLayers.Layer.Vector(name);
+ var map = new OpenLayers.Map('map');
+ map.addLayer(layer);
+ f = new OpenLayers.Feature.Vector();
+ t.eq( f.style, null, "Feature style is null by default.");
+ layer.addFeatures(f);
+ t.ok( f.style != null, "Feature style is set by layer.");
+ }
function test_99_Layer_Vector_destroy (t) {
t.plan(1);