leaflet-js 0.7.9 → 0.8.dev2

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 (341) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.rdoc +0 -10
  3. data/Rakefile +3 -3
  4. data/leaflet-js.gemspec +7 -13
  5. data/lib/leaflet-js.rb +10 -2
  6. data/lib/leaflet.draw/BREAKINGCHANGES.md +54 -0
  7. data/lib/leaflet.draw/CHANGELOG.md +130 -0
  8. data/lib/leaflet.draw/Jakefile.js +48 -0
  9. data/lib/leaflet.draw/MIT-LICENCE.txt +20 -0
  10. data/lib/leaflet.draw/README.md +427 -0
  11. data/lib/leaflet.draw/TODO.md +62 -0
  12. data/lib/leaflet.draw/build/build.html +243 -0
  13. data/lib/leaflet.draw/build/build.js +187 -0
  14. data/lib/leaflet.draw/build/deps.js +76 -0
  15. data/lib/leaflet.draw/build/hintrc.js +39 -0
  16. data/lib/leaflet.draw/build/leaflet.draw-include.js +42 -0
  17. data/{vendor/assets/Leaflet.draw → lib/leaflet.draw}/dist/images/spritesheet-2x.png +0 -0
  18. data/{vendor/assets/Leaflet.draw → lib/leaflet.draw}/dist/images/spritesheet.png +0 -0
  19. data/lib/leaflet.draw/dist/leaflet.draw-src.js +2872 -0
  20. data/lib/leaflet.draw/dist/leaflet.draw.css +295 -0
  21. data/lib/leaflet.draw/dist/leaflet.draw.js +10 -0
  22. data/lib/leaflet.draw/examples/basic.html +113 -0
  23. data/lib/leaflet.draw/examples/edithandlers.html +66 -0
  24. data/{vendor/assets/Leaflet/dist → lib/leaflet.draw/examples/libs}/images/layers-2x.png +0 -0
  25. data/{vendor/assets/Leaflet/dist → lib/leaflet.draw/examples/libs}/images/layers.png +0 -0
  26. data/{vendor/assets/Leaflet/dist → lib/leaflet.draw/examples/libs}/images/marker-icon-2x.png +0 -0
  27. data/{vendor/assets/Leaflet/dist → lib/leaflet.draw/examples/libs}/images/marker-icon.png +0 -0
  28. data/lib/leaflet.draw/examples/libs/images/marker-icon@2x.png +0 -0
  29. data/{vendor/assets/Leaflet/dist → lib/leaflet.draw/examples/libs}/images/marker-shadow.png +0 -0
  30. data/lib/leaflet.draw/examples/libs/leaflet-src.js +9191 -0
  31. data/{vendor/assets/leaflet.css.erb → lib/leaflet.draw/examples/libs/leaflet.css} +2 -2
  32. data/lib/leaflet.draw/package.json +40 -0
  33. data/lib/leaflet.draw/spec/after.js +2 -0
  34. data/lib/leaflet.draw/spec/before.js +3 -0
  35. data/lib/leaflet.draw/spec/expect.js +1253 -0
  36. data/lib/leaflet.draw/spec/happen.js +93 -0
  37. data/lib/leaflet.draw/spec/index.html +38 -0
  38. data/lib/leaflet.draw/spec/karma.conf.js +72 -0
  39. data/lib/leaflet.draw/spec/sinon.js +4223 -0
  40. data/lib/leaflet.draw/spec/spec.hintrc.js +25 -0
  41. data/lib/leaflet.draw/spec/suites/DrawControlSpec.js +14 -0
  42. data/lib/leaflet.draw/spec/suites/GeometryUtilSpec.js +25 -0
  43. data/lib/leaflet.draw/spec/suites/LatLngUtilSpec.js +11 -0
  44. data/lib/leaflet.draw/spec/suites/SpecHelper.js +28 -0
  45. data/{vendor/assets/Leaflet.draw → lib/leaflet.draw}/src/Control.Draw.js +9 -9
  46. data/{vendor/assets/Leaflet.draw → lib/leaflet.draw}/src/Leaflet.draw.js +1 -2
  47. data/{vendor/assets/Leaflet.draw → lib/leaflet.draw}/src/Toolbar.js +0 -0
  48. data/{vendor/assets/Leaflet.draw → lib/leaflet.draw}/src/Tooltip.js +0 -0
  49. data/{vendor/assets/Leaflet.draw → lib/leaflet.draw}/src/copyright.js +0 -0
  50. data/{vendor/assets/Leaflet.draw → lib/leaflet.draw}/src/draw/DrawToolbar.js +0 -4
  51. data/{vendor/assets/Leaflet.draw → lib/leaflet.draw}/src/draw/handler/Draw.Circle.js +1 -1
  52. data/{vendor/assets/Leaflet.draw → lib/leaflet.draw}/src/draw/handler/Draw.Feature.js +2 -2
  53. data/{vendor/assets/Leaflet.draw → lib/leaflet.draw}/src/draw/handler/Draw.Marker.js +0 -0
  54. data/{vendor/assets/Leaflet.draw → lib/leaflet.draw}/src/draw/handler/Draw.Polygon.js +0 -0
  55. data/{vendor/assets/Leaflet.draw → lib/leaflet.draw}/src/draw/handler/Draw.Polyline.js +0 -0
  56. data/{vendor/assets/Leaflet.draw → lib/leaflet.draw}/src/draw/handler/Draw.Rectangle.js +1 -19
  57. data/{vendor/assets/Leaflet.draw → lib/leaflet.draw}/src/draw/handler/Draw.SimpleShape.js +1 -7
  58. data/{vendor/assets/Leaflet.draw → lib/leaflet.draw}/src/edit/EditToolbar.js +2 -9
  59. data/{vendor/assets/Leaflet.draw → lib/leaflet.draw}/src/edit/handler/Edit.Circle.js +0 -0
  60. data/{vendor/assets/Leaflet.draw → lib/leaflet.draw}/src/edit/handler/Edit.Poly.js +2 -14
  61. data/{vendor/assets/Leaflet.draw → lib/leaflet.draw}/src/edit/handler/Edit.Rectangle.js +0 -0
  62. data/{vendor/assets/Leaflet.draw → lib/leaflet.draw}/src/edit/handler/Edit.SimpleShape.js +3 -11
  63. data/{vendor/assets/Leaflet.draw → lib/leaflet.draw}/src/edit/handler/EditToolbar.Delete.js +1 -4
  64. data/{vendor/assets/Leaflet.draw → lib/leaflet.draw}/src/edit/handler/EditToolbar.Edit.js +83 -17
  65. data/{vendor/assets/Leaflet.draw → lib/leaflet.draw}/src/ext/GeometryUtil.js +1 -1
  66. data/{vendor/assets/Leaflet.draw → lib/leaflet.draw}/src/ext/LatLngUtil.js +0 -0
  67. data/{vendor/assets/Leaflet.draw → lib/leaflet.draw}/src/ext/LineUtil.Intersect.js +0 -0
  68. data/{vendor/assets/Leaflet.draw → lib/leaflet.draw}/src/ext/Polygon.Intersect.js +0 -0
  69. data/{vendor/assets/Leaflet.draw → lib/leaflet.draw}/src/ext/Polyline.Intersect.js +0 -0
  70. data/{vendor/assets/Leaflet.draw → lib/leaflet.draw}/src/images/spritesheet.svg +0 -0
  71. data/lib/leaflet.label/CHANGELOG.md +67 -0
  72. data/lib/leaflet.label/Jakefile.js +21 -0
  73. data/lib/leaflet.label/MIT-LICENCE.txt +20 -0
  74. data/lib/leaflet.label/README.md +103 -0
  75. data/lib/leaflet.label/build/build.js +155 -0
  76. data/lib/leaflet.label/build/deps.js +26 -0
  77. data/lib/leaflet.label/build/hint.js +30 -0
  78. data/lib/leaflet.label/build/hintrc.js +51 -0
  79. data/lib/leaflet.label/dist/images/death.png +0 -0
  80. data/lib/leaflet.label/dist/leaflet.label-src.js +542 -0
  81. data/{vendor/assets → lib/leaflet.label/dist}/leaflet.label.css +0 -0
  82. data/lib/leaflet.label/dist/leaflet.label.js +9 -0
  83. data/lib/leaflet.label/example/label.html +85 -0
  84. data/lib/leaflet.label/libs/leaflet/images/layers-2x.png +0 -0
  85. data/lib/leaflet.label/libs/leaflet/images/layers.png +0 -0
  86. data/lib/leaflet.label/libs/leaflet/images/marker-icon-2x.png +0 -0
  87. data/lib/leaflet.label/libs/leaflet/images/marker-icon.png +0 -0
  88. data/lib/leaflet.label/libs/leaflet/images/marker-icon@2x.png +0 -0
  89. data/lib/leaflet.label/libs/leaflet/images/marker-shadow.png +0 -0
  90. data/lib/leaflet.label/libs/leaflet/leaflet-src.js +9108 -0
  91. data/lib/leaflet.label/libs/leaflet/leaflet.css +478 -0
  92. data/lib/leaflet.label/libs/leaflet/leaflet.js +9 -0
  93. data/lib/leaflet.label/package.json +19 -0
  94. data/{vendor/assets/Leaflet.label → lib/leaflet.label}/src/BaseMarkerMethods.js +0 -0
  95. data/{vendor/assets/Leaflet.label → lib/leaflet.label}/src/CircleMarker.Label.js +0 -0
  96. data/{vendor/assets/Leaflet.label → lib/leaflet.label}/src/FeatureGroup.Label.js +0 -0
  97. data/{vendor/assets/Leaflet.label → lib/leaflet.label}/src/Label.js +2 -5
  98. data/{vendor/assets/Leaflet.label → lib/leaflet.label}/src/Leaflet.label.js +1 -1
  99. data/{vendor/assets/Leaflet.label → lib/leaflet.label}/src/Map.Label.js +0 -0
  100. data/{vendor/assets/Leaflet.label → lib/leaflet.label}/src/Marker.Label.js +0 -0
  101. data/{vendor/assets/Leaflet.label → lib/leaflet.label}/src/Path.Label.js +0 -0
  102. data/{vendor/assets/Leaflet.label → lib/leaflet.label}/src/copyright.js +0 -0
  103. data/lib/leaflet/CHANGELOG.md +1007 -0
  104. data/lib/leaflet/CONTRIBUTING.md +155 -0
  105. data/lib/leaflet/FAQ.md +138 -0
  106. data/lib/leaflet/Jakefile.js +56 -0
  107. data/lib/leaflet/LICENSE +23 -0
  108. data/lib/leaflet/PLUGIN-GUIDE.md +127 -0
  109. data/lib/leaflet/README.md +34 -0
  110. data/lib/leaflet/build/build.html +227 -0
  111. data/lib/leaflet/build/build.js +190 -0
  112. data/lib/leaflet/build/deps.js +258 -0
  113. data/lib/leaflet/build/hintrc.js +40 -0
  114. data/lib/leaflet/debug/css/mobile.css +6 -0
  115. data/lib/leaflet/debug/css/screen.css +5 -0
  116. data/lib/leaflet/debug/hacks/jitter.html +42 -0
  117. data/lib/leaflet/debug/leaflet-include.js +59 -0
  118. data/lib/leaflet/debug/map/canvas.html +49 -0
  119. data/lib/leaflet/debug/map/controls.html +49 -0
  120. data/lib/leaflet/debug/map/geolocation.html +34 -0
  121. data/lib/leaflet/debug/map/grid.html +45 -0
  122. data/lib/leaflet/debug/map/iframe.html +11 -0
  123. data/lib/leaflet/debug/map/image-overlay.html +43 -0
  124. data/lib/leaflet/debug/map/map-mobile.html +34 -0
  125. data/lib/leaflet/debug/map/map.html +61 -0
  126. data/lib/leaflet/debug/map/max-bounds.html +38 -0
  127. data/lib/leaflet/debug/map/opacity.html +223 -0
  128. data/lib/leaflet/debug/map/scroll.html +41 -0
  129. data/lib/leaflet/debug/map/simple-proj.html +59 -0
  130. data/lib/leaflet/debug/map/wms-marble.html +30 -0
  131. data/lib/leaflet/debug/map/wms.html +40 -0
  132. data/lib/leaflet/debug/map/zoomlevels.html +45 -0
  133. data/lib/leaflet/debug/tests/add_remove_layers.html +87 -0
  134. data/lib/leaflet/debug/tests/bringtoback.html +37 -0
  135. data/lib/leaflet/debug/tests/canvasloop.html +47 -0
  136. data/lib/leaflet/debug/tests/click_on_canvas.html +58 -0
  137. data/lib/leaflet/debug/tests/click_on_canvas_broken.html +49 -0
  138. data/lib/leaflet/debug/tests/dragging_and_copyworldjump.html +61 -0
  139. data/lib/leaflet/debug/tests/opacity.html +56 -0
  140. data/lib/leaflet/debug/tests/popupcontextmenuclicks.html +59 -0
  141. data/lib/leaflet/debug/tests/remove_while_dragging.html +28 -0
  142. data/lib/leaflet/debug/tests/removetilewhilepan.html +41 -0
  143. data/lib/leaflet/debug/tests/reuse_popups.html +40 -0
  144. data/lib/leaflet/debug/tests/rtl.html +42 -0
  145. data/lib/leaflet/debug/tests/rtl2.html +27 -0
  146. data/lib/leaflet/debug/tests/set_icon_reuse_dom.html +43 -0
  147. data/lib/leaflet/debug/tests/svg_clicks.html +54 -0
  148. data/lib/leaflet/debug/vector/bounds-extend.html +88 -0
  149. data/lib/leaflet/debug/vector/feature-group-bounds.html +90 -0
  150. data/lib/leaflet/debug/vector/geojson-sample.js +53 -0
  151. data/lib/leaflet/debug/vector/geojson.html +173 -0
  152. data/lib/leaflet/debug/vector/rectangle.html +53 -0
  153. data/lib/leaflet/debug/vector/route.js +1 -0
  154. data/lib/leaflet/debug/vector/touchzoomemu.html +194 -0
  155. data/lib/leaflet/debug/vector/us-states.js +54 -0
  156. data/lib/leaflet/debug/vector/vector-bounds.html +69 -0
  157. data/lib/leaflet/debug/vector/vector-canvas.html +92 -0
  158. data/lib/leaflet/debug/vector/vector-mobile.html +38 -0
  159. data/lib/leaflet/debug/vector/vector-simple.html +47 -0
  160. data/lib/leaflet/debug/vector/vector.html +37 -0
  161. data/lib/leaflet/debug/vector/vector2.html +58 -0
  162. data/lib/leaflet/dist/images/layers-2x.png +0 -0
  163. data/lib/leaflet/dist/images/layers.png +0 -0
  164. data/lib/leaflet/dist/images/marker-icon-2x.png +0 -0
  165. data/lib/leaflet/dist/images/marker-icon.png +0 -0
  166. data/lib/leaflet/dist/images/marker-shadow.png +0 -0
  167. data/lib/leaflet/dist/leaflet.css +494 -0
  168. data/lib/leaflet/package.json +28 -0
  169. data/lib/leaflet/spec/after.js +2 -0
  170. data/lib/leaflet/spec/expect.js +1253 -0
  171. data/lib/leaflet/spec/index.html +87 -0
  172. data/lib/leaflet/spec/karma.conf.js +68 -0
  173. data/lib/leaflet/spec/sinon.js +4223 -0
  174. data/lib/leaflet/spec/spec.hintrc.js +25 -0
  175. data/lib/leaflet/spec/suites/SpecHelper.js +42 -0
  176. data/lib/leaflet/spec/suites/control/Control.AttributionSpec.js +68 -0
  177. data/lib/leaflet/spec/suites/control/Control.LayersSpec.js +67 -0
  178. data/lib/leaflet/spec/suites/control/Control.ScaleSpec.js +6 -0
  179. data/lib/leaflet/spec/suites/core/ClassSpec.js +166 -0
  180. data/lib/leaflet/spec/suites/core/EventsSpec.js +416 -0
  181. data/lib/leaflet/spec/suites/core/UtilSpec.js +237 -0
  182. data/lib/leaflet/spec/suites/dom/DomEventSpec.js +102 -0
  183. data/lib/leaflet/spec/suites/dom/DomUtilSpec.js +59 -0
  184. data/lib/leaflet/spec/suites/dom/PosAnimationSpec.js +27 -0
  185. data/lib/leaflet/spec/suites/geo/CRSSpec.js +151 -0
  186. data/lib/leaflet/spec/suites/geo/LatLngBoundsSpec.js +144 -0
  187. data/lib/leaflet/spec/suites/geo/LatLngSpec.js +102 -0
  188. data/lib/leaflet/spec/suites/geo/ProjectionSpec.js +96 -0
  189. data/lib/leaflet/spec/suites/geometry/BoundsSpec.js +87 -0
  190. data/lib/leaflet/spec/suites/geometry/LineUtilSpec.js +75 -0
  191. data/lib/leaflet/spec/suites/geometry/PointSpec.js +104 -0
  192. data/lib/leaflet/spec/suites/geometry/PolyUtilSpec.js +27 -0
  193. data/lib/leaflet/spec/suites/geometry/TransformationSpec.js +31 -0
  194. data/lib/leaflet/spec/suites/layer/FeatureGroupSpec.js +86 -0
  195. data/lib/leaflet/spec/suites/layer/GeoJSONSpec.js +282 -0
  196. data/lib/leaflet/spec/suites/layer/LayerGroupSpec.js +71 -0
  197. data/lib/leaflet/spec/suites/layer/PopupSpec.js +119 -0
  198. data/lib/leaflet/spec/suites/layer/marker/MarkerSpec.js +117 -0
  199. data/lib/leaflet/spec/suites/layer/tile/GridLayerSpec.js +70 -0
  200. data/lib/leaflet/spec/suites/layer/tile/TileLayerSpec.js +88 -0
  201. data/lib/leaflet/spec/suites/layer/vector/CircleMarkerSpec.js +53 -0
  202. data/lib/leaflet/spec/suites/layer/vector/CircleSpec.js +18 -0
  203. data/lib/leaflet/spec/suites/layer/vector/PolygonSpec.js +96 -0
  204. data/lib/leaflet/spec/suites/layer/vector/PolylineGeometrySpec.js +35 -0
  205. data/lib/leaflet/spec/suites/layer/vector/PolylineSpec.js +55 -0
  206. data/lib/leaflet/spec/suites/map/MapSpec.js +553 -0
  207. data/lib/leaflet/spec/suites/map/handler/Map.DragSpec.js +38 -0
  208. data/{vendor/assets/Leaflet → lib/leaflet}/src/Leaflet.js +16 -11
  209. data/{vendor/assets/Leaflet → lib/leaflet}/src/control/Control.Attribution.js +1 -23
  210. data/{vendor/assets/Leaflet → lib/leaflet}/src/control/Control.Layers.js +42 -57
  211. data/lib/leaflet/src/control/Control.Scale.js +102 -0
  212. data/{vendor/assets/Leaflet → lib/leaflet}/src/control/Control.Zoom.js +11 -18
  213. data/{vendor/assets/Leaflet → lib/leaflet}/src/control/Control.js +7 -9
  214. data/lib/leaflet/src/copyright.js +4 -0
  215. data/lib/leaflet/src/core/Browser.js +65 -0
  216. data/{vendor/assets/Leaflet → lib/leaflet}/src/core/Class.js +8 -13
  217. data/lib/leaflet/src/core/Events.js +226 -0
  218. data/{vendor/assets/Leaflet → lib/leaflet}/src/core/Handler.js +0 -0
  219. data/lib/leaflet/src/core/Util.js +196 -0
  220. data/{vendor/assets/Leaflet → lib/leaflet}/src/dom/DomEvent.DoubleTap.js +20 -27
  221. data/lib/leaflet/src/dom/DomEvent.Pointer.js +107 -0
  222. data/{vendor/assets/Leaflet → lib/leaflet}/src/dom/DomEvent.js +70 -59
  223. data/lib/leaflet/src/dom/DomUtil.js +213 -0
  224. data/{vendor/assets/Leaflet → lib/leaflet}/src/dom/Draggable.js +10 -19
  225. data/{vendor/assets/Leaflet → lib/leaflet}/src/dom/PosAnimation.Timer.js +0 -0
  226. data/{vendor/assets/Leaflet → lib/leaflet}/src/dom/PosAnimation.js +4 -3
  227. data/lib/leaflet/src/geo/LatLng.js +67 -0
  228. data/{vendor/assets/Leaflet → lib/leaflet}/src/geo/LatLngBounds.js +0 -0
  229. data/lib/leaflet/src/geo/crs/CRS.EPSG3395.js +13 -0
  230. data/lib/leaflet/src/geo/crs/CRS.EPSG3857.js +17 -0
  231. data/{vendor/assets/Leaflet → lib/leaflet}/src/geo/crs/CRS.EPSG4326.js +2 -3
  232. data/lib/leaflet/src/geo/crs/CRS.Earth.js +19 -0
  233. data/{vendor/assets/Leaflet → lib/leaflet}/src/geo/crs/CRS.Simple.js +10 -1
  234. data/lib/leaflet/src/geo/crs/CRS.js +63 -0
  235. data/{vendor/assets/Leaflet → lib/leaflet}/src/geo/projection/Projection.LonLat.js +5 -1
  236. data/lib/leaflet/src/geo/projection/Projection.Mercator.js +43 -0
  237. data/lib/leaflet/src/geo/projection/Projection.SphericalMercator.js +31 -0
  238. data/{vendor/assets/Leaflet → lib/leaflet}/src/geometry/Bounds.js +0 -0
  239. data/{vendor/assets/Leaflet → lib/leaflet}/src/geometry/LineUtil.js +16 -5
  240. data/{vendor/assets/Leaflet → lib/leaflet}/src/geometry/Point.js +10 -0
  241. data/{vendor/assets/Leaflet → lib/leaflet}/src/geometry/PolyUtil.js +0 -0
  242. data/{vendor/assets/Leaflet → lib/leaflet}/src/geometry/Transformation.js +0 -0
  243. data/{vendor/assets/Leaflet → lib/leaflet}/src/images/layers.svg +0 -0
  244. data/lib/leaflet/src/images/logo.svg +85 -0
  245. data/{vendor/assets/Leaflet → lib/leaflet}/src/images/marker.svg +0 -0
  246. data/{vendor/assets/Leaflet → lib/leaflet}/src/layer/FeatureGroup.js +3 -20
  247. data/lib/leaflet/src/layer/GeoJSON.js +275 -0
  248. data/lib/leaflet/src/layer/ImageOverlay.js +123 -0
  249. data/lib/leaflet/src/layer/Layer.Popup.js +87 -0
  250. data/lib/leaflet/src/layer/Layer.js +150 -0
  251. data/{vendor/assets/Leaflet → lib/leaflet}/src/layer/LayerGroup.js +12 -14
  252. data/{vendor/assets/Leaflet → lib/leaflet}/src/layer/Popup.js +65 -83
  253. data/{vendor/assets/Leaflet → lib/leaflet}/src/layer/marker/DivIcon.js +3 -8
  254. data/{vendor/assets/Leaflet → lib/leaflet}/src/layer/marker/Icon.Default.js +6 -12
  255. data/{vendor/assets/Leaflet → lib/leaflet}/src/layer/marker/Icon.js +8 -25
  256. data/{vendor/assets/Leaflet → lib/leaflet}/src/layer/marker/Marker.Drag.js +13 -11
  257. data/lib/leaflet/src/layer/marker/Marker.Popup.js +16 -0
  258. data/{vendor/assets/Leaflet → lib/leaflet}/src/layer/marker/Marker.js +52 -103
  259. data/lib/leaflet/src/layer/tile/GridLayer.js +536 -0
  260. data/lib/leaflet/src/layer/tile/TileLayer.WMS.js +79 -0
  261. data/lib/leaflet/src/layer/tile/TileLayer.js +148 -0
  262. data/lib/leaflet/src/layer/vector/Canvas.js +292 -0
  263. data/lib/leaflet/src/layer/vector/Circle.js +67 -0
  264. data/lib/leaflet/src/layer/vector/CircleMarker.js +72 -0
  265. data/lib/leaflet/src/layer/vector/Path.js +79 -0
  266. data/lib/leaflet/src/layer/vector/Polygon.js +75 -0
  267. data/lib/leaflet/src/layer/vector/Polyline.js +223 -0
  268. data/{vendor/assets/Leaflet → lib/leaflet}/src/layer/vector/Rectangle.js +27 -27
  269. data/lib/leaflet/src/layer/vector/Renderer.js +75 -0
  270. data/lib/leaflet/src/layer/vector/SVG.VML.js +134 -0
  271. data/lib/leaflet/src/layer/vector/SVG.js +189 -0
  272. data/{vendor/assets/Leaflet → lib/leaflet}/src/map/Map.js +83 -199
  273. data/{vendor/assets/Leaflet → lib/leaflet}/src/map/anim/Map.PanAnimation.js +0 -0
  274. data/{vendor/assets/Leaflet → lib/leaflet}/src/map/anim/Map.ZoomAnimation.js +30 -38
  275. data/{vendor/assets/Leaflet → lib/leaflet}/src/map/ext/Map.Geolocation.js +8 -8
  276. data/lib/leaflet/src/map/handler/Map.BoxZoom.js +105 -0
  277. data/{vendor/assets/Leaflet → lib/leaflet}/src/map/handler/Map.DoubleClickZoom.js +0 -0
  278. data/{vendor/assets/Leaflet → lib/leaflet}/src/map/handler/Map.Drag.js +12 -10
  279. data/{vendor/assets/Leaflet → lib/leaflet}/src/map/handler/Map.Keyboard.js +19 -17
  280. data/{vendor/assets/Leaflet → lib/leaflet}/src/map/handler/Map.ScrollWheelZoom.js +10 -6
  281. data/{vendor/assets/Leaflet → lib/leaflet}/src/map/handler/Map.Tap.js +8 -6
  282. data/{vendor/assets/Leaflet → lib/leaflet}/src/map/handler/Map.TouchZoom.js +16 -32
  283. data/vendor/assets/images/layers-2x.png +0 -0
  284. data/vendor/assets/images/layers.png +0 -0
  285. data/vendor/assets/images/marker-icon-2x.png +0 -0
  286. data/vendor/assets/images/marker-icon.png +0 -0
  287. data/vendor/assets/images/marker-shadow.png +0 -0
  288. data/vendor/assets/images/spritesheet-2x.png +0 -0
  289. data/vendor/assets/images/spritesheet.png +0 -0
  290. data/vendor/assets/{leaflet-js.js → javascripts/leaflet-js.js} +2 -2
  291. data/vendor/assets/javascripts/leaflet.draw.js +37 -0
  292. data/vendor/assets/javascripts/leaflet.js +149 -0
  293. data/vendor/assets/javascripts/leaflet.label.js +11 -0
  294. data/vendor/assets/{leaflet-js.css → stylesheets/leaflet-js.css} +0 -0
  295. data/vendor/assets/stylesheets/leaflet.css.erb +478 -0
  296. data/vendor/assets/{leaflet.draw.css.erb → stylesheets/leaflet.draw.css.erb} +2 -2
  297. data/vendor/assets/{leaflet.draw.ie.css → stylesheets/leaflet.draw.ie.css} +0 -0
  298. data/vendor/assets/stylesheets/leaflet.label.css +52 -0
  299. metadata +298 -137
  300. data/lib/leaflet-js/engine.rb +0 -7
  301. data/lib/leaflet-js/version.rb +0 -3
  302. data/vendor/assets/Leaflet.draw/src/edit/handler/Edit.Marker.js +0 -75
  303. data/vendor/assets/Leaflet/src/control/Control.Scale.js +0 -112
  304. data/vendor/assets/Leaflet/src/copyright.js +0 -5
  305. data/vendor/assets/Leaflet/src/core/Browser.js +0 -66
  306. data/vendor/assets/Leaflet/src/core/Events.js +0 -178
  307. data/vendor/assets/Leaflet/src/core/Util.js +0 -182
  308. data/vendor/assets/Leaflet/src/dom/DomEvent.Pointer.js +0 -156
  309. data/vendor/assets/Leaflet/src/dom/DomUtil.js +0 -289
  310. data/vendor/assets/Leaflet/src/geo/LatLng.js +0 -99
  311. data/vendor/assets/Leaflet/src/geo/crs/CRS.EPSG3395.js +0 -14
  312. data/vendor/assets/Leaflet/src/geo/crs/CRS.EPSG3857.js +0 -21
  313. data/vendor/assets/Leaflet/src/geo/crs/CRS.js +0 -32
  314. data/vendor/assets/Leaflet/src/geo/projection/Projection.Mercator.js +0 -56
  315. data/vendor/assets/Leaflet/src/geo/projection/Projection.SphericalMercator.js +0 -27
  316. data/vendor/assets/Leaflet/src/geo/projection/Projection.js +0 -5
  317. data/vendor/assets/Leaflet/src/layer/GeoJSON.js +0 -286
  318. data/vendor/assets/Leaflet/src/layer/ImageOverlay.js +0 -141
  319. data/vendor/assets/Leaflet/src/layer/marker/Marker.Popup.js +0 -90
  320. data/vendor/assets/Leaflet/src/layer/tile/TileLayer.Anim.js +0 -110
  321. data/vendor/assets/Leaflet/src/layer/tile/TileLayer.Canvas.js +0 -61
  322. data/vendor/assets/Leaflet/src/layer/tile/TileLayer.WMS.js +0 -87
  323. data/vendor/assets/Leaflet/src/layer/tile/TileLayer.js +0 -597
  324. data/vendor/assets/Leaflet/src/layer/vector/Circle.js +0 -98
  325. data/vendor/assets/Leaflet/src/layer/vector/CircleMarker.js +0 -45
  326. data/vendor/assets/Leaflet/src/layer/vector/MultiPoly.js +0 -57
  327. data/vendor/assets/Leaflet/src/layer/vector/Path.Popup.js +0 -65
  328. data/vendor/assets/Leaflet/src/layer/vector/Path.SVG.js +0 -230
  329. data/vendor/assets/Leaflet/src/layer/vector/Path.VML.js +0 -135
  330. data/vendor/assets/Leaflet/src/layer/vector/Path.js +0 -119
  331. data/vendor/assets/Leaflet/src/layer/vector/Polygon.js +0 -92
  332. data/vendor/assets/Leaflet/src/layer/vector/Polyline.js +0 -164
  333. data/vendor/assets/Leaflet/src/layer/vector/canvas/Circle.Canvas.js +0 -18
  334. data/vendor/assets/Leaflet/src/layer/vector/canvas/CircleMarker.Canvas.js +0 -9
  335. data/vendor/assets/Leaflet/src/layer/vector/canvas/Path.Canvas.js +0 -204
  336. data/vendor/assets/Leaflet/src/layer/vector/canvas/Polygon.Canvas.js +0 -37
  337. data/vendor/assets/Leaflet/src/layer/vector/canvas/Polyline.Canvas.js +0 -30
  338. data/vendor/assets/Leaflet/src/map/handler/Map.BoxZoom.js +0 -118
  339. data/vendor/assets/leaflet.draw.js +0 -38
  340. data/vendor/assets/leaflet.js +0 -155
  341. data/vendor/assets/leaflet.label.js +0 -11
@@ -0,0 +1,53 @@
1
+ describe('CircleMarker', function () {
2
+ describe("#_radius", function () {
3
+ var map;
4
+ beforeEach(function () {
5
+ map = L.map(document.createElement('div'));
6
+ map.setView([0, 0], 1);
7
+ });
8
+ describe("when a CircleMarker is added to the map ", function () {
9
+ describe("with a radius set as an option", function () {
10
+ it("takes that radius", function () {
11
+ var marker = L.circleMarker([0, 0], { radius: 20 }).addTo(map);
12
+
13
+ expect(marker._radius).to.be(20);
14
+ });
15
+ });
16
+
17
+ describe("and radius is set before adding it", function () {
18
+ it("takes that radius", function () {
19
+ var marker = L.circleMarker([0, 0], { radius: 20 });
20
+ marker.setRadius(15);
21
+ marker.addTo(map);
22
+ expect(marker._radius).to.be(15);
23
+ });
24
+ });
25
+
26
+ describe("and radius is set after adding it", function () {
27
+ it("takes that radius", function () {
28
+ var marker = L.circleMarker([0, 0], { radius: 20 });
29
+ marker.addTo(map);
30
+ marker.setRadius(15);
31
+ expect(marker._radius).to.be(15);
32
+ });
33
+ });
34
+
35
+ describe("and setStyle is used to change the radius after adding", function () {
36
+ it("takes the given radius", function () {
37
+ var marker = L.circleMarker([0, 0], { radius: 20 });
38
+ marker.addTo(map);
39
+ marker.setStyle({ radius: 15 });
40
+ expect(marker._radius).to.be(15);
41
+ });
42
+ });
43
+ describe("and setStyle is used to change the radius before adding", function () {
44
+ it("takes the given radius", function () {
45
+ var marker = L.circleMarker([0, 0], { radius: 20 });
46
+ marker.setStyle({ radius: 15 });
47
+ marker.addTo(map);
48
+ expect(marker._radius).to.be(15);
49
+ });
50
+ });
51
+ });
52
+ });
53
+ });
@@ -0,0 +1,18 @@
1
+ describe('Circle', function () {
2
+ describe('#getBounds', function () {
3
+
4
+ var map, circle;
5
+
6
+ beforeEach(function () {
7
+ map = L.map(document.createElement('div')).setView([0, 0], 4);
8
+ circle = L.circle([50, 30], 200).addTo(map);
9
+ });
10
+
11
+ it('returns bounds', function () {
12
+ var bounds = circle.getBounds();
13
+
14
+ expect(bounds.getSouthWest()).nearLatLng(new L.LatLng(49.94347, 29.91211));
15
+ expect(bounds.getNorthEast()).nearLatLng(new L.LatLng(50.05646, 30.08789));
16
+ });
17
+ });
18
+ });
@@ -0,0 +1,96 @@
1
+ describe('Polygon', function () {
2
+
3
+ var c = document.createElement('div');
4
+ c.style.width = '400px';
5
+ c.style.height = '400px';
6
+ var map = new L.Map(c);
7
+ map.setView(new L.LatLng(55.8, 37.6), 6);
8
+
9
+ describe("#initialize", function () {
10
+ it("doesn't overwrite the given latlng array", function () {
11
+ var originalLatLngs = [
12
+ [1, 2],
13
+ [3, 4]
14
+ ];
15
+ var sourceLatLngs = originalLatLngs.slice();
16
+
17
+ var polygon = new L.Polygon(sourceLatLngs);
18
+
19
+ expect(sourceLatLngs).to.eql(originalLatLngs);
20
+ expect(polygon._latlngs).to.not.eql(sourceLatLngs);
21
+ });
22
+
23
+ it("can be called with an empty array", function () {
24
+ var polygon = new L.Polygon([]);
25
+ expect(polygon.getLatLngs()).to.eql([]);
26
+ });
27
+
28
+ it("can be initialized with holes", function () {
29
+ var originalLatLngs = [
30
+ [ //external rink
31
+ [0, 10], [10, 10], [10, 0]
32
+ ], [ //hole
33
+ [2, 3], [2, 4], [3, 4]
34
+ ]
35
+ ];
36
+
37
+ var polygon = new L.Polygon(originalLatLngs);
38
+
39
+ // getLatLngs() returns both rings
40
+ expect(polygon.getLatLngs()).to.eql([
41
+ [L.latLng([0, 10]), L.latLng([10, 10]), L.latLng([10, 0])],
42
+ [L.latLng([2, 3]), L.latLng([2, 4]), L.latLng([3, 4])]
43
+ ]);
44
+ });
45
+ });
46
+
47
+ describe("#setLatLngs", function () {
48
+ it("doesn't overwrite the given latlng array", function () {
49
+ var originalLatLngs = [
50
+ [1, 2],
51
+ [3, 4]
52
+ ];
53
+ var sourceLatLngs = originalLatLngs.slice();
54
+
55
+ var polygon = new L.Polygon(sourceLatLngs);
56
+
57
+ polygon.setLatLngs(sourceLatLngs);
58
+
59
+ expect(sourceLatLngs).to.eql(originalLatLngs);
60
+ });
61
+
62
+ it("can be set external ring and holes", function () {
63
+ var latLngs = [
64
+ [ //external rink
65
+ [0, 10], [10, 10], [10, 0]
66
+ ], [ //hole
67
+ [2, 3], [2, 4], [3, 4]
68
+ ]
69
+ ];
70
+
71
+ var polygon = new L.Polygon([]);
72
+ polygon.setLatLngs(latLngs);
73
+
74
+ expect(polygon.getLatLngs()).to.eql([
75
+ [L.latLng([0, 10]), L.latLng([10, 10]), L.latLng([10, 0])],
76
+ [L.latLng([2, 3]), L.latLng([2, 4]), L.latLng([3, 4])]
77
+ ]);
78
+ });
79
+ });
80
+
81
+ describe("#spliceLatLngs", function () {
82
+ it("splices the internal latLngs", function () {
83
+ var latLngs = [
84
+ [1, 2],
85
+ [3, 4],
86
+ [5, 6]
87
+ ];
88
+
89
+ var polygon = new L.Polygon(latLngs);
90
+
91
+ polygon.spliceLatLngs(1, 1, [7, 8]);
92
+
93
+ expect(polygon._latlngs).to.eql([L.latLng([1, 2]), L.latLng([7, 8]), L.latLng([5, 6])]);
94
+ });
95
+ });
96
+ });
@@ -0,0 +1,35 @@
1
+ describe('PolylineGeometry', function () {
2
+
3
+ var c = document.createElement('div');
4
+ c.style.width = '400px';
5
+ c.style.height = '400px';
6
+ var map = new L.Map(c);
7
+ map.setView(new L.LatLng(55.8, 37.6), 6);
8
+
9
+ describe("#distanceTo", function () {
10
+ it("calculates distances to points", function () {
11
+ var p1 = map.latLngToLayerPoint(new L.LatLng(55.8, 37.6));
12
+ var p2 = map.latLngToLayerPoint(new L.LatLng(57.123076977278, 44.861962891635));
13
+ var latlngs = [[56.485503424111, 35.545556640339], [55.972522915346, 36.116845702918], [55.502459116923, 34.930322265253], [55.31534617509, 38.973291015816]]
14
+ .map(function (ll) {
15
+ return new L.LatLng(ll[0], ll[1]);
16
+ });
17
+ var polyline = new L.Polyline([], {
18
+ 'noClip': true
19
+ });
20
+ map.addLayer(polyline);
21
+
22
+ expect(polyline.closestLayerPoint(p1)).to.be(null);
23
+
24
+ polyline.setLatLngs(latlngs);
25
+ var point = polyline.closestLayerPoint(p1);
26
+ expect(point).not.to.be(null);
27
+ expect(point.distance).to.not.be(Infinity);
28
+ expect(point.distance).to.not.be(NaN);
29
+
30
+ var point2 = polyline.closestLayerPoint(p2);
31
+
32
+ expect(point.distance).to.be.lessThan(point2.distance);
33
+ });
34
+ });
35
+ });
@@ -0,0 +1,55 @@
1
+ describe('Polyline', function () {
2
+
3
+ var c = document.createElement('div');
4
+ c.style.width = '400px';
5
+ c.style.height = '400px';
6
+ var map = new L.Map(c);
7
+ map.setView(new L.LatLng(55.8, 37.6), 6);
8
+
9
+ describe("#initialize", function () {
10
+ it("doesn't overwrite the given latlng array", function () {
11
+ var originalLatLngs = [
12
+ [1, 2],
13
+ [3, 4]
14
+ ];
15
+ var sourceLatLngs = originalLatLngs.slice();
16
+
17
+ var polyline = new L.Polyline(sourceLatLngs);
18
+
19
+ expect(sourceLatLngs).to.eql(originalLatLngs);
20
+ expect(polyline._latlngs).to.not.eql(sourceLatLngs);
21
+ });
22
+ });
23
+
24
+ describe("#setLatLngs", function () {
25
+ it("doesn't overwrite the given latlng array", function () {
26
+ var originalLatLngs = [
27
+ [1, 2],
28
+ [3, 4]
29
+ ];
30
+ var sourceLatLngs = originalLatLngs.slice();
31
+
32
+ var polyline = new L.Polyline(sourceLatLngs);
33
+
34
+ polyline.setLatLngs(sourceLatLngs);
35
+
36
+ expect(sourceLatLngs).to.eql(originalLatLngs);
37
+ });
38
+ });
39
+
40
+ describe("#spliceLatLngs", function () {
41
+ it("splices the internal latLngs", function () {
42
+ var latLngs = [
43
+ [1, 2],
44
+ [3, 4],
45
+ [5, 6]
46
+ ];
47
+
48
+ var polyline = new L.Polyline(latLngs);
49
+
50
+ polyline.spliceLatLngs(1, 1, [7, 8]);
51
+
52
+ expect(polyline._latlngs).to.eql([L.latLng([1, 2]), L.latLng([7, 8]), L.latLng([5, 6])]);
53
+ });
54
+ });
55
+ });
@@ -0,0 +1,553 @@
1
+ describe("Map", function () {
2
+ var map,
3
+ spy;
4
+ beforeEach(function () {
5
+ map = L.map(document.createElement('div'));
6
+ });
7
+
8
+ describe("#remove", function () {
9
+ it("fires an unload event if loaded", function () {
10
+ var container = document.createElement('div'),
11
+ map = new L.Map(container).setView([0, 0], 0),
12
+ spy = sinon.spy();
13
+ map.on('unload', spy);
14
+ map.remove();
15
+ expect(spy.called).to.be.ok();
16
+ });
17
+
18
+ it("fires no unload event if not loaded", function () {
19
+ var container = document.createElement('div'),
20
+ map = new L.Map(container),
21
+ spy = sinon.spy();
22
+ map.on('unload', spy);
23
+ map.remove();
24
+ expect(spy.called).not.to.be.ok();
25
+ });
26
+
27
+ describe("corner case checking", function () {
28
+ it("throws an exception upon reinitialization", function () {
29
+ var container = document.createElement('div'),
30
+ map = new L.Map(container);
31
+ expect(function () {
32
+ L.map(container);
33
+ }).to.throwException(function (e) {
34
+ expect(e.message).to.eql("Map container is already initialized.");
35
+ });
36
+ map.remove();
37
+ });
38
+
39
+ it("throws an exception if a container is not found", function () {
40
+ expect(function () {
41
+ L.map('nonexistentdivelement');
42
+ }).to.throwException(function (e) {
43
+ expect(e.message).to.eql("Map container not found.");
44
+ });
45
+ map.remove();
46
+ });
47
+ });
48
+
49
+ it("undefines container._leaflet", function () {
50
+ var container = document.createElement('div'),
51
+ map = new L.Map(container);
52
+ map.remove();
53
+ expect(container._leaflet).to.be(undefined);
54
+ });
55
+
56
+ it("unbinds events", function () {
57
+ var container = document.createElement('div'),
58
+ map = new L.Map(container).setView([0, 0], 1),
59
+ spy = sinon.spy();
60
+
61
+ map.on('click dblclick mousedown mouseup mousemove', spy);
62
+ map.remove();
63
+
64
+ happen.click(container);
65
+ happen.dblclick(container);
66
+ happen.mousedown(container);
67
+ happen.mouseup(container);
68
+ happen.mousemove(container);
69
+
70
+ expect(spy.called).to.not.be.ok();
71
+ });
72
+ });
73
+
74
+ describe('#getCenter', function () {
75
+ it('throws if not set before', function () {
76
+ expect(function () {
77
+ map.getCenter();
78
+ }).to.throwError();
79
+ });
80
+
81
+ it('returns a precise center when zoomed in after being set (#426)', function () {
82
+ var center = L.latLng(10, 10);
83
+ map.setView(center, 1);
84
+ map.setZoom(19);
85
+ expect(map.getCenter()).to.eql(center);
86
+ });
87
+
88
+ it('returns correct center after invalidateSize (#1919)', function () {
89
+ map.setView(L.latLng(10, 10), 1);
90
+ map.invalidateSize();
91
+ expect(map.getCenter()).not.to.eql(L.latLng(10, 10));
92
+ });
93
+ });
94
+
95
+ describe("#whenReady", function () {
96
+ describe("when the map has not yet been loaded", function () {
97
+ it("calls the callback when the map is loaded", function () {
98
+ var spy = sinon.spy();
99
+ map.whenReady(spy);
100
+ expect(spy.called).to.not.be.ok();
101
+
102
+ map.setView([0, 0], 1);
103
+ expect(spy.called).to.be.ok();
104
+ });
105
+ });
106
+
107
+ describe("when the map has already been loaded", function () {
108
+ it("calls the callback immediately", function () {
109
+ var spy = sinon.spy();
110
+ map.setView([0, 0], 1);
111
+ map.whenReady(spy);
112
+
113
+ expect(spy.called).to.be.ok();
114
+ });
115
+ });
116
+ });
117
+
118
+ describe("#setView", function () {
119
+ it("sets the view of the map", function () {
120
+ expect(map.setView([51.505, -0.09], 13)).to.be(map);
121
+ expect(map.getZoom()).to.be(13);
122
+ expect(map.getCenter().distanceTo([51.505, -0.09])).to.be.lessThan(5);
123
+ });
124
+ it("can be passed without a zoom specified", function () {
125
+ map.setZoom(13);
126
+ expect(map.setView([51.605, -0.11])).to.be(map);
127
+ expect(map.getZoom()).to.be(13);
128
+ expect(map.getCenter().distanceTo([51.605, -0.11])).to.be.lessThan(5);
129
+ });
130
+ });
131
+
132
+ describe("#getBounds", function () {
133
+ it("is safe to call from within a moveend callback during initial load (#1027)", function () {
134
+ map.on("moveend", function () {
135
+ map.getBounds();
136
+ });
137
+
138
+ map.setView([51.505, -0.09], 13);
139
+ });
140
+ });
141
+
142
+ describe('#setMaxBounds', function () {
143
+ it("aligns pixel-wise map view center with maxBounds center if it cannot move view bounds inside maxBounds (#1908)", function () {
144
+ var container = map.getContainer();
145
+ // large view, cannot fit within maxBounds
146
+ container.style.width = container.style.height = "1000px";
147
+ document.body.appendChild(container);
148
+ // maxBounds
149
+ var bounds = L.latLngBounds([51.5, -0.05], [51.55, 0.05]);
150
+ map.setMaxBounds(bounds, {animate: false});
151
+ // set view outside
152
+ map.setView(L.latLng([53.0, 0.15]), 12, {animate: false});
153
+ // get center of bounds in pixels
154
+ var boundsCenter = map.project(bounds.getCenter()).round();
155
+ expect(map.project(map.getCenter()).round()).to.eql(boundsCenter);
156
+ document.body.removeChild(container);
157
+ });
158
+ it("moves map view within maxBounds by changing one coordinate", function () {
159
+ var container = map.getContainer();
160
+ // small view, can fit within maxBounds
161
+ container.style.width = container.style.height = "200px";
162
+ document.body.appendChild(container);
163
+ // maxBounds
164
+ var bounds = L.latLngBounds([51, -0.2], [52, 0.2]);
165
+ map.setMaxBounds(bounds, {animate: false});
166
+ // set view outside maxBounds on one direction only
167
+ // leaves untouched the other coordinate (that is not already centered)
168
+ var initCenter = [53.0, 0.1];
169
+ map.setView(L.latLng(initCenter), 16, {animate: false});
170
+ // one pixel coordinate hasn't changed, the other has
171
+ var pixelCenter = map.project(map.getCenter()).round();
172
+ var pixelInit = map.project(initCenter).round();
173
+ expect(pixelCenter.x).to.eql(pixelInit.x);
174
+ expect(pixelCenter.y).not.to.eql(pixelInit.y);
175
+ // the view is inside the bounds
176
+ expect(bounds.contains(map.getBounds())).to.be(true);
177
+ document.body.removeChild(container);
178
+ });
179
+ });
180
+
181
+ describe("#getMinZoom and #getMaxZoom", function () {
182
+ describe('#getMinZoom', function () {
183
+ it('returns 0 if not set by Map options or TileLayer options', function () {
184
+ var map = L.map(document.createElement('div'));
185
+ expect(map.getMinZoom()).to.be(0);
186
+ });
187
+ });
188
+
189
+ it("minZoom and maxZoom options overrides any minZoom and maxZoom set on layers", function () {
190
+
191
+ var map = L.map(document.createElement('div'), {minZoom: 2, maxZoom: 20});
192
+
193
+ L.tileLayer("{z}{x}{y}", {minZoom: 4, maxZoom: 10}).addTo(map);
194
+ L.tileLayer("{z}{x}{y}", {minZoom: 6, maxZoom: 17}).addTo(map);
195
+ L.tileLayer("{z}{x}{y}", {minZoom: 0, maxZoom: 22}).addTo(map);
196
+
197
+ expect(map.getMinZoom()).to.be(2);
198
+ expect(map.getMaxZoom()).to.be(20);
199
+ });
200
+ });
201
+
202
+ describe("#hasLayer", function () {
203
+ it("returns false when passed undefined, null, or false", function () {
204
+ var map = L.map(document.createElement('div'));
205
+ expect(map.hasLayer(undefined)).to.equal(false);
206
+ expect(map.hasLayer(null)).to.equal(false);
207
+ expect(map.hasLayer(false)).to.equal(false);
208
+ });
209
+ });
210
+
211
+ function layerSpy() {
212
+ var layer = new L.Layer();
213
+ layer.onAdd = sinon.spy();
214
+ layer.onRemove = sinon.spy();
215
+ return layer;
216
+ }
217
+
218
+ describe("#addLayer", function () {
219
+
220
+ it("calls layer.onAdd immediately if the map is ready", function () {
221
+ var layer = layerSpy();
222
+ map.setView([0, 0], 0);
223
+ map.addLayer(layer);
224
+ expect(layer.onAdd.called).to.be.ok();
225
+ });
226
+
227
+ it("calls layer.onAdd when the map becomes ready", function () {
228
+ var layer = layerSpy();
229
+ map.addLayer(layer);
230
+ expect(layer.onAdd.called).not.to.be.ok();
231
+ map.setView([0, 0], 0);
232
+ expect(layer.onAdd.called).to.be.ok();
233
+ });
234
+
235
+ it("does not call layer.onAdd if the layer is removed before the map becomes ready", function () {
236
+ var layer = layerSpy();
237
+ map.addLayer(layer);
238
+ map.removeLayer(layer);
239
+ map.setView([0, 0], 0);
240
+ expect(layer.onAdd.called).not.to.be.ok();
241
+ });
242
+
243
+ it("fires a layeradd event immediately if the map is ready", function () {
244
+ var layer = layerSpy(),
245
+ spy = sinon.spy();
246
+ map.on('layeradd', spy);
247
+ map.setView([0, 0], 0);
248
+ map.addLayer(layer);
249
+ expect(spy.called).to.be.ok();
250
+ });
251
+
252
+ it("fires a layeradd event when the map becomes ready", function () {
253
+ var layer = layerSpy(),
254
+ spy = sinon.spy();
255
+ map.on('layeradd', spy);
256
+ map.addLayer(layer);
257
+ expect(spy.called).not.to.be.ok();
258
+ map.setView([0, 0], 0);
259
+ expect(spy.called).to.be.ok();
260
+ });
261
+
262
+ it("does not fire a layeradd event if the layer is removed before the map becomes ready", function () {
263
+ var layer = layerSpy(),
264
+ spy = sinon.spy();
265
+ map.on('layeradd', spy);
266
+ map.addLayer(layer);
267
+ map.removeLayer(layer);
268
+ map.setView([0, 0], 0);
269
+ expect(spy.called).not.to.be.ok();
270
+ });
271
+
272
+ it("adds the layer before firing layeradd", function (done) {
273
+ var layer = layerSpy();
274
+ map.on('layeradd', function () {
275
+ expect(map.hasLayer(layer)).to.be.ok();
276
+ done();
277
+ });
278
+ map.setView([0, 0], 0);
279
+ map.addLayer(layer);
280
+ });
281
+
282
+ describe("When the first layer is added to a map", function () {
283
+ it("fires a zoomlevelschange event", function () {
284
+ var spy = sinon.spy();
285
+ map.on("zoomlevelschange", spy);
286
+ expect(spy.called).not.to.be.ok();
287
+ L.tileLayer("{z}{x}{y}", {minZoom: 0, maxZoom: 10}).addTo(map);
288
+ expect(spy.called).to.be.ok();
289
+ });
290
+ });
291
+
292
+ describe("when a new layer with greater zoomlevel coverage than the current layer is added to a map", function () {
293
+ it("fires a zoomlevelschange event", function () {
294
+ var spy = sinon.spy();
295
+ L.tileLayer("{z}{x}{y}", {minZoom: 0, maxZoom: 10}).addTo(map);
296
+ map.on("zoomlevelschange", spy);
297
+ expect(spy.called).not.to.be.ok();
298
+ L.tileLayer("{z}{x}{y}", {minZoom: 0, maxZoom: 15}).addTo(map);
299
+ expect(spy.called).to.be.ok();
300
+ });
301
+ });
302
+
303
+ describe("when a new layer with the same or lower zoomlevel coverage as the current layer is added to a map", function () {
304
+ it("fires no zoomlevelschange event", function () {
305
+ var spy = sinon.spy();
306
+ L.tileLayer("{z}{x}{y}", {minZoom: 0, maxZoom: 10}).addTo(map);
307
+ map.on("zoomlevelschange", spy);
308
+ expect(spy.called).not.to.be.ok();
309
+ L.tileLayer("{z}{x}{y}", {minZoom: 0, maxZoom: 10}).addTo(map);
310
+ expect(spy.called).not.to.be.ok();
311
+ L.tileLayer("{z}{x}{y}", {minZoom: 0, maxZoom: 5}).addTo(map);
312
+ expect(spy.called).not.to.be.ok();
313
+ });
314
+ });
315
+ });
316
+
317
+ describe("#removeLayer", function () {
318
+ it("calls layer.onRemove if the map is ready", function () {
319
+ var layer = layerSpy();
320
+ map.setView([0, 0], 0);
321
+ map.addLayer(layer);
322
+ map.removeLayer(layer);
323
+ expect(layer.onRemove.called).to.be.ok();
324
+ });
325
+
326
+ it("does not call layer.onRemove if the layer was not added", function () {
327
+ var layer = layerSpy();
328
+ map.setView([0, 0], 0);
329
+ map.removeLayer(layer);
330
+ expect(layer.onRemove.called).not.to.be.ok();
331
+ });
332
+
333
+ it("does not call layer.onRemove if the map is not ready", function () {
334
+ var layer = layerSpy();
335
+ map.addLayer(layer);
336
+ map.removeLayer(layer);
337
+ expect(layer.onRemove.called).not.to.be.ok();
338
+ });
339
+
340
+ it("fires a layerremove event if the map is ready", function () {
341
+ var layer = layerSpy(),
342
+ spy = sinon.spy();
343
+ map.on('layerremove', spy);
344
+ map.setView([0, 0], 0);
345
+ map.addLayer(layer);
346
+ map.removeLayer(layer);
347
+ expect(spy.called).to.be.ok();
348
+ });
349
+
350
+ it("does not fire a layerremove if the layer was not added", function () {
351
+ var layer = layerSpy(),
352
+ spy = sinon.spy();
353
+ map.on('layerremove', spy);
354
+ map.setView([0, 0], 0);
355
+ map.removeLayer(layer);
356
+ expect(spy.called).not.to.be.ok();
357
+ });
358
+
359
+ it("does not fire a layerremove if the map is not ready", function () {
360
+ var layer = layerSpy(),
361
+ spy = sinon.spy();
362
+ map.on('layerremove', spy);
363
+ map.addLayer(layer);
364
+ map.removeLayer(layer);
365
+ expect(spy.called).not.to.be.ok();
366
+ });
367
+
368
+ it("removes the layer before firing layerremove", function (done) {
369
+ var layer = layerSpy();
370
+ map.on('layerremove', function () {
371
+ expect(map.hasLayer(layer)).not.to.be.ok();
372
+ done();
373
+ });
374
+ map.setView([0, 0], 0);
375
+ map.addLayer(layer);
376
+ map.removeLayer(layer);
377
+ });
378
+
379
+ describe("when the last tile layer on a map is removed", function () {
380
+ it("fires a zoomlevelschange event", function () {
381
+ map.whenReady(function () {
382
+ var spy = sinon.spy();
383
+ var tl = L.tileLayer("{z}{x}{y}", {minZoom: 0, maxZoom: 10}).addTo(map);
384
+
385
+ map.on("zoomlevelschange", spy);
386
+ expect(spy.called).not.to.be.ok();
387
+ map.removeLayer(tl);
388
+ expect(spy.called).to.be.ok();
389
+ });
390
+ });
391
+ });
392
+
393
+ describe("when a tile layer is removed from a map and it had greater zoom level coverage than the remainding layer", function () {
394
+ it("fires a zoomlevelschange event", function () {
395
+ map.whenReady(function () {
396
+ var spy = sinon.spy(),
397
+ tl = L.tileLayer("{z}{x}{y}", {minZoom: 0, maxZoom: 10}).addTo(map),
398
+ t2 = L.tileLayer("{z}{x}{y}", {minZoom: 0, maxZoom: 15}).addTo(map);
399
+
400
+ map.on("zoomlevelschange", spy);
401
+ expect(spy.called).to.not.be.ok();
402
+ map.removeLayer(t2);
403
+ expect(spy.called).to.be.ok();
404
+ });
405
+ });
406
+ });
407
+
408
+ describe("when a tile layer is removed from a map it and it had lesser or the sa,e zoom level coverage as the remainding layer(s)", function () {
409
+ it("fires no zoomlevelschange event", function () {
410
+ map.whenReady(function () {
411
+ var tl = L.tileLayer("{z}{x}{y}", {minZoom: 0, maxZoom: 10}).addTo(map),
412
+ t2 = L.tileLayer("{z}{x}{y}", {minZoom: 0, maxZoom: 10}).addTo(map),
413
+ t3 = L.tileLayer("{z}{x}{y}", {minZoom: 0, maxZoom: 5}).addTo(map);
414
+
415
+ map.on("zoomlevelschange", spy);
416
+ expect(spy).not.toHaveBeenCalled();
417
+ map.removeLayer(t2);
418
+ expect(spy).not.toHaveBeenCalled();
419
+ map.removeLayer(t3);
420
+ expect(spy).not.toHaveBeenCalled();
421
+ });
422
+ });
423
+ });
424
+ });
425
+
426
+ describe("#eachLayer", function () {
427
+ it("returns self", function () {
428
+ expect(map.eachLayer(function () {})).to.be(map);
429
+ });
430
+
431
+ it("calls the provided function for each layer", function () {
432
+ var t1 = L.tileLayer("{z}{x}{y}").addTo(map),
433
+ t2 = L.tileLayer("{z}{x}{y}").addTo(map),
434
+ spy = sinon.spy();
435
+
436
+ map.eachLayer(spy);
437
+
438
+ expect(spy.callCount).to.eql(2);
439
+ expect(spy.firstCall.args).to.eql([t1]);
440
+ expect(spy.secondCall.args).to.eql([t2]);
441
+ });
442
+
443
+ it("calls the provided function with the provided context", function () {
444
+ var t1 = L.tileLayer("{z}{x}{y}").addTo(map),
445
+ spy = sinon.spy();
446
+
447
+ map.eachLayer(spy, map);
448
+
449
+ expect(spy.thisValues[0]).to.eql(map);
450
+ });
451
+ });
452
+
453
+ describe("#invalidateSize", function () {
454
+ var container,
455
+ origWidth = 100,
456
+ clock;
457
+
458
+ beforeEach(function () {
459
+ container = map.getContainer();
460
+ container.style.width = origWidth + "px";
461
+ document.body.appendChild(container);
462
+ map.setView([0, 0], 0);
463
+ map.invalidateSize({pan: false});
464
+ clock = sinon.useFakeTimers();
465
+ });
466
+
467
+ afterEach(function () {
468
+ document.body.removeChild(container);
469
+ clock.restore();
470
+ });
471
+
472
+ it("pans by the right amount when growing in 1px increments", function () {
473
+ container.style.width = (origWidth + 1) + "px";
474
+ map.invalidateSize();
475
+ expect(map._getMapPanePos().x).to.be(1);
476
+
477
+ container.style.width = (origWidth + 2) + "px";
478
+ map.invalidateSize();
479
+ expect(map._getMapPanePos().x).to.be(1);
480
+
481
+ container.style.width = (origWidth + 3) + "px";
482
+ map.invalidateSize();
483
+ expect(map._getMapPanePos().x).to.be(2);
484
+ });
485
+
486
+ it("pans by the right amount when shrinking in 1px increments", function () {
487
+ container.style.width = (origWidth - 1) + "px";
488
+ map.invalidateSize();
489
+ expect(map._getMapPanePos().x).to.be(0);
490
+
491
+ container.style.width = (origWidth - 2) + "px";
492
+ map.invalidateSize();
493
+ expect(map._getMapPanePos().x).to.be(-1);
494
+
495
+ container.style.width = (origWidth - 3) + "px";
496
+ map.invalidateSize();
497
+ expect(map._getMapPanePos().x).to.be(-1);
498
+ });
499
+
500
+ it("pans back to the original position after growing by an odd size and back", function () {
501
+ container.style.width = (origWidth + 5) + "px";
502
+ map.invalidateSize();
503
+
504
+ container.style.width = origWidth + "px";
505
+ map.invalidateSize();
506
+
507
+ expect(map._getMapPanePos().x).to.be(0);
508
+ });
509
+
510
+ it("emits no move event if the size has not changed", function () {
511
+ var spy = sinon.spy();
512
+ map.on("move", spy);
513
+
514
+ map.invalidateSize();
515
+
516
+ expect(spy.called).not.to.be.ok();
517
+ });
518
+
519
+ it("emits a move event if the size has changed", function () {
520
+ var spy = sinon.spy();
521
+ map.on("move", spy);
522
+
523
+ container.style.width = (origWidth + 5) + "px";
524
+ map.invalidateSize();
525
+
526
+ expect(spy.called).to.be.ok();
527
+ });
528
+
529
+ it("emits a moveend event if the size has changed", function () {
530
+ var spy = sinon.spy();
531
+ map.on("moveend", spy);
532
+
533
+ container.style.width = (origWidth + 5) + "px";
534
+ map.invalidateSize();
535
+
536
+ expect(spy.called).to.be.ok();
537
+ });
538
+
539
+ it("debounces the moveend event if the debounceMoveend option is given", function () {
540
+ var spy = sinon.spy();
541
+ map.on("moveend", spy);
542
+
543
+ container.style.width = (origWidth + 5) + "px";
544
+ map.invalidateSize({debounceMoveend: true});
545
+
546
+ expect(spy.called).not.to.be.ok();
547
+
548
+ clock.tick(200);
549
+
550
+ expect(spy.called).to.be.ok();
551
+ });
552
+ });
553
+ });