diff options
| -rw-r--r-- | chimere/static/chimere/js/jquery.chimere.js | 105 | ||||
| -rw-r--r-- | chimere/static/chimere/js/nominatim-widget.js | 80 | ||||
| -rw-r--r-- | chimere/static/chimere/js/routing-widget.js | 47 | ||||
| -rw-r--r-- | chimere/templates/chimere/blocks/head_chimere.html | 1 | ||||
| -rw-r--r-- | chimere/templates/chimere/blocks/routing.html | 49 | ||||
| -rw-r--r-- | chimere/templatetags/chimere_tags.py | 1 |
6 files changed, 177 insertions, 106 deletions
diff --git a/chimere/static/chimere/js/jquery.chimere.js b/chimere/static/chimere/js/jquery.chimere.js index a80a9ea..04beda5 100644 --- a/chimere/static/chimere/js/jquery.chimere.js +++ b/chimere/static/chimere/js/jquery.chimere.js @@ -95,6 +95,7 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, { current_popup: null, // To store the current POI popup displayed current_category: null, // To store the current category clicked in list current_route_feature: null, // To store the current route find by routing + itinerary_step_number:0, // current step number icon_offset: new OpenLayers.Pixel(0, 0), edition: false, // edition mode edition_type_is_route: false, // route or POI edition @@ -322,6 +323,11 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, { settings.map.setCenter(settings.current_position); }, + // set current position + setCurrentPosition: function(lonlat){ + settings.current_position = lonlat; + }, + /* * Display menu on the map */ @@ -330,8 +336,8 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, { if ($('#chimere_map_menu').is(":visible")){ $('#chimere_map_menu').hide(); } else{ - settings.current_position = - settings.map.getLonLatFromViewPortPx(e.xy); + methods.setCurrentPosition( + settings.map.getLonLatFromViewPortPx(e.xy)); var offsetX = e.pageX; var offsetY = e.pageY; $('#chimere_map_menu').show('fast'); @@ -521,7 +527,7 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, { var markerClick = function (evt) { settings.current_feature = feature; - settings.current_position = feature.lonlat; + methods.setCurrentPosition(feature.lonlat); if ( settings.on_marker_click ) { settings.on_marker_click(evt, mark, settings); } @@ -595,25 +601,40 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, { settings.current_feature.geometry = linestring; settings.layerVectors.addFeatures([settings.current_feature]); }, - routingInputChange: function(){ + routingInputChange: function(nominatim_id){ $('#map_menu_clear').show(); - if ($('#nominatim_start_lon').val()){ - settings.routing_start = new OpenLayers.Marker( - new OpenLayers.LonLat($('#nominatim_start_lon').val(), - $('#nominatim_start_lat').val() - ).transform(EPSG_DISPLAY_PROJECTION, - settings.map.getProjectionObject()), - settings.icon_start); - settings.layerRouteMarker.addMarker(settings.routing_start); - } - if ($('#nominatim_end_lon').val()){ - settings.routing_end = new OpenLayers.Marker( - new OpenLayers.LonLat($('#nominatim_end_lon').val(), - $('#nominatim_end_lat').val() - ).transform(EPSG_DISPLAY_PROJECTION, - settings.map.getProjectionObject()), - settings.icon_end); - settings.layerRouteMarker.addMarker(settings.routing_end); + switch(nominatim_id){ + case 'nominatim_start': + settings.routing_start = new OpenLayers.Marker( + new OpenLayers.LonLat( + $('#'+nominatim_id+'_lon').val(), + $('#'+nominatim_id+'_lat').val() + ).transform(EPSG_DISPLAY_PROJECTION, + settings.map.getProjectionObject()), + settings.icon_start); + settings.layerRouteMarker.addMarker(settings.routing_start); + break; + case 'nominatim_end': + settings.routing_end = new OpenLayers.Marker( + new OpenLayers.LonLat( + $('#'+nominatim_id+'_lon').val(), + $('#'+nominatim_id+'_lat').val() + ).transform(EPSG_DISPLAY_PROJECTION, + settings.map.getProjectionObject()), + settings.icon_end); + settings.layerRouteMarker.addMarker(settings.routing_end); + break; + default: + settings.routing_steps.push(new OpenLayers.Marker( + new OpenLayers.LonLat( + $('#'+nominatim_id+'_lon').val(), + $('#'+nominatim_id+'_lat').val() + ).transform(EPSG_DISPLAY_PROJECTION, + settings.map.getProjectionObject()), + settings.icon_step.clone())); + settings.layerRouteMarker.addMarker( + settings.routing_steps[settings.routing_steps.length-1]); + break; } if (settings.routing_end && settings.routing_start && $('#search_routing').length) { @@ -648,9 +669,48 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, { settings.icon_step.clone())); settings.layerRouteMarker.addMarker( settings.routing_steps[settings.routing_steps.length-1]); + + if (nominatim_url){ + var current_itinerary_number = methods.add_step_fx(); + helpers.updateNominatimName(settings.current_position.clone() + .transform(settings.map.getProjectionObject(), + EPSG_DISPLAY_PROJECTION), + 'step_'+current_itinerary_number+'_label'); + } if (settings.routing_end && settings.routing_start) methods.route(); }, + // add a step on the interface + add_step_fx: function (){ + settings.itinerary_step_number += 1; + var cloned = $("#id_start_div").clone(); + var c_id = 'step_' + settings.itinerary_step_number; + cloned.attr('id', 'id_'+c_id+'_div'); + cloned.children("#nominatim_start_label").attr('id', c_id+'_label' + ).html(''); + cloned.children('label[for="id_start"]').html(step_label + ).attr('for', ""); + var id_suffixes = ['_lat', '_lon', '']; + for (idx=0;idx < id_suffixes.length;idx+=1){ + var suffix = id_suffixes[idx]; + val = c_id + suffix; + cloned.children("#nominatim_start"+suffix).attr('id', val + ).attr('name', val); + } + if (settings.itinerary_step_number == 1){ + $("#nominatim_end_label").after(cloned); + } else { + $("#step_"+(settings.itinerary_step_number-1)+"_label" + ).after(cloned); + } + $('#' + c_id).val(default_nominatim_lbl); + $('#' + c_id).click(function(){ + $('#'+c_id).val(''); + }); + $(".nominatim-widget").autocomplete(nominatim_widget_options); + return settings.itinerary_step_number; + }, + // set the finish point for routing routingTo: function(){ $('#chimere_map_menu').hide(); @@ -684,12 +744,14 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, { $('#map_menu_clear').hide(); $('#chimere_itinerary').hide(); $('#chimere_itinerary_form').show(); + $('div[id^="id_step_"]').remove(); if($('#search_routing').length) $('#search_routing').button('disable'); settings.layerRoute.removeAllFeatures(); settings.layerRouteMarker.clearMarkers(); settings.routing_start = null; settings.routing_end = null; settings.routing_steps = new Array(); + settings.current_itinerary_number = 0; settings.current_route_feature = null; }, @@ -1134,6 +1196,7 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, { }, success: function (data) { vals = $.parseJSON(data); + $('#'+response_id).html(vals.display_name); $('#nominatim_'+response_id).html(vals.display_name); $('#chimere_'+response_id).html(vals.display_name); } diff --git a/chimere/static/chimere/js/nominatim-widget.js b/chimere/static/chimere/js/nominatim-widget.js index e925cf2..2ac9d1b 100644 --- a/chimere/static/chimere/js/nominatim-widget.js +++ b/chimere/static/chimere/js/nominatim-widget.js @@ -1,42 +1,44 @@ var default_nominatim_lbl = ''; -$(function(){ - $(".nominatim-widget").autocomplete({ - source: function (request, response) { - $.ajax({ - url: nominatim_url, - data: { - format: "json", - q: request.term, - }, - success: function ( data ) { - response ( $.map( $.parseJSON(data), function( item ) { - return { - label: item.display_name, - value: item.display_name, - lat: item.lat, - lon: item.lon - } - })); +var nominatim_widget_options = { + source: function (request, response) { + $.ajax({ + url: nominatim_url, + data: { + format: "json", + q: request.term, + }, + success: function ( data ) { + response ( $.map( $.parseJSON(data), function( item ) { + return { + label: item.display_name, + value: item.display_name, + lat: item.lat, + lon: item.lon + } + })); + + } + }) + }, + minLength: 6, + delay: 1000, + select: function ( event, ui ) { + $('#'+$(this).attr('id')+'_lat').val(ui.item.lat); + $('#'+$(this).attr('id')+'_lon').val(ui.item.lon); + $('#'+$(this).attr('id')+'_label').html(ui.item.label); + $('#chimere_'+$(this).attr('id').substring(10)+'_label').html(ui.item.label); + $('#'+$(this).attr('id')).val(default_nominatim_lbl); + jQuery("#map").chimere("routingInputChange", $(this).attr('id')); + return false; + }, + open: function() { + $( this ).removeClass( "ui-corner-all" ).addClass( "ui-corner-top" ); + }, + close: function() { + $( this ).removeClass( "ui-corner-top" ).addClass( "ui-corner-all" ); + } +} - } - }) - }, - minLength: 6, - delay: 1000, - select: function ( event, ui ) { - $('#'+$(this).attr('id')+'_lat').val(ui.item.lat); - $('#'+$(this).attr('id')+'_lon').val(ui.item.lon); - $('#'+$(this).attr('id')+'_label').html(ui.item.label); - $('#chimere_'+$(this).attr('id').substring(10)+'_label').html(ui.item.label); - $('#'+$(this).attr('id')).val(default_nominatim_lbl); - jQuery("#map").chimere("routingInputChange"); - return false; - }, - open: function() { - $( this ).removeClass( "ui-corner-all" ).addClass( "ui-corner-top" ); - }, - close: function() { - $( this ).removeClass( "ui-corner-top" ).addClass( "ui-corner-all" ); - } - }); +$(function(){ + $(".nominatim-widget").autocomplete(nominatim_widget_options); }); diff --git a/chimere/static/chimere/js/routing-widget.js b/chimere/static/chimere/js/routing-widget.js new file mode 100644 index 0000000..043c957 --- /dev/null +++ b/chimere/static/chimere/js/routing-widget.js @@ -0,0 +1,47 @@ +var step_label = "Step"; +var add_step = null; + +$(document).ready(function() { + var itinerary_step_number = 0; + $("#add_step_link").click(function(){ + $('#main-map').chimere('add_step_fx'); + return false; + }); + $('#search_routing').button({'disabled':true}); + $('#routing_button').click(function(){ + $('#chimere_itinerary_panel').dialog('open'); + }); + $('#chimere_itinerary_modify').click(function(){ + $('#chimere_itinerary').hide(); + $('#chimere_itinerary_form').show(); + }); + $('#chimere_itinerary_new').click(function(){ + $('#map').chimere('routingClear'); + }); + $('#search_routing').click(function(){ + $('#map').chimere('route'); + }); + + var detached_speeds = Array(); + function filter_speed(transport){ + $("#id_speed_div").show(); + for (i=0;i<detached_speeds.length;i+=1){ + $("#id_speed").append(detached_speeds[i]); + } + detached_speeds = Array(); + $("#id_speed option").each(function(){ + if(!$(this).val().match(transport) && $(this).val()){ + detached_speeds.push($(this).detach()); + } + }); + $('#id_speed').val(''); + if($("#id_speed option").length == 1){ + $("#id_speed_div").hide(); + } + } + $('#id_transport label').click(function(){ + checked_item = $("#"+$(this).attr('for')); + filter_speed(checked_item.val()); + }); + filter_speed($('#id_transport :checked').val()); +}); diff --git a/chimere/templates/chimere/blocks/head_chimere.html b/chimere/templates/chimere/blocks/head_chimere.html index 4031ac4..549c131 100644 --- a/chimere/templates/chimere/blocks/head_chimere.html +++ b/chimere/templates/chimere/blocks/head_chimere.html @@ -2,6 +2,7 @@ <link rel="stylesheet" href="{{ css_url }}" />{% endfor %} {% for js_url in OSM_JS_URLS %} <script src="{{ js_url }}"></script>{% endfor %} +{% if routing %}<script src="{{ STATIC_URL }}chimere/js/routing-widget.js"></script>{% endif %} <script src="{{ STATIC_URL }}chimere/js/jquery.chimere.js"></script> <script type="text/javascript"> /* Global variables */ diff --git a/chimere/templates/chimere/blocks/routing.html b/chimere/templates/chimere/blocks/routing.html index 40d2791..15aee04 100644 --- a/chimere/templates/chimere/blocks/routing.html +++ b/chimere/templates/chimere/blocks/routing.html @@ -1,4 +1,5 @@ {% load i18n %} +{# Don't forget to include routing-widget.js in your main template #} {% if routing %} {{itinerary_form.media}} <a href='#' id='routing_button' class='ui-widget ui-button ui-state-default ui-corner-all'>{% trans "Itinerary"%}</a> @@ -12,6 +13,7 @@ {% if field.label %}<label for='{{field.auto_id}}'>{{ field.label }}</label>{%endif%} {{field}}</div> {% endfor %} + <a id='add_step_link' href='#'>{% trans "Add a step" %}</a> <span id='search_routing'>{% trans "Search" %}</span> </div> <div id='chimere_itinerary'> @@ -38,51 +40,6 @@ </div> </div> <script language='javascript' type='text/javascript'> -$(document).ready(function() { - $('#chimere_itinerary_panel').dialog({ - autoOpen: false, - position: [50, 50], - title: "{% trans "Itinerary" %}", - height: 360, - resizable: false - }); - $('#search_routing').button({'disabled':true}); - $('#routing_button').click(function(){ - $('#chimere_itinerary_panel').dialog('open'); - }); - $('#chimere_itinerary_modify').click(function(){ - $('#chimere_itinerary').hide(); - $('#chimere_itinerary_form').show(); - }); - $('#chimere_itinerary_new').click(function(){ - $('#main-map').chimere('routingClear'); - }); - $('#search_routing').click(function(){ - $('#main-map').chimere('route'); - }); - - var detached_speeds = Array(); - function filter_speed(transport){ - $("#id_speed_div").show(); - for (i=0;i<detached_speeds.length;i+=1){ - $("#id_speed").append(detached_speeds[i]); - } - detached_speeds = Array(); - $("#id_speed option").each(function(){ - if(!$(this).val().match(transport) && $(this).val()){ - detached_speeds.push($(this).detach()); - } - }); - $('#id_speed').val(''); - if($("#id_speed option").length == 1){ - $("#id_speed_div").hide(); - } - } - $('#id_transport label').click(function(){ - checked_item = $("#"+$(this).attr('for')); - filter_speed(checked_item.val()); - }); - filter_speed($('#id_transport :checked').val()); -}); +step_label = "{% trans "Step" %}"; </script> {% endif%} diff --git a/chimere/templatetags/chimere_tags.py b/chimere/templatetags/chimere_tags.py index 99ee0aa..11eed0d 100644 --- a/chimere/templatetags/chimere_tags.py +++ b/chimere/templatetags/chimere_tags.py @@ -108,6 +108,7 @@ def head_chimere(context): "MAP_LAYER": settings.CHIMERE_DEFAULT_MAP_LAYER, "OSM_CSS_URLS": settings.OSM_CSS_URLS, "OSM_JS_URLS": settings.OSM_JS_URLS, + 'routing':settings.CHIMERE_ENABLE_ROUTING } return context_data |
