decidim 0.26.9 → 0.26.10

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of decidim might be problematic. Click here for more details.

Files changed (117) hide show
  1. checksums.yaml +4 -4
  2. data/lib/decidim/version.rb +1 -1
  3. data/package-lock.json +7 -7
  4. data/packages/browserslist-config/package.json +1 -1
  5. data/packages/core/node_modules/leaflet/CHANGELOG.md +2191 -0
  6. data/packages/core/node_modules/leaflet/LICENSE +26 -0
  7. data/packages/core/node_modules/leaflet/README.md +55 -0
  8. data/packages/core/node_modules/leaflet/dist/images/layers-2x.png +0 -0
  9. data/packages/core/node_modules/leaflet/dist/images/layers.png +0 -0
  10. data/packages/core/node_modules/leaflet/dist/images/marker-icon-2x.png +0 -0
  11. data/packages/core/node_modules/leaflet/dist/images/marker-icon.png +0 -0
  12. data/packages/core/node_modules/leaflet/dist/images/marker-shadow.png +0 -0
  13. data/packages/core/node_modules/leaflet/dist/leaflet-src.esm.js +14419 -0
  14. data/packages/core/node_modules/leaflet/dist/leaflet-src.esm.js.map +1 -0
  15. data/packages/core/node_modules/leaflet/dist/leaflet-src.js +14512 -0
  16. data/packages/core/node_modules/leaflet/dist/leaflet-src.js.map +1 -0
  17. data/packages/core/node_modules/leaflet/dist/leaflet.css +661 -0
  18. data/packages/core/node_modules/leaflet/dist/leaflet.js +6 -0
  19. data/packages/core/node_modules/leaflet/dist/leaflet.js.map +1 -0
  20. data/packages/core/node_modules/leaflet/package.json +149 -0
  21. data/packages/core/node_modules/leaflet/src/Leaflet.js +24 -0
  22. data/packages/core/node_modules/leaflet/src/control/Control.Attribution.js +148 -0
  23. data/packages/core/node_modules/leaflet/src/control/Control.Layers.js +443 -0
  24. data/packages/core/node_modules/leaflet/src/control/Control.Scale.js +132 -0
  25. data/packages/core/node_modules/leaflet/src/control/Control.Zoom.js +146 -0
  26. data/packages/core/node_modules/leaflet/src/control/Control.js +174 -0
  27. data/packages/core/node_modules/leaflet/src/control/index.js +17 -0
  28. data/packages/core/node_modules/leaflet/src/core/Browser.js +220 -0
  29. data/packages/core/node_modules/leaflet/src/core/Class.js +135 -0
  30. data/packages/core/node_modules/leaflet/src/core/Class.leafdoc +197 -0
  31. data/packages/core/node_modules/leaflet/src/core/Events.js +344 -0
  32. data/packages/core/node_modules/leaflet/src/core/Events.leafdoc +143 -0
  33. data/packages/core/node_modules/leaflet/src/core/Handler.js +57 -0
  34. data/packages/core/node_modules/leaflet/src/core/Util.js +241 -0
  35. data/packages/core/node_modules/leaflet/src/core/index.js +15 -0
  36. data/packages/core/node_modules/leaflet/src/dom/DomEvent.DoubleTap.js +91 -0
  37. data/packages/core/node_modules/leaflet/src/dom/DomEvent.Pointer.js +97 -0
  38. data/packages/core/node_modules/leaflet/src/dom/DomEvent.js +315 -0
  39. data/packages/core/node_modules/leaflet/src/dom/DomUtil.js +349 -0
  40. data/packages/core/node_modules/leaflet/src/dom/Draggable.js +220 -0
  41. data/packages/core/node_modules/leaflet/src/dom/PosAnimation.js +113 -0
  42. data/packages/core/node_modules/leaflet/src/dom/index.js +9 -0
  43. data/packages/core/node_modules/leaflet/src/geo/LatLng.js +137 -0
  44. data/packages/core/node_modules/leaflet/src/geo/LatLngBounds.js +251 -0
  45. data/packages/core/node_modules/leaflet/src/geo/crs/CRS.EPSG3395.js +20 -0
  46. data/packages/core/node_modules/leaflet/src/geo/crs/CRS.EPSG3857.js +27 -0
  47. data/packages/core/node_modules/leaflet/src/geo/crs/CRS.EPSG4326.js +23 -0
  48. data/packages/core/node_modules/leaflet/src/geo/crs/CRS.Earth.js +33 -0
  49. data/packages/core/node_modules/leaflet/src/geo/crs/CRS.Simple.js +36 -0
  50. data/packages/core/node_modules/leaflet/src/geo/crs/CRS.js +139 -0
  51. data/packages/core/node_modules/leaflet/src/geo/crs/index.js +15 -0
  52. data/packages/core/node_modules/leaflet/src/geo/index.js +7 -0
  53. data/packages/core/node_modules/leaflet/src/geo/projection/Projection.LonLat.js +28 -0
  54. data/packages/core/node_modules/leaflet/src/geo/projection/Projection.Mercator.js +49 -0
  55. data/packages/core/node_modules/leaflet/src/geo/projection/Projection.SphericalMercator.js +44 -0
  56. data/packages/core/node_modules/leaflet/src/geo/projection/index.js +26 -0
  57. data/packages/core/node_modules/leaflet/src/geometry/Bounds.js +219 -0
  58. data/packages/core/node_modules/leaflet/src/geometry/LineUtil.js +306 -0
  59. data/packages/core/node_modules/leaflet/src/geometry/Point.js +222 -0
  60. data/packages/core/node_modules/leaflet/src/geometry/PolyUtil.js +129 -0
  61. data/packages/core/node_modules/leaflet/src/geometry/Transformation.js +79 -0
  62. data/packages/core/node_modules/leaflet/src/geometry/index.js +8 -0
  63. data/packages/core/node_modules/leaflet/src/images/layers.svg +1 -0
  64. data/packages/core/node_modules/leaflet/src/images/logo.svg +1 -0
  65. data/packages/core/node_modules/leaflet/src/images/marker.svg +1 -0
  66. data/packages/core/node_modules/leaflet/src/layer/DivOverlay.js +348 -0
  67. data/packages/core/node_modules/leaflet/src/layer/FeatureGroup.js +94 -0
  68. data/packages/core/node_modules/leaflet/src/layer/GeoJSON.js +452 -0
  69. data/packages/core/node_modules/leaflet/src/layer/ImageOverlay.js +270 -0
  70. data/packages/core/node_modules/leaflet/src/layer/Layer.Interactive.leafdoc +39 -0
  71. data/packages/core/node_modules/leaflet/src/layer/Layer.js +275 -0
  72. data/packages/core/node_modules/leaflet/src/layer/LayerGroup.js +159 -0
  73. data/packages/core/node_modules/leaflet/src/layer/Popup.js +506 -0
  74. data/packages/core/node_modules/leaflet/src/layer/SVGOverlay.js +50 -0
  75. data/packages/core/node_modules/leaflet/src/layer/Tooltip.js +444 -0
  76. data/packages/core/node_modules/leaflet/src/layer/VideoOverlay.js +106 -0
  77. data/packages/core/node_modules/leaflet/src/layer/index.js +24 -0
  78. data/packages/core/node_modules/leaflet/src/layer/marker/DivIcon.js +74 -0
  79. data/packages/core/node_modules/leaflet/src/layer/marker/Icon.Default.js +66 -0
  80. data/packages/core/node_modules/leaflet/src/layer/marker/Icon.js +165 -0
  81. data/packages/core/node_modules/leaflet/src/layer/marker/Marker.Drag.js +161 -0
  82. data/packages/core/node_modules/leaflet/src/layer/marker/Marker.js +419 -0
  83. data/packages/core/node_modules/leaflet/src/layer/marker/index.js +8 -0
  84. data/packages/core/node_modules/leaflet/src/layer/tile/GridLayer.js +923 -0
  85. data/packages/core/node_modules/leaflet/src/layer/tile/TileLayer.WMS.js +137 -0
  86. data/packages/core/node_modules/leaflet/src/layer/tile/TileLayer.js +289 -0
  87. data/packages/core/node_modules/leaflet/src/layer/tile/index.js +6 -0
  88. data/packages/core/node_modules/leaflet/src/layer/vector/Canvas.js +492 -0
  89. data/packages/core/node_modules/leaflet/src/layer/vector/Circle.js +113 -0
  90. data/packages/core/node_modules/leaflet/src/layer/vector/CircleMarker.js +109 -0
  91. data/packages/core/node_modules/leaflet/src/layer/vector/Path.js +148 -0
  92. data/packages/core/node_modules/leaflet/src/layer/vector/Polygon.js +159 -0
  93. data/packages/core/node_modules/leaflet/src/layer/vector/Polyline.js +307 -0
  94. data/packages/core/node_modules/leaflet/src/layer/vector/Rectangle.js +57 -0
  95. data/packages/core/node_modules/leaflet/src/layer/vector/Renderer.getRenderer.js +45 -0
  96. data/packages/core/node_modules/leaflet/src/layer/vector/Renderer.js +133 -0
  97. data/packages/core/node_modules/leaflet/src/layer/vector/SVG.Util.js +39 -0
  98. data/packages/core/node_modules/leaflet/src/layer/vector/SVG.VML.js +144 -0
  99. data/packages/core/node_modules/leaflet/src/layer/vector/SVG.js +207 -0
  100. data/packages/core/node_modules/leaflet/src/layer/vector/index.js +14 -0
  101. data/packages/core/node_modules/leaflet/src/map/Map.js +1751 -0
  102. data/packages/core/node_modules/leaflet/src/map/Map.methodOptions.leafdoc +112 -0
  103. data/packages/core/node_modules/leaflet/src/map/handler/Map.BoxZoom.js +152 -0
  104. data/packages/core/node_modules/leaflet/src/map/handler/Map.DoubleClickZoom.js +55 -0
  105. data/packages/core/node_modules/leaflet/src/map/handler/Map.Drag.js +235 -0
  106. data/packages/core/node_modules/leaflet/src/map/handler/Map.Keyboard.js +183 -0
  107. data/packages/core/node_modules/leaflet/src/map/handler/Map.ScrollWheelZoom.js +91 -0
  108. data/packages/core/node_modules/leaflet/src/map/handler/Map.TapHold.js +102 -0
  109. data/packages/core/node_modules/leaflet/src/map/handler/Map.TouchZoom.js +130 -0
  110. data/packages/core/node_modules/leaflet/src/map/index.js +17 -0
  111. data/packages/core/package.json +1 -1
  112. data/packages/dev/package.json +1 -1
  113. data/packages/elections/package.json +1 -1
  114. data/packages/eslint-config/package.json +1 -1
  115. data/packages/stylelint-config/package.json +1 -1
  116. data/packages/webpacker/package.json +1 -1
  117. metadata +148 -42
@@ -0,0 +1,148 @@
1
+ import {Layer} from '../Layer';
2
+ import * as Util from '../../core/Util';
3
+
4
+ /*
5
+ * @class Path
6
+ * @aka L.Path
7
+ * @inherits Interactive layer
8
+ *
9
+ * An abstract class that contains options and constants shared between vector
10
+ * overlays (Polygon, Polyline, Circle). Do not use it directly. Extends `Layer`.
11
+ */
12
+
13
+ export var Path = Layer.extend({
14
+
15
+ // @section
16
+ // @aka Path options
17
+ options: {
18
+ // @option stroke: Boolean = true
19
+ // Whether to draw stroke along the path. Set it to `false` to disable borders on polygons or circles.
20
+ stroke: true,
21
+
22
+ // @option color: String = '#3388ff'
23
+ // Stroke color
24
+ color: '#3388ff',
25
+
26
+ // @option weight: Number = 3
27
+ // Stroke width in pixels
28
+ weight: 3,
29
+
30
+ // @option opacity: Number = 1.0
31
+ // Stroke opacity
32
+ opacity: 1,
33
+
34
+ // @option lineCap: String= 'round'
35
+ // A string that defines [shape to be used at the end](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-linecap) of the stroke.
36
+ lineCap: 'round',
37
+
38
+ // @option lineJoin: String = 'round'
39
+ // A string that defines [shape to be used at the corners](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-linejoin) of the stroke.
40
+ lineJoin: 'round',
41
+
42
+ // @option dashArray: String = null
43
+ // A string that defines the stroke [dash pattern](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-dasharray). Doesn't work on `Canvas`-powered layers in [some old browsers](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/setLineDash#Browser_compatibility).
44
+ dashArray: null,
45
+
46
+ // @option dashOffset: String = null
47
+ // A string that defines the [distance into the dash pattern to start the dash](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-dashoffset). Doesn't work on `Canvas`-powered layers in [some old browsers](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/setLineDash#Browser_compatibility).
48
+ dashOffset: null,
49
+
50
+ // @option fill: Boolean = depends
51
+ // Whether to fill the path with color. Set it to `false` to disable filling on polygons or circles.
52
+ fill: false,
53
+
54
+ // @option fillColor: String = *
55
+ // Fill color. Defaults to the value of the [`color`](#path-color) option
56
+ fillColor: null,
57
+
58
+ // @option fillOpacity: Number = 0.2
59
+ // Fill opacity.
60
+ fillOpacity: 0.2,
61
+
62
+ // @option fillRule: String = 'evenodd'
63
+ // A string that defines [how the inside of a shape](https://developer.mozilla.org/docs/Web/SVG/Attribute/fill-rule) is determined.
64
+ fillRule: 'evenodd',
65
+
66
+ // className: '',
67
+
68
+ // Option inherited from "Interactive layer" abstract class
69
+ interactive: true,
70
+
71
+ // @option bubblingMouseEvents: Boolean = true
72
+ // When `true`, a mouse event on this path will trigger the same event on the map
73
+ // (unless [`L.DomEvent.stopPropagation`](#domevent-stoppropagation) is used).
74
+ bubblingMouseEvents: true
75
+ },
76
+
77
+ beforeAdd: function (map) {
78
+ // Renderer is set here because we need to call renderer.getEvents
79
+ // before this.getEvents.
80
+ this._renderer = map.getRenderer(this);
81
+ },
82
+
83
+ onAdd: function () {
84
+ this._renderer._initPath(this);
85
+ this._reset();
86
+ this._renderer._addPath(this);
87
+ },
88
+
89
+ onRemove: function () {
90
+ this._renderer._removePath(this);
91
+ },
92
+
93
+ // @method redraw(): this
94
+ // Redraws the layer. Sometimes useful after you changed the coordinates that the path uses.
95
+ redraw: function () {
96
+ if (this._map) {
97
+ this._renderer._updatePath(this);
98
+ }
99
+ return this;
100
+ },
101
+
102
+ // @method setStyle(style: Path options): this
103
+ // Changes the appearance of a Path based on the options in the `Path options` object.
104
+ setStyle: function (style) {
105
+ Util.setOptions(this, style);
106
+ if (this._renderer) {
107
+ this._renderer._updateStyle(this);
108
+ if (this.options.stroke && style && Object.prototype.hasOwnProperty.call(style, 'weight')) {
109
+ this._updateBounds();
110
+ }
111
+ }
112
+ return this;
113
+ },
114
+
115
+ // @method bringToFront(): this
116
+ // Brings the layer to the top of all path layers.
117
+ bringToFront: function () {
118
+ if (this._renderer) {
119
+ this._renderer._bringToFront(this);
120
+ }
121
+ return this;
122
+ },
123
+
124
+ // @method bringToBack(): this
125
+ // Brings the layer to the bottom of all path layers.
126
+ bringToBack: function () {
127
+ if (this._renderer) {
128
+ this._renderer._bringToBack(this);
129
+ }
130
+ return this;
131
+ },
132
+
133
+ getElement: function () {
134
+ return this._path;
135
+ },
136
+
137
+ _reset: function () {
138
+ // defined in child classes
139
+ this._project();
140
+ this._update();
141
+ },
142
+
143
+ _clickTolerance: function () {
144
+ // used when doing hit detection for Canvas layers
145
+ return (this.options.stroke ? this.options.weight / 2 : 0) +
146
+ (this._renderer.options.tolerance || 0);
147
+ }
148
+ });
@@ -0,0 +1,159 @@
1
+ import {Polyline} from './Polyline';
2
+ import {LatLng} from '../../geo/LatLng';
3
+ import * as LineUtil from '../../geometry/LineUtil';
4
+ import {Point} from '../../geometry/Point';
5
+ import {Bounds} from '../../geometry/Bounds';
6
+ import * as PolyUtil from '../../geometry/PolyUtil';
7
+
8
+ /*
9
+ * @class Polygon
10
+ * @aka L.Polygon
11
+ * @inherits Polyline
12
+ *
13
+ * A class for drawing polygon overlays on a map. Extends `Polyline`.
14
+ *
15
+ * Note that points you pass when creating a polygon shouldn't have an additional last point equal to the first one — it's better to filter out such points.
16
+ *
17
+ *
18
+ * @example
19
+ *
20
+ * ```js
21
+ * // create a red polygon from an array of LatLng points
22
+ * var latlngs = [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]];
23
+ *
24
+ * var polygon = L.polygon(latlngs, {color: 'red'}).addTo(map);
25
+ *
26
+ * // zoom the map to the polygon
27
+ * map.fitBounds(polygon.getBounds());
28
+ * ```
29
+ *
30
+ * You can also pass an array of arrays of latlngs, with the first array representing the outer shape and the other arrays representing holes in the outer shape:
31
+ *
32
+ * ```js
33
+ * var latlngs = [
34
+ * [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]], // outer ring
35
+ * [[37.29, -108.58],[40.71, -108.58],[40.71, -102.50],[37.29, -102.50]] // hole
36
+ * ];
37
+ * ```
38
+ *
39
+ * Additionally, you can pass a multi-dimensional array to represent a MultiPolygon shape.
40
+ *
41
+ * ```js
42
+ * var latlngs = [
43
+ * [ // first polygon
44
+ * [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]], // outer ring
45
+ * [[37.29, -108.58],[40.71, -108.58],[40.71, -102.50],[37.29, -102.50]] // hole
46
+ * ],
47
+ * [ // second polygon
48
+ * [[41, -111.03],[45, -111.04],[45, -104.05],[41, -104.05]]
49
+ * ]
50
+ * ];
51
+ * ```
52
+ */
53
+
54
+ export var Polygon = Polyline.extend({
55
+
56
+ options: {
57
+ fill: true
58
+ },
59
+
60
+ isEmpty: function () {
61
+ return !this._latlngs.length || !this._latlngs[0].length;
62
+ },
63
+
64
+ // @method getCenter(): LatLng
65
+ // Returns the center ([centroid](http://en.wikipedia.org/wiki/Centroid)) of the Polygon.
66
+ getCenter: function () {
67
+ // throws error when not yet added to map as this center calculation requires projected coordinates
68
+ if (!this._map) {
69
+ throw new Error('Must add layer to map before using getCenter()');
70
+ }
71
+ return PolyUtil.polygonCenter(this._defaultShape(), this._map.options.crs);
72
+ },
73
+
74
+ _convertLatLngs: function (latlngs) {
75
+ var result = Polyline.prototype._convertLatLngs.call(this, latlngs),
76
+ len = result.length;
77
+
78
+ // remove last point if it equals first one
79
+ if (len >= 2 && result[0] instanceof LatLng && result[0].equals(result[len - 1])) {
80
+ result.pop();
81
+ }
82
+ return result;
83
+ },
84
+
85
+ _setLatLngs: function (latlngs) {
86
+ Polyline.prototype._setLatLngs.call(this, latlngs);
87
+ if (LineUtil.isFlat(this._latlngs)) {
88
+ this._latlngs = [this._latlngs];
89
+ }
90
+ },
91
+
92
+ _defaultShape: function () {
93
+ return LineUtil.isFlat(this._latlngs[0]) ? this._latlngs[0] : this._latlngs[0][0];
94
+ },
95
+
96
+ _clipPoints: function () {
97
+ // polygons need a different clipping algorithm so we redefine that
98
+
99
+ var bounds = this._renderer._bounds,
100
+ w = this.options.weight,
101
+ p = new Point(w, w);
102
+
103
+ // increase clip padding by stroke width to avoid stroke on clip edges
104
+ bounds = new Bounds(bounds.min.subtract(p), bounds.max.add(p));
105
+
106
+ this._parts = [];
107
+ if (!this._pxBounds || !this._pxBounds.intersects(bounds)) {
108
+ return;
109
+ }
110
+
111
+ if (this.options.noClip) {
112
+ this._parts = this._rings;
113
+ return;
114
+ }
115
+
116
+ for (var i = 0, len = this._rings.length, clipped; i < len; i++) {
117
+ clipped = PolyUtil.clipPolygon(this._rings[i], bounds, true);
118
+ if (clipped.length) {
119
+ this._parts.push(clipped);
120
+ }
121
+ }
122
+ },
123
+
124
+ _updatePath: function () {
125
+ this._renderer._updatePoly(this, true);
126
+ },
127
+
128
+ // Needed by the `Canvas` renderer for interactivity
129
+ _containsPoint: function (p) {
130
+ var inside = false,
131
+ part, p1, p2, i, j, k, len, len2;
132
+
133
+ if (!this._pxBounds || !this._pxBounds.contains(p)) { return false; }
134
+
135
+ // ray casting algorithm for detecting if point is in polygon
136
+ for (i = 0, len = this._parts.length; i < len; i++) {
137
+ part = this._parts[i];
138
+
139
+ for (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) {
140
+ p1 = part[j];
141
+ p2 = part[k];
142
+
143
+ if (((p1.y > p.y) !== (p2.y > p.y)) && (p.x < (p2.x - p1.x) * (p.y - p1.y) / (p2.y - p1.y) + p1.x)) {
144
+ inside = !inside;
145
+ }
146
+ }
147
+ }
148
+
149
+ // also check if it's on polygon stroke
150
+ return inside || Polyline.prototype._containsPoint.call(this, p, true);
151
+ }
152
+
153
+ });
154
+
155
+
156
+ // @factory L.polygon(latlngs: LatLng[], options?: Polyline options)
157
+ export function polygon(latlngs, options) {
158
+ return new Polygon(latlngs, options);
159
+ }
@@ -0,0 +1,307 @@
1
+ import {Path} from './Path';
2
+ import * as Util from '../../core/Util';
3
+ import * as LineUtil from '../../geometry/LineUtil';
4
+ import {LatLng, toLatLng} from '../../geo/LatLng';
5
+ import {LatLngBounds} from '../../geo/LatLngBounds';
6
+ import {Bounds} from '../../geometry/Bounds';
7
+ import {Point} from '../../geometry/Point';
8
+
9
+ /*
10
+ * @class Polyline
11
+ * @aka L.Polyline
12
+ * @inherits Path
13
+ *
14
+ * A class for drawing polyline overlays on a map. Extends `Path`.
15
+ *
16
+ * @example
17
+ *
18
+ * ```js
19
+ * // create a red polyline from an array of LatLng points
20
+ * var latlngs = [
21
+ * [45.51, -122.68],
22
+ * [37.77, -122.43],
23
+ * [34.04, -118.2]
24
+ * ];
25
+ *
26
+ * var polyline = L.polyline(latlngs, {color: 'red'}).addTo(map);
27
+ *
28
+ * // zoom the map to the polyline
29
+ * map.fitBounds(polyline.getBounds());
30
+ * ```
31
+ *
32
+ * You can also pass a multi-dimensional array to represent a `MultiPolyline` shape:
33
+ *
34
+ * ```js
35
+ * // create a red polyline from an array of arrays of LatLng points
36
+ * var latlngs = [
37
+ * [[45.51, -122.68],
38
+ * [37.77, -122.43],
39
+ * [34.04, -118.2]],
40
+ * [[40.78, -73.91],
41
+ * [41.83, -87.62],
42
+ * [32.76, -96.72]]
43
+ * ];
44
+ * ```
45
+ */
46
+
47
+
48
+ export var Polyline = Path.extend({
49
+
50
+ // @section
51
+ // @aka Polyline options
52
+ options: {
53
+ // @option smoothFactor: Number = 1.0
54
+ // How much to simplify the polyline on each zoom level. More means
55
+ // better performance and smoother look, and less means more accurate representation.
56
+ smoothFactor: 1.0,
57
+
58
+ // @option noClip: Boolean = false
59
+ // Disable polyline clipping.
60
+ noClip: false
61
+ },
62
+
63
+ initialize: function (latlngs, options) {
64
+ Util.setOptions(this, options);
65
+ this._setLatLngs(latlngs);
66
+ },
67
+
68
+ // @method getLatLngs(): LatLng[]
69
+ // Returns an array of the points in the path, or nested arrays of points in case of multi-polyline.
70
+ getLatLngs: function () {
71
+ return this._latlngs;
72
+ },
73
+
74
+ // @method setLatLngs(latlngs: LatLng[]): this
75
+ // Replaces all the points in the polyline with the given array of geographical points.
76
+ setLatLngs: function (latlngs) {
77
+ this._setLatLngs(latlngs);
78
+ return this.redraw();
79
+ },
80
+
81
+ // @method isEmpty(): Boolean
82
+ // Returns `true` if the Polyline has no LatLngs.
83
+ isEmpty: function () {
84
+ return !this._latlngs.length;
85
+ },
86
+
87
+ // @method closestLayerPoint(p: Point): Point
88
+ // Returns the point closest to `p` on the Polyline.
89
+ closestLayerPoint: function (p) {
90
+ var minDistance = Infinity,
91
+ minPoint = null,
92
+ closest = LineUtil._sqClosestPointOnSegment,
93
+ p1, p2;
94
+
95
+ for (var j = 0, jLen = this._parts.length; j < jLen; j++) {
96
+ var points = this._parts[j];
97
+
98
+ for (var i = 1, len = points.length; i < len; i++) {
99
+ p1 = points[i - 1];
100
+ p2 = points[i];
101
+
102
+ var sqDist = closest(p, p1, p2, true);
103
+
104
+ if (sqDist < minDistance) {
105
+ minDistance = sqDist;
106
+ minPoint = closest(p, p1, p2);
107
+ }
108
+ }
109
+ }
110
+ if (minPoint) {
111
+ minPoint.distance = Math.sqrt(minDistance);
112
+ }
113
+ return minPoint;
114
+ },
115
+
116
+ // @method getCenter(): LatLng
117
+ // Returns the center ([centroid](https://en.wikipedia.org/wiki/Centroid)) of the polyline.
118
+ getCenter: function () {
119
+ // throws error when not yet added to map as this center calculation requires projected coordinates
120
+ if (!this._map) {
121
+ throw new Error('Must add layer to map before using getCenter()');
122
+ }
123
+ return LineUtil.polylineCenter(this._defaultShape(), this._map.options.crs);
124
+ },
125
+
126
+ // @method getBounds(): LatLngBounds
127
+ // Returns the `LatLngBounds` of the path.
128
+ getBounds: function () {
129
+ return this._bounds;
130
+ },
131
+
132
+ // @method addLatLng(latlng: LatLng, latlngs?: LatLng[]): this
133
+ // Adds a given point to the polyline. By default, adds to the first ring of
134
+ // the polyline in case of a multi-polyline, but can be overridden by passing
135
+ // a specific ring as a LatLng array (that you can earlier access with [`getLatLngs`](#polyline-getlatlngs)).
136
+ addLatLng: function (latlng, latlngs) {
137
+ latlngs = latlngs || this._defaultShape();
138
+ latlng = toLatLng(latlng);
139
+ latlngs.push(latlng);
140
+ this._bounds.extend(latlng);
141
+ return this.redraw();
142
+ },
143
+
144
+ _setLatLngs: function (latlngs) {
145
+ this._bounds = new LatLngBounds();
146
+ this._latlngs = this._convertLatLngs(latlngs);
147
+ },
148
+
149
+ _defaultShape: function () {
150
+ return LineUtil.isFlat(this._latlngs) ? this._latlngs : this._latlngs[0];
151
+ },
152
+
153
+ // recursively convert latlngs input into actual LatLng instances; calculate bounds along the way
154
+ _convertLatLngs: function (latlngs) {
155
+ var result = [],
156
+ flat = LineUtil.isFlat(latlngs);
157
+
158
+ for (var i = 0, len = latlngs.length; i < len; i++) {
159
+ if (flat) {
160
+ result[i] = toLatLng(latlngs[i]);
161
+ this._bounds.extend(result[i]);
162
+ } else {
163
+ result[i] = this._convertLatLngs(latlngs[i]);
164
+ }
165
+ }
166
+
167
+ return result;
168
+ },
169
+
170
+ _project: function () {
171
+ var pxBounds = new Bounds();
172
+ this._rings = [];
173
+ this._projectLatlngs(this._latlngs, this._rings, pxBounds);
174
+
175
+ if (this._bounds.isValid() && pxBounds.isValid()) {
176
+ this._rawPxBounds = pxBounds;
177
+ this._updateBounds();
178
+ }
179
+ },
180
+
181
+ _updateBounds: function () {
182
+ var w = this._clickTolerance(),
183
+ p = new Point(w, w);
184
+
185
+ if (!this._rawPxBounds) {
186
+ return;
187
+ }
188
+
189
+ this._pxBounds = new Bounds([
190
+ this._rawPxBounds.min.subtract(p),
191
+ this._rawPxBounds.max.add(p)
192
+ ]);
193
+ },
194
+
195
+ // recursively turns latlngs into a set of rings with projected coordinates
196
+ _projectLatlngs: function (latlngs, result, projectedBounds) {
197
+ var flat = latlngs[0] instanceof LatLng,
198
+ len = latlngs.length,
199
+ i, ring;
200
+
201
+ if (flat) {
202
+ ring = [];
203
+ for (i = 0; i < len; i++) {
204
+ ring[i] = this._map.latLngToLayerPoint(latlngs[i]);
205
+ projectedBounds.extend(ring[i]);
206
+ }
207
+ result.push(ring);
208
+ } else {
209
+ for (i = 0; i < len; i++) {
210
+ this._projectLatlngs(latlngs[i], result, projectedBounds);
211
+ }
212
+ }
213
+ },
214
+
215
+ // clip polyline by renderer bounds so that we have less to render for performance
216
+ _clipPoints: function () {
217
+ var bounds = this._renderer._bounds;
218
+
219
+ this._parts = [];
220
+ if (!this._pxBounds || !this._pxBounds.intersects(bounds)) {
221
+ return;
222
+ }
223
+
224
+ if (this.options.noClip) {
225
+ this._parts = this._rings;
226
+ return;
227
+ }
228
+
229
+ var parts = this._parts,
230
+ i, j, k, len, len2, segment, points;
231
+
232
+ for (i = 0, k = 0, len = this._rings.length; i < len; i++) {
233
+ points = this._rings[i];
234
+
235
+ for (j = 0, len2 = points.length; j < len2 - 1; j++) {
236
+ segment = LineUtil.clipSegment(points[j], points[j + 1], bounds, j, true);
237
+
238
+ if (!segment) { continue; }
239
+
240
+ parts[k] = parts[k] || [];
241
+ parts[k].push(segment[0]);
242
+
243
+ // if segment goes out of screen, or it's the last one, it's the end of the line part
244
+ if ((segment[1] !== points[j + 1]) || (j === len2 - 2)) {
245
+ parts[k].push(segment[1]);
246
+ k++;
247
+ }
248
+ }
249
+ }
250
+ },
251
+
252
+ // simplify each clipped part of the polyline for performance
253
+ _simplifyPoints: function () {
254
+ var parts = this._parts,
255
+ tolerance = this.options.smoothFactor;
256
+
257
+ for (var i = 0, len = parts.length; i < len; i++) {
258
+ parts[i] = LineUtil.simplify(parts[i], tolerance);
259
+ }
260
+ },
261
+
262
+ _update: function () {
263
+ if (!this._map) { return; }
264
+
265
+ this._clipPoints();
266
+ this._simplifyPoints();
267
+ this._updatePath();
268
+ },
269
+
270
+ _updatePath: function () {
271
+ this._renderer._updatePoly(this);
272
+ },
273
+
274
+ // Needed by the `Canvas` renderer for interactivity
275
+ _containsPoint: function (p, closed) {
276
+ var i, j, k, len, len2, part,
277
+ w = this._clickTolerance();
278
+
279
+ if (!this._pxBounds || !this._pxBounds.contains(p)) { return false; }
280
+
281
+ // hit detection for polylines
282
+ for (i = 0, len = this._parts.length; i < len; i++) {
283
+ part = this._parts[i];
284
+
285
+ for (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) {
286
+ if (!closed && (j === 0)) { continue; }
287
+
288
+ if (LineUtil.pointToSegmentDistance(p, part[k], part[j]) <= w) {
289
+ return true;
290
+ }
291
+ }
292
+ }
293
+ return false;
294
+ }
295
+ });
296
+
297
+ // @factory L.polyline(latlngs: LatLng[], options?: Polyline options)
298
+ // Instantiates a polyline object given an array of geographical points and
299
+ // optionally an options object. You can create a `Polyline` object with
300
+ // multiple separate lines (`MultiPolyline`) by passing an array of arrays
301
+ // of geographic points.
302
+ export function polyline(latlngs, options) {
303
+ return new Polyline(latlngs, options);
304
+ }
305
+
306
+ // Retrocompat. Allow plugins to support Leaflet versions before and after 1.1.
307
+ Polyline._flat = LineUtil._flat;
@@ -0,0 +1,57 @@
1
+ import {Polygon} from './Polygon';
2
+ import {toLatLngBounds} from '../../geo/LatLngBounds';
3
+
4
+ /*
5
+ * L.Rectangle extends Polygon and creates a rectangle when passed a LatLngBounds object.
6
+ */
7
+
8
+ /*
9
+ * @class Rectangle
10
+ * @aka L.Rectangle
11
+ * @inherits Polygon
12
+ *
13
+ * A class for drawing rectangle overlays on a map. Extends `Polygon`.
14
+ *
15
+ * @example
16
+ *
17
+ * ```js
18
+ * // define rectangle geographical bounds
19
+ * var bounds = [[54.559322, -5.767822], [56.1210604, -3.021240]];
20
+ *
21
+ * // create an orange rectangle
22
+ * L.rectangle(bounds, {color: "#ff7800", weight: 1}).addTo(map);
23
+ *
24
+ * // zoom the map to the rectangle bounds
25
+ * map.fitBounds(bounds);
26
+ * ```
27
+ *
28
+ */
29
+
30
+
31
+ export var Rectangle = Polygon.extend({
32
+ initialize: function (latLngBounds, options) {
33
+ Polygon.prototype.initialize.call(this, this._boundsToLatLngs(latLngBounds), options);
34
+ },
35
+
36
+ // @method setBounds(latLngBounds: LatLngBounds): this
37
+ // Redraws the rectangle with the passed bounds.
38
+ setBounds: function (latLngBounds) {
39
+ return this.setLatLngs(this._boundsToLatLngs(latLngBounds));
40
+ },
41
+
42
+ _boundsToLatLngs: function (latLngBounds) {
43
+ latLngBounds = toLatLngBounds(latLngBounds);
44
+ return [
45
+ latLngBounds.getSouthWest(),
46
+ latLngBounds.getNorthWest(),
47
+ latLngBounds.getNorthEast(),
48
+ latLngBounds.getSouthEast()
49
+ ];
50
+ }
51
+ });
52
+
53
+
54
+ // @factory L.rectangle(latLngBounds: LatLngBounds, options?: Polyline options)
55
+ export function rectangle(latLngBounds, options) {
56
+ return new Rectangle(latLngBounds, options);
57
+ }