leaflet-js 0.6.beta4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (275) hide show
  1. checksums.yaml +15 -0
  2. data/CHANGELOG.rdoc +32 -0
  3. data/LICENSE +21 -0
  4. data/README.rdoc +54 -0
  5. data/Rakefile +15 -0
  6. data/leaflet-js.gemspec +28 -0
  7. data/lib/leaflet-js.rb +10 -0
  8. data/lib/leaflet.draw/BREAKINGCHANGES.md +54 -0
  9. data/lib/leaflet.draw/CHANGELOG.md +73 -0
  10. data/lib/leaflet.draw/Jakefile.js +26 -0
  11. data/lib/leaflet.draw/MIT-LICENCE.txt +20 -0
  12. data/lib/leaflet.draw/README.md +364 -0
  13. data/lib/leaflet.draw/TODO.md +62 -0
  14. data/lib/leaflet.draw/build/build.html +243 -0
  15. data/lib/leaflet.draw/build/build.js +189 -0
  16. data/lib/leaflet.draw/build/deps.js +75 -0
  17. data/lib/leaflet.draw/build/hintrc.js +47 -0
  18. data/lib/leaflet.draw/build/leaflet.draw-include.js +42 -0
  19. data/lib/leaflet.draw/dist/images/spritesheet.png +0 -0
  20. data/lib/leaflet.draw/dist/leaflet.draw-src.js +2429 -0
  21. data/lib/leaflet.draw/dist/leaflet.draw.css +212 -0
  22. data/lib/leaflet.draw/dist/leaflet.draw.ie.css +44 -0
  23. data/lib/leaflet.draw/dist/leaflet.draw.js +10 -0
  24. data/lib/leaflet.draw/examples/basic.html +106 -0
  25. data/lib/leaflet.draw/examples/edithandlers.html +67 -0
  26. data/lib/leaflet.draw/examples/libs/images/layers.png +0 -0
  27. data/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/lib/leaflet.draw/examples/libs/images/marker-shadow.png +0 -0
  30. data/lib/leaflet.draw/examples/libs/leaflet-src.js +8587 -0
  31. data/lib/leaflet.draw/examples/libs/leaflet.css +459 -0
  32. data/lib/leaflet.draw/examples/libs/leaflet.ie.css +51 -0
  33. data/lib/leaflet.draw/package.json +37 -0
  34. data/lib/leaflet.draw/spec/after.js +2 -0
  35. data/lib/leaflet.draw/spec/before.js +3 -0
  36. data/lib/leaflet.draw/spec/expect.js +1253 -0
  37. data/lib/leaflet.draw/spec/happen.js +93 -0
  38. data/lib/leaflet.draw/spec/index.html +36 -0
  39. data/lib/leaflet.draw/spec/karma.conf.js +69 -0
  40. data/lib/leaflet.draw/spec/sinon.js +4223 -0
  41. data/lib/leaflet.draw/spec/suites/DrawControlSpec.js +15 -0
  42. data/lib/leaflet.draw/spec/suites/SpecHelper.js +26 -0
  43. data/lib/leaflet.draw/src/Control.Draw.js +101 -0
  44. data/lib/leaflet.draw/src/Leaflet.draw.js +5 -0
  45. data/lib/leaflet.draw/src/Toolbar.js +187 -0
  46. data/lib/leaflet.draw/src/Tooltip.js +52 -0
  47. data/lib/leaflet.draw/src/copyright.js +8 -0
  48. data/lib/leaflet.draw/src/draw/DrawToolbar.js +107 -0
  49. data/lib/leaflet.draw/src/draw/handler/Draw.Circle.js +59 -0
  50. data/lib/leaflet.draw/src/draw/handler/Draw.Feature.js +74 -0
  51. data/lib/leaflet.draw/src/draw/handler/Draw.Marker.js +97 -0
  52. data/lib/leaflet.draw/src/draw/handler/Draw.Polygon.js +79 -0
  53. data/lib/leaflet.draw/src/draw/handler/Draw.Polyline.js +360 -0
  54. data/lib/leaflet.draw/src/draw/handler/Draw.Rectangle.js +41 -0
  55. data/lib/leaflet.draw/src/draw/handler/Draw.SimpleShape.js +67 -0
  56. data/lib/leaflet.draw/src/edit/EditToolbar.js +93 -0
  57. data/lib/leaflet.draw/src/edit/handler/Edit.Circle.js +63 -0
  58. data/lib/leaflet.draw/src/edit/handler/Edit.Poly.js +267 -0
  59. data/lib/leaflet.draw/src/edit/handler/Edit.Rectangle.js +117 -0
  60. data/lib/leaflet.draw/src/edit/handler/Edit.SimpleShape.js +138 -0
  61. data/lib/leaflet.draw/src/edit/handler/EditToolbar.Delete.js +109 -0
  62. data/lib/leaflet.draw/src/edit/handler/EditToolbar.Edit.js +233 -0
  63. data/lib/leaflet.draw/src/ext/LatLngUtil.js +18 -0
  64. data/lib/leaflet.draw/src/ext/LineUtil.Intersect.js +15 -0
  65. data/lib/leaflet.draw/src/ext/Polygon.Intersect.js +27 -0
  66. data/lib/leaflet.draw/src/ext/Polyline.Intersect.js +85 -0
  67. data/lib/leaflet.label/CHANGELOG.md +35 -0
  68. data/lib/leaflet.label/Jakefile.js +21 -0
  69. data/lib/leaflet.label/MIT-LICENCE.txt +20 -0
  70. data/lib/leaflet.label/README.md +86 -0
  71. data/lib/leaflet.label/build/build.js +155 -0
  72. data/lib/leaflet.label/build/deps.js +24 -0
  73. data/lib/leaflet.label/build/hint.js +30 -0
  74. data/lib/leaflet.label/build/hintrc.js +47 -0
  75. data/lib/leaflet.label/dist/images/death.png +0 -0
  76. data/lib/leaflet.label/dist/leaflet.label-src.js +359 -0
  77. data/lib/leaflet.label/dist/leaflet.label.css +33 -0
  78. data/lib/leaflet.label/dist/leaflet.label.js +9 -0
  79. data/lib/leaflet.label/example/label.html +82 -0
  80. data/lib/leaflet.label/libs/leaflet/images/layers.png +0 -0
  81. data/lib/leaflet.label/libs/leaflet/images/marker-icon.png +0 -0
  82. data/lib/leaflet.label/libs/leaflet/images/marker-icon@2x.png +0 -0
  83. data/lib/leaflet.label/libs/leaflet/images/marker-shadow.png +0 -0
  84. data/lib/leaflet.label/libs/leaflet/leaflet-src.js +8587 -0
  85. data/lib/leaflet.label/libs/leaflet/leaflet.css +459 -0
  86. data/lib/leaflet.label/libs/leaflet/leaflet.ie.css +51 -0
  87. data/lib/leaflet.label/libs/leaflet/leaflet.js +8 -0
  88. data/lib/leaflet.label/src/FeatureGroup.Label.js +20 -0
  89. data/lib/leaflet.label/src/Label.js +123 -0
  90. data/lib/leaflet.label/src/Leaflet.label.js +5 -0
  91. data/lib/leaflet.label/src/Map.Label.js +7 -0
  92. data/lib/leaflet.label/src/Marker.Label.js +160 -0
  93. data/lib/leaflet.label/src/Path.Label.js +55 -0
  94. data/lib/leaflet.label/src/copyright.js +8 -0
  95. data/lib/leaflet/CHANGELOG.md +637 -0
  96. data/lib/leaflet/CONTRIBUTING.md +155 -0
  97. data/lib/leaflet/Jakefile.js +26 -0
  98. data/lib/leaflet/LICENSE +23 -0
  99. data/lib/leaflet/README.md +30 -0
  100. data/lib/leaflet/build/build.html +243 -0
  101. data/lib/leaflet/build/build.js +193 -0
  102. data/lib/leaflet/build/deps.js +256 -0
  103. data/lib/leaflet/build/hintrc.js +37 -0
  104. data/lib/leaflet/debug/css/mobile.css +6 -0
  105. data/lib/leaflet/debug/css/screen.css +5 -0
  106. data/lib/leaflet/debug/hacks/jitter.html +43 -0
  107. data/lib/leaflet/debug/leaflet-include.js +59 -0
  108. data/lib/leaflet/debug/map/canvas.html +47 -0
  109. data/lib/leaflet/debug/map/controls.html +50 -0
  110. data/lib/leaflet/debug/map/geolocation.html +35 -0
  111. data/lib/leaflet/debug/map/image-overlay.html +44 -0
  112. data/lib/leaflet/debug/map/map-mobile.html +35 -0
  113. data/lib/leaflet/debug/map/map.html +60 -0
  114. data/lib/leaflet/debug/map/max-bounds.html +37 -0
  115. data/lib/leaflet/debug/map/scroll.html +36 -0
  116. data/lib/leaflet/debug/map/simple-proj.html +45 -0
  117. data/lib/leaflet/debug/map/wms-marble.html +31 -0
  118. data/lib/leaflet/debug/map/wms.html +41 -0
  119. data/lib/leaflet/debug/map/zoomlevels.html +46 -0
  120. data/lib/leaflet/debug/tests/add_remove_layers.html +88 -0
  121. data/lib/leaflet/debug/tests/bringtoback.html +38 -0
  122. data/lib/leaflet/debug/tests/click_on_canvas.html +59 -0
  123. data/lib/leaflet/debug/tests/click_on_canvas_broken.html +49 -0
  124. data/lib/leaflet/debug/tests/opacity.html +57 -0
  125. data/lib/leaflet/debug/tests/remove_while_dragging.html +29 -0
  126. data/lib/leaflet/debug/tests/removetilewhilepan.html +42 -0
  127. data/lib/leaflet/debug/tests/reuse_popups.html +41 -0
  128. data/lib/leaflet/debug/tests/svg_clicks.html +55 -0
  129. data/lib/leaflet/debug/vector/bounds-extend.html +89 -0
  130. data/lib/leaflet/debug/vector/feature-group-bounds.html +91 -0
  131. data/lib/leaflet/debug/vector/geojson-sample.js +53 -0
  132. data/lib/leaflet/debug/vector/geojson.html +174 -0
  133. data/lib/leaflet/debug/vector/rectangle.html +54 -0
  134. data/lib/leaflet/debug/vector/route.js +1 -0
  135. data/lib/leaflet/debug/vector/touchzoomemu.html +195 -0
  136. data/lib/leaflet/debug/vector/us-states.js +54 -0
  137. data/lib/leaflet/debug/vector/vector-bounds.html +70 -0
  138. data/lib/leaflet/debug/vector/vector-canvas.html +93 -0
  139. data/lib/leaflet/debug/vector/vector-mobile.html +39 -0
  140. data/lib/leaflet/debug/vector/vector-simple.html +49 -0
  141. data/lib/leaflet/debug/vector/vector.html +38 -0
  142. data/lib/leaflet/dist/images/layers.png +0 -0
  143. data/lib/leaflet/dist/images/marker-icon-2x.png +0 -0
  144. data/lib/leaflet/dist/images/marker-icon.png +0 -0
  145. data/lib/leaflet/dist/images/marker-shadow.png +0 -0
  146. data/lib/leaflet/dist/leaflet-src.js +8579 -0
  147. data/lib/leaflet/dist/leaflet.css +459 -0
  148. data/lib/leaflet/dist/leaflet.ie.css +51 -0
  149. data/lib/leaflet/dist/leaflet.js +8 -0
  150. data/lib/leaflet/package.json +22 -0
  151. data/lib/leaflet/spec/after.js +2 -0
  152. data/lib/leaflet/spec/before.js +3 -0
  153. data/lib/leaflet/spec/expect.js +1253 -0
  154. data/lib/leaflet/spec/happen.js +93 -0
  155. data/lib/leaflet/spec/index.html +78 -0
  156. data/lib/leaflet/spec/karma.conf.js +64 -0
  157. data/lib/leaflet/spec/sinon.js +4223 -0
  158. data/lib/leaflet/spec/suites/LeafletSpec.js +13 -0
  159. data/lib/leaflet/spec/suites/SpecHelper.js +26 -0
  160. data/lib/leaflet/spec/suites/control/Control.AttributionSpec.js +68 -0
  161. data/lib/leaflet/spec/suites/control/Control.LayersSpec.js +67 -0
  162. data/lib/leaflet/spec/suites/control/Control.ScaleSpec.js +6 -0
  163. data/lib/leaflet/spec/suites/core/ClassSpec.js +156 -0
  164. data/lib/leaflet/spec/suites/core/EventsSpec.js +336 -0
  165. data/lib/leaflet/spec/suites/core/UtilSpec.js +212 -0
  166. data/lib/leaflet/spec/suites/dom/DomEventSpec.js +102 -0
  167. data/lib/leaflet/spec/suites/dom/DomUtilSpec.js +89 -0
  168. data/lib/leaflet/spec/suites/geo/LatLngBoundsSpec.js +136 -0
  169. data/lib/leaflet/spec/suites/geo/LatLngSpec.js +118 -0
  170. data/lib/leaflet/spec/suites/geo/ProjectionSpec.js +47 -0
  171. data/lib/leaflet/spec/suites/geometry/BoundsSpec.js +87 -0
  172. data/lib/leaflet/spec/suites/geometry/LineUtilSpec.js +75 -0
  173. data/lib/leaflet/spec/suites/geometry/PointSpec.js +104 -0
  174. data/lib/leaflet/spec/suites/geometry/PolyUtilSpec.js +27 -0
  175. data/lib/leaflet/spec/suites/geometry/TransformationSpec.js +31 -0
  176. data/lib/leaflet/spec/suites/layer/FeatureGroupSpec.js +36 -0
  177. data/lib/leaflet/spec/suites/layer/GeoJSONSpec.js +86 -0
  178. data/lib/leaflet/spec/suites/layer/LayerGroupSpec.js +58 -0
  179. data/lib/leaflet/spec/suites/layer/PopupSpec.js +59 -0
  180. data/lib/leaflet/spec/suites/layer/TileLayerSpec.js +87 -0
  181. data/lib/leaflet/spec/suites/layer/vector/CircleMarkerSpec.js +53 -0
  182. data/lib/leaflet/spec/suites/layer/vector/CircleSpec.js +17 -0
  183. data/lib/leaflet/spec/suites/layer/vector/PolygonSpec.js +55 -0
  184. data/lib/leaflet/spec/suites/layer/vector/PolylineGeometrySpec.js +35 -0
  185. data/lib/leaflet/spec/suites/layer/vector/PolylineSpec.js +55 -0
  186. data/lib/leaflet/spec/suites/map/MapSpec.js +244 -0
  187. data/lib/leaflet/src/Leaflet.js +23 -0
  188. data/lib/leaflet/src/control/Control.Attribution.js +115 -0
  189. data/lib/leaflet/src/control/Control.Layers.js +243 -0
  190. data/lib/leaflet/src/control/Control.Scale.js +112 -0
  191. data/lib/leaflet/src/control/Control.Zoom.js +86 -0
  192. data/lib/leaflet/src/control/Control.js +107 -0
  193. data/lib/leaflet/src/copyright.js +4 -0
  194. data/lib/leaflet/src/core/Browser.js +96 -0
  195. data/lib/leaflet/src/core/Class.js +106 -0
  196. data/lib/leaflet/src/core/Events.js +174 -0
  197. data/lib/leaflet/src/core/Handler.js +28 -0
  198. data/lib/leaflet/src/core/Util.js +182 -0
  199. data/lib/leaflet/src/dom/DomEvent.DoubleTap.js +103 -0
  200. data/lib/leaflet/src/dom/DomEvent.MsTouch.js +146 -0
  201. data/lib/leaflet/src/dom/DomEvent.js +211 -0
  202. data/lib/leaflet/src/dom/DomUtil.js +239 -0
  203. data/lib/leaflet/src/dom/Draggable.js +198 -0
  204. data/lib/leaflet/src/dom/PosAnimation.Timer.js +67 -0
  205. data/lib/leaflet/src/dom/PosAnimation.js +83 -0
  206. data/lib/leaflet/src/geo/LatLng.js +88 -0
  207. data/lib/leaflet/src/geo/LatLngBounds.js +153 -0
  208. data/lib/leaflet/src/geo/crs/CRS.EPSG3395.js +14 -0
  209. data/lib/leaflet/src/geo/crs/CRS.EPSG3857.js +21 -0
  210. data/lib/leaflet/src/geo/crs/CRS.EPSG4326.js +10 -0
  211. data/lib/leaflet/src/geo/crs/CRS.Simple.js +12 -0
  212. data/lib/leaflet/src/geo/crs/CRS.js +27 -0
  213. data/lib/leaflet/src/geo/projection/Projection.LonLat.js +13 -0
  214. data/lib/leaflet/src/geo/projection/Projection.Mercator.js +56 -0
  215. data/lib/leaflet/src/geo/projection/Projection.SphericalMercator.js +27 -0
  216. data/lib/leaflet/src/geo/projection/Projection.js +5 -0
  217. data/lib/leaflet/src/geometry/Bounds.js +95 -0
  218. data/lib/leaflet/src/geometry/LineUtil.js +202 -0
  219. data/lib/leaflet/src/geometry/Point.js +119 -0
  220. data/lib/leaflet/src/geometry/PolyUtil.js +55 -0
  221. data/lib/leaflet/src/geometry/Transformation.js +31 -0
  222. data/lib/leaflet/src/images/marker.svg +1 -0
  223. data/lib/leaflet/src/layer/FeatureGroup.js +81 -0
  224. data/lib/leaflet/src/layer/GeoJSON.js +245 -0
  225. data/lib/leaflet/src/layer/ImageOverlay.js +132 -0
  226. data/lib/leaflet/src/layer/LayerGroup.js +110 -0
  227. data/lib/leaflet/src/layer/Popup.js +316 -0
  228. data/lib/leaflet/src/layer/marker/DivIcon.js +43 -0
  229. data/lib/leaflet/src/layer/marker/Icon.Default.js +51 -0
  230. data/lib/leaflet/src/layer/marker/Icon.js +101 -0
  231. data/lib/leaflet/src/layer/marker/Marker.Drag.js +66 -0
  232. data/lib/leaflet/src/layer/marker/Marker.Popup.js +72 -0
  233. data/lib/leaflet/src/layer/marker/Marker.js +275 -0
  234. data/lib/leaflet/src/layer/tile/TileLayer.Anim.js +117 -0
  235. data/lib/leaflet/src/layer/tile/TileLayer.Canvas.js +60 -0
  236. data/lib/leaflet/src/layer/tile/TileLayer.WMS.js +83 -0
  237. data/lib/leaflet/src/layer/tile/TileLayer.js +578 -0
  238. data/lib/leaflet/src/layer/vector/Circle.js +98 -0
  239. data/lib/leaflet/src/layer/vector/CircleMarker.js +33 -0
  240. data/lib/leaflet/src/layer/vector/MultiPoly.js +47 -0
  241. data/lib/leaflet/src/layer/vector/Path.Popup.js +65 -0
  242. data/lib/leaflet/src/layer/vector/Path.SVG.js +219 -0
  243. data/lib/leaflet/src/layer/vector/Path.VML.js +125 -0
  244. data/lib/leaflet/src/layer/vector/Path.js +115 -0
  245. data/lib/leaflet/src/layer/vector/Polygon.js +81 -0
  246. data/lib/leaflet/src/layer/vector/Polyline.js +164 -0
  247. data/lib/leaflet/src/layer/vector/Rectangle.js +27 -0
  248. data/lib/leaflet/src/layer/vector/canvas/Circle.Canvas.js +18 -0
  249. data/lib/leaflet/src/layer/vector/canvas/Path.Canvas.js +196 -0
  250. data/lib/leaflet/src/layer/vector/canvas/Polygon.Canvas.js +37 -0
  251. data/lib/leaflet/src/layer/vector/canvas/Polyline.Canvas.js +30 -0
  252. data/lib/leaflet/src/map/Map.js +743 -0
  253. data/lib/leaflet/src/map/anim/Map.PanAnimation.js +88 -0
  254. data/lib/leaflet/src/map/anim/Map.ZoomAnimation.js +90 -0
  255. data/lib/leaflet/src/map/ext/Map.Geolocation.js +91 -0
  256. data/lib/leaflet/src/map/handler/Map.BoxZoom.js +104 -0
  257. data/lib/leaflet/src/map/handler/Map.DoubleClickZoom.js +23 -0
  258. data/lib/leaflet/src/map/handler/Map.Drag.js +146 -0
  259. data/lib/leaflet/src/map/handler/Map.Keyboard.js +147 -0
  260. data/lib/leaflet/src/map/handler/Map.ScrollWheelZoom.js +56 -0
  261. data/lib/leaflet/src/map/handler/Map.TouchZoom.js +121 -0
  262. data/vendor/assets/images/layers.png +0 -0
  263. data/vendor/assets/images/marker-icon-2x.png +0 -0
  264. data/vendor/assets/images/marker-icon.png +0 -0
  265. data/vendor/assets/images/marker-shadow.png +0 -0
  266. data/vendor/assets/images/spritesheet.png +0 -0
  267. data/vendor/assets/javascripts/leaflet.draw.js +39 -0
  268. data/vendor/assets/javascripts/leaflet.js +145 -0
  269. data/vendor/assets/javascripts/leaflet.label.js +9 -0
  270. data/vendor/assets/stylesheets/leaflet.css.erb +459 -0
  271. data/vendor/assets/stylesheets/leaflet.draw.css.erb +212 -0
  272. data/vendor/assets/stylesheets/leaflet.draw.ie.css +44 -0
  273. data/vendor/assets/stylesheets/leaflet.ie.css +51 -0
  274. data/vendor/assets/stylesheets/leaflet.label.css +33 -0
  275. metadata +317 -0
@@ -0,0 +1,83 @@
1
+ /*
2
+ * L.PosAnimation is used by Leaflet internally for pan animations.
3
+ */
4
+
5
+ L.PosAnimation = L.Class.extend({
6
+ includes: L.Mixin.Events,
7
+
8
+ run: function (el, newPos, duration, easeLinearity) { // (HTMLElement, Point[, Number, Number])
9
+ this.stop();
10
+
11
+ this._el = el;
12
+ this._inProgress = true;
13
+
14
+ this.fire('start');
15
+
16
+ el.style[L.DomUtil.TRANSITION] = 'all ' + (duration || 0.25) +
17
+ 's cubic-bezier(0,0,' + (easeLinearity || 0.5) + ',1)';
18
+
19
+ L.DomEvent.on(el, L.DomUtil.TRANSITION_END, this._onTransitionEnd, this);
20
+ L.DomUtil.setPosition(el, newPos);
21
+
22
+ // toggle reflow, Chrome flickers for some reason if you don't do this
23
+ L.Util.falseFn(el.offsetWidth);
24
+
25
+ // there's no native way to track value updates of transitioned properties, so we imitate this
26
+ this._stepTimer = setInterval(L.bind(this._onStep, this), 50);
27
+ },
28
+
29
+ stop: function () {
30
+ if (!this._inProgress) { return; }
31
+
32
+ // if we just removed the transition property, the element would jump to its final position,
33
+ // so we need to make it stay at the current position
34
+
35
+ L.DomUtil.setPosition(this._el, this._getPos());
36
+ this._onTransitionEnd();
37
+ L.Util.falseFn(this._el.offsetWidth); // force reflow in case we are about to start a new animation
38
+ },
39
+
40
+ _onStep: function () {
41
+ // jshint camelcase: false
42
+ // make L.DomUtil.getPosition return intermediate position value during animation
43
+ this._el._leaflet_pos = this._getPos();
44
+
45
+ this.fire('step');
46
+ },
47
+
48
+ // you can't easily get intermediate values of properties animated with CSS3 Transitions,
49
+ // we need to parse computed style (in case of transform it returns matrix string)
50
+
51
+ _transformRe: /(-?[\d\.]+), (-?[\d\.]+)\)/,
52
+
53
+ _getPos: function () {
54
+ var left, top, matches,
55
+ el = this._el,
56
+ style = window.getComputedStyle(el);
57
+
58
+ if (L.Browser.any3d) {
59
+ matches = style[L.DomUtil.TRANSFORM].match(this._transformRe);
60
+ left = parseFloat(matches[1]);
61
+ top = parseFloat(matches[2]);
62
+ } else {
63
+ left = parseFloat(style.left);
64
+ top = parseFloat(style.top);
65
+ }
66
+
67
+ return new L.Point(left, top, true);
68
+ },
69
+
70
+ _onTransitionEnd: function () {
71
+ L.DomEvent.off(this._el, L.DomUtil.TRANSITION_END, this._onTransitionEnd, this);
72
+
73
+ if (!this._inProgress) { return; }
74
+ this._inProgress = false;
75
+
76
+ this._el.style[L.DomUtil.TRANSITION] = '';
77
+
78
+ clearInterval(this._stepTimer);
79
+
80
+ this.fire('step').fire('end');
81
+ }
82
+
83
+ });
@@ -0,0 +1,88 @@
1
+ /*
2
+ * L.LatLng represents a geographical point with latitude and longitude coordinates.
3
+ */
4
+
5
+ L.LatLng = function (rawLat, rawLng) { // (Number, Number)
6
+ var lat = parseFloat(rawLat),
7
+ lng = parseFloat(rawLng);
8
+
9
+ if (isNaN(lat) || isNaN(lng)) {
10
+ throw new Error('Invalid LatLng object: (' + rawLat + ', ' + rawLng + ')');
11
+ }
12
+
13
+ this.lat = lat;
14
+ this.lng = lng;
15
+ };
16
+
17
+ L.extend(L.LatLng, {
18
+ DEG_TO_RAD: Math.PI / 180,
19
+ RAD_TO_DEG: 180 / Math.PI,
20
+ MAX_MARGIN: 1.0E-9 // max margin of error for the "equals" check
21
+ });
22
+
23
+ L.LatLng.prototype = {
24
+ equals: function (obj) { // (LatLng) -> Boolean
25
+ if (!obj) { return false; }
26
+
27
+ obj = L.latLng(obj);
28
+
29
+ var margin = Math.max(
30
+ Math.abs(this.lat - obj.lat),
31
+ Math.abs(this.lng - obj.lng));
32
+
33
+ return margin <= L.LatLng.MAX_MARGIN;
34
+ },
35
+
36
+ toString: function (precision) { // (Number) -> String
37
+ return 'LatLng(' +
38
+ L.Util.formatNum(this.lat, precision) + ', ' +
39
+ L.Util.formatNum(this.lng, precision) + ')';
40
+ },
41
+
42
+ // Haversine distance formula, see http://en.wikipedia.org/wiki/Haversine_formula
43
+ // TODO move to projection code, LatLng shouldn't know about Earth
44
+ distanceTo: function (other) { // (LatLng) -> Number
45
+ other = L.latLng(other);
46
+
47
+ var R = 6378137, // earth radius in meters
48
+ d2r = L.LatLng.DEG_TO_RAD,
49
+ dLat = (other.lat - this.lat) * d2r,
50
+ dLon = (other.lng - this.lng) * d2r,
51
+ lat1 = this.lat * d2r,
52
+ lat2 = other.lat * d2r,
53
+ sin1 = Math.sin(dLat / 2),
54
+ sin2 = Math.sin(dLon / 2);
55
+
56
+ var a = sin1 * sin1 + sin2 * sin2 * Math.cos(lat1) * Math.cos(lat2);
57
+
58
+ return R * 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
59
+ },
60
+
61
+ wrap: function (a, b) { // (Number, Number) -> LatLng
62
+ var lng = this.lng;
63
+
64
+ a = a || -180;
65
+ b = b || 180;
66
+
67
+ lng = (lng + b) % (b - a) + (lng < a || lng === b ? b : a);
68
+
69
+ return new L.LatLng(this.lat, lng);
70
+ }
71
+ };
72
+
73
+ L.latLng = function (a, b) { // (LatLng) or ([Number, Number]) or (Number, Number)
74
+ if (a instanceof L.LatLng) {
75
+ return a;
76
+ }
77
+ if (L.Util.isArray(a)) {
78
+ return new L.LatLng(a[0], a[1]);
79
+ }
80
+ if (a === undefined || a === null) {
81
+ return a;
82
+ }
83
+ if (typeof a === 'object' && 'lat' in a) {
84
+ return new L.LatLng(a.lat, 'lng' in a ? a.lng : a.lon);
85
+ }
86
+ return new L.LatLng(a, b);
87
+ };
88
+
@@ -0,0 +1,153 @@
1
+ /*
2
+ * L.LatLngBounds represents a rectangular area on the map in geographical coordinates.
3
+ */
4
+
5
+ L.LatLngBounds = function (southWest, northEast) { // (LatLng, LatLng) or (LatLng[])
6
+ if (!southWest) { return; }
7
+
8
+ var latlngs = northEast ? [southWest, northEast] : southWest;
9
+
10
+ for (var i = 0, len = latlngs.length; i < len; i++) {
11
+ this.extend(latlngs[i]);
12
+ }
13
+ };
14
+
15
+ L.LatLngBounds.prototype = {
16
+ // extend the bounds to contain the given point or bounds
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);
20
+ } else {
21
+ obj = L.latLngBounds(obj);
22
+ }
23
+
24
+ if (obj instanceof L.LatLng) {
25
+ if (!this._southWest && !this._northEast) {
26
+ this._southWest = new L.LatLng(obj.lat, obj.lng);
27
+ this._northEast = new L.LatLng(obj.lat, obj.lng);
28
+ } else {
29
+ this._southWest.lat = Math.min(obj.lat, this._southWest.lat);
30
+ this._southWest.lng = Math.min(obj.lng, this._southWest.lng);
31
+
32
+ this._northEast.lat = Math.max(obj.lat, this._northEast.lat);
33
+ this._northEast.lng = Math.max(obj.lng, this._northEast.lng);
34
+ }
35
+ } else if (obj instanceof L.LatLngBounds) {
36
+ this.extend(obj._southWest);
37
+ this.extend(obj._northEast);
38
+ }
39
+ return this;
40
+ },
41
+
42
+ // extend the bounds by a percentage
43
+ pad: function (bufferRatio) { // (Number) -> LatLngBounds
44
+ var sw = this._southWest,
45
+ ne = this._northEast,
46
+ heightBuffer = Math.abs(sw.lat - ne.lat) * bufferRatio,
47
+ widthBuffer = Math.abs(sw.lng - ne.lng) * bufferRatio;
48
+
49
+ return new L.LatLngBounds(
50
+ new L.LatLng(sw.lat - heightBuffer, sw.lng - widthBuffer),
51
+ new L.LatLng(ne.lat + heightBuffer, ne.lng + widthBuffer));
52
+ },
53
+
54
+ getCenter: function () { // -> LatLng
55
+ return new L.LatLng(
56
+ (this._southWest.lat + this._northEast.lat) / 2,
57
+ (this._southWest.lng + this._northEast.lng) / 2);
58
+ },
59
+
60
+ getSouthWest: function () {
61
+ return this._southWest;
62
+ },
63
+
64
+ getNorthEast: function () {
65
+ return this._northEast;
66
+ },
67
+
68
+ getNorthWest: function () {
69
+ return new L.LatLng(this.getNorth(), this.getWest());
70
+ },
71
+
72
+ getSouthEast: function () {
73
+ return new L.LatLng(this.getSouth(), this.getEast());
74
+ },
75
+
76
+ getWest: function () {
77
+ return this._southWest.lng;
78
+ },
79
+
80
+ getSouth: function () {
81
+ return this._southWest.lat;
82
+ },
83
+
84
+ getEast: function () {
85
+ return this._northEast.lng;
86
+ },
87
+
88
+ getNorth: function () {
89
+ return this._northEast.lat;
90
+ },
91
+
92
+ contains: function (obj) { // (LatLngBounds) or (LatLng) -> Boolean
93
+ if (typeof obj[0] === 'number' || obj instanceof L.LatLng) {
94
+ obj = L.latLng(obj);
95
+ } else {
96
+ obj = L.latLngBounds(obj);
97
+ }
98
+
99
+ var sw = this._southWest,
100
+ ne = this._northEast,
101
+ sw2, ne2;
102
+
103
+ if (obj instanceof L.LatLngBounds) {
104
+ sw2 = obj.getSouthWest();
105
+ ne2 = obj.getNorthEast();
106
+ } else {
107
+ sw2 = ne2 = obj;
108
+ }
109
+
110
+ return (sw2.lat >= sw.lat) && (ne2.lat <= ne.lat) &&
111
+ (sw2.lng >= sw.lng) && (ne2.lng <= ne.lng);
112
+ },
113
+
114
+ intersects: function (bounds) { // (LatLngBounds)
115
+ bounds = L.latLngBounds(bounds);
116
+
117
+ var sw = this._southWest,
118
+ ne = this._northEast,
119
+ sw2 = bounds.getSouthWest(),
120
+ ne2 = bounds.getNorthEast(),
121
+
122
+ latIntersects = (ne2.lat >= sw.lat) && (sw2.lat <= ne.lat),
123
+ lngIntersects = (ne2.lng >= sw.lng) && (sw2.lng <= ne.lng);
124
+
125
+ return latIntersects && lngIntersects;
126
+ },
127
+
128
+ toBBoxString: function () {
129
+ return [this.getWest(), this.getSouth(), this.getEast(), this.getNorth()].join(',');
130
+ },
131
+
132
+ equals: function (bounds) { // (LatLngBounds)
133
+ if (!bounds) { return false; }
134
+
135
+ bounds = L.latLngBounds(bounds);
136
+
137
+ return this._southWest.equals(bounds.getSouthWest()) &&
138
+ this._northEast.equals(bounds.getNorthEast());
139
+ },
140
+
141
+ isValid: function () {
142
+ return !!(this._southWest && this._northEast);
143
+ }
144
+ };
145
+
146
+ //TODO International date line?
147
+
148
+ L.latLngBounds = function (a, b) { // (LatLngBounds) or (LatLng, LatLng)
149
+ if (!a || a instanceof L.LatLngBounds) {
150
+ return a;
151
+ }
152
+ return new L.LatLngBounds(a, b);
153
+ };
@@ -0,0 +1,14 @@
1
+
2
+ L.CRS.EPSG3395 = L.extend({}, L.CRS, {
3
+ code: 'EPSG:3395',
4
+
5
+ projection: L.Projection.Mercator,
6
+
7
+ transformation: (function () {
8
+ var m = L.Projection.Mercator,
9
+ r = m.R_MAJOR,
10
+ r2 = m.R_MINOR;
11
+
12
+ return new L.Transformation(0.5 / (Math.PI * r), 0.5, -0.5 / (Math.PI * r2), 0.5);
13
+ }())
14
+ });
@@ -0,0 +1,21 @@
1
+ /*
2
+ * L.CRS.EPSG3857 (Spherical Mercator) is the most common CRS for web mapping
3
+ * and is used by Leaflet by default.
4
+ */
5
+
6
+ L.CRS.EPSG3857 = L.extend({}, L.CRS, {
7
+ code: 'EPSG:3857',
8
+
9
+ projection: L.Projection.SphericalMercator,
10
+ transformation: new L.Transformation(0.5 / Math.PI, 0.5, -0.5 / Math.PI, 0.5),
11
+
12
+ project: function (latlng) { // (LatLng) -> Point
13
+ var projectedPoint = this.projection.project(latlng),
14
+ earthRadius = 6378137;
15
+ return projectedPoint.multiplyBy(earthRadius);
16
+ }
17
+ });
18
+
19
+ L.CRS.EPSG900913 = L.extend({}, L.CRS.EPSG3857, {
20
+ code: 'EPSG:900913'
21
+ });
@@ -0,0 +1,10 @@
1
+ /*
2
+ * L.CRS.EPSG4326 is a CRS popular among advanced GIS specialists.
3
+ */
4
+
5
+ L.CRS.EPSG4326 = L.extend({}, L.CRS, {
6
+ code: 'EPSG:4326',
7
+
8
+ projection: L.Projection.LonLat,
9
+ transformation: new L.Transformation(1 / 360, 0.5, -1 / 360, 0.5)
10
+ });
@@ -0,0 +1,12 @@
1
+ /*
2
+ * A simple CRS that can be used for flat non-Earth maps like panoramas or game maps.
3
+ */
4
+
5
+ L.CRS.Simple = L.extend({}, L.CRS, {
6
+ projection: L.Projection.LonLat,
7
+ transformation: new L.Transformation(1, 0, -1, 0),
8
+
9
+ scale: function (zoom) {
10
+ return Math.pow(2, zoom);
11
+ }
12
+ });
@@ -0,0 +1,27 @@
1
+ /*
2
+ * L.CRS is a base object for all defined CRS (Coordinate Reference Systems) in Leaflet.
3
+ */
4
+
5
+ L.CRS = {
6
+ latLngToPoint: function (latlng, zoom) { // (LatLng, Number) -> Point
7
+ var projectedPoint = this.projection.project(latlng),
8
+ scale = this.scale(zoom);
9
+
10
+ return this.transformation._transform(projectedPoint, scale);
11
+ },
12
+
13
+ pointToLatLng: function (point, zoom) { // (Point, Number[, Boolean]) -> LatLng
14
+ var scale = this.scale(zoom),
15
+ untransformedPoint = this.transformation.untransform(point, scale);
16
+
17
+ return this.projection.unproject(untransformedPoint);
18
+ },
19
+
20
+ project: function (latlng) {
21
+ return this.projection.project(latlng);
22
+ },
23
+
24
+ scale: function (zoom) {
25
+ return 256 * Math.pow(2, zoom);
26
+ }
27
+ };
@@ -0,0 +1,13 @@
1
+ /*
2
+ * Simple equirectangular (Plate Carree) projection, used by CRS like EPSG:4326 and Simple.
3
+ */
4
+
5
+ L.Projection.LonLat = {
6
+ project: function (latlng) {
7
+ return new L.Point(latlng.lng, latlng.lat);
8
+ },
9
+
10
+ unproject: function (point) {
11
+ return new L.LatLng(point.y, point.x);
12
+ }
13
+ };
@@ -0,0 +1,56 @@
1
+ /*
2
+ * Mercator projection that takes into account that the Earth is not a perfect sphere.
3
+ * Less popular than spherical mercator; used by projections like EPSG:3395.
4
+ */
5
+
6
+ L.Projection.Mercator = {
7
+ MAX_LATITUDE: 85.0840591556,
8
+
9
+ R_MINOR: 6356752.3142,
10
+ R_MAJOR: 6378137,
11
+
12
+ project: function (latlng) { // (LatLng) -> Point
13
+ var d = L.LatLng.DEG_TO_RAD,
14
+ max = this.MAX_LATITUDE,
15
+ lat = Math.max(Math.min(max, latlng.lat), -max),
16
+ r = this.R_MAJOR,
17
+ r2 = this.R_MINOR,
18
+ x = latlng.lng * d * r,
19
+ y = lat * d,
20
+ tmp = r2 / r,
21
+ eccent = Math.sqrt(1.0 - tmp * tmp),
22
+ con = eccent * Math.sin(y);
23
+
24
+ con = Math.pow((1 - con) / (1 + con), eccent * 0.5);
25
+
26
+ var ts = Math.tan(0.5 * ((Math.PI * 0.5) - y)) / con;
27
+ y = -r2 * Math.log(ts);
28
+
29
+ return new L.Point(x, y);
30
+ },
31
+
32
+ unproject: function (point) { // (Point, Boolean) -> LatLng
33
+ var d = L.LatLng.RAD_TO_DEG,
34
+ r = this.R_MAJOR,
35
+ r2 = this.R_MINOR,
36
+ lng = point.x * d / r,
37
+ tmp = r2 / r,
38
+ eccent = Math.sqrt(1 - (tmp * tmp)),
39
+ ts = Math.exp(- point.y / r2),
40
+ phi = (Math.PI / 2) - 2 * Math.atan(ts),
41
+ numIter = 15,
42
+ tol = 1e-7,
43
+ i = numIter,
44
+ dphi = 0.1,
45
+ con;
46
+
47
+ while ((Math.abs(dphi) > tol) && (--i > 0)) {
48
+ con = eccent * Math.sin(phi);
49
+ dphi = (Math.PI / 2) - 2 * Math.atan(ts *
50
+ Math.pow((1.0 - con) / (1.0 + con), 0.5 * eccent)) - phi;
51
+ phi += dphi;
52
+ }
53
+
54
+ return new L.LatLng(phi * d, lng);
55
+ }
56
+ };