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,243 @@
1
+ /*
2
+ * L.Control.Layers is a control to allow users to switch between different layers on the map.
3
+ */
4
+
5
+ L.Control.Layers = L.Control.extend({
6
+ options: {
7
+ collapsed: true,
8
+ position: 'topright',
9
+ autoZIndex: true
10
+ },
11
+
12
+ initialize: function (baseLayers, overlays, options) {
13
+ L.setOptions(this, options);
14
+
15
+ this._layers = {};
16
+ this._lastZIndex = 0;
17
+ this._handlingClick = false;
18
+
19
+ for (var i in baseLayers) {
20
+ this._addLayer(baseLayers[i], i);
21
+ }
22
+
23
+ for (i in overlays) {
24
+ this._addLayer(overlays[i], i, true);
25
+ }
26
+ },
27
+
28
+ onAdd: function (map) {
29
+ this._initLayout();
30
+ this._update();
31
+
32
+ map
33
+ .on('layeradd', this._onLayerChange, this)
34
+ .on('layerremove', this._onLayerChange, this);
35
+
36
+ return this._container;
37
+ },
38
+
39
+ onRemove: function (map) {
40
+ map
41
+ .off('layeradd', this._onLayerChange)
42
+ .off('layerremove', this._onLayerChange);
43
+ },
44
+
45
+ addBaseLayer: function (layer, name) {
46
+ this._addLayer(layer, name);
47
+ this._update();
48
+ return this;
49
+ },
50
+
51
+ addOverlay: function (layer, name) {
52
+ this._addLayer(layer, name, true);
53
+ this._update();
54
+ return this;
55
+ },
56
+
57
+ removeLayer: function (layer) {
58
+ var id = L.stamp(layer);
59
+ delete this._layers[id];
60
+ this._update();
61
+ return this;
62
+ },
63
+
64
+ _initLayout: function () {
65
+ var className = 'leaflet-control-layers',
66
+ container = this._container = L.DomUtil.create('div', className);
67
+
68
+ if (!L.Browser.touch) {
69
+ L.DomEvent.disableClickPropagation(container);
70
+ L.DomEvent.on(container, 'mousewheel', L.DomEvent.stopPropagation);
71
+ } else {
72
+ L.DomEvent.on(container, 'click', L.DomEvent.stopPropagation);
73
+ }
74
+
75
+ var form = this._form = L.DomUtil.create('form', className + '-list');
76
+
77
+ if (this.options.collapsed) {
78
+ L.DomEvent
79
+ .on(container, 'mouseover', this._expand, this)
80
+ .on(container, 'mouseout', this._collapse, this);
81
+
82
+ var link = this._layersLink = L.DomUtil.create('a', className + '-toggle', container);
83
+ link.href = '#';
84
+ link.title = 'Layers';
85
+
86
+ if (L.Browser.touch) {
87
+ L.DomEvent
88
+ .on(link, 'click', L.DomEvent.stopPropagation)
89
+ .on(link, 'click', L.DomEvent.preventDefault)
90
+ .on(link, 'click', this._expand, this);
91
+ }
92
+ else {
93
+ L.DomEvent.on(link, 'focus', this._expand, this);
94
+ }
95
+
96
+ this._map.on('movestart', this._collapse, this);
97
+ // TODO keyboard accessibility
98
+ } else {
99
+ this._expand();
100
+ }
101
+
102
+ this._baseLayersList = L.DomUtil.create('div', className + '-base', form);
103
+ this._separator = L.DomUtil.create('div', className + '-separator', form);
104
+ this._overlaysList = L.DomUtil.create('div', className + '-overlays', form);
105
+
106
+ container.appendChild(form);
107
+ },
108
+
109
+ _addLayer: function (layer, name, overlay) {
110
+ var id = L.stamp(layer);
111
+
112
+ this._layers[id] = {
113
+ layer: layer,
114
+ name: name,
115
+ overlay: overlay
116
+ };
117
+
118
+ if (this.options.autoZIndex && layer.setZIndex) {
119
+ this._lastZIndex++;
120
+ layer.setZIndex(this._lastZIndex);
121
+ }
122
+ },
123
+
124
+ _update: function () {
125
+ if (!this._container) {
126
+ return;
127
+ }
128
+
129
+ this._baseLayersList.innerHTML = '';
130
+ this._overlaysList.innerHTML = '';
131
+
132
+ var baseLayersPresent = false,
133
+ overlaysPresent = false,
134
+ i, obj;
135
+
136
+ for (i in this._layers) {
137
+ obj = this._layers[i];
138
+ this._addItem(obj);
139
+ overlaysPresent = overlaysPresent || obj.overlay;
140
+ baseLayersPresent = baseLayersPresent || !obj.overlay;
141
+ }
142
+
143
+ this._separator.style.display = overlaysPresent && baseLayersPresent ? '' : 'none';
144
+ },
145
+
146
+ _onLayerChange: function (e) {
147
+ var id = L.stamp(e.layer);
148
+
149
+ if (this._layers[id] && !this._handlingClick) {
150
+ this._update();
151
+ }
152
+ },
153
+
154
+ // IE7 bugs out if you create a radio dynamically, so you have to do it this hacky way (see http://bit.ly/PqYLBe)
155
+ _createRadioElement: function (name, checked) {
156
+
157
+ var radioHtml = '<input type="radio" class="leaflet-control-layers-selector" name="' + name + '"';
158
+ if (checked) {
159
+ radioHtml += ' checked="checked"';
160
+ }
161
+ radioHtml += '/>';
162
+
163
+ var radioFragment = document.createElement('div');
164
+ radioFragment.innerHTML = radioHtml;
165
+
166
+ return radioFragment.firstChild;
167
+ },
168
+
169
+ _addItem: function (obj) {
170
+ var label = document.createElement('label'),
171
+ input,
172
+ checked = this._map.hasLayer(obj.layer);
173
+
174
+ if (obj.overlay) {
175
+ input = document.createElement('input');
176
+ input.type = 'checkbox';
177
+ input.className = 'leaflet-control-layers-selector';
178
+ input.defaultChecked = checked;
179
+ } else {
180
+ input = this._createRadioElement('leaflet-base-layers', checked);
181
+ }
182
+
183
+ input.layerId = L.stamp(obj.layer);
184
+
185
+ L.DomEvent.on(input, 'click', this._onInputClick, this);
186
+
187
+ var name = document.createElement('span');
188
+ name.innerHTML = ' ' + obj.name;
189
+
190
+ label.appendChild(input);
191
+ label.appendChild(name);
192
+
193
+ var container = obj.overlay ? this._overlaysList : this._baseLayersList;
194
+ container.appendChild(label);
195
+
196
+ return label;
197
+ },
198
+
199
+ _onInputClick: function () {
200
+ var i, input, obj,
201
+ inputs = this._form.getElementsByTagName('input'),
202
+ inputsLen = inputs.length,
203
+ baseLayer;
204
+
205
+ this._handlingClick = true;
206
+
207
+ for (i = 0; i < inputsLen; i++) {
208
+ input = inputs[i];
209
+ obj = this._layers[input.layerId];
210
+
211
+ if (input.checked && !this._map.hasLayer(obj.layer)) {
212
+ this._map.addLayer(obj.layer);
213
+ if (!obj.overlay) {
214
+ baseLayer = obj.layer;
215
+ } else {
216
+ this._map.fire('overlayadd', {layer: obj});
217
+ }
218
+ } else if (!input.checked && this._map.hasLayer(obj.layer)) {
219
+ this._map.removeLayer(obj.layer);
220
+ this._map.fire('overlayremove', {layer: obj});
221
+ }
222
+ }
223
+
224
+ if (baseLayer) {
225
+ this._map.setZoom(this._map.getZoom());
226
+ this._map.fire('baselayerchange', {layer: baseLayer});
227
+ }
228
+
229
+ this._handlingClick = false;
230
+ },
231
+
232
+ _expand: function () {
233
+ L.DomUtil.addClass(this._container, 'leaflet-control-layers-expanded');
234
+ },
235
+
236
+ _collapse: function () {
237
+ this._container.className = this._container.className.replace(' leaflet-control-layers-expanded', '');
238
+ }
239
+ });
240
+
241
+ L.control.layers = function (baseLayers, overlays, options) {
242
+ return new L.Control.Layers(baseLayers, overlays, options);
243
+ };
@@ -0,0 +1,112 @@
1
+ /*
2
+ * L.Control.Scale is used for displaying metric/imperial scale on the map.
3
+ */
4
+
5
+ L.Control.Scale = L.Control.extend({
6
+ options: {
7
+ position: 'bottomleft',
8
+ maxWidth: 100,
9
+ metric: true,
10
+ imperial: true,
11
+ updateWhenIdle: false
12
+ },
13
+
14
+ onAdd: function (map) {
15
+ this._map = map;
16
+
17
+ var className = 'leaflet-control-scale',
18
+ container = L.DomUtil.create('div', className),
19
+ options = this.options;
20
+
21
+ this._addScales(options, className, container);
22
+
23
+ map.on(options.updateWhenIdle ? 'moveend' : 'move', this._update, this);
24
+ map.whenReady(this._update, this);
25
+
26
+ return container;
27
+ },
28
+
29
+ onRemove: function (map) {
30
+ map.off(this.options.updateWhenIdle ? 'moveend' : 'move', this._update, this);
31
+ },
32
+
33
+ _addScales: function (options, className, container) {
34
+ if (options.metric) {
35
+ this._mScale = L.DomUtil.create('div', className + '-line', container);
36
+ }
37
+ if (options.imperial) {
38
+ this._iScale = L.DomUtil.create('div', className + '-line', container);
39
+ }
40
+ },
41
+
42
+ _update: function () {
43
+ var bounds = this._map.getBounds(),
44
+ centerLat = bounds.getCenter().lat,
45
+ halfWorldMeters = 6378137 * Math.PI * Math.cos(centerLat * Math.PI / 180),
46
+ dist = halfWorldMeters * (bounds.getNorthEast().lng - bounds.getSouthWest().lng) / 180,
47
+
48
+ size = this._map.getSize(),
49
+ options = this.options,
50
+ maxMeters = 0;
51
+
52
+ if (size.x > 0) {
53
+ maxMeters = dist * (options.maxWidth / size.x);
54
+ }
55
+
56
+ this._updateScales(options, maxMeters);
57
+ },
58
+
59
+ _updateScales: function (options, maxMeters) {
60
+ if (options.metric && maxMeters) {
61
+ this._updateMetric(maxMeters);
62
+ }
63
+
64
+ if (options.imperial && maxMeters) {
65
+ this._updateImperial(maxMeters);
66
+ }
67
+ },
68
+
69
+ _updateMetric: function (maxMeters) {
70
+ var meters = this._getRoundNum(maxMeters);
71
+
72
+ this._mScale.style.width = this._getScaleWidth(meters / maxMeters) + 'px';
73
+ this._mScale.innerHTML = meters < 1000 ? meters + ' m' : (meters / 1000) + ' km';
74
+ },
75
+
76
+ _updateImperial: function (maxMeters) {
77
+ var maxFeet = maxMeters * 3.2808399,
78
+ scale = this._iScale,
79
+ maxMiles, miles, feet;
80
+
81
+ if (maxFeet > 5280) {
82
+ maxMiles = maxFeet / 5280;
83
+ miles = this._getRoundNum(maxMiles);
84
+
85
+ scale.style.width = this._getScaleWidth(miles / maxMiles) + 'px';
86
+ scale.innerHTML = miles + ' mi';
87
+
88
+ } else {
89
+ feet = this._getRoundNum(maxFeet);
90
+
91
+ scale.style.width = this._getScaleWidth(feet / maxFeet) + 'px';
92
+ scale.innerHTML = feet + ' ft';
93
+ }
94
+ },
95
+
96
+ _getScaleWidth: function (ratio) {
97
+ return Math.round(this.options.maxWidth * ratio) - 10;
98
+ },
99
+
100
+ _getRoundNum: function (num) {
101
+ var pow10 = Math.pow(10, (Math.floor(num) + '').length - 1),
102
+ d = num / pow10;
103
+
104
+ d = d >= 10 ? 10 : d >= 5 ? 5 : d >= 3 ? 3 : d >= 2 ? 2 : 1;
105
+
106
+ return pow10 * d;
107
+ }
108
+ });
109
+
110
+ L.control.scale = function (options) {
111
+ return new L.Control.Scale(options);
112
+ };
@@ -0,0 +1,86 @@
1
+ /*
2
+ * L.Control.Zoom is used for the default zoom buttons on the map.
3
+ */
4
+
5
+ L.Control.Zoom = L.Control.extend({
6
+ options: {
7
+ position: 'topleft'
8
+ },
9
+
10
+ onAdd: function (map) {
11
+ var zoomName = 'leaflet-control-zoom',
12
+ container = L.DomUtil.create('div', zoomName + ' leaflet-bar');
13
+
14
+ this._map = map;
15
+
16
+ this._zoomInButton = this._createButton(
17
+ '+', 'Zoom in', zoomName + '-in', container, this._zoomIn, this);
18
+ this._zoomOutButton = this._createButton(
19
+ '-', 'Zoom out', zoomName + '-out', container, this._zoomOut, this);
20
+
21
+ map.on('zoomend zoomlevelschange', this._updateDisabled, this);
22
+
23
+ return container;
24
+ },
25
+
26
+ onRemove: function (map) {
27
+ map.off('zoomend zoomlevelschange', this._updateDisabled, this);
28
+ },
29
+
30
+ _zoomIn: function (e) {
31
+ this._map.zoomIn(e.shiftKey ? 3 : 1);
32
+ },
33
+
34
+ _zoomOut: function (e) {
35
+ this._map.zoomOut(e.shiftKey ? 3 : 1);
36
+ },
37
+
38
+ _createButton: function (html, title, className, container, fn, context) {
39
+ var link = L.DomUtil.create('a', className, container);
40
+ link.innerHTML = html;
41
+ link.href = '#';
42
+ link.title = title;
43
+
44
+ var stop = L.DomEvent.stopPropagation;
45
+
46
+ L.DomEvent
47
+ .on(link, 'click', stop)
48
+ .on(link, 'mousedown', stop)
49
+ .on(link, 'dblclick', stop)
50
+ .on(link, 'click', L.DomEvent.preventDefault)
51
+ .on(link, 'click', fn, context);
52
+
53
+ return link;
54
+ },
55
+
56
+ _updateDisabled: function () {
57
+ var map = this._map,
58
+ className = 'leaflet-disabled';
59
+
60
+ L.DomUtil.removeClass(this._zoomInButton, className);
61
+ L.DomUtil.removeClass(this._zoomOutButton, className);
62
+
63
+ if (map._zoom === map.getMinZoom()) {
64
+ L.DomUtil.addClass(this._zoomOutButton, className);
65
+ }
66
+ if (map._zoom === map.getMaxZoom()) {
67
+ L.DomUtil.addClass(this._zoomInButton, className);
68
+ }
69
+ }
70
+ });
71
+
72
+ L.Map.mergeOptions({
73
+ zoomControl: true
74
+ });
75
+
76
+ L.Map.addInitHook(function () {
77
+ if (this.options.zoomControl) {
78
+ this.zoomControl = new L.Control.Zoom();
79
+ this.addControl(this.zoomControl);
80
+ }
81
+ });
82
+
83
+ L.control.zoom = function (options) {
84
+ return new L.Control.Zoom(options);
85
+ };
86
+
@@ -0,0 +1,107 @@
1
+ /*
2
+ * L.Control is a base class for implementing map controls. Handles positioning.
3
+ * All other controls extend from this class.
4
+ */
5
+
6
+ L.Control = L.Class.extend({
7
+ options: {
8
+ position: 'topright'
9
+ },
10
+
11
+ initialize: function (options) {
12
+ L.setOptions(this, options);
13
+ },
14
+
15
+ getPosition: function () {
16
+ return this.options.position;
17
+ },
18
+
19
+ setPosition: function (position) {
20
+ var map = this._map;
21
+
22
+ if (map) {
23
+ map.removeControl(this);
24
+ }
25
+
26
+ this.options.position = position;
27
+
28
+ if (map) {
29
+ map.addControl(this);
30
+ }
31
+
32
+ return this;
33
+ },
34
+
35
+ getContainer: function () {
36
+ return this._container;
37
+ },
38
+
39
+ addTo: function (map) {
40
+ this._map = map;
41
+
42
+ var container = this._container = this.onAdd(map),
43
+ pos = this.getPosition(),
44
+ corner = map._controlCorners[pos];
45
+
46
+ L.DomUtil.addClass(container, 'leaflet-control');
47
+
48
+ if (pos.indexOf('bottom') !== -1) {
49
+ corner.insertBefore(container, corner.firstChild);
50
+ } else {
51
+ corner.appendChild(container);
52
+ }
53
+
54
+ return this;
55
+ },
56
+
57
+ removeFrom: function (map) {
58
+ var pos = this.getPosition(),
59
+ corner = map._controlCorners[pos];
60
+
61
+ corner.removeChild(this._container);
62
+ this._map = null;
63
+
64
+ if (this.onRemove) {
65
+ this.onRemove(map);
66
+ }
67
+
68
+ return this;
69
+ }
70
+ });
71
+
72
+ L.control = function (options) {
73
+ return new L.Control(options);
74
+ };
75
+
76
+
77
+ // adds control-related methods to L.Map
78
+
79
+ L.Map.include({
80
+ addControl: function (control) {
81
+ control.addTo(this);
82
+ return this;
83
+ },
84
+
85
+ removeControl: function (control) {
86
+ control.removeFrom(this);
87
+ return this;
88
+ },
89
+
90
+ _initControlPos: function () {
91
+ var corners = this._controlCorners = {},
92
+ l = 'leaflet-',
93
+ container = this._controlContainer =
94
+ L.DomUtil.create('div', l + 'control-container', this._container);
95
+
96
+ function createCorner(vSide, hSide) {
97
+ var className = l + vSide + ' ' + l + hSide;
98
+
99
+ corners[vSide + hSide] = L.DomUtil.create('div', className, container);
100
+ }
101
+
102
+ createCorner('top', 'left');
103
+ createCorner('top', 'right');
104
+ createCorner('bottom', 'left');
105
+ createCorner('bottom', 'right');
106
+ }
107
+ });