/* 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); } }; }());