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
+31 -25
View File
@@ -41,20 +41,15 @@ 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
setLabels: function() {
document.getElementById("open-josm").innerHTML = OSRM.loc("OPEN_JOSM");
document.getElementById("open-osmbugs").innerHTML = OSRM.loc("OPEN_OSMBUGS");
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");
@@ -72,15 +67,12 @@ setLabels: function() {
document.getElementById('gui-data-timestamp-label').innerHTML = OSRM.loc("GUI_DATA_TIMESTAMP");
document.getElementById('gui-data-timestamp').innerHTML = OSRM.G.data_timestamp;
document.getElementById('gui-timestamp-label').innerHTML = OSRM.loc("GUI_VERSION");
document.getElementById('gui-timestamp').innerHTML = OSRM.DATE+"; v"+OSRM.VERSION;
document.getElementById('gui-timestamp').innerHTML = OSRM.DATE+"; v"+OSRM.VERSION;
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,12 +120,27 @@ 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;
OSRM.G.data_timestamp = response.timestamp.slice(0,25).replace(/<\/?[^>]+(>|$)/g ,""); // discard tags
document.getElementById('gui-data-timestamp').innerHTML = OSRM.G.data_timestamp;
}
+2 -2
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;
+80
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;
}
});
+3 -4
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";
},
+24 -4
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!
}
});