aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--web/cobrands/fixmystreet/assets.js65
1 files changed, 41 insertions, 24 deletions
diff --git a/web/cobrands/fixmystreet/assets.js b/web/cobrands/fixmystreet/assets.js
index ae9100a13..ed6df3bca 100644
--- a/web/cobrands/fixmystreet/assets.js
+++ b/web/cobrands/fixmystreet/assets.js
@@ -77,10 +77,10 @@ OpenLayers.Layer.VectorAsset = OpenLayers.Class(OpenLayers.Layer.Vector, {
},
get_select_control: function() {
- var controls = fixmystreet.map.getControlsByClass('OpenLayers.Control.SelectFeature');
- for (var i=0; i<controls.length; i++) {
+ var controls = this.controls || [];
+ for (var i = 0; i < controls.length; i++) {
var control = controls[i];
- if (control.layer == this && !control.hover) {
+ if (!control.hover) {
return control;
}
}
@@ -410,6 +410,18 @@ function layer_visibilitychanged() {
this.asset_not_found();
}
+ var controls = this.controls || [];
+ var j;
+ if (this.getVisibility()) {
+ for (j = 0; j < controls.length; j++) {
+ controls[j].activate();
+ }
+ } else {
+ for (j = 0; j < controls.length; j++) {
+ controls[j].deactivate();
+ }
+ }
+
check_zoom_message_visibility.call(this);
var layers = fixmystreet.map.getLayersBy('assets', true);
var visible = 0;
@@ -667,17 +679,19 @@ function construct_select_layer_events(asset_layer, options) {
}
// Set up handler for selecting/unselecting markers
-function construct_select_feature_control(asset_layer, options) {
+function construct_select_feature_control(asset_layers, options) {
if (options.non_interactive) {
return;
}
- construct_select_layer_events(asset_layer, options);
+ $.each(asset_layers, function(i, layer) {
+ construct_select_layer_events(layer, options);
+ });
- return new OpenLayers.Control.SelectFeature(asset_layer);
+ return new OpenLayers.Control.SelectFeature(asset_layers);
}
-function construct_hover_feature_control(asset_layer, options) {
+function construct_hover_feature_control(asset_layers, options) {
// Even if an asset layer is marked as non-interactive it can still have
// a hover style which we'll need to set up.
if (options.non_interactive && !(options.stylemap && options.stylemap.styles.hover)) {
@@ -686,7 +700,7 @@ function construct_hover_feature_control(asset_layer, options) {
// Set up handlers for simply hovering over an asset marker
var hover_feature_control = new OpenLayers.Control.SelectFeature(
- asset_layer,
+ asset_layers,
{
hover: true,
highlightOnly: true,
@@ -755,7 +769,7 @@ fixmystreet.assets = {
options = $.extend(true, {}, default_options, options);
var asset_layer = this.add_layer(options);
- this.add_controls(asset_layer, options);
+ this.add_controls([asset_layer], options);
},
add_layer: function(options) {
@@ -782,16 +796,19 @@ fixmystreet.assets = {
return asset_layer;
},
- add_controls: function(asset_layer, options) {
- var select_feature_control = construct_select_feature_control(asset_layer, options);
- var hover_feature_control = construct_hover_feature_control(asset_layer, options);
+ add_controls: function(asset_layers, options) {
+ var select_feature_control = construct_select_feature_control(asset_layers, options);
+ var hover_feature_control = construct_hover_feature_control(asset_layers, options);
- if (hover_feature_control) {
- fixmystreet.assets.controls.push(hover_feature_control);
- }
- if (select_feature_control) {
- fixmystreet.assets.controls.push(select_feature_control);
- }
+ $.each(asset_layers, function(i, asset_layer) {
+ asset_layer.controls = asset_layer.controls || [];
+ if (hover_feature_control) {
+ asset_layer.controls.push(hover_feature_control);
+ }
+ if (select_feature_control) {
+ asset_layer.controls.push(select_feature_control);
+ }
+ });
},
init: function() {
@@ -821,12 +838,12 @@ fixmystreet.assets = {
var pins_layer = fixmystreet.map.getLayersByName("Pins")[0];
for (var i = 0; i < fixmystreet.assets.layers.length; i++) {
- init_asset_layer(fixmystreet.assets.layers[i], pins_layer);
- }
-
- for (i = 0; i < fixmystreet.assets.controls.length; i++) {
- fixmystreet.map.addControl(fixmystreet.assets.controls[i]);
- fixmystreet.assets.controls[i].activate();
+ var asset_layer = fixmystreet.assets.layers[i];
+ var controls = asset_layer.controls || [];
+ for (var j = 0; j < controls.length; j++) {
+ fixmystreet.map.addControl(controls[j]);
+ }
+ init_asset_layer(asset_layer, pins_layer);
}
}
};