aboutsummaryrefslogtreecommitdiffstats
path: root/web/js/map-OpenLayers.js
diff options
context:
space:
mode:
Diffstat (limited to 'web/js/map-OpenLayers.js')
-rw-r--r--web/js/map-OpenLayers.js153
1 files changed, 70 insertions, 83 deletions
diff --git a/web/js/map-OpenLayers.js b/web/js/map-OpenLayers.js
index b53246279..8cc2e8e2c 100644
--- a/web/js/map-OpenLayers.js
+++ b/web/js/map-OpenLayers.js
@@ -2,7 +2,9 @@ var fixmystreet = fixmystreet || {};
(function() {
- fixmystreet.maps = {
+ fixmystreet.maps = fixmystreet.maps || {};
+
+ $.extend(fixmystreet.maps, {
// This function might be passed either an OpenLayers.LonLat (so has
// lon and lat), or an OpenLayers.Geometry.Point (so has x and y).
update_pin: function(lonlat) {
@@ -50,7 +52,7 @@ var fixmystreet = fixmystreet || {};
/* Already have a pin */
fixmystreet.markers.features[0].move(lonlat);
} else {
- var markers = fixmystreet.maps.markers_list( [ [ lonlat.lat, lonlat.lon, 'green' ] ], false );
+ var markers = fixmystreet.maps.markers_list( [ [ lonlat.lat, lonlat.lon, fixmystreet.pin_new_report_colour ] ], false );
fixmystreet.bbox_strategy.deactivate();
fixmystreet.markers.removeAllFeatures();
fixmystreet.markers.addFeatures( markers );
@@ -68,12 +70,8 @@ var fixmystreet = fixmystreet || {};
markers_list: function(pins, transform) {
var markers = [];
- var size = fixmystreet.maps.marker_size_for_zoom(
- fixmystreet.map.getZoom() + fixmystreet.zoomOffset
- );
- var selected_size = fixmystreet.maps.selected_marker_size_for_zoom(
- fixmystreet.map.getZoom() + fixmystreet.zoomOffset
- );
+ var size = fixmystreet.maps.marker_size();
+ var selected_size = fixmystreet.maps.selected_marker_size();
for (var i=0; i<pins.length; i++) {
var pin = pins[i];
var loc = new OpenLayers.Geometry.Point(pin[1], pin[0]);
@@ -84,12 +82,13 @@ var fixmystreet = fixmystreet || {};
fixmystreet.map.getProjectionObject()
);
}
- var marker_size = (pin[3] === window.selected_problem_id) ? selected_size : size;
+ var id = +pin[3];
+ var marker_size = (id === window.selected_problem_id) ? selected_size : size;
var marker = new OpenLayers.Feature.Vector(loc, {
colour: pin[2],
size: pin[5] || marker_size,
faded: 0,
- id: pin[3],
+ id: id,
title: pin[4] || '',
draggable: pin[6] === false ? false : true
});
@@ -99,12 +98,8 @@ var fixmystreet = fixmystreet || {};
},
markers_resize: function() {
- var size = fixmystreet.maps.marker_size_for_zoom(
- fixmystreet.map.getZoom() + fixmystreet.zoomOffset
- );
- var selected_size = fixmystreet.maps.selected_marker_size_for_zoom(
- fixmystreet.map.getZoom() + fixmystreet.zoomOffset
- );
+ var size = fixmystreet.maps.marker_size();
+ var selected_size = fixmystreet.maps.selected_marker_size();
for (var i = 0; i < fixmystreet.markers.features.length; i++) {
if (fixmystreet.markers.features[i].attributes.id == window.selected_problem_id) {
fixmystreet.markers.features[i].attributes.size = selected_size;
@@ -119,7 +114,8 @@ var fixmystreet = fixmystreet || {};
return fixmystreet.markers.getFeaturesByAttribute('id', problem_id)[0];
},
- marker_size_for_zoom: function(zoom) {
+ marker_size: function() {
+ var zoom = fixmystreet.map.getZoom() + fixmystreet.zoomOffset;
if (zoom >= 15) {
return window.selected_problem_id ? 'small' : 'normal';
} else if (zoom >= 13) {
@@ -129,7 +125,8 @@ var fixmystreet = fixmystreet || {};
}
},
- selected_marker_size_for_zoom: function(zoom) {
+ selected_marker_size: function() {
+ var zoom = fixmystreet.map.getZoom() + fixmystreet.zoomOffset;
if (zoom >= 15) {
return 'big';
} else if (zoom >= 13) {
@@ -198,7 +195,7 @@ var fixmystreet = fixmystreet || {};
}
fixmystreet.markers.redraw();
}
- };
+ });
var drag = {
activate: function() {
@@ -211,7 +208,9 @@ var fixmystreet = fixmystreet || {};
this._drag.activate();
},
deactivate: function() {
- this._drag && this._drag.deactivate();
+ if (this._drag) {
+ this._drag.deactivate();
+ }
}
};
@@ -310,7 +309,7 @@ var fixmystreet = fixmystreet || {};
var filter_categories = replace_query_parameter(qs, 'filter_categories', 'filter_category');
var filter_statuses = replace_query_parameter(qs, 'statuses', 'status');
var sort_key = replace_query_parameter(qs, 'sort', 'sort');
- delete qs['p'];
+ delete qs.p;
var new_url;
if ($.isEmptyObject(qs)) {
new_url = location.href.replace(location.search, "");
@@ -365,6 +364,37 @@ var fixmystreet = fixmystreet || {};
]);
var loaded = 0;
var new_geometry = new OpenLayers.Geometry.Polygon(lr);
+ var style_area = function() {
+ loaded++;
+ var style = this.styleMap.styles['default'];
+ if ( fixmystreet.area_format ) {
+ style.defaultStyle = fixmystreet.area_format;
+ } else {
+ $.extend(style.defaultStyle, { fillColor: 'black', strokeColor: 'black' });
+ }
+ var geometry = this.features[0].geometry;
+ if (geometry.CLASS_NAME == 'OpenLayers.Geometry.Collection') {
+ $.each(geometry.components, function(i, polygon) {
+ new_geometry.addComponents(polygon.components);
+ extent.extend(polygon.getBounds());
+ });
+ } else if (geometry.CLASS_NAME == 'OpenLayers.Geometry.Polygon') {
+ new_geometry.addComponents(geometry.components);
+ extent.extend(this.getDataExtent());
+ }
+ if (loaded == fixmystreet.area.length) {
+ var f = this.features[0].clone();
+ f.geometry = new_geometry;
+ this.removeAllFeatures();
+ this.addFeatures([f]);
+ var qs = parse_query_string();
+ if (!qs.bbox) {
+ zoomToBounds(extent);
+ }
+ } else {
+ fixmystreet.map.removeLayer(this);
+ }
+ };
for (var i=0; i<fixmystreet.area.length; i++) {
var area = new OpenLayers.Layer.Vector("KML", {
renderers: ['SVGBig', 'VML', 'Canvas'],
@@ -375,37 +405,7 @@ var fixmystreet = fixmystreet || {};
})
});
fixmystreet.map.addLayer(area);
- area.events.register('loadend', area, function(a,b,c) {
- loaded++;
- var style = this.styleMap.styles['default'];
- if ( fixmystreet.area_format ) {
- style.defaultStyle = fixmystreet.area_format;
- } else {
- $.extend(style.defaultStyle, { fillColor: 'black', strokeColor: 'black' });
- }
- var geometry = this.features[0].geometry;
- if (geometry.CLASS_NAME == 'OpenLayers.Geometry.Collection') {
- $.each(geometry.components, function(i, polygon) {
- new_geometry.addComponents(polygon.components)
- extent.extend(polygon.getBounds());
- });
- } else if (geometry.CLASS_NAME == 'OpenLayers.Geometry.Polygon') {
- new_geometry.addComponents(geometry.components);
- extent.extend(this.getDataExtent());
- }
- if (loaded == fixmystreet.area.length) {
- var f = this.features[0].clone();
- f.geometry = new_geometry;
- this.removeAllFeatures();
- this.addFeatures([f]);
- var qs = parse_query_string();
- if (!qs.bbox) {
- zoomToBounds(extent);
- }
- } else {
- fixmystreet.map.removeLayer(this);
- }
- });
+ area.events.register('loadend', area, style_area);
}
}
@@ -541,6 +541,9 @@ var fixmystreet = fixmystreet || {};
fixmystreet.map.addControl( fixmystreet.select_feature );
fixmystreet.select_feature.activate();
fixmystreet.map.events.register( 'zoomend', null, fixmystreet.maps.markers_resize );
+ fixmystreet.map.events.register( 'zoomend', null, function() {
+ fixmystreet.run(fixmystreet.maps.show_shortlist_control);
+ });
// Set up the event handlers to populate the filters and react to them changing
$("#filter_categories").on("change.filters", categories_or_status_changed);
@@ -564,22 +567,14 @@ var fixmystreet = fixmystreet || {};
$('#hide_pins_link').click(function(e) {
e.preventDefault();
- var showhide = [
- 'Show pins', 'Hide pins',
- 'Dangos pinnau', 'Cuddio pinnau',
- "Vis nåler", "Skjul nåler",
- "Zeige Stecknadeln", "Stecknadeln ausblenden"
- ];
- for (var i=0; i<showhide.length; i+=2) {
- if (this.innerHTML == showhide[i]) {
- fixmystreet.markers.setVisibility(true);
- fixmystreet.select_feature.activate();
- this.innerHTML = showhide[i+1];
- } else if (this.innerHTML == showhide[i+1]) {
- fixmystreet.markers.setVisibility(false);
- fixmystreet.select_feature.deactivate();
- this.innerHTML = showhide[i];
- }
+ if (this.innerHTML == translation_strings.show_pins) {
+ fixmystreet.markers.setVisibility(true);
+ fixmystreet.select_feature.activate();
+ this.innerHTML = translation_strings.hide_pins;
+ } else if (this.innerHTML == translation_strings.hide_pins) {
+ fixmystreet.markers.setVisibility(false);
+ fixmystreet.select_feature.deactivate();
+ this.innerHTML = translation_strings.show_pins;
}
});
@@ -680,9 +675,9 @@ var fixmystreet = fixmystreet || {};
(function() {
var timeout;
- $('.item-list--reports').on('mouseenter', '.item-list--reports__item', function(){
+ $('#js-reports-list').on('mouseenter', '.item-list--reports__item', function(){
var href = $('a', this).attr('href');
- var id = parseInt(href.replace(/^.*[/]([0-9]+)$/, '$1'));
+ var id = parseInt(href.replace(/^.*[\/]([0-9]+)$/, '$1'),10);
clearTimeout(timeout);
fixmystreet.maps.markers_highlight(id);
}).on('mouseleave', '.item-list--reports__item', function(){
@@ -707,14 +702,6 @@ OpenLayers.Control.PanZoomFMS = OpenLayers.Class(OpenLayers.Control.PanZoom, {
btn.action = id;
btn.className = "olButton";
this.div.appendChild(btn);
- if (OpenLayers.VERSION_NUMBER.indexOf('2.11') > -1) {
- btn.map = this.map;
- OpenLayers.Event.observe(btn, "mousedown", OpenLayers.Function.bindAsEventListener(this.buttonDown, btn));
- var slideFactorPixels = this.slideFactor;
- btn.getSlideFactor = function() {
- return slideFactorPixels;
- };
- }
this.buttons.push(btn);
return btn;
},
@@ -752,6 +739,10 @@ OpenLayers.Control.PermalinkFMS = OpenLayers.Class(OpenLayers.Control.Permalink,
}
href += separator + OpenLayers.Util.getParameterString(this.createParams(center, zoom));
// Could use mlat/mlon here as well if we are on a page with a marker
+ if (this.base == '/around') {
+ href += '&js=1';
+ }
+
if (this.anchor && !this.element) {
window.location.href = href;
}
@@ -864,10 +855,6 @@ OpenLayers.Format.FixMyStreet = OpenLayers.Class(OpenLayers.Format.JSON, {
} else {
obj = json;
}
- var current;
- if (typeof(obj.current) != 'undefined' && (current = document.getElementById('current'))) {
- current.innerHTML = obj.current;
- }
var reports_list;
if (typeof(obj.reports_list) != 'undefined' && (reports_list = document.getElementById('js-reports-list'))) {
reports_list.innerHTML = obj.reports_list;
@@ -931,7 +918,7 @@ OpenLayers.Control.DragFeatureFMS = OpenLayers.Class(OpenLayers.Control.DragFeat
return false;
}
}
-})
+});
OpenLayers.Renderer.SVGBig = OpenLayers.Class(OpenLayers.Renderer.SVG, {
MAX_PIXEL: 15E7,