leaflet-js 0.6.beta4

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 (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,55 @@
1
+ /*
2
+ * L.PolyUtil contains utility functions for polygons (clipping, etc.).
3
+ */
4
+
5
+ /*jshint bitwise:false */ // allow bitwise operations here
6
+
7
+ L.PolyUtil = {};
8
+
9
+ /*
10
+ * Sutherland-Hodgeman polygon clipping algorithm.
11
+ * Used to avoid rendering parts of a polygon that are not currently visible.
12
+ */
13
+ L.PolyUtil.clipPolygon = function (points, bounds) {
14
+ var clippedPoints,
15
+ edges = [1, 4, 2, 8],
16
+ i, j, k,
17
+ a, b,
18
+ len, edge, p,
19
+ lu = L.LineUtil;
20
+
21
+ for (i = 0, len = points.length; i < len; i++) {
22
+ points[i]._code = lu._getBitCode(points[i], bounds);
23
+ }
24
+
25
+ // for each edge (left, bottom, right, top)
26
+ for (k = 0; k < 4; k++) {
27
+ edge = edges[k];
28
+ clippedPoints = [];
29
+
30
+ for (i = 0, len = points.length, j = len - 1; i < len; j = i++) {
31
+ a = points[i];
32
+ b = points[j];
33
+
34
+ // if a is inside the clip window
35
+ if (!(a._code & edge)) {
36
+ // if b is outside the clip window (a->b goes out of screen)
37
+ if (b._code & edge) {
38
+ p = lu._getEdgeIntersection(b, a, edge, bounds);
39
+ p._code = lu._getBitCode(p, bounds);
40
+ clippedPoints.push(p);
41
+ }
42
+ clippedPoints.push(a);
43
+
44
+ // else if b is inside the clip window (a->b enters the screen)
45
+ } else if (!(b._code & edge)) {
46
+ p = lu._getEdgeIntersection(b, a, edge, bounds);
47
+ p._code = lu._getBitCode(p, bounds);
48
+ clippedPoints.push(p);
49
+ }
50
+ }
51
+ points = clippedPoints;
52
+ }
53
+
54
+ return points;
55
+ };
@@ -0,0 +1,31 @@
1
+ /*
2
+ * L.Transformation is an utility class to perform simple point transformations through a 2d-matrix.
3
+ */
4
+
5
+ L.Transformation = function (a, b, c, d) {
6
+ this._a = a;
7
+ this._b = b;
8
+ this._c = c;
9
+ this._d = d;
10
+ };
11
+
12
+ L.Transformation.prototype = {
13
+ transform: function (point, scale) { // (Point, Number) -> Point
14
+ return this._transform(point.clone(), scale);
15
+ },
16
+
17
+ // destructive transform (faster)
18
+ _transform: function (point, scale) {
19
+ scale = scale || 1;
20
+ point.x = scale * (this._a * point.x + this._b);
21
+ point.y = scale * (this._c * point.y + this._d);
22
+ return point;
23
+ },
24
+
25
+ untransform: function (point, scale) {
26
+ scale = scale || 1;
27
+ return new L.Point(
28
+ (point.x / scale - this._b) / this._a,
29
+ (point.y / scale - this._d) / this._c);
30
+ }
31
+ };
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="744.094" height="1052.362"><defs><linearGradient id="b"><stop offset="0" stop-color="#2e6c97"/><stop offset="1" stop-color="#3883b7"/></linearGradient><linearGradient id="a"><stop offset="0" stop-color="#126fc6"/><stop offset="1" stop-color="#4c9cd1"/></linearGradient><linearGradient xlink:href="#a" x1="351.138" y1="551.589" x2="351.138" y2="512.928" gradientUnits="userSpaceOnUse" gradientTransform="translate(-2.715)"/><linearGradient xlink:href="#a" x1="318.571" y1="550.052" x2="318.571" y2="512.422" gradientUnits="userSpaceOnUse" gradientTransform="translate(94.732 2.054)"/><linearGradient xlink:href="#a" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-1 0 0 1 731.268 2.054)" x1="318.571" y1="550.052" x2="318.571" y2="512.422"/><linearGradient xlink:href="#a" gradientUnits="userSpaceOnUse" gradientTransform="translate(94.232 2.054)" x1="318.571" y1="550.052" x2="318.571" y2="512.422"/><linearGradient xlink:href="#a" gradientUnits="userSpaceOnUse" gradientTransform="translate(-28.58 -.437)" x1="445.301" y1="541.286" x2="445.301" y2="503.72"/><linearGradient xlink:href="#b" gradientUnits="userSpaceOnUse" gradientTransform="translate(63 -.438)" x1="351.748" y1="522.774" x2="351.748" y2="503.721"/><linearGradient xlink:href="#a" gradientUnits="userSpaceOnUse" gradientTransform="translate(-28.58 -.437)" x1="445.301" y1="541.286" x2="445.301" y2="503.72"/><linearGradient xlink:href="#b" gradientUnits="userSpaceOnUse" gradientTransform="translate(63 -.438)" x1="351.748" y1="522.774" x2="351.748" y2="503.721"/><linearGradient xlink:href="#a" gradientUnits="userSpaceOnUse" gradientTransform="translate(-28.58 -.437)" x1="445.301" y1="541.286" x2="445.301" y2="503.72"/><linearGradient xlink:href="#b" gradientUnits="userSpaceOnUse" gradientTransform="translate(63 -.438)" x1="351.748" y1="522.774" x2="351.748" y2="503.721"/><linearGradient xlink:href="#a" id="c" gradientUnits="userSpaceOnUse" gradientTransform="translate(-28.846 -.287)" x1="445.301" y1="541.286" x2="445.301" y2="503.72"/><linearGradient xlink:href="#b" id="d" gradientUnits="userSpaceOnUse" gradientTransform="translate(62.734 -.288)" x1="351.748" y1="522.774" x2="351.748" y2="503.721"/><linearGradient xlink:href="#a" gradientUnits="userSpaceOnUse" gradientTransform="translate(-28.846 -.287)" x1="445.301" y1="541.286" x2="445.301" y2="503.72"/><linearGradient xlink:href="#b" gradientUnits="userSpaceOnUse" gradientTransform="translate(62.734 -.288)" x1="351.748" y1="522.774" x2="351.748" y2="503.721"/></defs><g><image y="502.237" x="369.375" xlink:href="data:image/png;base64,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 0YvhJSIAAAAASUVORK5CYII=" height="41" width="25"/><rect y="507.575" x="410.279" height="14.5" width="12.625" fill="#fff"/><path d="m416.544 503.612c-6.573 0-12.044 5.691-12.044 11.866 0 2.778 1.564 6.308 2.694 8.746l9.306 17.872 9.262-17.872c1.13-2.438 2.738-5.791 2.738-8.746 0-6.175-5.383-11.866-11.956-11.866zm0 7.155c2.584.017 4.679 2.122 4.679 4.71s-2.095 4.663-4.679 4.679c-2.584-.017-4.679-2.09-4.679-4.679 0-2.588 2.095-4.693 4.679-4.71z" fill="url(#c)" stroke="url(#d)" stroke-width="1.1" stroke-linecap="round"/><text style="line-height:125%" x="403.75" y="489.362" font-size="4" letter-spacing="0" word-spacing="0" font-family="Sans"><tspan x="403.75" y="489.362">Use this one.</tspan><tspan x="403.75" y="494.362">Select it and the area around with box select.</tspan><tspan x="403.75" y="499.362">should be exactly 25x41 at 90dpi</tspan></text><text style="line-height:125%" x="408.708" y="563.751" font-size="40" letter-spacing="0" word-spacing="0" font-family="Sans"><tspan x="408.708" y="563.751" font-size="4">How to do the inset border:</tspan><tspan x="408.708" y="568.751" font-size="4">Delete the existing inset border. Select the background, duplicate.</tspan><tspan x="408.708" y="573.751" font-size="4">Path, Dynamic offset.</tspan><tspan x="408.708" y="578.751" font-size="4">Fill: None, Stroke Paint: RGBA #ffffff1f</tspan><tspan x="408.708" y="583.751" font-size="4">Zoom down to the top and grab the diamond, drag it down and fiddle it untill it looks in line</tspan><tspan x="408.708" y="588.751" font-size="4">with the main color layers border.</tspan></text><path d="m416.531 504.719c-5.944 0-10.938 5.219-10.938 10.75 0 2.359 1.443 5.832 2.563 8.25l.031.031 8.313 15.969 8.25-15.969.031-.031c1.135-2.448 2.625-5.706 2.625-8.25 0-5.538-4.931-10.75-10.875-10.75zm0 4.969c3.168.021 5.781 2.601 5.781 5.781 0 3.18-2.613 5.761-5.781 5.781-3.168-.02-5.75-2.61-5.75-5.781 0-3.172 2.582-5.761 5.75-5.781z" stroke="#fff" stroke-width="1.1" stroke-linecap="round" stroke-opacity=".122" fill="none"/></g></svg>
@@ -0,0 +1,81 @@
1
+ /*
2
+ * L.FeatureGroup extends L.LayerGroup by introducing mouse events and additional methods
3
+ * shared between a group of interactive layers (like vectors or markers).
4
+ */
5
+
6
+ L.FeatureGroup = L.LayerGroup.extend({
7
+ includes: L.Mixin.Events,
8
+
9
+ statics: {
10
+ EVENTS: 'click dblclick mouseover mouseout mousemove contextmenu'
11
+ },
12
+
13
+ addLayer: function (layer) {
14
+ if (this.hasLayer(layer)) {
15
+ return this;
16
+ }
17
+
18
+ layer.on(L.FeatureGroup.EVENTS, this._propagateEvent, this);
19
+
20
+ L.LayerGroup.prototype.addLayer.call(this, layer);
21
+
22
+ if (this._popupContent && layer.bindPopup) {
23
+ layer.bindPopup(this._popupContent, this._popupOptions);
24
+ }
25
+
26
+ return this.fire('layeradd', {layer: layer});
27
+ },
28
+
29
+ removeLayer: function (layer) {
30
+ layer.off(L.FeatureGroup.EVENTS, this._propagateEvent, this);
31
+
32
+ L.LayerGroup.prototype.removeLayer.call(this, layer);
33
+
34
+ if (this._popupContent) {
35
+ this.invoke('unbindPopup');
36
+ }
37
+
38
+ return this.fire('layerremove', {layer: layer});
39
+ },
40
+
41
+ bindPopup: function (content, options) {
42
+ this._popupContent = content;
43
+ this._popupOptions = options;
44
+ return this.invoke('bindPopup', content, options);
45
+ },
46
+
47
+ setStyle: function (style) {
48
+ return this.invoke('setStyle', style);
49
+ },
50
+
51
+ bringToFront: function () {
52
+ return this.invoke('bringToFront');
53
+ },
54
+
55
+ bringToBack: function () {
56
+ return this.invoke('bringToBack');
57
+ },
58
+
59
+ getBounds: function () {
60
+ var bounds = new L.LatLngBounds();
61
+
62
+ this.eachLayer(function (layer) {
63
+ bounds.extend(layer instanceof L.Marker ? layer.getLatLng() : layer.getBounds());
64
+ });
65
+
66
+ return bounds;
67
+ },
68
+
69
+ _propagateEvent: function (e) {
70
+ if (!e.layer) {
71
+ e.layer = e.target;
72
+ }
73
+ e.target = this;
74
+
75
+ this.fire(e.type, e);
76
+ }
77
+ });
78
+
79
+ L.featureGroup = function (layers) {
80
+ return new L.FeatureGroup(layers);
81
+ };
@@ -0,0 +1,245 @@
1
+ /*
2
+ * L.GeoJSON turns any GeoJSON data into a Leaflet layer.
3
+ */
4
+
5
+ L.GeoJSON = L.FeatureGroup.extend({
6
+
7
+ initialize: function (geojson, options) {
8
+ L.setOptions(this, options);
9
+
10
+ this._layers = {};
11
+
12
+ if (geojson) {
13
+ this.addData(geojson);
14
+ }
15
+ },
16
+
17
+ addData: function (geojson) {
18
+ var features = L.Util.isArray(geojson) ? geojson : geojson.features,
19
+ i, len;
20
+
21
+ if (features) {
22
+ for (i = 0, len = features.length; i < len; i++) {
23
+ // Only add this if geometry or geometries are set and not null
24
+ if (features[i].geometries || features[i].geometry || features[i].features) {
25
+ this.addData(features[i]);
26
+ }
27
+ }
28
+ return this;
29
+ }
30
+
31
+ var options = this.options;
32
+
33
+ if (options.filter && !options.filter(geojson)) { return; }
34
+
35
+ var layer = L.GeoJSON.geometryToLayer(geojson, options.pointToLayer, options.coordsToLatLng);
36
+ layer.feature = geojson;
37
+
38
+ layer.defaultOptions = layer.options;
39
+ this.resetStyle(layer);
40
+
41
+ if (options.onEachFeature) {
42
+ options.onEachFeature(geojson, layer);
43
+ }
44
+
45
+ return this.addLayer(layer);
46
+ },
47
+
48
+ resetStyle: function (layer) {
49
+ var style = this.options.style;
50
+ if (style) {
51
+ // reset any custom styles
52
+ L.Util.extend(layer.options, layer.defaultOptions);
53
+
54
+ this._setLayerStyle(layer, style);
55
+ }
56
+ },
57
+
58
+ setStyle: function (style) {
59
+ this.eachLayer(function (layer) {
60
+ this._setLayerStyle(layer, style);
61
+ }, this);
62
+ },
63
+
64
+ _setLayerStyle: function (layer, style) {
65
+ if (typeof style === 'function') {
66
+ style = style(layer.feature);
67
+ }
68
+ if (layer.setStyle) {
69
+ layer.setStyle(style);
70
+ }
71
+ }
72
+ });
73
+
74
+ L.extend(L.GeoJSON, {
75
+ geometryToLayer: function (geojson, pointToLayer, coordsToLatLng) {
76
+ var geometry = geojson.type === 'Feature' ? geojson.geometry : geojson,
77
+ coords = geometry.coordinates,
78
+ layers = [],
79
+ latlng, latlngs, i, len, layer;
80
+
81
+ coordsToLatLng = coordsToLatLng || this.coordsToLatLng;
82
+
83
+ switch (geometry.type) {
84
+ case 'Point':
85
+ latlng = coordsToLatLng(coords);
86
+ return pointToLayer ? pointToLayer(geojson, latlng) : new L.Marker(latlng);
87
+
88
+ case 'MultiPoint':
89
+ for (i = 0, len = coords.length; i < len; i++) {
90
+ latlng = coordsToLatLng(coords[i]);
91
+ layer = pointToLayer ? pointToLayer(geojson, latlng) : new L.Marker(latlng);
92
+ layers.push(layer);
93
+ }
94
+ return new L.FeatureGroup(layers);
95
+
96
+ case 'LineString':
97
+ latlngs = this.coordsToLatLngs(coords, 0, coordsToLatLng);
98
+ return new L.Polyline(latlngs);
99
+
100
+ case 'Polygon':
101
+ latlngs = this.coordsToLatLngs(coords, 1, coordsToLatLng);
102
+ return new L.Polygon(latlngs);
103
+
104
+ case 'MultiLineString':
105
+ latlngs = this.coordsToLatLngs(coords, 1, coordsToLatLng);
106
+ return new L.MultiPolyline(latlngs);
107
+
108
+ case 'MultiPolygon':
109
+ latlngs = this.coordsToLatLngs(coords, 2, coordsToLatLng);
110
+ return new L.MultiPolygon(latlngs);
111
+
112
+ case 'GeometryCollection':
113
+ for (i = 0, len = geometry.geometries.length; i < len; i++) {
114
+
115
+ layer = this.geometryToLayer({
116
+ geometry: geometry.geometries[i],
117
+ type: 'Feature',
118
+ properties: geojson.properties
119
+ }, pointToLayer);
120
+
121
+ layers.push(layer);
122
+ }
123
+ return new L.FeatureGroup(layers);
124
+
125
+ default:
126
+ throw new Error('Invalid GeoJSON object.');
127
+ }
128
+ },
129
+
130
+ coordsToLatLng: function (coords) { // (Array[, Boolean]) -> LatLng
131
+ return new L.LatLng(coords[1], coords[0]);
132
+ },
133
+
134
+ coordsToLatLngs: function (coords, levelsDeep, coordsToLatLng) { // (Array[, Number, Function]) -> Array
135
+ var latlng, i, len,
136
+ latlngs = [];
137
+
138
+ for (i = 0, len = coords.length; i < len; i++) {
139
+ latlng = levelsDeep ?
140
+ this.coordsToLatLngs(coords[i], levelsDeep - 1, coordsToLatLng) :
141
+ (coordsToLatLng || this.coordsToLatLng)(coords[i]);
142
+
143
+ latlngs.push(latlng);
144
+ }
145
+
146
+ return latlngs;
147
+ },
148
+
149
+ latLngToCoords: function (latLng) {
150
+ return [latLng.lng, latLng.lat];
151
+ },
152
+
153
+ latLngsToCoords: function (latLngs) {
154
+ var coords = [];
155
+
156
+ for (var i = 0, len = latLngs.length; i < len; i++) {
157
+ coords.push(L.GeoJSON.latLngToCoords(latLngs[i]));
158
+ }
159
+
160
+ return coords;
161
+ }
162
+ });
163
+
164
+ L.Marker.include({
165
+ toGeoJSON: function () {
166
+ return {
167
+ type: 'Point',
168
+ coordinates: L.GeoJSON.latLngToCoords(this.getLatLng())
169
+ };
170
+ }
171
+ });
172
+
173
+ L.Polyline.include({
174
+ toGeoJSON: function () {
175
+ return {
176
+ type: 'LineString',
177
+ coordinates: L.GeoJSON.latLngsToCoords(this.getLatLngs())
178
+ };
179
+ }
180
+ });
181
+
182
+ L.Polygon.include({
183
+ toGeoJSON: function () {
184
+ var coords = [L.GeoJSON.latLngsToCoords(this.getLatLngs())],
185
+ i, len, hole;
186
+
187
+ coords[0].push(coords[0][0]);
188
+
189
+ if (this._holes) {
190
+ for (i = 0, len = this._holes.length; i < len; i++) {
191
+ hole = L.GeoJSON.latLngsToCoords(this._holes[i]);
192
+ hole.push(hole[0]);
193
+ coords.push(hole);
194
+ }
195
+ }
196
+
197
+ return {
198
+ type: 'Polygon',
199
+ coordinates: coords
200
+ };
201
+ }
202
+ });
203
+
204
+ (function () {
205
+ function includeMulti(Klass, type) {
206
+ Klass.include({
207
+ toGeoJSON: function () {
208
+ var coords = [];
209
+
210
+ this.eachLayer(function (layer) {
211
+ coords.push(layer.toGeoJSON().coordinates);
212
+ });
213
+
214
+ return {
215
+ type: type,
216
+ coordinates: coords
217
+ };
218
+ }
219
+ });
220
+ }
221
+
222
+ includeMulti(L.MultiPolyline, 'MultiLineString');
223
+ includeMulti(L.MultiPolygon, 'MultiPolygon');
224
+ }());
225
+
226
+ L.LayerGroup.include({
227
+ toGeoJSON: function () {
228
+ var geoms = [];
229
+
230
+ this.eachLayer(function (layer) {
231
+ if (layer.toGeoJSON) {
232
+ geoms.push(layer.toGeoJSON());
233
+ }
234
+ });
235
+
236
+ return {
237
+ type: 'GeometryCollection',
238
+ geometries: geoms
239
+ };
240
+ }
241
+ });
242
+
243
+ L.geoJson = function (geojson, options) {
244
+ return new L.GeoJSON(geojson, options);
245
+ };
@@ -0,0 +1,132 @@
1
+ /*
2
+ * L.ImageOverlay is used to overlay images over the map (to specific geographical bounds).
3
+ */
4
+
5
+ L.ImageOverlay = L.Class.extend({
6
+ includes: L.Mixin.Events,
7
+
8
+ options: {
9
+ opacity: 1
10
+ },
11
+
12
+ initialize: function (url, bounds, options) { // (String, LatLngBounds, Object)
13
+ this._url = url;
14
+ this._bounds = L.latLngBounds(bounds);
15
+
16
+ L.setOptions(this, options);
17
+ },
18
+
19
+ onAdd: function (map) {
20
+ this._map = map;
21
+
22
+ if (!this._image) {
23
+ this._initImage();
24
+ }
25
+
26
+ map._panes.overlayPane.appendChild(this._image);
27
+
28
+ map.on('viewreset', this._reset, this);
29
+
30
+ if (map.options.zoomAnimation && L.Browser.any3d) {
31
+ map.on('zoomanim', this._animateZoom, this);
32
+ }
33
+
34
+ this._reset();
35
+ },
36
+
37
+ onRemove: function (map) {
38
+ map.getPanes().overlayPane.removeChild(this._image);
39
+
40
+ map.off('viewreset', this._reset, this);
41
+
42
+ if (map.options.zoomAnimation) {
43
+ map.off('zoomanim', this._animateZoom, this);
44
+ }
45
+ },
46
+
47
+ addTo: function (map) {
48
+ map.addLayer(this);
49
+ return this;
50
+ },
51
+
52
+ setOpacity: function (opacity) {
53
+ this.options.opacity = opacity;
54
+ this._updateOpacity();
55
+ return this;
56
+ },
57
+
58
+ // TODO remove bringToFront/bringToBack duplication from TileLayer/Path
59
+ bringToFront: function () {
60
+ if (this._image) {
61
+ this._map._panes.overlayPane.appendChild(this._image);
62
+ }
63
+ return this;
64
+ },
65
+
66
+ bringToBack: function () {
67
+ var pane = this._map._panes.overlayPane;
68
+ if (this._image) {
69
+ pane.insertBefore(this._image, pane.firstChild);
70
+ }
71
+ return this;
72
+ },
73
+
74
+ _initImage: function () {
75
+ this._image = L.DomUtil.create('img', 'leaflet-image-layer');
76
+
77
+ if (this._map.options.zoomAnimation && L.Browser.any3d) {
78
+ L.DomUtil.addClass(this._image, 'leaflet-zoom-animated');
79
+ } else {
80
+ L.DomUtil.addClass(this._image, 'leaflet-zoom-hide');
81
+ }
82
+
83
+ this._updateOpacity();
84
+
85
+ //TODO createImage util method to remove duplication
86
+ L.extend(this._image, {
87
+ galleryimg: 'no',
88
+ onselectstart: L.Util.falseFn,
89
+ onmousemove: L.Util.falseFn,
90
+ onload: L.bind(this._onImageLoad, this),
91
+ src: this._url
92
+ });
93
+ },
94
+
95
+ _animateZoom: function (e) {
96
+ var map = this._map,
97
+ image = this._image,
98
+ scale = map.getZoomScale(e.zoom),
99
+ nw = this._bounds.getNorthWest(),
100
+ se = this._bounds.getSouthEast(),
101
+
102
+ topLeft = map._latLngToNewLayerPoint(nw, e.zoom, e.center),
103
+ size = map._latLngToNewLayerPoint(se, e.zoom, e.center)._subtract(topLeft),
104
+ origin = topLeft._add(size._multiplyBy((1 / 2) * (1 - 1 / scale)));
105
+
106
+ image.style[L.DomUtil.TRANSFORM] =
107
+ L.DomUtil.getTranslateString(origin) + ' scale(' + scale + ') ';
108
+ },
109
+
110
+ _reset: function () {
111
+ var image = this._image,
112
+ topLeft = this._map.latLngToLayerPoint(this._bounds.getNorthWest()),
113
+ size = this._map.latLngToLayerPoint(this._bounds.getSouthEast())._subtract(topLeft);
114
+
115
+ L.DomUtil.setPosition(image, topLeft);
116
+
117
+ image.style.width = size.x + 'px';
118
+ image.style.height = size.y + 'px';
119
+ },
120
+
121
+ _onImageLoad: function () {
122
+ this.fire('load');
123
+ },
124
+
125
+ _updateOpacity: function () {
126
+ L.DomUtil.setOpacity(this._image, this.options.opacity);
127
+ }
128
+ });
129
+
130
+ L.imageOverlay = function (url, bounds, options) {
131
+ return new L.ImageOverlay(url, bounds, options);
132
+ };