added switching between search engines

- works with different languages
- works with links

refactored selector code:
- changed method names
- changed method parameters (object -> id),
- added method to rename all options of dropdown menu

refactored distance format selector code:
- changed method names
- changed variable names
- changed how to init/select element/change language of dropdown menu

refactored maintenance notification overrides:
- changed names of default variables
This commit is contained in:
DennisSchiefer 2012-08-24 13:27:21 +01:00
parent e98afb46e7
commit 532d7cb057
16 changed files with 198 additions and 73 deletions

View File

@ -19,26 +19,44 @@ or see http://www.gnu.org/licenses/agpl.txt.
// [has to be loaded directly after OSRM.base]
OSRM.DEFAULTS = {
HOST_ROUTING_URL: ['http://router.project-osrm.org/viaroute'],
HOST_SHORTENER_URL: 'http://map.project-osrm.org/shorten/',
HOST_TIMESTAMP_URL: 'http://router.project-osrm.org/timestamp',
ROUTING_ENGINES: [
{ url: 'http://router.project-osrm.org/viaroute',
timestamp: 'http://router.project-osrm.org/timestamp',
metric: 0,
label: 'ENGINE_0',
},
{ url: 'http://mapa.ump.waw.pl/ump-www/viaroute',
timestamp: 'http://mapa.ump.waw.pl/ump-www/timestamp',
metric: 0,
label: 'ENGINE_1',
},
{ url: 'http://mapa.ump.waw.pl/ump-www/rower/viaroute',
timestamp: 'http://mapa.ump.waw.pl/ump-www/rower/timestamp',
metric: 0,
label: 'ENGINE_2',
}
],
WEBSITE_URL: document.URL.replace(/#*(\?.*|$)/i,""), // truncates URL before first ?, and removes tailing #
HOST_GEOCODER_URL: 'http://nominatim.openstreetmap.org/search',
HOST_REVERSE_GEOCODER_URL: 'http://nominatim.openstreetmap.org/reverse',
WEBSITE_URL: document.URL.replace(/#*(\?.*|$)/i,""), // truncates URL before first ?, and removes tailing #
JSONP_TIMEOUT: 10000,
HOST_SHORTENER_URL: 'http://map.project-osrm.org/shorten/',
SHORTENER_PARAMETERS: '%url&jsonp=%jsonp',
SHORTENER_REPLY_PARAMETER: 'ShortURL',
ROUTING_ENGINE: 0,
DISTANCE_FORMAT: 0, // 0: km, 1: miles
GEOCODER_BOUNDS: '',
ZOOM_LEVEL: 14,
HIGHLIGHT_ZOOM_LEVEL: 16,
JSONP_TIMEOUT: 10000,
ONLOAD_ZOOM_LEVEL: 5,
ONLOAD_LATITUDE: 48.84,
ONLOAD_LONGITUDE: 10.10,
ONLOAD_SOURCE: "",
ONLOAD_TARGET: "",
HIGHLIGHT_ZOOM_LEVEL: 16,
DISTANCE_FORMAT: 0, // 0: km, 1: miles
GEOCODER_BOUNDS: '', // the world is not enough!
//GEOCODER_BOUNDS: '&bounded=1&viewbox=-27.0,72.0,46.0,36.0', // bounds for Europe
SHORTENER_PARAMETERS: '%url&jsonp=%jsonp',
SHORTENER_REPLY_PARAMETER: 'ShortURL',
LANGUAGE: "en",
LANUGAGE_ONDEMAND_RELOADING: true,
@ -97,7 +115,6 @@ OSRM.DEFAULTS = {
DRAGGING: 120000, // 2min
MAINTENANCE: false
},
OVERRIDE_MAINTENANCE_HEADER: undefined,
OVERRIDE_MAINTENANCE_BODY: undefined
OVERRIDE_MAINTENANCE_NOTIFICATION_HEADER: undefined,
OVERRIDE_MAINTENANCE_NOTIFICATION_BODY: undefined
};

View File

@ -41,12 +41,8 @@ init: function() {
document.getElementById('gui-input-source').value = OSRM.DEFAULTS.ONLOAD_SOURCE;
document.getElementById('gui-input-target').value = OSRM.DEFAULTS.ONLOAD_TARGET;
// init units selector
OSRM.GUI.selectorInit( "gui-units-toggle", [{display:"Kilometers",value:0},{display:"Miles",value:1}], 0, OSRM.GUI.onUnitsChanged );
// query last update of data
OSRM.G.data_timestamp = "n/a";
OSRM.JSONP.call(OSRM.DEFAULTS.HOST_TIMESTAMP_URL+"?jsonp=%jsonp", OSRM.GUI.setDataTimestamp, OSRM.JSONP.empty, OSRM.DEFAULTS.JSONP_TIMEOUT, 'data_timestamp');
//init units selector
OSRM.GUI.initDistanceFormatsSelector();
},
// set language dependent labels
@ -54,7 +50,6 @@ setLabels: function() {
document.getElementById("open-josm").innerHTML = OSRM.loc("OPEN_JOSM");
document.getElementById("open-osmbugs").innerHTML = OSRM.loc("OPEN_OSMBUGS");
document.getElementById("gui-reset").innerHTML = OSRM.loc("GUI_RESET");
document.getElementById("gui-zoom").innerHTML = OSRM.loc("GUI_ZOOM_ON_ROUTE");
document.getElementById("gui-reverse").innerHTML = OSRM.loc("GUI_REVERSE");
document.getElementById("gui-option-highlight-nonames-label").innerHTML = OSRM.loc("GUI_HIGHLIGHT_UNNAMED_ROADS");
document.getElementById("gui-option-show-previous-routes-label").innerHTML = OSRM.loc("GUI_SHOW_PREVIOUS_ROUTES");
@ -76,11 +71,8 @@ setLabels: function() {
document.getElementById('config-handle-icon').title = OSRM.loc("GUI_CONFIGURATION");
document.getElementById('mapping-handle-icon').title = OSRM.loc("GUI_MAPPING_TOOLS");
document.getElementById('main-handle-icon').title = OSRM.loc("GUI_MAIN_WINDOW");
document.getElementById("gui-units-toggle").getElementsByTagName("option")[0].innerHTML = OSRM.loc("GUI_KILOMETERS");
document.getElementById("gui-units-toggle").getElementsByTagName("option")[1].innerHTML = OSRM.loc("GUI_MILES");
OSRM.GUI.selectorOnChange( document.getElementById("gui-units-toggle") );
OSRM.GUI.updateNotifications();
OSRM.GUI.setDistanceFormatsLanguage();
OSRM.GUI.setRoutingEnginesLanguage();
},
// clear output area
@ -95,7 +87,6 @@ beforeMainTransition: function() {
if( zoom_controls.length > 0)
zoom_controls[0].style.visibility="hidden";
},
// show zoom controls after main box animation
afterMainTransition: function() {
var zoom_controls = OSRM.Browser.getElementsByClassName(document,'leaflet-control-zoom');
@ -105,15 +96,15 @@ afterMainTransition: function() {
}
},
// toggle distance units
onUnitsChanged: function(type) {
OSRM.GUI.changeDistanceFormat(type);
OSRM.Routing.getRoute({keepAlternative:true});
// distance format routines
initDistanceFormatsSelector: function() {
var options = OSRM.GUI.getDistanceFormats();
OSRM.GUI.selectorInit( "gui-units-toggle", options, OSRM.DEFAULTS.DISTANCE_FORMAT, OSRM.GUI._onDistanceFormatChanged );
},
// change distance format
changeDistanceFormat: function(type) {
OSRM.G.DISTANCE_FORMAT = type;
setDistanceFormat: function(type) {
if( OSRM.G.active_distance_format == type )
return;
OSRM.active_distance_format = type;
// change scale control
if(OSRM.G.map) {
@ -129,8 +120,23 @@ changeDistanceFormat: function(type) {
else
OSRM.Utils.toHumanDistance = OSRM.Utils.toHumanDistanceMeters;
},
_onDistanceFormatChanged: function(type) {
OSRM.GUI.setDistanceFormat(type);
OSRM.Routing.getRoute({keepAlternative:true});
},
setDistanceFormatsLanguage: function() {
var options = OSRM.GUI.getDistanceFormats();
OSRM.GUI.selectorRenameOptions("gui-units-toggle", options );
},
getDistanceFormats: function() {
return [{display:OSRM.loc("GUI_KILOMETERS"),value:0},{display:OSRM.loc("GUI_MILES"),value:1}];
},
// set timestamp of data
// data timestamp routines
queryDataTimestamp: function() {
OSRM.G.data_timestamp = "n/a";
OSRM.JSONP.call( OSRM.G.active_routing_timestamp_url+"?jsonp=%jsonp", OSRM.GUI.setDataTimestamp, OSRM.JSONP.empty, OSRM.DEFAULTS.JSONP_TIMEOUT, 'data_timestamp');
},
setDataTimestamp: function(response) {
if(!response)
return;

View File

@ -36,8 +36,8 @@ init: function() {
// exclusive notifications
var config = OSRM.DEFAULTS.NOTIFICATIONS;
if( config["MAINTENANCE"] == true ) {
var header = OSRM.DEFAULTS.OVERRIDE_MAINTENANCE_HEADER || OSRM.loc("NOTIFICATION_MAINTENANCE_HEADER");
var body = OSRM.DEFAULTS.OVERRIDE_MAINTENANCE_BODY || OSRM.loc("NOTIFICATION_MAINTENANCE_BODY");
var header = OSRM.DEFAULTS.OVERRIDE_MAINTENANCE_NOTIFICATION_HEADER || OSRM.loc("NOTIFICATION_MAINTENANCE_HEADER");
var body = OSRM.DEFAULTS.OVERRIDE_MAINTENANCE_NOTIFICATION_BODY || OSRM.loc("NOTIFICATION_MAINTENANCE_BODY");
OSRM.GUI.exclusiveNotify( header, body, false);
OSRM.GUI.activeExclusive = "MAINTENANCE";
return;

View File

@ -0,0 +1,80 @@
/*
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU AFFERO General Public License as published by
the Free Software Foundation; either version 3 of the License, or
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
or see http://www.gnu.org/licenses/agpl.txt.
*/
// OSRM RoutingEngineGUI
// [handles all GUI aspects that deals with switching the routing engine]
OSRM.GUI.extend( {
// init
init: function() {
// gather routing engines
var options = OSRM.GUI.getRoutingEngines();
// generate selectors
OSRM.GUI.selectorInit("gui-engine-toggle", options, OSRM.DEFAULTS.ROUTING_ENGINE, OSRM.GUI._onRoutingEngineChanged);
},
// change active routing engine
setRoutingEngine: function(engine) {
if( engine == OSRM.G.active_routing_engine )
return;
OSRM.GUI.selectorChange( 'gui-engine-toggle', engine );
OSRM.G.active_routing_engine = engine;
OSRM.G.active_routing_metric = OSRM.DEFAULTS.ROUTING_ENGINES[ OSRM.G.active_routing_engine ].metric;;
OSRM.G.active_routing_server_url = OSRM.DEFAULTS.ROUTING_ENGINES[ OSRM.G.active_routing_engine ].url;
OSRM.G.active_routing_timestamp_url = OSRM.DEFAULTS.ROUTING_ENGINES[ OSRM.G.active_routing_engine ].timestamp;
// requery data timestamp
OSRM.GUI.queryDataTimestamp();
OSRM.JSONP.call( OSRM.DEFAULTS.ROUTING_ENGINES[ OSRM.G.active_routing_engine ].timestamp+"?jsonp=%jsonp", OSRM.GUI.setDataTimestamp, OSRM.GUI.setDataTimestampTimeout, OSRM.DEFAULTS.JSONP_TIMEOUT, 'data_timestamp');
},
_onRoutingEngineChanged: function(engine) {
if( engine == OSRM.G.active_routing_engine )
return;
OSRM.GUI.setRoutingEngine( engine );
// requery route
if( OSRM.G.markers.route.length > 1 )
OSRM.Routing.getRoute();
},
// change language of routing engine entries
setRoutingEnginesLanguage: function() {
// gather routing engines
var options = OSRM.GUI.getRoutingEngines();
// change dropdown menu names
OSRM.GUI.selectorRenameOptions( "gui-engine-toggle", options );
},
// gather routing engines
getRoutingEngines: function() {
var engines = OSRM.DEFAULTS.ROUTING_ENGINES;
var options = [];
for(var i=0, size=engines.length; i<size; i++) {
options.push( {display:OSRM.loc(engines[i].label), value:i} );
}
return options;
}
});

View File

@ -24,7 +24,7 @@ OSRM.GUI.extend( {
// init
init: function() {
// init variables
OSRM.GUI.changeDistanceFormat(OSRM.DEFAULTS.DISTANCE_FORMAT);
OSRM.GUI.setDistanceFormat(OSRM.DEFAULTS.DISTANCE_FORMAT);
// init events
document.getElementById("gui-input-source").onchange = function() {OSRM.GUI.inputChanged(OSRM.C.SOURCE_LABEL);};
@ -36,7 +36,6 @@ init: function() {
document.getElementById("gui-search-target").onclick = function() {OSRM.GUI.showMarker(OSRM.C.TARGET_LABEL);};
document.getElementById("gui-reset").onclick = OSRM.GUI.resetRouting;
document.getElementById("gui-zoom").onclick = OSRM.GUI.zoomOnRoute;
document.getElementById("gui-reverse").onclick = OSRM.GUI.reverseRouting;
document.getElementById("open-josm").onclick = OSRM.GUI.openJOSM;
document.getElementById("open-osmbugs").onclick = OSRM.GUI.openOSMBugs;
@ -47,12 +46,12 @@ init: function() {
// toggle GUI features that need a route to work
activateRouteFeatures: function() {
OSRM.Printing.activate();
document.getElementById("gui-zoom").className = "button";
// document.getElementById("gui-zoom").className = "button";
// document.getElementById('leaflet-control-locations-route').className = "leaflet-control-locations-route";
},
deactivateRouteFeatures: function() {
OSRM.Printing.deactivate();
document.getElementById("gui-zoom").className = "button-inactive";
// document.getElementById("gui-zoom").className = "button-inactive";
// document.getElementById('leaflet-control-locations-route').className = "leaflet-control-locations-route-inactive";
},

View File

@ -26,7 +26,7 @@ selectorInit: function(id, options, selected, onchange_fct) {
// create dropdown menu
var select = document.getElementById(id);
select.className += " styled-select-helper base-font";
select.onchange = function() { OSRM.GUI.selectorOnChange(this); onchange_fct(this.value); };
select.onchange = function() { OSRM.GUI._selectorOnChange(this); onchange_fct(this.value); };
// fill dropdown menu
for(var i=0, size=options.length; i<size; i++) {
@ -49,7 +49,7 @@ selectorInit: function(id, options, selected, onchange_fct) {
},
// required behaviour of selector on change to switch shown name
selectorOnChange: function(select) {
_selectorOnChange: function(select) {
var option = select.getElementsByTagName("option");
for(var i = 0; i < option.length; i++)
if(option[i].selected == true) {
@ -59,9 +59,29 @@ selectorOnChange: function(select) {
},
// change selector value
selectorChange: function(select, value) {
selectorChange: function(id, value) {
var select = document.getElementById(id);
select.value = value;
OSRM.GUI.selectorOnChange(select);
OSRM.GUI._selectorOnChange(select);
},
// replace selector options with new names
selectorRenameOptions: function(id, options) {
var select = document.getElementById(id);
var select_options = select.getElementsByTagName("option");
var styledSelect = document.getElementById("styled-select-"+id);
// fill dropdown menu with new option names
for(var i = 0; i < select_options.length; i++) {
select_options[i].childNodes[0].nodeValue = options[i].display;
if(select_options[i].selected == true)
styledSelect.childNodes[0].nodeValue = options[i].display;
}
// resize visible dropdown menu as needed
styledSelect.style.width = (select.offsetWidth-2)+"px";
styledSelect.style.height = (select.offsetHeight)+"px"; // clientHeight gives the height of the opened dropbox!
}
});

View File

@ -66,6 +66,10 @@ OSRM.Localization["de"] = {
// printing
"OVERVIEW_MAP": "Übersichtskarte",
"NO_ROUTE_SELECTED": "Keine Route ausgewählt",
//routing engines
"ENGINE_0": "Auto (schnellste Strecke)",
"ENGINE_1": "Auto (nur Polen)",
"ENGINE_2": "Fahrrad (nur Polen)",
// directions
"N": "Norden",
"E": "Ost",

View File

@ -66,6 +66,10 @@ OSRM.Localization["en"] = {
// printing
"OVERVIEW_MAP": "Overview Map",
"NO_ROUTE_SELECTED": "No route selected",
// routing engines
"ENGINE_0": "Car (fastest route)",
"ENGINE_1": "Car (Poland only)",
"ENGINE_2": "Bike (Poland only)",
// directions
"N": "north",
"E": "east",

View File

@ -54,8 +54,8 @@ setLanguageWrapper: function(language) { // wrapping required to correctly prev
},
setLanguage: function(language) {
// change value of both language selectors
OSRM.GUI.selectorChange( document.getElementById('gui-language-toggle'), language );
OSRM.GUI.selectorChange( document.getElementById('gui-language-2-toggle'), language );
OSRM.GUI.selectorChange( 'gui-language-toggle', language );
OSRM.GUI.selectorChange( 'gui-language-2-toggle', language );
if( OSRM.Localization[language]) {
OSRM.Localization.current_language = language;

View File

@ -338,6 +338,10 @@ html, body {
/* styles for main-input input-mask-options */
#gui-engine-toggle
{
max-width: 200px;
}
/* styles for main-output areas */

View File

@ -70,6 +70,7 @@ or see http://www.gnu.org/licenses/agpl.txt.
<script src="routing/OSRM.RoutingDescription.js" type="text/javascript"></script>
<script src="routing/OSRM.RoutingGeometry.js" type="text/javascript"></script>
<script src="gui/OSRM.RoutingGUI.js" type="text/javascript"></script>
<script src="gui/OSRM.RoutingEngineGUI.js" type="text/javascript"></script>
<script src="routing/OSRM.RoutingNoNames.js" type="text/javascript"></script>
<script src="base/OSRM.Via.js" type="text/javascript"></script>
<script src="base/OSRM.Geocoder.js" type="text/javascript"></script>
@ -207,8 +208,7 @@ or see http://www.gnu.org/licenses/agpl.txt.
<div class="full">
<div class="row">
<div class="left"><a class="button" id="gui-reset">Reset</a></div>
<!-- <div class="center"><select id="gui-engine-toggle" class="engine-select"></select></div> -->
<div class="center"><a class="button-inactive" id="gui-zoom">Reset</a></div>
<div class="center"><select id="gui-engine-toggle" class="engine-select"></select></div>
<div class="right"><a class="button" id="gui-reverse">Reverse</a></div>
</div>
</div>

View File

@ -209,7 +209,7 @@ OSRM.parseParameters = function(){
var type = parseInt(name_val[1]);
if(type != 0 && type != 1)
return;
OSRM.GUI.changeDistanceFormat(type);
OSRM.GUI.setDistanceFormat(type);
}
else if(name_val[0] == 'loc') {
var coordinates = unescape(name_val[1]).split(',');
@ -247,16 +247,10 @@ OSRM.parseParameters = function(){
}
else if(name_val[0] == 're') {
var active_routing_engine = Number(name_val[1]);
if( active_routing_engine<0 || active_routing_engine>=OSRM.DEFAULTS.HOST_ROUTING_URL.length)
if( active_routing_engine<0 || active_routing_engine>=OSRM.DEFAULTS.ROUTING_ENGINES.length)
return;
params.active_routing_engine = active_routing_engine;
}
else if(name_val[0] == 'rm') {
var active_routing_metric = Number(name_val[1]);
if( active_routing_metric<0 )
return;
params.active_routing_metric = active_routing_metric;
}
}
// case 1: destination given
@ -300,9 +294,7 @@ OSRM.parseParameters = function(){
OSRM.G.active_alternative = params.active_alternative || 0;
// set routing server
OSRM.G.active_routing_engine = params.active_routing_engine || 0;
OSRM.G.active_routing_metric = params.active_routing_metric || 0;
OSRM.G.active_routing_server_url = OSRM.DEFAULTS.HOST_ROUTING_URL[ OSRM.G.active_routing_engine ];
OSRM.GUI.setRoutingEngine( params.active_routing_engine || OSRM.DEFAULTS.ROUTING_ENGINE );
// compute route
OSRM.Routing.getRoute({keepAlternative:true});

View File

@ -236,7 +236,7 @@ printWindowLoaded: function(){
}
// scale control
print_window.OSRM.G.DISTANCE_FORMAT = OSRM.G.DISTANCE_FORMAT;
print_window.OSRM.G.active_distance_format = OSRM.G.active_distance_format;
// localization
print_window.OSRM.G.Localization.culture = OSRM.loc("CULTURE");

View File

@ -78,8 +78,8 @@ OSRM.drawMap = function(tile_server, bounds) {
// add scale control
OSRM.G.map.scaleControl = new L.Control.Scale();
OSRM.G.map.scaleControl.options.metric = (OSRM.G.DISTANCE_FORMAT != 1);
OSRM.G.map.scaleControl.options.imperial = (OSRM.G.DISTANCE_FORMAT == 1);
OSRM.G.map.scaleControl.options.metric = (OSRM.G.active_distance_format != 1);
OSRM.G.map.scaleControl.options.imperial = (OSRM.G.active_distance_format == 1);
OSRM.G.map.scaleControl.addTo(OSRM.G.map);
// need to rebuild objects for instanceof to work correctly

View File

@ -31,9 +31,9 @@ OSRM.Routing = {
// init routing data structures
init: function() {
OSRM.G.active_routing_engine = 0;
OSRM.G.active_routing_metric = 0;
OSRM.G.active_routing_server_url = OSRM.DEFAULTS.HOST_ROUTING_URL[ OSRM.G.active_routing_engine ];
// init variables
OSRM.GUI.setRoutingEngine( OSRM.DEFAULTS.ROUTING_ENGINE );
OSRM.G.markers = new OSRM.Markers();
OSRM.G.route = new OSRM.Route();
OSRM.G.response = { via_points:[] };

View File

@ -30,9 +30,8 @@ onClickRouteDescription: function(lat, lng) {
onClickCreateShortcut: function(src){
src += '&z='+ OSRM.G.map.getZoom() + '&center=' + OSRM.G.map.getCenter().lat.toFixed(6) + ',' + OSRM.G.map.getCenter().lng.toFixed(6);
src += '&alt='+OSRM.G.active_alternative;
src += '&df=' + OSRM.G.DISTANCE_FORMAT;
src += '&df=' + OSRM.G.active_distance_format;
src += '&re=' + OSRM.G.active_routing_engine;
src += '&rm=' + OSRM.G.active_routing_metric;
var source = OSRM.DEFAULTS.SHORTENER_PARAMETERS.replace(/%url/, OSRM.DEFAULTS.HOST_SHORTENER_URL+src);