aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore3
-rwxr-xr-xbin/make_css18
-rwxr-xr-xbin/send-reports40
m---------commonlib0
-rw-r--r--conf/crontab.ugly4
-rw-r--r--conf/general-example1
-rw-r--r--conf/packages1
-rw-r--r--locale/FixMyStreet.po510
-rw-r--r--locale/cy_GB.UTF-8/LC_MESSAGES/EmptyHomes.po517
-rw-r--r--locale/nb_NO.UTF-8/LC_MESSAGES/FixMyStreet.po688
-rw-r--r--perllib/Cobrand.pm2
-rw-r--r--perllib/Cobrands/Barnet/Util.pm4
-rw-r--r--perllib/Cobrands/Fiksgatami/Util.pm10
-rw-r--r--perllib/Cobrands/Southampton/Util.pm117
-rw-r--r--perllib/FixMyStreet/Alert.pm1
-rw-r--r--perllib/FixMyStreet/Geocode.pm55
-rw-r--r--perllib/FixMyStreet/Map.pm120
-rw-r--r--perllib/FixMyStreet/Map/Bing.pm32
-rw-r--r--perllib/FixMyStreet/Map/BingOL.pm38
-rw-r--r--perllib/FixMyStreet/Map/Google.pm30
-rw-r--r--perllib/FixMyStreet/Map/OSM.pm176
-rw-r--r--perllib/FixMyStreet/Map/OSM/CycleMap.pm61
-rw-r--r--perllib/FixMyStreet/Map/OSM/StreetView.pm32
-rw-r--r--perllib/FixMyStreet/Map/Tilma/OL/1_10k.pm32
-rw-r--r--perllib/FixMyStreet/Map/Tilma/OL/StreetView.pm32
-rw-r--r--perllib/FixMyStreet/Map/Tilma/Original.pm124
-rw-r--r--perllib/FixMyStreet/Map/Tilma/Original/1_10k.pm24
-rw-r--r--perllib/FixMyStreet/Map/Tilma/Original/StreetView.pm23
-rw-r--r--perllib/Page.pm57
-rw-r--r--templates/website/cobrands/barnet/footer3
-rw-r--r--templates/website/cobrands/barnet/header1
-rw-r--r--templates/website/cobrands/emptyhomes/footer19
-rw-r--r--templates/website/cobrands/emptyhomes/header10
-rw-r--r--templates/website/cobrands/fiksgatami/faq-nb124
-rw-r--r--templates/website/cobrands/fiksgatami/footer2
-rw-r--r--templates/website/cobrands/fiksgatami/header6
-rw-r--r--templates/website/cobrands/southampton/footer25
-rw-r--r--templates/website/cobrands/southampton/header127
-rwxr-xr-xtemplates/website/faq-en-gb18
-rw-r--r--templates/website/header2
-rwxr-xr-xweb-admin/index.cgi2
-rwxr-xr-xweb/alert.cgi4
-rw-r--r--web/cobrands/barnet/css/layout.css8
-rw-r--r--web/cobrands/fiksgatami/css.css152
-rw-r--r--web/cobrands/fiksgatami/css.scss41
-rw-r--r--web/cobrands/southampton/SCClogo.pngbin0 -> 2698 bytes
-rw-r--r--web/cobrands/southampton/accessInfo.gifbin0 -> 2537 bytes
-rw-r--r--web/cobrands/southampton/bg-box.gifbin0 -> 3009 bytes
-rw-r--r--web/cobrands/southampton/bg-button.gifbin0 -> 53 bytes
-rw-r--r--web/cobrands/southampton/bg-footer.gifbin0 -> 664 bytes
-rw-r--r--web/cobrands/southampton/bg-header.jpgbin0 -> 33045 bytes
-rw-r--r--web/cobrands/southampton/bg-input.gifbin0 -> 66 bytes
-rw-r--r--web/cobrands/southampton/bg-repeat.gifbin0 -> 94 bytes
-rw-r--r--web/cobrands/southampton/blue-line.gifbin0 -> 54 bytes
-rw-r--r--web/cobrands/southampton/bullet.gifbin0 -> 118 bytes
-rw-r--r--web/cobrands/southampton/bulletActiveSG.gifbin0 -> 109 bytes
-rw-r--r--web/cobrands/southampton/css.css47
-rw-r--r--web/cobrands/southampton/css.scss67
-rw-r--r--web/cobrands/southampton/ff.pngbin0 -> 267194 bytes
-rw-r--r--web/cobrands/southampton/forms.pngbin0 -> 303561 bytes
-rw-r--r--web/cobrands/southampton/ie6.pngbin0 -> 199421 bytes
-rw-r--r--web/cobrands/southampton/information.gifbin0 -> 1025 bytes
-rw-r--r--web/cobrands/southampton/line.gifbin0 -> 54 bytes
-rw-r--r--web/cobrands/southampton/logo.pngbin0 -> 1885 bytes
-rw-r--r--web/cobrands/southampton/mctv.pngbin0 -> 3182 bytes
-rw-r--r--web/cobrands/southampton/safari.pngbin0 -> 318409 bytes
-rw-r--r--web/cobrands/southampton/style.css87
-rwxr-xr-xweb/confirm.cgi2
-rw-r--r--web/css/_main.scss139
-rw-r--r--web/css/cobrands/emptyhomes/emptyhomes.css24
-rw-r--r--web/css/core.css845
-rw-r--r--web/css/core.scss503
-rw-r--r--web/css/ie6-378.css2
-rw-r--r--web/css/ie6.css6
-rw-r--r--web/css/main.css182
-rw-r--r--web/css/main.scss14
-rw-r--r--web/down.default.html2
-rw-r--r--web/i/SEHPlogo-bwS.pngbin0 -> 17954 bytes
-rw-r--r--web/i/Sheltercymru47s.pngbin0 -> 9702 bytes
-rwxr-xr-xweb/import.cgi172
-rwxr-xr-xweb/index.cgi54
-rw-r--r--web/js.js8
-rw-r--r--web/js/map-OpenLayers.js182
-rw-r--r--web/js/map-OpenStreetMap.js133
-rw-r--r--web/js/map-bing-ol.js41
-rw-r--r--web/js/map-bing.js3
-rw-r--r--web/js/map-google.js2
-rw-r--r--web/js/map-streetview.js34
-rw-r--r--web/js/map-tilma-ol.js33
-rw-r--r--web/js/map-tilma.js2
-rwxr-xr-xweb/reports.cgi5
-rwxr-xr-xweb/rss.cgi4
-rwxr-xr-xweb/tms-signup.cgi2
-rw-r--r--web/xsl.eha.xsl2
-rw-r--r--web/xsl.xsl2
95 files changed, 3835 insertions, 2060 deletions
diff --git a/.gitignore b/.gitignore
index e3fcfd5bf..dfba54be6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,4 +6,5 @@ local-lib5
META.yml
Makefile
blib/
-inc/ \ No newline at end of file
+inc/
+.sass-cache
diff --git a/bin/make_css b/bin/make_css
new file mode 100755
index 000000000..7e01da267
--- /dev/null
+++ b/bin/make_css
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# make_css:
+# Generate CSS files from SCSS files.
+# Curerntly the CSS files are also in version control, though I guess
+# in future they don't need to be, and compressed style could then be used.
+#
+# Copyright (c) 2011 UK Citizens Online Democracy. All rights reserved.
+# Email: matthew@mysociety.org. WWW: http://www.mysociety.org
+#
+# $Id: send-reports,v 1.79 2010-01-06 16:50:26 louise Exp $
+
+DIRECTORY=$(cd `dirname $0` && pwd)
+
+for file in `find $DIRECTORY/../ -name "*.scss" ! -name "_*"`; do
+ sass --style expanded $file ${file/scss/css}
+done
+
diff --git a/bin/send-reports b/bin/send-reports
index 84bfb1791..8e6d2d178 100755
--- a/bin/send-reports
+++ b/bin/send-reports
@@ -18,6 +18,8 @@ use lib "$FindBin::Bin/../commonlib/perllib";
use Encode;
use Error qw(:try);
use File::Slurp;
+use JSON;
+use LWP::Simple;
use CGI; # Trying awkward kludge
use CronFns;
@@ -97,9 +99,8 @@ foreach my $row (@$unsent) {
$h{fuzzy} = $row->{used_map} ? _('To view a map of the precise location of this issue')
: _('The user could not locate the problem on a map, but to see the area around the location they entered');
$h{closest_address} = '';
- $h{closest_address_machine} = '';
- # If we are in the UK include eastings and northings
+ # If we are in the UK include eastings and northings, and nearest stuff
$h{easting_northing} = '';
if ( mySociety::Config::get('COUNTRY') eq 'GB' ) {
@@ -109,7 +110,10 @@ foreach my $row (@$unsent) {
$h{easting_northing} #
= "Easting: $h{easting}\n\n" #
. "Northing: $h{northing}\n\n";
+
+ $h{closest_address} = find_closest($row, $h{latitude}, $h{longitude});
}
+ $h{closest_address_machine} = $h{closest_address};
my (@to, @recips, $template, $areas_info);
if ($site eq 'emptyhomes') {
@@ -138,7 +142,7 @@ foreach my $row (@$unsent) {
# XXX Needs locks!
my @all_councils = split /,|\|/, $row->{council};
my ($councils, $missing) = $row->{council} =~ /^([\d,]+)(?:\|([\d,]+))?/;
- my @councils = split /,/, $councils;
+ my @councils = split(/,/, $councils);
$areas_info = mySociety::MaPit::call('areas', \@all_councils);
my (@dear, %recips);
my $all_confirmed = 1;
@@ -174,7 +178,7 @@ foreach my $row (@$unsent) {
$template = 'submit-brent' if $row->{council} eq 2488 || $row->{council} eq 2237;
$template = File::Slurp::read_file("$FindBin::Bin/../templates/emails/$template");
- if ($h{category} eq 'Other') {
+ if ($h{category} eq _('Other')) {
$h{category_footer} = _('this type of local problem');
$h{category_line} = '';
} else {
@@ -342,3 +346,31 @@ sub post_easthants_message {
return $return;
}
+sub find_closest {
+ my ($row, $latitude, $longitude) = @_;
+ my $str = '';
+
+ return '' unless $row->{used_map};
+
+ # Get nearest road-type thing from Bing
+ my $url = "http://dev.virtualearth.net/REST/v1/Locations/$latitude,$longitude?c=en-GB&key=" . mySociety::Config::get('BING_MAPS_API_KEY');
+ my $j = LWP::Simple::get($url);
+ if ($j) {
+ $j = JSON->new->utf8->allow_nonref->decode($j);
+ if ($j->{resourceSets}[0]{resources}[0]{name}) {
+ $str .= "Nearest road to the pin placed on the map (automatically generated by Bing Maps): $j->{resourceSets}[0]{resources}[0]{name}\n\n";
+ }
+ }
+
+ # Get nearest postcode from Matthew's random gazetteer (put in MaPit? Or elsewhere?)
+ $url = "http://gazetteer.dracos.vm.bytemark.co.uk/point/$latitude,$longitude.json";
+ $j = LWP::Simple::get($url);
+ if ($j) {
+ $j = JSON->new->utf8->allow_nonref->decode($j);
+ if ($j->{postcode}) {
+ $str .= "Nearest postcode to the pin placed on the map (automatically generated): $j->{postcode}[0] ($j->{postcode}[1]m away)\n\n";
+ }
+ }
+ return $str;
+}
+
diff --git a/commonlib b/commonlib
-Subproject e25a8fa278b43ab0a35436b4fea9c898f72b799
+Subproject eceed7e282edf5886dce3c1f306189134dc932f
diff --git a/conf/crontab.ugly b/conf/crontab.ugly
index c446ca602..5e65e1cee 100644
--- a/conf/crontab.ugly
+++ b/conf/crontab.ugly
@@ -12,7 +12,9 @@ MAILTO=cron-!!(*= $site *)!!@mysociety.org
# On only one server
!!(* if ($vhost eq 'reportemptyhomes.com') { *)!!
-*/5 * * * * !!(*= $user *)!! run-with-lockfile -n /data/vhost/!!(*= $vhost *)!!/send-reports.lock /data/vhost/!!(*= $vhost *)!!/fixmystreet/bin/send-reports || echo "stalled?"
+5,10,15,20,25,30,35,40,45,50,55 * * * * !!(*= $user *)!! run-with-lockfile -n /data/vhost/!!(*= $vhost *)!!/send-reports.lock /data/vhost/!!(*= $vhost *)!!/fixmystreet/bin/send-reports || echo "stalled?"
+0 0-11,13-23 * * * !!(*= $user *)!! run-with-lockfile -n /data/vhost/!!(*= $vhost *)!!/send-reports.lock /data/vhost/!!(*= $vhost *)!!/fixmystreet/bin/send-reports || echo "stalled?"
+0 12 * * * !!(*= $user *)!! run-with-lockfile -n /data/vhost/!!(*= $vhost *)!!/send-reports.lock "/data/vhost/!!(*= $vhost *)!!/fixmystreet/bin/send-reports --verbose" || echo "stalled?"
2 * * * * !!(*= $user *)!! run-with-lockfile -n /data/vhost/!!(*= $vhost *)!!/send-alerts.lock /data/vhost/!!(*= $vhost *)!!/fixmystreet/bin/send-alerts || echo "stalled?"
0,30 * * * * !!(*= $user *)!! run-with-lockfile -n /data/vhost/!!(*= $vhost *)!!/send-questionnaires.lock /data/vhost/!!(*= $vhost *)!!/fixmystreet/bin/send-questionnaires-eha || echo "stalled?"
diff --git a/conf/general-example b/conf/general-example
index 20872ae28..9da852bb8 100644
--- a/conf/general-example
+++ b/conf/general-example
@@ -44,6 +44,7 @@ define('OPTION_STAGING_SITE', 1);
define('OPTION_UPLOAD_CACHE', '/upload/');
define('OPTION_GEO_CACHE', '/cache/');
define('OPTION_GOOGLE_MAPS_API_KEY', '');
+define('OPTION_BING_MAPS_API_KEY', '');
define('OPTION_MAPIT_URL', 'http://mapit.mysociety.org/');
define('OPTION_MAP_TYPE', 'Tilma::Original::1_10k');
diff --git a/conf/packages b/conf/packages
index ce5c1e745..7828cc699 100644
--- a/conf/packages
+++ b/conf/packages
@@ -31,3 +31,4 @@ libtest-exception-perl
libipc-run3-perl
libyaml-perl
liblist-moreutils-perl
+libhaml-ruby
diff --git a/locale/FixMyStreet.po b/locale/FixMyStreet.po
index f1d14a6c0..53d5981f9 100644
--- a/locale/FixMyStreet.po
+++ b/locale/FixMyStreet.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 1.0\n"
"Report-Msgid-Bugs-To: matthew@mysociety.org\n"
-"POT-Creation-Date: 2011-02-23 13:09+0000\n"
+"POT-Creation-Date: 2011-04-01 13:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <team@fixmystreet.com>\n"
@@ -21,59 +21,59 @@ msgstr ""
msgid "Report Empty Homes"
msgstr ""
-#: perllib/Cobrands/Fiksgatami/Util.pm:27
+#: perllib/Cobrands/Fiksgatami/Util.pm:37
msgid "Enter a nearby postcode, or street name and area"
msgstr ""
-#: perllib/Page.pm:83
+#: perllib/Page.pm:86
#, perl-format
msgid ""
"Please try again later, or <a href=\"mailto:%s\">email us</a> to let us know."
msgstr ""
-#: perllib/Page.pm:84
+#: perllib/Page.pm:87
msgid "Sorry! Something's gone wrong."
msgstr ""
-#: perllib/Page.pm:85
+#: perllib/Page.pm:88
msgid "The text of the error was:"
msgstr ""
-#: perllib/Page.pm:192 web/contact.cgi:107
+#: perllib/Page.pm:197 web/contact.cgi:107
msgid "FixMyStreet"
msgstr ""
-#: perllib/Page.pm:195 perllib/Page.pm:317
+#: perllib/Page.pm:200 perllib/Page.pm:324
msgid "Report a problem"
msgstr ""
-#: perllib/Page.pm:196 perllib/Page.pm:318
+#: perllib/Page.pm:201 perllib/Page.pm:325
msgid "All reports"
msgstr ""
-#: perllib/Page.pm:197 perllib/Page.pm:319
+#: perllib/Page.pm:202 perllib/Page.pm:326
msgid "Local alerts"
msgstr ""
-#: perllib/Page.pm:198 perllib/Page.pm:320
+#: perllib/Page.pm:203 perllib/Page.pm:327
msgid "Help"
msgstr ""
-#: perllib/Page.pm:199 web/about.cgi:19 web/about.cgi:21
+#: perllib/Page.pm:204 web/about.cgi:19 web/about.cgi:21
msgid "About us"
msgstr ""
-#: perllib/Page.pm:220
+#: perllib/Page.pm:225
msgid "Fix<span id=\"my\">My</span>Street"
msgstr ""
-#: perllib/Page.pm:296
+#: perllib/Page.pm:303
msgid ""
"This is a developer site; things might break at any time, and the database "
"will be periodically deleted."
msgstr ""
-#: perllib/Page.pm:310
+#: perllib/Page.pm:317
msgid ""
"Built by <a href=\"http://www.mysociety.org/\">mySociety</a>, using some <a "
"href=\"http://github.com/mysociety/fixmystreet\">clever</a>&nbsp;<a href="
@@ -81,7 +81,7 @@ msgid ""
"\">code</a>."
msgstr ""
-#: perllib/Page.pm:312
+#: perllib/Page.pm:319
msgid ""
"Built by <a href=\"http://www.mysociety.org/\">mySociety</a> and maintained "
"by <a href=\"http://www.nuug.no/\">NUUG</a>, using some <a href=\"http://"
@@ -89,50 +89,50 @@ msgid ""
"mysociety.org/cvstrac/dir?d=mysociety/services/TilMa\">code</a>."
msgstr ""
-#: perllib/Page.pm:316
+#: perllib/Page.pm:323
msgid "Navigation"
msgstr ""
-#: perllib/Page.pm:321
+#: perllib/Page.pm:328
msgid "Contact"
msgstr ""
-#: perllib/Page.pm:323
+#: perllib/Page.pm:330
msgid ""
"<a href=\"http://www.mysociety.org/\"><img id=\"logo\" width=\"133\" height="
"\"26\" src=\"/i/mysociety-dark.png\" alt=\"View mySociety.org\"><span id="
"\"logoie\"></span></a>"
msgstr ""
-#: perllib/Page.pm:381
+#: perllib/Page.pm:388
msgid "Error"
msgstr ""
-#: perllib/Page.pm:443
+#: perllib/Page.pm:461
msgid "your problem will not be posted"
msgstr ""
-#: perllib/Page.pm:444
+#: perllib/Page.pm:462
msgid "we'll hang on to your problem report while you're checking your email."
msgstr ""
-#: perllib/Page.pm:446
+#: perllib/Page.pm:464
msgid "your update will not be posted"
msgstr ""
-#: perllib/Page.pm:447
+#: perllib/Page.pm:465
msgid "we'll hang on to your update while you're checking your email."
msgstr ""
-#: perllib/Page.pm:449
+#: perllib/Page.pm:467
msgid "your alert will not be activated"
msgstr ""
-#: perllib/Page.pm:450
+#: perllib/Page.pm:468
msgid "we'll hang on to your alert while you're checking your email."
msgstr ""
-#: perllib/Page.pm:457
+#: perllib/Page.pm:475
#, perl-format
msgid ""
"<h1>Nearly Done! Now check your email...</h1>\n"
@@ -146,159 +146,165 @@ msgid ""
"<p>(Don't worry &mdash; %s)</p>\n"
msgstr ""
-#: perllib/Page.pm:484
+#: perllib/Page.pm:503
msgid "today"
msgstr ""
-#: perllib/Page.pm:508
+#: perllib/Page.pm:527
msgid "less than a minute"
msgstr ""
-#: perllib/Page.pm:511
+#: perllib/Page.pm:530
#, perl-format
msgid "%d week"
msgstr ""
-#: perllib/Page.pm:511
+#: perllib/Page.pm:530
#, perl-format
msgid "%d weeks"
msgstr ""
-#: perllib/Page.pm:512
+#: perllib/Page.pm:531
#, perl-format
msgid "%d day"
msgstr ""
-#: perllib/Page.pm:512
+#: perllib/Page.pm:531
#, perl-format
msgid "%d days"
msgstr ""
-#: perllib/Page.pm:513
+#: perllib/Page.pm:532
#, perl-format
msgid "%d hour"
msgstr ""
-#: perllib/Page.pm:513
+#: perllib/Page.pm:532
#, perl-format
msgid "%d hours"
msgstr ""
-#: perllib/Page.pm:514
+#: perllib/Page.pm:533
#, perl-format
msgid "%d minute"
msgstr ""
-#: perllib/Page.pm:514
+#: perllib/Page.pm:533
#, perl-format
msgid "%d minutes"
msgstr ""
-#: perllib/Page.pm:534
+#: perllib/Page.pm:553
#, perl-format
msgid "%s, reported anonymously at %s"
msgstr ""
-#: perllib/Page.pm:536
+#: perllib/Page.pm:555
#, perl-format
msgid "%s, reported by %s at %s"
msgstr ""
-#: perllib/Page.pm:540
+#: perllib/Page.pm:558 perllib/Page.pm:560 perllib/Page.pm:566
+#: perllib/Page.pm:568 web/index.cgi:391 web/index.cgi:562 web/index.cgi:569
+#: bin/send-reports:181
+msgid "Other"
+msgstr ""
+
+#: perllib/Page.pm:559
#, perl-format
msgid "Reported by %s in the %s category anonymously at %s"
msgstr ""
-#: perllib/Page.pm:542
+#: perllib/Page.pm:561
#, perl-format
msgid "Reported by %s in the %s category by %s at %s"
msgstr ""
-#: perllib/Page.pm:544
+#: perllib/Page.pm:563
#, perl-format
msgid "Reported by %s anonymously at %s"
msgstr ""
-#: perllib/Page.pm:546
+#: perllib/Page.pm:565
#, perl-format
msgid "Reported by %s by %s at %s"
msgstr ""
-#: perllib/Page.pm:548
+#: perllib/Page.pm:567
#, perl-format
msgid "Reported in the %s category anonymously at %s"
msgstr ""
-#: perllib/Page.pm:550
+#: perllib/Page.pm:569
#, perl-format
msgid "Reported in the %s category by %s at %s"
msgstr ""
-#: perllib/Page.pm:552 web/contact.cgi:212
+#: perllib/Page.pm:571 web/contact.cgi:212
#, perl-format
msgid "Reported anonymously at %s"
msgstr ""
-#: perllib/Page.pm:554 web/contact.cgi:213
+#: perllib/Page.pm:573 web/contact.cgi:213
#, perl-format
msgid "Reported by %s at %s"
msgstr ""
-#: perllib/Page.pm:559
+#: perllib/Page.pm:578
msgid "the map was not used so pin location may be inaccurate"
msgstr ""
-#: perllib/Page.pm:567
+#: perllib/Page.pm:586
#, perl-format
msgid "Sent to %s %s later"
msgstr ""
-#: perllib/Page.pm:571
+#: perllib/Page.pm:590
msgid "Not reported to council"
msgstr ""
-#: perllib/Page.pm:622 web-admin/index.cgi:522 web-admin/index.cgi:646
+#: perllib/Page.pm:641 web-admin/index.cgi:522 web-admin/index.cgi:646
msgid "Updates"
msgstr ""
-#: perllib/Page.pm:626
+#: perllib/Page.pm:645
#, perl-format
msgid "Posted by %s at %s"
msgstr ""
-#: perllib/Page.pm:628
+#: perllib/Page.pm:647
#, perl-format
msgid "Posted anonymously at %s"
msgstr ""
-#: perllib/Page.pm:631
+#: perllib/Page.pm:650
msgid "marked as fixed"
msgstr ""
-#: perllib/Page.pm:632
+#: perllib/Page.pm:651
msgid "reopened"
msgstr ""
-#: perllib/Page.pm:640 web/index.cgi:1071
+#: perllib/Page.pm:659 web/index.cgi:1075
msgid "Offensive? Unsuitable? Tell us"
msgstr ""
-#: perllib/Page.pm:667
+#: perllib/Page.pm:686
msgid "That postcode was not recognised, sorry."
msgstr ""
-#: perllib/Page.pm:672
+#: perllib/Page.pm:692
msgid ""
"Sorry, that appears to be a Crown dependency postcode, which we don't cover."
msgstr ""
-#: perllib/Page.pm:675 perllib/FixMyStreet/Geocode.pm:134
+#: perllib/Page.pm:695 perllib/FixMyStreet/Geocode.pm:145
msgid ""
"We do not cover Northern Ireland, I'm afraid, as our licence doesn't include "
"any maps for the region."
msgstr ""
-#: perllib/Page.pm:705
+#: perllib/Page.pm:726
msgid "Please upload a JPEG image only"
msgstr ""
@@ -310,77 +316,77 @@ msgstr ""
msgid "This report is currently marked as open."
msgstr ""
-#: perllib/FixMyStreet/Alert.pm:311
+#: perllib/FixMyStreet/Alert.pm:309
#, perl-format
msgid "Report on %s"
msgstr ""
-#: perllib/FixMyStreet/Geocode.pm:65
+#: perllib/FixMyStreet/Geocode.pm:73
msgid ""
"Sorry, that location appears to be too general; please be more specific."
msgstr ""
-#: perllib/FixMyStreet/Geocode.pm:75
+#: perllib/FixMyStreet/Geocode.pm:83
msgid "That location does not appear to be in Britain; please try again."
msgstr ""
-#: perllib/FixMyStreet/Geocode.pm:114
-msgid "Sorry, we could not parse that location. Please try again."
+#: perllib/FixMyStreet/Geocode.pm:105 perllib/FixMyStreet/Geocode.pm:140
+msgid "Sorry, we could not find that location."
msgstr ""
-#: perllib/FixMyStreet/Geocode.pm:116 perllib/FixMyStreet/Geocode.pm:131
-msgid "Sorry, we could not find that location."
+#: perllib/FixMyStreet/Geocode.pm:138
+msgid "Sorry, we could not parse that location. Please try again."
msgstr ""
-#: perllib/FixMyStreet/Geocode.pm:147
+#: perllib/FixMyStreet/Geocode.pm:158
msgid ""
"We found more than one match for that location. We show up to ten matches, "
"please try a different search if yours is not here."
msgstr ""
-#: perllib/FixMyStreet/Geocode.pm:162
+#: perllib/FixMyStreet/Geocode.pm:173
msgid "More than one match"
msgstr ""
-#: perllib/FixMyStreet/Map/Bing.pm:39
-#: perllib/FixMyStreet/Map/OSM/StreetView.pm:38
-#: perllib/FixMyStreet/Map/Google.pm:39
-#: perllib/FixMyStreet/Map/Tilma/OL/StreetView.pm:45
-#: perllib/FixMyStreet/Map/Tilma/Original/StreetView.pm:23
+#: perllib/FixMyStreet/Map/Bing.pm:41
+#: perllib/FixMyStreet/Map/OSM/StreetView.pm:42
+#: perllib/FixMyStreet/Map/Google.pm:41
+#: perllib/FixMyStreet/Map/Tilma/OL/StreetView.pm:51
+#: perllib/FixMyStreet/Map/Tilma/Original/StreetView.pm:21
msgid ""
"Map contains Ordnance Survey data &copy; Crown copyright and database right "
"2010."
msgstr ""
-#: perllib/FixMyStreet/Map/OSM.pm:41
-#: perllib/FixMyStreet/Map/OSM/CycleMap.pm:38
+#: perllib/FixMyStreet/Map/OSM.pm:76
msgid ""
-"Map &copy; <a href=\"http://www.openstreetmap.org/\">OpenStreetMap</a> and "
-"contributors, <a href=\"http://creativecommons.org/licenses/by-sa/2.0/\">CC-"
-"BY-SA</a>"
+"Map &copy; <a id=\"osm_link\" href=\"http://www.openstreetmap.org/"
+"\">OpenStreetMap</a> and contributors, <a href=\"http://creativecommons.org/"
+"licenses/by-sa/2.0/\">CC-BY-SA</a>"
+msgstr ""
+
+#: perllib/FixMyStreet/Map/OSM.pm:115
+#: perllib/FixMyStreet/Map/Tilma/Original.pm:155
+msgid "Problem"
msgstr ""
-#: perllib/FixMyStreet/Map/BingOL.pm:39
+#: perllib/FixMyStreet/Map/BingOL.pm:43
msgid ""
"Map contains Ordnance Survey data &copy; Crown copyright and database right "
"2010. Microsoft"
msgstr ""
-#: perllib/FixMyStreet/Map/Tilma/OL/1_10k.pm:45
-#: perllib/FixMyStreet/Map/Tilma/Original/1_10k.pm:23
+#: perllib/FixMyStreet/Map/Tilma/OL/1_10k.pm:51
+#: perllib/FixMyStreet/Map/Tilma/Original/1_10k.pm:21
msgid ""
"&copy; Crown copyright. All rights reserved. Ministry of Justice "
"100037819&nbsp;2008."
msgstr ""
-#: perllib/FixMyStreet/Map/Tilma/Original.pm:81
+#: perllib/FixMyStreet/Map/Tilma/Original.pm:86
msgid "Unable to fetch the map tiles from the tile server."
msgstr ""
-#: perllib/FixMyStreet/Map/Tilma/Original.pm:155
-msgid "Problem"
-msgstr ""
-
#: perllib/Problems.pm:148
#, perl-format
msgid "<big>%s</big> report in past week"
@@ -448,7 +454,7 @@ msgid ""
"empty homes</a>.\n"
msgstr ""
-#: web/ajax.cgi:55 web/ajax.cgi:76 web/index.cgi:902 web/index.cgi:917
+#: web/ajax.cgi:55 web/ajax.cgi:76 web/index.cgi:904 web/index.cgi:919
msgid "(fixed)"
msgstr ""
@@ -545,8 +551,8 @@ msgstr ""
msgid "RSS feed of nearby problems"
msgstr ""
-#: web/alert.cgi:308 web/alert.cgi:367 web/index.cgi:970 web/index.cgi:1082
-#: web/reports.cgi:255
+#: web/alert.cgi:308 web/alert.cgi:367 web/index.cgi:974 web/index.cgi:1086
+#: web/reports.cgi:254
msgid "RSS feed"
msgstr ""
@@ -596,7 +602,7 @@ msgid ""
"postcode or street name and area:"
msgstr ""
-#: web/alert.cgi:389 web/confirm.cgi:192 web/index.cgi:166
+#: web/alert.cgi:389 web/index.cgi:165
msgid "Go"
msgstr ""
@@ -616,12 +622,12 @@ msgstr ""
msgid "Receive email when updates are left on this problem."
msgstr ""
-#: web/alert.cgi:461 web/alert.cgi:488 web/index.cgi:736 web/index.cgi:1076
+#: web/alert.cgi:461 web/alert.cgi:488 web/index.cgi:738 web/index.cgi:1080
#: web-admin/index.cgi:630 web-admin/index.cgi:750
msgid "Email:"
msgstr ""
-#: web/alert.cgi:462 web/alert.cgi:489 web/index.cgi:1077
+#: web/alert.cgi:462 web/alert.cgi:489 web/index.cgi:1081
msgid "Subscribe"
msgstr ""
@@ -710,46 +716,56 @@ msgid ""
"to resolve the UK&rsquo;s empty homes crisis."
msgstr ""
-#: web/confirm.cgi:155 web/confirm.cgi:158
+#: web/confirm.cgi:155 web/confirm.cgi:161
msgid "View your report"
msgstr ""
#: web/confirm.cgi:157
-msgid "Thank you for reporting an empty property on ReportEmptyHomes.com."
+msgid ""
+"Thank you for reporting this empty property on ReportEmptyHomes.com.\n"
+"At present the report cannot be sent through to the council for this area. "
+"We\n"
+"are working with councils to link them into the system so that as many "
+"areas\n"
+"as possible will be covered."
msgstr ""
-#: web/confirm.cgi:163
+#: web/confirm.cgi:166
msgid "You have successfully confirmed your problem"
msgstr ""
-#: web/confirm.cgi:164
+#: web/confirm.cgi:167
msgid " and <strong>we will now send it to the council</strong>"
msgstr ""
-#: web/confirm.cgi:165
+#: web/confirm.cgi:168
#, perl-format
msgid ". You can <a href=\"%s\">view the problem on this site</a>."
msgstr ""
-#: web/confirm.cgi:189
+#: web/confirm.cgi:192
msgid ""
"Thanks, glad to hear it's been fixed! Could we just ask if you have ever "
"reported a problem to a council before?"
msgstr ""
-#: web/confirm.cgi:190 web/questionnaire.cgi:234 web/questionnaire.cgi:322
+#: web/confirm.cgi:193 web/questionnaire.cgi:234 web/questionnaire.cgi:323
#: web-admin/index.cgi:340 web-admin/index.cgi:341 web-admin/index.cgi:503
#: web-admin/index.cgi:590 web-admin/index.cgi:608
msgid "Yes"
msgstr ""
-#: web/confirm.cgi:191 web/questionnaire.cgi:235 web/questionnaire.cgi:323
+#: web/confirm.cgi:194 web/questionnaire.cgi:235 web/questionnaire.cgi:324
#: web-admin/index.cgi:340 web-admin/index.cgi:341 web-admin/index.cgi:503
#: web-admin/index.cgi:590 web-admin/index.cgi:608
msgid "No"
msgstr ""
-#: web/confirm.cgi:237
+#: web/confirm.cgi:195 web/index.cgi:790
+msgid "Submit"
+msgstr ""
+
+#: web/confirm.cgi:240
#, perl-format
msgid ""
"Thank you &mdash; you can <a href=\"%s\">view your updated problem</a> on "
@@ -811,7 +827,7 @@ msgid ""
"send an email to <a href='mailto:%s'>%s</a>:"
msgstr ""
-#: web/contact.cgi:153 web/index.cgi:447
+#: web/contact.cgi:153 web/index.cgi:446
msgid "There were problems with your report. Please see below."
msgstr ""
@@ -839,7 +855,7 @@ msgstr ""
msgid "Your&nbsp;email:"
msgstr ""
-#: web/contact.cgi:236 web/index.cgi:732 web-admin/index.cgi:622
+#: web/contact.cgi:236 web/index.cgi:734 web-admin/index.cgi:622
msgid "Subject:"
msgstr ""
@@ -847,7 +863,7 @@ msgstr ""
msgid "Message:"
msgstr ""
-#: web/contact.cgi:238 web/index.cgi:1092
+#: web/contact.cgi:238 web/index.cgi:1096
msgid "Post"
msgstr ""
@@ -867,206 +883,208 @@ msgstr ""
msgid "Weird and Wonderful reports"
msgstr ""
-#: web/index.cgi:83
+#: web/index.cgi:82
msgid "Submitting your report"
msgstr ""
-#: web/index.cgi:86
+#: web/index.cgi:85
msgid "Submitting your update"
msgstr ""
-#: web/index.cgi:90 web/index.cgi:638
+#: web/index.cgi:89 web/index.cgi:644
msgid "Reporting a problem"
msgstr ""
-#: web/index.cgi:93
+#: web/index.cgi:92
msgid "Viewing a problem"
msgstr ""
-#: web/index.cgi:96
+#: web/index.cgi:95
msgid "Viewing a location"
msgstr ""
-#: web/index.cgi:121
+#: web/index.cgi:120
msgid "Enter a nearby GB postcode, or street name and area"
msgstr ""
-#: web/index.cgi:135
+#: web/index.cgi:134
msgid "Report, view, or discuss local problems"
msgstr ""
-#: web/index.cgi:136
+#: web/index.cgi:135
msgid "(like graffiti, fly tipping, broken paving slabs, or street lighting)"
msgstr ""
-#: web/index.cgi:158
+#: web/index.cgi:157
msgid ""
"Thanks for uploading your photo. We now need to locate your problem, so "
"please enter a nearby street name or postcode in the box below&nbsp;:"
msgstr ""
-#: web/index.cgi:176
+#: web/index.cgi:175
msgid "How to report a problem"
msgstr ""
-#: web/index.cgi:179
+#: web/index.cgi:178
msgid "Locate the problem on a map of the area"
msgstr ""
-#: web/index.cgi:180
+#: web/index.cgi:179
msgid "Enter details of the problem"
msgstr ""
-#: web/index.cgi:181
+#: web/index.cgi:180
msgid "We send it to the council on your behalf"
msgstr ""
-#: web/index.cgi:196
+#: web/index.cgi:195
msgid "Photos of recent reports"
msgstr ""
-#: web/index.cgi:198
+#: web/index.cgi:197
msgid "Recently reported problems"
msgstr ""
-#: web/index.cgi:222
+#: web/index.cgi:221
msgid "Please enter a message"
msgstr ""
-#: web/index.cgi:225 web/index.cgi:309
+#: web/index.cgi:224 web/index.cgi:308
msgid "Please enter your email"
msgstr ""
-#: web/index.cgi:227 web/index.cgi:311
+#: web/index.cgi:226 web/index.cgi:310
msgid "Please enter a valid email"
msgstr ""
-#: web/index.cgi:236 web/index.cgi:378
+#: web/index.cgi:235 web/index.cgi:377
#, perl-format
msgid ""
"That image doesn't appear to have uploaded correctly (%s), please try again."
msgstr ""
-#: web/index.cgi:258 web-admin/index.cgi:477
+#: web/index.cgi:257 web-admin/index.cgi:477
msgid "Anonymous"
msgstr ""
-#: web/index.cgi:300
+#: web/index.cgi:299
msgid "No council selected"
msgstr ""
-#: web/index.cgi:301
+#: web/index.cgi:300
msgid "Please enter a subject"
msgstr ""
-#: web/index.cgi:302
+#: web/index.cgi:301
msgid "Please enter some details"
msgstr ""
-#: web/index.cgi:304
+#: web/index.cgi:303
msgid "Please enter your name"
msgstr ""
-#: web/index.cgi:306
+#: web/index.cgi:305
msgid ""
"Please enter your full name, councils need this information - if you do not "
"wish your name to be shown on the site, untick the box"
msgstr ""
-#: web/index.cgi:313 web/index.cgi:565
+#: web/index.cgi:312 web/index.cgi:569
msgid "-- Pick a category --"
msgstr ""
-#: web/index.cgi:314 web/index.cgi:354
+#: web/index.cgi:313 web/index.cgi:353
msgid "Please choose a category"
msgstr ""
-#: web/index.cgi:316 web/index.cgi:572
+#: web/index.cgi:315 web/index.cgi:576
msgid "-- Pick a property type --"
msgstr ""
-#: web/index.cgi:317
+#: web/index.cgi:316
msgid "Please choose a property type"
msgstr ""
-#: web/index.cgi:338
+#: web/index.cgi:337
msgid "That location is not part of that council"
msgstr ""
-#: web/index.cgi:358
+#: web/index.cgi:357
msgid "We have details for that council"
msgstr ""
-#: web/index.cgi:367
+#: web/index.cgi:366
msgid "Somehow, you only have one co-ordinate. Please try again."
msgstr ""
-#: web/index.cgi:369
+#: web/index.cgi:368
msgid "You haven't specified any sort of co-ordinates. Please try again."
msgstr ""
-#: web/index.cgi:392 web/index.cgi:558 web/index.cgi:565
-msgid "Other"
-msgstr ""
-
-#: web/index.cgi:408
+#: web/index.cgi:407
#, perl-format
msgid ""
"You have successfully confirmed your report and you can now <a href=\"%s"
"\">view it on the site</a>."
msgstr ""
-#: web/index.cgi:545
+#: web/index.cgi:549
msgid ""
"That spot does not appear to be covered by a council.\n"
"If you have tried to report an issue past the shoreline, for example,\n"
"please specify the closest point on land."
msgstr ""
-#: web/index.cgi:566 web-admin/index.cgi:628
+#: web/index.cgi:570 web-admin/index.cgi:628
msgid "Category:"
msgstr ""
-#: web/index.cgi:572
+#: web/index.cgi:576
msgid "Empty house or bungalow"
msgstr ""
-#: web/index.cgi:573
+#: web/index.cgi:577
msgid "Empty flat or maisonette"
msgstr ""
-#: web/index.cgi:573
+#: web/index.cgi:577
msgid "Whole block of empty flats"
msgstr ""
-#: web/index.cgi:574
+#: web/index.cgi:578
msgid "Empty office or other commercial"
msgstr ""
-#: web/index.cgi:574
+#: web/index.cgi:578
msgid "Empty pub or bar"
msgstr ""
-#: web/index.cgi:575
+#: web/index.cgi:579
msgid "Empty public building - school, hospital, etc."
msgstr ""
-#: web/index.cgi:576
+#: web/index.cgi:580
msgid "Property type:"
msgstr ""
-#: web/index.cgi:635
+#: web/index.cgi:638
+msgid ""
+"Please note your report has <strong>not yet been sent</strong>. Choose a "
+"category and add further information below, then submit."
+msgstr ""
+
+#: web/index.cgi:641
msgid ""
"You have located the problem at the point marked with a purple pin on the "
"map.\n"
"If this is not the correct location, simply click on the map again. "
msgstr ""
-#: web/index.cgi:641 web/index.cgi:660 web/index.cgi:662 web/index.cgi:675
+#: web/index.cgi:647 web/index.cgi:666 web/index.cgi:668 web/index.cgi:681
msgid " or "
msgstr ""
-#: web/index.cgi:643
+#: web/index.cgi:649
#, perl-format
msgid ""
"All the information you provide here will be sent to <strong>%s</strong>.\n"
@@ -1074,7 +1092,7 @@ msgid ""
"name if you give us permission."
msgstr ""
-#: web/index.cgi:647
+#: web/index.cgi:653
#, perl-format
msgid ""
"All the information you provide here will be sent to <strong>%s</strong>.\n"
@@ -1082,17 +1100,17 @@ msgid ""
"name if you give us permission."
msgstr ""
-#: web/index.cgi:661
+#: web/index.cgi:667
msgid "All the information you provide here will be sent to"
msgstr ""
-#: web/index.cgi:664
+#: web/index.cgi:670
msgid ""
"The subject and details of the problem will be public, plus your name if you "
"give us permission."
msgstr ""
-#: web/index.cgi:666
+#: web/index.cgi:672
msgid ""
"We do <strong>not</strong> yet have details for the other council that "
"covers this location."
@@ -1102,40 +1120,40 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: web/index.cgi:670 web/index.cgi:685
+#: web/index.cgi:676 web/index.cgi:691
#, perl-format
msgid ""
"You can help us by finding a contact email address for local problems for %s "
"and emailing it to us at <a href='mailto:%s'>%s</a>."
msgstr ""
-#: web/index.cgi:680 web/index.cgi:688
+#: web/index.cgi:686 web/index.cgi:694
msgid "We do not yet have details for the council that covers this location."
msgid_plural ""
"We do not yet have details for the councils that cover this location."
msgstr[0] ""
msgstr[1] ""
-#: web/index.cgi:684
+#: web/index.cgi:690
msgid ""
"If you submit a problem here the subject and details of the problem will be "
"public, but the problem will <strong>not</strong> be reported to the council."
msgstr ""
-#: web/index.cgi:690
+#: web/index.cgi:696
msgid ""
"If you submit a report here it will be left on the site, but not reported to "
"the council &ndash; please still leave your report, so that we can show to "
"the council the activity in their area."
msgstr ""
-#: web/index.cgi:696
+#: web/index.cgi:702
msgid ""
"Please fill in the form below with details of the problem,\n"
"and describe the location as precisely as possible in the details box."
msgstr ""
-#: web/index.cgi:705
+#: web/index.cgi:711
msgid ""
"Please fill in details of the empty property below, saying what type of\n"
"property it is e.g. an empty home, block of flats, office etc. Tell us\n"
@@ -1148,7 +1166,7 @@ msgid ""
"to read, as does a lack of punctuation.\n"
msgstr ""
-#: web/index.cgi:713
+#: web/index.cgi:719
msgid ""
"Please fill in details of the problem below. The council won't be able\n"
"to help unless you leave as much detail as you can, so please describe the "
@@ -1158,74 +1176,74 @@ msgid ""
"photo of the problem if you have one), etc."
msgstr ""
-#: web/index.cgi:718
+#: web/index.cgi:724
msgid "Please fill in details of the problem below."
msgstr ""
-#: web/index.cgi:731
+#: web/index.cgi:733
msgid "Empty property details form"
msgstr ""
-#: web/index.cgi:733 web-admin/index.cgi:623
+#: web/index.cgi:735 web-admin/index.cgi:623
msgid "Details:"
msgstr ""
-#: web/index.cgi:734 web/index.cgi:1108
+#: web/index.cgi:736 web/index.cgi:1112 web/questionnaire.cgi:308
msgid "Photo:"
msgstr ""
-#: web/index.cgi:735 web/index.cgi:1089 web-admin/index.cgi:629
+#: web/index.cgi:737 web/index.cgi:1093 web-admin/index.cgi:629
#: web-admin/index.cgi:749
msgid "Name:"
msgstr ""
-#: web/index.cgi:737 bin/send-reports:89 web-admin/index.cgi:631
+#: web/index.cgi:739 bin/send-reports:91 web-admin/index.cgi:631
msgid "Phone:"
msgstr ""
-#: web/index.cgi:738 web/index.cgi:1096
+#: web/index.cgi:740 web/index.cgi:1100
msgid "(optional)"
msgstr ""
-#: web/index.cgi:740
+#: web/index.cgi:742
msgid "Can we show your name on the site?"
msgstr ""
-#: web/index.cgi:742
+#: web/index.cgi:744
msgid "Can we show your name publicly?"
msgstr ""
-#: web/index.cgi:744
+#: web/index.cgi:746
msgid "(we never show your email address or phone number)"
msgstr ""
-#: web/index.cgi:771
+#: web/index.cgi:773
msgid "Please note:"
msgstr ""
-#: web/index.cgi:773
+#: web/index.cgi:775
msgid ""
"We will only use your personal information in accordance with our <a href=\"/"
"faq#privacy\">privacy policy.</a>"
msgstr ""
-#: web/index.cgi:774
+#: web/index.cgi:776
msgid "Please be polite, concise and to the point."
msgstr ""
-#: web/index.cgi:775
+#: web/index.cgi:777
msgid ""
"Please do not be abusive &mdash; abusing your council devalues the service "
"for all users."
msgstr ""
-#: web/index.cgi:776
+#: web/index.cgi:778
msgid ""
"Writing your message entirely in block capitals makes it hard to read, as "
"does a lack of punctuation."
msgstr ""
-#: web/index.cgi:777
+#: web/index.cgi:779
msgid ""
"Remember that FixMyStreet is primarily for reporting physical problems that "
"can be fixed. If your problem is not appropriate for submission via this "
@@ -1233,7 +1251,7 @@ msgid ""
"website."
msgstr ""
-#: web/index.cgi:779
+#: web/index.cgi:781
msgid ""
"FixMyStreet and the Guardian are providing this service in partnership in <a "
"href=\"/faq#privacy\">certain cities</a>. In those cities, both have access "
@@ -1242,128 +1260,124 @@ msgid ""
"their privacy policies."
msgstr ""
-#: web/index.cgi:788
-msgid "Submit"
-msgstr ""
-
-#: web/index.cgi:883
+#: web/index.cgi:885
msgid "Hide stale reports"
msgstr ""
-#: web/index.cgi:886
+#: web/index.cgi:888
msgid "Include stale reports"
msgstr ""
-#: web/index.cgi:905
+#: web/index.cgi:907
msgid "No problems have been reported yet."
msgstr ""
-#: web/index.cgi:921
+#: web/index.cgi:923
msgid "No problems found."
msgstr ""
-#: web/index.cgi:926
+#: web/index.cgi:928
msgid "Show pins"
msgstr ""
-#: web/index.cgi:930
+#: web/index.cgi:932
msgid "Hide pins"
msgstr ""
-#: web/index.cgi:969
+#: web/index.cgi:973
msgid "Email me new local problems"
msgstr ""
-#: web/index.cgi:971
+#: web/index.cgi:975
msgid "RSS feed of recent local problems"
msgstr ""
-#: web/index.cgi:974
+#: web/index.cgi:978
msgid "Problems in this area"
msgstr ""
-#: web/index.cgi:975
+#: web/index.cgi:979
msgid "Reports on and around the map"
msgstr ""
-#: web/index.cgi:976
+#: web/index.cgi:980
#, perl-format
msgid "Closest nearby problems <small>(within&nbsp;%skm)</small>"
msgstr ""
-#: web/index.cgi:980
+#: web/index.cgi:984
msgid ""
"To report a problem, simply\n"
" <strong>click on the map</strong> at the correct location."
msgstr ""
-#: web/index.cgi:982
+#: web/index.cgi:986
#, perl-format
msgid ""
"<small>If you cannot see the map, <a href='%s' rel='nofollow'>skip this\n"
" step</a>.</small>"
msgstr ""
-#: web/index.cgi:987
+#: web/index.cgi:991
msgid "Recent local problems, FixMyStreet"
msgstr ""
-#: web/index.cgi:1000
+#: web/index.cgi:1004
msgid "There were problems with your update. Please see below."
msgstr ""
-#: web/index.cgi:1021 web/index.cgi:1023
+#: web/index.cgi:1025 web/index.cgi:1027
msgid "Unknown problem ID"
msgstr ""
-#: web/index.cgi:1024
+#: web/index.cgi:1028
msgid "That report has been removed from FixMyStreet."
msgstr ""
-#: web/index.cgi:1044
+#: web/index.cgi:1048
msgid "This problem is old and of unknown status."
msgstr ""
-#: web/index.cgi:1047 web/index.cgi:1088
+#: web/index.cgi:1051 web/index.cgi:1092
msgid "This problem has been fixed"
msgstr ""
-#: web/index.cgi:1072
+#: web/index.cgi:1076
msgid "More problems nearby"
msgstr ""
-#: web/index.cgi:1075
+#: web/index.cgi:1079
msgid "Email me updates"
msgstr ""
-#: web/index.cgi:1078
+#: web/index.cgi:1082
msgid "Receive email when updates are left on this problem"
msgstr ""
-#: web/index.cgi:1083
+#: web/index.cgi:1087
msgid "RSS feed of updates to this problem"
msgstr ""
-#: web/index.cgi:1084
+#: web/index.cgi:1088
msgid "Provide an update"
msgstr ""
-#: web/index.cgi:1090
+#: web/index.cgi:1094
msgid "Update:"
msgstr ""
-#: web/index.cgi:1091
+#: web/index.cgi:1095
msgid "Alert me to future updates"
msgstr ""
-#: web/index.cgi:1099
+#: web/index.cgi:1103
msgid ""
"Please note that updates are not sent to the council. If you leave your name "
"it will be public. Your information will only be used in accordance with our "
"<a href=\"/faq#privacy\">privacy policy</a>"
msgstr ""
-#: web/index.cgi:1119
+#: web/index.cgi:1123
msgid "Updates to this problem, FixMyStreet"
msgstr ""
@@ -1520,144 +1534,148 @@ msgid ""
"your experience of getting the problem fixed?"
msgstr ""
-#: web/questionnaire.cgi:321
+#: web/questionnaire.cgi:322
msgid ""
"Would you like to receive another questionnaire in 4 weeks, reminding you to "
"check the status?"
msgstr ""
-#: web/reports.cgi:193 web/reports.cgi:240
+#: web/reports.cgi:192 web/reports.cgi:239
msgid "Summary reports"
msgstr ""
-#: web/reports.cgi:195
+#: web/reports.cgi:194
msgid ""
"This is a summary of all reports on this site; select a particular council "
"to see the reports sent there."
msgstr ""
-#: web/reports.cgi:196
+#: web/reports.cgi:195
msgid "Greyed-out lines are councils that no longer exist."
msgstr ""
-#: web/reports.cgi:200 web-admin/index.cgi:477 web-admin/index.cgi:656
+#: web/reports.cgi:199 web-admin/index.cgi:477 web-admin/index.cgi:656
msgid "Name"
msgstr ""
-#: web/reports.cgi:200 web/reports.cgi:276
+#: web/reports.cgi:199 web/reports.cgi:275
msgid "New problems"
msgstr ""
-#: web/reports.cgi:200 web/reports.cgi:284
+#: web/reports.cgi:199 web/reports.cgi:283
msgid "Older problems"
msgstr ""
-#: web/reports.cgi:202
+#: web/reports.cgi:201
msgid "Old problems,<br>state unknown"
msgstr ""
-#: web/reports.cgi:204 web/reports.cgi:291
+#: web/reports.cgi:203 web/reports.cgi:290
msgid "Recently fixed"
msgstr ""
-#: web/reports.cgi:204
+#: web/reports.cgi:203
msgid "Older fixed"
msgstr ""
-#: web/reports.cgi:246
+#: web/reports.cgi:245
msgid "council"
msgstr ""
-#: web/reports.cgi:256
+#: web/reports.cgi:255
#, perl-format
msgid "RSS feed of problems in this %s"
msgstr ""
-#: web/reports.cgi:260
+#: web/reports.cgi:259
#, perl-format
msgid "This is a summary of all reports for one %s."
msgstr ""
-#: web/reports.cgi:261
+#: web/reports.cgi:260
#, perl-format
msgid "This is a summary of all reports for this %s."
msgstr ""
-#: web/reports.cgi:265
+#: web/reports.cgi:264
#, perl-format
msgid "You can <a href=\"%s\">see less detail</a>."
msgstr ""
-#: web/reports.cgi:267
+#: web/reports.cgi:266
#, perl-format
msgid "You can <a href=\"%s\">see more details</a>."
msgstr ""
-#: web/reports.cgi:269
+#: web/reports.cgi:268
#, perl-format
msgid ""
"You can <a href=\"%s\">see less detail</a> or go back and <a href=\"/reports"
"\">show all councils</a>."
msgstr ""
-#: web/reports.cgi:271
+#: web/reports.cgi:270
#, perl-format
msgid ""
"You can <a href=\"%s\">see more details</a> or go back and <a href=\"/reports"
"\">show all councils</a>."
msgstr ""
-#: web/reports.cgi:286
+#: web/reports.cgi:285
msgid "Old problems, state unknown"
msgstr ""
-#: web/reports.cgi:292
+#: web/reports.cgi:291
msgid "Old fixed"
msgstr ""
-#: web/reports.cgi:295
+#: web/reports.cgi:294
#, perl-format
msgid "%s - Summary reports"
msgstr ""
-#: web/reports.cgi:295
+#: web/reports.cgi:294
#, perl-format
msgid "Problems within %s, FixMyStreet"
msgstr ""
-#: web/reports.cgi:335
+#: web/reports.cgi:333
+msgid "(sent to both)"
+msgstr ""
+
+#: web/reports.cgi:334
msgid "(not sent to council)"
msgstr ""
-#: bin/send-reports:91
+#: bin/send-reports:93
msgid ""
"This web page also contains a photo of the problem, provided by the user."
msgstr ""
-#: bin/send-reports:97
+#: bin/send-reports:99
msgid "To view a map of the precise location of this issue"
msgstr ""
-#: bin/send-reports:98
+#: bin/send-reports:100
msgid ""
"The user could not locate the problem on a map, but to see the area around "
"the location they entered"
msgstr ""
-#: bin/send-reports:178
+#: bin/send-reports:182
msgid "this type of local problem"
msgstr ""
-#: bin/send-reports:182
+#: bin/send-reports:186
#, perl-format
msgid "Category: %s"
msgstr ""
-#: bin/send-reports:185
+#: bin/send-reports:189
msgid " and "
msgstr ""
-#: bin/send-reports:186
+#: bin/send-reports:190
msgid ""
"This email has been sent to both councils covering the location of the "
"problem, as the user did not categorise it; please ignore it if you're not "
@@ -1665,7 +1683,7 @@ msgid ""
"problem this is so we can add it to our system."
msgstr ""
-#: bin/send-reports:192
+#: bin/send-reports:196
#, perl-format
msgid ""
"We realise this problem might be the responsibility of %s; however, we don't "
@@ -1873,7 +1891,7 @@ msgstr ""
#: web-admin/index.cgi:190
#, perl-format
-msgid "%d edits by %d"
+msgid "%d edits by %s"
msgstr ""
#: web-admin/index.cgi:193
diff --git a/locale/cy_GB.UTF-8/LC_MESSAGES/EmptyHomes.po b/locale/cy_GB.UTF-8/LC_MESSAGES/EmptyHomes.po
index bc32354de..c7abcc58e 100644
--- a/locale/cy_GB.UTF-8/LC_MESSAGES/EmptyHomes.po
+++ b/locale/cy_GB.UTF-8/LC_MESSAGES/EmptyHomes.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 1.0\n"
"Report-Msgid-Bugs-To: matthew@mysociety.org\n"
-"POT-Creation-Date: 2011-02-23 13:09+0000\n"
+"POT-Creation-Date: 2011-04-01 13:38+0100\n"
"PO-Revision-Date: 2009-07-10 14:20-0000\n"
"Last-Translator: Mark Smith <Mark.Smith@trosol.co.uk>\n"
"Language-Team: mySociety\n"
@@ -23,12 +23,12 @@ msgstr ""
msgid "Report Empty Homes"
msgstr "Adrodd am Eiddo Gwag"
-#: perllib/Cobrands/Fiksgatami/Util.pm:27
+#: perllib/Cobrands/Fiksgatami/Util.pm:37
#, fuzzy
msgid "Enter a nearby postcode, or street name and area"
msgstr "Cofnodwch god post Prydeinig, neu enw stryd ac ardal gerllaw:"
-#: perllib/Page.pm:83
+#: perllib/Page.pm:86
#, perl-format
msgid ""
"Please try again later, or <a href=\"mailto:%s\">email us</a> to let us know."
@@ -36,50 +36,50 @@ msgstr ""
"Rhowch gynnig eto'n ddiweddarach, neu <a href=\"mailto:%s\">anfonwch neges e-"
"bost atom</a>i roi gwybod inni."
-#: perllib/Page.pm:84
+#: perllib/Page.pm:87
msgid "Sorry! Something's gone wrong."
msgstr "Ymddiheuriadau! Mae rhywbeth wedi mynd o'i le."
-#: perllib/Page.pm:85
+#: perllib/Page.pm:88
msgid "The text of the error was:"
msgstr "Testun y gwall oedd:"
-#: perllib/Page.pm:192 web/contact.cgi:107
+#: perllib/Page.pm:197 web/contact.cgi:107
msgid "reportemptyhomes.com"
msgstr "reportemptyhomes.com"
-#: perllib/Page.pm:195 perllib/Page.pm:317
+#: perllib/Page.pm:200 perllib/Page.pm:324
msgid "Report a property"
msgstr "Rhoi gwybod am eiddo"
-#: perllib/Page.pm:196 perllib/Page.pm:318
+#: perllib/Page.pm:201 perllib/Page.pm:325
msgid "Reports"
msgstr "Adroddiadau"
-#: perllib/Page.pm:197 perllib/Page.pm:319
+#: perllib/Page.pm:202 perllib/Page.pm:326
msgid "Get local reports"
msgstr "Gweld adroddiadau lleol"
-#: perllib/Page.pm:198 perllib/Page.pm:320
+#: perllib/Page.pm:203 perllib/Page.pm:327
msgid "FAQs"
msgstr "Cwestiynau Cyffredin"
-#: perllib/Page.pm:199 web/about.cgi:19 web/about.cgi:21
+#: perllib/Page.pm:204 web/about.cgi:19 web/about.cgi:21
msgid "About us"
msgstr "Amdanom ni"
-#: perllib/Page.pm:220
+#: perllib/Page.pm:225
msgid "Fix<span id=\"my\">My</span>Street"
msgstr "Trwsio<span id=\"my\">Fy</span>Stryd"
-#: perllib/Page.pm:296
+#: perllib/Page.pm:303
#, fuzzy
msgid ""
"This is a developer site; things might break at any time, and the database "
"will be periodically deleted."
msgstr "Safle datblygwr yw hwn; gallai pethau dorri unrhyw bryd."
-#: perllib/Page.pm:310
+#: perllib/Page.pm:317
msgid ""
"Built by <a href=\"http://www.mysociety.org/\">mySociety</a>, using some <a "
"href=\"http://github.com/mysociety/fixmystreet\">clever</a>&nbsp;<a href="
@@ -91,7 +91,7 @@ msgstr ""
"d=mysociety/services/TilMa\">god</a><a href=\"http://github.com/mysociety/"
"fixmystreet\">clyfar</a>&nbsp;."
-#: perllib/Page.pm:312
+#: perllib/Page.pm:319
#, fuzzy
msgid ""
"Built by <a href=\"http://www.mysociety.org/\">mySociety</a> and maintained "
@@ -104,15 +104,15 @@ msgstr ""
"d=mysociety/services/TilMa\">god</a><a href=\"http://github.com/mysociety/"
"fixmystreet\">clyfar</a>&nbsp;."
-#: perllib/Page.pm:316
+#: perllib/Page.pm:323
msgid "Navigation"
msgstr "Mordwyo "
-#: perllib/Page.pm:321
+#: perllib/Page.pm:328
msgid "Contact"
msgstr "Cysylltu"
-#: perllib/Page.pm:323
+#: perllib/Page.pm:330
msgid ""
"<a href=\"http://www.mysociety.org/\"><img id=\"logo\" width=\"133\" height="
"\"26\" src=\"/i/mysociety-dark.png\" alt=\"View mySociety.org\"><span id="
@@ -122,38 +122,38 @@ msgstr ""
"\"26\" src=\"/i/mysociety-dark.png\" alt=\"View mySociety.org\"><span id="
"\"logoie\"></span></a>"
-#: perllib/Page.pm:381
+#: perllib/Page.pm:388
msgid "Error"
msgstr "Gwall"
-#: perllib/Page.pm:443
+#: perllib/Page.pm:461
msgid "your empty property will not be posted"
msgstr "ni fydd eich eiddo gwag yn cael ei bostio"
-#: perllib/Page.pm:444
+#: perllib/Page.pm:462
msgid ""
"we'll hang on to your empty property report while you're checking your email."
msgstr ""
"byddwn yn dal gafael ar eich hysbysiad am eiddo gwag wrth i chi wirio eich e-"
"bost."
-#: perllib/Page.pm:446
+#: perllib/Page.pm:464
msgid "your update will not be posted"
msgstr "ni fydd eich diweddariad yn cael ei bostio"
-#: perllib/Page.pm:447
+#: perllib/Page.pm:465
msgid "we'll hang on to your update while you're checking your email."
msgstr "byddwn yn dal gafael ar eich diweddariad wrth i chi wirio eich e-bost."
-#: perllib/Page.pm:449
+#: perllib/Page.pm:467
msgid "your alert will not be activated"
msgstr "ni fydd eich hysbysiad yn cael ei weithredu"
-#: perllib/Page.pm:450
+#: perllib/Page.pm:468
msgid "we'll hang on to your alert while you're checking your email."
msgstr "byddwn yn dal gafael ar eich hysbysiad wrth i chi wirio eich e-bost."
-#: perllib/Page.pm:457
+#: perllib/Page.pm:475
#, perl-format
msgid ""
"<h1>Nearly Done! Now check your email...</h1>\n"
@@ -177,154 +177,160 @@ msgstr ""
"os nad ydych, %s.</p>\n"
"<p>(Peidiwch â phoeni &mdash; %s)</p>\n"
-#: perllib/Page.pm:484
+#: perllib/Page.pm:503
msgid "today"
msgstr "heddiw"
-#: perllib/Page.pm:508
+#: perllib/Page.pm:527
msgid "less than a minute"
msgstr "llai na munud"
-#: perllib/Page.pm:511
+#: perllib/Page.pm:530
#, fuzzy, perl-format
msgid "%d week"
msgstr "wythnos"
-#: perllib/Page.pm:511
+#: perllib/Page.pm:530
#, fuzzy, perl-format
msgid "%d weeks"
msgstr "wythnos"
-#: perllib/Page.pm:512
+#: perllib/Page.pm:531
#, fuzzy, perl-format
msgid "%d day"
msgstr "diwrnod"
-#: perllib/Page.pm:512
+#: perllib/Page.pm:531
#, fuzzy, perl-format
msgid "%d days"
msgstr "diwrnod"
-#: perllib/Page.pm:513
+#: perllib/Page.pm:532
#, fuzzy, perl-format
msgid "%d hour"
msgstr "awr"
-#: perllib/Page.pm:513
+#: perllib/Page.pm:532
#, fuzzy, perl-format
msgid "%d hours"
msgstr "awr"
-#: perllib/Page.pm:514
+#: perllib/Page.pm:533
#, fuzzy, perl-format
msgid "%d minute"
msgstr "munud"
-#: perllib/Page.pm:514
+#: perllib/Page.pm:533
#, fuzzy, perl-format
msgid "%d minutes"
msgstr "munud"
-#: perllib/Page.pm:534
+#: perllib/Page.pm:553
#, perl-format
msgid "%s, reported anonymously at %s"
msgstr "Rhoddodd %s wybod yn ddi-enw am %s"
-#: perllib/Page.pm:536
+#: perllib/Page.pm:555
#, perl-format
msgid "%s, reported by %s at %s"
msgstr "Adroddwyd am %s gan %s am %s"
-#: perllib/Page.pm:540
+#: perllib/Page.pm:558 perllib/Page.pm:560 perllib/Page.pm:566
+#: perllib/Page.pm:568 web/index.cgi:391 web/index.cgi:562 web/index.cgi:569
+#: bin/send-reports:181
+msgid "Other"
+msgstr "Arall"
+
+#: perllib/Page.pm:559
#, perl-format
msgid "Reported by %s in the %s category anonymously at %s"
msgstr "Adroddwyd am hyn gan %s yn y categori %s yn ddi-enw, am %s"
-#: perllib/Page.pm:542
+#: perllib/Page.pm:561
#, perl-format
msgid "Reported by %s in the %s category by %s at %s"
msgstr "Adroddwyd gan %s yn y categori %s trwy %s am %s"
-#: perllib/Page.pm:544
+#: perllib/Page.pm:563
#, perl-format
msgid "Reported by %s anonymously at %s"
msgstr "Adroddwyd gan %s yn ddi-enw am %s"
-#: perllib/Page.pm:546
+#: perllib/Page.pm:565
#, perl-format
msgid "Reported by %s by %s at %s"
msgstr "Adroddwyd gan %s trwy %s am %s"
-#: perllib/Page.pm:548
+#: perllib/Page.pm:567
#, perl-format
msgid "Reported in the %s category anonymously at %s"
msgstr "Adroddiwyd yn y categori %s yn ddi-enw am %s"
-#: perllib/Page.pm:550
+#: perllib/Page.pm:569
#, perl-format
msgid "Reported in the %s category by %s at %s"
msgstr "Adroddwyd yn y categori %s gan %s am %s"
-#: perllib/Page.pm:552 web/contact.cgi:212
+#: perllib/Page.pm:571 web/contact.cgi:212
#, perl-format
msgid "Reported anonymously at %s"
msgstr "Adroddwyd yn ddi-enw am %s"
-#: perllib/Page.pm:554 web/contact.cgi:213
+#: perllib/Page.pm:573 web/contact.cgi:213
#, perl-format
msgid "Reported by %s at %s"
msgstr "Adroddwyd gan %s am %s"
-#: perllib/Page.pm:559
+#: perllib/Page.pm:578
msgid "the map was not used so pin location may be inaccurate"
msgstr ""
"ni ddefnyddiwyd y map felly mae'n bosibl na fydd lleoliad y pin yn gywir"
-#: perllib/Page.pm:567
+#: perllib/Page.pm:586
#, perl-format
msgid "Sent to %s %s later"
msgstr "Anfonwyd at %s %s yn ddiweddarach"
-#: perllib/Page.pm:571
+#: perllib/Page.pm:590
msgid "Not reported to council"
msgstr "Ni roddwyd gwybod i'r cyngor am hyn"
-#: perllib/Page.pm:622 web-admin/index.cgi:522 web-admin/index.cgi:646
+#: perllib/Page.pm:641 web-admin/index.cgi:522 web-admin/index.cgi:646
msgid "Updates"
msgstr "Diweddariadau"
-#: perllib/Page.pm:626
+#: perllib/Page.pm:645
#, perl-format
msgid "Posted by %s at %s"
msgstr "Cofnodwyd gan %s am %s"
-#: perllib/Page.pm:628
+#: perllib/Page.pm:647
#, perl-format
msgid "Posted anonymously at %s"
msgstr "Cofnodwyd yn ddi-enw am %s"
-#: perllib/Page.pm:631
+#: perllib/Page.pm:650
msgid "marked as returned to use"
msgstr "cofnodwyd bod hyn wedi'i adfer i'w ddefnyddio"
-#: perllib/Page.pm:632
+#: perllib/Page.pm:651
msgid "reopened"
msgstr "wedi'i ailagor"
-#: perllib/Page.pm:640 web/index.cgi:1071
+#: perllib/Page.pm:659 web/index.cgi:1075
msgid "Offensive? Unsuitable? Tell us"
msgstr "Sarhaus? Anaddas? Rhowch wybod i ni"
-#: perllib/Page.pm:667
+#: perllib/Page.pm:686
msgid "That postcode was not recognised, sorry."
msgstr "Ni chafodd y cod post hwnnw ei gydnabod, sori."
-#: perllib/Page.pm:672
+#: perllib/Page.pm:692
msgid ""
"Sorry, that appears to be a Crown dependency postcode, which we don't cover."
msgstr ""
-#: perllib/Page.pm:675 perllib/FixMyStreet/Geocode.pm:134
+#: perllib/Page.pm:695 perllib/FixMyStreet/Geocode.pm:145
msgid ""
"We do not cover Northern Ireland, I'm afraid, as our licence doesn't include "
"any maps for the region."
@@ -332,7 +338,7 @@ msgstr ""
"Nid ydym yn ymdrin â Gogledd Iwerddon, yn anffodus, gan nad yw ein trwydded "
"yn cynnwys unrhyw fapiau ar gyfer y rhanbarth."
-#: perllib/Page.pm:705
+#: perllib/Page.pm:726
msgid "Please upload a JPEG image only"
msgstr "Dim ond llun JPEG y dylech lwytho i fyny."
@@ -345,34 +351,34 @@ msgstr "Mae'r eiddo gwag hwn wedi cael ei adfer i'w ddefnyddio"
msgid "This report is currently marked as open."
msgstr ""
-#: perllib/FixMyStreet/Alert.pm:311
+#: perllib/FixMyStreet/Alert.pm:309
#, fuzzy, perl-format
msgid "Report on %s"
msgstr "Adroddiadau"
-#: perllib/FixMyStreet/Geocode.pm:65
+#: perllib/FixMyStreet/Geocode.pm:73
msgid ""
"Sorry, that location appears to be too general; please be more specific."
msgstr ""
"Sori, mae'n ymddangos bod y lleoliad hwnnw'n rhy gyffredinol; rhowch gynnig "
"arall arni."
-#: perllib/FixMyStreet/Geocode.pm:75
+#: perllib/FixMyStreet/Geocode.pm:83
msgid "That location does not appear to be in Britain; please try again."
msgstr ""
"Nid yw'n ymddangos bod y lleoliad hwnnw ym Mhrydain; rhowch gynnig arall "
"arni."
-#: perllib/FixMyStreet/Geocode.pm:114
+#: perllib/FixMyStreet/Geocode.pm:105 perllib/FixMyStreet/Geocode.pm:140
+msgid "Sorry, we could not find that location."
+msgstr "Sori, ni fu modd i ni ddod o hyd i'r lleoliad hwnnw."
+
+#: perllib/FixMyStreet/Geocode.pm:138
msgid "Sorry, we could not parse that location. Please try again."
msgstr ""
"Sori, ni fu modd i ni ddosrannu'r lleoliad hwnnw. Rhowch gynnig arall arni."
-#: perllib/FixMyStreet/Geocode.pm:116 perllib/FixMyStreet/Geocode.pm:131
-msgid "Sorry, we could not find that location."
-msgstr "Sori, ni fu modd i ni ddod o hyd i'r lleoliad hwnnw."
-
-#: perllib/FixMyStreet/Geocode.pm:147
+#: perllib/FixMyStreet/Geocode.pm:158
msgid ""
"We found more than one match for that location. We show up to ten matches, "
"please try a different search if yours is not here."
@@ -381,50 +387,50 @@ msgstr ""
"hyd at ddeg cyfatebiaeth, rhowch gynnig ar chwiliad gwahanol os nad yw'ch "
"lleoliad chi yno."
-#: perllib/FixMyStreet/Geocode.pm:162
+#: perllib/FixMyStreet/Geocode.pm:173
msgid "More than one match"
msgstr ""
-#: perllib/FixMyStreet/Map/Bing.pm:39
-#: perllib/FixMyStreet/Map/OSM/StreetView.pm:38
-#: perllib/FixMyStreet/Map/Google.pm:39
-#: perllib/FixMyStreet/Map/Tilma/OL/StreetView.pm:45
-#: perllib/FixMyStreet/Map/Tilma/Original/StreetView.pm:23
+#: perllib/FixMyStreet/Map/Bing.pm:41
+#: perllib/FixMyStreet/Map/OSM/StreetView.pm:42
+#: perllib/FixMyStreet/Map/Google.pm:41
+#: perllib/FixMyStreet/Map/Tilma/OL/StreetView.pm:51
+#: perllib/FixMyStreet/Map/Tilma/Original/StreetView.pm:21
msgid ""
"Map contains Ordnance Survey data &copy; Crown copyright and database right "
"2010."
msgstr ""
-#: perllib/FixMyStreet/Map/OSM.pm:41
-#: perllib/FixMyStreet/Map/OSM/CycleMap.pm:38
+#: perllib/FixMyStreet/Map/OSM.pm:76
msgid ""
-"Map &copy; <a href=\"http://www.openstreetmap.org/\">OpenStreetMap</a> and "
-"contributors, <a href=\"http://creativecommons.org/licenses/by-sa/2.0/\">CC-"
-"BY-SA</a>"
+"Map &copy; <a id=\"osm_link\" href=\"http://www.openstreetmap.org/"
+"\">OpenStreetMap</a> and contributors, <a href=\"http://creativecommons.org/"
+"licenses/by-sa/2.0/\">CC-BY-SA</a>"
msgstr ""
-#: perllib/FixMyStreet/Map/BingOL.pm:39
+#: perllib/FixMyStreet/Map/OSM.pm:115
+#: perllib/FixMyStreet/Map/Tilma/Original.pm:155
+msgid "Empty property"
+msgstr "Eiddo gwag"
+
+#: perllib/FixMyStreet/Map/BingOL.pm:43
msgid ""
"Map contains Ordnance Survey data &copy; Crown copyright and database right "
"2010. Microsoft"
msgstr ""
-#: perllib/FixMyStreet/Map/Tilma/OL/1_10k.pm:45
-#: perllib/FixMyStreet/Map/Tilma/Original/1_10k.pm:23
+#: perllib/FixMyStreet/Map/Tilma/OL/1_10k.pm:51
+#: perllib/FixMyStreet/Map/Tilma/Original/1_10k.pm:21
#, fuzzy
msgid ""
"&copy; Crown copyright. All rights reserved. Ministry of Justice "
"100037819&nbsp;2008."
msgstr "Hawlfraint y Goron. Cedwir pob hawl. Y Weinyddiaeth Amddiffyn"
-#: perllib/FixMyStreet/Map/Tilma/Original.pm:81
+#: perllib/FixMyStreet/Map/Tilma/Original.pm:86
msgid "Unable to fetch the map tiles from the tile server."
msgstr ""
-#: perllib/FixMyStreet/Map/Tilma/Original.pm:155
-msgid "Empty property"
-msgstr "Eiddo gwag"
-
#: perllib/Problems.pm:148
#, perl-format
msgid "<big>%s</big> report in past week"
@@ -523,7 +529,7 @@ msgstr ""
"cat=20'>Gwybodaeth\n"
"bellach am ein gwaith ar gartrefi gwag</a>.\n"
-#: web/ajax.cgi:55 web/ajax.cgi:76 web/index.cgi:902 web/index.cgi:917
+#: web/ajax.cgi:55 web/ajax.cgi:76 web/index.cgi:904 web/index.cgi:919
msgid "(returned to use)"
msgstr "(wedi'i adfer i'w ddefnyddio)"
@@ -639,8 +645,8 @@ msgstr "(pellter rhagosodedig sy'n cynnwys tua 200,000 o bobl)"
msgid "RSS feed of nearby empty properties"
msgstr "Porthiant RSS o eiddo gwag sydd gerllaw"
-#: web/alert.cgi:308 web/alert.cgi:367 web/index.cgi:970 web/index.cgi:1082
-#: web/reports.cgi:255
+#: web/alert.cgi:308 web/alert.cgi:367 web/index.cgi:974 web/index.cgi:1086
+#: web/reports.cgi:254
msgid "RSS feed"
msgstr "Porthiant RSS"
@@ -701,7 +707,7 @@ msgstr ""
"ward chi,\n"
"cofnodwch eich cod post Prydeinig neu enw stryd ac ardal:"
-#: web/alert.cgi:389 web/confirm.cgi:192 web/index.cgi:166
+#: web/alert.cgi:389 web/index.cgi:165
msgid "Go"
msgstr "Ewch"
@@ -723,12 +729,12 @@ msgstr ""
"Derbyn neges e-bost pan fydd diweddariadau'n cael eu rhoi am yr eiddo gwag "
"hwn."
-#: web/alert.cgi:461 web/alert.cgi:488 web/index.cgi:736 web/index.cgi:1076
+#: web/alert.cgi:461 web/alert.cgi:488 web/index.cgi:738 web/index.cgi:1080
#: web-admin/index.cgi:630 web-admin/index.cgi:750
msgid "Email:"
msgstr "E-bost:"
-#: web/alert.cgi:462 web/alert.cgi:489 web/index.cgi:1077
+#: web/alert.cgi:462 web/alert.cgi:489 web/index.cgi:1081
msgid "Subscribe"
msgstr "Tanysgrifio"
@@ -790,7 +796,6 @@ msgid "Sorry, there has been an error confirming your empty property."
msgstr "Sori, bu gwall wrth gadarnhau eich eiddo gwag."
#: web/confirm.cgi:139
-#, fuzzy
msgid ""
"Thank you for reporting an empty property on\n"
"ReportEmptyHomes.com. We have emailed the lead officer for empty homes in "
@@ -847,28 +852,34 @@ msgstr ""
"helpu i \n"
"ddatrys argyfwng tai gwag y DU."
-#: web/confirm.cgi:155 web/confirm.cgi:158
+#: web/confirm.cgi:155 web/confirm.cgi:161
msgid "View your report"
msgstr "Gweld eich adroddiad"
#: web/confirm.cgi:157
-msgid "Thank you for reporting an empty property on ReportEmptyHomes.com."
+msgid ""
+"Thank you for reporting this empty property on ReportEmptyHomes.com.\n"
+"At present the report cannot be sent through to the council for this area. "
+"We\n"
+"are working with councils to link them into the system so that as many "
+"areas\n"
+"as possible will be covered."
msgstr "Diolch am roi gwybod am eiddo gwag ar ReportEmptyHomes.com."
-#: web/confirm.cgi:163
+#: web/confirm.cgi:166
msgid "You have successfully confirmed your empty property"
msgstr "Rydych wedi cadarnhau eich eiddo gwag yn llwyddiannus"
-#: web/confirm.cgi:164
+#: web/confirm.cgi:167
msgid " and <strong>we will now send it to the council</strong>"
msgstr " a <strong>byddwn nawr yn ei anfon at y cyngor</strong>"
-#: web/confirm.cgi:165
+#: web/confirm.cgi:168
#, perl-format
msgid ". You can <a href=\"%s\">view the empty property on this site</a>."
msgstr ". Gallwch <a href=\"%s\">weld yr eiddo gwag ar y safle hwn</a>."
-#: web/confirm.cgi:189
+#: web/confirm.cgi:192
msgid ""
"Thanks, glad to hear it's been returned to use! Could we just ask if you "
"have ever reported an empty property to a council before?"
@@ -877,19 +888,23 @@ msgstr ""
"i ni'ch holi chi, a ydych erioed wedi rhoi gwybod i'r cyngor am eiddo gwag "
"cyn hyn?"
-#: web/confirm.cgi:190 web/questionnaire.cgi:234 web/questionnaire.cgi:322
+#: web/confirm.cgi:193 web/questionnaire.cgi:234 web/questionnaire.cgi:323
#: web-admin/index.cgi:340 web-admin/index.cgi:341 web-admin/index.cgi:503
#: web-admin/index.cgi:590 web-admin/index.cgi:608
msgid "Yes"
msgstr "Ydw"
-#: web/confirm.cgi:191 web/questionnaire.cgi:235 web/questionnaire.cgi:323
+#: web/confirm.cgi:194 web/questionnaire.cgi:235 web/questionnaire.cgi:324
#: web-admin/index.cgi:340 web-admin/index.cgi:341 web-admin/index.cgi:503
#: web-admin/index.cgi:590 web-admin/index.cgi:608
msgid "No"
msgstr "Nac ydw"
-#: web/confirm.cgi:237
+#: web/confirm.cgi:195 web/index.cgi:790
+msgid "Submit"
+msgstr "Anfon"
+
+#: web/confirm.cgi:240
#, perl-format
msgid ""
"Thank you &mdash; you can <a href=\"%s\">view your updated empty property</"
@@ -966,7 +981,7 @@ msgstr ""
"Byddai'n dda gennym glywed eich barn am y wefan hon. Llenwch y ffurflen, neu "
"anfonwch neges e-bost at <a href='mailto:%s'>%s</a>:"
-#: web/contact.cgi:153 web/index.cgi:447
+#: web/contact.cgi:153 web/index.cgi:446
msgid "There were problems with your report. Please see below."
msgstr "Cafwyd anhawsterau gyda'ch adroddiad. Gweler isod."
@@ -996,7 +1011,7 @@ msgstr "Eich enw:"
msgid "Your&nbsp;email:"
msgstr "Eich&nbsp;cyfeiriad e-bost:"
-#: web/contact.cgi:236 web/index.cgi:732 web-admin/index.cgi:622
+#: web/contact.cgi:236 web/index.cgi:734 web-admin/index.cgi:622
msgid "Subject:"
msgstr "Pwnc:"
@@ -1004,7 +1019,7 @@ msgstr "Pwnc:"
msgid "Message:"
msgstr "Neges:"
-#: web/contact.cgi:238 web/index.cgi:1092
+#: web/contact.cgi:238 web/index.cgi:1096
msgid "Post"
msgstr "Postio"
@@ -1029,39 +1044,39 @@ msgstr ""
msgid "Weird and Wonderful reports"
msgstr "Adroddiadau rhyfeddol a rhagorol"
-#: web/index.cgi:83
+#: web/index.cgi:82
msgid "Submitting your report"
msgstr "Cyflwyno'ch adroddiad"
-#: web/index.cgi:86
+#: web/index.cgi:85
msgid "Submitting your update"
msgstr "Cyflwyno'ch diweddariad"
-#: web/index.cgi:90 web/index.cgi:638
+#: web/index.cgi:89 web/index.cgi:644
msgid "Reporting an empty property"
msgstr "Adrodd am eiddo gwag"
-#: web/index.cgi:93
+#: web/index.cgi:92
msgid "Viewing an empty property"
msgstr "Gweld eiddo gwag"
-#: web/index.cgi:96
+#: web/index.cgi:95
msgid "Viewing a location"
msgstr "Gweld lleoliad"
-#: web/index.cgi:121
+#: web/index.cgi:120
msgid "Enter a nearby GB postcode, or street name and area"
msgstr "Cofnodwch god post Prydeinig, neu enw stryd ac ardal gerllaw"
-#: web/index.cgi:135
+#: web/index.cgi:134
msgid "Report and view empty properties"
msgstr "Adrodd am eiddo gwag a gweld y rhain"
-#: web/index.cgi:136
+#: web/index.cgi:135
msgid " "
msgstr " "
-#: web/index.cgi:158
+#: web/index.cgi:157
msgid ""
"Thanks for uploading your photo. We now need to locate your empty property, "
"so please enter a nearby street name or postcode in the box below&nbsp;:"
@@ -1070,19 +1085,19 @@ msgstr ""
"leoliad eich eiddo gwag, felly rhowch enw stryd gerllaw neu god post yn y "
"blwch isod&nbsp;:"
-#: web/index.cgi:176
+#: web/index.cgi:175
msgid "How to report an empty property"
msgstr "Sut i roi gwybod am eiddo gwag"
-#: web/index.cgi:179
+#: web/index.cgi:178
msgid "Locate the empty property on a map of the area"
msgstr "Chwiliwch am leoliad yr eiddo gwag ar fap o'r ardal"
-#: web/index.cgi:180
+#: web/index.cgi:179
msgid "Enter details of the empty property"
msgstr "Rhowch fanylion yr eiddo gwag"
-#: web/index.cgi:181
+#: web/index.cgi:180
msgid ""
"The details will be sent directly to the right person in the local council "
"for them to take action"
@@ -1090,27 +1105,27 @@ msgstr ""
"Caiff y manylion eu hanfon yn uniongyrchol at yr unigolyn cywir yn y cyngor "
"lleol er mwyn iddynt weithredu"
-#: web/index.cgi:196
+#: web/index.cgi:195
msgid "Photos of recent reports"
msgstr "Ffotograffau o adroddiadau diweddar"
-#: web/index.cgi:198
+#: web/index.cgi:197
msgid "Recently reported empty properties"
msgstr "Eiddo gwag yr adroddwyd amdanynt yn ddiweddar"
-#: web/index.cgi:222
+#: web/index.cgi:221
msgid "Please enter a message"
msgstr "Ychwanegwch neges"
-#: web/index.cgi:225 web/index.cgi:309
+#: web/index.cgi:224 web/index.cgi:308
msgid "Please enter your email"
msgstr "Cofnodwch eich cyfeiriad e-bost"
-#: web/index.cgi:227 web/index.cgi:311
+#: web/index.cgi:226 web/index.cgi:310
msgid "Please enter a valid email"
msgstr "Cofnodwch gyfeiriad e-bost dilys"
-#: web/index.cgi:236 web/index.cgi:378
+#: web/index.cgi:235 web/index.cgi:377
#, perl-format
msgid ""
"That image doesn't appear to have uploaded correctly (%s), please try again."
@@ -1118,27 +1133,27 @@ msgstr ""
"Nid yw'n ymddangos bod y ddelwedd honno wedi llwytho i fyny'n gywir (%s), "
"rhowch gynnig arni eto."
-#: web/index.cgi:258 web-admin/index.cgi:477
+#: web/index.cgi:257 web-admin/index.cgi:477
msgid "Anonymous"
msgstr "Di-enw"
-#: web/index.cgi:300
+#: web/index.cgi:299
msgid "No council selected"
msgstr "Ni ddewiswyd cyngor"
-#: web/index.cgi:301
+#: web/index.cgi:300
msgid "Please enter a subject"
msgstr "Rhowch enw'r pwnc"
-#: web/index.cgi:302
+#: web/index.cgi:301
msgid "Please enter some details"
msgstr "Cofnodwch fanylion"
-#: web/index.cgi:304
+#: web/index.cgi:303
msgid "Please enter your name"
msgstr "Cofnodwch eich enw"
-#: web/index.cgi:306
+#: web/index.cgi:305
msgid ""
"Please enter your full name - if you do not wish your name to be shown on "
"the site, untick the box"
@@ -1146,47 +1161,43 @@ msgstr ""
"Cofnodwch eich enw llawn - os nad ydych yn dymuno bod eich enw'n cael ei "
"ddangos ar y safle, cliciwch i ddileu'r tic o'r bocs"
-#: web/index.cgi:313 web/index.cgi:565
+#: web/index.cgi:312 web/index.cgi:569
#, fuzzy
msgid "-- Pick a category --"
msgstr "-- Dewiswch fath o eiddo --"
-#: web/index.cgi:314 web/index.cgi:354
+#: web/index.cgi:313 web/index.cgi:353
msgid "Please choose a category"
msgstr "Dewiswch gategori"
-#: web/index.cgi:316 web/index.cgi:572
+#: web/index.cgi:315 web/index.cgi:576
msgid "-- Pick a property type --"
msgstr "-- Dewiswch fath o eiddo --"
-#: web/index.cgi:317
+#: web/index.cgi:316
msgid "Please choose a property type"
msgstr "Dewiswch fath o eiddo"
-#: web/index.cgi:338
+#: web/index.cgi:337
msgid "That location is not part of that council"
msgstr "Nid yw'r lleoliad hwnnw'n rhan o'r cyngor hwnnw"
-#: web/index.cgi:358
+#: web/index.cgi:357
msgid "We have details for that council"
msgstr "Mae gennym fanylion ar gyfer y cyngor hwnnw"
-#: web/index.cgi:367
+#: web/index.cgi:366
msgid "Somehow, you only have one co-ordinate. Please try again."
msgstr ""
"Rhywffordd neu gilydd, dim ond un cyfesuryn sydd gennych. Rhowch gynnig arni "
"eto."
-#: web/index.cgi:369
+#: web/index.cgi:368
msgid "You haven't specified any sort of co-ordinates. Please try again."
msgstr ""
"Nid ydych wedi pennu unrhyw fath o gyfesurynnau. Rhowch gynnig arni eto."
-#: web/index.cgi:392 web/index.cgi:558 web/index.cgi:565
-msgid "Other"
-msgstr "Arall"
-
-#: web/index.cgi:408
+#: web/index.cgi:407
#, perl-format
msgid ""
"You have successfully confirmed your report and you can now <a href=\"%s"
@@ -1195,7 +1206,7 @@ msgstr ""
"Rydych wedi cadarnhau eich adroddiad yn llwyddiannus ac nawr gallwch <a href="
"\"%s\">weld eich adroddiad ar y safle</a>."
-#: web/index.cgi:545
+#: web/index.cgi:549
msgid ""
"That spot does not appear to be covered by a council.\n"
"If you have tried to report an issue past the shoreline, for example,\n"
@@ -1205,39 +1216,45 @@ msgstr ""
"Os ydych wedi ceisio adrodd am broblem oddi ar y lân, er enghraifft,\n"
"dylech nodi'r pwynt agosaf ar y tir."
-#: web/index.cgi:566 web-admin/index.cgi:628
+#: web/index.cgi:570 web-admin/index.cgi:628
msgid "Category:"
msgstr "Categori:"
-#: web/index.cgi:572
+#: web/index.cgi:576
msgid "Empty house or bungalow"
msgstr "Tŷ neu fyngalo gwag"
-#: web/index.cgi:573
+#: web/index.cgi:577
msgid "Empty flat or maisonette"
msgstr "Fflat neu fflat deulawr gwag"
-#: web/index.cgi:573
+#: web/index.cgi:577
msgid "Whole block of empty flats"
msgstr "Bloc cyfan o fflatiau gwag"
-#: web/index.cgi:574
+#: web/index.cgi:578
msgid "Empty office or other commercial"
msgstr "Swyddfa wag neu fan masnachol gwag arall"
-#: web/index.cgi:574
+#: web/index.cgi:578
msgid "Empty pub or bar"
msgstr "Tafarn neu far gwag"
-#: web/index.cgi:575
+#: web/index.cgi:579
msgid "Empty public building - school, hospital, etc."
msgstr "Adeilad cyhoeddus gwag - ysgol, ysbyty, ac ati."
-#: web/index.cgi:576
+#: web/index.cgi:580
msgid "Property type:"
msgstr "Math o eiddo:"
-#: web/index.cgi:635
+#: web/index.cgi:638
+msgid ""
+"Please note your report has <strong>not yet been sent</strong>. Choose a "
+"category and add further information below, then submit."
+msgstr ""
+
+#: web/index.cgi:641
msgid ""
"You have located the empty property at the point marked with a purple pin on "
"the map.\n"
@@ -1247,12 +1264,12 @@ msgstr ""
"gan y pin porffor ar y map.\n"
"Os nad dyma'r lleoliad cywir, cliciwch ar y map eto. "
-#: web/index.cgi:641 web/index.cgi:660 web/index.cgi:662 web/index.cgi:675
+#: web/index.cgi:647 web/index.cgi:666 web/index.cgi:668 web/index.cgi:681
#, fuzzy
msgid " or "
msgstr "neu"
-#: web/index.cgi:643
+#: web/index.cgi:649
#, perl-format
msgid ""
"All the information you provide here will be sent to <strong>%s</strong>.\n"
@@ -1265,7 +1282,7 @@ msgstr ""
"Ar y safle, byddwn yn dangos pwnc a manylion yr eiddo gwag,\n"
"ynghyd â'ch enw os ydych yn rhoi caniatâd i ni."
-#: web/index.cgi:647
+#: web/index.cgi:653
#, perl-format
msgid ""
"All the information you provide here will be sent to <strong>%s</strong>.\n"
@@ -1273,17 +1290,17 @@ msgid ""
"name if you give us permission."
msgstr ""
-#: web/index.cgi:661
+#: web/index.cgi:667
msgid "All the information you provide here will be sent to"
msgstr ""
-#: web/index.cgi:664
+#: web/index.cgi:670
msgid ""
"The subject and details of the empty property will be public, plus your name "
"if you give us permission."
msgstr ""
-#: web/index.cgi:666
+#: web/index.cgi:672
msgid ""
"We do <strong>not</strong> yet have details for the other council that "
"covers this location."
@@ -1293,28 +1310,28 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: web/index.cgi:670 web/index.cgi:685
+#: web/index.cgi:676 web/index.cgi:691
#, perl-format
msgid ""
"You can help us by finding a contact email address for local empty "
"properties for %s and emailing it to us at <a href='mailto:%s'>%s</a>."
msgstr ""
-#: web/index.cgi:680 web/index.cgi:688
+#: web/index.cgi:686 web/index.cgi:694
msgid "We do not yet have details for the council that covers this location."
msgid_plural ""
"We do not yet have details for the councils that cover this location."
msgstr[0] ""
msgstr[1] ""
-#: web/index.cgi:684
+#: web/index.cgi:690
msgid ""
"If you submit an empty property here the subject and details of the empty "
"property will be public, but the empty property will <strong>not</strong> be "
"reported to the council."
msgstr ""
-#: web/index.cgi:690
+#: web/index.cgi:696
#, fuzzy
msgid ""
"If you submit a report here it will be left on the site, but not reported to "
@@ -1328,7 +1345,7 @@ msgstr ""
"fel y gallwn\n"
"ddangos i'r cyngor y gweithgarwch yn ei ardal."
-#: web/index.cgi:696
+#: web/index.cgi:702
msgid ""
"Please fill in the form below with details of the empty property,\n"
"and describe the location as precisely as possible in the details box."
@@ -1336,7 +1353,7 @@ msgstr ""
"Llenwch y ffurflen isod gyda manylion yr eiddo gwag,\n"
"a disgrifiwch y lleoliad mor fanwl ag y bo modd yn y blwch manylion."
-#: web/index.cgi:705
+#: web/index.cgi:711
msgid ""
"Please fill in details of the empty property below, saying what type of\n"
"property it is e.g. an empty home, block of flats, office etc. Tell us\n"
@@ -1355,7 +1372,7 @@ msgstr ""
"ac i'r pwynt; mae ysgrifennu eich neges yn gyfan gwbl mewn priflythrennau\n"
"yn ei gwneud hi'n anodd ei darllen, fel y mae diffyg atalnodi.\n"
-#: web/index.cgi:713
+#: web/index.cgi:719
msgid ""
"Please fill in details of the empty property below. The council won't be "
"able\n"
@@ -1366,74 +1383,74 @@ msgid ""
"photo of the empty property if you have one), etc."
msgstr ""
-#: web/index.cgi:718
+#: web/index.cgi:724
msgid "Please fill in details of the empty property below."
msgstr "Llenwch fanylion yr eiddo gwag isod."
-#: web/index.cgi:731
+#: web/index.cgi:733
msgid "Empty property details form"
msgstr "Ffurflen manylion eiddo gwag"
-#: web/index.cgi:733 web-admin/index.cgi:623
+#: web/index.cgi:735 web-admin/index.cgi:623
msgid "Details:"
msgstr "Manylion:"
-#: web/index.cgi:734 web/index.cgi:1108
+#: web/index.cgi:736 web/index.cgi:1112 web/questionnaire.cgi:308
msgid "Photo:"
msgstr "Ffotograff:"
-#: web/index.cgi:735 web/index.cgi:1089 web-admin/index.cgi:629
+#: web/index.cgi:737 web/index.cgi:1093 web-admin/index.cgi:629
#: web-admin/index.cgi:749
msgid "Name:"
msgstr "Enw:"
-#: web/index.cgi:737 bin/send-reports:89 web-admin/index.cgi:631
+#: web/index.cgi:739 bin/send-reports:91 web-admin/index.cgi:631
msgid "Phone:"
msgstr "Rhif ffôn:"
-#: web/index.cgi:738 web/index.cgi:1096
+#: web/index.cgi:740 web/index.cgi:1100
msgid "(optional)"
msgstr "(dewisol)"
-#: web/index.cgi:740
+#: web/index.cgi:742
msgid "Can we show your name on the site?"
msgstr "Allwn ni ddangos eich enw chi ar y safle?"
-#: web/index.cgi:742
+#: web/index.cgi:744
msgid "Can we show your name publicly?"
msgstr ""
-#: web/index.cgi:744
+#: web/index.cgi:746
msgid "(we never show your email address or phone number)"
msgstr "(nid ydym byth yn dangos eich cyfeiriad e-bost na'ch rhif ffôn)"
-#: web/index.cgi:771
+#: web/index.cgi:773
msgid "Please note:"
msgstr ""
-#: web/index.cgi:773
+#: web/index.cgi:775
msgid ""
"We will only use your personal information in accordance with our <a href=\"/"
"faq#privacy\">privacy policy.</a>"
msgstr ""
-#: web/index.cgi:774
+#: web/index.cgi:776
msgid "Please be polite, concise and to the point."
msgstr ""
-#: web/index.cgi:775
+#: web/index.cgi:777
msgid ""
"Please do not be abusive &mdash; abusing your council devalues the service "
"for all users."
msgstr ""
-#: web/index.cgi:776
+#: web/index.cgi:778
msgid ""
"Writing your message entirely in block capitals makes it hard to read, as "
"does a lack of punctuation."
msgstr ""
-#: web/index.cgi:777
+#: web/index.cgi:779
msgid ""
"Remember that reportemptyhomes.com is primarily for reporting physical empty "
"properties that can be returned to use. If your empty property is not "
@@ -1441,7 +1458,7 @@ msgid ""
"council directly using their own website."
msgstr ""
-#: web/index.cgi:779
+#: web/index.cgi:781
msgid ""
"reportemptyhomes.com and the Guardian are providing this service in "
"partnership in <a href=\"/faq#privacy\">certain cities</a>. In those cities, "
@@ -1450,56 +1467,52 @@ msgid ""
"in accordance with their privacy policies."
msgstr ""
-#: web/index.cgi:788
-msgid "Submit"
-msgstr "Anfon"
-
-#: web/index.cgi:883
+#: web/index.cgi:885
msgid "Hide stale reports"
msgstr "Cuddio hen adroddiadau "
-#: web/index.cgi:886
+#: web/index.cgi:888
msgid "Include stale reports"
msgstr "Cynnwys hen adroddiadau"
-#: web/index.cgi:905
+#: web/index.cgi:907
msgid "No empty properties have been reported yet."
msgstr "Ni roddwyd gwybod eto am unrhyw eiddo gwag."
-#: web/index.cgi:921
+#: web/index.cgi:923
msgid "No empty properties found."
msgstr "Ni ddaethpwyd o hyd i unrhyw eiddo gwag."
-#: web/index.cgi:926
+#: web/index.cgi:928
msgid "Show pins"
msgstr "Dangos pinnau"
-#: web/index.cgi:930
+#: web/index.cgi:932
msgid "Hide pins"
msgstr "Cuddio pinnau"
-#: web/index.cgi:969
+#: web/index.cgi:973
msgid "Email me new local empty properties"
msgstr "Anfonwch fanylion eiddo gwag lleol newydd ataf i drwy'r e-bost"
-#: web/index.cgi:971
+#: web/index.cgi:975
msgid "RSS feed of recent local empty properties"
msgstr "Porthiant RSS o eiddo gwag lleol diweddar"
-#: web/index.cgi:974
+#: web/index.cgi:978
msgid "Empty properties in this area"
msgstr "Eiddo gwag yn yr ardal hon"
-#: web/index.cgi:975
+#: web/index.cgi:979
msgid "Reports on and around the map"
msgstr "Adroddiadau ar ac yng nghyffiniau'r map"
-#: web/index.cgi:976
+#: web/index.cgi:980
#, perl-format
msgid "Closest nearby empty properties <small>(within&nbsp;%skm)</small>"
msgstr "Yr eiddo gwag cyfagos agosaf <small>(within&nbsp;%skm)</small>"
-#: web/index.cgi:980
+#: web/index.cgi:984
msgid ""
"To report an empty property, simply\n"
" <strong>click on the map</strong> at the correct location."
@@ -1507,7 +1520,7 @@ msgstr ""
"Er mwyn rhoi gwybod am eiddo gwag\n"
" <strong>cliciwch ar y map</strong> wrth y lleoliad cywir."
-#: web/index.cgi:982
+#: web/index.cgi:986
#, perl-format
msgid ""
"<small>If you cannot see the map, <a href='%s' rel='nofollow'>skip this\n"
@@ -1516,68 +1529,68 @@ msgstr ""
"<small>Os na allwch weld y map, <a href='%s' rel='nofollow'>ewch heibio\n"
" i'r cam hwn</a>.</small>"
-#: web/index.cgi:987
+#: web/index.cgi:991
msgid "Recent local empty properties, reportemptyhomes.com"
msgstr "Eiddo gwag lleol diweddar, reportemptyhomes.com"
-#: web/index.cgi:1000
+#: web/index.cgi:1004
msgid "There were problems with your update. Please see below."
msgstr "Cafwyd anhawsterau gyda'ch diweddariad. Gweler isod"
-#: web/index.cgi:1021 web/index.cgi:1023
+#: web/index.cgi:1025 web/index.cgi:1027
msgid "Unknown empty property ID"
msgstr "ID eiddo gwag anhysbys"
-#: web/index.cgi:1024
+#: web/index.cgi:1028
msgid "That report has been removed from reportemptyhomes.com."
msgstr "Mae'r adroddiad hwnnw wedi cael ei dynnu oddi ar reportemptyhomes.com"
-#: web/index.cgi:1044
+#: web/index.cgi:1048
msgid "This empty property is old and of unknown status."
msgstr "Mae'r eiddo gwag hwn yn hen ac nid yw ei statws yn hysbys."
-#: web/index.cgi:1047 web/index.cgi:1088
+#: web/index.cgi:1051 web/index.cgi:1092
msgid "This empty property has been returned to use"
msgstr "Mae'r eiddo gwag hwn wedi cael ei adfer i'w ddefnyddio"
-#: web/index.cgi:1072
+#: web/index.cgi:1076
msgid "More empty properties nearby"
msgstr "Mwy o eiddo gwag cyfagos"
-#: web/index.cgi:1075
+#: web/index.cgi:1079
msgid "Email me updates"
msgstr "Anfonwch ddiweddariadau ataf i drwy'r e-bost"
-#: web/index.cgi:1078
+#: web/index.cgi:1082
msgid "Receive email when updates are left on this empty property"
msgstr ""
"Hoffwn dderbyn neges e-bost pan gaiff diweddariadau eu rhoi am yr eiddo gwag "
"hwn"
-#: web/index.cgi:1083
+#: web/index.cgi:1087
msgid "RSS feed of updates to this empty property"
msgstr "Porthiant RSS o ddiweddariadau i'r eiddo gwag hwn"
-#: web/index.cgi:1084
+#: web/index.cgi:1088
msgid "Provide an update"
msgstr "Rhowch ddiweddariad"
-#: web/index.cgi:1090
+#: web/index.cgi:1094
msgid "Update:"
msgstr "Diweddariad:"
-#: web/index.cgi:1091
+#: web/index.cgi:1095
msgid "Alert me to future updates"
msgstr "Rhowch wybod i mi am ddiweddariadau yn y dyfodol"
-#: web/index.cgi:1099
+#: web/index.cgi:1103
msgid ""
"Please note that updates are not sent to the council. If you leave your name "
"it will be public. Your information will only be used in accordance with our "
"<a href=\"/faq#privacy\">privacy policy</a>"
msgstr ""
-#: web/index.cgi:1119
+#: web/index.cgi:1123
msgid "Updates to this empty property, reportemptyhomes.com"
msgstr "Diweddariadau i'r eiddo gwag hwn, reportemptyhomes.com"
@@ -1798,17 +1811,17 @@ msgstr ""
"profiad\n"
"o gael yr eiddo gwag yn ôl mewn defnydd?"
-#: web/questionnaire.cgi:321
+#: web/questionnaire.cgi:322
msgid ""
"Would you like to receive another questionnaire in 4 weeks, reminding you to "
"check the status?"
msgstr ""
-#: web/reports.cgi:193 web/reports.cgi:240
+#: web/reports.cgi:192 web/reports.cgi:239
msgid "Summary reports"
msgstr "Adroddiadau cryno"
-#: web/reports.cgi:195
+#: web/reports.cgi:194
msgid ""
"This is a summary of all reports on this site; select a particular council "
"to see the reports sent there."
@@ -1816,64 +1829,64 @@ msgstr ""
"Dyma grynodeb o'r holl adroddiadau ar y safle hwn; dewiswch gyngor penodol i "
"weld yr adroddiadau a anfonwyd ato."
-#: web/reports.cgi:196
+#: web/reports.cgi:195
msgid "Greyed-out lines are councils that no longer exist."
msgstr "Mae'r llinellau mewn llwyd yn gynghorau nad ydynt yn bodoli mwyach."
-#: web/reports.cgi:200 web-admin/index.cgi:477 web-admin/index.cgi:656
+#: web/reports.cgi:199 web-admin/index.cgi:477 web-admin/index.cgi:656
msgid "Name"
msgstr "Enw"
-#: web/reports.cgi:200 web/reports.cgi:276
+#: web/reports.cgi:199 web/reports.cgi:275
msgid "New empty property reports"
msgstr "Adroddiadau newydd am eiddo gwag"
-#: web/reports.cgi:200 web/reports.cgi:284
+#: web/reports.cgi:199 web/reports.cgi:283
msgid "Older empty property reports"
msgstr "Adroddiadau hŷn o eiddo gwag"
-#: web/reports.cgi:202
+#: web/reports.cgi:201
msgid "Old empty properties,<br>state unknown"
msgstr "Hen eiddo gwag,<br>cyflwr anhysbys"
-#: web/reports.cgi:204 web/reports.cgi:291
+#: web/reports.cgi:203 web/reports.cgi:290
msgid "Recently returned to use"
msgstr "Wedi'u hadfer i'w defnyddio'n ddiweddar"
-#: web/reports.cgi:204
+#: web/reports.cgi:203
msgid "Older returned to use"
msgstr "Wedi'u hadfer i'w defnyddio ers amser"
-#: web/reports.cgi:246
+#: web/reports.cgi:245
msgid "council"
msgstr "cyngor"
-#: web/reports.cgi:256
+#: web/reports.cgi:255
#, perl-format
msgid "RSS feed of empty properties in this %s"
msgstr "Porthiant RSS o eiddo gwag yn yr %s hwn"
-#: web/reports.cgi:260
+#: web/reports.cgi:259
#, perl-format
msgid "This is a summary of all reports for one %s."
msgstr "Dyma grynodeb o'r holl adroddiadau ar gyfer y %s."
-#: web/reports.cgi:261
+#: web/reports.cgi:260
#, perl-format
msgid "This is a summary of all reports for this %s."
msgstr ""
-#: web/reports.cgi:265
+#: web/reports.cgi:264
#, perl-format
msgid "You can <a href=\"%s\">see less detail</a>."
msgstr "Gallwch <a href=\"%s\">weld llai o fanylion</a>."
-#: web/reports.cgi:267
+#: web/reports.cgi:266
#, perl-format
msgid "You can <a href=\"%s\">see more details</a>."
msgstr "Gallwch <a href=\"%s\">weld mwy o fanylion</a>."
-#: web/reports.cgi:269
+#: web/reports.cgi:268
#, perl-format
msgid ""
"You can <a href=\"%s\">see less detail</a> or go back and <a href=\"/reports"
@@ -1882,7 +1895,7 @@ msgstr ""
"Gallwch <a href=\"%s\">weld llai o fanylion</a> neu fynd yn ôl a <a href=\"/"
"reports\">dangos pob cyngor</a>."
-#: web/reports.cgi:271
+#: web/reports.cgi:270
#, perl-format
msgid ""
"You can <a href=\"%s\">see more details</a> or go back and <a href=\"/reports"
@@ -1891,30 +1904,35 @@ msgstr ""
"Gallwch <a href=\"%s\">weld mwy o fanylion</a> neu fynd yn ôl a <a href=\"/"
"reports\">dangos pob cyngor</a>."
-#: web/reports.cgi:286
+#: web/reports.cgi:285
msgid "Old empty properties, state unknown"
msgstr "Eiddo gwag hen, nid yw eu cyflwr yn hysbys"
-#: web/reports.cgi:292
+#: web/reports.cgi:291
msgid "Old returned to use"
msgstr "Hen wedi'i adfer i'w ddefnyddio"
-#: web/reports.cgi:295
+#: web/reports.cgi:294
#, perl-format
msgid "%s - Summary reports"
msgstr "%s - Adroddiadau cryno"
-#: web/reports.cgi:295
+#: web/reports.cgi:294
#, perl-format
msgid "Empty properties within %s, reportemptyhomes.com"
msgstr "Eiddo gwag o fewn %s, reportemptyhomes.com"
-#: web/reports.cgi:335
+#: web/reports.cgi:333
+#, fuzzy
+msgid "(sent to both)"
+msgstr "Ni roddwyd gwybod i'r cyngor am hyn"
+
+#: web/reports.cgi:334
#, fuzzy
msgid "(not sent to council)"
msgstr "Ni roddwyd gwybod i'r cyngor am hyn"
-#: bin/send-reports:91
+#: bin/send-reports:93
msgid ""
"This web page also contains a photo of the empty property, provided by the "
"user."
@@ -1922,11 +1940,11 @@ msgstr ""
"Mae'r dudalen we hon hefyd yn cynnwys ffotograff o'r eiddo gwag, wedi'i "
"ddarparu gan y defnyddiwr."
-#: bin/send-reports:97
+#: bin/send-reports:99
msgid "To view a map of the precise location of this issue"
msgstr "Gweld map o union leoliad y broblem hon"
-#: bin/send-reports:98
+#: bin/send-reports:100
msgid ""
"The user could not locate the empty property on a map, but to see the area "
"around the location they entered"
@@ -1934,21 +1952,21 @@ msgstr ""
"Ni allai'r defnyddiwr leoli'r eiddo gwag ar fap, ond i weld yr ardal o "
"gwmpas y lleoliad a gofnodwyd ganddynt "
-#: bin/send-reports:178
+#: bin/send-reports:182
#, fuzzy
msgid "this type of local empty property"
msgstr "Anfonwch fanylion eiddo gwag lleol newydd ataf i drwy'r e-bost"
-#: bin/send-reports:182
+#: bin/send-reports:186
#, fuzzy, perl-format
msgid "Category: %s"
msgstr "Categori:"
-#: bin/send-reports:185
+#: bin/send-reports:189
msgid " and "
msgstr ""
-#: bin/send-reports:186
+#: bin/send-reports:190
msgid ""
"This email has been sent to both councils covering the location of the empty "
"property, as the user did not categorise it; please ignore it if you're not "
@@ -1956,7 +1974,7 @@ msgid ""
"empty property this is so we can add it to our system."
msgstr ""
-#: bin/send-reports:192
+#: bin/send-reports:196
#, perl-format
msgid ""
"We realise this empty property might be the responsibility of %s; however, "
@@ -2200,7 +2218,7 @@ msgstr ""
#: web-admin/index.cgi:190
#, perl-format
-msgid "%d edits by %d"
+msgid "%d edits by %s"
msgstr ""
#: web-admin/index.cgi:193
@@ -3522,6 +3540,9 @@ msgstr ""
"ymddangos am yr eiddo hwn,\n"
"dilynwch y ddolen hon: <?=$values['unsubscribe_url']?>\n"
+#~ msgid "Thank you for reporting an empty property on ReportEmptyHomes.com."
+#~ msgstr "Diolch am roi gwybod am eiddo gwag ar ReportEmptyHomes.com."
+
#~ msgid "Enter a nearby GB postcode, or street name and area:"
#~ msgstr "Cofnodwch god post Prydeinig, neu enw stryd ac ardal gerllaw:"
diff --git a/locale/nb_NO.UTF-8/LC_MESSAGES/FixMyStreet.po b/locale/nb_NO.UTF-8/LC_MESSAGES/FixMyStreet.po
index 2d4e0a633..e8eb2c89c 100644
--- a/locale/nb_NO.UTF-8/LC_MESSAGES/FixMyStreet.po
+++ b/locale/nb_NO.UTF-8/LC_MESSAGES/FixMyStreet.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: FixMyStreet\n"
"Report-Msgid-Bugs-To: matthew@mysociety.org\n"
-"POT-Creation-Date: 2011-02-23 13:09+0000\n"
-"PO-Revision-Date: 2011-02-23 10:16MET\n"
+"POT-Creation-Date: 2011-04-01 13:38+0100\n"
+"PO-Revision-Date: 2011-03-31 09:12MET\n"
"Last-Translator: Petter Reinholdtsen <pere@hungry.com>\n"
"Language-Team: Norwegian Bokmål <i18n-nb@lister.ping.uio.no>\n"
"MIME-Version: 1.0\n"
@@ -23,11 +23,11 @@ msgstr ""
msgid "Report Empty Homes"
msgstr "Rapporter tomme hjem"
-#: perllib/Cobrands/Fiksgatami/Util.pm:27
+#: perllib/Cobrands/Fiksgatami/Util.pm:37
msgid "Enter a nearby postcode, or street name and area"
msgstr "Skriv inn postnummer i nærheten, eller veinavn og sted"
-#: perllib/Page.pm:83
+#: perllib/Page.pm:86
#, perl-format
msgid ""
"Please try again later, or <a href=\"mailto:%s\">email us</a> to let us know."
@@ -35,43 +35,43 @@ msgstr ""
"Vær så snill å forsøk igjen senere, eller <a href=\"mailto:%s\">send oss en "
"epost</a> og gi oss beskjed."
-#: perllib/Page.pm:84
+#: perllib/Page.pm:87
msgid "Sorry! Something's gone wrong."
msgstr "Beklager! Noe har gått galt."
-#: perllib/Page.pm:85
+#: perllib/Page.pm:88
msgid "The text of the error was:"
msgstr "Teksten i feilmeldingen var:"
-#: perllib/Page.pm:192 web/contact.cgi:107
+#: perllib/Page.pm:197 web/contact.cgi:107
msgid "FixMyStreet"
msgstr "FiksGataMi"
-#: perllib/Page.pm:195 perllib/Page.pm:317
+#: perllib/Page.pm:200 perllib/Page.pm:324
msgid "Report a problem"
msgstr "Rapporter et problem"
-#: perllib/Page.pm:196 perllib/Page.pm:318
+#: perllib/Page.pm:201 perllib/Page.pm:325
msgid "All reports"
msgstr "Alle rapporter"
-#: perllib/Page.pm:197 perllib/Page.pm:319
+#: perllib/Page.pm:202 perllib/Page.pm:326
msgid "Local alerts"
msgstr "Lokale varsler"
-#: perllib/Page.pm:198 perllib/Page.pm:320
+#: perllib/Page.pm:203 perllib/Page.pm:327
msgid "Help"
msgstr "Hjelp"
-#: perllib/Page.pm:199 web/about.cgi:19 web/about.cgi:21
+#: perllib/Page.pm:204 web/about.cgi:19 web/about.cgi:21
msgid "About us"
msgstr "Om oss"
-#: perllib/Page.pm:220
+#: perllib/Page.pm:225
msgid "Fix<span id=\"my\">My</span>Street"
msgstr "Fiks<span id=\"my\">Gata</span>Mi"
-#: perllib/Page.pm:296
+#: perllib/Page.pm:303
msgid ""
"This is a developer site; things might break at any time, and the database "
"will be periodically deleted."
@@ -79,7 +79,7 @@ msgstr ""
"Dette er et utviklernettsted. Ting kan knekke når som helst og databasen vil "
"bli periodisk slettet."
-#: perllib/Page.pm:310
+#: perllib/Page.pm:317
msgid ""
"Built by <a href=\"http://www.mysociety.org/\">mySociety</a>, using some <a "
"href=\"http://github.com/mysociety/fixmystreet\">clever</a>&nbsp;<a href="
@@ -91,7 +91,7 @@ msgstr ""
"\"https://secure.mysociety.org/cvstrac/dir?d=mysociety/services/TilMa"
"\">kode</a>."
-#: perllib/Page.pm:312
+#: perllib/Page.pm:319
msgid ""
"Built by <a href=\"http://www.mysociety.org/\">mySociety</a> and maintained "
"by <a href=\"http://www.nuug.no/\">NUUG</a>, using some <a href=\"http://"
@@ -104,52 +104,52 @@ msgstr ""
"\"https://secure.mysociety.org/cvstrac/dir?d=mysociety/services/TilMa"
"\">kode</a>."
-#: perllib/Page.pm:316
+#: perllib/Page.pm:323
msgid "Navigation"
msgstr "Navigasjon"
-#: perllib/Page.pm:321
+#: perllib/Page.pm:328
msgid "Contact"
msgstr "Kontakt"
-#: perllib/Page.pm:323
+#: perllib/Page.pm:330
msgid ""
"<a href=\"http://www.mysociety.org/\"><img id=\"logo\" width=\"133\" height="
"\"26\" src=\"/i/mysociety-dark.png\" alt=\"View mySociety.org\"><span id="
"\"logoie\"></span></a>"
msgstr ""
"<div id=\"logo\" align=\"center\"><a href=\"http://www.nuug.no/\">Foreningen "
-"NUUG</a><span id=\"logoie\"></span></a></div>"
+"NUUG</a></div>"
-#: perllib/Page.pm:381
+#: perllib/Page.pm:388
msgid "Error"
msgstr "Feil"
-#: perllib/Page.pm:443
+#: perllib/Page.pm:461
msgid "your problem will not be posted"
msgstr "vil ditt problem ikke bli publisert"
-#: perllib/Page.pm:444
+#: perllib/Page.pm:462
msgid "we'll hang on to your problem report while you're checking your email."
msgstr "vi holder på rapporten din mens du sjekker epost."
-#: perllib/Page.pm:446
+#: perllib/Page.pm:464
msgid "your update will not be posted"
msgstr "din oppdatering vil ikke bli publisert"
-#: perllib/Page.pm:447
+#: perllib/Page.pm:465
msgid "we'll hang on to your update while you're checking your email."
msgstr "vi holder på din oppdatering mens du sjekker din epost."
-#: perllib/Page.pm:449
+#: perllib/Page.pm:467
msgid "your alert will not be activated"
-msgstr "ditt varsel vil ikke bli aktivisert"
+msgstr "vil ditt varsel ikke bli aktivisert"
-#: perllib/Page.pm:450
+#: perllib/Page.pm:468
msgid "we'll hang on to your alert while you're checking your email."
msgstr "vi holder på ditt varsel mens du sjekker din epost."
-#: perllib/Page.pm:457
+#: perllib/Page.pm:475
#, perl-format
msgid ""
"<h1>Nearly Done! Now check your email...</h1>\n"
@@ -172,155 +172,161 @@ msgstr ""
"hvis du ikke gjør det, %s.</p>\n"
"<p>(Ingen grunn til bekymring &mdash; %s)</p>\n"
-#: perllib/Page.pm:484
+#: perllib/Page.pm:503
msgid "today"
msgstr "idag"
-#: perllib/Page.pm:508
+#: perllib/Page.pm:527
msgid "less than a minute"
msgstr "mindre enn et minutt"
-#: perllib/Page.pm:511
+#: perllib/Page.pm:530
#, perl-format
msgid "%d week"
msgstr "%d uke"
-#: perllib/Page.pm:511
+#: perllib/Page.pm:530
#, perl-format
msgid "%d weeks"
msgstr "%d uker"
-#: perllib/Page.pm:512
+#: perllib/Page.pm:531
#, perl-format
msgid "%d day"
msgstr "%d dag"
-#: perllib/Page.pm:512
+#: perllib/Page.pm:531
#, perl-format
msgid "%d days"
msgstr "%d dager"
-#: perllib/Page.pm:513
+#: perllib/Page.pm:532
#, perl-format
msgid "%d hour"
msgstr "%d time"
-#: perllib/Page.pm:513
+#: perllib/Page.pm:532
#, perl-format
msgid "%d hours"
msgstr "%d timer"
-#: perllib/Page.pm:514
+#: perllib/Page.pm:533
#, perl-format
msgid "%d minute"
msgstr "%d minutt"
-#: perllib/Page.pm:514
+#: perllib/Page.pm:533
#, perl-format
msgid "%d minutes"
msgstr "%d minutter"
-#: perllib/Page.pm:534
+#: perllib/Page.pm:553
#, perl-format
msgid "%s, reported anonymously at %s"
msgstr "%s, rapportert anonymt %s"
-#: perllib/Page.pm:536
+#: perllib/Page.pm:555
#, perl-format
msgid "%s, reported by %s at %s"
msgstr "%s, rapportert av %s %s"
-#: perllib/Page.pm:540
+#: perllib/Page.pm:558 perllib/Page.pm:560 perllib/Page.pm:566
+#: perllib/Page.pm:568 web/index.cgi:391 web/index.cgi:562 web/index.cgi:569
+#: bin/send-reports:181
+msgid "Other"
+msgstr "Annet"
+
+#: perllib/Page.pm:559
#, perl-format
msgid "Reported by %s in the %s category anonymously at %s"
msgstr "Rapportert av %s i kategorien %s anonnymt %s"
-#: perllib/Page.pm:542
+#: perllib/Page.pm:561
#, perl-format
msgid "Reported by %s in the %s category by %s at %s"
msgstr "Rapportert av %s i kategorien %s av %s %s"
-#: perllib/Page.pm:544
+#: perllib/Page.pm:563
#, perl-format
msgid "Reported by %s anonymously at %s"
msgstr "Publisert av %s anonymt %s"
-#: perllib/Page.pm:546
+#: perllib/Page.pm:565
#, perl-format
msgid "Reported by %s by %s at %s"
msgstr "Rapporter av %s av %s %s"
-#: perllib/Page.pm:548
+#: perllib/Page.pm:567
#, perl-format
msgid "Reported in the %s category anonymously at %s"
msgstr "Rapportert i kategorien %s anonymt %s"
-#: perllib/Page.pm:550
+#: perllib/Page.pm:569
#, perl-format
msgid "Reported in the %s category by %s at %s"
msgstr "Rapportert i kategorien %s av %s %s"
-#: perllib/Page.pm:552 web/contact.cgi:212
+#: perllib/Page.pm:571 web/contact.cgi:212
#, perl-format
msgid "Reported anonymously at %s"
msgstr "Rapportert anonymt %s"
-#: perllib/Page.pm:554 web/contact.cgi:213
+#: perllib/Page.pm:573 web/contact.cgi:213
#, perl-format
msgid "Reported by %s at %s"
msgstr "Publisert av %s %s"
-#: perllib/Page.pm:559
+#: perllib/Page.pm:578
msgid "the map was not used so pin location may be inaccurate"
msgstr "kartet ble ikke brukt, så nåleposisjon kan være unøyaktig"
-#: perllib/Page.pm:567
+#: perllib/Page.pm:586
#, perl-format
msgid "Sent to %s %s later"
msgstr "Sendt til %s %s senere"
-#: perllib/Page.pm:571
+#: perllib/Page.pm:590
msgid "Not reported to council"
-msgstr "Ikke rapportert til kommunen"
+msgstr "Ikke rapportert til administrasjonen"
-#: perllib/Page.pm:622 web-admin/index.cgi:522 web-admin/index.cgi:646
+#: perllib/Page.pm:641 web-admin/index.cgi:522 web-admin/index.cgi:646
msgid "Updates"
msgstr "Oppdateringer"
-#: perllib/Page.pm:626
+#: perllib/Page.pm:645
#, perl-format
msgid "Posted by %s at %s"
msgstr "Sendt inn av %s %s"
-#: perllib/Page.pm:628
+#: perllib/Page.pm:647
#, perl-format
msgid "Posted anonymously at %s"
msgstr "Publisert anonymt %s"
-#: perllib/Page.pm:631
+#: perllib/Page.pm:650
msgid "marked as fixed"
msgstr "markert som fikset"
-#: perllib/Page.pm:632
+#: perllib/Page.pm:651
msgid "reopened"
msgstr "åpnet på nytt"
-#: perllib/Page.pm:640 web/index.cgi:1071
+#: perllib/Page.pm:659 web/index.cgi:1075
msgid "Offensive? Unsuitable? Tell us"
msgstr "Støtende? Upassende? Gi oss beskjed"
-#: perllib/Page.pm:667
+#: perllib/Page.pm:686
msgid "That postcode was not recognised, sorry."
msgstr "Det postnummeret ble ikke gjenkjent, beklager."
-#: perllib/Page.pm:672
+#: perllib/Page.pm:692
msgid ""
"Sorry, that appears to be a Crown dependency postcode, which we don't cover."
msgstr ""
"Beklager det ser ut til å være et \"Crown dependency\"-postnummer, som vi "
"ikke dekker."
-#: perllib/Page.pm:675 perllib/FixMyStreet/Geocode.pm:134
+#: perllib/Page.pm:695 perllib/FixMyStreet/Geocode.pm:145
msgid ""
"We do not cover Northern Ireland, I'm afraid, as our licence doesn't include "
"any maps for the region."
@@ -328,7 +334,7 @@ msgstr ""
"Vi dekker ikke nordlige Irland, er jeg redd, da vår lisens ikke inkluderer "
"noen kart for den regionen."
-#: perllib/Page.pm:705
+#: perllib/Page.pm:726
msgid "Please upload a JPEG image only"
msgstr "Vennligst last kun opp et JPEG-bilde"
@@ -340,31 +346,31 @@ msgstr "Denne rapporten er for tiden markert som fikset."
msgid "This report is currently marked as open."
msgstr "Denne rapporten er for tiden markert som åpen."
-#: perllib/FixMyStreet/Alert.pm:311
+#: perllib/FixMyStreet/Alert.pm:309
#, perl-format
msgid "Report on %s"
-msgstr "Rapport for %s"
+msgstr "Rapport på %s"
-#: perllib/FixMyStreet/Geocode.pm:65
+#: perllib/FixMyStreet/Geocode.pm:73
msgid ""
"Sorry, that location appears to be too general; please be more specific."
msgstr ""
"Beklager, den plasserigen ser ut til å være for generell. Forsøk å være mer "
"spesifikk."
-#: perllib/FixMyStreet/Geocode.pm:75
+#: perllib/FixMyStreet/Geocode.pm:83
msgid "That location does not appear to be in Britain; please try again."
msgstr "Det stedet virker ikke å være i storbritannia. Vennligst prøv igjen."
-#: perllib/FixMyStreet/Geocode.pm:114
-msgid "Sorry, we could not parse that location. Please try again."
-msgstr "Beklager, vi kunne ikke tolke den posisjonen. Vennligst prøv på nytt."
-
-#: perllib/FixMyStreet/Geocode.pm:116 perllib/FixMyStreet/Geocode.pm:131
+#: perllib/FixMyStreet/Geocode.pm:105 perllib/FixMyStreet/Geocode.pm:140
msgid "Sorry, we could not find that location."
msgstr "Beklager, vi kunne ikke finne det stedet."
-#: perllib/FixMyStreet/Geocode.pm:147
+#: perllib/FixMyStreet/Geocode.pm:138
+msgid "Sorry, we could not parse that location. Please try again."
+msgstr "Beklager, vi kunne ikke tolke den posisjonen. Vennligst prøv på nytt."
+
+#: perllib/FixMyStreet/Geocode.pm:158
msgid ""
"We found more than one match for that location. We show up to ten matches, "
"please try a different search if yours is not here."
@@ -372,15 +378,15 @@ msgstr ""
"Vi fant mer en ett treff for den plassen. Vi viser opp til ti treff, så "
"forsøk et annet søk hvis din plass ikke er her."
-#: perllib/FixMyStreet/Geocode.pm:162
+#: perllib/FixMyStreet/Geocode.pm:173
msgid "More than one match"
msgstr "Mer enn ett treff"
-#: perllib/FixMyStreet/Map/Bing.pm:39
-#: perllib/FixMyStreet/Map/OSM/StreetView.pm:38
-#: perllib/FixMyStreet/Map/Google.pm:39
-#: perllib/FixMyStreet/Map/Tilma/OL/StreetView.pm:45
-#: perllib/FixMyStreet/Map/Tilma/Original/StreetView.pm:23
+#: perllib/FixMyStreet/Map/Bing.pm:41
+#: perllib/FixMyStreet/Map/OSM/StreetView.pm:42
+#: perllib/FixMyStreet/Map/Google.pm:41
+#: perllib/FixMyStreet/Map/Tilma/OL/StreetView.pm:51
+#: perllib/FixMyStreet/Map/Tilma/Original/StreetView.pm:21
msgid ""
"Map contains Ordnance Survey data &copy; Crown copyright and database right "
"2010."
@@ -388,18 +394,22 @@ msgstr ""
"Kartet inneholder data fra Ordnance Survey &copy; Crown copyright og "
"databaserettigheter 2010."
-#: perllib/FixMyStreet/Map/OSM.pm:41
-#: perllib/FixMyStreet/Map/OSM/CycleMap.pm:38
+#: perllib/FixMyStreet/Map/OSM.pm:76
msgid ""
-"Map &copy; <a href=\"http://www.openstreetmap.org/\">OpenStreetMap</a> and "
-"contributors, <a href=\"http://creativecommons.org/licenses/by-sa/2.0/\">CC-"
-"BY-SA</a>"
+"Map &copy; <a id=\"osm_link\" href=\"http://www.openstreetmap.org/"
+"\">OpenStreetMap</a> and contributors, <a href=\"http://creativecommons.org/"
+"licenses/by-sa/2.0/\">CC-BY-SA</a>"
msgstr ""
-"Kart &copy; <a href=\"http://www.openstreetmap.org/\">OpenStreetMap</a> og "
-"bidragsytere, <a href=\"http://creativecommons.org/licenses/by-sa/2.0/\">CC-"
-"BY-SA</a>"
+"Kart &copy; <a id=\"osm_link\" href=\"http://www.openstreetmap.org/"
+"\">OpenStreetMap</a> og bidragsytere, <a href=\"http://creativecommons.org/"
+"licenses/by-sa/2.0/\">CC-BY-SA</a>"
-#: perllib/FixMyStreet/Map/BingOL.pm:39
+#: perllib/FixMyStreet/Map/OSM.pm:115
+#: perllib/FixMyStreet/Map/Tilma/Original.pm:155
+msgid "Problem"
+msgstr "Problem"
+
+#: perllib/FixMyStreet/Map/BingOL.pm:43
msgid ""
"Map contains Ordnance Survey data &copy; Crown copyright and database right "
"2010. Microsoft"
@@ -407,8 +417,8 @@ msgstr ""
"Kartet inneholder data fra Ordnance Survey &copy; Crown copyright og "
"databaserettigheter 2010. Microsoft"
-#: perllib/FixMyStreet/Map/Tilma/OL/1_10k.pm:45
-#: perllib/FixMyStreet/Map/Tilma/Original/1_10k.pm:23
+#: perllib/FixMyStreet/Map/Tilma/OL/1_10k.pm:51
+#: perllib/FixMyStreet/Map/Tilma/Original/1_10k.pm:21
msgid ""
"&copy; Crown copyright. All rights reserved. Ministry of Justice "
"100037819&nbsp;2008."
@@ -416,14 +426,10 @@ msgstr ""
"&copy; Crown copyright. Alle rettigheter reservert. Justisdepartementet "
"100037819&nbsp;2008."
-#: perllib/FixMyStreet/Map/Tilma/Original.pm:81
+#: perllib/FixMyStreet/Map/Tilma/Original.pm:86
msgid "Unable to fetch the map tiles from the tile server."
msgstr "Klarte ikke hente kartfliser fra filtjeneren."
-#: perllib/FixMyStreet/Map/Tilma/Original.pm:155
-msgid "Problem"
-msgstr "Problem"
-
#: perllib/Problems.pm:148
#, perl-format
msgid "<big>%s</big> report in past week"
@@ -435,8 +441,8 @@ msgstr[1] "<big>%s</big> rapporter siste uke"
#, perl-format
msgid "<big>%s</big> report recently"
msgid_plural "<big>%s</big> reports recently"
-msgstr[0] "<big>%s</big> rapportert nylig"
-msgstr[1] "<big>%s</big> rapportert nylig"
+msgstr[0] "<big>%s</big> rapportert<br>nylig"
+msgstr[1] "<big>%s</big> rapportert<br>nylig"
#: perllib/Problems.pm:159
msgid "FixMyStreet updates"
@@ -453,8 +459,8 @@ msgstr[1] "<big>%s</big> fikset siste måned"
#, perl-format
msgid "<big>%s</big> update on reports"
msgid_plural "<big>%s</big> updates on reports"
-msgstr[0] "<big>%s</big> oppdatering i rapporter"
-msgstr[1] "<big>%s</big> oppdateringer i rapporter"
+msgstr[0] "<big>%s</big> rapport-<br>oppdatering"
+msgstr[1] "<big>%s</big> rapport-<br>oppdateringer"
#: web/about.cgi:24
msgid ""
@@ -491,7 +497,7 @@ msgid ""
"empty homes</a>.\n"
msgstr ""
-#: web/ajax.cgi:55 web/ajax.cgi:76 web/index.cgi:902 web/index.cgi:917
+#: web/ajax.cgi:55 web/ajax.cgi:76 web/index.cgi:904 web/index.cgi:919
msgid "(fixed)"
msgstr "(løst)"
@@ -522,8 +528,8 @@ msgid ""
"That location does not appear to be covered by a council, perhaps it is "
"offshore - please try somewhere more specific."
msgstr ""
-"Det stedet dekkes ikke av noen kommune, kanskje det er til havs - vennligst "
-"forsøk et mer spesifikt sted."
+"Det stedet dekkes ikke av noen administrasjon, kanskje det er til havs - "
+"vennligst forsøk et mer spesifikt sted."
#: web/alert.cgi:140 web/alert.cgi:183 web/alert.cgi:200
#, perl-format
@@ -551,9 +557,9 @@ msgid ""
"alert\n"
"for the county council."
msgstr ""
-"FiksGataMi sender forskjellige kategorier saker\n"
-"til forskjellige kommuner, problemer som gjelder flere kommuner blir sendt "
-"til alle de det gjelder "
+"FiksGataMi sender forskjellige kategorier problemer til forskjellige "
+"administrasjoner, problemer som gjelder flere administrasjoner blir sendt "
+"til alle de det gjelder."
#: web/alert.cgi:185
#, perl-format
@@ -593,14 +599,14 @@ msgstr "Saker innen %skm av dette punktet"
#: web/alert.cgi:305
msgid "(a default distance which covers roughly 200,000 people)"
-msgstr "??"
+msgstr "(en default-avstand som dekker en befolkning på omtrent 200 000)"
#: web/alert.cgi:308
msgid "RSS feed of nearby problems"
msgstr "RSS-strøm med problemer i nærheten"
-#: web/alert.cgi:308 web/alert.cgi:367 web/index.cgi:970 web/index.cgi:1082
-#: web/reports.cgi:255
+#: web/alert.cgi:308 web/alert.cgi:367 web/index.cgi:974 web/index.cgi:1086
+#: web/reports.cgi:254
msgid "RSS feed"
msgstr "RSS-strøm"
@@ -646,8 +652,8 @@ msgid ""
"within a certain distance of a particular location."
msgstr ""
"Fiksgatami har ulike RSS-strømmer og epostlister om lokale problemer, dette "
-"inkluderer\n"
-"saker meldt innenfor en kommune eller et område med problemer\n"
+"inkluderer saker meldt innenfor en bestemt bydel eller administrasjon, eller "
+"et område med problemer\n"
"innen en angitt distanse fra en bestemt posisjon."
#: web/alert.cgi:384
@@ -657,9 +663,9 @@ msgid ""
msgstr ""
"Du finner lokale saker ved å søke på ditt postnummer, veinavn eller sted:"
-#: web/alert.cgi:389 web/confirm.cgi:192 web/index.cgi:166
+#: web/alert.cgi:389 web/index.cgi:165
msgid "Go"
-msgstr "Søk"
+msgstr "Fortsett"
#: web/alert.cgi:415
msgid "Some photos of recent reports"
@@ -677,12 +683,12 @@ msgstr "Ugyldig valg av feed"
msgid "Receive email when updates are left on this problem."
msgstr "Motta epost når det er uppdateringer på denne saken"
-#: web/alert.cgi:461 web/alert.cgi:488 web/index.cgi:736 web/index.cgi:1076
+#: web/alert.cgi:461 web/alert.cgi:488 web/index.cgi:738 web/index.cgi:1080
#: web-admin/index.cgi:630 web-admin/index.cgi:750
msgid "Email:"
msgstr "Epost:"
-#: web/alert.cgi:462 web/alert.cgi:489 web/index.cgi:1077
+#: web/alert.cgi:462 web/alert.cgi:489 web/index.cgi:1081
msgid "Subscribe"
msgstr "Abonner"
@@ -696,15 +702,15 @@ msgstr "Du abonnerer nå på denne saken"
#: web/alert.cgi:522
msgid "We could not validate that alert."
-msgstr "Vi kan ikke bekrefte dette varselet??"
+msgstr "Vi kunne ikke validere det varselet."
#: web/alert.cgi:544
msgid "You have successfully confirmed your alert."
-msgstr "Du har nå bekreftet ditt varsel"
+msgstr "Du har nå lykkes med å bekrefte ditt varsel."
#: web/alert.cgi:551
msgid "You have successfully deleted your alert."
-msgstr "Du har nå slettet dette varselet"
+msgstr "Sletting av ditt varsel var vellykket."
#: web/alert.cgi:571
msgid "Please enter a valid email address"
@@ -771,6 +777,8 @@ msgid ""
"We may contact you periodically to ask if anything has changed\n"
"with the property you reported."
msgstr ""
+"Det kan hende vi periodisk tar kontakt med deg for å spørre om noe har "
+"endret seg med eiedommen du rapporterte."
#: web/confirm.cgi:153
msgid ""
@@ -778,55 +786,65 @@ msgid ""
"to resolve the UK&rsquo;s empty homes crisis."
msgstr ""
-#: web/confirm.cgi:155 web/confirm.cgi:158
+#: web/confirm.cgi:155 web/confirm.cgi:161
msgid "View your report"
msgstr "Vis din rapport"
#: web/confirm.cgi:157
-msgid "Thank you for reporting an empty property on ReportEmptyHomes.com."
-msgstr "Takk for at du rapporterer en tom eiendom på ReportEmptyHomes.com."
+msgid ""
+"Thank you for reporting this empty property on ReportEmptyHomes.com.\n"
+"At present the report cannot be sent through to the council for this area. "
+"We\n"
+"are working with councils to link them into the system so that as many "
+"areas\n"
+"as possible will be covered."
+msgstr ""
-#: web/confirm.cgi:163
+#: web/confirm.cgi:166
msgid "You have successfully confirmed your problem"
msgstr "Du har nå oppdatert din sak"
-#: web/confirm.cgi:164
+#: web/confirm.cgi:167
msgid " and <strong>we will now send it to the council</strong>"
msgstr " og <strong>vi sender det nå til administrasjonen</strong>"
-#: web/confirm.cgi:165
+#: web/confirm.cgi:168
#, perl-format
msgid ". You can <a href=\"%s\">view the problem on this site</a>."
msgstr ". Du kan <a href=\"%s\">lese saken på portalen </a>."
-#: web/confirm.cgi:189
+#: web/confirm.cgi:192
msgid ""
"Thanks, glad to hear it's been fixed! Could we just ask if you have ever "
"reported a problem to a council before?"
msgstr ""
-"Takk, glad for å høre at det er fikset! Can vi få spørre deg om du har "
-"rapportert et problem til kommunen tidligere?"
+"Takk, glad for å høre at problemet er fikset! Vi vil gjerne spørre deg om "
+"du har rapportert et problem til en administrasjon tidligere?"
-#: web/confirm.cgi:190 web/questionnaire.cgi:234 web/questionnaire.cgi:322
+#: web/confirm.cgi:193 web/questionnaire.cgi:234 web/questionnaire.cgi:323
#: web-admin/index.cgi:340 web-admin/index.cgi:341 web-admin/index.cgi:503
#: web-admin/index.cgi:590 web-admin/index.cgi:608
msgid "Yes"
msgstr "Ja"
-#: web/confirm.cgi:191 web/questionnaire.cgi:235 web/questionnaire.cgi:323
+#: web/confirm.cgi:194 web/questionnaire.cgi:235 web/questionnaire.cgi:324
#: web-admin/index.cgi:340 web-admin/index.cgi:341 web-admin/index.cgi:503
#: web-admin/index.cgi:590 web-admin/index.cgi:608
msgid "No"
msgstr "Nei"
-#: web/confirm.cgi:237
+#: web/confirm.cgi:195 web/index.cgi:790
+msgid "Submit"
+msgstr "Send inn"
+
+#: web/confirm.cgi:240
#, perl-format
msgid ""
"Thank you &mdash; you can <a href=\"%s\">view your updated problem</a> on "
"the site."
msgstr ""
-"Tusen takk &mdash; du kan <a href=\"%s\">ditt oppdaterte problem</a> på "
-"tjenesten."
+"Tusen takk &mdash; du kan <a href=\"%s\">se på ditt oppdaterte problem</a> "
+"her hos oss."
#: web/contact.cgi:22
msgid "Contact Us"
@@ -868,6 +886,10 @@ msgid ""
"individual empty\n"
"homes; use the box accessed from <a href=\"/\">the front page</a>."
msgstr ""
+"Vi vil gjerne høre hva du tenker om dette nettstedet. Det er bare å fylle "
+"inn skjemaet. Vær så snill å ikke kontakte oss om individuelle tomme hjem. "
+"For det bør du i stedet bruke boksen tilgjengelig fra <a href=\"/"
+"\">forsiden</a>."
#: web/contact.cgi:141
msgid ""
@@ -878,8 +900,8 @@ msgid ""
msgstr ""
"Vennligst <strong>ikke</strong> rapporter feil gjennom denne siden; "
"meldinger går til\n"
-"gruppen som står bak fiksgatami, og ikke til en kommune. For å rapportere et "
-"problem,\n"
+"gruppen som står bak fiksgatami, og ikke til en administrasjon. For å "
+"rapportere et problem,\n"
"vennligst <a href=\"/\">gå til forsiden</a> og følg instruksjonene."
#: web/contact.cgi:144
@@ -891,7 +913,7 @@ msgstr ""
"Vi ønsker å få din tilbakemelding om hva du mener om denne tjenesten. Bare "
"fyll ut skjemaet, eller send en epost <a href='mailto:%s'>%s</a>:"
-#: web/contact.cgi:153 web/index.cgi:447
+#: web/contact.cgi:153 web/index.cgi:446
msgid "There were problems with your report. Please see below."
msgstr "Det var problemer med din rapport. Vennligst se under."
@@ -923,7 +945,7 @@ msgstr "Ditt navn:"
msgid "Your&nbsp;email:"
msgstr "Din&nbsp;epost:"
-#: web/contact.cgi:236 web/index.cgi:732 web-admin/index.cgi:622
+#: web/contact.cgi:236 web/index.cgi:734 web-admin/index.cgi:622
msgid "Subject:"
msgstr "Tema:"
@@ -931,7 +953,7 @@ msgstr "Tema:"
msgid "Message:"
msgstr "Melding:"
-#: web/contact.cgi:238 web/index.cgi:1092
+#: web/contact.cgi:238 web/index.cgi:1096
msgid "Post"
msgstr "Send inn"
@@ -955,39 +977,39 @@ msgstr ""
msgid "Weird and Wonderful reports"
msgstr "Merkelige saker"
-#: web/index.cgi:83
+#: web/index.cgi:82
msgid "Submitting your report"
msgstr "Legg til din sak/problem"
-#: web/index.cgi:86
+#: web/index.cgi:85
msgid "Submitting your update"
msgstr "Legg til din oppdatering"
-#: web/index.cgi:90 web/index.cgi:638
+#: web/index.cgi:89 web/index.cgi:644
msgid "Reporting a problem"
msgstr "Legger til en sak"
-#: web/index.cgi:93
+#: web/index.cgi:92
msgid "Viewing a problem"
msgstr "Ser på en sak"
-#: web/index.cgi:96
+#: web/index.cgi:95
msgid "Viewing a location"
msgstr "Ser på et sted"
-#: web/index.cgi:121
+#: web/index.cgi:120
msgid "Enter a nearby GB postcode, or street name and area"
msgstr "Skriv inn GB-postnummer i nærheten, eller veinavn og sted"
-#: web/index.cgi:135
+#: web/index.cgi:134
msgid "Report, view, or discuss local problems"
msgstr "Rapporter, finn eller diskuter lokale problemer"
-#: web/index.cgi:136
+#: web/index.cgi:135
msgid "(like graffiti, fly tipping, broken paving slabs, or street lighting)"
msgstr "(som tagging, søppel, hull i veien, eller manglende gatelys)"
-#: web/index.cgi:158
+#: web/index.cgi:157
msgid ""
"Thanks for uploading your photo. We now need to locate your problem, so "
"please enter a nearby street name or postcode in the box below&nbsp;:"
@@ -996,114 +1018,110 @@ msgstr ""
"så vær så snill å skriv inn navn på vei i nærheten, eller postnummer i "
"boksen under&nbsp;:"
-#: web/index.cgi:176
+#: web/index.cgi:175
msgid "How to report a problem"
msgstr "Hvordan rapportere et problem"
-#: web/index.cgi:179
+#: web/index.cgi:178
msgid "Locate the problem on a map of the area"
msgstr "Lokaliser problemet på kartet over området"
-#: web/index.cgi:180
+#: web/index.cgi:179
msgid "Enter details of the problem"
msgstr "Legg inn detaljer om problemet"
-#: web/index.cgi:181
+#: web/index.cgi:180
msgid "We send it to the council on your behalf"
-msgstr "Vi sender til kommunen på vegne av deg"
+msgstr "Vi sender til administrasjon på dine vegne"
-#: web/index.cgi:196
+#: web/index.cgi:195
msgid "Photos of recent reports"
msgstr "Bilder av nylig meldte saker"
-#: web/index.cgi:198
+#: web/index.cgi:197
msgid "Recently reported problems"
msgstr "Nylig meldte problemer"
-#: web/index.cgi:222
+#: web/index.cgi:221
msgid "Please enter a message"
msgstr "Legg til en melding"
-#: web/index.cgi:225 web/index.cgi:309
+#: web/index.cgi:224 web/index.cgi:308
msgid "Please enter your email"
msgstr "Legg inn din epost"
-#: web/index.cgi:227 web/index.cgi:311
+#: web/index.cgi:226 web/index.cgi:310
msgid "Please enter a valid email"
msgstr "Legg til en gyldig epost"
-#: web/index.cgi:236 web/index.cgi:378
+#: web/index.cgi:235 web/index.cgi:377
#, perl-format
msgid ""
"That image doesn't appear to have uploaded correctly (%s), please try again."
msgstr "Bildet ser ikke ut til å blitt lastet opp riktig (%s), prøv på nytt."
-#: web/index.cgi:258 web-admin/index.cgi:477
+#: web/index.cgi:257 web-admin/index.cgi:477
msgid "Anonymous"
msgstr "Anonym"
-#: web/index.cgi:300
+#: web/index.cgi:299
msgid "No council selected"
-msgstr "Ingen kommune er valgt"
+msgstr "Ingen administrasjon er valgt"
-#: web/index.cgi:301
+#: web/index.cgi:300
msgid "Please enter a subject"
msgstr "Legg inn et tema"
-#: web/index.cgi:302
+#: web/index.cgi:301
msgid "Please enter some details"
msgstr "Legg inn opplysninger om saken"
-#: web/index.cgi:304
+#: web/index.cgi:303
msgid "Please enter your name"
msgstr "Legg inn ditt navn"
-#: web/index.cgi:306
+#: web/index.cgi:305
msgid ""
"Please enter your full name, councils need this information - if you do not "
"wish your name to be shown on the site, untick the box"
msgstr ""
-"Legg inn ditt fulle navn, kommunen som mottar saken trenger dette - hvis du "
-"ikke ønsker at ditt navn skal vises, kryss av her"
+"Legg inn ditt fulle navn, administrasjoner som mottar saken trenger dette - "
+"hvis du ikke ønsker at ditt navn skal vises, kryss av her"
-#: web/index.cgi:313 web/index.cgi:565
+#: web/index.cgi:312 web/index.cgi:569
msgid "-- Pick a category --"
msgstr "-- velg en kategori --"
-#: web/index.cgi:314 web/index.cgi:354
+#: web/index.cgi:313 web/index.cgi:353
msgid "Please choose a category"
msgstr "Velg en kategori"
-#: web/index.cgi:316 web/index.cgi:572
+#: web/index.cgi:315 web/index.cgi:576
msgid "-- Pick a property type --"
msgstr "-- velg en eiendomsstype --"
-#: web/index.cgi:317
+#: web/index.cgi:316
msgid "Please choose a property type"
msgstr "Velg en type egenskap"
-#: web/index.cgi:338
+#: web/index.cgi:337
msgid "That location is not part of that council"
-msgstr "Denne lokasjonen er ikke en del av den kommunen"
+msgstr "Det stedet er ikke en del av den administrasjonen"
-#: web/index.cgi:358
+#: web/index.cgi:357
msgid "We have details for that council"
-msgstr "Vi har opplysninger om den kommunen"
+msgstr "Vi har opplysninger om den administrasjonen"
-#: web/index.cgi:367
+#: web/index.cgi:366
msgid "Somehow, you only have one co-ordinate. Please try again."
msgstr ""
"På en eller annen måte har du bare en koordinat, vennligst prøv på nytt."
-#: web/index.cgi:369
+#: web/index.cgi:368
msgid "You haven't specified any sort of co-ordinates. Please try again."
msgstr "Du har ikke spesifisert koordinater, vennligst prøv på nytt"
-#: web/index.cgi:392 web/index.cgi:558 web/index.cgi:565
-msgid "Other"
-msgstr "Annet"
-
-#: web/index.cgi:408
+#: web/index.cgi:407
#, perl-format
msgid ""
"You have successfully confirmed your report and you can now <a href=\"%s"
@@ -1111,49 +1129,55 @@ msgid ""
msgstr ""
"Du har nå lagt til en sak og kan <a href=\"%s\">se saken på nettsiden</a>."
-#: web/index.cgi:545
+#: web/index.cgi:549
msgid ""
"That spot does not appear to be covered by a council.\n"
"If you have tried to report an issue past the shoreline, for example,\n"
"please specify the closest point on land."
msgstr ""
-"Punktet ser ikke ut til å være dekket av en kommune.\n"
+"Punktet ser ikke ut til å være dekket av en administrasjon.\n"
"Hvis du har forsøkt å rapportere en sak utenfor kysten, for eksempel,\n"
"så marker nærmeste punkt på land."
-#: web/index.cgi:566 web-admin/index.cgi:628
+#: web/index.cgi:570 web-admin/index.cgi:628
msgid "Category:"
-msgstr "Kategori"
+msgstr "Kategori:"
-#: web/index.cgi:572
+#: web/index.cgi:576
msgid "Empty house or bungalow"
msgstr "Tomt hus eller bungalow"
-#: web/index.cgi:573
+#: web/index.cgi:577
msgid "Empty flat or maisonette"
msgstr ""
-#: web/index.cgi:573
+#: web/index.cgi:577
msgid "Whole block of empty flats"
msgstr "Hel blokk med tomme leiligheter"
-#: web/index.cgi:574
+#: web/index.cgi:578
msgid "Empty office or other commercial"
msgstr "Tomt kontor eller forretningsbygg"
-#: web/index.cgi:574
+#: web/index.cgi:578
msgid "Empty pub or bar"
msgstr "Tom pub eller bar"
-#: web/index.cgi:575
+#: web/index.cgi:579
msgid "Empty public building - school, hospital, etc."
msgstr "Tom offentlig bygning - skole, sykehos, etc."
-#: web/index.cgi:576
+#: web/index.cgi:580
msgid "Property type:"
msgstr "Type egenskap:"
-#: web/index.cgi:635
+#: web/index.cgi:638
+msgid ""
+"Please note your report has <strong>not yet been sent</strong>. Choose a "
+"category and add further information below, then submit."
+msgstr ""
+
+#: web/index.cgi:641
msgid ""
"You have located the problem at the point marked with a purple pin on the "
"map.\n"
@@ -1163,11 +1187,11 @@ msgstr ""
"nål. Hvis dette ikke er korrekt plassering kan du ganske enkelt klikke på "
"kartet på nytt."
-#: web/index.cgi:641 web/index.cgi:660 web/index.cgi:662 web/index.cgi:675
+#: web/index.cgi:647 web/index.cgi:666 web/index.cgi:668 web/index.cgi:681
msgid " or "
msgstr " eller "
-#: web/index.cgi:643
+#: web/index.cgi:649
#, perl-format
msgid ""
"All the information you provide here will be sent to <strong>%s</strong>.\n"
@@ -1179,7 +1203,7 @@ msgstr ""
"navn\n"
"hvis du gir oss lov."
-#: web/index.cgi:647
+#: web/index.cgi:653
#, perl-format
msgid ""
"All the information you provide here will be sent to <strong>%s</strong>.\n"
@@ -1190,11 +1214,11 @@ msgstr ""
"Tittelen og detaljene for problemet vil bli offentlig, pluss ditt navn\n"
"hvis du gir oss tillatelse."
-#: web/index.cgi:661
+#: web/index.cgi:667
msgid "All the information you provide here will be sent to"
msgstr "All informasjonen du har lagt inn her vil bli sendt til"
-#: web/index.cgi:664
+#: web/index.cgi:670
msgid ""
"The subject and details of the problem will be public, plus your name if you "
"give us permission."
@@ -1202,7 +1226,7 @@ msgstr ""
"Tittelen og detaljene for problemet vil bli offentlig, pluss navnet ditt\n"
"hvis du gir oss tillatelse til det."
-#: web/index.cgi:666
+#: web/index.cgi:672
msgid ""
"We do <strong>not</strong> yet have details for the other council that "
"covers this location."
@@ -1216,7 +1240,7 @@ msgstr[1] ""
"Vi har ennå <strong>ikke</strong> detaljene for de andre administrasjonene "
"som dekker dette stedet."
-#: web/index.cgi:670 web/index.cgi:685
+#: web/index.cgi:676 web/index.cgi:691
#, perl-format
msgid ""
"You can help us by finding a contact email address for local problems for %s "
@@ -1225,7 +1249,7 @@ msgstr ""
"Du kan hjelpe oss ved å finne en kontakt-epostadresse for lokale problemer i "
"%s, og sende den via epost til oss på <a href='mailto:%s'>%s</a>."
-#: web/index.cgi:680 web/index.cgi:688
+#: web/index.cgi:686 web/index.cgi:694
msgid "We do not yet have details for the council that covers this location."
msgid_plural ""
"We do not yet have details for the councils that cover this location."
@@ -1234,7 +1258,7 @@ msgstr[0] ""
msgstr[1] ""
"Vi har ennå ikke detaljer for administrasjonene som dekker dette stedet."
-#: web/index.cgi:684
+#: web/index.cgi:690
msgid ""
"If you submit a problem here the subject and details of the problem will be "
"public, but the problem will <strong>not</strong> be reported to the council."
@@ -1243,7 +1267,7 @@ msgstr ""
"være offentlig, men problemet vil <strong>ikke</strong> bli rapportert til "
"administrasjonen."
-#: web/index.cgi:690
+#: web/index.cgi:696
msgid ""
"If you submit a report here it will be left on the site, but not reported to "
"the council &ndash; please still leave your report, so that we can show to "
@@ -1254,7 +1278,7 @@ msgstr ""
"inn din rapport, slik at vi kan vise administrasjonen aktiviteten i deres "
"område."
-#: web/index.cgi:696
+#: web/index.cgi:702
msgid ""
"Please fill in the form below with details of the problem,\n"
"and describe the location as precisely as possible in the details box."
@@ -1262,7 +1286,7 @@ msgstr ""
"Vennligst fyll inn skjemaet under med detaljene om problemet,\n"
"og beskriv stedet så nøyaktig som mulig i boksen for detaljer."
-#: web/index.cgi:705
+#: web/index.cgi:711
msgid ""
"Please fill in details of the empty property below, saying what type of\n"
"property it is e.g. an empty home, block of flats, office etc. Tell us\n"
@@ -1275,7 +1299,7 @@ msgid ""
"to read, as does a lack of punctuation.\n"
msgstr ""
-#: web/index.cgi:713
+#: web/index.cgi:719
msgid ""
"Please fill in details of the problem below. The council won't be able\n"
"to help unless you leave as much detail as you can, so please describe the "
@@ -1284,59 +1308,59 @@ msgid ""
"description (and a\n"
"photo of the problem if you have one), etc."
msgstr ""
-"Vennligst fyll inn detaljene om problemet under. Kommunen vil ikke være i "
-"stand\n"
+"Vennligst fyll inn detaljene om problemet under. Administrasjonen vil ikke "
+"være i stand\n"
"til å hjelpe med mindre du legger inn så mange detaljer som du kan. Beskriv\n"
"eksakt plassering for problemet (f.eks. på en vegg), hva det er, hvor lenge "
"det har\n"
"vært der, en beskrivelse (og et bilde av problemet hvis du har et), etc."
-#: web/index.cgi:718
+#: web/index.cgi:724
msgid "Please fill in details of the problem below."
msgstr "Vennligst fyll ut detaljer om saken under"
-#: web/index.cgi:731
+#: web/index.cgi:733
msgid "Empty property details form"
msgstr "Tom eiendom detaljskjema"
-#: web/index.cgi:733 web-admin/index.cgi:623
+#: web/index.cgi:735 web-admin/index.cgi:623
msgid "Details:"
msgstr "Detaljer:"
-#: web/index.cgi:734 web/index.cgi:1108
+#: web/index.cgi:736 web/index.cgi:1112 web/questionnaire.cgi:308
msgid "Photo:"
msgstr "Bilde:"
-#: web/index.cgi:735 web/index.cgi:1089 web-admin/index.cgi:629
+#: web/index.cgi:737 web/index.cgi:1093 web-admin/index.cgi:629
#: web-admin/index.cgi:749
msgid "Name:"
msgstr "Navn:"
-#: web/index.cgi:737 bin/send-reports:89 web-admin/index.cgi:631
+#: web/index.cgi:739 bin/send-reports:91 web-admin/index.cgi:631
msgid "Phone:"
msgstr "Telefon:"
-#: web/index.cgi:738 web/index.cgi:1096
+#: web/index.cgi:740 web/index.cgi:1100
msgid "(optional)"
msgstr "(valgfritt)"
-#: web/index.cgi:740
+#: web/index.cgi:742
msgid "Can we show your name on the site?"
msgstr "Kan vi vise ditt navn her på nettstedet?"
-#: web/index.cgi:742
+#: web/index.cgi:744
msgid "Can we show your name publicly?"
msgstr "Kan vi vise ditt navn offentlig?"
-#: web/index.cgi:744
+#: web/index.cgi:746
msgid "(we never show your email address or phone number)"
msgstr "(vi viser aldri din epostadresse eller telefonnummer)"
-#: web/index.cgi:771
+#: web/index.cgi:773
msgid "Please note:"
msgstr "Vennligst merk deg:"
-#: web/index.cgi:773
+#: web/index.cgi:775
msgid ""
"We will only use your personal information in accordance with our <a href=\"/"
"faq#privacy\">privacy policy.</a>"
@@ -1344,11 +1368,11 @@ msgstr ""
"Vi vil kun bruke personlig informasjon om deg i henhold til vår <a href=\"/"
"faq#privacy\">personvernpolicy.</a>"
-#: web/index.cgi:774
+#: web/index.cgi:776
msgid "Please be polite, concise and to the point."
msgstr "Vær høflig, poengtert og kortfattet."
-#: web/index.cgi:775
+#: web/index.cgi:777
msgid ""
"Please do not be abusive &mdash; abusing your council devalues the service "
"for all users."
@@ -1356,7 +1380,7 @@ msgstr ""
"Ikke vær ufin &mdash; å kjefte på din administrasjon skader verdien av "
"tjenesten for alle brukerne."
-#: web/index.cgi:776
+#: web/index.cgi:778
msgid ""
"Writing your message entirely in block capitals makes it hard to read, as "
"does a lack of punctuation."
@@ -1364,7 +1388,7 @@ msgstr ""
"Når du skriver meldingen din med kun store bokstaver blir den vanskelig å "
"lese. Det samme gjelder manglende tegnsetting."
-#: web/index.cgi:777
+#: web/index.cgi:779
msgid ""
"Remember that FixMyStreet is primarily for reporting physical problems that "
"can be fixed. If your problem is not appropriate for submission via this "
@@ -1376,7 +1400,7 @@ msgstr ""
"tjenesten, husk at du kan kontakte administrasjonen direkte via deres egen "
"nettside."
-#: web/index.cgi:779
+#: web/index.cgi:781
msgid ""
"FixMyStreet and the Guardian are providing this service in partnership in <a "
"href=\"/faq#privacy\">certain cities</a>. In those cities, both have access "
@@ -1385,56 +1409,52 @@ msgid ""
"their privacy policies."
msgstr ""
-#: web/index.cgi:788
-msgid "Submit"
-msgstr "Send inn"
-
-#: web/index.cgi:883
+#: web/index.cgi:885
msgid "Hide stale reports"
msgstr "Gjem utdaterte rapporter"
-#: web/index.cgi:886
+#: web/index.cgi:888
msgid "Include stale reports"
msgstr "Inkludert utdaterte rapporter"
-#: web/index.cgi:905
+#: web/index.cgi:907
msgid "No problems have been reported yet."
msgstr "Ingen saker er rapporter"
-#: web/index.cgi:921
+#: web/index.cgi:923
msgid "No problems found."
msgstr "Ingen saker er funnet."
-#: web/index.cgi:926
+#: web/index.cgi:928
msgid "Show pins"
msgstr "Vis nåler"
-#: web/index.cgi:930
+#: web/index.cgi:932
msgid "Hide pins"
msgstr "Gjem nåler"
-#: web/index.cgi:969
+#: web/index.cgi:973
msgid "Email me new local problems"
msgstr "Send meg epost om lokale problemer"
-#: web/index.cgi:971
+#: web/index.cgi:975
msgid "RSS feed of recent local problems"
msgstr "RSS-strøm med nylige lokale problemer"
-#: web/index.cgi:974
+#: web/index.cgi:978
msgid "Problems in this area"
msgstr "Saker i dette område"
-#: web/index.cgi:975
+#: web/index.cgi:979
msgid "Reports on and around the map"
msgstr "Saker i og rundt kartet"
-#: web/index.cgi:976
+#: web/index.cgi:980
#, perl-format
msgid "Closest nearby problems <small>(within&nbsp;%skm)</small>"
msgstr "De nærmeste sakene <small>(innenfor&nbsp;%skm)</small>"
-#: web/index.cgi:980
+#: web/index.cgi:984
msgid ""
"To report a problem, simply\n"
" <strong>click on the map</strong> at the correct location."
@@ -1442,7 +1462,7 @@ msgstr ""
"For å lage en sak, \n"
" <strong>klikk på kartet</strong> på riktig sted."
-#: web/index.cgi:982
+#: web/index.cgi:986
#, perl-format
msgid ""
"<small>If you cannot see the map, <a href='%s' rel='nofollow'>skip this\n"
@@ -1452,70 +1472,70 @@ msgstr ""
"dette\n"
" steget</a>.</small>"
-#: web/index.cgi:987
+#: web/index.cgi:991
msgid "Recent local problems, FixMyStreet"
msgstr "Nylig lokalt problem, FiksGataMi."
-#: web/index.cgi:1000
+#: web/index.cgi:1004
msgid "There were problems with your update. Please see below."
msgstr "Det var problemer med din oppdatering. Vennligst se under."
-#: web/index.cgi:1021 web/index.cgi:1023
+#: web/index.cgi:1025 web/index.cgi:1027
msgid "Unknown problem ID"
msgstr "Ukjent problem-Id"
-#: web/index.cgi:1024
+#: web/index.cgi:1028
msgid "That report has been removed from FixMyStreet."
msgstr "Den rapporten har blitt fjernet fra FiksGataMi."
-#: web/index.cgi:1044
+#: web/index.cgi:1048
msgid "This problem is old and of unknown status."
msgstr "Denne saken er gammel og med ukjent status."
-#: web/index.cgi:1047 web/index.cgi:1088
+#: web/index.cgi:1051 web/index.cgi:1092
msgid "This problem has been fixed"
-msgstr "Denne saken er løst."
+msgstr "Denne saken er løst"
-#: web/index.cgi:1072
+#: web/index.cgi:1076
msgid "More problems nearby"
msgstr "Flere saker i nærheten"
-#: web/index.cgi:1075
+#: web/index.cgi:1079
msgid "Email me updates"
msgstr "Send meg oppdateringer"
-#: web/index.cgi:1078
+#: web/index.cgi:1082
msgid "Receive email when updates are left on this problem"
msgstr "Motta epost når oppdateringer legges inn om dette problemet"
-#: web/index.cgi:1083
+#: web/index.cgi:1087
msgid "RSS feed of updates to this problem"
msgstr "RSS-strøm med oppdateringer for dette problemet"
-#: web/index.cgi:1084
+#: web/index.cgi:1088
msgid "Provide an update"
msgstr "Bidra med oppdatering"
-#: web/index.cgi:1090
+#: web/index.cgi:1094
msgid "Update:"
msgstr "Oppdatering:"
-#: web/index.cgi:1091
+#: web/index.cgi:1095
msgid "Alert me to future updates"
msgstr "Send meg varsel ved fremtidige oppdateringer"
-#: web/index.cgi:1099
+#: web/index.cgi:1103
msgid ""
"Please note that updates are not sent to the council. If you leave your name "
"it will be public. Your information will only be used in accordance with our "
"<a href=\"/faq#privacy\">privacy policy</a>"
msgstr ""
-"Vennligst merk at oppdateringer ikke blir sendt til kommunen. Hvis du "
-"legger igjen navnet ditt så vil det være offentlig tilgjengelig. Din "
+"Vennligst merk at oppdateringer ikke blir sendt til administrasjonen. Hvis "
+"du legger igjen navnet ditt så vil det være offentlig tilgjengelig. Din "
"informasjon vil kun bli brukt i henhold til våre <a href=\"/faq#privacy"
"\">personvernpolicy</a>"
-#: web/index.cgi:1119
+#: web/index.cgi:1123
msgid "Updates to this problem, FixMyStreet"
msgstr "Oppdateringer til dette problemet, FiksGataMi"
@@ -1553,7 +1573,9 @@ msgstr "Vennligs oppgi om dette problemet er blitt fikset eller ikke"
#: web/questionnaire.cgi:95
msgid ""
"Please say whether you've ever reported a problem to your council before"
-msgstr "Gi oss informasjon om du har rapportert en sak til kommunen tidligere"
+msgstr ""
+"Gi oss informasjon om du har rapportert en sak til din administrasjon "
+"tidligere"
#: web/questionnaire.cgi:97
msgid "Please indicate whether you'd like to receive another questionnaire"
@@ -1685,7 +1707,8 @@ msgstr "Første gang"
msgid ""
"Have you ever reported a problem to a council before, or is this your first "
"time?"
-msgstr "Har du sendt en sak til kommunen før, eller er dette første gangen?"
+msgstr ""
+"Har du sendt en sak til en administrasjon før, eller er dette første gangen?"
#: web/questionnaire.cgi:304
msgid ""
@@ -1695,135 +1718,142 @@ msgid ""
msgstr ""
"Hvis du ønsker å legge til en offentlig kommentar til saken, legg den til "
"her\n"
-"(denne blir sendt til kommunen). Du kan for eksempel\n"
+"(denne blir sendt til administrasjonen). Du kan for eksempel\n"
"dele din erfaring med hvordan din sak ble løst."
-#: web/questionnaire.cgi:321
+#: web/questionnaire.cgi:322
msgid ""
"Would you like to receive another questionnaire in 4 weeks, reminding you to "
"check the status?"
msgstr ""
+"Kunne du tenke deg å motta en ny forespørsel om 4 uker, som minner deg om å "
+"sjekke status?"
-#: web/reports.cgi:193 web/reports.cgi:240
+#: web/reports.cgi:192 web/reports.cgi:239
msgid "Summary reports"
msgstr "Oppsummeringsrapporter"
-#: web/reports.cgi:195
+#: web/reports.cgi:194
msgid ""
"This is a summary of all reports on this site; select a particular council "
"to see the reports sent there."
msgstr ""
"Dette er en opplisting av alle sakene i denne tjenesten; velg en bestemt "
-"kommune for å se saker som er sendt dit."
+"administrasjon for å se saker som er sendt dit."
-#: web/reports.cgi:196
+#: web/reports.cgi:195
msgid "Greyed-out lines are councils that no longer exist."
-msgstr "Grå linjer er kommuner som ikke lenger eksisterer."
+msgstr ""
+"Linjer med grå bakgrunn er administrasjoner som ikke lenger eksisterer."
-#: web/reports.cgi:200 web-admin/index.cgi:477 web-admin/index.cgi:656
+#: web/reports.cgi:199 web-admin/index.cgi:477 web-admin/index.cgi:656
msgid "Name"
msgstr "Navn"
-#: web/reports.cgi:200 web/reports.cgi:276
+#: web/reports.cgi:199 web/reports.cgi:275
msgid "New problems"
msgstr "Nye saker"
-#: web/reports.cgi:200 web/reports.cgi:284
+#: web/reports.cgi:199 web/reports.cgi:283
msgid "Older problems"
msgstr "Eldre saker"
-#: web/reports.cgi:202
+#: web/reports.cgi:201
msgid "Old problems,<br>state unknown"
msgstr "Eldre saker, <br>ukjent status"
-#: web/reports.cgi:204 web/reports.cgi:291
+#: web/reports.cgi:203 web/reports.cgi:290
msgid "Recently fixed"
msgstr "Nylig løste saker"
-#: web/reports.cgi:204
+#: web/reports.cgi:203
msgid "Older fixed"
msgstr "Eldre løste"
-#: web/reports.cgi:246
+#: web/reports.cgi:245
msgid "council"
-msgstr "kommune"
+msgstr "administrasjon"
-#: web/reports.cgi:256
+#: web/reports.cgi:255
#, perl-format
msgid "RSS feed of problems in this %s"
msgstr "RSS-strøm for problemer i denne %s"
-#: web/reports.cgi:260
+#: web/reports.cgi:259
#, perl-format
msgid "This is a summary of all reports for one %s."
msgstr "Dette er en oppsummering av alle rapporter for en %s."
-#: web/reports.cgi:261
+#: web/reports.cgi:260
#, perl-format
msgid "This is a summary of all reports for this %s."
msgstr "Dette er en oppsummering for alle rapporter for denne %s."
-#: web/reports.cgi:265
+#: web/reports.cgi:264
#, perl-format
msgid "You can <a href=\"%s\">see less detail</a>."
msgstr "Du kan <a href=\"%s\">se mindre detaljer</a>."
-#: web/reports.cgi:267
+#: web/reports.cgi:266
#, perl-format
msgid "You can <a href=\"%s\">see more details</a>."
msgstr "Du kan <a href=\"%s\">se flere detaljer</a>."
-#: web/reports.cgi:269
+#: web/reports.cgi:268
#, perl-format
msgid ""
"You can <a href=\"%s\">see less detail</a> or go back and <a href=\"/reports"
"\">show all councils</a>."
msgstr ""
"Du kan <a href=\"%s\">se mindre detaljer</a> eller gå tilbake og <a href=\"/"
-"reports\">se alle kommunene</a>."
+"reports\">se alle administrasjonene</a>."
-#: web/reports.cgi:271
+#: web/reports.cgi:270
#, perl-format
msgid ""
"You can <a href=\"%s\">see more details</a> or go back and <a href=\"/reports"
"\">show all councils</a>."
msgstr ""
"Du kan <a href=\"%s\">se flere detaljer</a> eller gå tilbake og <a href=\"/"
-"reports\">se alle kommunene</a>."
+"reports\">se alle administrasjonene</a>."
-#: web/reports.cgi:286
+#: web/reports.cgi:285
msgid "Old problems, state unknown"
msgstr "Eldre saker med ukjent status"
-#: web/reports.cgi:292
+#: web/reports.cgi:291
msgid "Old fixed"
msgstr "Eldre saker som er løst"
-#: web/reports.cgi:295
+#: web/reports.cgi:294
#, perl-format
msgid "%s - Summary reports"
msgstr "%s - oppsummeringsrapporter"
-#: web/reports.cgi:295
+#: web/reports.cgi:294
#, perl-format
msgid "Problems within %s, FixMyStreet"
msgstr "Problemer innenfor %s, Fiksgatami"
-#: web/reports.cgi:335
+#: web/reports.cgi:333
+msgid "(sent to both)"
+msgstr "(sent til begge)"
+
+#: web/reports.cgi:334
msgid "(not sent to council)"
msgstr "(ikke rapportert til administrasjonen)"
-#: bin/send-reports:91
+#: bin/send-reports:93
msgid ""
"This web page also contains a photo of the problem, provided by the user."
msgstr ""
"Denne nettsiden inneholder også et bilde av problemet, sendt inn av brukeren."
-#: bin/send-reports:97
+#: bin/send-reports:99
msgid "To view a map of the precise location of this issue"
msgstr "For å se en kart med den presise plasseringen for denne saken."
-#: bin/send-reports:98
+#: bin/send-reports:100
msgid ""
"The user could not locate the problem on a map, but to see the area around "
"the location they entered"
@@ -1831,20 +1861,20 @@ msgstr ""
"Brukeren kunne ikke plassere problemet på et kart, men sjekk området rundt "
"stedet de skrev inn"
-#: bin/send-reports:178
+#: bin/send-reports:182
msgid "this type of local problem"
msgstr "denne type lokalt problem"
-#: bin/send-reports:182
+#: bin/send-reports:186
#, perl-format
msgid "Category: %s"
msgstr "Kategori: %s"
-#: bin/send-reports:185
+#: bin/send-reports:189
msgid " and "
msgstr " og "
-#: bin/send-reports:186
+#: bin/send-reports:190
msgid ""
"This email has been sent to both councils covering the location of the "
"problem, as the user did not categorise it; please ignore it if you're not "
@@ -1857,7 +1887,7 @@ msgstr ""
"eller gi oss beskjed om hvilken kategori av problemer dette er så vi kan "
"legge det til i vårt system."
-#: bin/send-reports:192
+#: bin/send-reports:196
#, perl-format
msgid ""
"We realise this problem might be the responsibility of %s; however, we don't "
@@ -1908,6 +1938,8 @@ msgstr "De siste rapporter for {{COUNCIL}} rapportert av brukere"
msgid ""
"New reports for {{COUNCIL}} within {{WARD}} ward on reportemptyhomes.com"
msgstr ""
+"Nye rapporter for {{COUNCIL}} innenfor {{WARD}} bydel på reportemptyhomes."
+"com"
#: db/alert_types_eha.pl:24
#, perl-brace-format
@@ -1992,6 +2024,8 @@ msgstr "Nye problemer for {{COUNCIL}} innenfor {{WARD}} bydel på FiksGataMi"
msgid ""
"The latest problems for {{COUNCIL}} within {{WARD}} ward reported by users"
msgstr ""
+"De siste problemene for {{COUNCIL}} innenfor {{WARD}} bydel rapportert av "
+"brukere"
#: db/alert_types.pl:42
#, perl-brace-format
@@ -2058,20 +2092,20 @@ msgstr "Graf over problemoppretting fordelt på status over tid"
#: web-admin/index.cgi:165
msgid "Problem breakdown by state"
-msgstr "Problemfordeling for tilstand"
+msgstr "Tilstandsfordeling for problemer"
#: web-admin/index.cgi:170
msgid "Update breakdown by state"
-msgstr "Oppdateringsfordeling for tilstand"
+msgstr "Tilstandsfordeling for oppdateringer"
#: web-admin/index.cgi:186
msgid "Diligency prize league table"
-msgstr ""
+msgstr "Hvem har endret kontaktlista"
#: web-admin/index.cgi:190
#, perl-format
-msgid "%d edits by %d"
-msgstr "%d redigeringer av %d"
+msgid "%d edits by %s"
+msgstr "%d redigeringer av %s"
#: web-admin/index.cgi:193
msgid "No edits have yet been made."
@@ -2168,7 +2202,7 @@ msgstr "Bekreftet"
#: web-admin/index.cgi:353
msgid "Update statuses"
-msgstr "Oppdater statuser"
+msgstr "Oppdater tilstanden"
#: web-admin/index.cgi:358
msgid "Add new category"
@@ -2188,7 +2222,7 @@ msgstr "Merk: "
#: web-admin/index.cgi:380
msgid "Create category"
-msgstr "Lat categori"
+msgstr "Lag kategori"
#: web-admin/index.cgi:432
msgid "Save changes"
@@ -2337,7 +2371,7 @@ msgstr "Koordinater:"
#: web-admin/index.cgi:624
msgid "originally entered"
-msgstr ""
+msgstr "søkte etter"
#: web-admin/index.cgi:625
msgid "For council(s):"
@@ -2471,16 +2505,16 @@ msgstr ""
"\n"
"Hei,\n"
"\n"
-"Vennligst klikk på linken under for å bekrefte saken du\n"
-"har bedt om å abonnere på FiksGataMi.no:\n"
+"Vennligst klikk på lenken under for å bekrefte varslet du\n"
+"har bedt om å abonnere på FiksGataMi:\n"
"\n"
" <?=$values['url']?>\n"
"\n"
-"Hvis du ikke kan klikke på linken, kan du kopiere den i\n"
-"addresse feltet på dine nettleser.\n"
+"Hvis du ikke kan klikke på lenken, kan du kopiere den i\n"
+"addressefeltet på dine nettleser.\n"
"\n"
"Vennlig Hilsen, \n"
-"FiksGataMi teamet\n"
+"FiksGataMi-gruppen\n"
#: templates/emails/alert-problem
msgid ""
@@ -2503,7 +2537,7 @@ msgstr ""
"<?=$values['data']?>\n"
"\n"
"Vennlig hilsen, \n"
-"FiksGataMi teamet\n"
+"FiksGataMi-gruppen\n"
"\n"
"Hvis du ikke ønsker å stå på denne epostlisten,\n"
"klikk på linken: <?=$values['unsubscribe_url']?>\n"
@@ -2532,7 +2566,7 @@ msgstr ""
"<?=$values['data']?>\n"
"\n"
"Vennlig hilsen, \n"
-"FiksGataMi teamet\n"
+"FiksGataMi-gruppen\n"
"\n"
"Hvis du ikke ønsker å motta epost om saker som er sendt til\n"
"<?=$values['area_name']?> i fremtiden, klikk på følgende link: \n"
@@ -2560,7 +2594,7 @@ msgstr ""
"<?=$values['data']?>\n"
"\n"
"Vennlig hilsen, \n"
-"FiksGataMi teamet\n"
+"FiksGataMi-gruppen\n"
"\n"
"Hvis du ikke ønsker å motta epost om saker som er sendt til\n"
"<?=$values['area_name']?> i fremtiden, klikk på følgende link: \n"
@@ -2587,7 +2621,7 @@ msgstr ""
"<?=$values['data']?>\n"
"\n"
"Vennlig hilsen, \n"
-"FiksGataMi teamet\n"
+"FiksGataMi-gruppen\n"
"\n"
"Hvis du ikke ønsker å abonnere på epost om problemer i nærheten,\n"
"klikk på følgende link: <?=$values['unsubscribe_url']?>\n"
@@ -2618,7 +2652,7 @@ msgstr ""
"<?=$values['data']?>\n"
"\n"
"Vennlig hilsen, \n"
-"FiksGataMi teamet\n"
+"FiksGataMi-gruppen\n"
"\n"
"Hvis du ikke ønsker å abonnere via epost på saker som er sendt til\n"
"<?=$values['area_name']?> innenfor <?=$values['ward_name']?>,\n"
@@ -2717,7 +2751,7 @@ msgstr ""
"\n"
"\n"
"Vennlig hilsen, \n"
-"FiksGataMi teamet\n"
+"FiksGataMi-gruppen\n"
#: templates/emails/flickr-submit
msgid ""
@@ -2746,10 +2780,10 @@ msgstr ""
"\n"
"<?=$values['url']?>\n"
"\n"
-"På denne måten kan vi send bildene til kommunen. Takk!\n"
+"På denne måten kan vi send bildene til administrasjonen. Takk!\n"
"\n"
"Vennlig hilsen, \n"
-"FiksGataMi teamet\n"
+"FiksGataMi-gruppen\n"
#: templates/emails/partial
msgid ""
@@ -2825,7 +2859,7 @@ msgstr ""
"<?=$values['detail']?>\n"
"\n"
"Vennlig hilsen, \n"
-"FiksGataMi teamet\n"
+"FiksGataMi-gruppen\n"
#: templates/emails/questionnaire
msgid ""
@@ -2870,7 +2904,7 @@ msgstr ""
"skjema.\n"
"\n"
"Vennlig hilsen, \n"
-"FiksGataMi teamet\n"
+"FiksGataMi-gruppen\n"
"\n"
"Saken du la til var som følger:\n"
"\n"
@@ -2988,7 +3022,7 @@ msgstr ""
"epost til fiksgatami@nuug.no\n"
"\n"
"Vennlig hilsen,\n"
-"FiksGataMi-gruppa\n"
+"FiksGataMi-gruppen\n"
#: templates/emails/submit-brent
msgid ""
@@ -3039,7 +3073,7 @@ msgid ""
msgstr ""
"Subject: FMS problemrapport: <?=$values['title']?>\n"
"\n"
-"Kjære <?=$values['councils_name']?>,\n"
+"Til <?=$values['councils_name']?>,\n"
"\n"
"<?=$values['missing']?><?=$values['multiple']?>En bruker av\n"
"FiksGataMi har sendt inn følgende rappport\n"
@@ -3070,7 +3104,7 @@ msgstr ""
"Svar på denne eposten vil gå til brukeren som sendte inn problemet.\n"
"\n"
"Vennlig hilsen,, \n"
-"Fiksgatami-gruppa\n"
+"Fiksgatami-gruppen\n"
"\n"
"[ Denne meldingen ble sendt inn via FiksGataMi, et prosjekt hos foreningen "
"NUUG.\n"
@@ -3130,7 +3164,7 @@ msgid ""
msgstr ""
"Subject: Problemrapport: <?=$values['title']?>\n"
"\n"
-"Kjære <?=$values['councils_name']?>,\n"
+"Til <?=$values['councils_name']?>,\n"
"\n"
"<?=$values['missing']?><?=$values['multiple']?>En bruker av\n"
"FiksGataMi har sendt inn følgende rapport om et lokalt\n"
@@ -3161,7 +3195,7 @@ msgstr ""
"Svar på denne eposten går til brukeren som sendte inn problemet.\n"
"\n"
"Vennlig hilsen, \n"
-"FiksGataMi-gruppa\n"
+"FiksGataMi-gruppen\n"
"\n"
"[ Denne meldingen ble sendt inn via FiksGataMi, et prosjekt hos foreningen "
"NUUG.\n"
@@ -3282,7 +3316,7 @@ msgstr ""
"<?=$values['update']?>\n"
"\n"
"Vennlig hilsen, \n"
-"FiksGataMi-gruppa\n"
+"FiksGataMi-gruppen\n"
#: templates/emails/emptyhomes/alert-problem
msgid ""
diff --git a/perllib/Cobrand.pm b/perllib/Cobrand.pm
index fa2dd9e88..b1ec6ba75 100644
--- a/perllib/Cobrand.pm
+++ b/perllib/Cobrand.pm
@@ -119,6 +119,8 @@ my %fns = (
# The MaPit types this site handles
'area_types' => { default => '[qw(DIS LBO MTD UTA CTY COI)]' },
'area_min_generation' => { default => '10' },
+ # Some cobrands that use a Tilma map have a smaller mid-point to make pin centred
+ 'tilma_mid_point' => { default => '""' },
);
foreach (keys %fns) {
diff --git a/perllib/Cobrands/Barnet/Util.pm b/perllib/Cobrands/Barnet/Util.pm
index 0e5ddcf68..e4115c232 100644
--- a/perllib/Cobrands/Barnet/Util.pm
+++ b/perllib/Cobrands/Barnet/Util.pm
@@ -109,5 +109,9 @@ sub recent_photos {
return Problems::recent_photos($num, $lat, $lon, $dist);
}
+sub tilma_mid_point {
+ return 189;
+}
+
1;
diff --git a/perllib/Cobrands/Fiksgatami/Util.pm b/perllib/Cobrands/Fiksgatami/Util.pm
index 38366f0e1..2abc03d00 100644
--- a/perllib/Cobrands/Fiksgatami/Util.pm
+++ b/perllib/Cobrands/Fiksgatami/Util.pm
@@ -22,6 +22,16 @@ sub set_lang_and_domain {
mySociety::Locale::change();
}
+# If lat/lon are present in the URL, OpenLayers will use that to centre the map.
+# Need to specify a zoom to stop it defaulting to null/0.
+sub url {
+ my ($self, $url) = @_;
+ if ($url =~ /lat=/ && $url !~ /zoom=/) {
+ $url .= ';zoom=2';
+ }
+ return $url;
+}
+
sub enter_postcode_text {
my ($self, $q) = @_;
return _('Enter a nearby postcode, or street name and area');
diff --git a/perllib/Cobrands/Southampton/Util.pm b/perllib/Cobrands/Southampton/Util.pm
new file mode 100644
index 000000000..d29b53127
--- /dev/null
+++ b/perllib/Cobrands/Southampton/Util.pm
@@ -0,0 +1,117 @@
+#!/usr/bin/perl -w
+#
+# Util.pm:
+# Southampton cobranding for FixMyStreet.
+#
+# Copyright (c) 2011 UK Citizens Online Democracy. All rights reserved.
+# Email: matthew@mysociety.org. WWW: http://www.mysociety.org
+
+package Cobrands::Southampton::Util;
+use strict;
+use Carp;
+use URI::Escape;
+use mySociety::VotingArea;
+
+sub new {
+ my $class = shift;
+ return bless {}, $class;
+}
+
+=item site_restriction Q
+
+Return a site restriction clause and a site key.
+
+=cut
+sub site_restriction {
+ return ("and council='2567'", 'southampton');
+}
+
+=item
+
+Return the base url for this cobranded site
+
+=cut
+
+sub base_url {
+ my $base_url = mySociety::Config::get('BASE_URL');
+ if ($base_url !~ /southampton/) {
+ $base_url =~ s/http:\/\/(?!www\.)/http:\/\/southampton\./g;
+ $base_url =~ s/http:\/\/www\./http:\/\/southampton\./g;
+ }
+ return $base_url;
+}
+
+=item site_title
+
+Return the title to be used in page heads
+
+=cut
+
+sub site_title {
+ my ($self) = @_;
+ return 'Southampton City Council FixMyStreet';
+}
+
+sub enter_postcode_text {
+ my ($self,$q) = @_;
+ return 'Enter a Southampton postcode, or street name and area';
+}
+
+=item council_check COUNCILS QUERY CONTEXT
+
+Return a boolean indicating whether COUNCILS are okay for the location
+in the QUERY, and an error message appropriate to the CONTEXT.
+
+=cut
+
+sub council_check {
+ my ($self, $params, $q, $context) = @_;
+ my $councils;
+ if ($params->{all_councils}) {
+ $councils = $params->{all_councils};
+ } elsif (defined $params->{lat}) {
+ my $parent_types = $mySociety::VotingArea::council_parent_types;
+ $councils = mySociety::MaPit::call('point', "4326/$params->{lon},$params->{lat}", type => $parent_types);
+ }
+ my $council_match = defined $councils->{2567};
+ if ($council_match) {
+ return 1;
+ }
+ my $url = 'http://www.fixmystreet.com/';
+ $url .= 'alert' if $context eq 'alert';
+ $url .= '?pc=' . URI::Escape::uri_escape_utf8($q->param('pc')) if $q->param('pc');
+ my $error_msg = "That location is not covered by Southampton.
+Please visit <a href=\"$url\">the main FixMyStreet site</a>.";
+ return (0, $error_msg);
+}
+
+# All reports page only has the one council.
+sub all_councils_report {
+ return 0;
+}
+
+=item disambiguate_location S Q
+
+Given a string representing a location (street and area expected),
+bias the viewport to around Southampton.
+
+=cut
+
+sub disambiguate_location {
+ my ($self, $s, $q) = @_;
+ $s = "ll=50.913822,-1.400493&spn=0.084628,0.15701&$s";
+ return $s;
+}
+
+sub recent_photos {
+ my ($self, $num, $lat, $lon, $dist) = @_;
+ $num = 2 if $num == 3;
+ return Problems::recent_photos($num, $lat, $lon, $dist);
+}
+
+sub tilma_mid_point {
+ return 189;
+}
+
+1;
+
diff --git a/perllib/FixMyStreet/Alert.pm b/perllib/FixMyStreet/Alert.pm
index 29932a0a5..cfe9c1781 100644
--- a/perllib/FixMyStreet/Alert.pm
+++ b/perllib/FixMyStreet/Alert.pm
@@ -298,6 +298,7 @@ sub generate_rss ($$$;$$$$) {
description => ent(ent($desc)) # Yes, double-encoded, really.
);
$item{pubDate} = $pubDate if $pubDate;
+ $item{category} = $row->{category} if $row->{category};
my $display_photos = Cobrand::allow_photo_display($cobrand);
if ($display_photos && $row->{photo}) {
diff --git a/perllib/FixMyStreet/Geocode.pm b/perllib/FixMyStreet/Geocode.pm
index 803e32a85..c06c3bb55 100644
--- a/perllib/FixMyStreet/Geocode.pm
+++ b/perllib/FixMyStreet/Geocode.pm
@@ -50,6 +50,14 @@ sub lookup {
$longitude = $location->{wgs84_lon};
}
}
+ } elsif (mySociety::Config::get('COUNTRY') eq 'NO') {
+ if ($s =~ /^\d{4}$/) {
+ my $location = mySociety::MaPit::call('postcode', $s);
+ unless ($error = Page::mapit_check_error($location)) {
+ $latitude = $location->{wgs84_lat};
+ $longitude = $location->{wgs84_lon};
+ }
+ }
}
unless ($error || defined $latitude) {
($latitude, $longitude, $error) = FixMyStreet::Geocode::string($s, $q);
@@ -80,15 +88,31 @@ sub geocoded_string_coordinates {
return ($latitude, $longitude, $error);
}
+sub results_check {
+ my $q = shift;
+ my ($error, @valid_locations);
+ foreach (@_) {
+ next unless /"address" *: *"(.*?)"/s;
+ my $address = $1;
+ next unless Cobrand::geocoded_string_check(Page::get_cobrand($q), $address, $q);
+ next if $address =~ /BT\d/;
+ push (@$error, $address);
+ push (@valid_locations, $_);
+ }
+ if (scalar @valid_locations == 1) {
+ return geocoded_string_coordinates($valid_locations[0], $q);
+ }
+ $error = _('Sorry, we could not find that location.') unless $error;
+ return (undef, undef, $error);
+}
+
# string STRING QUERY
# Canonicalises, looks up on Google Maps API, and caches, a user-inputted location.
-# Returns array of (TILE_X, TILE_Y, EASTING, NORTHING, ERROR), where ERROR is
-# either undef, a string, or an array of matches if there are more than one. The
-# information in the query may be used to disambiguate the location in cobranded versions
-# of the site.
+# Returns array of (LAT, LON, ERROR), where ERROR is either undef, a string, or
+# an array of matches if there are more than one. The information in the query
+# may be used to disambiguate the location in cobranded versions of the site.
sub string {
my ($s, $q) = @_;
- $s = decode_utf8($s);
$s = lc($s);
$s =~ s/[^-&\w ']/ /g;
$s =~ s/\s+/ /g;
@@ -98,7 +122,7 @@ sub string {
my $url = 'http://maps.google.com/maps/geo?' . $s;
my $cache_dir = mySociety::Config::get('GEO_CACHE');
my $cache_file = $cache_dir . md5_hex($url);
- my ($js, $error, $latitude, $longitude);
+ my ($js, $error);
if (-s $cache_file) {
$js = File::Slurp::read_file($cache_file);
} else {
@@ -115,27 +139,14 @@ sub string {
} elsif ($js !~ /"code" *: *200/) {
$error = _('Sorry, we could not find that location.');
} elsif ($js =~ /}, *{/) { # Multiple
- my @js = split /}, *{/, $js;
- my @valid_locations;
- foreach (@js) {
- next unless /"address" *: *"(.*?)"/s;
- my $address = $1;
- next unless Cobrand::geocoded_string_check(Page::get_cobrand($q), $address, $q);
- next if $address =~ /BT\d/;
- push (@valid_locations, $_);
- push (@$error, $address);
- }
- if (scalar @valid_locations == 1) {
- return geocoded_string_coordinates($valid_locations[0], $q);
- }
- $error = _('Sorry, we could not find that location.') unless $error;
+ return results_check($q, (split /}, *{/, $js));
} elsif ($js =~ /BT\d/) {
# Northern Ireland, hopefully
$error = _("We do not cover Northern Ireland, I'm afraid, as our licence doesn't include any maps for the region.");
} else {
- ($latitude, $longitude, $error) = geocoded_string_coordinates($js, $q);
+ return results_check($q, $js);
}
- return ($latitude, $longitude, $error);
+ return (undef, undef, $error);
}
# list_choices
diff --git a/perllib/FixMyStreet/Map.pm b/perllib/FixMyStreet/Map.pm
index edb4fedc9..62dab454b 100644
--- a/perllib/FixMyStreet/Map.pm
+++ b/perllib/FixMyStreet/Map.pm
@@ -10,25 +10,64 @@ package FixMyStreet::Map;
use strict;
+use Module::Pluggable
+ sub_name => 'maps',
+ search_path => __PACKAGE__,
+ except => 'FixMyStreet::Map::Tilma::Original',
+ require => 1;
+
+# Get the list of maps we want and load map classes at compile time
+my @ALL_MAP_CLASSES = allowed_maps();
+
use Problems;
use Cobrand;
use mySociety::Config;
use mySociety::Gaze;
use mySociety::Locale;
-use mySociety::Web qw(ent NewURL);
-use Utils;
+use mySociety::Web qw(ent);
+
+=head2 allowed_maps
+
+Returns an array of all the map classes that were found and that
+are permitted by the config.
+
+=cut
+
+sub allowed_maps {
+ my @allowed = split /,/, mySociety::Config::get('MAP_TYPE');
+ @allowed = map { __PACKAGE__.'::'.$_ } @allowed;
+ my %avail = map { $_ => 1 } __PACKAGE__->maps;
+ return grep { $avail{$_} } @allowed;
+}
+
+=head2 map_class
+
+Set and return the appropriate class given a query parameter string.
+
+=cut
+
+our $map_class;
+sub set_map_class {
+ my $str = shift;
+ $str = __PACKAGE__.'::'.$str if $str;
+ my %avail = map { $_ => 1 } @ALL_MAP_CLASSES;
+ $str = $ALL_MAP_CLASSES[0] unless $str && $avail{$str};
+ $map_class = $str;
+}
-# Run on module boot up
-load();
+sub header_js {
+ return $map_class->header_js(@_);
+}
-# This is yucky, but no-one's taught me a better way
-sub load {
- my $type = mySociety::Config::get('MAP_TYPE');
- my $class = "FixMyStreet::Map::$type";
- eval "use $class";
+sub display_map {
+ return $map_class->display_map(@_);
+}
- # If we have an error die as it is a compile error rather than runtime error
- die $@ if $@;
+sub display_map_end {
+ my ($type) = @_;
+ my $out = '</div>';
+ $out .= '</form>' if ($type);
+ return $out;
}
sub header {
@@ -41,29 +80,17 @@ sub header {
my $form_action = Cobrand::url( $cobrand, '/report/new', $q );
my $encoding = '';
$encoding = ' enctype="multipart/form-data"' if $type == 2;
- my $pc = $q->param('pc') || '';
- my $pc_enc = ent($pc);
+ my $pc = ent($q->param('pc') || '');
+ my $map = ent($q->param('map') || '');
return <<EOF;
<form action="$form_action" method="post" name="mapForm" id="mapForm"$encoding>
<input type="hidden" name="submit_map" value="1">
-<input type="hidden" name="pc" value="$pc_enc">
+<input type="hidden" name="map" value="$map">
+<input type="hidden" name="pc" value="$pc">
$cobrand_form_elements
EOF
}
-=head2 map_features_easting_northing
-
-Wrapper around map_features which does the easting, northing to lat, lon
-conversion.
-
-=cut
-
-sub map_features_easting_northing {
- my ( $q, $easting, $northing, $interval ) = @_;
- my ( $lat, $lon ) = Utils::convert_en_to_latlon( $easting, $northing );
- return map_features( $q, $lat, $lon, $interval );
-}
-
sub map_features {
my ( $q, $lat, $lon, $interval ) = @_;
@@ -102,35 +129,16 @@ sub map_features {
return ( $around_map, $around_map_list, $nearby, $dist );
}
-sub compass ($$$) {
- my ( $q, $x, $y ) = @_;
- my @compass;
- for ( my $i = $x - 1 ; $i <= $x + 1 ; $i++ ) {
- for ( my $j = $y - 1 ; $j <= $y + 1 ; $j++ ) {
- $compass[$i][$j] = NewURL( $q, x => $i, y => $j );
- }
- }
- my $recentre = NewURL($q);
- my $host = Page::base_url_with_lang( $q, undef );
- return <<EOF;
-<table cellpadding="0" cellspacing="0" border="0" id="compass">
-<tr valign="bottom">
-<td align="right"><a rel="nofollow" href="${compass[$x-1][$y+1]}"><img src="$host/i/arrow-northwest.gif" alt="NW" width=11 height=11></a></td>
-<td align="center"><a rel="nofollow" href="${compass[$x][$y+1]}"><img src="$host/i/arrow-north.gif" vspace="3" alt="N" width=13 height=11></a></td>
-<td><a rel="nofollow" href="${compass[$x+1][$y+1]}"><img src="$host/i/arrow-northeast.gif" alt="NE" width=11 height=11></a></td>
-</tr>
-<tr>
-<td><a rel="nofollow" href="${compass[$x-1][$y]}"><img src="$host/i/arrow-west.gif" hspace="3" alt="W" width=11 height=13></a></td>
-<td align="center"><a rel="nofollow" href="$recentre"><img src="$host/i/rose.gif" alt="Recentre" width=35 height=34></a></td>
-<td><a rel="nofollow" href="${compass[$x+1][$y]}"><img src="$host/i/arrow-east.gif" hspace="3" alt="E" width=11 height=13></a></td>
-</tr>
-<tr valign="top">
-<td align="right"><a rel="nofollow" href="${compass[$x-1][$y-1]}"><img src="$host/i/arrow-southwest.gif" alt="SW" width=11 height=11></a></td>
-<td align="center"><a rel="nofollow" href="${compass[$x][$y-1]}"><img src="$host/i/arrow-south.gif" vspace="3" alt="S" width=13 height=11></a></td>
-<td><a rel="nofollow" href="${compass[$x+1][$y-1]}"><img src="$host/i/arrow-southeast.gif" alt="SE" width=11 height=11></a></td>
-</tr>
-</table>
-EOF
+sub map_pins {
+ return $map_class->map_pins(@_);
+}
+
+sub click_to_wgs84 {
+ return $map_class->click_to_wgs84(@_);
+}
+
+sub tile_xy_to_wgs84 {
+ return $map_class->tile_xy_to_wgs84(@_);
}
1;
diff --git a/perllib/FixMyStreet/Map/Bing.pm b/perllib/FixMyStreet/Map/Bing.pm
index 8446a10fd..335759b08 100644
--- a/perllib/FixMyStreet/Map/Bing.pm
+++ b/perllib/FixMyStreet/Map/Bing.pm
@@ -6,10 +6,9 @@
# Copyright (c) 2010 UK Citizens Online Democracy. All rights reserved.
# Email: matthew@mysociety.org; WWW: http://www.mysociety.org/
-package FixMyStreet::Map;
+package FixMyStreet::Map::Bing;
use strict;
-use mySociety::GeoUtil;
use mySociety::Web qw(ent);
sub header_js {
@@ -27,21 +26,29 @@ sub header_js {
# PINS is array of pins to show, location and colour
# PRE/POST are HTML to show above/below map
sub display_map {
- my ($q, %params) = @_;
+ my ($self, $q, %params) = @_;
$params{pre} ||= '';
$params{post} ||= '';
+ my @pins;
foreach my $pin (@{$params{pins}}) {
+ $pin->[3] ||= '';
+ push @pins, "[ $pin->[0], $pin->[1], '$pin->[2]', '$pin->[3]' ]";
}
+ my $pins_js = join(",\n", @pins);
my $out = FixMyStreet::Map::header($q, $params{type});
- my ($lat, $lon) = mySociety::GeoUtil::national_grid_to_wgs84($params{easting}, $params{northing}, 'G');
my $copyright = _('Map contains Ordnance Survey data &copy; Crown copyright and database right 2010.');
+ my $key = mySociety::Config::get('BING_MAPS_API_KEY');
$out .= <<EOF;
+<input type="hidden" name="latitude" id="fixmystreet.latitude" value="$params{latitude}">
+<input type="hidden" name="longitude" id="fixmystreet.longitude" value="$params{longitude}">
<script type="text/javascript">
var fixmystreet = {
- 'lat': $lat,
- 'lon': $lon
+ 'key': '$key',
+ 'latitude': $params{latitude},
+ 'longitude': $params{longitude},
+ 'pins': [ $pins_js ]
}
</script>
<div id="map_box">
@@ -55,17 +62,4 @@ EOF
return $out;
}
-sub display_map_end {
- my ($type) = @_;
- my $out = '</div>';
- $out .= '</form>' if ($type);
- return $out;
-}
-
-sub display_pin {
-}
-
-sub map_pins {
-}
-
1;
diff --git a/perllib/FixMyStreet/Map/BingOL.pm b/perllib/FixMyStreet/Map/BingOL.pm
index 3939a710f..4e93243a9 100644
--- a/perllib/FixMyStreet/Map/BingOL.pm
+++ b/perllib/FixMyStreet/Map/BingOL.pm
@@ -1,12 +1,12 @@
#!/usr/bin/perl
#
-# FixMyStreet:Map::Bing
-# Bing maps on FixMyStreet.
+# FixMyStreet:Map::BingOL
+# Bing maps on FixMyStreet, using OpenLayers.
#
-# Copyright (c) 2010 UK Citizens Online Democracy. All rights reserved.
+# Copyright (c) 2011 UK Citizens Online Democracy. All rights reserved.
# Email: matthew@mysociety.org; WWW: http://www.mysociety.org/
-package FixMyStreet::Map;
+package FixMyStreet::Map::BingOL;
use strict;
use mySociety::Web qw(ent);
@@ -14,9 +14,9 @@ use mySociety::Web qw(ent);
sub header_js {
return '
<!-- <script type="text/javascript" src="http://ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=7.0&mkt=en-GB"></script> -->
-<script type="text/javascript" src="http://openlayers.org/api/OpenLayers.js"></script>
+<script type="text/javascript" src="/jslib/OpenLayers-2.10/OpenLayers.js"></script>
+<script type="text/javascript" src="/js/map-OpenLayers.js"></script>
<script type="text/javascript" src="/js/map-bing-ol.js"></script>
-<script type="text/javascript" src="/js/OpenLayers.Projection.OrdnanceSurvey.js"></script>
';
}
@@ -28,20 +28,27 @@ sub header_js {
# PINS is array of pins to show, location and colour
# PRE/POST are HTML to show above/below map
sub display_map {
- my ($q, %params) = @_;
+ my ($self, $q, %params) = @_;
$params{pre} ||= '';
$params{post} ||= '';
+ my @pins;
foreach my $pin (@{$params{pins}}) {
+ $pin->[3] ||= '';
+ push @pins, "[ $pin->[0], $pin->[1], '$pin->[2]', '$pin->[3]' ]";
}
+ my $pins_js = join(",\n", @pins);
my $out = FixMyStreet::Map::header($q, $params{type});
my $copyright = _('Map contains Ordnance Survey data &copy; Crown copyright and database right 2010. Microsoft');
$out .= <<EOF;
+<input type="hidden" name="latitude" id="fixmystreet.latitude" value="$params{latitude}">
+<input type="hidden" name="longitude" id="fixmystreet.longitude" value="$params{longitude}">
<script type="text/javascript">
var fixmystreet = {
- 'easting': $params{easting},
- 'northing': $params{northing}
+ 'latitude': $params{latitude},
+ 'longitude': $params{longitude},
+ 'pins': [ $pins_js ]
}
</script>
<div id="map_box">
@@ -55,17 +62,4 @@ EOF
return $out;
}
-sub display_map_end {
- my ($type) = @_;
- my $out = '</div>';
- $out .= '</form>' if ($type);
- return $out;
-}
-
-sub display_pin {
-}
-
-sub map_pins {
-}
-
1;
diff --git a/perllib/FixMyStreet/Map/Google.pm b/perllib/FixMyStreet/Map/Google.pm
index 7a314efad..35896108b 100644
--- a/perllib/FixMyStreet/Map/Google.pm
+++ b/perllib/FixMyStreet/Map/Google.pm
@@ -6,10 +6,9 @@
# Copyright (c) 2010 UK Citizens Online Democracy. All rights reserved.
# Email: matthew@mysociety.org; WWW: http://www.mysociety.org/
-package FixMyStreet::Map;
+package FixMyStreet::Map::Google;
use strict;
-use mySociety::GeoUtil;
use mySociety::Web qw(ent);
sub header_js {
@@ -27,21 +26,27 @@ sub header_js {
# PINS is array of pins to show, location and colour
# PRE/POST are HTML to show above/below map
sub display_map {
- my ($q, %params) = @_;
+ my ($self, $q, %params) = @_;
$params{pre} ||= '';
$params{post} ||= '';
+ my @pins;
foreach my $pin (@{$params{pins}}) {
+ $pin->[3] ||= '';
+ push @pins, "[ $pin->[0], $pin->[1], '$pin->[2]', '$pin->[3]' ]";
}
+ my $pins_js = join(",\n", @pins);
my $out = FixMyStreet::Map::header($q, $params{type});
- my ($lat, $lon) = mySociety::GeoUtil::national_grid_to_wgs84($params{easting}, $params{northing}, 'G');
my $copyright = _('Map contains Ordnance Survey data &copy; Crown copyright and database right 2010.');
$out .= <<EOF;
+<input type="hidden" name="latitude" id="fixmystreet.latitude" value="$params{latitude}">
+<input type="hidden" name="longitude" id="fixmystreet.longitude" value="$params{longitude}">
<script type="text/javascript">
var fixmystreet = {
- 'lat': $lat,
- 'lon': $lon
+ 'latitude': $params{latitude},
+ 'longitude': $params{longitude},
+ 'pins': [ $pins_js ]
}
</script>
<div id="map_box">
@@ -55,17 +60,4 @@ EOF
return $out;
}
-sub display_map_end {
- my ($type) = @_;
- my $out = '</div>';
- $out .= '</form>' if ($type);
- return $out;
-}
-
-sub display_pin {
-}
-
-sub map_pins {
-}
-
1;
diff --git a/perllib/FixMyStreet/Map/OSM.pm b/perllib/FixMyStreet/Map/OSM.pm
index 7953d16e2..b930a4e4d 100644
--- a/perllib/FixMyStreet/Map/OSM.pm
+++ b/perllib/FixMyStreet/Map/OSM.pm
@@ -6,18 +6,25 @@
# Copyright (c) 2010 UK Citizens Online Democracy. All rights reserved.
# Email: matthew@mysociety.org; WWW: http://www.mysociety.org/
-package FixMyStreet::Map;
+package FixMyStreet::Map::OSM;
use strict;
-use mySociety::Web qw(ent);
+use Math::Trig;
+use mySociety::Web qw(ent NewURL);
+use Utils;
sub header_js {
return '
<script type="text/javascript" src="/jslib/OpenLayers-2.10/OpenLayers.js"></script>
+<script type="text/javascript" src="/js/map-OpenLayers.js"></script>
<script type="text/javascript" src="/js/map-OpenStreetMap.js"></script>
';
}
+sub map_type {
+ return 'OpenLayers.Layer.OSM.Mapnik';
+}
+
# display_map Q PARAMS
# PARAMS include:
# latitude, longitude for the centre point of the map
@@ -26,33 +33,68 @@ sub header_js {
# PINS is array of pins to show, location and colour
# PRE/POST are HTML to show above/below map
sub display_map {
- my ($q, %params) = @_;
+ my ($self, $q, %params) = @_;
$params{pre} ||= '';
$params{post} ||= '';
+ # Map centre may be overridden in the query string
+ $params{latitude} = Utils::truncate_coordinate($q->param('lat')+0)
+ if defined $q->param('lat');
+ $params{longitude} = Utils::truncate_coordinate($q->param('lon')+0)
+ if defined $q->param('lon');
+
+ my $zoom = defined $q->param('zoom') ? $q->param('zoom') : 2;
+ my $zoom_act = 14 + $zoom;
+ my ($x_tile, $y_tile) = latlon_to_tile_with_adjust($params{latitude}, $params{longitude}, $zoom_act);
+
+ my $tl = ($x_tile-1) . "/" . ($y_tile-1);
+ my $tr = "$x_tile/" . ($y_tile-1);
+ my $bl = ($x_tile-1) . "/$y_tile";
+ my $br = "$x_tile/$y_tile";
+ my $tl_src = "http://a.tile.openstreetmap.org/$zoom_act/$tl.png";
+ my $tr_src = "http://b.tile.openstreetmap.org/$zoom_act/$tr.png";
+ my $bl_src = "http://c.tile.openstreetmap.org/$zoom_act/$bl.png";
+ my $br_src = "http://tile.openstreetmap.org/$zoom_act/$br.png";
+ map { s{/}{.} } ($tl, $tr, $bl, $br);
+
my @pins;
+ my $pins = '';
foreach my $pin (@{$params{pins}}) {
$pin->[3] ||= '';
push @pins, "[ $pin->[0], $pin->[1], '$pin->[2]', '$pin->[3]' ]";
+ $pins .= display_pin($q, $pin, $x_tile, $y_tile, $zoom_act);
}
- my $pins = join(",\n", @pins);
+ my $pins_js = join(",\n", @pins);
+ my $img_type;
+ if ($params{type}) {
+ $img_type = '<input type="image"';
+ } else {
+ $img_type = '<img';
+ }
my $out = FixMyStreet::Map::header($q, $params{type});
- my $copyright = _('Map &copy; <a href="http://www.openstreetmap.org/">OpenStreetMap</a> and contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>');
+ my $copyright = _('Map &copy; <a id="osm_link" href="http://www.openstreetmap.org/">OpenStreetMap</a> and contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>');
+ my $compass = compass($q, $x_tile, $y_tile, $zoom);
+ my $map_type = $self->map_type();
$out .= <<EOF;
<input type="hidden" name="latitude" id="fixmystreet.latitude" value="$params{latitude}">
<input type="hidden" name="longitude" id="fixmystreet.longitude" value="$params{longitude}">
+<input type="hidden" name="zoom" value="$zoom">
<script type="text/javascript">
var fixmystreet = {
'latitude': $params{latitude},
'longitude': $params{longitude},
- 'pins': [ $pins ],
- 'map_type': OpenLayers.Layer.OSM.Mapnik
+ 'pins': [ $pins_js ],
+ 'map_type': $map_type
}
</script>
<div id="map_box">
$params{pre}
- <div id="map"></div>
+ <div id="map"><noscript>
+ <div id="drag">$img_type alt="NW map tile" id="t2.2" name="tile_$tl" src="$tl_src" style="top:0; left:0;">$img_type alt="NE map tile" id="t2.3" name="tile_$tr" src="$tr_src" style="top:0px; left:256px;"><br>$img_type alt="SW map tile" id="t3.2" name="tile_$bl" src="$bl_src" style="top:256px; left:0;">$img_type alt="SE map tile" id="t3.3" name="tile_$br" src="$br_src" style="top:256px; left:256px;"></div>
+ <div id="pins">$pins</div>
+ $compass
+ </noscript></div>
<p id="copyright">$copyright</p>
$params{post}
</div>
@@ -61,17 +103,123 @@ EOF
return $out;
}
-sub display_map_end {
- my ($type) = @_;
- my $out = '</div>';
- $out .= '</form>' if ($type);
+sub display_pin {
+ my ($q, $pin, $x_tile, $y_tile, $zoom) = @_;
+
+ my ($px, $py) = latlon_to_px($pin->[0], $pin->[1], $x_tile, $y_tile, $zoom);
+
+ my $num = '';
+ my $host = Page::base_url_with_lang($q, undef);
+ my %cols = (red=>'R', green=>'G', blue=>'B', purple=>'P');
+ my $out = '<img border="0" class="pin" src="' . $host . '/i/pin' . $cols{$pin->[2]}
+ . $num . '.gif" alt="' . _('Problem') . '" style="top:' . ($py-59)
+ . 'px; left:' . ($px) . 'px; position: absolute;">';
+ return $out unless $pin->[3];
+ my $cobrand = Page::get_cobrand($q);
+ my $url = Cobrand::url($cobrand, NewURL($q, -url => '/report/' . $pin->[3]), $q);
+ # XXX Would like to include title here in title=""
+ $out = '<a href="' . $url . '">' . $out . '</a>';
return $out;
}
-sub display_pin {
+# Given a lat/lon, convert it to OSM tile co-ordinates (precise).
+sub latlon_to_tile($$$) {
+ my ($lat, $lon, $zoom) = @_;
+ my $x_tile = ($lon + 180) / 360 * 2**$zoom;
+ my $y_tile = (1 - log(tan(deg2rad($lat)) + sec(deg2rad($lat))) / pi) / 2 * 2**$zoom;
+ return ( $x_tile, $y_tile );
+}
+
+# Given a lat/lon, convert it to OSM tile co-ordinates (nearest actual tile,
+# adjusted so the point will be near the centre of a 2x2 tiled map).
+sub latlon_to_tile_with_adjust($$$) {
+ my ($lat, $lon, $zoom) = @_;
+ my ($x_tile, $y_tile) = latlon_to_tile($lat, $lon, $zoom);
+
+ # Try and have point near centre of map
+ if ($x_tile - int($x_tile) > 0.5) {
+ $x_tile += 1;
+ }
+ if ($y_tile - int($y_tile) > 0.5) {
+ $y_tile += 1;
+ }
+
+ return ( int($x_tile), int($y_tile) );
+}
+
+sub tile_to_latlon {
+ my ($x, $y, $zoom) = @_;
+ my $n = 2 ** $zoom;
+ my $lon = $x / $n * 360 - 180;
+ my $lat = rad2deg(atan(sinh(pi * (1 - 2 * $y / $n))));
+ return ( $lat, $lon );
+}
+
+# Given a lat/lon, convert it to pixel co-ordinates from the top left of the map
+sub latlon_to_px($$$$$) {
+ my ($lat, $lon, $x_tile, $y_tile, $zoom) = @_;
+ my ($pin_x_tile, $pin_y_tile) = latlon_to_tile($lat, $lon, $zoom);
+ my $pin_x = tile_to_px($pin_x_tile, $x_tile);
+ my $pin_y = tile_to_px($pin_y_tile, $y_tile);
+ return ($pin_x, $pin_y);
+}
+
+# Convert tile co-ordinates to pixel co-ordinates from top left of map
+# C is centre tile reference of displayed map
+sub tile_to_px {
+ my ($p, $c) = @_;
+ $p = 256 * ($p - $c + 1);
+ $p = int($p + .5 * ($p <=> 0));
+ return $p;
}
-sub map_pins {
+sub click_to_tile {
+ my ($pin_tile, $pin) = @_;
+ $pin -= 256 while $pin > 256;
+ $pin += 256 while $pin < 0;
+ return $pin_tile + $pin / 256;
+}
+
+# Given some click co-ords (the tile they were on, and where in the
+# tile they were), convert to WGS84 and return.
+sub click_to_wgs84 {
+ my ($self, $q, $pin_tile_x, $pin_x, $pin_tile_y, $pin_y) = @_;
+ my $tile_x = click_to_tile($pin_tile_x, $pin_x);
+ my $tile_y = click_to_tile($pin_tile_y, $pin_y);
+ my $zoom = 14 + (defined $q->param('zoom') ? $q->param('zoom') : 2);
+ my ($lat, $lon) = tile_to_latlon($tile_x, $tile_y, $zoom);
+ return ( $lat, $lon );
+}
+
+sub compass ($$$$) {
+ my ( $q, $x, $y, $zoom ) = @_;
+
+ my ($lat, $lon) = map { Utils::truncate_coordinate($_) } tile_to_latlon($x, $y-1, $zoom+14);
+ my $north = NewURL( $q, lat => $lat, lon => $lon, zoom => $zoom );
+ ($lat, $lon) = map { Utils::truncate_coordinate($_) } tile_to_latlon($x, $y+1, $zoom+14);
+ my $south = NewURL( $q, lat => $lat, lon => $lon, zoom => $zoom );
+ ($lat, $lon) = map { Utils::truncate_coordinate($_) } tile_to_latlon($x-1, $y, $zoom+14);
+ my $west = NewURL( $q, lat => $lat, lon => $lon, zoom => $zoom );
+ ($lat, $lon) = map { Utils::truncate_coordinate($_) } tile_to_latlon($x+1, $y, $zoom+14);
+ my $east = NewURL( $q, lat => $lat, lon => $lon, zoom => $zoom );
+ ($lat, $lon) = map { Utils::truncate_coordinate($_) } tile_to_latlon($x, $y, $zoom+14);
+ my $zoom_in = $zoom < 3 ? NewURL( $q, lat => $lat, lon => $lon, zoom => $zoom+1 ) : '#';
+ my $zoom_out = $zoom > 0 ? NewURL( $q, lat => $lat, lon => $lon, zoom => $zoom-1 ) : '#';
+ my $world = NewURL( $q, lat => $lat, lon => $lon, zoom => 0 );
+
+ #my $host = Page::base_url_with_lang( $q, undef );
+ my $dir = "/jslib/OpenLayers-2.10/img";
+ return <<EOF;
+<div style="position: absolute; left: 4px; top: 4px; z-index: 1007;" class="olControlPanZoom olControlNoSelect" unselectable="on">
+ <div style="position: absolute; left: 13px; top: 4px; width: 18px; height: 18px;"><a href="$north"><img style="position: relative; width: 18px; height: 18px;" src="$dir/north-mini.png" border="0"></a></div>
+ <div style="position: absolute; left: 4px; top: 22px; width: 18px; height: 18px;"><a href="$west"><img style="position: relative; width: 18px; height: 18px;" src="$dir/west-mini.png" border="0"></a></div>
+ <div style="position: absolute; left: 22px; top: 22px; width: 18px; height: 18px;"><a href="$east"><img style="position: relative; width: 18px; height: 18px;" src="$dir/east-mini.png" border="0"></a></div>
+ <div style="position: absolute; left: 13px; top: 40px; width: 18px; height: 18px;"><a href="$south"><img style="position: relative; width: 18px; height: 18px;" src="$dir/south-mini.png" border="0"></a></div>
+ <div style="position: absolute; left: 13px; top: 63px; width: 18px; height: 18px;"><a href="$zoom_in"><img style="position: relative; width: 18px; height: 18px;" src="$dir/zoom-plus-mini.png" border="0"></a></div>
+ <div style="position: absolute; left: 13px; top: 81px; width: 18px; height: 18px;"><a href="$world"><img style="position: relative; width: 18px; height: 18px;" src="$dir/zoom-world-mini.png" border="0"></a></div>
+ <div style="position: absolute; left: 13px; top: 99px; width: 18px; height: 18px;"><a href="$zoom_out"><img style="position: relative; width: 18px; height: 18px;" src="$dir/zoom-minus-mini.png" border="0"></a></div>
+</div>
+EOF
}
1;
diff --git a/perllib/FixMyStreet/Map/OSM/CycleMap.pm b/perllib/FixMyStreet/Map/OSM/CycleMap.pm
index 01c51acf4..06b07ae20 100644
--- a/perllib/FixMyStreet/Map/OSM/CycleMap.pm
+++ b/perllib/FixMyStreet/Map/OSM/CycleMap.pm
@@ -6,66 +6,13 @@
# Copyright (c) 2010 UK Citizens Online Democracy. All rights reserved.
# Email: matthew@mysociety.org; WWW: http://www.mysociety.org/
-package FixMyStreet::Map;
+package FixMyStreet::Map::OSM::CycleMap;
+use base 'FixMyStreet::Map::OSM';
use strict;
-use mySociety::Web qw(ent);
-sub header_js {
- return '
-<script type="text/javascript" src="http://openlayers.org/api/OpenLayers.js"></script>
-<script type="text/javascript" src="/js/map-OpenStreetMap.js"></script>
-<script type="text/javascript" src="/js/OpenLayers.Projection.OrdnanceSurvey.js"></script>
-';
-}
-
-# display_map Q PARAMS
-# PARAMS include:
-# EASTING, NORTHING for the centre point of the map
-# TYPE is 1 if the map is clickable, 2 if clickable and has a form upload,
-# 0 if not clickable
-# PINS is array of pins to show, location and colour
-# PRE/POST are HTML to show above/below map
-sub display_map {
- my ($q, %params) = @_;
- $params{pre} ||= '';
- $params{post} ||= '';
-
- foreach my $pin (@{$params{pins}}) {
- }
-
- my $out = FixMyStreet::Map::header($q, $params{type});
- my $copyright = _('Map &copy; <a href="http://www.openstreetmap.org/">OpenStreetMap</a> and contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>');
- $out .= <<EOF;
-<script type="text/javascript">
-var fixmystreet = {
- 'easting': $params{easting},
- 'northing': $params{northing},
- 'map_type': OpenLayers.Layer.OSM.CycleMap
-}
-</script>
-<div id="map_box">
- $params{pre}
- <div id="map"></div>
- <p id="copyright">$copyright</p>
- $params{post}
-</div>
-<div id="side">
-EOF
- return $out;
-}
-
-sub display_map_end {
- my ($type) = @_;
- my $out = '</div>';
- $out .= '</form>' if ($type);
- return $out;
-}
-
-sub display_pin {
-}
-
-sub map_pins {
+sub map_type {
+ return 'OpenLayers.Layer.OSM.CycleMap';
}
1;
diff --git a/perllib/FixMyStreet/Map/OSM/StreetView.pm b/perllib/FixMyStreet/Map/OSM/StreetView.pm
index 08f677d25..9c9a1ac8e 100644
--- a/perllib/FixMyStreet/Map/OSM/StreetView.pm
+++ b/perllib/FixMyStreet/Map/OSM/StreetView.pm
@@ -6,16 +6,16 @@
# Copyright (c) 2010 UK Citizens Online Democracy. All rights reserved.
# Email: matthew@mysociety.org; WWW: http://www.mysociety.org/
-package FixMyStreet::Map;
+package FixMyStreet::Map::OSM::StreetView;
use strict;
use mySociety::Web qw(ent);
sub header_js {
return '
-<script type="text/javascript" src="http://openlayers.org/api/OpenLayers.js"></script>
+<script type="text/javascript" src="/jslib/OpenLayers-2.10/OpenLayers.js"></script>
+<script type="text/javascript" src="/js/map-OpenLayers.js"></script>
<script type="text/javascript" src="/js/map-streetview.js"></script>
-<script type="text/javascript" src="/js/OpenLayers.Projection.OrdnanceSurvey.js"></script>
';
}
@@ -27,20 +27,27 @@ sub header_js {
# PINS is array of pins to show, location and colour
# PRE/POST are HTML to show above/below map
sub display_map {
- my ($q, %params) = @_;
+ my ($self, $q, %params) = @_;
$params{pre} ||= '';
$params{post} ||= '';
+ my @pins;
foreach my $pin (@{$params{pins}}) {
+ $pin->[3] ||= '';
+ push @pins, "[ $pin->[0], $pin->[1], '$pin->[2]', '$pin->[3]' ]";
}
+ my $pins_js = join(",\n", @pins);
my $out = FixMyStreet::Map::header($q, $params{type});
my $copyright = _('Map contains Ordnance Survey data &copy; Crown copyright and database right 2010.');
$out .= <<EOF;
+<input type="hidden" name="latitude" id="fixmystreet.latitude" value="$params{latitude}">
+<input type="hidden" name="longitude" id="fixmystreet.longitude" value="$params{longitude}">
<script type="text/javascript">
var fixmystreet = {
- 'easting': $params{easting},
- 'northing': $params{northing}
+ 'latitude': $params{latitude},
+ 'longitude': $params{longitude},
+ 'pins': [ $pins_js ]
}
</script>
<div id="map_box">
@@ -54,17 +61,4 @@ EOF
return $out;
}
-sub display_map_end {
- my ($type) = @_;
- my $out = '</div>';
- $out .= '</form>' if ($type);
- return $out;
-}
-
-sub display_pin {
-}
-
-sub map_pins {
-}
-
1;
diff --git a/perllib/FixMyStreet/Map/Tilma/OL/1_10k.pm b/perllib/FixMyStreet/Map/Tilma/OL/1_10k.pm
index b1fe0126d..9ae5829c4 100644
--- a/perllib/FixMyStreet/Map/Tilma/OL/1_10k.pm
+++ b/perllib/FixMyStreet/Map/Tilma/OL/1_10k.pm
@@ -6,7 +6,7 @@
# Copyright (c) 2010 UK Citizens Online Democracy. All rights reserved.
# Email: matthew@mysociety.org; WWW: http://www.mysociety.org/
-package FixMyStreet::Map;
+package FixMyStreet::Map::Tilma::OL::1_10k;
use strict;
@@ -18,8 +18,10 @@ use constant TILE_TYPE => '10k-full';
sub header_js {
return '
-<script type="text/javascript" src="http://openlayers.org/api/OpenLayers.js"></script>
+<script type="text/javascript" src="/jslib/OpenLayers-2.10/OpenLayers.js"></script>
+<script type="text/javascript" src="/js/map-OpenLayers.js"></script>
<script type="text/javascript" src="/js/map-tilma-ol.js"></script>
+<script type="text/javascript" src="/js/OpenLayers.Projection.OrdnanceSurvey.js"></script>
';
}
@@ -31,12 +33,16 @@ sub header_js {
# PINS is array of pins to show, location and colour
# PRE/POST are HTML to show above/below map
sub display_map {
- my ($q, %params) = @_;
+ my ($self, $q, %params) = @_;
$params{pre} ||= '';
$params{post} ||= '';
+ my @pins;
foreach my $pin (@{$params{pins}}) {
+ $pin->[3] ||= '';
+ push @pins, "[ $pin->[0], $pin->[1], '$pin->[2]', '$pin->[3]' ]";
}
+ my $pins_js = join(",\n", @pins);
my $out = FixMyStreet::Map::header($q, $params{type});
my $tile_width = TILE_WIDTH;
@@ -44,12 +50,15 @@ sub display_map {
my $sf = SCALE_FACTOR / TILE_WIDTH;
my $copyright = _('&copy; Crown copyright. All rights reserved. Ministry of Justice 100037819&nbsp;2008.');
$out .= <<EOF;
+<input type="hidden" name="latitude" id="fixmystreet.latitude" value="$params{latitude}">
+<input type="hidden" name="longitude" id="fixmystreet.longitude" value="$params{longitude}">
<script type="text/javascript">
var fixmystreet = {
'tilewidth': $tile_width,
'tileheight': $tile_width,
- 'easting': $params{easting},
- 'northing': $params{northing},
+ 'latitude': $params{latitude},
+ 'longitude': $params{longitude},
+ 'pins': [ $pins_js ],
'tile_type': '$tile_type',
'maxResolution': $sf
};
@@ -67,17 +76,4 @@ EOF
return $out;
}
-sub display_map_end {
- my ($type) = @_;
- my $out = '</div>';
- $out .= '</form>' if ($type);
- return $out;
-}
-
-sub display_pin {
-}
-
-sub map_pins {
-}
-
1;
diff --git a/perllib/FixMyStreet/Map/Tilma/OL/StreetView.pm b/perllib/FixMyStreet/Map/Tilma/OL/StreetView.pm
index 7ef372351..7a898b55b 100644
--- a/perllib/FixMyStreet/Map/Tilma/OL/StreetView.pm
+++ b/perllib/FixMyStreet/Map/Tilma/OL/StreetView.pm
@@ -6,7 +6,7 @@
# Copyright (c) 2010 UK Citizens Online Democracy. All rights reserved.
# Email: matthew@mysociety.org; WWW: http://www.mysociety.org/
-package FixMyStreet::Map;
+package FixMyStreet::Map::Tilma::OL::StreetView;
use strict;
@@ -18,8 +18,10 @@ use constant TILE_TYPE => 'streetview';
sub header_js {
return '
-<script type="text/javascript" src="http://openlayers.org/api/OpenLayers.js"></script>
+<script type="text/javascript" src="/jslib/OpenLayers-2.10/OpenLayers.js"></script>
+<script type="text/javascript" src="/js/map-OpenLayers.js"></script>
<script type="text/javascript" src="/js/map-tilma-ol.js"></script>
+<script type="text/javascript" src="/js/OpenLayers.Projection.OrdnanceSurvey.js"></script>
';
}
@@ -31,12 +33,16 @@ sub header_js {
# PINS is array of pins to show, location and colour
# PRE/POST are HTML to show above/below map
sub display_map {
- my ($q, %params) = @_;
+ my ($self, $q, %params) = @_;
$params{pre} ||= '';
$params{post} ||= '';
+ my @pins;
foreach my $pin (@{$params{pins}}) {
+ $pin->[3] ||= '';
+ push @pins, "[ $pin->[0], $pin->[1], '$pin->[2]', '$pin->[3]' ]";
}
+ my $pins_js = join(",\n", @pins);
my $out = FixMyStreet::Map::header($q, $params{type});
my $tile_width = TILE_WIDTH;
@@ -44,12 +50,15 @@ sub display_map {
my $sf = SCALE_FACTOR / TILE_WIDTH;
my $copyright = _('Map contains Ordnance Survey data &copy; Crown copyright and database right 2010.');
$out .= <<EOF;
+<input type="hidden" name="latitude" id="fixmystreet.latitude" value="$params{latitude}">
+<input type="hidden" name="longitude" id="fixmystreet.longitude" value="$params{longitude}">
<script type="text/javascript">
var fixmystreet = {
'tilewidth': $tile_width,
'tileheight': $tile_width,
- 'easting': $params{easting},
- 'northing': $params{northing},
+ 'latitude': $params{latitude},
+ 'longitude': $params{longitude},
+ 'pins': [ $pins_js ],
'tile_type': '$tile_type',
'maxResolution': $sf
};
@@ -65,17 +74,4 @@ EOF
return $out;
}
-sub display_map_end {
- my ($type) = @_;
- my $out = '</div>';
- $out .= '</form>' if ($type);
- return $out;
-}
-
-sub display_pin {
-}
-
-sub map_pins {
-}
-
1;
diff --git a/perllib/FixMyStreet/Map/Tilma/Original.pm b/perllib/FixMyStreet/Map/Tilma/Original.pm
index b6d24fd6a..0af6ed277 100644
--- a/perllib/FixMyStreet/Map/Tilma/Original.pm
+++ b/perllib/FixMyStreet/Map/Tilma/Original.pm
@@ -6,7 +6,7 @@
# Copyright (c) 2010 UK Citizens Online Democracy. All rights reserved.
# Email: matthew@mysociety.org; WWW: http://www.mysociety.org/
-package FixMyStreet::Map;
+package FixMyStreet::Map::Tilma::Original;
use strict;
use LWP::Simple;
@@ -16,6 +16,11 @@ use mySociety::GeoUtil;
use mySociety::Locale;
use mySociety::Web qw(ent NewURL);
use Utils;
+use RABX;
+
+sub TILE_WIDTH() { return $FixMyStreet::Map::map_class->tile_width; }
+sub SCALE_FACTOR() { return $FixMyStreet::Map::map_class->scale_factor; }
+sub TILE_TYPE() { return $FixMyStreet::Map::map_class->tile_type; }
sub _ll_to_en {
my ($lat, $lon) = @_;
@@ -35,13 +40,13 @@ sub header_js {
# 0 if not clickable
# PINS is array of pins to show, location and colour
# PRE/POST are HTML to show above/below map
-sub _display_map {
- my ($q, %params) = @_;
+sub display_map {
+ my ($self, $q, %params) = @_;
$params{pre} ||= '';
$params{post} ||= '';
my $mid_point = TILE_WIDTH; # Map is 2 TILE_WIDTHs in size, square.
- if ($q->{site} eq 'barnet') { # Map is c. 380px wide
- $mid_point = 189;
+ if (my $mp = Cobrand::tilma_mid_point(Page::get_cobrand($q))) {
+ $mid_point = $mp;
}
# convert map center point to easting, northing
@@ -62,13 +67,13 @@ sub _display_map {
($input{x}) = $input{x} =~ /^(\d+)/; $input{x} ||= 0;
($input{y}) = $input{y} =~ /^(\d+)/; $input{y} ||= 0;
- my ($x, $y, $px, $py) = FixMyStreet::Map::os_to_px_with_adjust($q, $params{easting}, $params{northing}, $input{x}, $input{y});
+ my ($x, $y, $px, $py) = os_to_px_with_adjust($q, $params{easting}, $params{northing}, $input{x}, $input{y});
my $pins = '';
foreach my $pin (@{$params{pins}}) {
- my $pin_x = FixMyStreet::Map::os_to_px($pin->[0], $x);
- my $pin_y = FixMyStreet::Map::os_to_px($pin->[1], $y, 1);
- $pins .= FixMyStreet::Map::display_pin($q, $pin_x, $pin_y, $pin->[2]);
+ my $pin_x = os_to_px($pin->[0], $x);
+ my $pin_y = os_to_px($pin->[1], $y, 1);
+ $pins .= display_pin($q, $pin_x, $pin_y, $pin->[2]);
}
$px = defined($px) ? $mid_point - $px : 0;
@@ -98,6 +103,8 @@ sub _display_map {
$out .= <<EOF;
<input type="hidden" name="x" id="formX" value="$x">
<input type="hidden" name="y" id="formY" value="$y">
+<input type="hidden" name="latitude" value="$params{latitude}">
+<input type="hidden" name="longitude" value="$params{longitude}">
EOF
$img_type = '<input type="image"';
} else {
@@ -126,9 +133,9 @@ $params{pre}
<div id="pins">$pins</div>
</div>
EOF
- $out .= '<div id="watermark"></div>' if $params{watermark};
+ $out .= '<div id="watermark"></div>' if $self->watermark();
$out .= compass($q, $x, $y);
- my $copyright = $params{copyright};
+ my $copyright = $self->copyright();
$out .= <<EOF;
</div>
<p id="copyright">$copyright</p>
@@ -139,13 +146,6 @@ EOF
return $out;
}
-sub display_map_end {
- my ($type) = @_;
- my $out = '</div>';
- $out .= '</form>' if ($type);
- return $out;
-}
-
sub display_pin {
my ($q, $px, $py, $col, $num) = @_;
$num = '' if !$num || $num > 9;
@@ -156,45 +156,38 @@ sub display_pin {
. 'px; left:' . ($px) . 'px; position: absolute;">';
return $out unless $_ && $_->{id} && $col ne 'blue';
my $cobrand = Page::get_cobrand($q);
- my $url = Cobrand::url($cobrand, NewURL($q, -retain => 1,
- -url => '/report/' . $_->{id},
- pc => undef,
- x => undef,
- y => undef,
- sx => undef,
- sy => undef,
- all_pins => undef,
- no_pins => undef), $q);
+ my $url = Cobrand::url($cobrand, NewURL($q, -url => '/report/' . $_->{id}), $q);
$out = '<a title="' . ent($_->{title}) . '" href="' . $url . '">' . $out . '</a>';
return $out;
}
sub map_pins {
- my ($q, $x, $y, $sx, $sy, $interval) = @_;
+ my ($self, $q, $x, $y, $sx, $sy, $interval) = @_;
- my $e = FixMyStreet::Map::tile_to_os($x);
- my $n = FixMyStreet::Map::tile_to_os($y);
+ my $e = tile_to_os($x);
+ my $n = tile_to_os($y);
+ my ( $lat, $lon ) = Utils::convert_en_to_latlon( $e, $n );
my ( $around_map, $around_map_list, $nearby, $dist ) =
- FixMyStreet::Map::map_features_easting_northing( $q, $e, $n, $interval );
+ FixMyStreet::Map::map_features( $q, $lat, $lon, $interval );
my $pins = '';
foreach (@$around_map) {
( $_->{easting}, $_->{northing} ) =
_ll_to_en( $_->{latitude}, $_->{longitude} );
- my $px = FixMyStreet::Map::os_to_px($_->{easting}, $sx);
- my $py = FixMyStreet::Map::os_to_px($_->{northing}, $sy, 1);
+ my $px = os_to_px($_->{easting}, $sx);
+ my $py = os_to_px($_->{northing}, $sy, 1);
my $col = $_->{state} eq 'fixed' ? 'green' : 'red';
- $pins .= FixMyStreet::Map::display_pin($q, $px, $py, $col);
+ $pins .= display_pin($q, $px, $py, $col);
}
foreach (@$nearby) {
( $_->{easting}, $_->{northing} ) =
_ll_to_en( $_->{latitude}, $_->{longitude} );
- my $px = FixMyStreet::Map::os_to_px($_->{easting}, $sx);
- my $py = FixMyStreet::Map::os_to_px($_->{northing}, $sy, 1);
+ my $px = os_to_px($_->{easting}, $sx);
+ my $py = os_to_px($_->{northing}, $sy, 1);
my $col = $_->{state} eq 'fixed' ? 'green' : 'red';
- $pins .= FixMyStreet::Map::display_pin($q, $px, $py, $col);
+ $pins .= display_pin($q, $px, $py, $col);
}
return ($pins, $around_map_list, $nearby, $dist);
@@ -236,7 +229,7 @@ Takes the tile x,y and converts to lat, lon.
=cut
sub tile_xy_to_wgs84 {
- my ( $x, $y ) = @_;
+ my ( $self, $x, $y ) = @_;
my $easting = tile_to_os($x);
my $northing = tile_to_os($y);
@@ -258,17 +251,19 @@ sub click_to_tile {
# tile they were), convert to OSGB36 and return.
sub click_to_os {
my ($pin_tile_x, $pin_x, $pin_tile_y, $pin_y) = @_;
- my $tile_x = FixMyStreet::Map::click_to_tile($pin_tile_x, $pin_x);
- my $tile_y = FixMyStreet::Map::click_to_tile($pin_tile_y, $pin_y, 1);
- my $easting = FixMyStreet::Map::tile_to_os($tile_x);
- my $northing = FixMyStreet::Map::tile_to_os($tile_y);
+ my $tile_x = click_to_tile($pin_tile_x, $pin_x);
+ my $tile_y = click_to_tile($pin_tile_y, $pin_y, 1);
+ my $easting = tile_to_os($tile_x);
+ my $northing = tile_to_os($tile_y);
return ($easting, $northing);
}
# Given some click co-ords (the tile they were on, and where in the
# tile they were), convert to WGS84 and return.
sub click_to_wgs84 {
- my ( $easting, $northing ) = FixMyStreet::Map::click_to_os(@_);
+ my $self = shift;
+ my $q = shift;
+ my ( $easting, $northing ) = click_to_os(@_);
my ( $lat, $lon ) = mySociety::GeoUtil::national_grid_to_wgs84( $easting, $northing, 'G' );
return ( $lat, $lon );
}
@@ -279,8 +274,8 @@ sub click_to_wgs84 {
sub os_to_px_with_adjust {
my ($q, $easting, $northing, $in_x, $in_y) = @_;
- my $x = FixMyStreet::Map::os_to_tile($easting);
- my $y = FixMyStreet::Map::os_to_tile($northing);
+ my $x = os_to_tile($easting);
+ my $y = os_to_tile($northing);
my $x_tile = $in_x || int($x);
my $y_tile = $in_y || int($y);
@@ -292,20 +287,51 @@ sub os_to_px_with_adjust {
$y_tile += 1;
}
- my $px = FixMyStreet::Map::os_to_px($easting, $x_tile);
- my $py = FixMyStreet::Map::os_to_px($northing, $y_tile, 1);
+ my $px = os_to_px($easting, $x_tile);
+ my $py = os_to_px($northing, $y_tile, 1);
if ($q->{site} eq 'barnet') { # Map is 380px, so might need to adjust
if (!$in_x && $px > 380) {
$x_tile++;
- $px = FixMyStreet::Map::os_to_px($easting, $x_tile);
+ $px = os_to_px($easting, $x_tile);
}
if (!$in_y && $py > 380) {
$y_tile--;
- $py = FixMyStreet::Map::os_to_px($northing, $y_tile, 1);
+ $py = os_to_px($northing, $y_tile, 1);
}
}
return ($x_tile, $y_tile, $px, $py);
}
+sub compass ($$$) {
+ my ( $q, $x, $y ) = @_;
+ my @compass;
+ for ( my $i = $x - 1 ; $i <= $x + 1 ; $i++ ) {
+ for ( my $j = $y - 1 ; $j <= $y + 1 ; $j++ ) {
+ $compass[$i][$j] = NewURL( $q, x => $i, y => $j );
+ }
+ }
+ my $recentre = NewURL($q);
+ my $host = Page::base_url_with_lang( $q, undef );
+ return <<EOF;
+<table cellpadding="0" cellspacing="0" border="0" id="compass">
+<tr valign="bottom">
+<td align="right"><a rel="nofollow" href="${compass[$x-1][$y+1]}"><img src="$host/i/arrow-northwest.gif" alt="NW" width=11 height=11></a></td>
+<td align="center"><a rel="nofollow" href="${compass[$x][$y+1]}"><img src="$host/i/arrow-north.gif" vspace="3" alt="N" width=13 height=11></a></td>
+<td><a rel="nofollow" href="${compass[$x+1][$y+1]}"><img src="$host/i/arrow-northeast.gif" alt="NE" width=11 height=11></a></td>
+</tr>
+<tr>
+<td><a rel="nofollow" href="${compass[$x-1][$y]}"><img src="$host/i/arrow-west.gif" hspace="3" alt="W" width=11 height=13></a></td>
+<td align="center"><a rel="nofollow" href="$recentre"><img src="$host/i/rose.gif" alt="Recentre" width=35 height=34></a></td>
+<td><a rel="nofollow" href="${compass[$x+1][$y]}"><img src="$host/i/arrow-east.gif" hspace="3" alt="E" width=11 height=13></a></td>
+</tr>
+<tr valign="top">
+<td align="right"><a rel="nofollow" href="${compass[$x-1][$y-1]}"><img src="$host/i/arrow-southwest.gif" alt="SW" width=11 height=11></a></td>
+<td align="center"><a rel="nofollow" href="${compass[$x][$y-1]}"><img src="$host/i/arrow-south.gif" vspace="3" alt="S" width=13 height=11></a></td>
+<td><a rel="nofollow" href="${compass[$x+1][$y-1]}"><img src="$host/i/arrow-southeast.gif" alt="SE" width=11 height=11></a></td>
+</tr>
+</table>
+EOF
+}
+
1;
diff --git a/perllib/FixMyStreet/Map/Tilma/Original/1_10k.pm b/perllib/FixMyStreet/Map/Tilma/Original/1_10k.pm
index f97163c68..722df2a46 100644
--- a/perllib/FixMyStreet/Map/Tilma/Original/1_10k.pm
+++ b/perllib/FixMyStreet/Map/Tilma/Original/1_10k.pm
@@ -6,23 +6,23 @@
# Copyright (c) 2010 UK Citizens Online Democracy. All rights reserved.
# Email: matthew@mysociety.org; WWW: http://www.mysociety.org/
-package FixMyStreet::Map;
+package FixMyStreet::Map::Tilma::Original::1_10k;
+use base 'FixMyStreet::Map::Tilma::Original';
use strict;
-use constant TILE_WIDTH => 254;
-use constant TIF_SIZE_M => 5000;
-use constant TIF_SIZE_PX => 7874;
-use constant SCALE_FACTOR => TIF_SIZE_M / (TIF_SIZE_PX / TILE_WIDTH);
-use constant TILE_TYPE => '10k-full';
+sub tile_width { return 254; }
+sub tif_size_m { return 5000; }
+sub tif_size_px { return 7874; }
+sub scale_factor { return tif_size_m() / (tif_size_px() / tile_width()); }
+sub tile_type { return '10k-full'; }
-use FixMyStreet::Map::Tilma::Original;
+sub copyright {
+ return _('&copy; Crown copyright. All rights reserved. Ministry of Justice 100037819&nbsp;2008.');
+}
-sub display_map {
- my ($q, %params) = @_;
- $params{copyright} = _('&copy; Crown copyright. All rights reserved. Ministry of Justice 100037819&nbsp;2008.');
- $params{watermark} = 1;
- return _display_map($q, %params);
+sub watermark {
+ return 1;
}
1;
diff --git a/perllib/FixMyStreet/Map/Tilma/Original/StreetView.pm b/perllib/FixMyStreet/Map/Tilma/Original/StreetView.pm
index 103f4c15c..fe03fdb00 100644
--- a/perllib/FixMyStreet/Map/Tilma/Original/StreetView.pm
+++ b/perllib/FixMyStreet/Map/Tilma/Original/StreetView.pm
@@ -6,22 +6,23 @@
# Copyright (c) 2010 UK Citizens Online Democracy. All rights reserved.
# Email: matthew@mysociety.org; WWW: http://www.mysociety.org/
-package FixMyStreet::Map;
+package FixMyStreet::Map::Tilma::Original::StreetView;
+use base 'FixMyStreet::Map::Tilma::Original';
use strict;
-use constant TILE_WIDTH => 250;
-use constant TIF_SIZE_M => 5000;
-use constant TIF_SIZE_PX => 5000;
-use constant SCALE_FACTOR => TIF_SIZE_M / (TIF_SIZE_PX / TILE_WIDTH);
-use constant TILE_TYPE => 'streetview';
+sub tile_width { return 250; }
+sub tif_size_m { return 5000; }
+sub tif_size_px { return 5000; }
+sub scale_factor { return tif_size_m() / (tif_size_px() / tile_width()); }
+sub tile_type { return 'streetview'; }
-use FixMyStreet::Map::Tilma::Original;
+sub copyright {
+ return _('Map contains Ordnance Survey data &copy; Crown copyright and database right 2010.');
+}
-sub display_map {
- my ($q, %params) = @_;
- $params{copyright} = _('Map contains Ordnance Survey data &copy; Crown copyright and database right 2010.');
- return _display_map($q, %params);
+sub watermark {
+ return 0;
}
1;
diff --git a/perllib/Page.pm b/perllib/Page.pm
index 9819a6e80..797da363d 100644
--- a/perllib/Page.pm
+++ b/perllib/Page.pm
@@ -21,6 +21,7 @@ use File::Slurp;
use HTTP::Date; # time2str
use Image::Magick;
use Image::Size;
+use IO::String;
use POSIX qw(strftime);
use URI::Escape;
use Text::Template;
@@ -52,15 +53,17 @@ my $lastmodified;
sub do_fastcgi {
my ($func, $lm, $binary) = @_;
- binmode(STDOUT, ":utf8") unless $binary;
-
try {
my $W = new mySociety::WatchUpdate();
while (my $q = new mySociety::Web(unicode => 1)) {
next if $lm && $q->Maybe304($lm);
$lastmodified = $lm;
microsite($q);
+ my $str_fh = IO::String->new;
+ my $old_fh = select($str_fh);
&$func($q);
+ select($old_fh) if defined $old_fh;
+ print $binary ? ${$str_fh->string_ref} : encode_utf8(${$str_fh->string_ref});
dbh()->rollback() if $mySociety::DBHandle::conf_ok;
$W->exit_if_changed();
}
@@ -116,6 +119,8 @@ sub microsite {
$lang = 'en-gb' if $host =~ /^en\./;
Cobrand::set_lang_and_domain(get_cobrand($q), $lang, 1);
+ FixMyStreet::Map::set_map_class($q->param('map'));
+
Problems::set_site_restriction($q);
Memcached::set_namespace(mySociety::Config::get('BCI_DB_NAME') . ":");
}
@@ -254,7 +259,9 @@ sub template_include {
return undef unless -e $template_file;
$template = Text::Template->new(
- SOURCE => $template_file,
+ TYPE => 'STRING',
+ # Don't use FILE, because we need to make sure it's Unicode characters
+ SOURCE => decode_utf8(File::Slurp::read_file($template_file)),
DELIMITERS => ['{{', '}}'],
);
return $template->fill_in(HASH => \%params);
@@ -385,12 +392,10 @@ sub error_page ($$) {
}
# send_email TO (NAME) TEMPLATE-NAME PARAMETERS
-# TEMPLATE-NAME is currently one of problem, update, alert, tms
+# TEMPLATE-NAME is a full filename here.
sub send_email {
- my ($q, $recipient_email_address, $name, $thing, %h) = @_;
- my $file_thing = $thing;
- $file_thing = 'empty property' if $q->{site} eq 'emptyhomes' && $thing eq 'problem'; # Needs to be in English
- my $template = "$file_thing-confirm";
+ my ($q, $recipient_email_address, $name, $template, %h) = @_;
+
$template = File::Slurp::read_file("$FindBin::Bin/../templates/emails/$template");
my $to = $name ? [[$recipient_email_address, $name]] : $recipient_email_address;
my $cobrand = get_cobrand($q);
@@ -438,6 +443,19 @@ sub send_email {
);
}
+}
+
+# send_confirmation_email TO (NAME) TEMPLATE-NAME PARAMETERS
+# TEMPLATE-NAME is currently one of problem, update, alert, tms
+sub send_confirmation_email {
+ my ($q, $recipient_email_address, $name, $thing, %h) = @_;
+
+ my $file_thing = $thing;
+ $file_thing = 'empty property' if $q->{site} eq 'emptyhomes' && $thing eq 'problem'; # Needs to be in English
+ my $template = "$file_thing-confirm";
+
+ send_email($q, $recipient_email_address, $name, $template, %h);
+
my ($action, $worry);
if ($thing eq 'problem') {
$action = _('your problem will not be posted');
@@ -462,6 +480,7 @@ if you do not, %s.</p>
<p>(Don't worry &mdash; %s)</p>
EOF
+ my $cobrand = get_cobrand($q);
my %vars = (
action => $action,
worry => $worry,
@@ -536,17 +555,17 @@ sub display_problem_meta_line($$) {
$out .= sprintf(_('%s, reported by %s at %s'), ent($category), ent($problem->{name}), $date_time);
}
} else {
- if ($problem->{service} && $problem->{category} && $problem->{category} ne 'Other' && $problem->{anonymous}) {
+ if ($problem->{service} && $problem->{category} && $problem->{category} ne _('Other') && $problem->{anonymous}) {
$out .= sprintf(_('Reported by %s in the %s category anonymously at %s'), ent($problem->{service}), ent($problem->{category}), $date_time);
- } elsif ($problem->{service} && $problem->{category} && $problem->{category} ne 'Other') {
+ } elsif ($problem->{service} && $problem->{category} && $problem->{category} ne _('Other')) {
$out .= sprintf(_('Reported by %s in the %s category by %s at %s'), ent($problem->{service}), ent($problem->{category}), ent($problem->{name}), $date_time);
} elsif ($problem->{service} && $problem->{anonymous}) {
$out .= sprintf(_('Reported by %s anonymously at %s'), ent($problem->{service}), $date_time);
} elsif ($problem->{service}) {
$out .= sprintf(_('Reported by %s by %s at %s'), ent($problem->{service}), ent($problem->{name}), $date_time);
- } elsif ($problem->{category} && $problem->{category} ne 'Other' && $problem->{anonymous}) {
+ } elsif ($problem->{category} && $problem->{category} ne _('Other') && $problem->{anonymous}) {
$out .= sprintf(_('Reported in the %s category anonymously at %s'), ent($problem->{category}), $date_time);
- } elsif ($problem->{category} && $problem->{category} ne 'Other') {
+ } elsif ($problem->{category} && $problem->{category} ne _('Other')) {
$out .= sprintf(_('Reported in the %s category by %s at %s'), ent($problem->{category}), ent($problem->{name}), $date_time);
} elsif ($problem->{anonymous}) {
$out .= sprintf(_('Reported anonymously at %s'), $date_time);
@@ -667,12 +686,14 @@ sub mapit_check_error {
return _('That postcode was not recognised, sorry.') if $location->{code} =~ /^4/;
return $location->{error};
}
- my $island = $location->{coordsyst};
- if (!$island) {
- return _("Sorry, that appears to be a Crown dependency postcode, which we don't cover.");
- }
- if ($island eq 'I') {
- return _("We do not cover Northern Ireland, I'm afraid, as our licence doesn't include any maps for the region.");
+ if (mySociety::Config::get('COUNTRY') eq 'GB') {
+ my $island = $location->{coordsyst};
+ if (!$island) {
+ return _("Sorry, that appears to be a Crown dependency postcode, which we don't cover.");
+ }
+ if ($island eq 'I') {
+ return _("We do not cover Northern Ireland, I'm afraid, as our licence doesn't include any maps for the region.");
+ }
}
return 0;
}
diff --git a/templates/website/cobrands/barnet/footer b/templates/website/cobrands/barnet/footer
index 0646e6982..a0dbbb1e3 100644
--- a/templates/website/cobrands/barnet/footer
+++ b/templates/website/cobrands/barnet/footer
@@ -1,3 +1,4 @@
+ </div>
<br class="cl">
</div><!-- end content -->
</div><!-- end wrap -->
@@ -9,7 +10,7 @@
<ul>
<li class="section"><a href="/">FixMyStreet</a>
<ul>
- <li class="section">{{ ($ENV{REQUEST_URI} eq '/report/new') ? '<strong>Report a problem</strong>' : '<a href="/report/new">Report a problem</a>' }}</li>
+ <li class="section">{{ ($ENV{REQUEST_URI} eq '/report/new') ? '<strong>Report a problem</strong>' : '<a href="/report/new">Report a problem</a>' }}</li>
<li class="section">{{ ($ENV{REQUEST_URI} eq '/reports/Barnet') ? '<strong>All reports</strong>' : '<a href="/reports/Barnet">All reports</a>' }}</li>
<li class="section">{{ ($ENV{REQUEST_URI} eq '/alert') ? '<strong>Local alerts</strong>' : '<a href="/alert">Local alerts</a>' }}</li>
<li class="section">{{ ($ENV{REQUEST_URI} eq '/faq') ? '<strong>Help</strong>' : '<a href="/faq">Help</a>' }}</li>
diff --git a/templates/website/cobrands/barnet/header b/templates/website/cobrands/barnet/header
index 67619b417..cd274df7b 100644
--- a/templates/website/cobrands/barnet/header
+++ b/templates/website/cobrands/barnet/header
@@ -94,4 +94,5 @@
<div id="wrap">
<div id="content">
+ <div id="mysociety">
diff --git a/templates/website/cobrands/emptyhomes/footer b/templates/website/cobrands/emptyhomes/footer
index f93ad0102..011773e5b 100644
--- a/templates/website/cobrands/emptyhomes/footer
+++ b/templates/website/cobrands/emptyhomes/footer
@@ -1,19 +1,23 @@
</div>
</div>
-<div id="footer">
+<div id="emptyhomes-footer">
<div>
Empty Homes<br>
75 Westminster Bridge Road<br>
-London, SE1 7HS
-<br>
+London<br>
+SE1 7HS<br>
Tel: 020 7921 4450 <br>
Email: <a href="mailto:info&#64;emptyhomes.com">info&#64;emptyhomes.com</a>
</div>
<div>
-In conjunction with, in Wales:<br>
+<i>In conjunction with,</i>
+</div>
+
+<div>
+<i>in Wales:</i><br>
Shelter Cymru<br>
25 Walter Road<br>Swansea
<br>SA1 5NN<br>
@@ -21,12 +25,13 @@ Shelter Cymru<br>
</div>
<div>
-In Scotland:<br>
-Kristen Miller, Scottish Empty Homes Partnership<br>
+<i>in Scotland:</i><br>
+Scottish Empty Homes Partnership<br>
Shelter Scotland<br>
6 South Charlotte Street<br>
Edinburgh EH2 4AW<br>
-Tel: 0344 515 2461
+Tel: 0344 515 2461<br>
+<a href="mailto:EmptyHomes&#64;shelter.org.uk">EmptyHomes&#64;shelter.org.uk</a>
</div>
</div>
diff --git a/templates/website/cobrands/emptyhomes/header b/templates/website/cobrands/emptyhomes/header
index a9ed5ce51..3281430dd 100644
--- a/templates/website/cobrands/emptyhomes/header
+++ b/templates/website/cobrands/emptyhomes/header
@@ -18,8 +18,12 @@
<body>
<div id="header">
-<a href="http://www.emptyhomes.com/"><img border="0" src="/i/eha-logo.jpeg" alt="Empty Homes Agency" width="91" height="71" align="middle"></a>
-<a href="http://www.sheltercymru.org.uk/"><img border="0" src="/i/Sheltercymru47.gif" alt="Shelter Cymru" width="114" height="47" align="middle"></a>
+<a href="http://www.emptyhomes.com/"><img id="eha-logo" border="0" src="/i/eha-logo.jpeg" alt="Empty Homes Agency" width="91" height="71" align="left"></a>
+<div>
+<small><em>in conjunction with</em></small><br>
+<a href="http://www.sheltercymru.org.uk/"><img border="0" src="/i/Sheltercymru47s.png" alt="Shelter Cymru" width="80" height="33" align="bottom"></a>
+<a href="http://scotland.shelter.org.uk/housing_issues/more_homes/empty_homes"><img border="0" src="/i/SEHPlogo-bwS.png" alt="Scottish Empty Homes Partnership" width="131" height="40" align="bottom"></a>
+</div>
</div>
<div id="navigation">
@@ -34,4 +38,4 @@
</div>
<div id="wrapper">
-<div id="content">
+<div id="mysociety">
diff --git a/templates/website/cobrands/fiksgatami/faq-nb b/templates/website/cobrands/fiksgatami/faq-nb
index e69de29bb..e702a5f2f 100644
--- a/templates/website/cobrands/fiksgatami/faq-nb
+++ b/templates/website/cobrands/fiksgatami/faq-nb
@@ -0,0 +1,124 @@
+<h1>Ofte stilte spørsmål</h1>
+<dl>
+ <dt>Hva er FiksGatami?</dt>
+
+ <dd>FiksGataMi er et nettsted for å hjelpe folk til å rapportere
+ problemer, vise, eller diskutere lokale problemer de har funnet i
+ sitt område ved ganske enkelt å finne dem på et kart. Du kan melde
+ problemer uten å tenke på hvilken offentlig myndighet som er
+ ansvarlig for å løse det, det finner FiksGataMi ut for deg.</dd>
+
+ <dt>Hva slags problemer kan jeg rapportere med FiksGataMi?</dt>
+
+ <dd>FiksGataMi er primært for rapportering av ting som
+ er <strong>ødelagt, skadet, dumpet eller trenger å bli reparert,
+ rengjort eller ryddet</strong>. Dette kan for eksempel være:
+
+ <ul>
+ <li>Forlatte kjøretøy</li>
+ <li>Gatelys som ikke virker</li>
+ <li>Plakater eller graffiti</li>
+ <li>Søppel</li>
+ <li>Behov for rengjøring</li>
+ <li>Behov for brøyting</li>
+ <li>Glatt vei eller gangsti</li>
+ </ul>
+ </dd>
+
+ <dt>Hva er FiksGataMi ikke?</dt>
+ <dd>FiksGataMi er ikke en måte å komme i kontakt med offentlig
+ myndighet for alle spørsmål - vennligst bruk FiksGataMi bare for
+ problemer som de ovennevnte.
+
+ <strong>Du må kontakte offentlige myndigheter direkte for
+ problemer som for eksempel</strong>:
+
+ <ul>
+ <li>Saker som haster eller akutt problemer</li>
+ <li>Støyforurensning eller bjeffende hunder</li>
+ <li>Brann og røyk / luktforurensning</li>
+ <li>Endringsforslag til kommune, fylke eller stat</li>
+ <li>Klager over naboene</li>
+ <li>Kriminell aktivitet</li>
+ </ul>
+ </dd>
+
+ <dt>Hvordan bruker jeg nettstedet?</dt>
+ <dd>Når du har angitt et postnummer eller sted, blir du presentert
+ med et kart over det området. Du kan se problemer allerede
+ rapportert i dette området, eller rapporten selv på egen hånd ved
+ å klikke på kartet for plasseringen av problemet.</dd>
+
+ <dt>Hvordan blir saken løst?</dt>
+ <dd>Saken blir meldt til offentlige myndigheter via e-post. Saken
+ blir så behandlet på normal måte. Alternativt kan du diskutere
+ problemet på nettstedet med andre, og da sammen påvirke offentlige
+ myndigheter til å fikse det, eller fikse det direkte selv.</dd>
+
+ <dt>Er det gratis å bruke fiksgatami.no?</dt>
+ <dd>Ja, nettsiden er gratis å bruke. FiksGataMi drives av NUUG,
+ skjønt, hvis du ønsker å gi et bidrag, kan du gjøre det.</dd>
+
+ <dt>Kan jeg bruke FiksGataMi fra min mobil?</dt>
+ <dd>Hvis mobilen har nettleser kan du fint bruke tjenesten fra
+ mobiltelefon. Det jobbes med å skaffe finansiering til å tilpasse
+ iPhone- og Android-apps til norske forhold for å gjøre det enda
+ enklere å rapportere fra smart-telefoner.</dd>
+
+ <dt>Praktisk informasjon</dt>
+ <dd>FiksGataMi er ikke ansvarlig for innholdet og riktigheten av
+ materiale innsendt av brukerne. Vi forbeholder oss retten til å
+ redigere eller fjerne eventuelle problemer eller oppdateringer som
+ vi anser å være upassende fortrinnsvis etter å bli informert av en
+ bruker på nettstedet.</dd>
+
+ <dt>Hvorfor blir ikke mitt stedsnavn funnet?</dt>
+
+ <dd>Tjenesten bruker navnesøk hos Google Maps for å lokalisere
+ steder. Hvis Google Maps har mangler i sin stedsnavndatabase, vil
+ stedet ikke bli funnet eller sende deg til feil plass.
+ Tilsvarende søk på Google Maps (etter f.eks. "Slogvær, Norway")
+ vil også feile. For å fikse det må en ta kontakt med Google.</dd>
+
+</dl>
+
+<h2><a name="privacy"></a>Spørsmål om personvern</h2>
+
+<dl>
+
+ <dt>Vil jeg motta reklame eller annet uønsket epost?</dt>
+ <dd>Det vil ikke forekomme. Vi sender deg en epost hvis det skjer en
+ oppdatering av de problemer du har meldt inn, og vi vil aldri
+ sende deg e-post i forhold til noe annet en de problemene du
+ abonnerer på eller har meldt inn.</dd>
+
+ <dt>Hvem får å se min e-postadresse?</dt>
+ <dd>Hvis du melder inn en sak, lagrer vi på detaljer om saken, vi
+ sender samtidig en melding til kontakten eller kontaktene hos den
+ relevante myndighet som er ansvarlig for området der saken er
+ geografisk lokalisert. Meldingen sendes til offentlig myndighet
+ som følger offentlighetsloven og vil gi enhver innsyn i meldingen
+ og epostadressen etter de gjeldene lover og regler. Vi i
+ FiksGataMi vi ikke under noen omstendighet gi eller selge
+ e-postadressen din til noen andre.</dd>
+
+ <dt>Hvem står bak FiksGataMi?</dt>
+ <dd><p>Foreningen Norwegian Unix User Group (NUUG) står bak og
+ driver FiksGataMi. <a href="http://www.friprog.no/">Nasjonalt
+ kompetansesenter for fri programvare</a> og
+ <a href="http://www.dss.dep.no/">Departementenes
+ Servicesenter</a> bidrar med finansiering av prosjektet.</p>
+
+ <p>Organisasjonen mySociety i England har drevet og utviklet
+ nettstedet FixMyStreet siden 2007. Programvaren for FiksGataMi
+ drives idag basert på den samme programvaren og utvikling
+ foregår som et samarbeid mellom NUUG i Norge og MySociety i
+ England. FiksGataMi er i så måte et internasjonalt prosjekt.</p>
+
+ <p>Programvaren bak dette nettstedet er fri programvare, og er
+ tilgjengelig i hovedsak under GNU Affero GPL
+ programvarelisensen. Du kan laste ned kildekoden og hjelpe oss å
+ utvikle det. Du må gjerne bruke den i egne prosjekter, men du må
+ også gjøre tilgjengelig i kildekoden til slike prosjekter.</p></dd>
+
+ </dl>
diff --git a/templates/website/cobrands/fiksgatami/footer b/templates/website/cobrands/fiksgatami/footer
index 2221d99a8..e78e7d439 100644
--- a/templates/website/cobrands/fiksgatami/footer
+++ b/templates/website/cobrands/fiksgatami/footer
@@ -1,5 +1,5 @@
</div></div>
-<h2 class="v">$navigation</h2>
+<h2 class="v">{{ $navigation }}</h2>
<ul id="navigation">
<li><a href="/">{{ $report }}</a></li>
<li><a href="/reports">{{ $reports }}</a></li>
diff --git a/templates/website/cobrands/fiksgatami/header b/templates/website/cobrands/fiksgatami/header
index cb1396556..41ccabff9 100644
--- a/templates/website/cobrands/fiksgatami/header
+++ b/templates/website/cobrands/fiksgatami/header
@@ -10,14 +10,10 @@
<title>{{ $title }}{{ $site_title }}</title>
<style type="text/css">
@import url("/css/core.css");
- @import url("/css/main.css");
@import url("/cobrands/fiksgatami/css.css");
</style>
- <!--[if LT IE 7]>
- <style type="text/css">@import url("/css/ie6.css");</style>
- <![endif]-->
{{ $rss }}
</head>
<body>
{{ $heading_element_start }}{{ $heading }}{{ $heading_element_end }}
- <div id="wrapper"><div id="content">
+ <div id="wrapper"><div id="mysociety">
diff --git a/templates/website/cobrands/southampton/footer b/templates/website/cobrands/southampton/footer
new file mode 100644
index 000000000..dac5d9c1a
--- /dev/null
+++ b/templates/website/cobrands/southampton/footer
@@ -0,0 +1,25 @@
+ </div>
+ </div>
+
+ <!-- End of main content area -->
+
+
+
+ <!-- Start of footer -->
+
+ <div id="footer">
+ <a href="http://www.southampton.gov.uk/council-partners/accesstoinfo/" class="accessInfo"><img alt="Access to Information" src="/cobrands/southampton/accessInfo.gif" /></a>
+ <ul id="bottomMenu">
+ <li><a href="http://www.southampton.gov.uk/tools/copyright.aspx">Copyright &copy; Southampton City Council 2009</a>|</li>
+ <li><a href="http://www.southampton.gov.uk/tools/privacypolicy.aspx">Privacy</a>|</li>
+ <li><a href="http://www.southampton.gov.uk/tools/disclaimer.aspx">Disclaimer</a>|</li>
+ <li><a href="http://www.southampton.gov.uk/tools/sitestats.aspx">Site Statistics</a>|</li>
+ <li><a href="http://www.southampton.gov.uk/living/emergency-planning/">Emergencies</a></li>
+ </ul>
+ </div>
+
+ <!-- End of footer -->
+
+ </div>
+</body>
+</html>
diff --git a/templates/website/cobrands/southampton/header b/templates/website/cobrands/southampton/header
new file mode 100644
index 000000000..4f47c92e5
--- /dev/null
+++ b/templates/website/cobrands/southampton/header
@@ -0,0 +1,127 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <script type="text/javascript" src="/yui/utilities.js"></script>
+ <script type="text/javascript" src="/js.js"></script>
+ {{ $map_js }}
+ {{ $robots }}
+
+ <title>{{ $title }}{{ $site_title }}</title>
+ <link rel="stylesheet" type="text/css" href="/css/core.css" />
+ <link rel="stylesheet" type="text/css" href="/cobrands/southampton/style.css" />
+ <link rel="stylesheet" type="text/css" href="/cobrands/southampton/css.css" />
+ {{ $rss }}
+</head>
+<body>
+ <ul id="topMenu">
+ <li><a href="/#content">Skip to content</a>|</li>
+ <li><a href="http://www.southampton.gov.uk/tools/accesskeys.aspx">Access keys</a>|</li>
+ <li><a href="http://www.southampton.gov.uk/tools/accessibility.aspx">Accessibility Information</a>|</li>
+ <li><a href="http://app.readspeaker.com/proreader/proreader.php?cid=5386&amp;lang=en_uk&amp;url=http://www.southampton.gov.uk" class="listen" onclick='window.open(this.href+"&amp;selhtml="+escape(selectedString), "prwin", "width=190, height=120, resizable=1, scrollbars=1, screenX=0, screenY=0, left=0, top=0"); return false;'>Listen</a>|</li>
+ <li><a href="http://www.southampton.gov.uk/tools/help.aspx">Site help</a>|</li>
+ <li><a href="http://www.southampton.gov.uk/tools/sitemap.aspx">Site map</a></li>
+ </ul>
+ <div id="wrapper">
+
+ <!-- Start of header -->
+
+ <div id="header">
+ <img class="logo" alt="Southampton City Council Logo" src="/cobrands/southampton/SCClogo.png" />
+ <a class="siteTitle" href="http://www.southampton.gov.uk">Southampton City Council</a>
+ <div id="searchWrap">
+ <form id="frmSearch" method="get" action="http://websearch.southampton.gov.uk/search">
+ <fieldset>
+ <label for="searchbox">Search the site<br /></label>
+ <input class="text" type="text" value="Enter keywords" id="searchbox" name="q"/>
+ <input type="hidden" id="site" name="site" value="SouthamptonOnline"/>
+ <input type="hidden" id="client" name="client" value="SouthamptonOnline"/>
+ <input type="hidden" id="proxystylesheet" name="proxystylesheet" value="SouthamptonOnline"/>
+ <input type="hidden" id="output" name="output" value="xml_no_dtd"/>
+ <input class="button" type="submit" value="search" />
+ </fieldset>
+ </form>
+ <form id="whereILive" method="post" action="http://www.southampton.gov.uk/MySoton/default.aspx">
+ <fieldset>
+ <label for="PostCode">Where I live
+ <img class="moreInfo" src="/cobrands/southampton/information.gif" alt="Find information about where you live" title="Find information about where you live" /><br />
+ </label>
+ <input id="PostCode" name="Postcode" class="text2" type="text" value="Enter street/postcode" />
+ <input class="button" type="submit" value="go" />
+ </fieldset>
+ </form>
+
+ </div>
+ <a class="mctv" href="http://www.southampton.mycounciltv.org"><img src="/cobrands/southampton/mctv.png" alt="Link to MyCouncilTV videos" /></a>
+ <ul id="topNav">
+ <li><a href="http://www.southampton.gov.uk/online/">Do it online</a></li>
+ <li><a href="http://www.southampton.gov.uk/customer-service/">Customer Services</a></li>
+ <li><a href="http://www.southampton.gov.uk/business/">Business</a></li>
+ <li><a href="http://www.southampton.gov.uk/s-environment/">Environment</a></li>
+ <li><a href="http://www.southampton.gov.uk/learning/">Learning</a></li>
+ <li><a href="http://www.southampton.gov.uk/s-leisure/">Leisure</a></li>
+ <li><a href="http://www.southampton.gov.uk/living/">Living</a></li>
+ <li><a href="http://www.southampton.gov.uk/council-partners/">Council/Partners</a></li>
+ <li><a href="http://www.southampton.gov.uk/news-events/">News and events</a></li>
+ <li><a href="http://www.southampton.gov.uk/visitors/">Visitors</a></li>
+ </ul>
+ <p class="atoz">A-Z of Council Services:</p>
+ <ul id="atoz">
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=A">A</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=B">B</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=C">C</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=D">D</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=E">E</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=F">F</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=G">G</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=H">H</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=I">I</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=J">J</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=K">K</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=L">L</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=M">M</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=N">N</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=O">O</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=P">P</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=Q">Q</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=R">R</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=S">S</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=T">T</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=U">U</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=V">V</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=W">W</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=X">X</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=Y">Y</a></li>
+ <li><a href="http://www.southampton.gov.uk/atoz/default.aspx?L=Z">Z</a></li>
+ </ul>
+ <ul id="contacts">
+ <li><a href="http://www.southampton.gov.uk/customer-service/contact/">Contact us</a></li>
+ <li><a href="http://map.southampton.gov.uk/gis/">location and maps</a></li>
+ </ul>
+
+ </div>
+
+ <!-- End of header -->
+
+
+ <!-- Start of menu bar -->
+
+ <div id="menuBar">
+ <ul id="leftMenu">
+ <li class="parent"><a href="/">Fix My Street</a></li>
+ <li class="selected"><a href="/">Report a problem</a></li>
+ <li><a href="/reports/Southampton">All reports</a></li>
+ <li><a href="/alerts">Local alerts</a></li>
+ <li><a href="/faq">Help</a></li>
+ <li><a href="/contact">Contact</a></li>
+ </ul>
+ </div>
+
+
+ <!-- End of menu bar -->
+
+
+ <!-- Start of main content area -->
+
+ <div id="contentArea">
+ <div id="mysociety">
diff --git a/templates/website/faq-en-gb b/templates/website/faq-en-gb
index 0c5fa7aea..117a9bfa7 100755
--- a/templates/website/faq-en-gb
+++ b/templates/website/faq-en-gb
@@ -57,13 +57,19 @@ by a registered charity, though, so if you want to make a contribution, <a
href="https://secure.mysociety.org/donate/">please do</a>.</dd>
<dt>Can I use FixMyStreet on my mobile?</dt>
- <dd>There are two iPhone apps for FixMyStreet, one written by us in 2008 and
- another much more recently by a volunteer, Martin Stephenson. Both are available for
- download on the App Store:
+ <dd><ul>
+ <li><em>iPhone:</em> There are two apps for FixMyStreet, one written by us
+ in 2008 and another much more recently by a volunteer, Martin Stephenson.
+ Both are available for download on the App Store:
<a href="http://itunes.apple.com/gb/app/fixmystreet/id297456545">FixMyStreet</a>,
<a href="http://itunes.apple.com/gb/app/streetreport/id371891859">StreetReport</a>.
- There is an Android app written by a volunteer, Anna Powell-Smith,
- available from the Android Market.
+ <li><em>Android:</em> A volunteer, Anna Powell-Smith, has written an app
+ available from the
+ <a href="https://market.android.com/details?id=com.android.fixmystreet">Android Market</a>.
+ <li><em>Nokia:</em> A volunteer, Thomas Forth, has written an app available from the
+ <a href="http://store.ovi.com/content/107557">Ovi Store</a>.
+ </ul>
+ <p>We also hope to make the website itself much more mobile friendly in the future.</p>
</dd>
<dt>Why do you only cover the countries of Great Britain?</dt>
@@ -107,7 +113,7 @@ dragging an empty square.</dd>
this might mean that you&rsquo;ll need to pan around to figure out where the
problem is if you&rsquo;re not familiar with the area. If you&rsquo;re from the
council then the emailed version of the problem report will contain the
- closest postal address to the pin on the map.</dd>
+ closest road to the pin on the map.</dd>
<dt>This site is great – why aren&rsquo;t you better publicised?</dt>
<dd>As a tiny charity we simply don&rsquo;t have a publicity budget, and we
diff --git a/templates/website/header b/templates/website/header
index 028d05506..b88d9b82c 100644
--- a/templates/website/header
+++ b/templates/website/header
@@ -16,4 +16,4 @@
</head>
<body>
{{ $heading_element_start }}{{ $heading }}{{ $heading_element_end }}
- <div id="wrapper"><div id="content">
+ <div id="wrapper"><div id="mysociety">
diff --git a/web-admin/index.cgi b/web-admin/index.cgi
index b29c290da..62fcfb587 100755
--- a/web-admin/index.cgi
+++ b/web-admin/index.cgi
@@ -187,7 +187,7 @@ sub admin_councils_list ($) {
my $edit_activity = dbh()->selectall_arrayref("select count(*) as c, editor from contacts_history group by editor order by c desc");
if (@$edit_activity) {
print $q->ul(
- map { $q->li( sprintf(_('%d edits by %d'), $_->[0], $_->[1])) } @$edit_activity
+ map { $q->li( sprintf(_('%d edits by %s'), $_->[0], $_->[1])) } @$edit_activity
);
} else {
print $q->p(_('No edits have yet been made.'));
diff --git a/web/alert.cgi b/web/alert.cgi
index dd4676644..208dc756b 100755
--- a/web/alert.cgi
+++ b/web/alert.cgi
@@ -364,7 +364,7 @@ sub alert_list_options {
my $rss_url = Cobrand::url($cobrand, $url, $q);
$out .= 'value="' . $id . '"> <label for="' . $id . '">' . $text
. '</label> <a href="' . $rss_url . '"><img src="/i/feed.png" width="16" height="16"
-title="' . sprintf(_('RSS feed of %s'), $text) . '" alt="' . _('RSS feed') . '" border="0"></a>';
+title="' . sprintf(_('RSS feed of %s'), $text) . '" alt="' . _('RSS feed') . '" border="0"></a></li>';
}
return $out;
}
@@ -605,6 +605,6 @@ sub alert_do_subscribe {
$h{url} = Page::base_url_with_lang($q, undef, 1) . '/A/'
. mySociety::AuthToken::store('alert', { id => $alert_id, type => 'subscribe', email => $email } );
dbh()->commit();
- return Page::send_email($q, $email, undef, 'alert', %h);
+ return Page::send_confirmation_email($q, $email, undef, 'alert', %h);
}
diff --git a/web/cobrands/barnet/css/layout.css b/web/cobrands/barnet/css/layout.css
index b66f957b6..1445ff419 100644
--- a/web/cobrands/barnet/css/layout.css
+++ b/web/cobrands/barnet/css/layout.css
@@ -1,13 +1,13 @@
/* FixMyStreet additions */
/* Smaller map */
-#map_box {
+#mysociety #map_box {
width: 380px;
}
-#map, #drag {
+#mysociety #map, #mysociety #drag {
width: 378px;
height: 378px;
}
-#watermark {
+#mysociety #watermark {
background: url("/i/mojwatermark-378.png");
height: 84px;
width: 171px;
@@ -16,7 +16,7 @@
right: 0;
}
-p#fixed, p#unknown {
+#mysociety p#fixed, #mysociety p#unknown {
margin-right: 400px;
width: auto;
}
diff --git a/web/cobrands/fiksgatami/css.css b/web/cobrands/fiksgatami/css.css
index 4db2a94e6..54513fb34 100644
--- a/web/cobrands/fiksgatami/css.css
+++ b/web/cobrands/fiksgatami/css.css
@@ -1,64 +1,152 @@
-#front_stats div {
- width: 6.5em;
+#mysociety #front_stats div {
+ width: 6.5em;
+}
+#mysociety label {
+ width: 6em;
+}
+#mysociety #fieldset div.checkbox, #mysociety #problem_submit {
+ padding-left: 6.5em;
}
body {
- font-family: Helmet, Freesans, "Helvetica Neue", Arial, sans-serif;
+ font-family: "Gill Sans", "Gill Sans MT", Helvetica, Arial, sans-serif;
+ margin: 0;
+ padding: 0;
}
-a:link {
- color: #215d93;
-}
-a:visited {
- color: #518dc3;
+h1 {
+ margin: 0;
+ font-size: 175%;
}
-a:hover, a:active {
- color: #cc0000;
+
+h2 {
+ font-size: 140%;
}
-blockquote {
- border-left: solid 4px #1a4f7f;
+select, input, textarea {
+ font-size: 99%;
}
-.a {
- color: #000000;
- background-color: #a9cff1;
+#mysociety a.unsuitable-report {
+ font-size: small;
+}
+#mysociety blockquote {
+ border-left: solid 4px #1a4f7f;
+}
+#mysociety .a {
+ color: #000000;
+ background-color: #a9cff1;
+}
+#mysociety #postcodeForm {
+ background-color: #99bfe1;
+}
+#mysociety #front_stats div {
+ background-color: #99bfe1;
}
#header {
- padding: 0.1em 0.5em 0.15em;
- border-bottom: solid 2px #1a4f7f;
- background-color: #99bfe1;
- color: #1a4f7f;
+ font-size: 200%;
+ font-weight: bold;
+ border-bottom: solid 2px #1a4f7f;
+ margin: 0;
+ padding: 0.15em 0.5em;
+ background-color: #99bfe1;
+ color: #1a4f7f;
+}
+#header a:link, #header a:visited {
+ color: #1a4f7f;
+ background-color: #99bfe1;
+ text-decoration: none;
+}
+#header a:active, #header a:hover {
+ text-decoration: underline;
}
#my {
- color: #0a3f6f;
- background-color: #99bfe1;
+ color: #0a3f6f;
+ background-color: #99bfe1;
}
-#header a:link, #header a:visited {
- color: #1a4f7f;
- background-color: #99bfe1;
+#mysociety {
+ width: 100%;
+ /* Must specify a width or IE goes crazy wrong! */
+ position: relative;
+ margin: 0 auto;
+ max-width: 60em;
+}
+
+/* Can't put the margin in #mysociety because of above IE craziness */
+#wrapper {
+ margin: 2em;
}
+.v {
+ display: none;
+}
+
+#navigation {
+ position: absolute;
+ top: 1em;
+ right: 1em;
+ padding: 0;
+ margin: 0;
+ list-style-type: none;
+}
+#navigation li {
+ display: inline;
+ padding: 0;
+ margin: 0;
+}
+#navigation a {
+ display: -moz-inline-box;
+ display: inline-block;
+ padding: 0.4em 1em;
+}
#navigation a:link, #navigation a:visited {
- color: #1a4f7f;
+ color: #1a4f7f;
}
#navigation a:hover, #navigation a:active {
- background-color: #1a4f7f;
- color: #99bfe1;
+ background-color: #1a4f7f;
+ color: #99bfe1;
+}
+
+#nav_new a {
+ background-image: url("/i/new.png");
+ background-repeat: no-repeat;
+ background-position: 100% 0;
+}
+
+#logo {
+ border: none;
+ position: absolute;
+ top: 3.3em;
+ right: 10px;
}
#footer {
- border-top: solid 1px #1a4f7f;
+ clear: both;
+ text-align: right;
+ font-size: 83%;
+ border-top: solid 1px #1a4f7f;
+ display: table;
+ margin: 2em 0 1em auto;
+ padding: 2px 4px;
}
-#postcodeForm {
- background-color: #99bfe1;
+body {
+ font-family: Helmet, Freesans, "Helvetica Neue", Arial, sans-serif;
}
-#front_stats div {
- background-color: #99bfe1;
+a:link {
+ color: #215d93;
+}
+a:visited {
+ color: #518dc3;
+}
+a:hover, a:active {
+ color: #cc0000;
}
+#header {
+ padding: 0.1em 0.5em 0.15em;
+}
diff --git a/web/cobrands/fiksgatami/css.scss b/web/cobrands/fiksgatami/css.scss
new file mode 100644
index 000000000..aa09b024a
--- /dev/null
+++ b/web/cobrands/fiksgatami/css.scss
@@ -0,0 +1,41 @@
+$header_back: #99bfe1;
+$header_back_lighter: #a9cff1;
+$header_colour: #1a4f7f;
+$header_darker: #0a3f6f;
+
+// Overrides of core.css
+
+#mysociety {
+
+ #front_stats div {
+ width: 6.5em;
+ }
+
+ label {
+ width: 6em;
+ }
+
+ #fieldset div.checkbox, #problem_submit {
+ padding-left: 6.5em;
+ }
+
+}
+
+@import "../../css/_main";
+
+// Overrides of main.css
+
+body {
+ font-family: Helmet, Freesans, "Helvetica Neue", Arial, sans-serif;
+}
+
+a {
+ &:link { color: #215d93; }
+ &:visited { color: #518dc3; }
+ &:hover, &:active { color: #cc0000; }
+}
+
+#header {
+ padding: 0.1em 0.5em 0.15em;
+}
+
diff --git a/web/cobrands/southampton/SCClogo.png b/web/cobrands/southampton/SCClogo.png
new file mode 100644
index 000000000..74a037a8c
--- /dev/null
+++ b/web/cobrands/southampton/SCClogo.png
Binary files differ
diff --git a/web/cobrands/southampton/accessInfo.gif b/web/cobrands/southampton/accessInfo.gif
new file mode 100644
index 000000000..418698ed5
--- /dev/null
+++ b/web/cobrands/southampton/accessInfo.gif
Binary files differ
diff --git a/web/cobrands/southampton/bg-box.gif b/web/cobrands/southampton/bg-box.gif
new file mode 100644
index 000000000..559a5ae00
--- /dev/null
+++ b/web/cobrands/southampton/bg-box.gif
Binary files differ
diff --git a/web/cobrands/southampton/bg-button.gif b/web/cobrands/southampton/bg-button.gif
new file mode 100644
index 000000000..f5f8122dc
--- /dev/null
+++ b/web/cobrands/southampton/bg-button.gif
Binary files differ
diff --git a/web/cobrands/southampton/bg-footer.gif b/web/cobrands/southampton/bg-footer.gif
new file mode 100644
index 000000000..89919c1cd
--- /dev/null
+++ b/web/cobrands/southampton/bg-footer.gif
Binary files differ
diff --git a/web/cobrands/southampton/bg-header.jpg b/web/cobrands/southampton/bg-header.jpg
new file mode 100644
index 000000000..70e0ec46a
--- /dev/null
+++ b/web/cobrands/southampton/bg-header.jpg
Binary files differ
diff --git a/web/cobrands/southampton/bg-input.gif b/web/cobrands/southampton/bg-input.gif
new file mode 100644
index 000000000..267fe9b6b
--- /dev/null
+++ b/web/cobrands/southampton/bg-input.gif
Binary files differ
diff --git a/web/cobrands/southampton/bg-repeat.gif b/web/cobrands/southampton/bg-repeat.gif
new file mode 100644
index 000000000..b68346517
--- /dev/null
+++ b/web/cobrands/southampton/bg-repeat.gif
Binary files differ
diff --git a/web/cobrands/southampton/blue-line.gif b/web/cobrands/southampton/blue-line.gif
new file mode 100644
index 000000000..c7a587ee5
--- /dev/null
+++ b/web/cobrands/southampton/blue-line.gif
Binary files differ
diff --git a/web/cobrands/southampton/bullet.gif b/web/cobrands/southampton/bullet.gif
new file mode 100644
index 000000000..a86ef002b
--- /dev/null
+++ b/web/cobrands/southampton/bullet.gif
Binary files differ
diff --git a/web/cobrands/southampton/bulletActiveSG.gif b/web/cobrands/southampton/bulletActiveSG.gif
new file mode 100644
index 000000000..6f4e3e438
--- /dev/null
+++ b/web/cobrands/southampton/bulletActiveSG.gif
Binary files differ
diff --git a/web/cobrands/southampton/css.css b/web/cobrands/southampton/css.css
new file mode 100644
index 000000000..85f66dcc3
--- /dev/null
+++ b/web/cobrands/southampton/css.css
@@ -0,0 +1,47 @@
+#mysociety #map_box {
+ width: 380px;
+}
+#mysociety #map, #mysociety #drag {
+ width: 378px;
+ height: 378px;
+}
+#mysociety #watermark {
+ background: url("/i/mojwatermark-378.png");
+ height: 84px;
+ width: 171px;
+ position: absolute;
+ bottom: 0;
+ right: 0;
+}
+#mysociety p#fixed, #mysociety p#unknown {
+ margin-right: 400px;
+ width: auto;
+}
+#mysociety h1 {
+ margin: 0;
+ font-size: 175%;
+}
+#mysociety h2 {
+ font-size: 140%;
+}
+#mysociety select, #mysociety input, #mysociety textarea {
+ font-size: 99%;
+}
+#mysociety a.unsuitable-report {
+ font-size: small;
+}
+#mysociety blockquote {
+ border-left: solid 4px #768eb5;
+}
+#mysociety .a {
+ color: #000000;
+ background-color: #e9eef7;
+}
+#mysociety #postcodeForm {
+ background-color: #e9eef7;
+}
+#mysociety #front_stats div {
+ background-color: #e9eef7;
+ width: 6em;
+ padding: 0.5em;
+}
diff --git a/web/cobrands/southampton/css.scss b/web/cobrands/southampton/css.scss
new file mode 100644
index 000000000..57cb95a8f
--- /dev/null
+++ b/web/cobrands/southampton/css.scss
@@ -0,0 +1,67 @@
+$map_width: 378px;
+$background: #E9EEF7;
+$darker: #768EB5;
+
+#mysociety {
+
+ // Smaller map
+
+ #map_box {
+ width: $map_width + 2px;
+ }
+ #map, #drag {
+ width: $map_width;
+ height: $map_width;
+ }
+ #watermark {
+ background: url("/i/mojwatermark-378.png");
+ height: 84px;
+ width: 171px;
+ position: absolute;
+ bottom: 0;
+ right: 0;
+ }
+
+ p#fixed, p#unknown {
+ margin-right: $map_width + 22px;
+ width: auto;
+ }
+
+ // Generics
+
+ h1 {
+ margin: 0;
+ font-size: 175%;
+ }
+ h2 {
+ font-size: 140%;
+ }
+
+ select, input, textarea {
+ font-size: 99%;
+ }
+
+ a.unsuitable-report {
+ font-size: small;
+ }
+
+ blockquote {
+ border-left: solid 4px $darker;
+ }
+
+ .a {
+ color: #000000;
+ background-color: $background;
+ }
+
+ #postcodeForm {
+ background-color: $background;
+ }
+
+ #front_stats div {
+ background-color: $background;
+ width: 6em;
+ padding: 0.5em;
+ }
+
+}
diff --git a/web/cobrands/southampton/ff.png b/web/cobrands/southampton/ff.png
new file mode 100644
index 000000000..ef7d91148
--- /dev/null
+++ b/web/cobrands/southampton/ff.png
Binary files differ
diff --git a/web/cobrands/southampton/forms.png b/web/cobrands/southampton/forms.png
new file mode 100644
index 000000000..4f278e9ae
--- /dev/null
+++ b/web/cobrands/southampton/forms.png
Binary files differ
diff --git a/web/cobrands/southampton/ie6.png b/web/cobrands/southampton/ie6.png
new file mode 100644
index 000000000..d6179fa02
--- /dev/null
+++ b/web/cobrands/southampton/ie6.png
Binary files differ
diff --git a/web/cobrands/southampton/information.gif b/web/cobrands/southampton/information.gif
new file mode 100644
index 000000000..ea2f14bd2
--- /dev/null
+++ b/web/cobrands/southampton/information.gif
Binary files differ
diff --git a/web/cobrands/southampton/line.gif b/web/cobrands/southampton/line.gif
new file mode 100644
index 000000000..fa6ddca0c
--- /dev/null
+++ b/web/cobrands/southampton/line.gif
Binary files differ
diff --git a/web/cobrands/southampton/logo.png b/web/cobrands/southampton/logo.png
new file mode 100644
index 000000000..71bdc9d97
--- /dev/null
+++ b/web/cobrands/southampton/logo.png
Binary files differ
diff --git a/web/cobrands/southampton/mctv.png b/web/cobrands/southampton/mctv.png
new file mode 100644
index 000000000..17f3ecec6
--- /dev/null
+++ b/web/cobrands/southampton/mctv.png
Binary files differ
diff --git a/web/cobrands/southampton/safari.png b/web/cobrands/southampton/safari.png
new file mode 100644
index 000000000..e99547a7f
--- /dev/null
+++ b/web/cobrands/southampton/safari.png
Binary files differ
diff --git a/web/cobrands/southampton/style.css b/web/cobrands/southampton/style.css
new file mode 100644
index 000000000..cd4c0f490
--- /dev/null
+++ b/web/cobrands/southampton/style.css
@@ -0,0 +1,87 @@
+body {font-family:Verdana, Geneva, sans-serif; font-size:62.5%;}
+
+a {text-decoration:none; color:#1c4384; font-weight:bold;}
+
+a:hover {text-decoration:underline;}
+
+p {margin:0 0 10px 0;}
+
+/* ******* Start of Header ******* */
+
+ul#topMenu {width:860px; height:15px; margin:13px auto 3px auto;}
+ul#topMenu li {float:left; list-style-type:none;}
+ul#topMenu a {padding:0 5px 2px 5px; font-size:0.9em; color:#000; font-weight:400;}
+
+#wrapper {width:960px; height:auto; margin:0 auto; background:url(bg-repeat.gif) repeat-y;}
+#header {width:100%; height:176px; background:url(bg-header.jpg) no-repeat; background-position:1px 0px;}
+#header .logo {float:left; width:87px; height:81px; margin:25px 0 17px 46px;}
+#header a.siteTitle {height:27px; width:287px; background:url(logo.png) no-repeat; display:block; font-family:verdana; float:left; margin:60px 0 0 15px; text-indent:-9999px;}
+
+a.mctv {float:right; height:37px; width:104px; margin:15px 7px 0 0;}
+a.mctv img {border:none;}
+
+#searchWrap {width:210px; height:auto; float:right; margin:10px 30px 0 0;}
+#searchWrap form {border:none; padding:0; margin:0 0 10px 0;}
+#searchWrap fieldset {border:none; padding:0; margin:0;}
+#searchWrap label {color:#1b4384; font-weight:700; font-size:1.1em; margin:0; padding:0;}
+#searchWrap input {float:left; background:url(bg-input.gif) repeat-x; margin:3px 0 0 0; line-height:16px; padding:3px 5px 3px 4px;}
+#searchWrap .button {background:url(bg-button.gif) repeat-x; margin:3px 0 0 5px; float:left; height:26px; padding:0 3px 4px 3px; color:#fff; border:none;}
+
+.moreInfo {margin:0 0 -2px 2px;}
+.text {width:109px; color:#999;}
+.text2 {width:137px; color:#999;}
+
+ul#topNav {width:870px; height:17px; background:#1b4384; clear:both; margin:0 auto; padding:3px 0 1px 0;}
+ul#topNav li {float:left; list-style-type:none; background:url(line.gif) no-repeat 0 2px;}
+ul#topNav li:first-child {background:none;}
+ul#topNav li a {color:#ffffff; font-size:1.2em; padding:0 7px 0 8px; font-size:1.2em; font-weight:400;}
+
+p.atoz {float:left; margin:8px 0 0 43px; padding:5px 5px 3px 0; font-size:1.2em; border-bottom:1px solid #E0DBEF;}
+ul#atoz {width:485px; float:left; margin:13px 0 0 0; border-bottom:1px solid #E0DBEF; padding:0 0 1px 0;}
+ul#atoz li {list-style-type:none; display:inline;}
+ul#atoz li a {font-size:13px; font-weight:400;}
+
+ul#contacts {float:right; margin:13px 36px 0 0; padding:0;}
+ul#contacts li {float:left; list-style-type:none; background:url(blue-line.gif) no-repeat 0 2px;}
+ul#contacts li:first-child {background:none;}
+ul#contacts li a {font-size:1.2em; padding:0 8px 0 10px; font-weight:400;}
+
+/* ******* End of Header ******* */
+
+
+
+/* ******* Start of Left Menu Bar ******* */
+
+#menuBar {width:200px; height:auto; float:left; margin:25px 0 0 43px; padding-bottom:25px; clear:both; }
+
+ul#leftMenu {height:auto; width:199px; float:left; background:#e9eef7 url(bg-box.gif) no-repeat -1px 100%; padding:0 0 10px 0; margin:5px 0 0 0; overflow:hidden;}
+ul#leftMenu li {list-style-type:none; width:199px; padding:0;}
+ul#leftMenu li a {display:block; width:100%; line-height:1.5em; padding:3px 10px 3px 32px; font-size:1.2em; font-weight:700;}
+ul#leftMenu li.parent {background:url(bulletActiveSG.gif) no-repeat #768eb5; background-position:10px 11px; color:#fff; padding:3px 0 3px 0;}
+ul#leftMenu li.parent a {color:#fff}
+ul#leftMenu li.selected {background:url(bullet.gif) no-repeat; background-position:10px 8px; color:#fff; padding:0;}
+
+/* ******* End of Left Menu Bar ******* */
+
+
+
+/* ******* Start of Main Content Area ******* */
+
+#contentArea {width:640px; height:auto; float:left; padding-bottom:25px; font-size:1.1em; margin:15px 0 0 0; padding:15px 0 20px 25px;}
+
+/* ******* End of Main Content Area ******* */
+
+
+
+/* ******* Start of Footer ******* */
+
+#footer {width:100%; height:54px; clear:both; background:url(bg-footer.gif) no-repeat;}
+
+a.accessInfo {float:left; height:32px; width:117px; margin:0 10px 0 43px;}
+a.accessInfo img {border:none;}
+
+ul#bottomMenu {float:left; margin:10px 0 0 10px;}
+ul#bottomMenu li {float:left; list-style-type:none;}
+ul#bottomMenu a {padding:0 4px 2px 4px; font-size:0.9em; color:#000; font-weight:400;}
+
+/* ******* End of Footer ******* */
diff --git a/web/confirm.cgi b/web/confirm.cgi
index 8836431ab..cb9f5d4c8 100755
--- a/web/confirm.cgi
+++ b/web/confirm.cgi
@@ -124,7 +124,7 @@ sub ask_questionnaire {
my $qn_thanks = _("Thanks, glad to hear it's been fixed! Could we just ask if you have ever reported a problem to a council before?");
my $yes = _('Yes');
my $no = _('No');
- my $go = _('Go');
+ my $go = _('Submit');
my $form_action = Cobrand::url($cobrand, "/confirm", $q);
my $form_extra_elements = Cobrand::form_elements($cobrand, 'questionnaire', $q);
my $out = <<EOF;
diff --git a/web/css/_main.scss b/web/css/_main.scss
new file mode 100644
index 000000000..44fd82b3b
--- /dev/null
+++ b/web/css/_main.scss
@@ -0,0 +1,139 @@
+// Generics
+
+body {
+ font-family: "Gill Sans", "Gill Sans MT", Helvetica, Arial, sans-serif;
+ margin: 0;
+ padding: 0;
+ // color: #a9aeb0;
+}
+
+h1 {
+ margin: 0;
+ font-size: 175%;
+}
+h2 {
+ font-size: 140%;
+}
+
+select, input, textarea {
+ font-size: 99%;
+}
+
+#mysociety {
+
+ a.unsuitable-report {
+ font-size: small;
+ }
+
+ blockquote {
+ border-left: solid 4px $header_colour;
+ }
+
+ .a {
+ color: #000000;
+ background-color: $header_back_lighter;
+ }
+
+ #postcodeForm {
+ background-color: $header_back;
+ }
+
+ #front_stats div {
+ background-color: $header_back;
+ }
+
+}
+
+// Site layout
+
+#header {
+ font-size: 200%;
+ font-weight: bold;
+ border-bottom: solid 2px $header_colour;
+ margin: 0;
+ padding: 0.15em 0.5em;
+ background-color: $header_back;
+ color: $header_colour;
+
+ a:link, a:visited {
+ color: $header_colour;
+ background-color: $header_back;
+ text-decoration: none;
+ }
+ a:active, a:hover {
+ text-decoration: underline;
+ }
+}
+
+#my {
+ color: $header_darker;
+ background-color: $header_back;
+}
+
+#mysociety {
+ width: 100%; /* Must specify a width or IE goes crazy wrong! */
+ position: relative;
+ margin: 0 auto;
+ max-width: 60em;
+}
+
+/* Can't put the margin in #mysociety because of above IE craziness */
+#wrapper {
+ margin: 2em;
+}
+
+.v {
+ display: none;
+}
+
+#navigation {
+ position: absolute;
+ top: 1em;
+ right: 1em;
+ padding: 0;
+ margin: 0;
+ list-style-type: none;
+
+ li {
+ display: inline;
+ padding: 0;
+ margin: 0;
+ }
+
+ a {
+ display: -moz-inline-box;
+ display: inline-block;
+ padding: 0.4em 1em;
+ }
+ a:link, a:visited {
+ color: $header_colour;
+ }
+ a:hover, a:active {
+ background-color: $header_colour;
+ color: $header_back;
+ }
+}
+
+#nav_new a {
+ background-image: url("/i/new.png");
+ background-repeat: no-repeat;
+ background-position: 100% 0;
+}
+
+#logo {
+ border: none;
+ position: absolute;
+ top: 3.3em;
+ right: 10px;
+}
+
+#footer {
+ clear: both;
+ text-align: right;
+ font-size: 83%;
+ border-top: solid 1px $header_colour;
+ display: table;
+ margin: 2em 0 1em auto;
+ padding: 2px 4px;
+}
+
diff --git a/web/css/cobrands/emptyhomes/emptyhomes.css b/web/css/cobrands/emptyhomes/emptyhomes.css
index c3d514807..15afee568 100644
--- a/web/css/cobrands/emptyhomes/emptyhomes.css
+++ b/web/css/cobrands/emptyhomes/emptyhomes.css
@@ -74,8 +74,6 @@ blockquote {
/* Site layout */
#header {
- font-size: 200%;
- font-weight: bold;
margin: 0;
padding: 5px 0;
float: left;
@@ -85,14 +83,24 @@ blockquote {
margin-left: 0.5em;
}
-#content {
+#header #eha-logo {
+ float: left;
+ margin-right: 1em;
+}
+
+#header div {
+ float: left;
+ margin-top: 0.5em;
+}
+
+#mysociety {
width: 100%; /* Must specify a width or IE goes crazy wrong! */
position: relative;
margin: 0 auto;
max-width: 60em;
}
-/* Can't put the margin in #content because of above IE craziness */
+/* Can't put the margin in #mysociety because of above IE craziness */
#wrapper {
clear: both;
margin: 0 2em 2em;
@@ -146,7 +154,7 @@ blockquote {
right: 10px;
}
-#footer {
+#emptyhomes-footer {
clear: both;
font-size: 83%;
border-top: solid 2em #ffffff;
@@ -156,11 +164,11 @@ blockquote {
padding: 20px;
overflow: auto;
}
-#footer div {
+#emptyhomes-footer div {
float: left;
- margin-right: 1em;
+ margin-right: 2em;
}
-#footer a {
+#emptyhomes-footer a {
color: #FFFFFF;
}
diff --git a/web/css/core.css b/web/css/core.css
index 0ff8fb1a2..5b64d67b9 100644
--- a/web/css/core.css
+++ b/web/css/core.css
@@ -1,488 +1,379 @@
-/* Generics */
-blockquote {
- border-left: solid 4px #666666;
- padding-left: 0.5em;
+#mysociety blockquote {
+ border-left: solid 4px #666666;
+ padding-left: 0.5em;
+}
+#mysociety blockquote h2, #mysociety blockquote p {
+ margin: 0;
+}
+#mysociety dt {
+ font-weight: bold;
+ margin-top: 0.5em;
+}
+#mysociety .gone {
+ color: #666666;
+ background-color: #cccccc;
+}
+#mysociety p.error {
+ text-align: center;
+ color: #cc0000;
+ font-size: larger;
+}
+#mysociety ul {
+ padding: 0 0 0 1.5em;
+ margin: 0;
+}
+#mysociety ul.error {
+ color: #cc0000;
+ background-color: #ffeeee;
+ padding-right: 4px;
+ text-align: left;
+ font-size: larger;
+}
+#mysociety div.form-error {
+ color: #cc0000;
+ margin: 5px 1em 5px 1em;
+ padding: 2px 5px 2px 5px;
+ float: left;
+ background-color: #ffeeee;
+ text-align: left;
+}
+#mysociety div.form-field {
+ clear: both;
+}
+#mysociety #advert_thin {
+ width: 50%;
+ margin: 1em auto;
+ border-top: dotted 1px #999999;
+}
+#mysociety #advert_hfymp {
+ border-top: dotted 1px #999999;
+ text-align: center;
+}
+#mysociety p#expl {
+ text-align: center;
+ font-size: 150%;
+ margin: 0 2em;
+}
+#mysociety #postcodeForm {
+ display: table;
+ _width: 33em;
+ text-align: center;
+ font-size: 150%;
+ margin: 1em auto;
+ padding: 1em;
+ -moz-border-radius: 1em;
+ -webkit-border-radius: 1em;
+ border-radius: 1em;
+}
+#mysociety #postcodeForm label {
+ float: none;
+ padding-right: 0;
+}
+#mysociety #postcodeForm #submit {
+ font-size: 83%;
+}
+#mysociety #front_intro {
+ float: left;
+ width: 48%;
+}
+#mysociety #front_intro p {
+ clear: both;
+ margin-top: 0;
+}
+#mysociety #front_stats div {
+ text-align: center;
+ width: 5.5em;
+ -moz-border-radius: 0.5em;
+ -webkit-border-radius: 0.5em;
+ border-radius: 0.5em;
+ float: left;
+ margin: 0 1em 1em;
+}
+#mysociety #front_stats div big {
+ font-size: 150%;
+ display: block;
+}
+#mysociety #front_recent {
+ float: right;
+ width: 48%;
+ margin-bottom: 1em;
+}
+#mysociety #front_recent img, #mysociety #alert_recent img {
+ margin-right: 0.25em;
+ margin-bottom: 0.25em;
+}
+#mysociety #front_recent > h2:first-child, #mysociety #front_intro > h2:first-child {
+ margin-top: 0;
+}
+#mysociety form {
+ margin: 0;
+}
+#mysociety label {
+ float: left;
+ text-align: right;
+ padding-right: 0.5em;
+ width: 5em;
+}
+#mysociety fieldset, #mysociety #fieldset {
+ border: none;
+ padding: 0.5em;
+}
+#mysociety fieldset div, #mysociety #fieldset div {
+ margin-top: 2px;
+ clear: left;
+}
+#mysociety legend {
+ display: none;
+}
+#mysociety #fieldset div.checkbox, #mysociety #problem_submit {
+ padding-left: 5.5em;
+}
+#mysociety #fieldset div.checkbox label, #mysociety label.n {
+ float: none;
+ text-align: left;
+ padding-right: 0;
+ width: auto;
+ cursor: pointer;
+ cursor: hand;
+}
+#mysociety #questionnaire label, #mysociety #alerts label {
+ float: none;
+}
+#mysociety .confirmed {
+ background-color: #ccffcc;
+ border: solid 2px #009900;
+ padding: 5px;
+ text-align: center;
+}
+#mysociety #watermark {
+ background: url("/i/mojwatermark6.png");
+ height: 113px;
+ width: 231px;
+ position: absolute;
+ bottom: 0;
+ right: 0;
+}
+#mysociety #map_box {
+ float: right;
+ width: 502px;
+ position: relative;
+ padding-left: 20px;
+ background-color: #ffffff;
+}
+#mysociety p#copyright {
+ float: right;
+ margin: 0 0 1em 0;
+ font-size: 78%;
+}
+#mysociety #map {
+ border: solid 1px #000000;
+ width: 500px;
+ height: 500px;
+ overflow: hidden;
+ position: relative;
+ background-color: #f1f1f1;
+}
+#mysociety #drag {
+ position: absolute;
+ width: 500px;
+ height: 500px;
+ right: 0;
+ top: 0;
+}
+#mysociety #drag input, #mysociety #drag img {
+ position: absolute;
+ border: none;
+}
+#mysociety #drag input {
+ cursor: crosshair;
+ background-color: #cccccc;
+}
+#mysociety #drag img {
+ cursor: move;
+}
+#mysociety #drag img.pin {
+ z-index: 100;
+ background-color: inherit;
+}
+#mysociety #drag a img.pin {
+ cursor: pointer;
+ cursor: hand;
+}
+#mysociety form#mapForm #map {
+ cursor: pointer;
+}
+#mysociety form#mapForm .olTileImage {
+ cursor: crosshair;
+}
+#mysociety #compass {
+ background-color: #ffffff;
+ border: solid 1px #000000;
+ border-width: 0 1px 1px 0;
+ color: #000000;
+ position: absolute;
+ top: 0px;
+ left: 0px;
+}
+#mysociety #compass img {
+ border: 0;
+}
+#mysociety #text_map {
+ margin-top: 0.5em;
+ margin-bottom: 1em;
+ font-size: 110%;
+}
+#mysociety #text_no_map {
+ margin-top: 0;
+}
+#mysociety #sub_map_links {
+ float: right;
+ clear: right;
+ margin-top: 0;
+}
+#mysociety #fixed {
+ margin: 0 530px 1em 0;
+ padding: 5px;
+ text-align: center;
+ position: relative;
+ background-color: #ccffcc;
+ border: solid 2px #009900;
+}
+#mysociety #unknown {
+ margin: 0 530px 1em 0;
+ padding: 5px;
+ text-align: center;
+ position: relative;
+ background-color: #ffcccc;
+ border: solid 2px #990000;
+}
+#mysociety #updates div {
+ padding: 0 0 0.5em;
+ margin: 0 0 0.25em;
+ border-bottom: dotted 1px #5e552b;
+}
+#mysociety #updates div .problem-update, #mysociety #updates div .update-text {
+ padding: 0;
+ margin: 0;
+ border-bottom: 0;
+}
+#mysociety #updates p {
+ margin: 0;
+}
+#mysociety #nearby_lists h2 {
+ margin-top: 0.5em;
+ margin-bottom: 0;
+}
+#mysociety #alert_links {
+ float: right;
+}
+#mysociety #alert_links_area {
+ background-color: #ffeecc;
+ border: solid 1px #ff9900;
+ border-width: 1px 0;
+ padding: 3px 10px;
+ margin: 0;
+}
+#mysociety #rss_alert {
+ text-decoration: none;
+}
+#mysociety #rss_alert span {
+ text-decoration: underline;
+}
+#mysociety #email_alert_box {
+ display: none;
+ position: absolute;
+ padding: 3px;
+ font-size: 83%;
+ border: solid 1px #7399C3;
+ background-color: #eeeeff;
+ color: #000000;
+}
+#mysociety #email_alert_box p {
+ margin: 0;
+}
+#mysociety .council_sent_info {
+ font-size: smaller;
+}
+#mysociety #rss_items {
+ width: 62%;
+ float: left;
+}
+#mysociety #rss_rhs {
+ border-left: 1px dashed #999;
+ width: 36%;
+ float: right;
+ padding: 0 0 0 0.5em;
+ margin: 0 0 1em 0.5em;
+}
+#mysociety #rss_box {
+ padding: 10px;
+ border: 1px solid #999999;
+}
+#mysociety #rss_feed {
+ list-style-type: none;
+ margin-bottom: 2em;
+}
+#mysociety #rss_feed li {
+ margin-bottom: 1em;
+}
+#mysociety #alert_or {
+ font-style: italic;
+ font-size: 125%;
+ margin: 0;
+}
+#mysociety #rss_list {
+ float: left;
+ width: 47%;
+}
+#mysociety #rss_list ul {
+ list-style-type: none;
+}
+#mysociety #rss_buttons {
+ float: right;
+ width: 35%;
+ text-align: center;
+ margin-bottom: 2em;
+}
+#mysociety #rss_local {
+ margin-left: 1.5em;
+ margin-bottom: 0;
}
-blockquote h2, blockquote p {
- margin: 0;
+#mysociety #rss_local_alt {
+ margin: 0 0 2em 4em;
+}
+#mysociety #alert_photos {
+ text-align: center;
+ float: right;
+ width: 150px;
+ margin-left: 0.5em;
}
+#mysociety #alert_photos h2 {
+ font-size: 100%;
-form {
- margin: 0;
}
-
-label {
- float: left;
- text-align: right;
- padding-right: 0.5em;
- width: 5em;
-}
-
-fieldset, #fieldset {
- border: none;
- padding: 0.5em;
-}
-
-legend {
- display: none;
-}
-
-dt {
- font-weight: bold;
- margin-top: 0.5em;
-}
-
-.v { display: none; }
-
-.gone {
- color: #666666;
- background-color: #cccccc;
-}
-
-p.error {
- text-align: center;
- color: #cc0000;
- font-size: larger;
-}
-
-span.error {
- color: #cc0000;
-}
-
-ul {
- padding: 0 0 0 1.5em;
- margin: 0;
-}
-
-ul.error {
- color: #cc0000;
- background-color: #ffeeee;
- padding-right: 4px;
- text-align: left;
- font-size: larger;
+#mysociety #alert_photos img {
+ margin-bottom: 0.25em;
}
-
-div.form-error {
- color: #cc0000;
- margin: 5px 1em 5px 1em;
- padding: 2px 5px 2px 5px;
- float: left;
- background-color: #ffeeee;
- text-align: left;
+#mysociety #col_problems, #mysociety #col_fixed {
+ float: left;
+ width: 48%;
+ margin-right: 1em;
}
-
-div.form-field {
- clear: both;
-}
-
-/* Site-wide layout */
-
-#advert_thin {
- width: 50%;
- margin: 1em auto;
- border-top: dotted 1px #999999;
-}
-#advert_hfymp {
- border-top: dotted 1px #999999;
- text-align: center;
-}
-
-/* Front page */
-
-p#expl {
- text-align: center;
- font-size: 150%;
- margin: 0 2em;
-}
-
-#postcodeForm {
- display: table;
- _width: 33em;
- text-align: center;
- font-size: 150%;
- margin: 1em auto;
- padding: 1em;
- -moz-border-radius: 1em;
- -webkit-border-radius: 1em;
- border-radius: 1em;
-}
-
-#postcodeForm label {
- float: none;
- padding-right: 0;
-}
-
-#postcodeForm #submit {
- font-size: 83%;
+#mysociety .contact-details {
+ font-size: 80%;
+ margin-top: 2em;
}
-#front_intro {
- float: left;
- width: 48%;
-}
-
-#front_intro p {
- clear: both;
- margin-top: 0;
-}
-
-#front_stats div {
- text-align: center;
- width: 5.5em;
- -moz-border-radius: 0.5em;
- -webkit-border-radius: 0.5em;
- border-radius: 0.5em;
- float: left;
- margin: 0 1em 1em;
-}
-
-#front_stats div big {
- font-size: 150%;
- display: block;
-}
-
-#front_recent {
- float: right;
- width: 48%;
- margin-bottom: 1em;
-}
-#front_recent img, #alert_recent img {
- margin-right: 0.25em;
- margin-bottom: 0.25em;
-}
-#front_recent > h2:first-child, #front_intro > h2:first-child {
- margin-top: 0;
-}
-
-/* Forms */
-
-fieldset div, #fieldset div {
- margin-top: 2px;
- clear: left;
-}
-#fieldset div.checkbox, #problem_submit {
- padding-left: 5.5em;
-}
-#fieldset div.checkbox label, label.n {
- float: none;
- text-align: left;
- padding-right: 0;
- width: auto;
- cursor: pointer;
- cursor: hand;
-}
-
-#questionnaire label, #alerts label {
- float: none;
-}
-
-.confirmed {
- background-color: #ccffcc;
- border: solid 2px #009900;
- padding: 5px;
- text-align: center;
-}
-
-/* Map */
-
-#watermark {
- background: url("/i/mojwatermark6.png");
- height: 113px;
- width: 231px;
- position: absolute;
- bottom: 0;
- right: 0;
-}
-
-#map_box {
- float: right;
- width: 502px; /* Two pixels more than width of #map */
- position: relative;
- padding-left: 20px;
- background-color: #ffffff;
-}
-
-p#copyright {
- float: right;
- margin: 0 0 1em 0;
- font-size: 78%;
-}
-
-#map {
- border: solid 1px #000000;
- width: 500px; /* Twice a tile width */
- height: 500px;
- overflow: hidden;
- position: relative;
- background-color: #f1f1f1;
-}
-
-#drag {
- position: absolute;
- width: 500px;
- height: 500px;
- right: 0;
- top: 0;
-}
-
-#drag input {
- cursor: crosshair;
- background-color: #cccccc;
-}
-#drag img {
- cursor: move;
-}
-#drag input, #drag img {
- position: absolute;
- border: none;
-}
-#drag img.pin {
- z-index: 100;
- background-color: inherit;
-}
-#drag a img.pin {
- cursor: pointer;
- cursor: hand;
-}
-
-#compass {
- background-color: #ffffff;
- border: solid 1px #000000;
- border-width: 0 1px 1px 0;
- color: #000000;
- position: absolute;
- top: 0px;
- left: 0px;
-}
-
-#compass img {
- border: 0;
-}
-
-#text_map {
- margin-top: 0.5em;
- margin-bottom: 1em;
- font-size: 110%;
-}
-#text_no_map {
- margin-top: 0;
- /* background-color: #ffeecc;
- padding: 4px; */
-}
-
-#sub_map_links {
- float: right;
- clear: right;
- margin-top: 0;
-}
-
-/* Problem pages */
-
-#fixed, #unknown {
- margin: 0 530px 1em 0;
- padding: 5px;
- text-align: center;
- position: relative;
-}
-#fixed {
- background-color: #ccffcc;
- border: solid 2px #009900;
-}
-#unknown {
- background-color: #ffcccc;
- border: solid 2px #990000;
-}
-
-#updates div {
- padding: 0 0 0.5em;
- margin: 0 0 0.25em;
- border-bottom: dotted 1px #5e552b;
-}
-
-#updates div .problem-update,
-#updates div .update-text {
- padding: 0;
- margin: 0;
- border-bottom: 0;
-}
-#updates p {
- margin: 0;
-}
-
-#nearby_lists h2 {
- margin-top: 0.5em;
- margin-bottom: 0;
-}
-#alert_links {
- float: right;
-}
-#alert_links_area {
- background-color: #ffeecc;
- border: solid 1px #ff9900;
- border-width: 1px 0;
- padding: 3px 10px;
- /* padding: 0 3px; */
- margin: 0;
-}
-#rss_alert {
- text-decoration: none;
-}
-#rss_alert span {
- text-decoration: underline;
-}
-#email_alert {
-}
-#email_alert_box {
- display:none;
- position: absolute;
- padding: 3px;
- font-size:83%;
- border:solid 1px #7399C3;
- background-color: #eeeeff;
- color: #000000;
-}
-#email_alert_box p {
- margin: 0;
-}
-
-.council_sent_info {
- font-size: smaller;
-}
-
-/* RSS feed XSL */
-
-#rss_items {
- width:62%;
- float:left;
-}
-#rss_rhs {
- border-left:1px dashed #999;
- width:36%;
- float:right;
- padding: 0 0 0 0.5em;
- margin: 0 0 1em 0.5em;
-}
-#rss_box {
- padding:10px;
- border:1px solid #999999;
-}
-
-/* Alerts */
-#rss_feed {
- list-style-type: none;
- margin-bottom: 2em;
-}
-#rss_feed li {
- margin-bottom: 1em;
-}
-#alert_or {
- font-style: italic;
- font-size: 125%;
- margin: 0;
-}
-#rss_list {
- float: left;
- width: 47%;
-}
-#rss_list ul {
- list-style-type: none;
-}
-#rss_buttons {
- float: right;
- width: 35%;
- text-align: center;
- margin-bottom: 2em;
-}
-#rss_local {
- margin-left: 1.5em;
- margin-bottom: 0;
-}
-#rss_local_alt {
- margin: 0 0 2em 4em;
-}
-
-#alert_photos {
- text-align: center;
- float: right;
- width: 150px;
- margin-left: 0.5em;
-}
-#alert_photos h2 {
- font-size: 100%;
-}
-#alert_photos img {
- margin-bottom: 0.25em;
-}
-
-/* Report page */
-
-#col_problems, #col_fixed {
- float: left;
- width: 48%;
- margin-right: 1em;
-}
-
-/* Contact page */
-.contact-details {
- font-size: 80%;
- margin-top: 2em;
-}
-
-/* Printing */
@media print {
- #map_box { float: none; margin: 0 auto; }
- #content { max-width: none; }
- #side { margin-right: 0; }
-}
-
-/* File upload */
-.progressContainer {
- margin: 5px;
- padding: 4px;
- width: 357px;
- border: solid 1px #E8E8E8;
- background-color: #F7F7F7;
- overflow: hidden;
-}
-.red { border: solid 1px #B50000; background-color: #FFEBEB; }
-.green { border: solid 1px #DDF0DD; background-color: #EBFFEB; }
-.blue { border: solid 1px #CEE2F2; background-color: #F0F5FF; }
-
-.progressName {
- font-size: 8pt;
- font-weight: bold;
- color: #555555;
- width: 323px;
- height: 14px;
- text-align: left;
- white-space: nowrap;
- overflow: hidden;
-}
-.progressBarInProgress, .progressBarComplete, .progressBarError {
- font-size: 0px;
- width: 0%;
- height: 2px;
- background-color: blue;
- margin-top: 2px;
-}
-.progressBarComplete {
- width: 100%;
- background-color: green;
- visibility: hidden;
-}
-.progressBarError {
- width: 100%;
- background-color: red;
- visibility: hidden;
-}
-.progressBarStatus {
- margin-top: 2px;
- width: 337px;
- font-size: 7pt;
- font-family: Verdana;
- text-align: left;
- white-space: nowrap;
+ #mysociety #map_box {
+ float: none;
+ margin: 0 auto;
+ }
+ #mysociety #mysociety {
+ max-width: none;
+ }
+ #mysociety #side {
+ margin-right: 0;
+ }
}
-
-
diff --git a/web/css/core.scss b/web/css/core.scss
new file mode 100644
index 000000000..8bbebfce1
--- /dev/null
+++ b/web/css/core.scss
@@ -0,0 +1,503 @@
+$map_width: 500px;
+
+@mixin problem-banner {
+ margin: 0 $map_width + 30px 1em 0;
+ padding: 5px;
+ text-align: center;
+ position: relative;
+}
+
+// Generics
+
+#mysociety {
+
+ blockquote {
+ border-left: solid 4px #666666;
+ padding-left: 0.5em;
+ h2, p {
+ margin: 0;
+ }
+ }
+
+ dt {
+ font-weight: bold;
+ margin-top: 0.5em;
+ }
+
+ .gone {
+ color: #666666;
+ background-color: #cccccc;
+ }
+
+ p.error {
+ text-align: center;
+ color: #cc0000;
+ font-size: larger;
+ }
+
+ ul {
+ padding: 0 0 0 1.5em;
+ margin: 0;
+ }
+
+ ul.error {
+ color: #cc0000;
+ background-color: #ffeeee;
+ padding-right: 4px;
+ text-align: left;
+ font-size: larger;
+ }
+
+ div.form-error {
+ color: #cc0000;
+ margin: 5px 1em 5px 1em;
+ padding: 2px 5px 2px 5px;
+ float: left;
+ background-color: #ffeeee;
+ text-align: left;
+ }
+
+ div.form-field {
+ clear: both;
+ }
+
+ // Site-wide layout
+
+ #advert_thin {
+ width: 50%;
+ margin: 1em auto;
+ border-top: dotted 1px #999999;
+ }
+ #advert_hfymp {
+ border-top: dotted 1px #999999;
+ text-align: center;
+ }
+
+ // Front page
+
+ p#expl {
+ text-align: center;
+ font-size: 150%;
+ margin: 0 2em;
+ }
+
+ #postcodeForm {
+ display: table;
+ _width: 33em;
+ text-align: center;
+ font-size: 150%;
+ margin: 1em auto;
+ padding: 1em;
+ -moz-border-radius: 1em;
+ -webkit-border-radius: 1em;
+ border-radius: 1em;
+
+ label {
+ float: none;
+ padding-right: 0;
+ }
+
+ #submit {
+ font-size: 83%;
+ }
+ }
+
+ #front_intro {
+ float: left;
+ width: 48%;
+
+ p {
+ clear: both;
+ margin-top: 0;
+ }
+ }
+
+ #front_stats div {
+ text-align: center;
+ width: 5.5em;
+ -moz-border-radius: 0.5em;
+ -webkit-border-radius: 0.5em;
+ border-radius: 0.5em;
+ float: left;
+ margin: 0 1em 1em;
+
+ big {
+ font-size: 150%;
+ display: block;
+ }
+ }
+
+ #front_recent {
+ float: right;
+ width: 48%;
+ margin-bottom: 1em;
+ }
+ #front_recent img, #alert_recent img {
+ margin-right: 0.25em;
+ margin-bottom: 0.25em;
+ }
+ #front_recent > h2:first-child, #front_intro > h2:first-child {
+ margin-top: 0;
+ }
+
+ // Forms
+
+ form {
+ margin: 0;
+ }
+
+ label {
+ float: left;
+ text-align: right;
+ padding-right: 0.5em;
+ width: 5em;
+ }
+
+ fieldset, #fieldset {
+ border: none;
+ padding: 0.5em;
+ div {
+ margin-top: 2px;
+ clear: left;
+ }
+ }
+
+ legend {
+ display: none;
+ }
+
+ #fieldset div.checkbox, #problem_submit {
+ padding-left: 5.5em;
+ }
+ #fieldset div.checkbox label, label.n {
+ float: none;
+ text-align: left;
+ padding-right: 0;
+ width: auto;
+ cursor: pointer;
+ cursor: hand;
+ }
+
+ #questionnaire label, #alerts label {
+ float: none;
+ }
+
+ .confirmed {
+ background-color: #ccffcc;
+ border: solid 2px #009900;
+ padding: 5px;
+ text-align: center;
+ }
+
+ // Map
+
+ #watermark {
+ background: url("/i/mojwatermark6.png");
+ height: 113px;
+ width: 231px;
+ position: absolute;
+ bottom: 0;
+ right: 0;
+ }
+
+ #map_box {
+ float: right;
+ width: $map_width + 2px;
+ position: relative;
+ padding-left: 20px;
+ background-color: #ffffff;
+ }
+
+ p#copyright {
+ float: right;
+ margin: 0 0 1em 0;
+ font-size: 78%;
+ }
+
+ #map {
+ border: solid 1px #000000;
+ width: $map_width; // Twice a tile width
+ height: $map_width;
+ overflow: hidden;
+ position: relative;
+ background-color: #f1f1f1;
+ }
+
+ #drag {
+ position: absolute;
+ width: $map_width;
+ height: $map_width;
+ right: 0;
+ top: 0;
+
+ input, img {
+ position: absolute;
+ border: none;
+ }
+ input {
+ cursor: crosshair;
+ background-color: #cccccc;
+ }
+ img {
+ cursor: move;
+ }
+ img.pin {
+ z-index: 100;
+ background-color: inherit;
+ }
+ a img.pin {
+ cursor: pointer;
+ cursor: hand;
+ }
+ }
+
+ form#mapForm #map {
+ cursor: pointer;
+ }
+
+ form#mapForm .olTileImage {
+ cursor: crosshair;
+ }
+
+ #compass {
+ background-color: #ffffff;
+ border: solid 1px #000000;
+ border-width: 0 1px 1px 0;
+ color: #000000;
+ position: absolute;
+ top: 0px;
+ left: 0px;
+ img {
+ border: 0;
+ }
+ }
+
+ #text_map {
+ margin-top: 0.5em;
+ margin-bottom: 1em;
+ font-size: 110%;
+ }
+ #text_no_map {
+ margin-top: 0;
+ // background-color: #ffeecc;
+ // padding: 4px;
+ }
+
+ #sub_map_links {
+ float: right;
+ clear: right;
+ margin-top: 0;
+ }
+
+ // Problem pages
+
+ #fixed {
+ @include problem-banner;
+ background-color: #ccffcc;
+ border: solid 2px #009900;
+ }
+
+ #unknown {
+ @include problem-banner;
+ background-color: #ffcccc;
+ border: solid 2px #990000;
+ }
+
+ #updates {
+ div {
+ padding: 0 0 0.5em;
+ margin: 0 0 0.25em;
+ border-bottom: dotted 1px #5e552b;
+
+ .problem-update, .update-text {
+ padding: 0;
+ margin: 0;
+ border-bottom: 0;
+ }
+ }
+
+ p {
+ margin: 0;
+ }
+ }
+
+ #nearby_lists h2 {
+ margin-top: 0.5em;
+ margin-bottom: 0;
+ }
+ #alert_links {
+ float: right;
+ }
+ #alert_links_area {
+ background-color: #ffeecc;
+ border: solid 1px #ff9900;
+ border-width: 1px 0;
+ padding: 3px 10px;
+ // padding: 0 3px;
+ margin: 0;
+ }
+ #rss_alert {
+ text-decoration: none;
+ span {
+ text-decoration: underline;
+ }
+ }
+ #email_alert {
+ }
+ #email_alert_box {
+ display:none;
+ position: absolute;
+ padding: 3px;
+ font-size:83%;
+ border:solid 1px #7399C3;
+ background-color: #eeeeff;
+ color: #000000;
+ }
+ #email_alert_box p {
+ margin: 0;
+ }
+
+ .council_sent_info {
+ font-size: smaller;
+ }
+
+ // RSS feed XSL
+
+ #rss_items {
+ width:62%;
+ float:left;
+ }
+ #rss_rhs {
+ border-left:1px dashed #999;
+ width:36%;
+ float:right;
+ padding: 0 0 0 0.5em;
+ margin: 0 0 1em 0.5em;
+ }
+ #rss_box {
+ padding:10px;
+ border:1px solid #999999;
+ }
+
+ // Alerts
+ #rss_feed {
+ list-style-type: none;
+ margin-bottom: 2em;
+ }
+ #rss_feed li {
+ margin-bottom: 1em;
+ }
+ #alert_or {
+ font-style: italic;
+ font-size: 125%;
+ margin: 0;
+ }
+ #rss_list {
+ float: left;
+ width: 47%;
+ }
+ #rss_list ul {
+ list-style-type: none;
+ }
+ #rss_buttons {
+ float: right;
+ width: 35%;
+ text-align: center;
+ margin-bottom: 2em;
+ }
+ #rss_local {
+ margin-left: 1.5em;
+ margin-bottom: 0;
+ }
+ #rss_local_alt {
+ margin: 0 0 2em 4em;
+ }
+
+ #alert_photos {
+ text-align: center;
+ float: right;
+ width: 150px;
+ margin-left: 0.5em;
+ }
+ #alert_photos h2 {
+ font-size: 100%;
+ }
+ #alert_photos img {
+ margin-bottom: 0.25em;
+ }
+
+ // Report page
+
+ #col_problems, #col_fixed {
+ float: left;
+ width: 48%;
+ margin-right: 1em;
+ }
+
+ // Contact page
+ .contact-details {
+ font-size: 80%;
+ margin-top: 2em;
+ }
+
+ // File upload
+ // .progressContainer {
+ // margin: 5px;
+ // padding: 4px;
+ // width: 357px;
+ // border: solid 1px #E8E8E8;
+ // background-color: #F7F7F7;
+ // overflow: hidden;
+ // }
+ // .red { border: solid 1px #B50000; background-color: #FFEBEB; }
+ // .green { border: solid 1px #DDF0DD; background-color: #EBFFEB; }
+ // .blue { border: solid 1px #CEE2F2; background-color: #F0F5FF; }
+
+ // .progressName {
+ // font-size: 8pt;
+ // font-weight: bold;
+ // color: #555555;
+ // width: 323px;
+ // height: 14px;
+ // text-align: left;
+ // white-space: nowrap;
+ // overflow: hidden;
+ // }
+ // .progressBarInProgress, .progressBarComplete, .progressBarError {
+ // font-size: 0px;
+ // width: 0%;
+ // height: 2px;
+ // background-color: blue;
+ // margin-top: 2px;
+ // }
+ // .progressBarComplete {
+ // width: 100%;
+ // background-color: green;
+ // visibility: hidden;
+ // }
+ // .progressBarError {
+ // width: 100%;
+ // background-color: red;
+ // visibility: hidden;
+ // }
+ // .progressBarStatus {
+ // margin-top: 2px;
+ // width: 337px;
+ // font-size: 7pt;
+ // font-family: Verdana;
+ // text-align: left;
+ // white-space: nowrap;
+ // }
+
+}
+
+// Printing, SCSS doesn't handle @media nesting
+
+@media print {
+ #mysociety {
+ #map_box { float: none; margin: 0 auto; }
+ #mysociety { max-width: none; }
+ #side { margin-right: 0; }
+ }
+}
+
diff --git a/web/css/ie6-378.css b/web/css/ie6-378.css
index e22f519ff..83efdb634 100644
--- a/web/css/ie6-378.css
+++ b/web/css/ie6-378.css
@@ -1,4 +1,4 @@
-#watermark {
+#mysociety #watermark {
background: none;
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='/i/mojwatermark-378.png',sizingMethod='scale');
}
diff --git a/web/css/ie6.css b/web/css/ie6.css
index 051a117db..3bb91aa31 100644
--- a/web/css/ie6.css
+++ b/web/css/ie6.css
@@ -1,4 +1,4 @@
-#watermark {
+#mysociety #watermark {
background: none;
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='/i/mojwatermark6.png',sizingMethod='scale');
}
@@ -16,3 +16,7 @@
right: 10px;
cursor: pointer;
}
+
+#emptyhomes-footer {
+ zoom: 1;
+}
diff --git a/web/css/main.css b/web/css/main.css
index f1d416773..ddea37970 100644
--- a/web/css/main.css
+++ b/web/css/main.css
@@ -1,146 +1,134 @@
-/* Generics */
+a:link {
+ color: #0000ff;
+}
+a:visited {
+ color: #000099;
+}
+a:hover, a:active {
+ color: #ff0000;
+}
body {
- font-family: "Gill Sans", "Gill Sans MT", Helvetica, Arial, sans-serif;
- margin: 0;
- padding: 0;
- /* color: #a9aeb0; */
+ font-family: "Gill Sans", "Gill Sans MT", Helvetica, Arial, sans-serif;
+ margin: 0;
+ padding: 0;
}
h1 {
- margin: 0;
- font-size: 175%;
+ margin: 0;
+ font-size: 175%;
}
+
h2 {
- font-size: 140%;
+ font-size: 140%;
}
select, input, textarea {
- font-size: 99%;
+ font-size: 99%;
}
-a:link {
- color: #0000ff;
+#mysociety a.unsuitable-report {
+ font-size: small;
}
-a:visited {
- color: #000099;
-}
-a:hover, a:active {
- color: #ff0000;
+#mysociety blockquote {
+ border-left: solid 4px #5e552b;
}
-
-a.unsuitable-report {
- font-size: small;
+#mysociety .a {
+ color: #000000;
+ background-color: #f3e5a5;
}
-
-blockquote {
- border-left: solid 4px #5e552b;
+#mysociety #postcodeForm {
+ background-color: #e3d595;
}
-
-.a {
- color: #000000;
- background-color: #f3e5a5;
+#mysociety #front_stats div {
+ background-color: #e3d595;
}
-/* Site layout */
-
#header {
- font-size: 200%;
- font-weight: bold;
- border-bottom: solid 2px #5e552b;
- margin: 0;
- padding: 0.15em 0.5em;
- background-color: #e3d595;
- color: #5e552b;
+ font-size: 200%;
+ font-weight: bold;
+ border-bottom: solid 2px #5e552b;
+ margin: 0;
+ padding: 0.15em 0.5em;
+ background-color: #e3d595;
+ color: #5e552b;
}
-
-#my {
- color: #4e451b;
- background-color: #e3d595;
-}
-#beta {
- color: #6e653b;
- background-color: #e3d595;
- font-size: 50%;
- font-style: italic;
-}
-
#header a:link, #header a:visited {
- color: #5e552b;
- background-color: #e3d595;
- text-decoration: none;
+ color: #5e552b;
+ background-color: #e3d595;
+ text-decoration: none;
}
#header a:active, #header a:hover {
- text-decoration: underline;
+ text-decoration: underline;
}
-#content {
- width: 100%; /* Must specify a width or IE goes crazy wrong! */
- position: relative;
- margin: 0 auto;
- max-width: 60em;
+#my {
+ color: #4e451b;
+ background-color: #e3d595;
+}
+
+#mysociety {
+ width: 100%;
+ /* Must specify a width or IE goes crazy wrong! */
+ position: relative;
+ margin: 0 auto;
+ max-width: 60em;
}
-/* Can't put the margin in #content because of above IE craziness */
+/* Can't put the margin in #mysociety because of above IE craziness */
#wrapper {
- margin: 2em;
+ margin: 2em;
+}
+
+.v {
+ display: none;
}
#navigation {
- position: absolute;
- top: 1em;
- right: 1em;
- padding: 0;
- margin: 0;
- list-style-type: none;
+ position: absolute;
+ top: 1em;
+ right: 1em;
+ padding: 0;
+ margin: 0;
+ list-style-type: none;
}
#navigation li {
- display: inline;
- padding: 0;
- margin: 0;
+ display: inline;
+ padding: 0;
+ margin: 0;
}
-
#navigation a {
- display: -moz-inline-box;
- display: inline-block;
- padding: 0.4em 1em;
+ display: -moz-inline-box;
+ display: inline-block;
+ padding: 0.4em 1em;
}
#navigation a:link, #navigation a:visited {
- color: #5e552b;
+ color: #5e552b;
}
#navigation a:hover, #navigation a:active {
- background-color: #5e552b;
- color: #e3d595;
+ background-color: #5e552b;
+ color: #e3d595;
}
#nav_new a {
- background-image: url("/i/new.png");
- background-repeat: no-repeat;
- background-position: 100% 0;
+ background-image: url("/i/new.png");
+ background-repeat: no-repeat;
+ background-position: 100% 0;
}
#logo {
- border: none;
- position: absolute;
- top: 3.3em;
- right: 10px;
+ border: none;
+ position: absolute;
+ top: 3.3em;
+ right: 10px;
}
#footer {
- clear: both;
- text-align: right;
- font-size: 83%;
- border-top: solid 1px #5e552b;
- display: table;
- margin: 2em 0 1em auto;
- padding: 2px 4px;
-}
-
-#postcodeForm {
- background-color: #e3d595;
+ clear: both;
+ text-align: right;
+ font-size: 83%;
+ border-top: solid 1px #5e552b;
+ display: table;
+ margin: 2em 0 1em auto;
+ padding: 2px 4px;
}
-
-#front_stats div {
- background-color: #e3d595;
-}
-
diff --git a/web/css/main.scss b/web/css/main.scss
new file mode 100644
index 000000000..bcebc2bd0
--- /dev/null
+++ b/web/css/main.scss
@@ -0,0 +1,14 @@
+// Generics
+
+$header_back: #e3d595;
+$header_back_lighter: #f3e5a5;
+$header_colour: #5e552b;
+$header_darker: #4e451b;
+
+a {
+ &:link { color: #0000ff; }
+ &:visited { color: #000099; }
+ &:hover, &:active { color: #ff0000; }
+}
+
+@import "_main";
diff --git a/web/down.default.html b/web/down.default.html
index 4e432473d..35d2cf237 100644
--- a/web/down.default.html
+++ b/web/down.default.html
@@ -12,7 +12,7 @@
<body>
<h1 id="header">Fix<span id="my">My</span>Street</h1>
-<div id="wrapper"><div id="content">
+<div id="wrapper"><div id="mysociety">
<p id="expl"><strong>FixMyStreet is currently down for maintenance.</strong>
<br><small>Please come back later.</small></p>
diff --git a/web/i/SEHPlogo-bwS.png b/web/i/SEHPlogo-bwS.png
new file mode 100644
index 000000000..496d43115
--- /dev/null
+++ b/web/i/SEHPlogo-bwS.png
Binary files differ
diff --git a/web/i/Sheltercymru47s.png b/web/i/Sheltercymru47s.png
new file mode 100644
index 000000000..5547be1e0
--- /dev/null
+++ b/web/i/Sheltercymru47s.png
Binary files differ
diff --git a/web/import.cgi b/web/import.cgi
new file mode 100755
index 000000000..371e70f7a
--- /dev/null
+++ b/web/import.cgi
@@ -0,0 +1,172 @@
+#!/usr/bin/perl -w -I../perllib
+
+# import.cgi
+# Script to which things like iPhones can POST new data
+#
+# Copyright (c) 2008 UK Citizens Online Democracy. All rights reserved.
+# Email: matthew@mysociety.org. WWW: http://www.mysociety.org
+#
+# $Id: import.cgi,v 1.11 2009-12-10 16:22:49 matthew Exp $
+
+use strict;
+use Error qw(:try);
+use Standard;
+use Utils;
+use mySociety::AuthToken;
+use mySociety::Config;
+use mySociety::EmailUtil;
+
+sub main {
+ my $q = shift;
+
+ my @vars = qw(service subject detail name email phone easting northing lat lon id phone_id);
+ my %input = map { $_ => $q->param($_) || '' } @vars;
+ my @errors;
+
+ unless ($ENV{REQUEST_METHOD} eq 'POST') {
+ print Page::header($q, title=>'External import');
+ docs();
+ print Page::footer($q);
+ return;
+ }
+
+ # If we were given easting, northing convert to lat lon now
+ my $latitude = $input{lat} ||= 0;
+ my $longitude = $input{lon} ||= 0;
+ if (
+ !( $latitude || $longitude ) # have not been given lat or lon
+ && ( $input{easting} && $input{northing} ) # but do have e and n
+ )
+ {
+ ( $latitude, $longitude ) =
+ Utils::convert_en_to_latlon( $input{easting}, $input{northing});
+ }
+
+ my $fh = $q->upload('photo'); # MUST come before $q->header, don't know why!
+ print $q->header(-charset => 'utf-8', -content_type => 'text/plain');
+
+ if ($fh) {
+ my $err = Page::check_photo($q, $fh);
+ push @errors, $err if $err;
+ }
+
+ push @errors, 'You must supply a service' unless $input{service};
+ push @errors, 'Please enter a subject' unless $input{subject} && $input{subject} =~ /\S/;
+ push @errors, 'Please enter your name' unless $input{name} && $input{name} =~ /\S/;
+
+ if (!$input{email} || $input{email} !~ /\S/) {
+ push @errors, 'Please enter your email';
+ } elsif (!mySociety::EmailUtil::is_valid_email($input{email})) {
+ push @errors, 'Please enter a valid email';
+ }
+
+ if ( $latitude && mySociety::Config::get('COUNTRY') eq 'GB' ) {
+ try {
+ Utils::convert_latlon_to_en( $latitude, $longitude );
+ } catch Error::Simple with {
+ my $e = shift;
+ push @errors, "We had a problem with the supplied co-ordinates - outside the UK?";
+ };
+ }
+
+ # TODO: Get location from photo if present in EXIF data?
+
+ my $photo;
+ if ($fh) {
+ try {
+ $photo = Page::process_photo($fh, 1);
+ } catch Error::Simple with {
+ my $e = shift;
+ push @errors, "That photo doesn't appear to have uploaded correctly ($e), please try again.";
+ };
+ }
+
+ unless ( $photo || ( $latitude || $longitude ) ) {
+ push @errors, 'Either a location or a photo must be provided.';
+ }
+
+ if (@errors) {
+ print map { "ERROR:$_\n" } @errors;
+ return;
+ }
+
+ # Store for possible future use
+ if ($input{id} || $input{phone_id}) {
+ my $id = $input{id} || $input{phone_id};
+ my $already = dbh()->selectrow_array('select id from partial_user where service=? and nsid=?', {}, $input{service}, $id);
+ unless ($already) {
+ dbh()->do('insert into partial_user (service, nsid, name, email, phone) values (?, ?, ?, ?, ?)',
+ {}, $input{service}, $id, $input{name}, $input{email}, $input{phone});
+ }
+ }
+
+ # Store what we have so far in the database
+ my $id = dbh()->selectrow_array("select nextval('problem_id_seq')");
+ Utils::workaround_pg_bytea("insert into problem
+ (id, postcode, latitude, longitude, title, detail, name, service,
+ email, phone, photo, state, used_map, anonymous, category, areas)
+ values
+ (?, '', ?, ?, ?, ?, ?, ?, ?, ?, ?, 'partial', 't', 'f', '', '')", 10,
+ $id, $latitude, $longitude, $input{subject},
+ $input{detail}, $input{name}, $input{service}, $input{email}, $input{phone}, $photo);
+
+ my $token = mySociety::AuthToken::store('partial', $id);
+ my %h = (
+ name => $input{name} ? ' ' . $input{name} : '',
+ url => Page::base_url_with_lang($q, undef, 1) . '/L/' . $token,
+ service => $input{service},
+ title => $input{title},
+ detail => $input{detail},
+ );
+
+ Page::send_email($q, $input{email}, $input{name}, 'partial', %h);
+
+ dbh()->commit();
+ print 'SUCCESS';
+}
+
+Page::do_fastcgi(\&main);
+
+sub docs {
+ print <<EOF;
+<p>You may inject problem reports into FixMyStreet programatically using this
+simple interface. Upon receipt, an email will be sent to the address given,
+with a link the user must click in order to check the details of their report,
+add any other information they wish, and then submit to the council.
+
+<p>This interface returns a plain text response; either <samp>SUCCESS</samp> if
+the report has been successfully received, or if not, a list of errors, one per
+line each starting with <samp>ERROR:</samp>.
+
+<p>You may submit the following information by POST to this URL
+(i.e. <samp>http://www.fixmystreet.com/import</samp> ):</p>
+<dl>
+<dt>service
+<dd>
+<em>Required</em>.
+Name of application/service using this interface.
+<dt>id
+<dd>Unique ID of a user/device, for possible future use.
+<br><small>(e.g. used by Flickr import to know which accounts to look at)</small>
+<dt>subject
+<dd>
+<em>Required</em>. Subject of problem report.
+<dt>detail
+<dd>Main body and details of problem report.
+<dt>name
+<dd>
+<em>Required</em>. Name of problem reporter.
+<dt>email
+<dd>
+<em>Required</em>. Email address of problem reporter.
+<dt>phone
+<dd>Telephone number of problem reporter.
+<dt>easting / northing
+<dt>lat / lon
+<dd>Location of problem report. You can either supply eastings/northings, or WGS84 latitude/longitude.
+<dt>photo
+<dd>Photo of problem (JPEG only).
+</dl>
+EOF
+}
+
diff --git a/web/index.cgi b/web/index.cgi
index 6c7a2f86d..14d4177ac 100755
--- a/web/index.cgi
+++ b/web/index.cgi
@@ -12,7 +12,6 @@ use Utils;
use Encode;
use Error qw(:try);
use File::Slurp;
-use RABX;
use CGI::Carp;
use POSIX qw(strcoll);
use URI::Escape;
@@ -198,7 +197,7 @@ EOF
$out .= $q->h2(_('Recently reported problems')) . ' <ul>' if @$probs;
foreach (@$probs) {
$out .= '<li><a href="/report/' . $_->{id} . '">'. ent($_->{title});
- $out .= '</a>';
+ $out .= '</a></li>';
}
$out .= '</ul>' if @$probs;
$out .= '</div>';
@@ -260,7 +259,7 @@ sub submit_update {
$h{url} = $base . '/C/' . mySociety::AuthToken::store('update', { id => $id, add_alert => $input{add_alert} } );
dbh()->commit();
- my $out = Page::send_email($q, $input{rznvy}, $input{name}, 'update', %h);
+ my $out = Page::send_confirmation_email($q, $input{rznvy}, $input{name}, 'update', %h);
return $out;
}
@@ -433,7 +432,7 @@ Please <a href="/contact">let us know what went on</a> and we\'ll look into it.'
$h{url} = $base . '/P/' . mySociety::AuthToken::store('problem', $id);
dbh()->commit();
- $out = Page::send_email($q, $input{email}, $input{name}, 'problem', %h);
+ $out = Page::send_confirmation_email($q, $input{email}, $input{name}, 'problem', %h);
}
return $out;
@@ -500,8 +499,10 @@ sub display_form {
$longitude = $lon;
}
} elsif ($pin_x && $pin_y) {
- # tilma map was clicked on
- ($latitude, $longitude) = FixMyStreet::Map::click_to_wgs84($pin_tile_x, $pin_x, $pin_tile_y, $pin_y);
+
+ # Map was clicked on (tilma, or non-JS OpenLayers, for example)
+ ($latitude, $longitude) = FixMyStreet::Map::click_to_wgs84($q, $pin_tile_x, $pin_x, $pin_tile_y, $pin_y);
+
} elsif ( $input{partial} && $input{pc} && !length $input{latitude} && !length $input{longitude} ) {
my $error;
try {
@@ -517,6 +518,9 @@ sub display_form {
$longitude = $input_h{longitude};
}
+ # Shrink, as don't need accuracy plus we want them as English strings
+ ($latitude, $longitude) = map { Utils::truncate_coordinate($_) } ( $latitude, $longitude );
+
# Look up councils and do checks for the point we've got
my @area_types = Cobrand::area_types($cobrand);
# XXX: I think we want in_gb_locale around the next line, needs testing
@@ -606,6 +610,8 @@ please specify the closest point on land.')) unless %$all_councils;
my $form_action = Cobrand::url($cobrand, '/', $q);
$vars{form_start} = <<EOF;
<form action="$form_action" method="post" name="mapSkippedForm"$enctype>
+<input type="hidden" name="latitude" value="$latitude">
+<input type="hidden" name="longitude" value="$longitude">
<input type="hidden" name="pc" value="$input_h{pc}">
<input type="hidden" name="skipped" value="1">
$cobrand_form_elements
@@ -627,9 +633,9 @@ EOF
if (my $token = $input{partial}) {
$partial_id = mySociety::AuthToken::retrieve('partial', $token);
if ($partial_id) {
- $vars{form_start} .= $q->p({id=>'unknown'}, 'Please note your report has
- <strong>not yet been sent</strong>. Choose a category
- and add further information below, then submit.');
+ $vars{form_start} .=
+ $q->p({ id => 'unknown' },
+ _('Please note your report has <strong>not yet been sent</strong>. Choose a category and add further information below, then submit.'));
}
}
$vars{text_located} = $q->p(_('You have located the problem at the point marked with a purple pin on the map.
@@ -718,10 +724,6 @@ photo of the problem if you have one), etc.'));
$vars{text_help} .= $q->p(_('Please fill in details of the problem below.'));
}
- $vars{text_help} .= '
-<input type="hidden" name="latitude" value="' . $latitude . '">
-<input type="hidden" name="longitude" value="' . $longitude . '">';
-
if (@errors) {
$vars{errors} = '<ul class="error"><li>' . join('</li><li>', @errors) . '</li></ul>';
}
@@ -843,7 +845,7 @@ sub display_location {
return front_page( $q, @errors )
unless ( $x && $y )
|| $input{pc}
- || ( defined $latitude && defined $longitude );
+ || ( $latitude ne '' && $longitude ne '' );
if ( $x && $y ) {
@@ -894,7 +896,7 @@ sub display_location {
}
my $on_list = '';
foreach (@$on_map) {
- my $report_url = NewURL($q, -retain => 1, -url => '/report/' . $_->{id}, pc => undef, x => undef, 'y' => undef);
+ my $report_url = NewURL($q, -url => '/report/' . $_->{id});
$report_url = Cobrand::url($cobrand, $report_url, $q);
$on_list .= '<li><a href="' . $report_url . '">';
$on_list .= ent($_->{title}) . '</a> <small>(';
@@ -907,7 +909,7 @@ sub display_location {
my $around_list = '';
foreach (@$around_map) {
- my $report_url = Cobrand::url($cobrand, NewURL($q, -retain => 1, -url => '/report/' . $_->{id}, pc => undef, x => undef, 'y' => undef), $q);
+ my $report_url = Cobrand::url($cobrand, NewURL($q, -url => '/report/' . $_->{id}), $q);
$around_list .= '<li><a href="' . $report_url . '">';
my $dist = int($_->{distance}*10+0.5);
$dist = $dist / 10;
@@ -929,9 +931,14 @@ sub display_location {
$hide_link = NewURL($q, -retain=>1, no_pins=>1);
$hide_text = _('Hide pins');
}
- my $map_links = "<p id='sub_map_links'><a id='hide_pins_link' rel='nofollow' href='$hide_link'>$hide_text</a> | <a id='all_pins_link' rel='nofollow' href='$all_link'>$all_text</a></p> <input type='hidden' id='all_pins' name='all_pins' value='$input_h{all_pins}'>";
+ my $map_links = "<p id='sub_map_links'><a id='hide_pins_link' rel='nofollow' href='$hide_link'>$hide_text</a>";
+ if (mySociety::Config::get('COUNTRY') eq 'GB') {
+ $map_links .= " | <a id='all_pins_link' rel='nofollow' href='$all_link'>$all_text</a></p> <input type='hidden' id='all_pins' name='all_pins' value='$input_h{all_pins}'>";
+ } else {
+ $map_links .= "</p>";
+ }
- # truncate the lat,lon for nicer rss urls
+ # truncate the lat,lon for nicer rss urls, and strings for outputting
my ( $short_lat, $short_lon ) =
map { Utils::truncate_coordinate($_) } #
( $latitude, $longitude );
@@ -956,14 +963,11 @@ sub display_location {
} else {
$rss_url = "/rss/l/$short_lat,$short_lon";
}
- $rss_url = Cobrand::url( $cobrand,
- NewURL($q, -retain => 1, -url=> $rss_url,
- pc => undef, x => undef, y => undef, lat=> undef, lon => undef ),
- $q);
+ $rss_url = Cobrand::url( $cobrand, NewURL($q, -url=> $rss_url), $q);
my %vars = (
'map' => FixMyStreet::Map::display_map($q,
- latitude => $latitude, longitude => $longitude,
+ latitude => $short_lat, longitude => $short_lon,
type => 1,
pins => \@pins,
post => $map_links
@@ -971,7 +975,7 @@ sub display_location {
map_end => FixMyStreet::Map::display_map_end(1),
url_home => Cobrand::url($cobrand, '/', $q),
url_rss => $rss_url,
- url_email => Cobrand::url($cobrand, NewURL($q, -retain => 1, pc => undef, lat => $short_lat, lon => $short_lon, -url=>'/alert', feed=>"local:$short_lat:$short_lon"), $q),
+ url_email => Cobrand::url($cobrand, NewURL($q, lat => $short_lat, lon => $short_lon, -url=>'/alert', feed=>"local:$short_lat:$short_lon"), $q),
url_skip => $url_skip,
email_me => _('Email me new local problems'),
rss_alt => _('RSS feed'),
@@ -1066,7 +1070,7 @@ sub display_problem {
map_start => FixMyStreet::Map::display_map($q,
latitude => $problem->{latitude}, longitude => $problem->{longitude},
type => 0,
- pins => [ [ $problem->{latitude}, $problem->{longitude}, 'blue' ] ],
+ pins => $problem->{used_map} ? [ [ $problem->{latitude}, $problem->{longitude}, 'blue' ] ] : [],
post => $map_links
),
map_end => FixMyStreet::Map::display_map_end(0),
diff --git a/web/js.js b/web/js.js
index b2012fc84..07bede2d7 100644
--- a/web/js.js
+++ b/web/js.js
@@ -16,8 +16,12 @@ YAHOO.util.Event.onContentReady('mapForm', function() {
this.onsubmit = function() { return false; };
}
- this.x.value = fixmystreet.x + 3;
- this.y.value = fixmystreet.y + 3;
+ /* XXX Should be in Tilma code only */
+ if (this.x) {
+ this.x.value = fixmystreet.x + 3;
+ this.y.value = fixmystreet.y + 3;
+ }
+
/*
if (swfu && swfu.getStats().files_queued > 0) {
swfu.startUpload();
diff --git a/web/js/map-OpenLayers.js b/web/js/map-OpenLayers.js
new file mode 100644
index 000000000..1134bafb7
--- /dev/null
+++ b/web/js/map-OpenLayers.js
@@ -0,0 +1,182 @@
+YAHOO.util.Event.onContentReady('map', function() {
+
+ fixmystreet.ZOOM_OFFSET = 14;
+
+ var perm = new OpenLayers.Control.Permalink();
+ set_map_config(perm);
+
+ fixmystreet.map = new OpenLayers.Map("map", {
+ controls: fixmystreet.controls,
+ displayProjection: new OpenLayers.Projection("EPSG:4326")
+ });
+
+ fixmystreet.layer_options = OpenLayers.Util.extend({
+ zoomOffset: fixmystreet.ZOOM_OFFSET,
+ transitionEffect: 'resize',
+ numZoomLevels: 4
+ }, fixmystreet.layer_options);
+ var layer = new fixmystreet.map_type("", fixmystreet.layer_options);
+ fixmystreet.map.addLayer(layer);
+
+ if (!fixmystreet.map.getCenter()) {
+ var centre = new OpenLayers.LonLat( fixmystreet.longitude, fixmystreet.latitude );
+ centre.transform(
+ new OpenLayers.Projection("EPSG:4326"),
+ fixmystreet.map.getProjectionObject()
+ );
+ fixmystreet.map.setCenter(centre, 2);
+ }
+
+ if (document.getElementById('mapForm')) {
+ var click = new OpenLayers.Control.Click();
+ fixmystreet.map.addControl(click);
+ click.activate();
+ }
+
+ /* To let permalink not be caught by the Click layer, answer found
+ * at http://www.mail-archive.com/users@openlayers.org/msg12958.html
+ * Not sure why you can't use eventListeners or events.register...
+ */
+ OpenLayers.Event.observe( perm.element, "click", function(e) {
+ OpenLayers.Event.stop(e);
+ location.href = OpenLayers.Event.element(e).href;
+ return false;
+ });
+
+ fixmystreet.markers = new OpenLayers.Layer.Markers("Markers");
+ var cols = { 'red':'R', 'green':'G', 'blue':'B', 'purple':'P' };
+ for (var i=0; i<fixmystreet.pins.length; i++) {
+ var pin = fixmystreet.pins[i];
+ var src = '/i/pin' + cols[pin[2]] + '.gif';
+ var size = new OpenLayers.Size(32, 59);
+ var offset = new OpenLayers.Pixel(-3, -size.h-2);
+ var icon = new OpenLayers.Icon(src, size, offset);
+ var loc = new OpenLayers.LonLat(pin[1], pin[0]);
+ loc.transform(
+ new OpenLayers.Projection("EPSG:4326"),
+ fixmystreet.map.getProjectionObject()
+ );
+ var marker = new OpenLayers.Marker(loc, icon);
+ if (pin[3]) {
+ marker.id = pin[3];
+ marker.events.register('click', marker, function(evt) {
+ window.location = '/report/' + this.id;
+ OpenLayers.Event.stop(evt);
+ });
+ }
+ fixmystreet.markers.addMarker(marker);
+ }
+ fixmystreet.map.addLayer(fixmystreet.markers);
+
+});
+
+YAHOO.util.Event.addListener('hide_pins_link', 'click', function(e) {
+ YAHOO.util.Event.preventDefault(e);
+ var showhide = [
+ 'Show pins', 'Hide pins',
+ 'Dangos pinnau', 'Cuddio pinnau',
+ "Vis nåler", "Gjem nåler"
+ ];
+ for (var i=0; i<showhide.length; i+=2) {
+ if (this.innerHTML == showhide[i]) {
+ fixmystreet.markers.setVisibility(true);
+ this.innerHTML = showhide[i+1];
+ } else if (this.innerHTML == showhide[i+1]) {
+ fixmystreet.markers.setVisibility(false);
+ this.innerHTML = showhide[i];
+ }
+ }
+});
+
+/* Overridding the buttonDown function of PanZoom so that it does
+ zoomTo(0) rather than zoomToMaxExtent()
+*/
+OpenLayers.Control.PanZoomFMS = OpenLayers.Class(OpenLayers.Control.PanZoom, {
+ buttonDown: function (evt) {
+ if (!OpenLayers.Event.isLeftClick(evt)) {
+ return;
+ }
+
+ switch (this.action) {
+ case "panup":
+ this.map.pan(0, -this.getSlideFactor("h"));
+ break;
+ case "pandown":
+ this.map.pan(0, this.getSlideFactor("h"));
+ break;
+ case "panleft":
+ this.map.pan(-this.getSlideFactor("w"), 0);
+ break;
+ case "panright":
+ this.map.pan(this.getSlideFactor("w"), 0);
+ break;
+ case "zoomin":
+ this.map.zoomIn();
+ break;
+ case "zoomout":
+ this.map.zoomOut();
+ break;
+ case "zoomworld":
+ this.map.zoomTo(0);
+ break;
+ }
+
+ OpenLayers.Event.stop(evt);
+ }
+});
+
+/* Overriding Permalink so that it can pass the correct zoom to OSM */
+OpenLayers.Control.PermalinkFMS = OpenLayers.Class(OpenLayers.Control.Permalink, {
+ updateLink: function() {
+ var separator = this.anchor ? '#' : '?';
+ var href = this.base;
+ if (href.indexOf(separator) != -1) {
+ href = href.substring( 0, href.indexOf(separator) );
+ }
+
+ href += separator + OpenLayers.Util.getParameterString(this.createParams(null, this.map.getZoom()+fixmystreet.ZOOM_OFFSET));
+ if (this.anchor && !this.element) {
+ window.location.href = href;
+ }
+ else {
+ this.element.href = href;
+ }
+ }
+});
+
+/* Click handler */
+OpenLayers.Control.Click = OpenLayers.Class(OpenLayers.Control, {
+ defaultHandlerOptions: {
+ 'single': true,
+ 'double': false,
+ 'pixelTolerance': 0,
+ 'stopSingle': false,
+ 'stopDouble': false
+ },
+
+ initialize: function(options) {
+ this.handlerOptions = OpenLayers.Util.extend(
+ {}, this.defaultHandlerOptions
+ );
+ OpenLayers.Control.prototype.initialize.apply(
+ this, arguments
+ );
+ this.handler = new OpenLayers.Handler.Click(
+ this, {
+ 'click': this.trigger
+ }, this.handlerOptions
+ );
+ },
+
+ trigger: function(e) {
+ var lonlat = fixmystreet.map.getLonLatFromViewPortPx(e.xy);
+ lonlat.transform(
+ fixmystreet.map.getProjectionObject(),
+ new OpenLayers.Projection("EPSG:4326")
+ );
+ document.getElementById('fixmystreet.latitude').value = lonlat.lat;
+ document.getElementById('fixmystreet.longitude').value = lonlat.lon;
+ document.getElementById('mapForm').submit();
+ }
+});
+
diff --git a/web/js/map-OpenStreetMap.js b/web/js/map-OpenStreetMap.js
index 6e350537a..9d226f6a7 100644
--- a/web/js/map-OpenStreetMap.js
+++ b/web/js/map-OpenStreetMap.js
@@ -1,126 +1,13 @@
-YAHOO.util.Event.onContentReady('map', function() {
- fixmystreet.map = new OpenLayers.Map("map", {
- controls: [
- new OpenLayers.Control.ArgParser(),
- //new OpenLayers.Control.LayerSwitcher(),
- new OpenLayers.Control.Navigation(),
- new OpenLayers.Control.PanZoomFMS()
- ],
- displayProjection: new OpenLayers.Projection("EPSG:4326")
- });
- var osm = new fixmystreet.map_type("", {
- zoomOffset: 14,
- numZoomLevels: 4
- });
- fixmystreet.map.addLayer(osm);
-
- var centre = new OpenLayers.LonLat( fixmystreet.longitude, fixmystreet.latitude );
- centre.transform(
- new OpenLayers.Projection("EPSG:4326"),
- fixmystreet.map.getProjectionObject()
- );
- fixmystreet.map.setCenter(centre, 2);
-
- if (document.getElementById('mapForm')) {
- var click = new OpenLayers.Control.Click();
- fixmystreet.map.addControl(click);
- click.activate();
- }
-
- var markers = new OpenLayers.Layer.Markers("Markers");
- var cols = { 'red':'R', 'green':'G', 'blue':'B', 'purple':'P' };
- for (var i=0; i<fixmystreet.pins.length; i++) {
- var pin = fixmystreet.pins[i];
- var src = '/i/pin' + cols[pin[2]] + '.gif';
- var size = new OpenLayers.Size(32, 59);
- var offset = new OpenLayers.Pixel(-3, -size.h-2);
- var icon = new OpenLayers.Icon(src, size, offset);
- var loc = new OpenLayers.LonLat(pin[1], pin[0]);
- loc.transform(
- new OpenLayers.Projection("EPSG:4326"),
- fixmystreet.map.getProjectionObject()
- );
- var marker = new OpenLayers.Marker(loc, icon);
- if (pin[3]) {
- marker.events.register('click', marker, function(evt) { window.location = '/report/' + pin[3]; OpenLayers.Event.stop(evt); });
- }
- markers.addMarker(marker);
- }
- fixmystreet.map.addLayer(markers);
-
-});
-
-/* Overridding the buttonDown function of PanZoom so that it does
- zoomTo(0) rather than zoomToMaxExtent()
-*/
-OpenLayers.Control.PanZoomFMS = OpenLayers.Class(OpenLayers.Control.PanZoom, {
- buttonDown: function (evt) {
- if (!OpenLayers.Event.isLeftClick(evt)) {
- return;
- }
-
- switch (this.action) {
- case "panup":
- this.map.pan(0, -this.getSlideFactor("h"));
- break;
- case "pandown":
- this.map.pan(0, this.getSlideFactor("h"));
- break;
- case "panleft":
- this.map.pan(-this.getSlideFactor("w"), 0);
- break;
- case "panright":
- this.map.pan(this.getSlideFactor("w"), 0);
- break;
- case "zoomin":
- this.map.zoomIn();
- break;
- case "zoomout":
- this.map.zoomOut();
- break;
- case "zoomworld":
- this.map.zoomTo(0);
- break;
- }
-
- OpenLayers.Event.stop(evt);
- }
-});
-
-OpenLayers.Control.Click = OpenLayers.Class(OpenLayers.Control, {
- defaultHandlerOptions: {
- 'single': true,
- 'double': false,
- 'pixelTolerance': 0,
- 'stopSingle': false,
- 'stopDouble': false
- },
-
- initialize: function(options) {
- this.handlerOptions = OpenLayers.Util.extend(
- {}, this.defaultHandlerOptions
- );
- OpenLayers.Control.prototype.initialize.apply(
- this, arguments
- );
- this.handler = new OpenLayers.Handler.Click(
- this, {
- 'click': this.trigger
- }, this.handlerOptions
- );
- },
-
- trigger: function(e) {
- var lonlat = fixmystreet.map.getLonLatFromViewPortPx(e.xy);
- lonlat.transform(
- fixmystreet.map.getProjectionObject(),
- new OpenLayers.Projection("EPSG:4326")
- );
- document.getElementById('fixmystreet.latitude').value = lonlat.lat;
- document.getElementById('fixmystreet.longitude').value = lonlat.lon;
- document.getElementById('mapForm').submit();
- }
-});
+function set_map_config(perm) {
+ fixmystreet.controls = [
+ new OpenLayers.Control.ArgParser(),
+ //new OpenLayers.Control.LayerSwitcher(),
+ new OpenLayers.Control.Navigation(),
+ perm,
+ new OpenLayers.Control.PermalinkFMS('osm_link', 'http://www.openstreetmap.org/'),
+ new OpenLayers.Control.PanZoomFMS()
+ ];
+}
// http://www.openstreetmap.org/openlayers/OpenStreetMap.js (added maxResolution)
diff --git a/web/js/map-bing-ol.js b/web/js/map-bing-ol.js
index ba9445326..254d407f4 100644
--- a/web/js/map-bing-ol.js
+++ b/web/js/map-bing-ol.js
@@ -1,33 +1,13 @@
-YAHOO.util.Event.onContentReady('map', function() {
- var map = new OpenLayers.Map("map", {
- controls: [
- new OpenLayers.Control.ArgParser(),
- //new OpenLayers.Control.LayerSwitcher(),
- new OpenLayers.Control.Navigation(),
- new OpenLayers.Control.PanZoom()
- ],
- displayProjection: new OpenLayers.Projection("EPSG:4326")
- });
- var bing = new OpenLayers.Layer.Bing("", {
- zoomOffset: 13,
- numZoomLevels: 4
- });
- map.addLayer(bing);
-
- var centre = new OpenLayers.LonLat( fixmystreet.easting, fixmystreet.northing );
- centre.transform(
- new OpenLayers.Projection("EPSG:27700"),
- map.getProjectionObject()
- );
- map.setCenter(centre, 3);
-});
-
-OpenLayers.Util.OS = {};
-OpenLayers.Util.OS.MISSING_TILE_URL = "http://openstreetmap.org/openlayers/img/404.png";
-OpenLayers.Util.OS.originalOnImageLoadError = OpenLayers.Util.onImageLoadError;
-OpenLayers.Util.onImageLoadError = function() {
- OpenLayers.Util.OS.originalOnImageLoadError;
-};
+function set_map_config(perm) {
+ fixmystreet.ZOOM_OFFSET = 13;
+ fixmystreet.controls = [
+ new OpenLayers.Control.ArgParser(),
+ new OpenLayers.Control.Navigation(),
+ perm,
+ new OpenLayers.Control.PanZoomFMS()
+ ];
+ fixmystreet.map_type = OpenLayers.Layer.Bing;
+}
OpenLayers.Layer.Bing = OpenLayers.Class(OpenLayers.Layer.XYZ, {
initialize: function(name, options) {
@@ -38,6 +18,7 @@ OpenLayers.Layer.Bing = OpenLayers.Class(OpenLayers.Layer.XYZ, {
numZoomLevels: 18,
transitionEffect: "resize",
sphericalMercator: true,
+ buffer: 0,
attribution: "© Microsoft / OS 2010"
}, options);
var newArguments = [name, url, options];
diff --git a/web/js/map-bing.js b/web/js/map-bing.js
index fbbbcc676..748a03525 100644
--- a/web/js/map-bing.js
+++ b/web/js/map-bing.js
@@ -1,6 +1,7 @@
YAHOO.util.Event.onContentReady('map', function() {
- var centre = new Microsoft.Maps.Location( fixmystreet.lat, fixmystreet.lon );
+ var centre = new Microsoft.Maps.Location( fixmystreet.latitude, fixmystreet.longitude );
var map = new Microsoft.Maps.Map(document.getElementById("map"), {
+ credentials: fixmystreet.key,
mapTypeId: Microsoft.Maps.MapTypeId.ordnanceSurvey,
center: centre,
zoom: 15,
diff --git a/web/js/map-google.js b/web/js/map-google.js
index 77e54ab7c..ab9bb9042 100644
--- a/web/js/map-google.js
+++ b/web/js/map-google.js
@@ -1,5 +1,5 @@
YAHOO.util.Event.onContentReady('map', function() {
- var centre = new google.maps.LatLng( fixmystreet.lat, fixmystreet.lon );
+ var centre = new google.maps.LatLng( fixmystreet.latitude, fixmystreet.longitude );
var map = new google.maps.Map(document.getElementById("map"), {
mapTypeId: google.maps.MapTypeId.ROADMAP,
center: centre,
diff --git a/web/js/map-streetview.js b/web/js/map-streetview.js
index 088e5b6a2..cfd595b95 100644
--- a/web/js/map-streetview.js
+++ b/web/js/map-streetview.js
@@ -1,27 +1,13 @@
-YAHOO.util.Event.onContentReady('map', function() {
- var map = new OpenLayers.Map("map", {
- controls: [
- new OpenLayers.Control.ArgParser(),
- //new OpenLayers.Control.LayerSwitcher(),
- new OpenLayers.Control.Navigation(),
- new OpenLayers.Control.PanZoom()
- ],
- displayProjection: new OpenLayers.Projection("EPSG:4326")
- });
- var streetview = new OpenLayers.Layer.StreetView("OS StreetView (1:10000)", {
- zoomOffset: 14,
- numZoomLevels: 4
- });
- map.addLayer(streetview);
-
- var centre = new OpenLayers.LonLat( fixmystreet.easting, fixmystreet.northing );
- centre.transform(
- new OpenLayers.Projection("EPSG:27700"),
- map.getProjectionObject()
- );
- map.setCenter(centre, 2);
-});
-
+function set_map_config(perm) {
+ fixmystreet.controls = [
+ new OpenLayers.Control.ArgParser(),
+ //new OpenLayers.Control.LayerSwitcher(),
+ new OpenLayers.Control.Navigation(),
+ perm,
+ new OpenLayers.Control.PanZoomFMS()
+ ];
+ fixmystreet.map_type = OpenLayers.Layer.StreetView;
+}
// http://os.openstreetmap.org/openlayers/OS.js (added one line)
diff --git a/web/js/map-tilma-ol.js b/web/js/map-tilma-ol.js
index cfd196c1d..5230a5d2c 100644
--- a/web/js/map-tilma-ol.js
+++ b/web/js/map-tilma-ol.js
@@ -1,21 +1,19 @@
-YAHOO.util.Event.onContentReady('map', function() {
- var map = new OpenLayers.Map("map", {
- controls: [
- new OpenLayers.Control.ArgParser(),
- new OpenLayers.Control.Navigation(),
- new OpenLayers.Control.PanPanel()
- ]
- });
- var tilma = new OpenLayers.Layer.Tilma("Tilma", {
+function set_map_config(perm) {
+ fixmystreet.controls = [
+ new OpenLayers.Control.ArgParser(),
+ perm,
+ new OpenLayers.Control.Navigation(),
+ new OpenLayers.Control.PanPanel()
+ ];
+ fixmystreet.map_type = OpenLayers.Layer.Tilma;
+ fixmystreet.layer_options = {
maxResolution: fixmystreet.maxResolution,
tileSize: new OpenLayers.Size(fixmystreet.tilewidth, fixmystreet.tileheight),
- map_type: fixmystreet.tile_type
- });
- map.addLayer(tilma);
-
- var centre = new OpenLayers.LonLat( fixmystreet.easting, fixmystreet.northing );
- map.setCenter(centre);
-});
+ map_type: fixmystreet.tile_type,
+ numZoomLevels: 1,
+ zoomOffset: 0
+ };
+}
OpenLayers.Layer.Tilma = OpenLayers.Class(OpenLayers.Layer.XYZ, {
initialize: function(name, options) {
@@ -23,8 +21,9 @@ OpenLayers.Layer.Tilma = OpenLayers.Class(OpenLayers.Layer.XYZ, {
options = OpenLayers.Util.extend({
transitionEffect: "resize",
numZoomLevels: 1,
+ projection: "EPSG:27700",
units: "m",
- maxExtent: new OpenLayers.Bounds(0, 0, 700000, 1300000),
+ maxExtent: new OpenLayers.Bounds(0, 0, 700000, 1300000)
}, options);
var newArguments = [name, url, options];
OpenLayers.Layer.XYZ.prototype.initialize.apply(this, newArguments);
diff --git a/web/js/map-tilma.js b/web/js/map-tilma.js
index 1ae38cff1..1b8cc6450 100644
--- a/web/js/map-tilma.js
+++ b/web/js/map-tilma.js
@@ -135,7 +135,7 @@ function update_tiles(dx, dy, force) {
}
function load_pins(x, y) {
- if (document.getElementById('formX')) {
+ if (document.getElementById('formX') && !document.getElementById('problem_submit')) {
all_pins = '';
if (document.getElementById('all_pins')) {
all_pins = document.getElementById('all_pins').value;
diff --git a/web/reports.cgi b/web/reports.cgi
index 784c52917..22dbe344a 100755
--- a/web/reports.cgi
+++ b/web/reports.cgi
@@ -61,7 +61,6 @@ sub main {
my $areas_f = mySociety::MaPit::call('areas', $fylke, type => \@area_types);
if (keys %$areas_f == 1) {
($fylke) = values %$areas_f;
- $kommune = decode_utf8($kommune);
foreach (values %$areas_k) {
if ($_->{name} eq $kommune && $_->{parent_area} == $fylke->{id}) {
$one_council = $_;
@@ -84,7 +83,7 @@ sub main {
$area_name = $one_council->{name};
} else {
foreach (keys %$areas) {
- if ($areas->{$_}->{name} =~ /^\Q$q_council\E (Borough|City|District|County) Council$/) {
+ if ($areas->{$_}->{name} eq $q_council || $areas->{$_}->{name} =~ /^\Q$q_council\E (Borough|City|District|County) Council$/) {
$one_council = $areas->{$_};
$area_type = $areas->{$_}->{type};
$area_name = $q_council;
@@ -331,7 +330,7 @@ sub list_problems {
$out .= '<li><a href="' . $url . '">';
$out .= ent($_->{title});
$out .= '</a>';
- $out .= ' <small>(sent to both)</small>' if $_->{councils}>1;
+ $out .= ' <small>' . _('(sent to both)') . '</small>' if $_->{councils}>1;
$out .= ' <small>' . _('(not sent to council)') . '</small>' if $_->{councils}==0 && $q->{site} ne 'emptyhomes';
$out .= '<br><small>' . ent($_->{detail}) . '</small>' if $all;
$out .= '</li>';
diff --git a/web/rss.cgi b/web/rss.cgi
index 1273a2a5e..1570ca97f 100755
--- a/web/rss.cgi
+++ b/web/rss.cgi
@@ -15,6 +15,7 @@ use Encode;
use URI::Escape;
use FixMyStreet::Alert;
use FixMyStreet::Geocode;
+use mySociety::Locale;
use mySociety::MaPit;
use mySociety::Gaze;
use Utils;
@@ -143,6 +144,9 @@ sub rss_local_problems {
} else {
$d = mySociety::Gaze::get_radius_containing_population($lat, $lon, 200000);
$d = int($d*10+0.5)/10;
+ mySociety::Locale::in_gb_locale {
+ $d = sprintf("%f", $d);
+ }
}
my $xsl = Cobrand::feed_xsl($cobrand);
diff --git a/web/tms-signup.cgi b/web/tms-signup.cgi
index 44099417f..5975a324f 100755
--- a/web/tms-signup.cgi
+++ b/web/tms-signup.cgi
@@ -108,7 +108,7 @@ sub tms_do_subscribe {
mobile => $input{mobile},
});
dbh()->commit();
- return Page::send_email($q, $input{email}, $input{name}, 'tms', %h);
+ return Page::send_confirmation_email($q, $input{email}, $input{name}, 'tms', %h);
}
sub tms_confirm {
diff --git a/web/xsl.eha.xsl b/web/xsl.eha.xsl
index 6c66037d7..14015cfd9 100644
--- a/web/xsl.eha.xsl
+++ b/web/xsl.eha.xsl
@@ -22,7 +22,7 @@
</ul>
</div>
- <div id="wrapper"><div id="content">
+ <div id="wrapper"><div id="mysociety">
<xsl:apply-templates select="rss/channel"/>
</div></div>
diff --git a/web/xsl.xsl b/web/xsl.xsl
index 2736cb83b..12a4a93d5 100644
--- a/web/xsl.xsl
+++ b/web/xsl.xsl
@@ -12,7 +12,7 @@
</head>
<body>
<div id="header"><a href="/">FixMyStreet</a></div>
- <div id="wrapper"><div id="content">
+ <div id="wrapper"><div id="mysociety">
<xsl:apply-templates select="rss/channel"/>
</div></div>