leaflet-js 0.6.beta4 → 0.7.0

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 (226) hide show
  1. checksums.yaml +6 -14
  2. data/CHANGELOG.rdoc +3 -0
  3. data/leaflet-js.gemspec +2 -2
  4. data/lib/leaflet.draw/CHANGELOG.md +45 -0
  5. data/lib/leaflet.draw/README.md +70 -23
  6. data/lib/leaflet.draw/build/deps.js +1 -0
  7. data/lib/leaflet.draw/dist/images/spritesheet-2x.png +0 -0
  8. data/lib/leaflet.draw/dist/images/spritesheet.png +0 -0
  9. data/lib/leaflet.draw/dist/leaflet.draw-src.js +489 -136
  10. data/lib/leaflet.draw/dist/leaflet.draw.css +34 -2
  11. data/lib/leaflet.draw/dist/leaflet.draw.ie.css +5 -0
  12. data/lib/leaflet.draw/dist/leaflet.draw.js +2 -2
  13. data/lib/leaflet.draw/examples/basic.html +14 -7
  14. data/lib/leaflet.draw/examples/libs/images/layers-2x.png +0 -0
  15. data/lib/leaflet.draw/examples/libs/images/layers.png +0 -0
  16. data/lib/leaflet.draw/examples/libs/images/marker-icon-2x.png +0 -0
  17. data/lib/leaflet.draw/examples/libs/leaflet-src.js +1129 -608
  18. data/lib/leaflet.draw/examples/libs/leaflet.css +85 -66
  19. data/lib/leaflet.draw/package.json +2 -2
  20. data/lib/leaflet.draw/spec/suites/DrawControlSpec.js +1 -1
  21. data/lib/leaflet.draw/spec/suites/GeometryUtilSpec.js +25 -0
  22. data/lib/leaflet.draw/spec/suites/LatLngUtilSpec.js +9 -0
  23. data/lib/leaflet.draw/src/Control.Draw.js +1 -0
  24. data/lib/leaflet.draw/src/Leaflet.draw.js +89 -1
  25. data/lib/leaflet.draw/src/Toolbar.js +2 -6
  26. data/lib/leaflet.draw/src/Tooltip.js +20 -7
  27. data/lib/leaflet.draw/src/draw/DrawToolbar.js +26 -22
  28. data/lib/leaflet.draw/src/draw/handler/Draw.Circle.js +11 -6
  29. data/lib/leaflet.draw/src/draw/handler/Draw.Feature.js +6 -2
  30. data/lib/leaflet.draw/src/draw/handler/Draw.Marker.js +7 -2
  31. data/lib/leaflet.draw/src/draw/handler/Draw.Polygon.js +29 -7
  32. data/lib/leaflet.draw/src/draw/handler/Draw.Polyline.js +44 -21
  33. data/lib/leaflet.draw/src/draw/handler/Draw.Rectangle.js +3 -3
  34. data/lib/leaflet.draw/src/draw/handler/Draw.SimpleShape.js +14 -1
  35. data/lib/leaflet.draw/src/edit/EditToolbar.js +86 -16
  36. data/lib/leaflet.draw/src/edit/handler/Edit.Poly.js +10 -7
  37. data/lib/leaflet.draw/src/edit/handler/Edit.SimpleShape.js +1 -2
  38. data/lib/leaflet.draw/src/edit/handler/EditToolbar.Delete.js +15 -3
  39. data/lib/leaflet.draw/src/edit/handler/EditToolbar.Edit.js +56 -38
  40. data/lib/leaflet.draw/src/ext/GeometryUtil.js +68 -0
  41. data/lib/leaflet.draw/src/images/spritesheet.svg +41 -0
  42. data/lib/leaflet.label/CHANGELOG.md +32 -0
  43. data/lib/leaflet.label/README.md +21 -4
  44. data/lib/leaflet.label/build/build.js +2 -2
  45. data/lib/leaflet.label/build/deps.js +2 -0
  46. data/lib/leaflet.label/build/hintrc.js +4 -0
  47. data/lib/leaflet.label/dist/leaflet.label-src.js +266 -83
  48. data/lib/leaflet.label/dist/leaflet.label.css +23 -4
  49. data/lib/leaflet.label/dist/leaflet.label.js +1 -1
  50. data/lib/leaflet.label/example/label.html +6 -3
  51. data/lib/leaflet.label/libs/leaflet/images/layers-2x.png +0 -0
  52. data/lib/leaflet.label/libs/leaflet/images/layers.png +0 -0
  53. data/lib/leaflet.label/libs/leaflet/images/marker-icon-2x.png +0 -0
  54. data/lib/leaflet.label/libs/leaflet/leaflet-src.js +1129 -608
  55. data/lib/leaflet.label/libs/leaflet/leaflet.css +85 -66
  56. data/lib/leaflet.label/libs/leaflet/leaflet.js +6 -5
  57. data/lib/leaflet.label/package.json +19 -0
  58. data/lib/leaflet.label/src/BaseMarkerMethods.js +129 -0
  59. data/lib/leaflet.label/src/CircleMarker.Label.js +7 -0
  60. data/lib/leaflet.label/src/Label.js +161 -37
  61. data/lib/leaflet.label/src/Leaflet.label.js +1 -1
  62. data/lib/leaflet.label/src/Map.Label.js +0 -2
  63. data/lib/leaflet.label/src/Marker.Label.js +15 -120
  64. data/lib/leaflet.label/src/Path.Label.js +11 -11
  65. data/lib/leaflet/CHANGELOG.md +299 -31
  66. data/lib/leaflet/CONTRIBUTING.md +3 -3
  67. data/lib/leaflet/FAQ.md +138 -0
  68. data/lib/leaflet/Jakefile.js +24 -4
  69. data/lib/leaflet/PLUGIN-GUIDE.md +127 -0
  70. data/lib/leaflet/README.md +10 -6
  71. data/lib/leaflet/build/build.html +3 -19
  72. data/lib/leaflet/build/build.js +21 -51
  73. data/lib/leaflet/build/deps.js +10 -7
  74. data/lib/leaflet/build/hintrc.js +6 -4
  75. data/lib/leaflet/debug/hacks/jitter.html +0 -1
  76. data/lib/leaflet/debug/map/canvas.html +11 -12
  77. data/lib/leaflet/debug/map/controls.html +3 -4
  78. data/lib/leaflet/debug/map/geolocation.html +0 -1
  79. data/lib/leaflet/debug/map/iframe.html +11 -0
  80. data/lib/leaflet/debug/map/image-overlay.html +0 -1
  81. data/lib/leaflet/debug/map/map-mobile.html +0 -1
  82. data/lib/leaflet/debug/map/map.html +1 -2
  83. data/lib/leaflet/debug/map/max-bounds.html +2 -1
  84. data/lib/leaflet/debug/map/opacity.html +223 -0
  85. data/lib/leaflet/debug/map/scroll.html +6 -1
  86. data/lib/leaflet/debug/map/simple-proj.html +0 -1
  87. data/lib/leaflet/debug/map/wms-marble.html +4 -5
  88. data/lib/leaflet/debug/map/wms.html +0 -1
  89. data/lib/leaflet/debug/map/zoomlevels.html +0 -1
  90. data/lib/leaflet/debug/tests/add_remove_layers.html +5 -6
  91. data/lib/leaflet/debug/tests/bringtoback.html +0 -1
  92. data/lib/leaflet/debug/tests/canvasloop.html +47 -0
  93. data/lib/leaflet/debug/tests/click_on_canvas.html +0 -1
  94. data/lib/leaflet/debug/tests/dragging_and_copyworldjump.html +61 -0
  95. data/lib/leaflet/debug/tests/opacity.html +0 -1
  96. data/lib/leaflet/debug/tests/popupcontextmenuclicks.html +59 -0
  97. data/lib/leaflet/debug/tests/remove_while_dragging.html +4 -5
  98. data/lib/leaflet/debug/tests/removetilewhilepan.html +0 -1
  99. data/lib/leaflet/debug/tests/reuse_popups.html +0 -1
  100. data/lib/leaflet/debug/tests/rtl.html +42 -0
  101. data/lib/leaflet/debug/tests/rtl2.html +27 -0
  102. data/lib/leaflet/debug/tests/set_icon_reuse_dom.html +43 -0
  103. data/lib/leaflet/debug/tests/svg_clicks.html +3 -4
  104. data/lib/leaflet/debug/vector/bounds-extend.html +0 -1
  105. data/lib/leaflet/debug/vector/feature-group-bounds.html +0 -1
  106. data/lib/leaflet/debug/vector/geojson.html +0 -1
  107. data/lib/leaflet/debug/vector/rectangle.html +0 -1
  108. data/lib/leaflet/debug/vector/touchzoomemu.html +2 -3
  109. data/lib/leaflet/debug/vector/vector-bounds.html +0 -1
  110. data/lib/leaflet/debug/vector/vector-canvas.html +0 -1
  111. data/lib/leaflet/debug/vector/vector-mobile.html +0 -1
  112. data/lib/leaflet/debug/vector/vector-simple.html +0 -1
  113. data/lib/leaflet/debug/vector/vector.html +0 -1
  114. data/lib/leaflet/dist/images/layers-2x.png +0 -0
  115. data/lib/leaflet/dist/images/layers.png +0 -0
  116. data/lib/leaflet/dist/leaflet.css +85 -66
  117. data/lib/leaflet/package.json +25 -20
  118. data/lib/leaflet/spec/after.js +1 -1
  119. data/lib/leaflet/spec/index.html +21 -13
  120. data/lib/leaflet/spec/karma.conf.js +51 -50
  121. data/lib/leaflet/spec/spec.hintrc.js +25 -0
  122. data/lib/leaflet/spec/suites/LeafletSpec.js +2 -2
  123. data/lib/leaflet/spec/suites/SpecHelper.js +37 -21
  124. data/lib/leaflet/spec/suites/control/Control.LayersSpec.js +1 -1
  125. data/lib/leaflet/spec/suites/core/ClassSpec.js +12 -12
  126. data/lib/leaflet/spec/suites/core/EventsSpec.js +74 -18
  127. data/lib/leaflet/spec/suites/core/UtilSpec.js +69 -25
  128. data/lib/leaflet/spec/suites/dom/DomEventSpec.js +16 -16
  129. data/lib/leaflet/spec/suites/dom/DomUtilSpec.js +9 -16
  130. data/lib/leaflet/spec/suites/dom/PosAnimationSpec.js +27 -0
  131. data/lib/leaflet/spec/suites/geo/CRSSpec.js +47 -0
  132. data/lib/leaflet/spec/suites/geo/LatLngBoundsSpec.js +22 -14
  133. data/lib/leaflet/spec/suites/geo/LatLngSpec.js +22 -8
  134. data/lib/leaflet/spec/suites/geo/ProjectionSpec.js +21 -20
  135. data/lib/leaflet/spec/suites/geometry/BoundsSpec.js +15 -15
  136. data/lib/leaflet/spec/suites/geometry/PointSpec.js +12 -12
  137. data/lib/leaflet/spec/suites/geometry/TransformationSpec.js +4 -4
  138. data/lib/leaflet/spec/suites/layer/FeatureGroupSpec.js +59 -9
  139. data/lib/leaflet/spec/suites/layer/GeoJSONSpec.js +213 -17
  140. data/lib/leaflet/spec/suites/layer/LayerGroupSpec.js +6 -6
  141. data/lib/leaflet/spec/suites/layer/PopupSpec.js +65 -5
  142. data/lib/leaflet/spec/suites/layer/TileLayerSpec.js +16 -15
  143. data/lib/leaflet/spec/suites/layer/marker/MarkerSpec.js +94 -0
  144. data/lib/leaflet/spec/suites/layer/vector/CircleMarkerSpec.js +7 -7
  145. data/lib/leaflet/spec/suites/layer/vector/PolygonSpec.js +38 -2
  146. data/lib/leaflet/spec/suites/layer/vector/PolylineGeometrySpec.js +4 -4
  147. data/lib/leaflet/spec/suites/layer/vector/PolylineSpec.js +2 -2
  148. data/lib/leaflet/spec/suites/map/MapSpec.js +318 -26
  149. data/lib/leaflet/spec/suites/map/handler/Map.DragSpec.js +38 -0
  150. data/lib/leaflet/src/Leaflet.js +2 -2
  151. data/lib/leaflet/src/control/Control.Attribution.js +6 -0
  152. data/lib/leaflet/src/control/Control.Layers.js +33 -24
  153. data/lib/leaflet/src/control/Control.Zoom.js +12 -4
  154. data/lib/leaflet/src/control/Control.js +10 -0
  155. data/lib/leaflet/src/copyright.js +2 -1
  156. data/lib/leaflet/src/core/Browser.js +11 -10
  157. data/lib/leaflet/src/core/Events.js +15 -11
  158. data/lib/leaflet/src/core/Util.js +19 -14
  159. data/lib/leaflet/src/dom/DomEvent.DoubleTap.js +13 -12
  160. data/lib/leaflet/src/dom/DomEvent.Pointer.js +155 -0
  161. data/lib/leaflet/src/dom/DomEvent.js +57 -19
  162. data/lib/leaflet/src/dom/DomUtil.js +89 -34
  163. data/lib/leaflet/src/dom/Draggable.js +26 -89
  164. data/lib/leaflet/src/dom/PosAnimation.js +13 -2
  165. data/lib/leaflet/src/geo/LatLng.js +16 -5
  166. data/lib/leaflet/src/geo/LatLngBounds.js +5 -2
  167. data/lib/leaflet/src/geo/crs/CRS.EPSG3395.js +2 -2
  168. data/lib/leaflet/src/geo/crs/CRS.js +5 -0
  169. data/lib/leaflet/src/geo/projection/Projection.Mercator.js +3 -3
  170. data/lib/leaflet/src/geometry/LineUtil.js +2 -2
  171. data/lib/leaflet/src/images/layers.svg +8 -0
  172. data/lib/leaflet/src/images/marker.svg +61 -1
  173. data/lib/leaflet/src/layer/FeatureGroup.js +24 -7
  174. data/lib/leaflet/src/layer/GeoJSON.js +97 -56
  175. data/lib/leaflet/src/layer/ImageOverlay.js +9 -0
  176. data/lib/leaflet/src/layer/LayerGroup.js +8 -3
  177. data/lib/leaflet/src/layer/Popup.js +56 -34
  178. data/lib/leaflet/src/layer/marker/DivIcon.js +4 -2
  179. data/lib/leaflet/src/layer/marker/Icon.Default.js +1 -1
  180. data/lib/leaflet/src/layer/marker/Icon.js +15 -18
  181. data/lib/leaflet/src/layer/marker/Marker.Drag.js +7 -5
  182. data/lib/leaflet/src/layer/marker/Marker.Popup.js +22 -5
  183. data/lib/leaflet/src/layer/marker/Marker.js +75 -32
  184. data/lib/leaflet/src/layer/tile/TileLayer.Anim.js +14 -26
  185. data/lib/leaflet/src/layer/tile/TileLayer.Canvas.js +7 -6
  186. data/lib/leaflet/src/layer/tile/TileLayer.WMS.js +14 -10
  187. data/lib/leaflet/src/layer/tile/TileLayer.js +53 -32
  188. data/lib/leaflet/src/layer/vector/CircleMarker.js +11 -0
  189. data/lib/leaflet/src/layer/vector/MultiPoly.js +10 -0
  190. data/lib/leaflet/src/layer/vector/Path.SVG.js +14 -3
  191. data/lib/leaflet/src/layer/vector/Path.VML.js +12 -2
  192. data/lib/leaflet/src/layer/vector/Path.js +7 -3
  193. data/lib/leaflet/src/layer/vector/Polygon.js +14 -3
  194. data/lib/leaflet/src/layer/vector/canvas/CircleMarker.Canvas.js +9 -0
  195. data/lib/leaflet/src/layer/vector/canvas/Path.Canvas.js +1 -0
  196. data/lib/leaflet/src/map/Map.js +192 -125
  197. data/lib/leaflet/src/map/anim/Map.PanAnimation.js +29 -19
  198. data/lib/leaflet/src/map/anim/Map.ZoomAnimation.js +21 -9
  199. data/lib/leaflet/src/map/ext/Map.Geolocation.js +11 -4
  200. data/lib/leaflet/src/map/handler/Map.BoxZoom.js +26 -12
  201. data/lib/leaflet/src/map/handler/Map.DoubleClickZoom.js +10 -3
  202. data/lib/leaflet/src/map/handler/Map.Drag.js +12 -6
  203. data/lib/leaflet/src/map/handler/Map.Keyboard.js +5 -2
  204. data/lib/leaflet/src/map/handler/Map.ScrollWheelZoom.js +7 -1
  205. data/lib/leaflet/src/map/handler/Map.Tap.js +107 -0
  206. data/lib/leaflet/src/map/handler/Map.TouchZoom.js +9 -3
  207. data/vendor/assets/images/layers-2x.png +0 -0
  208. data/vendor/assets/images/layers.png +0 -0
  209. data/vendor/assets/images/spritesheet-2x.png +0 -0
  210. data/vendor/assets/images/spritesheet.png +0 -0
  211. data/vendor/assets/javascripts/leaflet.draw.js +2 -4
  212. data/vendor/assets/javascripts/leaflet.js +3 -1
  213. data/vendor/assets/javascripts/leaflet.label.js +2 -0
  214. data/vendor/assets/stylesheets/leaflet.css.erb +337 -318
  215. data/vendor/assets/stylesheets/leaflet.draw.css.erb +35 -3
  216. data/vendor/assets/stylesheets/leaflet.draw.ie.css +5 -0
  217. data/vendor/assets/stylesheets/leaflet.label.css +23 -4
  218. metadata +40 -14
  219. data/lib/leaflet.draw/examples/libs/leaflet.ie.css +0 -51
  220. data/lib/leaflet.label/libs/leaflet/leaflet.ie.css +0 -51
  221. data/lib/leaflet/dist/leaflet-src.js +0 -8579
  222. data/lib/leaflet/dist/leaflet.ie.css +0 -51
  223. data/lib/leaflet/dist/leaflet.js +0 -8
  224. data/lib/leaflet/spec/happen.js +0 -93
  225. data/lib/leaflet/src/dom/DomEvent.MsTouch.js +0 -146
  226. data/vendor/assets/stylesheets/leaflet.ie.css +0 -51
@@ -10,20 +10,20 @@ L.Draggable = L.Class.extend({
10
10
  END: {
11
11
  mousedown: 'mouseup',
12
12
  touchstart: 'touchend',
13
+ pointerdown: 'touchend',
13
14
  MSPointerDown: 'touchend'
14
15
  },
15
16
  MOVE: {
16
17
  mousedown: 'mousemove',
17
18
  touchstart: 'touchmove',
19
+ pointerdown: 'touchmove',
18
20
  MSPointerDown: 'touchmove'
19
- },
20
- TAP_TOLERANCE: 15
21
+ }
21
22
  },
22
23
 
23
- initialize: function (element, dragStartTarget, longPress) {
24
+ initialize: function (element, dragStartTarget) {
24
25
  this._element = element;
25
26
  this._dragStartTarget = dragStartTarget || element;
26
- this._longPress = longPress && !L.Browser.msTouch;
27
27
  },
28
28
 
29
29
  enable: function () {
@@ -48,61 +48,34 @@ L.Draggable = L.Class.extend({
48
48
  },
49
49
 
50
50
  _onDown: function (e) {
51
+ this._moved = false;
52
+
51
53
  if (e.shiftKey || ((e.which !== 1) && (e.button !== 1) && !e.touches)) { return; }
52
54
 
53
- L.DomEvent
54
- .preventDefault(e)
55
- .stopPropagation(e);
55
+ L.DomEvent.stopPropagation(e);
56
56
 
57
57
  if (L.Draggable._disabled) { return; }
58
58
 
59
- this._simulateClick = true;
60
-
61
- var touchesNum = (e.touches && e.touches.length) || 0;
62
-
63
- // don't simulate click or track longpress if more than 1 touch
64
- if (touchesNum > 1) {
65
- this._simulateClick = false;
66
- clearTimeout(this._longPressTimeout);
67
- return;
68
- }
69
-
70
- var first = touchesNum === 1 ? e.touches[0] : e,
71
- el = first.target;
72
-
73
- // if touching a link, highlight it
74
- if (L.Browser.touch && el.tagName.toLowerCase() === 'a') {
75
- L.DomUtil.addClass(el, 'leaflet-active');
76
- }
77
-
78
- this._moved = false;
59
+ L.DomUtil.disableImageDrag();
60
+ L.DomUtil.disableTextSelection();
79
61
 
80
62
  if (this._moving) { return; }
81
63
 
64
+ var first = e.touches ? e.touches[0] : e;
65
+
82
66
  this._startPoint = new L.Point(first.clientX, first.clientY);
83
67
  this._startPos = this._newPos = L.DomUtil.getPosition(this._element);
84
68
 
85
- // touch contextmenu event emulation
86
- if (touchesNum === 1 && L.Browser.touch && this._longPress) {
87
-
88
- this._longPressTimeout = setTimeout(L.bind(function () {
89
- var dist = (this._newPos && this._newPos.distanceTo(this._startPos)) || 0;
90
-
91
- if (dist < L.Draggable.TAP_TOLERANCE) {
92
- this._simulateClick = false;
93
- this._onUp();
94
- this._simulateEvent('contextmenu', first);
95
- }
96
- }, this), 1000);
97
- }
98
-
99
69
  L.DomEvent
100
70
  .on(document, L.Draggable.MOVE[e.type], this._onMove, this)
101
71
  .on(document, L.Draggable.END[e.type], this._onUp, this);
102
72
  },
103
73
 
104
74
  _onMove: function (e) {
105
- if (e.touches && e.touches.length > 1) { return; }
75
+ if (e.touches && e.touches.length > 1) {
76
+ this._moved = true;
77
+ return;
78
+ }
106
79
 
107
80
  var first = (e.touches && e.touches.length === 1 ? e.touches[0] : e),
108
81
  newPoint = new L.Point(first.clientX, first.clientY),
@@ -118,10 +91,8 @@ L.Draggable = L.Class.extend({
118
91
  this._moved = true;
119
92
  this._startPos = L.DomUtil.getPosition(this._element).subtract(offset);
120
93
 
121
- if (!L.Browser.touch) {
122
- L.DomUtil.disableTextSelection();
123
- L.DomUtil.addClass(document.body, 'leaflet-dragging');
124
- }
94
+ L.DomUtil.addClass(document.body, 'leaflet-dragging');
95
+ L.DomUtil.addClass((e.target || e.srcElement), 'leaflet-drag-target');
125
96
  }
126
97
 
127
98
  this._newPos = this._startPos.add(offset);
@@ -138,61 +109,27 @@ L.Draggable = L.Class.extend({
138
109
  },
139
110
 
140
111
  _onUp: function (e) {
141
- var first, el, dist, simulateClickTouch, i;
142
-
143
- clearTimeout(this._longPressTimeout);
144
-
145
- if (this._simulateClick && e.changedTouches) {
146
-
147
- dist = (this._newPos && this._newPos.distanceTo(this._startPos)) || 0;
148
- first = e.changedTouches[0];
149
- el = first.target;
150
-
151
- if (el.tagName.toLowerCase() === 'a') {
152
- L.DomUtil.removeClass(el, 'leaflet-active');
153
- }
154
-
155
- // simulate click if the touch didn't move too much
156
- if (dist < L.Draggable.TAP_TOLERANCE) {
157
- simulateClickTouch = true;
158
- }
159
- }
112
+ L.DomUtil.removeClass(document.body, 'leaflet-dragging');
113
+ L.DomUtil.removeClass((e.target || e.srcElement), 'leaflet-drag-target');
160
114
 
161
- if (!L.Browser.touch) {
162
- L.DomUtil.enableTextSelection();
163
- L.DomUtil.removeClass(document.body, 'leaflet-dragging');
164
- }
165
-
166
- for (i in L.Draggable.MOVE) {
115
+ for (var i in L.Draggable.MOVE) {
167
116
  L.DomEvent
168
117
  .off(document, L.Draggable.MOVE[i], this._onMove)
169
118
  .off(document, L.Draggable.END[i], this._onUp);
170
119
  }
171
120
 
121
+ L.DomUtil.enableImageDrag();
122
+ L.DomUtil.enableTextSelection();
123
+
172
124
  if (this._moved) {
173
125
  // ensure drag is not fired after dragend
174
126
  L.Util.cancelAnimFrame(this._animRequest);
175
127
 
176
- this.fire('dragend');
128
+ this.fire('dragend', {
129
+ distance: this._newPos.distanceTo(this._startPos)
130
+ });
177
131
  }
178
132
 
179
133
  this._moving = false;
180
-
181
- if (simulateClickTouch) {
182
- this._moved = false;
183
- this._simulateEvent('click', first);
184
- }
185
- },
186
-
187
- _simulateEvent: function (type, e) {
188
- var simulatedEvent = document.createEvent('MouseEvents');
189
-
190
- simulatedEvent.initMouseEvent(
191
- type, true, true, window, 1,
192
- e.screenX, e.screenY,
193
- e.clientX, e.clientY,
194
- false, false, false, false, 0, null);
195
-
196
- e.target.dispatchEvent(simulatedEvent);
197
134
  }
198
135
  });
@@ -10,6 +10,7 @@ L.PosAnimation = L.Class.extend({
10
10
 
11
11
  this._el = el;
12
12
  this._inProgress = true;
13
+ this._newPos = newPos;
13
14
 
14
15
  this.fire('start');
15
16
 
@@ -38,9 +39,14 @@ L.PosAnimation = L.Class.extend({
38
39
  },
39
40
 
40
41
  _onStep: function () {
42
+ var stepPos = this._getPos();
43
+ if (!stepPos) {
44
+ this._onTransitionEnd();
45
+ return;
46
+ }
41
47
  // jshint camelcase: false
42
48
  // make L.DomUtil.getPosition return intermediate position value during animation
43
- this._el._leaflet_pos = this._getPos();
49
+ this._el._leaflet_pos = stepPos;
44
50
 
45
51
  this.fire('step');
46
52
  },
@@ -48,7 +54,7 @@ L.PosAnimation = L.Class.extend({
48
54
  // you can't easily get intermediate values of properties animated with CSS3 Transitions,
49
55
  // we need to parse computed style (in case of transform it returns matrix string)
50
56
 
51
- _transformRe: /(-?[\d\.]+), (-?[\d\.]+)\)/,
57
+ _transformRe: /([-+]?(?:\d*\.)?\d+)\D*, ([-+]?(?:\d*\.)?\d+)\D*\)/,
52
58
 
53
59
  _getPos: function () {
54
60
  var left, top, matches,
@@ -57,6 +63,7 @@ L.PosAnimation = L.Class.extend({
57
63
 
58
64
  if (L.Browser.any3d) {
59
65
  matches = style[L.DomUtil.TRANSFORM].match(this._transformRe);
66
+ if (!matches) { return; }
60
67
  left = parseFloat(matches[1]);
61
68
  top = parseFloat(matches[2]);
62
69
  } else {
@@ -75,6 +82,10 @@ L.PosAnimation = L.Class.extend({
75
82
 
76
83
  this._el.style[L.DomUtil.TRANSITION] = '';
77
84
 
85
+ // jshint camelcase: false
86
+ // make sure L.DomUtil.getPosition returns the final position value after animation
87
+ this._el._leaflet_pos = this._newPos;
88
+
78
89
  clearInterval(this._stepTimer);
79
90
 
80
91
  this.fire('step').fire('end');
@@ -2,16 +2,20 @@
2
2
  * L.LatLng represents a geographical point with latitude and longitude coordinates.
3
3
  */
4
4
 
5
- L.LatLng = function (rawLat, rawLng) { // (Number, Number)
6
- var lat = parseFloat(rawLat),
7
- lng = parseFloat(rawLng);
5
+ L.LatLng = function (lat, lng, alt) { // (Number, Number, Number)
6
+ lat = parseFloat(lat);
7
+ lng = parseFloat(lng);
8
8
 
9
9
  if (isNaN(lat) || isNaN(lng)) {
10
- throw new Error('Invalid LatLng object: (' + rawLat + ', ' + rawLng + ')');
10
+ throw new Error('Invalid LatLng object: (' + lat + ', ' + lng + ')');
11
11
  }
12
12
 
13
13
  this.lat = lat;
14
14
  this.lng = lng;
15
+
16
+ if (alt !== undefined) {
17
+ this.alt = parseFloat(alt);
18
+ }
15
19
  };
16
20
 
17
21
  L.extend(L.LatLng, {
@@ -75,7 +79,11 @@ L.latLng = function (a, b) { // (LatLng) or ([Number, Number]) or (Number, Numbe
75
79
  return a;
76
80
  }
77
81
  if (L.Util.isArray(a)) {
78
- return new L.LatLng(a[0], a[1]);
82
+ if (typeof a[0] === 'number' || typeof a[0] === 'string') {
83
+ return new L.LatLng(a[0], a[1], a[2]);
84
+ } else {
85
+ return null;
86
+ }
79
87
  }
80
88
  if (a === undefined || a === null) {
81
89
  return a;
@@ -83,6 +91,9 @@ L.latLng = function (a, b) { // (LatLng) or ([Number, Number]) or (Number, Numbe
83
91
  if (typeof a === 'object' && 'lat' in a) {
84
92
  return new L.LatLng(a.lat, 'lng' in a ? a.lng : a.lon);
85
93
  }
94
+ if (b === undefined) {
95
+ return null;
96
+ }
86
97
  return new L.LatLng(a, b);
87
98
  };
88
99
 
@@ -15,8 +15,11 @@ L.LatLngBounds = function (southWest, northEast) { // (LatLng, LatLng) or (LatLn
15
15
  L.LatLngBounds.prototype = {
16
16
  // extend the bounds to contain the given point or bounds
17
17
  extend: function (obj) { // (LatLng) or (LatLngBounds)
18
- if (typeof obj[0] === 'number' || typeof obj[0] === 'string' || obj instanceof L.LatLng) {
19
- obj = L.latLng(obj);
18
+ if (!obj) { return this; }
19
+
20
+ var latLng = L.latLng(obj);
21
+ if (latLng !== null) {
22
+ obj = latLng;
20
23
  } else {
21
24
  obj = L.latLngBounds(obj);
22
25
  }
@@ -7,8 +7,8 @@ L.CRS.EPSG3395 = L.extend({}, L.CRS, {
7
7
  transformation: (function () {
8
8
  var m = L.Projection.Mercator,
9
9
  r = m.R_MAJOR,
10
- r2 = m.R_MINOR;
10
+ scale = 0.5 / (Math.PI * r);
11
11
 
12
- return new L.Transformation(0.5 / (Math.PI * r), 0.5, -0.5 / (Math.PI * r2), 0.5);
12
+ return new L.Transformation(scale, 0.5, -scale, 0.5);
13
13
  }())
14
14
  });
@@ -23,5 +23,10 @@ L.CRS = {
23
23
 
24
24
  scale: function (zoom) {
25
25
  return 256 * Math.pow(2, zoom);
26
+ },
27
+
28
+ getSize: function (zoom) {
29
+ var s = this.scale(zoom);
30
+ return L.point(s, s);
26
31
  }
27
32
  };
@@ -6,7 +6,7 @@
6
6
  L.Projection.Mercator = {
7
7
  MAX_LATITUDE: 85.0840591556,
8
8
 
9
- R_MINOR: 6356752.3142,
9
+ R_MINOR: 6356752.314245179,
10
10
  R_MAJOR: 6378137,
11
11
 
12
12
  project: function (latlng) { // (LatLng) -> Point
@@ -24,7 +24,7 @@ L.Projection.Mercator = {
24
24
  con = Math.pow((1 - con) / (1 + con), eccent * 0.5);
25
25
 
26
26
  var ts = Math.tan(0.5 * ((Math.PI * 0.5) - y)) / con;
27
- y = -r2 * Math.log(ts);
27
+ y = -r * Math.log(ts);
28
28
 
29
29
  return new L.Point(x, y);
30
30
  },
@@ -36,7 +36,7 @@ L.Projection.Mercator = {
36
36
  lng = point.x * d / r,
37
37
  tmp = r2 / r,
38
38
  eccent = Math.sqrt(1 - (tmp * tmp)),
39
- ts = Math.exp(- point.y / r2),
39
+ ts = Math.exp(- point.y / r),
40
40
  phi = (Math.PI / 2) - 2 * Math.atan(ts),
41
41
  numIter = 15,
42
42
  tol = 1e-7,
@@ -117,8 +117,8 @@ L.LineUtil = {
117
117
  return false;
118
118
  // other cases
119
119
  } else {
120
- codeOut = codeA || codeB,
121
- p = this._getEdgeIntersection(a, b, codeOut, bounds),
120
+ codeOut = codeA || codeB;
121
+ p = this._getEdgeIntersection(a, b, codeOut, bounds);
122
122
  newCode = this._getBitCode(p, bounds);
123
123
 
124
124
  if (codeOut === codeA) {
@@ -0,0 +1,8 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" height="26" width="26">
2
+ <path d="M.032 17.056l13-8 13 8-13 8-13-8" fill="#b9b9b9"/>
3
+ <path d="M.032 17.056l-.032.93 13 8 13-8 .032-.93-13 8z" fill="#737373"/>
4
+ <path d="M0 13.076l13-8 13 8-13 8-13-8" fill="#cdcdcd"/>
5
+ <path d="M0 13.076v.91l13 8 13-8v-.91l-13 8z" fill="#737373"/>
6
+ <path d="M0 8.986l13-8 13 8-13 8-13-8" fill-opacity=".585" stroke="#797979" stroke-width=".1" fill="#e9e9e9"/>
7
+ <path d="M0 8.986v1l13 8 13-8v-1l-13 8z" fill="#737373"/>
8
+ </svg>
@@ -1 +1,61 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="744.094" height="1052.362"><defs><linearGradient id="b"><stop offset="0" stop-color="#2e6c97"/><stop offset="1" stop-color="#3883b7"/></linearGradient><linearGradient id="a"><stop offset="0" stop-color="#126fc6"/><stop offset="1" stop-color="#4c9cd1"/></linearGradient><linearGradient xlink:href="#a" x1="351.138" y1="551.589" x2="351.138" y2="512.928" gradientUnits="userSpaceOnUse" gradientTransform="translate(-2.715)"/><linearGradient xlink:href="#a" x1="318.571" y1="550.052" x2="318.571" y2="512.422" gradientUnits="userSpaceOnUse" gradientTransform="translate(94.732 2.054)"/><linearGradient xlink:href="#a" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-1 0 0 1 731.268 2.054)" x1="318.571" y1="550.052" x2="318.571" y2="512.422"/><linearGradient xlink:href="#a" gradientUnits="userSpaceOnUse" gradientTransform="translate(94.232 2.054)" x1="318.571" y1="550.052" x2="318.571" y2="512.422"/><linearGradient xlink:href="#a" gradientUnits="userSpaceOnUse" gradientTransform="translate(-28.58 -.437)" x1="445.301" y1="541.286" x2="445.301" y2="503.72"/><linearGradient xlink:href="#b" gradientUnits="userSpaceOnUse" gradientTransform="translate(63 -.438)" x1="351.748" y1="522.774" x2="351.748" y2="503.721"/><linearGradient xlink:href="#a" gradientUnits="userSpaceOnUse" gradientTransform="translate(-28.58 -.437)" x1="445.301" y1="541.286" x2="445.301" y2="503.72"/><linearGradient xlink:href="#b" gradientUnits="userSpaceOnUse" gradientTransform="translate(63 -.438)" x1="351.748" y1="522.774" x2="351.748" y2="503.721"/><linearGradient xlink:href="#a" gradientUnits="userSpaceOnUse" gradientTransform="translate(-28.58 -.437)" x1="445.301" y1="541.286" x2="445.301" y2="503.72"/><linearGradient xlink:href="#b" gradientUnits="userSpaceOnUse" gradientTransform="translate(63 -.438)" x1="351.748" y1="522.774" x2="351.748" y2="503.721"/><linearGradient xlink:href="#a" id="c" gradientUnits="userSpaceOnUse" gradientTransform="translate(-28.846 -.287)" x1="445.301" y1="541.286" x2="445.301" y2="503.72"/><linearGradient xlink:href="#b" id="d" gradientUnits="userSpaceOnUse" gradientTransform="translate(62.734 -.288)" x1="351.748" y1="522.774" x2="351.748" y2="503.721"/><linearGradient xlink:href="#a" gradientUnits="userSpaceOnUse" gradientTransform="translate(-28.846 -.287)" x1="445.301" y1="541.286" x2="445.301" y2="503.72"/><linearGradient xlink:href="#b" gradientUnits="userSpaceOnUse" gradientTransform="translate(62.734 -.288)" x1="351.748" y1="522.774" x2="351.748" y2="503.721"/></defs><g><image y="502.237" x="369.375" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAApCAYAAADAk4LOAAAABHNCSVQICAgIfAhkiAAABgRJREFU WIWdl2uIXGcZx3/nOjNnZueWZlPUtgiKF2gRugWD9UswJfWD+MG7WC1SQcGP6ZdAkvpp28LK0ohQ qASE0tKgELtaGiwEi0EWKXFtbKRmQ2wys5nZy8ycM+f+Pn6YvZ2dmd2J7/DAYc77vL/3/1zel6PN PPcn7mF8CqhsPl8H3MXTJw500mae++N+7+vAj4ATwHHbstANDYAoSlBKNYGLwKuLp5+8PB5ydiTE AE4Cp+q1cqlYLFB08kOTkiTF9Xy6XY++H7wFPLt45smlEZCFUbt/rVYpH6/VylimSZgqvChFJDvR NnWmbAOAjU6PldaqDzy1eOarF3bP00WEXVYXkb/Wq5Xjh++rk4hO24vpBSlKgUjWwljR9mJW+zGV 8hSf+NiRQqnovDFzduGnGcieEL1Rr1U/Uz9UY91P6IUpSjjQUgUtL8bO5anVqwAvzZxdOLYD2dna yUp56litXmO9nxClMnJBU9eQMbDVfoJl2Rw5Mm0g8trMmTfrg3AhCFIX5FS5UqUfKqJEUIptyxs6 tYJFrWBha0J187mSNzPzlIJWL8ZxilSq1cOCnNxUAgjfK09VSoZh4oZpJu51x8I2NNZWV7m5vIze X+Pm8g1WVlYIg4C6YwHZXHlhSqVSBeEnj57+g2Fulsy3nWKJMFGoXRVUyZuEQUiz8RFPf/nTPPX4 FynlB4u+vXSbFxaWCPNlapUqbS/e9vMiRcGyyOdy9SAIjuqClAQ5att5Ov00I93QNDqdDU597RF+ 9pXPbgMAnnj44/zmmcfxe+ukiSJn6EOhyxUcBDmhI/KgZVqGEkh3JdEydMIoYrqg+PqjD+3tJUSE B+pFvvHYQ3S7HfKWkSmCfqwwTRtEPq+LSF3T9aFKyZk6QeDz8AO1kQAApRRfeLCG73tDFZcoAU1H RComIpEoNUia2llIpYBAnKixABEhiFM0TRvy10RDDTrY10Fup0k8tBMvSrHzRRb/c5c4HQZtQf7y wR1y+RLJnr4yNI00SQC5rYtIM0liN1UKTdO2JwWJoOkmrspz7u33h1QAXPl3g0sfrJMvVugG2dNB 1zXiOEJEbhn3f+mbAjxmWIXPlQoFvFBlar7olHjvxl2u3rjD/VWHQ6Ucy3c7XPjbDZ5/cwmnPI1h 5ugGO/2lAQXLoLfWQKXJz7VHnn0d4JidL/65Ov1JWm6cCY1j6xRtg8DbwHfXSCIfw7TJORUKpTq6 YQ75HC5ZBN4G3dWPLl19/ltPbDXjO5HvXgl99+ghp0jbS3YaK1T4kXCoWCXnVDOL9WOF188CNAZq /N4aiPwCwITtFn/R763+zrJLqGyeUQgr3exi48Z0ySL0OsSh+87VF77zLmTvk4thf+PDOA4o582J jviRBvTdVURkdgu8+6hPEZnze21MQ/u/ADXHJPJdYr/793+8+N1L25A9t935oNdupWlCwRo+BQ4y TdPw3TYizO4OoU6W4iPyctBt4VgGopjYanmTJOgTe+vXEfl9BrLnjkdE5oNOw1dKYZuTq9F1jcBt ISKzS3PfT7NKNm+tXdYC+W3otpnKGRMBynmDNA6IvfYtkFf3VtzecG3ZXLhxKxUR9K3Dbx+zDZ3I bYHI3D9/+YNoCDIiXIjIdRFZiLw16gUDpWSsOZZOmkREvWZLRF4Z1TvjlIDIXOzdRbF/qAq2TuSu gMi59+d/6I6EjFGCiFxOg+6VNOhxX9EcuQ/H0hGVEnfvuCIyPwowLvG7bT72VkAb3ZxOziDuNQH5 9bWXnu6Mh+yf1Quq3/5QYp9Kwci8ypk6KCHp/jdCZG4c4KBwISKpiMwnbhPb0IfKNnYbiMj5a+d+ 3NwXckC4ADmfeo2WpDFFeyDc0jVEhLR7MwWZHb/8tpL9e0AEV4SXE6+JYw+as+qYJN4KIrz+r189 s3wg5MBOG9g51b0ViRJy5qaL2wA5WMWk4QKkCXJe9ZtU8gbKbyGJtwAy9FU1RskkDECYF68xUOE1 QJjduVQPgGx+OkzyuyaJd1GCFhJ1LgvyrkxImTQn20eNeHcGudj6byLIvY3LRJ1XgLfuxel/1MGY 0YvhJSIAAAAASUVORK5CYII=" height="41" width="25"/><rect y="507.575" x="410.279" height="14.5" width="12.625" fill="#fff"/><path d="m416.544 503.612c-6.573 0-12.044 5.691-12.044 11.866 0 2.778 1.564 6.308 2.694 8.746l9.306 17.872 9.262-17.872c1.13-2.438 2.738-5.791 2.738-8.746 0-6.175-5.383-11.866-11.956-11.866zm0 7.155c2.584.017 4.679 2.122 4.679 4.71s-2.095 4.663-4.679 4.679c-2.584-.017-4.679-2.09-4.679-4.679 0-2.588 2.095-4.693 4.679-4.71z" fill="url(#c)" stroke="url(#d)" stroke-width="1.1" stroke-linecap="round"/><text style="line-height:125%" x="403.75" y="489.362" font-size="4" letter-spacing="0" word-spacing="0" font-family="Sans"><tspan x="403.75" y="489.362">Use this one.</tspan><tspan x="403.75" y="494.362">Select it and the area around with box select.</tspan><tspan x="403.75" y="499.362">should be exactly 25x41 at 90dpi</tspan></text><text style="line-height:125%" x="408.708" y="563.751" font-size="40" letter-spacing="0" word-spacing="0" font-family="Sans"><tspan x="408.708" y="563.751" font-size="4">How to do the inset border:</tspan><tspan x="408.708" y="568.751" font-size="4">Delete the existing inset border. Select the background, duplicate.</tspan><tspan x="408.708" y="573.751" font-size="4">Path, Dynamic offset.</tspan><tspan x="408.708" y="578.751" font-size="4">Fill: None, Stroke Paint: RGBA #ffffff1f</tspan><tspan x="408.708" y="583.751" font-size="4">Zoom down to the top and grab the diamond, drag it down and fiddle it untill it looks in line</tspan><tspan x="408.708" y="588.751" font-size="4">with the main color layers border.</tspan></text><path d="m416.531 504.719c-5.944 0-10.938 5.219-10.938 10.75 0 2.359 1.443 5.832 2.563 8.25l.031.031 8.313 15.969 8.25-15.969.031-.031c1.135-2.448 2.625-5.706 2.625-8.25 0-5.538-4.931-10.75-10.875-10.75zm0 4.969c3.168.021 5.781 2.601 5.781 5.781 0 3.18-2.613 5.761-5.781 5.781-3.168-.02-5.75-2.61-5.75-5.781 0-3.172 2.582-5.761 5.75-5.781z" stroke="#fff" stroke-width="1.1" stroke-linecap="round" stroke-opacity=".122" fill="none"/></g></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="744.094" height="1052.362">
2
+ <defs>
3
+ <linearGradient id="b">
4
+ <stop offset="0" stop-color="#2e6c97"/>
5
+ <stop offset="1" stop-color="#3883b7"/>
6
+ </linearGradient>
7
+ <linearGradient id="a">
8
+ <stop offset="0" stop-color="#126fc6"/>
9
+ <stop offset="1" stop-color="#4c9cd1"/>
10
+ </linearGradient>
11
+ <linearGradient xlink:href="#a" x1="351.138" y1="551.589" x2="351.138" y2="512.928" gradientUnits="userSpaceOnUse" gradientTransform="translate(-2.715)"/>
12
+ <linearGradient xlink:href="#a" x1="318.571" y1="550.052" x2="318.571" y2="512.422" gradientUnits="userSpaceOnUse" gradientTransform="translate(94.732 2.054)"/>
13
+ <linearGradient xlink:href="#a" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-1 0 0 1 731.268 2.054)" x1="318.571" y1="550.052" x2="318.571" y2="512.422"/>
14
+ <linearGradient xlink:href="#a" gradientUnits="userSpaceOnUse" gradientTransform="translate(94.232 2.054)" x1="318.571" y1="550.052" x2="318.571" y2="512.422"/>
15
+ <linearGradient xlink:href="#a" gradientUnits="userSpaceOnUse" gradientTransform="translate(-28.58 -.437)" x1="445.301" y1="541.286" x2="445.301" y2="503.72"/>
16
+ <linearGradient xlink:href="#b" gradientUnits="userSpaceOnUse" gradientTransform="translate(63 -.438)" x1="351.748" y1="522.774" x2="351.748" y2="503.721"/>
17
+ <linearGradient xlink:href="#a" gradientUnits="userSpaceOnUse" gradientTransform="translate(-28.58 -.437)" x1="445.301" y1="541.286" x2="445.301" y2="503.72"/>
18
+ <linearGradient xlink:href="#b" gradientUnits="userSpaceOnUse" gradientTransform="translate(63 -.438)" x1="351.748" y1="522.774" x2="351.748" y2="503.721"/>
19
+ <linearGradient xlink:href="#a" gradientUnits="userSpaceOnUse" gradientTransform="translate(-28.58 -.437)" x1="445.301" y1="541.286" x2="445.301" y2="503.72"/>
20
+ <linearGradient xlink:href="#b" gradientUnits="userSpaceOnUse" gradientTransform="translate(63 -.438)" x1="351.748" y1="522.774" x2="351.748" y2="503.721"/>
21
+ <linearGradient xlink:href="#a" id="c" gradientUnits="userSpaceOnUse" gradientTransform="translate(-28.846 -.287)" x1="445.301" y1="541.286" x2="445.301" y2="503.72"/>
22
+ <linearGradient xlink:href="#b" id="d" gradientUnits="userSpaceOnUse" gradientTransform="translate(62.734 -.288)" x1="351.748" y1="522.774" x2="351.748" y2="503.721"/>
23
+ <linearGradient xlink:href="#a" gradientUnits="userSpaceOnUse" gradientTransform="translate(-28.846 -.287)" x1="445.301" y1="541.286" x2="445.301" y2="503.72"/>
24
+ <linearGradient xlink:href="#b" gradientUnits="userSpaceOnUse" gradientTransform="translate(62.734 -.288)" x1="351.748" y1="522.774" x2="351.748" y2="503.721"/>
25
+ </defs>
26
+ <image y="502.237" x="369.375" xlink:href="data:image/png;base64,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 0YvhJSIAAAAASUVORK5CYII=" height="41" width="25"/>
27
+ <rect y="507.575" x="410.279" height="14.5" width="12.625" fill="#fff"/>
28
+ <path d="M416.544 503.612c-6.573 0-12.044 5.691-12.044 11.866 0 2.778 1.564 6.308 2.694 8.746l9.306 17.872 9.262-17.872c1.13-2.438 2.738-5.791 2.738-8.746 0-6.175-5.383-11.866-11.956-11.866zm0 7.155c2.584.017 4.679 2.122 4.679 4.71s-2.095 4.663-4.679 4.679c-2.584-.017-4.679-2.09-4.679-4.679 0-2.588 2.095-4.693 4.679-4.71z" fill="url(#c)" stroke="url(#d)" stroke-width="1.1" stroke-linecap="round"/>
29
+ <text style="line-height:125%" x="403.75" y="489.362" font-size="4" letter-spacing="0" word-spacing="0" font-family="Sans">
30
+ <tspan x="403.75" y="489.362">
31
+ Use this one.
32
+ </tspan>
33
+ <tspan x="403.75" y="494.362">
34
+ Select it and the area around with box select.
35
+ </tspan>
36
+ <tspan x="403.75" y="499.362">
37
+ should be exactly 25x41 at 90dpi
38
+ </tspan>
39
+ </text>
40
+ <text style="line-height:125%" x="408.708" y="563.751" font-size="40" letter-spacing="0" word-spacing="0" font-family="Sans">
41
+ <tspan x="408.708" y="563.751" font-size="4">
42
+ How to do the inset border:
43
+ </tspan>
44
+ <tspan x="408.708" y="568.751" font-size="4">
45
+ Delete the existing inset border. Select the background, duplicate.
46
+ </tspan>
47
+ <tspan x="408.708" y="573.751" font-size="4">
48
+ Path, Dynamic offset.
49
+ </tspan>
50
+ <tspan x="408.708" y="578.751" font-size="4">
51
+ Fill: None, Stroke Paint: RGBA #ffffff1f
52
+ </tspan>
53
+ <tspan x="408.708" y="583.751" font-size="4">
54
+ Zoom down to the top and grab the diamond, drag it down and fiddle it untill it looks in line
55
+ </tspan>
56
+ <tspan x="408.708" y="588.751" font-size="4">
57
+ with the main color layers border.
58
+ </tspan>
59
+ </text>
60
+ <path d="M416.531 504.719c-5.944 0-10.938 5.219-10.938 10.75 0 2.359 1.443 5.832 2.563 8.25l.031.031 8.313 15.969 8.25-15.969.031-.031c1.135-2.448 2.625-5.706 2.625-8.25 0-5.538-4.931-10.75-10.875-10.75zm0 4.969c3.168.021 5.781 2.601 5.781 5.781 0 3.18-2.613 5.761-5.781 5.781-3.168-.02-5.75-2.61-5.75-5.781 0-3.172 2.582-5.761 5.75-5.781z" stroke="#fff" stroke-width="1.1" stroke-linecap="round" stroke-opacity=".122" fill="none"/>
61
+ </svg>
@@ -7,7 +7,7 @@ L.FeatureGroup = L.LayerGroup.extend({
7
7
  includes: L.Mixin.Events,
8
8
 
9
9
  statics: {
10
- EVENTS: 'click dblclick mouseover mouseout mousemove contextmenu'
10
+ EVENTS: 'click dblclick mouseover mouseout mousemove contextmenu popupopen popupclose'
11
11
  },
12
12
 
13
13
  addLayer: function (layer) {
@@ -15,7 +15,9 @@ L.FeatureGroup = L.LayerGroup.extend({
15
15
  return this;
16
16
  }
17
17
 
18
- layer.on(L.FeatureGroup.EVENTS, this._propagateEvent, this);
18
+ if ('on' in layer) {
19
+ layer.on(L.FeatureGroup.EVENTS, this._propagateEvent, this);
20
+ }
19
21
 
20
22
  L.LayerGroup.prototype.addLayer.call(this, layer);
21
23
 
@@ -27,6 +29,13 @@ L.FeatureGroup = L.LayerGroup.extend({
27
29
  },
28
30
 
29
31
  removeLayer: function (layer) {
32
+ if (!this.hasLayer(layer)) {
33
+ return this;
34
+ }
35
+ if (layer in this._layers) {
36
+ layer = this._layers[layer];
37
+ }
38
+
30
39
  layer.off(L.FeatureGroup.EVENTS, this._propagateEvent, this);
31
40
 
32
41
  L.LayerGroup.prototype.removeLayer.call(this, layer);
@@ -44,6 +53,15 @@ L.FeatureGroup = L.LayerGroup.extend({
44
53
  return this.invoke('bindPopup', content, options);
45
54
  },
46
55
 
56
+ openPopup: function (latlng) {
57
+ // open popup on the first layer
58
+ for (var id in this._layers) {
59
+ this._layers[id].openPopup(latlng);
60
+ break;
61
+ }
62
+ return this;
63
+ },
64
+
47
65
  setStyle: function (style) {
48
66
  return this.invoke('setStyle', style);
49
67
  },
@@ -67,11 +85,10 @@ L.FeatureGroup = L.LayerGroup.extend({
67
85
  },
68
86
 
69
87
  _propagateEvent: function (e) {
70
- if (!e.layer) {
71
- e.layer = e.target;
72
- }
73
- e.target = this;
74
-
88
+ e = L.extend({}, e, {
89
+ layer: e.target,
90
+ target: this
91
+ });
75
92
  this.fire(e.type, e);
76
93
  }
77
94
  });