diff --git a/WebContent/L.Bugfixes.js b/WebContent/L.Bugfixes.js
new file mode 100644
index 000000000..e1979df15
--- /dev/null
+++ b/WebContent/L.Bugfixes.js
@@ -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.
+*/
+
+// Leaflet bugfixes
+// [assorted bugfixes to Leaflet functions we use]
+
+
+// return closest point on segment or distance to that point
+L.LineUtil._sqClosestPointOnSegment = function (p, p1, p2, sqDist) {
+ var x = p1.x,
+ y = p1.y,
+ dx = p2.x - x,
+ dy = p2.y - y,
+ dot = dx * dx + dy * dy,
+ t;
+
+ if (dot > 0) {
+ t = ((p.x - x) * dx + (p.y - y) * dy) / dot;
+
+ if (t > 1) {
+ x = p2.x;
+ y = p2.y;
+ } else if (t > 0) {
+ x += dx * t;
+ y += dy * t;
+ }
+ }
+
+ dx = p.x - x;
+ dy = p.y - y;
+
+ // DS_CHANGE: modified return values
+ if(sqDist)
+ return dx*dx + dy*dy;
+ else {
+ var p = new L.Point(x,y);
+ p._sqDist = dx*dx + dy*dy;
+ return p;
+ }
+};
+
+
+// makes requestAnimFrame respect the immediate paramter -> prevents drag events after dragend events
+// (alternatively: add if(!this.dragging ) return to L.Draggable._updatePosition, but must be done in leaflet.js!)
+// [TODO: In Leaflet 0.4 use L.Util.cancelAnimFrame(this._animRequest) in L.Draggable._onUp() instead, also has to be done in leaflet.js!]
+L.Util.requestAnimFrame = (function () {
+ function timeoutDefer(callback) {
+ window.setTimeout(callback, 1000 / 60);
+ }
+
+ var requestFn = window.requestAnimationFrame ||
+ window.webkitRequestAnimationFrame ||
+ window.mozRequestAnimationFrame ||
+ window.oRequestAnimationFrame ||
+ window.msRequestAnimationFrame ||
+ timeoutDefer;
+
+ return function (callback, context, immediate, contextEl) {
+ callback = context ? L.Util.bind(callback, context) : callback;
+ if (immediate ) { // DS_CHANGE: removed additional condition requestFn === timeoutDefer
+ callback();
+ } else {
+ requestFn(callback, contextEl);
+ }
+ };
+}());
diff --git a/WebContent/OSRM.Localization.js b/WebContent/OSRM.Localization.js
index 6d377f38a..ffe7ec9ec 100644
--- a/WebContent/OSRM.Localization.js
+++ b/WebContent/OSRM.Localization.js
@@ -39,8 +39,8 @@ OSRM.loc = OSRM.Localization.translate;
// German language support
OSRM.Localization["de"] = {
//gui
-"OPEN_JOSM": "JOSM Öffnen",
-"OPEN_OSMBUGS": "OSM Bugs Öffnen",
+"OPEN_JOSM": "JOSM",
+"OPEN_OSMBUGS": "OSM Bugs",
"GUI_START": "Start",
"GUI_END": "Ziel",
"GUI_RESET": "Reset",
@@ -82,8 +82,8 @@ OSRM.Localization["de"] = {
// English language support
OSRM.Localization["en"] = {
//gui
-"OPEN_JOSM": "Open JOSM",
-"OPEN_OSMBUGS": "Open OSM Bugs",
+"OPEN_JOSM": "JOSM",
+"OPEN_OSMBUGS": "OSM Bugs",
"GUI_START": "Start",
"GUI_END": "End",
"GUI_RESET": " Reset ",
diff --git a/WebContent/OSRM.Markers.js b/WebContent/OSRM.Markers.js
index 4d2dab54c..4b7d153c2 100644
--- a/WebContent/OSRM.Markers.js
+++ b/WebContent/OSRM.Markers.js
@@ -67,24 +67,6 @@ toString: function() {
});
-// highlight marker class (cannot be dragged)
-OSRM.HighlightMarker = function( label, style, position) {
- OSRM.HighlightMarker.prototype.base.constructor.apply( this, arguments );
- this.label = label ? label : "highlight_marker";
-
- this.marker.on( 'click', this.onClick );
-};
-OSRM.inheritFrom( OSRM.HighlightMarker, OSRM.Marker );
-OSRM.extend( OSRM.HighlightMarker, {
-toString: function() {
- return "OSRM.HighlightMarker: \""+this.label+"\", "+this.position+")";
-},
-onClick: function(e) {
- this.parent.hide();
-}
-});
-
-
// route marker class (draggable, invokes route drawing routines)
OSRM.RouteMarker = function ( label, style, position ) {
OSRM.RouteMarker.prototype.base.constructor.apply( this, arguments );
@@ -94,8 +76,6 @@ OSRM.RouteMarker = function ( label, style, position ) {
this.marker.on( 'drag', this.onDrag );
this.marker.on( 'dragstart', this.onDragStart );
this.marker.on( 'dragend', this.onDragEnd );
-// this.marker.on( 'mouseover', this.onMouseOver );
-// this.marker.on( 'mouseout', this.onMouseOut );
};
OSRM.inheritFrom( OSRM.RouteMarker, OSRM.Marker );
OSRM.extend( OSRM.RouteMarker, {
@@ -126,7 +106,8 @@ onDragStart: function(e) {
break;
}
- //OSRM.G.markers.highlight.hide();
+ if( this.parent != OSRM.G.markers.highlight)
+ OSRM.G.markers.highlight.hide();
if (OSRM.G.route.isShown())
OSRM.G.route.showOldRoute();
},
@@ -142,12 +123,6 @@ onDragEnd: function(e) {
if(OSRM.G.route.isShown()==false)
OSRM.Geocoder.updateAddress(this.parent.label);
},
-onMouseOver: function(e) {
- OSRM.G.onmouse = true;
-},
-onMouseOut: function(e) {
- OSRM.G.onmouse = false;
-},
toString: function() {
return "OSRM.RouteMarker: \""+this.label+"\", "+this.position+")";
}
@@ -171,11 +146,11 @@ onDragStart: function(e) {
OSRM.RouteMarker.prototype.onDragStart.call(this,e);
},
onDragEnd: function(e) {
- OSRM.G.markers.route[OSRM.G.dragid].hide();
OSRM.G.markers.route[OSRM.G.dragid] = new OSRM.RouteMarker(OSRM.C.VIA_LABEL, {draggable:true,icon:OSRM.G.icons['marker-via']}, e.target.getLatLng() );
OSRM.G.markers.route[OSRM.G.dragid].show();
- OSRM.RouteMarker.prototype.onDragEnd.call(this,e);
+ OSRM.RouteMarker.prototype.onDragEnd.call(this,e);
+ this.parent.hide();
},
toString: function() {
return "OSRM.DragMarker: \""+this.label+"\", "+this.position+")";
diff --git a/WebContent/OSRM.Route.js b/WebContent/OSRM.Route.js
index 71e88a110..54a1097e8 100644
--- a/WebContent/OSRM.Route.js
+++ b/WebContent/OSRM.Route.js
@@ -27,8 +27,6 @@ OSRM.SimpleRoute = function (label, style) {
if(style) this.route.setStyle( style );
this.shown = false;
-
- this.route.on('click', this.onClick);
};
OSRM.extend( OSRM.SimpleRoute,{
show: function() {
@@ -58,14 +56,6 @@ centerView: function() {
var bounds = new L.LatLngBounds( this.getPositions() );
OSRM.g.map.fitBoundsUI( bounds );
},
-onClick: function(e) {
- if(OSRM.G.route.isRoute()) {
- var via_index = OSRM.Via.findViaIndex( e.latlng );
- var marker_index = OSRM.G.markers.setVia(via_index, e.latlng);
- OSRM.G.markers.route[marker_index].show();
- OSRM.Routing.getRoute();
- }
-},
toString: function() {
return "OSRM.Route("+ this.label + ", " + this.route.getLatLngs().length + " points)";
}
diff --git a/WebContent/OSRM.Routing.js b/WebContent/OSRM.Routing.js
deleted file mode 100644
index 9ef99968c..000000000
--- a/WebContent/OSRM.Routing.js
+++ /dev/null
@@ -1,513 +0,0 @@
-/*
-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 routing routines
-// [management of routing/direction requests and processing of responses]
-// [TODO: major refactoring scheduled]
-
-// some variables
-OSRM.GLOBALS.route = null;
-OSRM.GLOBALS.markers = null;
-
-OSRM.CONSTANTS.NO_DESCRIPTION = 0;
-OSRM.CONSTANTS.FULL_DESCRIPTION = 1;
-
-OSRM.G.dragging = null;
-OSRM.GLOBALS.dragid = null;
-OSRM.GLOBALS.pending = false;
-OSRM.GLOBALS.pendingTimer = null;
-
-
-OSRM.Routing = {
-
-// init routing data structures
-init: function() {
- OSRM.G.route = new OSRM.Route();
- OSRM.G.markers = new OSRM.Markers();
-},
-
-
-// -- JSONP processing --
-
-// process JSONP response of routing server
-timeoutRouteSimple: function() {
- OSRM.Routing.showNoRouteGeometry();
- OSRM.Routing.showNoRouteDescription();
- document.getElementById('information-box').innerHTML = "
"+OSRM.loc("TIMED_OUT")+".
";
-},
-timeoutRoute: function() {
- OSRM.Routing.showNoRouteGeometry();
- OSRM.G.route.hideUnnamedRoute();
- OSRM.Routing.showNoRouteDescription();
- document.getElementById('information-box').innerHTML = "
"+OSRM.loc("TIMED_OUT")+".
";
-},
-showRouteSimple: function(response) {
- if(!response)
- return;
-
- if( !OSRM.G.dragging ) // prevent simple routing when no longer dragging
- return;
-
- if( response.status == 207) {
- OSRM.Routing.showNoRouteGeometry();
- OSRM.Routing.showNoRouteDescription();
- document.getElementById('information-box').innerHTML = "
"+OSRM.loc("YOUR_ROUTE_IS_BEING_COMPUTED")+".
";
- } else {
- OSRM.Routing.showRouteGeometry(response);
- OSRM.Routing.showRouteDescriptionSimple(response);
- }
- OSRM.Routing._updateHints(response);
-
- // TODO: hack to process final drag event, if it was fenced, but we are still dragging (alternative approach)
- if(OSRM.G.pending) {
- //clearTimeout(OSRM.G.pendingTimer);
- OSRM.G.pendingTimer = setTimeout(OSRM.Routing.draggingTimeout,1);
- }
-},
-showRoute: function(response) {
- if(!response)
- return;
-
- if(response.status == 207) {
- OSRM.Routing.showNoRouteGeometry();
- OSRM.G.route.hideUnnamedRoute();
- OSRM.Routing.showNoRouteDescription();
- document.getElementById('information-box').innerHTML = "
"+OSRM.loc("NO_ROUTE_FOUND")+".
";
- } else {
- OSRM.Routing.showRouteGeometry(response);
- OSRM.Routing.showRouteNonames(response);
- OSRM.Routing.showRouteDescription(response);
- OSRM.Routing._snapRoute();
- }
- OSRM.Routing._updateHints(response);
-},
-
-
-// show route geometry
-showNoRouteGeometry: function() {
- var positions = [];
- for(var i=0, size=OSRM.G.markers.route.length; i "+OSRM.loc("YOUR_ROUTE_IS_BEING_COMPUTED")+". ";
-},
-showNoRouteDescription: function() {
- headline = OSRM.loc("ROUTE_DESCRIPTION")+": "+OSRM.loc("YOUR_ROUTE_IS_BEING_COMPUTED")+". ";
-},
-
-
-// unnamed streets display
-showRouteNonames: function(response) {
- // do not display unnamed streets?
- if( document.getElementById('option-highlight-nonames').checked == false) {
- OSRM.G.route.hideUnnamedRoute();
- return;
- }
-
- // mark geometry positions where unnamed/named streets switch
- var named = [];
- for (var i = 0; i < response.route_instructions.length; i++) {
- if( response.route_instructions[i][1] == '' )
- named[ response.route_instructions[i][3] ] = false; // no street name
- else
- named[ response.route_instructions[i][3] ] = true; // yes street name
- }
-
- // aggregate geometry for unnamed streets
- var geometry = OSRM.Routing.decodeRouteGeometry(response.route_geometry, 5);
- var is_named = true;
- var current_positions = [];
- var all_positions = [];
- for( var i=0; i < geometry.length; i++) {
- current_positions.push( new L.LatLng(geometry[i][0], geometry[i][1]) );
-
- // still named/unnamed?
- if( (named[i] == is_named || named[i] == undefined) && i != geometry.length-1 )
- continue;
-
- // switch between named/unnamed!
- if(is_named == false)
- all_positions.push( current_positions );
- current_positions = [];
- current_positions.push( new L.LatLng(geometry[i][0], geometry[i][1]) );
- is_named = named[i];
- }
-
- // display unnamed streets
- OSRM.G.route.showUnnamedRoute(all_positions);
-},
-
-
-//-- main function --
-
-//generate server calls to query routes
-getDragRoute: function() {
- // prepare JSONP call
- var source = OSRM.DEFAULTS.HOST_ROUTING_URL;
- source += '?z=' + OSRM.G.map.getZoom() + '&output=json&geomformat=cmp&instructions=false';
- if(OSRM.G.markers.checksum)
- source += '&checksum=' + OSRM.G.markers.checksum;
- for(var i=0, size=OSRM.G.markers.route.length; i';
-
- for(var i=0; i < response.route_instructions.length; i++){
- //odd or even ?
- var rowstyle='results-odd';
- if(i%2==0) { rowstyle='results-even'; }
-
- route_desc += '
';
- headline = "";
- headline += OSRM.loc("ROUTE_DESCRIPTION")+":';
-
- route_desc += ' ";
- }
-
- route_desc += '';
- route_desc += ' ";
-
- route_desc += '';
- route_desc += "
';
- route_desc += '';
- route_desc += response.route_instructions[i][0];
- if( i == 0 )
- route_desc += ' ' + OSRM.loc( response.route_instructions[i][6] );
- if( response.route_instructions[i][1] != "" ) {
- route_desc += ' on ';
- route_desc += '' + response.route_instructions[i][1] + '';
- }
- //route_desc += ' for ';
- route_desc += '';
- route_desc += " ";
-
- route_desc += '';
- if( i != response.route_instructions.length-1 )
- route_desc += ''+OSRM.Utils.metersToDistance(response.route_instructions[i][2])+'';
- route_desc += " ";
-
- route_desc += "
";
- headline += '';
- headline += ""
- + OSRM.loc("DISTANCE")+": " + OSRM.Utils.metersToDistance(response.route_summary.total_distance)
- + "';
- headline += '
"
- + OSRM.loc("DURATION")+": " + OSRM.Utils.secondsToTime(response.route_summary.total_time)
- + "";
- headline += ''+route_link+'';
-
- var output = "";
- output += route_desc;
-
- document.getElementById('information-box-headline').innerHTML = headline;
- document.getElementById('information-box').innerHTML = output;
-},
-showRouteDescriptionSimple: function(response) {
- headline = OSRM.loc("ROUTE_DESCRIPTION")+":
'+gpx_link+'
";
- headline += ""
- + OSRM.loc("DISTANCE")+": " + OSRM.Utils.metersToDistance(response.route_summary.total_distance)
- + "
"
- + OSRM.loc("DURATION")+": " + OSRM.Utils.secondsToTime(response.route_summary.total_time)
- + "";
- headline += '
';
-
- document.getElementById('information-box-headline').innerHTML = headline;
- document.getElementById('information-box').innerHTML = "
";
- headline += ""
- + OSRM.loc("DISTANCE")+": N/A"
- + "
"
- + OSRM.loc("DURATION")+": N/A"
- + "";
- headline += '
';
-
- document.getElementById('information-box-headline').innerHTML = headline;
- document.getElementById('information-box').innerHTML = "