(all changes without author notice are by @mourner)
An in-progress version being developed on the master branch.
- 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). - Renamed
marker-icon@2x.png
tomarker-icon-2x.png
to fix compatibility with Google AppEngine. #1552 #1553
- Improved zoom control design once more - cleaner, simpler, more accessible (mostly by @jacobtoye). #1313
- 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 - Significantly improved mass layer removal performance (by @jfgirard with fixes from @danzel). #1141 #1514
- 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 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 box zoom to be cancelable by pressing Escape (by @yohanboniface). #1438
- Improved paths with
clickable: false
to allow mouse events to pass through to objects underneath (by @snkashis). #1384 #1281
- Made Leaflet classes compatible with CoffeeScript class inheritance syntax (by @calvinmetcalf). #1345 #1314
- Added
cleanAllEventListeners
method (aliased tooff
without arguments) to all events-enabled objects (by @iirvine). #1599 - Added
addOneTimeEventListener
method (aliased toonce
) 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 aleaflet
AMD module). #1364 - Added
L.Util.trim
function (by @kristerkari). #1607
- Added
toGeoJSON
method to various layer types, allowing you to save your Leaflet layers as GeoJSON. (by @jfirebaugh). #1462 #712 - 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 layerid
(by @gumballhead). #1642 - Improved
Marker
andPath
bindPopup
method to also acceptPopup
objects (by @snkashis). #1385 #1208 #1402 - Added
Marker
setPopupContent
method (by @snkashis). #1373 - 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
L.Util.template
(and correspondingly url-relatedTileLayer
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
latlng
property toMarker
mouse event data. #1613 - Added
popupopen
andpopupclose
events to various layers (by @Koc). #738 - Added
GeoJSON
coordsToLatLng
option for dealing with GeoJSON that has non-WGS84 coords (thanks to @moonlite). #888 #886 - Added
Popup
keepInView
option (thanks to @lapo-luchini) that prevents the popup from going off-screen while it's opened. #1308 #1052
- 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 acceptpadding
(orpaddingTopLeft
andpaddingBottomRight
) options, allowing you to zoom to an area with a certain padding in pixels (usually left for controls). #859 - Added
Map
remove
method to properly destroy the map and clean up all events (by @jfirebaugh and @mourner). #1434 #1101 #1621 - Added
Map
zoomlevelschange
event that triggers when the current zoom range (min/max) changes (by @moonlite). #1376 - Added
Map
setZoomAround
method for zooming while keeping a certain point fixed (used by scroll and double-click zooming). #1157 - 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 - Improved
Map
closePopup
method to optionally accept a popup object to close. #1641 - Improved
Map
stopLocate
method to abort resetting map view if callinglocate
withsetView
option. #747 - Improved
Map
openPopup
method to also accept(content, latlng)
signature as a shortcut. - Added
Map
resize
event. #1564
- Added generic toolbar classes for reuse by plugin developers (used by zoom control).
- Added
Control.Layers
overlayadd
andoverlayremove
events (by @calvinmetcalf). #1286 - Added
Control
getContainer
method. #1409
- Switched from Jasmine to Mocha with Expect.js (matchers) and Sinon (spies) for tests (by @tmcw & @jfirebaugh). #1479
- Added Karma integration for running tests in a headless PhantomJS instance and code coverage reporting (by @edjafarov). #1326 #1340
- Added Travis CI integration for linting and running tests for each commit and pull request automatically (by @edjafarov). #1336
- Added compatibility with lazy evaluation scripts (by @kristerkari). #1288 #1607 #1288
- 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 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 where
TileLayer
opacity didn't work in IE 7-8 (by @javisantana & [@danzel](https://gi .com/danzel)). #1084 #1396 #1371 - Fixed a bug in Android WebView where click was triggered twice on one tap (by @jerel). #1227 #1263
- 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 tile layer z-index order sometimes broke after view reset. #1422
- Fixed Leaflet not working correctly in PhantomJS (by @rassie). #1501
- Fixed a bug that prevented the layers control from working correctly on WinPhone8/IE10 Touch (by @danzel). #1635 #1539
- 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
Map
fitBounds
wouldn't work correctly with large bounds (thanks to @MaZderMind). #1069 - 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
Map
hasLayer
wasn't handlingnull
objects (by @rvlasveld). #1282 #1302 - Fixed a bug where
TileLayer.WMS
param values weren't escaped in URLs (by @yohanboniface). #1317 - Fixed a bug where
Map
moveend
fired beforedragend
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
L.point
andL.latLng
factories weren't passingnull
andundefined
values through. - Fixed a bug where layers that belong to multiple feature groups didn't propagate events correctly (by @danzel). #1359
- Fixed a bug where
Control.Attribution
removeAttribution
of inexistant attribution corrupted the attribution text. #1410 - 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 compatibility with Browserify (by @jfirebaugh). #1572
- Fixed a bug where
Map
moveend
sometimes wasn't fired after drag (particularly often when dragging with a trackpad). - 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
DomEvent
removeListener
function chaining (by @pagameba). - Fixed polygons to normalize holes (remove last point if it's equal to the first one) (by @jfirebaugh). # #1459
- Fixed
DivIcon
html
option to accept0
as a value (by @stuporglue). #1633 - Fixed a bug where
removeEventListener
would throw an error if no events are registered on the object (by @tjoekbezoer). #1632 #1631 - 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
Point
equals
andcontains
methods didn't accept points in array form. - Fixed a bug that would cause an error when trying to get the state of the map in a
Map
load
event listener. #962 - Fixed a bug where
TileLayer
load
event wouldn't always fire correctly. #1565 - Added
Map
autopanstart
event back (it was removed occasionally in previous version). #1375
- Fixed a regression with
GeoJSON
not accepting arrays ofFeatureCollection
(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
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
to180, 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).
- 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.
- 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.
- Added retina support for markers (through
Icon
iconRetinaUrl
andshadowRetinaUrl
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.
- Replaced
L.Transition
with a much better and simplerL.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 toMap
zoomIn
andzoomOut
(1 by default). - Added
isValid
method toLatLngBounds
andBounds
(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
andclosePopup
methods. - Added
Path
add
andremove
event. - Added
Marker
riseOnHover
andriseOffset
options (for bringing markers to front on hover, disabled by default) (by jacobtoye). #914 #920 - Added
Marker
move
andremove
events. - Added
Marker
contextmenu
event. #223 - Added
Popup
zoomAnimation
option (useful to disable when displaying flash content inside popups #999). - Added
FeatureGroup
layeradd
andlayerremove
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), seedebug/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 correspondingL.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
andmouseout
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
- 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
- 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 (aftermoveend
, 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
onviewreset
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 takeradius
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 withGeometryCollection
didn't pass properties topointToLayer
function (by @calvinmetcalf). #1097 - Fixed
FeatureGroup
eachLayer
chaining. #1452
- 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
- Fixed a bug with wonky zoom animation in IE10 (by @danzel). #1007
- Fixed a bug with wonky zoom animation in Chrome 23+ (by @danzel). #1060 #1056
- 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 withGeoJSON
(containing the GeoJSON feature data). - Added
FeatureGroup
bringToFront
andbringToBack
methods (so that they would work for multipolys). - Added optional
animate
argument toMap
invalidateSize
(by @ajbeaven). #857
- 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
andbringToBack
didn't returnthis
. - Removed zoom out on Win/Meta key binding (since it interferes with global keyboard shortcuts). #869
- 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
- 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
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
andBounds
values in an array form (e.g.map.panTo([lat, lng])
will be the same asmap.panTo(new L.LatLng(lat, lng))
) - Added
addTo
method to all layer classes, e.g.marker.addTo(map)
is equivalent tomap.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 asnew L.Map('map')
- 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
- 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 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 providegeojson
in addition tolatlng
when creating point features for more flexibility.
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 toIcon(options)
. - Moved default marker icon options to
L.Icon.Default
class (which extends fromL.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 excepticonUrl
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.
- Added
setPosition
andgetPosition
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.)
- Improved
TileLayer
constructor to interpolate URL template values from options (removed thirdurlParams
argument). - Changed
TileLayer
scheme: 'tms'
option totms: true
. - Removed
Map
locateAndSetView
method (uselocate
withsetView: true
option) - Changed popup
minWidth
andmaxWidth
options to be applied to content element, not the whole popup. - Moved
prefix
argument tooptions
inControl.Attribution
constructor. - Renamed
L.VERSION
toL.version
.
- Improved
on
andoff
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
andbringToBack
methods toTileLayer
,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 toMouseEvent
(by @k4). #521 - Added
containerPoint
property toMouseEvent
. #413 - Added
contextmenu
event to vector layers (by @ErrorProne). #500 - Added
LayerGroup
eachLayer
method for iterating over its members. - Added
FeatureGroup
mousemove
andcontextmenu
events (by @jacobtoye). #816 - Added chaining to
DomEvent
methods. - Added
on
andoff
aliases forDomEvent
addListener
andremoveListener
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
andgetRadius
methods (by @Guiswa). #655 - Added
openPopup
method to all vector layers. #246 - Added public
redraw
method to vector layers (useful if you manipulate theirLatLng
points directly). - Added
Marker
opacity
option andsetOpacity
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 andsetOpacity
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 toMap
openPopup
). - Added
Map
getContainer
method (by @Guiswa). #654 - Added
Map
containerPointToLatLng
andlatLngToContainerPoint
methods. #474 - Added
Map
addHandler
method. - Added
Map
mouseup
andautopanstart
events. - Added
LatLngBounds
pad
method that returns bounds extended by a percentage (by @jacobtoye). #492 - Moved dragging cursor styles from JS code to CSS.
- 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
- 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 takeoffset
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 afterdragend
. #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
- 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
- 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
- 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.
- 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
- 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).
- 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
toMap
getBoundsZoom
method that allows you to get appropriate zoom for the view to fit inside the given bounds. - Added
hasLayer
method toMap
. - Added
Marker
zIndexOffset
option to be able to set certain markers below/above others. #65 - Added
urlParams
third optional argument toTileLayer
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 toMultiPolyline
andMultiPolygon
(by @anru). #194 - Added
getBounds
method toPolyline
andPolygon
(by @JasonSanford). #253 - Added
getBounds
method toFeatureGroup
(by @JasonSanford). #557 - Added
FeatureGroup
setStyle
method (also inherited byMultiPolyline
andMultiPolygon
). #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 toPopup
(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 otherLatLngBounds
in addition toLatLng
(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 ofthis.superclass
(by @anru). #179 - Added
Map
boxzoomstart
andboxzoomend
events (by @zedd45). #554 - Added
Popup
contentupdate
event (by @mehmeta). #548
shiftDragZoom
map option/property renamed toboxZoom
.- Removed
mouseEventToLatLng
method (bringed back in 0.4).
- 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.
- 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 aGeometryCollection
. #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
withnew 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
- 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
orpanTo
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.
- 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.
- Fixed regression that caused error in
TileLayer.Canvas
.
- Added WMS support (
TileLayer.WMS
layer). - Added different projections support, having
EPSG:3857
,EPSG:4326
andEPSG:3395
out of the box (throughcrs
option inMap
). Thanks to @Miroff & @Komzpa for great advice and explanation regarding this. - Added GeoJSON layer support.
- 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
- 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 calledCircleMarker
. - Added
mouseover
andmouseout
events to map, markers and paths; added mapmousemove
event. - Added
setLatLngs
,spliceLatLngs
,addLatLng
,getLatLngs
methods to polylines and polygons. - Added
setLatLng
andsetRadius
methods toCircle
andCircleMarker
. - Improved
LatLngBounds contains
method to acceptLatLng
in addition toLatLngBounds
, the same forBounds contains
andPoint
- 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 wrappingx
tile coordinate (by @jasondavies). - Added
opacity
option andsetOpacity
method toTileLayer
. - Added
setLatLng
andsetIcon
methods toMarker
. - Added
title
option toMarker
. - Added
maxZoom
argument tomap.locateAndSetView
method. - Added ability to pass Geolocation options to map
locate
andlocateAndSetView
methods (by @JasonSanford). - Improved
Popup
to accept HTML elements in addition to strings as its content.
- Added
Makefile
for buildingleaflet.js
on non-Windows machines (by @tmcw). - Improved
debug/leaflet-include.js
script to allow using it outside ofdebug
folder (by @antonj). - Improved
L
definition to be compatible with CommonJS. #122
- 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 torelative
. #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.
- 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.
- 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
Initial Leaflet release.