aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xbin/fixmystreet.com/add_emergency_message83
-rw-r--r--bin/fixmystreet.com/island_roads_setup_messages73
-rw-r--r--perllib/FixMyStreet/Cobrand/Peterborough.pm85
-rw-r--r--perllib/FixMyStreet/Geocode/OSM.pm1
-rw-r--r--perllib/FixMyStreet/Roles/Extra.pm2
-rw-r--r--templates/email/peterborough/_council_reference.html3
-rw-r--r--templates/email/peterborough/_council_reference.txt2
-rw-r--r--templates/email/peterborough/_council_reference_alert_update.html2
-rw-r--r--templates/email/peterborough/_council_reference_alert_update.txt2
-rw-r--r--templates/email/peterborough/_email_color_overrides.html18
-rw-r--r--templates/web/fixmystreet.com/footer_extra_js.html1
-rwxr-xr-xtemplates/web/peterborough/about/faq-en-gb.html97
-rw-r--r--templates/web/peterborough/alert/_index_text.html19
-rw-r--r--templates/web/peterborough/around/intro.html2
-rw-r--r--templates/web/peterborough/before_wrapper.html6
-rw-r--r--templates/web/peterborough/footer_extra.html19
-rw-r--r--templates/web/peterborough/footer_extra_js.html14
-rw-r--r--templates/web/peterborough/header_extra.html2
-rw-r--r--templates/web/peterborough/header_logo.html2
-rw-r--r--templates/web/peterborough/index-steps.html13
-rw-r--r--templates/web/peterborough/report/_council_sent_info.html17
-rw-r--r--templates/web/peterborough/tracking_code.html15
-rw-r--r--web/cobrands/bexley/js.js1
-rw-r--r--web/cobrands/bromley/assets.js1
-rw-r--r--web/cobrands/buckinghamshire/assets.js1
-rw-r--r--web/cobrands/fixmystreet-uk-councils/council_validation_rules.js1
-rw-r--r--web/cobrands/fixmystreet/assets.js3
-rw-r--r--web/cobrands/highways/assets.js1
-rw-r--r--web/cobrands/hounslow/assets.js1
-rw-r--r--web/cobrands/isleofwight/assets.js1
-rw-r--r--web/cobrands/lincolnshire/assets.js1
-rw-r--r--web/cobrands/peterborough/_colours.scss46
-rw-r--r--web/cobrands/peterborough/base.scss137
-rw-r--r--web/cobrands/peterborough/images/logo.pngbin0 -> 3081 bytes
-rw-r--r--web/cobrands/peterborough/images/logo.svg86
-rw-r--r--web/cobrands/peterborough/js.js41
-rw-r--r--web/cobrands/peterborough/layout.scss98
37 files changed, 816 insertions, 81 deletions
diff --git a/bin/fixmystreet.com/add_emergency_message b/bin/fixmystreet.com/add_emergency_message
new file mode 100755
index 000000000..5167cea32
--- /dev/null
+++ b/bin/fixmystreet.com/add_emergency_message
@@ -0,0 +1,83 @@
+#!/usr/bin/env perl
+#
+# One off script to add emergency messages to a council
+
+use strict;
+use warnings;
+use v5.14;
+
+BEGIN {
+ use File::Basename qw(dirname);
+ use File::Spec;
+ my $d = dirname(File::Spec->rel2abs($0));
+ require "$d/../../setenv.pl";
+}
+
+use Getopt::Long::Descriptive;
+use Term::ANSIColor;
+use FixMyStreet::DB;
+
+my ($opts, $usage) = describe_options(
+ '%c %o',
+ ['commit', 'whether to commit changes to the database' ],
+ ['body=s', 'name of body to attach question to', { required => 1 } ],
+ ['code=s', 'code to use for question', { required => 1 } ],
+ ['question=s', 'question to ask user first', { required => 1 } ],
+ ['yes=s', 'yes answer to question', { required => 1 } ],
+ ['no=s', 'no answer to question', { required => 1 } ],
+ ['message=s', 'message to be shown if form disabled', { required => 1 } ],
+ ['send_method=s', 'send method to restrict categories to' ],
+ ['help|h', "print usage message and exit" ],
+);
+$usage->die if $opts->help;
+
+if (!$opts->commit) {
+ say colored("*** DRY RUN ***", 'cyan');
+}
+
+my $field = {
+ order => 0,
+ required => 'true',
+ protected => 'true',
+ code => $opts->code,
+ description => $opts->question,
+ datatype => 'singlevaluelist',
+ variable => 'true',
+ values => [
+ {
+ key => 'yes',
+ name => $opts->yes,
+ disable => 1,
+ disable_message => $opts->message,
+ },
+ {
+ key => 'no',
+ name => $opts->no,
+ }
+ ],
+};
+
+my $body = FixMyStreet::DB->resultset("Body")->find({ name => $opts->body });
+unless ($body) {
+ say STDERR "Could not find body " . $opts->body;
+ exit 1;
+}
+
+my $contacts = $body->contacts->not_deleted;
+$contacts = $contacts->search({ send_method => $opts->send_method }) if $opts->send_method;
+foreach my $category ($contacts->all) {
+ my $found = $category->update_extra_field($field);
+ if ($found) {
+ say colored("Updating ", 'red') . $opts->code . " message disable form on " . $category->category . ", " . $opts->body;
+ } else {
+ say colored("Making ", 'green') . $opts->code . " message disable form on " . $category->category . ", " . $opts->body;
+ }
+
+ if ($opts->commit) {
+ $category->update({
+ editor => $0,
+ whenedited => \'current_timestamp',
+ note => $opts->code . ' extra field updated by script',
+ });
+ }
+}
diff --git a/bin/fixmystreet.com/island_roads_setup_messages b/bin/fixmystreet.com/island_roads_setup_messages
deleted file mode 100644
index 4969f18ba..000000000
--- a/bin/fixmystreet.com/island_roads_setup_messages
+++ /dev/null
@@ -1,73 +0,0 @@
-#!/usr/bin/env perl
-#
-# One off script to transfer the hardcoded JS messages to the database
-
-use strict;
-use warnings;
-use v5.14;
-
-BEGIN {
- use File::Basename qw(dirname);
- use File::Spec;
- my $d = dirname(File::Spec->rel2abs($0));
- require "$d/../../setenv.pl";
-}
-
-use FixMyStreet::DB;
-
-use Getopt::Long;
-
-my $commit;
-GetOptions(
- 'commit' => \$commit,
-);
-
-if (!$commit) {
- say "*** DRY RUN ***";
-}
-
-my $urgent = {
- order => 0,
- required => 'true',
- protected => 'true',
- code => 'urgent',
- description => 'To ensure your report is dealt with effectively, please tell us the severity of the issue:-',
- datatype_description => 'You have indicated that the issue requires an urgent response, please phone Island Roads on 01983 822440 so that we can respond to the issue appropriately.',
- datatype => 'singlevaluelist',
- variable => 'true',
- values => [
- {
- key => 'urgent',
- name => 'The issue requires an urgent response/action',
- disable => 1,
- },
- {
- key => 'not_urgent',
- name => 'The issue requires a routine/non-urgent response/action',
- }
- ],
-};
-
-my $iow = FixMyStreet::DB->resultset("Body")->find({ name => 'Isle of Wight Council' });
-if ($iow) {
- my @iow_contacts = $iow->contacts->search({ send_method => 'Triage' })->all;
- foreach my $category (@iow_contacts) {
- my $extra_fields = $category->get_extra_fields;
- my $found = 0;
- foreach (@$extra_fields) {
- next unless $_->{code} eq 'urgent';
- $_ = $urgent;
- $found = 1;
- }
- if (!$found) {
- push @$extra_fields, $urgent;
- }
- $category->set_extra_fields(@$extra_fields);
- say "Making emergency message disable form on " . $category->category . ", Isle of Wight";
- if ($commit) {
- $category->update;
- }
- }
-} else {
- say STDERR "Could not find IoW";
-}
diff --git a/perllib/FixMyStreet/Cobrand/Peterborough.pm b/perllib/FixMyStreet/Cobrand/Peterborough.pm
new file mode 100644
index 000000000..46242fcf3
--- /dev/null
+++ b/perllib/FixMyStreet/Cobrand/Peterborough.pm
@@ -0,0 +1,85 @@
+package FixMyStreet::Cobrand::Peterborough;
+use parent 'FixMyStreet::Cobrand::Whitelabel';
+
+use strict;
+use warnings;
+
+use Moo;
+with 'FixMyStreet::Roles::ConfirmValidation';
+
+sub council_area_id { 2566 }
+sub council_area { 'Peterborough' }
+sub council_name { 'Peterborough City Council' }
+sub council_url { 'peterborough' }
+
+sub disambiguate_location {
+ my $self = shift;
+ my $string = shift;
+
+ return {
+ %{ $self->SUPER::disambiguate_location() },
+ centre => '52.6085234396978,-0.253091266573947',
+ bounds => [ 52.5060949603654, -0.497663559599628, 52.6752139533306, -0.0127696975457487 ],
+ };
+}
+
+sub get_geocoder { 'OSM' }
+
+sub geocoder_munge_results {
+ my ($self, $result) = @_;
+ $result->{display_name} = '' unless $result->{display_name} =~ /City of Peterborough/;
+ $result->{display_name} =~ s/, UK$//;
+ $result->{display_name} =~ s/, City of Peterborough, East of England, England//;
+}
+
+sub admin_user_domain { "peterborough.gov.uk" }
+
+sub open311_config {
+ my ($self, $row, $h, $params) = @_;
+
+ my $extra = $row->get_extra_fields;
+ push @$extra,
+ { name => 'report_url',
+ value => $h->{url} },
+ { name => 'title',
+ value => $row->title },
+ { name => 'description',
+ value => $row->detail };
+
+ # remove the emergency category which is informational only
+ @$extra = grep { $_->{name} ne 'emergency' } @$extra;
+
+ # Reports made via FMS.com or the app probably won't have a site code
+ # value because we don't display the adopted highways layer on those
+ # frontends. Instead we'll look up the closest asset from the WFS
+ # service at the point we're sending the report over Open311.
+ if (!$row->get_extra_field_value('site_code')) {
+ if (my $site_code = $self->lookup_site_code($row)) {
+ push @$extra,
+ { name => 'site_code',
+ value => $site_code };
+ }
+ }
+
+ $row->set_extra_fields(@$extra);
+}
+
+sub lookup_site_code_config { {
+ buffer => 50, # metres
+ url => "https://tilma.mysociety.org/mapserver/peterborough",
+ srsname => "urn:ogc:def:crs:EPSG::27700",
+ typename => "highways",
+ property => "Usrn",
+ accept_feature => sub { 1 },
+ accept_types => { Polygon => 1 },
+} }
+
+sub open311_munge_update_params {
+ my ($self, $params, $comment, $body) = @_;
+
+ # Peterborough want to make it clear in Confirm when an update has come
+ # from FMS.
+ $params->{description} = "[Customer FMS update] " . $params->{description};
+}
+
+1;
diff --git a/perllib/FixMyStreet/Geocode/OSM.pm b/perllib/FixMyStreet/Geocode/OSM.pm
index a36ae3192..6e6dbfbb1 100644
--- a/perllib/FixMyStreet/Geocode/OSM.pm
+++ b/perllib/FixMyStreet/Geocode/OSM.pm
@@ -55,6 +55,7 @@ sub string {
my ( $error, @valid_locations, $latitude, $longitude, $address );
foreach (@$js) {
$c->cobrand->call_hook(geocoder_munge_results => $_);
+ next unless $_->{display_name};
( $latitude, $longitude ) =
map { Utils::truncate_coordinate($_) }
( $_->{lat}, $_->{lon} );
diff --git a/perllib/FixMyStreet/Roles/Extra.pm b/perllib/FixMyStreet/Roles/Extra.pm
index 883ac2fd7..5132c3e58 100644
--- a/perllib/FixMyStreet/Roles/Extra.pm
+++ b/perllib/FixMyStreet/Roles/Extra.pm
@@ -141,6 +141,7 @@ sub push_extra_fields {
Given an extra field, will replace one with the same code in the
existing list of fields, or add to the end if not present.
+Returns true if it was already present, false if newly added.
=cut
@@ -167,6 +168,7 @@ sub update_extra_field {
}
$self->set_extra_fields(@$existing);
+ return $found;
}
=head2 remove_extra_field
diff --git a/templates/email/peterborough/_council_reference.html b/templates/email/peterborough/_council_reference.html
new file mode 100644
index 000000000..8a1a9e1ee
--- /dev/null
+++ b/templates/email/peterborough/_council_reference.html
@@ -0,0 +1,3 @@
+<p style="[% p_style %]">The report's reference number is <strong>[% problem.id %]</strong>.
+ Please quote this if you need to contact the council about this report.</p>
+
diff --git a/templates/email/peterborough/_council_reference.txt b/templates/email/peterborough/_council_reference.txt
new file mode 100644
index 000000000..75d7e93d2
--- /dev/null
+++ b/templates/email/peterborough/_council_reference.txt
@@ -0,0 +1,2 @@
+The report's reference number is [% problem.id %]. Please quote this if
+you need to contact the council about this report.
diff --git a/templates/email/peterborough/_council_reference_alert_update.html b/templates/email/peterborough/_council_reference_alert_update.html
new file mode 100644
index 000000000..bc7e0282c
--- /dev/null
+++ b/templates/email/peterborough/_council_reference_alert_update.html
@@ -0,0 +1,2 @@
+<p style="[% p_style %]">The report's reference number is <strong>[% problem.id %]</strong>.
+ Please quote this if you need to contact the council about this report.</p>
diff --git a/templates/email/peterborough/_council_reference_alert_update.txt b/templates/email/peterborough/_council_reference_alert_update.txt
new file mode 100644
index 000000000..75d7e93d2
--- /dev/null
+++ b/templates/email/peterborough/_council_reference_alert_update.txt
@@ -0,0 +1,2 @@
+The report's reference number is [% problem.id %]. Please quote this if
+you need to contact the council about this report.
diff --git a/templates/email/peterborough/_email_color_overrides.html b/templates/email/peterborough/_email_color_overrides.html
new file mode 100644
index 000000000..e2440c703
--- /dev/null
+++ b/templates/email/peterborough/_email_color_overrides.html
@@ -0,0 +1,18 @@
+[%
+
+color_green = '#337b1c'
+color_white = '#fff'
+
+header_background_color = color_white
+header_text_color = color_green
+
+secondary_column_background_color = color_white
+
+button_background_color = color_green
+button_text_color = color_white
+
+logo_width = "231" # pixel measurement, but without 'px' suffix
+logo_height = "102" # pixel measurement, but without 'px' suffix
+logo_file = "logo.gif"
+
+%]
diff --git a/templates/web/fixmystreet.com/footer_extra_js.html b/templates/web/fixmystreet.com/footer_extra_js.html
index 6fcb5d59c..c8ad921f6 100644
--- a/templates/web/fixmystreet.com/footer_extra_js.html
+++ b/templates/web/fixmystreet.com/footer_extra_js.html
@@ -15,6 +15,7 @@ IF bodyclass.match('mappage');
scripts.push( version('/cobrands/northamptonshire/assets.js') );
scripts.push( version('/cobrands/hounslow/assets.js') );
scripts.push( version('/cobrands/westminster/assets.js') );
+ scripts.push( version('/cobrands/peterborough/js.js') );
scripts.push( version('/cobrands/highways/assets.js') );
scripts.push( version('/cobrands/fixmystreet-uk-councils/council_validation_rules.js') );
scripts.push(
diff --git a/templates/web/peterborough/about/faq-en-gb.html b/templates/web/peterborough/about/faq-en-gb.html
new file mode 100755
index 000000000..3835b71b7
--- /dev/null
+++ b/templates/web/peterborough/about/faq-en-gb.html
@@ -0,0 +1,97 @@
+[% INCLUDE 'header.html', title = loc('Frequently Asked Questions'), bodyclass = 'twothirdswidthpage' %]
+
+[% INCLUDE 'about/_sidebar.html' %]
+
+<h1><a name="faq"></a>[% loc('Frequently Asked Questions') %]</h1>
+
+<dl>
+
+ <dt>What is this site?</dt>
+ <dd>[% site_name %] is a site to help people report to their
+ local authority, view, or discuss local issues they&rsquo;ve found, by
+ simply locating them on a map.</dd>
+
+ <dt>How do I get in touch with [% site_name %]?</dt>
+ <dd>Here&rsquo;s the FixMyStreet <a href="/contact">contact page</a>.</dd>
+
+ <dt>How do I contact Peterborough City Council?</dt>
+ <dd>Here’s the <a href="https://www.peterborough.gov.uk/contact-us/">Peterborough City Council contact page</a>.</dd>
+
+
+ <dt>What sort of problems should I report with [% site_name %]?</dt>
+ <dd>This depends upon the precise purpose of [% site_name %];
+ in the UK, FixMyStreet is primarily for reporting things which are
+ <strong>broken or dirty or damaged or dumped, and need fixing, cleaning
+ or clearing</strong>, such as:
+ <ul>
+ <li>Streetcleaning, such as broken glass in a cycle lane
+ <li>Unlit lampposts
+ <li>Potholes
+ </ul>
+ </dd>
+
+ <dt>What isn&rsquo;t [% site_name %] for?</dt>
+ <dd>[% site_name %] is not a way of getting in touch with your
+ authority for all issues &ndash; please use this site only for problems
+ such as the above. We often route problem reports via cleansing services or
+ highways and so using this site for other matters may result in a delay in
+ your report getting to the right department. <strong>You will need to
+ contact your authority directly for problems such as</strong>:
+
+ <ul><li>Anti-social behaviour
+ <li>Any urgent or emergency problems
+ <li>Noise pollution or barking dogs
+ <li>Fires and smoke/smell pollution
+ <li>Missing wheelie bins or recycling boxes or missed rubbish collections
+ <li>Proposals for speed bumps/ CCTV/ pedestrian crossings/ new road layouts/ etc.
+ <li>Complaining about your neighbours
+ <li>Complaining about the authority
+ <li>Joy riding, drug taking, animal cruelty, or other criminal activity
+ </ul>
+ <p>Authorities often have direct hotlines for these sorts of issues.</p>
+ </dd>
+
+ <p>Please check the <a href="https://www.peterborough.gov.uk/forms/report/">Peterborough City Council reporting page</a> for more details about these services.</p>
+
+ <dt>How do I use the site?</dt>
+ <dd>After entering a location, you are presented with a map of that area.
+ You can view problems already reported in that area, or report ones of your
+ own by clicking on the map at the location of the problem.</dd>
+
+ <dt>How are the problems solved?</dt>
+ <dd>They are reported to the relevant authority by email. The authority can
+ then resolve the problem the way they normally would. Alternatively, you
+ can discuss the problem on the website with others, and then together lobby
+ the authority to fix it, or fix it directly yourselves.</dd>
+
+ <dt>Is it free?</dt>
+ <dd>The site is free to use, yes. The FixMyStreet Platform is maintained by
+ a registered charity, so if you want to make a contribution,
+ <a href="https://www.mysociety.org/donate/">please do</a>.</dd>
+
+ <dt>Can I use [% site_name %] on my mobile?</dt>
+ <dd>
+ <p>The [% site_name %] website will already work on your mobile
+ phone, adapting to the size of your screen automatically.</p>
+ </dd>
+</dl>
+
+<h2><a name="practical"></a>Practical Questions</h2>
+
+<dl>
+ <dt>Do you remove silly or illegal content?</dt>
+ <dd>[% site_name %] is not responsible for the content and
+ accuracy of material submitted by its users. We reserve the right to
+ edit or remove any problems or updates which we consider to be
+ inappropriate upon being informed by a user of the site.</dd>
+
+ <dt>Why can&rsquo;t I zoom out more on the reporting map?</dt>
+ <dd>We want to keep [% site_name %] locally focused, so restrict
+ the ability to move radically between areas. The map on Your Reports will
+ let you see all the reports you&rsquo;ve made, wherever they are. If
+ you&rsquo;re from the authority then the emailed version of the problem
+ report might also contain the closest road or postcode to the pin on the
+ map.</dd>
+</dl>
+
+[% INCLUDE 'footer.html' pagefooter = 'yes' %]
diff --git a/templates/web/peterborough/alert/_index_text.html b/templates/web/peterborough/alert/_index_text.html
new file mode 100644
index 000000000..281c662b1
--- /dev/null
+++ b/templates/web/peterborough/alert/_index_text.html
@@ -0,0 +1,19 @@
+<p>
+[% site_name %] provide RSS feeds and email alerts for local
+problems, including alerts for all problems within a particular ward, or all
+problems within a certain distance of a particular location.
+</p>
+
+[% IF location_error %]
+ <div class="error">[% location_error %]</div>
+[% ELSE %]
+ [% INCLUDE 'errors.html' %]
+[% END %]
+
+<p>
+[% IF c.cobrand.is_council %]
+[% tprintf(loc('To find out what local alerts we have for you, please enter your %s postcode or street name and area:'), c.cobrand.council_area) %]
+[% ELSE %]
+[% loc('To find out what local alerts we have for you, please enter your postcode or street name and area' ) %]
+[% END %]
+</p>
diff --git a/templates/web/peterborough/around/intro.html b/templates/web/peterborough/around/intro.html
new file mode 100644
index 000000000..8d6d5e54a
--- /dev/null
+++ b/templates/web/peterborough/around/intro.html
@@ -0,0 +1,2 @@
+<h1>Report local problems</h1>
+<h2>Report a problem on a street in your area and see other reported issues.</h2>
diff --git a/templates/web/peterborough/before_wrapper.html b/templates/web/peterborough/before_wrapper.html
new file mode 100644
index 000000000..506eafae4
--- /dev/null
+++ b/templates/web/peterborough/before_wrapper.html
@@ -0,0 +1,6 @@
+[% IF c.config.BASE_URL == "https://www.fixmystreet.com" %]
+<!-- Google Tag Manager (noscript) -->
+<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=UA-144500283-1"
+height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
+<!-- End Google Tag Manager (noscript) -->
+[% END %]
diff --git a/templates/web/peterborough/footer_extra.html b/templates/web/peterborough/footer_extra.html
new file mode 100644
index 000000000..d20bdf876
--- /dev/null
+++ b/templates/web/peterborough/footer_extra.html
@@ -0,0 +1,19 @@
+<footer class="pboro-footer">
+ <ul>
+ <li><a href="https://www.peterborough.gov.uk/accessibility/">
+ Accessibility
+ </a></li>
+ <li><a href="https://www.peterborough.gov.uk/privacy/">
+ Privacy policy
+ </a></li>
+ <li><a href="https://www.peterborough.gov.uk/cookies/">
+ Cookies
+ </a></li>
+ <li><a href="https://www.peterborough.gov.uk/disclaimer/">
+ Disclaimer
+ </a></li>
+ <li><a href="https://www.peterborough.gov.uk/contact-us/">
+ Contact us
+ </a></li>
+ </ul>
+</div>
diff --git a/templates/web/peterborough/footer_extra_js.html b/templates/web/peterborough/footer_extra_js.html
new file mode 100644
index 000000000..afed8d350
--- /dev/null
+++ b/templates/web/peterborough/footer_extra_js.html
@@ -0,0 +1,14 @@
+[% scripts.push(
+ version('/cobrands/fixmystreet-uk-councils/js.js'),
+ version('/cobrands/fixmystreet-uk-councils/council_validation_rules.js'),
+) %]
+[%~
+IF bodyclass.match('mappage');
+ scripts.push(
+ version('/vendor/OpenLayers.Projection.OrdnanceSurvey.js'),
+ version('/cobrands/fixmystreet/assets.js'),
+ version('/cobrands/peterborough/js.js'),
+ version('/cobrands/highways/assets.js'),
+ );
+END
+%]
diff --git a/templates/web/peterborough/header_extra.html b/templates/web/peterborough/header_extra.html
new file mode 100644
index 000000000..4aa99dd3c
--- /dev/null
+++ b/templates/web/peterborough/header_extra.html
@@ -0,0 +1,2 @@
+[% INCLUDE 'tracking_code.html' %]
+<link rel="stylesheet" href="//fonts.googleapis.com/css?family=Roboto:900,400,700,300,100">
diff --git a/templates/web/peterborough/header_logo.html b/templates/web/peterborough/header_logo.html
new file mode 100644
index 000000000..dbb0f51f4
--- /dev/null
+++ b/templates/web/peterborough/header_logo.html
@@ -0,0 +1,2 @@
+ <a href="https://www.peterborough.gov.uk/" id="site-logo">Peterborough City Council</a>
+ <a href="/" id="report-cta" title="[%- loc('Report a problem') -%]">[%- loc('Report') -%]</a>
diff --git a/templates/web/peterborough/index-steps.html b/templates/web/peterborough/index-steps.html
new file mode 100644
index 000000000..13d8c8961
--- /dev/null
+++ b/templates/web/peterborough/index-steps.html
@@ -0,0 +1,13 @@
+<h2>[% loc('How to report a problem') %]</h2>
+
+<ol class="big-numbers">
+ <li>[% question %]</li>
+ <li>[% loc('Locate the problem on a map') %]</li>
+ <li>[% loc('Enter more details of the problem') %]</li>
+ <li>Confirm your report and [% c.cobrand.council_name %] will investigate</li>
+</ol>
+
+<section class="full-width">
+[% INCLUDE "front/stats.html" %]
+[% TRY %][% INCLUDE "front/tips.html" %][% CATCH file %][% END %]
+</section>
diff --git a/templates/web/peterborough/report/_council_sent_info.html b/templates/web/peterborough/report/_council_sent_info.html
new file mode 100644
index 000000000..1963020bc
--- /dev/null
+++ b/templates/web/peterborough/report/_council_sent_info.html
@@ -0,0 +1,17 @@
+[% SET duration_clause = problem.duration_string(c) %]
+[% IF duration_clause || problem.whensent %]
+ <p class="council_sent_info">
+ [%- IF problem.whensent %]
+ [%- IF duration_clause %]
+ [%- external_ref_clause = tprintf(loc('Council ref:&nbsp;%s'), problem.id) %]
+ [%- ELSE %]
+ [%- external_ref_clause = tprintf(loc('%s ref:&nbsp;%s'), problem.external_body, problem.id) %]
+ [%- END %]
+ [%- END -%]
+ [% duration_clause %]
+ [%- IF external_ref_clause %]
+ [%- IF duration_clause %]. [% END %]
+ <strong>[% external_ref_clause %].</strong>
+ [%- END %]
+ </p>
+[% END %]
diff --git a/templates/web/peterborough/tracking_code.html b/templates/web/peterborough/tracking_code.html
new file mode 100644
index 000000000..695aac833
--- /dev/null
+++ b/templates/web/peterborough/tracking_code.html
@@ -0,0 +1,15 @@
+[% IF c.config.BASE_URL == "https://www.fixmystreet.com" %]
+
+<!-- Global Site Tag (gtag.js) - Google Analytics -->
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-144500283-1"></script>
+<script>
+ window.dataLayer = window.dataLayer || [];
+ function gtag(){dataLayer.push(arguments);}
+ gtag('js', new Date());
+
+ gtag('config', 'UA-144500283-1');
+</script>
+
+[% ELSE %]
+<!-- Tracking code not inserted as "[% c.config.BASE_URL %]" not "https://www.fixmystreet.com" -->
+[% END %]
diff --git a/web/cobrands/bexley/js.js b/web/cobrands/bexley/js.js
index cc973fda6..24643e4db 100644
--- a/web/cobrands/bexley/js.js
+++ b/web/cobrands/bexley/js.js
@@ -14,7 +14,6 @@ var defaults = {
SRSNAME: "urn:ogc:def:crs:EPSG::3857"
}
},
- format_class: OpenLayers.Format.GML.v3.MultiCurveFix, // Not sure needed any more
max_resolution: 4.777314267158508,
min_resolution: 0.5971642833948135,
geometryName: 'msGeometry',
diff --git a/web/cobrands/bromley/assets.js b/web/cobrands/bromley/assets.js
index 13be2d463..a0ca82134 100644
--- a/web/cobrands/bromley/assets.js
+++ b/web/cobrands/bromley/assets.js
@@ -14,7 +14,6 @@ var defaults = {
SRSNAME: "urn:ogc:def:crs:EPSG::3857"
}
},
- format_class: OpenLayers.Format.GML.v3.MultiCurveFix,
asset_type: 'spot',
max_resolution: 4.777314267158508,
min_resolution: 0.5971642833948135,
diff --git a/web/cobrands/buckinghamshire/assets.js b/web/cobrands/buckinghamshire/assets.js
index 699588d98..74253448e 100644
--- a/web/cobrands/buckinghamshire/assets.js
+++ b/web/cobrands/buckinghamshire/assets.js
@@ -14,7 +14,6 @@ var defaults = {
SRSNAME: "urn:ogc:def:crs:EPSG::27700"
}
},
- format_class: OpenLayers.Format.GML.v3.MultiCurveFix,
asset_type: 'spot',
max_resolution: {
'buckinghamshire': 2.116670900008467,
diff --git a/web/cobrands/fixmystreet-uk-councils/council_validation_rules.js b/web/cobrands/fixmystreet-uk-councils/council_validation_rules.js
index f693f59f8..3f350a82f 100644
--- a/web/cobrands/fixmystreet-uk-councils/council_validation_rules.js
+++ b/web/cobrands/fixmystreet-uk-councils/council_validation_rules.js
@@ -45,6 +45,7 @@ body_validation_rules = {
maxlength: 50
}
},
+ 'Peterborough City Council': confirm_validation_rules,
'Rutland County Council': {
title: {
required: true,
diff --git a/web/cobrands/fixmystreet/assets.js b/web/cobrands/fixmystreet/assets.js
index 0bd6d411b..ad832e67f 100644
--- a/web/cobrands/fixmystreet/assets.js
+++ b/web/cobrands/fixmystreet/assets.js
@@ -534,7 +534,7 @@ function construct_protocol_options(options) {
if (options.http_options !== undefined) {
protocol_options = options.http_options;
OpenLayers.Util.applyDefaults(options, {
- format_class: OpenLayers.Format.GML,
+ format_class: OpenLayers.Format.GML.v3,
format_options: {}
});
if (options.geometryName) {
@@ -1182,6 +1182,7 @@ fixmystreet.message_controller = (function() {
} else {
$msg.insertBefore('#js-post-category-messages');
}
+ $msg[0].scrollIntoView();
}
disable_report_form(stopper.keep_category_extras);
}
diff --git a/web/cobrands/highways/assets.js b/web/cobrands/highways/assets.js
index dc0c43468..5c57f308a 100644
--- a/web/cobrands/highways/assets.js
+++ b/web/cobrands/highways/assets.js
@@ -14,7 +14,6 @@ var defaults = {
SRSNAME: "urn:ogc:def:crs:EPSG::3857"
}
},
- format_class: OpenLayers.Format.GML.v3.MultiCurveFix,
asset_type: 'area',
// this covers zoomed right out on Cumbrian sections of
// the M6
diff --git a/web/cobrands/hounslow/assets.js b/web/cobrands/hounslow/assets.js
index abe3d20da..2dd996c68 100644
--- a/web/cobrands/hounslow/assets.js
+++ b/web/cobrands/hounslow/assets.js
@@ -14,7 +14,6 @@ var defaults = {
SRSNAME: "urn:ogc:def:crs:EPSG::27700"
}
},
- format_class: OpenLayers.Format.GML.v3.MultiCurveFix,
asset_type: 'spot',
max_resolution: {
'hounslow': 0.5291677250021167,
diff --git a/web/cobrands/isleofwight/assets.js b/web/cobrands/isleofwight/assets.js
index 9d5c8de50..0a43e9e2c 100644
--- a/web/cobrands/isleofwight/assets.js
+++ b/web/cobrands/isleofwight/assets.js
@@ -19,7 +19,6 @@ var defaults = {
SRSNAME: "urn:ogc:def:crs:EPSG::27700"
}
},
- format_class: OpenLayers.Format.GML.v3.MultiCurveFix,
max_resolution: {
'isleofwight': 0.5291677250021167,
'fixmystreet': 1.194328566789627
diff --git a/web/cobrands/lincolnshire/assets.js b/web/cobrands/lincolnshire/assets.js
index afe6abf8f..cb85f8fc6 100644
--- a/web/cobrands/lincolnshire/assets.js
+++ b/web/cobrands/lincolnshire/assets.js
@@ -14,7 +14,6 @@ var defaults = {
SRSNAME: "urn:ogc:def:crs:EPSG::3857"
}
},
- format_class: OpenLayers.Format.GML.v3.MultiCurveFix,
asset_type: 'spot',
max_resolution: 2.388657133579254,
min_resolution: 0.5971642833948135,
diff --git a/web/cobrands/peterborough/_colours.scss b/web/cobrands/peterborough/_colours.scss
new file mode 100644
index 000000000..8211d8835
--- /dev/null
+++ b/web/cobrands/peterborough/_colours.scss
@@ -0,0 +1,46 @@
+/* COLOURS */
+
+$menu-image: 'menu-black';
+
+$mappage-header-height: 134px;
+
+// Primary
+$white: #fff;
+$green: #337b1c;
+$grey: #666664;
+
+
+// Secondary
+$orange: #ea8032;
+$blue: #43609a;
+$pale_green: #f2f7f0;
+$alt_green: #328b15;
+$light_green: #73bf5b;
+$dark_green: #0f4a40;
+$teal :#1e98a7;
+$black: #333;
+
+$primary: $green;
+$primary_b: #222;
+$primary_text: $white;
+
+$base_bg: $white;
+$base_fg: #222;
+
+$link-color: $green;
+$link-visited_color: $dark_green;
+$link-hover-color: $dark_green;
+
+$nav_background_colour: $white;
+$nav_colour: $grey;
+$nav_hover_background_colour: darken($green, 10%);
+
+$col_click_map: $green;
+
+$header-top-border: false;
+
+$roboto: 'Roboto', Arial, sans-serif;
+
+$heading-font: $roboto;
+$body-font: $roboto;
+$meta-font: $roboto;
diff --git a/web/cobrands/peterborough/base.scss b/web/cobrands/peterborough/base.scss
new file mode 100644
index 000000000..58b31c66b
--- /dev/null
+++ b/web/cobrands/peterborough/base.scss
@@ -0,0 +1,137 @@
+@import "../sass/h5bp";
+@import "./_colours";
+@import "../sass/mixins";
+@import "../sass/base";
+
+#site-logo {
+ width: 162px;
+ height: 56px;
+ padding: 0.5em 0;
+ @include svg-background-image('/cobrands/peterborough/images/logo');
+ background-position: 0 50%;
+ background-repeat: no-repeat;
+ background-size: 162px 56px;
+}
+
+#postcodeForm .form-hint {
+ color: $white;
+}
+
+#map_box #map {
+ background-color: white;
+}
+
+input {
+ font-family: $body-font;
+}
+
+label {
+ cursor: auto;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ font-weight: 700;
+}
+
+h1, h2 {
+ color: $alt-green;
+}
+
+#front-main {
+ h2 {
+ font-style: normal;
+ font-weight: normal;
+ color: $primary_b;
+ }
+ #postcodeForm {
+ background-color: #fff;
+ div input#sub {
+ background-color: $link-color;
+ }
+ }
+ label,
+ .form-hint {
+ color: $primary_b;
+ }
+ a#geolocate_link {
+ background-color: transparent;
+ padding: 0;
+ color: $link-color;
+ &:hover,
+ &:active,
+ &:focus {
+ background-color: transparent;
+ text-decoration: underline
+ }
+ }
+}
+
+.btn-primary,
+.green-btn,
+.btn--primary {
+ border: none;
+ background: $green;
+
+ &:hover,
+ &:active {
+ background: lighten($green, 5%);
+ }
+}
+
+.general-notes {
+ .box-warning {
+ font-size: 1.2em;
+ }
+}
+
+.nav-menu {
+ font-weight: 700;
+}
+
+a,
+.fake-link {
+ color: $link-color;
+
+ &:visited {
+ color: $link-visited-color;
+ }
+
+ &:hover,
+ &:active {
+ color: $link-hover-color;
+ }
+}
+
+.dz-clickable .dz-message u {
+ color: $link-color;
+}
+
+.big-green-banner {
+ text-transform: none;
+}
+
+.pboro-footer {
+ text-align: center;
+ margin-top: 15px;
+ padding-top: 10px;
+ padding-bottom: 10px;
+ border-top: 1px solid #e9e9e9;
+ p {
+ margin: 30px 0 0;
+ }
+
+ ul {
+ margin: 10px 0 15px;
+ }
+
+ li {
+ list-style: none;
+ }
+
+ a {
+ color: $black;
+ text-decoration: underline;
+ margin: 0 0.5em;
+ font-size: 1.1em;
+ }
+} \ No newline at end of file
diff --git a/web/cobrands/peterborough/images/logo.png b/web/cobrands/peterborough/images/logo.png
new file mode 100644
index 000000000..bb58b9807
--- /dev/null
+++ b/web/cobrands/peterborough/images/logo.png
Binary files differ
diff --git a/web/cobrands/peterborough/images/logo.svg b/web/cobrands/peterborough/images/logo.svg
new file mode 100644
index 000000000..1a02502fd
--- /dev/null
+++ b/web/cobrands/peterborough/images/logo.svg
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 23.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 162 56" style="enable-background:new 0 0 162 56;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#007361;}
+ .st1{fill:none;}
+ .st2{fill:#63BB46;}
+</style>
+<g>
+ <path class="st0" d="M2.7,36.5c-1-2.1,1.1-3.3,2.1-3.9c10.1-6.3,15.7-8.9,23.9-11c10.7-2.8,21.8-1.6,27.6,1
+ c3.6,1.6,2.4,2.9,2.1,3.3c-1.4,2.1-3.3,3.5-5.1,5.8c-2.8,3.5-4.1,5.5-6.3,9.4c0.7-3.6,1.5-5.6,3.1-8.9c1.1-2.1,1.7-3.3,3.1-5.2
+ c-8.7-0.1-13.8,0.7-22,3.6c-10,3.5-15.7,7.3-23.2,14c-0.5,0.5-1.8,0.4-2.1-0.2C4.1,40.8,4.2,39.7,2.7,36.5"/>
+ <path class="st1" d="M2.7,36.5c-1-2.1,1.1-3.3,2.1-3.9c10.1-6.3,15.7-8.9,23.9-11c10.7-2.8,21.8-1.6,27.6,1
+ c3.6,1.6,2.4,2.9,2.1,3.3c-1.4,2.1-3.3,3.5-5.1,5.8c-2.8,3.5-4.1,5.5-6.3,9.4c0.7-3.6,1.5-5.6,3.1-8.9c1.1-2.1,1.7-3.3,3.1-5.2
+ c-8.7-0.1-13.8,0.7-22,3.6c-10,3.5-15.7,7.3-23.2,14c-0.5,0.5-1.8,0.4-2.1-0.2C4.1,40.8,4.2,39.7,2.7,36.5z"/>
+ <path class="st2" d="M60.5,27.3c-3.6,3.2-9.3,10.1-11,13.1c-2.1,3.8-3.1,7.6-0.4,9c1.8,1,5-0.5,8.2-2.3c6.6-3.6,25.9-13.1,44-15.4
+ c21.2-2.9,41.5,2.4,54.5,5.9c0.6,0.2,5-3.1,3.6-3.7c-11.3-5.6-35.5-12.4-58.6-10.2c-16.6,1.6-26.6,5.8-42,13.2
+ c-2.7,1.3-3.9,2.3-4.9,2.1c-0.7-0.2-0.1-1.9,1-3.6C56,33.4,58.1,30.8,60.5,27.3"/>
+ <path class="st1" d="M60.5,27.3c-3.6,3.2-9.3,10.1-11,13.1c-2.1,3.8-3.1,7.6-0.4,9c1.8,1,5-0.5,8.2-2.3c6.6-3.6,25.9-13.1,44-15.4
+ c21.2-2.9,41.5,2.4,54.5,5.9c0.6,0.2,5-3.1,3.6-3.7c-11.3-5.6-35.5-12.4-58.6-10.2c-16.6,1.6-26.6,5.8-42,13.2
+ c-2.7,1.3-3.9,2.3-4.9,2.1c-0.7-0.2-0.1-1.9,1-3.6C56,33.4,58.1,30.8,60.5,27.3z"/>
+ <path class="st0" d="M2.4,13.2h5v-0.4c-1.1-0.1-1.3-0.2-1.3-1.4V8.6c1.9,0,2.8,0,3.7-0.5c1.2-0.6,1.4-1.7,1.4-2.2
+ c0-2.6-2.7-2.8-3.9-2.8H2.4v0.4c0.7,0.1,1.3,0.1,1.3,1.4v6.6c0,0.8-0.2,1.1-0.4,1.2c-0.1,0.1-0.1,0.1-0.9,0.2L2.4,13.2 M6.1,4.2
+ c0-0.3,0.2-0.5,0.7-0.5c1.2,0,1.7,0.5,1.7,2.2c0,1.8-0.6,2.2-2.4,2.2C6.1,8.1,6.1,4.2,6.1,4.2z"/>
+ <path class="st0" d="M14.3,3.6c0.6,0,1.3,0.1,1.3,1.1v7.2c0,1-0.4,1-1.3,1.1v0.4H23l0.6-3.1h-0.4c-1,2.2-2.4,2.7-3.9,2.7
+ c-1,0-1.3-0.2-1.3-0.9V8.5c1.5,0,2.2,0.4,2.4,2.3h0.4v-5h-0.4C20.2,7.6,19.4,8,18,8V4.6c0-0.6,0.3-0.7,1.1-0.7c2,0,3.1,0.4,3.4,2.4
+ h0.3v-3h-8.6v0.2"/>
+ <path class="st0" d="M34.4,12.9c-1.1-0.1-1.5-0.1-1.5-1.4V3.6c1.1,0.1,2.5,0.1,2.9,2.6h0.4v-3h-8.9v3h0.4c0.3-2.3,1.8-2.4,2.9-2.6
+ v7.9c0,1.3-0.3,1.3-1.5,1.4v0.3h5.3L34.4,12.9"/>
+ <path class="st0" d="M39.6,3.6c0.6,0,1.3,0.1,1.3,1.1v7.2c0,1-0.4,1-1.3,1.1v0.4h8.7l0.6-3.1h-0.4c-1,2.2-2.4,2.7-3.9,2.7
+ c-1,0-1.3-0.2-1.3-0.9V8.5c1.5,0,2.2,0.4,2.4,2.3h0.4v-5h-0.4c-0.2,1.8-1,2.2-2.4,2.2V4.6c0-0.6,0.3-0.7,1.1-0.7
+ c2,0,3.1,0.4,3.4,2.4h0.3v-3h-8.5L39.6,3.6"/>
+ <path class="st0" d="M56.2,4.3c0.1-0.4,0.1-0.6,1-0.6c1.2,0,1.8,0.6,1.8,2.1C59,7.7,58.3,8,56.2,8V4.3 M62.8,12.9
+ c-0.2,0-0.4,0-0.6-0.3l-3-4.3c0.8-0.2,2.3-0.7,2.3-2.5c0-2.5-3.2-2.7-4.1-2.7h-4.8v0.4c0.9,0.1,1.3,0.1,1.3,1.4v6.6
+ c0,1.2-0.3,1.3-1.3,1.4v0.3h5v-0.3c-1-0.1-1.3-0.2-1.3-1.4V8.6h0.3l3.1,4.7h3.1V12.9z"/>
+ <path class="st0" d="M69.5,8.1H70c1,0,2.2,0.3,2.2,2.4c0,1-0.2,2.2-1.8,2.2c-0.6,0-0.9-0.2-0.9-1L69.5,8.1 M69.5,4.4
+ c0-0.3,0-0.7,0.7-0.7c1.2,0,1.5,0.9,1.5,1.9c0,1.5-0.3,2.1-2.3,2.1V4.4C69.4,4.4,69.5,4.4,69.5,4.4z M65.8,13.2h4.8
+ c3.2-0.1,4.1-1.5,4.1-2.8c0-1.7-1.6-2.4-2.8-2.7l0,0c0.6-0.2,2.3-0.5,2.3-2.2c0-2.3-3.1-2.3-3.8-2.3h-4.6v0.4
+ c0.6,0,1.3,0.1,1.3,1.1V12C67.1,13,66.7,13,65.8,13.2L65.8,13.2L65.8,13.2L65.8,13.2z"/>
+ <path class="st0" d="M84,3.5c2.1,0,2.7,2.7,2.7,4.8c0,1.3-0.1,4.8-2.7,4.8c-2.5,0-2.7-3.5-2.7-4.8C81.4,6.1,82,3.5,84,3.5 M84,2.9
+ c-2.9,0-5.2,2-5.2,5.3c0,3.1,2.2,5.3,5.2,5.3c3.1,0,5.3-2.1,5.3-5.3C89.3,5.1,86.9,2.9,84,2.9"/>
+ <path class="st0" d="M96.7,4.3c0.1-0.4,0.1-0.6,1-0.6c1.2,0,1.8,0.6,1.8,2.1c0,1.9-0.7,2.2-2.8,2.2V4.3 M103.2,12.9
+ c-0.2,0-0.4,0-0.6-0.3l-3-4.3c0.9-0.2,2.3-0.7,2.3-2.5c0-2.5-3.2-2.7-4.1-2.7H93v0.4c0.8,0.1,1.3,0.1,1.3,1.4v6.6
+ c0,1.2-0.3,1.3-1.3,1.4v0.3h5v-0.3c-1-0.1-1.3-0.2-1.3-1.4V8.6h0.4l3.1,4.7h3.1L103.2,12.9L103.2,12.9L103.2,12.9z"/>
+ <path class="st0" d="M111.4,3.5c2.1,0,2.7,2.7,2.7,4.8c0,1.3-0.1,4.8-2.7,4.8c-2.6,0-2.7-3.5-2.7-4.8
+ C108.9,6.1,109.4,3.5,111.4,3.5 M111.4,2.9c-2.9,0-5.2,2-5.2,5.3c0,3.1,2.2,5.3,5.2,5.3c3.1,0,5.2-2.1,5.2-5.3
+ C116.7,5.1,114.3,2.9,111.4,2.9"/>
+ <path class="st0" d="M130.4,3.3h-3.3v0.4c1.3,0.1,1.5,0.5,1.5,1.5v4.6c0,1,0,3.2-2.7,3.2c-2.1,0-2.1-2-2.1-2.9v-5
+ c0-1.3,0.4-1.3,1.5-1.4V3.3h-5v0.4c0.9,0.1,1.2,0.1,1.2,1.4v5c0,1.6,0.4,2.1,1.1,2.7c1,0.8,2.3,1,3,1c0.8,0,2.2-0.3,3-1.1
+ c0.6-0.6,0.9-2,0.9-2.9V5c0-1,0.3-1.2,1.2-1.3V3.3"/>
+ <path class="st0" d="M144.8,9h-5.1v0.3c1.1,0.1,1.5,0.1,1.5,1.1V12c0,0.6-0.2,1.1-1.6,1.1c-2.8,0-2.9-3.7-2.9-4.8
+ c0-2.5,0.6-4.8,2.8-4.8c1.7,0,3,1.7,3.5,3.1h0.4V3H143c-0.1,0.4-0.3,0.6-0.6,0.6c-0.4,0-1.5-0.7-2.9-0.7c-3.2,0-5.3,2.4-5.3,5.3
+ c0,2.6,1.7,5.2,5.4,5.2c1.3,0,3.3-0.4,4-1v-1.9C143.6,9.3,143.9,9.2,144.8,9L144.8,9"/>
+ <path class="st0" d="M159.1,12.9c-0.7-0.1-1.3-0.2-1.3-1.1V4.6c0-1,0.6-1.1,1.3-1.1V3.1H154v0.4c0.6,0,1.4,0.1,1.4,1.1v3.1h-3.6
+ V4.6c0-1,0.6-1.1,1.4-1.1V3.1h-5v0.4c0.6,0.1,1.3,0.1,1.3,1.1v7.2c0,0.9-0.4,1-1.3,1.1v0.3h5v-0.3c-0.7-0.1-1.4-0.1-1.4-1.1V8.4
+ h3.6v3.4c0,1-0.5,1-1.4,1.1v0.3h5.1V12.9"/>
+ <path class="st0" d="M77.1,49.2c-0.7,0.9-1.5,1.2-2.2,1.2c-0.3,0-1.1-0.1-1.4-0.9c-0.3-0.6-0.4-1.5-0.4-2c0-1.6,0.3-3,1.7-3
+ c1.1,0,1.8,1.1,2.1,1.9h0.2v-2.1h-0.2c-0.1,0.2-0.2,0.4-0.4,0.4s-1-0.4-1.8-0.4c-1.9,0-3.3,1.5-3.3,3.3c0,1.7,1.2,3.3,3.3,3.3
+ c1.2,0,1.9-0.5,2.5-1.4L77.1,49.2"/>
+ <path class="st0" d="M82.8,50.4c-0.5,0-0.9-0.1-0.9-0.6v-4.5c0-0.6,0.4-0.6,0.9-0.6v-0.3h-3.3v0.2c0.4,0,0.9,0,0.9,0.6v4.5
+ c0,0.5-0.3,0.6-0.9,0.6v0.2L82.8,50.4L82.8,50.4"/>
+ <path class="st0" d="M89.5,50.4c-0.6,0-1-0.1-1-0.9v-4.9c0.6,0,1.6,0.1,1.8,1.6h0.3v-1.9h-5.5v1.9h0.3c0.2-1.5,1.2-1.5,1.8-1.6v4.9
+ c0,0.7-0.2,0.9-0.8,0.9v0.2h3.3v-0.2"/>
+ <path class="st0" d="M99.1,44.4h-2v0.2c0.4,0,0.7,0,0.7,0.4c0,0.2-0.3,0.7-0.3,0.8l-1.1,1.7l-1.1-2.1c-0.1-0.1-0.2-0.4-0.2-0.5
+ c0-0.2,0.1-0.3,0.7-0.3v-0.2h-3.1v0.2c0.4,0,0.7,0.4,0.7,0.5l1.7,3.1v1.4c0,0.7-0.2,0.7-0.8,0.9v0.2h3.2v-0.2
+ c-0.6-0.1-0.8-0.1-0.8-0.9v-1.7l1.8-2.9c0.2-0.3,0.4-0.3,0.6-0.3L99.1,44.4"/>
+ <path class="st0" d="M111.2,49.2c-0.7,0.9-1.5,1.2-2.2,1.2c-0.3,0-1.1-0.1-1.4-0.9c-0.3-0.6-0.4-1.5-0.4-2c0-1.6,0.3-3,1.7-3
+ c1.1,0,1.8,1.1,2.1,1.9h0.2v-2.1H111c-0.1,0.2-0.2,0.4-0.4,0.4s-1-0.4-1.8-0.4c-1.9,0-3.3,1.5-3.3,3.3c0,1.7,1.2,3.3,3.3,3.3
+ c1.2,0,1.9-0.5,2.6-1.4L111.2,49.2"/>
+ <path class="st0" d="M117.1,44.5c1.3,0,1.6,1.6,1.6,3c0,0.9-0.1,3-1.6,3s-1.6-2.2-1.6-3C115.5,46.2,115.9,44.5,117.1,44.5
+ M117.1,44.2c-1.8,0-3.3,1.3-3.3,3.3c0,1.9,1.4,3.3,3.3,3.3c1.9,0,3.3-1.4,3.3-3.3C120.4,45.4,118.9,44.2,117.1,44.2"/>
+ <path class="st0" d="M129,44.4h-2v0.2c0.9,0,1,0.3,1,1v2.9c0,0.6,0,2-1.7,2c-1.4,0-1.4-1.3-1.4-1.8v-3.2c0-0.9,0.3-0.9,0.8-0.9
+ v-0.2h-3.2v0.2c0.5,0.1,0.7,0.1,0.7,0.9v3.1c0,1,0.2,1.3,0.6,1.7c0.6,0.5,1.5,0.5,1.9,0.5c0.5,0,1.4-0.2,1.8-0.6s0.5-1.3,0.5-1.8
+ v-3c0-0.6,0.2-0.7,0.7-0.7L129,44.4"/>
+ <path class="st0" d="M131.1,50.6h2.1v-0.2c-0.6-0.1-0.9-0.2-0.9-1v-3.7l0,0l4.1,5h0.2v-5.4c0-0.4,0-0.6,0.7-0.7v-0.2h-2v0.2
+ c0.7,0.1,0.9,0.3,0.9,1v2.8l0,0l-3.2-3.9h-1.9v0.2c0.1,0,0.3,0,0.7,0.6v4.5c0,0.6-0.2,0.6-0.9,0.7L131.1,50.6"/>
+ <path class="st0" d="M145.5,49.2c-0.7,0.9-1.5,1.2-2.2,1.2c-0.3,0-1.1-0.1-1.4-0.9c-0.3-0.6-0.4-1.5-0.4-2c0-1.6,0.3-3,1.7-3
+ c1.1,0,1.8,1.1,2.1,1.9h0.2v-2.1h-0.2c-0.1,0.2-0.2,0.4-0.4,0.4s-1-0.4-1.8-0.4c-1.9,0-3.3,1.5-3.3,3.3c0,1.7,1.2,3.3,3.3,3.3
+ c1.2,0,1.9-0.5,2.6-1.4L145.5,49.2"/>
+ <path class="st0" d="M151.2,50.4c-0.5,0-0.9-0.1-0.9-0.6v-4.5c0-0.6,0.4-0.6,0.9-0.6v-0.3h-3.3v0.2c0.4,0,0.9,0,0.9,0.6v4.5
+ c0,0.5-0.3,0.6-0.9,0.6v0.2L151.2,50.4L151.2,50.4"/>
+ <path class="st0" d="M159.1,48.5h-0.3c-0.4,1.1-1,1.8-2.3,1.8c-0.6,0-0.9-0.1-0.9-0.5v-4.4c0-0.9,0.3-0.9,1-0.9v-0.2h-3.2v0.2
+ c0.4,0,0.9,0,0.9,0.6v4.5c0,0.5-0.3,0.6-0.9,0.6v0.2h5.4L159.1,48.5"/>
+</g>
+</svg>
diff --git a/web/cobrands/peterborough/js.js b/web/cobrands/peterborough/js.js
new file mode 100644
index 000000000..47172712d
--- /dev/null
+++ b/web/cobrands/peterborough/js.js
@@ -0,0 +1,41 @@
+(function(){
+
+if (!fixmystreet.maps) {
+ return;
+}
+
+var defaults = {
+ http_options: {
+ url: "https://tilma.mysociety.org/mapserver/peterborough",
+ params: {
+ SERVICE: "WFS",
+ VERSION: "1.1.0",
+ REQUEST: "GetFeature",
+ SRSNAME: "urn:ogc:def:crs:EPSG::3857"
+ }
+ },
+ max_resolution: 4.777314267158508,
+ min_resolution: 0.5971642833948135,
+ geometryName: 'msGeometry',
+ srsName: "EPSG:3857",
+ body: "Peterborough City Council",
+ strategy_class: OpenLayers.Strategy.FixMyStreet
+};
+
+fixmystreet.assets.add(defaults, {
+ http_options: {
+ params: {
+ TYPENAME: "highways"
+ }
+ },
+ stylemap: fixmystreet.assets.stylemap_invisible,
+ non_interactive: true,
+ always_visible: true,
+ usrn: {
+ attribute: 'Usrn',
+ field: 'site_code'
+ },
+ name: "Adopted Highways"
+});
+
+})();
diff --git a/web/cobrands/peterborough/layout.scss b/web/cobrands/peterborough/layout.scss
new file mode 100644
index 000000000..62486ab35
--- /dev/null
+++ b/web/cobrands/peterborough/layout.scss
@@ -0,0 +1,98 @@
+@import "_colours";
+
+@import "../sass/layout";
+
+body.twothirdswidthpage .content .sticky-sidebar aside {
+ top: 10em;
+}
+
+#site-logo {
+ padding: 1em 0;
+}
+
+body.frontpage #front-main {
+ text-align: left;
+ background-color: #fff;
+ border-top: 1px solid #e9e9e9;
+ color: $primary_b;
+ padding: 2.5em 0;
+}
+
+#front-main {
+ #postcodeForm div {
+ margin: 0;
+ }
+ h1 {
+ font-size: 3em;
+ }
+ h2 {
+ font-weight: normal;
+ font-size: 1.5em;
+ }
+ a#geolocate_link {
+ color: $link-color;
+ &:hover,
+ &:active,
+ &:focus {
+ color: $link-hover-color;
+ }
+ }
+}
+
+#postcodeForm .form-hint {
+ color: $grey;
+}
+
+#main-nav {
+ min-height: 84px;
+}
+
+body.mappage #site-header {
+ height: 84px;
+}
+
+#map_box,
+#map_sidebar {
+ top: 84px;
+}
+
+
+
+// Stop visited nav links being purple when hovering over them
+.nav-menu--main {
+ a:hover {
+ color: $primary_text;
+ }
+ span {
+ color: $primary_b;
+ }
+ a.report-a-problem-btn {
+ background-color: transparent;
+ color: $grey;
+ padding: 0.75em;
+ margin: 0;
+ border-radius: 0;
+ &:hover,
+ &:active,
+ &:focus {
+ background-color: $nav_hover_background_colour;
+ color: #fff;
+ }
+ }
+ span.report-a-problem-btn {
+ &:hover,
+ &:active,
+ &:focus {
+ color: $primary_b;
+ }
+ }
+}
+
+.pboro-footer {
+ li {
+ display: inline-block;
+ }
+ li:first-child {
+ border: none;
+ }
+} \ No newline at end of file