leaflet-js 0.6.beta4 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (226) hide show
  1. checksums.yaml +6 -14
  2. data/CHANGELOG.rdoc +3 -0
  3. data/leaflet-js.gemspec +2 -2
  4. data/lib/leaflet.draw/CHANGELOG.md +45 -0
  5. data/lib/leaflet.draw/README.md +70 -23
  6. data/lib/leaflet.draw/build/deps.js +1 -0
  7. data/lib/leaflet.draw/dist/images/spritesheet-2x.png +0 -0
  8. data/lib/leaflet.draw/dist/images/spritesheet.png +0 -0
  9. data/lib/leaflet.draw/dist/leaflet.draw-src.js +489 -136
  10. data/lib/leaflet.draw/dist/leaflet.draw.css +34 -2
  11. data/lib/leaflet.draw/dist/leaflet.draw.ie.css +5 -0
  12. data/lib/leaflet.draw/dist/leaflet.draw.js +2 -2
  13. data/lib/leaflet.draw/examples/basic.html +14 -7
  14. data/lib/leaflet.draw/examples/libs/images/layers-2x.png +0 -0
  15. data/lib/leaflet.draw/examples/libs/images/layers.png +0 -0
  16. data/lib/leaflet.draw/examples/libs/images/marker-icon-2x.png +0 -0
  17. data/lib/leaflet.draw/examples/libs/leaflet-src.js +1129 -608
  18. data/lib/leaflet.draw/examples/libs/leaflet.css +85 -66
  19. data/lib/leaflet.draw/package.json +2 -2
  20. data/lib/leaflet.draw/spec/suites/DrawControlSpec.js +1 -1
  21. data/lib/leaflet.draw/spec/suites/GeometryUtilSpec.js +25 -0
  22. data/lib/leaflet.draw/spec/suites/LatLngUtilSpec.js +9 -0
  23. data/lib/leaflet.draw/src/Control.Draw.js +1 -0
  24. data/lib/leaflet.draw/src/Leaflet.draw.js +89 -1
  25. data/lib/leaflet.draw/src/Toolbar.js +2 -6
  26. data/lib/leaflet.draw/src/Tooltip.js +20 -7
  27. data/lib/leaflet.draw/src/draw/DrawToolbar.js +26 -22
  28. data/lib/leaflet.draw/src/draw/handler/Draw.Circle.js +11 -6
  29. data/lib/leaflet.draw/src/draw/handler/Draw.Feature.js +6 -2
  30. data/lib/leaflet.draw/src/draw/handler/Draw.Marker.js +7 -2
  31. data/lib/leaflet.draw/src/draw/handler/Draw.Polygon.js +29 -7
  32. data/lib/leaflet.draw/src/draw/handler/Draw.Polyline.js +44 -21
  33. data/lib/leaflet.draw/src/draw/handler/Draw.Rectangle.js +3 -3
  34. data/lib/leaflet.draw/src/draw/handler/Draw.SimpleShape.js +14 -1
  35. data/lib/leaflet.draw/src/edit/EditToolbar.js +86 -16
  36. data/lib/leaflet.draw/src/edit/handler/Edit.Poly.js +10 -7
  37. data/lib/leaflet.draw/src/edit/handler/Edit.SimpleShape.js +1 -2
  38. data/lib/leaflet.draw/src/edit/handler/EditToolbar.Delete.js +15 -3
  39. data/lib/leaflet.draw/src/edit/handler/EditToolbar.Edit.js +56 -38
  40. data/lib/leaflet.draw/src/ext/GeometryUtil.js +68 -0
  41. data/lib/leaflet.draw/src/images/spritesheet.svg +41 -0
  42. data/lib/leaflet.label/CHANGELOG.md +32 -0
  43. data/lib/leaflet.label/README.md +21 -4
  44. data/lib/leaflet.label/build/build.js +2 -2
  45. data/lib/leaflet.label/build/deps.js +2 -0
  46. data/lib/leaflet.label/build/hintrc.js +4 -0
  47. data/lib/leaflet.label/dist/leaflet.label-src.js +266 -83
  48. data/lib/leaflet.label/dist/leaflet.label.css +23 -4
  49. data/lib/leaflet.label/dist/leaflet.label.js +1 -1
  50. data/lib/leaflet.label/example/label.html +6 -3
  51. data/lib/leaflet.label/libs/leaflet/images/layers-2x.png +0 -0
  52. data/lib/leaflet.label/libs/leaflet/images/layers.png +0 -0
  53. data/lib/leaflet.label/libs/leaflet/images/marker-icon-2x.png +0 -0
  54. data/lib/leaflet.label/libs/leaflet/leaflet-src.js +1129 -608
  55. data/lib/leaflet.label/libs/leaflet/leaflet.css +85 -66
  56. data/lib/leaflet.label/libs/leaflet/leaflet.js +6 -5
  57. data/lib/leaflet.label/package.json +19 -0
  58. data/lib/leaflet.label/src/BaseMarkerMethods.js +129 -0
  59. data/lib/leaflet.label/src/CircleMarker.Label.js +7 -0
  60. data/lib/leaflet.label/src/Label.js +161 -37
  61. data/lib/leaflet.label/src/Leaflet.label.js +1 -1
  62. data/lib/leaflet.label/src/Map.Label.js +0 -2
  63. data/lib/leaflet.label/src/Marker.Label.js +15 -120
  64. data/lib/leaflet.label/src/Path.Label.js +11 -11
  65. data/lib/leaflet/CHANGELOG.md +299 -31
  66. data/lib/leaflet/CONTRIBUTING.md +3 -3
  67. data/lib/leaflet/FAQ.md +138 -0
  68. data/lib/leaflet/Jakefile.js +24 -4
  69. data/lib/leaflet/PLUGIN-GUIDE.md +127 -0
  70. data/lib/leaflet/README.md +10 -6
  71. data/lib/leaflet/build/build.html +3 -19
  72. data/lib/leaflet/build/build.js +21 -51
  73. data/lib/leaflet/build/deps.js +10 -7
  74. data/lib/leaflet/build/hintrc.js +6 -4
  75. data/lib/leaflet/debug/hacks/jitter.html +0 -1
  76. data/lib/leaflet/debug/map/canvas.html +11 -12
  77. data/lib/leaflet/debug/map/controls.html +3 -4
  78. data/lib/leaflet/debug/map/geolocation.html +0 -1
  79. data/lib/leaflet/debug/map/iframe.html +11 -0
  80. data/lib/leaflet/debug/map/image-overlay.html +0 -1
  81. data/lib/leaflet/debug/map/map-mobile.html +0 -1
  82. data/lib/leaflet/debug/map/map.html +1 -2
  83. data/lib/leaflet/debug/map/max-bounds.html +2 -1
  84. data/lib/leaflet/debug/map/opacity.html +223 -0
  85. data/lib/leaflet/debug/map/scroll.html +6 -1
  86. data/lib/leaflet/debug/map/simple-proj.html +0 -1
  87. data/lib/leaflet/debug/map/wms-marble.html +4 -5
  88. data/lib/leaflet/debug/map/wms.html +0 -1
  89. data/lib/leaflet/debug/map/zoomlevels.html +0 -1
  90. data/lib/leaflet/debug/tests/add_remove_layers.html +5 -6
  91. data/lib/leaflet/debug/tests/bringtoback.html +0 -1
  92. data/lib/leaflet/debug/tests/canvasloop.html +47 -0
  93. data/lib/leaflet/debug/tests/click_on_canvas.html +0 -1
  94. data/lib/leaflet/debug/tests/dragging_and_copyworldjump.html +61 -0
  95. data/lib/leaflet/debug/tests/opacity.html +0 -1
  96. data/lib/leaflet/debug/tests/popupcontextmenuclicks.html +59 -0
  97. data/lib/leaflet/debug/tests/remove_while_dragging.html +4 -5
  98. data/lib/leaflet/debug/tests/removetilewhilepan.html +0 -1
  99. data/lib/leaflet/debug/tests/reuse_popups.html +0 -1
  100. data/lib/leaflet/debug/tests/rtl.html +42 -0
  101. data/lib/leaflet/debug/tests/rtl2.html +27 -0
  102. data/lib/leaflet/debug/tests/set_icon_reuse_dom.html +43 -0
  103. data/lib/leaflet/debug/tests/svg_clicks.html +3 -4
  104. data/lib/leaflet/debug/vector/bounds-extend.html +0 -1
  105. data/lib/leaflet/debug/vector/feature-group-bounds.html +0 -1
  106. data/lib/leaflet/debug/vector/geojson.html +0 -1
  107. data/lib/leaflet/debug/vector/rectangle.html +0 -1
  108. data/lib/leaflet/debug/vector/touchzoomemu.html +2 -3
  109. data/lib/leaflet/debug/vector/vector-bounds.html +0 -1
  110. data/lib/leaflet/debug/vector/vector-canvas.html +0 -1
  111. data/lib/leaflet/debug/vector/vector-mobile.html +0 -1
  112. data/lib/leaflet/debug/vector/vector-simple.html +0 -1
  113. data/lib/leaflet/debug/vector/vector.html +0 -1
  114. data/lib/leaflet/dist/images/layers-2x.png +0 -0
  115. data/lib/leaflet/dist/images/layers.png +0 -0
  116. data/lib/leaflet/dist/leaflet.css +85 -66
  117. data/lib/leaflet/package.json +25 -20
  118. data/lib/leaflet/spec/after.js +1 -1
  119. data/lib/leaflet/spec/index.html +21 -13
  120. data/lib/leaflet/spec/karma.conf.js +51 -50
  121. data/lib/leaflet/spec/spec.hintrc.js +25 -0
  122. data/lib/leaflet/spec/suites/LeafletSpec.js +2 -2
  123. data/lib/leaflet/spec/suites/SpecHelper.js +37 -21
  124. data/lib/leaflet/spec/suites/control/Control.LayersSpec.js +1 -1
  125. data/lib/leaflet/spec/suites/core/ClassSpec.js +12 -12
  126. data/lib/leaflet/spec/suites/core/EventsSpec.js +74 -18
  127. data/lib/leaflet/spec/suites/core/UtilSpec.js +69 -25
  128. data/lib/leaflet/spec/suites/dom/DomEventSpec.js +16 -16
  129. data/lib/leaflet/spec/suites/dom/DomUtilSpec.js +9 -16
  130. data/lib/leaflet/spec/suites/dom/PosAnimationSpec.js +27 -0
  131. data/lib/leaflet/spec/suites/geo/CRSSpec.js +47 -0
  132. data/lib/leaflet/spec/suites/geo/LatLngBoundsSpec.js +22 -14
  133. data/lib/leaflet/spec/suites/geo/LatLngSpec.js +22 -8
  134. data/lib/leaflet/spec/suites/geo/ProjectionSpec.js +21 -20
  135. data/lib/leaflet/spec/suites/geometry/BoundsSpec.js +15 -15
  136. data/lib/leaflet/spec/suites/geometry/PointSpec.js +12 -12
  137. data/lib/leaflet/spec/suites/geometry/TransformationSpec.js +4 -4
  138. data/lib/leaflet/spec/suites/layer/FeatureGroupSpec.js +59 -9
  139. data/lib/leaflet/spec/suites/layer/GeoJSONSpec.js +213 -17
  140. data/lib/leaflet/spec/suites/layer/LayerGroupSpec.js +6 -6
  141. data/lib/leaflet/spec/suites/layer/PopupSpec.js +65 -5
  142. data/lib/leaflet/spec/suites/layer/TileLayerSpec.js +16 -15
  143. data/lib/leaflet/spec/suites/layer/marker/MarkerSpec.js +94 -0
  144. data/lib/leaflet/spec/suites/layer/vector/CircleMarkerSpec.js +7 -7
  145. data/lib/leaflet/spec/suites/layer/vector/PolygonSpec.js +38 -2
  146. data/lib/leaflet/spec/suites/layer/vector/PolylineGeometrySpec.js +4 -4
  147. data/lib/leaflet/spec/suites/layer/vector/PolylineSpec.js +2 -2
  148. data/lib/leaflet/spec/suites/map/MapSpec.js +318 -26
  149. data/lib/leaflet/spec/suites/map/handler/Map.DragSpec.js +38 -0
  150. data/lib/leaflet/src/Leaflet.js +2 -2
  151. data/lib/leaflet/src/control/Control.Attribution.js +6 -0
  152. data/lib/leaflet/src/control/Control.Layers.js +33 -24
  153. data/lib/leaflet/src/control/Control.Zoom.js +12 -4
  154. data/lib/leaflet/src/control/Control.js +10 -0
  155. data/lib/leaflet/src/copyright.js +2 -1
  156. data/lib/leaflet/src/core/Browser.js +11 -10
  157. data/lib/leaflet/src/core/Events.js +15 -11
  158. data/lib/leaflet/src/core/Util.js +19 -14
  159. data/lib/leaflet/src/dom/DomEvent.DoubleTap.js +13 -12
  160. data/lib/leaflet/src/dom/DomEvent.Pointer.js +155 -0
  161. data/lib/leaflet/src/dom/DomEvent.js +57 -19
  162. data/lib/leaflet/src/dom/DomUtil.js +89 -34
  163. data/lib/leaflet/src/dom/Draggable.js +26 -89
  164. data/lib/leaflet/src/dom/PosAnimation.js +13 -2
  165. data/lib/leaflet/src/geo/LatLng.js +16 -5
  166. data/lib/leaflet/src/geo/LatLngBounds.js +5 -2
  167. data/lib/leaflet/src/geo/crs/CRS.EPSG3395.js +2 -2
  168. data/lib/leaflet/src/geo/crs/CRS.js +5 -0
  169. data/lib/leaflet/src/geo/projection/Projection.Mercator.js +3 -3
  170. data/lib/leaflet/src/geometry/LineUtil.js +2 -2
  171. data/lib/leaflet/src/images/layers.svg +8 -0
  172. data/lib/leaflet/src/images/marker.svg +61 -1
  173. data/lib/leaflet/src/layer/FeatureGroup.js +24 -7
  174. data/lib/leaflet/src/layer/GeoJSON.js +97 -56
  175. data/lib/leaflet/src/layer/ImageOverlay.js +9 -0
  176. data/lib/leaflet/src/layer/LayerGroup.js +8 -3
  177. data/lib/leaflet/src/layer/Popup.js +56 -34
  178. data/lib/leaflet/src/layer/marker/DivIcon.js +4 -2
  179. data/lib/leaflet/src/layer/marker/Icon.Default.js +1 -1
  180. data/lib/leaflet/src/layer/marker/Icon.js +15 -18
  181. data/lib/leaflet/src/layer/marker/Marker.Drag.js +7 -5
  182. data/lib/leaflet/src/layer/marker/Marker.Popup.js +22 -5
  183. data/lib/leaflet/src/layer/marker/Marker.js +75 -32
  184. data/lib/leaflet/src/layer/tile/TileLayer.Anim.js +14 -26
  185. data/lib/leaflet/src/layer/tile/TileLayer.Canvas.js +7 -6
  186. data/lib/leaflet/src/layer/tile/TileLayer.WMS.js +14 -10
  187. data/lib/leaflet/src/layer/tile/TileLayer.js +53 -32
  188. data/lib/leaflet/src/layer/vector/CircleMarker.js +11 -0
  189. data/lib/leaflet/src/layer/vector/MultiPoly.js +10 -0
  190. data/lib/leaflet/src/layer/vector/Path.SVG.js +14 -3
  191. data/lib/leaflet/src/layer/vector/Path.VML.js +12 -2
  192. data/lib/leaflet/src/layer/vector/Path.js +7 -3
  193. data/lib/leaflet/src/layer/vector/Polygon.js +14 -3
  194. data/lib/leaflet/src/layer/vector/canvas/CircleMarker.Canvas.js +9 -0
  195. data/lib/leaflet/src/layer/vector/canvas/Path.Canvas.js +1 -0
  196. data/lib/leaflet/src/map/Map.js +192 -125
  197. data/lib/leaflet/src/map/anim/Map.PanAnimation.js +29 -19
  198. data/lib/leaflet/src/map/anim/Map.ZoomAnimation.js +21 -9
  199. data/lib/leaflet/src/map/ext/Map.Geolocation.js +11 -4
  200. data/lib/leaflet/src/map/handler/Map.BoxZoom.js +26 -12
  201. data/lib/leaflet/src/map/handler/Map.DoubleClickZoom.js +10 -3
  202. data/lib/leaflet/src/map/handler/Map.Drag.js +12 -6
  203. data/lib/leaflet/src/map/handler/Map.Keyboard.js +5 -2
  204. data/lib/leaflet/src/map/handler/Map.ScrollWheelZoom.js +7 -1
  205. data/lib/leaflet/src/map/handler/Map.Tap.js +107 -0
  206. data/lib/leaflet/src/map/handler/Map.TouchZoom.js +9 -3
  207. data/vendor/assets/images/layers-2x.png +0 -0
  208. data/vendor/assets/images/layers.png +0 -0
  209. data/vendor/assets/images/spritesheet-2x.png +0 -0
  210. data/vendor/assets/images/spritesheet.png +0 -0
  211. data/vendor/assets/javascripts/leaflet.draw.js +2 -4
  212. data/vendor/assets/javascripts/leaflet.js +3 -1
  213. data/vendor/assets/javascripts/leaflet.label.js +2 -0
  214. data/vendor/assets/stylesheets/leaflet.css.erb +337 -318
  215. data/vendor/assets/stylesheets/leaflet.draw.css.erb +35 -3
  216. data/vendor/assets/stylesheets/leaflet.draw.ie.css +5 -0
  217. data/vendor/assets/stylesheets/leaflet.label.css +23 -4
  218. metadata +40 -14
  219. data/lib/leaflet.draw/examples/libs/leaflet.ie.css +0 -51
  220. data/lib/leaflet.label/libs/leaflet/leaflet.ie.css +0 -51
  221. data/lib/leaflet/dist/leaflet-src.js +0 -8579
  222. data/lib/leaflet/dist/leaflet.ie.css +0 -51
  223. data/lib/leaflet/dist/leaflet.js +0 -8
  224. data/lib/leaflet/spec/happen.js +0 -93
  225. data/lib/leaflet/src/dom/DomEvent.MsTouch.js +0 -146
  226. data/vendor/assets/stylesheets/leaflet.ie.css +0 -51
@@ -1,64 +1,65 @@
1
1
  // Karma configuration
2
- var libSources = require(__dirname+'/../build/build.js').getFiles();
2
+ module.exports = function (config) {
3
3
 
4
- // base path, that will be used to resolve files and exclude
5
- basePath = '';
4
+ var libSources = require(__dirname+'/../build/build.js').getFiles();
6
5
 
7
- for (var i=0; i < libSources.length; i++) {
8
- libSources[i] = "../" + libSources[i];
9
- }
6
+ var files = [
7
+ "spec/before.js",
8
+ "spec/sinon.js",
9
+ "spec/expect.js"
10
+ ].concat(libSources, [
11
+ "spec/after.js",
12
+ "node_modules/happen/happen.js",
13
+ "spec/suites/SpecHelper.js",
14
+ "spec/suites/**/*.js",
15
+ {pattern: "dist/images/*.png", included: false}
16
+ ]);
10
17
 
11
- // list of files / patterns to load in the browser
12
- files = [].concat([
13
- "../node_modules/mocha/mocha.js",
14
- MOCHA_ADAPTER,
15
- "before.js",
16
- "sinon.js",
17
- "expect.js"
18
- ], libSources, [
19
- "after.js",
20
- "happen.js",
21
- "suites/SpecHelper.js",
22
- "suites/**/*.js"
23
- ]);
18
+ config.set({
19
+ // base path, that will be used to resolve files and exclude
20
+ basePath: '../',
24
21
 
25
- // list of files to exclude
26
- exclude = [
27
- ];
22
+ plugins: ['karma-mocha', 'karma-phantomjs-launcher', 'karma-chrome-launcher'],
28
23
 
29
- // test results reporter to use
30
- // possible values: 'dots', 'progress', 'junit'
31
- reporters = ['dots'];
24
+ // frameworks to use
25
+ frameworks: ['mocha'],
32
26
 
33
- // web server port
34
- port = 8080;
27
+ // list of files / patterns to load in the browser
28
+ files: files,
29
+ exclude: [],
35
30
 
36
- // cli runner port
37
- runnerPort = 9100;
31
+ // test results reporter to use
32
+ // possible values: 'dots', 'progress', 'junit', 'growl', 'coverage'
33
+ reporters: ['dots'],
38
34
 
39
- // enable / disable colors in the output (reporters and logs)
40
- colors = true;
35
+ // web server port
36
+ port: 9876,
41
37
 
42
- // level of logging
43
- // possible values: LOG_DISABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG
44
- logLevel = LOG_WARN;
38
+ // level of logging
39
+ // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
40
+ logLevel: config.LOG_WARN,
45
41
 
46
- // enable / disable watching file and executing tests whenever any file changes
47
- autoWatch = false;
42
+ // enable / disable colors in the output (reporters and logs)
43
+ colors: true,
48
44
 
49
- // Start these browsers, currently available:
50
- // - Chrome
51
- // - ChromeCanary
52
- // - Firefox
53
- // - Opera
54
- // - Safari (only Mac)
55
- // - PhantomJS
56
- // - IE (only Windows)
57
- browsers = ['PhantomJS'];
45
+ // enable / disable watching file and executing tests whenever any file changes
46
+ autoWatch: false,
58
47
 
59
- // If browser does not capture in given timeout [ms], kill it
60
- captureTimeout = 5000;
48
+ // Start these browsers, currently available:
49
+ // - Chrome
50
+ // - ChromeCanary
51
+ // - Firefox
52
+ // - Opera
53
+ // - Safari (only Mac)
54
+ // - PhantomJS
55
+ // - IE (only Windows)
56
+ browsers: ['PhantomJS'],
61
57
 
62
- // Continuous Integration mode
63
- // if true, it capture browsers, run tests and exit
64
- singleRun = true;
58
+ // If browser does not capture in given timeout [ms], kill it
59
+ captureTimeout: 5000,
60
+
61
+ // Continuous Integration mode
62
+ // if true, it capture browsers, run tests and exit
63
+ singleRun: true
64
+ });
65
+ };
@@ -0,0 +1,25 @@
1
+ {
2
+ "browser": true,
3
+ "node": true,
4
+ "predef": ["define", "L", "expect", "describe", "it", "sinon", "happen", "beforeEach", "afterEach"],
5
+ "strict": false,
6
+ "bitwise": true,
7
+ "camelcase": true,
8
+ "curly": true,
9
+ "eqeqeq": true,
10
+ "forin": false,
11
+ "immed": true,
12
+ "latedef": true,
13
+ "newcap": true,
14
+ "noarg": true,
15
+ "noempty": true,
16
+ "nonew": true,
17
+ "undef": true,
18
+ // "unused": true,
19
+ // "quotmark": "single",
20
+ "indent": 4,
21
+ "trailing": true,
22
+ "white": true,
23
+ "smarttabs": true
24
+ // "maxlen": 120
25
+ }
@@ -1,5 +1,5 @@
1
- describe('L#noConflict', function() {
2
- it('restores the previous L value and returns Leaflet namespace', function(){
1
+ describe('L#noConflict', function () {
2
+ it('restores the previous L value and returns Leaflet namespace', function () {
3
3
 
4
4
  expect(L.version).to.be.ok();
5
5
 
@@ -1,26 +1,42 @@
1
- function noSpecs() {
2
- xit('has no specs');
3
- }
4
-
5
1
  if (!Array.prototype.map) {
6
- Array.prototype.map = function(fun /*, thisp */) {
7
- "use strict";
2
+ Array.prototype.map = function (fun /*, thisp */) {
3
+ "use strict";
4
+
5
+ if (this === void 0 || this === null) {
6
+ throw new TypeError();
7
+ }
8
8
 
9
- if (this === void 0 || this === null)
10
- throw new TypeError();
9
+ var t = Object(this);
10
+ // jshint bitwise: false
11
+ var len = t.length >>> 0;
12
+ if (typeof fun !== "function") {
13
+ throw new TypeError();
14
+ }
11
15
 
12
- var t = Object(this);
13
- var len = t.length >>> 0;
14
- if (typeof fun !== "function")
15
- throw new TypeError();
16
+ var res = new Array(len);
17
+ var thisp = arguments[1];
18
+ for (var i = 0; i < len; i++) {
19
+ if (i in t) {
20
+ res[i] = fun.call(thisp, t[i], i, t);
21
+ }
22
+ }
23
+
24
+ return res;
25
+ };
26
+ }
16
27
 
17
- var res = new Array(len);
18
- var thisp = arguments[1];
19
- for (var i = 0; i < len; i++) {
20
- if (i in t)
21
- res[i] = fun.call(thisp, t[i], i, t);
22
- }
28
+ expect.Assertion.prototype.near = function (expected, delta) {
29
+ delta = delta || 1;
30
+ expect(this.obj.x).to
31
+ .be.within(expected.x - delta, expected.x + delta);
32
+ expect(this.obj.y).to
33
+ .be.within(expected.y - delta, expected.y + delta);
34
+ };
23
35
 
24
- return res;
25
- };
26
- }
36
+ expect.Assertion.prototype.nearLatLng = function (expected, delta) {
37
+ delta = delta || 1e-4;
38
+ expect(this.obj.lat).to
39
+ .be.within(expected.lat - delta, expected.lat + delta);
40
+ expect(this.obj.lng).to
41
+ .be.within(expected.lng - delta, expected.lng + delta);
42
+ };
@@ -12,7 +12,7 @@ describe("Control.Layers", function () {
12
12
  spy = sinon.spy();
13
13
 
14
14
  map.on('baselayerchange', spy)
15
- .whenReady(function() {
15
+ .whenReady(function () {
16
16
  happen.click(layers._baseLayersList.getElementsByTagName("input")[0]);
17
17
 
18
18
  expect(spy.called).to.be.ok();
@@ -1,11 +1,11 @@
1
- describe("Class", function() {
1
+ describe("Class", function () {
2
2
 
3
- describe("#extend", function() {
3
+ describe("#extend", function () {
4
4
  var Klass,
5
5
  constructor,
6
6
  method;
7
7
 
8
- beforeEach(function() {
8
+ beforeEach(function () {
9
9
  constructor = sinon.spy();
10
10
  method = sinon.spy();
11
11
 
@@ -19,7 +19,7 @@ describe("Class", function() {
19
19
  });
20
20
  });
21
21
 
22
- it("creates a class with the given constructor & properties", function() {
22
+ it("creates a class with the given constructor & properties", function () {
23
23
  var a = new Klass();
24
24
 
25
25
  expect(constructor.called).to.be.ok();
@@ -30,7 +30,7 @@ describe("Class", function() {
30
30
  expect(method.called).to.be.ok();
31
31
  });
32
32
 
33
- it("inherits parent classes' constructor & properties", function() {
33
+ it("inherits parent classes' constructor & properties", function () {
34
34
  var Klass2 = Klass.extend({baz: 2});
35
35
 
36
36
  var b = new Klass2();
@@ -46,28 +46,28 @@ describe("Class", function() {
46
46
  expect(method.called).to.be.ok();
47
47
  });
48
48
 
49
- it("supports static properties", function() {
49
+ it("supports static properties", function () {
50
50
  expect(Klass.bla).to.eql(1);
51
51
  });
52
52
 
53
- it("inherits parent static properties", function() {
53
+ it("inherits parent static properties", function () {
54
54
  var Klass2 = Klass.extend({});
55
55
 
56
56
  expect(Klass2.bla).to.eql(1);
57
57
  });
58
58
 
59
- it("overrides parent static properties", function() {
59
+ it("overrides parent static properties", function () {
60
60
  var Klass2 = Klass.extend({statics: {bla: 2}});
61
61
 
62
62
  expect(Klass2.bla).to.eql(2);
63
63
  });
64
64
 
65
- it("includes the given mixin", function() {
65
+ it("includes the given mixin", function () {
66
66
  var a = new Klass();
67
67
  expect(a.mixin).to.be.ok();
68
68
  });
69
69
 
70
- it("includes multiple mixins", function() {
70
+ it("includes multiple mixins", function () {
71
71
  var Klass2 = L.Class.extend({
72
72
  includes: [{mixin: true}, {mixin2: true}]
73
73
  });
@@ -77,14 +77,14 @@ describe("Class", function() {
77
77
  expect(a.mixin2).to.be.ok();
78
78
  });
79
79
 
80
- it("grants the ability to include the given mixin", function() {
80
+ it("grants the ability to include the given mixin", function () {
81
81
  Klass.include({mixin2: true});
82
82
 
83
83
  var a = new Klass();
84
84
  expect(a.mixin2).to.be.ok();
85
85
  });
86
86
 
87
- it("merges options instead of replacing them", function() {
87
+ it("merges options instead of replacing them", function () {
88
88
  var KlassWithOptions1 = L.Class.extend({
89
89
  options: {
90
90
  foo1: 1,
@@ -1,21 +1,21 @@
1
- describe('Events', function() {
1
+ describe('Events', function () {
2
2
  var Klass;
3
3
 
4
- beforeEach(function() {
4
+ beforeEach(function () {
5
5
  Klass = L.Class.extend({
6
6
  includes: L.Mixin.Events
7
7
  });
8
8
  });
9
9
 
10
- describe('#fireEvent', function() {
10
+ describe('#fireEvent', function () {
11
11
 
12
- it('fires all listeners added through #addEventListener', function() {
12
+ it('fires all listeners added through #addEventListener', function () {
13
13
  var obj = new Klass(),
14
14
  spy1 = sinon.spy(),
15
15
  spy2 = sinon.spy(),
16
16
  spy3 = sinon.spy(),
17
17
  spy4 = sinon.spy(),
18
- spy5 = sinon.spy();
18
+ spy5 = sinon.spy(),
19
19
  spy6 = sinon.spy();
20
20
 
21
21
  obj.addEventListener('test', spy1);
@@ -42,7 +42,7 @@ describe('Events', function() {
42
42
  expect(spy6.callCount).to.be(1);
43
43
  });
44
44
 
45
- it('provides event object to listeners and executes them in the right context', function() {
45
+ it('provides event object to listeners and executes them in the right context', function () {
46
46
  var obj = new Klass(),
47
47
  obj2 = new Klass(),
48
48
  obj3 = new Klass(),
@@ -88,7 +88,7 @@ describe('Events', function() {
88
88
  obj4.fireEvent('test', {baz: 4});
89
89
  });
90
90
 
91
- it('calls no listeners removed through #removeEventListener', function() {
91
+ it('calls no listeners removed through #removeEventListener', function () {
92
92
  var obj = new Klass(),
93
93
  spy = sinon.spy(),
94
94
  spy2 = sinon.spy(),
@@ -171,7 +171,7 @@ describe('Events', function() {
171
171
  expect(spy2.called).to.be(true);
172
172
  });
173
173
 
174
- it('removes listeners with a stamp originally added without one', function() {
174
+ it('removes listeners with a stamp originally added without one', function () {
175
175
  var obj = new Klass(),
176
176
  spy1 = sinon.spy(),
177
177
  spy2 = sinon.spy(),
@@ -189,6 +189,30 @@ describe('Events', function() {
189
189
  expect(spy1.called).to.be(false);
190
190
  expect(spy2.called).to.be(false);
191
191
  });
192
+
193
+ it('removes listeners with context == this and a stamp originally added without one', function () {
194
+ var obj = new Klass(),
195
+ obj2 = new Klass(),
196
+ spy1 = sinon.spy(),
197
+ spy2 = sinon.spy(),
198
+ spy3 = sinon.spy();
199
+
200
+ obj.addEventListener('test', spy1, obj);
201
+ L.Util.stamp(obj);
202
+ obj.addEventListener('test', spy2, obj);
203
+ obj.addEventListener('test', spy3, obj2); // So that there is a contextId based listener, otherwise removeEventListener will do correct behaviour anyway
204
+
205
+ obj.removeEventListener('test', spy1, obj);
206
+ obj.removeEventListener('test', spy2, obj);
207
+ obj.removeEventListener('test', spy3, obj2);
208
+
209
+ obj.fireEvent('test');
210
+
211
+ expect(spy1.called).to.be(false);
212
+ expect(spy2.called).to.be(false);
213
+ expect(spy3.called).to.be(false);
214
+ });
215
+
192
216
  it('doesnt lose track of listeners when removing non existent ones', function () {
193
217
  var obj = new Klass(),
194
218
  spy = sinon.spy(),
@@ -210,11 +234,43 @@ describe('Events', function() {
210
234
 
211
235
  expect(spy.called).to.be(false);
212
236
  });
237
+
238
+ it('correctly removes all listeners if given no fn', function () {
239
+ var obj = new Klass(),
240
+ spy = sinon.spy(),
241
+ foo = {},
242
+ foo2 = {},
243
+ foo3 = {};
244
+
245
+ obj.addEventListener('test', spy, foo2);
246
+ obj.addEventListener('test', spy, foo3);
247
+
248
+ obj.removeEventListener('test'); // Removes both of the above listeners
249
+
250
+ expect(obj.hasEventListeners('test')).to.be(false);
251
+
252
+ //Add and remove a listener
253
+ obj.addEventListener('test', spy, foo2);
254
+ obj.removeEventListener('test', spy, foo2);
255
+
256
+ expect(obj.hasEventListeners('test')).to.be(false);
257
+ });
258
+
259
+ it('makes sure an event is not triggered if a listener is removed during dispatch', function () {
260
+ var obj = new Klass(),
261
+ spy = sinon.spy();
262
+
263
+ obj.addEventListener('test', function () { obj.removeEventListener('test', spy); });
264
+ obj.addEventListener('test', spy);
265
+ obj.fireEvent('test');
266
+
267
+ expect(spy.called).to.be(false);
268
+ });
213
269
  });
214
270
 
215
- describe('#on, #off & #fire', function() {
271
+ describe('#on, #off & #fire', function () {
216
272
 
217
- it('works like #addEventListener && #removeEventListener', function() {
273
+ it('works like #addEventListener && #removeEventListener', function () {
218
274
  var obj = new Klass(),
219
275
  spy = sinon.spy();
220
276
 
@@ -229,7 +285,7 @@ describe('Events', function() {
229
285
  expect(spy.callCount).to.be.lessThan(2);
230
286
  });
231
287
 
232
- it('does not override existing methods with the same name', function() {
288
+ it('does not override existing methods with the same name', function () {
233
289
  var spy1 = sinon.spy(),
234
290
  spy2 = sinon.spy(),
235
291
  spy3 = sinon.spy();
@@ -254,10 +310,10 @@ describe('Events', function() {
254
310
  });
255
311
  });
256
312
 
257
- describe("#clearEventListeners", function() {
258
- it("clears all registered listeners on an object", function() {
313
+ describe("#clearEventListeners", function () {
314
+ it("clears all registered listeners on an object", function () {
259
315
  var spy = sinon.spy(),
260
- obj = new Klass()
316
+ obj = new Klass(),
261
317
  otherObj = new Klass();
262
318
 
263
319
  obj.on('test', spy, obj);
@@ -271,8 +327,8 @@ describe('Events', function() {
271
327
  });
272
328
  });
273
329
 
274
- describe('#once', function() {
275
- it('removes event listeners after first trigger', function() {
330
+ describe('#once', function () {
331
+ it('removes event listeners after first trigger', function () {
276
332
  var obj = new Klass(),
277
333
  spy = sinon.spy();
278
334
 
@@ -286,7 +342,7 @@ describe('Events', function() {
286
342
  expect(spy.callCount).to.be.lessThan(2);
287
343
  });
288
344
 
289
- it('works with an object hash', function() {
345
+ it('works with an object hash', function () {
290
346
  var obj = new Klass(),
291
347
  spy = sinon.spy(),
292
348
  otherSpy = sinon.spy();
@@ -321,7 +377,7 @@ describe('Events', function() {
321
377
  expect(spy.called).to.be(false);
322
378
  });
323
379
 
324
- it('works if called from a context that doesnt implement #Events', function() {
380
+ it('works if called from a context that doesnt implement #Events', function () {
325
381
  var obj = new Klass(),
326
382
  spy = sinon.spy(),
327
383
  foo = {};