aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--web/cobrands/fixmystreet/assets.js93
1 files changed, 60 insertions, 33 deletions
diff --git a/web/cobrands/fixmystreet/assets.js b/web/cobrands/fixmystreet/assets.js
index 5cbd8923a..2cef581f2 100644
--- a/web/cobrands/fixmystreet/assets.js
+++ b/web/cobrands/fixmystreet/assets.js
@@ -34,8 +34,13 @@ function asset_selected(e) {
// Set the extra field to the value of the selected feature
$.each(this.fixmystreet.attributes, function (field_name, attribute_name) {
- var id = e.feature.attributes[attribute_name];
- $("#form_" + field_name).val(id);
+ var field_value;
+ if (typeof attribute_name === 'function') {
+ field_value = attribute_name.apply(e.feature);
+ } else {
+ field_value = e.feature.attributes[attribute_name];
+ }
+ $("#form_" + field_name).val(field_value);
});
// Hide the normal markers layer to keep things simple, but
@@ -121,7 +126,9 @@ function layer_visibilitychanged() {
// to show the marker again.
fixmystreet.markers.setVisibility(true);
}
- select_nearest_asset.call(this);
+ if (!this.fixmystreet.non_interactive) {
+ select_nearest_asset.call(this);
+ }
}
function zoom_to_assets(layer) {
@@ -208,7 +215,7 @@ function get_asset_stylemap() {
popupYOffset: -40,
graphicOpacity: 1.0
}),
- 'temporary': new OpenLayers.Style({
+ 'hover': new OpenLayers.Style({
fillColor: "#55BB00",
fillOpacity: 0.8,
strokeColor: "#000000",
@@ -297,7 +304,7 @@ fixmystreet.add_assets = function(options) {
visibility: false,
maxResolution: options.max_resolution,
minResolution: options.min_resolution,
- styleMap: get_asset_stylemap()
+ styleMap: options.stylemap || get_asset_stylemap()
};
if (options.srsName !== undefined) {
layer_options.projection = new OpenLayers.Projection(options.srsName);
@@ -333,43 +340,63 @@ fixmystreet.add_assets = function(options) {
asset_layer.fixmystreet.fault_layer = asset_fault_layer;
}
- // Set up handlers for selecting/unselecting markers and panning/zooming the map
- var select_feature_control = new OpenLayers.Control.SelectFeature( asset_layer );
- asset_layer.events.register( 'featureselected', asset_layer, asset_selected);
- asset_layer.events.register( 'featureunselected', asset_layer, asset_unselected);
- asset_layer.events.register( 'loadend', asset_layer, layer_loadend);
- asset_layer.events.register( 'visibilitychanged', asset_layer, layer_visibilitychanged);
- fixmystreet.map.events.register( 'zoomend', asset_layer, check_zoom_message_visibility);
+ var hover_feature_control, select_feature_control;
+ if (!options.non_interactive) {
+ // Set up handlers for selecting/unselecting markers
+ select_feature_control = new OpenLayers.Control.SelectFeature( asset_layer );
+ asset_layer.events.register( 'featureselected', asset_layer, asset_selected);
+ asset_layer.events.register( 'featureunselected', asset_layer, asset_unselected);
+ // When panning/zooming the map check that this layer is still correctly shown
+ // and any selected marker is preserved
+ asset_layer.events.register( 'loadend', asset_layer, layer_loadend);
+ }
+
+ // 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)) {
+ // Set up handlers for simply hovering over a street light marker
+ hover_feature_control = new OpenLayers.Control.SelectFeature(
+ asset_layer,
+ {
+ hover: true,
+ highlightOnly: true,
+ renderIntent: 'hover'
+ }
+ );
+ hover_feature_control.events.register('beforefeaturehighlighted', null, function(e) {
+ // Don't let marker go from selected->hover state,
+ // as it causes some mad flickering effect.
+ if (e.feature.renderIntent == 'select') {
+ return false;
+ }
+ });
+ }
+ if (options.asset_category) {
+ fixmystreet.map.events.register( 'zoomend', asset_layer, check_zoom_message_visibility);
+ }
+ if (!options.always_visible) {
+ asset_layer.events.register( 'visibilitychanged', asset_layer, layer_visibilitychanged);
+ }
// Make sure the user knows something is happening (some asset layers can be sllooowwww)
asset_layer.events.register( 'loadstart', null, fixmystreet.maps.loading_spinner.show);
asset_layer.events.register( 'loadend', null, fixmystreet.maps.loading_spinner.hide);
- // Set up handlers for simply hovering over a street light marker
- var hover_feature_control = new OpenLayers.Control.SelectFeature(
- asset_layer,
- {
- hover: true,
- highlightOnly: true,
- renderIntent: 'temporary'
- }
- );
- hover_feature_control.events.register('beforefeaturehighlighted', null, function(e) {
- // Don't let marker go from selected->hover state,
- // as it causes some mad flickering effect.
- if (e.feature.renderIntent == 'select') {
- return false;
- }
- });
-
fixmystreet.map.addLayer(asset_layer);
+ if (options.always_visible) {
+ asset_layer.setVisibility(true);
+ }
if (asset_fault_layer) {
fixmystreet.map.addLayer(asset_fault_layer);
}
- fixmystreet.map.addControl( hover_feature_control );
- hover_feature_control.activate();
- fixmystreet.map.addControl( select_feature_control );
- select_feature_control.activate();
+ if (hover_feature_control) {
+ fixmystreet.map.addControl( hover_feature_control );
+ hover_feature_control.activate();
+ }
+ if (select_feature_control) {
+ fixmystreet.map.addControl( select_feature_control );
+ select_feature_control.activate();
+ }
// Make sure the fault markers always appear beneath the street lights
if (asset_fault_layer) {