decidim 0.26.9 → 0.26.10

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.
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,183 @@
1
+ import {Map} from '../Map';
2
+ import {Handler} from '../../core/Handler';
3
+ import {on, off, stop} from '../../dom/DomEvent';
4
+ import {toPoint} from '../../geometry/Point';
5
+
6
+
7
+ /*
8
+ * L.Map.Keyboard is handling keyboard interaction with the map, enabled by default.
9
+ */
10
+
11
+ // @namespace Map
12
+ // @section Keyboard Navigation Options
13
+ Map.mergeOptions({
14
+ // @option keyboard: Boolean = true
15
+ // Makes the map focusable and allows users to navigate the map with keyboard
16
+ // arrows and `+`/`-` keys.
17
+ keyboard: true,
18
+
19
+ // @option keyboardPanDelta: Number = 80
20
+ // Amount of pixels to pan when pressing an arrow key.
21
+ keyboardPanDelta: 80
22
+ });
23
+
24
+ export var Keyboard = Handler.extend({
25
+
26
+ keyCodes: {
27
+ left: [37],
28
+ right: [39],
29
+ down: [40],
30
+ up: [38],
31
+ zoomIn: [187, 107, 61, 171],
32
+ zoomOut: [189, 109, 54, 173]
33
+ },
34
+
35
+ initialize: function (map) {
36
+ this._map = map;
37
+
38
+ this._setPanDelta(map.options.keyboardPanDelta);
39
+ this._setZoomDelta(map.options.zoomDelta);
40
+ },
41
+
42
+ addHooks: function () {
43
+ var container = this._map._container;
44
+
45
+ // make the container focusable by tabbing
46
+ if (container.tabIndex <= 0) {
47
+ container.tabIndex = '0';
48
+ }
49
+
50
+ on(container, {
51
+ focus: this._onFocus,
52
+ blur: this._onBlur,
53
+ mousedown: this._onMouseDown
54
+ }, this);
55
+
56
+ this._map.on({
57
+ focus: this._addHooks,
58
+ blur: this._removeHooks
59
+ }, this);
60
+ },
61
+
62
+ removeHooks: function () {
63
+ this._removeHooks();
64
+
65
+ off(this._map._container, {
66
+ focus: this._onFocus,
67
+ blur: this._onBlur,
68
+ mousedown: this._onMouseDown
69
+ }, this);
70
+
71
+ this._map.off({
72
+ focus: this._addHooks,
73
+ blur: this._removeHooks
74
+ }, this);
75
+ },
76
+
77
+ _onMouseDown: function () {
78
+ if (this._focused) { return; }
79
+
80
+ var body = document.body,
81
+ docEl = document.documentElement,
82
+ top = body.scrollTop || docEl.scrollTop,
83
+ left = body.scrollLeft || docEl.scrollLeft;
84
+
85
+ this._map._container.focus();
86
+
87
+ window.scrollTo(left, top);
88
+ },
89
+
90
+ _onFocus: function () {
91
+ this._focused = true;
92
+ this._map.fire('focus');
93
+ },
94
+
95
+ _onBlur: function () {
96
+ this._focused = false;
97
+ this._map.fire('blur');
98
+ },
99
+
100
+ _setPanDelta: function (panDelta) {
101
+ var keys = this._panKeys = {},
102
+ codes = this.keyCodes,
103
+ i, len;
104
+
105
+ for (i = 0, len = codes.left.length; i < len; i++) {
106
+ keys[codes.left[i]] = [-1 * panDelta, 0];
107
+ }
108
+ for (i = 0, len = codes.right.length; i < len; i++) {
109
+ keys[codes.right[i]] = [panDelta, 0];
110
+ }
111
+ for (i = 0, len = codes.down.length; i < len; i++) {
112
+ keys[codes.down[i]] = [0, panDelta];
113
+ }
114
+ for (i = 0, len = codes.up.length; i < len; i++) {
115
+ keys[codes.up[i]] = [0, -1 * panDelta];
116
+ }
117
+ },
118
+
119
+ _setZoomDelta: function (zoomDelta) {
120
+ var keys = this._zoomKeys = {},
121
+ codes = this.keyCodes,
122
+ i, len;
123
+
124
+ for (i = 0, len = codes.zoomIn.length; i < len; i++) {
125
+ keys[codes.zoomIn[i]] = zoomDelta;
126
+ }
127
+ for (i = 0, len = codes.zoomOut.length; i < len; i++) {
128
+ keys[codes.zoomOut[i]] = -zoomDelta;
129
+ }
130
+ },
131
+
132
+ _addHooks: function () {
133
+ on(document, 'keydown', this._onKeyDown, this);
134
+ },
135
+
136
+ _removeHooks: function () {
137
+ off(document, 'keydown', this._onKeyDown, this);
138
+ },
139
+
140
+ _onKeyDown: function (e) {
141
+ if (e.altKey || e.ctrlKey || e.metaKey) { return; }
142
+
143
+ var key = e.keyCode,
144
+ map = this._map,
145
+ offset;
146
+
147
+ if (key in this._panKeys) {
148
+ if (!map._panAnim || !map._panAnim._inProgress) {
149
+ offset = this._panKeys[key];
150
+ if (e.shiftKey) {
151
+ offset = toPoint(offset).multiplyBy(3);
152
+ }
153
+
154
+ if (map.options.maxBounds) {
155
+ offset = map._limitOffset(toPoint(offset), map.options.maxBounds);
156
+ }
157
+
158
+ if (map.options.worldCopyJump) {
159
+ var newLatLng = map.wrapLatLng(map.unproject(map.project(map.getCenter()).add(offset)));
160
+ map.panTo(newLatLng);
161
+ } else {
162
+ map.panBy(offset);
163
+ }
164
+ }
165
+ } else if (key in this._zoomKeys) {
166
+ map.setZoom(map.getZoom() + (e.shiftKey ? 3 : 1) * this._zoomKeys[key]);
167
+
168
+ } else if (key === 27 && map._popup && map._popup.options.closeOnEscapeKey) {
169
+ map.closePopup();
170
+
171
+ } else {
172
+ return;
173
+ }
174
+
175
+ stop(e);
176
+ }
177
+ });
178
+
179
+ // @section Handlers
180
+ // @section Handlers
181
+ // @property keyboard: Handler
182
+ // Keyboard navigation handler.
183
+ Map.addInitHook('addHandler', 'keyboard', Keyboard);
@@ -0,0 +1,91 @@
1
+ import {Map} from '../Map';
2
+ import {Handler} from '../../core/Handler';
3
+ import * as DomEvent from '../../dom/DomEvent';
4
+ import * as Util from '../../core/Util';
5
+
6
+ /*
7
+ * L.Handler.ScrollWheelZoom is used by L.Map to enable mouse scroll wheel zoom on the map.
8
+ */
9
+
10
+ // @namespace Map
11
+ // @section Interaction Options
12
+ Map.mergeOptions({
13
+ // @section Mouse wheel options
14
+ // @option scrollWheelZoom: Boolean|String = true
15
+ // Whether the map can be zoomed by using the mouse wheel. If passed `'center'`,
16
+ // it will zoom to the center of the view regardless of where the mouse was.
17
+ scrollWheelZoom: true,
18
+
19
+ // @option wheelDebounceTime: Number = 40
20
+ // Limits the rate at which a wheel can fire (in milliseconds). By default
21
+ // user can't zoom via wheel more often than once per 40 ms.
22
+ wheelDebounceTime: 40,
23
+
24
+ // @option wheelPxPerZoomLevel: Number = 60
25
+ // How many scroll pixels (as reported by [L.DomEvent.getWheelDelta](#domevent-getwheeldelta))
26
+ // mean a change of one full zoom level. Smaller values will make wheel-zooming
27
+ // faster (and vice versa).
28
+ wheelPxPerZoomLevel: 60
29
+ });
30
+
31
+ export var ScrollWheelZoom = Handler.extend({
32
+ addHooks: function () {
33
+ DomEvent.on(this._map._container, 'wheel', this._onWheelScroll, this);
34
+
35
+ this._delta = 0;
36
+ },
37
+
38
+ removeHooks: function () {
39
+ DomEvent.off(this._map._container, 'wheel', this._onWheelScroll, this);
40
+ },
41
+
42
+ _onWheelScroll: function (e) {
43
+ var delta = DomEvent.getWheelDelta(e);
44
+
45
+ var debounce = this._map.options.wheelDebounceTime;
46
+
47
+ this._delta += delta;
48
+ this._lastMousePos = this._map.mouseEventToContainerPoint(e);
49
+
50
+ if (!this._startTime) {
51
+ this._startTime = +new Date();
52
+ }
53
+
54
+ var left = Math.max(debounce - (+new Date() - this._startTime), 0);
55
+
56
+ clearTimeout(this._timer);
57
+ this._timer = setTimeout(Util.bind(this._performZoom, this), left);
58
+
59
+ DomEvent.stop(e);
60
+ },
61
+
62
+ _performZoom: function () {
63
+ var map = this._map,
64
+ zoom = map.getZoom(),
65
+ snap = this._map.options.zoomSnap || 0;
66
+
67
+ map._stop(); // stop panning and fly animations if any
68
+
69
+ // map the delta with a sigmoid function to -4..4 range leaning on -1..1
70
+ var d2 = this._delta / (this._map.options.wheelPxPerZoomLevel * 4),
71
+ d3 = 4 * Math.log(2 / (1 + Math.exp(-Math.abs(d2)))) / Math.LN2,
72
+ d4 = snap ? Math.ceil(d3 / snap) * snap : d3,
73
+ delta = map._limitZoom(zoom + (this._delta > 0 ? d4 : -d4)) - zoom;
74
+
75
+ this._delta = 0;
76
+ this._startTime = null;
77
+
78
+ if (!delta) { return; }
79
+
80
+ if (map.options.scrollWheelZoom === 'center') {
81
+ map.setZoom(zoom + delta);
82
+ } else {
83
+ map.setZoomAround(this._lastMousePos, zoom + delta);
84
+ }
85
+ }
86
+ });
87
+
88
+ // @section Handlers
89
+ // @property scrollWheelZoom: Handler
90
+ // Scroll wheel zoom handler.
91
+ Map.addInitHook('addHandler', 'scrollWheelZoom', ScrollWheelZoom);
@@ -0,0 +1,102 @@
1
+ import {Map} from '../Map';
2
+ import {Handler} from '../../core/Handler';
3
+ import * as DomEvent from '../../dom/DomEvent';
4
+ import {Point} from '../../geometry/Point';
5
+ import * as Util from '../../core/Util';
6
+ import Browser from '../../core/Browser';
7
+
8
+ /*
9
+ * L.Map.TapHold is used to simulate `contextmenu` event on long hold,
10
+ * which otherwise is not fired by mobile Safari.
11
+ */
12
+
13
+ var tapHoldDelay = 600;
14
+
15
+ // @namespace Map
16
+ // @section Interaction Options
17
+ Map.mergeOptions({
18
+ // @section Touch interaction options
19
+ // @option tapHold: Boolean
20
+ // Enables simulation of `contextmenu` event, default is `true` for mobile Safari.
21
+ tapHold: Browser.touchNative && Browser.safari && Browser.mobile,
22
+
23
+ // @option tapTolerance: Number = 15
24
+ // The max number of pixels a user can shift his finger during touch
25
+ // for it to be considered a valid tap.
26
+ tapTolerance: 15
27
+ });
28
+
29
+ export var TapHold = Handler.extend({
30
+ addHooks: function () {
31
+ DomEvent.on(this._map._container, 'touchstart', this._onDown, this);
32
+ },
33
+
34
+ removeHooks: function () {
35
+ DomEvent.off(this._map._container, 'touchstart', this._onDown, this);
36
+ },
37
+
38
+ _onDown: function (e) {
39
+ clearTimeout(this._holdTimeout);
40
+ if (e.touches.length !== 1) { return; }
41
+
42
+ var first = e.touches[0];
43
+ this._startPos = this._newPos = new Point(first.clientX, first.clientY);
44
+
45
+ this._holdTimeout = setTimeout(Util.bind(function () {
46
+ this._cancel();
47
+ if (!this._isTapValid()) { return; }
48
+
49
+ // prevent simulated mouse events https://w3c.github.io/touch-events/#mouse-events
50
+ DomEvent.on(document, 'touchend', DomEvent.preventDefault);
51
+ DomEvent.on(document, 'touchend touchcancel', this._cancelClickPrevent);
52
+ this._simulateEvent('contextmenu', first);
53
+ }, this), tapHoldDelay);
54
+
55
+ DomEvent.on(document, 'touchend touchcancel contextmenu', this._cancel, this);
56
+ DomEvent.on(document, 'touchmove', this._onMove, this);
57
+ },
58
+
59
+ _cancelClickPrevent: function cancelClickPrevent() {
60
+ DomEvent.off(document, 'touchend', DomEvent.preventDefault);
61
+ DomEvent.off(document, 'touchend touchcancel', cancelClickPrevent);
62
+ },
63
+
64
+ _cancel: function () {
65
+ clearTimeout(this._holdTimeout);
66
+ DomEvent.off(document, 'touchend touchcancel contextmenu', this._cancel, this);
67
+ DomEvent.off(document, 'touchmove', this._onMove, this);
68
+ },
69
+
70
+ _onMove: function (e) {
71
+ var first = e.touches[0];
72
+ this._newPos = new Point(first.clientX, first.clientY);
73
+ },
74
+
75
+ _isTapValid: function () {
76
+ return this._newPos.distanceTo(this._startPos) <= this._map.options.tapTolerance;
77
+ },
78
+
79
+ _simulateEvent: function (type, e) {
80
+ var simulatedEvent = new MouseEvent(type, {
81
+ bubbles: true,
82
+ cancelable: true,
83
+ view: window,
84
+ // detail: 1,
85
+ screenX: e.screenX,
86
+ screenY: e.screenY,
87
+ clientX: e.clientX,
88
+ clientY: e.clientY,
89
+ // button: 2,
90
+ // buttons: 2
91
+ });
92
+
93
+ simulatedEvent._simulated = true;
94
+
95
+ e.target.dispatchEvent(simulatedEvent);
96
+ }
97
+ });
98
+
99
+ // @section Handlers
100
+ // @property tapHold: Handler
101
+ // Long tap handler to simulate `contextmenu` event (useful in mobile Safari).
102
+ Map.addInitHook('addHandler', 'tapHold', TapHold);
@@ -0,0 +1,130 @@
1
+ import {Map} from '../Map';
2
+ import {Handler} from '../../core/Handler';
3
+ import * as DomEvent from '../../dom/DomEvent';
4
+ import * as Util from '../../core/Util';
5
+ import * as DomUtil from '../../dom/DomUtil';
6
+ import Browser from '../../core/Browser';
7
+
8
+ /*
9
+ * L.Handler.TouchZoom is used by L.Map to add pinch zoom on supported mobile browsers.
10
+ */
11
+
12
+ // @namespace Map
13
+ // @section Interaction Options
14
+ Map.mergeOptions({
15
+ // @section Touch interaction options
16
+ // @option touchZoom: Boolean|String = *
17
+ // Whether the map can be zoomed by touch-dragging with two fingers. If
18
+ // passed `'center'`, it will zoom to the center of the view regardless of
19
+ // where the touch events (fingers) were. Enabled for touch-capable web
20
+ // browsers.
21
+ touchZoom: Browser.touch,
22
+
23
+ // @option bounceAtZoomLimits: Boolean = true
24
+ // Set it to false if you don't want the map to zoom beyond min/max zoom
25
+ // and then bounce back when pinch-zooming.
26
+ bounceAtZoomLimits: true
27
+ });
28
+
29
+ export var TouchZoom = Handler.extend({
30
+ addHooks: function () {
31
+ DomUtil.addClass(this._map._container, 'leaflet-touch-zoom');
32
+ DomEvent.on(this._map._container, 'touchstart', this._onTouchStart, this);
33
+ },
34
+
35
+ removeHooks: function () {
36
+ DomUtil.removeClass(this._map._container, 'leaflet-touch-zoom');
37
+ DomEvent.off(this._map._container, 'touchstart', this._onTouchStart, this);
38
+ },
39
+
40
+ _onTouchStart: function (e) {
41
+ var map = this._map;
42
+ if (!e.touches || e.touches.length !== 2 || map._animatingZoom || this._zooming) { return; }
43
+
44
+ var p1 = map.mouseEventToContainerPoint(e.touches[0]),
45
+ p2 = map.mouseEventToContainerPoint(e.touches[1]);
46
+
47
+ this._centerPoint = map.getSize()._divideBy(2);
48
+ this._startLatLng = map.containerPointToLatLng(this._centerPoint);
49
+ if (map.options.touchZoom !== 'center') {
50
+ this._pinchStartLatLng = map.containerPointToLatLng(p1.add(p2)._divideBy(2));
51
+ }
52
+
53
+ this._startDist = p1.distanceTo(p2);
54
+ this._startZoom = map.getZoom();
55
+
56
+ this._moved = false;
57
+ this._zooming = true;
58
+
59
+ map._stop();
60
+
61
+ DomEvent.on(document, 'touchmove', this._onTouchMove, this);
62
+ DomEvent.on(document, 'touchend touchcancel', this._onTouchEnd, this);
63
+
64
+ DomEvent.preventDefault(e);
65
+ },
66
+
67
+ _onTouchMove: function (e) {
68
+ if (!e.touches || e.touches.length !== 2 || !this._zooming) { return; }
69
+
70
+ var map = this._map,
71
+ p1 = map.mouseEventToContainerPoint(e.touches[0]),
72
+ p2 = map.mouseEventToContainerPoint(e.touches[1]),
73
+ scale = p1.distanceTo(p2) / this._startDist;
74
+
75
+ this._zoom = map.getScaleZoom(scale, this._startZoom);
76
+
77
+ if (!map.options.bounceAtZoomLimits && (
78
+ (this._zoom < map.getMinZoom() && scale < 1) ||
79
+ (this._zoom > map.getMaxZoom() && scale > 1))) {
80
+ this._zoom = map._limitZoom(this._zoom);
81
+ }
82
+
83
+ if (map.options.touchZoom === 'center') {
84
+ this._center = this._startLatLng;
85
+ if (scale === 1) { return; }
86
+ } else {
87
+ // Get delta from pinch to center, so centerLatLng is delta applied to initial pinchLatLng
88
+ var delta = p1._add(p2)._divideBy(2)._subtract(this._centerPoint);
89
+ if (scale === 1 && delta.x === 0 && delta.y === 0) { return; }
90
+ this._center = map.unproject(map.project(this._pinchStartLatLng, this._zoom).subtract(delta), this._zoom);
91
+ }
92
+
93
+ if (!this._moved) {
94
+ map._moveStart(true, false);
95
+ this._moved = true;
96
+ }
97
+
98
+ Util.cancelAnimFrame(this._animRequest);
99
+
100
+ var moveFn = Util.bind(map._move, map, this._center, this._zoom, {pinch: true, round: false}, undefined);
101
+ this._animRequest = Util.requestAnimFrame(moveFn, this, true);
102
+
103
+ DomEvent.preventDefault(e);
104
+ },
105
+
106
+ _onTouchEnd: function () {
107
+ if (!this._moved || !this._zooming) {
108
+ this._zooming = false;
109
+ return;
110
+ }
111
+
112
+ this._zooming = false;
113
+ Util.cancelAnimFrame(this._animRequest);
114
+
115
+ DomEvent.off(document, 'touchmove', this._onTouchMove, this);
116
+ DomEvent.off(document, 'touchend touchcancel', this._onTouchEnd, this);
117
+
118
+ // Pinch updates GridLayers' levels only when zoomSnap is off, so zoomSnap becomes noUpdate.
119
+ if (this._map.options.zoomAnimation) {
120
+ this._map._animateZoom(this._center, this._map._limitZoom(this._zoom), true, this._map.options.zoomSnap);
121
+ } else {
122
+ this._map._resetView(this._center, this._map._limitZoom(this._zoom));
123
+ }
124
+ }
125
+ });
126
+
127
+ // @section Handlers
128
+ // @property touchZoom: Handler
129
+ // Touch zoom handler.
130
+ Map.addInitHook('addHandler', 'touchZoom', TouchZoom);
@@ -0,0 +1,17 @@
1
+ import {Map} from './Map';
2
+ import {BoxZoom} from './handler/Map.BoxZoom';
3
+ Map.BoxZoom = BoxZoom;
4
+ import {DoubleClickZoom} from './handler/Map.DoubleClickZoom';
5
+ Map.DoubleClickZoom = DoubleClickZoom;
6
+ import {Drag} from './handler/Map.Drag';
7
+ Map.Drag = Drag;
8
+ import {Keyboard} from './handler/Map.Keyboard';
9
+ Map.Keyboard = Keyboard;
10
+ import {ScrollWheelZoom} from './handler/Map.ScrollWheelZoom';
11
+ Map.ScrollWheelZoom = ScrollWheelZoom;
12
+ import {TapHold} from './handler/Map.TapHold';
13
+ Map.TapHold = TapHold;
14
+ import {TouchZoom} from './handler/Map.TouchZoom';
15
+ Map.TouchZoom = TouchZoom;
16
+
17
+ export {Map, createMap as map} from './Map';
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@decidim/core",
3
3
  "description": "The core dependencies for Decidim",
4
- "version": "0.26.9",
4
+ "version": "0.26.10",
5
5
  "repository": {
6
6
  "url": "git@github.com:decidim/decidim.git",
7
7
  "type": "git",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@decidim/dev",
3
3
  "description": "The dev dependencies for Decidim",
4
- "version": "0.26.9",
4
+ "version": "0.26.10",
5
5
  "repository": {
6
6
  "url": "git@github.com:decidim/decidim.git",
7
7
  "type": "git",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@decidim/elections",
3
3
  "description": "The elections and votings dependencies for Decidim",
4
- "version": "0.26.9",
4
+ "version": "0.26.10",
5
5
  "repository": {
6
6
  "url": "git@github.com:decidim/decidim.git",
7
7
  "type": "git",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@decidim/eslint-config",
3
3
  "description": "The eslint configuration for Decidim",
4
- "version": "0.26.9",
4
+ "version": "0.26.10",
5
5
  "repository": {
6
6
  "url": "git@github.com:decidim/decidim.git",
7
7
  "type": "git",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@decidim/stylelint-config",
3
3
  "description": "The stylelint configuration for Decidim",
4
- "version": "0.26.9",
4
+ "version": "0.26.10",
5
5
  "repository": {
6
6
  "url": "git@github.com:decidim/decidim.git",
7
7
  "type": "git",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@decidim/webpacker",
3
3
  "description": "The webpacker dependencies for Decidim",
4
- "version": "0.26.9",
4
+ "version": "0.26.10",
5
5
  "repository": {
6
6
  "url": "git@github.com:decidim/decidim.git",
7
7
  "type": "git",