// This function might be passed either an OpenLayers.LonLat (so has // lon and lat) or an OpenLayers.Geometry.Point (so has x and y) function fixmystreet_update_pin(lonlat) { lonlat.transform( fixmystreet.map.getProjectionObject(), new OpenLayers.Projection("EPSG:4326") ); document.getElementById('fixmystreet.latitude').value = lonlat.lat || lonlat.y; document.getElementById('fixmystreet.longitude').value = lonlat.lon || lonlat.x; $.getJSON('/report/new/ajax', { latitude: $('#fixmystreet\\.latitude').val(), longitude: $('#fixmystreet\\.longitude').val() }, function(data) { if (data.error) { if (!$('#side-form-error').length) { $('
').insertAfter($('#side-form')); } $('#side-form-error').html('

' + translation_strings.reporting_a_problem + '

' + data.error + '

').show(); $('#side-form').hide(); return; } $('#side-form, #site-logo').show(); var old_category = $("select#form_category").val(); $('#councils_text').html(data.councils_text); $('#form_category_row').html(data.category); if ($("select#form_category option[value=\""+old_category+"\"]").length) { $("select#form_category").val(old_category); } if ( data.extra_name_info && !$('#form_fms_extra_title').length ) { // there might be a first name field on some cobrands var lb = $('#form_first_name').prev(); if ( lb.length === 0 ) { lb = $('#form_name').prev(); } lb.before(data.extra_name_info); } // If the category filter appears on the map and the user has selected // something from it, then pre-fill the category field in the report, // if it's a value already present in the drop-down. var category = $("#filter_categories").val(); if (category !== undefined && $("#form_category option[value="+category+"]").length) { $("#form_category").val(category); } var category_select = $("select#form_category"); if (category_select.val() != '-- Pick a category --') { category_select.change(); } }); if (!$('#side-form-error').is(':visible')) { $('#side-form, #site-logo').show(); window.scrollTo(0, 0); } } function fixmystreet_activate_drag() { fixmystreet.drag = new OpenLayers.Control.DragFeature( fixmystreet.markers, { onComplete: function(feature, e) { fixmystreet_update_pin( feature.geometry.clone() ); } } ); fixmystreet.map.addControl( fixmystreet.drag ); fixmystreet.drag.activate(); } function fixmystreet_zoomToBounds(bounds) { if (!bounds) { return; } var center = bounds.getCenterLonLat(); var z = fixmystreet.map.getZoomForExtent(bounds); if ( z < 13 && $('html').hasClass('mobile') ) { z = 13; } fixmystreet.map.setCenter(center, z); if (fixmystreet.state_map && fixmystreet.state_map == 'full') { fixmystreet.map.pan(-fixmystreet_midpoint(), -25, { animate: false }); } } function fms_markers_list(pins, transform) { var markers = []; var size = fms_marker_size_for_zoom(fixmystreet.map.getZoom() + fixmystreet.zoomOffset); for (var i=0; i= 15) { return 'normal'; } else if (zoom >= 13) { return 'small'; } else { return 'mini'; } } function fms_markers_resize() { var size = fms_marker_size_for_zoom(fixmystreet.map.getZoom() + fixmystreet.zoomOffset); for (var i = 0; i < fixmystreet.markers.features.length; i++) { fixmystreet.markers.features[i].attributes.size = size; } fixmystreet.markers.redraw(); } // `markers.redraw()` in fms_markers_highlight will trigger an // `overFeature` event if the mouse cursor is still over the same // marker on the map, which would then run fms_markers_highlight // again, causing an infinite flicker while the cursor remains over // the same marker. We really only want to redraw the markers when // the cursor moves from one marker to another (ie: when there is an // overFeature followed by an outFeature followed by an overFeature). // Therefore, we keep track of the previous event in // fixmystreet.latest_map_hover_event and only call fms_markers_highlight // if we know the previous event was different to the current one. // (See the `overFeature` and `outFeature` callbacks inside of // fixmystreet.select_feature). function fms_markers_highlight(problem_id) { for (var i = 0; i < fixmystreet.markers.features.length; i++) { if (typeof problem_id == 'undefined') { // There is no highlighted marker, so unfade this marker fixmystreet.markers.features[i].attributes.faded = 0; } else if (problem_id == fixmystreet.markers.features[i].attributes.id) { // This is the highlighted marker, unfade it fixmystreet.markers.features[i].attributes.faded = 0; } else { // This is not the hightlighted marker, fade it fixmystreet.markers.features[i].attributes.faded = 1; } } fixmystreet.markers.redraw(); } function fms_sidebar_highlight(problem_id) { if (typeof problem_id !== 'undefined') { var $a = $('.item-list--reports a[href$="' + problem_id + '"]'); $a.parent().addClass('hovered'); } else { $('.item-list--reports .hovered').removeClass('hovered'); } } function fms_marker_click(problem_id) { var $a = $('.item-list--reports a[href$="' + problem_id + '"]'); $a[0] && $a[0].click(); } function fms_categories_or_status_changed() { // If the category or status has changed we need to re-fetch map markers fixmystreet.markers.refresh({force: true}); } function fixmystreet_onload() { if ( fixmystreet.area.length ) { for (var i=0; i