aboutsummaryrefslogtreecommitdiffstats
path: root/web/js
diff options
context:
space:
mode:
Diffstat (limited to 'web/js')
-rw-r--r--web/js/fixmystreet.js60
-rw-r--r--web/js/map-OpenLayers.js178
-rw-r--r--web/js/map-bing-ol.js26
-rw-r--r--web/js/map-bing.js2
-rw-r--r--web/js/map-google.js2
-rw-r--r--web/js/map-tilma-ol.js41
-rw-r--r--web/js/map-tilma.js320
-rw-r--r--web/js/southampton.js50
8 files changed, 273 insertions, 406 deletions
diff --git a/web/js/fixmystreet.js b/web/js/fixmystreet.js
new file mode 100644
index 000000000..4b19dc53e
--- /dev/null
+++ b/web/js/fixmystreet.js
@@ -0,0 +1,60 @@
+/*
+ * fixmystreet.js
+ * FixMyStreet JavaScript
+ */
+
+$(function(){
+
+ $('#pc').focus();
+
+ $('input[type=submit]').removeAttr('disabled');
+ $('#mapForm').submit(function() {
+ if (this.submit_problem) {
+ $('input[type=submit]', this).prop("disabled", true);
+ }
+ return true;
+ });
+
+ if (!$('#been_fixed_no').prop('checked') && !$('#been_fixed_unknown').prop('checked')) {
+ $('#another_qn').hide();
+ }
+ $('#been_fixed_no').click(function() {
+ $('#another_qn').show('fast');
+ });
+ $('#been_fixed_unknown').click(function() {
+ $('#another_qn').show('fast');
+ });
+ $('#been_fixed_yes').click(function() {
+ $('#another_qn').hide('fast');
+ });
+
+ var timer;
+ function email_alert_close() {
+ $('#email_alert_box').hide('fast');
+ }
+
+ $('#email_alert').click(function(e) {
+ if (!$('#email_alert_box').length)
+ return true;
+ e.preventDefault();
+ if ($('#email_alert_box').is(':visible')) {
+ email_alert_close();
+ } else {
+ var pos = $(this).position();
+ $('#email_alert_box').css( { 'left': ( pos.left - 20 ) + 'px', 'top': ( pos.top + 20 ) + 'px' } );
+ $('#email_alert_box').show('fast');
+ $('#alert_rznvy').focus();
+ }
+ }).hover(function() {
+ window.clearTimeout(timer);
+ }, function() {
+ timer = window.setTimeout(email_alert_close, 2000);
+ });
+
+ $('#email_alert_box').hover(function() {
+ window.clearTimeout(timer);
+ }, function() {
+ timer = window.setTimeout(email_alert_close, 2000);
+ });
+
+});
diff --git a/web/js/map-OpenLayers.js b/web/js/map-OpenLayers.js
index ed3ca4653..d00079517 100644
--- a/web/js/map-OpenLayers.js
+++ b/web/js/map-OpenLayers.js
@@ -1,6 +1,4 @@
-YAHOO.util.Event.onContentReady('map', function() {
-
- fixmystreet.ZOOM_OFFSET = 14;
+$(function(){
var perm = new OpenLayers.Control.Permalink();
set_map_config(perm);
@@ -11,9 +9,9 @@ YAHOO.util.Event.onContentReady('map', function() {
});
fixmystreet.layer_options = OpenLayers.Util.extend({
- zoomOffset: fixmystreet.ZOOM_OFFSET,
+ zoomOffset: fixmystreet.zoomOffset,
transitionEffect: 'resize',
- numZoomLevels: 4
+ numZoomLevels: fixmystreet.numZoomLevels
}, fixmystreet.layer_options);
var layer = new fixmystreet.map_type("", fixmystreet.layer_options);
fixmystreet.map.addLayer(layer);
@@ -24,7 +22,7 @@ YAHOO.util.Event.onContentReady('map', function() {
new OpenLayers.Projection("EPSG:4326"),
fixmystreet.map.getProjectionObject()
);
- fixmystreet.map.setCenter(centre, fixmystreet.zoom || 2);
+ fixmystreet.map.setCenter(centre, fixmystreet.zoom || 3);
}
if (document.getElementById('mapForm')) {
@@ -43,35 +41,97 @@ YAHOO.util.Event.onContentReady('map', function() {
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);
+ // Vector layers must be added onload as IE sucks
+ if ($.browser.msie) {
+ $(window).load(fixmystreet_onload);
+ } else {
+ fixmystreet_onload();
+ }
+});
+
+function fixmystreet_onload() {
+ if ( fixmystreet.area ) {
+ var area = new OpenLayers.Layer.Vector("KML", {
+ strategies: [ new OpenLayers.Strategy.Fixed() ],
+ protocol: new OpenLayers.Protocol.HTTP({
+ url: "/mapit/area/" + fixmystreet.area + ".kml?simplify_tolerance=0.0001",
+ format: new OpenLayers.Format.KML()
+ })
+ });
+ fixmystreet.map.addLayer(area);
+ area.events.register('loadend', null, function(a,b,c) {
+ var bounds = area.getDataExtent();
+ if (bounds) { fixmystreet.map.zoomToExtent( bounds ); }
+ });
+ }
+
+ var pin_layer_options = {
+ styleMap: new OpenLayers.StyleMap({
+ 'default': new OpenLayers.Style({
+ externalGraphic: "/i/pin${type}.gif",
+ graphicTitle: "${title}",
+ graphicWidth: 32,
+ graphicHeight: 59,
+ graphicOpacity: 1,
+ graphicXOffset: -2,
+ graphicYOffset: -59
+ })
+ })
+ };
+ if (fixmystreet.page == 'around') {
+ pin_layer_options.strategies = [ new OpenLayers.Strategy.BBOX() ];
+ pin_layer_options.protocol = new OpenLayers.Protocol.HTTP({
+ url: '/ajax',
+ params: fixmystreet.all_pins ? { all_pins: 1 } : { },
+ format: new OpenLayers.Format.FixMyStreet()
+ });
+ }
+ fixmystreet.markers = new OpenLayers.Layer.Vector("Pins", pin_layer_options);
+
+ var markers = fms_markers_list( fixmystreet.pins, true );
+ fixmystreet.markers.addFeatures( markers );
+ if (fixmystreet.page == 'around' || fixmystreet.page == 'reports' || fixmystreet.page == 'my') {
+ fixmystreet.markers.events.register( 'featureselected', fixmystreet.markers, function(evt) {
+ window.location = '/report/' + evt.feature.attributes.id;
+ OpenLayers.Event.stop(evt);
+ });
+ var select = new OpenLayers.Control.SelectFeature( fixmystreet.markers );
+ fixmystreet.map.addControl( select );
+ select.activate();
}
fixmystreet.map.addLayer(fixmystreet.markers);
-});
+ if ( fixmystreet.zoomToBounds ) {
+ var bounds = fixmystreet.markers.getDataExtent();
+ if (bounds) { fixmystreet.map.zoomToExtent( bounds ); }
+ }
+}
-YAHOO.util.Event.addListener('hide_pins_link', 'click', function(e) {
- YAHOO.util.Event.preventDefault(e);
+function fms_markers_list(pins, transform) {
+ var cols = { 'red':'R', 'green':'G', 'blue':'B', 'purple':'P' };
+ var markers = [];
+ for (var i=0; i<pins.length; i++) {
+ var pin = pins[i];
+ var loc = new OpenLayers.Geometry.Point(pin[1], pin[0]);
+ if (transform) {
+ // The Strategy does this for us, so don't do it in that case.
+ loc.transform(
+ new OpenLayers.Projection("EPSG:4326"),
+ fixmystreet.map.getProjectionObject()
+ );
+ }
+ var marker = new OpenLayers.Feature.Vector(loc, {
+ type: cols[pin[2]],
+ id: pin[3],
+ title: pin[4]
+ });
+ markers.push( marker );
+ }
+ return markers;
+}
+
+$('#hide_pins_link').click(function(e) {
+ e.preventDefault();
var showhide = [
'Show pins', 'Hide pins',
'Dangos pinnau', 'Cuddio pinnau',
@@ -88,6 +148,35 @@ YAHOO.util.Event.addListener('hide_pins_link', 'click', function(e) {
}
});
+$('#all_pins_link').click(function(e) {
+ e.preventDefault();
+ fixmystreet.markers.setVisibility(true);
+ var welsh = 0;
+ var texts = [
+ 'en', 'Include stale reports', 'Hide stale reports',
+ 'cy', 'Cynnwys hen adroddiadau', 'Cuddio hen adroddiadau'
+ ];
+ for (var i=0; i<texts.length; i+=3) {
+ if (this.innerHTML == texts[i+1]) {
+ this.innerHTML = texts[i+2];
+ fixmystreet.markers.protocol.options.params = { all_pins: 1 };
+ fixmystreet.markers.refresh( { force: true } );
+ lang = texts[i];
+ } else if (this.innerHTML == texts[i+2]) {
+ this.innerHTML = texts[i+1];
+ fixmystreet.markers.protocol.options.params = { };
+ fixmystreet.markers.refresh( { force: true } );
+ lang = texts[i];
+ }
+ }
+ if (lang == 'cy') {
+ document.getElementById('hide_pins_link').innerHTML = 'Cuddio pinnau';
+ } else {
+ document.getElementById('hide_pins_link').innerHTML = 'Hide pins';
+ }
+});
+
+
/* Overridding the buttonDown function of PanZoom so that it does
zoomTo(0) rather than zoomToMaxExtent()
*/
@@ -134,7 +223,8 @@ OpenLayers.Control.PermalinkFMS = OpenLayers.Class(OpenLayers.Control.Permalink,
href = href.substring( 0, href.indexOf(separator) );
}
- href += separator + OpenLayers.Util.getParameterString(this.createParams(null, this.map.getZoom()+fixmystreet.ZOOM_OFFSET));
+ href += separator + OpenLayers.Util.getParameterString(this.createParams(null, this.map.getZoom()+fixmystreet.zoomOffset));
+ // Could use mlat/mlon here as well if we are on a page with a marker
if (this.anchor && !this.element) {
window.location.href = href;
}
@@ -144,6 +234,24 @@ OpenLayers.Control.PermalinkFMS = OpenLayers.Class(OpenLayers.Control.Permalink,
}
});
+/* Pan data handler */
+OpenLayers.Format.FixMyStreet = OpenLayers.Class(OpenLayers.Format.JSON, {
+ read: function(json, filter) {
+ if (typeof json == 'string') {
+ obj = OpenLayers.Format.JSON.prototype.read.apply(this, [json, filter]);
+ } else {
+ obj = json;
+ }
+ if (typeof(obj.current) != 'undefined')
+ document.getElementById('current').innerHTML = obj.current;
+ if (typeof(obj.current_near) != 'undefined')
+ document.getElementById('current_near').innerHTML = obj.current_near;
+ var markers = fms_markers_list( obj.pins, false );
+ return markers;
+ },
+ CLASS_NAME: "OpenLayers.Format.FixMyStreet"
+});
+
/* Click handler */
OpenLayers.Control.Click = OpenLayers.Class(OpenLayers.Control, {
defaultHandlerOptions: {
@@ -170,12 +278,18 @@ OpenLayers.Control.Click = OpenLayers.Class(OpenLayers.Control, {
trigger: function(e) {
var lonlat = fixmystreet.map.getLonLatFromViewPortPx(e.xy);
+ if (fixmystreet.page == 'new') {
+ fixmystreet.markers.features[0].move(lonlat);
+ }
lonlat.transform(
fixmystreet.map.getProjectionObject(),
new OpenLayers.Projection("EPSG:4326")
);
document.getElementById('fixmystreet.latitude').value = lonlat.lat;
document.getElementById('fixmystreet.longitude').value = lonlat.lon;
+ if (fixmystreet.page == 'new') {
+ return;
+ }
document.getElementById('mapForm').submit();
}
});
diff --git a/web/js/map-bing-ol.js b/web/js/map-bing-ol.js
index 254d407f4..032ac1e89 100644
--- a/web/js/map-bing-ol.js
+++ b/web/js/map-bing-ol.js
@@ -1,6 +1,6 @@
function set_map_config(perm) {
- fixmystreet.ZOOM_OFFSET = 13;
fixmystreet.controls = [
+ new OpenLayers.Control.Attribution(),
new OpenLayers.Control.ArgParser(),
new OpenLayers.Control.Navigation(),
perm,
@@ -10,6 +10,9 @@ function set_map_config(perm) {
}
OpenLayers.Layer.Bing = OpenLayers.Class(OpenLayers.Layer.XYZ, {
+ attribution: '<a href="http://www.bing.com/maps/">' +
+ '<img border=0 src="http://dev.virtualearth.net/Branding/logo_powered_by.png"></a>',
+
initialize: function(name, options) {
var url = [];
options = OpenLayers.Util.extend({
@@ -18,8 +21,8 @@ OpenLayers.Layer.Bing = OpenLayers.Class(OpenLayers.Layer.XYZ, {
numZoomLevels: 18,
transitionEffect: "resize",
sphericalMercator: true,
- buffer: 0,
- attribution: "© Microsoft / OS 2010"
+ buffer: 0
+ //attribution: "© Microsoft / OS 2010"
}, options);
var newArguments = [name, url, options];
OpenLayers.Layer.XYZ.prototype.initialize.apply(this, newArguments);
@@ -51,18 +54,19 @@ OpenLayers.Layer.Bing = OpenLayers.Class(OpenLayers.Layer.XYZ, {
OpenLayers.Util.indexOf(this.serverResolutions, res) :
this.map.getZoom() + this.zoomOffset;
- if (z == 16) {
+ if (z >= 16) {
var url = [
- "http://a.os.openstreetmap.org/sv/${z}/${x}/${y}.png",
- "http://b.os.openstreetmap.org/sv/${z}/${x}/${y}.png",
- "http://c.os.openstreetmap.org/sv/${z}/${x}/${y}.png"
+ "http://tilma.mysociety.org/sv/${z}/${x}/${y}.png",
+ "http://a.tilma.mysociety.org/sv/${z}/${x}/${y}.png",
+ "http://b.tilma.mysociety.org/sv/${z}/${x}/${y}.png",
+ "http://c.tilma.mysociety.org/sv/${z}/${x}/${y}.png"
];
} else {
var url = [
- "http://ecn.t0.tiles.virtualearth.net/tiles/r${id}.png?g=587&productSet=mmOS",
- "http://ecn.t1.tiles.virtualearth.net/tiles/r${id}.png?g=587&productSet=mmOS",
- "http://ecn.t2.tiles.virtualearth.net/tiles/r${id}.png?g=587&productSet=mmOS",
- "http://ecn.t3.tiles.virtualearth.net/tiles/r${id}.png?g=587&productSet=mmOS"
+ "http://ecn.t0.tiles.virtualearth.net/tiles/r${id}.png?g=701&productSet=mmOS",
+ "http://ecn.t1.tiles.virtualearth.net/tiles/r${id}.png?g=701&productSet=mmOS",
+ "http://ecn.t2.tiles.virtualearth.net/tiles/r${id}.png?g=701&productSet=mmOS",
+ "http://ecn.t3.tiles.virtualearth.net/tiles/r${id}.png?g=701&productSet=mmOS"
];
}
var s = '' + x + y + z;
diff --git a/web/js/map-bing.js b/web/js/map-bing.js
index 748a03525..856e4f188 100644
--- a/web/js/map-bing.js
+++ b/web/js/map-bing.js
@@ -1,4 +1,4 @@
-YAHOO.util.Event.onContentReady('map', function() {
+$(function(){
var centre = new Microsoft.Maps.Location( fixmystreet.latitude, fixmystreet.longitude );
var map = new Microsoft.Maps.Map(document.getElementById("map"), {
credentials: fixmystreet.key,
diff --git a/web/js/map-google.js b/web/js/map-google.js
index ab9bb9042..742b55d47 100644
--- a/web/js/map-google.js
+++ b/web/js/map-google.js
@@ -1,4 +1,4 @@
-YAHOO.util.Event.onContentReady('map', function() {
+$(function(){
var centre = new google.maps.LatLng( fixmystreet.latitude, fixmystreet.longitude );
var map = new google.maps.Map(document.getElementById("map"), {
mapTypeId: google.maps.MapTypeId.ROADMAP,
diff --git a/web/js/map-tilma-ol.js b/web/js/map-tilma-ol.js
deleted file mode 100644
index 5230a5d2c..000000000
--- a/web/js/map-tilma-ol.js
+++ /dev/null
@@ -1,41 +0,0 @@
-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,
- numZoomLevels: 1,
- zoomOffset: 0
- };
-}
-
-OpenLayers.Layer.Tilma = OpenLayers.Class(OpenLayers.Layer.XYZ, {
- initialize: function(name, options) {
- var url = "http://tilma.mysociety.org/tileserver/${type}/${x},${y}/png";
- options = OpenLayers.Util.extend({
- transitionEffect: "resize",
- numZoomLevels: 1,
- projection: "EPSG:27700",
- units: "m",
- maxExtent: new OpenLayers.Bounds(0, 0, 700000, 1300000)
- }, options);
- var newArguments = [name, url, options];
- OpenLayers.Layer.XYZ.prototype.initialize.apply(this, newArguments);
- },
-
- getURL: function (bounds) {
- var res = this.map.getResolution();
- var x = Math.round(bounds.left / (res * this.tileSize.w));
- var y = Math.round(bounds.bottom / (res * this.tileSize.h));
- var path = OpenLayers.String.format(this.url, {'x': x, 'y': y, 'type': this.map_type});
- return path;
- },
-
- CLASS_NAME: "OpenLayers.Layer.Tilma"
-});
diff --git a/web/js/map-tilma.js b/web/js/map-tilma.js
deleted file mode 100644
index 1b8cc6450..000000000
--- a/web/js/map-tilma.js
+++ /dev/null
@@ -1,320 +0,0 @@
-/*
- * map-tilma.js
- * JavaScript specifically for the tilma based maps
- */
-
-function compass_pan(e, a) {
- YAHOO.util.Event.preventDefault(e);
- if (a.home) {
- a.x = a.orig_x-drag_x;
- a.y = a.orig_y-drag_y;
- }
- pan(a.x, a.y);
-}
-
-YAHOO.util.Event.onContentReady('compass', function() {
- var ua=navigator.userAgent.toLowerCase();
- // if (document.getElementById('mapForm') && (/safari/.test(ua) || /Konqueror/.test(ua))) return;
- if (document.getElementById('map').offsetWidth > 510) return;
-
- var points = this.getElementsByTagName('a');
- YAHOO.util.Event.addListener(points[1], 'click', compass_pan, { x:0, y:fixmystreet.tileheight });
- YAHOO.util.Event.addListener(points[3], 'click', compass_pan, { x:fixmystreet.tilewidth, y:0 });
- YAHOO.util.Event.addListener(points[5], 'click', compass_pan, { x:-fixmystreet.tilewidth, y:0 });
- YAHOO.util.Event.addListener(points[7], 'click', compass_pan, { x:0, y:-fixmystreet.tileheight });
- YAHOO.util.Event.addListener(points[0], 'click', compass_pan, { x:fixmystreet.tilewidth, y:fixmystreet.tileheight });
- YAHOO.util.Event.addListener(points[2], 'click', compass_pan, { x:-fixmystreet.tilewidth, y:fixmystreet.tileheight });
- YAHOO.util.Event.addListener(points[6], 'click', compass_pan, { x:fixmystreet.tilewidth, y:-fixmystreet.tileheight });
- YAHOO.util.Event.addListener(points[8], 'click', compass_pan, { x:-fixmystreet.tilewidth, y:-fixmystreet.tileheight });
- YAHOO.util.Event.addListener(points[4], 'click', compass_pan, { home:1, orig_x:drag_x, orig_y:drag_y });
-});
-
-YAHOO.util.Event.onContentReady('map', function() {
- var ua=navigator.userAgent.toLowerCase();
- // if (document.getElementById('mapForm') && (/safari/.test(ua) || /Konqueror/.test(ua))) return;
- if (document.getElementById('map').offsetWidth > 510) return;
- new YAHOO.util.DDMap('map');
- update_tiles(fixmystreet.start_x, fixmystreet.start_y, true);
-});
-
-
-YAHOO.util.Event.addListener('hide_pins_link', 'click', function(e) {
- YAHOO.util.Event.preventDefault(e);
- if (this.innerHTML == 'Show pins') {
- YAHOO.util.Dom.setStyle('pins', 'display', 'block');
- this.innerHTML = 'Hide pins';
- } else if (this.innerHTML == 'Dangos pinnau') {
- YAHOO.util.Dom.setStyle('pins', 'display', 'block');
- this.innerHTML = 'Cuddio pinnau';
- } else if (this.innerHTML == 'Cuddio pinnau') {
- YAHOO.util.Dom.setStyle('pins', 'display', 'none');
- this.innerHTML = 'Dangos pinnau';
- } else if (this.innerHTML == 'Hide pins') {
- YAHOO.util.Dom.setStyle('pins', 'display', 'none');
- this.innerHTML = 'Show pins';
- }
-});
-YAHOO.util.Event.addListener('all_pins_link', 'click', function(e) {
- YAHOO.util.Event.preventDefault(e);
- YAHOO.util.Dom.setStyle('pins', 'display', 'block');
- var welsh = 0;
- if (this.innerHTML == 'Include stale reports') {
- this.innerHTML = 'Hide stale reports';
- document.getElementById('all_pins').value = '1';
- load_pins(fixmystreet.x, fixmystreet.y);
- } else if (this.innerHTML == 'Cynnwys hen adroddiadau') {
- this.innerHTML = 'Cuddio hen adroddiadau';
- document.getElementById('all_pins').value = '1';
- welsh = 1;
- load_pins(fixmystreet.x, fixmystreet.y);
- } else if (this.innerHTML == 'Cuddio hen adroddiadau') {
- this.innerHTML = 'Cynnwys hen adroddiadau';
- welsh = 1;
- document.getElementById('all_pins').value = '';
- load_pins(fixmystreet.x, fixmystreet.y);
- } else if (this.innerHTML == 'Hide stale reports') {
- this.innerHTML = 'Include stale reports';
- document.getElementById('all_pins').value = '';
- load_pins(fixmystreet.x, fixmystreet.y);
- }
- if (welsh) {
- document.getElementById('hide_pins_link').innerHTML = 'Cuddio pinnau';
- } else {
- document.getElementById('hide_pins_link').innerHTML = 'Hide pins';
- }
-});
-
-// I love the global
-var tile_x = 0;
-var tile_y = 0;
-
-var myAnim;
-function pan(x, y) {
- if (!myAnim || !myAnim.isAnimated()) {
- myAnim = new YAHOO.util.Motion('drag', { points:{by:[x,y]} }, 10, YAHOO.util.Easing.easeOut);
- myAnim.useSeconds = false;
- //myAnim.onTween.subscribe(function(){ update_tiles(x/10, y/10, false); });
- myAnim.onComplete.subscribe(function(){
- update_tiles(x, y, false);
- cleanCache();
- });
- myAnim.animate();
- }
-}
-
-var drag_x = 0;
-var drag_y = 0;
-function update_tiles(dx, dy, force) {
- dx = getInt(dx); dy = getInt(dy);
- if (!dx && !dy && !force) return;
- var old_drag_x = drag_x;
- var old_drag_y = drag_y;
- drag_x += dx;
- drag_y += dy;
-
- var drag = document.getElementById('drag');
- drag.style.left = drag_x + 'px';
- drag.style.top = drag_y + 'px';
-
- var horizontal = Math.floor(old_drag_x/fixmystreet.tilewidth) - Math.floor(drag_x/fixmystreet.tilewidth);
- var vertical = Math.floor(old_drag_y/fixmystreet.tileheight) - Math.floor(drag_y/fixmystreet.tileheight);
- if (!horizontal && !vertical && !force) return;
- fixmystreet.x += horizontal;
-
- tile_x += horizontal;
- fixmystreet.y -= vertical;
- tile_y += vertical;
- var url = [ root_path + '/tilma/tileserver/' + fixmystreet.tile_type + '/', fixmystreet.x, '-', (fixmystreet.x+5), ',', fixmystreet.y, '-', (fixmystreet.y+5), '/JSON' ].join('');
- YAHOO.util.Connect.asyncRequest('GET', url, {
- success: urls_loaded, failure: urls_not_loaded,
- argument: [tile_x, tile_y]
- });
-
- if (force) return;
- load_pins(fixmystreet.x, fixmystreet.y);
-}
-
-function load_pins(x, y) {
- if (document.getElementById('formX') && !document.getElementById('problem_submit')) {
- all_pins = '';
- if (document.getElementById('all_pins')) {
- all_pins = document.getElementById('all_pins').value;
- }
- var ajax_params = [ 'sx=' + document.getElementById('formX').value,
- 'sy=' + document.getElementById('formY').value,
- 'x=' + (x+3),
- 'y=' + (y+3),
- 'all_pins=' + all_pins ];
-
- if (document.getElementById('extra_param')) {
- ajax_params.push(document.getElementById('extra_param').name + '=' + document.getElementById('extra_param').value);
- }
-
- var url = [ root_path , '/ajax?', ajax_params.join(';')].join('');
- YAHOO.util.Connect.asyncRequest('GET', url, {
- success: pins_loaded
- });
- }
-}
-
-function pins_loaded(o) {
- var data = eval(o.responseText);
- document.getElementById('pins').innerHTML = data.pins;
- if (typeof(data.current) != 'undefined')
- document.getElementById('current').innerHTML = data.current;
- if (typeof(data.current_near) != 'undefined')
- document.getElementById('current_near').innerHTML = data.current_near;
- if (typeof(data.fixed_near) != 'undefined')
- document.getElementById('fixed_near').innerHTML = data.fixed_near;
-}
-
-function urls_not_loaded(o) { /* Nothing yet */ }
-
-// Load 6x6 grid of tiles around current 2x2
-function urls_loaded(o) {
- var tiles = eval(o.responseText);
- var drag = document.getElementById('drag');
- for (var i=0; i<6; i++) {
- var ii = (i + o.argument[1]);
- for (var j=0; j<6; j++) {
- if (tiles[i][j] == null) continue;
- var jj = (j + o.argument[0]);
- var id = [ 't', ii, '.', jj ].join('');
- var xx = fixmystreet.x+j;
- var yy = fixmystreet.y+5-i;
- var img = document.getElementById(id);
- if (img) {
- if (!img.galleryimg) { img.galleryimg = false; }
- img.onclick = drag_check;
- tileCache[id] = { x: xx, y: yy, t: img };
- continue;
- }
- img = cloneNode();
- img.style.top = ((ii-2)*fixmystreet.tileheight) + 'px';
- img.style.left = ((jj-2)*fixmystreet.tilewidth) + 'px';
- img.name = [ 'tile_', xx, '.', yy ].join('')
- img.id = id;
- if (browser) {
- img.style.visibility = 'hidden';
- img.onload=function() { this.style.visibility = 'visible'; }
- }
- img.src = 'http://tilma.mysociety.org/tileserver/' + fixmystreet.tile_type + '/' + tiles[i][j];
- tileCache[id] = { x: xx, y: yy, t: img };
- drag.appendChild(img);
- }
- }
-}
-
-var imgElCache;
-function cloneNode() {
- var img = null;
- if (!imgElCache) {
- var form = document.getElementById('mapForm');
- if (form) {
- img = imgElCache = document.createElement('input');
- img.type = 'image';
- } else {
- img = imgElCache = document.createElement('img');
- }
- img.onclick = drag_check;
- img.style.position = 'absolute';
- img.style.width = fixmystreet.tilewidth + 'px';
- img.style.height = fixmystreet.tileheight + 'px';
- img.galleryimg = false;
- img.alt = 'Loading...';
- } else {
- img = imgElCache.cloneNode(true);
- }
- return img;
-}
-
-var tileCache=[];
-function cleanCache() {
- for (var i in tileCache) {
- if (tileCache[i].x < fixmystreet.x || tileCache[i].x > fixmystreet.x+5 || tileCache[i].y < fixmystreet.y || tileCache[i].y > fixmystreet.y+5) {
- var t = tileCache[i].t;
- t.parentNode.removeChild(t); // de-leak?
- delete tileCache[i];
- }
- }
-}
-
-/* Called every mousemove, so on first call, overwrite itself with quicker version */
-function get_posn(ev) {
- var posx, posy;
- if (ev.pageX || ev.pageY) {
- get_posn = function(e) {
- return { x: e.pageX, y: e.pageY };
- };
- } else if (ev.clientX || ev.clientY) {
- get_posn = function(e) {
- return {
- x: e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft,
- y: e.clientY + document.body.scrollTop + document.documentElement.scrollTop
- };
- };
- } else {
- get_posn = function(e) {
- return { x: undef, y: undef };
- };
- }
- return get_posn(ev);
-}
-
-function setCursor(s) {
- var drag = document.getElementById('drag');
- var inputs = drag.getElementsByTagName('input');
- for (var i=0; i<inputs.length; i++) {
- inputs[i].style.cursor = s;
- }
-}
-
-var in_drag = false;
-function drag_check(e) {
- if (in_drag) {
- in_drag = false;
- return false;
- }
- return true;
-}
-
-/* Simpler version of DDProxy */
-var mouse_pos = {};
-YAHOO.util.DDMap = function(id, sGroup, config) {
- this.init(id, sGroup, config);
-};
-YAHOO.extend(YAHOO.util.DDMap, YAHOO.util.DD, {
- scroll: false,
- b4MouseDown: function(e) { },
- startDrag: function(x, y) {
- mouse_pos = { x: x, y: y };
- setCursor('move');
- in_drag = true;
- },
- b4Drag: function(e) { },
- onDrag: function(e) {
- var point = get_posn(e);
- if (point == mouse_pos) return false;
- var dx = point.x-mouse_pos.x;
- var dy = point.y-mouse_pos.y;
- mouse_pos = point;
- update_tiles(dx, dy, false);
- },
- endDrag: function(e) {
- setCursor('crosshair');
- cleanCache();
- },
- toString: function() {
- return ("DDMap " + this.id);
- }
-});
-
-var browser = 1;
-var ua=navigator.userAgent.toLowerCase();
-if (!/opera|safari|gecko/.test(ua) && typeof document.all!='undefined')
- browser=0;
-
-function getInt(n) {
- n = parseInt(n); return (isNaN(n) ? 0 : n);
-}
-
diff --git a/web/js/southampton.js b/web/js/southampton.js
new file mode 100644
index 000000000..1f3e16105
--- /dev/null
+++ b/web/js/southampton.js
@@ -0,0 +1,50 @@
+/*
+ * southampton.js
+ * FixMyStreet JavaScript for Southampton
+ */
+
+
+$(function(){
+
+ $('[placeholder]').focus(function(){
+ var input = $(this);
+ if (input.val() == input.attr('placeholder')) {
+ input.val('');
+ input.removeClass('placeholder');
+ input.css({ 'color': '#000000' });
+ }
+ }).blur(function(){
+ var input = $(this);
+ if (input.val() == '' || input.val() == input.attr('placeholder')) {
+ input.css({ 'color': '#999999' });
+ input.val(input.attr('placeholder'));
+ }
+ }).blur();
+
+ $('#form_category').change(function(){
+ var category = $(this).val();
+ if ('Potholes' == category) {
+ if (!$('#potholes_extra').length) {
+ var qns = '<div id="potholes_extra" style="margin:0; display:none;">' +
+ '<div class="form-field"><label for="form_size">Size:</label>' +
+ '<select name="detail_size"><option>-- Please select --<option>Unknown' +
+ '<option>Small: No larger than a dinner plate (up to 30cm/12inches)' +
+ '<option>Medium: No larger than a dustbin lid (up to 60cm/24inches)' +
+ '<option>Large: Larger than a dustbin lid (over 60cm/24inches)' +
+ '</select></div>' +
+ '<div class="form-field"><label for="form_depth">Depth:</label>' +
+ '<select name="detail_depth"><option>-- Please select --<option>Unknown' +
+ '<option>No deeper than a golf ball (up to 4cm/1.5inches)' +
+ '<option>No deeper than a tennis ball (up to 6.5cm/2.5inches)' +
+ '<option>Deeper than a tennis ball' +
+ '</select></div></div>';
+ $('#form_title').closest('div.form-field').after(qns);
+ }
+ $('#potholes_extra').show('fast');
+ } else {
+ $('#potholes_extra').hide('fast');
+ }
+ }).change();
+
+});
+