diff -rU2 -x CVS openlayers.orig//includes/behaviors/js/openlayers_behavior_drawfeatures.js openlayers//includes/behaviors/js/openlayers_behavior_drawfeatures.js
--- openlayers.orig//includes/behaviors/js/openlayers_behavior_drawfeatures.js 2010-05-21 17:35:39.000000000 +0200
+++ openlayers//includes/behaviors/js/openlayers_behavior_drawfeatures.js 2010-05-21 16:29:41.000000000 +0200
@@ -6,7 +6,4 @@
*/
-// Declare global variable
-openlayers_drawfeature_element = null;
-
/**
* Update function for features
@@ -25,5 +22,5 @@
}
wkt_value = WktWriter.write(features_copy.features);
- openlayers_drawfeature_element.val(wkt_value);
+ this.val(wkt_value);
}
@@ -37,5 +34,5 @@
// Add control
- openlayers_drawfeature_element =
+ var openlayers_drawfeature_element =
$("#" + data.map.behaviors['openlayers_behavior_drawfeatures'].element_id);
@@ -50,6 +47,6 @@
if (openlayers_drawfeature_element.text() != '') {
var wktFormat = new OpenLayers.Format.WKT();
- wkt = openlayers_drawfeature_element.text();
- features = wktFormat.read(wkt);
+ var wkt = openlayers_drawfeature_element.text();
+ var features = wktFormat.read(wkt);
for(var i in features) {
features[i].geometry = features[i].geometry.transform(
@@ -63,7 +60,7 @@
// registering events late, because adding data
// would result in a reprojection loop
- data_layer.events.register('featureadded', null, update);
- data_layer.events.register('featureremoved', null, update);
- data_layer.events.register('featuremodified', null, update);
+ data_layer.events.register('featureadded', openlayers_drawfeature_element, update);
+ data_layer.events.register('featureremoved', openlayers_drawfeature_element, update);
+ data_layer.events.register('featuremodified', openlayers_drawfeature_element, update);
var control = new OpenLayers.Control.EditingToolbar(data_layer);
diff -rU2 -x CVS openlayers.orig//includes/behaviors/js/openlayers_behavior_popup.js openlayers//includes/behaviors/js/openlayers_behavior_popup.js
--- openlayers.orig//includes/behaviors/js/openlayers_behavior_popup.js 2010-05-21 17:35:39.000000000 +0200
+++ openlayers//includes/behaviors/js/openlayers_behavior_popup.js 2010-05-21 16:29:41.000000000 +0200
@@ -11,8 +11,28 @@
* @return
* Formatted HTML
+ *
+ * @todo merge with openlayers_behavior_tooltip_popup_content ?
*/
function openlayers_behavior_popup_popup_content(feature) {
- return "
" +
- "";
+ if ( feature.cluster )
+ {
+ var visited = []; // to keep trac of already-visited items
+ var info = '';
+ for(var i = 0; i < feature.cluster.length; i++) {
+ var pf = feature.cluster[i]; // pseudo-feature
+ // should we use layer.name rather than drupalID here ?
+ var mapwide_id = feature.layer.drupalID+pf.drupalFID;
+ // skip duplicates
+ if ( visited[mapwide_id] ) continue;
+ visited[mapwide_id] = true;
+ info += openlayers_behavior_popup_popup_content(pf);
+ }
+ return info;
+ }
+ else
+ {
+ return "" +
+ "";
+ }
}
diff -rU2 -x CVS openlayers.orig//includes/behaviors/js/openlayers_behavior_tooltip.js openlayers//includes/behaviors/js/openlayers_behavior_tooltip.js
--- openlayers.orig//includes/behaviors/js/openlayers_behavior_tooltip.js 2010-05-21 17:35:39.000000000 +0200
+++ openlayers//includes/behaviors/js/openlayers_behavior_tooltip.js 2010-05-21 16:29:41.000000000 +0200
@@ -11,8 +11,28 @@
* @return
* Formatted HTML
+ *
+ * @todo merge with openlayers_behavior_popup_popup_content ?
*/
function openlayers_behavior_tooltip_popup_content(feature) {
- return "" +
- "";
+ if ( feature.cluster )
+ {
+ var visited = []; // to keep trac of already-visited items
+ var info = '';
+ for(var i = 0; i < feature.cluster.length; i++) {
+ var pf = feature.cluster[i]; // pseudo-feature
+ // should we use layer.name rather than drupalID here ?
+ var mapwide_id = feature.layer.drupalID+pf.drupalFID;
+ // skip duplicates
+ if ( visited[mapwide_id] ) continue;
+ visited[mapwide_id] = true;
+ info += openlayers_behavior_popup_popup_content(pf);
+ }
+ return info;
+ }
+ else
+ {
+ return "" +
+ "";
+ }
}
diff -rU2 -x CVS openlayers.orig//includes/openlayers.behaviors.inc openlayers//includes/openlayers.behaviors.inc
--- openlayers.orig//includes/openlayers.behaviors.inc 2010-05-21 17:35:39.000000000 +0200
+++ openlayers//includes/openlayers.behaviors.inc 2010-05-21 16:29:41.000000000 +0200
@@ -223,4 +223,15 @@
),
),
+ 'openlayers_behavior_cluster' => array(
+ 'title' => t('Cluster'),
+ 'description' => t('Provides vector layer features clustering by proximity'),
+ 'type' => 'layer',
+ 'path' => drupal_get_path('module', 'openlayers') .'/includes/behaviors',
+ 'file' => 'openlayers_behavior_cluster.inc',
+ 'behavior' => array(
+ 'class' => 'openlayers_behavior_cluster',
+ 'parent' => 'openlayers_behavior',
+ ),
+ ),
);
}
diff -rU2 -x CVS openlayers.orig//js/openlayers.js openlayers//js/openlayers.js
--- openlayers.orig//js/openlayers.js 2010-05-21 17:35:39.000000000 +0200
+++ openlayers//js/openlayers.js 2010-05-21 16:29:40.000000000 +0200
@@ -246,6 +246,17 @@
// Add attribute data
if (feature.attributes){
+ // Attributes belong to features, not single component geometries
+ // of them. But we're creating a geometry for each component for
+ // better performance and clustering support. Let's call these
+ // "pseudofeatures".
+ //
+ // In order to identify the real feature each geometry belongs to
+ // we then add a 'fid' parameter to the "pseudofeature".
+ // NOTE: 'drupalFID' is only unique within a single layer.
+ //
newFeature.attributes = feature.attributes;
- newFeature.data = feature.attributes;
+ newFeature.data = feature.attributes; // what is this needed for ?
+ newFeature.drupalFID = key;
+ //newFeature.layer = layer;
}
diff -rU2 -x CVS openlayers.orig//modules/openlayers_cck/includes/behaviors/js/openlayers_cck_vector_layer.js openlayers//modules/openlayers_cck/includes/behaviors/js/openlayers_cck_vector_layer.js
--- openlayers.orig//modules/openlayers_cck/includes/behaviors/js/openlayers_cck_vector_layer.js 2010-05-21 17:35:39.000000000 +0200
+++ openlayers//modules/openlayers_cck/includes/behaviors/js/openlayers_cck_vector_layer.js 2010-05-21 16:29:41.000000000 +0200
@@ -10,5 +10,5 @@
var data = $(context).data('openlayers');
if (data && data.map.behaviors['openlayers_cck_vector_layer']) {
- features = data.map.behaviors['openlayers_cck_vector_layer'].features;
+ var features = data.map.behaviors['openlayers_cck_vector_layer'].features;
// Create options and layer