Spaces:
Running
Running
| /** | |
| * @class L.EditToolbar.Delete | |
| * @aka EditToolbar.Delete | |
| */ | |
| L.EditToolbar.Delete = L.Handler.extend({ | |
| statics: { | |
| TYPE: 'remove' // not delete as delete is reserved in js | |
| }, | |
| includes: L.Mixin.Events, | |
| // @method intialize(): void | |
| 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; | |
| }, | |
| // @method enable(): void | |
| // Enable the delete toolbar | |
| enable: function () { | |
| if (this._enabled || !this._hasAvailableLayers()) { | |
| return; | |
| } | |
| this.fire('enabled', { handler: this.type }); | |
| this._map.fire(L.Draw.Event.DELETESTART, { handler: this.type }); | |
| L.Handler.prototype.enable.call(this); | |
| this._deletableLayers | |
| .on('layeradd', this._enableLayerDelete, this) | |
| .on('layerremove', this._disableLayerDelete, this); | |
| }, | |
| // @method disable(): void | |
| // Disable the delete toolbar | |
| disable: function () { | |
| if (!this._enabled) { | |
| return; | |
| } | |
| this._deletableLayers | |
| .off('layeradd', this._enableLayerDelete, this) | |
| .off('layerremove', this._disableLayerDelete, this); | |
| L.Handler.prototype.disable.call(this); | |
| this._map.fire(L.Draw.Event.DELETESTOP, { handler: this.type }); | |
| this.fire('disabled', { handler: this.type }); | |
| }, | |
| // @method addHooks(): void | |
| // Add listener hooks to this handler | |
| addHooks: function () { | |
| var map = this._map; | |
| if (map) { | |
| map.getContainer().focus(); | |
| this._deletableLayers.eachLayer(this._enableLayerDelete, this); | |
| this._deletedLayers = new L.LayerGroup(); | |
| this._tooltip = new L.Draw.Tooltip(this._map); | |
| this._tooltip.updateContent({ text: L.drawLocal.edit.handlers.remove.tooltip.text }); | |
| this._map.on('mousemove', this._onMouseMove, this); | |
| } | |
| }, | |
| // @method removeHooks(): void | |
| // Remove listener hooks from this handler | |
| 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); | |
| } | |
| }, | |
| // @method revertLayers(): void | |
| // Revert the deleted layers back to their prior state. | |
| revertLayers: function () { | |
| // Iterate of the deleted layers and add them back into the featureGroup | |
| this._deletedLayers.eachLayer(function (layer) { | |
| this._deletableLayers.addLayer(layer); | |
| layer.fire('revert-deleted', { layer: layer }); | |
| }, this); | |
| }, | |
| // @method save(): void | |
| // Save deleted layers | |
| save: function () { | |
| this._map.fire(L.Draw.Event.DELETED, { layers: this._deletedLayers }); | |
| }, | |
| // @method removeAllLayers(): void | |
| // Remove all delateable layers | |
| removeAllLayers: function(){ | |
| // Iterate of the delateable layers and add remove them | |
| this._deletableLayers.eachLayer(function (layer) { | |
| this._removeLayer({layer:layer}); | |
| }, this); | |
| this.save(); | |
| }, | |
| _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 accidentally 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); | |
| layer.fire('deleted'); | |
| }, | |
| _onMouseMove: function (e) { | |
| this._tooltip.updatePosition(e.latlng); | |
| }, | |
| _hasAvailableLayers: function () { | |
| return this._deletableLayers.getLayers().length !== 0; | |
| } | |
| }); | |