moved corrected bugs in Leaflet to their own file (drag after dragend, distance to path), open osmbugs in new window
81 lines
2.4 KiB
JavaScript
81 lines
2.4 KiB
JavaScript
/*
|
|
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);
|
|
}
|
|
};
|
|
}());
|