Merge pull request #1439 from danzel/convert_option

Make Polyline/Polygon not overwrite the source array
This commit is contained in:
Vladimir Agafonkin 2013-02-21 00:08:48 -08:00
commit 9c9d4286a1
4 changed files with 119 additions and 6 deletions

View File

@ -52,6 +52,8 @@
<!-- /layer/vector/ --> <!-- /layer/vector/ -->
<script type="text/javascript" src="suites/layer/vector/CircleSpec.js"></script> <script type="text/javascript" src="suites/layer/vector/CircleSpec.js"></script>
<script type="text/javascript" src="suites/layer/vector/CircleMarkerSpec.js"></script> <script type="text/javascript" src="suites/layer/vector/CircleMarkerSpec.js"></script>
<script type="text/javascript" src="suites/layer/vector/PolygonSpec.js"></script>
<script type="text/javascript" src="suites/layer/vector/PolylineSpec.js"></script>
<script type="text/javascript" src="suites/layer/vector/PolylineGeometrySpec.js"></script> <script type="text/javascript" src="suites/layer/vector/PolylineGeometrySpec.js"></script>
<!-- /map --> <!-- /map -->

View File

@ -0,0 +1,55 @@
describe('Polygon', function() {
var c = document.createElement('div');
c.style.width = '400px';
c.style.height = '400px';
var map = new L.Map(c);
map.setView(new L.LatLng(55.8, 37.6), 6);
describe("#initialize", function() {
it("doesn't overwrite the given latlng array", function () {
var originalLatLngs = [
[1, 2],
[3, 4]
];
var sourceLatLngs = originalLatLngs.slice();
var polygon = new L.Polygon(sourceLatLngs);
expect(sourceLatLngs).toEqual(originalLatLngs);
expect(polygon._latlngs).toNotEqual(sourceLatLngs);
});
});
describe("#setLatLngs", function () {
it("doesn't overwrite the given latlng array", function () {
var originalLatLngs = [
[1, 2],
[3, 4]
];
var sourceLatLngs = originalLatLngs.slice();
var polygon = new L.Polygon(sourceLatLngs);
polygon.setLatLngs(sourceLatLngs);
expect(sourceLatLngs).toEqual(originalLatLngs);
});
});
describe("#spliceLatLngs", function () {
it("splices the internal latLngs", function () {
var latLngs = [
[1, 2],
[3, 4],
[5, 6]
];
var polygon = new L.Polygon(latLngs);
polygon.spliceLatLngs(1, 1, [7, 8]);
expect(polygon._latlngs).toEqual([L.latLng([1, 2]), L.latLng([7, 8]), L.latLng([5, 6])]);
});
});
});

View File

@ -0,0 +1,55 @@
describe('Polyline', function() {
var c = document.createElement('div');
c.style.width = '400px';
c.style.height = '400px';
var map = new L.Map(c);
map.setView(new L.LatLng(55.8, 37.6), 6);
describe("#initialize", function() {
it("doesn't overwrite the given latlng array", function () {
var originalLatLngs = [
[1, 2],
[3, 4]
];
var sourceLatLngs = originalLatLngs.slice();
var polyline = new L.Polyline(sourceLatLngs);
expect(sourceLatLngs).toEqual(originalLatLngs);
expect(polyline._latlngs).toNotEqual(sourceLatLngs);
});
});
describe("#setLatLngs", function () {
it("doesn't overwrite the given latlng array", function () {
var originalLatLngs = [
[1, 2],
[3, 4]
];
var sourceLatLngs = originalLatLngs.slice();
var polyline = new L.Polyline(sourceLatLngs);
polyline.setLatLngs(sourceLatLngs);
expect(sourceLatLngs).toEqual(originalLatLngs);
});
});
describe("#spliceLatLngs", function () {
it("splices the internal latLngs", function () {
var latLngs = [
[1, 2],
[3, 4],
[5, 6]
];
var polyline = new L.Polyline(latLngs);
polyline.spliceLatLngs(1, 1, [7, 8]);
expect(polyline._latlngs).toEqual([L.latLng([1, 2]), L.latLng([7, 8]), L.latLng([5, 6])]);
});
});
});

View File

@ -47,7 +47,7 @@ L.Polyline = L.Path.extend({
spliceLatLngs: function () { // (Number index, Number howMany) spliceLatLngs: function () { // (Number index, Number howMany)
var removed = [].splice.apply(this._latlngs, arguments); var removed = [].splice.apply(this._latlngs, arguments);
this._convertLatLngs(this._latlngs); this._convertLatLngs(this._latlngs, true);
this.redraw(); this.redraw();
return removed; return removed;
}, },
@ -85,15 +85,16 @@ L.Polyline = L.Path.extend({
return bounds; return bounds;
}, },
_convertLatLngs: function (latlngs) { _convertLatLngs: function (latlngs, overwrite) {
var i, len; var i, len, target = overwrite ? latlngs : [];
for (i = 0, len = latlngs.length; i < len; i++) { for (i = 0, len = latlngs.length; i < len; i++) {
if (L.Util.isArray(latlngs[i]) && typeof latlngs[i][0] !== 'number') { if (L.Util.isArray(latlngs[i]) && typeof latlngs[i][0] !== 'number') {
return; return;
} }
latlngs[i] = L.latLng(latlngs[i]); target[i] = L.latLng(latlngs[i]);
} }
return latlngs; return target;
}, },
_initEvents: function () { _initEvents: function () {