diff options
28 files changed, 122 insertions, 110 deletions
diff --git a/perllib/FixMyStreet/App.pm b/perllib/FixMyStreet/App.pm index a0477ca40..1eb197e38 100644 --- a/perllib/FixMyStreet/App.pm +++ b/perllib/FixMyStreet/App.pm @@ -212,6 +212,8 @@ sub setup_request { Memcached::set_namespace( FixMyStreet->config('FMS_DB_NAME') . ":" ); FixMyStreet::Map::set_map_class( $cobrand->map_type || $c->get_param('map_override') ); + # All pages need this, either loading it or prefetching it + $c->stash->{map_js} = FixMyStreet::Map::map_javascript(); unless ( FixMyStreet->config('MAPIT_URL') ) { my $port = $c->req->uri->port; diff --git a/perllib/FixMyStreet/Cobrand/Angus.pm b/perllib/FixMyStreet/Cobrand/Angus.pm index 51a3da56a..056101574 100644 --- a/perllib/FixMyStreet/Cobrand/Angus.pm +++ b/perllib/FixMyStreet/Cobrand/Angus.pm @@ -24,6 +24,8 @@ sub example_places { return ( 'DD8 3AP', "Canmore Street" ); } +sub map_type { 'Angus' } + sub default_show_name { 0 } sub disambiguate_location { diff --git a/perllib/FixMyStreet/Map.pm b/perllib/FixMyStreet/Map.pm index e0e3c3128..0c75ab891 100644 --- a/perllib/FixMyStreet/Map.pm +++ b/perllib/FixMyStreet/Map.pm @@ -67,6 +67,10 @@ sub display_map { return $map_class->display_map(@_); } +sub map_javascript { + $map_class->map_javascript; +} + sub map_features { my ( $c, %p ) = @_; diff --git a/perllib/FixMyStreet/Map/Angus.pm b/perllib/FixMyStreet/Map/Angus.pm new file mode 100644 index 000000000..98f5373c1 --- /dev/null +++ b/perllib/FixMyStreet/Map/Angus.pm @@ -0,0 +1,18 @@ +# FixMyStreet:Map::Angus +# More JavaScript, for street assets + +package FixMyStreet::Map::Angus; +use base 'FixMyStreet::Map::FMS'; + +use strict; + +sub map_javascript { [ + '/vendor/OpenLayers/OpenLayers.angus.js', + '/js/map-OpenLayers.js', + '/js/map-bing-ol.js', + '/js/map-fms.js', + '/cobrands/fixmystreet/assets.js', + '/cobrands/angus/js.js', +] } + +1; diff --git a/perllib/FixMyStreet/Map/Bing.pm b/perllib/FixMyStreet/Map/Bing.pm index e62406349..68c9fea32 100644 --- a/perllib/FixMyStreet/Map/Bing.pm +++ b/perllib/FixMyStreet/Map/Bing.pm @@ -8,7 +8,11 @@ use strict; sub map_type { '' } -sub map_template { 'bing' } +sub map_javascript { [ + '/vendor/OpenLayers/OpenLayers.fixmystreet.js', + '/js/map-OpenLayers.js', + '/js/map-bing-ol.js', +] } sub copyright { '' } diff --git a/perllib/FixMyStreet/Map/Bristol.pm b/perllib/FixMyStreet/Map/Bristol.pm index 0e3079b0b..a75bb5eb9 100644 --- a/perllib/FixMyStreet/Map/Bristol.pm +++ b/perllib/FixMyStreet/Map/Bristol.pm @@ -58,6 +58,13 @@ sub copyright { sub map_template { 'bristol' } +sub map_javascript { [ + '/vendor/OpenLayers/OpenLayers.bristol.js', + '/js/map-OpenLayers.js', + '/js/map-wmts-base.js', + '/js/map-wmts-bristol.js', +] } + # Reproject a WGS84 lat/lon into BNG easting/northing sub reproject_from_latlon($$$) { my ($self, $lat, $lon) = @_; diff --git a/perllib/FixMyStreet/Map/Bromley.pm b/perllib/FixMyStreet/Map/Bromley.pm index 0cd36a2ac..1310c2a5a 100644 --- a/perllib/FixMyStreet/Map/Bromley.pm +++ b/perllib/FixMyStreet/Map/Bromley.pm @@ -9,7 +9,13 @@ use base 'FixMyStreet::Map::FMS'; use strict; -sub map_template { 'bromley' } +sub map_javascript { [ + '/vendor/OpenLayers/OpenLayers.fixmystreet.js', + '/js/map-OpenLayers.js', + '/js/map-bing-ol.js', + '/js/map-fms.js', + '/cobrands/bromley/map.js', +] } sub map_tile_base { '-', "https://%sfix.bromley.gov.uk/tilma/%d/%d/%d.png"; diff --git a/perllib/FixMyStreet/Map/FMS.pm b/perllib/FixMyStreet/Map/FMS.pm index c38f8baca..13c7f9d87 100644 --- a/perllib/FixMyStreet/Map/FMS.pm +++ b/perllib/FixMyStreet/Map/FMS.pm @@ -11,6 +11,13 @@ use strict; sub map_template { 'fms' } +sub map_javascript { [ + '/vendor/OpenLayers/OpenLayers.fixmystreet.js', + '/js/map-OpenLayers.js', + '/js/map-bing-ol.js', + '/js/map-fms.js', +] } + sub map_tile_base { '-', "//%stilma.mysociety.org/sv/%d/%d/%d.png"; } diff --git a/perllib/FixMyStreet/Map/Google.pm b/perllib/FixMyStreet/Map/Google.pm index 8ddf4f4e9..f40eff167 100644 --- a/perllib/FixMyStreet/Map/Google.pm +++ b/perllib/FixMyStreet/Map/Google.pm @@ -13,6 +13,11 @@ use Utils; use constant ZOOM_LEVELS => 6; use constant MIN_ZOOM_LEVEL => 13; +sub map_javascript { [ + "http://maps.googleapis.com/maps/api/js?sensor=false", + '/js/map-google.js', +] } + # display_map C PARAMS # PARAMS include: # latitude, longitude for the centre point of the map diff --git a/perllib/FixMyStreet/Map/GoogleOL.pm b/perllib/FixMyStreet/Map/GoogleOL.pm index 55032d707..44d0e77e7 100644 --- a/perllib/FixMyStreet/Map/GoogleOL.pm +++ b/perllib/FixMyStreet/Map/GoogleOL.pm @@ -13,4 +13,16 @@ sub map_type { '' } sub map_template { 'google-ol' } +sub map_javascript { + my $google_maps_url = "https://maps.googleapis.com/maps/api/js?v=3"; + my $key = FixMyStreet->config('GOOGLE_MAPS_API_KEY'); + $google_maps_url .= "&key=$key" if $key; + [ + $google_maps_url, + '/vendor/OpenLayers/OpenLayers.google.js', + '/js/map-OpenLayers.js', + '/js/map-google-ol.js', + ] +} + 1; diff --git a/perllib/FixMyStreet/Map/OSM.pm b/perllib/FixMyStreet/Map/OSM.pm index 76af99d36..47d6eeee7 100644 --- a/perllib/FixMyStreet/Map/OSM.pm +++ b/perllib/FixMyStreet/Map/OSM.pm @@ -18,6 +18,12 @@ sub map_type { 'OpenLayers.Layer.OSM.Mapnik' } sub map_template { 'osm' } +sub map_javascript { [ + '/vendor/OpenLayers/OpenLayers.fixmystreet.js', + '/js/map-OpenLayers.js', + '/js/map-OpenStreetMap.js', +] } + sub map_tiles { my ( $self, %params ) = @_; my ( $x, $y, $z ) = ( $params{x_tile}, $params{y_tile}, $params{zoom_act} ); diff --git a/perllib/FixMyStreet/Map/OSM/MapQuest.pm b/perllib/FixMyStreet/Map/OSM/MapQuest.pm index ac80e61b5..8b24e1ba2 100644 --- a/perllib/FixMyStreet/Map/OSM/MapQuest.pm +++ b/perllib/FixMyStreet/Map/OSM/MapQuest.pm @@ -11,8 +11,6 @@ use strict; sub map_type { 'OpenLayers.Layer.OSM.MapQuestOpen' } -sub map_template { 'mapquest-attribution' } - sub map_tiles { my ( $self, %params ) = @_; my ( $x, $y, $z ) = ( $params{x_tile}, $params{y_tile}, $params{zoom_act} ); diff --git a/perllib/FixMyStreet/Map/OSM/StreetView.pm b/perllib/FixMyStreet/Map/OSM/StreetView.pm index 12fbdb19d..3281faa35 100644 --- a/perllib/FixMyStreet/Map/OSM/StreetView.pm +++ b/perllib/FixMyStreet/Map/OSM/StreetView.pm @@ -11,7 +11,11 @@ use strict; sub map_type { '' } -sub map_template { 'osm-streetview' } +sub map_javascript { [ + '/vendor/OpenLayers/OpenLayers.fixmystreet.js', + '/js/map-OpenLayers.js', + '/js/map-streetview.js', +] } sub base_tile_url { return 'os.openstreetmap.org/sv'; diff --git a/perllib/FixMyStreet/Map/OSM/TonerLite.pm b/perllib/FixMyStreet/Map/OSM/TonerLite.pm index b0d12c453..b50611f3d 100644 --- a/perllib/FixMyStreet/Map/OSM/TonerLite.pm +++ b/perllib/FixMyStreet/Map/OSM/TonerLite.pm @@ -16,7 +16,12 @@ use strict; sub map_type { 'OpenLayers.Layer.Stamen' } -sub map_template { 'osm-toner-lite' } +sub map_javascript { [ + '/vendor/OpenLayers/OpenLayers.fixmystreet.js', + "https://stamen-maps.a.ssl.fastly.net/js/tile.stamen.js?v1.3.0", + '/js/map-OpenLayers.js', + '/js/map-toner-lite.js', +] } sub copyright { 'Map tiles by <a href="http://stamen.com">Stamen Design</a>, under <a href="http://creativecommons.org/licenses/by/3.0">CC BY 3.0</a>. Data by <a href="http://openstreetmap.org">OpenStreetMap</a>, under <a href="http://www.openstreetmap.org/copyright">ODbL</a>.' diff --git a/perllib/FixMyStreet/Map/Zurich.pm b/perllib/FixMyStreet/Map/Zurich.pm index b9d6e3297..8b4a3d931 100644 --- a/perllib/FixMyStreet/Map/Zurich.pm +++ b/perllib/FixMyStreet/Map/Zurich.pm @@ -65,6 +65,13 @@ sub copyright { sub map_template { 'zurich' } +sub map_javascript { [ + '/vendor/OpenLayers/OpenLayers.zurich.js', + '/js/OpenLayers.Projection.CH1903Plus.js', + '/js/map-OpenLayers.js', + '/js/map-wmts-base.js', + '/js/map-wmts-zurich.js', +] } # Reproject a WGS84 lat/lon into Swiss easting/northing sub reproject_from_latlon($$$) { diff --git a/t/map/tests.t b/t/map/tests.t new file mode 100644 index 000000000..f34ccfa6d --- /dev/null +++ b/t/map/tests.t @@ -0,0 +1,29 @@ +use FixMyStreet::Map; +use Test::More; + +my $requires = { + 'Angus' => 'angus/js.js', + 'Bing' => 'map-bing-ol.js', + 'Bristol' => 'map-wmts-bristol.js', + 'Bromley' => 'bromley/map.js', + 'FMS' => 'map-fms.js', + 'Google' => 'map-google.js', + 'GoogleOL' => 'map-google-ol.js', + 'OSM' => 'OpenStreetMap.js', + 'CycleMap' => 'OpenStreetMap.js', + 'MapQuest' => 'OpenStreetMap.js', + 'StreetView' => 'map-streetview.js', + 'TonerLite' => 'map-toner-lite.js', + 'Zurich' => 'map-wmts-zurich.js', +}; + +foreach (FixMyStreet::Map->maps) { + next if /WMTSBase/; # Only its subclasses have JS + my $js = $_->map_javascript; + my $test_file = $js->[-1]; + s/.*:://; + isnt $requires->{$_}, undef, "$_ requires present"; + like $test_file, qr/$requires->{$_}/, "$_ JS okay"; +} + +done_testing(); diff --git a/templates/web/angus/maps/fms.html b/templates/web/angus/maps/fms.html deleted file mode 100644 index 61c56f121..000000000 --- a/templates/web/angus/maps/fms.html +++ /dev/null @@ -1,11 +0,0 @@ -[% -map_js = [ - version('/vendor/OpenLayers/OpenLayers.angus.js'), - version('/js/map-OpenLayers.js'), - version('/js/map-bing-ol.js'), - version('/js/map-fms.js'), - version('/cobrands/fixmystreet/assets.js'), - version('/cobrands/angus/js.js'), -]; -map_html = INCLUDE maps/openlayers.html include_key = 1 -%] diff --git a/templates/web/base/maps/bing.html b/templates/web/base/maps/bing.html deleted file mode 100644 index df45eced5..000000000 --- a/templates/web/base/maps/bing.html +++ /dev/null @@ -1,8 +0,0 @@ -[% -map_js = [ - version('/vendor/OpenLayers/OpenLayers.fixmystreet.js'), - version('/js/map-OpenLayers.js'), - version('/js/map-bing-ol.js'), -]; -map_html = INCLUDE maps/openlayers.html -%] diff --git a/templates/web/base/maps/fms.html b/templates/web/base/maps/fms.html index ff5b4eab6..286ecc8ff 100644 --- a/templates/web/base/maps/fms.html +++ b/templates/web/base/maps/fms.html @@ -1,9 +1,3 @@ [% -map_js = [ - version('/vendor/OpenLayers/OpenLayers.fixmystreet.js'), - version('/js/map-OpenLayers.js'), - version('/js/map-bing-ol.js'), - version('/js/map-fms.js'), -]; map_html = INCLUDE maps/openlayers.html include_key = 1 %] diff --git a/templates/web/base/maps/google-ol.html b/templates/web/base/maps/google-ol.html index d88043403..3cd21fab3 100644 --- a/templates/web/base/maps/google-ol.html +++ b/templates/web/base/maps/google-ol.html @@ -1,17 +1,3 @@ -[% -google_maps_url = "https://maps.googleapis.com/maps/api/js?v=3"; -IF c.config.GOOGLE_MAPS_API_KEY; - google_maps_url = google_maps_url _ "&key=" _ c.config.GOOGLE_MAPS_API_KEY; -END; - -map_js = [ - google_maps_url, - version('/vendor/OpenLayers/OpenLayers.google.js'), - version('/js/map-OpenLayers.js'), - version('/js/map-google-ol.js'), -] -%] - [% map_sub_links = BLOCK %] <a class="hidden-nojs" id="map_layer_toggle" href="">[% loc('Satellite') %]</a> [% END %] diff --git a/templates/web/base/maps/google.html b/templates/web/base/maps/google.html index ec9885a04..e8c07b113 100644 --- a/templates/web/base/maps/google.html +++ b/templates/web/base/maps/google.html @@ -6,12 +6,6 @@ color: #000; } </style> -[% -map_js = [ - "http://maps.googleapis.com/maps/api/js?sensor=false", - version('/js/map-google.js'), -] -%] [% map_html = BLOCK %] <script nonce="[% csp_nonce %]"> diff --git a/templates/web/base/maps/mapquest-attribution.html b/templates/web/base/maps/mapquest-attribution.html deleted file mode 100644 index 43d6106a5..000000000 --- a/templates/web/base/maps/mapquest-attribution.html +++ /dev/null @@ -1,8 +0,0 @@ -[% -map_js = [ - version('/vendor/OpenLayers/OpenLayers.fixmystreet.js'), - version('/js/map-OpenLayers.js'), - version('/js/map-OpenStreetMap.js'), -]; -map_html = INCLUDE maps/openlayers.html -%] diff --git a/templates/web/base/maps/osm-streetview.html b/templates/web/base/maps/osm-streetview.html deleted file mode 100644 index f68f53039..000000000 --- a/templates/web/base/maps/osm-streetview.html +++ /dev/null @@ -1,8 +0,0 @@ -[% -map_js = [ - version('/vendor/OpenLayers/OpenLayers.fixmystreet.js'), - version('/js/map-OpenLayers.js'), - version('/js/map-streetview.js'), -]; -map_html = INCLUDE maps/openlayers.html -%] diff --git a/templates/web/base/maps/osm-toner-lite.html b/templates/web/base/maps/osm-toner-lite.html deleted file mode 100644 index 22b6636c5..000000000 --- a/templates/web/base/maps/osm-toner-lite.html +++ /dev/null @@ -1,9 +0,0 @@ -[% -map_js = [ - version('/vendor/OpenLayers/OpenLayers.fixmystreet.js'), - "https://stamen-maps.a.ssl.fastly.net/js/tile.stamen.js?v1.3.0", - version('/js/map-OpenLayers.js'), - version('/js/map-toner-lite.js'), -]; -map_html = INCLUDE maps/openlayers.html -%] diff --git a/templates/web/base/maps/osm.html b/templates/web/base/maps/osm.html index 43d6106a5..51c3ad388 100644 --- a/templates/web/base/maps/osm.html +++ b/templates/web/base/maps/osm.html @@ -1,8 +1,3 @@ [% -map_js = [ - version('/vendor/OpenLayers/OpenLayers.fixmystreet.js'), - version('/js/map-OpenLayers.js'), - version('/js/map-OpenStreetMap.js'), -]; map_html = INCLUDE maps/openlayers.html %] diff --git a/templates/web/bristol/maps/bristol.html b/templates/web/bristol/maps/bristol.html index f13ea4d32..1dcc82635 100644 --- a/templates/web/bristol/maps/bristol.html +++ b/templates/web/bristol/maps/bristol.html @@ -1,12 +1,3 @@ -[% -map_js = [ - version('/vendor/OpenLayers/OpenLayers.bristol.js'), - version('/js/map-OpenLayers.js'), - version('/js/map-wmts-base.js'), - version('/js/map-wmts-bristol.js'), -] -%] - [% map_html = BLOCK %] [% INCLUDE maps/openlayers.html %] [% INCLUDE maps/wmts_config.html %] diff --git a/templates/web/bromley/maps/bromley.html b/templates/web/bromley/maps/bromley.html deleted file mode 100644 index 71a150f5a..000000000 --- a/templates/web/bromley/maps/bromley.html +++ /dev/null @@ -1,10 +0,0 @@ -[% -map_js = [ - version('/vendor/OpenLayers/OpenLayers.fixmystreet.js'), - version('/js/map-OpenLayers.js'), - version('/js/map-bing-ol.js'), - version('/js/map-fms.js'), - version('/cobrands/bromley/map.js'), -]; -map_html = INCLUDE maps/openlayers.html include_key = 1 -%] diff --git a/templates/web/zurich/maps/zurich.html b/templates/web/zurich/maps/zurich.html index a9499f657..4000e1e52 100644 --- a/templates/web/zurich/maps/zurich.html +++ b/templates/web/zurich/maps/zurich.html @@ -1,13 +1,3 @@ -[% -map_js = [ - version('/vendor/OpenLayers/OpenLayers.zurich.js'), - version('/js/OpenLayers.Projection.CH1903Plus.js'), - version('/js/map-OpenLayers.js'), - version('/js/map-wmts-base.js'), - version('/js/map-wmts-zurich.js'), -] -%] - [% map_sub_links = BLOCK %] <a class="hidden-nojs" id="map_layer_toggle" href="">Stadtplan</a> [% END %] |