diff --git a/assets/icons/symbol/sprite.symbol.svg b/assets/icons/symbol/sprite.symbol.svg
index 6189a3dcf..0ba34cb16 100644
--- a/assets/icons/symbol/sprite.symbol.svg
+++ b/assets/icons/symbol/sprite.symbol.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/dist/leaflet.distortableimage.js.map b/dist/leaflet.distortableimage.js.map
new file mode 100644
index 000000000..51fc22eeb
--- /dev/null
+++ b/dist/leaflet.distortableimage.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"leaflet.distortableimage.js","mappings":"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","sources":["webpack://leaflet-distortableimage/./src/DistortableCollection.js","webpack://leaflet-distortableimage/./src/DistortableImageOverlay.js","webpack://leaflet-distortableimage/./src/components/DistortableImage.Keymapper.js","webpack://leaflet-distortableimage/./src/edit/DistortableCollection.Edit.js","webpack://leaflet-distortableimage/./src/edit/DistortableImage.Edit.js","webpack://leaflet-distortableimage/./src/edit/actions/BorderAction.js","webpack://leaflet-distortableimage/./src/edit/actions/DeleteAction.js","webpack://leaflet-distortableimage/./src/edit/actions/DistortAction.js","webpack://leaflet-distortableimage/./src/edit/actions/DragAction.js","webpack://leaflet-distortableimage/./src/edit/actions/EditAction.js","webpack://leaflet-distortableimage/./src/edit/actions/ExportAction.js","webpack://leaflet-distortableimage/./src/edit/actions/FreeRotateAction.js","webpack://leaflet-distortableimage/./src/edit/actions/GeolocateAction.js","webpack://leaflet-distortableimage/./src/edit/actions/LockAction.js","webpack://leaflet-distortableimage/./src/edit/actions/OpacitiesAction.js","webpack://leaflet-distortableimage/./src/edit/actions/OpacityAction.js","webpack://leaflet-distortableimage/./src/edit/actions/RestoreAction.js","webpack://leaflet-distortableimage/./src/edit/actions/RotateAction.js","webpack://leaflet-distortableimage/./src/edit/actions/ScaleAction.js","webpack://leaflet-distortableimage/./src/edit/actions/StackAction.js","webpack://leaflet-distortableimage/./src/edit/actions/UnlockAction.js","webpack://leaflet-distortableimage/./src/edit/getEXIFdata.js","webpack://leaflet-distortableimage/./src/edit/handles/DistortHandle.js","webpack://leaflet-distortableimage/./src/edit/handles/DragHandle.js","webpack://leaflet-distortableimage/./src/edit/handles/EditHandle.js","webpack://leaflet-distortableimage/./src/edit/handles/FreeRotateHandle.js","webpack://leaflet-distortableimage/./src/edit/handles/LockHandle.js","webpack://leaflet-distortableimage/./src/edit/handles/RotateHandle.js","webpack://leaflet-distortableimage/./src/edit/handles/ScaleHandle.js","webpack://leaflet-distortableimage/./src/edit/toolbars/DistortableImage.ControlBar.js","webpack://leaflet-distortableimage/./src/edit/toolbars/DistortableImage.PopupBar.js","webpack://leaflet-distortableimage/./src/iconsets/IconSet.js","webpack://leaflet-distortableimage/./src/iconsets/KeymapperIconSet.js","webpack://leaflet-distortableimage/./src/iconsets/ToolbarIconSet.js","webpack://leaflet-distortableimage/./src/mapmixins/BoxCollector.js","webpack://leaflet-distortableimage/./src/mapmixins/DoubleClickLabels.js","webpack://leaflet-distortableimage/./src/mapmixins/DoubleClickZoom.js","webpack://leaflet-distortableimage/./src/mapmixins/MapMixins.js","webpack://leaflet-distortableimage/./src/util/DomUtil.js","webpack://leaflet-distortableimage/./src/util/IconUtil.js","webpack://leaflet-distortableimage/./src/util/ImageUtil.js","webpack://leaflet-distortableimage/./src/util/MatrixUtil.js","webpack://leaflet-distortableimage/./src/util/TrigUtil.js","webpack://leaflet-distortableimage/./src/util/Utils.js","webpack://leaflet-distortableimage/webpack/startup"],"sourcesContent":["const arr = [];\nL.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n // re-order layers by _leaflet_id to match their display order in UI\n // add new layer to right position and avoid repitition\n const newArr = arr.every((each) => {\n return each._leaflet_id !== layer._leaflet_id;\n });\n if (newArr) {\n arr.push(layer);\n } else {\n arr.splice(arr.indexOf(layer), 1);\n }\n }\n }\n\n if (this.anyCollected()) { layer.deselect(); }\n else { this.editing._removeToolbar(); }\n },\n\n _deselectOthers(e) {\n if (!this.editable) { return; }\n\n this.eachLayer((layer) => {\n if (layer.getElement() !== e.target) {\n layer.deselect();\n } else {\n this._toggleCollected(e, layer);\n }\n });\n\n if (e) { L.DomEvent.stopPropagation(e); }\n },\n\n _dragStartMultiple(e) {\n const overlay = e.target;\n const map = this._map;\n let i;\n\n if (!this.isCollected(overlay)) { return; }\n\n this.eachLayer((layer) => {\n layer._dragStartPoints = {};\n layer.deselect();\n for (i = 0; i < 4; i++) {\n const c = layer.getCorner(i);\n layer._dragStartPoints[i] = map.latLngToLayerPoint(c);\n }\n });\n },\n\n _dragMultiple(e) {\n const overlay = e.target;\n const map = this._map;\n\n if (!this.isCollected(overlay)) { return; }\n\n const topLeft = map.latLngToLayerPoint(overlay.getCorner(0));\n const delta = overlay._dragStartPoints[0].subtract(topLeft);\n\n this._updateCollectionFromPoints(delta, overlay);\n },\n\n _toRemove() {\n const layerArr = this.getLayers();\n\n return layerArr.filter((layer) => {\n const mode = layer.editing._mode;\n return (this.isCollected(layer) && mode !== 'lock');\n });\n },\n\n _toMove(overlay) {\n const layerArr = this.getLayers();\n\n return layerArr.filter((layer) => {\n const mode = layer.editing._mode;\n return layer !== overlay && this.isCollected(layer) && mode !== 'lock';\n });\n },\n\n _updateCollectionFromPoints(delta, overlay) {\n const layersToMove = this._toMove(overlay);\n const p = new L.Transformation(1, -delta.x, 1, -delta.y);\n let i;\n\n layersToMove.forEach((layer) => {\n const movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n const sections = layer._image.src.split('/');\n const filename = sections[sections.length-1];\n const zc = layer.getCorners();\n const corners = [\n {lat: zc[0].lat, lon: zc[0].lng},\n {lat: zc[1].lat, lon: zc[1].lng},\n {lat: zc[3].lat, lon: zc[3].lng},\n {lat: zc[2].lat, lon: zc[2].lng},\n ];\n json.images.push({\n id: layer._leaflet_id,\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg >= 0 ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (const k in latlngObj) {\n if (this._cornerExceedsMapLats(zoom, latlngObj[k], map)) {\n // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n return;\n }\n }\n\n for (const k in latlngObj) {\n this._corners[i] = latlngObj[k];\n i += 1;\n }\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n setCornersFromPoints(pointsObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n for (const k in pointsObj) {\n const corner = map.layerPointToLatLng(pointsObj[k]);\n\n if (this._cornerExceedsMapLats(zoom, corner, map)) {\n // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n return;\n }\n }\n\n for (const k in pointsObj) {\n this._corners[i] = map.layerPointToLatLng(pointsObj[k]);\n i += 1;\n }\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n scaleBy(scale) {\n const map = this._map;\n const center = map.project(this.getCenter());\n let i;\n let p;\n const scaledCorners = {};\n\n if (scale === 0) { return; }\n\n for (i = 0; i < 4; i++) {\n p = map\n .project(this.getCorner(i))\n .subtract(center)\n .multiplyBy(scale)\n .add(center);\n scaledCorners[i] = map.unproject(p);\n }\n\n this.setCorners(scaledCorners);\n\n return this;\n },\n\n getAngle(unit = 'deg') {\n const matrix = this.getElement().style[L.DomUtil.TRANSFORM]\n .split('matrix3d')[1]\n .slice(1, -1)\n .split(',');\n\n const row0x = matrix[0];\n const row0y = matrix[1];\n const row1x = matrix[4];\n const row1y = matrix[5];\n\n const determinant = row0x * row1y - row0y * row1x;\n\n let angle = L.TrigUtil.calcAngle(row0x, row0y, 'rad');\n\n if (determinant < 0) {\n angle += angle < 0 ? Math.PI : -Math.PI;\n }\n\n if (angle < 0) {\n angle = 2 * Math.PI + angle;\n }\n\n return unit === 'deg' ?\n Math.round(L.TrigUtil.radiansToDegrees(angle)) :\n L.Util.formatNum(angle, 2);\n },\n\n setAngle(angle, unit = 'deg') {\n const currentAngle = this.getAngle(unit);\n const angleToRotateBy = angle - currentAngle;\n this.rotateBy(angleToRotateBy, unit);\n\n return this;\n },\n\n rotateBy(angle, unit = 'deg') {\n const map = this._map;\n const center = map.project(this.getCenter());\n const corners = {};\n let i;\n let p;\n let q;\n\n if (unit === 'deg') {\n angle = L.TrigUtil.degreesToRadians(angle);\n }\n\n for (i = 0; i < 4; i++) {\n p = map.project(this.getCorner(i)).subtract(center);\n q = L.point(\n Math.cos(angle) * p.x - Math.sin(angle) * p.y,\n Math.sin(angle) * p.x + Math.cos(angle) * p.y\n );\n corners[i] = map.unproject(q.add(center));\n }\n\n this.setCorners(corners);\n\n return this;\n },\n\n dragBy(formerPoint, newPoint) {\n const map = this._map;\n let i;\n let p;\n const transCorners = {};\n const delta = map.project(formerPoint).subtract(map.project(newPoint));\n\n for (i = 0; i < 4; i++) {\n p = map.project(this.getCorner(i)).subtract(delta);\n transCorners[i] = map.unproject(p);\n }\n\n this.setCorners(transCorners);\n },\n\n restore() {\n const map = this._map;\n const center = this._initialDimensions.center;\n const offset = this._initialDimensions.offset;\n const zoom = this._initialDimensions.zoom;\n const corners = [\n center.subtract(offset),\n center.add(L.point(offset.x, -offset.y)),\n center.add(L.point(-offset.x, offset.y)),\n center.add(offset),\n ];\n\n for (let i = 0; i < 4; i++) {\n if (!map.unproject(corners[i], zoom).equals(this.getCorner(i))) {\n this.setCorner(i, map.unproject(corners[i], zoom));\n }\n }\n\n this.edited = false;\n this.fire('restore');\n\n return this;\n },\n\n /* Copied from Leaflet v0.7 https://github.com/Leaflet/Leaflet/blob/66282f14bcb180ec87d9818d9f3c9f75afd01b30/src/dom/DomUtil.js#L189-L199 */\n /* since L.DomUtil.getTranslateString() is deprecated in Leaflet v1.0 */\n _getTranslateString(point) {\n // on WebKit browsers (Chrome/Safari/iOS Safari/Android)\n // using translate3d instead of translate\n // makes animation smoother as it ensures HW accel is used.\n // Firefox 13 doesn't care\n // (same speed either way), Opera 12 doesn't support translate3d\n\n const is3d = L.Browser.webkit3d;\n const open = 'translate' + (is3d ? '3d' : '') + '(';\n const close = (is3d ? ',0' : '') + ')';\n\n return open + point.x + 'px,' + point.y + 'px' + close;\n },\n\n _reset() {\n const map = this._map;\n const image = this.getElement();\n const latLngToLayerPoint = L.bind(map.latLngToLayerPoint, map);\n const transformMatrix = this\n ._calculateProjectiveTransform(latLngToLayerPoint);\n const topLeft = latLngToLayerPoint(this.getCorner(0));\n const warp = L.DomUtil.getMatrixString(transformMatrix);\n const translation = this._getTranslateString(topLeft);\n\n /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */\n image._leaflet_pos = topLeft;\n\n image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' ');\n\n /* Set origin to the upper-left corner rather than\n * the center of the image, which is the default.\n */\n image.style[L.DomUtil.TRANSFORM + '-origin'] = '0 0 0';\n\n this.rotation.deg = this.getAngle();\n this.rotation.rad = this.getAngle('rad');\n },\n\n /*\n * Calculates the transform string that will be\n * correct *at the end* of zooming.\n * Leaflet then generates a CSS3 animation between the current transform and\n * future transform which makes the transition appear smooth.\n */\n _animateZoom(event) {\n const map = this._map;\n const image = this.getElement();\n const latLngToNewLayerPoint = function(latlng) {\n return map._latLngToNewLayerPoint(latlng, event.zoom, event.center);\n };\n const transformMatrix = this._calculateProjectiveTransform(\n latLngToNewLayerPoint\n );\n const topLeft = latLngToNewLayerPoint(this.getCorner(0));\n const warp = L.DomUtil.getMatrixString(transformMatrix);\n const translation = this._getTranslateString(topLeft);\n\n /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */\n image._leaflet_pos = topLeft;\n\n image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' ');\n },\n\n getCorners() {\n return this._corners;\n },\n\n getCorner(i) {\n return this._corners[i];\n },\n\n // image (vertex) centroid calculation\n getCenter() {\n const map = this._map;\n const reduce = this.getCorners().reduce(function(agg, corner) {\n return agg.add(map.project(corner));\n }, L.point(0, 0));\n return map.unproject(reduce.divideBy(4));\n },\n\n _calculateProjectiveTransform(latLngToCartesian) {\n /* Setting reasonable but made-up image defaults\n * allow us to place images on the map before\n * they've finished downloading. */\n const offset = latLngToCartesian(this.getCorner(0));\n const w = this.getElement().offsetWidth || 500;\n const h = this.getElement().offsetHeight || 375;\n const c = [];\n let j;\n /* Convert corners to container points (i.e. cartesian coordinates). */\n for (j = 0; j < 4; j++) {\n c.push(latLngToCartesian(this.getCorner(j))._subtract(offset));\n }\n\n /*\n * This matrix describes the action of\n * the CSS transform on each corner of the image.\n * It maps from the coordinate system centered\n * at the upper left corner of the image\n * to the region bounded by the latlngs in this._corners.\n * For example:\n * 0, 0, c[0].x, c[0].y\n * says that the upper-left corner of the image\n * maps to the first latlng in this._corners.\n */\n return L.MatrixUtil.general2DProjection(\n 0, 0, c[0].x, c[0].y,\n w, 0, c[1].x, c[1].y,\n 0, h, c[2].x, c[2].y,\n w, h, c[3].x, c[3].y\n );\n },\n});\n\nL.distortableImageOverlay = function(id, options) {\n return new L.DistortableImageOverlay(id, options);\n};\n\nL.Map.addInitHook(function() {\n if (!L.DomUtil.hasClass(this.getContainer(), 'ldi')) {\n L.DomUtil.addClass(this.getContainer(), 'ldi');\n }\n});\n","L.DomUtil = L.DomUtil || {};\nL.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.Keymapper = L.Handler.extend({\n\n options: {\n position: 'topright',\n },\n\n initialize(map, options) {\n this._map = map;\n L.setOptions(this, options);\n },\n\n addHooks() {\n if (!this._keymapper) {\n this._container = this._buildContainer();\n this._scrollWrapper = this._wrap();\n this._toggler = this._createButton();\n this._setMapper(this._container, this._scrollWrapper, this._toggler);\n\n L.DomEvent.on(this._toggler, 'click', this._toggleKeymapper, this);\n\n L.DomEvent.disableClickPropagation(this._container);\n L.DomEvent.disableScrollPropagation(this._container);\n }\n },\n\n removeHooks() {\n if (this._keymapper) {\n L.DomEvent.off(this._toggler, 'click', this._toggleKeymapper, this);\n\n L.DomUtil.remove(this._toggler);\n L.DomUtil.remove(this._scrollWrapper);\n L.DomUtil.remove(this._container);\n this._keymapper = false;\n }\n },\n\n _buildContainer() {\n const container = L.DomUtil.create('div', 'ldi-keymapper-hide');\n container.setAttribute('id', 'ldi-keymapper');\n\n const divider = L.DomUtil.create('br', 'divider');\n container.appendChild(divider);\n\n return container;\n },\n\n _createButton() {\n const toggler = L.DomUtil.create('a', '');\n toggler.innerHTML = L.IconUtil.create('keyboard_open');\n\n toggler.setAttribute('id', 'toggle-keymapper');\n toggler.setAttribute('href', '#');\n toggler.setAttribute('title', 'Show keymap');\n // Will force screen readers like VoiceOver to read this as \"Show keymap - button\"\n toggler.setAttribute('role', 'button');\n toggler.setAttribute('aria-label', 'Show keymap');\n\n return toggler;\n },\n\n _wrap() {\n const wrap = L.DomUtil.create('div', '');\n wrap.setAttribute('id', 'keymapper-wrapper');\n wrap.style.display = 'none';\n\n return wrap;\n },\n\n _setMapper(container, wrap, button) {\n this._keymapper = L.control({position: this.options.position});\n\n this._keymapper.onAdd = function() {\n container.appendChild(wrap);\n wrap.insertAdjacentHTML(\n 'beforeend',\n '
' +\n '
' +\n /* eslint-disable */\n 'Rotate Mode R |
' +\n 'RotateScale Mode r |
' +\n 'Scale Mode s |
' +\n 'Distort Mode d |
' +\n 'Drag Mode D |
' + \n 'Lock (Mode) / Unlock Image l\\xa0u |
' +\n 'Stack up / down q\\xa0a |
' +\n 'Add / Remove Image Border b |
' +\n 'Toggle Opacity o |
' +\n 'Deselect All esc |
' +\n 'Delete Image(s) delete\\xa0backspace |
' +\n 'Export Image(s) e |
' +\n '
'\n );\n /* eslint-enable */\n container.appendChild(button);\n return container;\n };\n\n this._keymapper.addTo(this._map);\n },\n\n _toggleKeymapper(e) {\n e.preventDefault();\n\n this._container.className = (\n this._container.className === 'ldi-keymapper leaflet-control' ?\n 'ldi-keymapper-hide leaflet-control' :\n 'ldi-keymapper leaflet-control'\n );\n\n this._scrollWrapper.style.display = (\n this._scrollWrapper.style.display === 'none' ? 'block' : 'none'\n );\n\n this._toggler.innerHTML = (\n this._toggler.innerHTML === 'close' ?\n L.IconUtil.create('keyboard_open') :\n 'close'\n );\n\n L.IconUtil.toggleTitle(this._toggler, 'Show keymap', 'Hide keymap');\n L.DomUtil.toggleClass(this._toggler, 'close-icon');\n },\n\n _injectIconSet() {\n if (document.querySelector('#keymapper-iconset')) { return; }\n\n const el = L.DomUtil.create('div', '');\n el.id = 'keymapper-iconset';\n el.setAttribute('hidden', 'hidden');\n\n this._iconset = new L.KeymapperIconSet().render();\n el.innerHTML = this._iconset;\n\n document.querySelector('.leaflet-control-container').appendChild(el);\n },\n});\n\nL.DistortableImage.Keymapper.addInitHook(() => {\n L.DistortableImage.Keymapper.prototype._n = (\n L.DistortableImage.Keymapper.prototype._n ?\n L.DistortableImage.Keymapper.prototype._n + 1 :\n 1\n );\n // dont enable keymapper for mobile\n if (L.DistortableImage.Keymapper.prototype._n === 1 && !L.Browser.mobile) {\n this.enable();\n this._injectIconSet();\n }\n});\n\nL.distortableImage.keymapper = (map, options) => {\n return new L.DistortableImage.Keymapper(map, options);\n};\n","L.DistortableImage = L.DistortableImage || {};\n\n// this class holds the keybindings and toolbar API for an image collection instance\nL.DistortableCollection.Edit = L.Handler.extend({\n options: {\n keymap: L.distortableImage.group_action_map,\n },\n\n initialize(group, options) {\n this._group = group;\n this._exportOpts = group.options.exportOpts;\n\n L.setOptions(this, options);\n\n L.distortableImage.group_action_map.Escape = '_decollectAll';\n },\n\n addHooks() {\n const group = this._group;\n const map = group._map;\n\n this.editActions = this.options.actions;\n this.runExporter =\n L.bind(L.Utils.getNestedVal(this, '_exportOpts', 'exporter') ||\n this.startExport, this);\n\n L.DomEvent.on(document, 'keydown', this._onKeyDown, this);\n\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this._decollectAll, this);\n }\n\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n boxcollectend: this._addCollections,\n }, this);\n\n this._group.editable = true;\n this._group.eachLayer(layer => layer.editing.enable());\n },\n\n removeHooks() {\n const group = this._group;\n const map = group._map;\n\n L.DomEvent.off(document, 'keydown', this._onKeyDown, this);\n\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.off(map, 'click', this._decollectAll, this);\n }\n\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n boxcollectend: this._addCollections,\n }, this);\n\n this._decollectAll();\n this._group.editable = false;\n this._group.eachLayer(layer => layer.editing.disable());\n },\n\n enable() {\n this._enabled = true;\n this.addHooks();\n return this;\n },\n\n disable() {\n this._enabled = false;\n this.removeHooks();\n return this;\n },\n\n _onKeyDown(e) {\n const keymap = this.options.keymap;\n const handlerName = keymap[e.key];\n\n if (!this[handlerName]) { return; }\n\n if (this._group.anyCollected()) {\n this[handlerName].call(this);\n }\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this._decollectAll(e); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._group._map;\n L.DomEvent.off(map, 'click', this._decollectAll, this);\n L.DomEvent.on(map, 'singleclick', this._decollectAll, this);\n },\n\n _resetClickListeners() {\n const map = this._group._map;\n L.DomEvent.on(map, 'click', this._decollectAll, this);\n L.DomEvent.off(map, 'singleclick', this._decollectAll, this);\n },\n\n _decollectAll(e) {\n let oe;\n\n if (e) { oe = e.originalEvent; }\n /**\n * prevents image deselection following the 'boxcollectend' event - note 'shift' must not be released until dragging is complete\n * also prevents deselection following a click on a disabled img by differentiating it from the map\n */\n if (oe && (oe.shiftKey || oe.target instanceof HTMLImageElement)) {\n return;\n }\n\n this._group.eachLayer((layer) => {\n L.DomUtil.removeClass(layer.getElement(), 'collected');\n layer.deselect();\n });\n\n this._removeToolbar();\n\n if (e) { L.DomEvent.stopPropagation(e); }\n },\n\n _unlockGroup() {\n if (!this.hasTool(L.UnlockAction)) { return; }\n\n this._group.eachLayer((layer) => {\n if (this._group.isCollected(layer)) {\n const edit = layer.editing;\n edit._unlock();\n // unlock updates the layer's handles; deselect to ensure they're hidden\n layer.deselect();\n }\n });\n },\n\n _lockGroup() {\n if (!this.hasTool(L.LockAction)) { return; }\n\n this._group.eachLayer((layer) => {\n if (this._group.isCollected(layer) ) {\n const edit = layer.editing;\n edit._lock();\n // map.addLayer also deselects the image, so we reselect here\n L.DomUtil.addClass(layer.getElement(), 'collected');\n }\n });\n },\n\n _addCollections(e) {\n const box = e.boxCollectBounds;\n const map = this._group._map;\n\n this._group.eachLayer((layer) => {\n const edit = layer.editing;\n\n if (layer.isSelected()) { layer.deselect(); }\n\n const zoom = map.getZoom();\n const center = map.getCenter();\n let imgBounds = L.latLngBounds(layer.getCorner(2), layer.getCorner(1));\n\n imgBounds = map._latLngBoundsToNewLayerBounds(imgBounds, zoom, center);\n if (box.intersects(imgBounds) && edit.enabled()) {\n if (!this.toolbar) { this._addToolbar(); }\n L.DomUtil.addClass(layer.getElement(), 'collected');\n }\n });\n },\n\n _removeGroup(e) {\n if (!this.hasTool(L.DeleteAction)) { return; }\n\n const layersToRemove = this._group._toRemove();\n const n = layersToRemove.length;\n\n if (n === 0) { return; }\n\n const choice = L.DomUtil.confirmDeletes(n);\n\n if (choice) {\n layersToRemove.forEach((layer) => {\n this._group.removeLayer(layer);\n });\n if (!this._group.anyCollected()) {\n this._removeToolbar();\n }\n }\n\n if (e) { L.DomEvent.stopPropagation(e); }\n },\n\n cancelExport() {\n if (!this.customCollection) {\n this._exportOpts.collection = undefined;\n }\n\n clearInterval(this.updateInterval);\n },\n\n _addToolbar() {\n const group = this._group;\n const map = group._map;\n\n if (group.options.suppressToolbar || this.toolbar) { return; }\n\n this.toolbar = L.distortableImage.controlBar({\n actions: this.editActions,\n position: 'topleft',\n }).addTo(map, group);\n },\n\n _removeToolbar() {\n const map = this._group._map;\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n } else {\n return false;\n }\n },\n\n hasTool(value) {\n return this.editActions.some(action => action === value);\n },\n\n addTool(value) {\n if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) {\n this._removeToolbar();\n this.editActions.push(value);\n this._addToolbar();\n }\n return this;\n },\n\n removeTool(value) {\n this.editActions.some((item, idx) => {\n if (this.editActions[idx] === value) {\n this._removeToolbar();\n this.editActions.splice(idx, 1);\n this._addToolbar();\n return true;\n } else {\n return false;\n }\n });\n return this;\n },\n\n startExport() {\n if (!this.hasTool(L.ExportAction)) { return; }\n\n return new Promise((resolve) => {\n const opts = this._exportOpts;\n opts.resolve = resolve; // allow resolving promise in user-defined functions, to stop spinner on completion\n\n let statusUrl;\n this.updateInterval = null;\n\n // this may be overridden to update the UI to show export progress or completion\n const _defaultUpdater = (data) => {\n data = JSON.parse(data);\n // optimization: fetch status directly from google storage:\n if (data.status_url) {\n if (statusUrl !== data.status_url && data.status_url.match('.json')) {\n // if (data.status_url && data.status_url.substr(0,1) === \"/\") {\n // opts.statusUrl = opts.statusUrl + data.status_url;\n // } else {\n statusUrl = data.status_url;\n // }\n }\n\n if (data.status === 'complete') {\n clearInterval(this.updateInterval);\n\n if (!this.customCollection) {\n this._exportOpts.collection = undefined;\n }\n\n resolve();\n if (data.jpg !== null) {\n alert('Export succeeded. ' + opts.exportUrl + data.jpg);\n }\n }\n\n // TODO: update to clearInterval when status == \"failed\" if we update that in this file:\n // https://github.com/publiclab/mapknitter-exporter/blob/main/lib/mapknitterExporter.rb\n console.log(data);\n }\n };\n\n // receives the URL of status.json, and starts running the updater to repeatedly fetch from status.json;\n // this may be overridden to integrate with any UI\n const _defaultHandleStatusRes = (data) => {\n statusUrl = opts.statusUrl + data;\n // repeatedly fetch the status.json\n this.updateInterval = setInterval(() => {\n const reqOpts = {method: 'GET'};\n const req = new Request(`${statusUrl}?${Date.now()}`, reqOpts);\n fetch(req).then((res) => {\n if (res.ok) {\n return res.text();\n }\n }).then(opts.updater);\n }, opts.frequency);\n };\n\n // initiate the export\n const _defaultFetchStatusUrl = (mergedOpts) => {\n const form = new FormData();\n form.append('collection', JSON.stringify(mergedOpts.collection));\n form.append('scale', mergedOpts.scale);\n form.append('upload', true);\n\n const reqOpts = {method: 'POST', body: form};\n const req = new Request(mergedOpts.exportStartUrl, reqOpts);\n fetch(req).then((res) => {\n if (res.ok) {\n return res.text();\n }\n }).then(mergedOpts.handleStatusRes);\n };\n\n // If the user has passed collection property\n this.customCollection = !!opts.collection;\n if (!this.customCollection) {\n opts.collection = this._group.generateExportJson().images;\n }\n\n opts.frequency = opts.frequency || 3000;\n opts.scale = opts.scale || 100; // switch it to _getAvgCmPerPixel !\n opts.updater = opts.updater || _defaultUpdater;\n opts.handleStatusRes = opts.handleStatusRes || _defaultHandleStatusRes;\n opts.fetchStatusUrl = opts.fetchStatusUrl || _defaultFetchStatusUrl;\n\n opts.fetchStatusUrl(opts);\n });\n },\n});\n\nL.distortableCollection.edit = (group, options) => {\n return new L.DistortableCollection.Edit(group, options);\n};\n","L.DistortableImage = L.DistortableImage || {};\n\n// holds the keybindings & toolbar API for an individual image instance\nL.DistortableImage.Edit = L.Handler.extend({\n options: {\n opacity: 0.5,\n outline: '1px solid red',\n keymap: L.distortableImage.action_map,\n },\n\n initialize(overlay, options) {\n this._overlay = overlay;\n this._toggledImage = false;\n this._mode = overlay.options.mode;\n this._transparent = false;\n this._outlined = false;\n this._opacity = options.opacity;\n\n L.setOptions(this, options);\n\n L.distortableImage.action_map.Escape = '_deselect';\n },\n\n /* Run on image selection. */\n addHooks() {\n const overlay = this._overlay;\n\n this.editActions = this.options.actions;\n\n /* bring the selected image into view */\n overlay.bringToFront();\n this._initModes();\n this._initHandles();\n this._appendHandlesandDragable();\n\n if (overlay.isSelected() && !overlay.options.suppressToolbar) {\n this._addToolbar();\n }\n\n this.parentGroup = overlay.eP ? overlay.eP : false;\n\n L.DomEvent.on(overlay.getElement(), {\n dblclick: this.nextMode,\n }, this);\n\n L.DomEvent.on(window, 'keydown', this._onKeyDown, this);\n },\n\n /* Run on image deselection. */\n removeHooks() {\n const overlay = this._overlay;\n const eP = this.parentGroup;\n\n // First, check if dragging exists - it may be off due to locking\n this._disableDragging();\n\n if (this.toolbar) { this._removeToolbar(); }\n\n for (const handle in this._handles) {\n L.DomUtil.remove(handle);\n }\n\n /**\n * ensures if you disable an image while it is multi-selected\n * additional deselection logic is run\n */\n if (L.DomUtil.hasClass(overlay.getElement(), 'collected')) {\n L.DomUtil.removeClass(overlay.getElement(), 'collected');\n }\n\n if (eP && (!eP.anyCollected() && eP.editing.toolbar)) {\n eP.editing._removeToolbar();\n }\n\n L.DomEvent.off(overlay.getElement(), {\n dblclick: this.nextMode,\n }, this);\n\n L.DomEvent.off(window, 'keydown', this._onKeyDown, this);\n },\n\n disable() {\n if (!this._enabled) { return this; }\n\n this._overlay.deselect();\n this._enabled = false;\n this.removeHooks();\n return this;\n },\n\n _initModes() {\n this._modes = {};\n // passed from L.DistortablImage.PopupBar. If the mode is one\n // of the current toolbar actions, adds it to this._modes\n for (const mode in L.DistortableImage.Edit.MODES) {\n const action = L.DistortableImage.Edit.MODES[mode];\n if (this.editActions.indexOf(action) !== -1) {\n this._modes[mode] = action;\n }\n }\n\n // sets the current mode to the 1st available one if the one selected\n // during initialization is not available\n if (!this._modes[this._mode]) {\n this._mode = Object.keys(this._modes)[0];\n }\n },\n\n\n _initHandles() {\n const overlay = this._overlay;\n let i;\n\n this._dragHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._dragHandles.addLayer(L.dragHandle(overlay, i));\n }\n\n this._scaleHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._scaleHandles.addLayer(L.scaleHandle(overlay, i));\n }\n\n this._distortHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._distortHandles.addLayer(L.distortHandle(overlay, i));\n }\n\n this._rotateHandles = L.layerGroup(); // individual rotate\n for (i = 0; i < 4; i++) {\n this._rotateHandles.addLayer(L.rotateHandle(overlay, i));\n }\n\n // handle includes rotate AND scale\n this._freeRotateHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._freeRotateHandles.addLayer(L.freeRotateHandle(overlay, i));\n }\n\n this._lockHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._lockHandles.addLayer(L.lockHandle(overlay, i, {draggable: false}));\n }\n\n this._handles = {\n drag: this._dragHandles,\n scale: this._scaleHandles,\n distort: this._distortHandles,\n rotate: this._rotateHandles,\n freeRotate: this._freeRotateHandles,\n lock: this._lockHandles,\n };\n },\n\n _appendHandlesandDragable() {\n const ov = this._overlay;\n\n // won't throw error if user adds 0 mode actions to toolbar\n if (!this._mode) {\n this._enableDragging();\n return;\n }\n\n this._updateHandle();\n\n if (!ov.isSelected() && this.currentHandle) {\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(0);\n if (handle.dragging) { handle.dragging.disable(); }\n });\n }\n if (!this.isMode('lock')) { this._enableDragging(); }\n },\n\n _onKeyDown(e) {\n const keymap = this.options.keymap;\n const handlerName = keymap[e.key];\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n if (eP && eP.anyCollected()) { return; }\n\n if (this[handlerName] !== undefined && !ov.options.suppressToolbar) {\n if (ov.isSelected() && this.toolbar) {\n this[handlerName].call(this);\n }\n }\n },\n\n replaceTool(old, next) {\n if (next.baseClass !== 'leaflet-toolbar-icon' || this.hasTool(next)) {\n return this;\n }\n this.editActions.some((item, idx) => {\n if (item === old) {\n this._removeToolbar();\n this.editActions[idx] = next;\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === old) {\n delete this._modes[mode];\n this._nextOrNone(mode);\n } else if (L.DistortableImage.Edit.MODES[mode] === next) {\n this._modes[mode] = next;\n }\n }\n return true;\n }\n });\n return this;\n },\n\n addTool(value) {\n if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) {\n this._removeToolbar();\n this.editActions.push(value);\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === value) {\n this._modes[mode] = value;\n }\n }\n if (!this._overlay.isSelected()) { this._removeToolbar(); }\n }\n return this;\n },\n\n hasTool(value) {\n return this.editActions.some(action => action === value);\n },\n\n removeTool(value) {\n this.editActions.some((item, idx) => {\n if (item === value) {\n this._removeToolbar();\n this.editActions.splice(idx, 1);\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === value) {\n delete this._modes[mode];\n this._nextOrNone(mode);\n }\n }\n return true;\n }\n });\n if (!this._overlay.isSelected()) { this._removeToolbar(); }\n return this;\n },\n\n // set the mode to the next mode or if that was the last one set mode to ''\n _nextOrNone(mode) {\n if (this.isMode(mode)) {\n if (Object.keys(this.getModes()).length >= 1) {\n this.nextMode();\n } else {\n if (mode === 'lock') { this._enableDragging(); }\n this._mode = '';\n this._updateHandle();\n }\n }\n },\n\n _removeToolbar() {\n const ov = this._overlay;\n const map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n const overlay = this._overlay;\n const map = overlay._map;\n\n this.dragging = new L.Draggable(overlay.getElement());\n this.dragging.enable();\n\n /* Hide toolbars and markers while dragging; click will re-show it */\n this.dragging.on('dragstart', () => {\n overlay.fire('dragstart');\n this._removeToolbar();\n });\n\n /*\n * Adjust default behavior of L.Draggable, which overwrites the CSS3\n * distort transformations that we set when it calls L.DomUtil.setPosition.\n */\n this.dragging._updatePosition = function() {\n const topLeft = overlay.getCorner(0);\n const delta = this._newPos.subtract(map.latLngToLayerPoint(topLeft));\n let currentPoint;\n const corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _setOpacities(o) {\n const image = this._overlay.getElement();\n this._opacity = o;\n if (!this.hasTool(L.OpacitiesAction)) { return; }\n\n (this._opacity < 1) ? this._transparent = true : this._transparent = false;\n\n L.DomUtil.setOpacity(image, this._opacity);\n image.setAttribute('opacity', this._opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n if (this.isMode('lock') || !this.hasTool(L.DeleteAction)) { return; }\n\n const choice = L.DomUtil.confirmDelete();\n if (!choice) { return; }\n\n this._removeToolbar();\n\n if (eP) { eP.removeLayer(ov); }\n else { ov._map.removeLayer(ov); }\n },\n\n // Based on https://github.com/publiclab/mapknitter/blob/8d94132c81b3040ae0d0b4627e685ff75275b416/app/assets/javascripts/mapknitter/Map.js#L47-L82\n _getExport() {\n const overlay = this._overlay;\n const map = overlay._map;\n const img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n const downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n const height = downloadable.height;\n const width = downloadable.width;\n const nw = map.latLngToLayerPoint(overlay.getCorner(0));\n const ne = map.latLngToLayerPoint(overlay.getCorner(1));\n const sw = map.latLngToLayerPoint(overlay.getCorner(2));\n const se = map.latLngToLayerPoint(overlay.getCorner(3));\n\n // I think this is to move the image to the upper left corner,\n // eslint-disable-next-line max-len\n // jywarren: i think we may need these or the image goes off the edge of the canvas\n // jywarren: but these seem to break the distortion math...\n\n // jywarren: i think it should be rejiggered so it\n // finds the most negative values of x and y and then\n // adds those to all coordinates\n\n // nw.x -= nw.x;\n // ne.x -= nw.x;\n // se.x -= nw.x;\n // sw.x -= nw.x;\n\n // nw.y -= nw.y;\n // ne.y -= nw.y;\n // se.y -= nw.y;\n // sw.y -= nw.y;\n\n // run once warping is complete\n downloadable.onload = function() {\n L.DomUtil.remove(downloadable);\n };\n\n if (window && window.hasOwnProperty('warpWebGl')) {\n warpWebGl(\n downloadable.id,\n [0, 0, width, 0, width, height, 0, height],\n [nw.x, nw.y, ne.x, ne.y, se.x, se.y, sw.x, sw.y],\n true // trigger download\n );\n }\n };\n\n downloadable.src = overlay.options.fullResolutionSrc || img.src;\n },\n\n _stackUp() {\n const t = this._toggledImage;\n\n if (!t || !this.hasTool(L.StackAction)) { return; }\n\n this._toggledImage = false;\n this._overlay.bringToFront();\n this._refresh();\n },\n\n _stackDown() {\n const t = this._toggledImage;\n\n if (t || !this.hasTool(L.StackAction)) { return; }\n\n this._toggledImage = true;\n this._overlay.bringToBack();\n this._refresh();\n },\n\n _unlock() {\n const ov = this._overlay;\n const map = ov._map;\n const eP = this.parentGroup;\n\n if (!this.isMode('lock')) { return; }\n if ((eP && !eP.isCollected(ov)) || !eP) {\n if (!this.hasTool(L.LockAction)) { return; }\n }\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n if (ov.options.mode === 'lock' || !this.hasMode(ov.options.mode)) {\n this._mode = '';\n this.currentHandle = '';\n } else {\n this._mode = ov.options.mode;\n }\n this._updateHandle();\n this._enableDragging();\n this._refresh();\n },\n\n _lock() {\n const ov = this._overlay;\n const map = ov._map;\n const eP = this.parentGroup;\n\n if (this.isMode('lock')) { return; }\n if ((eP && !eP.isCollected(ov)) || !eP) {\n if (!this.hasTool(L.LockAction)) { return; }\n }\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n this._mode = 'lock';\n this._updateHandle();\n this._disableDragging();\n this._refresh();\n },\n\n _deselect() {\n this._overlay.deselect();\n },\n\n _showMarkers(e) {\n const eP = this.parentGroup;\n\n if (!this.currentHandle) { return; }\n // only markers we want in collect interface for now is lock\n if (!this.isMode('lock') && (eP && eP.anyCollected())) { return; }\n\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(1);\n if (handle.dragging) { handle.dragging.enable(); }\n L.DomUtil.addClass(handle.getElement(), 'leaflet-interactive');\n });\n },\n\n _hideMarkers() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n // workaround for race condition w/ feature group\n if (!this._handles) { this._initHandles(); }\n\n if (!this.currentHandle) { return; }\n if (this.isMode('lock') && (eP && eP.isCollected(ov))) { return; }\n\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(0);\n if (handle.dragging) { handle.dragging.disable(); }\n L.DomUtil.removeClass(handle.getElement(), 'leaflet-interactive');\n });\n },\n\n _updateHandle() {\n const ov = this._overlay;\n const map = ov._map;\n const mode = this.getMode();\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n this.currentHandle = mode === '' ? '' : this._handles[mode];\n if (this.currentHandle !== '') {\n map.addLayer(this.currentHandle);\n }\n },\n\n _addToolbar() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n const map = ov._map;\n // Find the topmost point on the image.\n const corners = ov.getCorners();\n let maxLat = -Infinity;\n\n if (eP && eP.anyCollected()) {\n eP.editing._addToolbar();\n return;\n }\n\n if (ov.options.suppressToolbar || this.toolbar) { return; }\n\n for (let i = 0; i < corners.length; i++) {\n if (corners[i].lat > maxLat) {\n maxLat = corners[i].lat;\n }\n }\n\n // Longitude is based on the centroid of the image.\n const raisedPoint = ov.getCenter();\n raisedPoint.lat = maxLat;\n\n this.toolbar = L.distortableImage.popupBar(raisedPoint, {\n actions: this.editActions,\n }).addTo(map, ov);\n ov.fire('toolbar:created');\n },\n\n _refresh() {\n if (this.toolbar) { this._removeToolbar(); }\n this._addToolbar();\n },\n\n _updateToolbarPos() {\n const overlay = this._overlay;\n // Find the topmost point on the image.\n const corners = overlay.getCorners();\n const toolbar = this.toolbar;\n let maxLat = -Infinity;\n\n if (toolbar && toolbar instanceof L.DistortableImage.PopupBar) {\n for (let i = 0; i < corners.length; i++) {\n if (corners[i].lat > maxLat) {\n maxLat = corners[i].lat;\n }\n }\n\n // Longitude is based on the centroid of the image.\n const raisedPoint = overlay.getCenter();\n raisedPoint.lat = maxLat;\n\n if (!overlay.options.suppressToolbar) {\n this.toolbar.setLatLng(raisedPoint);\n }\n }\n },\n\n hasMode(mode) {\n return !!this._modes[mode];\n },\n\n getMode() {\n if (!this.enabled()) { return; }\n return this._mode;\n },\n\n getModes() {\n return this._modes;\n },\n\n isMode(mode) {\n if (!this.enabled()) { return false; }\n return this._mode === mode;\n },\n\n setMode(newMode) {\n const ov = this._overlay;\n const eP = this.parentGroup;\n const mode = this.getMode();\n\n if (mode === newMode || !this.hasMode(newMode) || !this.enabled()) {\n return;\n }\n\n if (this.toolbar) { this.toolbar.clickTool(newMode); }\n if (this.isMode('lock') && !this.dragging) { this._enableDragging(); }\n this._mode = newMode;\n if (this.isMode('lock')) { this._disableDragging(); }\n this._updateHandle();\n this._refresh();\n\n if (eP && eP.isCollected(ov)) { ov.deselect(); }\n\n return this;\n },\n\n /**\n * need to attach a stop to img dblclick or it will propagate to\n * the map and fire the handler that shows map location labels on map dblclick.\n */\n nextMode(e) {\n const mode = this.getMode();\n const eP = this.parentGroup;\n const modesArray = Object.keys(this.getModes());\n const idx = modesArray.indexOf(mode);\n const nextIdx = (idx + 1) % modesArray.length;\n const newMode = modesArray[nextIdx];\n\n if (e) {\n if (eP && eP.anyCollected()) { return; }\n L.DomEvent.stop(e);\n }\n\n return this.setMode(newMode);\n },\n});\n\nL.distortableImage.edit = (overlay, options) => {\n return new L.DistortableImage.Edit(overlay, options);\n};\n","L.BorderAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n let use;\n let tooltip;\n\n if (edit._outlined) {\n use = 'border_outer';\n tooltip = overlay.options.translation.removeBorder;\n } else {\n use = 'border_clear';\n tooltip = overlay.options.translation.addBorder;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n // conditional for disabling keybindings for this action when the image is locked.\n L.DistortableImage.action_map.b = mode === 'lock' ? '' : '_toggleBorder';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n L.IconUtil.toggleXlink(this._link, 'border_clear', 'border_outer');\n L.IconUtil.toggleTitle(this._link, 'Remove Border', 'Add Border');\n edit._toggleBorder();\n },\n});\n","L.DeleteAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const use = 'delete_forever';\n let tooltip;\n /**\n * we can tell whether the overlay is an instance of `L.DistortableImageOverlay` or `L.DistortableCollection` bc only\n * the former should have `parentGroup` defined on it. From there we call the apporpriate keybindings and methods.\n */\n if (edit instanceof L.DistortableImage.Edit) {\n tooltip = overlay.options.translation.deleteImage;\n // backspace windows / delete mac\n L.DistortableImage.action_map.Backspace = (\n edit._mode === 'lock' ? '' : '_removeOverlay'\n );\n } else {\n tooltip = overlay.options.translation.deleteImages;\n L.DistortableImage.group_action_map.Backspace = (\n edit._mode === 'lock' ? '' : '_removeGroup'\n );\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) { edit._removeOverlay(); }\n else { edit._removeGroup(); }\n },\n});\n","L.DistortAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'distort',\n tooltip: overlay.options.translation.distortImage,\n className: 'distort',\n };\n\n L.DistortableImage.action_map.d = '_distortMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._distortMode();\n },\n});\n","L.DragAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'drag',\n tooltip: overlay.options.translation.dragImage,\n className: 'drag',\n };\n\n L.DistortableImage.action_map.D = '_dragMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._dragMode();\n },\n});\n","L.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.action_map = {};\n\nL.EditAction = L.Toolbar2.Action.extend({\n options: {\n toolbarIcon: {\n svg: false,\n html: '',\n className: '',\n tooltip: '',\n },\n },\n\n initialize(map, overlay, options) {\n this._overlay = overlay;\n this._map = map;\n\n L.setOptions(this, options);\n L.Toolbar2.Action.prototype.initialize.call(this, options);\n\n this._injectIconSet();\n },\n\n _createIcon(toolbar, container, args) {\n const iconOptions = this.options.toolbarIcon;\n const className = iconOptions.className;\n const edit = this._overlay.editing;\n const style = this.options.toolbarIcon.style;\n\n this.toolbar = toolbar;\n this._icon = L.DomUtil.create('li', '', container);\n this._link = L.DomUtil.create('a', '', this._icon);\n\n if (iconOptions.svg) {\n this._link.innerHTML = L.IconUtil.create(iconOptions.html);\n } else {\n this._link.innerHTML = iconOptions.html;\n }\n\n this._link.setAttribute('href', '#');\n this._link.setAttribute('title', iconOptions.tooltip);\n if (style) { this._link.setAttribute('style', style); };\n this._link.setAttribute('role', 'button');\n\n L.DomUtil.addClass(this._link, this.constructor.baseClass);\n\n if (className) {\n L.DomUtil.addClass(this._link, className);\n if (className === 'disabled') {\n L.DomUtil.addClass(this._icon, className);\n }\n if (className === edit._mode) {\n L.DomUtil.addClass(this._link, 'selected-mode');\n } else {\n L.DomUtil.removeClass(this._link, 'selected-mode');\n }\n }\n\n L.DomEvent.on(this._link, 'click', this.enable, this);\n L.DomEvent.on(this._overlay, 'update', () => {\n const match = this._link.innerHTML.match(/xlink:href=\"#restore\"/);\n if (match && match.length === 1) { this._enableAction(); }\n });\n\n /* Add secondary toolbar */\n this._addSubToolbar(toolbar, this._icon, args);\n },\n\n _injectIconSet() {\n if (document.querySelector('#iconset')) {\n return;\n }\n\n const el = document.createElement('div');\n el.id = 'iconset';\n el.setAttribute('hidden', 'hidden');\n el.innerHTML = new L.ToolbarIconSet().render();\n\n document.querySelector('.leaflet-marker-pane').appendChild(el);\n },\n\n _enableAction() {\n L.DomUtil.removeClass(this._link.parentElement, 'disabled');\n L.DomUtil.removeClass(this._link, 'disabled');\n },\n\n _disableAction() {\n L.DomUtil.addClass(this._link.parentElement, 'disabled');\n L.DomUtil.addClass(this._link, 'disabled');\n },\n});\n\nL.editAction = function(map, overlay, options) {\n return new L.EditAction(map, overlay, options);\n};\n","L.ExportAction = L.EditAction.extend({\n // This function is executed every time we select an image\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let tooltip;\n\n this.isExporting = false;\n this.mouseLeaveSkip = true;\n this.isHooksExecuted = false;\n\n if (edit instanceof L.DistortableImage.Edit) {\n L.DistortableImage.action_map.e = '_getExport';\n tooltip = overlay.options.translation.exportImage;\n } else {\n L.DistortableImage.group_action_map.e = 'runExporter';\n tooltip = overlay.options.translation.exportImages;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'get_app',\n tooltip: tooltip,\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) {\n edit._getExport();\n return;\n }\n\n // Make sure that addHooks is executed only once, event listeners will handle the rest\n if (this.isHooksExecuted) {\n return;\n } else {\n this.isHooksExecuted = true;\n }\n\n const exportTool = this._link.parentElement;\n\n this.mouseEnterHandler = this.handleMouseEnter.bind(this);\n this.mouseLeaveHandler = this.handleMouseLeave.bind(this);\n\n L.DomEvent.on(exportTool, 'click', function() {\n if (!this.isExporting) {\n this.isExporting = true;\n this.renderExportIcon();\n\n setTimeout(this.attachMouseEventListeners.bind(this, exportTool), 100);\n edit.runExporter().then(\n function() {\n this.resetState();\n this.detachMouseEventListeners(exportTool);\n }.bind(this)\n );\n } else {\n // Clicking on the export icon after export has started will be ignored\n if (this.mouseLeaveSkip) {\n return;\n }\n\n this.resetState();\n this.detachMouseEventListeners(exportTool);\n edit.cancelExport();\n }\n }, this);\n },\n\n resetState() {\n this.renderDownloadIcon();\n this.isExporting = false;\n this.mouseLeaveSkip = true;\n },\n\n attachMouseEventListeners(element) {\n element.addEventListener('mouseenter', this.mouseEnterHandler);\n element.addEventListener('mouseleave', this.mouseLeaveHandler);\n },\n\n detachMouseEventListeners(element) {\n element.removeEventListener('mouseenter', this.mouseEnterHandler);\n element.removeEventListener('mouseleave', this.mouseLeaveHandler);\n },\n\n handleMouseEnter() {\n this.renderCancelIcon();\n },\n\n handleMouseLeave() {\n if (this.mouseLeaveSkip) {\n this.mouseLeaveSkip = false;\n } else {\n this.renderExportIcon();\n }\n },\n\n renderDownloadIcon() {\n L.IconUtil.toggleXlink(this._link, 'get_app', 'spinner');\n L.IconUtil.toggleTitle(this._link, 'Export Images', 'Loading...');\n L.DomUtil.removeClass(this._link.firstChild, 'loader');\n },\n\n renderExportIcon() {\n L.IconUtil.toggleXlink(this._link, 'spinner');\n L.IconUtil.toggleTitle(this._link, 'Export Images', 'Loading...');\n L.IconUtil.addClassToSvg(this._link, 'loader');\n },\n\n renderCancelIcon() {\n L.IconUtil.toggleXlink(this._link, 'cancel');\n L.IconUtil.toggleTitle(this._link, 'Cancel Export', 'Loading...');\n L.DomUtil.removeClass(this._link.firstChild, 'loader');\n },\n});\n","L.FreeRotateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'crop_rotate',\n tooltip: overlay.options.translation.freeRotateImage,\n className: 'freeRotate',\n };\n\n L.DistortableImage.action_map.f = '_freeRotateMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._freeRotateMode();\n },\n});\n","L.GeolocateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'explore',\n tooltip: overlay.options.translation.geolocateImage,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const image = this._overlay.getElement();\n\n EXIF.getData(image, L.EXIF(image));\n },\n});\n","L.LockAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let use;\n let tooltip;\n\n if (edit instanceof L.DistortableImage.Edit) {\n L.DistortableImage.action_map.u = '_unlock';\n L.DistortableImage.action_map.l = '_lock';\n tooltip = overlay.options.translation.lockMode;\n\n use = edit.isMode('lock') ? 'lock' : 'unlock';\n } else {\n L.DistortableImage.group_action_map.l = '_lockGroup';\n tooltip = overlay.options.translation.lockImages;\n use = 'lock';\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: 'lock',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) { edit._toggleLockMode(); }\n else { edit._lockGroup(); }\n },\n});\n","let opacities = [100, 80, 60, 40, 20, 0]; // Set numeric values from 0 to 100.\n\n// Add custom CSS scripts and overwrites. Pending for better implementation of CSSStyleSheet in browsers.\nconst subtoolbarCss = new CSSStyleSheet();\nsubtoolbarCss.replaceSync(\n `.leaflet-toolbar-icon-vertical {\n box-sizing: border-box !important;\n display: block !important;\n width: 30px !important;\n height: 30px !important;\n line-height: 30px !important;\n padding: 0 !important;\n text-align: center !important;\n text-decoration: none !important;\n background-color: #fff;\n border: inset 0.5px lightgray !important;\n font-size: 12px !important;\n font-weight: bold !important;\n color:#0087A8 !important;\n float: none !important;\n margin: auto !important;\n z-index:900 !important;\n }\n `\n);\n\nsubtoolbarCss.insertRule(\n `.leaflet-toolbar-1 li:first-child a {\n border-radius: 4px 4px 0px 0px !important;\n }`\n);\ndocument.adoptedStyleSheets = [subtoolbarCss];\n\nopacities = opacities.map((o) => {\n (isNaN(o) || o > 100) ? o = 100 : o;\n (o < 0) ? o = 0 : o;\n\n return L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: o,\n tooltip: 'Opacity ' + o +'%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:rgb(' + (100 - o) + '%,' + (100 - o) + '%,' + (100 - o) + '%);',\n },\n },\n addHooks() {\n this._overlay.editing._setOpacities(o/100);\n },\n });\n});\n\nL.OpacitiesToolbar2 = L.Toolbar2.extend({\n options: {\n className: '',\n filter: function() { return true; },\n actions: [],\n style: `translate(-1px, -${ ((opacities.length + 1) * 30)}px)`,\n },\n\n appendToContainer(container) {\n let baseClass = this.constructor.baseClass + '-' + this._calculateDepth();\n let className = baseClass + ' ' + this.options.className;\n let Action; let action;\n let i; let j; let l; let m;\n\n this._container = container;\n this._ul = L.DomUtil.create('ul', className, container);\n this._ul.style.transform = ( this.options.style ) ? this.options.style : '';\n\n // Ensure that clicks, drags, etc. don't bubble up to the map.\n // These are the map events that the L.Draw.Polyline handler listens for.\n // Note that L.Draw.Polyline listens to 'mouseup', not 'mousedown', but\n // if only 'mouseup' is silenced, then the map gets stuck in a halfway\n // state because it receives a 'mousedown' event and is waiting for the\n // corresponding 'mouseup' event.\n this._disabledEvents = [\n 'click', 'mousemove', 'dblclick',\n 'mousedown', 'mouseup', 'touchstart',\n ];\n\n for (j = 0, m = this._disabledEvents.length; j < m; j++) {\n L.DomEvent.on(this._ul, this._disabledEvents[j], L.DomEvent.stopPropagation);\n }\n\n /* Instantiate each toolbar action and add its corresponding toolbar icon. */\n for (i = 0, l = this.options.actions.length; i < l; i++) {\n Action = this._getActionConstructor(this.options.actions[i]);\n\n action = new Action();\n action._createIcon(this, this._ul, this._arguments);\n }\n },\n});\n\n\nL.OpacitiesAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'opacities',\n tooltip: 'Set custom opacity',\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n options.subToolbar = new L.OpacitiesToolbar2({\n actions: opacities,\n });\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_setOpacities';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const link = this._link;\n if (L.DomUtil.hasClass(link, 'subtoolbar_enabled')) {\n L.DomUtil.removeClass(link, 'subtoolbar_enabled');\n setTimeout(() => {\n this.options.subToolbar._hide();\n }, 100);\n } else {\n L.DomUtil.addClass(link, 'subtoolbar_enabled');\n };\n\n L.IconUtil.toggleXlink(link, 'opacities', 'cancel');\n L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Cancel');\n },\n});\n","L.OpacityAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n let use;\n let tooltip;\n\n if (edit._transparent) {\n use = 'opacity_empty';\n tooltip = overlay.options.translation.makeImageOpaque;\n } else {\n use = 'opacity';\n tooltip = overlay.options.translation.makeImageTransparent;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n const link = this._link;\n\n L.IconUtil.toggleXlink(link, 'opacity', 'opacity_empty');\n L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n edit._toggleOpacity();\n },\n});\n","L.RestoreAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n const edited = overlay.edited;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'restore',\n tooltip: overlay.options.translation.restoreImage,\n className: edited && mode !== 'lock' ? '' : 'disabled',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const ov = this._overlay;\n\n L.DomEvent.on(ov, {\n edit: this._enableAction,\n restore: this._disableAction,\n }, this);\n\n ov.restore();\n },\n});\n","L.RotateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'rotate',\n tooltip: overlay.options.translation.rotateImage,\n className: 'rotate',\n };\n\n L.DistortableImage.action_map.r = '_rotateMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._rotateMode();\n },\n});\n","L.ScaleAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'scale',\n tooltip: overlay.options.translation.scaleImage,\n className: 'scale',\n };\n\n L.DistortableImage.action_map.s = '_scaleMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._scaleMode();\n },\n});\n","L.StackAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let use;\n let tooltip;\n\n if (edit._toggledImage) {\n use = 'flip_to_back';\n tooltip = overlay.options.translation.stackToFront;\n } else {\n use = 'flip_to_front';\n tooltip = overlay.options.translation.stackToBack;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.DistortableImage.action_map.q = edit._mode === 'lock' ? '' : '_stackUp';\n L.DistortableImage.action_map.a = edit._mode === 'lock' ? '' : '_stackDown';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n L.IconUtil.toggleXlink(this._link, 'flip_to_front', 'flip_to_back');\n L.IconUtil.toggleTitle(this._link, 'Stack to Front', 'Stack to Back');\n edit._toggleOrder();\n },\n});\n","L.UnlockAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'unlock',\n tooltip: overlay.options.translation.unlockImages,\n };\n\n L.DistortableImage.group_action_map.u = '_unlockGroup';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._unlockGroup();\n },\n});\n","/* eslint-disable no-unused-vars */\nL.EXIF = function getEXIFdata(img) {\n if (Object.keys(EXIF.getAllTags(img)).length !== 0) {\n console.log(EXIF.getAllTags(img));\n const GPS = EXIF.getAllTags(img);\n let altitude;\n\n /* If the lat/lng is available. */\n if (\n typeof GPS.GPSLatitude !== 'undefined' &&\n typeof GPS.GPSLongitude !== 'undefined'\n ) {\n // sadly, encoded in [degrees,minutes,seconds]\n // primitive value = GPS.GPSLatitude[x].numerator\n let lat =\n GPS.GPSLatitude[0] +\n GPS.GPSLatitude[1] / 60 +\n GPS.GPSLatitude[2] / 3600;\n let lng =\n GPS.GPSLongitude[0] +\n GPS.GPSLongitude[1] / 60 +\n GPS.GPSLongitude[2] / 3600;\n\n if (GPS.GPSLatitudeRef !== 'N') {\n lat = lat * -1;\n }\n if (GPS.GPSLongitudeRef === 'W') {\n lng = lng * -1;\n }\n }\n\n // Attempt to use GPS compass heading; will require\n // some trig to calc corner points, which you can find below:\n\n let angle = 0;\n // \"T\" refers to \"True north\", so -90.\n if (GPS.GPSImgDirectionRef === 'T') {\n angle =\n (Math.PI / 180) *\n (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90);\n // \"M\" refers to \"Magnetic north\"\n } else if (GPS.GPSImgDirectionRef === 'M') {\n angle =\n (Math.PI / 180) *\n (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90);\n } else {\n console.log('No compass data found');\n }\n\n console.log('Orientation:', GPS.Orientation);\n\n /* If there is orientation data -- i.e. landscape/portrait etc */\n if (GPS.Orientation === 6) {\n // CCW\n angle += (Math.PI / 180) * -90;\n } else if (GPS.Orientation === 8) {\n // CW\n angle += (Math.PI / 180) * 90;\n } else if (GPS.Orientation === 3) {\n // 180\n angle += (Math.PI / 180) * 180;\n }\n\n /* If there is altitude data */\n if (\n typeof GPS.GPSAltitude !== 'undefined' &&\n typeof GPS.GPSAltitudeRef !== 'undefined'\n ) {\n // Attempt to use GPS altitude:\n // (may eventually need to find EXIF field of view for correction)\n if (\n typeof GPS.GPSAltitude !== 'undefined' &&\n typeof GPS.GPSAltitudeRef !== 'undefined'\n ) {\n altitude =\n GPS.GPSAltitude.numerator / GPS.GPSAltitude.denominator +\n GPS.GPSAltitudeRef;\n } else {\n altitude = 0; // none\n }\n }\n } else {\n alert('EXIF initialized. Press again to view data in console.');\n }\n};\n","L.DistortHandle = L.EditHandle.extend({\n options: {\n TYPE: 'distort',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n\n overlay.setCorner(this._corner, this.getLatLng());\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.distortHandle = function(overlay, idx, options) {\n return new L.DistortHandle(overlay, idx, options);\n};\n","L.DragHandle = L.EditHandle.extend({\n options: {\n TYPE: 'drag',\n icon: L.icon({\n // eslint-disable-next-line max-len\n iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAsVJREFUeNrMVztLXEEUvnNVFAVBAhY2aRKbTZEHJNpYabuNjSgYg/GxdsmPSJkUAa/ZdVEX8mgWYVutbHxAHkVskjQBuUUgBISVhCQk3wnfwMlk1rusN1wHPubOzJlzvjlz5sxc01Ma/hUEwQnwDIjqc7uvgv9YYO86qgIwCXQbdNTlQ8kcCBHgBch8TcloF6oJGr6phk6EQAkfdz3zvgDr9Mr7Fg1fptEZoM8jsmrokpfsiIFO4IIjuE2v1EDmR4LRdlR5Gh51hj8D34ABtm8YTtqna0TgklIw5CgQguKxIojEjmFROg/MKQO27NkFAB+4wAPouGUJiIvWKHwbAxX2XyWRKWkqhT+pbJntJZJuUzISW0+5hW+obxrVBsfvoH/dqCCJuU97GBh2VteLSiYvArmErT8EVoAK9Bw7enbpVYmvAQlyowYforrH5jXL2rPHI/TKONDB7u9AlavdaTBPvPmazUeQuy8f7UomUgTEwIJPEQ3sQGE/6ll2l9H/KcEzBcfWn2IclluM3DpddJxSHujlFkscbUPvmB0LHVnLrId7nlaZVkEc6QGXQI1MAwZcWmVRHeNaQwJMMiU2cwy4s7p/RJ2ckpvIQs+cIs+5GzitloLKHUV3MPREuXbTOKO91dX387gGTONxIgEWm+E61FFrpcyqXLHsEwiDjEsjAksqw5XPoL9MHVrn6QR4q+XZrDaR4RoWzq2ymafuRA/Mq1stSsHLVkcbdf9VjOcx8ZH3+SFWcCWlVPyWuUBOwUWdC1wP5NVjYiXFWLO69PZ6CRTUY6KSIoEKdf6T3IzzgHxnsyHctNBEkmn6Oob8ExUDg/ahGybd177cDjzH5xHwgDiSvoS7I/LZyvxJZj0wod7tkX5G0XVC7rEyLhfLJjBGbKoLLEfZWObyKeZ6oY82g+yf5Zn/mJyHX7PMf04z/T3/LcAAu4E6iiyJqf0AAAAASUVORK5CYII=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n\n overlay.dragBy(formerLatLng, newLatLng);\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.dragHandle = function(overlay, idx, options) {\n return new L.DragHandle(overlay, idx, options);\n};\n","L.EditHandle = L.Marker.extend({\n initialize(overlay, corner, options) {\n const latlng = overlay.getCorner(corner);\n\n L.setOptions(this, options);\n\n this._handled = overlay;\n this._corner = corner;\n\n const markerOptions = {\n draggable: true,\n zIndexOffset: 10,\n };\n\n if (options && options.hasOwnProperty('draggable')) {\n markerOptions.draggable = options.draggable;\n }\n\n L.Marker.prototype.initialize.call(this, latlng, markerOptions);\n },\n\n onAdd(map) {\n L.Marker.prototype.onAdd.call(this, map);\n this._bindListeners();\n this.updateHandle();\n },\n\n onRemove(map) {\n this._unbindListeners();\n L.Marker.prototype.onRemove.call(this, map);\n },\n\n _onHandleDragStart() {\n this._handled.fire('editstart');\n },\n\n _onHandleDragEnd() {\n this._fireEdit();\n },\n\n _fireEdit() {\n this._handled.edited = true;\n this._handled.fire('edit');\n },\n\n _bindListeners() {\n this.on({\n contextmenu: L.DomEvent.stop,\n dragstart: this._onHandleDragStart,\n drag: this._onHandleDrag,\n dragend: this._onHandleDragEnd,\n }, this);\n\n this._handled._map.on('zoomend', this.updateHandle, this);\n this._handled.on('update', this.updateHandle, this);\n },\n\n _unbindListeners() {\n this.off({\n contextmenu: L.DomEvent.stop,\n dragstart: this._onHandleDragStart,\n drag: this._onHandleDrag,\n dragend: this._onHandleDragEnd,\n }, this);\n\n this._handled._map.off('zoomend', this.updateHandle, this);\n this._handled.off('update', this.updateHandle, this);\n },\n\n /* Takes two latlngs and calculates the scaling difference. */\n _calculateScalingFactor(latlngA, latlngB) {\n const overlay = this._handled;\n const map = overlay._map;\n\n const centerPoint = map.latLngToLayerPoint(overlay.getCenter());\n const formerPoint = map.latLngToLayerPoint(latlngA);\n const newPoint = map.latLngToLayerPoint(latlngB);\n const formerRadiusSquared = this._d2(centerPoint, formerPoint);\n const newRadiusSquared = this._d2(centerPoint, newPoint);\n\n return Math.sqrt(newRadiusSquared / formerRadiusSquared);\n },\n\n /* Distance between two points in cartesian space, squared (distance formula). */\n _d2(a, b) {\n const dx = a.x - b.x;\n const dy = a.y - b.y;\n\n return Math.pow(dx, 2) + Math.pow(dy, 2);\n },\n\n /* Takes two latlngs and calculates the angle between them. */\n calculateAngleDelta(latlngA, latlngB) {\n const overlay = this._handled;\n const map = overlay._map;\n\n\n const centerPoint = map.latLngToLayerPoint(overlay.getCenter());\n const formerPoint = map.latLngToLayerPoint(latlngA);\n const newPoint = map.latLngToLayerPoint(latlngB);\n\n const initialAngle = (\n Math.atan2(centerPoint.y - formerPoint.y, centerPoint.x - formerPoint.x)\n );\n const newAngle = (\n Math.atan2(centerPoint.y - newPoint.y, centerPoint.x - newPoint.x)\n );\n\n return newAngle - initialAngle;\n },\n});\n","L.FreeRotateHandle = L.EditHandle.extend({\n options: {\n TYPE: 'freeRotate',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const map = overlay._map;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const angle = this.calculateAngleDelta(formerLatLng, newLatLng);\n const scale = this._calculateScalingFactor(formerLatLng, newLatLng);\n\n if (angle !== 0) { overlay.rotateBy(angle, 'rad'); }\n\n let edgeMinWidth = overlay.edgeMinWidth;\n if (!edgeMinWidth) { edgeMinWidth = 50; } /* just in case */\n\n const corner1 = map.latLngToContainerPoint(overlay.getCorner(0));\n const corner2 = map.latLngToContainerPoint(overlay.getCorner(1));\n const w = Math.abs(corner1.x - corner2.x);\n const h = Math.abs(corner1.y - corner2.y);\n const distance = Math.sqrt(w * w + h * h);\n if (distance > edgeMinWidth || scale > 1) {\n overlay.scaleBy(scale);\n } else {\n overlay.scaleBy(1);\n }\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.freeRotateHandle = (overlay, idx, options) => {\n return new L.FreeRotateHandle(overlay, idx, options);\n};\n","L.LockHandle = L.EditHandle.extend({\n options: {\n TYPE: 'lock',\n interactive: false,\n icon: L.icon({\n // eslint-disable-next-line max-len\n iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAD8SURBVO3BPU7CYAAA0AdfjIcQlRCQBG7C3gk2uIPG2RC3Dk16Gz0FTO1WZs/gwGCMP/2+xsSl7+n1er1Iz9LtRQjaPeMeO+TinLDCJV78YqjdA04YodKuxhUaPGoRxMmxwRQZSt87Yo4KExGCeAUyLLFB4bMacxywEClIU2KDKXbInTUYo8JCgoFuGoxQO5uiwY1EA91VmDqrcKeDoX8WdNNgjApvmGGLXKIgXY0xGkxQYItrrFFIEKQ5Yo4KEx9yrDFDhlKkIF6NOQ5Y+KpAhiXWKEQI4pxwiwoLPyuxwQw75FoE7fZYocFEuwI7jHCBV39gL92TXq/Xi/AOcmczZmaIMScAAAAASUVORK5CYII=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n onRemove(map) {\n this.unbindTooltip();\n L.EditHandle.prototype.onRemove.call(this, map);\n },\n\n _bindListeners() {\n const icon = this.getElement();\n\n L.EditHandle.prototype._bindListeners.call(this);\n\n L.DomEvent.on(icon, {\n mousedown: this._tooltipOn,\n mouseup: this._tooltipOff,\n }, this);\n\n L.DomEvent.on(document, 'pointerleave', this._tooltipOff, this);\n },\n\n _unbindListeners() {\n const icon = this.getElement();\n\n L.EditHandle.prototype._bindListeners.call(this);\n\n L.DomEvent.off(icon, {\n mousedown: this._tooltipOn,\n mouseup: this._tooltipOff,\n }, this);\n\n L.DomEvent.off(document, 'pointerleave', this._tooltipOff, this);\n },\n\n /* cannot be dragged */\n _onHandleDrag() {\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n\n _tooltipOn(e) {\n const eP = this._handled.parentGroup;\n const edit = eP ? eP.editing : this._handled.editing;\n\n if (e.shiftKey) { return; }\n if (!this._handled.isSelected() && (eP && !eP.isCollected(this._handled))) {\n return;\n }\n\n const handlesArr = edit._lockHandles;\n\n this._timer = setTimeout(L.bind(function() {\n if (this._timeout) { clearTimeout(this._timeout); }\n\n if (!this.getTooltip()) {\n this.bindTooltip('Locked!', {permanent: true});\n } else {\n handlesArr.eachLayer(function(handle) {\n if (this !== handle) { handle.closeTooltip(); }\n });\n }\n\n this.openTooltip();\n }, this), 500);\n },\n\n _tooltipOff(e) {\n const eP = this._handled.parentGroup;\n const edit = eP ? eP.editing : this._handled.editing;\n\n if (e.shiftKey) { return; }\n if (!this._handled.isSelected() && (eP && !eP.isCollected(this._handled))) {\n return;\n }\n\n const handlesArr = edit._lockHandles;\n\n if (e.currentTarget === document) {\n handlesArr.eachLayer(function(handle) {\n handle.closeTooltip();\n });\n }\n\n if (this._timer) { clearTimeout(this._timer); }\n\n this._timeout = setTimeout(L.bind(function() {\n this.closeTooltip();\n }, this), 400);\n },\n});\n\nL.lockHandle = function(overlay, idx, options) {\n return new L.LockHandle(overlay, idx, options);\n};\n","L.RotateHandle = L.EditHandle.extend({\n options: {\n TYPE: 'rotate',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const angle = this.calculateAngleDelta(formerLatLng, newLatLng);\n\n /*\n * running rotation logic even for an angle delta of 0\n * prevents a small, occasional marker flicker\n */\n overlay.rotateBy(angle, 'rad');\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.rotateHandle = function(overlay, idx, options) {\n return new L.RotateHandle(overlay, idx, options);\n};\n","L.ScaleHandle = L.EditHandle.extend({\n options: {\n TYPE: 'scale',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI0NTkiIGhlaWdodD0iNDY0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA1MTIgNTEyIiB4bWw6c3BhY2U9InByZXNlcnZlIiBzdHlsZT0iIj48cmVjdCBpZD0iYmFja2dyb3VuZHJlY3QiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHg9IjAiIHk9IjAiIGZpbGw9Im5vbmUiIHN0cm9rZT0ibm9uZSIgY2xhc3M9IiIgc3R5bGU9IiIvPjxnIGNsYXNzPSJjdXJyZW50TGF5ZXIiIHN0eWxlPSIiPjx0aXRsZT5MYXllciAxPC90aXRsZT48cGF0aCBkPSJNNDU5LjA0OTE1OTUzMDQ3MTM0LDg2LjkyNjIzNDUxMjU1MDAyIFYwIGgtODUuNzE0NTczMzU2MzEyMDkgdjI3LjA0MzcxNzQwMzkwNDQ1MiBIODUuNzE0NTczMzU2MzEyMDMgVjAgSDAgdjg2LjkyNjIzNDUxMjU1MDAyIGgyNS43MTQzNzIwMDY4OTM2MjYgdjI4OS43NTQxMTUwNDE4MzM0IEgwIHY4Ni45MjYyMzQ1MTI1NTAwMiBoODUuNzE0NTczMzU2MzEyMDkgdi0yNy4wNDM3MTc0MDM5MDQ0NTIgaDI4NS43MTUyNDQ1MjEwNDAzIHYyNy4wNDM3MTc0MDM5MDQ0NTIgaDg1LjcxNDU3MzM1NjMxMjA5IHYtODYuOTI2MjM0NTEyNTUwMDIgaC0yMy44MDk2MDM3MTAwODY2OSBWODYuOTI2MjM0NTEyNTUwMDIgSDQ1OS4wNDkxNTk1MzA0NzEzNCB6TTM4NC43NjMxOTU5NTUwMDA5LDEyLjU1NjAxMTY1MTgxMjc4MSBoNjEuOTA0OTY5NjQ2MjI1Mzk2IHY2Mi43ODAwNTgyNTkwNjM5MSBoLTYxLjkwNDk2OTY0NjIyNTM5NiBWMTIuNTU2MDExNjUxODEyNzgxIHpNMTIuMzgwOTkzOTI5MjQ1MDUsMTIuNTU2MDExNjUxODEyNzgxIGg2MS45MDQ5Njk2NDYyMjUzOTYgdjYyLjc4MDA1ODI1OTA2MzkxIEgxMi4zODA5OTM5MjkyNDUwNSBWMTIuNTU2MDExNjUxODEyNzgxIHpNNzQuMjg1OTYzNTc1NDcwNTMsNDUxLjA1MDU3MjQxNTEyMDY2IEgxMi4zODA5OTM5MjkyNDUwNSB2LTYyLjc4MDA1ODI1OTA2MzkxIGg2MS45MDQ5Njk2NDYyMjUzOTYgVjQ1MS4wNTA1NzI0MTUxMjA2NiB6TTQ0NS43MTU3ODE0NTI4MjI3NCw0NTEuMDUwNTcyNDE1MTIwNjYgaC02Mi44NTczNTM3OTQ2Mjg4NjQgdi02Mi43ODAwNTgyNTkwNjM5MSBoNjIuODU3MzUzNzk0NjI4ODY0IFY0NTEuMDUwNTcyNDE1MTIwNjYgek00MDcuNjIwNDE1NTE2Njg0MjYsMzc2LjY4MDM0OTU1NDM4MzQ0IGgtMzYuMTkwNTk3NjM5MzMxNzcgdjMyLjgzODc5OTcwNDc0MTEyIEg4NS43MTQ1NzMzNTYzMTIwMyB2LTMyLjgzODc5OTcwNDc0MTEyIEg0OS41MjM5NzU3MTY5ODAzMiBWODYuOTI2MjM0NTEyNTUwMDIgaDM2LjE5MDU5NzYzOTMzMTc3IFY1MC4yMjQwNDY2MDcyNTExMjUgaDI4Ny42MjAwMTI4MTc4NDcyIHYzNi43MDIxODc5MDUyOTg5IGgzNC4yODU4MjkzNDI1MjQ4MzUgVjM3Ni42ODAzNDk1NTQzODM0NCB6IiBpZD0ic3ZnXzIiIGNsYXNzPSIiIGZpbGw9IiMxYTFhZWIiIGZpbGwtb3BhY2l0eT0iMSIvPjwvZz48L3N2Zz4=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const scale = this._calculateScalingFactor(formerLatLng, newLatLng);\n\n /*\n * checks whether the \"edgeMinWidth\" property is set and tracks the minimum edge length;\n * this enables preventing scaling to zero, but we might also add an overall scale limit\n */\n\n if (!edgeMinWidth) { edgeMinWidth = 50; } /* just in case */\n const corner1 = map.latLngToLayerPoint(overlay.getCorner(0));\n const corner2 = map.latLngToLayerPoint(overlay.getCorner(1));\n const w = Math.abs(corner1.x - corner2.x);\n const h = Math.abs(corner1.y - corner2.y);\n const distance = Math.sqrt(w * w + h * h);\n\n if (distance > edgeMinWidth || scale > 1) {\n overlay.scaleBy(scale);\n /*\n * running scale logic even for a scale ratio of 1\n * prevents a small, occasional marker flicker\n */\n } else {\n overlay.scaleBy(1);\n }\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.scaleHandle = function(overlay, idx, options) {\n return new L.ScaleHandle(overlay, idx, options);\n};\n","L.distortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.group_action_map = {};\n\nL.DistortableImage.ControlBar = L.Toolbar2.Control.extend({});\n\nL.distortableImage.controlBar = function(options) {\n return new L.DistortableImage.ControlBar(options);\n};\n\n/** addInitHooks run before onAdd */\nL.DistortableCollection.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.ExportAction,\n L.DeleteAction,\n L.LockAction,\n L.UnlockAction,\n ];\n\n // all possible modes\n L.DistortableCollection.Edit.MODES = {\n lock: L.LockAction,\n unlock: L.UnlockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableCollection.edit(this, {actions: a});\n});\n","L.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.action_map = {};\n\nL.DistortableImage.PopupBar = L.Toolbar2.Popup.extend({\n options: {\n anchor: [0, -10],\n },\n\n initialize(latlng, options) {\n L.setOptions(this, options);\n L.Toolbar2.Popup.prototype.initialize.call(this, latlng, options);\n },\n\n addHooks(map, ov) {\n this.map = map;\n this.ov = ov;\n },\n\n tools() {\n if (this._ul) {\n return this._ul.children;\n }\n },\n\n clickTool(name) {\n let tools = this.tools();\n for (let i = 0; i < tools.length; i++) {\n let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '