diff options
author | Matthew Somerville <matthew@mysociety.org> | 2019-07-15 18:30:53 +0100 |
---|---|---|
committer | Dave Arter <davea@mysociety.org> | 2019-08-16 14:24:20 +0100 |
commit | 1c321715d1b0a3bec2fd547c0aa14432c87ee026 (patch) | |
tree | 75e2216317f2dd2e21e576ba925172ca083f0f1f | |
parent | 2d3b004fe40b7fc202fed6029984306287970735 (diff) |
[Westminster] Initial asset code.
-rw-r--r-- | templates/web/westminster/footer_extra_js.html | 10 | ||||
-rw-r--r-- | web/cobrands/westminster/assets.js | 116 |
2 files changed, 126 insertions, 0 deletions
diff --git a/templates/web/westminster/footer_extra_js.html b/templates/web/westminster/footer_extra_js.html new file mode 100644 index 000000000..ec25926c5 --- /dev/null +++ b/templates/web/westminster/footer_extra_js.html @@ -0,0 +1,10 @@ +[%~ +IF bodyclass.match('mappage'); + scripts.push( + version('/vendor/OpenLayers.Projection.OrdnanceSurvey.js'), + version('/cobrands/fixmystreet/assets.js'), + version('/cobrands/westminster/assets.js'), + ); +END +%] + diff --git a/web/cobrands/westminster/assets.js b/web/cobrands/westminster/assets.js new file mode 100644 index 000000000..96fca44ab --- /dev/null +++ b/web/cobrands/westminster/assets.js @@ -0,0 +1,116 @@ +(function(){ + +if (!fixmystreet.maps) { + return; +} + +/* First let us set up some necessary subclasses */ + +/* ArcGIS wants to receive the bounding box as a 'geometry' parameter, not 'bbox' */ +var format = new OpenLayers.Format.QueryStringFilter(); +OpenLayers.Protocol.Westminster = OpenLayers.Class(OpenLayers.Protocol.HTTP, { + filterToParams: function(filter, params) { + params = format.write(filter, params); + params.geometry = params.bbox; + delete params.bbox; + return params; + }, + CLASS_NAME: "OpenLayers.Protocol.Westminster" +}); + +/* This layer is relevant depending upon the category *and* the choice of the 'type' Open311 extra attribute question */ +var SubcatMixin = OpenLayers.Class({ + relevant: function() { + var relevant = OpenLayers.Layer.VectorAsset.prototype.relevant.apply(this, arguments), + subcategories = this.fixmystreet.subcategories, + subcategory = $('#form_type').val(), + relevant_sub = OpenLayers.Util.indexOf(subcategories, subcategory) > -1; + return relevant && relevant_sub; + }, + CLASS_NAME: 'SubcatMixin' +}); +OpenLayers.Layer.VectorAssetWestminsterSubcat = OpenLayers.Class(OpenLayers.Layer.VectorAsset, SubcatMixin, { + CLASS_NAME: 'OpenLayers.Layer.VectorAssetWestminsterSubcat' +}); + +var url_base = 'https://tilma.staging.mysociety.org/resource-proxy/proxy.php?https://westminster.assets/'; + +var defaults = { + http_options: { + params: { + inSR: '4326', + f: 'geojson' + } + }, + asset_type: 'spot', + max_resolution: 4.777314267158508, + min_resolution: 0.5971642833948135, + asset_id_field: 'central_asset_id', + srsName: "EPSG:4326", + body: "Westminster City Council", + format_class: OpenLayers.Format.GeoJSON, + format_options: {ignoreExtraDims: true}, + protocol_class: OpenLayers.Protocol.Westminster, + strategy_class: OpenLayers.Strategy.FixMyStreet +}; + +var layer_data = [ + { group: 'Street lights', item: 'street light', layers: [ 18, 50, 60 ] }, + { category: 'Pavement damage', layers: [ 14 ], road: true }, + { category: 'Pothole', layers: [ 11, 44 ], road: true }, + { group: 'Drains', item: 'gully', layers: [ 16 ] }, + + { category: 'Signs and bollards', subcategories: [ '1' ], subcategory_id: '#form_featuretypecode', item: 'bollard', layers: [ 42, 52 ] }, + { category: 'Signs and bollards', subcategories: [ 'PLFP' ], subcategory_id: '#form_featuretypecode', item: 'feeder pillar', layers: [ 56 ] }, + { category: 'Signs and bollards', subcategories: [ '3' ], subcategory_id: '#form_featuretypecode', item: 'sign', layers: [ 48, 58, 54 ] }, + { category: 'Signs and bollards', subcategories: [ '2' ], subcategory_id: '#form_featuretypecode', item: 'street nameplate', layers: [ 46 ] } +]; + +$.each(layer_data, function(i, o) { + var layers_added = []; + var attr = 'central_asset_id'; + var params = $.extend(true, {}, defaults, { + asset_category: o.category, + asset_item: o.item, + http_options: { + params: { + outFields: attr + } + }, + attributes: {} + }); + + if (o.group) { + params.asset_group = o.group; + } else if (o.subcategories) { + params.class = OpenLayers.Layer.VectorAssetWestminsterSubcat; + params.subcategories = o.subcategories; + } + + if (o.road) { + params.non_interactive = true; + params.nearest_radius = 100; + params.stylemap = fixmystreet.assets.stylemap_invisible; + params.usrn = { + attribute: attr, + field: attr + }; + } else { + params.attributes[attr] = attr; + } + + $.each(o.layers, function(i, l) { + var layer_url = { http_options: { url: url_base + l + '/query?' } }; + var options = $.extend(true, {}, params, layer_url); + layers_added.push(fixmystreet.assets.add_layer(options)); + }); + fixmystreet.assets.add_controls(layers_added, params); +}); + +$(function(){ + $("#problem_form").on("change.category", "#form_type, #form_featuretypecode", function() { + $(fixmystreet).trigger('report_new:category_change'); + }); +}); + +})(); |