diff options
-rw-r--r-- | web/cobrands/angus/js.js | 4 | ||||
-rw-r--r-- | web/cobrands/bristol/js.js | 16 | ||||
-rw-r--r-- | web/cobrands/fixmystreet/assets.js | 148 |
3 files changed, 87 insertions, 81 deletions
diff --git a/web/cobrands/angus/js.js b/web/cobrands/angus/js.js index f3e7bf211..566b3a842 100644 --- a/web/cobrands/angus/js.js +++ b/web/cobrands/angus/js.js @@ -4,7 +4,7 @@ if (!fixmystreet.maps) { return; } -$(fixmystreet.add_assets({ +fixmystreet.assets.add({ wfs_url: "https://data.angus.gov.uk/geoserver/services/wfs", wfs_feature: "lighting_column_v", wfs_fault_feature: "lighting_faults_v", @@ -18,6 +18,6 @@ $(fixmystreet.add_assets({ column_id: 'n' }, geometryName: 'g' -})); +}); })(); diff --git a/web/cobrands/bristol/js.js b/web/cobrands/bristol/js.js index 1fc23d61a..9a4d1ec46 100644 --- a/web/cobrands/bristol/js.js +++ b/web/cobrands/bristol/js.js @@ -19,32 +19,32 @@ var options = { geometryName: 'SHAPE' }; -$(fixmystreet.add_assets($.extend({}, options, { +fixmystreet.assets.add($.extend({}, options, { wfs_feature: "COD_ASSETS_AREA", asset_type: 'area', asset_category: "Bridges/Subways", asset_item: 'bridge/subway' -}))); +})); -$(fixmystreet.add_assets($.extend({}, options, { +fixmystreet.assets.add($.extend({}, options, { asset_category: "Gully/Drainage", asset_item: 'gully', filter_key: 'COD_ASSET_TYPE', filter_value: 'GULLY' -}))); +})); -$(fixmystreet.add_assets($.extend({}, options, { +fixmystreet.assets.add($.extend({}, options, { asset_category: "Grit Bins", asset_item: 'grit bin', filter_key: 'COD_ASSET_TYPE', filter_value: 'GRITBIN' -}))); +})); -$(fixmystreet.add_assets($.extend({}, options, { +fixmystreet.assets.add($.extend({}, options, { asset_category: "Street Lighting", asset_item: 'street light', filter_key: 'COD_ASSET_TYPE', filter_value: 'SL' -}))); +})); })(); diff --git a/web/cobrands/fixmystreet/assets.js b/web/cobrands/fixmystreet/assets.js index d03481079..a6ecbadb2 100644 --- a/web/cobrands/fixmystreet/assets.js +++ b/web/cobrands/fixmystreet/assets.js @@ -17,7 +17,7 @@ function asset_selected(e) { close_fault_popup(); var lonlat = e.feature.geometry.getBounds().getCenterLonLat(); - // Check if there is a known fault with the light that's been clicked, + // Check if there is a known fault with the asset that's been clicked, // and disallow selection if so. var fault_feature = find_matching_feature(e.feature, this.fixmystreet.fault_layer, this.fixmystreet.asset_id_field); if (!!fault_feature) { @@ -45,7 +45,7 @@ function asset_selected(e) { // Hide the normal markers layer to keep things simple, but // move the green marker to the point of the click to stop - // it jumping around unexpectedly if the user deselects street light. + // it jumping around unexpectedly if the user deselects the asset. fixmystreet.markers.setVisibility(false); fixmystreet.markers.features[0].move(lonlat); @@ -191,6 +191,10 @@ function layer_loadend() { } function get_asset_stylemap() { + // fixmystreet.pin_prefix isn't always available here (e.g. on /report/new), + // so get it from the DOM directly + var pin_prefix = fixmystreet.pin_prefix || document.getElementById('js-map-data').getAttribute('data-pin_prefix'); + return new OpenLayers.StyleMap({ 'default': new OpenLayers.Style({ fillColor: "#FFFF00", @@ -201,13 +205,13 @@ function get_asset_stylemap() { pointRadius: 6 }), 'select': new OpenLayers.Style({ - externalGraphic: fixmystreet.pin_prefix + "pin-spot.png", + externalGraphic: pin_prefix + "pin-spot.png", fillColor: "#55BB00", graphicWidth: 48, graphicHeight: 64, graphicXOffset: -24, graphicYOffset: -56, - backgroundGraphic: fixmystreet.pin_prefix + "pin-shadow.png", + backgroundGraphic: pin_prefix + "pin-shadow.png", backgroundWidth: 60, backgroundHeight: 30, backgroundXOffset: -7, @@ -240,31 +244,14 @@ function get_fault_stylemap() { }); } -fixmystreet.add_assets = function(options) { - var asset_layer = null; - var asset_fault_layer = null; +fixmystreet.assets = { + layers: [], + controls: [], - function add_assets() { - if (asset_layer !== null) { - // Layer has already been added - return; - } - if (window.fixmystreet === undefined) { - // We're on a page without a map, yet somehow still got called... - // Nothing to do. - return; - } - if (fixmystreet.map === undefined) { - // Map's not loaded yet, let's try again soon... - setTimeout(add_assets, 250); - return; - } - if (fixmystreet.page != 'new' && fixmystreet.page != 'around') { - // We only want to show light markers when making a new report - return; - } + add: function(options) { + var asset_fault_layer = null; - // An interactive layer for selecting a street light + // An interactive layer for selecting an asset (e.g. street light) var protocol_options; var protocol; if (options.http_options !== undefined) { @@ -273,7 +260,6 @@ fixmystreet.add_assets = function(options) { protocol_options.format = new protocol_options.format_class(protocol_options.format_options); } else { protocol_options.format = new OpenLayers.Format.GML({ - featureNS: "http://mapserver.gis.umn.edu/mapserver", geometryName: options.geometryName }); } @@ -287,8 +273,7 @@ fixmystreet.add_assets = function(options) { }; if (options.srsName !== undefined) { protocol_options.srsName = options.srsName; - } - if (fixmystreet.wmts_config && protocol_options.srsName === undefined) { + } else if (fixmystreet.wmts_config) { protocol_options.srsName = fixmystreet.wmts_config.map_projection; } if (options.propertyNames) { @@ -309,8 +294,7 @@ fixmystreet.add_assets = function(options) { }; if (options.srsName !== undefined) { layer_options.projection = new OpenLayers.Projection(options.srsName); - } - if (fixmystreet.wmts_config && layer_options.projection === undefined) { + } else if (fixmystreet.wmts_config) { layer_options.projection = new OpenLayers.Projection(fixmystreet.wmts_config.map_projection); } if (options.filter_key) { @@ -320,9 +304,10 @@ fixmystreet.add_assets = function(options) { value: options.filter_value }); } - asset_layer = new OpenLayers.Layer.Vector(options.name || "WFS", layer_options); - // A non-interactive layer to display existing street light faults + var asset_layer = new OpenLayers.Layer.Vector(options.name || "WFS", layer_options); + + // A non-interactive layer to display existing asset faults if (options.wfs_fault_feature) { var po = { featureType: options.wfs_fault_feature @@ -356,7 +341,7 @@ fixmystreet.add_assets = function(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)) { - // Set up handlers for simply hovering over a street light marker + // Set up handlers for simply hovering over an asset marker hover_feature_control = new OpenLayers.Control.SelectFeature( asset_layer, { @@ -373,9 +358,6 @@ fixmystreet.add_assets = function(options) { } }); } - 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); } @@ -384,59 +366,83 @@ fixmystreet.add_assets = function(options) { asset_layer.events.register( 'loadstart', null, fixmystreet.maps.loading_spinner.show); asset_layer.events.register( 'loadend', null, fixmystreet.maps.loading_spinner.hide); - fixmystreet.map.addLayer(asset_layer); + fixmystreet.assets.layers.push(asset_layer); if (options.always_visible) { asset_layer.setVisibility(true); } if (asset_fault_layer) { - fixmystreet.map.addLayer(asset_fault_layer); + fixmystreet.assets.layers.push(asset_fault_layer); } if (hover_feature_control) { - fixmystreet.map.addControl( hover_feature_control ); - hover_feature_control.activate(); + fixmystreet.assets.controls.push(hover_feature_control); } if (select_feature_control) { - fixmystreet.map.addControl( select_feature_control ); - select_feature_control.activate(); + fixmystreet.assets.controls.push(select_feature_control); } - // Make sure the fault markers always appear beneath the street lights + // Make sure the fault markers always appear beneath the linked assets if (asset_fault_layer) { asset_fault_layer.setZIndex(asset_layer.getZIndex()-1); } - // Show/hide the asset layer when the category is chosen - $("#problem_form").on("change.category", "select#form_category", function(){ - var category = $(this).val(); - if (category == options.asset_category) { - asset_layer.setVisibility(true); - if (asset_fault_layer) { - asset_fault_layer.setVisibility(true); + if (!asset_layer.fixmystreet.always_visible) { + // Show/hide the asset layer when the category is chosen + $("#problem_form").on("change.category", "select#form_category", function(){ + var category = $(this).val(); + if (category == options.asset_category) { + asset_layer.setVisibility(true); + if (asset_fault_layer) { + asset_fault_layer.setVisibility(true); + } + zoom_to_assets(asset_layer); + } else { + asset_layer.setVisibility(false); + if (asset_fault_layer) { + asset_fault_layer.setVisibility(false); + } } - zoom_to_assets(asset_layer); - } else { - asset_layer.setVisibility(false); - if (asset_fault_layer) { - asset_fault_layer.setVisibility(false); + }); + } + }, + + init: function() { + if (fixmystreet.page != 'new' && fixmystreet.page != 'around') { + // We only want to show asset markers when making a new report + return; + } + + // Make sure the assets get hidden if the back button is pressed + fixmystreet.maps.display_around = (function(original) { + function hide_assets() { + for (var i = 0; i < fixmystreet.assets.layers.length; i++) { + var layer = fixmystreet.assets.layers[i]; + if (!layer.fixmystreet.always_visible) { + layer.setVisibility(false); + } } + fixmystreet.markers.setVisibility(true); + original.apply(fixmystreet.maps); } - }); - } - - // Make sure the assets get hidden if the back button is pressed - fixmystreet.maps.display_around = (function(original) { - function hide_assets() { - asset_layer.setVisibility(false); - if (asset_fault_layer) { - asset_fault_layer.setVisibility(false); + return hide_assets; + })(fixmystreet.maps.display_around); + + for (var i = 0; i < fixmystreet.assets.layers.length; i++) { + var layer = fixmystreet.assets.layers[i]; + fixmystreet.map.addLayer(layer); + if (layer.fixmystreet.asset_category) { + fixmystreet.map.events.register( 'zoomend', layer, check_zoom_message_visibility); } - fixmystreet.markers.setVisibility(true); - original.apply(fixmystreet.maps); } - return hide_assets; - })(fixmystreet.maps.display_around); - return add_assets; + for (i = 0; i < fixmystreet.assets.controls.length; i++) { + fixmystreet.map.addControl(fixmystreet.assets.controls[i]); + fixmystreet.assets.controls[i].activate(); + } + } }; +$(function() { + fixmystreet.assets.init(); +}); + })(); |