* Feat(Bounds): add getTopLeft & getBottomRight methods
as suggested in #5475, for consistency with `LatLngBounds` methods which already provide methods for the 4 possible corners.
Also include the docstrings.
* Docs(Bounds): add comments to identify corners
in BoundsSpec.
* Test(Bounds): add tests for existing corner methods
namely getBottomLeft and getTopRight.
Checked that expecting different values make the tests fail.
* Test(Bounds): add spec for 2 new corner methods
namely getTopLeft and getBottomRight.
Closes#5475 together with previous PR #5487.
* Refactor(Bounds): return this.min(max) instead of new Point
as TopLeft corner is tha same as this.min (BottomRight same as this.max).
* Docs(Bounds): add links to this.min(max)
to make it clearer that these methods are just shorthands to already available properties.
Furthermore, it implies that they output those properties directly, making a clue for the app developer that if he/she wants to modify them, they should be cloned before doing so in order to prevent unintentional behaviour.
as suggested in issue #5475.
The actual relative position of the given corners do not matter for the factory / constructor current functionality: it just determines the min/max coordinate values.
* Fix box zoom race condition
The deferred call to `_resetState` can interrupt the next box zoom if
the user initiates it before the timeout fires. This causes the mouse
move handler to create a second box zoom element, orphaning the first
one and leaving it in the DOM.
* Extract duplicate code into private method
* Canvas: call ctx.setLineDash in _fillStroke
This make dashArray working properly for cirles.
fix#5182
* Debug: add dashed circle example
* Debug: add simple example reproducing #5182
The codes first execute "element.tabIndex"(show that element is not
NULL), then execute "!element" in the condition of if stmt(check whether
the element is NULL or not). It is a contradiction.
I think since the element must not be NULL(otherwise the execution of
"element.tabIndex" would be wrong) when the while stmt finishes, the
next if stmt doesn't need to check the element like "!element" again.
Checking the element.style is already enough. So remove the "!element".
With the current `hasLayer` code, we can call this method by passing the `_leaflet_id` and get the same result as passing the corresponding layer object.
Added the alternative method call, as done for `removeLayer` method.
* Fix(#5328): Layers Control scrollable even if collapsed: false
the `expand()` method was called only when expanding the Layers Control through user action.
In the case of option `collapsed: false`, no event listener is attached (no user action expected to expand), therefore the control height is no longer adjusted compared to map container's height, whereas the only time it is done is at initialization, when the control is not yet inserted into the DOM, hence it does not have an actual height to check against.
Therefore added a hook on `addTo()` in order to run `expand()` AFTER the control has been insterted into the DOM.
The same issue happens when later adding more base layers / overlays to the Layers Control: it not collapsed, we should run again the height check (e.g. through the `expand()` method) to make sure we make it scrollable if necessary.
Therefore called `expand()` after each `_addLayer()`.
Actually checking first if the control is on map and if option `collapsed: false` in order to prevent calling `expand()` for nothing.
* Test(ControlLayers): 2 tests for collapsed: false being scrollable
(for issue #5328).
CAUTION: unlike most other tests, had to actually insert the map container into the DOM (i.e. `document.body`) for these tests to be useful, otherwise the height remains at 0.
This may lead to memory leak and tests hanging if done on too many tests (see Leaflet.markercluster tests issue, e.g. https://github.com/Leaflet/Leaflet.markercluster/pull/577)
* Add index.js files to subdirectories/namespace
This allows to streamline the import/export in the main file.
* Fix tests by switching to karma-rollup-plugin
* Add some tests for #5293
* Fix enabling marker dragging while markers aren't on the map by removing the dragging object when not on the map.
This is a change of behavior (.dragging is only defined when a marker is on the map).
* Docs for dragging change
* Create new bounds from projected coordinates rather than subtract in getBoundsZoom to avoid negative scale. Fixes#5195
* Fix unit test mocks
Apparently, mocking `project()` instead of `latLngToPoint()` magically works.
* Expected zoomlevel is 9, not 7
Following #5154, added mention about using `bounds` on Grid Layer when `noWrap` is used (i.e. set to `true`), in order to prevent requesting tiles outside the main world (CRS limits).
Looks like behaviour changed compared to Leaflet 0.7, where the CRS limits were still effective.
In order to restore that behaviour, application developer must now specify `bounds`.
Especially visible with CartoDB tiles which do serve tiles outside the main world.
* Vertical lines while moving over canvas elements
* Vertical lines while moving over canvas elements
* bounds.min._floor(); bounds.max._ceil(); instead
* Rounding bounds in _redraw function instead of _clear function
* Adds initial tests for L.Layer#popup
* Fixes Layer.isPopupOpen when no popup is bound
This fixes uncaught exception when checking whether a popup isOpen(),
when the layer has no popup bound to it.
* Update Projection.leafdoc
To me it appears that the property bounds expects 'Bounds' and not 'LatLngBounds'. All the included projections pass 'Bounds'. Giving the area where the projection is valid in latlng's did not work for me.
* Update Projection.leafdoc
* Use openstreetmap.org, not osm.org
osm.org is a convenience redirect for typing into your browser URL bar, and not an officially supported services endpoint (for example, it doesn't have the SSL certificates you might otherwise expect)
* Update reference-1.0.2.html
* Update TileLayer.js
* Finish drags when a L.Draggable is removed, fix#5063.
* Use L.Draggable._dragging to check if we should stop the drag
* Add Draggable.finishDrag to allow finishing drag programmaticaly
Out of any event.
* Ensure zoom is within span when adding a layer with min/maxzoom, fixes#4915.
* Add tests written by @theashyster
* Add tests to verify map's zoom is actually adjusted to layer's min/max
`addData`, `resetStyle` and `setStyle` methods of `L.GeoJSON` actually return `this` (the current GeoJSON Layer Group), not any Layer.
Can be especially confusing in the case of `resetStyle`, where we pass a layer as argument, and with `addData`, which can accept a single GeoJSON feature, hence we could (mistakenly) think that it returns the newly created layer.
detailed that modifying `L.Icon.Default.prototype.options` only customizes the icon, but it remains an image-based icon.
Added a paragraph about completely replacing the default icon, so that it can now be anything (including a divIcon).
as proposed in a recent issue.
This change should not affect the code, it is only for consistency with docstrings.
docstrings: replaced southWest and northEast argument names by corner1 and corner2, to try to prevent confusion that Leaflet will keep these corners at those places, whereas it actually "re-orders" them to keep lowest values West-most / South-most, as if they were just corners.
Also, fire mouseover for at most one layer for every mousemove,
preventing overlapping features from firing multiple
mouseover/mouseout (#4495).
Close#5028. Close#4495.
Bug when using map option `preferCanvas: true` (canvas renderer for paths) and removing then adding back a vector within the same animation frame (typically in the same sequence, as done by Leaflet.markercluster at `"zoomend"` event, to remove layers and clusters outside visible bounds).
This commit clears the `_removed` flag from paths when they are added to the canvas.
Also added corresponding test suites.
* Fix doc: add clarification for projection; closes#4817
Adds clarification in the documentation that specifies that the
`project` and `unproject` methods cannot take in arrays, but only
actual instances of `L.LatLng` and `L.Point`, respectively.
* Fix doc: add clarification for transform methods
Changes the word "real" for the word "actual" so that people don't
confuse actual instances of `L.Point` with coordinates using real
numbers.
Corrected docstrings of L.GeoJSON for methods (addData, resetStyle, setStyle) to be really counted as "methods" instead of static "functions" (geometryToLayer, coordsToLatLng, coordsToLatLngs, latLngToCoords, latLngsToCoords, asFeature)
Following https://stackoverflow.com/questions/39776919/how-to-reference-the-data-of-an-existing-geojson-leaflet-object/39787583#39787583, sounds like the current definition "decide whether to show a feature or not" implies that the data is retained in memory, but just not shown.
Replaced "show" by "include" to try to make it clearer that the filtered out data is _lost_ (not retained at all within the group).
Also took the opportunity to add a note about changing the `filter` option dynamically (no re-evaluation of child layers, whether they meet the new filter conditions or not).
Replaced factory example `L.geoJson` (from Leaflet 0.7) by `L.geoJSON` for consistency with the new factory signature rendered just below in the generated docs.