/* Leaflet.draw, a plugin that adds drawing and editing tools to Leaflet powered maps. (c) 2012-2013, Jacob Toye, Smartrak https://github.com/Leaflet/Leaflet.draw http://leafletjs.com https://github.com/jacobtoye */ !(function (t, e) { (L.drawVersion = "0.2.3"), (L.drawLocal = { draw: { toolbar: { actions: { title: "Cancel drawing", text: "Cancel" }, undo: { title: "Delete last point drawn", text: "Delete last point" }, buttons: { polyline: "Draw a polyline", polygon: "Draw a polygon", rectangle: "Draw a rectangle", circle: "Draw a circle", marker: "Draw a marker", }, }, handlers: { circle: { tooltip: { start: "Click and drag to draw circle." } }, marker: { tooltip: { start: "Click map to place marker." } }, polygon: { tooltip: { start: "Click to start drawing shape.", cont: "Click to continue drawing shape.", end: "Click first point to close this shape.", }, }, polyline: { error: "Error: shape edges cannot cross!", tooltip: { start: "Click to start drawing line.", cont: "Click to continue drawing line.", end: "Click last point to finish line.", }, }, rectangle: { tooltip: { start: "Click and drag to draw rectangle." } }, simpleshape: { tooltip: { end: "Release mouse to finish drawing." } }, }, }, edit: { toolbar: { actions: { save: { title: "Save changes.", text: "Save" }, cancel: { title: "Cancel editing, discards all changes.", text: "Cancel" }, }, buttons: { edit: "Edit layers.", editDisabled: "No layers to edit.", remove: "Delete layers.", removeDisabled: "No layers to delete.", }, }, handlers: { edit: { tooltip: { text: "Drag handles, or marker to edit feature.", subtext: "Click cancel to undo changes.", }, }, remove: { tooltip: { text: "Click on a feature to remove" } }, }, }, }), (L.Draw = {}), (L.Draw.Feature = L.Handler.extend({ includes: L.Mixin.Events, initialize: function (t, e) { (this._map = t), (this._container = t._container), (this._overlayPane = t._panes.overlayPane), (this._popupPane = t._panes.popupPane), e && e.shapeOptions && (e.shapeOptions = L.Util.extend({}, this.options.shapeOptions, e.shapeOptions)), L.setOptions(this, e); }, enable: function () { this._enabled || (this.fire("enabled", { handler: this.type }), this._map.fire("draw:drawstart", { layerType: this.type }), L.Handler.prototype.enable.call(this)); }, disable: function () { this._enabled && (L.Handler.prototype.disable.call(this), this._map.fire("draw:drawstop", { layerType: this.type }), this.fire("disabled", { handler: this.type })); }, addHooks: function () { var t = this._map; t && (L.DomUtil.disableTextSelection(), t.getContainer().focus(), (this._tooltip = new L.Tooltip(this._map)), L.DomEvent.on(this._container, "keyup", this._cancelDrawing, this)); }, removeHooks: function () { this._map && (L.DomUtil.enableTextSelection(), this._tooltip.dispose(), (this._tooltip = null), L.DomEvent.off(this._container, "keyup", this._cancelDrawing, this)); }, setOptions: function (t) { L.setOptions(this, t); }, _fireCreatedEvent: function (t) { this._map.fire("draw:created", { layer: t, layerType: this.type }); }, _cancelDrawing: function (t) { 27 === t.keyCode && this.disable(); }, })), (L.Draw.Polyline = L.Draw.Feature.extend({ statics: { TYPE: "polyline" }, Poly: L.Polyline, options: { allowIntersection: !0, repeatMode: !1, drawError: { color: "#b00b00", timeout: 2500 }, icon: new L.DivIcon({ iconSize: new L.Point(8, 8), className: "leaflet-div-icon leaflet-editing-icon", }), guidelineDistance: 20, maxGuideLineLength: 4e3, shapeOptions: { stroke: !0, color: "#f06eaa", weight: 4, opacity: 0.5, fill: !1, clickable: !0, }, metric: !0, showLength: !0, zIndexOffset: 2e3, }, initialize: function (t, e) { (this.options.drawError.message = L.drawLocal.draw.handlers.polyline.error), e && e.drawError && (e.drawError = L.Util.extend({}, this.options.drawError, e.drawError)), (this.type = L.Draw.Polyline.TYPE), L.Draw.Feature.prototype.initialize.call(this, t, e); }, addHooks: function () { L.Draw.Feature.prototype.addHooks.call(this), this._map && ((this._markers = []), (this._markerGroup = new L.LayerGroup()), this._map.addLayer(this._markerGroup), (this._poly = new L.Polyline([], this.options.shapeOptions)), this._tooltip.updateContent(this._getTooltipText()), this._mouseMarker || (this._mouseMarker = L.marker(this._map.getCenter(), { icon: L.divIcon({ className: "leaflet-mouse-marker", iconAnchor: [20, 20], iconSize: [40, 40], }), opacity: 0, zIndexOffset: this.options.zIndexOffset, })), this._mouseMarker.on("mousedown", this._onMouseDown, this).addTo(this._map), this._map .on("mousemove", this._onMouseMove, this) .on("mouseup", this._onMouseUp, this) .on("zoomend", this._onZoomEnd, this)); }, removeHooks: function () { L.Draw.Feature.prototype.removeHooks.call(this), this._clearHideErrorTimeout(), this._cleanUpShape(), this._map.removeLayer(this._markerGroup), delete this._markerGroup, delete this._markers, this._map.removeLayer(this._poly), delete this._poly, this._mouseMarker .off("mousedown", this._onMouseDown, this) .off("mouseup", this._onMouseUp, this), this._map.removeLayer(this._mouseMarker), delete this._mouseMarker, this._clearGuides(), this._map.off("mousemove", this._onMouseMove, this).off("zoomend", this._onZoomEnd, this); }, deleteLastVertex: function () { if (!(this._markers.length <= 1)) { var t = this._markers.pop(), e = this._poly, i = this._poly.spliceLatLngs(e.getLatLngs().length - 1, 1)[0]; this._markerGroup.removeLayer(t), e.getLatLngs().length < 2 && this._map.removeLayer(e), this._vertexChanged(i, !1); } }, addVertex: function (t) { var e = this._markers.length; return e > 0 && !this.options.allowIntersection && this._poly.newLatLngIntersects(t) ? void this._showErrorTooltip() : (this._errorShown && this._hideErrorTooltip(), this._markers.push(this._createMarker(t)), this._poly.addLatLng(t), 2 === this._poly.getLatLngs().length && this._map.addLayer(this._poly), void this._vertexChanged(t, !0)); }, _finishShape: function () { var t = this._poly.newLatLngIntersects(this._poly.getLatLngs()[0], !0); return (!this.options.allowIntersection && t) || !this._shapeIsValid() ? void this._showErrorTooltip() : (this._fireCreatedEvent(), this.disable(), void (this.options.repeatMode && this.enable())); }, _shapeIsValid: function () { return !0; }, _onZoomEnd: function () { this._updateGuide(); }, _onMouseMove: function (t) { var e = t.layerPoint, i = t.latlng; (this._currentLatLng = i), this._updateTooltip(i), this._updateGuide(e), this._mouseMarker.setLatLng(i), L.DomEvent.preventDefault(t.originalEvent); }, _vertexChanged: function (t, e) { this._updateFinishHandler(), this._updateRunningMeasure(t, e), this._clearGuides(), this._updateTooltip(); }, _onMouseDown: function (t) { var e = t.originalEvent; this._mouseDownOrigin = L.point(e.clientX, e.clientY); }, _onMouseUp: function (e) { if (this._mouseDownOrigin) { var i = L.point(e.originalEvent.clientX, e.originalEvent.clientY).distanceTo( this._mouseDownOrigin ); Math.abs(i) < 9 * (t.devicePixelRatio || 1) && this.addVertex(e.latlng); } this._mouseDownOrigin = null; }, _updateFinishHandler: function () { var t = this._markers.length; t > 1 && this._markers[t - 1].on("click", this._finishShape, this), t > 2 && this._markers[t - 2].off("click", this._finishShape, this); }, _createMarker: function (t) { var e = new L.Marker(t, { icon: this.options.icon, zIndexOffset: 2 * this.options.zIndexOffset, }); return this._markerGroup.addLayer(e), e; }, _updateGuide: function (t) { var e = this._markers.length; e > 0 && ((t = t || this._map.latLngToLayerPoint(this._currentLatLng)), this._clearGuides(), this._drawGuide(this._map.latLngToLayerPoint(this._markers[e - 1].getLatLng()), t)); }, _updateTooltip: function (t) { var e = this._getTooltipText(); t && this._tooltip.updatePosition(t), this._errorShown || this._tooltip.updateContent(e); }, _drawGuide: function (t, e) { var i, o, a, s = Math.floor(Math.sqrt(Math.pow(e.x - t.x, 2) + Math.pow(e.y - t.y, 2))), r = this.options.guidelineDistance, n = this.options.maxGuideLineLength, l = s > n ? s - n : r; for ( this._guidesContainer || (this._guidesContainer = L.DomUtil.create( "div", "leaflet-draw-guides", this._overlayPane )); s > l; l += this.options.guidelineDistance ) (i = l / s), (o = { x: Math.floor(t.x * (1 - i) + i * e.x), y: Math.floor(t.y * (1 - i) + i * e.y), }), (a = L.DomUtil.create("div", "leaflet-draw-guide-dash", this._guidesContainer)), (a.style.backgroundColor = this._errorShown ? this.options.drawError.color : this.options.shapeOptions.color), L.DomUtil.setPosition(a, o); }, _updateGuideColor: function (t) { if (this._guidesContainer) for (var e = 0, i = this._guidesContainer.childNodes.length; i > e; e++) this._guidesContainer.childNodes[e].style.backgroundColor = t; }, _clearGuides: function () { if (this._guidesContainer) for (; this._guidesContainer.firstChild; ) this._guidesContainer.removeChild(this._guidesContainer.firstChild); }, _getTooltipText: function () { var t, e, i = this.options.showLength; return ( 0 === this._markers.length ? (t = { text: L.drawLocal.draw.handlers.polyline.tooltip.start }) : ((e = i ? this._getMeasurementString() : ""), (t = 1 === this._markers.length ? { text: L.drawLocal.draw.handlers.polyline.tooltip.cont, subtext: e } : { text: L.drawLocal.draw.handlers.polyline.tooltip.end, subtext: e })), t ); }, _updateRunningMeasure: function (t, e) { var i, o, a = this._markers.length; 1 === this._markers.length ? (this._measurementRunningTotal = 0) : ((i = a - (e ? 2 : 1)), (o = t.distanceTo(this._markers[i].getLatLng())), (this._measurementRunningTotal += o * (e ? 1 : -1))); }, _getMeasurementString: function () { var t, e = this._currentLatLng, i = this._markers[this._markers.length - 1].getLatLng(); return ( (t = this._measurementRunningTotal + e.distanceTo(i)), L.GeometryUtil.readableDistance(t, this.options.metric) ); }, _showErrorTooltip: function () { (this._errorShown = !0), this._tooltip.showAsError().updateContent({ text: this.options.drawError.message }), this._updateGuideColor(this.options.drawError.color), this._poly.setStyle({ color: this.options.drawError.color }), this._clearHideErrorTimeout(), (this._hideErrorTimeout = setTimeout( L.Util.bind(this._hideErrorTooltip, this), this.options.drawError.timeout )); }, _hideErrorTooltip: function () { (this._errorShown = !1), this._clearHideErrorTimeout(), this._tooltip.removeError().updateContent(this._getTooltipText()), this._updateGuideColor(this.options.shapeOptions.color), this._poly.setStyle({ color: this.options.shapeOptions.color }); }, _clearHideErrorTimeout: function () { this._hideErrorTimeout && (clearTimeout(this._hideErrorTimeout), (this._hideErrorTimeout = null)); }, _cleanUpShape: function () { this._markers.length > 1 && this._markers[this._markers.length - 1].off("click", this._finishShape, this); }, _fireCreatedEvent: function () { var t = new this.Poly(this._poly.getLatLngs(), this.options.shapeOptions); L.Draw.Feature.prototype._fireCreatedEvent.call(this, t); }, })), (L.Draw.Polygon = L.Draw.Polyline.extend({ statics: { TYPE: "polygon" }, Poly: L.Polygon, options: { showArea: !1, shapeOptions: { stroke: !0, color: "#f06eaa", weight: 4, opacity: 0.5, fill: !0, fillColor: null, fillOpacity: 0.2, clickable: !0, }, }, initialize: function (t, e) { L.Draw.Polyline.prototype.initialize.call(this, t, e), (this.type = L.Draw.Polygon.TYPE); }, _updateFinishHandler: function () { var t = this._markers.length; 1 === t && this._markers[0].on("click", this._finishShape, this), t > 2 && (this._markers[t - 1].on("dblclick", this._finishShape, this), t > 3 && this._markers[t - 2].off("dblclick", this._finishShape, this)); }, _getTooltipText: function () { var t, e; return ( 0 === this._markers.length ? (t = L.drawLocal.draw.handlers.polygon.tooltip.start) : this._markers.length < 3 ? (t = L.drawLocal.draw.handlers.polygon.tooltip.cont) : ((t = L.drawLocal.draw.handlers.polygon.tooltip.end), (e = this._getMeasurementString())), { text: t, subtext: e } ); }, _getMeasurementString: function () { var t = this._area; return t ? L.GeometryUtil.readableArea(t, this.options.metric) : null; }, _shapeIsValid: function () { return this._markers.length >= 3; }, _vertexAdded: function () { if (!this.options.allowIntersection && this.options.showArea) { var t = this._poly.getLatLngs(); this._area = L.GeometryUtil.geodesicArea(t); } }, _cleanUpShape: function () { var t = this._markers.length; t > 0 && (this._markers[0].off("click", this._finishShape, this), t > 2 && this._markers[t - 1].off("dblclick", this._finishShape, this)); }, })), (L.SimpleShape = {}), (L.Draw.SimpleShape = L.Draw.Feature.extend({ options: { repeatMode: !1 }, initialize: function (t, e) { (this._endLabelText = L.drawLocal.draw.handlers.simpleshape.tooltip.end), L.Draw.Feature.prototype.initialize.call(this, t, e); }, addHooks: function () { L.Draw.Feature.prototype.addHooks.call(this), this._map && ((this._mapDraggable = this._map.dragging.enabled()), this._mapDraggable && this._map.dragging.disable(), (this._container.style.cursor = "crosshair"), this._tooltip.updateContent({ text: this._initialLabelText }), this._map .on("mousedown", this._onMouseDown, this) .on("mousemove", this._onMouseMove, this)); }, removeHooks: function () { L.Draw.Feature.prototype.removeHooks.call(this), this._map && (this._mapDraggable && this._map.dragging.enable(), (this._container.style.cursor = ""), this._map .off("mousedown", this._onMouseDown, this) .off("mousemove", this._onMouseMove, this), L.DomEvent.off(e, "mouseup", this._onMouseUp, this), this._shape && (this._map.removeLayer(this._shape), delete this._shape)), (this._isDrawing = !1); }, _onMouseDown: function (t) { (this._isDrawing = !0), (this._startLatLng = t.latlng), L.DomEvent.on(e, "mouseup", this._onMouseUp, this).preventDefault(t.originalEvent); }, _onMouseMove: function (t) { var e = t.latlng; this._tooltip.updatePosition(e), this._isDrawing && (this._tooltip.updateContent({ text: this._endLabelText }), this._drawShape(e)); }, _onMouseUp: function () { this._shape && this._fireCreatedEvent(), this.disable(), this.options.repeatMode && this.enable(); }, })), (L.Draw.Rectangle = L.Draw.SimpleShape.extend({ statics: { TYPE: "rectangle" }, options: { shapeOptions: { stroke: !0, color: "#f06eaa", weight: 4, opacity: 0.5, fill: !0, fillColor: null, fillOpacity: 0.2, clickable: !0, }, }, initialize: function (t, e) { (this.type = L.Draw.Rectangle.TYPE), (this._initialLabelText = L.drawLocal.draw.handlers.rectangle.tooltip.start), L.Draw.SimpleShape.prototype.initialize.call(this, t, e); }, _drawShape: function (t) { this._shape ? this._shape.setBounds(new L.LatLngBounds(this._startLatLng, t)) : ((this._shape = new L.Rectangle( new L.LatLngBounds(this._startLatLng, t), this.options.shapeOptions )), this._map.addLayer(this._shape)); }, _fireCreatedEvent: function () { var t = new L.Rectangle(this._shape.getBounds(), this.options.shapeOptions); L.Draw.SimpleShape.prototype._fireCreatedEvent.call(this, t); }, })), (L.Draw.Circle = L.Draw.SimpleShape.extend({ statics: { TYPE: "circle" }, options: { shapeOptions: { stroke: !0, color: "#f06eaa", weight: 4, opacity: 0.5, fill: !0, fillColor: null, fillOpacity: 0.2, clickable: !0, }, showRadius: !0, metric: !0, }, initialize: function (t, e) { (this.type = L.Draw.Circle.TYPE), (this._initialLabelText = L.drawLocal.draw.handlers.circle.tooltip.start), L.Draw.SimpleShape.prototype.initialize.call(this, t, e); }, _drawShape: function (t) { this._shape ? this._shape.setRadius(this._startLatLng.distanceTo(t)) : ((this._shape = new L.Circle( this._startLatLng, this._startLatLng.distanceTo(t), this.options.shapeOptions )), this._map.addLayer(this._shape)); }, _fireCreatedEvent: function () { var t = new L.Circle(this._startLatLng, this._shape.getRadius(), this.options.shapeOptions); L.Draw.SimpleShape.prototype._fireCreatedEvent.call(this, t); }, _onMouseMove: function (t) { var e, i = t.latlng, o = this.options.showRadius, a = this.options.metric; this._tooltip.updatePosition(i), this._isDrawing && (this._drawShape(i), (e = this._shape.getRadius().toFixed(1)), this._tooltip.updateContent({ text: this._endLabelText, subtext: o ? "Radius: " + L.GeometryUtil.readableDistance(e, a) : "", })); }, })), (L.Draw.Marker = L.Draw.Feature.extend({ statics: { TYPE: "marker" }, options: { icon: new L.Icon.Default(), repeatMode: !1, zIndexOffset: 2e3 }, initialize: function (t, e) { (this.type = L.Draw.Marker.TYPE), L.Draw.Feature.prototype.initialize.call(this, t, e); }, addHooks: function () { L.Draw.Feature.prototype.addHooks.call(this), this._map && (this._tooltip.updateContent({ text: L.drawLocal.draw.handlers.marker.tooltip.start, }), this._mouseMarker || (this._mouseMarker = L.marker(this._map.getCenter(), { icon: L.divIcon({ className: "leaflet-mouse-marker", iconAnchor: [20, 20], iconSize: [40, 40], }), opacity: 0, zIndexOffset: this.options.zIndexOffset, })), this._mouseMarker.on("click", this._onClick, this).addTo(this._map), this._map.on("mousemove", this._onMouseMove, this)); }, removeHooks: function () { L.Draw.Feature.prototype.removeHooks.call(this), this._map && (this._marker && (this._marker.off("click", this._onClick, this), this._map.off("click", this._onClick, this).removeLayer(this._marker), delete this._marker), this._mouseMarker.off("click", this._onClick, this), this._map.removeLayer(this._mouseMarker), delete this._mouseMarker, this._map.off("mousemove", this._onMouseMove, this)); }, _onMouseMove: function (t) { var e = t.latlng; this._tooltip.updatePosition(e), this._mouseMarker.setLatLng(e), this._marker ? ((e = this._mouseMarker.getLatLng()), this._marker.setLatLng(e)) : ((this._marker = new L.Marker(e, { icon: this.options.icon, zIndexOffset: this.options.zIndexOffset, })), this._marker.on("click", this._onClick, this), this._map.on("click", this._onClick, this).addLayer(this._marker)); }, _onClick: function () { this._fireCreatedEvent(), this.disable(), this.options.repeatMode && this.enable(); }, _fireCreatedEvent: function () { var t = new L.Marker(this._marker.getLatLng(), { icon: this.options.icon }); L.Draw.Feature.prototype._fireCreatedEvent.call(this, t); }, })), (L.Edit = L.Edit || {}), (L.Edit.Poly = L.Handler.extend({ options: { icon: new L.DivIcon({ iconSize: new L.Point(8, 8), className: "leaflet-div-icon leaflet-editing-icon", }), }, initialize: function (t, e) { (this._poly = t), L.setOptions(this, e); }, addHooks: function () { this._poly._map && (this._markerGroup || this._initMarkers(), this._poly._map.addLayer(this._markerGroup)); }, removeHooks: function () { this._poly._map && (this._poly._map.removeLayer(this._markerGroup), delete this._markerGroup, delete this._markers); }, updateMarkers: function () { this._markerGroup.clearLayers(), this._initMarkers(); }, _initMarkers: function () { this._markerGroup || (this._markerGroup = new L.LayerGroup()), (this._markers = []); var t, e, i, o, a = this._poly._latlngs; for (t = 0, i = a.length; i > t; t++) (o = this._createMarker(a[t], t)), o.on("click", this._onMarkerClick, this), this._markers.push(o); var s, r; for (t = 0, e = i - 1; i > t; e = t++) (0 !== t || (L.Polygon && this._poly instanceof L.Polygon)) && ((s = this._markers[e]), (r = this._markers[t]), this._createMiddleMarker(s, r), this._updatePrevNext(s, r)); }, _createMarker: function (t, e) { var i = new L.Marker(t, { draggable: !0, icon: this.options.icon }); return ( (i._origLatLng = t), (i._index = e), i.on("drag", this._onMarkerDrag, this), i.on("dragend", this._fireEdit, this), this._markerGroup.addLayer(i), i ); }, _removeMarker: function (t) { var e = t._index; this._markerGroup.removeLayer(t), this._markers.splice(e, 1), this._poly.spliceLatLngs(e, 1), this._updateIndexes(e, -1), t .off("drag", this._onMarkerDrag, this) .off("dragend", this._fireEdit, this) .off("click", this._onMarkerClick, this); }, _fireEdit: function () { (this._poly.edited = !0), this._poly.fire("edit"); }, _onMarkerDrag: function (t) { var e = t.target; L.extend(e._origLatLng, e._latlng), e._middleLeft && e._middleLeft.setLatLng(this._getMiddleLatLng(e._prev, e)), e._middleRight && e._middleRight.setLatLng(this._getMiddleLatLng(e, e._next)), this._poly.redraw(); }, _onMarkerClick: function (t) { var e = L.Polygon && this._poly instanceof L.Polygon ? 4 : 3, i = t.target; this._poly._latlngs.length < e || (this._removeMarker(i), this._updatePrevNext(i._prev, i._next), i._middleLeft && this._markerGroup.removeLayer(i._middleLeft), i._middleRight && this._markerGroup.removeLayer(i._middleRight), i._prev && i._next ? this._createMiddleMarker(i._prev, i._next) : i._prev ? i._next || (i._prev._middleRight = null) : (i._next._middleLeft = null), this._fireEdit()); }, _updateIndexes: function (t, e) { this._markerGroup.eachLayer(function (i) { i._index > t && (i._index += e); }); }, _createMiddleMarker: function (t, e) { var i, o, a, s = this._getMiddleLatLng(t, e), r = this._createMarker(s); r.setOpacity(0.6), (t._middleRight = e._middleLeft = r), (o = function () { var o = e._index; (r._index = o), r.off("click", i, this).on("click", this._onMarkerClick, this), (s.lat = r.getLatLng().lat), (s.lng = r.getLatLng().lng), this._poly.spliceLatLngs(o, 0, s), this._markers.splice(o, 0, r), r.setOpacity(1), this._updateIndexes(o, 1), e._index++, this._updatePrevNext(t, r), this._updatePrevNext(r, e), this._poly.fire("editstart"); }), (a = function () { r.off("dragstart", o, this), r.off("dragend", a, this), this._createMiddleMarker(t, r), this._createMiddleMarker(r, e); }), (i = function () { o.call(this), a.call(this), this._fireEdit(); }), r.on("click", i, this).on("dragstart", o, this).on("dragend", a, this), this._markerGroup.addLayer(r); }, _updatePrevNext: function (t, e) { t && (t._next = e), e && (e._prev = t); }, _getMiddleLatLng: function (t, e) { var i = this._poly._map, o = i.project(t.getLatLng()), a = i.project(e.getLatLng()); return i.unproject(o._add(a)._divideBy(2)); }, })), L.Polyline.addInitHook(function () { this.editing || (L.Edit.Poly && ((this.editing = new L.Edit.Poly(this)), this.options.editable && this.editing.enable()), this.on("add", function () { this.editing && this.editing.enabled() && this.editing.addHooks(); }), this.on("remove", function () { this.editing && this.editing.enabled() && this.editing.removeHooks(); })); }), (L.Edit = L.Edit || {}), (L.Edit.SimpleShape = L.Handler.extend({ options: { moveIcon: new L.DivIcon({ iconSize: new L.Point(8, 8), className: "leaflet-div-icon leaflet-editing-icon leaflet-edit-move", }), resizeIcon: new L.DivIcon({ iconSize: new L.Point(8, 8), className: "leaflet-div-icon leaflet-editing-icon leaflet-edit-resize", }), }, initialize: function (t, e) { (this._shape = t), L.Util.setOptions(this, e); }, addHooks: function () { this._shape._map && ((this._map = this._shape._map), this._markerGroup || this._initMarkers(), this._map.addLayer(this._markerGroup)); }, removeHooks: function () { if (this._shape._map) { this._unbindMarker(this._moveMarker); for (var t = 0, e = this._resizeMarkers.length; e > t; t++) this._unbindMarker(this._resizeMarkers[t]); (this._resizeMarkers = null), this._map.removeLayer(this._markerGroup), delete this._markerGroup; } this._map = null; }, updateMarkers: function () { this._markerGroup.clearLayers(), this._initMarkers(); }, _initMarkers: function () { this._markerGroup || (this._markerGroup = new L.LayerGroup()), this._createMoveMarker(), this._createResizeMarker(); }, _createMoveMarker: function () {}, _createResizeMarker: function () {}, _createMarker: function (t, e) { var i = new L.Marker(t, { draggable: !0, icon: e, zIndexOffset: 10 }); return this._bindMarker(i), this._markerGroup.addLayer(i), i; }, _bindMarker: function (t) { t.on("dragstart", this._onMarkerDragStart, this) .on("drag", this._onMarkerDrag, this) .on("dragend", this._onMarkerDragEnd, this); }, _unbindMarker: function (t) { t.off("dragstart", this._onMarkerDragStart, this) .off("drag", this._onMarkerDrag, this) .off("dragend", this._onMarkerDragEnd, this); }, _onMarkerDragStart: function (t) { var e = t.target; e.setOpacity(0), this._shape.fire("editstart"); }, _fireEdit: function () { (this._shape.edited = !0), this._shape.fire("edit"); }, _onMarkerDrag: function (t) { var e = t.target, i = e.getLatLng(); e === this._moveMarker ? this._move(i) : this._resize(i), this._shape.redraw(); }, _onMarkerDragEnd: function (t) { var e = t.target; e.setOpacity(1), this._fireEdit(); }, _move: function () {}, _resize: function () {}, })), (L.Edit = L.Edit || {}), (L.Edit.Rectangle = L.Edit.SimpleShape.extend({ _createMoveMarker: function () { var t = this._shape.getBounds(), e = t.getCenter(); this._moveMarker = this._createMarker(e, this.options.moveIcon); }, _createResizeMarker: function () { var t = this._getCorners(); this._resizeMarkers = []; for (var e = 0, i = t.length; i > e; e++) this._resizeMarkers.push(this._createMarker(t[e], this.options.resizeIcon)), (this._resizeMarkers[e]._cornerIndex = e); }, _onMarkerDragStart: function (t) { L.Edit.SimpleShape.prototype._onMarkerDragStart.call(this, t); var e = this._getCorners(), i = t.target, o = i._cornerIndex; (this._oppositeCorner = e[(o + 2) % 4]), this._toggleCornerMarkers(0, o); }, _onMarkerDragEnd: function (t) { var e, i, o = t.target; o === this._moveMarker && ((e = this._shape.getBounds()), (i = e.getCenter()), o.setLatLng(i)), this._toggleCornerMarkers(1), this._repositionCornerMarkers(), L.Edit.SimpleShape.prototype._onMarkerDragEnd.call(this, t); }, _move: function (t) { for ( var e, i = this._shape.getLatLngs(), o = this._shape.getBounds(), a = o.getCenter(), s = [], r = 0, n = i.length; n > r; r++ ) (e = [i[r].lat - a.lat, i[r].lng - a.lng]), s.push([t.lat + e[0], t.lng + e[1]]); this._shape.setLatLngs(s), this._repositionCornerMarkers(); }, _resize: function (t) { var e; this._shape.setBounds(L.latLngBounds(t, this._oppositeCorner)), (e = this._shape.getBounds()), this._moveMarker.setLatLng(e.getCenter()); }, _getCorners: function () { var t = this._shape.getBounds(), e = t.getNorthWest(), i = t.getNorthEast(), o = t.getSouthEast(), a = t.getSouthWest(); return [e, i, o, a]; }, _toggleCornerMarkers: function (t) { for (var e = 0, i = this._resizeMarkers.length; i > e; e++) this._resizeMarkers[e].setOpacity(t); }, _repositionCornerMarkers: function () { for (var t = this._getCorners(), e = 0, i = this._resizeMarkers.length; i > e; e++) this._resizeMarkers[e].setLatLng(t[e]); }, })), L.Rectangle.addInitHook(function () { L.Edit.Rectangle && ((this.editing = new L.Edit.Rectangle(this)), this.options.editable && this.editing.enable()); }), (L.Edit = L.Edit || {}), (L.Edit.Circle = L.Edit.SimpleShape.extend({ _createMoveMarker: function () { var t = this._shape.getLatLng(); this._moveMarker = this._createMarker(t, this.options.moveIcon); }, _createResizeMarker: function () { var t = this._shape.getLatLng(), e = this._getResizeMarkerPoint(t); (this._resizeMarkers = []), this._resizeMarkers.push(this._createMarker(e, this.options.resizeIcon)); }, _getResizeMarkerPoint: function (t) { var e = this._shape._radius * Math.cos(Math.PI / 4), i = this._map.project(t); return this._map.unproject([i.x + e, i.y - e]); }, _move: function (t) { var e = this._getResizeMarkerPoint(t); this._resizeMarkers[0].setLatLng(e), this._shape.setLatLng(t); }, _resize: function (t) { var e = this._moveMarker.getLatLng(), i = e.distanceTo(t); this._shape.setRadius(i); }, })), L.Circle.addInitHook(function () { L.Edit.Circle && ((this.editing = new L.Edit.Circle(this)), this.options.editable && this.editing.enable()), this.on("add", function () { this.editing && this.editing.enabled() && this.editing.addHooks(); }), this.on("remove", function () { this.editing && this.editing.enabled() && this.editing.removeHooks(); }); }), (L.LatLngUtil = { cloneLatLngs: function (t) { for (var e = [], i = 0, o = t.length; o > i; i++) e.push(this.cloneLatLng(t[i])); return e; }, cloneLatLng: function (t) { return L.latLng(t.lat, t.lng); }, }), (L.GeometryUtil = L.extend(L.GeometryUtil || {}, { geodesicArea: function (t) { var e, i, o = t.length, a = 0, s = L.LatLng.DEG_TO_RAD; if (o > 2) { for (var r = 0; o > r; r++) (e = t[r]), (i = t[(r + 1) % o]), (a += (i.lng - e.lng) * s * (2 + Math.sin(e.lat * s) + Math.sin(i.lat * s))); a = (6378137 * a * 6378137) / 2; } return Math.abs(a); }, readableArea: function (t, e) { var i; return ( e ? (i = t >= 1e4 ? (1e-4 * t).toFixed(2) + " ha" : t.toFixed(2) + " m²") : ((t *= 0.836127), (i = t >= 3097600 ? (t / 3097600).toFixed(2) + " mi²" : t >= 4840 ? (t / 4840).toFixed(2) + " acres" : Math.ceil(t) + " yd²")), i ); }, readableDistance: function (t, e) { var i; return ( e ? (i = t > 1e3 ? (t / 1e3).toFixed(2) + " km" : Math.ceil(t) + " m") : ((t *= 1.09361), (i = t > 1760 ? (t / 1760).toFixed(2) + " miles" : Math.ceil(t) + " yd")), i ); }, })), L.Util.extend(L.LineUtil, { segmentsIntersect: function (t, e, i, o) { return ( this._checkCounterclockwise(t, i, o) !== this._checkCounterclockwise(e, i, o) && this._checkCounterclockwise(t, e, i) !== this._checkCounterclockwise(t, e, o) ); }, _checkCounterclockwise: function (t, e, i) { return (i.y - t.y) * (e.x - t.x) > (e.y - t.y) * (i.x - t.x); }, }), L.Polyline.include({ intersects: function () { var t, e, i, o = this._originalPoints, a = o ? o.length : 0; if (this._tooFewPointsForIntersection()) return !1; for (t = a - 1; t >= 3; t--) if (((e = o[t - 1]), (i = o[t]), this._lineSegmentsIntersectsRange(e, i, t - 2))) return !0; return !1; }, newLatLngIntersects: function (t, e) { return this._map ? this.newPointIntersects(this._map.latLngToLayerPoint(t), e) : !1; }, newPointIntersects: function (t, e) { var i = this._originalPoints, o = i ? i.length : 0, a = i ? i[o - 1] : null, s = o - 2; return this._tooFewPointsForIntersection(1) ? !1 : this._lineSegmentsIntersectsRange(a, t, s, e ? 1 : 0); }, _tooFewPointsForIntersection: function (t) { var e = this._originalPoints, i = e ? e.length : 0; return (i += t || 0), !this._originalPoints || 3 >= i; }, _lineSegmentsIntersectsRange: function (t, e, i, o) { var a, s, r = this._originalPoints; o = o || 0; for (var n = i; n > o; n--) if (((a = r[n - 1]), (s = r[n]), L.LineUtil.segmentsIntersect(t, e, a, s))) return !0; return !1; }, }), L.Polygon.include({ intersects: function () { var t, e, i, o, a, s = this._originalPoints; return this._tooFewPointsForIntersection() ? !1 : (t = L.Polyline.prototype.intersects.call(this)) ? !0 : ((e = s.length), (i = s[0]), (o = s[e - 1]), (a = e - 2), this._lineSegmentsIntersectsRange(o, i, a, 1)); }, }), (L.Control.Draw = L.Control.extend({ options: { position: "topleft", draw: {}, edit: !1 }, initialize: function (t) { if (L.version < "0.7") throw new Error( "Leaflet.draw 0.2.3+ requires Leaflet 0.7.0+. Download latest from https://github.com/Leaflet/Leaflet/" ); L.Control.prototype.initialize.call(this, t); var e, i; (this._toolbars = {}), L.DrawToolbar && this.options.draw && ((i = new L.DrawToolbar(this.options.draw)), (e = L.stamp(i)), (this._toolbars[e] = i), this._toolbars[e].on("enable", this._toolbarEnabled, this)), L.EditToolbar && this.options.edit && ((i = new L.EditToolbar(this.options.edit)), (e = L.stamp(i)), (this._toolbars[e] = i), this._toolbars[e].on("enable", this._toolbarEnabled, this)); }, onAdd: function (t) { var e, i = L.DomUtil.create("div", "leaflet-draw"), o = !1, a = "leaflet-draw-toolbar-top"; for (var s in this._toolbars) this._toolbars.hasOwnProperty(s) && ((e = this._toolbars[s].addToolbar(t)), e && (o || (L.DomUtil.hasClass(e, a) || L.DomUtil.addClass(e.childNodes[0], a), (o = !0)), i.appendChild(e))); return i; }, onRemove: function () { for (var t in this._toolbars) this._toolbars.hasOwnProperty(t) && this._toolbars[t].removeToolbar(); }, setDrawingOptions: function (t) { for (var e in this._toolbars) this._toolbars[e] instanceof L.DrawToolbar && this._toolbars[e].setOptions(t); }, _toolbarEnabled: function (t) { var e = "" + L.stamp(t.target); for (var i in this._toolbars) this._toolbars.hasOwnProperty(i) && i !== e && this._toolbars[i].disable(); }, })), L.Map.mergeOptions({ drawControlTooltips: !0, drawControl: !1 }), L.Map.addInitHook(function () { this.options.drawControl && ((this.drawControl = new L.Control.Draw()), this.addControl(this.drawControl)); }), (L.Toolbar = L.Class.extend({ includes: [L.Mixin.Events], initialize: function (t) { L.setOptions(this, t), (this._modes = {}), (this._actionButtons = []), (this._activeMode = null); }, enabled: function () { return null !== this._activeMode; }, disable: function () { this.enabled() && this._activeMode.handler.disable(); }, addToolbar: function (t) { var e, i = L.DomUtil.create("div", "leaflet-draw-section"), o = 0, a = this._toolbarClass || "", s = this.getModeHandlers(t); for ( this._toolbarContainer = L.DomUtil.create("div", "leaflet-draw-toolbar leaflet-bar"), this._map = t, e = 0; e < s.length; e++ ) s[e].enabled && this._initModeHandler(s[e].handler, this._toolbarContainer, o++, a, s[e].title); return o ? ((this._lastButtonIndex = --o), (this._actionsContainer = L.DomUtil.create("ul", "leaflet-draw-actions")), i.appendChild(this._toolbarContainer), i.appendChild(this._actionsContainer), i) : void 0; }, removeToolbar: function () { for (var t in this._modes) this._modes.hasOwnProperty(t) && (this._disposeButton( this._modes[t].button, this._modes[t].handler.enable, this._modes[t].handler ), this._modes[t].handler.disable(), this._modes[t].handler .off("enabled", this._handlerActivated, this) .off("disabled", this._handlerDeactivated, this)); this._modes = {}; for (var e = 0, i = this._actionButtons.length; i > e; e++) this._disposeButton(this._actionButtons[e].button, this._actionButtons[e].callback, this); (this._actionButtons = []), (this._actionsContainer = null); }, _initModeHandler: function (t, e, i, o, a) { var s = t.type; (this._modes[s] = {}), (this._modes[s].handler = t), (this._modes[s].button = this._createButton({ title: a, className: o + "-" + s, container: e, callback: this._modes[s].handler.enable, context: this._modes[s].handler, })), (this._modes[s].buttonIndex = i), this._modes[s].handler .on("enabled", this._handlerActivated, this) .on("disabled", this._handlerDeactivated, this); }, _createButton: function (t) { var e = L.DomUtil.create("a", t.className || "", t.container); return ( (e.href = "#"), t.text && (e.innerHTML = t.text), t.title && (e.title = t.title), L.DomEvent.on(e, "click", L.DomEvent.stopPropagation) .on(e, "mousedown", L.DomEvent.stopPropagation) .on(e, "dblclick", L.DomEvent.stopPropagation) .on(e, "click", L.DomEvent.preventDefault) .on(e, "click", t.callback, t.context), e ); }, _disposeButton: function (t, e) { L.DomEvent.off(t, "click", L.DomEvent.stopPropagation) .off(t, "mousedown", L.DomEvent.stopPropagation) .off(t, "dblclick", L.DomEvent.stopPropagation) .off(t, "click", L.DomEvent.preventDefault) .off(t, "click", e); }, _handlerActivated: function (t) { this.disable(), (this._activeMode = this._modes[t.handler]), L.DomUtil.addClass(this._activeMode.button, "leaflet-draw-toolbar-button-enabled"), this._showActionsToolbar(), this.fire("enable"); }, _handlerDeactivated: function () { this._hideActionsToolbar(), L.DomUtil.removeClass(this._activeMode.button, "leaflet-draw-toolbar-button-enabled"), (this._activeMode = null), this.fire("disable"); }, _createActions: function (t) { var e, i, o, a, s = this._actionsContainer, r = this.getActions(t), n = r.length; for (i = 0, o = this._actionButtons.length; o > i; i++) this._disposeButton(this._actionButtons[i].button, this._actionButtons[i].callback); for (this._actionButtons = []; s.firstChild; ) s.removeChild(s.firstChild); for (var l = 0; n > l; l++) ("enabled" in r[l] && !r[l].enabled) || ((e = L.DomUtil.create("li", "", s)), (a = this._createButton({ title: r[l].title, text: r[l].text, container: e, callback: r[l].callback, context: r[l].context, })), this._actionButtons.push({ button: a, callback: r[l].callback })); }, _showActionsToolbar: function () { var t = this._activeMode.buttonIndex, e = this._lastButtonIndex, i = this._activeMode.button.offsetTop - 1; this._createActions(this._activeMode.handler), (this._actionsContainer.style.top = i + "px"), 0 === t && (L.DomUtil.addClass(this._toolbarContainer, "leaflet-draw-toolbar-notop"), L.DomUtil.addClass(this._actionsContainer, "leaflet-draw-actions-top")), t === e && (L.DomUtil.addClass(this._toolbarContainer, "leaflet-draw-toolbar-nobottom"), L.DomUtil.addClass(this._actionsContainer, "leaflet-draw-actions-bottom")), (this._actionsContainer.style.display = "block"); }, _hideActionsToolbar: function () { (this._actionsContainer.style.display = "none"), L.DomUtil.removeClass(this._toolbarContainer, "leaflet-draw-toolbar-notop"), L.DomUtil.removeClass(this._toolbarContainer, "leaflet-draw-toolbar-nobottom"), L.DomUtil.removeClass(this._actionsContainer, "leaflet-draw-actions-top"), L.DomUtil.removeClass(this._actionsContainer, "leaflet-draw-actions-bottom"); }, })), (L.Tooltip = L.Class.extend({ initialize: function (t) { (this._map = t), (this._popupPane = t._panes.popupPane), (this._container = t.options.drawControlTooltips ? L.DomUtil.create("div", "leaflet-draw-tooltip", this._popupPane) : null), (this._singleLineLabel = !1); }, dispose: function () { this._container && (this._popupPane.removeChild(this._container), (this._container = null)); }, updateContent: function (t) { return this._container ? ((t.subtext = t.subtext || ""), 0 !== t.subtext.length || this._singleLineLabel ? t.subtext.length > 0 && this._singleLineLabel && (L.DomUtil.removeClass(this._container, "leaflet-draw-tooltip-single"), (this._singleLineLabel = !1)) : (L.DomUtil.addClass(this._container, "leaflet-draw-tooltip-single"), (this._singleLineLabel = !0)), (this._container.innerHTML = (t.subtext.length > 0 ? '' + t.subtext + "
" : "") + "" + t.text + ""), this) : this; }, updatePosition: function (t) { var e = this._map.latLngToLayerPoint(t), i = this._container; return ( this._container && ((i.style.visibility = "inherit"), L.DomUtil.setPosition(i, e)), this ); }, showAsError: function () { return ( this._container && L.DomUtil.addClass(this._container, "leaflet-error-draw-tooltip"), this ); }, removeError: function () { return ( this._container && L.DomUtil.removeClass(this._container, "leaflet-error-draw-tooltip"), this ); }, })), (L.DrawToolbar = L.Toolbar.extend({ options: { polyline: {}, polygon: {}, rectangle: {}, circle: {}, marker: {} }, initialize: function (t) { for (var e in this.options) this.options.hasOwnProperty(e) && t[e] && (t[e] = L.extend({}, this.options[e], t[e])); (this._toolbarClass = "leaflet-draw-draw"), L.Toolbar.prototype.initialize.call(this, t); }, getModeHandlers: function (t) { return [ { enabled: this.options.polyline, handler: new L.Draw.Polyline(t, this.options.polyline), title: L.drawLocal.draw.toolbar.buttons.polyline, }, { enabled: this.options.polygon, handler: new L.Draw.Polygon(t, this.options.polygon), title: L.drawLocal.draw.toolbar.buttons.polygon, }, { enabled: this.options.rectangle, handler: new L.Draw.Rectangle(t, this.options.rectangle), title: L.drawLocal.draw.toolbar.buttons.rectangle, }, { enabled: this.options.circle, handler: new L.Draw.Circle(t, this.options.circle), title: L.drawLocal.draw.toolbar.buttons.circle, }, { enabled: this.options.marker, handler: new L.Draw.Marker(t, this.options.marker), title: L.drawLocal.draw.toolbar.buttons.marker, }, ]; }, getActions: function (t) { return [ { enabled: t.deleteLastVertex, title: L.drawLocal.draw.toolbar.undo.title, text: L.drawLocal.draw.toolbar.undo.text, callback: t.deleteLastVertex, context: t, }, { title: L.drawLocal.draw.toolbar.actions.title, text: L.drawLocal.draw.toolbar.actions.text, callback: this.disable, context: this, }, ]; }, setOptions: function (t) { L.setOptions(this, t); for (var e in this._modes) this._modes.hasOwnProperty(e) && t.hasOwnProperty(e) && this._modes[e].handler.setOptions(t[e]); }, })), (L.EditToolbar = L.Toolbar.extend({ options: { edit: { selectedPathOptions: { color: "#fe57a1", opacity: 0.6, dashArray: "10, 10", fill: !0, fillColor: "#fe57a1", fillOpacity: 0.1, }, }, remove: {}, featureGroup: null, }, initialize: function (t) { t.edit && ("undefined" == typeof t.edit.selectedPathOptions && (t.edit.selectedPathOptions = this.options.edit.selectedPathOptions), (t.edit = L.extend({}, this.options.edit, t.edit))), t.remove && (t.remove = L.extend({}, this.options.remove, t.remove)), (this._toolbarClass = "leaflet-draw-edit"), L.Toolbar.prototype.initialize.call(this, t), (this._selectedFeatureCount = 0); }, getModeHandlers: function (t) { var e = this.options.featureGroup; return [ { enabled: this.options.edit, handler: new L.EditToolbar.Edit(t, { featureGroup: e, selectedPathOptions: this.options.edit.selectedPathOptions, }), title: L.drawLocal.edit.toolbar.buttons.edit, }, { enabled: this.options.remove, handler: new L.EditToolbar.Delete(t, { featureGroup: e }), title: L.drawLocal.edit.toolbar.buttons.remove, }, ]; }, getActions: function () { return [ { title: L.drawLocal.edit.toolbar.actions.save.title, text: L.drawLocal.edit.toolbar.actions.save.text, callback: this._save, context: this, }, { title: L.drawLocal.edit.toolbar.actions.cancel.title, text: L.drawLocal.edit.toolbar.actions.cancel.text, callback: this.disable, context: this, }, ]; }, addToolbar: function (t) { var e = L.Toolbar.prototype.addToolbar.call(this, t); return ( this._checkDisabled(), this.options.featureGroup.on("layeradd layerremove", this._checkDisabled, this), e ); }, removeToolbar: function () { this.options.featureGroup.off("layeradd layerremove", this._checkDisabled, this), L.Toolbar.prototype.removeToolbar.call(this); }, disable: function () { this.enabled() && (this._activeMode.handler.revertLayers(), L.Toolbar.prototype.disable.call(this)); }, _save: function () { this._activeMode.handler.save(), this._activeMode.handler.disable(); }, _checkDisabled: function () { var t, e = this.options.featureGroup, i = 0 !== e.getLayers().length; this.options.edit && ((t = this._modes[L.EditToolbar.Edit.TYPE].button), i ? L.DomUtil.removeClass(t, "leaflet-disabled") : L.DomUtil.addClass(t, "leaflet-disabled"), t.setAttribute( "title", i ? L.drawLocal.edit.toolbar.buttons.edit : L.drawLocal.edit.toolbar.buttons.editDisabled )), this.options.remove && ((t = this._modes[L.EditToolbar.Delete.TYPE].button), i ? L.DomUtil.removeClass(t, "leaflet-disabled") : L.DomUtil.addClass(t, "leaflet-disabled"), t.setAttribute( "title", i ? L.drawLocal.edit.toolbar.buttons.remove : L.drawLocal.edit.toolbar.buttons.removeDisabled )); }, })), (L.EditToolbar.Edit = L.Handler.extend({ statics: { TYPE: "edit" }, includes: L.Mixin.Events, initialize: function (t, e) { if ( (L.Handler.prototype.initialize.call(this, t), (this._selectedPathOptions = e.selectedPathOptions), (this._featureGroup = e.featureGroup), !(this._featureGroup instanceof L.FeatureGroup)) ) throw new Error("options.featureGroup must be a L.FeatureGroup"); (this._uneditedLayerProps = {}), (this.type = L.EditToolbar.Edit.TYPE); }, enable: function () { !this._enabled && this._hasAvailableLayers() && (this.fire("enabled", { handler: this.type }), this._map.fire("draw:editstart", { handler: this.type }), L.Handler.prototype.enable.call(this), this._featureGroup .on("layeradd", this._enableLayerEdit, this) .on("layerremove", this._disableLayerEdit, this)); }, disable: function () { this._enabled && (this._featureGroup .off("layeradd", this._enableLayerEdit, this) .off("layerremove", this._disableLayerEdit, this), L.Handler.prototype.disable.call(this), this._map.fire("draw:editstop", { handler: this.type }), this.fire("disabled", { handler: this.type })); }, addHooks: function () { var t = this._map; t && (t.getContainer().focus(), this._featureGroup.eachLayer(this._enableLayerEdit, this), (this._tooltip = new L.Tooltip(this._map)), this._tooltip.updateContent({ text: L.drawLocal.edit.handlers.edit.tooltip.text, subtext: L.drawLocal.edit.handlers.edit.tooltip.subtext, }), this._map.on("mousemove", this._onMouseMove, this)); }, removeHooks: function () { this._map && (this._featureGroup.eachLayer(this._disableLayerEdit, this), (this._uneditedLayerProps = {}), this._tooltip.dispose(), (this._tooltip = null), this._map.off("mousemove", this._onMouseMove, this)); }, revertLayers: function () { this._featureGroup.eachLayer(function (t) { this._revertLayer(t); }, this); }, save: function () { var t = new L.LayerGroup(); this._featureGroup.eachLayer(function (e) { e.edited && (t.addLayer(e), (e.edited = !1)); }), this._map.fire("draw:edited", { layers: t }); }, _backupLayer: function (t) { var e = L.Util.stamp(t); this._uneditedLayerProps[e] || (t instanceof L.Polyline || t instanceof L.Polygon || t instanceof L.Rectangle ? (this._uneditedLayerProps[e] = { latlngs: L.LatLngUtil.cloneLatLngs(t.getLatLngs()), }) : t instanceof L.Circle ? (this._uneditedLayerProps[e] = { latlng: L.LatLngUtil.cloneLatLng(t.getLatLng()), radius: t.getRadius(), }) : t instanceof L.Marker && (this._uneditedLayerProps[e] = { latlng: L.LatLngUtil.cloneLatLng(t.getLatLng()), })); }, _revertLayer: function (t) { var e = L.Util.stamp(t); (t.edited = !1), this._uneditedLayerProps.hasOwnProperty(e) && (t instanceof L.Polyline || t instanceof L.Polygon || t instanceof L.Rectangle ? t.setLatLngs(this._uneditedLayerProps[e].latlngs) : t instanceof L.Circle ? (t.setLatLng(this._uneditedLayerProps[e].latlng), t.setRadius(this._uneditedLayerProps[e].radius)) : t instanceof L.Marker && t.setLatLng(this._uneditedLayerProps[e].latlng)); }, _toggleMarkerHighlight: function (t) { if (t._icon) { var e = t._icon; (e.style.display = "none"), L.DomUtil.hasClass(e, "leaflet-edit-marker-selected") ? (L.DomUtil.removeClass(e, "leaflet-edit-marker-selected"), this._offsetMarker(e, -4)) : (L.DomUtil.addClass(e, "leaflet-edit-marker-selected"), this._offsetMarker(e, 4)), (e.style.display = ""); } }, _offsetMarker: function (t, e) { var i = parseInt(t.style.marginTop, 10) - e, o = parseInt(t.style.marginLeft, 10) - e; (t.style.marginTop = i + "px"), (t.style.marginLeft = o + "px"); }, _enableLayerEdit: function (t) { var e, i = t.layer || t.target || t, o = i instanceof L.Marker; (!o || i._icon) && (this._backupLayer(i), this._selectedPathOptions && ((e = L.Util.extend({}, this._selectedPathOptions)), o ? this._toggleMarkerHighlight(i) : ((i.options.previousOptions = L.Util.extend({ dashArray: null }, i.options)), i instanceof L.Circle || i instanceof L.Polygon || i instanceof L.Rectangle || (e.fill = !1), i.setStyle(e))), o ? (i.dragging.enable(), i.on("dragend", this._onMarkerDragEnd)) : i.editing.enable()); }, _disableLayerEdit: function (t) { var e = t.layer || t.target || t; (e.edited = !1), this._selectedPathOptions && (e instanceof L.Marker ? this._toggleMarkerHighlight(e) : (e.setStyle(e.options.previousOptions), delete e.options.previousOptions)), e instanceof L.Marker ? (e.dragging.disable(), e.off("dragend", this._onMarkerDragEnd, this)) : e.editing.disable(); }, _onMarkerDragEnd: function (t) { var e = t.target; e.edited = !0; }, _onMouseMove: function (t) { this._tooltip.updatePosition(t.latlng); }, _hasAvailableLayers: function () { return 0 !== this._featureGroup.getLayers().length; }, })), (L.EditToolbar.Delete = L.Handler.extend({ statics: { TYPE: "remove" }, includes: L.Mixin.Events, initialize: function (t, e) { if ( (L.Handler.prototype.initialize.call(this, t), L.Util.setOptions(this, e), (this._deletableLayers = this.options.featureGroup), !(this._deletableLayers instanceof L.FeatureGroup)) ) throw new Error("options.featureGroup must be a L.FeatureGroup"); this.type = L.EditToolbar.Delete.TYPE; }, enable: function () { !this._enabled && this._hasAvailableLayers() && (this.fire("enabled", { handler: this.type }), this._map.fire("draw:deletestart", { handler: this.type }), L.Handler.prototype.enable.call(this), this._deletableLayers .on("layeradd", this._enableLayerDelete, this) .on("layerremove", this._disableLayerDelete, this)); }, disable: function () { this._enabled && (this._deletableLayers .off("layeradd", this._enableLayerDelete, this) .off("layerremove", this._disableLayerDelete, this), L.Handler.prototype.disable.call(this), this._map.fire("draw:deletestop", { handler: this.type }), this.fire("disabled", { handler: this.type })); }, addHooks: function () { var t = this._map; t && (t.getContainer().focus(), this._deletableLayers.eachLayer(this._enableLayerDelete, this), (this._deletedLayers = new L.layerGroup()), (this._tooltip = new L.Tooltip(this._map)), this._tooltip.updateContent({ text: L.drawLocal.edit.handlers.remove.tooltip.text }), this._map.on("mousemove", this._onMouseMove, this)); }, removeHooks: function () { 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 () { this._deletedLayers.eachLayer(function (t) { this._deletableLayers.addLayer(t); }, this); }, save: function () { this._map.fire("draw:deleted", { layers: this._deletedLayers }); }, _enableLayerDelete: function (t) { var e = t.layer || t.target || t; e.on("click", this._removeLayer, this); }, _disableLayerDelete: function (t) { var e = t.layer || t.target || t; e.off("click", this._removeLayer, this), this._deletedLayers.removeLayer(e); }, _removeLayer: function (t) { var e = t.layer || t.target || t; this._deletableLayers.removeLayer(e), this._deletedLayers.addLayer(e); }, _onMouseMove: function (t) { this._tooltip.updatePosition(t.latlng); }, _hasAvailableLayers: function () { return 0 !== this._deletableLayers.getLayers().length; }, })); })(window, document);