Allow to clone markers also

cc @deuzeffe
This commit is contained in:
Yohan Boniface 2018-07-06 23:05:05 +02:00
parent 73b8b60068
commit f96f08fc36
2 changed files with 29 additions and 13 deletions

View file

@ -376,6 +376,11 @@ L.U.FeatureMixin = {
callback: this.confirmDelete, callback: this.confirmDelete,
context: this, context: this,
iconCls: 'umap-delete' iconCls: 'umap-delete'
},
{
text: L._('Clone this feature'),
callback: this.clone,
context: this
} }
); );
return items; return items;
@ -424,6 +429,13 @@ L.U.FeatureMixin = {
isMulti: function () { isMulti: function () {
return false; return false;
},
clone: function () {
var layer = this.datalayer.geojsonToFeatures(this.toGeoJSON());
layer.isDirty = true;
layer.edit();
return layer;
} }
}; };
@ -750,11 +762,6 @@ L.U.PathMixin = {
getContextMenuEditItems: function (e) { getContextMenuEditItems: function (e) {
var items = L.U.FeatureMixin.getContextMenuEditItems.call(this, e); var items = L.U.FeatureMixin.getContextMenuEditItems.call(this, e);
items.push({
text: L._('Clone this feature'),
callback: this.clone,
context: this
});
if (this.map.editedFeature && this.isSameClass(this.map.editedFeature) && this.map.editedFeature !== this) { if (this.map.editedFeature && this.isSameClass(this.map.editedFeature) && this.map.editedFeature !== this) {
items.push({ items.push({
text: L._('Transfer shape to edited feature'), text: L._('Transfer shape to edited feature'),
@ -788,14 +795,7 @@ L.U.PathMixin = {
isOnScreen: function () { isOnScreen: function () {
var bounds = this.map.getBounds(); var bounds = this.map.getBounds();
return bounds.overlaps(this.getBounds()); return bounds.overlaps(this.getBounds());
}, }
clone: function () {
var layer = this.datalayer.geojsonToFeatures(this.toGeoJSON());
layer.isDirty = true;
layer.edit();
return layer;
},
}; };

View file

@ -31,4 +31,20 @@ describe('L.U.Marker', function () {
}); });
describe('#clone', function () {
it('should clone marker', function () {
var layer = new L.U.Marker(this.map, [10, 20], {datalayer: this.datalayer}).addTo(this.datalayer);
assert.equal(this.datalayer._index.length, 4);
other = layer.clone();
assert.ok(this.map.hasLayer(other));
assert.equal(this.datalayer._index.length, 5);
// Must not be the same reference
assert.notEqual(layer._latlng, other._latlng);
assert.equal(L.Util.formatNum(layer._latlng.lat), other._latlng.lat);
assert.equal(L.Util.formatNum(layer._latlng.lng), other._latlng.lng);
});
});
}); });