123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- L.EditToolbar.Delete = L.Handler.extend({
- statics: {
- TYPE: 'remove' // not delete as delete is reserved in js
- },
- includes: L.Mixin.Events,
- initialize: function (map, options) {
- L.Handler.prototype.initialize.call(this, map);
- L.Util.setOptions(this, options);
- // Store the selectable layer group for ease of access
- this._deletableLayers = this.options.featureGroup;
- if (!(this._deletableLayers instanceof L.FeatureGroup)) {
- throw new Error('options.featureGroup must be a L.FeatureGroup');
- }
- // Save the type so super can fire, need to do this as cannot do this.TYPE :(
- this.type = L.EditToolbar.Delete.TYPE;
- },
- enable: function () {
- if (this._enabled) {
- this.disable();
- return; }
- L.Handler.prototype.enable.call(this);
- this._deletableLayers
- .on('layeradd', this._enableLayerDelete, this)
- .on('layerremove', this._disableLayerDelete, this);
- this.fire('enabled', { handler: this.type});
- },
- disable: function () {
- if (!this._enabled) { return; }
- L.Handler.prototype.disable.call(this);
- this._deletableLayers
- .off('layeradd', this._enableLayerDelete, this)
- .off('layerremove', this._disableLayerDelete, this);
- this.fire('disabled', { handler: this.type});
- },
- addHooks: function () {
- if (this._map) {
- this._deletableLayers.eachLayer(this._enableLayerDelete, this);
- this._deletedLayers = new L.layerGroup();
- this._tooltip = new L.DrawTooltip(this._map);
- this._tooltip.updateContent({ text: L.drawLocal.edit.toolbar.remove.tooltip });
- this._map.on('mousemove', this._onMouseMove, this);
- }
- },
- removeHooks: function () {
- if (this._map) {
- this._deletableLayers.eachLayer(this._disableLayerDelete, this);
- this._deletedLayers = null;
- this._tooltip.dispose();
- this._tooltip = null;
- this._map.off('mousemove', this._onMouseMove, this);
- }
- },
- revertLayers: function () {
- // Iterate of the deleted layers and add them back into the featureGroup
- this._deletedLayers.eachLayer(function (layer) {
- this._deletableLayers.addLayer(layer);
- }, this);
- },
- save: function () {
- this._map.fire('draw:deleted', { layers: this._deletedLayers });
- },
- _enableLayerDelete: function (e) {
- var layer = e.layer || e.target || e;
- layer.on('click', this._removeLayer, this);
- },
- _disableLayerDelete: function (e) {
- var layer = e.layer || e.target || e;
- layer.off('click', this._removeLayer, this);
- // Remove from the deleted layers so we can't accidently revert if the user presses cancel
- this._deletedLayers.removeLayer(layer);
- },
- _removeLayer: function (e) {
- var layer = e.layer || e.target || e;
- this._deletableLayers.removeLayer(layer);
- this._deletedLayers.addLayer(layer);
- },
- _onMouseMove: function (e) {
- this._tooltip.updatePosition(e.latlng);
- }
- });
|