diff --git a/external/leaflet-src.js b/external/leaflet-src.js index ff8a1d00..d3d56357 100644 --- a/external/leaflet-src.js +++ b/external/leaflet-src.js @@ -7,7 +7,7 @@ var oldL = window.L, L = {}; -L.version = '0.7.3'; +L.version = '0.7.7'; // define Leaflet for Node module pattern loaders, including Browserify if (typeof module === 'object' && typeof module.exports === 'object') { @@ -519,9 +519,8 @@ L.Mixin.Events.fire = L.Mixin.Events.fireEvent; gecko = ua.indexOf('gecko') !== -1, mobile = typeof orientation !== undefined + '', - msPointer = window.navigator && window.navigator.msPointerEnabled && - window.navigator.msMaxTouchPoints && !window.PointerEvent, - pointer = (window.PointerEvent && window.navigator.pointerEnabled && window.navigator.maxTouchPoints) || + msPointer = !window.PointerEvent && window.MSPointerEvent, + pointer = (window.PointerEvent && window.navigator.pointerEnabled) || msPointer, retina = ('devicePixelRatio' in window && window.devicePixelRatio > 1) || ('matchMedia' in window && window.matchMedia('(min-resolution:144dpi)') && @@ -534,38 +533,8 @@ L.Mixin.Events.fire = L.Mixin.Events.fireEvent; opera3d = 'OTransition' in doc.style, any3d = !window.L_DISABLE_3D && (ie3d || webkit3d || gecko3d || opera3d) && !phantomjs; - - // PhantomJS has 'ontouchstart' in document.documentElement, but doesn't actually support touch. - // https://github.com/Leaflet/Leaflet/pull/1434#issuecomment-13843151 - - var touch = !window.L_NO_TOUCH && !phantomjs && (function () { - - var startName = 'ontouchstart'; - - // IE10+ (We simulate these into touch* events in L.DomEvent and L.DomEvent.Pointer) or WebKit, etc. - if (pointer || (startName in doc)) { - return true; - } - - // Firefox/Gecko - var div = document.createElement('div'), - supported = false; - - if (!div.setAttribute) { - return false; - } - div.setAttribute(startName, 'return;'); - - if (typeof div[startName] === 'function') { - supported = true; - } - - div.removeAttribute(startName); - div = null; - - return supported; - }()); - + var touch = !window.L_NO_TOUCH && !phantomjs && (pointer || 'ontouchstart' in window || + (window.DocumentTouch && document instanceof window.DocumentTouch)); L.Browser = { ie: ie, @@ -1191,7 +1160,7 @@ L.LatLng.prototype = { distanceTo: function (other) { // (LatLng) -> Number other = L.latLng(other); - var R = 6367000.0, // earth radius in meters + var R = 6378137, // earth radius in meters d2r = L.LatLng.DEG_TO_RAD, dLat = (other.lat - this.lat) * d2r, dLon = (other.lng - this.lng) * d2r, @@ -1512,7 +1481,7 @@ L.CRS.EPSG3857 = L.extend({}, L.CRS, { project: function (latlng) { // (LatLng) -> Point var projectedPoint = this.projection.project(latlng), - earthRadius = 6367000.0; + earthRadius = 6378137; return projectedPoint.multiplyBy(earthRadius); } }); @@ -1632,15 +1601,16 @@ L.Map = L.Class.extend({ var paddingTL = L.point(options.paddingTopLeft || options.padding || [0, 0]), paddingBR = L.point(options.paddingBottomRight || options.padding || [0, 0]), - zoom = this.getBoundsZoom(bounds, false, paddingTL.add(paddingBR)), - paddingOffset = paddingBR.subtract(paddingTL).divideBy(2), + zoom = this.getBoundsZoom(bounds, false, paddingTL.add(paddingBR)); + + zoom = (options.maxZoom) ? Math.min(options.maxZoom, zoom) : zoom; + + var paddingOffset = paddingBR.subtract(paddingTL).divideBy(2), swPoint = this.project(bounds.getSouthWest(), zoom), nePoint = this.project(bounds.getNorthEast(), zoom), center = this.unproject(swPoint.add(nePoint).divideBy(2).add(paddingOffset), zoom); - zoom = options && options.maxZoom ? Math.min(options.maxZoom, zoom) : zoom; - return this.setView(center, zoom, options); }, @@ -2782,7 +2752,7 @@ L.TileLayer = L.Class.extend({ } if (options.bounds) { - var tileSize = options.tileSize, + var tileSize = this._getTileSize(), nwPoint = tilePoint.multiplyBy(tileSize), sePoint = nwPoint.add([tileSize, tileSize]), nw = this._map.unproject(nwPoint), @@ -3567,10 +3537,8 @@ L.Marker = L.Class.extend({ update: function () { if (this._icon) { - var pos = this._map.latLngToLayerPoint(this._latlng).round(); - this._setPos(pos); + this._setPos(this._map.latLngToLayerPoint(this._latlng).round()); } - return this; }, @@ -3593,7 +3561,7 @@ L.Marker = L.Class.extend({ if (options.title) { icon.title = options.title; } - + if (options.alt) { icon.alt = options.alt; } @@ -4228,6 +4196,7 @@ L.Marker.include({ if (content instanceof L.Popup) { L.setOptions(content, options); this._popup = content; + content._source = this; } else { this._popup = new L.Popup(options, this) .setContent(content); @@ -4420,7 +4389,9 @@ L.FeatureGroup = L.LayerGroup.extend({ layer = this._layers[layer]; } - layer.off(L.FeatureGroup.EVENTS, this._propagateEvent, this); + if ('off' in layer) { + layer.off(L.FeatureGroup.EVENTS, this._propagateEvent, this); + } L.LayerGroup.prototype.removeLayer.call(this, layer); @@ -4740,7 +4711,7 @@ L.Path = L.Path.extend({ }, _fireMouseEvent: function (e) { - if (!this.hasEventListeners(e.type)) { return; } + if (!this._map || !this.hasEventListeners(e.type)) { return; } var map = this._map, containerPoint = map.mouseEventToContainerPoint(e), @@ -5072,35 +5043,10 @@ L.Path = (L.Path.SVG && !window.L_PREFER_CANVAS) || !L.Browser.canvas ? L.Path : return this; }, - onAdd: function (map) { - this._map = map; - - if (!this._container) { - this._initElements(); - this._initEvents(); - } - - this.projectLatlngs(); - this._updatePath(); - - if (this._container) { - this._map._pathRoot.appendChild(this._container); - } - - this.fire('add'); - - map.on({ - 'viewreset': this.projectLatlngs, - 'moveend': this._updatePath, - 'canvasredraw': this._updatePath - }, this); - }, - onRemove: function (map) { map .off('viewreset', this.projectLatlngs, this) - .off('moveend', this._updatePath, this) - .off('canvasredraw', this._updatePath, this); + .off('moveend', this._updatePath, this); if (this.options.clickable) { this._map.off('click', this._onClick, this); @@ -5115,13 +5061,13 @@ L.Path = (L.Path.SVG && !window.L_PREFER_CANVAS) || !L.Browser.canvas ? L.Path : _requestUpdate: function () { if (this._map && !L.Path._updateRequest) { - L.Path._updateRequest = L.Util.requestAnimFrame(this._fireCanvasRedraw, this._map); + L.Path._updateRequest = L.Util.requestAnimFrame(this._fireMapMoveEnd, this._map); } }, - _fireCanvasRedraw: function () { + _fireMapMoveEnd: function () { L.Path._updateRequest = null; - this.fire('canvasredraw'); + this.fire('moveend'); }, _initElements: function () { @@ -5132,12 +5078,6 @@ L.Path = (L.Path.SVG && !window.L_PREFER_CANVAS) || !L.Browser.canvas ? L.Path : _updateStyle: function () { var options = this.options; - if (options.dashArray) { - var da = typeof(options.dashArray) === "string" ? options.dashArray.split(",").map(function(el,ix,ar) { return parseInt(el); }) : options.dashArray; - this._ctx.setLineDash(da); - } else { - this._ctx.setLineDash([]); - } if (options.stroke) { this._ctx.lineWidth = options.weight; this._ctx.strokeStyle = options.color; @@ -5145,18 +5085,18 @@ L.Path = (L.Path.SVG && !window.L_PREFER_CANVAS) || !L.Browser.canvas ? L.Path : if (options.fill) { this._ctx.fillStyle = options.fillColor || options.color; } + + if (options.lineCap) { + this._ctx.lineCap = options.lineCap; + } + if (options.lineJoin) { + this._ctx.lineJoin = options.lineJoin; + } }, _drawPath: function () { var i, j, len, len2, point, drawMethod; - - if (this.options.dashArray) { - var da = typeof(this.options.dashArray) === "string" ? this.options.dashArray.split(",").map(function(el,ix,ar) { return parseInt(el); }) : this.options.dashArray; - this._ctx.setLineDash(da); - } else { - this._ctx.setLineDash([]); - } - + this._ctx.beginPath(); for (i = 0, len = this._parts.length; i < len; i++) { @@ -5183,19 +5123,13 @@ L.Path = (L.Path.SVG && !window.L_PREFER_CANVAS) || !L.Browser.canvas ? L.Path : var ctx = this._ctx, options = this.options; - if (options.dashArray) { - var da = typeof(options.dashArray) === "string" ? options.dashArray.split(",").map(function(el,ix,ar) { return parseInt(el); }) : options.dashArray; - ctx.setLineDash(da); - } else { - ctx.setLineDash([]); - } this._drawPath(); ctx.save(); this._updateStyle(); if (options.fill) { ctx.globalAlpha = options.fillOpacity; - ctx.fill(); + ctx.fill(options.fillRule || 'evenodd'); } if (options.stroke) { @@ -5210,15 +5144,14 @@ L.Path = (L.Path.SVG && !window.L_PREFER_CANVAS) || !L.Browser.canvas ? L.Path : _initEvents: function () { if (this.options.clickable) { - // TODO dblclick this._map.on('mousemove', this._onMouseMove, this); - this._map.on('click', this._onClick, this); + this._map.on('click dblclick contextmenu', this._fireMouseEvent, this); } }, - _onClick: function (e) { + _fireMouseEvent: function (e) { if (this._containsPoint(e.layerPoint)) { - this.fire('click', e); + this.fire(e.type, e); } }, @@ -5260,7 +5193,6 @@ L.Map.include((L.Path.SVG && !window.L_PREFER_CANVAS) || !L.Browser.canvas ? {} this.on('zoomend', this._endPathZoom); } this.on('moveend', this._updateCanvasViewport); - this.on('canvasredraw', this._updateCanvasViewport); this._updateCanvasViewport(); } }, @@ -6117,12 +6049,6 @@ L.Polygon.include(!L.Path.CANVAS ? {} : { L.Circle.include(!L.Path.CANVAS ? {} : { _drawPath: function () { - if (this.options.dashArray) { - var da = typeof(this.options.dashArray) === "string" ? this.options.dashArray.split(",").map(function(el,ix,ar) { return parseInt(el); }) : this.options.dashArray; - this._ctx.setLineDash(da); - } else { - this._ctx.setLineDash([]); - } var p = this._point; this._ctx.beginPath(); this._ctx.arc(p.x, p.y, this._radius, 0, Math.PI * 2, false); @@ -7243,8 +7169,9 @@ L.extend(L.DomEvent, { pointers = this._pointers; var cb = function (e) { - - L.DomEvent.preventDefault(e); + if (e.pointerType !== 'mouse' && e.pointerType !== e.MSPOINTER_TYPE_MOUSE) { + L.DomEvent.preventDefault(e); + } var alreadyInArray = false; for (var i = 0; i < pointers.length; i++) { @@ -8324,7 +8251,7 @@ L.Control.Scale = L.Control.extend({ _update: function () { var bounds = this._map.getBounds(), centerLat = bounds.getCenter().lat, - halfWorldMeters = 6367000.0 * Math.PI * Math.cos(centerLat * Math.PI / 180), + halfWorldMeters = 6378137 * Math.PI * Math.cos(centerLat * Math.PI / 180), dist = halfWorldMeters * (bounds.getNorthEast().lng - bounds.getSouthWest().lng) / 180, size = this._map.getSize(), @@ -9003,20 +8930,25 @@ L.Map.include(!L.DomUtil.TRANSITION ? {} : { delta: delta, backwards: backwards }); + // horrible hack to work around a Chrome bug https://github.com/Leaflet/Leaflet/issues/3689 + setTimeout(L.bind(this._onZoomTransitionEnd, this), 250); }, this); }, _onZoomTransitionEnd: function () { + if (!this._animatingZoom) { return; } this._animatingZoom = false; L.DomUtil.removeClass(this._mapPane, 'leaflet-zoom-anim'); - this._resetView(this._animateToCenter, this._animateToZoom, true, true); + L.Util.requestAnimFrame(function () { + this._resetView(this._animateToCenter, this._animateToZoom, true, true); - if (L.Draggable) { - L.Draggable._disabled = false; - } + if (L.Draggable) { + L.Draggable._disabled = false; + } + }, this); } }); @@ -9052,6 +8984,11 @@ L.TileLayer.include({ // force reflow L.Util.falseFn(bg.offsetWidth); + var zoom = this._map.getZoom(); + if (zoom > this.options.maxZoom || zoom < this.options.minZoom) { + this._clearBgBuffer(); + } + this._animating = false; }, @@ -9228,4 +9165,4 @@ L.Map.include({ }); -}(window, document)); +}(window, document)); \ No newline at end of file diff --git a/external/leaflet.css b/external/leaflet.css index 92dd6ba8..dea175f0 100644 --- a/external/leaflet.css +++ b/external/leaflet.css @@ -21,6 +21,7 @@ .leaflet-container { overflow: hidden; -ms-touch-action: none; + touch-action: none; } .leaflet-tile, .leaflet-marker-icon, @@ -278,12 +279,12 @@ border-radius: 5px; } .leaflet-control-layers-toggle { - background-image: url(@@INCLUDEIMAGE:images/layers.png@@); + background-image: url(images/layers.png); width: 36px; height: 36px; } .leaflet-retina .leaflet-control-layers-toggle { - background-image: url(@@INCLUDEIMAGE:images/layers-2x.png@@); + background-image: url(images/layers-2x.png); background-size: 26px 26px; } .leaflet-touch .leaflet-control-layers-toggle {