leaflet-rails 1.0.0.pre.rc3 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/leaflet-rails/version.rb +1 -1
- data/vendor/assets/images/layers.png +0 -0
- data/vendor/assets/images/marker-shadow.png +0 -0
- data/vendor/assets/javascripts/leaflet-src.js.erb +123 -89
- data/vendor/assets/javascripts/leaflet-src.map +1 -1
- data/vendor/assets/javascripts/leaflet.js.erb +3 -18
- data/vendor/assets/stylesheets/leaflet.css.erb +5 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cade19c6b53274eddf5f57dfd3bd9700910b7cfe
|
4
|
+
data.tar.gz: 41e1720f5574bc590503a3cec2c83aa193b3da2f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d8106c56673c20e2505606461ad7cc4e79c24131c03ce328c2ddbac3fef2c172eb5e0dffb83f03ffcaaaf5fa1527df1217ae697803060619e1a0d195f8accdf5
|
7
|
+
data.tar.gz: a636f5942455a8fa619c233770384a4035df719095933806b9d120576fac52040714df69aa07f7af1d33f99bc3c3b617c366ae28ad2b1c473ee0a67353409258
|
Binary file
|
Binary file
|
@@ -1,10 +1,10 @@
|
|
1
1
|
/*
|
2
|
-
Leaflet 1.0.0
|
3
|
-
(c) 2010-
|
2
|
+
Leaflet 1.0.0, a JS library for interactive maps. http://leafletjs.com
|
3
|
+
(c) 2010-2016 Vladimir Agafonkin, (c) 2010-2011 CloudMade
|
4
4
|
*/
|
5
5
|
(function (window, document, undefined) {
|
6
6
|
var L = {
|
7
|
-
version: "1.0.0
|
7
|
+
version: "1.0.0"
|
8
8
|
};
|
9
9
|
|
10
10
|
function expose() {
|
@@ -497,10 +497,7 @@ L.Evented = L.Class.extend({
|
|
497
497
|
/* get/init listeners for type */
|
498
498
|
var typeListeners = this._events[type];
|
499
499
|
if (!typeListeners) {
|
500
|
-
typeListeners =
|
501
|
-
listeners: [],
|
502
|
-
count: 0
|
503
|
-
};
|
500
|
+
typeListeners = [];
|
504
501
|
this._events[type] = typeListeners;
|
505
502
|
}
|
506
503
|
|
@@ -509,7 +506,7 @@ L.Evented = L.Class.extend({
|
|
509
506
|
context = undefined;
|
510
507
|
}
|
511
508
|
var newListener = {fn: fn, ctx: context},
|
512
|
-
listeners = typeListeners
|
509
|
+
listeners = typeListeners;
|
513
510
|
|
514
511
|
// check if fn already there
|
515
512
|
for (var i = 0, len = listeners.length; i < len; i++) {
|
@@ -523,21 +520,18 @@ L.Evented = L.Class.extend({
|
|
523
520
|
},
|
524
521
|
|
525
522
|
_off: function (type, fn, context) {
|
526
|
-
var
|
527
|
-
listeners,
|
523
|
+
var listeners,
|
528
524
|
i,
|
529
525
|
len;
|
530
526
|
|
531
527
|
if (!this._events) { return; }
|
532
528
|
|
533
|
-
|
529
|
+
listeners = this._events[type];
|
534
530
|
|
535
|
-
if (!
|
531
|
+
if (!listeners) {
|
536
532
|
return;
|
537
533
|
}
|
538
534
|
|
539
|
-
listeners = typeListeners.listeners;
|
540
|
-
|
541
535
|
if (!fn) {
|
542
536
|
// Set all removed listeners to noop so they are not called if remove happens in fire
|
543
537
|
for (i = 0, len = listeners.length; i < len; i++) {
|
@@ -548,7 +542,6 @@ L.Evented = L.Class.extend({
|
|
548
542
|
return;
|
549
543
|
}
|
550
544
|
|
551
|
-
|
552
545
|
if (context === this) {
|
553
546
|
context = undefined;
|
554
547
|
}
|
@@ -563,11 +556,10 @@ L.Evented = L.Class.extend({
|
|
563
556
|
|
564
557
|
// set the removed listener to noop so that's not called if remove happens in fire
|
565
558
|
l.fn = L.Util.falseFn;
|
566
|
-
typeListeners.count--;
|
567
559
|
|
568
|
-
if (this.
|
560
|
+
if (this._firingCount) {
|
569
561
|
/* copy array in case events are being fired */
|
570
|
-
listeners = listeners.slice();
|
562
|
+
this._events[type] = listeners = listeners.slice();
|
571
563
|
}
|
572
564
|
listeners.splice(i, 1);
|
573
565
|
|
@@ -587,17 +579,16 @@ L.Evented = L.Class.extend({
|
|
587
579
|
var event = L.Util.extend({}, data, {type: type, target: this});
|
588
580
|
|
589
581
|
if (this._events) {
|
590
|
-
var
|
582
|
+
var listeners = this._events[type];
|
591
583
|
|
592
|
-
if (
|
593
|
-
this.
|
594
|
-
var listeners = typeListeners.listeners;
|
584
|
+
if (listeners) {
|
585
|
+
this._firingCount = (this._firingCount + 1) || 1;
|
595
586
|
for (var i = 0, len = listeners.length; i < len; i++) {
|
596
587
|
var l = listeners[i];
|
597
588
|
l.fn.call(l.ctx || this, event);
|
598
589
|
}
|
599
590
|
|
600
|
-
this.
|
591
|
+
this._firingCount--;
|
601
592
|
}
|
602
593
|
}
|
603
594
|
|
@@ -612,8 +603,8 @@ L.Evented = L.Class.extend({
|
|
612
603
|
// @method listens(type: String): Boolean
|
613
604
|
// Returns `true` if a particular event type has any listeners attached to it.
|
614
605
|
listens: function (type, propagate) {
|
615
|
-
var
|
616
|
-
if (
|
606
|
+
var listeners = this._events && this._events[type];
|
607
|
+
if (listeners && listeners.length) { return true; }
|
617
608
|
|
618
609
|
if (propagate) {
|
619
610
|
// also check parents for listeners if event propagates
|
@@ -2094,13 +2085,13 @@ L.CRS = {
|
|
2094
2085
|
},
|
2095
2086
|
|
2096
2087
|
// @method zoom(scale: Number): Number
|
2097
|
-
// Inverse of `scale()`, returns the zoom level
|
2088
|
+
// Inverse of `scale()`, returns the zoom level corresponding to a scale
|
2098
2089
|
// factor of `scale`.
|
2099
2090
|
zoom: function (scale) {
|
2100
2091
|
return Math.log(scale / 256) / Math.LN2;
|
2101
2092
|
},
|
2102
2093
|
|
2103
|
-
// @method getProjectedBounds(zoom): Bounds
|
2094
|
+
// @method getProjectedBounds(zoom: Number): Bounds
|
2104
2095
|
// Returns the projection's bounds scaled and transformed for the provided `zoom`.
|
2105
2096
|
getProjectedBounds: function (zoom) {
|
2106
2097
|
if (this.infinite) { return null; }
|
@@ -2113,7 +2104,7 @@ L.CRS = {
|
|
2113
2104
|
return L.bounds(min, max);
|
2114
2105
|
},
|
2115
2106
|
|
2116
|
-
// @method distance(latlng1: LatLng,
|
2107
|
+
// @method distance(latlng1: LatLng, latlng2: LatLng): Number
|
2117
2108
|
// Returns the distance between two geographical coordinates.
|
2118
2109
|
|
2119
2110
|
// @property code: String
|
@@ -2661,11 +2652,19 @@ L.Map = L.Evented.extend({
|
|
2661
2652
|
|
2662
2653
|
this._initEvents(true);
|
2663
2654
|
|
2655
|
+
if (this._containerId !== this._container._leaflet_id) {
|
2656
|
+
throw new Error('Map container is being reused by another instance');
|
2657
|
+
}
|
2658
|
+
|
2664
2659
|
try {
|
2665
2660
|
// throws error in IE6-8
|
2666
|
-
delete this._container.
|
2661
|
+
delete this._container._leaflet_id;
|
2662
|
+
delete this._containerId;
|
2667
2663
|
} catch (e) {
|
2668
|
-
|
2664
|
+
/*eslint-disable */
|
2665
|
+
this._container._leaflet_id = undefined;
|
2666
|
+
/*eslint-enable */
|
2667
|
+
this._containerId = undefined;
|
2669
2668
|
}
|
2670
2669
|
|
2671
2670
|
L.DomUtil.remove(this._mapPane);
|
@@ -2857,7 +2856,8 @@ L.Map = L.Evented.extend({
|
|
2857
2856
|
getScaleZoom: function (scale, fromZoom) {
|
2858
2857
|
var crs = this.options.crs;
|
2859
2858
|
fromZoom = fromZoom === undefined ? this._zoom : fromZoom;
|
2860
|
-
|
2859
|
+
var zoom = crs.zoom(scale * crs.scale(fromZoom));
|
2860
|
+
return isNaN(zoom) ? Infinity : zoom;
|
2861
2861
|
},
|
2862
2862
|
|
2863
2863
|
// @method project(latlng: LatLng, zoom: Number): Point
|
@@ -2968,12 +2968,12 @@ L.Map = L.Evented.extend({
|
|
2968
2968
|
|
2969
2969
|
if (!container) {
|
2970
2970
|
throw new Error('Map container not found.');
|
2971
|
-
} else if (container.
|
2971
|
+
} else if (container._leaflet_id) {
|
2972
2972
|
throw new Error('Map container is already initialized.');
|
2973
2973
|
}
|
2974
2974
|
|
2975
2975
|
L.DomEvent.addListener(container, 'scroll', this._onScroll, this);
|
2976
|
-
|
2976
|
+
this._containerId = L.Util.stamp(container);
|
2977
2977
|
},
|
2978
2978
|
|
2979
2979
|
_initLayout: function () {
|
@@ -3099,14 +3099,14 @@ L.Map = L.Evented.extend({
|
|
3099
3099
|
this._pixelOrigin = this._getNewPixelOrigin(center);
|
3100
3100
|
|
3101
3101
|
// @event zoom: Event
|
3102
|
-
// Fired
|
3102
|
+
// Fired repeatedly during any change in zoom level, including zoom
|
3103
3103
|
// and fly animations.
|
3104
3104
|
if (zoomChanged || (data && data.pinch)) { // Always fire 'zoom' if pinching because #3530
|
3105
3105
|
this.fire('zoom', data);
|
3106
3106
|
}
|
3107
3107
|
|
3108
3108
|
// @event move: Event
|
3109
|
-
// Fired
|
3109
|
+
// Fired repeatedly during any movement of the map, including pan and
|
3110
3110
|
// fly animations.
|
3111
3111
|
return this.fire('move', data);
|
3112
3112
|
},
|
@@ -3182,7 +3182,7 @@ L.Map = L.Evented.extend({
|
|
3182
3182
|
// default browser context menu from showing if there are listeners on
|
3183
3183
|
// this event. Also fired on mobile when the user holds a single touch
|
3184
3184
|
// for a second (also called long press).
|
3185
|
-
// @event keypress:
|
3185
|
+
// @event keypress: KeyboardEvent
|
3186
3186
|
// Fired when the user presses a key from the keyboard while the map is focused.
|
3187
3187
|
L.DomEvent[onOff](this._container, 'click dblclick mousedown mouseup ' +
|
3188
3188
|
'mouseover mouseout mousemove contextmenu keypress', this._handleDOMEvent, this);
|
@@ -3899,7 +3899,7 @@ L.GridLayer = L.Layer.extend({
|
|
3899
3899
|
},
|
3900
3900
|
|
3901
3901
|
initialize: function (options) {
|
3902
|
-
|
3902
|
+
L.setOptions(this, options);
|
3903
3903
|
},
|
3904
3904
|
|
3905
3905
|
onAdd: function () {
|
@@ -3950,7 +3950,7 @@ L.GridLayer = L.Layer.extend({
|
|
3950
3950
|
return this.options.attribution;
|
3951
3951
|
},
|
3952
3952
|
|
3953
|
-
// @method getContainer:
|
3953
|
+
// @method getContainer: HTMLElement
|
3954
3954
|
// Returns the HTML element that contains the tiles for this layer.
|
3955
3955
|
getContainer: function () {
|
3956
3956
|
return this._container;
|
@@ -4458,8 +4458,13 @@ L.GridLayer = L.Layer.extend({
|
|
4458
4458
|
nwPoint = coords.scaleBy(tileSize),
|
4459
4459
|
sePoint = nwPoint.add(tileSize),
|
4460
4460
|
|
4461
|
-
nw = map.
|
4462
|
-
se = map.
|
4461
|
+
nw = map.unproject(nwPoint, coords.z),
|
4462
|
+
se = map.unproject(sePoint, coords.z);
|
4463
|
+
|
4464
|
+
if (!this.options.noWrap) {
|
4465
|
+
nw = map.wrapLatLng(nw);
|
4466
|
+
se = map.wrapLatLng(se);
|
4467
|
+
}
|
4463
4468
|
|
4464
4469
|
return new L.LatLngBounds(nw, se);
|
4465
4470
|
},
|
@@ -5095,7 +5100,7 @@ L.ImageOverlay = L.Layer.extend({
|
|
5095
5100
|
}
|
5096
5101
|
},
|
5097
5102
|
|
5098
|
-
// @method setOpacity(): this
|
5103
|
+
// @method setOpacity(opacity: Number): this
|
5099
5104
|
// Sets the opacity of the overlay.
|
5100
5105
|
setOpacity: function (opacity) {
|
5101
5106
|
this.options.opacity = opacity;
|
@@ -5374,12 +5379,24 @@ L.icon = function (options) {
|
|
5374
5379
|
|
5375
5380
|
|
5376
5381
|
/*
|
5377
|
-
*
|
5382
|
+
* @miniclass Icon.Default (Icon)
|
5383
|
+
* @aka L.Icon.Default
|
5384
|
+
* @section
|
5385
|
+
*
|
5386
|
+
* A trivial subclass of `Icon`, represents the icon to use in `Marker`s when
|
5387
|
+
* no icon is specified. Points to the blue marker image distributed with Leaflet
|
5388
|
+
* releases.
|
5389
|
+
*
|
5390
|
+
* In order to change the default icon, just change the properties of `L.Icon.Default.prototype.options`
|
5391
|
+
* (which is a set of `Icon options`).
|
5378
5392
|
*/
|
5379
5393
|
|
5380
5394
|
L.Icon.Default = L.Icon.extend({
|
5381
5395
|
|
5382
5396
|
options: {
|
5397
|
+
iconUrl: 'marker-icon.png',
|
5398
|
+
iconRetinaUrl: 'marker-icon-2x.png',
|
5399
|
+
shadowUrl: 'marker-shadow.png',
|
5383
5400
|
iconSize: [25, 41],
|
5384
5401
|
iconAnchor: [12, 41],
|
5385
5402
|
popupAnchor: [1, -34],
|
@@ -5388,37 +5405,28 @@ L.Icon.Default = L.Icon.extend({
|
|
5388
5405
|
},
|
5389
5406
|
|
5390
5407
|
_getIconUrl: function (name) {
|
5391
|
-
|
5392
|
-
|
5393
|
-
if (this.options[key]) {
|
5394
|
-
return this.options[key];
|
5408
|
+
if (!L.Icon.Default.imagePath) { // Deprecated, backwards-compatibility only
|
5409
|
+
L.Icon.Default.imagePath = this._detectIconPath();
|
5395
5410
|
}
|
5396
5411
|
|
5397
|
-
|
5398
|
-
|
5399
|
-
|
5400
|
-
|
5401
|
-
|
5402
|
-
|
5403
|
-
return path + '/marker-' + name + (L.Browser.retina && name === 'icon' ? '-2x' : '') + '.png';
|
5404
|
-
}
|
5405
|
-
});
|
5406
|
-
|
5407
|
-
L.Icon.Default.imagePath = (function () {
|
5408
|
-
var scripts = document.getElementsByTagName('script'),
|
5409
|
-
leafletRe = /[\/^]leaflet[\-\._]?([\w\-\._]*)\.js\??/;
|
5412
|
+
// @option imagePath: String
|
5413
|
+
// `L.Icon.Default` will try to auto-detect the absolute location of the
|
5414
|
+
// blue icon images. If you are placing these images in a non-standard
|
5415
|
+
// way, set this option to point to the right absolute path.
|
5416
|
+
return (this.options.imagePath || L.Icon.Default.imagePath) + L.Icon.prototype._getIconUrl.call(this, name);
|
5417
|
+
},
|
5410
5418
|
|
5411
|
-
|
5419
|
+
_detectIconPath: function () {
|
5420
|
+
var el = L.DomUtil.create('div', 'leaflet-default-icon-path', document.body);
|
5421
|
+
var path = L.DomUtil.getStyle(el, 'background-image') ||
|
5422
|
+
L.DomUtil.getStyle(el, 'backgroundImage'); // IE8
|
5412
5423
|
|
5413
|
-
|
5414
|
-
src = scripts[i].src || '';
|
5424
|
+
document.body.removeChild(el);
|
5415
5425
|
|
5416
|
-
|
5417
|
-
path
|
5418
|
-
return (path ? path + '/' : '') + 'images';
|
5419
|
-
}
|
5426
|
+
return path.indexOf('url') === 0 ?
|
5427
|
+
path.replace(/^url\([\"\']?/, '').replace(/[\"\']?\)$/, '') : '';
|
5420
5428
|
}
|
5421
|
-
}
|
5429
|
+
});
|
5422
5430
|
|
5423
5431
|
|
5424
5432
|
|
@@ -5441,7 +5449,7 @@ L.Marker = L.Layer.extend({
|
|
5441
5449
|
// @aka Marker options
|
5442
5450
|
options: {
|
5443
5451
|
// @option icon: Icon = *
|
5444
|
-
// Icon class to use for rendering the marker. See [Icon documentation](#L.Icon) for details on how to customize the marker icon.
|
5452
|
+
// Icon class to use for rendering the marker. See [Icon documentation](#L.Icon) for details on how to customize the marker icon. If not specified, a new `L.Icon.Default` is used.
|
5445
5453
|
icon: new L.Icon.Default(),
|
5446
5454
|
|
5447
5455
|
// Option inherited from "Interactive layer" abstract class
|
@@ -5843,11 +5851,6 @@ L.DivOverlay = L.Layer.extend({
|
|
5843
5851
|
// of the popup when opening it on some overlays.
|
5844
5852
|
offset: [0, 7],
|
5845
5853
|
|
5846
|
-
// @option zoomAnimation: Boolean = true
|
5847
|
-
// Whether to animate the popup on zoom. Disable it if you have
|
5848
|
-
// problems with Flash content inside popups.
|
5849
|
-
zoomAnimation: true,
|
5850
|
-
|
5851
5854
|
// @option className: String = ''
|
5852
5855
|
// A custom CSS class name to assign to the popup.
|
5853
5856
|
className: '',
|
@@ -5864,7 +5867,7 @@ L.DivOverlay = L.Layer.extend({
|
|
5864
5867
|
},
|
5865
5868
|
|
5866
5869
|
onAdd: function (map) {
|
5867
|
-
this._zoomAnimated =
|
5870
|
+
this._zoomAnimated = map._zoomAnimated;
|
5868
5871
|
|
5869
5872
|
if (!this._container) {
|
5870
5873
|
this._initLayout();
|
@@ -6108,7 +6111,11 @@ L.Popup = L.DivOverlay.extend({
|
|
6108
6111
|
// Set it to `false` if you want to override the default behavior of
|
6109
6112
|
// the popup closing when user clicks the map (set globally by
|
6110
6113
|
// the Map's [closePopupOnClick](#map-closepopuponclick) option).
|
6111
|
-
autoClose: true
|
6114
|
+
autoClose: true,
|
6115
|
+
|
6116
|
+
// @option className: String = ''
|
6117
|
+
// A custom CSS class name to assign to the popup.
|
6118
|
+
className: ''
|
6112
6119
|
},
|
6113
6120
|
|
6114
6121
|
// @namespace Popup
|
@@ -6187,7 +6194,7 @@ L.Popup = L.DivOverlay.extend({
|
|
6187
6194
|
var prefix = 'leaflet-popup',
|
6188
6195
|
container = this._container = L.DomUtil.create('div',
|
6189
6196
|
prefix + ' ' + (this.options.className || '') +
|
6190
|
-
' leaflet-zoom-
|
6197
|
+
' leaflet-zoom-animated');
|
6191
6198
|
|
6192
6199
|
if (this.options.closeButton) {
|
6193
6200
|
var closeButton = this._closeButton = L.DomUtil.create('a', prefix + '-close-button', container);
|
@@ -6254,9 +6261,7 @@ L.Popup = L.DivOverlay.extend({
|
|
6254
6261
|
containerWidth = this._containerWidth,
|
6255
6262
|
layerPos = new L.Point(this._containerLeft, -containerHeight - this._containerBottom);
|
6256
6263
|
|
6257
|
-
|
6258
|
-
layerPos._add(L.DomUtil.getPosition(this._container));
|
6259
|
-
}
|
6264
|
+
layerPos._add(L.DomUtil.getPosition(this._container));
|
6260
6265
|
|
6261
6266
|
var containerPos = map.layerPointToContainerPoint(layerPos),
|
6262
6267
|
padding = L.point(this.options.autoPanPadding),
|
@@ -6728,7 +6733,7 @@ L.Tooltip = L.DivOverlay.extend({
|
|
6728
6733
|
|
6729
6734
|
_getAnchor: function () {
|
6730
6735
|
// Where should we anchor the tooltip on the source layer?
|
6731
|
-
return L.point(this._source._getTooltipAnchor && !this.options.sticky ? this._source._getTooltipAnchor() : [0, 0]);
|
6736
|
+
return L.point(this._source && this._source._getTooltipAnchor && !this.options.sticky ? this._source._getTooltipAnchor() : [0, 0]);
|
6732
6737
|
}
|
6733
6738
|
|
6734
6739
|
});
|
@@ -6901,7 +6906,7 @@ L.Layer.include({
|
|
6901
6906
|
closeTooltip: function () {
|
6902
6907
|
if (this._tooltip) {
|
6903
6908
|
this._tooltip._close();
|
6904
|
-
if (this._tooltip.options.interactive) {
|
6909
|
+
if (this._tooltip.options.interactive && this._tooltip._container) {
|
6905
6910
|
L.DomUtil.removeClass(this._tooltip._container, 'leaflet-clickable');
|
6906
6911
|
this.removeInteractiveTarget(this._tooltip._container);
|
6907
6912
|
}
|
@@ -7144,14 +7149,19 @@ L.layerGroup = function (layers) {
|
|
7144
7149
|
* @aka L.FeatureGroup
|
7145
7150
|
* @inherits LayerGroup
|
7146
7151
|
*
|
7147
|
-
* Extended `LayerGroup` that
|
7152
|
+
* Extended `LayerGroup` that makes it easier to do the same thing to all its member layers:
|
7153
|
+
* * [`bindPopup`](#layer-bindpopup) binds a popup to all of the layers at once (likewise with [`bindTooltip`](#layer-bindtooltip))
|
7154
|
+
* * Events are propagated to the `FeatureGroup`, so if the group has an event
|
7155
|
+
* handler, it will handle events from any of the layers. This includes mouse events
|
7156
|
+
* and custom events.
|
7157
|
+
* * Has `layeradd` and `layerremove` events
|
7148
7158
|
*
|
7149
7159
|
* @example
|
7150
7160
|
*
|
7151
7161
|
* ```js
|
7152
7162
|
* L.featureGroup([marker1, marker2, polyline])
|
7153
7163
|
* .bindPopup('Hello world!')
|
7154
|
-
* .on('click', function() { alert('Clicked on a group!'); })
|
7164
|
+
* .on('click', function() { alert('Clicked on a member of the group!'); })
|
7155
7165
|
* .addTo(map);
|
7156
7166
|
* ```
|
7157
7167
|
*/
|
@@ -7167,6 +7177,8 @@ L.FeatureGroup = L.LayerGroup.extend({
|
|
7167
7177
|
|
7168
7178
|
L.LayerGroup.prototype.addLayer.call(this, layer);
|
7169
7179
|
|
7180
|
+
// @event layeradd: LayerEvent
|
7181
|
+
// Fired when a layer is added to this `FeatureGroup`
|
7170
7182
|
return this.fire('layeradd', {layer: layer});
|
7171
7183
|
},
|
7172
7184
|
|
@@ -7182,6 +7194,8 @@ L.FeatureGroup = L.LayerGroup.extend({
|
|
7182
7194
|
|
7183
7195
|
L.LayerGroup.prototype.removeLayer.call(this, layer);
|
7184
7196
|
|
7197
|
+
// @event layerremove: LayerEvent
|
7198
|
+
// Fired when a layer is removed from this `FeatureGroup`
|
7185
7199
|
return this.fire('layerremove', {layer: layer});
|
7186
7200
|
},
|
7187
7201
|
|
@@ -7239,6 +7253,9 @@ L.featureGroup = function (layers) {
|
|
7239
7253
|
*
|
7240
7254
|
* Do not use this class directly, use `SVG` and `Canvas` instead.
|
7241
7255
|
*
|
7256
|
+
* @event update: Event
|
7257
|
+
* Fired when the renderer updates its bounds, center and zoom, for example when
|
7258
|
+
* its map has moved
|
7242
7259
|
*/
|
7243
7260
|
|
7244
7261
|
L.Renderer = L.Layer.extend({
|
@@ -7317,7 +7334,8 @@ L.Renderer = L.Layer.extend({
|
|
7317
7334
|
},
|
7318
7335
|
|
7319
7336
|
_update: function () {
|
7320
|
-
//
|
7337
|
+
// Update pixel bounds of renderer container (for positioning/sizing/clipping later)
|
7338
|
+
// Subclasses are responsible of firing the 'update' event.
|
7321
7339
|
var p = this.options.padding,
|
7322
7340
|
size = this._map.getSize(),
|
7323
7341
|
min = this._map.containerPointToLayerPoint(size.multiplyBy(-p)).round();
|
@@ -7448,16 +7466,17 @@ L.Path = L.Layer.extend({
|
|
7448
7466
|
this._renderer._initPath(this);
|
7449
7467
|
this._reset();
|
7450
7468
|
this._renderer._addPath(this);
|
7469
|
+
this._renderer.on('update', this._update, this);
|
7451
7470
|
},
|
7452
7471
|
|
7453
7472
|
onRemove: function () {
|
7454
7473
|
this._renderer._removePath(this);
|
7474
|
+
this._renderer.off('update', this._update, this);
|
7455
7475
|
},
|
7456
7476
|
|
7457
7477
|
getEvents: function () {
|
7458
7478
|
return {
|
7459
7479
|
zoomend: this._project,
|
7460
|
-
moveend: this._update,
|
7461
7480
|
viewreset: this._reset
|
7462
7481
|
};
|
7463
7482
|
},
|
@@ -7855,6 +7874,11 @@ L.Polyline = L.Path.extend({
|
|
7855
7874
|
// @method getCenter(): LatLng
|
7856
7875
|
// Returns the center ([centroid](http://en.wikipedia.org/wiki/Centroid)) of the polyline.
|
7857
7876
|
getCenter: function () {
|
7877
|
+
// throws error when not yet added to map as this center calculation requires projected coordinates
|
7878
|
+
if (!this._map) {
|
7879
|
+
throw new Error('Must add layer to map before using getCenter()');
|
7880
|
+
}
|
7881
|
+
|
7858
7882
|
var i, halfDist, segDist, dist, p1, p2, ratio,
|
7859
7883
|
points = this._rings[0],
|
7860
7884
|
len = points.length;
|
@@ -8159,6 +8183,11 @@ L.Polygon = L.Polyline.extend({
|
|
8159
8183
|
},
|
8160
8184
|
|
8161
8185
|
getCenter: function () {
|
8186
|
+
// throws error when not yet added to map as this center calculation requires projected coordinates
|
8187
|
+
if (!this._map) {
|
8188
|
+
throw new Error('Must add layer to map before using getCenter()');
|
8189
|
+
}
|
8190
|
+
|
8162
8191
|
var i, j, p1, p2, f, area, x, y, center,
|
8163
8192
|
points = this._rings[0],
|
8164
8193
|
len = points.length;
|
@@ -8535,7 +8564,7 @@ L.circle = function (latlng, options, legacyOptions) {
|
|
8535
8564
|
*
|
8536
8565
|
* ```js
|
8537
8566
|
* var map = L.map('map', {
|
8538
|
-
* renderer: L.svg()
|
8567
|
+
* renderer: L.svg()
|
8539
8568
|
* });
|
8540
8569
|
* ```
|
8541
8570
|
*
|
@@ -8593,6 +8622,8 @@ L.SVG = L.Renderer.extend({
|
|
8593
8622
|
// movement: update container viewBox so that we don't have to change coordinates of individual layers
|
8594
8623
|
L.DomUtil.setPosition(container, b.min);
|
8595
8624
|
container.setAttribute('viewBox', [b.min.x, b.min.y, size.x, size.y].join(' '));
|
8625
|
+
|
8626
|
+
this.fire('update');
|
8596
8627
|
},
|
8597
8628
|
|
8598
8629
|
// methods below are called by vector layers implementations
|
@@ -8923,7 +8954,7 @@ if (L.Browser.vml) {
|
|
8923
8954
|
*
|
8924
8955
|
* ```js
|
8925
8956
|
* var map = L.map('map', {
|
8926
|
-
* renderer: L.canvas()
|
8957
|
+
* renderer: L.canvas()
|
8927
8958
|
* });
|
8928
8959
|
* ```
|
8929
8960
|
*
|
@@ -8986,6 +9017,9 @@ L.Canvas = L.Renderer.extend({
|
|
8986
9017
|
|
8987
9018
|
// translate so we use the same path coordinates after canvas element moves
|
8988
9019
|
this._ctx.translate(-b.min.x, -b.min.y);
|
9020
|
+
|
9021
|
+
// Tell paths to redraw themselves
|
9022
|
+
this.fire('update');
|
8989
9023
|
},
|
8990
9024
|
|
8991
9025
|
_initPath: function (layer) {
|
@@ -9291,7 +9325,7 @@ L.CircleMarker.prototype._containsPoint = function (p) {
|
|
9291
9325
|
* @example
|
9292
9326
|
*
|
9293
9327
|
* ```js
|
9294
|
-
* L.
|
9328
|
+
* L.geoJSON(data, {
|
9295
9329
|
* style: function (feature) {
|
9296
9330
|
* return {color: feature.properties.color};
|
9297
9331
|
* }
|
@@ -12794,7 +12828,7 @@ L.Map.include(!zoomAnimated ? {} : {
|
|
12794
12828
|
// @section Methods for modifying map state
|
12795
12829
|
L.Map.include({
|
12796
12830
|
|
12797
|
-
// @method flyTo(latlng: LatLng, zoom?: Number, options?: Zoom/
|
12831
|
+
// @method flyTo(latlng: LatLng, zoom?: Number, options?: Zoom/pan options): this
|
12798
12832
|
// Sets the view of the map (geographical center and zoom) performing a smooth
|
12799
12833
|
// pan-zoom animation.
|
12800
12834
|
flyTo: function (targetCenter, targetZoom, options) {
|