Leaflet Changelog
(all changes without author notice are by @mourner)
1.3.1 (2018-01-18)
Bug fixes
- Fix
L.TileLayer
regression, which caused incorrect tile URLs (#6006 by ghybs)
1.3.0 (2018-01-15)
API changes
- Add
tolerance
option to L.Renderer
instead of hardcoded tolerance for touch devices (#5922 by Muscot).
Improvements
Bug fixes
Docs & Web Site
ES6 / Rollup
1.2.0 (2017-08-08)
API Changes
- Make
L.LineUtil._flat
public as L.LineUtil.isFlat
(#5667 by yohanboniface)
L.ImageOverlay
's setBounds
method accepts an array of points, not only a L.LatLngBounds
instance (#5687 by ronikar
Improvements
Bug fixes
1.1.0 (2017-06-27)
API changes
- Add deprecation notice for
L.Mixin.Events
, fixes #5358 (#5365) (by perliedman)
- Turn
nonBubblingEvents
into a documented boolean option (#4883 by IvanSanchez)
- Add
L.transformation
factory, allow creation from array (#5282 by anetz89)
toGeoJSON
methods now default to a precision of six decimals (as recommended in the GeoJSON spec), precision is settable through a method parameter (#5544 by mattgrande)
Docs & Web Site
reference.html
now always points to latest stable docs (#5490 by IvanSanchez, #5493 by alyhegazy)
- Subresource integrity information and scripts (#5468 by IvanSanchez)
- New tutorial on zooming (by IvanSanchez, #5007)
- Minor documentation improvements by perliedman, veltman, FDMS, ghybs, RichardLitt, gatsbimantico, daturkel, jgravois, geografa, BjoernSchilberg, IvanSanchez, bozdoz, zemadz, danzel, jieter, massic80, jjimenezshaw, hnrchrdl and RayBB
ES6 / Rollup
- ES6 modules & Rollup (#4989) (by mourner and IvanSanchez)
- Additional fixes, testing and cleanup of ES6 code by thachhoang, danzel, jkuebart, simon04, perliedman, luiscamachopt and Trufi (#5373, #5417, #5351, #5330, #5329, #5489, #5504, #5456, #5463)
Improvements
Bug fixes
- Handle edge case of empty bounds on
_getBoundsCenterZoom
(#5157 by IvanSanchez)
- Add new methods to
L.Bounds
for 2 missing corners, fixes #5475 (#5488 by ghybs)
- Handle
Polyline
s with empty array of LatLng
s, #5497 (#5498, by perliedman)
- Take
devicePixelRatio
into account for scrollwheel zoom in win10+chrome (#5480) (by IvanSanchez)
- Add hook points to allow for a proper NoGap plugin (#5476) (by IvanSanchez)
- Sanity check to prevent loading tiles when bounds are
Infinity
(#5478, #5479 by IvanSanchez)
- Fix box zoom race condition (#5452 by ppaskaris)
- On update set current tiles active to avoid pruning (#5381) (#5431 by oliverheilig)
- Make
L.Mixin.Events
a simple object instead of a prototype so it doesn't have a 'constructor' property, fixes #5451 (#5453 by luiscamachopt)
- Canvas: call
ctx.setLineDash
in _fillStroke
#5182 (#5454 by TeXitoi)
- Only rearrange DOM in
toFront
/toBack
if needed, fixes #4050 (#5465 by perliedman)
- Push back keyboard navigation order of
L.Popup
's close button (#5461 by Mirodil)
- Remove spurious check in
DomUtil.preventOutline
(#5435 by qjas)
- Error handler in
ImageOverlay
for 404 links (#5307) by APwhitehat)
- Ensure renderer's container is initialized when a path is added to map (#5404 by IvanSanchez)
- Layers Control only add layer events to layers when we are on the map. Fixes #5421 (#5422 by danzel)
- Layers Control can now become scrollable even if
collapsed: false
, fixes #5328 (#5348 by ghybs)
- Stop map on drag start instead of pointer down, fixes #5350 (#5378 by perliedman)
- fix invalid GeoJSON produced by nested
LayerGroups
(#5359 by Resonance1584)
- Update toolbar inner border radius (#5361 by newmanw)
- Export
lastId
in Util
(#5349 by DenisCarriere)
- Do not stop keypress on escape if no popup is open, plus unit tests (#5331 (by IvanSanchez)
- Docs: remove
iframe
borders on examples (#5327) (by tariqksoliman)
- Pull
min
/maxNativeZoom
from TileLayer
into GridLayer
, as per #5316. (#5319 by jkuebart)
- Disable click propagation on zoom control buttons, fixes #5308 (#5318 by perliedman)
- Add CSS for
-webkit-tap-highlight-color
, fixes #5302 (#5303 by IvanSanchez)
- Removed type attribute in HTML5 files (#5309 by uzerus)
- Add margin to
LatLngBounds.equals
method (#5071 by miguelcobain)
- Add
L.Draggable
options and fix docstring (#5301 by IvanSanchez)
- Fix max/min calculation for
getBoundsZoom
, fixes #5136 (#5137 by IvanSanchez)
- Scrubbing of detached DOM elements, prevents memory leaks; fixes #5263 (#5265 by IvanSanchez)
- Remove
marker.dragging
when not on the map, fixes #5293 (#5295 by danzel)
- Stop scroll propagation in
L.Layers.Control
in chrome>55 (#5280 by IvanSanchez)
- Allow HTML inputs in layer control's labels, fixes #5116 (#51165544 by iZucken)
- Fix possible null reference when auto detecting icon default path, fixes #5534 (#5535 by williamscs)
- Don't turn enter keypress into map clicks, fixes #5499 (#5507 by perliedman)
- Use minus character instead of hyphen in the zoom control (#5501 by damianmoore)
1.0.3 (2017-01-23)
Bug fixes
- Avoid extra
L.Canvas
redraws on several scenarios (by @perliedman, #5250, also thanks to @manubb for investigation and PR).
- Fix behaviour of
dblclick
events in Chrome 55 due to PointerEvent
s (by @IvanSanchez, #5185, #5248, #5268).
- Fix a dangling comma making IE8 fail to parse the code (by @batje, #5270).
- Backport event handling fixes from #5054 into
L.SVG.VML
for IE8 (by @IvanSanchez, #5215).
- Fix a race condition when closing popups during their
popupopen
event (by @hagai26, #5202).
- Fix
getBoundsZoom
return value on CRSs with a flipped axis (by @computerlove, #5204).
- Avoid infinite loops when the
errorTileUrl
of a L.TileLayer
returns 404 (by @IvanSanchez, #5177).
- Remove erroneous initialization of unused event listeners (by @Brikky, #5160).
- Fix rounding of
L.Canvas
redraw areas to avoid artifacts during partial updates (by @Ernie23, #5148).
- Fix
isPopupOpen()
behaviour of L.Layer
when no popup is bound to a layer (by @gvangool, #5106).
- Add a sanity check in
LatLngBounds.contains()
to allow for non-instantiated LatLng
objects (by @IvanSanchez, #5135).
- Fix collapsing of
L.Control.Layers
when the collapse
option is false
(by @perliedman, #5131).
API changes
- Added a new
WrapLatLngBounds
method to L.CRS
, to fix an issue with maxBounds
of GridLayer
s (by @IvanSanchez, #5185, also thanks to @DiogoMCampos for investigation).
L.Map.getSize()
will now return 0
instead of NaN
in non-graphical environments (by @ughitsaaron, #5209).
Improvements
1.0.2 (2016-11-21)
Bug fixes
- Fix CSS for marker shadows when
max-width
is already set (by @brunob, #5046).
- Fix canvas redraw when style updates fill and/or weight (by @perliedman, #5034).
- Prevent canvas from firing multiple
mouseover
events for same layer (by @perliedman, #5033).
- Fixed a race condition when removing and adding
L.Canvas
vectors during a zoom animation (by @ghybs) #5011.
- Fix zoom animation of ImageOverlay when CRS's Y axis is flipped (by @perliedman), #4993.
- Fix encoding/decoding of GeoJSON
FeatureCollection
s (by @IvanSanchez), #5045.
- Fix
minZoom
/maxZoom
late inizialization (by @IvanSanchez), #4916.
- Fix styling of custom SVG markers by making stricter CSS selectors (by @jwoyame) #4597.
- Fix order of
mouseover
/mouseout
events on overlapping L.Canvas
layers (by @perliedman), #5090.
- Fix drag behaviour when a draggable marker is removed in mid-drag (by @IvanSanchez, #5063.
- Fix
L.Control.Layers.collapse()
on initially uncollapsed layer controls (by @perliedman), #5131.
- Fix blurriness of
L.Tooltip
by rounding up pixel coordinates (by @ashmigelski), #5089.
- Fix click events on overlapping geometries when using
L.Canvas
(by @perliedman), #5100.
API changes
Improvements
1.0.1 (2016-09-30)
Bug fixes
1.0.0 (2016-09-26)
API changes
Improvements
Bug fixes
1.0-rc3 (2016-08-05)
API changes
L.Tooltip
offset
option now defaults to [0, 0]
(by @yohanboniface) #4773
- Event listeners are now always called in the order they have been registered, while until rc2 listeners with a context were all called before listeners without context (even if registered later), and the listeners with context were called in an unpredictable order (by @yohanboniface) #4769
Improvements
Bug fixes
1.0-rc2 (2016-07-18)
API changes
Improvements
Bug fixes
- Fixed
GridLayer
's outer edge snapping to vertical center of map (fix #4702) (by @yohanboniface) #4704
- Fixed scrollwheel zoom too fast in MS Edge (by @IvanSanchez) #4694
- Use
pointer-events: visiblePainted
as fallback for IE <11 (by @perliedman) #4690
- Avoid double borders on
abbr
in website (by @brunob) #4663
- Prevent firing map click when layer has popup (by @jwoyame) #4603
- Disable pointer events on popup tip (by @jwoyame) #4599
- Prevent
L.DomUtil.create()
from automatically setting a CSS class name (by @MuellerMatthew) #4563
- Fix off-by-one bug in
Control.Layers._getLayer
(by @ValentinH) #4561
- Fix scrollwheel events zomming two levelz in Chrome by scaling down
getWheelDelta()
(by @IvanSanchez) #4538
- Prevent event listeners from being called when all listeners are removed (by @perliedman) #4555
- Don't prevent browser's touch scroll and/or zoom unless handlers are enabled (by @perliedman) #4552
- Fixed
getBoundsZoom
with small size and padding (by @dianjin) #4532
- Fixed
L.Control.Layers
in IE8 (by @jieter) #4509
- Fixed
TileLayer
's retina logic when zoomReverse
is enabled. (by @perliedman) #4503
- Fixed
setMaxBounds
not resetting maxBounds
when passing null
argument (by @yohanboniface) #4494
- Fixed canvas not filtering click event after drag (by @yohanboniface) #4493
- Fixed
L.Control.removeLayer()
raising an error when trying to remove a layer not yet added (by @jieter) #4487
- Fixed disabling drag on click in IE11 (by @perliedman) #4479
- Fixed
L.Evented.listens()
on removed event handlers, #4474 (by @IvanSanchez) #4476
- Better handling of
markerZoomAnimation
event hooks (by @IvanSanchez) #4460
1.0-rc1 (2016-04-18)
API changes
Improvements
Bug fixes
Other
1.0-beta2 (2015-10-14)
Beta 2 fixes over 50 bugs that were reported by users trying out beta 1. The vast majority of changes are small fixes to problems that are triggered in very specific situations or conditions, a few API consolidation changes, and a few browser workarounds.
API changes
L.circle
now accepts radius
as an option (like L.circleMarker
) rather than a second argument (by @IvanSanchez)
Improvements
- Implemented canvas optimizations on mousehover interactions (by @philippelatulippe) #3076
- Improved drag behaviour by preventing a
preclick
event during drag (by @yohanboniface) #3632
- Implemented
L.ImageOverlay.setBounds()
and fixed image overlay initialization (by @fminuti) #3680
- Implemented draggable items to fire
mousedown
events (by @yohanboniface) #3682
- Changed detection of browsers capable of
msPointer
events (by @IvanSanchez) #3684
- Implemented latitude truncation for spherical mercator projection (by @perliedman) #3700
- Armored against browsers not implementing
Geolocation.clearWatch()
#3707
- Implemented generation of sourcemaps when building and minifying source files (by @IvanSanchez) #3723
- Added
bringToFront
and bringToBack
to popups (by @danzel). #3908 #3307
- Multiply offset by 3 on keyboard pan when shift key is pressed (by @yohanboniface) #3921
Bug fixes
1.0-beta1 (2015-07-14)
The first beta of the huge, long-awaited Leaflet 1.0 release.
This version contains a lot of beneficial but potentially breaking changes (especially if you're a plugin author), so please read through the changes carefully if your code breaks after upgrading.
Vectors API improvements
Leaflet vector layers rendering got a major rewrite, making it possible to switch between rendering backends (Canvas, SVG) dynamically (and even use both for different layers at the same time), have more than one physical pane for vector layers, significantly improving performance, adding Canvas retina support, getting rid of ugly hacks and generally making the code much cleaner. Main PR #2290.
- Added
Renderer
layer (inherited by SVG/Canvas implementations) that handles renderer bounds and zoom animation.
- Added
SVG
& Canvas
classes that now contain all renderer-specific code for vector layers and can be added as layers to the map.
- All vector layer classes (
Path
, Polyline
, etc.) now don't contain any renderer-specific code and instead can be passed a renderer layer to use as renderer
in options;
- Removed
MultiPolyline
and MultiPolygon
classes since multiple rings are now handled by Polyline
and Polygon
classes respectively. Layers with multiple rings now perform much better (since each is now physically a single path object instead of being a FeatureGroup
of layers).
- Dramatically improved performance of interactive Canvas layers. Mouse events work much faster (due to improved hit detection algorithms), and layers get updated many times faster (with partial redraws instead of redrawing the whole Canvas).
- Dramatically improved performance of interactive SVG layers (e.g. creating a big GeoJSON layer and adding to a map got 3x faster while taking 2.5x less memory). #2240 #2315
- Added retina support for Canvas layers.
- Improved default vector layer styles.
- Added
Polyline
and Polygon
getCenter
for getting centroids.
- Respectively, improved
Polyline
and Polygon
popup positioning when calling openPopup
.
- Improved
Polyline
/Polygon
getBounds
to be cached (so it works much faster).
- Changed
Circle
to inherit from CircleMarker
and not the other way.
- Fixed
GeoJSON
resetStyle
to work properly in case style
option wasn't set.
- Fixed a bug where map fired
moveend
when updating Canvas layers.
- Removed
Polyline
and Polygon
spliceLatLngs
method (just use setLatLngs
instead).
- Changed
Polygon
getLatLngs
to always return an array of rings (nested array) (by @yohanboniface). #2618 #3386 Leaflet/Leaflet#3279 #2648
- Added the ability to specify a custom pane for vector layers (making it possible to easily do stacks like vectors-tiles-vectors with proper z-index order) (by @Jakobud). #3266 #2786
- Added vector layers
fillRule
option (by @bullgare). #2834
- Removed
L_PREFER_CANVAS
global switch and added Map
preferCanvas
option instead (by @yohanboniface). #3623
Layers API improvements
All Leaflet layers (including markers, popups, tile and vector layers) have been refactored to have a common parent, Layer
class, that shares the basic logic of adding and removing. The leads to the following changes (main PR #2266):
- Added
Layer
class which all layers added to a map should inherit from.
- Added
add
and remove
events to all layers.
- Added
remove
method to layers and controls (marker.remove()
is now equivalent to map.removeLayer(marker)
).
- Improved performance of adding and removing layers.
- Added
pane
option to all layers that can be changed (e.g. you can set pane: 'overlayPane'
to a tile layer).
- Added
map
createPane
method for custom panes. #1742
- Simplified map panes — removed
objectsPane
, all panes are on the same level now.
- Added
shadowPane
option to markers as well.
- Added
getEvents
method to all layers that returns an {event: listener, ...}
hash; layers now manage its listeners automatically without having to do this in onAdd
/onRemove
.
- Added
togglePopup
, setPopupContent
, getPopup
, isPopupOpen
methods to all layers. #2279 #2292
- Improved performance of adding/removing layers with layers control present (instead of listening to any layer add/remove, the control only listens to layers added in configuration).
- Fixed
FeatureGroup
getBounds
to work correctly when containing circle markers.
- Removed
Map
tilelayersload
event.
- Removed
Popup
open
and close
events in favor of add
and remove
for consistency.
- Moved all layer-related logic in
Map.js
to Layer.js
.
- Improved
FeatureGroup
bindPopup
to accept a function for generating popup content, significantly improving memory footprint when adding popups to a huge number of layers (by @patrickarlt). #3109 #3059
- Added
ImageOverlay
interactivity (mouse events, etc.) (by @snkashis). #3009 #1727
- Added
ImageOverlay
getBounds
(by @brunob). #2848
- Renamed
clickable
option to interactive
(by @AndriiHeonia). #2838 #2499
- Changed the default z-index of panes to be bigger, leaving more room for customization (by @patrickarlt). #3591
- Improved DOM event bubbling mechanism for layers (by @yohanboniface). Leaflet/Leaflet#3307 #3450 #3307
- Added
nonBubblingEvents
option to layers (by @yohanboniface). #3605 #3307 #3604
In addition, layer events implementation was rewritten to use event delegation, significantly improving add/remove performance and memory footprint. #3032 #46
TileLayer & Projections API improvements
TileLayer code and everything projections-related has undergone a major refactoring, documented in PR #2247. It includes the following changes (in addition to much cleaner and simpler code):
TileLayer API improvements
These changes make implementing custom grid-like layers for Leaflet much easier.
- Moved most of the
TileLayer
logic into the new GridLayer
class (which TileLayer
now inherits, extending it with logic specific to tile servers).
- Removed
TileLayer.Canvas
in favor of the much more flexible and powerful GridLayer
.
- Improved tile wrapping and bounding logic in
TileLayer
to work transparently and completely depent on the CRS used; removed the need for TileLayer
hacks when using custom projections.
- Added non-square tiles support (by @IvanSanchez). #3573 #3570
- Removed
url
property in tileload
and tileloadstart
events (get it through tile.src
).
Projections API improvements
These changes were targeted at removing any hardcoded projection-specific logic accross Leaflet classes, making it transparent and driven by the chosen CRS. They make using Leaflet with custom projections (including flat maps) much easier, and remove the need for ugly hacks in the Proj4Leaflet plugin.
- Added
CRS.Earth
which serves as a base for all Earth-based CRS (EPSG3857
etc.). #2345
- Added
Projection
bounds
property that defines bounds for different projections (Mercator
, etc.) in projected coordinates (by @perliedman).
- Added
CRS
wrapLat
and wrapLng
properties which define whether the world wraps on a given axis and in what range. Set as [-180, 180]
for EPSG:3857
, EPSG:4326
, EPSG:3395
by default.
- Added
CRS
and Map
wrapLatLng
(the latter depends on the chosen CRS).
- Added
CRS
infinite
property that disables boundaries (the world can go on infinitely in any direction), default for CRS.Simple
.
- Added
CRS
getProjectedBounds
and Map
getPixelWorldBounds
methods that returns world bounds in projected coordinates depending on zoom (derived from Projection
bounds
) (by @perliedman).
- Added
CRS
unproject
method that converts coordinates in CRS-dependent units into LatLng
coordinates (by @sowelie).
- Added
Map
distance(latlng1, latlng2)
method that takes CRS into account and works with flat projections. #2345 #1442
- Improved
Circle
to be approximated with an ellipse in Earth-based projections. #2345
- Fixed
EPSG:4326
to have correct tile pyramid (2x1 tiles at root).
- Fixed
Projection.SphericalMercator
to project to meter units (by @calvinmetcalf).
- Fixed
Map
worldCopyJump
option to work for other projections.
- Fixed
Circle
to work with flat projections. #2345 #1465
- Fixed scale control precision in non-EPSG:3857 projections. #2345
- Fixed
ImageOverlay
not working properly in some non-standard projections. #3011
Animations improvements and fractional zoom
Animation code in Leaflet had undergone a major rewrite (main PR: #2382), bringing improvements such as:
- Multi-level tile buffering for more seamless zooming experience with less flickering
- Optimal path animation (
map.flyTo
) for zooming to a particular place in a curve (simultaneously zooming and panning)
- Fractional zoom support — now you can do things like
map.setZoom(12.45)
and it just works.
- Layers now rely on
zoom
event in addition to viewreset
for frame-by-frame zoom animations. #3278
UX improvements
- Improved panning inertia behavior so that there are no tearing during animation when panning around quickly. #2360
- Improved inertial scrolling to have a nicer, more natural feel (by @RickMohr). Leaflet/Leaflet#3063 #3063 #3062 #2987
- Added popup fade out animation.
- Improved keyboard support to ignore keystrokes with modifier keys (Ctrl, Alt, Meta) to not interfere with OS shortcuts.
- Made popup to close when pressing Escape (by @snkashis). #951 #3000
- Improved keyboard zoom to zoom by 3 levels if shift key is pressed (by @yohanboniface). #3024
- Improved layers control to become scrollable when there are too many layers (by @rowanwins). #3571 #3167
- Significantly improved
LatLng
creation performance (8x).
- Improved performance of layer objects construction.
- Significantly improved
FeatureGroup
(and correspondingly GeoJSON
) layer adding and events performance (about 10x) by implementing a much better event propagation mechanism. #2311
- Improved Leaflet events and DOM events memory footprint.
- Improved
Evented
off
performance by about 2 times.
Other breaking API changes
- Changed
DomUtil
off
to require context
attribute if you remove a listener that was previously added with a particular context.
- Removed
DomUtil.getViewportOffset
method as it is no longer necessary.
- Removed
DomUtil
getTranslateString
and getScaleString
methods.
- Removed
DomUtil
documentIsLtr
method.
- Removed
LatLng
RAD_TO_DEG
, DEG_TO_RAD
and MAX_MARGIN
constants.
- Renamed
Util.limitExecByInterval
to Util.throttle
.
Other API improvements
- Added
Evented
class that now many Leaflet classes inherit from (instead of mixing in events methods in each class), while keeping the old includes: L.Mixin.Events
syntax available. #2310
- Improved
Class
options
to be prototypically inherited instead of copied over in children classes, which leads to more efficient memory use, faster object construction times and ability to change parent options that get propagated to all children automatically (by @jfirebaugh). #2300 #2294
- Added
{r}
variable to TileLayer
url
for adding "@2x"
prefix on Retina-enabled devices (by @urbaniak). #2296
- Added
Point
ceil
method (by @perliedman).
- Added
Util.wrapNum
method for wrapping a number to lie in a certain range.
- Improved
L.bind
to use native Function
bind
on modern browsers and prepend real arguments to bound ones.
- Added
LatLng
equals
second argument maxMargin
.
- Added
DomUtil
setClass
and getClass
methods.
- Improved
Marker
move
event to include oldLatlng
(by @danzel). #2412
- Added
Marker
mousemove
event (by @bullgare). #2798
- Improved
DomEvent
on
/off
to accept space-separated events and object literals ({type: fn}
).
- Added
DomUtil
toFront
and toBack
methods.
- Added
Evented
listens
as a shortcut to hasEventListeners
.
- Added optional support for center-oriented scroll for
L.map
option touchZoom
(by @mtmail). #2527
- Added
getElement
method to all layers that returns an associated DOM element.
- Added
LatLng
clone
method (by @yohanboniface). #3390
- Added
Map
setMinZoom
and setMaxZoom
methods (by @nathancahill). #3383 #3380
- Added
originalEvent
to Map
and Marker
drag
and move
event data (by @yohanboniface). #3264
- Added
Popup
autoClose
option (by @jfirebaugh). #3018 #2716 #1853
- Added
Control.Zoom
enable
and disable
methods. #3172
- Added an argument to
L.PolyUtil.clipPolygon
that controls rounding (by @aparshin). #2926 #2917
- Added
Map
wheelDebounceTime
option (by @AndriiHeonia). #2836 #2501
- Added
TileLayer.WMS
uppercase
option (now false
by default) (by @kdeloach). #2831 #1751
- Added
ImageOverlay
alt
option (by @francis-liberty). #2767 #2564
- Improved
L.Util.extend
performance (by @fab1an). #2746
- Added
Map
stop
method for stopping panning or flyTo
animation.
- Added
Map
maxBoundsViscosity
option that controls how much the map resits dragging out of max bounds (set to 1
for a hard limit) (by @IvanSanchez). #2224 #3510 #1673
- Added
Bounds
and LatLngBounds
overlaps
method (by @IvanSanchez). #2981 #3508
- Added
ImageOverlay
crossOrigin
option (by @patrickarlt). #3594 #2621
Bugfixes
- Fixed
DomUtil
on
to make it possible to add the same listener to the same element for multiple contexts.
- Fixed a bug that thowed an error when attempting to reinitialize the map on unload (by @gamb). #2410
- Fixed excessively blurry non-retina tiles on retina iOS devices.
- Fixed a bug with popup close button in IE7/8. #2351
- Fixed
ImageOverlay
mercator distortion on lower zoom levels.
- Fixed a bug where layers didn't fire
popupopen
and popupclose
events when manually creating a popup object and passing it to bindPopup
. #2354
- Fixed box-zoom overlay appearing under markers. #1813
- Fixed
Map
panInsideBounds
to accept array-form bounds (by @RLRR). #3489
- Fixed marker draggable state to persist when removing and adding back to the map (by @IvanSanchez). #3488
- Fixed inertia not working when parallel to axis (by @rikvanmechelen). #3432
- Fixed images and SVG inside popups having max-width property overriden (by @yohanboniface). #3452
- Fixed cursors when dragging is disabled (by @juliensoret). #3219 #3233
- Fixed
LatLng
wrap
to not drop altitude (by @IvanSanchez). #3420
- Fixed Firefox for Android not being detected as mobile (by @IvanSanchez). #3419
- Fixed an infinite loop when calling
setMaxBounds
several times in a row (by @IvanSanchez). #3410 #3320
- Fixed a WTF
Map
locate
bug that could cause some unexpected effects (by @sindre). Leaflet/Leaflet#3404
- Fixed broken zoom in Project Spartan browsers (by @mitchless). #3379
- Fixed broken
Polygon
getCenter
when all points in the same pixel (by @yohanboniface). #3372
- Fixed broken
Polyline
getCenter
when the line is very small (by @yohanboniface). #3371
- Fixed keyboard zoom out not working on
azerty
keyboards. #3362
- Fixed a bug where tabbing to an offscreen marker broke control positioning (by @IvanSanchez). #3340 #3333
- Fixed
Map
panBy
not always returning this
(by @Trufi). #3303
- Fixed a bug where pushing a zoom control with a keyboard would switch focus to the map (by @Jakobud). #3275 #3159
- Fixed more race conditions leading to map freeze. #3270 #3268 #2693 #2478
- Fixed iOS race condition when doing a very small pan. #2519
- Fixed
Polygon
toGeoJSON
exporting a MultiPolygon
in some cases (by @yohanboniface). #2977
- Fixed
TileLayer.WMS
passing all options as WMS params. #2972
- Fixed a race condition that made
map.fitBounds(map.getBounds())
zoom out sometimes. #2957
- Fixed a bug where a draggable marker stopped being draggable after
setIcon
(by @jeffsmale90). #2578
- Fixed some IE11 touch performance and stability issues (by @danzel). #3007 #2820
- Fixed a race condition with
TileLayer
when maxNativeZoom = 0
. #3004
- Fixed
FeatureGroup
setStyle
not affecting ImageOverlay
opacity
(by @opie). #3008 #2246
- Fixed class init hooks not being called for parent classes (by @jfirebaugh). #2545
- Fixed a bug when adding a control that's already added or removing a control that's not present (by @jfirebaugh). #3020 #2877
- Fixed buggy inertia on low zoom levels when
Map
worldCopyJump
option is enabled (by @flemenach). #3038 #2624
- Fixed a bug where
getMaxZoom
sometimes returned wrong result inside a Control.Layers
baselayerchange
event (by @CloudNiner). #3048 #2318
- Fixed a bug where during zooming one map, dragging was disabled on all other maps on the page (by @kdeloach). #3050 #2539
- Fixed a
Map
getSize
race condition where it could return a wrong result (by @kshepard). #3052 #3031
- Fixed
L.latLng
factory to accept altitude
as a third argument too (by @lonelyelk). #3070.
- Fixed
L.latLng
factory to not throw error on empty array input (by @lonelyelk). #3080 #3079
- Fixed popups to have a default color (by @snkashis). #3115 #3112 #333
- Fixed
Map
locate
not to mutate the given options object (by @tmcw). #3173
- Fixed Canvas polylines not to render if stroke is set to 0 (by @optical). #3203
- Prevented a Joomla bug that could lead to vector layers disappearing (by @SniperSister). #2886 #2881 Leaflet/Leaflet#2881
- Fixed IE Metro touch events passing through objects on top of a Leaflet map (by @nikgavalas). #2954
- Fixed a bug where vector layers wouldn't display on websites with SVG max-width set to 100% (by @SniperSister). #2886 #2881
- Fixed
Marker
setIcon
to not reset popup anchor offset (by @bullgare). #2872
- Fixed a case where you provide
zoom
in Map
options and then set center (by @AndriiHeonia). #2849 #1871
- Fixed a race condition with
TileLayer
setUrl
where loading
event didn't fire properly (by @bennlich). #2802 #2675 #2827
- Fixed a bug where a tile layer was not cleaned up properly after zooming past its max zoom (by @francis-liberty). #2764 #1905
- Fixed a memory leak with
Marker
setIcon
(by @jfgodoy). #2811
- Fixed
LatLng
distanceTo
to not return NaN
on equal locations. #2705
- Fixed a bug where
TileLayer
maxNativeZoom
didn't work properly with bounds
option set (by @mlegenhausen). #2725 #2704
- Fixed a bug where tiles touching the edge of the bounds from outside where loaded (by @IvanSanchez). #2981 #3508
- Fixed a memory leak in
map.remove()
(by @IvanSanchez). #3514 #2718
- Fixed a bug where layers control collapsed when hovering over a disabled radio button (by @rowanwins). #3564 #2771 Leaflet#2771
- Fixed GeoJSON not accepting null geometry (by @pglotov). #3585
- Fixed occasional popup 1px horizontal offset (by @patrickarlt). #3587 #3526 #3586 #3525
- Fixed some inconsistencies in mouse events for Canvas vector layers (by @wpf500). #3590 #3568 #3618
- Fixed scale control for non-earth CRS (by @cmulders). #3614
Misc improvements
- Improved the build system (
jake build
) to report gzipped library size.
- Added version name and commit number to Leaflet builds. #2276
- Added Leaflet logo in vector format as
src/images/logo.svg
.
- Added reference to Leaflet CSS in
package.json
(by @bclinkinbeard). #2432
- Switched from JSHint to ESLint for checking code style and made the checks more strict. #3176
- Added a plugin guide section on module loaders and publishing plugins (by @patrickarlt). #2955 Leaflet/Leaflet#2955
- Fixed the build system to work in non-git Leaflet folder (by @cschwarz). #2758
0.7.7 (2015-10-26)
- Fixed a regression that could sometimes cause tiles to disappear when pinch-zooming on iOS devices.
- Fixed a regression related to msPointer detection in IE10 (affecting Leaflet.draw and some other plugins) (by @danzel) #3842 #3839 #3804
- Fixed a bug where a mouseout could fire after a vector element was removed (by @sambernet). #3849 #3829
- Fixed touch interactions in Edge browser (by @mitchless & @Neorth). #3853 #3379
- Fixed a bug where removing a layer group from a feature group would throw an error (by @Lambdac0re). #3869
Note tha we skipped 0.7.6 version for which we accidentally published a broken build to NPM.
0.7.5 (2015-09-02)
- Fixed a regression that broke animation in Leaflet.markercluster. #3796
0.7.4 (2015-09-01)
- Fixed a bug introduced by a recent Chrome update that caused the map not to react to interactions until all tiles are loaded. #3689
- Fixed a bug where tile layers were not respecting their
minZoom
or maxZoom
options (by @ivansanchez) #3778
- Improved detection of touch-capable web browsers, in particular fixing touch interactions in device emulation mode in Chrome and Firefox (by @ivansanchez) #3520 #3710
- Fixed a bug where tile layers with
maxNativeZoom
were not checking bounds properly (by @jlaxon) #3415
- Fixed a bug where popups were not remembering which layer originated them after calling
bindPopup(popup)
(by @Eschon) #3675
- Fixed a race condition between markers and zoom animation (by @perliedman) #3152
- Fixed a bug with
Map.fitBounds
padding (by @bsstoner). #2489
- Allow canvas paths to fire
dblclick
and contextmenu
events (by @ivansanchez) #3482
- Allow canvas filled polygons to use the
fillRule
option (by @w8r) #3477
- Allow canvas lines to use
lineCap
and lineJoin
options (by @northerneyes) #3156
- Updated bower definitions to comply with best practices (by @guptaso2) #2726 #3448
0.7.3 (2014-05-23)
- Added proper bower and component support (by @calvinmetcalf). #2561 #1903
- Fixed a bug where dragging the map outside the window caused an error on FF. #2610
- Fixed a bug where some taps on Android where not working, often falsely perceived as drags (by @axefrog). #2503
- Fixed a bug where clicks on Android were skipped when happened too fast. #2303
- Fixed a bug where calling
setView
(or similar methods) several times in succession could freeze the map. #2521 #2236 #2485
- Fixed a bug where
Control.Layers
wasn't properly removed (by @jack-kerouac). #2569
- Fixed a bug that caused
TileLayer
load
event not to fire properly. #2510
- Fixed Canvas-based paths not triggering
remove
event when removed (by @adimitrov). #2486
- Fixed a bug where you could end up with fractional zoom after pinch-zooming in some cases (by @danzel. #2400 #1943
0.7.2 (2014-01-17)
- Fixed a bug that appeared with Chrome 32 update that made all mouse events shifted on scrolled pages. #2352
- Fixed a bug that could break tile loading when using non-standard tile sizes. #2288
- Fixed a bug where
maxNativeZoom
option didn't work with TMS tile layers (by @perliedman). #2321 #2314
0.7.1 (2013-12-06)
- Fixed a bug where pinch-zooming quickly could occasionally leave the map at a fractional zoom thus breaking tile loading (by @danzel). #2269 #2255 #1934
- Fixed tile flickering issues on some old Android 2/3 devices by disabling buggy hardware accelerated CSS there (by @danzel). #2216 #2198
- Fixed a regression that sometimes led to an error when you started pinch-zoom as the first action on the map (by @danzel). #2259 #2256
- Reverted
L.Util.template
optimizations to allow Leaflet to be used in eval-banning environments like browser extensions (performance gain was insignificant anyway) (by @calvinmetcalf). #2217 #2209 #1968
- Fixed a regression where
Map
invalidateSize
could lead to unexpected results when called before map initialization (by @Zverik). #2250 #2249
- Fixed a regression where
FeatureGroup
containing other group overwrote original e.layer
value in mouse events (by @gumballhead). #2253 #2252
- Fixed a regression where
CircleMarker
setLatLngs
didn't return this
(by @radicalbiscuit). #2206
0.7 (2013-11-18)
Improvements
Usability improvements
- Added support for IE11 touch devices (by @danzel, @DanielX2 and @fnicollet). #2039 #2066 #2037 #2102
- Added shift-double-click to zoom out shortcut. #2185
- Significantly improved controls design on mobile devices. #1868 #2012
- Fixed and improved IE7-8 control and popup styles.
- Made subtle improvements to control styles on desktop browsers.
- Improved keyboard nav support so that map doesn't loose focus when you click on a control (by @jacobtoye). #2150 #2148
- Improved
maxBounds
behavior: now it doesn't force higher minimal zoom, and anchors to max bounds edges properly when zooming (by @kapouer and @mourner). #2187 #1946 #2081 #2168 #1908
Map API improvements
- Made
Map
setView
zoom
argument optional. #2056
- Added
maxZoom
option to Map
fitBounds
. #2101
- Added
Map
bounceAtZoomLimits
option that makes the map bounce when you pinch-zoom past limits (it worked like this before, but now you can disable this) (by @trevorpowell). #1864 #2072
- Added
distance
property to Map
and Marker
dragend
events. #2158 #872
- Added optional support for center-oriented scroll and double-click zoom (by @jfirebaugh). #1939
- Added
timestamp
to Map
locationfound
event. #584
- Improved
Map
invalidateSize
to call moveend
immediately unless given debounceMoveend: true
option (by @jfirebaugh). #2181
TileLayer API improvements
- Added
TileLayer
maxNativeZoom
option that allows displaying tile layers on zoom levels above their maximum by upscaling tiles. #1802 #1798
- Added
TileLayer
tileloadstart
event (by @tmcw). #2142 #2140
- Improved
TileLayer
world size (used for wrapping and limiting tiles) to be derived from CRS instead of hardcoded, making it easier to use with custom projections (by @perliedman). #2160
Marker API improvements
Vector layers API improvements
- Added
Path
className
option for adding custom class names to vector layers.
- Added
Path
lineCap
and lineJoin
options (by @palewire). #1843 #1863 #1881
- Added ability to pass vector options to
GeoJSON
(by @kapouer). #2075
- Improved
Polygon
setLatLngs
to also accept holes (by @aparshin). #2095 #1518
- Added
GeoJSON
3D format support and optional altitude
argument to LatLng
constructor (by @Starefossen). #1822
- Added
MultiPolygon
and MultiPolyline
openPopup
method. #2046
Misc API improvements
- Added
ImageOverlay
setUrl
and getAttribution
methods and attribution
option (by @stsydow). #1957 #1958
- Added localization support for the zoom control (by @Danielku15). #1953 #1643 #1953
- Significantly improved
L.Util.template
performance (affects L.TileLayer
) by introducing cached template compilation (by @calvinmetcalf). #1969 #1968 #1554
- Added
CRS
getSize
for getting the world size in pixels (by @perliedman). #2160
- Added
leaflet-drag-target
CSS class to an element under cursor when dragging for more flexible customization. #2164 #1902
- Improved
L.DomUtil
addClass
, removeClass
, hasClass
methods performance and fixed it to work with SVG elements. #2164
Dev workflow improvements
- Added an official FAQ.
- Cleaned up and moved old IE styles to
leaflet.css
and removed leaflet.ie.css
, so no need for IE conditional comment when including Leaflet now. #2159
- Added
leaflet-oldie
CSS class to map container in IE7-8 for easier styling. #2159
- Officially dropped support for IE6. Nobody cares anyway, and Leaflet should still be accessible on it. #2159
- Improved the build system to check JS errors in spec files. #2151
- Fixed
jake
command to run tests before building the source. #2151
- Switched the main file in
package.json
to unminified version for NPM/Browserify (by @icetan). #2109
Bugfixes
0.6 regression fixes
- Fixed a memory leak in iOS7 that could crash Safari when handling lots of objects (e.g. 1000 markers) (by @danzel). #2149 #2122
- Fixed a bug that caused lag at the beginning of panning in Chrome (by @jfirebaugh). #2163
- Fixed a regression that made the layers control unscrollable in Firefox. #2029
- Fixed a regression that broke
worldCopyJump: true
option (by @fastrde). #1904 #1831 #1982
- Fixed a regression where a first map click after popup close button click was ignored (by @fastrde). #1537 #1963 #1925
- Fixed a regression where
L.DomUtil.getMousePosition
would throw an error if container argument not provided (by @scooterw). #1826 #1928 #1926
- Fixed a regression with vector layers positioning when zooming on IE10+ touch devices (by @danzel). #2002 #2000
- Fixed a regression with
maxBounds
behaving weirdly on panning inertia out of bounds. #2168
General bugfixes
- Fixed a bug where the map could freeze if centered and immediately recentered on initialization. #2071
- Fixed a bug where all maps except the first one on a page didn't track window resize. #1980
- Fixed a bug where tiles in
EPSG:3395
projection were shifted (by @aparshin). #2020
- Fixed a bug where scale control displayed wrong scale when on pages with
box-sizing: border-box
.
- Fixed a bug where zoom control button didn't appear as disabled if map was initialized at the zoom limit. #2083
- Fixed a bug where box zoom also triggered a map click event (by @fastrde). #1951 #1884
- Fixed a bug where shift-clicking on a map immediately after a drag didn't trigger a click event (by @fastrde). #1952 #1950
- Fixed a bug where content was updated twice when opening a popup. #2137
- Fixed a bug that could sometimes cause infinite panning loop when using
maxBounds
(by @kapouer and @mourner). #2187 #1946 #2081 #2168 #1908
Browser bugfixes
- Fixed a bug where keyboard
+
no longer zoomed the map on FF 22+ (by @fastrde). #1943 #1981
- Fixed a bug where calling
Map
remove
throwed an error in IE6-8. #2015
- Fixed a bug where
isArray
didn't work in rare cases in IE9. #2077
- Fixed a bug where FF sometimes produced console warnings when animating markers. #2090
- Fixed a bug where mouse wasn't handled correctly on RTL pages in some cases (by @danzel). #1986 #2136
Mobile bugfixes
- Fixed a bug where tiles could disappear after zooming on Chrome 30+ for Android (by @danzel). #2152 #2078
- Fixed a bug on IE10+ touch where pinch-zoom also caused click (by @danzel). #2117 #2094
- Fixed a bug on IE10+ touch where controls didn't loose the pressed state after tapping (by @danzel). #2111 #2103
- Fixed a bug where clicking on layers control labels on iOS throwed an error (by @olemarkus and @dagjomar). #1984 #1989
Map API bugfixes
- Fixed a bug where
Map
getCenter
returned old result after map container size changed (by @jfirebaugh). #1940 #1919
- Fixed
Map
invalidateSize
rounding issues when changing map size by an odd pixel amount (by @russelldavis). #1931
- Fixed a bug where
Map
removeLayer
didn't return this
in a corner case (by @jfirebaugh).
- Fixed a bug where calling
Map
setZoom
before setView
would throw an error. #1449
Layers API bugfixes
- Fixed a bug where
Popup
setLatLng
unnecessarily reset content and updated layout; works much faster now. #2167
- Fixed a bug where
toGeoJSON
of layers originated from GeoJSON GeometryCollection and MultiPoint didn't work properly (wasn't round-tripped). #1956
- Fixed
GeoJSON
dependencies in build configuration that could lead to a broken custom build in some situations (by @alubchuk). #1909
- Fixed a bug where
CircleMarker
popup placement wasn't updated after calling setLatLng
(by @snkashis). #1921 #1927
- Fixed a bug where popup anchor wasn't updated on
Marker
setIcon
(by @snkashis). #1874 #1891
- Fixed a bug with GeoJSON not throwing a descriptive error if a polygon has zero length inner ring (by @snkashis). #1917 #1918
- Fixed a bug where
FeatureGroup
would break when using non-evented children layers (by @tmcw). #2032 #1962
- Fixed a bug where
CircleMarker
getRadius
would always return null
. #2016 #2017
- Fixed a bug where
TileLayer.WMS
didn't work with WMS 1.3 & EPSG4326 projection (by @Bobboya). #1897
- Fixed a bug where
FeatureGroup
events e.layer
was sometimes empty in old IE. #1938
Misc API bugfixes
- Fixed a bug where
L.latLngBounds
didn't accept simple object LatLng
form (by @Gnurfos). #2025 #1915
- Fixed a bug where
L.Util.tempalate
wouldn't work with double quotes in the string (by @jieter). #1968 #2121 #2120
- Fixed a bug where attribution control that was added to a map after attributed layers didn't have the corresponding attributions (by @snkashis). #2177 #2178
0.6.4 (2013-07-25)
- Fixed a regression where
fitBounds
and setMaxBounds
could freeze the browser in some situations. #1895 1866
- Fixed a bug where click on a map on a page with horizontal scroll caused the page to scroll right (by @mstrelan). #1901
0.6.3 (2013-07-17)
Regression fixes
- Fixed a regression where mouse interaction had incorrect coordinates in some map positioning cases (by @scooterw). #1826 #1684 #1745 #1
- Fixed a regression that prevented the map from responding to drag on areas covered with
ImageOverlay
(by @jfirebaugh). #1821
- Fixed a regression where
layerremove
and layeradd
were fired before the corresponding action finishes (by @jfirebaugh). #1846
- Fixed a regression with
worldCopyJump: true
breaking the map on small zoom levels (by @danzel). #1831
- Fixed a regression where
Marker
shadow didn't animate on zoom after using setIcon
. #1768
- Fixed a regression where the map would stuck when trying to animate zoom before any tile layers are added to the map. #1484 #1845
- Fixed a regression with the layers control and popups closing on inside click in IE < 9. #1850
- Fixed a regression where scrolled popup content woudln't scroll in FF (by @jfirebaugh).
Bug fixes
- Fixed vector feature flickering on Safari Mac for screen < 2000px. #902
- Fixed a bug where
GeoJSON
ignored non-feature geometries passed in an array. #1840
- Fixed a bug where
Map
minZoom
and maxZoom
didn't always override values derived from the added tile layers. 1848
- Fixed a bug where
TileLayer.Canvas
wasn't immediately redrawn when redraw
is called (by @tofferrosen). #1797 #1817
- Fixed a bug where
FeatureGroup
still fired layerremove
event on removeLayer
even if the given layer wan't present in the group (by (by @danzel)). #1847 #1858
- Fixed a bug where
Marker
setOpacity
wasn't returning the marker (by @freepius44). #1851
- Fixed a bug where removing the map element from the DOM before panning transition has finished could keep a setInterval loop running forever (by @rutkovsky). #1825 #1856
- Fixed mobile styles to apply to
leaflet-bar
elements.
Improvements
- Added ability to pass zoom/pan animation options to
setMaxBounds
(by @davidjb). #1834
- Added
MultiPolyline
and MultiPolygon
getLatLngs
method. #1839
Dev Workflow improvements
- Leaflet builds (*.js files in the
dist
folder) were removed from the repo and are now done automatically on each commit for master
and stable
branches by Travis CI. The download links are on the Leafet download page.
0.6.2 (2013-06-28)
- Fixed a bug that caused wrong tile layers stacking order when using opacity < 1 (by @jfirebaugh). #1804 #1790 #1667
- Fixed a regression that caused tiles selection when double-clicking absolutely positioned maps with vector layers in it in Firefox (WTF!) (by @jfirebaugh). #1807
- Fixed a regression with a wrong cursor when dragging a map with vector layers, and tiles becoming selected on double click (by @jfirebaugh). #1800
- Fixed a regression that caused flickering of tiles near map border on zoom animation in Chrome.
0.6.1 (2013-06-27)
- Fixed a regression with mouse wheel zooming too fast on Firefox (by @jfirebaugh). #1788
- Fixed a regression with broken zooming on maps with EPSG3395 projection. #1796
- Fixed a bug where zoom buttons inherited Bootstrap link hover styles. #1791
0.6 (2013-06-26)
Breaking changes
- Moved polyline editing code into Leaflet.draw plugin (where it fits much better along with all other editing and drawing handlers). The API remains the same.
- Dropped support for environments that augment
Object.prototype
(luckily it's a thing of the past nowadays).
Map
invalidateSize
no longer fires move
and moveend
events if the map size didn't change. #1819
Improvements
- Improved zoom control design - cleaner, simpler, more accessible (mostly by @jacobtoye). #1313
- Updated
Control.Layers
icon (designed by Volker Kinkelin), added retina version and SVG source. #1739
- Added keyboard accessibility to markers (you can now tab to them and press enter for click behavior). #1355
- Improved
TileLayer
zoom animation to eliminate flickering in case one tile layer on top of another or when zooming several times quickly (by @mourner with lots of fixes from @danzel). #1140 #1437 #52
- Subtly improved default popup styles
- Improved attribution control to be much less obtrusive (no "powered by", just a Leaflet link). You can still remove the prefix with
map.attributionControl.setPrefix('')
if you need.
- Improved zoom behavior so that there's no drift of coordinates when you change zoom back and forth without panning. #426
- Improved double click behavior to zoom while keeping the clicked point fixed (by @ansis). #1582
- Improved dragging behavior to not get stuck if mouse moved outside of an iframe containing the map (by @jfirebaugh). #1277 #1782 #1786
- Improved box zoom to be cancelable by pressing Escape (by @yohanboniface). #1438
- Improved
Marker
popups to close on marker click if opened (by @popox). #1761
- Significantly improved mass layer removal performance (by @jfgirard with fixes from @danzel). #1141 #1514
API improvements
Layers API improvements
- Added
toGeoJSON
method to various layer types, allowing you to save your Leaflet layers as GeoJSON. (by @jfirebaugh). #1462 #712 #1779
- Added
GeoJSON
coordsToLatLng
option for dealing with GeoJSON that has non-WGS84 coords (thanks to @moonlite). #888 #886
- Improved
Marker
to reuse icon DOM elements when changing icons on the fly (e.g. fixes problems when changing icon on mouse hover) (by @robpvn & @danzel). #1726 #561 #1753 #1754
- Added
latlng
property to Marker
mouse event data. #1613
- Added
LayerGroup
hasLayer
method (by @rvlasveld). #1282 #1300
- Added
LayerGroup
getLayers
method (by @tmcw). #1469
- Added
LayerGroup
getLayer
method (by @gumballhead). #1650
- Improved
LayerGroup
removeLayer
method to also accept layer id
(by @gumballhead). #1642
- Added
Path
pointerEvents
option for setting pointer-events on SVG-powered vector layers (by @inpursuit). #1053
- Improved
Polygon
to filter out last point if it's equal to the first one (to fix GeoJSON polygon issues) (by @snkashis). #1153 #1135
- Improved paths with
clickable: false
to allow mouse events to pass through to objects underneath (by @snkashis). #1384 #1281
- Improved
L.Util.template
(and correspondingly url-related TileLayer
options) to support functions for data values (by @olegsmith). #1554
- Added
TileLayer
getContainer
method (by @tmcw). #1433
- Fixed
TileLayer.Canvas
redraw
method chaining (by @jieter). #1287
- Added
TileLayer.WMS
crs
option to be able to use WMS of CRS other than the map CRS (by @kengu). #942 #945
- Added
popupopen
and popupclose
events to various layers (by @Koc). #738
- Added
Popup
keepInView
option (thanks to @lapo-luchini) that prevents the popup from going off-screen while it's opened. #1308 #1052
- Added
Marker
togglePopup
method (by @popox). #1761
- Added
Popup
closeOnClick
option that overrides the same Map
option for specific popups (by @jfirebaugh). #1669
- Improved
Marker
and Path
bindPopup
method to also accept Popup
objects (by @snkashis). #1385 #1208 #1402
- Added
Marker
setPopupContent
method (by @snkashis). #1373
Map API improvements
- Improved all view changing methods of
Map
(setView
, panTo
, setZoom
, fitBounds
, etc.) to accept an options object, including the ability to precisely control zoom/pan animations they cause (force disable/enable, etc.). #1617 #1616 #340 #483 #1164 #1420
- Improved
Map
fitBounds
method to accept padding
(or paddingTopLeft
and paddingBottomRight
) options, allowing you to zoom to an area with a certain padding in pixels (usually left for controls). #859
- Improved
Map
invalidateSize
to accept options object (animate
and pan
, the latter controls if it pans the map on size change). (by @jacobtoye and @mourner). #1766 #1767
- Added
Map
setZoomAround
method for zooming while keeping a certain point fixed (used by scroll and double-click zooming). #1157
- Added
Map
remove
method to properly destroy the map and clean up all events, and added corresponding unload
event (by @jfirebaugh and @mourner). #1434 #1101 #1621
- Added
Map
tap
handler that now contains all mobile hacks for enabling quick taps and long holds and tapTolerance
option specifying the number of pixels you can shift your finger for click to still fire.
- Added
Map
zoomAnimationThreshold
for setting the max zoom difference with which zoom animation can occur. #1377
- Improved
Map
openPopup
method to also accept (content, latlng)
signature as a shortcut.
- Improved
Map
closePopup
method to optionally accept a popup object to close. #1641
- Improved
Map
stopLocate
method to abort resetting map view if calling locate
with setView
option. #747
- Improved
Map
to throw exception if the specified container id is not found (by @tmcw). #1574
- Improved
Map
locationfound
event to pass all location data (heading, speed, etc.). #984 #584 #987 #1028
- Added
Map
resize
event. #1564
- Added
Map
zoomlevelschange
event that triggers when the current zoom range (min/max) changes (by @moonlite). #1376
Controls API improvements
- Added generic toolbar classes for reuse by plugin developers (used by zoom control).
- Added
Map
baselayerchange
, overlayadd
and overlayremove
events fired by Control.Layers
(by @calvinmetcalf and @Xelio). #1286 #1634
- Added
Control
getContainer
method. #1409
Misc API improvements
- Made Leaflet classes compatible with CoffeeScript class inheritance syntax (by @calvinmetcalf). #1345 #1314
- Added
cleanAllEventListeners
method (aliased to off
without arguments) to all events-enabled objects (by @iirvine). #1599
- Added
addOneTimeEventListener
method (aliased to once
) to all events-enabled objects (by @iirvine). #473 #1596
- Added ability to pass coordinates as simple objects (
{lat: 50, lon: 30}
or {lat: 50, lng: 30}
). #1412
- Added
LatLngBounds
getNorth
, getEast
, getSouth
, getWest
methods (by @yohanboniface). #1318
- Added
AMD
support (Leaflet now registers itself as a leaflet
AMD module) (with fixes from @sheppard). #1364 #1778
- Added
L.Util.trim
function (by @kristerkari). #1607
Development workflow improvements
Bugfixes
General bugfixes
- Fixed lots of issues with extent restriction by
Map
maxBounds
. #1491 #1475 #1194 #900 #1333
- Fixed occasional crashes by disabling zoom animation if changing zoom level by more than 4 levels. #1377
- Fixed a bug with that caused stuttery keyboard panning in some cases (by @tmcw). #1710
- Fixed a bug that caused unwanted scrolling of the page to the top of the map on focus. #1228 #1540
- Fixed a bug where clicking on a marker with an open popup caused the popup to faded in again (by @snkashis). #506 #1386
- Fixed a bug where zoom buttons disabled state didn't update on min/max zoom change (by @snkashis). #1372 #1328
- Fixed a bug where scrolling slightly wouldn't always zoom out the map (by @cschwarz). #1575
- Fixed popup close button to not leave an outline after clicking on it and reopening the popup (by @dotCypress). #1537
- Fixed a bug that prevented tiles from loading during pan animation.
- Fixed a bug with
contextmenu
events on popups falling through to map (by @snkashis). #1730 #1732
- Fixed
404
tile loading errors when browsing the map off the world bounds.
- Fixed shifted mouse events in some cases with map inside a relatively positioned parent (by @scooterw and @jec006). #1670 #1684 #1745 #1744
- Fixed a bug where tile layer z-index order sometimes broke after view reset. #1422
Browser bugfixes
- Fixed a bug with undesirable page scrolling in Firefox 17+ when you zoom the map by scrolling (by @jfirebaugh). #1789 #1788
- Fixed a bug where mouse coordinates where shifted in Firefox if the map was inside a positioned block on a scrolled page (by @joschka). #1365 #1322
- Fixed a bug where box zoom didn't work in some cases in Firefox 18+ (by @fabriceds). #1405
- Fixed a bug where
TileLayer
opacity didn't work in IE 7-8 (by @javisantana & [@danzel](https://gi
.com/danzel)). #1084 #1396 #1371
- Fixed Leaflet not working correctly in PhantomJS (by @rassie). #1501
Mobile bugfixes
- Fixed a bug with layers control on WinPhone8/IE10 Touch (by @danzel). #1635 #1539
- Fixed a bug with click sometimes firing twice on WinPhone8/IE10 Touch (by @danzel). #1694
- Fixed a bug in Android where click was triggered twice on one tap (by @jerel & @mourner). #1227 #1263 #1785 #1694
- Fixed a bug in Android where click on a collapsed layers control would immediately select one of the layers (by @danzel). #1784 #1694
API bugfixes
General API bugfixes
- Fixed click mouse event inside popups not propagating outside the map (fixes issues with jQuery.live and some mobile frameworks that rely on document click listeners). #301
- Fixed a bug where event listener still fired even if it was removed on the same event in other listener (by @spamdaemon). #1661 #1654
- Fixed a bug where
L.point
and L.latLng
factories weren't passing null
and undefined
values through.
- Fixed
DomEvent
removeListener
function chaining (by @pagameba).
- Fixed a bug where
removeEventListener
would throw an error if no events are registered on the object (by @tjoekbezoer). #1632 #1631
- Fixed a bug where
Point
equals
and contains
methods didn't accept points in array form.
- Fixed a bug where
LatLngBounds
extend
of an undefined object would cause an error (by @korzhyk). #1688
- Fixed a bug where
Control.Attribution
removeAttribution
of inexistant attribution corrupted the attribution text. #1410
- Fixed a bug where
setView
on an invisible map caused an error (by @jfire). #1707
- Fixed compatibility with Browserify (by @jfirebaugh). #1572
Layers API bugfixes
- Fixed a bug where default marker icon path wasn't properly detected in some cases in IE6-7 (by @calvinmetcalf). #1294
- Fixed a bug where
TileLayer.WMS
param values weren't escaped in URLs (by @yohanboniface). #1317
- Fixed a bug where layers that belong to multiple feature groups didn't propagate events correctly (by @danzel). #1359
- Fixed a bug where
TileLayer.WMS
tileSize
option was ignored (by @brianhatchl). #1080
- Fixed a bug where
Polyline
constructor could overwrite the source array (by @snkashis and @danzel). #1439 #1092 #1246 #1426
- Fixed a bug where marker dragging disabling/enabling wouldn't always work correctly (by @snkashis and @escaped). #1471 #1551
- Fixed
TileLayer
to prevent incorrect subdomain in case of negative tile coordinates (by @malexeev). #1532
- Fixed polygons to normalize holes (remove last point if it's equal to the first one) (by @jfirebaugh). # #1459
- Fixed
DivIcon
html
option to accept 0
as a value (by @stuporglue). #1633
- Fixed a bug with Canvas-based paths throwing an error on
mousemove
in certain conditions. #1615
- Fixed a bug where copies of the world wouldn't load if you set
TileLayer
bounds
(by @ansis). #1618
- Fixed a bug where
TileLayer
load
event wouldn't always fire correctly. #1565
- Fixed
TileLayer.WMS
compatibility with some old servers that only accepted request parameters in uppercase. #1751
- Fixed a bug with incorrect
L.Icon.Default.imagePath
detection in some cases. #1657
- Fixed a bug where layer
onRemove
was still called even if it was never added (by @jfirebaugh). #1729
- Fixed a bug where calling
setRadius
on a Canvas-powered CircleMarker
would cause an infinite loop (by @snkashis). #1712 #1713 #1728
- Renamed `marker-icon@2x.png
to
marker-icon-2x.png` to fix compatibility with Google AppEngine. #1552 #1553
- Fixed a bug where
popupclose
and popupopen
events weren't fired for multipolygons and multipolylines (by @tmcw). #1681
Map API bugfixes
- Fixed a bug where
Map
fitBounds
wouldn't work correctly with large bounds (thanks to @MaZderMind). #1069
- Fixed a bug where
Map
hasLayer
wasn't handling null
objects (by @rvlasveld). #1282 #1302
- Fixed a bug where
Map
moveend
fired before dragend
on drag (by @oslek). #1374
- Fixed a bug where panning with inertia produced an excessive
Map
movestart
event on inertia start (by @oslek). #1374
- Fixed a bug where
Map
moveend
fired repeatedly on window resize even if the actual map size didn't change (by @oslek). #1374
- Fixed a bug where
Map
moveend
sometimes wasn't fired after drag (particularly often when dragging with a trackpad).
- Fixed a bug that would cause an error when trying to get the state of the map in a
Map
load
event listener. #962
- Added
Map
autopanstart
event back (it was removed occasionally in previous version). #1375
- Fixed a bug with removing previously set
Map
maxBounds
(by @jec006). #1749 #1750
0.5.1 (2013-02-06)
- Fixed a regression with
GeoJSON
not accepting arrays of FeatureCollection
(by @snkashis). #1299 #1298
- Fixed a regression with
CirleMarker
setRadius
not working if called before adding the layer to the map (by @danzel). #1342 #1297
0.5 (2013-01-17)
Breaking changes
Be sure to read through these changes to avoid any issues when upgrading from older versions:
- Removed default
LatLng
wrapping/clamping of coordinates (-180, -90
to 180, 90
), wrapping moved to an explicit method (LatLng
wrap
).
- Disabled
Map
worldCopyJump
option by default (jumping back to the original world copy when panning out of it). Enable it explicitly if you need it.
- Changed styles for the zoom control (you may need to update your custom styles for it).
Improvements
Usability improvements
Interaction
- Added touch zoom, pan and double tap support for IE10 touch devices and Metro apps (by @danzel and @veproza with help from @oliverheilig). #1076 #871
- Improved panning inertia to be much more natural and smooth.
- Improved dragging cursors in Chrome, Safari and Firefox (now grabbing hand cursors are used).
- Improved zoom animation curve for a better feel overall.
- Improved scroll wheel zoom to be more responsive.
- Improved panning animation performance in IE6-8.
Controls
- Improved zoom control design to look better, more neutral and in line with other controls, making it easier to customize and fit different website designs. Replaced +/- images with text.
- Improved zoom control to zoom by 3 levels if you hold shift while clicking on a button.
- Improved zoom control buttons to become visually disabled when min/max zoom is reached. #917
- Improved scale control styles.
- Improved fallback control styles for IE6-8.
Other
- Added retina support for markers (through
Icon
iconRetinaUrl
and shadowRetinaUrl
options) (by @danzel). #1048 #1174
- Added retina-sized default marker icon in addition to standard one (along with its SVG source and with some subtle design improvements) (by @danzel). #1048 #1174
- Improved vectors updating/removing performance on Canvas backend (by @danzel). #961
- Cut total images size from 10KB to 3.2KB with Yahoo Smush.it. Thanks to Peter Rounce for suggestion.
API improvements
- Replaced
L.Transition
with a much better and simpler L.PosAnimation
.
- Added
Class
addInitHook
method for adding constructor hooks to any classes (great extension point for plugin authors). #1123
- Added
Map
whenReady
method (by @jfirebaugh). #1063
- Added optional
delta
argument to Map
zoomIn
and zoomOut
(1 by default).
- Added
isValid
method to LatLngBounds
and Bounds
(by @domoritz). #972
- Added
Point
equals
method.
- Added
Bounds
getSize
method.
- Improved markers and vectors click event so that it propagates to map if no one is listening to it (by @danzel). #834 #1033
- Added
Path
unbindPopup
and closePopup
methods.
- Added
Path
add
and remove
event.
- Added
Marker
riseOnHover
and riseOffset
options (for bringing markers to front on hover, disabled by default) (by jacobtoye). #914 #920
- Added
Marker
move
and remove
events.
- Added
Marker
contextmenu
event. #223
- Added
Popup
zoomAnimation
option (useful to disable when displaying flash content inside popups #999).
- Added
FeatureGroup
layeradd
and layerremove
events (by @jacobtoye). #1122
- Added
Control.Layers
baselayerchange
event (by @jfirebaugh). #1064
- Improved
Control.Layers
to support HTML in layer names (by @aparshin). #1055 #1099
- Added
CRS.Simple
to the list of built-in CRS and improved it to be more usable out of the box (it has different default scaling and transformation now), see debug/map/simple-proj.html
for an example.
- Removed
Browser
ua
, gecko
, opera
properties (no longer needed).
- Added
L.extend
, L.bind
, L.stamp
, L.setOptions
shortcuts for corresponding L.Util
methods.
- Disabled clearing of map container contents on map initialization (as a result of fixing #278).
- Added
L.Util.isArray
function (by @oslek). #1279
- Added
mouseover
and mouseout
events to canvas-based vector layers (by @snkashis). #1403
- Added
Map
eachLayer
to iterate over all layers added to the map (by @jfirebaugh). #1457
- Added
TileLayer
bounds
option to limit tile loading to a specific region (by @adimitrov). #991
Bugfixes
General bugfixes
- Fixed broken tiles and zooming in RTL layouts (by @danzel). #1099 #1095
- Fixed a bug with pan animation where it jumped to its end position if you tried to drag the map.
- Fixed a bug where shift-clicking on a map would zoom it to the max zoom level.
- Fixed a glitch with zooming in while panning animation is running.
- Fixed a glitch with dragging the map while zoom animation is running.
- Fixed a bug where slight touchpad scrolling or one-wheel scrolling wouln't always perform zooming. #1039
- Fixed a bug where
panBy
wouldn't round the offset values (so it was possible to make the map blurry with it). #1085
- Fixed a bug where you couldn't scroll the layers control with a mouse wheel.
- Fixed a regression where WMS tiles wouldn't wrap on date lines. #970
- Fixed a bug where mouse interaction was affected by map container border width (by @mohlendo). #1204 #1205
- Fixed a bug with weird vector zoom animation when using Canvas for rendering (by @danzel). #1187 #1188
- Fixed a bug where max bounds limitation didn't work when navigating the map with a keyboard (by @snkashis). #989 #1221
API bugfixes
- Fixed a bug where
TileLayer
bringToBack
didn't work properly in some cases (by @danzel). #963 #959
- Fixed a bug where removing a tile layer while dragging would throw an error (by @danzel). #965 #968
- Fixed a bug where middle marker wasn't removed after deleting 2 end nodes from a polyline (by @Svad). #1022 #1023
- Fixed a bug where
Map
load
event happened too late (after moveend
, etc.) (by @jfirebaugh). #1027
- Fixed
Circle
getBounds
to return correct bounds and work without adding the circle to a map. #1068
- Fixed a bug where removing
Popup
on viewreset
throwed an error (by fnicollet and @danzel). #1098 #1094
- Fixed a bug where
TileLayer.Canvas
drawTile
didn't receive tile zoom level in arguments.
- Fixed a bug where
GeoJSON
resetStyle
would not fully reset a layer to its default style. #1112
- Fixed a bug that caused infinite recursion when using
latLngBounds
factory with coordinates as string values. #933
- Fixed chaining on
Marker
setIcon
, setZIndexOffset
, update
methods. #1176
- Fixed a bug with mouse interaction when the map container contained children with position other than absolute. #278
- Fixed a bug with fill/stroke opacity conflicts when using Canvas for rendering (by @danzel). #1186 #1889
- Fixed a bug where
FeatureGroup
bindPopup
didn't take options into account.
- Fixed a bug where Canvas-based vector layers didn't cleanup click event on removal properly (by @snkashis). #1006 #1273
- Fixed a bug where
CircleMarker
setStyle
didn't take radius
into account (by @fdlk). #1012 #1013
- Fixed a bug where null GeoJSON geometries would throw an error instead of skipping (by @brianherbert). #1240
- Fixed a bug where Canvas-based vector layers passed incorrect
layer
event property on click (by @snkashis). #1215 #1243
- Fixed a bug where
TileLayer.WMS
didn't work correctly if the base URL contained query parameters (by @snkashis). #973 #1231
- Fixed a bug where removing a polyline in editing state wouldn't clean up the editing handles (by @mehmeta). #1233
- Fixed a bug where removing a vector layer with a bound popup wouldn't clean up its click event properly (by @yohanboniface). #1229
- Fixed a bug where
GeoJSON
features with GeometryCollection
didn't pass properties to pointToLayer
function (by @calvinmetcalf). #1097
- Fixed
FeatureGroup
eachLayer
chaining. #1452
Browser bugfixes
- Fixed a bug with map freezing after zoom on Android 4.1. #1182
- Fixed a bug where "Not implemented" error sometimes appeared in IE6-8 (by @bryguy and @lookfirst). #892 #893
- Fixed compatibility with SmoothWheel extension for Firefox (by @waldir). #1011
- Fixed a bug with popup layout in IE6-7 (by @danzel). #1117
- Fixed a bug with incorrect box zoom opacity in IE6-7 (by @jacobtoye). #1072
- Fixed a bug with box zoom throwing a JS error in IE6-7 (by @danzel). #1071
- Fixed a bug where
TileLayer
bringToFront/Back()
throwed an error in IE6-8. #1168
- Fixed array type checking in the code to be more consistent in a cross-frame environment (by @oslek). #1279
- Fixed a bug with
-
key not working in Firefox 15+ (thanks to @mattesCZ). #869
0.4.5 (2012-10-25)
0.4.4 (2012-08-07)
Improvements
- Improved
GeoJSON
setStyle
to also accept function (like the corresponding option).
- Added
GeoJSON
resetStyle(layer)
, useful for resetting hover state.
- Added
feature
property to layers created with GeoJSON
(containing the GeoJSON feature data).
- Added
FeatureGroup
bringToFront
and bringToBack
methods (so that they would work for multipolys).
- Added optional
animate
argument to Map
invalidateSize
(by @ajbeaven). #857
Bugfixes
- Fixed a bug where tiles sometimes disappeared on initial map load on Android 2/3 (by @danzel). #868
- Fixed a bug where map would occasionally flicker near the border on zoom or pan on Chrome.
- Fixed a bug where
Path
bringToFront
and bringToBack
didn't return this
.
- Removed zoom out on Win/Meta key binding (since it interferes with global keyboard shortcuts). #869
0.4.2 (2012-08-01)
- Fixed a bug where layers control radio buttons would not work correctly in IE7 (by @danzel). #862
- Fixed a bug where
FeatureGroup
removeLayer
would unbind popups of removed layers even if the popups were not put by the group (affected Leaflet.markercluster plugin) (by @danzel). #861
0.4.1 (2012-07-31)
- Fixed a bug that caused marker shadows appear as opaque black in IE6-8. #850
- Fixed a bug with incorrect calculation of scale by the scale control. #852
- Fixed broken L.tileLayer.wms class factory (by @mattcurrie). #856
- Improved retina detection for
TileLayer
detectRetina
option (by @sxua). #854
0.4 (2012-07-30)
API simplification
Leaflet 0.4 contains several API improvements that allow simpler, jQuery-like syntax (example) while being backwards compatible with the previous approach (so you can use both styles):
- Improved most methods and options to accept
LatLng
, LatLngBounds
, Point
and Bounds
values in an array form (e.g. map.panTo([lat, lng])
will be the same as map.panTo(new L.LatLng(lat, lng))
)
- Added
addTo
method to all layer classes, e.g. marker.addTo(map)
is equivalent to map.addLayer(marker)
- Added factory methods to most classes to be able to write code without
new
keyword, named the same as classes but starting with a lowercase letter, e.g. L.map('map')
is the same as new L.Map('map')
Notable new features
- Added configurable panning inertia - after a quick pan, the map slows down in the same direction.
- Added keyboard navigation for panning/zooming with keyboard arrows and +/- keys (by @ericmmartinez). #663 #646
- Added smooth zoom animation of markers, vector layers, image overlays and popups (by @danzel). #740 #758
- Added Android 4+ pinch-zoom support (by @danzel). #774
- Added polyline and polygon editing. #174
- Added an unobtrusive scale control.
- Added DivIcon class that easily allows you to create lightweight div-based markers.
- Added Rectangle vector layer (by @JasonSanford). #504
Improvements
Usability improvements
- Improved zooming so that you don't get a blank map when you zoom in or out twice quickly (by @danzel). #7 #729
- Drag-panning now works even when there are markers in the starting point (helps on maps with lots of markers). #506
- Improved panning performance even more (there are no wasted frames now).
- Improved pinch-zoom performance in mobile Chrome and Firefox.
- Improved map performance on window resize.
- Replaced box-shadow with border on controls for mobile devices to improve performance.
- Slightly improved default popup styling.
- Added
TileLayer
detectRetina
option (false
by default) that makes tiles show in a higher resolution on iOS retina displays (by @Mithgol). #586
GeoJSON API changes
GeoJSON API was improved to be simpler and more flexible (example). The changes are not backwards-compatible, so be sure to update your old code.
- Added
style
option for styling vector layers, passed either as an object or as a function (to style vector layers according to GeoJSON properties).
- Added
filter
option to leave out features that don't correspond to a certain criteria (e.g. based on properties).
- Added
onEachFeature
option to execute certain code on each feature layer based on its properties (binding popups, etc).
- Changed
pointToLayer
function signature to provide geojson
in addition to latlng
when creating point features for more flexibility.
Icon API changes
Icon API was improved to be more flexible, but one of the changes is backwards-incompatible: you now need to pass different icon properties (like iconUrl
) inside an options object (example).
- Converted
Icon
properties to options, changed constructor signature to Icon(options)
.
- Moved default marker icon options to
L.Icon.Default
class (which extends from L.Icon
).
- Added
Icon
className
option to assign a custom class to an icon.
- Added
Icon
shadowAnchor
option to set the anchor of the shadow.
- Made all
Icon
options except iconUrl
optional (if not specified, they'll be chosen automatically or implemented using CSS). Anchor is centered by default (if size is specified), and otherwise can be set through CSS using negative margins.
Control API changes
- Added
setPosition
and getPosition
to all controls, as well as ability to pass certain position as an option when creating a control.
- Made controls implementation easier (now more magic happens under the hood).
- Replaced ugly control position constants (e.g.
L.Control.Position.TOP_LEFT
) with light strings ('topleft'
, 'bottomright'
, etc.)
Other breaking API changes
- Improved
TileLayer
constructor to interpolate URL template values from options (removed third urlParams
argument).
- Changed
TileLayer
scheme: 'tms'
option to tms: true
.
- Removed
Map
locateAndSetView
method (use locate
with setView: true
option)
- Changed popup
minWidth
and maxWidth
options to be applied to content element, not the whole popup.
- Moved
prefix
argument to options
in Control.Attribution
constructor.
- Renamed
L.VERSION
to L.version
.
Other API improvements
- Improved
on
and off
methods to also accept (eventHash[, context])
, as well as multiple space-separated events (by @Guiswa). #770
- Improved
off
to remove all listeners of the event if no function was specified (by @Guiswa). #770 #691
- Added
TileLayer
setZIndex
method for controlling the order of tile layers (thanks to @mattcurrie). #837
- Added
Control.Layers
autoZIndex
option (on by default) to preserve the order of tile layers when switching.
- Added
TileLayer
redraw
method for re-requesting tiles (by @greeninfo). #719
- Added
TileLayer
setUrl
method for dynamically changing the tile URL template.
- Added
bringToFront
and bringToBack
methods to TileLayer
, ImageOverlay
and vector layers. #185 #505
- Added
TileLayer
loading
event that fires when its tiles start to load (thanks to @lapinos03). #177
- Added
TileLayer.WMS
setParams
method for setting WMS parameters at runtime (by @greeninfo). #719
- Added
TileLayer.WMS
subdomain support ({s}
in the url) (by @greeninfo). #735
- Added
originalEvent
property to MouseEvent
(by @k4). #521
- Added
containerPoint
property to MouseEvent
. #413
- Added
contextmenu
event to vector layers (by @ErrorProne). #500
- Added
LayerGroup
eachLayer
method for iterating over its members.
- Added
FeatureGroup
mousemove
and contextmenu
events (by @jacobtoye). #816
- Added chaining to
DomEvent
methods.
- Added
on
and off
aliases for DomEvent
addListener
and removeListener
methods.
- Added
L_NO_TOUCH
global variable switch (set it before Leaflet inclusion) which disables touch detection, helpful for desktop apps built using QT. #572
- Added
dashArray
option to vector layers for making dashed strokes (by jacobtoye). #821 #165
- Added
Circle
getBounds
method. #440
- Added
Circle
getLatLng
and getRadius
methods (by @Guiswa). #655
- Added
openPopup
method to all vector layers. #246
- Added public
redraw
method to vector layers (useful if you manipulate their LatLng
points directly).
- Added
Marker
opacity
option and setOpacity
method.
- Added
Marker
update
method. #392
- Improved
Marker
openPopup
not to raise an error if it doesn't have a popup. #507
- Added
ImageOverlay
opacity
option and setOpacity
method. #438
- Added
Popup
maxHeight
option that makes content inside the popup scrolled if it doesn't fit the specified max height.
- Added
Popup
openOn(map)
method (similar to Map
openPopup
).
- Added
Map
getContainer
method (by @Guiswa). #654
- Added
Map
containerPointToLatLng
and latLngToContainerPoint
methods. #474
- Added
Map
addHandler
method.
- Added
Map
mouseup
and autopanstart
events.
- Added
LatLngBounds
pad
method that returns bounds extended by a percentage (by @jacobtoye). #492
- Moved dragging cursor styles from JS code to CSS.
Bug fixes
General bugfixes
- Fixed a bug where the map was zooming incorrectly inside a
position: fixed
container (by @chx007). #602
- Fixed a bug where scaled tiles weren't cleared up after zoom in some cases (by @cfis) #683
- Fixed a bug where map wouldn't drag over a polygon with a
mousedown
listener. #834
API bugfixes
- Fixed a regression where removeLayer would not remove corresponding attribution. #488
- Fixed a bug where popup close button wouldn't work on manually added popups. #423
- Fixed a bug where marker click event would stop working if you dragged it and then disabled dragging. #434
- Fixed a bug where
TileLayer
setOpacity
wouldn't work when setting it back to 1.
- Fixed a bug where vector layer
setStyle({stroke: false})
wouldn't remove stroke and the same for fill. #441
- Fixed a bug where
Marker
bindPopup
method wouldn't take offset
option into account.
- Fixed a bug where
TileLayer
load
event wasn't fired if some tile didn't load (by @lapinos03 and @cfis) #682
- Fixed error when removing
GeoJSON
layer. #685
- Fixed error when calling
GeoJSON
clearLayer
(by @runderwood). #617
- Fixed a bug where
Control
setPosition
wasn't always working correctly (by @ericmmartinez). #657
- Fixed a bug with
Util.bind
sometimes losing arguments (by @johtso). #588
- Fixed a bug where
drag
event was sometimes fired after dragend
. #555
- Fixed a bug where
TileLayer
load
event was firing only once (by @lapinos03 and shintonik). #742 #177
- Fixed a bug where
FeatureGroup
popup events where not cleaned up after removing a layer from it (by @danzel). #775
- Fixed a bug where
DomUtil.removeClass
didn't remove trailing spaces (by @jieter). #784
- Fixed a bug where marker popup didn't take popup offset into account.
- Fixed a bug that led to an error when polyline was removed inside a
moveend
listener.
- Fixed a bug where
LayerGroup
addLayer
wouldn't check if a layer has already been added (by @danzel). 798
Browser bugfixes
- Fixed broken zooming on IE10 beta (by @danzel). #650 #751
- Fixed a bug that broke Leaflet for websites that had XHTML content-type header set (by lars-sh). #801
- Fixed a bug that caused popups to be empty in IE when passing a DOM node as the content (by @nrenner). #472
- Fixed inability to use scrolled content inside popup due to mouse wheel propagation.
- Fixed a bug that caused jumping/stuttering of panning animation in some cases.
- Fixed a bug where popup size was calculated incorrectly in IE.
- Fixed a bug where cursor would flicker when dragging a marker.
- Fixed a bug where clickable paths on IE9 didn't have a hand cursor (by naehrstoff). #671
- Fixed a bug in IE with disappearing icons when changing opacity (by @tagliala and DamonOehlman). #667 #600
- Fixed a bug with setting opacity on IE10 (by @danzel). 796
- Fixed a bug where
Control.Layers
didn't work on IE7. #652
- Fixed a bug that could cause false
mousemove
events on click in Chrome (by @stsydow). #757
- Fixed a bug in IE6-8 where adding fill or stroke on vector layers after initialization with
setStyle
would break the map. #641
- Fixed a bug with setOpacity in IE where it would not work correctly if used more than once on the same element (by @ajbeaven). #827
- Fixed a bug in Chrome where transparent control corners sometimes couldn't be clicked through (by @danzel). #836 #575
Mobile browser bugfixes
- Fixed a bug that sometimes caused map to disappear completely after zoom on iOS (by @fr1n63). #580 #777
- Fixed a bug that often caused vector layers to flicker on drag end on iOS (by @krawaller). #18
- Fixed a bug with false map click events on pinch-zoom and zoom/layers controls click. #485
- Fixed a bug where touching the map with two or more fingers simultaneously would raise an error.
- Fixed a bug where zoom control wasn't always visible on Android 3. #335
- Fixed a bug where opening the layers control would propagate a click to the map (by @jacobtoye). #638
- Fixed a bug where
ImageOverlay
wouldn't stretch properly on zoom on Android 2. #651
- Fixed a bug where
clearLayers
for vector layers on a Canvas backend (e.g. on Android 2) would take unreasonable amount of time. #785
- Fixed a bug where
setLatLngs
and similar methods on vector layers on a Canvas backend would not update the layers immediately. #732
0.3.1 (2012-02-14)
- Fixed a regression where default marker icons wouldn't work if Leaflet include url contained a query string.
- Fixed a regression where tiles sometimes flickered with black on panning in iOS.
0.3 (2012-02-13)
Major features
- Added Canvas backend for vector layers (polylines, polygons, circles). This enables vector support on Android < 3, and it can also be optionally preferred over SVG for a performance gain in some cases. Thanks to @florianf for a big part of this work.
- Added layers control (
Control.Layers
) for convenient layer switching.
- Added ability to set max bounds within which users can pan/zoom. #93
Improvements
Usability improvements
- Map now preserves its center after resize.
- When panning to another copy of the world (that's infinite horizontally), map overlays now jump to corresponding positions. #273
- Limited maximum zoom change on a single mouse wheel movement (so you won't zoom across the whole zoom range in one scroll). #149
- Significantly improved line simplification performance (noticeable when rendering polylines/polygons with tens of thousands of points)
- Improved circles performance by not drawing them if they're off the clip region.
- Improved stability of zoom animation (less flickering of tiles).
API improvements
- Added ability to add a tile layer below all others (
map.addLayer(layer, true)
) (useful for switching base tile layers).
- Added
Map
zoomstart
event (thanks to @Fabiz). #377
- Improved
Map
locate
method, added ability to watch location continuously and more options. #212
- Added second argument
inside
to Map
getBoundsZoom
method that allows you to get appropriate zoom for the view to fit inside the given bounds.
- Added
hasLayer
method to Map
.
- Added
Marker
zIndexOffset
option to be able to set certain markers below/above others. #65
- Added
urlParams
third optional argument to TileLayer
constructor for convenience: an object with properties that will be evaluated in the URL template.
- Added
TileLayer
continuousWorld
option to disable tile coordinates checking/wrapping.
- Added
TileLayer
tileunload
event fired when tile gets removed after panning (by @CodeJosch). #256
- Added
TileLayer
zoomOffset
option useful for non-256px tiles (by @msaspence).
- Added
TileLayer
zoomReverse
option to reverse zoom numbering (by @Majiir). #406
- Added
TileLayer.Canvas
redraw
method (by @mortenbekditlevsen). #459
- Added
Polyline
closestLayerPoint
method that's can be useful for interaction features (by @anru). #186
- Added
setLatLngs
method to MultiPolyline
and MultiPolygon
(by @anru). #194
- Added
getBounds
method to Polyline
and Polygon
(by @JasonSanford). #253
- Added
getBounds
method to FeatureGroup
(by @JasonSanford). #557
- Added
FeatureGroup
setStyle
method (also inherited by MultiPolyline
and MultiPolygon
). #353
- Added
FeatureGroup
invoke
method to call a particular method on all layers of the group with the given arguments.
- Added
ImageOverlay
load
event. #213
- Added
minWidth
option to Popup
(by @marphi). #214
- Improved
LatLng
constructor to be more tolerant (and throw descriptive error if latitude or longitude can't be interpreted as a number). #136
- Added
LatLng
distanceTo
method (great circle distance) (by @mortenbekditlevsen). #462
- Added
LatLngBounds
toBBoxString
method for convenience (by @JasonSanford). #263
- Added
LatLngBounds
intersects(otherBounds)
method (thanks to @pagameba). #350
- Made
LatLngBounds
extend
method to accept other LatLngBounds
in addition to LatLng
(by @JasonSanford). #553
- Added
Bounds
intersects(otherBounds)
method. #461
- Added
L.Util.template
method for simple string template evaluation.
- Added
DomUtil.removeClass
method (by @anru).
- Improved browser-specific code to rely more on feature detection rather than user agent string.
- Improved superclass access mechanism to work with inheritance chains of 3 or more classes; now you should use
Klass.superclass
instead of this.superclass
(by @anru). #179
- Added
Map
boxzoomstart
and boxzoomend
events (by @zedd45). #554
- Added
Popup
contentupdate
event (by @mehmeta). #548
Breaking API changes
shiftDragZoom
map option/property renamed to boxZoom
.
- Removed
mouseEventToLatLng
method (bringed back in 0.4).
Development workflow improvements
- Build system completely overhauled to be based on Node.js, Jake, JSHint and UglifyJS.
- All code is now linted for errors and conformity with a strict code style (with JSHint), and wont build unless the check passes.
Bugfixes
General bugfixes
- Fixed a bug where
Circle
was rendered with incorrect radius (didn't take projection exagerration into account). #331
- Fixed a bug where
Map
getBounds
would work incorrectly on a date line cross. #295
- Fixed a bug where polygons and polylines sometimes rendered incorrectly on some zoom levels. #381
- Fixed a bug where fast mouse wheel zoom worked incorrectly when approaching min/max zoom values.
- Fixed a bug where
GeoJSON
pointToLayer
option wouldn't work in a GeometryCollection
. #391
- Fixed a bug with incorrect rendering of GeoJSON on a date line cross. #354
- Fixed a bug where map panning would stuck forever after releasing the mouse over an iframe or a flash object (thanks to @sten82). #297 #64
- Fixed a bug where mouse wheel zoom worked incorrectly if map is inside scrolled container (partially by @chrillo). #206
- Fixed a bug where it was possible to add the same listener twice. #281
- Fixed a bug where
Circle
was rendered with incorrect radius (didn't take projection exaggeration into account). #331
- Fixed a bug where
Marker
setIcon
was not working properly (by @marphi). #218 #311
- Fixed a bug where
Marker
setLatLng
was not working if it's set before adding the marker to a map. #222
- Fixed a bug where marker popup would not move on
Marker
setLatLng
(by @tjarratt). #272
- Fixed a bug where static properties of a child class would not override the parent ones.
- Fixed broken popup
closePopup
option (by @jgerigmeyer).
- Fixed a bug that caused en error when dragging marker with icon without shadow (by @anru). #178
- Fixed a typo in
Bounds
contains
method (by @anru). #180
- Fixed a bug where creating an empty
Polygon
with new L.Polygon()
would raise an error.
- Fixed a bug where drag event fired before the actual movement of layer (by @anru). #197
- Fixed a bug where map click caused an error if dragging is initially disabled. #196
- Fixed a bug where map
movestart
event would fire after zoom animation.
- Fixed a bug where attribution prefix would not update on
setPrefix
. #195
- Fixed a bug where
TileLayer
load
event wouldn't fire in some edge cases (by @dravnic).
- Fixed a bug related to clearing background tiles after zooming (by @neno-giscloud & @dravnic).
- Fixed a bug that sometimes caused map flickering after zoom animation.
- Fixed a bug related to cleaning up after removing tile layers (by @dravnic). #276
- Fixed a bug that made selecting text in the attribution control impossible. #279
- Fixed a bug when initializing a map in a non-empty div. #278
- Fixed a bug where
movestart
didn't fire on panning animation.
- Fixed a bug in Elliptical Mercator formula that affeted
EPSG:3395
CRS (by @Savvkin). #358
Browser bugfixes
- Fixed occasional crashes on Mac Safari (thanks to @lapinos03). #191
- Fixed a bug where resizing the map would sometimes make it blurry on WebKit (by @mortenbekditlevsen). #453
- Fixed a bug that raised error in IE6-8 when clicking on popup close button. #235
- Fixed a bug with Safari not redrawing UI immediately after closing a popup. #296
- Fixed a bug that caused performance drop and high CPU usage when calling
setView
or panTo
to the current center. #231
- Fixed a bug that caused map overlays to appear blurry in some cases under WebKit browsers.
- Fixed a bug that was causing errors in some Webkit/Linux builds (requestAnimationFrame-related), thanks to Chris Martens.
Mobile browser bugfixes
- Fixed a bug that caused an error when clicking vector layers under iOS. #204
- Fixed crash on Android 3+ when panning or zooming (by @florian). #137
- Fixed a bug on Android 2/3 that sometimes caused the map to disappear after zooming. #69
- Fixed a bug on Android 3 that caused tiles to shift position on a big map.
- Fixed a bug that caused the map to pan when touch-panning inside a popup. #452
- Fixed a bug that caused click delays on zoom control.
0.2.1 (2011-06-18)
- Fixed regression that caused error in
TileLayer.Canvas
.
0.2 (2011-06-17)
Major features
- Added WMS support (
TileLayer.WMS
layer).
- Added different projections support, having
EPSG:3857
, EPSG:4326
and EPSG:3395
out of the box (through crs
option in Map
). Thanks to @Miroff & @Komzpa for great advice and explanation regarding this.
- Added GeoJSON layer support.
Improvements
Usability improvements
- Improved panning performance in Chrome and FF considerably with the help of
requestAnimationFrame
. #130
- Improved click responsiveness in mobile WebKit (now it happens without delay). #26
- Added tap tolerance (so click happens even if you moved your finger slighly when tapping).
- Improved geolocation error handling: better error messages, explicit timeout, set world view on locateAndSetView failure. #61
API improvements
- Added MultiPolyline and MultiPolygon layers. #77
- Added LayerGroup and FeatureGroup layers for grouping other layers.
- Added TileLayer.Canvas for easy creation of canvas-based tile layers.
- Changed
Circle
to be zoom-dependent (with radius in meters); circle of a permanent size is now called CircleMarker
.
- Added
mouseover
and mouseout
events to map, markers and paths; added map mousemove
event.
- Added
setLatLngs
, spliceLatLngs
, addLatLng
, getLatLngs
methods to polylines and polygons.
- Added
setLatLng
and setRadius
methods to Circle
and CircleMarker
.
- Improved
LatLngBounds contains
method to accept LatLng
in addition to LatLngBounds
, the same for Bounds contains
and Point
- Improved
LatLngBounds
& Bounds
to allow their instantiation without arguments (by @snc).
- Added TMS tile numbering support through
TileLayer
scheme: 'tms'
option (by @tmcw).
- Added
TileLayer
noWrap
option to disable wrapping x
tile coordinate (by @jasondavies).
- Added
opacity
option and setOpacity
method to TileLayer
.
- Added
setLatLng
and setIcon
methods to Marker
.
- Added
title
option to Marker
.
- Added
maxZoom
argument to map.locateAndSetView
method.
- Added ability to pass Geolocation options to map
locate
and locateAndSetView
methods (by @JasonSanford).
- Improved
Popup
to accept HTML elements in addition to strings as its content.
Development workflow improvements
- Added
Makefile
for building leaflet.js
on non-Windows machines (by @tmcw).
- Improved
debug/leaflet-include.js
script to allow using it outside of debug
folder (by @antonj).
- Improved
L
definition to be compatible with CommonJS. #122
Bug fixes
General bugfixes
- Fixed a bug where zooming is broken if the map contains a polygon and you zoom to an area where it's not visible. #47
- Fixed a bug where closed polylines would not appear on the map.
- Fixed a bug where marker that was added, removed and then added again would not appear on the map. #66
- Fixed a bug where tile layer that was added, removed and then added again would not appear on the map.
- Fixed a bug where some tiles would not load when panning across the date line. #97
- Fixed a bug where map div with
position: absolute
is reset to relative
. #100
- Fixed a bug that caused an error when trying to add a marker without shadow in its icon.
- Fixed a bug where popup content would not update on
setContent
call. #94
- Fixed a bug where double click zoom wouldn't work if popup is opened on map click
- Fixed a bug with click propagation on popup close button. #99
- Fixed inability to remove ImageOverlay layer.
Browser bugfixes
- Fixed a bug where paths would not appear in IE8.
- Fixed a bug where there were occasional slowdowns before zoom animation in WebKit. #123
- Fixed incorrect zoom animation & popup styling in Opera 11.11.
- Fixed popup fade animation in Firefox and Opera.
- Fixed a bug where map isn't displayed in Firefox when there's an
img { max-width: 100% }
rule.
Mobile browsers bugfixes
- Fixed a bug that prevented panning on some Android 2.1 (and possibly older) devices. #84
- Disabled zoom animation on Android by default because it's buggy on some devices (will be enabled back when it's stable enough). #32
- Fixed a bug where map would occasionally break while multi-touch-zooming on iOS. #32
- Fixed a bug that prevented panning/clicking on Android 3 tablets. #121
- Fixed a bug that prevented panning/clicking on Opera Mobile. #138
- Fixed potentional memory leak on WebKit when removing tiles, thanks to @Scalar4eg. #107
0.1 (2011-05-13)
Initial Leaflet release.