leaflet-rails 1.9.2 → 1.9.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5867f577c8fd013854bb4aa8c2f4a304edd494d9a4406f7932947f9068fa2e67
|
4
|
+
data.tar.gz: '0078d4469dd93ff397d70cdda32a29f7f52e16f5f2214ba78607f6b1ce8ac3b3'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5a3c53b49914fdc57fef1f1de030e7441669e72cc155523bc9b7d137984bfbb4634ba81064f33292f2a8973cc4c26a28aec5b768754df6789aa94c320be8d3a9
|
7
|
+
data.tar.gz: ca44b6f4224e8dfc2fc5e5cbc0a7adb8691bd53424b5af1d34802151453ac70ed4da4bad530ba1789d21539ae83240babca01c8935107eb79f839b0ec261da8e
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/* @preserve
|
2
|
-
* Leaflet 1.9.
|
3
|
-
* (c) 2010-
|
2
|
+
* Leaflet 1.9.4+v1.d15112c, a JS library for interactive maps. https://leafletjs.com
|
3
|
+
* (c) 2010-2023 Vladimir Agafonkin, (c) 2010-2011 CloudMade
|
4
4
|
*/
|
5
5
|
|
6
6
|
(function (global, factory) {
|
@@ -9,7 +9,7 @@
|
|
9
9
|
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.leaflet = {}));
|
10
10
|
})(this, (function (exports) { 'use strict';
|
11
11
|
|
12
|
-
var version = "1.9.
|
12
|
+
var version = "1.9.4";
|
13
13
|
|
14
14
|
/*
|
15
15
|
* @namespace Util
|
@@ -398,6 +398,7 @@
|
|
398
398
|
};
|
399
399
|
|
400
400
|
function checkDeprecatedMixinEvents(includes) {
|
401
|
+
/* global L: true */
|
401
402
|
if (typeof L === 'undefined' || !L || !L.Mixin) { return; }
|
402
403
|
|
403
404
|
includes = isArray(includes) ? includes : [includes];
|
@@ -2166,7 +2167,7 @@
|
|
2166
2167
|
}
|
2167
2168
|
if (!handle[type]) {
|
2168
2169
|
console.warn('wrong event specified:', type);
|
2169
|
-
return
|
2170
|
+
return falseFn;
|
2170
2171
|
}
|
2171
2172
|
handler = handle[type].bind(this, handler);
|
2172
2173
|
obj.addEventListener(pEvent[type], handler, false);
|
@@ -2625,8 +2626,8 @@
|
|
2625
2626
|
if (!element.style) { return; }
|
2626
2627
|
restoreOutline();
|
2627
2628
|
_outlineElement = element;
|
2628
|
-
_outlineStyle = element.style.
|
2629
|
-
element.style.
|
2629
|
+
_outlineStyle = element.style.outlineStyle;
|
2630
|
+
element.style.outlineStyle = 'none';
|
2630
2631
|
on(window, 'keydown', restoreOutline);
|
2631
2632
|
}
|
2632
2633
|
|
@@ -2634,7 +2635,7 @@
|
|
2634
2635
|
// Cancels the effects of a previous [`L.DomUtil.preventOutline`]().
|
2635
2636
|
function restoreOutline() {
|
2636
2637
|
if (!_outlineElement) { return; }
|
2637
|
-
_outlineElement.style.
|
2638
|
+
_outlineElement.style.outlineStyle = _outlineStyle;
|
2638
2639
|
_outlineElement = undefined;
|
2639
2640
|
_outlineStyle = undefined;
|
2640
2641
|
off(window, 'keydown', restoreOutline);
|
@@ -4224,7 +4225,7 @@
|
|
4224
4225
|
|
4225
4226
|
var position = getStyle(container, 'position');
|
4226
4227
|
|
4227
|
-
if (position !== 'absolute' && position !== 'relative' && position !== 'fixed') {
|
4228
|
+
if (position !== 'absolute' && position !== 'relative' && position !== 'fixed' && position !== 'sticky') {
|
4228
4229
|
container.style.position = 'relative';
|
4229
4230
|
}
|
4230
4231
|
|
@@ -4655,7 +4656,7 @@
|
|
4655
4656
|
// If offset is less than a pixel, ignore.
|
4656
4657
|
// This prevents unstable projections from getting into
|
4657
4658
|
// an infinite loop of tiny offsets.
|
4658
|
-
if (offset.
|
4659
|
+
if (Math.abs(offset.x) <= 1 && Math.abs(offset.y) <= 1) {
|
4659
4660
|
return center;
|
4660
4661
|
}
|
4661
4662
|
|
@@ -4787,7 +4788,7 @@
|
|
4787
4788
|
|
4788
4789
|
requestAnimFrame(function () {
|
4789
4790
|
this
|
4790
|
-
._moveStart(true, false)
|
4791
|
+
._moveStart(true, options.noMoveStart || false)
|
4791
4792
|
._animateZoom(center, zoom, true);
|
4792
4793
|
}, this);
|
4793
4794
|
|
@@ -5110,6 +5111,7 @@
|
|
5110
5111
|
this._layers = [];
|
5111
5112
|
this._lastZIndex = 0;
|
5112
5113
|
this._handlingClick = false;
|
5114
|
+
this._preventClick = false;
|
5113
5115
|
|
5114
5116
|
for (var i in baseLayers) {
|
5115
5117
|
this._addLayer(baseLayers[i], i);
|
@@ -5214,13 +5216,7 @@
|
|
5214
5216
|
this._map.on('click', this.collapse, this);
|
5215
5217
|
|
5216
5218
|
on(container, {
|
5217
|
-
mouseenter:
|
5218
|
-
on(section, 'click', preventDefault);
|
5219
|
-
this.expand();
|
5220
|
-
setTimeout(function () {
|
5221
|
-
off(section, 'click', preventDefault);
|
5222
|
-
});
|
5223
|
-
},
|
5219
|
+
mouseenter: this._expandSafely,
|
5224
5220
|
mouseleave: this.collapse
|
5225
5221
|
}, this);
|
5226
5222
|
}
|
@@ -5230,8 +5226,18 @@
|
|
5230
5226
|
link.title = 'Layers';
|
5231
5227
|
link.setAttribute('role', 'button');
|
5232
5228
|
|
5233
|
-
on(link,
|
5234
|
-
|
5229
|
+
on(link, {
|
5230
|
+
keydown: function (e) {
|
5231
|
+
if (e.keyCode === 13) {
|
5232
|
+
this._expandSafely();
|
5233
|
+
}
|
5234
|
+
},
|
5235
|
+
// Certain screen readers intercept the key event and instead send a click event
|
5236
|
+
click: function (e) {
|
5237
|
+
preventDefault(e);
|
5238
|
+
this._expandSafely();
|
5239
|
+
}
|
5240
|
+
}, this);
|
5235
5241
|
|
5236
5242
|
if (!collapsed) {
|
5237
5243
|
this.expand();
|
@@ -5381,6 +5387,11 @@
|
|
5381
5387
|
},
|
5382
5388
|
|
5383
5389
|
_onInputClick: function () {
|
5390
|
+
// expanding the control on mobile with a click can cause adding a layer - we don't want this
|
5391
|
+
if (this._preventClick) {
|
5392
|
+
return;
|
5393
|
+
}
|
5394
|
+
|
5384
5395
|
var inputs = this._layerControlInputs,
|
5385
5396
|
input, layer;
|
5386
5397
|
var addedLayers = [],
|
@@ -5436,6 +5447,18 @@
|
|
5436
5447
|
this.expand();
|
5437
5448
|
}
|
5438
5449
|
return this;
|
5450
|
+
},
|
5451
|
+
|
5452
|
+
_expandSafely: function () {
|
5453
|
+
var section = this._section;
|
5454
|
+
this._preventClick = true;
|
5455
|
+
on(section, 'click', preventDefault);
|
5456
|
+
this.expand();
|
5457
|
+
var that = this;
|
5458
|
+
setTimeout(function () {
|
5459
|
+
off(section, 'click', preventDefault);
|
5460
|
+
that._preventClick = false;
|
5461
|
+
});
|
5439
5462
|
}
|
5440
5463
|
|
5441
5464
|
});
|
@@ -6123,8 +6146,12 @@
|
|
6123
6146
|
enableImageDrag();
|
6124
6147
|
enableTextSelection();
|
6125
6148
|
|
6126
|
-
|
6149
|
+
var fireDragend = this._moved && this._moving;
|
6150
|
+
|
6151
|
+
this._moving = false;
|
6152
|
+
Draggable._dragging = false;
|
6127
6153
|
|
6154
|
+
if (fireDragend) {
|
6128
6155
|
// @event dragend: DragEndEvent
|
6129
6156
|
// Fired when the drag ends.
|
6130
6157
|
this.fire('dragend', {
|
@@ -6132,13 +6159,143 @@
|
|
6132
6159
|
distance: this._newPos.distanceTo(this._startPos)
|
6133
6160
|
});
|
6134
6161
|
}
|
6135
|
-
|
6136
|
-
this._moving = false;
|
6137
|
-
Draggable._dragging = false;
|
6138
6162
|
}
|
6139
6163
|
|
6140
6164
|
});
|
6141
6165
|
|
6166
|
+
/*
|
6167
|
+
* @namespace PolyUtil
|
6168
|
+
* Various utility functions for polygon geometries.
|
6169
|
+
*/
|
6170
|
+
|
6171
|
+
/* @function clipPolygon(points: Point[], bounds: Bounds, round?: Boolean): Point[]
|
6172
|
+
* Clips the polygon geometry defined by the given `points` by the given bounds (using the [Sutherland-Hodgman algorithm](https://en.wikipedia.org/wiki/Sutherland%E2%80%93Hodgman_algorithm)).
|
6173
|
+
* Used by Leaflet to only show polygon points that are on the screen or near, increasing
|
6174
|
+
* performance. Note that polygon points needs different algorithm for clipping
|
6175
|
+
* than polyline, so there's a separate method for it.
|
6176
|
+
*/
|
6177
|
+
function clipPolygon(points, bounds, round) {
|
6178
|
+
var clippedPoints,
|
6179
|
+
edges = [1, 4, 2, 8],
|
6180
|
+
i, j, k,
|
6181
|
+
a, b,
|
6182
|
+
len, edge, p;
|
6183
|
+
|
6184
|
+
for (i = 0, len = points.length; i < len; i++) {
|
6185
|
+
points[i]._code = _getBitCode(points[i], bounds);
|
6186
|
+
}
|
6187
|
+
|
6188
|
+
// for each edge (left, bottom, right, top)
|
6189
|
+
for (k = 0; k < 4; k++) {
|
6190
|
+
edge = edges[k];
|
6191
|
+
clippedPoints = [];
|
6192
|
+
|
6193
|
+
for (i = 0, len = points.length, j = len - 1; i < len; j = i++) {
|
6194
|
+
a = points[i];
|
6195
|
+
b = points[j];
|
6196
|
+
|
6197
|
+
// if a is inside the clip window
|
6198
|
+
if (!(a._code & edge)) {
|
6199
|
+
// if b is outside the clip window (a->b goes out of screen)
|
6200
|
+
if (b._code & edge) {
|
6201
|
+
p = _getEdgeIntersection(b, a, edge, bounds, round);
|
6202
|
+
p._code = _getBitCode(p, bounds);
|
6203
|
+
clippedPoints.push(p);
|
6204
|
+
}
|
6205
|
+
clippedPoints.push(a);
|
6206
|
+
|
6207
|
+
// else if b is inside the clip window (a->b enters the screen)
|
6208
|
+
} else if (!(b._code & edge)) {
|
6209
|
+
p = _getEdgeIntersection(b, a, edge, bounds, round);
|
6210
|
+
p._code = _getBitCode(p, bounds);
|
6211
|
+
clippedPoints.push(p);
|
6212
|
+
}
|
6213
|
+
}
|
6214
|
+
points = clippedPoints;
|
6215
|
+
}
|
6216
|
+
|
6217
|
+
return points;
|
6218
|
+
}
|
6219
|
+
|
6220
|
+
/* @function polygonCenter(latlngs: LatLng[], crs: CRS): LatLng
|
6221
|
+
* Returns the center ([centroid](http://en.wikipedia.org/wiki/Centroid)) of the passed LatLngs (first ring) from a polygon.
|
6222
|
+
*/
|
6223
|
+
function polygonCenter(latlngs, crs) {
|
6224
|
+
var i, j, p1, p2, f, area, x, y, center;
|
6225
|
+
|
6226
|
+
if (!latlngs || latlngs.length === 0) {
|
6227
|
+
throw new Error('latlngs not passed');
|
6228
|
+
}
|
6229
|
+
|
6230
|
+
if (!isFlat(latlngs)) {
|
6231
|
+
console.warn('latlngs are not flat! Only the first ring will be used');
|
6232
|
+
latlngs = latlngs[0];
|
6233
|
+
}
|
6234
|
+
|
6235
|
+
var centroidLatLng = toLatLng([0, 0]);
|
6236
|
+
|
6237
|
+
var bounds = toLatLngBounds(latlngs);
|
6238
|
+
var areaBounds = bounds.getNorthWest().distanceTo(bounds.getSouthWest()) * bounds.getNorthEast().distanceTo(bounds.getNorthWest());
|
6239
|
+
// tests showed that below 1700 rounding errors are happening
|
6240
|
+
if (areaBounds < 1700) {
|
6241
|
+
// getting a inexact center, to move the latlngs near to [0, 0] to prevent rounding errors
|
6242
|
+
centroidLatLng = centroid(latlngs);
|
6243
|
+
}
|
6244
|
+
|
6245
|
+
var len = latlngs.length;
|
6246
|
+
var points = [];
|
6247
|
+
for (i = 0; i < len; i++) {
|
6248
|
+
var latlng = toLatLng(latlngs[i]);
|
6249
|
+
points.push(crs.project(toLatLng([latlng.lat - centroidLatLng.lat, latlng.lng - centroidLatLng.lng])));
|
6250
|
+
}
|
6251
|
+
|
6252
|
+
area = x = y = 0;
|
6253
|
+
|
6254
|
+
// polygon centroid algorithm;
|
6255
|
+
for (i = 0, j = len - 1; i < len; j = i++) {
|
6256
|
+
p1 = points[i];
|
6257
|
+
p2 = points[j];
|
6258
|
+
|
6259
|
+
f = p1.y * p2.x - p2.y * p1.x;
|
6260
|
+
x += (p1.x + p2.x) * f;
|
6261
|
+
y += (p1.y + p2.y) * f;
|
6262
|
+
area += f * 3;
|
6263
|
+
}
|
6264
|
+
|
6265
|
+
if (area === 0) {
|
6266
|
+
// Polygon is so small that all points are on same pixel.
|
6267
|
+
center = points[0];
|
6268
|
+
} else {
|
6269
|
+
center = [x / area, y / area];
|
6270
|
+
}
|
6271
|
+
|
6272
|
+
var latlngCenter = crs.unproject(toPoint(center));
|
6273
|
+
return toLatLng([latlngCenter.lat + centroidLatLng.lat, latlngCenter.lng + centroidLatLng.lng]);
|
6274
|
+
}
|
6275
|
+
|
6276
|
+
/* @function centroid(latlngs: LatLng[]): LatLng
|
6277
|
+
* Returns the 'center of mass' of the passed LatLngs.
|
6278
|
+
*/
|
6279
|
+
function centroid(coords) {
|
6280
|
+
var latSum = 0;
|
6281
|
+
var lngSum = 0;
|
6282
|
+
var len = 0;
|
6283
|
+
for (var i = 0; i < coords.length; i++) {
|
6284
|
+
var latlng = toLatLng(coords[i]);
|
6285
|
+
latSum += latlng.lat;
|
6286
|
+
lngSum += latlng.lng;
|
6287
|
+
len++;
|
6288
|
+
}
|
6289
|
+
return toLatLng([latSum / len, lngSum / len]);
|
6290
|
+
}
|
6291
|
+
|
6292
|
+
var PolyUtil = {
|
6293
|
+
__proto__: null,
|
6294
|
+
clipPolygon: clipPolygon,
|
6295
|
+
polygonCenter: polygonCenter,
|
6296
|
+
centroid: centroid
|
6297
|
+
};
|
6298
|
+
|
6142
6299
|
/*
|
6143
6300
|
* @namespace LineUtil
|
6144
6301
|
*
|
@@ -6393,12 +6550,22 @@
|
|
6393
6550
|
latlngs = latlngs[0];
|
6394
6551
|
}
|
6395
6552
|
|
6396
|
-
var
|
6397
|
-
|
6398
|
-
|
6553
|
+
var centroidLatLng = toLatLng([0, 0]);
|
6554
|
+
|
6555
|
+
var bounds = toLatLngBounds(latlngs);
|
6556
|
+
var areaBounds = bounds.getNorthWest().distanceTo(bounds.getSouthWest()) * bounds.getNorthEast().distanceTo(bounds.getNorthWest());
|
6557
|
+
// tests showed that below 1700 rounding errors are happening
|
6558
|
+
if (areaBounds < 1700) {
|
6559
|
+
// getting a inexact center, to move the latlngs near to [0, 0] to prevent rounding errors
|
6560
|
+
centroidLatLng = centroid(latlngs);
|
6399
6561
|
}
|
6400
6562
|
|
6401
|
-
var len =
|
6563
|
+
var len = latlngs.length;
|
6564
|
+
var points = [];
|
6565
|
+
for (i = 0; i < len; i++) {
|
6566
|
+
var latlng = toLatLng(latlngs[i]);
|
6567
|
+
points.push(crs.project(toLatLng([latlng.lat - centroidLatLng.lat, latlng.lng - centroidLatLng.lng])));
|
6568
|
+
}
|
6402
6569
|
|
6403
6570
|
for (i = 0, halfDist = 0; i < len - 1; i++) {
|
6404
6571
|
halfDist += points[i].distanceTo(points[i + 1]) / 2;
|
@@ -6424,7 +6591,9 @@
|
|
6424
6591
|
}
|
6425
6592
|
}
|
6426
6593
|
}
|
6427
|
-
|
6594
|
+
|
6595
|
+
var latlngCenter = crs.unproject(toPoint(center));
|
6596
|
+
return toLatLng([latlngCenter.lat + centroidLatLng.lat, latlngCenter.lng + centroidLatLng.lng]);
|
6428
6597
|
}
|
6429
6598
|
|
6430
6599
|
var LineUtil = {
|
@@ -6441,109 +6610,6 @@
|
|
6441
6610
|
polylineCenter: polylineCenter
|
6442
6611
|
};
|
6443
6612
|
|
6444
|
-
/*
|
6445
|
-
* @namespace PolyUtil
|
6446
|
-
* Various utility functions for polygon geometries.
|
6447
|
-
*/
|
6448
|
-
|
6449
|
-
/* @function clipPolygon(points: Point[], bounds: Bounds, round?: Boolean): Point[]
|
6450
|
-
* Clips the polygon geometry defined by the given `points` by the given bounds (using the [Sutherland-Hodgman algorithm](https://en.wikipedia.org/wiki/Sutherland%E2%80%93Hodgman_algorithm)).
|
6451
|
-
* Used by Leaflet to only show polygon points that are on the screen or near, increasing
|
6452
|
-
* performance. Note that polygon points needs different algorithm for clipping
|
6453
|
-
* than polyline, so there's a separate method for it.
|
6454
|
-
*/
|
6455
|
-
function clipPolygon(points, bounds, round) {
|
6456
|
-
var clippedPoints,
|
6457
|
-
edges = [1, 4, 2, 8],
|
6458
|
-
i, j, k,
|
6459
|
-
a, b,
|
6460
|
-
len, edge, p;
|
6461
|
-
|
6462
|
-
for (i = 0, len = points.length; i < len; i++) {
|
6463
|
-
points[i]._code = _getBitCode(points[i], bounds);
|
6464
|
-
}
|
6465
|
-
|
6466
|
-
// for each edge (left, bottom, right, top)
|
6467
|
-
for (k = 0; k < 4; k++) {
|
6468
|
-
edge = edges[k];
|
6469
|
-
clippedPoints = [];
|
6470
|
-
|
6471
|
-
for (i = 0, len = points.length, j = len - 1; i < len; j = i++) {
|
6472
|
-
a = points[i];
|
6473
|
-
b = points[j];
|
6474
|
-
|
6475
|
-
// if a is inside the clip window
|
6476
|
-
if (!(a._code & edge)) {
|
6477
|
-
// if b is outside the clip window (a->b goes out of screen)
|
6478
|
-
if (b._code & edge) {
|
6479
|
-
p = _getEdgeIntersection(b, a, edge, bounds, round);
|
6480
|
-
p._code = _getBitCode(p, bounds);
|
6481
|
-
clippedPoints.push(p);
|
6482
|
-
}
|
6483
|
-
clippedPoints.push(a);
|
6484
|
-
|
6485
|
-
// else if b is inside the clip window (a->b enters the screen)
|
6486
|
-
} else if (!(b._code & edge)) {
|
6487
|
-
p = _getEdgeIntersection(b, a, edge, bounds, round);
|
6488
|
-
p._code = _getBitCode(p, bounds);
|
6489
|
-
clippedPoints.push(p);
|
6490
|
-
}
|
6491
|
-
}
|
6492
|
-
points = clippedPoints;
|
6493
|
-
}
|
6494
|
-
|
6495
|
-
return points;
|
6496
|
-
}
|
6497
|
-
|
6498
|
-
/* @function polygonCenter(latlngs: LatLng[] crs: CRS): LatLng
|
6499
|
-
* Returns the center ([centroid](http://en.wikipedia.org/wiki/Centroid)) of the passed LatLngs (first ring) from a polygon.
|
6500
|
-
*/
|
6501
|
-
function polygonCenter(latlngs, crs) {
|
6502
|
-
var i, j, p1, p2, f, area, x, y, center;
|
6503
|
-
|
6504
|
-
if (!latlngs || latlngs.length === 0) {
|
6505
|
-
throw new Error('latlngs not passed');
|
6506
|
-
}
|
6507
|
-
|
6508
|
-
if (!isFlat(latlngs)) {
|
6509
|
-
console.warn('latlngs are not flat! Only the first ring will be used');
|
6510
|
-
latlngs = latlngs[0];
|
6511
|
-
}
|
6512
|
-
|
6513
|
-
var points = [];
|
6514
|
-
for (var k in latlngs) {
|
6515
|
-
points.push(crs.project(toLatLng(latlngs[k])));
|
6516
|
-
}
|
6517
|
-
|
6518
|
-
var len = points.length;
|
6519
|
-
area = x = y = 0;
|
6520
|
-
|
6521
|
-
// polygon centroid algorithm;
|
6522
|
-
for (i = 0, j = len - 1; i < len; j = i++) {
|
6523
|
-
p1 = points[i];
|
6524
|
-
p2 = points[j];
|
6525
|
-
|
6526
|
-
f = p1.y * p2.x - p2.y * p1.x;
|
6527
|
-
x += (p1.x + p2.x) * f;
|
6528
|
-
y += (p1.y + p2.y) * f;
|
6529
|
-
area += f * 3;
|
6530
|
-
}
|
6531
|
-
|
6532
|
-
if (area === 0) {
|
6533
|
-
// Polygon is so small that all points are on same pixel.
|
6534
|
-
center = points[0];
|
6535
|
-
} else {
|
6536
|
-
center = [x / area, y / area];
|
6537
|
-
}
|
6538
|
-
return crs.unproject(toPoint(center));
|
6539
|
-
}
|
6540
|
-
|
6541
|
-
var PolyUtil = {
|
6542
|
-
__proto__: null,
|
6543
|
-
clipPolygon: clipPolygon,
|
6544
|
-
polygonCenter: polygonCenter
|
6545
|
-
};
|
6546
|
-
|
6547
6613
|
/*
|
6548
6614
|
* @namespace Projection
|
6549
6615
|
* @section
|
@@ -9116,8 +9182,8 @@
|
|
9116
9182
|
latLngToCoords(latlngs[i], precision));
|
9117
9183
|
}
|
9118
9184
|
|
9119
|
-
if (!levelsDeep && closed) {
|
9120
|
-
coords.push(coords[0]);
|
9185
|
+
if (!levelsDeep && closed && coords.length > 0) {
|
9186
|
+
coords.push(coords[0].slice());
|
9121
9187
|
}
|
9122
9188
|
|
9123
9189
|
return coords;
|
@@ -9730,7 +9796,7 @@
|
|
9730
9796
|
},
|
9731
9797
|
|
9732
9798
|
initialize: function (options, source) {
|
9733
|
-
if (options && (options instanceof
|
9799
|
+
if (options && (options instanceof LatLng || isArray(options))) {
|
9734
9800
|
this._latlng = toLatLng(options);
|
9735
9801
|
setOptions(this, source);
|
9736
9802
|
} else {
|
@@ -10283,10 +10349,17 @@
|
|
10283
10349
|
setPosition(this._container, pos.add(anchor));
|
10284
10350
|
},
|
10285
10351
|
|
10286
|
-
_adjustPan: function (
|
10352
|
+
_adjustPan: function () {
|
10287
10353
|
if (!this.options.autoPan) { return; }
|
10288
10354
|
if (this._map._panAnim) { this._map._panAnim.stop(); }
|
10289
10355
|
|
10356
|
+
// We can endlessly recurse if keepInView is set and the view resets.
|
10357
|
+
// Let's guard against that by exiting early if we're responding to our own autopan.
|
10358
|
+
if (this._autopanning) {
|
10359
|
+
this._autopanning = false;
|
10360
|
+
return;
|
10361
|
+
}
|
10362
|
+
|
10290
10363
|
var map = this._map,
|
10291
10364
|
marginBottom = parseInt(getStyle(this._container, 'marginBottom'), 10) || 0,
|
10292
10365
|
containerHeight = this._container.offsetHeight + marginBottom,
|
@@ -10321,9 +10394,14 @@
|
|
10321
10394
|
// @event autopanstart: Event
|
10322
10395
|
// Fired when the map starts autopanning when opening a popup.
|
10323
10396
|
if (dx || dy) {
|
10397
|
+
// Track that we're autopanning, as this function will be re-ran on moveend
|
10398
|
+
if (this.options.keepInView) {
|
10399
|
+
this._autopanning = true;
|
10400
|
+
}
|
10401
|
+
|
10324
10402
|
map
|
10325
10403
|
.fire('autopanstart')
|
10326
|
-
.panBy([dx, dy]
|
10404
|
+
.panBy([dx, dy]);
|
10327
10405
|
}
|
10328
10406
|
},
|
10329
10407
|
|
@@ -10437,10 +10515,14 @@
|
|
10437
10515
|
// @method openPopup(latlng?: LatLng): this
|
10438
10516
|
// Opens the bound popup at the specified `latlng` or at the default popup anchor if no `latlng` is passed.
|
10439
10517
|
openPopup: function (latlng) {
|
10440
|
-
if (this._popup
|
10441
|
-
|
10442
|
-
|
10443
|
-
|
10518
|
+
if (this._popup) {
|
10519
|
+
if (!(this instanceof FeatureGroup)) {
|
10520
|
+
this._popup._source = this;
|
10521
|
+
}
|
10522
|
+
if (this._popup._prepareOpen(latlng || this._latlng)) {
|
10523
|
+
// open the popup on the map
|
10524
|
+
this._popup.openOn(this._map);
|
10525
|
+
}
|
10444
10526
|
}
|
10445
10527
|
return this;
|
10446
10528
|
},
|
@@ -10838,14 +10920,19 @@
|
|
10838
10920
|
// @method openTooltip(latlng?: LatLng): this
|
10839
10921
|
// Opens the bound tooltip at the specified `latlng` or at the default tooltip anchor if no `latlng` is passed.
|
10840
10922
|
openTooltip: function (latlng) {
|
10841
|
-
if (this._tooltip
|
10842
|
-
|
10843
|
-
|
10844
|
-
|
10845
|
-
if (this.
|
10846
|
-
|
10847
|
-
|
10848
|
-
|
10923
|
+
if (this._tooltip) {
|
10924
|
+
if (!(this instanceof FeatureGroup)) {
|
10925
|
+
this._tooltip._source = this;
|
10926
|
+
}
|
10927
|
+
if (this._tooltip._prepareOpen(latlng)) {
|
10928
|
+
// open the tooltip on the map
|
10929
|
+
this._tooltip.openOn(this._map);
|
10930
|
+
|
10931
|
+
if (this.getElement) {
|
10932
|
+
this._setAriaDescribedByOnLayer(this);
|
10933
|
+
} else if (this.eachLayer) {
|
10934
|
+
this.eachLayer(this._setAriaDescribedByOnLayer, this);
|
10935
|
+
}
|
10849
10936
|
}
|
10850
10937
|
}
|
10851
10938
|
return this;
|
@@ -10898,7 +10985,7 @@
|
|
10898
10985
|
},
|
10899
10986
|
|
10900
10987
|
_addFocusListenersOnLayer: function (layer) {
|
10901
|
-
var el = layer.getElement();
|
10988
|
+
var el = typeof layer.getElement === 'function' && layer.getElement();
|
10902
10989
|
if (el) {
|
10903
10990
|
on(el, 'focus', function () {
|
10904
10991
|
this._tooltip._source = layer;
|
@@ -10909,7 +10996,7 @@
|
|
10909
10996
|
},
|
10910
10997
|
|
10911
10998
|
_setAriaDescribedByOnLayer: function (layer) {
|
10912
|
-
var el = layer.getElement();
|
10999
|
+
var el = typeof layer.getElement === 'function' && layer.getElement();
|
10913
11000
|
if (el) {
|
10914
11001
|
el.setAttribute('aria-describedby', this._tooltip._container.id);
|
10915
11002
|
}
|
@@ -10917,9 +11004,21 @@
|
|
10917
11004
|
|
10918
11005
|
|
10919
11006
|
_openTooltip: function (e) {
|
10920
|
-
if (!this._tooltip || !this._map
|
11007
|
+
if (!this._tooltip || !this._map) {
|
10921
11008
|
return;
|
10922
11009
|
}
|
11010
|
+
|
11011
|
+
// If the map is moving, we will show the tooltip after it's done.
|
11012
|
+
if (this._map.dragging && this._map.dragging.moving() && !this._openOnceFlag) {
|
11013
|
+
this._openOnceFlag = true;
|
11014
|
+
var that = this;
|
11015
|
+
this._map.once('moveend', function () {
|
11016
|
+
that._openOnceFlag = false;
|
11017
|
+
that._openTooltip(e);
|
11018
|
+
});
|
11019
|
+
return;
|
11020
|
+
}
|
11021
|
+
|
10923
11022
|
this._tooltip._source = e.layer || e.target;
|
10924
11023
|
|
10925
11024
|
this.openTooltip(this._tooltip.options.sticky ? e.latlng : undefined);
|
@@ -12384,9 +12483,8 @@
|
|
12384
12483
|
if (!this._container) {
|
12385
12484
|
this._initContainer(); // defined by renderer implementations
|
12386
12485
|
|
12387
|
-
|
12388
|
-
|
12389
|
-
}
|
12486
|
+
// always keep transform-origin as 0 0
|
12487
|
+
addClass(this._container, 'leaflet-zoom-animated');
|
12390
12488
|
}
|
12391
12489
|
|
12392
12490
|
this.getPane().appendChild(this._container);
|
@@ -13977,10 +14075,15 @@
|
|
13977
14075
|
offset = toPoint(offset).multiplyBy(3);
|
13978
14076
|
}
|
13979
14077
|
|
13980
|
-
map.panBy(offset);
|
13981
|
-
|
13982
14078
|
if (map.options.maxBounds) {
|
13983
|
-
map.
|
14079
|
+
offset = map._limitOffset(toPoint(offset), map.options.maxBounds);
|
14080
|
+
}
|
14081
|
+
|
14082
|
+
if (map.options.worldCopyJump) {
|
14083
|
+
var newLatLng = map.wrapLatLng(map.unproject(map.project(map.getCenter()).add(offset)));
|
14084
|
+
map.panTo(newLatLng);
|
14085
|
+
} else {
|
14086
|
+
map.panBy(offset);
|
13984
14087
|
}
|
13985
14088
|
}
|
13986
14089
|
} else if (key in this._zoomKeys) {
|