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,125 @@
1
+ /*
2
+ * Vector rendering for IE6-8 through VML.
3
+ * Thanks to Dmitry Baranovsky and his Raphael library for inspiration!
4
+ */
5
+
6
+ L.Browser.vml = !L.Browser.svg && (function () {
7
+ try {
8
+ var div = document.createElement('div');
9
+ div.innerHTML = '<v:shape adj="1"/>';
10
+
11
+ var shape = div.firstChild;
12
+ shape.style.behavior = 'url(#default#VML)';
13
+
14
+ return shape && (typeof shape.adj === 'object');
15
+
16
+ } catch (e) {
17
+ return false;
18
+ }
19
+ }());
20
+
21
+ L.Path = L.Browser.svg || !L.Browser.vml ? L.Path : L.Path.extend({
22
+ statics: {
23
+ VML: true,
24
+ CLIP_PADDING: 0.02
25
+ },
26
+
27
+ _createElement: (function () {
28
+ try {
29
+ document.namespaces.add('lvml', 'urn:schemas-microsoft-com:vml');
30
+ return function (name) {
31
+ return document.createElement('<lvml:' + name + ' class="lvml">');
32
+ };
33
+ } catch (e) {
34
+ return function (name) {
35
+ return document.createElement(
36
+ '<' + name + ' xmlns="urn:schemas-microsoft.com:vml" class="lvml">');
37
+ };
38
+ }
39
+ }()),
40
+
41
+ _initPath: function () {
42
+ var container = this._container = this._createElement('shape');
43
+ L.DomUtil.addClass(container, 'leaflet-vml-shape');
44
+ if (this.options.clickable) {
45
+ L.DomUtil.addClass(container, 'leaflet-clickable');
46
+ }
47
+ container.coordsize = '1 1';
48
+
49
+ this._path = this._createElement('path');
50
+ container.appendChild(this._path);
51
+
52
+ this._map._pathRoot.appendChild(container);
53
+ },
54
+
55
+ _initStyle: function () {
56
+ this._updateStyle();
57
+ },
58
+
59
+ _updateStyle: function () {
60
+ var stroke = this._stroke,
61
+ fill = this._fill,
62
+ options = this.options,
63
+ container = this._container;
64
+
65
+ container.stroked = options.stroke;
66
+ container.filled = options.fill;
67
+
68
+ if (options.stroke) {
69
+ if (!stroke) {
70
+ stroke = this._stroke = this._createElement('stroke');
71
+ stroke.endcap = 'round';
72
+ container.appendChild(stroke);
73
+ }
74
+ stroke.weight = options.weight + 'px';
75
+ stroke.color = options.color;
76
+ stroke.opacity = options.opacity;
77
+
78
+ if (options.dashArray) {
79
+ stroke.dashStyle = options.dashArray instanceof Array ?
80
+ options.dashArray.join(' ') :
81
+ options.dashArray.replace(/( *, *)/g, ' ');
82
+ } else {
83
+ stroke.dashStyle = '';
84
+ }
85
+
86
+ } else if (stroke) {
87
+ container.removeChild(stroke);
88
+ this._stroke = null;
89
+ }
90
+
91
+ if (options.fill) {
92
+ if (!fill) {
93
+ fill = this._fill = this._createElement('fill');
94
+ container.appendChild(fill);
95
+ }
96
+ fill.color = options.fillColor || options.color;
97
+ fill.opacity = options.fillOpacity;
98
+
99
+ } else if (fill) {
100
+ container.removeChild(fill);
101
+ this._fill = null;
102
+ }
103
+ },
104
+
105
+ _updatePath: function () {
106
+ var style = this._container.style;
107
+
108
+ style.display = 'none';
109
+ this._path.v = this.getPathString() + ' '; // the space fixes IE empty path string bug
110
+ style.display = '';
111
+ }
112
+ });
113
+
114
+ L.Map.include(L.Browser.svg || !L.Browser.vml ? {} : {
115
+ _initPathRoot: function () {
116
+ if (this._pathRoot) { return; }
117
+
118
+ var root = this._pathRoot = document.createElement('div');
119
+ root.className = 'leaflet-vml-container';
120
+ this._panes.overlayPane.appendChild(root);
121
+
122
+ this.on('moveend', this._updatePathViewport);
123
+ this._updatePathViewport();
124
+ }
125
+ });
@@ -0,0 +1,115 @@
1
+ /*
2
+ * L.Path is a base class for rendering vector paths on a map. Inherited by Polyline, Circle, etc.
3
+ */
4
+
5
+ L.Path = L.Class.extend({
6
+ includes: [L.Mixin.Events],
7
+
8
+ statics: {
9
+ // how much to extend the clip area around the map view
10
+ // (relative to its size, e.g. 0.5 is half the screen in each direction)
11
+ // set it so that SVG element doesn't exceed 1280px (vectors flicker on dragend if it is)
12
+ CLIP_PADDING: L.Browser.mobile ?
13
+ Math.max(0, Math.min(0.5,
14
+ (1280 / Math.max(window.innerWidth, window.innerHeight) - 1) / 2)) : 0.5
15
+ },
16
+
17
+ options: {
18
+ stroke: true,
19
+ color: '#0033ff',
20
+ dashArray: null,
21
+ weight: 5,
22
+ opacity: 0.5,
23
+
24
+ fill: false,
25
+ fillColor: null, //same as color by default
26
+ fillOpacity: 0.2,
27
+
28
+ clickable: true
29
+ },
30
+
31
+ initialize: function (options) {
32
+ L.setOptions(this, options);
33
+ },
34
+
35
+ onAdd: function (map) {
36
+ this._map = map;
37
+
38
+ if (!this._container) {
39
+ this._initElements();
40
+ this._initEvents();
41
+ }
42
+
43
+ this.projectLatlngs();
44
+ this._updatePath();
45
+
46
+ if (this._container) {
47
+ this._map._pathRoot.appendChild(this._container);
48
+ }
49
+
50
+ this.fire('add');
51
+
52
+ map.on({
53
+ 'viewreset': this.projectLatlngs,
54
+ 'moveend': this._updatePath
55
+ }, this);
56
+ },
57
+
58
+ addTo: function (map) {
59
+ map.addLayer(this);
60
+ return this;
61
+ },
62
+
63
+ onRemove: function (map) {
64
+ map._pathRoot.removeChild(this._container);
65
+
66
+ // Need to fire remove event before we set _map to null as the event hooks might need the object
67
+ this.fire('remove');
68
+ this._map = null;
69
+
70
+ if (L.Browser.vml) {
71
+ this._container = null;
72
+ this._stroke = null;
73
+ this._fill = null;
74
+ }
75
+
76
+ map.off({
77
+ 'viewreset': this.projectLatlngs,
78
+ 'moveend': this._updatePath
79
+ }, this);
80
+ },
81
+
82
+ projectLatlngs: function () {
83
+ // do all projection stuff here
84
+ },
85
+
86
+ setStyle: function (style) {
87
+ L.setOptions(this, style);
88
+
89
+ if (this._container) {
90
+ this._updateStyle();
91
+ }
92
+
93
+ return this;
94
+ },
95
+
96
+ redraw: function () {
97
+ if (this._map) {
98
+ this.projectLatlngs();
99
+ this._updatePath();
100
+ }
101
+ return this;
102
+ }
103
+ });
104
+
105
+ L.Map.include({
106
+ _updatePathViewport: function () {
107
+ var p = L.Path.CLIP_PADDING,
108
+ size = this.getSize(),
109
+ panePos = L.DomUtil.getPosition(this._mapPane),
110
+ min = panePos.multiplyBy(-1)._subtract(size.multiplyBy(p)._round()),
111
+ max = min.add(size.multiplyBy(1 + p * 2)._round());
112
+
113
+ this._pathViewport = new L.Bounds(min, max);
114
+ }
115
+ });
@@ -0,0 +1,81 @@
1
+ /*
2
+ * L.Polygon is used to display polygons on a map.
3
+ */
4
+
5
+ L.Polygon = L.Polyline.extend({
6
+ options: {
7
+ fill: true
8
+ },
9
+
10
+ initialize: function (latlngs, options) {
11
+ var i, len, hole;
12
+
13
+ L.Polyline.prototype.initialize.call(this, latlngs, options);
14
+
15
+ if (latlngs && L.Util.isArray(latlngs[0]) && (typeof latlngs[0][0] !== 'number')) {
16
+ this._latlngs = this._convertLatLngs(latlngs[0]);
17
+ this._holes = latlngs.slice(1);
18
+
19
+ for (i = 0, len = this._holes.length; i < len; i++) {
20
+ hole = this._holes[i] = this._convertLatLngs(this._holes[i]);
21
+ if (hole[0].equals(hole[hole.length - 1])) {
22
+ hole.pop();
23
+ }
24
+ }
25
+ }
26
+
27
+ // filter out last point if its equal to the first one
28
+ latlngs = this._latlngs;
29
+
30
+ if (latlngs[0].equals(latlngs[latlngs.length - 1])) {
31
+ latlngs.pop();
32
+ }
33
+ },
34
+
35
+ projectLatlngs: function () {
36
+ L.Polyline.prototype.projectLatlngs.call(this);
37
+
38
+ // project polygon holes points
39
+ // TODO move this logic to Polyline to get rid of duplication
40
+ this._holePoints = [];
41
+
42
+ if (!this._holes) { return; }
43
+
44
+ var i, j, len, len2;
45
+
46
+ for (i = 0, len = this._holes.length; i < len; i++) {
47
+ this._holePoints[i] = [];
48
+
49
+ for (j = 0, len2 = this._holes[i].length; j < len2; j++) {
50
+ this._holePoints[i][j] = this._map.latLngToLayerPoint(this._holes[i][j]);
51
+ }
52
+ }
53
+ },
54
+
55
+ _clipPoints: function () {
56
+ var points = this._originalPoints,
57
+ newParts = [];
58
+
59
+ this._parts = [points].concat(this._holePoints);
60
+
61
+ if (this.options.noClip) { return; }
62
+
63
+ for (var i = 0, len = this._parts.length; i < len; i++) {
64
+ var clipped = L.PolyUtil.clipPolygon(this._parts[i], this._map._pathViewport);
65
+ if (clipped.length) {
66
+ newParts.push(clipped);
67
+ }
68
+ }
69
+
70
+ this._parts = newParts;
71
+ },
72
+
73
+ _getPathPartStr: function (points) {
74
+ var str = L.Polyline.prototype._getPathPartStr.call(this, points);
75
+ return str + (L.Browser.svg ? 'z' : 'x');
76
+ }
77
+ });
78
+
79
+ L.polygon = function (latlngs, options) {
80
+ return new L.Polygon(latlngs, options);
81
+ };
@@ -0,0 +1,164 @@
1
+ /*
2
+ * L.Polyline is used to display polylines on a map.
3
+ */
4
+
5
+ L.Polyline = L.Path.extend({
6
+ initialize: function (latlngs, options) {
7
+ L.Path.prototype.initialize.call(this, options);
8
+
9
+ this._latlngs = this._convertLatLngs(latlngs);
10
+ },
11
+
12
+ options: {
13
+ // how much to simplify the polyline on each zoom level
14
+ // more = better performance and smoother look, less = more accurate
15
+ smoothFactor: 1.0,
16
+ noClip: false
17
+ },
18
+
19
+ projectLatlngs: function () {
20
+ this._originalPoints = [];
21
+
22
+ for (var i = 0, len = this._latlngs.length; i < len; i++) {
23
+ this._originalPoints[i] = this._map.latLngToLayerPoint(this._latlngs[i]);
24
+ }
25
+ },
26
+
27
+ getPathString: function () {
28
+ for (var i = 0, len = this._parts.length, str = ''; i < len; i++) {
29
+ str += this._getPathPartStr(this._parts[i]);
30
+ }
31
+ return str;
32
+ },
33
+
34
+ getLatLngs: function () {
35
+ return this._latlngs;
36
+ },
37
+
38
+ setLatLngs: function (latlngs) {
39
+ this._latlngs = this._convertLatLngs(latlngs);
40
+ return this.redraw();
41
+ },
42
+
43
+ addLatLng: function (latlng) {
44
+ this._latlngs.push(L.latLng(latlng));
45
+ return this.redraw();
46
+ },
47
+
48
+ spliceLatLngs: function () { // (Number index, Number howMany)
49
+ var removed = [].splice.apply(this._latlngs, arguments);
50
+ this._convertLatLngs(this._latlngs, true);
51
+ this.redraw();
52
+ return removed;
53
+ },
54
+
55
+ closestLayerPoint: function (p) {
56
+ var minDistance = Infinity, parts = this._parts, p1, p2, minPoint = null;
57
+
58
+ for (var j = 0, jLen = parts.length; j < jLen; j++) {
59
+ var points = parts[j];
60
+ for (var i = 1, len = points.length; i < len; i++) {
61
+ p1 = points[i - 1];
62
+ p2 = points[i];
63
+ var sqDist = L.LineUtil._sqClosestPointOnSegment(p, p1, p2, true);
64
+ if (sqDist < minDistance) {
65
+ minDistance = sqDist;
66
+ minPoint = L.LineUtil._sqClosestPointOnSegment(p, p1, p2);
67
+ }
68
+ }
69
+ }
70
+ if (minPoint) {
71
+ minPoint.distance = Math.sqrt(minDistance);
72
+ }
73
+ return minPoint;
74
+ },
75
+
76
+ getBounds: function () {
77
+ return new L.LatLngBounds(this.getLatLngs());
78
+ },
79
+
80
+ _convertLatLngs: function (latlngs, overwrite) {
81
+ var i, len, target = overwrite ? latlngs : [];
82
+
83
+ for (i = 0, len = latlngs.length; i < len; i++) {
84
+ if (L.Util.isArray(latlngs[i]) && typeof latlngs[i][0] !== 'number') {
85
+ return;
86
+ }
87
+ target[i] = L.latLng(latlngs[i]);
88
+ }
89
+ return target;
90
+ },
91
+
92
+ _initEvents: function () {
93
+ L.Path.prototype._initEvents.call(this);
94
+ },
95
+
96
+ _getPathPartStr: function (points) {
97
+ var round = L.Path.VML;
98
+
99
+ for (var j = 0, len2 = points.length, str = '', p; j < len2; j++) {
100
+ p = points[j];
101
+ if (round) {
102
+ p._round();
103
+ }
104
+ str += (j ? 'L' : 'M') + p.x + ' ' + p.y;
105
+ }
106
+ return str;
107
+ },
108
+
109
+ _clipPoints: function () {
110
+ var points = this._originalPoints,
111
+ len = points.length,
112
+ i, k, segment;
113
+
114
+ if (this.options.noClip) {
115
+ this._parts = [points];
116
+ return;
117
+ }
118
+
119
+ this._parts = [];
120
+
121
+ var parts = this._parts,
122
+ vp = this._map._pathViewport,
123
+ lu = L.LineUtil;
124
+
125
+ for (i = 0, k = 0; i < len - 1; i++) {
126
+ segment = lu.clipSegment(points[i], points[i + 1], vp, i);
127
+ if (!segment) {
128
+ continue;
129
+ }
130
+
131
+ parts[k] = parts[k] || [];
132
+ parts[k].push(segment[0]);
133
+
134
+ // if segment goes out of screen, or it's the last one, it's the end of the line part
135
+ if ((segment[1] !== points[i + 1]) || (i === len - 2)) {
136
+ parts[k].push(segment[1]);
137
+ k++;
138
+ }
139
+ }
140
+ },
141
+
142
+ // simplify each clipped part of the polyline
143
+ _simplifyPoints: function () {
144
+ var parts = this._parts,
145
+ lu = L.LineUtil;
146
+
147
+ for (var i = 0, len = parts.length; i < len; i++) {
148
+ parts[i] = lu.simplify(parts[i], this.options.smoothFactor);
149
+ }
150
+ },
151
+
152
+ _updatePath: function () {
153
+ if (!this._map) { return; }
154
+
155
+ this._clipPoints();
156
+ this._simplifyPoints();
157
+
158
+ L.Path.prototype._updatePath.call(this);
159
+ }
160
+ });
161
+
162
+ L.polyline = function (latlngs, options) {
163
+ return new L.Polyline(latlngs, options);
164
+ };