From bc490853e01931a2db70a09222553ff84edbd112 Mon Sep 17 00:00:00 2001 From: Florian Bischof Date: Sun, 12 May 2024 12:55:29 +0200 Subject: [PATCH] Remove empty tooltip --- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- examples/js/index.js | 8 +++++--- package.json | 2 +- src/DistortableImageOverlay.js | 6 ------ src/mapmixins/DoubleClickLabels.js | 5 ++++- 6 files changed, 12 insertions(+), 13 deletions(-) diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index 113a72402..5f0a25b8c 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,3 +1,3 @@ /*! For license information please see leaflet.distortableimage.js.LICENSE.txt */ -!function(){var t={808:function(){function t(e){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},t(e)}function e(){"use strict";e=function(){return o};var o={},i=Object.prototype,n=i.hasOwnProperty,a=Object.defineProperty||function(t,e,o){t[e]=o.value},r="function"==typeof Symbol?Symbol:{},s=r.iterator||"@@iterator",l=r.asyncIterator||"@@asyncIterator",c=r.toStringTag||"@@toStringTag";function d(t,e,o){return Object.defineProperty(t,e,{value:o,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{d({},"")}catch(t){d=function(t,e,o){return t[e]=o}}function h(t,e,o,i){var n=e&&e.prototype instanceof m?e:m,r=Object.create(n.prototype),s=new T(i||[]);return a(r,"_invoke",{value:D(t,o,s)}),r}function u(t,e,o){try{return{type:"normal",arg:t.call(e,o)}}catch(t){return{type:"throw",arg:t}}}o.wrap=h;var g={};function m(){}function p(){}function f(){}var v={};d(v,s,(function(){return this}));var _=Object.getPrototypeOf,L=_&&_(_(E([])));L&&L!==i&&n.call(L,s)&&(v=L);var b=f.prototype=m.prototype=Object.create(v);function y(t){["next","throw","return"].forEach((function(e){d(t,e,(function(t){return this._invoke(e,t)}))}))}function k(e,o){function i(a,r,s,l){var c=u(e[a],e,r);if("throw"!==c.type){var d=c.arg,h=d.value;return h&&"object"==t(h)&&n.call(h,"__await")?o.resolve(h.__await).then((function(t){i("next",t,s,l)}),(function(t){i("throw",t,s,l)})):o.resolve(h).then((function(t){d.value=t,s(d)}),(function(t){return i("throw",t,s,l)}))}l(c.arg)}var r;a(this,"_invoke",{value:function(t,e){function n(){return new o((function(o,n){i(t,e,o,n)}))}return r=r?r.then(n,n):n()}})}function D(t,e,o){var i="suspendedStart";return function(n,a){if("executing"===i)throw new Error("Generator is already running");if("completed"===i){if("throw"===n)throw a;return{value:void 0,done:!0}}for(o.method=n,o.arg=a;;){var r=o.delegate;if(r){var s=M(r,o);if(s){if(s===g)continue;return s}}if("next"===o.method)o.sent=o._sent=o.arg;else if("throw"===o.method){if("suspendedStart"===i)throw i="completed",o.arg;o.dispatchException(o.arg)}else"return"===o.method&&o.abrupt("return",o.arg);i="executing";var l=u(t,e,o);if("normal"===l.type){if(i=o.done?"completed":"suspendedYield",l.arg===g)continue;return{value:l.arg,done:o.done}}"throw"===l.type&&(i="completed",o.method="throw",o.arg=l.arg)}}}function M(t,e){var o=e.method,i=t.iterator[o];if(void 0===i)return e.delegate=null,"throw"===o&&t.iterator.return&&(e.method="return",e.arg=void 0,M(t,e),"throw"===e.method)||"return"!==o&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+o+"' method")),g;var n=u(i,t.iterator,e.arg);if("throw"===n.type)return e.method="throw",e.arg=n.arg,e.delegate=null,g;var a=n.arg;return a?a.done?(e[t.resultName]=a.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,g):a:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,g)}function A(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function I(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function T(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(A,this),this.reset(!0)}function E(t){if(t){var e=t[s];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,i=function e(){for(;++o=0;--i){var a=this.tryEntries[i],r=a.completion;if("root"===a.tryLoc)return o("end");if(a.tryLoc<=this.prev){var s=n.call(a,"catchLoc"),l=n.call(a,"finallyLoc");if(s&&l){if(this.prev=0;--o){var i=this.tryEntries[o];if(i.tryLoc<=this.prev&&n.call(i,"finallyLoc")&&this.prev=0;--e){var o=this.tryEntries[e];if(o.finallyLoc===t)return this.complete(o.completion,o.afterLoc),I(o),g}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var o=this.tryEntries[e];if(o.tryLoc===t){var i=o.completion;if("throw"===i.type){var n=i.arg;I(o)}return n}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,o){return this.delegate={iterator:E(t),resultName:e,nextLoc:o},"next"===this.method&&(this.arg=void 0),g}},o}function o(t,e,o,i,n,a,r){try{var s=t[a](r),l=s.value}catch(t){return void o(t)}s.done?e(l):Promise.resolve(l).then(i,n)}function i(t){return function(){var e=this,i=arguments;return new Promise((function(n,a){var r=t.apply(e,i);function s(t){o(r,n,a,s,l,"next",t)}function l(t){o(r,n,a,s,l,"throw",t)}s(void 0)}))}}var n=[];L.DistortableCollection=L.FeatureGroup.extend({options:{editable:!0,exportOpts:{exportStartUrl:"//export.mapknitter.org/export",statusUrl:"//export.mapknitter.org",exportUrl:"http://export.mapknitter.org/"}},initialize:function(t){L.setOptions(this,t),L.FeatureGroup.prototype.initialize.call(this,t),L.Utils.initTranslation.call(this),this.editable=this.options.editable},onAdd:function(t){L.FeatureGroup.prototype.onAdd.call(this,t),this._map=t,this.editable&&this.editing.enable(),this.on("layeradd",this._addEvents,this),this.on("layerremove",this._removeEvents,this)},onRemove:function(){this.editing&&this.editing.disable(),this.off("layeradd",this._addEvents,this),this.off("layerremove",this._removeEvents,this)},_addEvents:function(t){var e=t.layer;L.DomEvent.on(e,{dragstart:this._dragStartMultiple,drag:this._dragMultiple},this),L.DomEvent.on(e.getElement(),{mousedown:this._deselectOthers,contextmenu:this._longPressMultiSelect},this)},_removeEvents:function(t){var e=t.layer;L.DomEvent.off(e,{dragstart:this._dragStartMultiple,drag:this._dragMultiple},this),L.DomEvent.off(e.getElement(),{mousedown:this._deselectOthers,contextmenu:this._longPressMultiSelect},this)},_longPressMultiSelect:function(t){var e=this;this.editable&&(t.preventDefault(),this.eachLayer((function(o){var i=o.editing;o.getElement()===t.target&&i.enabled()&&(L.DomUtil.toggleClass(o.getElement(),"collected"),e.anyCollected()?(o.deselect(),e.editing._addToolbar()):e.editing._removeToolbar())})))},isCollected:function(t){return L.DomUtil.hasClass(t.getElement(),"collected")},anyCollected:function(){return this.getLayers().some(this.isCollected.bind(this))},_toggleCollected:function(t,e){t.shiftKey&&e.editing.enabled()&&(L.DomUtil.toggleClass(t.target,"collected"),n.every((function(t){return t._leaflet_id!==e._leaflet_id}))?n.push(e):n.splice(n.indexOf(e),1)),this.anyCollected()?e.deselect():this.editing._removeToolbar()},_deselectOthers:function(t){var e=this;this.editable&&(this.eachLayer((function(o){o.getElement()!==t.target?o.deselect():e._toggleCollected(t,o)})),t&&L.DomEvent.stopPropagation(t))},_dragStartMultiple:function(t){var e,o=t.target,i=this._map;this.isCollected(o)&&this.eachLayer((function(t){for(t._dragStartPoints={},t.deselect(),e=0;e<4;e++){var o=t.getCorner(e);t._dragStartPoints[e]=i.latLngToLayerPoint(o)}}))},_dragMultiple:function(t){var e=t.target,o=this._map;if(this.isCollected(e)){var i=o.latLngToLayerPoint(e.getCorner(0)),n=e._dragStartPoints[0].subtract(i);this._updateCollectionFromPoints(n,e)}},_toRemove:function(){var t=this;return this.getLayers().filter((function(e){var o=e.editing._mode;return t.isCollected(e)&&"lock"!==o}))},_toMove:function(t){var e=this;return this.getLayers().filter((function(o){var i=o.editing._mode;return o!==t&&e.isCollected(o)&&"lock"!==i}))},_updateCollectionFromPoints:function(t,e){var o,i=this._toMove(e),n=new L.Transformation(1,-t.x,1,-t.y);i.forEach((function(t){var e={};for(o=0;o<4;o++)e[o]=n.transform(t._dragStartPoints[o]);t.setCornersFromPoints(e)}))},_getAvgCmPerPixel:function(t){return t.reduce((function(t,e){return t+e.cm_per_pixel}),0)/t.length},fetchRemoteJson:function(t){return i(e().mark((function o(){var i,n,a;return e().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return i=0,n=[],e.prev=2,e.next=5,axios.get(t);case 5:if(!(a=e.sent).data.hasOwnProperty("avg_cm_per_pixel")){e.next=14;break}if(!(a.data.collection.length>1)){e.next=10;break}return a.data.collection.forEach((function(t){n[i]=t,i++})),e.abrupt("return",{avg_cm_per_pixel:a.data.avg_cm_per_pixel,imgCollectionProps:n});case 10:return n[i]=a.data.collection,e.abrupt("return",{avg_cm_per_pixel:a.data.avg_cm_per_pixel,imgCollectionProps:n});case 14:if(!(a.data.length>1)){e.next=17;break}return a.data.forEach((function(t){n[i]=t,i++})),e.abrupt("return",{imgCollectionProps:n});case 17:return n[i]=a.data,e.abrupt("return",{imgCollectionProps:n});case 19:e.next=24;break;case 21:e.prev=21,e.t0=e.catch(2),console.log("err",e.t0);case 24:case"end":return e.stop()}}),o,null,[[2,21]])})))()},recreateImagesFromJsonUrl:function(t){var o=this;return i(e().mark((function i(){var n;return e().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n={},!t){e.next=6;break}return e.next=4,o.fetchRemoteJson(t);case 4:return n=e.sent,e.abrupt("return",n);case 6:return e.abrupt("return",n);case 8:case"end":return e.stop()}}),i)})))()},generateExportJson:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e={images:[]};return this.eachLayer((function(o){if(t||this.isCollected(o)){var i=o._image.src.split("/"),n=i[i.length-1],a=o.getCorners(),r=[{lat:a[0].lat,lon:a[0].lng||a[0].lon},{lat:a[1].lat,lon:a[1].lng||a[1].lon},{lat:a[3].lat,lon:a[3].lng||a[3].lon},{lat:a[2].lat,lon:a[2].lng||a[2].lon}];e.images.push({id:o._leaflet_id,src:o._image.src,width:o._image.width,height:o._image.height,tooltipText:o.getTooltipText(),image_file_name:n,nodes:r,cm_per_pixel:L.ImageUtil.getCmPerPixel(o)})}}),this),e.images=e.images.reverse(),e.avg_cm_per_pixel=this._getAvgCmPerPixel(e.images),e}}),L.distortableCollection=function(t,e){return new L.DistortableCollection(t,e)}},477:function(){L.DistortableImageOverlay=L.ImageOverlay.extend({options:{height:200,crossOrigin:!0,edgeMinWidth:50,editable:!0,mode:"distort",selected:!1,interactive:!0,tooltipText:""},initialize:function(t,e){L.setOptions(this,e),L.Utils.initTranslation.call(this),this.edgeMinWidth=this.options.edgeMinWidth,this.editable=this.options.editable,this._selected=this.options.selected,this._url=t,this.rotation={},this.interactive=this.options.interactive,this.tooltipText=this.options.tooltipText},onAdd:function(t){var e=this;this._map=t,this.getElement()||this._initImage(),t.on("viewreset",this._reset,this),this.options.corners&&(this._corners=this.options.corners,t.options.zoomAnimation&&L.Browser.any3d&&t.on("zoomanim",this._animateZoom,this)),L.DomEvent.on(this.getElement(),"load",(function(){if(e.getPane().appendChild(e.getElement()),e._initImageDimensions(),e.options.rotation){var o=e.options.rotation.deg>=0?"deg":"rad";e.setAngle(e.options.rotation[o],o)}else e.rotation={deg:0,rad:0},e._reset();e._corners||t.options.zoomAnimation&&L.Browser.any3d&&t.on("zoomanim",e._animateZoom,e),e.editable&&e.editing.enable(),e.eP=null})),this.fire("add"),L.DomEvent.on(this.getElement(),"mousemove",this.activateTooltip,this),L.DomEvent.on(this.getElement(),"mouseout",this.closeTooltip,this)},onRemove:function(t){this.editing&&this.editing.disable(),this.fire("remove"),L.ImageOverlay.prototype.onRemove.call(this,t),L.DomEvent.on(this.getElement(),"mouseout",this.closeTooltip,this),L.DomEvent.off(this.getElement(),"mousemove",this.deactivateTooltip,this)},_initImageDimensions:function(){var t=this._map,e=L.DomUtil.getStyle(this.getElement(),"width"),o=L.DomUtil.getStyle(this.getElement(),"height"),i=parseInt(e)/parseInt(o),n=this.options.height,a=parseInt(i*n),r=t.project(t.getCenter()),s=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(r.subtract(s)),t.unproject(r.add(L.point(s.x,-s.y))),t.unproject(r.add(L.point(-s.x,s.y))),t.unproject(r.add(s))],this._initialDimensions={center:r,offset:s,zoom:t.getZoom()},this.setBounds(L.latLngBounds(this.getCorners()))},_singleClick:function(t){"singleclick"===t.type&&this.deselect()},_singleClickListeners:function(){var t=this._map;L.DomEvent.off(t,"click",this.deselect,this),L.DomEvent.on(t,"singleclick",this.deselect,this)},_resetClickListeners:function(){var t=this._map;L.DomEvent.on(t,"click",this.deselect,this),L.DomEvent.off(t,"singleclick",this.deselect,this)},isSelected:function(){return this._selected},deselect:function(){var t=this.editing;if(t.enabled())return t._hideMarkers(),this._selected=!1,this.fire("deselect"),this},select:function(t){var e=this.editing,o=this.eP;if(e.enabled()){if(t&&L.DomEvent.stopPropagation(t),this._programmaticGrouping(),this._selected=!0,e._showMarkers(),this.fire("select"),!o||!o.anyCollected())return this;this.deselect()}},_programmaticGrouping:function(){this._map.eachLayer((function(t){t instanceof L.DistortableImageOverlay&&t.deselect()}))},setCorner:function(t,e){var o=this.editing;return this._corners[t]=e,this.setBounds(L.latLngBounds(this.getCorners())),this.fire("update"),o.toolbar&&o.toolbar instanceof L.DistortableImage.PopupBar&&o._updateToolbarPos(),this.edited=!0,this},_cornerExceedsMapLats:function(t,e,o){return o.options.crs.Simple!=L.CRS.Simple&&(0===t?(i=o.project(e).y<2,n=o.project(e).y>=255):(i=o.project(e).y/t<2,n=o.project(e).y/Math.pow(2,t)>=255),i||n);var i,n},activateTooltip:function(){this._selected||this.bindTooltip(this.tooltipText,{direction:"top"}).openTooltip()},closeToolTip:function(){this.closeTooltip()},deactivateTooltip:function(){this.unbindTooltip()},getTooltipText:function(){return this.tooltipText},setCorners:function(t){var e=this._map,o=e.getZoom(),i=this.editing,n=0;for(var a in t)if(this._cornerExceedsMapLats(o,t[a],e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update");for(var r in t)this._corners[n]=t[r],n+=1;return this.setBounds(L.latLngBounds(this.getCorners())),this.fire("update"),i.toolbar&&i.toolbar instanceof L.DistortableImage.PopupBar&&i._updateToolbarPos(),this.edited=!0,this},setCornersFromPoints:function(t){var e=this._map,o=e.getZoom(),i=this.editing,n=0;for(var a in t){var r=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(o,r,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var s in t)this._corners[n]=e.layerPointToLatLng(t[s]),n+=1;return this.setBounds(L.latLngBounds(this.getCorners())),this.fire("update"),i.toolbar&&i.toolbar instanceof L.DistortableImage.PopupBar&&i._updateToolbarPos(),this.edited=!0,this},scaleBy:function(t){var e,o,i=this._map,n=i.project(this.getCenter()),a={};if(0!==t){for(e=0;e<4;e++)o=i.project(this.getCorner(e)).subtract(n).multiplyBy(t).add(n),a[e]=i.unproject(o);return this.setCorners(a),this}},getAngle:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"deg",e=this.getElement().style[L.DomUtil.TRANSFORM].split("matrix3d")[1].slice(1,-1).split(","),o=e[0],i=e[1],n=e[4],a=e[5],r=o*a-i*n,s=L.TrigUtil.calcAngle(o,i,"rad");return r<0&&(s+=s<0?Math.PI:-Math.PI),s<0&&(s=2*Math.PI+s),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(s)):L.Util.formatNum(s,2)},setAngle:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"deg",o=this.getAngle(e),i=t-o;return this.rotateBy(i,e),this},rotateBy:function(t){var e,o,i,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"deg",a=this._map,r=a.project(this.getCenter()),s={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)o=a.project(this.getCorner(e)).subtract(r),i=L.point(Math.cos(t)*o.x-Math.sin(t)*o.y,Math.sin(t)*o.x+Math.cos(t)*o.y),s[e]=a.unproject(i.add(r));return this.setCorners(s),this},dragBy:function(t,e){var o,i,n=this._map,a={},r=n.project(t).subtract(n.project(e));for(o=0;o<4;o++)i=n.project(this.getCorner(o)).subtract(r),a[o]=n.unproject(i);this.setCorners(a)},restore:function(){for(var t=this._map,e=this._initialDimensions.center,o=this._initialDimensions.offset,i=this._initialDimensions.zoom,n=[e.subtract(o),e.add(L.point(o.x,-o.y)),e.add(L.point(-o.x,o.y)),e.add(o)],a=0;a<4;a++)t.unproject(n[a],i).equals(this.getCorner(a))||this.setCorner(a,t.unproject(n[a],i));return this.edited=!1,this.fire("restore"),this},_getTranslateString:function(t){var e=L.Browser.webkit3d,o=(e?",0":"")+")";return"translate"+(e?"3d":"")+"("+t.x+"px,"+t.y+"px"+o},_reset:function(){var t=this._map,e=this.getElement(),o=L.bind(t.latLngToLayerPoint,t),i=this._calculateProjectiveTransform(o),n=o(this.getCorner(0)),a=L.DomUtil.getMatrixString(i),r=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[r,a].join(" "),e.style[L.DomUtil.TRANSFORM+"-origin"]="0 0 0",this.rotation.deg=this.getAngle(),this.rotation.rad=this.getAngle("rad")},_animateZoom:function(t){var e=this._map,o=this.getElement(),i=function(o){return e._latLngToNewLayerPoint(o,t.zoom,t.center)},n=this._calculateProjectiveTransform(i),a=i(this.getCorner(0)),r=L.DomUtil.getMatrixString(n),s=this._getTranslateString(a);o._leaflet_pos=a,o.style[L.DomUtil.TRANSFORM]=[s,r].join(" ")},getCorners:function(){return this._corners},getCorner:function(t){return this._corners[t]},getCenter:function(){var t=this._map,e=this.getCorners().reduce((function(e,o){return e.add(t.project(o))}),L.point(0,0));return t.unproject(e.divideBy(4))},_calculateProjectiveTransform:function(t){var e,o=t(this.getCorner(0)),i=this.getElement().offsetWidth||500,n=this.getElement().offsetHeight||375,a=[];for(e=0;e<4;e++)a.push(t(this.getCorner(e))._subtract(o));return L.MatrixUtil.general2DProjection(0,0,a[0].x,a[0].y,i,0,a[1].x,a[1].y,0,n,a[2].x,a[2].y,i,n,a[3].x,a[3].y)}}),L.distortableImageOverlay=function(t,e){return new L.DistortableImageOverlay(t,e)},L.Map.addInitHook((function(){L.DomUtil.hasClass(this.getContainer(),"ldi")||L.DomUtil.addClass(this.getContainer(),"ldi")}))},782:function(){var t=this;L.DomUtil=L.DomUtil||{},L.DistortableImage=L.DistortableImage||{},L.distortableImage=L.DistortableImage,L.DistortableImage.Keymapper=L.Handler.extend({options:{position:"topright"},initialize:function(t,e){this._map=t,L.setOptions(this,e)},addHooks:function(){this._keymapper||(this._container=this._buildContainer(),this._scrollWrapper=this._wrap(),this._toggler=this._createButton(),this._setMapper(this._container,this._scrollWrapper,this._toggler),L.DomEvent.on(this._toggler,"click",this._toggleKeymapper,this),L.DomEvent.disableClickPropagation(this._container),L.DomEvent.disableScrollPropagation(this._container))},removeHooks:function(){this._keymapper&&(L.DomEvent.off(this._toggler,"click",this._toggleKeymapper,this),L.DomUtil.remove(this._toggler),L.DomUtil.remove(this._scrollWrapper),L.DomUtil.remove(this._container),this._keymapper=!1)},_buildContainer:function(){var t=L.DomUtil.create("div","ldi-keymapper-hide");t.setAttribute("id","ldi-keymapper");var e=L.DomUtil.create("br","divider");return t.appendChild(e),t},_createButton:function(){var t=L.DomUtil.create("a","");return t.innerHTML=L.IconUtil.create("keyboard_open"),t.setAttribute("id","toggle-keymapper"),t.setAttribute("href","#"),t.setAttribute("title","Show keymap"),t.setAttribute("role","button"),t.setAttribute("aria-label","Show keymap"),t},_wrap:function(){var t=L.DomUtil.create("div","");return t.setAttribute("id","keymapper-wrapper"),t.style.display="none",t},_setMapper:function(t,e,o){this._keymapper=L.control({position:this.options.position}),this._keymapper.onAdd=function(){return t.appendChild(e),e.insertAdjacentHTML("beforeend",'
Rotate Mode
R
RotateScale Mode
r
Scale Mode
s
Distort Mode
d
Drag Mode
D
Lock (Mode) / Unlock Image
l u
Stack up / down
q a
Add / Remove Image Border
b
Toggle Opacity
o
Deselect All
esc
Delete Image(s)
delete backspace
Export Image(s)
e
'),t.appendChild(o),t},this._keymapper.addTo(this._map)},_toggleKeymapper:function(t){t.preventDefault(),this._container.className="ldi-keymapper leaflet-control"===this._container.className?"ldi-keymapper-hide leaflet-control":"ldi-keymapper leaflet-control",this._scrollWrapper.style.display="none"===this._scrollWrapper.style.display?"block":"none",this._toggler.innerHTML="close"===this._toggler.innerHTML?L.IconUtil.create("keyboard_open"):"close",L.IconUtil.toggleTitle(this._toggler,"Show keymap","Hide keymap"),L.DomUtil.toggleClass(this._toggler,"close-icon")},_injectIconSet:function(){if(!document.querySelector("#keymapper-iconset")){var t=L.DomUtil.create("div","");t.id="keymapper-iconset",t.setAttribute("hidden","hidden"),this._iconset=(new L.KeymapperIconSet).render(),t.innerHTML=this._iconset,document.querySelector(".leaflet-control-container").appendChild(t)}}}),L.DistortableImage.Keymapper.addInitHook((function(){L.DistortableImage.Keymapper.prototype._n=L.DistortableImage.Keymapper.prototype._n?L.DistortableImage.Keymapper.prototype._n+1:1,1!==L.DistortableImage.Keymapper.prototype._n||L.Browser.mobile||(t.enable(),t._injectIconSet())})),L.distortableImage.keymapper=function(t,e){return new L.DistortableImage.Keymapper(t,e)}},428:function(){L.DistortableImage=L.DistortableImage||{},L.DistortableCollection.Edit=L.Handler.extend({options:{keymap:L.distortableImage.group_action_map},initialize:function(t,e){this._group=t,this._exportOpts=t.options.exportOpts,L.setOptions(this,e),L.distortableImage.group_action_map.Escape="_decollectAll"},addHooks:function(){var t=this._group._map;this.editActions=this.options.actions,this.runExporter=L.bind(L.Utils.getNestedVal(this,"_exportOpts","exporter")||this.startExport,this),L.DomEvent.on(document,"keydown",this._onKeyDown,this),t.doubleClickZoom.enabled()||t.doubleClickLabels.enabled()||L.DomEvent.on(t,"click",this._decollectAll,this),L.DomEvent.on(t,{singleclickon:this._singleClickListeners,singleclickoff:this._resetClickListeners,singleclick:this._singleClick,boxcollectend:this._addCollections},this),this._group.editable=!0,this._group.eachLayer((function(t){return t.editing.enable()}))},removeHooks:function(){var t=this._group._map;L.DomEvent.off(document,"keydown",this._onKeyDown,this),t.doubleClickZoom.enabled()||t.doubleClickLabels.enabled()||L.DomEvent.off(t,"click",this._decollectAll,this),L.DomEvent.off(t,{singleclickon:this._singleClickListeners,singleclickoff:this._resetClickListeners,singleclick:this._singleClick,boxcollectend:this._addCollections},this),this._decollectAll(),this._group.editable=!1,this._group.eachLayer((function(t){return t.editing.disable()}))},enable:function(){return this._enabled=!0,this.addHooks(),this},disable:function(){return this._enabled=!1,this.removeHooks(),this},_onKeyDown:function(t){var e=this.options.keymap[t.key];this[e]&&this._group.anyCollected()&&this[e].call(this)},_singleClick:function(t){"singleclick"===t.type&&this._decollectAll(t)},_singleClickListeners:function(){var t=this._group._map;L.DomEvent.off(t,"click",this._decollectAll,this),L.DomEvent.on(t,"singleclick",this._decollectAll,this)},_resetClickListeners:function(){var t=this._group._map;L.DomEvent.on(t,"click",this._decollectAll,this),L.DomEvent.off(t,"singleclick",this._decollectAll,this)},_decollectAll:function(t){var e;t&&(e=t.originalEvent),e&&(e.shiftKey||e.target instanceof HTMLImageElement)||(this._group.eachLayer((function(t){L.DomUtil.removeClass(t.getElement(),"collected"),t.deselect()})),this._removeToolbar(),t&&L.DomEvent.stopPropagation(t))},_unlockGroup:function(){var t=this;this.hasTool(L.UnlockAction)&&this._group.eachLayer((function(e){t._group.isCollected(e)&&(e.editing._unlock(),e.deselect())}))},_lockGroup:function(){var t=this;this.hasTool(L.LockAction)&&this._group.eachLayer((function(e){t._group.isCollected(e)&&(e.editing._lock(),L.DomUtil.addClass(e.getElement(),"collected"))}))},_addCollections:function(t){var e=this,o=t.boxCollectBounds,i=this._group._map;this._group.eachLayer((function(t){var n=t.editing;t.isSelected()&&t.deselect();var a=i.getZoom(),r=i.getCenter(),s=L.latLngBounds(t.getCorner(2),t.getCorner(1));s=i._latLngBoundsToNewLayerBounds(s,a,r),o.intersects(s)&&n.enabled()&&(e.toolbar||e._addToolbar(),L.DomUtil.addClass(t.getElement(),"collected"))}))},_removeGroup:function(t){var e=this;if(this.hasTool(L.DeleteAction)){var o=this._group._toRemove(),i=o.length;0!==i&&(L.DomUtil.confirmDeletes(i)&&(o.forEach((function(t){e._group.removeLayer(t)})),this._group.anyCollected()||this._removeToolbar()),t&&L.DomEvent.stopPropagation(t))}},cancelExport:function(){this.customCollection||(this._exportOpts.collection=void 0),clearInterval(this.updateInterval)},_addToolbar:function(){var t=this._group,e=t._map;t.options.suppressToolbar||this.toolbar||(this.toolbar=L.distortableImage.controlBar({actions:this.editActions,position:"topleft"}).addTo(e,t))},_removeToolbar:function(){var t=this._group._map;if(!this.toolbar)return!1;t.removeLayer(this.toolbar),this.toolbar=!1},hasTool:function(t){return this.editActions.some((function(e){return e===t}))},addTool:function(t){return"leaflet-toolbar-icon"!==t.baseClass||this.hasTool(t)||(this._removeToolbar(),this.editActions.push(t),this._addToolbar()),this},removeTool:function(t){var e=this;return this.editActions.some((function(o,i){return e.editActions[i]===t&&(e._removeToolbar(),e.editActions.splice(i,1),e._addToolbar(),!0)})),this},startExport:function(){var t=this;if(this.hasTool(L.ExportAction))return new Promise((function(e){var o,i=t._exportOpts;i.resolve=e,t.updateInterval=null,t.customCollection=!!i.collection,t.customCollection||(i.collection=t._group.generateExportJson().images),i.frequency=i.frequency||3e3,i.scale=i.scale||100,i.updater=i.updater||function(n){(n=JSON.parse(n)).status_url&&(o!==n.status_url&&n.status_url.match(".json")&&(o=n.status_url),"complete"===n.status&&(clearInterval(t.updateInterval),t.customCollection||(t._exportOpts.collection=void 0),e(),null!==n.jpg&&alert("Export succeeded. "+i.exportUrl+n.jpg)),console.log(n))},i.handleStatusRes=i.handleStatusRes||function(e){o=i.statusUrl+e,t.updateInterval=setInterval((function(){var t=new Request("".concat(o,"?").concat(Date.now()),{method:"GET"});fetch(t).then((function(t){if(t.ok)return t.text()})).then(i.updater)}),i.frequency)},i.fetchStatusUrl=i.fetchStatusUrl||function(t){var e=new FormData;e.append("collection",JSON.stringify(t.collection)),e.append("scale",t.scale),e.append("upload",!0);var o={method:"POST",body:e},i=new Request(t.exportStartUrl,o);fetch(i).then((function(t){if(t.ok)return t.text()})).then(t.handleStatusRes)},i.fetchStatusUrl(i)}))}}),L.distortableCollection.edit=function(t,e){return new L.DistortableCollection.Edit(t,e)}},397:function(){L.DistortableImage=L.DistortableImage||{},L.DistortableImage.Edit=L.Handler.extend({options:{opacity:.5,outline:"1px solid red",keymap:L.distortableImage.action_map},initialize:function(t,e){this._overlay=t,this._toggledImage=!1,this._mode=t.options.mode,this._transparent=!1,this._outlined=!1,this._opacity=e.opacity,L.setOptions(this,e),L.distortableImage.action_map.Escape="_deselect"},addHooks:function(){var t=this._overlay;this.editActions=this.options.actions,t.bringToFront(),this._initModes(),this._initHandles(),this._appendHandlesandDragable(),t.isSelected()&&!t.options.suppressToolbar&&this._addToolbar(),this.parentGroup=!!t.eP&&t.eP,L.DomEvent.on(t.getElement(),{dblclick:this.nextMode},this),L.DomEvent.on(window,"keydown",this._onKeyDown,this)},removeHooks:function(){var t=this._overlay,e=this.parentGroup;for(var o in this._disableDragging(),this.toolbar&&this._removeToolbar(),this._handles)L.DomUtil.remove(o);L.DomUtil.hasClass(t.getElement(),"collected")&&L.DomUtil.removeClass(t.getElement(),"collected"),e&&!e.anyCollected()&&e.editing.toolbar&&e.editing._removeToolbar(),L.DomEvent.off(t.getElement(),{dblclick:this.nextMode},this),L.DomEvent.off(window,"keydown",this._onKeyDown,this)},disable:function(){return this._enabled?(this._overlay.deselect(),this._enabled=!1,this.removeHooks(),this):this},_initModes:function(){for(var t in this._modes={},L.DistortableImage.Edit.MODES){var e=L.DistortableImage.Edit.MODES[t];-1!==this.editActions.indexOf(e)&&(this._modes[t]=e)}this._modes[this._mode]||(this._mode=Object.keys(this._modes)[0])},_initHandles:function(){var t,e=this._overlay;for(this._dragHandles=L.layerGroup(),t=0;t<4;t++)this._dragHandles.addLayer(L.dragHandle(e,t));for(this._scaleHandles=L.layerGroup(),t=0;t<4;t++)this._scaleHandles.addLayer(L.scaleHandle(e,t));for(this._distortHandles=L.layerGroup(),t=0;t<4;t++)this._distortHandles.addLayer(L.distortHandle(e,t));for(this._rotateHandles=L.layerGroup(),t=0;t<4;t++)this._rotateHandles.addLayer(L.rotateHandle(e,t));for(this._freeRotateHandles=L.layerGroup(),t=0;t<4;t++)this._freeRotateHandles.addLayer(L.freeRotateHandle(e,t));for(this._lockHandles=L.layerGroup(),t=0;t<4;t++)this._lockHandles.addLayer(L.lockHandle(e,t,{draggable:!1}));this._handles={drag:this._dragHandles,scale:this._scaleHandles,distort:this._distortHandles,rotate:this._rotateHandles,freeRotate:this._freeRotateHandles,lock:this._lockHandles}},_appendHandlesandDragable:function(){var t=this._overlay;this._mode?(this._updateHandle(),!t.isSelected()&&this.currentHandle&&this.currentHandle.eachLayer((function(t){t.setOpacity(0),t.dragging&&t.dragging.disable()})),this.isMode("lock")||this._enableDragging()):this._enableDragging()},_onKeyDown:function(t){var e=this.options.keymap[t.key],o=this._overlay,i=this.parentGroup;i&&i.anyCollected()||void 0===this[e]||o.options.suppressToolbar||o.isSelected()&&this.toolbar&&this[e].call(this)},replaceTool:function(t,e){var o=this;return"leaflet-toolbar-icon"!==e.baseClass||this.hasTool(e)||this.editActions.some((function(i,n){if(i===t){for(var a in o._removeToolbar(),o.editActions[n]=e,o._addToolbar(),L.DistortableImage.Edit.MODES)L.DistortableImage.Edit.MODES[a]===t?(delete o._modes[a],o._nextOrNone(a)):L.DistortableImage.Edit.MODES[a]===e&&(o._modes[a]=e);return!0}})),this},addTool:function(t){if("leaflet-toolbar-icon"===t.baseClass&&!this.hasTool(t)){for(var e in this._removeToolbar(),this.editActions.push(t),this._addToolbar(),L.DistortableImage.Edit.MODES)L.DistortableImage.Edit.MODES[e]===t&&(this._modes[e]=t);this._overlay.isSelected()||this._removeToolbar()}return this},hasTool:function(t){return this.editActions.some((function(e){return e===t}))},removeTool:function(t){var e=this;return this.editActions.some((function(o,i){if(o===t){for(var n in e._removeToolbar(),e.editActions.splice(i,1),e._addToolbar(),L.DistortableImage.Edit.MODES)L.DistortableImage.Edit.MODES[n]===t&&(delete e._modes[n],e._nextOrNone(n));return!0}})),this._overlay.isSelected()||this._removeToolbar(),this},_nextOrNone:function(t){this.isMode(t)&&(Object.keys(this.getModes()).length>=1?this.nextMode():("lock"===t&&this._enableDragging(),this._mode="",this._updateHandle()))},_removeToolbar:function(){var t=this._overlay._map;this.toolbar&&(t.removeLayer(this.toolbar),this.toolbar=!1)},_enableDragging:function(){var t=this,e=this._overlay,o=e._map;this.dragging=new L.Draggable(e.getElement()),this.dragging.enable(),this.dragging.on("dragstart",(function(){e.fire("dragstart"),t._removeToolbar()})),this.dragging._updatePosition=function(){var t,i,n=e.getCorner(0),a=this._newPos.subtract(o.latLngToLayerPoint(n)),r={};for(this.fire("predrag"),i=0;i<4;i++)t=o.latLngToLayerPoint(e.getCorner(i)),r[i]=o.layerPointToLatLng(t.add(a));e.setCorners(r),e.fire("drag"),this.fire("drag")},this.dragging.on("dragend",(function(){e.fire("dragend")}))},_disableDragging:function(){this.dragging&&(this.dragging.disable(),delete this.dragging)},_dragMode:function(){this.setMode("drag")},_scaleMode:function(){this.setMode("scale")},_distortMode:function(){this.setMode("distort")},_rotateMode:function(){this.setMode("rotate")},_freeRotateMode:function(){this.setMode("freeRotate")},_toggleLockMode:function(){this.isMode("lock")?this._unlock():this._lock()},_toggleOpacity:function(){var t=this._overlay.getElement();if(this.hasTool(L.OpacityAction)){this._transparent=!this._transparent;var e=this._transparent?this.options.opacity:1;L.DomUtil.setOpacity(t,e),t.setAttribute("opacity",e),this._refresh()}},_setOpacities:function(t){var e=this._overlay.getElement();this._opacity=t,this.hasTool(L.OpacitiesAction)&&(this._opacity<1?this._transparent=!0:this._transparent=!1,L.DomUtil.setOpacity(e,this._opacity),e.setAttribute("opacity",this._opacity),this._refresh())},_toggleBorder:function(){var t=this._overlay.getElement();if(this.hasTool(L.BorderAction)){this._outlined=!this._outlined;var e=this._outlined?this.options.outline:"none";t.style.outline=e,this._refresh()}},_toggleOrder:function(){this._toggledImage?this._stackUp():this._stackDown()},_removeOverlay:function(){var t=this._overlay,e=this.parentGroup;!this.isMode("lock")&&this.hasTool(L.DeleteAction)&&L.DomUtil.confirmDelete()&&(this._removeToolbar(),e?e.removeLayer(t):t._map.removeLayer(t))},_getExport:function(){var t=this._overlay,e=t._map,o=t.getElement();if(this.hasTool(L.ExportAction)){var i=new Image;i.id=i.id||"tempId12345",document.body.appendChild(i),i.onload=function(){var o=i.height,n=i.width,a=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),s=e.latLngToLayerPoint(t.getCorner(2)),l=e.latLngToLayerPoint(t.getCorner(3));i.onload=function(){L.DomUtil.remove(i)},window&&window.hasOwnProperty("warpWebGl")&&warpWebGl(i.id,[0,0,n,0,n,o,0,o],[a.x,a.y,r.x,r.y,l.x,l.y,s.x,s.y],!0)},i.src=t.options.fullResolutionSrc||o.src}},_stackUp:function(){this._toggledImage&&this.hasTool(L.StackAction)&&(this._toggledImage=!1,this._overlay.bringToFront(),this._refresh())},_stackDown:function(){!this._toggledImage&&this.hasTool(L.StackAction)&&(this._toggledImage=!0,this._overlay.bringToBack(),this._refresh())},_unlock:function(){var t=this._overlay,e=t._map,o=this.parentGroup;this.isMode("lock")&&((!o||o.isCollected(t))&&o||this.hasTool(L.LockAction))&&(this.currentHandle&&e.removeLayer(this.currentHandle),"lock"!==t.options.mode&&this.hasMode(t.options.mode)?this._mode=t.options.mode:(this._mode="",this.currentHandle=""),this._updateHandle(),this._enableDragging(),this._refresh())},_lock:function(){var t=this._overlay,e=t._map,o=this.parentGroup;this.isMode("lock")||((!o||o.isCollected(t))&&o||this.hasTool(L.LockAction))&&(this.currentHandle&&e.removeLayer(this.currentHandle),this._mode="lock",this._updateHandle(),this._disableDragging(),this._refresh())},_deselect:function(){this._overlay.deselect()},_showMarkers:function(t){var e=this.parentGroup;this.currentHandle&&(!this.isMode("lock")&&e&&e.anyCollected()||this.currentHandle.eachLayer((function(t){t.setOpacity(1),t.dragging&&t.dragging.enable(),L.DomUtil.addClass(t.getElement(),"leaflet-interactive")})))},_hideMarkers:function(){var t=this._overlay,e=this.parentGroup;this._handles||this._initHandles(),this.currentHandle&&(this.isMode("lock")&&e&&e.isCollected(t)||this.currentHandle.eachLayer((function(t){t.setOpacity(0),t.dragging&&t.dragging.disable(),L.DomUtil.removeClass(t.getElement(),"leaflet-interactive")})))},_updateHandle:function(){var t=this._overlay._map,e=this.getMode();this.currentHandle&&t.removeLayer(this.currentHandle),this.currentHandle=""===e?"":this._handles[e],""!==this.currentHandle&&t.addLayer(this.currentHandle)},_addToolbar:function(){var t=this._overlay,e=this.parentGroup,o=t._map,i=t.getCorners(),n=-1/0;if(e&&e.anyCollected())e.editing._addToolbar();else if(!t.options.suppressToolbar&&!this.toolbar){for(var a=0;an&&(n=i[a].lat);var r=t.getCenter();r.lat=n,this.toolbar=L.distortableImage.popupBar(r,{actions:this.editActions}).addTo(o,t),t.fire("toolbar:created")}},_refresh:function(){this.toolbar&&this._removeToolbar(),this._addToolbar()},_updateToolbarPos:function(){var t=this._overlay,e=t.getCorners(),o=this.toolbar,i=-1/0;if(o&&o instanceof L.DistortableImage.PopupBar){for(var n=0;ni&&(i=e[n].lat);var a=t.getCenter();a.lat=i,t.options.suppressToolbar||this.toolbar.setLatLng(a)}},hasMode:function(t){return!!this._modes[t]},getMode:function(){if(this.enabled())return this._mode},getModes:function(){return this._modes},isMode:function(t){return!!this.enabled()&&this._mode===t},setMode:function(t){var e=this._overlay,o=this.parentGroup;if(this.getMode()!==t&&this.hasMode(t)&&this.enabled())return this.toolbar&&this.toolbar.clickTool(t),this.isMode("lock")&&!this.dragging&&this._enableDragging(),this._mode=t,this.isMode("lock")&&this._disableDragging(),this._updateHandle(),this._refresh(),o&&o.isCollected(e)&&e.deselect(),this},nextMode:function(t){var e=this.getMode(),o=this.parentGroup,i=Object.keys(this.getModes()),n=i.indexOf(e),a=i[(n+1)%i.length];if(t){if(o&&o.anyCollected())return;L.DomEvent.stop(t)}return this.setMode(a)}}),L.distortableImage.edit=function(t,e){return new L.DistortableImage.Edit(t,e)}},426:function(){L.BorderAction=L.EditAction.extend({initialize:function(t,e,o){var i,n,a=e.editing,r=a._mode;a._outlined?(i="border_outer",n=e.options.translation.removeBorder):(i="border_clear",n=e.options.translation.addBorder),(o=o||{}).toolbarIcon={svg:!0,html:i,tooltip:n,className:"lock"===r?"disabled":""},L.DistortableImage.action_map.b="lock"===r?"":"_toggleBorder",L.EditAction.prototype.initialize.call(this,t,e,o)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"border_clear","border_outer"),L.IconUtil.toggleTitle(this._link,"Remove Border","Add Border"),t._toggleBorder()}})},114:function(){L.DeleteAction=L.EditAction.extend({initialize:function(t,e,o){var i,n=e.editing;n instanceof L.DistortableImage.Edit?(i=e.options.translation.deleteImage,L.DistortableImage.action_map.Backspace="lock"===n._mode?"":"_removeOverlay"):(i=e.options.translation.deleteImages,L.DistortableImage.group_action_map.Backspace="lock"===n._mode?"":"_removeGroup"),(o=o||{}).toolbarIcon={svg:!0,html:"delete_forever",tooltip:i,className:"lock"===n._mode?"disabled":""},L.EditAction.prototype.initialize.call(this,t,e,o)},addHooks:function(){var t=this._overlay.editing;t instanceof L.DistortableImage.Edit?t._removeOverlay():t._removeGroup()}})},231:function(){L.DistortAction=L.EditAction.extend({initialize:function(t,e,o){(o=o||{}).toolbarIcon={svg:!0,html:"distort",tooltip:e.options.translation.distortImage,className:"distort"},L.DistortableImage.action_map.d="_distortMode",L.EditAction.prototype.initialize.call(this,t,e,o)},addHooks:function(){this._overlay.editing._distortMode()}})},541:function(){L.DragAction=L.EditAction.extend({initialize:function(t,e,o){(o=o||{}).toolbarIcon={svg:!0,html:"drag",tooltip:e.options.translation.dragImage,className:"drag"},L.DistortableImage.action_map.D="_dragMode",L.EditAction.prototype.initialize.call(this,t,e,o)},addHooks:function(){this._overlay.editing._dragMode()}})},280:function(){L.DistortableImage=L.DistortableImage||{},L.distortableImage=L.DistortableImage,L.DistortableImage.action_map={},L.EditAction=L.Toolbar2.Action.extend({options:{toolbarIcon:{svg:!1,html:"",className:"",tooltip:""}},initialize:function(t,e,o){this._overlay=e,this._map=t,L.setOptions(this,o),L.Toolbar2.Action.prototype.initialize.call(this,o),this._injectIconSet()},_createIcon:function(t,e,o){var i=this,n=this.options.toolbarIcon,a=n.className,r=this._overlay.editing,s=this.options.toolbarIcon.style;this.toolbar=t,this._icon=L.DomUtil.create("li","",e),this._link=L.DomUtil.create("a","",this._icon),n.svg?this._link.innerHTML=L.IconUtil.create(n.html):this._link.innerHTML=n.html,this._link.setAttribute("href","#"),this._link.setAttribute("title",n.tooltip),s&&this._link.setAttribute("style",s),this._link.setAttribute("role","button"),L.DomUtil.addClass(this._link,this.constructor.baseClass),a&&(L.DomUtil.addClass(this._link,a),"disabled"===a&&L.DomUtil.addClass(this._icon,a),a===r._mode?L.DomUtil.addClass(this._link,"selected-mode"):L.DomUtil.removeClass(this._link,"selected-mode")),L.DomEvent.on(this._link,"click",this.enable,this),L.DomEvent.on(this._overlay,"update",(function(){var t=i._link.innerHTML.match(/xlink:href="#restore"/);t&&1===t.length&&i._enableAction()})),this._addSubToolbar(t,this._icon,o)},_injectIconSet:function(){if(!document.querySelector("#iconset")){var t=document.createElement("div");t.id="iconset",t.setAttribute("hidden","hidden"),t.innerHTML=(new L.ToolbarIconSet).render(),document.querySelector(".leaflet-marker-pane").appendChild(t)}},_enableAction:function(){L.DomUtil.removeClass(this._link.parentElement,"disabled"),L.DomUtil.removeClass(this._link,"disabled")},_disableAction:function(){L.DomUtil.addClass(this._link.parentElement,"disabled"),L.DomUtil.addClass(this._link,"disabled")}}),L.editAction=function(t,e,o){return new L.EditAction(t,e,o)}},149:function(){L.ExportAction=L.EditAction.extend({initialize:function(t,e,o){var i,n=e.editing;this.isExporting=!1,this.mouseLeaveSkip=!0,this.isHooksExecuted=!1,n instanceof L.DistortableImage.Edit?(L.DistortableImage.action_map.e="_getExport",i=e.options.translation.exportImage):(L.DistortableImage.group_action_map.e="runExporter",i=e.options.translation.exportImages),(o=o||{}).toolbarIcon={svg:!0,html:"get_app",tooltip:i},L.EditAction.prototype.initialize.call(this,t,e,o)},addHooks:function(){var t=this._overlay.editing;if(t instanceof L.DistortableImage.Edit)t._getExport();else if(!this.isHooksExecuted){this.isHooksExecuted=!0;var e=this._link.parentElement;this.mouseEnterHandler=this.handleMouseEnter.bind(this),this.mouseLeaveHandler=this.handleMouseLeave.bind(this),L.DomEvent.on(e,"click",(function(){if(this.isExporting){if(this.mouseLeaveSkip)return;this.resetState(),this.detachMouseEventListeners(e),t.cancelExport()}else this.isExporting=!0,this.renderExportIcon(),setTimeout(this.attachMouseEventListeners.bind(this,e),100),t.runExporter().then(function(){this.resetState(),this.detachMouseEventListeners(e)}.bind(this))}),this)}},resetState:function(){this.renderDownloadIcon(),this.isExporting=!1,this.mouseLeaveSkip=!0},attachMouseEventListeners:function(t){t.addEventListener("mouseenter",this.mouseEnterHandler),t.addEventListener("mouseleave",this.mouseLeaveHandler)},detachMouseEventListeners:function(t){t.removeEventListener("mouseenter",this.mouseEnterHandler),t.removeEventListener("mouseleave",this.mouseLeaveHandler)},handleMouseEnter:function(){this.renderCancelIcon()},handleMouseLeave:function(){this.mouseLeaveSkip?this.mouseLeaveSkip=!1:this.renderExportIcon()},renderDownloadIcon:function(){L.IconUtil.toggleXlink(this._link,"get_app","spinner"),L.IconUtil.toggleTitle(this._link,"Export Images","Loading..."),L.DomUtil.removeClass(this._link.firstChild,"loader")},renderExportIcon:function(){L.IconUtil.toggleXlink(this._link,"spinner"),L.IconUtil.toggleTitle(this._link,"Export Images","Loading..."),L.IconUtil.addClassToSvg(this._link,"loader")},renderCancelIcon:function(){L.IconUtil.toggleXlink(this._link,"cancel"),L.IconUtil.toggleTitle(this._link,"Cancel Export","Loading..."),L.DomUtil.removeClass(this._link.firstChild,"loader")}})},74:function(){L.FreeRotateAction=L.EditAction.extend({initialize:function(t,e,o){(o=o||{}).toolbarIcon={svg:!0,html:"crop_rotate",tooltip:e.options.translation.freeRotateImage,className:"freeRotate"},L.DistortableImage.action_map.f="_freeRotateMode",L.EditAction.prototype.initialize.call(this,t,e,o)},addHooks:function(){this._overlay.editing._freeRotateMode()}})},691:function(){L.GeolocateAction=L.EditAction.extend({initialize:function(t,e,o){var i=e.editing;(o=o||{}).toolbarIcon={svg:!0,html:"explore",tooltip:e.options.translation.geolocateImage,className:"lock"===i._mode?"disabled":""},L.EditAction.prototype.initialize.call(this,t,e,o)},addHooks:function(){var t=this._overlay.getElement();EXIF.getData(t,L.EXIF(t))}})},105:function(){L.LockAction=L.EditAction.extend({initialize:function(t,e,o){var i,n,a=e.editing;a instanceof L.DistortableImage.Edit?(L.DistortableImage.action_map.u="_unlock",L.DistortableImage.action_map.l="_lock",n=e.options.translation.lockMode,i=a.isMode("lock")?"lock":"unlock"):(L.DistortableImage.group_action_map.l="_lockGroup",n=e.options.translation.lockImages,i="lock"),(o=o||{}).toolbarIcon={svg:!0,html:i,tooltip:n,className:"lock"},L.EditAction.prototype.initialize.call(this,t,e,o)},addHooks:function(){var t=this._overlay.editing;t instanceof L.DistortableImage.Edit?t._toggleLockMode():t._lockGroup()}})},496:function(){var t=[100,80,60,40,20,0],e=new CSSStyleSheet;e.replaceSync(".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 "),e.insertRule(".leaflet-toolbar-1 li:first-child a {\n border-radius: 4px 4px 0px 0px !important;\n }"),document.adoptedStyleSheets=[e],t=t.map((function(t){return(isNaN(t)||t>100)&&(t=100),t<0&&(t=0),L.EditAction.extend({options:{toolbarIcon:{html:t,tooltip:"Opacity "+t+"%",className:"leaflet-toolbar-icon-vertical",style:"background-color:rgb("+(100-t)+"%,"+(100-t)+"%,"+(100-t)+"%);"}},addHooks:function(){this._overlay.editing._setOpacities(t/100)}})})),L.OpacitiesToolbar2=L.Toolbar2.extend({options:{className:"",filter:function(){return!0},actions:[],style:"translate(-1px, -".concat(30*(t.length+1),"px)")},appendToContainer:function(t){var e,o,i,n,a=this.constructor.baseClass+"-"+this._calculateDepth()+" "+this.options.className;for(this._container=t,this._ul=L.DomUtil.create("ul",a,t),this._ul.style.transform=this.options.style?this.options.style:"",this._disabledEvents=["click","mousemove","dblclick","mousedown","mouseup","touchstart"],o=0,n=this._disabledEvents.length;or||a>1?t.scaleBy(a):t.scaleBy(1)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.freeRotateHandle=function(t,e,o){return new L.FreeRotateHandle(t,e,o)}},789:function(){L.LockHandle=L.EditHandle.extend({options:{TYPE:"lock",interactive:!1,icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAD8SURBVO3BPU7CYAAA0AdfjIcQlRCQBG7C3gk2uIPG2RC3Dk16Gz0FTO1WZs/gwGCMP/2+xsSl7+n1er1Iz9LtRQjaPeMeO+TinLDCJV78YqjdA04YodKuxhUaPGoRxMmxwRQZSt87Yo4KExGCeAUyLLFB4bMacxywEClIU2KDKXbInTUYo8JCgoFuGoxQO5uiwY1EA91VmDqrcKeDoX8WdNNgjApvmGGLXKIgXY0xGkxQYItrrFFIEKQ5Yo4KEx9yrDFDhlKkIF6NOQ5Y+KpAhiXWKEQI4pxwiwoLPyuxwQw75FoE7fZYocFEuwI7jHCBV39gL92TXq/Xi/AOcmczZmaIMScAAAAASUVORK5CYII=",iconSize:[32,32],iconAnchor:[16,16]})},onRemove:function(t){this.unbindTooltip(),L.EditHandle.prototype.onRemove.call(this,t)},_bindListeners:function(){var t=this.getElement();L.EditHandle.prototype._bindListeners.call(this),L.DomEvent.on(t,{mousedown:this._tooltipOn,mouseup:this._tooltipOff},this),L.DomEvent.on(document,"pointerleave",this._tooltipOff,this)},_unbindListeners:function(){var t=this.getElement();L.EditHandle.prototype._bindListeners.call(this),L.DomEvent.off(t,{mousedown:this._tooltipOn,mouseup:this._tooltipOff},this),L.DomEvent.off(document,"pointerleave",this._tooltipOff,this)},_onHandleDrag:function(){},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))},_tooltipOn:function(t){var e=this._handled.parentGroup,o=e?e.editing:this._handled.editing;if(!t.shiftKey&&(this._handled.isSelected()||!e||e.isCollected(this._handled))){var i=o._lockHandles;this._timer=setTimeout(L.bind((function(){this._timeout&&clearTimeout(this._timeout),this.getTooltip()?i.eachLayer((function(t){this!==t&&t.closeTooltip()})):this.bindTooltip("Locked!",{permanent:!0}),this.openTooltip()}),this),500)}},_tooltipOff:function(t){var e=this._handled.parentGroup,o=e?e.editing:this._handled.editing;if(!t.shiftKey&&(this._handled.isSelected()||!e||e.isCollected(this._handled))){var i=o._lockHandles;t.currentTarget===document&&i.eachLayer((function(t){t.closeTooltip()})),this._timer&&clearTimeout(this._timer),this._timeout=setTimeout(L.bind((function(){this.closeTooltip()}),this),400)}}}),L.lockHandle=function(t,e,o){return new L.LockHandle(t,e,o)}},337:function(){L.RotateHandle=L.EditHandle.extend({options:{TYPE:"rotate",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),o=this.getLatLng(),i=this.calculateAngleDelta(e,o);t.rotateBy(i,"rad")},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.rotateHandle=function(t,e,o){return new L.RotateHandle(t,e,o)}},350:function(){L.ScaleHandle=L.EditHandle.extend({options:{TYPE:"scale",icon:L.icon({iconUrl:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI0NTkiIGhlaWdodD0iNDY0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA1MTIgNTEyIiB4bWw6c3BhY2U9InByZXNlcnZlIiBzdHlsZT0iIj48cmVjdCBpZD0iYmFja2dyb3VuZHJlY3QiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHg9IjAiIHk9IjAiIGZpbGw9Im5vbmUiIHN0cm9rZT0ibm9uZSIgY2xhc3M9IiIgc3R5bGU9IiIvPjxnIGNsYXNzPSJjdXJyZW50TGF5ZXIiIHN0eWxlPSIiPjx0aXRsZT5MYXllciAxPC90aXRsZT48cGF0aCBkPSJNNDU5LjA0OTE1OTUzMDQ3MTM0LDg2LjkyNjIzNDUxMjU1MDAyIFYwIGgtODUuNzE0NTczMzU2MzEyMDkgdjI3LjA0MzcxNzQwMzkwNDQ1MiBIODUuNzE0NTczMzU2MzEyMDMgVjAgSDAgdjg2LjkyNjIzNDUxMjU1MDAyIGgyNS43MTQzNzIwMDY4OTM2MjYgdjI4OS43NTQxMTUwNDE4MzM0IEgwIHY4Ni45MjYyMzQ1MTI1NTAwMiBoODUuNzE0NTczMzU2MzEyMDkgdi0yNy4wNDM3MTc0MDM5MDQ0NTIgaDI4NS43MTUyNDQ1MjEwNDAzIHYyNy4wNDM3MTc0MDM5MDQ0NTIgaDg1LjcxNDU3MzM1NjMxMjA5IHYtODYuOTI2MjM0NTEyNTUwMDIgaC0yMy44MDk2MDM3MTAwODY2OSBWODYuOTI2MjM0NTEyNTUwMDIgSDQ1OS4wNDkxNTk1MzA0NzEzNCB6TTM4NC43NjMxOTU5NTUwMDA5LDEyLjU1NjAxMTY1MTgxMjc4MSBoNjEuOTA0OTY5NjQ2MjI1Mzk2IHY2Mi43ODAwNTgyNTkwNjM5MSBoLTYxLjkwNDk2OTY0NjIyNTM5NiBWMTIuNTU2MDExNjUxODEyNzgxIHpNMTIuMzgwOTkzOTI5MjQ1MDUsMTIuNTU2MDExNjUxODEyNzgxIGg2MS45MDQ5Njk2NDYyMjUzOTYgdjYyLjc4MDA1ODI1OTA2MzkxIEgxMi4zODA5OTM5MjkyNDUwNSBWMTIuNTU2MDExNjUxODEyNzgxIHpNNzQuMjg1OTYzNTc1NDcwNTMsNDUxLjA1MDU3MjQxNTEyMDY2IEgxMi4zODA5OTM5MjkyNDUwNSB2LTYyLjc4MDA1ODI1OTA2MzkxIGg2MS45MDQ5Njk2NDYyMjUzOTYgVjQ1MS4wNTA1NzI0MTUxMjA2NiB6TTQ0NS43MTU3ODE0NTI4MjI3NCw0NTEuMDUwNTcyNDE1MTIwNjYgaC02Mi44NTczNTM3OTQ2Mjg4NjQgdi02Mi43ODAwNTgyNTkwNjM5MSBoNjIuODU3MzUzNzk0NjI4ODY0IFY0NTEuMDUwNTcyNDE1MTIwNjYgek00MDcuNjIwNDE1NTE2Njg0MjYsMzc2LjY4MDM0OTU1NDM4MzQ0IGgtMzYuMTkwNTk3NjM5MzMxNzcgdjMyLjgzODc5OTcwNDc0MTEyIEg4NS43MTQ1NzMzNTYzMTIwMyB2LTMyLjgzODc5OTcwNDc0MTEyIEg0OS41MjM5NzU3MTY5ODAzMiBWODYuOTI2MjM0NTEyNTUwMDIgaDM2LjE5MDU5NzYzOTMzMTc3IFY1MC4yMjQwNDY2MDcyNTExMjUgaDI4Ny42MjAwMTI4MTc4NDcyIHYzNi43MDIxODc5MDUyOTg5IGgzNC4yODU4MjkzNDI1MjQ4MzUgVjM3Ni42ODAzNDk1NTQzODM0NCB6IiBpZD0ic3ZnXzIiIGNsYXNzPSIiIGZpbGw9IiMxYTFhZWIiIGZpbGwtb3BhY2l0eT0iMSIvPjwvZz48L3N2Zz4=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t._map,o=t.edgeMinWidth,i=t.getCorner(this._corner),n=this.getLatLng(),a=this._calculateScalingFactor(i,n);o||(o=50);var r=e.latLngToLayerPoint(t.getCorner(0)),s=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(r.x-s.x),c=Math.abs(r.y-s.y);Math.sqrt(l*l+c*c)>o||a>1?t.scaleBy(a):t.scaleBy(1)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.scaleHandle=function(t,e,o){return new L.ScaleHandle(t,e,o)}},719:function(){L.distortableImage=L.DistortableImage||{},L.distortableImage=L.DistortableImage,L.DistortableImage.group_action_map={},L.DistortableImage.ControlBar=L.Toolbar2.Control.extend({}),L.distortableImage.controlBar=function(t){return new L.DistortableImage.ControlBar(t)},L.DistortableCollection.addInitHook((function(){this.ACTIONS=[L.ExportAction,L.DeleteAction,L.LockAction,L.UnlockAction],L.DistortableCollection.Edit.MODES={lock:L.LockAction,unlock:L.UnlockAction};var t=this.options.actions?this.options.actions:this.ACTIONS;this.editing=L.distortableCollection.edit(this,{actions:t})}))},93:function(){L.DistortableImage=L.DistortableImage||{},L.distortableImage=L.DistortableImage,L.DistortableImage.action_map={},L.DistortableImage.PopupBar=L.Toolbar2.Popup.extend({options:{anchor:[0,-10]},initialize:function(t,e){L.setOptions(this,e),L.Toolbar2.Popup.prototype.initialize.call(this,t,e)},addHooks:function(t,e){this.map=t,this.ov=e},tools:function(){if(this._ul)return this._ul.children},clickTool:function(t){for(var e=this.tools(),o=0;o',_symbols:"",render:function(){return this.addSymbols(this._symbols),this._svg},addSymbols:function(t){this._svg+=t}})},261:function(){L.KeymapperIconSet=L.IconSet.extend({_symbols:''})},929:function(){L.ToolbarIconSet=L.IconSet.extend({_symbols:''})},998:function(){L.Map.mergeOptions({boxCollector:!0,boxZoom:!1}),L.Map.BoxCollector=L.Map.BoxZoom.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane,this._resetStateTimeout=0,t.on("unload",this._destroy,this)},addHooks:function(){L.DomEvent.on(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){L.DomEvent.off(this._container,"mousedown",this._onMouseDown,this)},moved:function(){return this._moved},_destroy:function(){L.DomUtil.remove(this._pane),delete this._pane},_resetState:function(){this._resetStateTimeout=0,this._moved=!1},_clearDeferredResetState:function(){0!==this._resetStateTimeout&&(clearTimeout(this._resetStateTimeout),this._resetStateTimeout=0)},_onMouseDown:function(t){if(!t.shiftKey||1!==t.which&&1!==t.button)return!1;this._clearDeferredResetState(),this._resetState(),L.DomUtil.disableTextSelection(),L.DomUtil.disableImageDrag(),this._startPoint=this._map.mouseEventToContainerPoint(t),L.DomEvent.on(document,{contextmenu:L.DomEvent.stop,mousemove:this._onMouseMove,mouseup:this._onMouseUp},this)},_onMouseMove:function(t){this._moved||(this._moved=!0,this._box=L.DomUtil.create("div","leaflet-zoom-box",this._container),L.DomUtil.addClass(this._container,"leaflet-crosshair"),this._map.fire("boxzoomstart")),this._point=this._map.mouseEventToContainerPoint(t),this._bounds=L.bounds(this._startPoint,this._point);var e=this._bounds.getSize();L.DomUtil.setPosition(this._box,this._bounds.min),this._box.style.width=e.x+"px",this._box.style.height=e.y+"px"},_finish:function(){this._moved&&(L.DomUtil.remove(this._box),L.DomUtil.removeClass(this._container,"leaflet-crosshair")),L.DomUtil.enableTextSelection(),L.DomUtil.enableImageDrag(),L.DomEvent.off(document,{contextmenu:L.DomEvent.stop,mousemove:this._onMouseMove,mouseup:this._onMouseUp},this)},_onMouseUp:function(t){if((1===t.which||1===t.button)&&(this._finish(),this._moved)){this._clearDeferredResetState(),this._resetStateTimeout=setTimeout(L.Util.bind(this._resetState,this),0);var e=L.latLngBounds(this._map.containerPointToLatLng(this._bounds.getBottomLeft()),this._map.containerPointToLatLng(this._bounds.getTopRight())),o=this._map.getZoom(),i=this._map.getCenter();e=this._map._latLngBoundsToNewLayerBounds(e,o,i),this._map.fire("boxcollectend",{boxCollectBounds:e})}}}),L.Map.addInitHook("addHandler","boxCollector",L.Map.BoxCollector)},291:function(){L.Map.mergeOptions({doubleClickLabels:!1}),L.Map.DoubleClickLabels=L.Handler.extend({}),L.Map.addInitHook("addHandler","doubleClickLabels",L.Map.DoubleClickLabels)},131:function(){L.Map.include({_clicked:0,addGoogleMutant:function(t){return(t=this.mutantOptions=L.extend({mutantOpacity:.8,maxZoom:24,maxNativeZoom:20,minZoom:0,labels:!0,labelOpacity:1,doubleClickLabels:!0},t)).labels||(this.mutantOptions=L.extend(this.mutantOptions,{labelOpacity:t.labels?1:void 0,doubleClickLabels:!!t.labels||void 0})),this._googleMutant=L.tileLayer("http://mt0.google.com/vt/lyrs=s&x={x}&y={y}&z={z}",{maxZoom:t.maxZoom,maxNativeZoom:t.maxNativeZoom,minZoom:t.minZoom,opacity:t.mutantOpacity}).addTo(this),t.labels?this._addLabels(t):this.doubleClickLabels=void 0,this},_addLabels:function(t){return 0!==t.labelOpacity&&1!==t.labelOpacity&&(t.labelOpacity=1),this._labels=L.tileLayer("https://stamen-tiles-{s}.a.ssl.fastly.net/toner-labels/{z}/{x}/{y}{r}.{ext}",{attribution:'Map tiles by Stamen Design, CC BY 3.0 — Map data © OpenStreetMap contributors',subdomains:"abcd",interactive:!1,opacity:t.labelOpacity,maxZoom:t.maxZoom,maxNativeZoom:t.maxNativeZoom,minZoom:t.minZoom,ext:"png"}).addTo(this),this.mutantOptions.doubleClickLabels&&this.doubleClickLabels.enable(),this}}),L.Map.addInitHook((function(){this.doubleClickLabels.disable(),this.doubleClickZoom.enable()}))},999:function(){L.DomUtil=L.extend(L.DomUtil,{initTranslation:function(t){this.translation=t},getMatrixString:function(t){var e=L.Browser.webkit3d||L.Browser.gecko3d||L.Browser.ie3d,o=[t[0],t[3],0,t[6],t[1],t[4],0,t[7],0,0,1,0,t[2],t[5],0,t[8]],i=e?"matrix3d("+o.join(",")+")":"";return e||console.log("Your browser must support 3D CSS transformsin order to use DistortableImageOverlay."),i},toggleClass:function(t,e){var o=e;return this.hasClass(t,o)?this.removeClass(t,o):this.addClass(t,o)},confirmDelete:function(){return window.confirm(this.translation.confirmImageDelete)},confirmDeletes:function(t){if(1===t)return this.confirmDelete();var e,o=this.translation.confirmImagesDeletes;return e="function"==typeof o?o(t):o,window.confirm(e)}})},85:function(){L.IconUtil={create:function(t){return/^#/.test(t)&&(t=t.replace(/^#/,"")),''},addClassToSvg:function(t,e){var o=t.querySelector("svg");o&&L.DomUtil.addClass(o,e)},toggleXlink:function(t,e,o){/^#/.test(e)||(e="#"+e),/^#/.test(o)||(o="#"+o);var i=t.querySelector("use");if(i){var n=i.getAttribute("xlink:href")===e?o:e;return i.setAttribute("xlink:href",n),n}return!1},toggleTitle:function(t,e,o){var i=t.getAttribute("title")===e?o:e;return t.setAttribute("title",i),t.hasAttribute("aria-label")&&t.setAttribute("aria-label",i),i}}},351:function(){L.ImageUtil={getCmPerPixel:function(t){var e=t._map;return 100*e.latLngToLayerPoint(t.getCorner(0)).distanceTo(e.latLngToLayerPoint(t.getCorner(1)))/t.getElement().width}}},360:function(){L.MatrixUtil={adj:function(t){return[t[4]*t[8]-t[5]*t[7],t[2]*t[7]-t[1]*t[8],t[1]*t[5]-t[2]*t[4],t[5]*t[6]-t[3]*t[8],t[0]*t[8]-t[2]*t[6],t[2]*t[3]-t[0]*t[5],t[3]*t[7]-t[4]*t[6],t[1]*t[6]-t[0]*t[7],t[0]*t[4]-t[1]*t[3]]},multmm:function(t,e){var o,i=[];for(o=0;o<3;o++)for(var n=0;n<3;n++){for(var a=0,r=0;r<3;r++)a+=t[3*o+r]*e[3*r+n];i[3*o+n]=a}return i},multmv:function(t,e){return[t[0]*e[0]+t[1]*e[1]+t[2]*e[2],t[3]*e[0]+t[4]*e[1]+t[5]*e[2],t[6]*e[0]+t[7]*e[1]+t[8]*e[2]]},multsm:function(t,e){for(var o=[],i=0,n=e.length;i2&&void 0!==arguments[2]?arguments[2]:"deg";return"deg"===o?this.radiansToDegrees(Math.atan2(e,t)):Math.atan2(e,t)},radiansToDegrees:function(t){return 180*t/Math.PI},degreesToRadians:function(t){return t*Math.PI/180}}},866:function(){L.Utils={initTranslation:function(){var t={deleteImage:"Delete Image",deleteImages:"Delete Images",distortImage:"Distort Image",dragImage:"Drag Image",exportImage:"Export Image",exportImages:"Export Images",removeBorder:"Remove Border",addBorder:"Add Border",freeRotateImage:"Free rotate Image",geolocateImage:"Geolocate Image",lockMode:"Lock Mode",lockImages:"Lock Images",makeImageOpaque:"Make Image Opaque",makeImageTransparent:"Make Image Transparent",restoreImage:"Restore Natural Image",rotateImage:"Rotate Image",scaleImage:"Scale Image",stackToFront:"Stack to Front",stackToBack:"Stack to Back",unlockImages:"Unlock Images",confirmImageDelete:"Are you sure? This image will be permanently deleted from the map.",confirmImagesDeletes:"Are you sure? These images will be permanently deleted from the map."};if(this.options.translation)for(var e in t)this.options.translation.hasOwnProperty(e)||(this.options.translation[e]=t[e]);else this.options.translation=t;L.DomUtil.initTranslation(this.options.translation)},getNestedVal:function(t,e,o){return[e,o].reduce((function(t,e){return t&&t[e]}),t)}}}};t[999](),t[85](),t[351](),t[360](),t[682](),t[866](),t[477](),t[808](),t[743](),t[988](),t[92](),t[194](),t[206](),t[789](),t[337](),t[350](),t[376](),t[261](),t[929](),t[280](),t[426](),t[114](),t[231](),t[541](),t[149](),t[74](),t[691](),t[105](),t[496](),t[944](),t[954](),t[178](),t[547](),t[886](),t[129](),t[93](),t[719](),t[397](),t[428](),t[782](),t[998](),t[291](),t[131]()}(); +!function(){var t={808:function(){function t(e){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},t(e)}function e(){"use strict";e=function(){return o};var o={},i=Object.prototype,n=i.hasOwnProperty,a=Object.defineProperty||function(t,e,o){t[e]=o.value},r="function"==typeof Symbol?Symbol:{},s=r.iterator||"@@iterator",l=r.asyncIterator||"@@asyncIterator",c=r.toStringTag||"@@toStringTag";function d(t,e,o){return Object.defineProperty(t,e,{value:o,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{d({},"")}catch(t){d=function(t,e,o){return t[e]=o}}function h(t,e,o,i){var n=e&&e.prototype instanceof p?e:p,r=Object.create(n.prototype),s=new T(i||[]);return a(r,"_invoke",{value:D(t,o,s)}),r}function u(t,e,o){try{return{type:"normal",arg:t.call(e,o)}}catch(t){return{type:"throw",arg:t}}}o.wrap=h;var g={};function p(){}function m(){}function f(){}var v={};d(v,s,(function(){return this}));var _=Object.getPrototypeOf,L=_&&_(_(x([])));L&&L!==i&&n.call(L,s)&&(v=L);var b=f.prototype=p.prototype=Object.create(v);function y(t){["next","throw","return"].forEach((function(e){d(t,e,(function(t){return this._invoke(e,t)}))}))}function k(e,o){function i(a,r,s,l){var c=u(e[a],e,r);if("throw"!==c.type){var d=c.arg,h=d.value;return h&&"object"==t(h)&&n.call(h,"__await")?o.resolve(h.__await).then((function(t){i("next",t,s,l)}),(function(t){i("throw",t,s,l)})):o.resolve(h).then((function(t){d.value=t,s(d)}),(function(t){return i("throw",t,s,l)}))}l(c.arg)}var r;a(this,"_invoke",{value:function(t,e){function n(){return new o((function(o,n){i(t,e,o,n)}))}return r=r?r.then(n,n):n()}})}function D(t,e,o){var i="suspendedStart";return function(n,a){if("executing"===i)throw new Error("Generator is already running");if("completed"===i){if("throw"===n)throw a;return{value:void 0,done:!0}}for(o.method=n,o.arg=a;;){var r=o.delegate;if(r){var s=M(r,o);if(s){if(s===g)continue;return s}}if("next"===o.method)o.sent=o._sent=o.arg;else if("throw"===o.method){if("suspendedStart"===i)throw i="completed",o.arg;o.dispatchException(o.arg)}else"return"===o.method&&o.abrupt("return",o.arg);i="executing";var l=u(t,e,o);if("normal"===l.type){if(i=o.done?"completed":"suspendedYield",l.arg===g)continue;return{value:l.arg,done:o.done}}"throw"===l.type&&(i="completed",o.method="throw",o.arg=l.arg)}}}function M(t,e){var o=e.method,i=t.iterator[o];if(void 0===i)return e.delegate=null,"throw"===o&&t.iterator.return&&(e.method="return",e.arg=void 0,M(t,e),"throw"===e.method)||"return"!==o&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+o+"' method")),g;var n=u(i,t.iterator,e.arg);if("throw"===n.type)return e.method="throw",e.arg=n.arg,e.delegate=null,g;var a=n.arg;return a?a.done?(e[t.resultName]=a.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,g):a:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,g)}function A(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function I(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function T(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(A,this),this.reset(!0)}function x(t){if(t){var e=t[s];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,i=function e(){for(;++o=0;--i){var a=this.tryEntries[i],r=a.completion;if("root"===a.tryLoc)return o("end");if(a.tryLoc<=this.prev){var s=n.call(a,"catchLoc"),l=n.call(a,"finallyLoc");if(s&&l){if(this.prev=0;--o){var i=this.tryEntries[o];if(i.tryLoc<=this.prev&&n.call(i,"finallyLoc")&&this.prev=0;--e){var o=this.tryEntries[e];if(o.finallyLoc===t)return this.complete(o.completion,o.afterLoc),I(o),g}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var o=this.tryEntries[e];if(o.tryLoc===t){var i=o.completion;if("throw"===i.type){var n=i.arg;I(o)}return n}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,o){return this.delegate={iterator:x(t),resultName:e,nextLoc:o},"next"===this.method&&(this.arg=void 0),g}},o}function o(t,e,o,i,n,a,r){try{var s=t[a](r),l=s.value}catch(t){return void o(t)}s.done?e(l):Promise.resolve(l).then(i,n)}function i(t){return function(){var e=this,i=arguments;return new Promise((function(n,a){var r=t.apply(e,i);function s(t){o(r,n,a,s,l,"next",t)}function l(t){o(r,n,a,s,l,"throw",t)}s(void 0)}))}}var n=[];L.DistortableCollection=L.FeatureGroup.extend({options:{editable:!0,exportOpts:{exportStartUrl:"//export.mapknitter.org/export",statusUrl:"//export.mapknitter.org",exportUrl:"http://export.mapknitter.org/"}},initialize:function(t){L.setOptions(this,t),L.FeatureGroup.prototype.initialize.call(this,t),L.Utils.initTranslation.call(this),this.editable=this.options.editable},onAdd:function(t){L.FeatureGroup.prototype.onAdd.call(this,t),this._map=t,this.editable&&this.editing.enable(),this.on("layeradd",this._addEvents,this),this.on("layerremove",this._removeEvents,this)},onRemove:function(){this.editing&&this.editing.disable(),this.off("layeradd",this._addEvents,this),this.off("layerremove",this._removeEvents,this)},_addEvents:function(t){var e=t.layer;L.DomEvent.on(e,{dragstart:this._dragStartMultiple,drag:this._dragMultiple},this),L.DomEvent.on(e.getElement(),{mousedown:this._deselectOthers,contextmenu:this._longPressMultiSelect},this)},_removeEvents:function(t){var e=t.layer;L.DomEvent.off(e,{dragstart:this._dragStartMultiple,drag:this._dragMultiple},this),L.DomEvent.off(e.getElement(),{mousedown:this._deselectOthers,contextmenu:this._longPressMultiSelect},this)},_longPressMultiSelect:function(t){var e=this;this.editable&&(t.preventDefault(),this.eachLayer((function(o){var i=o.editing;o.getElement()===t.target&&i.enabled()&&(L.DomUtil.toggleClass(o.getElement(),"collected"),e.anyCollected()?(o.deselect(),e.editing._addToolbar()):e.editing._removeToolbar())})))},isCollected:function(t){return L.DomUtil.hasClass(t.getElement(),"collected")},anyCollected:function(){return this.getLayers().some(this.isCollected.bind(this))},_toggleCollected:function(t,e){t.shiftKey&&e.editing.enabled()&&(L.DomUtil.toggleClass(t.target,"collected"),n.every((function(t){return t._leaflet_id!==e._leaflet_id}))?n.push(e):n.splice(n.indexOf(e),1)),this.anyCollected()?e.deselect():this.editing._removeToolbar()},_deselectOthers:function(t){var e=this;this.editable&&(this.eachLayer((function(o){o.getElement()!==t.target?o.deselect():e._toggleCollected(t,o)})),t&&L.DomEvent.stopPropagation(t))},_dragStartMultiple:function(t){var e,o=t.target,i=this._map;this.isCollected(o)&&this.eachLayer((function(t){for(t._dragStartPoints={},t.deselect(),e=0;e<4;e++){var o=t.getCorner(e);t._dragStartPoints[e]=i.latLngToLayerPoint(o)}}))},_dragMultiple:function(t){var e=t.target,o=this._map;if(this.isCollected(e)){var i=o.latLngToLayerPoint(e.getCorner(0)),n=e._dragStartPoints[0].subtract(i);this._updateCollectionFromPoints(n,e)}},_toRemove:function(){var t=this;return this.getLayers().filter((function(e){var o=e.editing._mode;return t.isCollected(e)&&"lock"!==o}))},_toMove:function(t){var e=this;return this.getLayers().filter((function(o){var i=o.editing._mode;return o!==t&&e.isCollected(o)&&"lock"!==i}))},_updateCollectionFromPoints:function(t,e){var o,i=this._toMove(e),n=new L.Transformation(1,-t.x,1,-t.y);i.forEach((function(t){var e={};for(o=0;o<4;o++)e[o]=n.transform(t._dragStartPoints[o]);t.setCornersFromPoints(e)}))},_getAvgCmPerPixel:function(t){return t.reduce((function(t,e){return t+e.cm_per_pixel}),0)/t.length},fetchRemoteJson:function(t){return i(e().mark((function o(){var i,n,a;return e().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return i=0,n=[],e.prev=2,e.next=5,axios.get(t);case 5:if(!(a=e.sent).data.hasOwnProperty("avg_cm_per_pixel")){e.next=14;break}if(!(a.data.collection.length>1)){e.next=10;break}return a.data.collection.forEach((function(t){n[i]=t,i++})),e.abrupt("return",{avg_cm_per_pixel:a.data.avg_cm_per_pixel,imgCollectionProps:n});case 10:return n[i]=a.data.collection,e.abrupt("return",{avg_cm_per_pixel:a.data.avg_cm_per_pixel,imgCollectionProps:n});case 14:if(!(a.data.length>1)){e.next=17;break}return a.data.forEach((function(t){n[i]=t,i++})),e.abrupt("return",{imgCollectionProps:n});case 17:return n[i]=a.data,e.abrupt("return",{imgCollectionProps:n});case 19:e.next=24;break;case 21:e.prev=21,e.t0=e.catch(2),console.log("err",e.t0);case 24:case"end":return e.stop()}}),o,null,[[2,21]])})))()},recreateImagesFromJsonUrl:function(t){var o=this;return i(e().mark((function i(){var n;return e().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n={},!t){e.next=6;break}return e.next=4,o.fetchRemoteJson(t);case 4:return n=e.sent,e.abrupt("return",n);case 6:return e.abrupt("return",n);case 8:case"end":return e.stop()}}),i)})))()},generateExportJson:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e={images:[]};return this.eachLayer((function(o){if(t||this.isCollected(o)){var i=o._image.src.split("/"),n=i[i.length-1],a=o.getCorners(),r=[{lat:a[0].lat,lon:a[0].lng||a[0].lon},{lat:a[1].lat,lon:a[1].lng||a[1].lon},{lat:a[3].lat,lon:a[3].lng||a[3].lon},{lat:a[2].lat,lon:a[2].lng||a[2].lon}];e.images.push({id:o._leaflet_id,src:o._image.src,width:o._image.width,height:o._image.height,tooltipText:o.getTooltipText(),image_file_name:n,nodes:r,cm_per_pixel:L.ImageUtil.getCmPerPixel(o)})}}),this),e.images=e.images.reverse(),e.avg_cm_per_pixel=this._getAvgCmPerPixel(e.images),e}}),L.distortableCollection=function(t,e){return new L.DistortableCollection(t,e)}},477:function(){L.DistortableImageOverlay=L.ImageOverlay.extend({options:{height:200,crossOrigin:!0,edgeMinWidth:50,editable:!0,mode:"distort",selected:!1,interactive:!0,tooltipText:""},initialize:function(t,e){L.setOptions(this,e),L.Utils.initTranslation.call(this),this.edgeMinWidth=this.options.edgeMinWidth,this.editable=this.options.editable,this._selected=this.options.selected,this._url=t,this.rotation={},this.interactive=this.options.interactive,this.tooltipText=this.options.tooltipText},onAdd:function(t){var e=this;this._map=t,this.getElement()||this._initImage(),t.on("viewreset",this._reset,this),this.options.corners&&(this._corners=this.options.corners,t.options.zoomAnimation&&L.Browser.any3d&&t.on("zoomanim",this._animateZoom,this)),L.DomEvent.on(this.getElement(),"load",(function(){if(e.getPane().appendChild(e.getElement()),e._initImageDimensions(),e.options.rotation){var o=e.options.rotation.deg>=0?"deg":"rad";e.setAngle(e.options.rotation[o],o)}else e.rotation={deg:0,rad:0},e._reset();e._corners||t.options.zoomAnimation&&L.Browser.any3d&&t.on("zoomanim",e._animateZoom,e),e.editable&&e.editing.enable(),e.eP=null})),this.fire("add")},onRemove:function(t){this.editing&&this.editing.disable(),this.fire("remove"),L.ImageOverlay.prototype.onRemove.call(this,t)},_initImageDimensions:function(){var t=this._map,e=L.DomUtil.getStyle(this.getElement(),"width"),o=L.DomUtil.getStyle(this.getElement(),"height"),i=parseInt(e)/parseInt(o),n=this.options.height,a=parseInt(i*n),r=t.project(t.getCenter()),s=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(r.subtract(s)),t.unproject(r.add(L.point(s.x,-s.y))),t.unproject(r.add(L.point(-s.x,s.y))),t.unproject(r.add(s))],this._initialDimensions={center:r,offset:s,zoom:t.getZoom()},this.setBounds(L.latLngBounds(this.getCorners()))},_singleClick:function(t){"singleclick"===t.type&&this.deselect()},_singleClickListeners:function(){var t=this._map;L.DomEvent.off(t,"click",this.deselect,this),L.DomEvent.on(t,"singleclick",this.deselect,this)},_resetClickListeners:function(){var t=this._map;L.DomEvent.on(t,"click",this.deselect,this),L.DomEvent.off(t,"singleclick",this.deselect,this)},isSelected:function(){return this._selected},deselect:function(){var t=this.editing;if(t.enabled())return t._hideMarkers(),this._selected=!1,this.fire("deselect"),this},select:function(t){var e=this.editing,o=this.eP;if(e.enabled()){if(t&&L.DomEvent.stopPropagation(t),this._programmaticGrouping(),this._selected=!0,e._showMarkers(),this.fire("select"),!o||!o.anyCollected())return this;this.deselect()}},_programmaticGrouping:function(){this._map.eachLayer((function(t){t instanceof L.DistortableImageOverlay&&t.deselect()}))},setCorner:function(t,e){var o=this.editing;return this._corners[t]=e,this.setBounds(L.latLngBounds(this.getCorners())),this.fire("update"),o.toolbar&&o.toolbar instanceof L.DistortableImage.PopupBar&&o._updateToolbarPos(),this.edited=!0,this},_cornerExceedsMapLats:function(t,e,o){return o.options.crs.Simple!=L.CRS.Simple&&(0===t?(i=o.project(e).y<2,n=o.project(e).y>=255):(i=o.project(e).y/t<2,n=o.project(e).y/Math.pow(2,t)>=255),i||n);var i,n},activateTooltip:function(){this._selected||this.bindTooltip(this.tooltipText,{direction:"top"}).openTooltip()},closeToolTip:function(){this.closeTooltip()},deactivateTooltip:function(){this.unbindTooltip()},getTooltipText:function(){return this.tooltipText},setCorners:function(t){var e=this._map,o=e.getZoom(),i=this.editing,n=0;for(var a in t)if(this._cornerExceedsMapLats(o,t[a],e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update");for(var r in t)this._corners[n]=t[r],n+=1;return this.setBounds(L.latLngBounds(this.getCorners())),this.fire("update"),i.toolbar&&i.toolbar instanceof L.DistortableImage.PopupBar&&i._updateToolbarPos(),this.edited=!0,this},setCornersFromPoints:function(t){var e=this._map,o=e.getZoom(),i=this.editing,n=0;for(var a in t){var r=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(o,r,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var s in t)this._corners[n]=e.layerPointToLatLng(t[s]),n+=1;return this.setBounds(L.latLngBounds(this.getCorners())),this.fire("update"),i.toolbar&&i.toolbar instanceof L.DistortableImage.PopupBar&&i._updateToolbarPos(),this.edited=!0,this},scaleBy:function(t){var e,o,i=this._map,n=i.project(this.getCenter()),a={};if(0!==t){for(e=0;e<4;e++)o=i.project(this.getCorner(e)).subtract(n).multiplyBy(t).add(n),a[e]=i.unproject(o);return this.setCorners(a),this}},getAngle:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"deg",e=this.getElement().style[L.DomUtil.TRANSFORM].split("matrix3d")[1].slice(1,-1).split(","),o=e[0],i=e[1],n=e[4],a=e[5],r=o*a-i*n,s=L.TrigUtil.calcAngle(o,i,"rad");return r<0&&(s+=s<0?Math.PI:-Math.PI),s<0&&(s=2*Math.PI+s),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(s)):L.Util.formatNum(s,2)},setAngle:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"deg",o=this.getAngle(e),i=t-o;return this.rotateBy(i,e),this},rotateBy:function(t){var e,o,i,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"deg",a=this._map,r=a.project(this.getCenter()),s={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)o=a.project(this.getCorner(e)).subtract(r),i=L.point(Math.cos(t)*o.x-Math.sin(t)*o.y,Math.sin(t)*o.x+Math.cos(t)*o.y),s[e]=a.unproject(i.add(r));return this.setCorners(s),this},dragBy:function(t,e){var o,i,n=this._map,a={},r=n.project(t).subtract(n.project(e));for(o=0;o<4;o++)i=n.project(this.getCorner(o)).subtract(r),a[o]=n.unproject(i);this.setCorners(a)},restore:function(){for(var t=this._map,e=this._initialDimensions.center,o=this._initialDimensions.offset,i=this._initialDimensions.zoom,n=[e.subtract(o),e.add(L.point(o.x,-o.y)),e.add(L.point(-o.x,o.y)),e.add(o)],a=0;a<4;a++)t.unproject(n[a],i).equals(this.getCorner(a))||this.setCorner(a,t.unproject(n[a],i));return this.edited=!1,this.fire("restore"),this},_getTranslateString:function(t){var e=L.Browser.webkit3d,o=(e?",0":"")+")";return"translate"+(e?"3d":"")+"("+t.x+"px,"+t.y+"px"+o},_reset:function(){var t=this._map,e=this.getElement(),o=L.bind(t.latLngToLayerPoint,t),i=this._calculateProjectiveTransform(o),n=o(this.getCorner(0)),a=L.DomUtil.getMatrixString(i),r=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[r,a].join(" "),e.style[L.DomUtil.TRANSFORM+"-origin"]="0 0 0",this.rotation.deg=this.getAngle(),this.rotation.rad=this.getAngle("rad")},_animateZoom:function(t){var e=this._map,o=this.getElement(),i=function(o){return e._latLngToNewLayerPoint(o,t.zoom,t.center)},n=this._calculateProjectiveTransform(i),a=i(this.getCorner(0)),r=L.DomUtil.getMatrixString(n),s=this._getTranslateString(a);o._leaflet_pos=a,o.style[L.DomUtil.TRANSFORM]=[s,r].join(" ")},getCorners:function(){return this._corners},getCorner:function(t){return this._corners[t]},getCenter:function(){var t=this._map,e=this.getCorners().reduce((function(e,o){return e.add(t.project(o))}),L.point(0,0));return t.unproject(e.divideBy(4))},_calculateProjectiveTransform:function(t){var e,o=t(this.getCorner(0)),i=this.getElement().offsetWidth||500,n=this.getElement().offsetHeight||375,a=[];for(e=0;e<4;e++)a.push(t(this.getCorner(e))._subtract(o));return L.MatrixUtil.general2DProjection(0,0,a[0].x,a[0].y,i,0,a[1].x,a[1].y,0,n,a[2].x,a[2].y,i,n,a[3].x,a[3].y)}}),L.distortableImageOverlay=function(t,e){return new L.DistortableImageOverlay(t,e)},L.Map.addInitHook((function(){L.DomUtil.hasClass(this.getContainer(),"ldi")||L.DomUtil.addClass(this.getContainer(),"ldi")}))},782:function(){var t=this;L.DomUtil=L.DomUtil||{},L.DistortableImage=L.DistortableImage||{},L.distortableImage=L.DistortableImage,L.DistortableImage.Keymapper=L.Handler.extend({options:{position:"topright"},initialize:function(t,e){this._map=t,L.setOptions(this,e)},addHooks:function(){this._keymapper||(this._container=this._buildContainer(),this._scrollWrapper=this._wrap(),this._toggler=this._createButton(),this._setMapper(this._container,this._scrollWrapper,this._toggler),L.DomEvent.on(this._toggler,"click",this._toggleKeymapper,this),L.DomEvent.disableClickPropagation(this._container),L.DomEvent.disableScrollPropagation(this._container))},removeHooks:function(){this._keymapper&&(L.DomEvent.off(this._toggler,"click",this._toggleKeymapper,this),L.DomUtil.remove(this._toggler),L.DomUtil.remove(this._scrollWrapper),L.DomUtil.remove(this._container),this._keymapper=!1)},_buildContainer:function(){var t=L.DomUtil.create("div","ldi-keymapper-hide");t.setAttribute("id","ldi-keymapper");var e=L.DomUtil.create("br","divider");return t.appendChild(e),t},_createButton:function(){var t=L.DomUtil.create("a","");return t.innerHTML=L.IconUtil.create("keyboard_open"),t.setAttribute("id","toggle-keymapper"),t.setAttribute("href","#"),t.setAttribute("title","Show keymap"),t.setAttribute("role","button"),t.setAttribute("aria-label","Show keymap"),t},_wrap:function(){var t=L.DomUtil.create("div","");return t.setAttribute("id","keymapper-wrapper"),t.style.display="none",t},_setMapper:function(t,e,o){this._keymapper=L.control({position:this.options.position}),this._keymapper.onAdd=function(){return t.appendChild(e),e.insertAdjacentHTML("beforeend",'
Rotate Mode
R
RotateScale Mode
r
Scale Mode
s
Distort Mode
d
Drag Mode
D
Lock (Mode) / Unlock Image
l u
Stack up / down
q a
Add / Remove Image Border
b
Toggle Opacity
o
Deselect All
esc
Delete Image(s)
delete backspace
Export Image(s)
e
'),t.appendChild(o),t},this._keymapper.addTo(this._map)},_toggleKeymapper:function(t){t.preventDefault(),this._container.className="ldi-keymapper leaflet-control"===this._container.className?"ldi-keymapper-hide leaflet-control":"ldi-keymapper leaflet-control",this._scrollWrapper.style.display="none"===this._scrollWrapper.style.display?"block":"none",this._toggler.innerHTML="close"===this._toggler.innerHTML?L.IconUtil.create("keyboard_open"):"close",L.IconUtil.toggleTitle(this._toggler,"Show keymap","Hide keymap"),L.DomUtil.toggleClass(this._toggler,"close-icon")},_injectIconSet:function(){if(!document.querySelector("#keymapper-iconset")){var t=L.DomUtil.create("div","");t.id="keymapper-iconset",t.setAttribute("hidden","hidden"),this._iconset=(new L.KeymapperIconSet).render(),t.innerHTML=this._iconset,document.querySelector(".leaflet-control-container").appendChild(t)}}}),L.DistortableImage.Keymapper.addInitHook((function(){L.DistortableImage.Keymapper.prototype._n=L.DistortableImage.Keymapper.prototype._n?L.DistortableImage.Keymapper.prototype._n+1:1,1!==L.DistortableImage.Keymapper.prototype._n||L.Browser.mobile||(t.enable(),t._injectIconSet())})),L.distortableImage.keymapper=function(t,e){return new L.DistortableImage.Keymapper(t,e)}},428:function(){L.DistortableImage=L.DistortableImage||{},L.DistortableCollection.Edit=L.Handler.extend({options:{keymap:L.distortableImage.group_action_map},initialize:function(t,e){this._group=t,this._exportOpts=t.options.exportOpts,L.setOptions(this,e),L.distortableImage.group_action_map.Escape="_decollectAll"},addHooks:function(){var t=this._group._map;this.editActions=this.options.actions,this.runExporter=L.bind(L.Utils.getNestedVal(this,"_exportOpts","exporter")||this.startExport,this),L.DomEvent.on(document,"keydown",this._onKeyDown,this),t.doubleClickZoom.enabled()||t.doubleClickLabels.enabled()||L.DomEvent.on(t,"click",this._decollectAll,this),L.DomEvent.on(t,{singleclickon:this._singleClickListeners,singleclickoff:this._resetClickListeners,singleclick:this._singleClick,boxcollectend:this._addCollections},this),this._group.editable=!0,this._group.eachLayer((function(t){return t.editing.enable()}))},removeHooks:function(){var t=this._group._map;L.DomEvent.off(document,"keydown",this._onKeyDown,this),t.doubleClickZoom.enabled()||t.doubleClickLabels.enabled()||L.DomEvent.off(t,"click",this._decollectAll,this),L.DomEvent.off(t,{singleclickon:this._singleClickListeners,singleclickoff:this._resetClickListeners,singleclick:this._singleClick,boxcollectend:this._addCollections},this),this._decollectAll(),this._group.editable=!1,this._group.eachLayer((function(t){return t.editing.disable()}))},enable:function(){return this._enabled=!0,this.addHooks(),this},disable:function(){return this._enabled=!1,this.removeHooks(),this},_onKeyDown:function(t){var e=this.options.keymap[t.key];this[e]&&this._group.anyCollected()&&this[e].call(this)},_singleClick:function(t){"singleclick"===t.type&&this._decollectAll(t)},_singleClickListeners:function(){var t=this._group._map;L.DomEvent.off(t,"click",this._decollectAll,this),L.DomEvent.on(t,"singleclick",this._decollectAll,this)},_resetClickListeners:function(){var t=this._group._map;L.DomEvent.on(t,"click",this._decollectAll,this),L.DomEvent.off(t,"singleclick",this._decollectAll,this)},_decollectAll:function(t){var e;t&&(e=t.originalEvent),e&&(e.shiftKey||e.target instanceof HTMLImageElement)||(this._group.eachLayer((function(t){L.DomUtil.removeClass(t.getElement(),"collected"),t.deselect()})),this._removeToolbar(),t&&L.DomEvent.stopPropagation(t))},_unlockGroup:function(){var t=this;this.hasTool(L.UnlockAction)&&this._group.eachLayer((function(e){t._group.isCollected(e)&&(e.editing._unlock(),e.deselect())}))},_lockGroup:function(){var t=this;this.hasTool(L.LockAction)&&this._group.eachLayer((function(e){t._group.isCollected(e)&&(e.editing._lock(),L.DomUtil.addClass(e.getElement(),"collected"))}))},_addCollections:function(t){var e=this,o=t.boxCollectBounds,i=this._group._map;this._group.eachLayer((function(t){var n=t.editing;t.isSelected()&&t.deselect();var a=i.getZoom(),r=i.getCenter(),s=L.latLngBounds(t.getCorner(2),t.getCorner(1));s=i._latLngBoundsToNewLayerBounds(s,a,r),o.intersects(s)&&n.enabled()&&(e.toolbar||e._addToolbar(),L.DomUtil.addClass(t.getElement(),"collected"))}))},_removeGroup:function(t){var e=this;if(this.hasTool(L.DeleteAction)){var o=this._group._toRemove(),i=o.length;0!==i&&(L.DomUtil.confirmDeletes(i)&&(o.forEach((function(t){e._group.removeLayer(t)})),this._group.anyCollected()||this._removeToolbar()),t&&L.DomEvent.stopPropagation(t))}},cancelExport:function(){this.customCollection||(this._exportOpts.collection=void 0),clearInterval(this.updateInterval)},_addToolbar:function(){var t=this._group,e=t._map;t.options.suppressToolbar||this.toolbar||(this.toolbar=L.distortableImage.controlBar({actions:this.editActions,position:"topleft"}).addTo(e,t))},_removeToolbar:function(){var t=this._group._map;if(!this.toolbar)return!1;t.removeLayer(this.toolbar),this.toolbar=!1},hasTool:function(t){return this.editActions.some((function(e){return e===t}))},addTool:function(t){return"leaflet-toolbar-icon"!==t.baseClass||this.hasTool(t)||(this._removeToolbar(),this.editActions.push(t),this._addToolbar()),this},removeTool:function(t){var e=this;return this.editActions.some((function(o,i){return e.editActions[i]===t&&(e._removeToolbar(),e.editActions.splice(i,1),e._addToolbar(),!0)})),this},startExport:function(){var t=this;if(this.hasTool(L.ExportAction))return new Promise((function(e){var o,i=t._exportOpts;i.resolve=e,t.updateInterval=null,t.customCollection=!!i.collection,t.customCollection||(i.collection=t._group.generateExportJson().images),i.frequency=i.frequency||3e3,i.scale=i.scale||100,i.updater=i.updater||function(n){(n=JSON.parse(n)).status_url&&(o!==n.status_url&&n.status_url.match(".json")&&(o=n.status_url),"complete"===n.status&&(clearInterval(t.updateInterval),t.customCollection||(t._exportOpts.collection=void 0),e(),null!==n.jpg&&alert("Export succeeded. "+i.exportUrl+n.jpg)),console.log(n))},i.handleStatusRes=i.handleStatusRes||function(e){o=i.statusUrl+e,t.updateInterval=setInterval((function(){var t=new Request("".concat(o,"?").concat(Date.now()),{method:"GET"});fetch(t).then((function(t){if(t.ok)return t.text()})).then(i.updater)}),i.frequency)},i.fetchStatusUrl=i.fetchStatusUrl||function(t){var e=new FormData;e.append("collection",JSON.stringify(t.collection)),e.append("scale",t.scale),e.append("upload",!0);var o={method:"POST",body:e},i=new Request(t.exportStartUrl,o);fetch(i).then((function(t){if(t.ok)return t.text()})).then(t.handleStatusRes)},i.fetchStatusUrl(i)}))}}),L.distortableCollection.edit=function(t,e){return new L.DistortableCollection.Edit(t,e)}},397:function(){L.DistortableImage=L.DistortableImage||{},L.DistortableImage.Edit=L.Handler.extend({options:{opacity:.5,outline:"1px solid red",keymap:L.distortableImage.action_map},initialize:function(t,e){this._overlay=t,this._toggledImage=!1,this._mode=t.options.mode,this._transparent=!1,this._outlined=!1,this._opacity=e.opacity,L.setOptions(this,e),L.distortableImage.action_map.Escape="_deselect"},addHooks:function(){var t=this._overlay;this.editActions=this.options.actions,t.bringToFront(),this._initModes(),this._initHandles(),this._appendHandlesandDragable(),t.isSelected()&&!t.options.suppressToolbar&&this._addToolbar(),this.parentGroup=!!t.eP&&t.eP,L.DomEvent.on(t.getElement(),{dblclick:this.nextMode},this),L.DomEvent.on(window,"keydown",this._onKeyDown,this)},removeHooks:function(){var t=this._overlay,e=this.parentGroup;for(var o in this._disableDragging(),this.toolbar&&this._removeToolbar(),this._handles)L.DomUtil.remove(o);L.DomUtil.hasClass(t.getElement(),"collected")&&L.DomUtil.removeClass(t.getElement(),"collected"),e&&!e.anyCollected()&&e.editing.toolbar&&e.editing._removeToolbar(),L.DomEvent.off(t.getElement(),{dblclick:this.nextMode},this),L.DomEvent.off(window,"keydown",this._onKeyDown,this)},disable:function(){return this._enabled?(this._overlay.deselect(),this._enabled=!1,this.removeHooks(),this):this},_initModes:function(){for(var t in this._modes={},L.DistortableImage.Edit.MODES){var e=L.DistortableImage.Edit.MODES[t];-1!==this.editActions.indexOf(e)&&(this._modes[t]=e)}this._modes[this._mode]||(this._mode=Object.keys(this._modes)[0])},_initHandles:function(){var t,e=this._overlay;for(this._dragHandles=L.layerGroup(),t=0;t<4;t++)this._dragHandles.addLayer(L.dragHandle(e,t));for(this._scaleHandles=L.layerGroup(),t=0;t<4;t++)this._scaleHandles.addLayer(L.scaleHandle(e,t));for(this._distortHandles=L.layerGroup(),t=0;t<4;t++)this._distortHandles.addLayer(L.distortHandle(e,t));for(this._rotateHandles=L.layerGroup(),t=0;t<4;t++)this._rotateHandles.addLayer(L.rotateHandle(e,t));for(this._freeRotateHandles=L.layerGroup(),t=0;t<4;t++)this._freeRotateHandles.addLayer(L.freeRotateHandle(e,t));for(this._lockHandles=L.layerGroup(),t=0;t<4;t++)this._lockHandles.addLayer(L.lockHandle(e,t,{draggable:!1}));this._handles={drag:this._dragHandles,scale:this._scaleHandles,distort:this._distortHandles,rotate:this._rotateHandles,freeRotate:this._freeRotateHandles,lock:this._lockHandles}},_appendHandlesandDragable:function(){var t=this._overlay;this._mode?(this._updateHandle(),!t.isSelected()&&this.currentHandle&&this.currentHandle.eachLayer((function(t){t.setOpacity(0),t.dragging&&t.dragging.disable()})),this.isMode("lock")||this._enableDragging()):this._enableDragging()},_onKeyDown:function(t){var e=this.options.keymap[t.key],o=this._overlay,i=this.parentGroup;i&&i.anyCollected()||void 0===this[e]||o.options.suppressToolbar||o.isSelected()&&this.toolbar&&this[e].call(this)},replaceTool:function(t,e){var o=this;return"leaflet-toolbar-icon"!==e.baseClass||this.hasTool(e)||this.editActions.some((function(i,n){if(i===t){for(var a in o._removeToolbar(),o.editActions[n]=e,o._addToolbar(),L.DistortableImage.Edit.MODES)L.DistortableImage.Edit.MODES[a]===t?(delete o._modes[a],o._nextOrNone(a)):L.DistortableImage.Edit.MODES[a]===e&&(o._modes[a]=e);return!0}})),this},addTool:function(t){if("leaflet-toolbar-icon"===t.baseClass&&!this.hasTool(t)){for(var e in this._removeToolbar(),this.editActions.push(t),this._addToolbar(),L.DistortableImage.Edit.MODES)L.DistortableImage.Edit.MODES[e]===t&&(this._modes[e]=t);this._overlay.isSelected()||this._removeToolbar()}return this},hasTool:function(t){return this.editActions.some((function(e){return e===t}))},removeTool:function(t){var e=this;return this.editActions.some((function(o,i){if(o===t){for(var n in e._removeToolbar(),e.editActions.splice(i,1),e._addToolbar(),L.DistortableImage.Edit.MODES)L.DistortableImage.Edit.MODES[n]===t&&(delete e._modes[n],e._nextOrNone(n));return!0}})),this._overlay.isSelected()||this._removeToolbar(),this},_nextOrNone:function(t){this.isMode(t)&&(Object.keys(this.getModes()).length>=1?this.nextMode():("lock"===t&&this._enableDragging(),this._mode="",this._updateHandle()))},_removeToolbar:function(){var t=this._overlay._map;this.toolbar&&(t.removeLayer(this.toolbar),this.toolbar=!1)},_enableDragging:function(){var t=this,e=this._overlay,o=e._map;this.dragging=new L.Draggable(e.getElement()),this.dragging.enable(),this.dragging.on("dragstart",(function(){e.fire("dragstart"),t._removeToolbar()})),this.dragging._updatePosition=function(){var t,i,n=e.getCorner(0),a=this._newPos.subtract(o.latLngToLayerPoint(n)),r={};for(this.fire("predrag"),i=0;i<4;i++)t=o.latLngToLayerPoint(e.getCorner(i)),r[i]=o.layerPointToLatLng(t.add(a));e.setCorners(r),e.fire("drag"),this.fire("drag")},this.dragging.on("dragend",(function(){e.fire("dragend")}))},_disableDragging:function(){this.dragging&&(this.dragging.disable(),delete this.dragging)},_dragMode:function(){this.setMode("drag")},_scaleMode:function(){this.setMode("scale")},_distortMode:function(){this.setMode("distort")},_rotateMode:function(){this.setMode("rotate")},_freeRotateMode:function(){this.setMode("freeRotate")},_toggleLockMode:function(){this.isMode("lock")?this._unlock():this._lock()},_toggleOpacity:function(){var t=this._overlay.getElement();if(this.hasTool(L.OpacityAction)){this._transparent=!this._transparent;var e=this._transparent?this.options.opacity:1;L.DomUtil.setOpacity(t,e),t.setAttribute("opacity",e),this._refresh()}},_setOpacities:function(t){var e=this._overlay.getElement();this._opacity=t,this.hasTool(L.OpacitiesAction)&&(this._opacity<1?this._transparent=!0:this._transparent=!1,L.DomUtil.setOpacity(e,this._opacity),e.setAttribute("opacity",this._opacity),this._refresh())},_toggleBorder:function(){var t=this._overlay.getElement();if(this.hasTool(L.BorderAction)){this._outlined=!this._outlined;var e=this._outlined?this.options.outline:"none";t.style.outline=e,this._refresh()}},_toggleOrder:function(){this._toggledImage?this._stackUp():this._stackDown()},_removeOverlay:function(){var t=this._overlay,e=this.parentGroup;!this.isMode("lock")&&this.hasTool(L.DeleteAction)&&L.DomUtil.confirmDelete()&&(this._removeToolbar(),e?e.removeLayer(t):t._map.removeLayer(t))},_getExport:function(){var t=this._overlay,e=t._map,o=t.getElement();if(this.hasTool(L.ExportAction)){var i=new Image;i.id=i.id||"tempId12345",document.body.appendChild(i),i.onload=function(){var o=i.height,n=i.width,a=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),s=e.latLngToLayerPoint(t.getCorner(2)),l=e.latLngToLayerPoint(t.getCorner(3));i.onload=function(){L.DomUtil.remove(i)},window&&window.hasOwnProperty("warpWebGl")&&warpWebGl(i.id,[0,0,n,0,n,o,0,o],[a.x,a.y,r.x,r.y,l.x,l.y,s.x,s.y],!0)},i.src=t.options.fullResolutionSrc||o.src}},_stackUp:function(){this._toggledImage&&this.hasTool(L.StackAction)&&(this._toggledImage=!1,this._overlay.bringToFront(),this._refresh())},_stackDown:function(){!this._toggledImage&&this.hasTool(L.StackAction)&&(this._toggledImage=!0,this._overlay.bringToBack(),this._refresh())},_unlock:function(){var t=this._overlay,e=t._map,o=this.parentGroup;this.isMode("lock")&&((!o||o.isCollected(t))&&o||this.hasTool(L.LockAction))&&(this.currentHandle&&e.removeLayer(this.currentHandle),"lock"!==t.options.mode&&this.hasMode(t.options.mode)?this._mode=t.options.mode:(this._mode="",this.currentHandle=""),this._updateHandle(),this._enableDragging(),this._refresh())},_lock:function(){var t=this._overlay,e=t._map,o=this.parentGroup;this.isMode("lock")||((!o||o.isCollected(t))&&o||this.hasTool(L.LockAction))&&(this.currentHandle&&e.removeLayer(this.currentHandle),this._mode="lock",this._updateHandle(),this._disableDragging(),this._refresh())},_deselect:function(){this._overlay.deselect()},_showMarkers:function(t){var e=this.parentGroup;this.currentHandle&&(!this.isMode("lock")&&e&&e.anyCollected()||this.currentHandle.eachLayer((function(t){t.setOpacity(1),t.dragging&&t.dragging.enable(),L.DomUtil.addClass(t.getElement(),"leaflet-interactive")})))},_hideMarkers:function(){var t=this._overlay,e=this.parentGroup;this._handles||this._initHandles(),this.currentHandle&&(this.isMode("lock")&&e&&e.isCollected(t)||this.currentHandle.eachLayer((function(t){t.setOpacity(0),t.dragging&&t.dragging.disable(),L.DomUtil.removeClass(t.getElement(),"leaflet-interactive")})))},_updateHandle:function(){var t=this._overlay._map,e=this.getMode();this.currentHandle&&t.removeLayer(this.currentHandle),this.currentHandle=""===e?"":this._handles[e],""!==this.currentHandle&&t.addLayer(this.currentHandle)},_addToolbar:function(){var t=this._overlay,e=this.parentGroup,o=t._map,i=t.getCorners(),n=-1/0;if(e&&e.anyCollected())e.editing._addToolbar();else if(!t.options.suppressToolbar&&!this.toolbar){for(var a=0;an&&(n=i[a].lat);var r=t.getCenter();r.lat=n,this.toolbar=L.distortableImage.popupBar(r,{actions:this.editActions}).addTo(o,t),t.fire("toolbar:created")}},_refresh:function(){this.toolbar&&this._removeToolbar(),this._addToolbar()},_updateToolbarPos:function(){var t=this._overlay,e=t.getCorners(),o=this.toolbar,i=-1/0;if(o&&o instanceof L.DistortableImage.PopupBar){for(var n=0;ni&&(i=e[n].lat);var a=t.getCenter();a.lat=i,t.options.suppressToolbar||this.toolbar.setLatLng(a)}},hasMode:function(t){return!!this._modes[t]},getMode:function(){if(this.enabled())return this._mode},getModes:function(){return this._modes},isMode:function(t){return!!this.enabled()&&this._mode===t},setMode:function(t){var e=this._overlay,o=this.parentGroup;if(this.getMode()!==t&&this.hasMode(t)&&this.enabled())return this.toolbar&&this.toolbar.clickTool(t),this.isMode("lock")&&!this.dragging&&this._enableDragging(),this._mode=t,this.isMode("lock")&&this._disableDragging(),this._updateHandle(),this._refresh(),o&&o.isCollected(e)&&e.deselect(),this},nextMode:function(t){var e=this.getMode(),o=this.parentGroup,i=Object.keys(this.getModes()),n=i.indexOf(e),a=i[(n+1)%i.length];if(t){if(o&&o.anyCollected())return;L.DomEvent.stop(t)}return this.setMode(a)}}),L.distortableImage.edit=function(t,e){return new L.DistortableImage.Edit(t,e)}},426:function(){L.BorderAction=L.EditAction.extend({initialize:function(t,e,o){var i,n,a=e.editing,r=a._mode;a._outlined?(i="border_outer",n=e.options.translation.removeBorder):(i="border_clear",n=e.options.translation.addBorder),(o=o||{}).toolbarIcon={svg:!0,html:i,tooltip:n,className:"lock"===r?"disabled":""},L.DistortableImage.action_map.b="lock"===r?"":"_toggleBorder",L.EditAction.prototype.initialize.call(this,t,e,o)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"border_clear","border_outer"),L.IconUtil.toggleTitle(this._link,"Remove Border","Add Border"),t._toggleBorder()}})},114:function(){L.DeleteAction=L.EditAction.extend({initialize:function(t,e,o){var i,n=e.editing;n instanceof L.DistortableImage.Edit?(i=e.options.translation.deleteImage,L.DistortableImage.action_map.Backspace="lock"===n._mode?"":"_removeOverlay"):(i=e.options.translation.deleteImages,L.DistortableImage.group_action_map.Backspace="lock"===n._mode?"":"_removeGroup"),(o=o||{}).toolbarIcon={svg:!0,html:"delete_forever",tooltip:i,className:"lock"===n._mode?"disabled":""},L.EditAction.prototype.initialize.call(this,t,e,o)},addHooks:function(){var t=this._overlay.editing;t instanceof L.DistortableImage.Edit?t._removeOverlay():t._removeGroup()}})},231:function(){L.DistortAction=L.EditAction.extend({initialize:function(t,e,o){(o=o||{}).toolbarIcon={svg:!0,html:"distort",tooltip:e.options.translation.distortImage,className:"distort"},L.DistortableImage.action_map.d="_distortMode",L.EditAction.prototype.initialize.call(this,t,e,o)},addHooks:function(){this._overlay.editing._distortMode()}})},541:function(){L.DragAction=L.EditAction.extend({initialize:function(t,e,o){(o=o||{}).toolbarIcon={svg:!0,html:"drag",tooltip:e.options.translation.dragImage,className:"drag"},L.DistortableImage.action_map.D="_dragMode",L.EditAction.prototype.initialize.call(this,t,e,o)},addHooks:function(){this._overlay.editing._dragMode()}})},280:function(){L.DistortableImage=L.DistortableImage||{},L.distortableImage=L.DistortableImage,L.DistortableImage.action_map={},L.EditAction=L.Toolbar2.Action.extend({options:{toolbarIcon:{svg:!1,html:"",className:"",tooltip:""}},initialize:function(t,e,o){this._overlay=e,this._map=t,L.setOptions(this,o),L.Toolbar2.Action.prototype.initialize.call(this,o),this._injectIconSet()},_createIcon:function(t,e,o){var i=this,n=this.options.toolbarIcon,a=n.className,r=this._overlay.editing,s=this.options.toolbarIcon.style;this.toolbar=t,this._icon=L.DomUtil.create("li","",e),this._link=L.DomUtil.create("a","",this._icon),n.svg?this._link.innerHTML=L.IconUtil.create(n.html):this._link.innerHTML=n.html,this._link.setAttribute("href","#"),this._link.setAttribute("title",n.tooltip),s&&this._link.setAttribute("style",s),this._link.setAttribute("role","button"),L.DomUtil.addClass(this._link,this.constructor.baseClass),a&&(L.DomUtil.addClass(this._link,a),"disabled"===a&&L.DomUtil.addClass(this._icon,a),a===r._mode?L.DomUtil.addClass(this._link,"selected-mode"):L.DomUtil.removeClass(this._link,"selected-mode")),L.DomEvent.on(this._link,"click",this.enable,this),L.DomEvent.on(this._overlay,"update",(function(){var t=i._link.innerHTML.match(/xlink:href="#restore"/);t&&1===t.length&&i._enableAction()})),this._addSubToolbar(t,this._icon,o)},_injectIconSet:function(){if(!document.querySelector("#iconset")){var t=document.createElement("div");t.id="iconset",t.setAttribute("hidden","hidden"),t.innerHTML=(new L.ToolbarIconSet).render(),document.querySelector(".leaflet-marker-pane").appendChild(t)}},_enableAction:function(){L.DomUtil.removeClass(this._link.parentElement,"disabled"),L.DomUtil.removeClass(this._link,"disabled")},_disableAction:function(){L.DomUtil.addClass(this._link.parentElement,"disabled"),L.DomUtil.addClass(this._link,"disabled")}}),L.editAction=function(t,e,o){return new L.EditAction(t,e,o)}},149:function(){L.ExportAction=L.EditAction.extend({initialize:function(t,e,o){var i,n=e.editing;this.isExporting=!1,this.mouseLeaveSkip=!0,this.isHooksExecuted=!1,n instanceof L.DistortableImage.Edit?(L.DistortableImage.action_map.e="_getExport",i=e.options.translation.exportImage):(L.DistortableImage.group_action_map.e="runExporter",i=e.options.translation.exportImages),(o=o||{}).toolbarIcon={svg:!0,html:"get_app",tooltip:i},L.EditAction.prototype.initialize.call(this,t,e,o)},addHooks:function(){var t=this._overlay.editing;if(t instanceof L.DistortableImage.Edit)t._getExport();else if(!this.isHooksExecuted){this.isHooksExecuted=!0;var e=this._link.parentElement;this.mouseEnterHandler=this.handleMouseEnter.bind(this),this.mouseLeaveHandler=this.handleMouseLeave.bind(this),L.DomEvent.on(e,"click",(function(){if(this.isExporting){if(this.mouseLeaveSkip)return;this.resetState(),this.detachMouseEventListeners(e),t.cancelExport()}else this.isExporting=!0,this.renderExportIcon(),setTimeout(this.attachMouseEventListeners.bind(this,e),100),t.runExporter().then(function(){this.resetState(),this.detachMouseEventListeners(e)}.bind(this))}),this)}},resetState:function(){this.renderDownloadIcon(),this.isExporting=!1,this.mouseLeaveSkip=!0},attachMouseEventListeners:function(t){t.addEventListener("mouseenter",this.mouseEnterHandler),t.addEventListener("mouseleave",this.mouseLeaveHandler)},detachMouseEventListeners:function(t){t.removeEventListener("mouseenter",this.mouseEnterHandler),t.removeEventListener("mouseleave",this.mouseLeaveHandler)},handleMouseEnter:function(){this.renderCancelIcon()},handleMouseLeave:function(){this.mouseLeaveSkip?this.mouseLeaveSkip=!1:this.renderExportIcon()},renderDownloadIcon:function(){L.IconUtil.toggleXlink(this._link,"get_app","spinner"),L.IconUtil.toggleTitle(this._link,"Export Images","Loading..."),L.DomUtil.removeClass(this._link.firstChild,"loader")},renderExportIcon:function(){L.IconUtil.toggleXlink(this._link,"spinner"),L.IconUtil.toggleTitle(this._link,"Export Images","Loading..."),L.IconUtil.addClassToSvg(this._link,"loader")},renderCancelIcon:function(){L.IconUtil.toggleXlink(this._link,"cancel"),L.IconUtil.toggleTitle(this._link,"Cancel Export","Loading..."),L.DomUtil.removeClass(this._link.firstChild,"loader")}})},74:function(){L.FreeRotateAction=L.EditAction.extend({initialize:function(t,e,o){(o=o||{}).toolbarIcon={svg:!0,html:"crop_rotate",tooltip:e.options.translation.freeRotateImage,className:"freeRotate"},L.DistortableImage.action_map.f="_freeRotateMode",L.EditAction.prototype.initialize.call(this,t,e,o)},addHooks:function(){this._overlay.editing._freeRotateMode()}})},691:function(){L.GeolocateAction=L.EditAction.extend({initialize:function(t,e,o){var i=e.editing;(o=o||{}).toolbarIcon={svg:!0,html:"explore",tooltip:e.options.translation.geolocateImage,className:"lock"===i._mode?"disabled":""},L.EditAction.prototype.initialize.call(this,t,e,o)},addHooks:function(){var t=this._overlay.getElement();EXIF.getData(t,L.EXIF(t))}})},105:function(){L.LockAction=L.EditAction.extend({initialize:function(t,e,o){var i,n,a=e.editing;a instanceof L.DistortableImage.Edit?(L.DistortableImage.action_map.u="_unlock",L.DistortableImage.action_map.l="_lock",n=e.options.translation.lockMode,i=a.isMode("lock")?"lock":"unlock"):(L.DistortableImage.group_action_map.l="_lockGroup",n=e.options.translation.lockImages,i="lock"),(o=o||{}).toolbarIcon={svg:!0,html:i,tooltip:n,className:"lock"},L.EditAction.prototype.initialize.call(this,t,e,o)},addHooks:function(){var t=this._overlay.editing;t instanceof L.DistortableImage.Edit?t._toggleLockMode():t._lockGroup()}})},496:function(){var t=[100,80,60,40,20,0],e=new CSSStyleSheet;e.replaceSync(".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 "),e.insertRule(".leaflet-toolbar-1 li:first-child a {\n border-radius: 4px 4px 0px 0px !important;\n }"),document.adoptedStyleSheets=[e],t=t.map((function(t){return(isNaN(t)||t>100)&&(t=100),t<0&&(t=0),L.EditAction.extend({options:{toolbarIcon:{html:t,tooltip:"Opacity "+t+"%",className:"leaflet-toolbar-icon-vertical",style:"background-color:rgb("+(100-t)+"%,"+(100-t)+"%,"+(100-t)+"%);"}},addHooks:function(){this._overlay.editing._setOpacities(t/100)}})})),L.OpacitiesToolbar2=L.Toolbar2.extend({options:{className:"",filter:function(){return!0},actions:[],style:"translate(-1px, -".concat(30*(t.length+1),"px)")},appendToContainer:function(t){var e,o,i,n,a=this.constructor.baseClass+"-"+this._calculateDepth()+" "+this.options.className;for(this._container=t,this._ul=L.DomUtil.create("ul",a,t),this._ul.style.transform=this.options.style?this.options.style:"",this._disabledEvents=["click","mousemove","dblclick","mousedown","mouseup","touchstart"],o=0,n=this._disabledEvents.length;or||a>1?t.scaleBy(a):t.scaleBy(1)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.freeRotateHandle=function(t,e,o){return new L.FreeRotateHandle(t,e,o)}},789:function(){L.LockHandle=L.EditHandle.extend({options:{TYPE:"lock",interactive:!1,icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAD8SURBVO3BPU7CYAAA0AdfjIcQlRCQBG7C3gk2uIPG2RC3Dk16Gz0FTO1WZs/gwGCMP/2+xsSl7+n1er1Iz9LtRQjaPeMeO+TinLDCJV78YqjdA04YodKuxhUaPGoRxMmxwRQZSt87Yo4KExGCeAUyLLFB4bMacxywEClIU2KDKXbInTUYo8JCgoFuGoxQO5uiwY1EA91VmDqrcKeDoX8WdNNgjApvmGGLXKIgXY0xGkxQYItrrFFIEKQ5Yo4KEx9yrDFDhlKkIF6NOQ5Y+KpAhiXWKEQI4pxwiwoLPyuxwQw75FoE7fZYocFEuwI7jHCBV39gL92TXq/Xi/AOcmczZmaIMScAAAAASUVORK5CYII=",iconSize:[32,32],iconAnchor:[16,16]})},onRemove:function(t){this.unbindTooltip(),L.EditHandle.prototype.onRemove.call(this,t)},_bindListeners:function(){var t=this.getElement();L.EditHandle.prototype._bindListeners.call(this),L.DomEvent.on(t,{mousedown:this._tooltipOn,mouseup:this._tooltipOff},this),L.DomEvent.on(document,"pointerleave",this._tooltipOff,this)},_unbindListeners:function(){var t=this.getElement();L.EditHandle.prototype._bindListeners.call(this),L.DomEvent.off(t,{mousedown:this._tooltipOn,mouseup:this._tooltipOff},this),L.DomEvent.off(document,"pointerleave",this._tooltipOff,this)},_onHandleDrag:function(){},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))},_tooltipOn:function(t){var e=this._handled.parentGroup,o=e?e.editing:this._handled.editing;if(!t.shiftKey&&(this._handled.isSelected()||!e||e.isCollected(this._handled))){var i=o._lockHandles;this._timer=setTimeout(L.bind((function(){this._timeout&&clearTimeout(this._timeout),this.getTooltip()?i.eachLayer((function(t){this!==t&&t.closeTooltip()})):this.bindTooltip("Locked!",{permanent:!0}),this.openTooltip()}),this),500)}},_tooltipOff:function(t){var e=this._handled.parentGroup,o=e?e.editing:this._handled.editing;if(!t.shiftKey&&(this._handled.isSelected()||!e||e.isCollected(this._handled))){var i=o._lockHandles;t.currentTarget===document&&i.eachLayer((function(t){t.closeTooltip()})),this._timer&&clearTimeout(this._timer),this._timeout=setTimeout(L.bind((function(){this.closeTooltip()}),this),400)}}}),L.lockHandle=function(t,e,o){return new L.LockHandle(t,e,o)}},337:function(){L.RotateHandle=L.EditHandle.extend({options:{TYPE:"rotate",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),o=this.getLatLng(),i=this.calculateAngleDelta(e,o);t.rotateBy(i,"rad")},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.rotateHandle=function(t,e,o){return new L.RotateHandle(t,e,o)}},350:function(){L.ScaleHandle=L.EditHandle.extend({options:{TYPE:"scale",icon:L.icon({iconUrl:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI0NTkiIGhlaWdodD0iNDY0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA1MTIgNTEyIiB4bWw6c3BhY2U9InByZXNlcnZlIiBzdHlsZT0iIj48cmVjdCBpZD0iYmFja2dyb3VuZHJlY3QiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHg9IjAiIHk9IjAiIGZpbGw9Im5vbmUiIHN0cm9rZT0ibm9uZSIgY2xhc3M9IiIgc3R5bGU9IiIvPjxnIGNsYXNzPSJjdXJyZW50TGF5ZXIiIHN0eWxlPSIiPjx0aXRsZT5MYXllciAxPC90aXRsZT48cGF0aCBkPSJNNDU5LjA0OTE1OTUzMDQ3MTM0LDg2LjkyNjIzNDUxMjU1MDAyIFYwIGgtODUuNzE0NTczMzU2MzEyMDkgdjI3LjA0MzcxNzQwMzkwNDQ1MiBIODUuNzE0NTczMzU2MzEyMDMgVjAgSDAgdjg2LjkyNjIzNDUxMjU1MDAyIGgyNS43MTQzNzIwMDY4OTM2MjYgdjI4OS43NTQxMTUwNDE4MzM0IEgwIHY4Ni45MjYyMzQ1MTI1NTAwMiBoODUuNzE0NTczMzU2MzEyMDkgdi0yNy4wNDM3MTc0MDM5MDQ0NTIgaDI4NS43MTUyNDQ1MjEwNDAzIHYyNy4wNDM3MTc0MDM5MDQ0NTIgaDg1LjcxNDU3MzM1NjMxMjA5IHYtODYuOTI2MjM0NTEyNTUwMDIgaC0yMy44MDk2MDM3MTAwODY2OSBWODYuOTI2MjM0NTEyNTUwMDIgSDQ1OS4wNDkxNTk1MzA0NzEzNCB6TTM4NC43NjMxOTU5NTUwMDA5LDEyLjU1NjAxMTY1MTgxMjc4MSBoNjEuOTA0OTY5NjQ2MjI1Mzk2IHY2Mi43ODAwNTgyNTkwNjM5MSBoLTYxLjkwNDk2OTY0NjIyNTM5NiBWMTIuNTU2MDExNjUxODEyNzgxIHpNMTIuMzgwOTkzOTI5MjQ1MDUsMTIuNTU2MDExNjUxODEyNzgxIGg2MS45MDQ5Njk2NDYyMjUzOTYgdjYyLjc4MDA1ODI1OTA2MzkxIEgxMi4zODA5OTM5MjkyNDUwNSBWMTIuNTU2MDExNjUxODEyNzgxIHpNNzQuMjg1OTYzNTc1NDcwNTMsNDUxLjA1MDU3MjQxNTEyMDY2IEgxMi4zODA5OTM5MjkyNDUwNSB2LTYyLjc4MDA1ODI1OTA2MzkxIGg2MS45MDQ5Njk2NDYyMjUzOTYgVjQ1MS4wNTA1NzI0MTUxMjA2NiB6TTQ0NS43MTU3ODE0NTI4MjI3NCw0NTEuMDUwNTcyNDE1MTIwNjYgaC02Mi44NTczNTM3OTQ2Mjg4NjQgdi02Mi43ODAwNTgyNTkwNjM5MSBoNjIuODU3MzUzNzk0NjI4ODY0IFY0NTEuMDUwNTcyNDE1MTIwNjYgek00MDcuNjIwNDE1NTE2Njg0MjYsMzc2LjY4MDM0OTU1NDM4MzQ0IGgtMzYuMTkwNTk3NjM5MzMxNzcgdjMyLjgzODc5OTcwNDc0MTEyIEg4NS43MTQ1NzMzNTYzMTIwMyB2LTMyLjgzODc5OTcwNDc0MTEyIEg0OS41MjM5NzU3MTY5ODAzMiBWODYuOTI2MjM0NTEyNTUwMDIgaDM2LjE5MDU5NzYzOTMzMTc3IFY1MC4yMjQwNDY2MDcyNTExMjUgaDI4Ny42MjAwMTI4MTc4NDcyIHYzNi43MDIxODc5MDUyOTg5IGgzNC4yODU4MjkzNDI1MjQ4MzUgVjM3Ni42ODAzNDk1NTQzODM0NCB6IiBpZD0ic3ZnXzIiIGNsYXNzPSIiIGZpbGw9IiMxYTFhZWIiIGZpbGwtb3BhY2l0eT0iMSIvPjwvZz48L3N2Zz4=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t._map,o=t.edgeMinWidth,i=t.getCorner(this._corner),n=this.getLatLng(),a=this._calculateScalingFactor(i,n);o||(o=50);var r=e.latLngToLayerPoint(t.getCorner(0)),s=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(r.x-s.x),c=Math.abs(r.y-s.y);Math.sqrt(l*l+c*c)>o||a>1?t.scaleBy(a):t.scaleBy(1)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.scaleHandle=function(t,e,o){return new L.ScaleHandle(t,e,o)}},719:function(){L.distortableImage=L.DistortableImage||{},L.distortableImage=L.DistortableImage,L.DistortableImage.group_action_map={},L.DistortableImage.ControlBar=L.Toolbar2.Control.extend({}),L.distortableImage.controlBar=function(t){return new L.DistortableImage.ControlBar(t)},L.DistortableCollection.addInitHook((function(){this.ACTIONS=[L.ExportAction,L.DeleteAction,L.LockAction,L.UnlockAction],L.DistortableCollection.Edit.MODES={lock:L.LockAction,unlock:L.UnlockAction};var t=this.options.actions?this.options.actions:this.ACTIONS;this.editing=L.distortableCollection.edit(this,{actions:t})}))},93:function(){L.DistortableImage=L.DistortableImage||{},L.distortableImage=L.DistortableImage,L.DistortableImage.action_map={},L.DistortableImage.PopupBar=L.Toolbar2.Popup.extend({options:{anchor:[0,-10]},initialize:function(t,e){L.setOptions(this,e),L.Toolbar2.Popup.prototype.initialize.call(this,t,e)},addHooks:function(t,e){this.map=t,this.ov=e},tools:function(){if(this._ul)return this._ul.children},clickTool:function(t){for(var e=this.tools(),o=0;o',_symbols:"",render:function(){return this.addSymbols(this._symbols),this._svg},addSymbols:function(t){this._svg+=t}})},261:function(){L.KeymapperIconSet=L.IconSet.extend({_symbols:''})},929:function(){L.ToolbarIconSet=L.IconSet.extend({_symbols:''})},998:function(){L.Map.mergeOptions({boxCollector:!0,boxZoom:!1}),L.Map.BoxCollector=L.Map.BoxZoom.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane,this._resetStateTimeout=0,t.on("unload",this._destroy,this)},addHooks:function(){L.DomEvent.on(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){L.DomEvent.off(this._container,"mousedown",this._onMouseDown,this)},moved:function(){return this._moved},_destroy:function(){L.DomUtil.remove(this._pane),delete this._pane},_resetState:function(){this._resetStateTimeout=0,this._moved=!1},_clearDeferredResetState:function(){0!==this._resetStateTimeout&&(clearTimeout(this._resetStateTimeout),this._resetStateTimeout=0)},_onMouseDown:function(t){if(!t.shiftKey||1!==t.which&&1!==t.button)return!1;this._clearDeferredResetState(),this._resetState(),L.DomUtil.disableTextSelection(),L.DomUtil.disableImageDrag(),this._startPoint=this._map.mouseEventToContainerPoint(t),L.DomEvent.on(document,{contextmenu:L.DomEvent.stop,mousemove:this._onMouseMove,mouseup:this._onMouseUp},this)},_onMouseMove:function(t){this._moved||(this._moved=!0,this._box=L.DomUtil.create("div","leaflet-zoom-box",this._container),L.DomUtil.addClass(this._container,"leaflet-crosshair"),this._map.fire("boxzoomstart")),this._point=this._map.mouseEventToContainerPoint(t),this._bounds=L.bounds(this._startPoint,this._point);var e=this._bounds.getSize();L.DomUtil.setPosition(this._box,this._bounds.min),this._box.style.width=e.x+"px",this._box.style.height=e.y+"px"},_finish:function(){this._moved&&(L.DomUtil.remove(this._box),L.DomUtil.removeClass(this._container,"leaflet-crosshair")),L.DomUtil.enableTextSelection(),L.DomUtil.enableImageDrag(),L.DomEvent.off(document,{contextmenu:L.DomEvent.stop,mousemove:this._onMouseMove,mouseup:this._onMouseUp},this)},_onMouseUp:function(t){if((1===t.which||1===t.button)&&(this._finish(),this._moved)){this._clearDeferredResetState(),this._resetStateTimeout=setTimeout(L.Util.bind(this._resetState,this),0);var e=L.latLngBounds(this._map.containerPointToLatLng(this._bounds.getBottomLeft()),this._map.containerPointToLatLng(this._bounds.getTopRight())),o=this._map.getZoom(),i=this._map.getCenter();e=this._map._latLngBoundsToNewLayerBounds(e,o,i),this._map.fire("boxcollectend",{boxCollectBounds:e})}}}),L.Map.addInitHook("addHandler","boxCollector",L.Map.BoxCollector)},291:function(){L.Map.mergeOptions({doubleClickLabels:!1}),L.Map.DoubleClickLabels=L.Handler.extend({addHooks:function(){},removeHooks:function(){}}),L.Map.addInitHook("addHandler","doubleClickLabels",L.Map.DoubleClickLabels)},131:function(){L.Map.include({_clicked:0,addGoogleMutant:function(t){return(t=this.mutantOptions=L.extend({mutantOpacity:.8,maxZoom:24,maxNativeZoom:20,minZoom:0,labels:!0,labelOpacity:1,doubleClickLabels:!0},t)).labels||(this.mutantOptions=L.extend(this.mutantOptions,{labelOpacity:t.labels?1:void 0,doubleClickLabels:!!t.labels||void 0})),this._googleMutant=L.tileLayer("http://mt0.google.com/vt/lyrs=s&x={x}&y={y}&z={z}",{maxZoom:t.maxZoom,maxNativeZoom:t.maxNativeZoom,minZoom:t.minZoom,opacity:t.mutantOpacity}).addTo(this),t.labels?this._addLabels(t):this.doubleClickLabels=void 0,this},_addLabels:function(t){return 0!==t.labelOpacity&&1!==t.labelOpacity&&(t.labelOpacity=1),this._labels=L.tileLayer("https://stamen-tiles-{s}.a.ssl.fastly.net/toner-labels/{z}/{x}/{y}{r}.{ext}",{attribution:'Map tiles by Stamen Design, CC BY 3.0 — Map data © OpenStreetMap contributors',subdomains:"abcd",interactive:!1,opacity:t.labelOpacity,maxZoom:t.maxZoom,maxNativeZoom:t.maxNativeZoom,minZoom:t.minZoom,ext:"png"}).addTo(this),this.mutantOptions.doubleClickLabels&&this.doubleClickLabels.enable(),this}}),L.Map.addInitHook((function(){this.doubleClickLabels.disable(),this.doubleClickZoom.enable()}))},999:function(){L.DomUtil=L.extend(L.DomUtil,{initTranslation:function(t){this.translation=t},getMatrixString:function(t){var e=L.Browser.webkit3d||L.Browser.gecko3d||L.Browser.ie3d,o=[t[0],t[3],0,t[6],t[1],t[4],0,t[7],0,0,1,0,t[2],t[5],0,t[8]],i=e?"matrix3d("+o.join(",")+")":"";return e||console.log("Your browser must support 3D CSS transformsin order to use DistortableImageOverlay."),i},toggleClass:function(t,e){var o=e;return this.hasClass(t,o)?this.removeClass(t,o):this.addClass(t,o)},confirmDelete:function(){return window.confirm(this.translation.confirmImageDelete)},confirmDeletes:function(t){if(1===t)return this.confirmDelete();var e,o=this.translation.confirmImagesDeletes;return e="function"==typeof o?o(t):o,window.confirm(e)}})},85:function(){L.IconUtil={create:function(t){return/^#/.test(t)&&(t=t.replace(/^#/,"")),''},addClassToSvg:function(t,e){var o=t.querySelector("svg");o&&L.DomUtil.addClass(o,e)},toggleXlink:function(t,e,o){/^#/.test(e)||(e="#"+e),/^#/.test(o)||(o="#"+o);var i=t.querySelector("use");if(i){var n=i.getAttribute("xlink:href")===e?o:e;return i.setAttribute("xlink:href",n),n}return!1},toggleTitle:function(t,e,o){var i=t.getAttribute("title")===e?o:e;return t.setAttribute("title",i),t.hasAttribute("aria-label")&&t.setAttribute("aria-label",i),i}}},351:function(){L.ImageUtil={getCmPerPixel:function(t){var e=t._map;return 100*e.latLngToLayerPoint(t.getCorner(0)).distanceTo(e.latLngToLayerPoint(t.getCorner(1)))/t.getElement().width}}},360:function(){L.MatrixUtil={adj:function(t){return[t[4]*t[8]-t[5]*t[7],t[2]*t[7]-t[1]*t[8],t[1]*t[5]-t[2]*t[4],t[5]*t[6]-t[3]*t[8],t[0]*t[8]-t[2]*t[6],t[2]*t[3]-t[0]*t[5],t[3]*t[7]-t[4]*t[6],t[1]*t[6]-t[0]*t[7],t[0]*t[4]-t[1]*t[3]]},multmm:function(t,e){var o,i=[];for(o=0;o<3;o++)for(var n=0;n<3;n++){for(var a=0,r=0;r<3;r++)a+=t[3*o+r]*e[3*r+n];i[3*o+n]=a}return i},multmv:function(t,e){return[t[0]*e[0]+t[1]*e[1]+t[2]*e[2],t[3]*e[0]+t[4]*e[1]+t[5]*e[2],t[6]*e[0]+t[7]*e[1]+t[8]*e[2]]},multsm:function(t,e){for(var o=[],i=0,n=e.length;i2&&void 0!==arguments[2]?arguments[2]:"deg";return"deg"===o?this.radiansToDegrees(Math.atan2(e,t)):Math.atan2(e,t)},radiansToDegrees:function(t){return 180*t/Math.PI},degreesToRadians:function(t){return t*Math.PI/180}}},866:function(){L.Utils={initTranslation:function(){var t={deleteImage:"Delete Image",deleteImages:"Delete Images",distortImage:"Distort Image",dragImage:"Drag Image",exportImage:"Export Image",exportImages:"Export Images",removeBorder:"Remove Border",addBorder:"Add Border",freeRotateImage:"Free rotate Image",geolocateImage:"Geolocate Image",lockMode:"Lock Mode",lockImages:"Lock Images",makeImageOpaque:"Make Image Opaque",makeImageTransparent:"Make Image Transparent",restoreImage:"Restore Natural Image",rotateImage:"Rotate Image",scaleImage:"Scale Image",stackToFront:"Stack to Front",stackToBack:"Stack to Back",unlockImages:"Unlock Images",confirmImageDelete:"Are you sure? This image will be permanently deleted from the map.",confirmImagesDeletes:"Are you sure? These images will be permanently deleted from the map."};if(this.options.translation)for(var e in t)this.options.translation.hasOwnProperty(e)||(this.options.translation[e]=t[e]);else this.options.translation=t;L.DomUtil.initTranslation(this.options.translation)},getNestedVal:function(t,e,o){return[e,o].reduce((function(t,e){return t&&t[e]}),t)}}}};t[999](),t[85](),t[351](),t[360](),t[682](),t[866](),t[477](),t[808](),t[743](),t[988](),t[92](),t[194](),t[206](),t[789](),t[337](),t[350](),t[376](),t[261](),t[929](),t[280](),t[426](),t[114](),t[231](),t[541](),t[149](),t[74](),t[691](),t[105](),t[496](),t[944](),t[954](),t[178](),t[547](),t[886](),t[129](),t[93](),t[719](),t[397](),t[428](),t[782](),t[998](),t[291](),t[131]()}(); //# sourceMappingURL=leaflet.distortableimage.js.map \ No newline at end of file diff --git a/dist/leaflet.distortableimage.js.map b/dist/leaflet.distortableimage.js.map index 53f1012ec..a13d7b011 100644 --- a/dist/leaflet.distortableimage.js.map +++ b/dist/leaflet.distortableimage.js.map @@ -1 +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/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 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 // connects to JSON file and fetches JSON data therein from remote source\n async fetchRemoteJson(url) {\n let index = 0;\n const imgCollectionProps = [];\n\n try {\n const response = await axios.get(url);\n if (response.data.hasOwnProperty('avg_cm_per_pixel')) {\n if (response.data.collection.length > 1) {\n response.data.collection.forEach((data) => {\n imgCollectionProps[index] = data;\n index++;\n });\n return {\n avg_cm_per_pixel: response.data.avg_cm_per_pixel,\n imgCollectionProps,\n };\n }\n imgCollectionProps[index] = response.data.collection;\n\n return {\n avg_cm_per_pixel: response.data.avg_cm_per_pixel,\n imgCollectionProps,\n };\n } else {\n if (response.data.length > 1) {\n response.data.forEach((data) => {\n imgCollectionProps[index] = data;\n index++;\n });\n return {\n imgCollectionProps,\n };\n }\n imgCollectionProps[index] = response.data;\n\n return {\n imgCollectionProps,\n };\n }\n } catch (err) {\n console.log('err', err);\n }\n },\n\n // expects url in this format: https://archive.org/download/mkl-1/mkl-1.json\n async recreateImagesFromJsonUrl(url) {\n let imageCollectionObj = {};\n\n if (url) {\n imageCollectionObj = await this.fetchRemoteJson(url);\n return imageCollectionObj;\n };\n\n return imageCollectionObj;\n },\n\n generateExportJson(allImages = false) {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (allImages || this.isCollected(layer)) {\n const sections = layer._image.src.split('/');\n const filename = sections[sections.length - 1];\n const zc = layer.getCorners();\n\n const corners = [\n {lat: zc[0].lat, lon: zc[0].lng || zc[0].lon},\n {lat: zc[1].lat, lon: zc[1].lng || zc[1].lon},\n {lat: zc[3].lat, lon: zc[3].lng || zc[3].lon},\n {lat: zc[2].lat, lon: zc[2].lng || zc[2].lon},\n ];\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 tooltipText: layer.getTooltipText(),\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 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 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 interactive: true,\n tooltipText: '',\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 this.interactive = this.options.interactive;\n this.tooltipText = this.options.tooltipText;\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 (this.editable) { this.editing.enable(); }\n this.eP = null;\n });\n\n this.fire('add');\n\n L.DomEvent.on(this.getElement(), 'mousemove', this.activateTooltip, this);\n L.DomEvent.on(this.getElement(), 'mouseout', this.closeTooltip, this);\n },\n\n onRemove(map) {\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n\n L.DomEvent.on(this.getElement(), 'mouseout', this.closeTooltip, this);\n L.DomEvent.off(this.getElement(), 'mousemove', this.deactivateTooltip, this);\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 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._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._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 activateTooltip() {\n if (!this._selected) {\n this.bindTooltip(this.tooltipText, {direction: 'top'}).openTooltip();\n }\n },\n\n closeToolTip() {\n this.closeTooltip();\n },\n\n deactivateTooltip() {\n this.unbindTooltip();\n },\n\n getTooltipText() {\n return this.tooltipText;\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 '' +\n '' +\n '' +\n '' +\n '' + \n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '
Rotate Mode
R
RotateScale Mode
r
Scale Mode
s
Distort Mode
d
Drag Mode
D
Lock (Mode) / Unlock Image
l\\xa0u
Stack up / down
q\\xa0a
Add / Remove Image Border
b
Toggle Opacity
o
Deselect All
esc
Delete Image(s)
delete\\xa0backspace
Export Image(s)
e
'\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 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\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n const 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\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n const 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 const tools = this.tools();\n for (let i = 0; i < tools.length; i++) {\n const 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: '',\n\n _symbols: '',\n\n render() {\n this.addSymbols(this._symbols);\n return this._svg;\n },\n\n addSymbols(symbols) {\n this._svg += symbols;\n },\n});\n","L.KeymapperIconSet = L.IconSet.extend({\n\n _symbols:\n // eslint-disable-next-line max-len\n '',\n\n});\n","/* eslint-disable max-len */\nL.ToolbarIconSet = L.IconSet.extend({\n _symbols:\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '',\n});\n","L.Map.mergeOptions({\n boxCollector: true,\n boxZoom: false,\n});\n\n/**\n * primarily Leaflet 1.5.1 source code. Overriden so that it's a collection box used with\n * our `L.DistortableCollection` class instead of a zoom box.\n * */\nL.Map.BoxCollector = L.Map.BoxZoom.extend({\n initialize(map) {\n this._map = map;\n this._container = map._container;\n this._pane = map._panes.overlayPane;\n this._resetStateTimeout = 0;\n map.on('unload', this._destroy, this);\n },\n\n addHooks() {\n L.DomEvent.on(this._container, 'mousedown', this._onMouseDown, this);\n },\n\n removeHooks() {\n L.DomEvent.off(this._container, 'mousedown', this._onMouseDown, this);\n },\n\n moved() {\n return this._moved;\n },\n\n _destroy() {\n L.DomUtil.remove(this._pane);\n delete this._pane;\n },\n\n _resetState() {\n this._resetStateTimeout = 0;\n this._moved = false;\n },\n\n _clearDeferredResetState() {\n if (this._resetStateTimeout !== 0) {\n clearTimeout(this._resetStateTimeout);\n this._resetStateTimeout = 0;\n }\n },\n\n _onMouseDown(e) {\n if (!e.shiftKey || (e.which !== 1 && e.button !== 1)) {\n return false;\n }\n\n // Clear the deferred resetState if it hasn't executed yet, otherwise it\n // will interrupt the interaction and orphan a box element in the container.\n this._clearDeferredResetState();\n this._resetState();\n\n L.DomUtil.disableTextSelection();\n L.DomUtil.disableImageDrag();\n\n this._startPoint = this._map.mouseEventToContainerPoint(e);\n\n L.DomEvent.on(document, {\n contextmenu: L.DomEvent.stop,\n mousemove: this._onMouseMove,\n mouseup: this._onMouseUp,\n }, this);\n },\n\n _onMouseMove(e) {\n if (!this._moved) {\n this._moved = true;\n\n this._box = L.DomUtil.create('div', 'leaflet-zoom-box', this._container);\n L.DomUtil.addClass(this._container, 'leaflet-crosshair');\n\n this._map.fire('boxzoomstart');\n }\n\n this._point = this._map.mouseEventToContainerPoint(e);\n\n this._bounds = L.bounds(this._startPoint, this._point);\n const size = this._bounds.getSize();\n\n L.DomUtil.setPosition(this._box, this._bounds.min);\n\n this._box.style.width = size.x + 'px';\n this._box.style.height = size.y + 'px';\n },\n\n _finish() {\n if (this._moved) {\n L.DomUtil.remove(this._box);\n L.DomUtil.removeClass(this._container, 'leaflet-crosshair');\n }\n\n L.DomUtil.enableTextSelection();\n L.DomUtil.enableImageDrag();\n\n L.DomEvent.off(document, {\n contextmenu: L.DomEvent.stop,\n mousemove: this._onMouseMove,\n mouseup: this._onMouseUp,\n }, this);\n },\n\n _onMouseUp(e) {\n if (e.which !== 1 && e.button !== 1) {\n return;\n }\n\n this._finish();\n\n if (!this._moved) { return; }\n\n // Postpone to next JS tick so internal click event handling\n // still see it as \"moved\".\n this._clearDeferredResetState();\n this._resetStateTimeout = setTimeout(\n L.Util.bind(this._resetState, this), 0);\n\n let bounds = L.latLngBounds(\n this._map.containerPointToLatLng(this._bounds.getBottomLeft()),\n this._map.containerPointToLatLng(this._bounds.getTopRight())\n );\n\n const zoom = this._map.getZoom();\n const center = this._map.getCenter();\n\n // calls the `project` method but 1st updates the pixel origin - see https://github.com/publiclab/Leaflet.DistortableImage/pull/344\n bounds = this._map._latLngBoundsToNewLayerBounds(bounds, zoom, center);\n\n this._map.fire('boxcollectend', {boxCollectBounds: bounds});\n },\n});\n\nL.Map.addInitHook('addHandler', 'boxCollector', L.Map.BoxCollector);\n","L.Map.mergeOptions({\n doubleClickLabels: false,\n});\n\nL.Map.DoubleClickLabels = L.Handler.extend({});\n\nL.Map.addInitHook('addHandler', 'doubleClickLabels', L.Map.DoubleClickLabels);\n","/* eslint-disable max-len */\nL.Map.include({\n\n _clicked: 0,\n\n addGoogleMutant(opts) {\n const url = 'http://mt0.google.com/vt/lyrs=s&x={x}&y={y}&z={z}';\n\n opts = this.mutantOptions = L.extend({\n mutantOpacity: 0.8,\n maxZoom: 24,\n maxNativeZoom: 20,\n minZoom: 0,\n labels: true,\n labelOpacity: 1,\n doubleClickLabels: true,\n }, opts);\n\n if (!opts.labels) {\n this.mutantOptions = L.extend(this.mutantOptions, {\n labelOpacity: opts.labels ? 1 : undefined,\n doubleClickLabels: opts.labels ? true : undefined,\n });\n }\n\n this._googleMutant = L.tileLayer(url, {\n maxZoom: opts.maxZoom,\n maxNativeZoom: opts.maxNativeZoom,\n minZoom: opts.minZoom,\n opacity: opts.mutantOpacity,\n }).addTo(this);\n\n if (opts.labels) { this._addLabels(opts); }\n // shouldn't have this handler at all if there are no labels to toggle\n else {\n this.doubleClickLabels = undefined;\n }\n\n return this;\n },\n\n _addLabels(opts) {\n const url = 'https://stamen-tiles-{s}.a.ssl.fastly.net/toner-labels/{z}/{x}/{y}{r}.{ext}';\n\n if (opts.labelOpacity !== 0 && opts.labelOpacity !== 1) {\n opts.labelOpacity = 1;\n }\n\n this._labels = L.tileLayer(url, {\n attribution: 'Map tiles by Stamen Design, CC BY 3.0 — Map data © OpenStreetMap contributors',\n subdomains: 'abcd',\n interactive: false,\n opacity: opts.labelOpacity,\n maxZoom: opts.maxZoom,\n maxNativeZoom: opts.maxNativeZoom,\n minZoom: opts.minZoom,\n ext: 'png',\n }).addTo(this);\n\n if (this.mutantOptions.doubleClickLabels) {\n this.doubleClickLabels.enable();\n }\n\n return this;\n },\n});\n// start off with doubleClickZoom enabled, doubleClickLabels can later be enabled instead\n// during initialization\nL.Map.addInitHook(function() {\n this.doubleClickLabels.disable();\n this.doubleClickZoom.enable();\n});\n","L.DomUtil = L.extend(L.DomUtil, {\n initTranslation(obj) {\n this.translation = obj;\n },\n\n getMatrixString(m) {\n const is3d = L.Browser.webkit3d || L.Browser.gecko3d || L.Browser.ie3d;\n\n /*\n * Since matrix3d takes a 4*4 matrix, we add in an empty row and column,\n * which act as the identity on the z-axis.\n * See:\n * http://franklinta.com/2014/09/08/computing-css-matrix3d-transforms/\n * https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function#M.C3.B6bius'_homogeneous_coordinates_in_projective_geometry\n */\n const matrix = [\n m[0], m[3], 0, m[6],\n m[1], m[4], 0, m[7],\n 0, 0, 1, 0,\n m[2], m[5], 0, m[8],\n ];\n\n const str = is3d ? 'matrix3d(' + matrix.join(',') + ')' : '';\n\n if (!is3d) {\n console\n .log('Your browser must support 3D CSS transforms' +\n 'in order to use DistortableImageOverlay.');\n }\n\n return str;\n },\n\n toggleClass(el, className) {\n const c = className;\n return this.hasClass(el, c) ?\n this.removeClass(el, c) : this.addClass(el, c);\n },\n\n confirmDelete() {\n return window.confirm(this.translation.confirmImageDelete);\n },\n\n confirmDeletes(n) {\n if (n === 1) { return this.confirmDelete(); }\n\n const translation = this.translation.confirmImagesDeletes;\n let warningMsg = '';\n\n if (typeof translation === 'function') {\n warningMsg = translation(n);\n } else {\n warningMsg = translation;\n }\n\n return window.confirm(warningMsg);\n },\n});\n","L.IconUtil = {\n /* creates an svg elemenet with built in accessibility properties\n * and standardized classes for styling, takes in the fragment\n * identifier (id) of the symbol to reference. note for symplicity\n * we allow providing the icon target with or without the '#' prefix\n */\n create(ref) {\n if (/^#/.test(ref)) {\n ref = ref.replace(/^#/, '');\n }\n\n return (\n '' +\n '' +\n ''\n );\n },\n\n addClassToSvg(container, loader) {\n const svg = container.querySelector('svg');\n\n if (svg) {\n L.DomUtil.addClass(svg, loader);\n }\n },\n\n // finds the use element and toggles its icon reference\n toggleXlink(container, ref1, ref2) {\n if (!/^#/.test(ref1)) {\n ref1 = '#' + ref1;\n }\n if (!/^#/.test(ref2)) {\n ref2 = '#' + ref2;\n }\n\n const use = container.querySelector('use');\n if (use) {\n const toggled = use.getAttribute('xlink:href') === ref1 ? ref2 : ref1;\n use.setAttribute('xlink:href', toggled);\n return toggled;\n }\n return false;\n },\n\n toggleTitle(container, title1, title2) {\n const toggled = container.getAttribute('title') === title1 ? title2 : title1;\n\n container.setAttribute('title', toggled);\n if (container.hasAttribute('aria-label')) {\n container.setAttribute('aria-label', toggled);\n }\n return toggled;\n },\n};\n","L.ImageUtil = {\n\n getCmPerPixel(overlay) {\n const map = overlay._map;\n\n const dist = map\n .latLngToLayerPoint(overlay.getCorner(0))\n .distanceTo(map.latLngToLayerPoint(overlay.getCorner(1)));\n\n return (dist * 100) / overlay.getElement().width;\n },\n};\n","L.MatrixUtil = {\n\n // Compute the adjugate of m\n adj(m) {\n return [\n m[4]*m[8]-m[5]*m[7], m[2]*m[7]-m[1]*m[8], m[1]*m[5]-m[2]*m[4],\n m[5]*m[6]-m[3]*m[8], m[0]*m[8]-m[2]*m[6], m[2]*m[3]-m[0]*m[5],\n m[3]*m[7]-m[4]*m[6], m[1]*m[6]-m[0]*m[7], m[0]*m[4]-m[1]*m[3],\n ];\n },\n\n // multiply two 3*3 matrices\n multmm(a, b) {\n const c = [];\n let i;\n\n for (i = 0; i < 3; i++) {\n for (let j = 0; j < 3; j++) {\n let cij = 0;\n\n for (let k = 0; k < 3; k++) {\n cij += a[3*i + k]*b[3*k + j];\n }\n\n c[3*i + j] = cij;\n }\n }\n\n return c;\n },\n\n // multiply a 3*3 matrix and a 3-vector\n multmv(m, v) {\n return [\n m[0]*v[0] + m[1]*v[1] + m[2]*v[2],\n m[3]*v[0] + m[4]*v[1] + m[5]*v[2],\n m[6]*v[0] + m[7]*v[1] + m[8]*v[2],\n ];\n },\n\n // multiply a scalar and a 3*3 matrix\n multsm(s, m) {\n const matrix = [];\n\n for (let i = 0, l = m.length; i < l; i++) {\n matrix.push(s*m[i]);\n }\n\n return matrix;\n },\n\n basisToPoints(x1, y1, x2, y2, x3, y3, x4, y4) {\n const m = [\n x1, x2, x3,\n y1, y2, y3,\n 1, 1, 1,\n ];\n const v = L.MatrixUtil.multmv(L.MatrixUtil.adj(m), [x4, y4, 1]);\n\n return L.MatrixUtil.multmm(m, [\n v[0], 0, 0,\n 0, v[1], 0,\n 0, 0, v[2],\n ]);\n },\n\n project(m, x, y) {\n const v = L.MatrixUtil.multmv(m, [x, y, 1]);\n\n return [v[0]/v[2], v[1]/v[2]];\n },\n\n general2DProjection(\n x1s, y1s, x1d, y1d,\n x2s, y2s, x2d, y2d,\n x3s, y3s, x3d, y3d,\n x4s, y4s, x4d, y4d\n ) {\n const s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n const d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n const m = L.MatrixUtil.multmm(d, L.MatrixUtil.adj(s));\n\n // Normalize to the unique matrix with m[8] == 1.\n // See: http://franklinta.com/2014/09/08/computing-css-matrix3d-transforms/\n\n return L.MatrixUtil.multsm(1/m[8], m);\n },\n};\n","L.TrigUtil = {\n\n calcAngle(x, y, unit = 'deg') {\n return unit === 'deg' ?\n this.radiansToDegrees(Math.atan2(y, x)) :\n Math.atan2(y, x);\n },\n\n radiansToDegrees(angle) {\n return (angle * 180) / Math.PI;\n },\n\n degreesToRadians(angle) {\n return (angle * Math.PI) / 180;\n },\n};\n","L.Utils = {\n initTranslation() {\n const translation = {\n deleteImage: 'Delete Image',\n deleteImages: 'Delete Images',\n distortImage: 'Distort Image',\n dragImage: 'Drag Image',\n exportImage: 'Export Image',\n exportImages: 'Export Images',\n removeBorder: 'Remove Border',\n addBorder: 'Add Border',\n freeRotateImage: 'Free rotate Image',\n geolocateImage: 'Geolocate Image',\n lockMode: 'Lock Mode',\n lockImages: 'Lock Images',\n makeImageOpaque: 'Make Image Opaque',\n makeImageTransparent: 'Make Image Transparent',\n restoreImage: 'Restore Natural Image',\n rotateImage: 'Rotate Image',\n scaleImage: 'Scale Image',\n stackToFront: 'Stack to Front',\n stackToBack: 'Stack to Back',\n unlockImages: 'Unlock Images',\n confirmImageDelete:\n 'Are you sure? This image will be permanently deleted from the map.',\n confirmImagesDeletes:\n 'Are you sure? These images will be permanently deleted from the map.',\n };\n\n if (!this.options.translation) {\n this.options.translation = translation;\n } else {\n // If the translation for a word is not specified, fallback to English.\n for (const key in translation) {\n if (!this.options.translation.hasOwnProperty(key)) {\n this.options.translation[key] = translation[key];\n }\n }\n }\n\n L.DomUtil.initTranslation(this.options.translation);\n },\n\n getNestedVal(obj, key, nestedKey) {\n const dig = [key, nestedKey];\n return dig.reduce(function(obj, k) {\n return obj && obj[k];\n }, obj);\n },\n};\n","// startup\n// Load entry module and return exports\n__webpack_modules__[999]();\n__webpack_modules__[85]();\n__webpack_modules__[351]();\n__webpack_modules__[360]();\n__webpack_modules__[682]();\n__webpack_modules__[866]();\n__webpack_modules__[477]();\n__webpack_modules__[808]();\n__webpack_modules__[743]();\n__webpack_modules__[988]();\n__webpack_modules__[92]();\n__webpack_modules__[194]();\n__webpack_modules__[206]();\n__webpack_modules__[789]();\n__webpack_modules__[337]();\n__webpack_modules__[350]();\n__webpack_modules__[376]();\n__webpack_modules__[261]();\n__webpack_modules__[929]();\n__webpack_modules__[280]();\n__webpack_modules__[426]();\n__webpack_modules__[114]();\n__webpack_modules__[231]();\n__webpack_modules__[541]();\n__webpack_modules__[149]();\n__webpack_modules__[74]();\n__webpack_modules__[691]();\n__webpack_modules__[105]();\n__webpack_modules__[496]();\n__webpack_modules__[944]();\n__webpack_modules__[954]();\n__webpack_modules__[178]();\n__webpack_modules__[547]();\n__webpack_modules__[886]();\n__webpack_modules__[129]();\n__webpack_modules__[93]();\n__webpack_modules__[719]();\n__webpack_modules__[397]();\n__webpack_modules__[428]();\n// This entry module is referenced by other modules so it can't be inlined\n__webpack_modules__[782]();\n__webpack_modules__[998]();\n__webpack_modules__[291]();\nvar __webpack_exports__ = {};\n__webpack_modules__[131]();\n"],"names":["arr","L","DistortableCollection","FeatureGroup","extend","options","editable","exportOpts","exportStartUrl","statusUrl","exportUrl","initialize","setOptions","this","prototype","call","Utils","initTranslation","onAdd","map","_map","editing","enable","on","_addEvents","_removeEvents","onRemove","disable","off","e","layer","DomEvent","dragstart","_dragStartMultiple","drag","_dragMultiple","getElement","mousedown","_deselectOthers","contextmenu","_longPressMultiSelect","preventDefault","eachLayer","edit","target","enabled","DomUtil","toggleClass","anyCollected","deselect","_addToolbar","_removeToolbar","isCollected","overlay","hasClass","getLayers","some","bind","_toggleCollected","shiftKey","every","each","_leaflet_id","push","splice","indexOf","stopPropagation","i","_dragStartPoints","c","getCorner","latLngToLayerPoint","topLeft","delta","subtract","_updateCollectionFromPoints","_toRemove","filter","mode","_mode","_toMove","layersToMove","p","Transformation","x","y","forEach","movedPoints","transform","setCornersFromPoints","_getAvgCmPerPixel","imgs","reduce","sum","img","cm_per_pixel","length","fetchRemoteJson","url","index","imgCollectionProps","axios","get","response","data","hasOwnProperty","collection","avg_cm_per_pixel","console","log","recreateImagesFromJsonUrl","imageCollectionObj","generateExportJson","allImages","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","id","width","height","tooltipText","getTooltipText","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","interactive","_selected","_url","rotation","_initImage","_reset","_corners","zoomAnimation","Browser","any3d","_animateZoom","getPane","appendChild","_initImageDimensions","units","deg","setAngle","rad","eP","fire","activateTooltip","closeTooltip","deactivateTooltip","originalImageWidth","getStyle","originalImageHeight","aspectRatio","parseInt","imageHeight","imageWidth","center","project","getCenter","offset","point","divideBy","unproject","add","_initialDimensions","getZoom","setBounds","latLngBounds","_singleClick","type","_singleClickListeners","_resetClickListeners","isSelected","_hideMarkers","select","_programmaticGrouping","_showMarkers","setCorner","corner","latlng","toolbar","DistortableImage","PopupBar","_updateToolbarPos","edited","_cornerExceedsMapLats","zoom","crs","Simple","CRS","exceedsTop","exceedsBottom","Math","pow","bindTooltip","direction","openTooltip","closeToolTip","unbindTooltip","setCorners","latlngObj","k","pointsObj","layerPointToLatLng","scaleBy","scale","scaledCorners","multiplyBy","getAngle","unit","matrix","style","TRANSFORM","slice","row0x","row0y","row1x","row1y","determinant","angle","TrigUtil","calcAngle","PI","round","radiansToDegrees","Util","formatNum","currentAngle","angleToRotateBy","rotateBy","q","degreesToRadians","cos","sin","dragBy","formerPoint","newPoint","transCorners","restore","equals","_getTranslateString","is3d","webkit3d","close","image","transformMatrix","_calculateProjectiveTransform","warp","getMatrixString","translation","_leaflet_pos","join","event","latLngToNewLayerPoint","_latLngToNewLayerPoint","agg","latLngToCartesian","j","w","offsetWidth","h","offsetHeight","_subtract","MatrixUtil","general2DProjection","distortableImageOverlay","Map","addInitHook","getContainer","addClass","distortableImage","Keymapper","Handler","position","addHooks","_keymapper","_container","_buildContainer","_scrollWrapper","_wrap","_toggler","_createButton","_setMapper","_toggleKeymapper","disableClickPropagation","disableScrollPropagation","removeHooks","remove","container","create","setAttribute","divider","toggler","innerHTML","IconUtil","wrap","display","button","control","insertAdjacentHTML","addTo","className","toggleTitle","_injectIconSet","document","querySelector","el","_iconset","KeymapperIconSet","render","_n","mobile","keymapper","Edit","keymap","group_action_map","group","_group","_exportOpts","Escape","editActions","actions","runExporter","getNestedVal","startExport","_onKeyDown","doubleClickZoom","doubleClickLabels","_decollectAll","singleclickon","singleclickoff","singleclick","boxcollectend","_addCollections","_enabled","handlerName","key","oe","originalEvent","HTMLImageElement","removeClass","_unlockGroup","hasTool","UnlockAction","_unlock","_lockGroup","LockAction","_lock","box","boxCollectBounds","imgBounds","_latLngBoundsToNewLayerBounds","intersects","_removeGroup","DeleteAction","layersToRemove","n","confirmDeletes","removeLayer","cancelExport","customCollection","undefined","clearInterval","updateInterval","suppressToolbar","controlBar","value","action","addTool","baseClass","removeTool","item","idx","ExportAction","Promise","resolve","opts","frequency","updater","JSON","parse","status_url","match","status","jpg","alert","handleStatusRes","setInterval","req","Request","Date","now","method","fetch","then","res","ok","text","fetchStatusUrl","mergedOpts","form","FormData","append","stringify","reqOpts","body","opacity","outline","action_map","_overlay","_toggledImage","_transparent","_outlined","_opacity","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","Object","keys","_dragHandles","layerGroup","addLayer","dragHandle","_scaleHandles","scaleHandle","_distortHandles","distortHandle","_rotateHandles","rotateHandle","_freeRotateHandles","freeRotateHandle","_lockHandles","lockHandle","draggable","distort","rotate","freeRotate","lock","ov","_updateHandle","currentHandle","setOpacity","dragging","isMode","_enableDragging","replaceTool","old","next","_nextOrNone","getModes","Draggable","_updatePosition","currentPoint","_newPos","_dragMode","setMode","_scaleMode","_distortMode","_rotateMode","_freeRotateMode","_toggleLockMode","_toggleOpacity","OpacityAction","_refresh","_setOpacities","o","OpacitiesAction","_toggleBorder","BorderAction","_toggleOrder","_stackUp","_stackDown","_removeOverlay","confirmDelete","_getExport","downloadable","Image","onload","nw","ne","sw","se","warpWebGl","fullResolutionSrc","StackAction","bringToBack","hasMode","_deselect","getMode","maxLat","raisedPoint","popupBar","setLatLng","newMode","clickTool","modesArray","stop","EditAction","use","tooltip","removeBorder","addBorder","toolbarIcon","svg","html","b","toggleXlink","_link","deleteImage","Backspace","deleteImages","DistortAction","distortImage","d","DragAction","dragImage","D","Toolbar2","Action","_createIcon","args","iconOptions","_icon","constructor","_enableAction","_addSubToolbar","createElement","ToolbarIconSet","parentElement","_disableAction","editAction","isExporting","mouseLeaveSkip","isHooksExecuted","exportImage","exportImages","exportTool","mouseEnterHandler","handleMouseEnter","mouseLeaveHandler","handleMouseLeave","resetState","detachMouseEventListeners","renderExportIcon","setTimeout","attachMouseEventListeners","renderDownloadIcon","element","addEventListener","removeEventListener","renderCancelIcon","firstChild","addClassToSvg","FreeRotateAction","freeRotateImage","f","GeolocateAction","geolocateImage","EXIF","getData","u","l","lockMode","lockImages","opacities","subtoolbarCss","CSSStyleSheet","replaceSync","insertRule","adoptedStyleSheets","isNaN","OpacitiesToolbar2","appendToContainer","m","_calculateDepth","_ul","_disabledEvents","_getActionConstructor","_arguments","subToolbar","link","_hide","makeImageOpaque","makeImageTransparent","RestoreAction","restoreImage","RotateAction","rotateImage","r","ScaleAction","scaleImage","s","stackToFront","stackToBack","a","unlockImages","getAllTags","GPS","GPSLatitude","GPSLongitude","GPSLatitudeRef","GPSLongitudeRef","GPSImgDirectionRef","GPSImgDirection","numerator","denominator","Orientation","GPSAltitude","GPSAltitudeRef","DistortHandle","EditHandle","TYPE","icon","iconUrl","iconSize","iconAnchor","_onHandleDrag","_handled","_corner","getLatLng","updateHandle","DragHandle","formerLatLng","newLatLng","Marker","markerOptions","zIndexOffset","_bindListeners","_unbindListeners","_onHandleDragStart","_onHandleDragEnd","_fireEdit","dragend","_calculateScalingFactor","latlngA","latlngB","centerPoint","formerRadiusSquared","_d2","newRadiusSquared","sqrt","dx","dy","calculateAngleDelta","initialAngle","atan2","FreeRotateHandle","corner1","latLngToContainerPoint","corner2","abs","LockHandle","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","permanent","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","children","name","tool","click","IconSet","Class","_svg","_symbols","addSymbols","symbols","mergeOptions","boxCollector","boxZoom","BoxCollector","BoxZoom","_pane","_panes","overlayPane","_resetStateTimeout","_destroy","_onMouseDown","moved","_moved","_resetState","_clearDeferredResetState","which","disableTextSelection","disableImageDrag","_startPoint","mouseEventToContainerPoint","mousemove","_onMouseMove","_onMouseUp","_box","_point","_bounds","bounds","size","getSize","setPosition","min","_finish","enableTextSelection","enableImageDrag","containerPointToLatLng","getBottomLeft","getTopRight","DoubleClickLabels","include","_clicked","addGoogleMutant","mutantOptions","mutantOpacity","maxZoom","maxNativeZoom","minZoom","labels","labelOpacity","_googleMutant","tileLayer","_addLabels","_labels","attribution","subdomains","ext","obj","gecko3d","ie3d","str","confirm","confirmImageDelete","warningMsg","confirmImagesDeletes","ref","test","replace","loader","ref1","ref2","toggled","getAttribute","title1","title2","hasAttribute","distanceTo","adj","multmm","cij","multmv","v","multsm","basisToPoints","x1","y1","x2","y2","x3","y3","x4","y4","x1s","y1s","x1d","y1d","x2s","y2s","x2d","y2d","x3s","y3s","x3d","y3d","x4s","y4s","x4d","y4d","nestedKey","__webpack_modules__"],"sourceRoot":""} \ No newline at end of file +{"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/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 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 // connects to JSON file and fetches JSON data therein from remote source\n async fetchRemoteJson(url) {\n let index = 0;\n const imgCollectionProps = [];\n\n try {\n const response = await axios.get(url);\n if (response.data.hasOwnProperty('avg_cm_per_pixel')) {\n if (response.data.collection.length > 1) {\n response.data.collection.forEach((data) => {\n imgCollectionProps[index] = data;\n index++;\n });\n return {\n avg_cm_per_pixel: response.data.avg_cm_per_pixel,\n imgCollectionProps,\n };\n }\n imgCollectionProps[index] = response.data.collection;\n\n return {\n avg_cm_per_pixel: response.data.avg_cm_per_pixel,\n imgCollectionProps,\n };\n } else {\n if (response.data.length > 1) {\n response.data.forEach((data) => {\n imgCollectionProps[index] = data;\n index++;\n });\n return {\n imgCollectionProps,\n };\n }\n imgCollectionProps[index] = response.data;\n\n return {\n imgCollectionProps,\n };\n }\n } catch (err) {\n console.log('err', err);\n }\n },\n\n // expects url in this format: https://archive.org/download/mkl-1/mkl-1.json\n async recreateImagesFromJsonUrl(url) {\n let imageCollectionObj = {};\n\n if (url) {\n imageCollectionObj = await this.fetchRemoteJson(url);\n return imageCollectionObj;\n };\n\n return imageCollectionObj;\n },\n\n generateExportJson(allImages = false) {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (allImages || this.isCollected(layer)) {\n const sections = layer._image.src.split('/');\n const filename = sections[sections.length - 1];\n const zc = layer.getCorners();\n\n const corners = [\n {lat: zc[0].lat, lon: zc[0].lng || zc[0].lon},\n {lat: zc[1].lat, lon: zc[1].lng || zc[1].lon},\n {lat: zc[3].lat, lon: zc[3].lng || zc[3].lon},\n {lat: zc[2].lat, lon: zc[2].lng || zc[2].lon},\n ];\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 tooltipText: layer.getTooltipText(),\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 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 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 interactive: true,\n tooltipText: '',\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 this.interactive = this.options.interactive;\n this.tooltipText = this.options.tooltipText;\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 (this.editable) { this.editing.enable(); }\n this.eP = null;\n });\n\n this.fire('add');\n },\n\n onRemove(map) {\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 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._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._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 activateTooltip() {\n if (!this._selected) {\n this.bindTooltip(this.tooltipText, {direction: 'top'}).openTooltip();\n }\n },\n\n closeToolTip() {\n this.closeTooltip();\n },\n\n deactivateTooltip() {\n this.unbindTooltip();\n },\n\n getTooltipText() {\n return this.tooltipText;\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 '' +\n '' +\n '' +\n '' +\n '' + \n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '
Rotate Mode
R
RotateScale Mode
r
Scale Mode
s
Distort Mode
d
Drag Mode
D
Lock (Mode) / Unlock Image
l\\xa0u
Stack up / down
q\\xa0a
Add / Remove Image Border
b
Toggle Opacity
o
Deselect All
esc
Delete Image(s)
delete\\xa0backspace
Export Image(s)
e
'\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 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\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n const 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\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n const 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 const tools = this.tools();\n for (let i = 0; i < tools.length; i++) {\n const 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: '',\n\n _symbols: '',\n\n render() {\n this.addSymbols(this._symbols);\n return this._svg;\n },\n\n addSymbols(symbols) {\n this._svg += symbols;\n },\n});\n","L.KeymapperIconSet = L.IconSet.extend({\n\n _symbols:\n // eslint-disable-next-line max-len\n '',\n\n});\n","/* eslint-disable max-len */\nL.ToolbarIconSet = L.IconSet.extend({\n _symbols:\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '',\n});\n","L.Map.mergeOptions({\n boxCollector: true,\n boxZoom: false,\n});\n\n/**\n * primarily Leaflet 1.5.1 source code. Overriden so that it's a collection box used with\n * our `L.DistortableCollection` class instead of a zoom box.\n * */\nL.Map.BoxCollector = L.Map.BoxZoom.extend({\n initialize(map) {\n this._map = map;\n this._container = map._container;\n this._pane = map._panes.overlayPane;\n this._resetStateTimeout = 0;\n map.on('unload', this._destroy, this);\n },\n\n addHooks() {\n L.DomEvent.on(this._container, 'mousedown', this._onMouseDown, this);\n },\n\n removeHooks() {\n L.DomEvent.off(this._container, 'mousedown', this._onMouseDown, this);\n },\n\n moved() {\n return this._moved;\n },\n\n _destroy() {\n L.DomUtil.remove(this._pane);\n delete this._pane;\n },\n\n _resetState() {\n this._resetStateTimeout = 0;\n this._moved = false;\n },\n\n _clearDeferredResetState() {\n if (this._resetStateTimeout !== 0) {\n clearTimeout(this._resetStateTimeout);\n this._resetStateTimeout = 0;\n }\n },\n\n _onMouseDown(e) {\n if (!e.shiftKey || (e.which !== 1 && e.button !== 1)) {\n return false;\n }\n\n // Clear the deferred resetState if it hasn't executed yet, otherwise it\n // will interrupt the interaction and orphan a box element in the container.\n this._clearDeferredResetState();\n this._resetState();\n\n L.DomUtil.disableTextSelection();\n L.DomUtil.disableImageDrag();\n\n this._startPoint = this._map.mouseEventToContainerPoint(e);\n\n L.DomEvent.on(document, {\n contextmenu: L.DomEvent.stop,\n mousemove: this._onMouseMove,\n mouseup: this._onMouseUp,\n }, this);\n },\n\n _onMouseMove(e) {\n if (!this._moved) {\n this._moved = true;\n\n this._box = L.DomUtil.create('div', 'leaflet-zoom-box', this._container);\n L.DomUtil.addClass(this._container, 'leaflet-crosshair');\n\n this._map.fire('boxzoomstart');\n }\n\n this._point = this._map.mouseEventToContainerPoint(e);\n\n this._bounds = L.bounds(this._startPoint, this._point);\n const size = this._bounds.getSize();\n\n L.DomUtil.setPosition(this._box, this._bounds.min);\n\n this._box.style.width = size.x + 'px';\n this._box.style.height = size.y + 'px';\n },\n\n _finish() {\n if (this._moved) {\n L.DomUtil.remove(this._box);\n L.DomUtil.removeClass(this._container, 'leaflet-crosshair');\n }\n\n L.DomUtil.enableTextSelection();\n L.DomUtil.enableImageDrag();\n\n L.DomEvent.off(document, {\n contextmenu: L.DomEvent.stop,\n mousemove: this._onMouseMove,\n mouseup: this._onMouseUp,\n }, this);\n },\n\n _onMouseUp(e) {\n if (e.which !== 1 && e.button !== 1) {\n return;\n }\n\n this._finish();\n\n if (!this._moved) { return; }\n\n // Postpone to next JS tick so internal click event handling\n // still see it as \"moved\".\n this._clearDeferredResetState();\n this._resetStateTimeout = setTimeout(\n L.Util.bind(this._resetState, this), 0);\n\n let bounds = L.latLngBounds(\n this._map.containerPointToLatLng(this._bounds.getBottomLeft()),\n this._map.containerPointToLatLng(this._bounds.getTopRight())\n );\n\n const zoom = this._map.getZoom();\n const center = this._map.getCenter();\n\n // calls the `project` method but 1st updates the pixel origin - see https://github.com/publiclab/Leaflet.DistortableImage/pull/344\n bounds = this._map._latLngBoundsToNewLayerBounds(bounds, zoom, center);\n\n this._map.fire('boxcollectend', {boxCollectBounds: bounds});\n },\n});\n\nL.Map.addInitHook('addHandler', 'boxCollector', L.Map.BoxCollector);\n","L.Map.mergeOptions({\n doubleClickLabels: false,\n});\n\nL.Map.DoubleClickLabels = L.Handler.extend({\n addHooks(){},\n removeHooks(){}\n});\n\nL.Map.addInitHook('addHandler', 'doubleClickLabels', L.Map.DoubleClickLabels);\n","/* eslint-disable max-len */\nL.Map.include({\n\n _clicked: 0,\n\n addGoogleMutant(opts) {\n const url = 'http://mt0.google.com/vt/lyrs=s&x={x}&y={y}&z={z}';\n\n opts = this.mutantOptions = L.extend({\n mutantOpacity: 0.8,\n maxZoom: 24,\n maxNativeZoom: 20,\n minZoom: 0,\n labels: true,\n labelOpacity: 1,\n doubleClickLabels: true,\n }, opts);\n\n if (!opts.labels) {\n this.mutantOptions = L.extend(this.mutantOptions, {\n labelOpacity: opts.labels ? 1 : undefined,\n doubleClickLabels: opts.labels ? true : undefined,\n });\n }\n\n this._googleMutant = L.tileLayer(url, {\n maxZoom: opts.maxZoom,\n maxNativeZoom: opts.maxNativeZoom,\n minZoom: opts.minZoom,\n opacity: opts.mutantOpacity,\n }).addTo(this);\n\n if (opts.labels) { this._addLabels(opts); }\n // shouldn't have this handler at all if there are no labels to toggle\n else {\n this.doubleClickLabels = undefined;\n }\n\n return this;\n },\n\n _addLabels(opts) {\n const url = 'https://stamen-tiles-{s}.a.ssl.fastly.net/toner-labels/{z}/{x}/{y}{r}.{ext}';\n\n if (opts.labelOpacity !== 0 && opts.labelOpacity !== 1) {\n opts.labelOpacity = 1;\n }\n\n this._labels = L.tileLayer(url, {\n attribution: 'Map tiles by Stamen Design, CC BY 3.0 — Map data © OpenStreetMap contributors',\n subdomains: 'abcd',\n interactive: false,\n opacity: opts.labelOpacity,\n maxZoom: opts.maxZoom,\n maxNativeZoom: opts.maxNativeZoom,\n minZoom: opts.minZoom,\n ext: 'png',\n }).addTo(this);\n\n if (this.mutantOptions.doubleClickLabels) {\n this.doubleClickLabels.enable();\n }\n\n return this;\n },\n});\n// start off with doubleClickZoom enabled, doubleClickLabels can later be enabled instead\n// during initialization\nL.Map.addInitHook(function() {\n this.doubleClickLabels.disable();\n this.doubleClickZoom.enable();\n});\n","L.DomUtil = L.extend(L.DomUtil, {\n initTranslation(obj) {\n this.translation = obj;\n },\n\n getMatrixString(m) {\n const is3d = L.Browser.webkit3d || L.Browser.gecko3d || L.Browser.ie3d;\n\n /*\n * Since matrix3d takes a 4*4 matrix, we add in an empty row and column,\n * which act as the identity on the z-axis.\n * See:\n * http://franklinta.com/2014/09/08/computing-css-matrix3d-transforms/\n * https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function#M.C3.B6bius'_homogeneous_coordinates_in_projective_geometry\n */\n const matrix = [\n m[0], m[3], 0, m[6],\n m[1], m[4], 0, m[7],\n 0, 0, 1, 0,\n m[2], m[5], 0, m[8],\n ];\n\n const str = is3d ? 'matrix3d(' + matrix.join(',') + ')' : '';\n\n if (!is3d) {\n console\n .log('Your browser must support 3D CSS transforms' +\n 'in order to use DistortableImageOverlay.');\n }\n\n return str;\n },\n\n toggleClass(el, className) {\n const c = className;\n return this.hasClass(el, c) ?\n this.removeClass(el, c) : this.addClass(el, c);\n },\n\n confirmDelete() {\n return window.confirm(this.translation.confirmImageDelete);\n },\n\n confirmDeletes(n) {\n if (n === 1) { return this.confirmDelete(); }\n\n const translation = this.translation.confirmImagesDeletes;\n let warningMsg = '';\n\n if (typeof translation === 'function') {\n warningMsg = translation(n);\n } else {\n warningMsg = translation;\n }\n\n return window.confirm(warningMsg);\n },\n});\n","L.IconUtil = {\n /* creates an svg elemenet with built in accessibility properties\n * and standardized classes for styling, takes in the fragment\n * identifier (id) of the symbol to reference. note for symplicity\n * we allow providing the icon target with or without the '#' prefix\n */\n create(ref) {\n if (/^#/.test(ref)) {\n ref = ref.replace(/^#/, '');\n }\n\n return (\n '' +\n '' +\n ''\n );\n },\n\n addClassToSvg(container, loader) {\n const svg = container.querySelector('svg');\n\n if (svg) {\n L.DomUtil.addClass(svg, loader);\n }\n },\n\n // finds the use element and toggles its icon reference\n toggleXlink(container, ref1, ref2) {\n if (!/^#/.test(ref1)) {\n ref1 = '#' + ref1;\n }\n if (!/^#/.test(ref2)) {\n ref2 = '#' + ref2;\n }\n\n const use = container.querySelector('use');\n if (use) {\n const toggled = use.getAttribute('xlink:href') === ref1 ? ref2 : ref1;\n use.setAttribute('xlink:href', toggled);\n return toggled;\n }\n return false;\n },\n\n toggleTitle(container, title1, title2) {\n const toggled = container.getAttribute('title') === title1 ? title2 : title1;\n\n container.setAttribute('title', toggled);\n if (container.hasAttribute('aria-label')) {\n container.setAttribute('aria-label', toggled);\n }\n return toggled;\n },\n};\n","L.ImageUtil = {\n\n getCmPerPixel(overlay) {\n const map = overlay._map;\n\n const dist = map\n .latLngToLayerPoint(overlay.getCorner(0))\n .distanceTo(map.latLngToLayerPoint(overlay.getCorner(1)));\n\n return (dist * 100) / overlay.getElement().width;\n },\n};\n","L.MatrixUtil = {\n\n // Compute the adjugate of m\n adj(m) {\n return [\n m[4]*m[8]-m[5]*m[7], m[2]*m[7]-m[1]*m[8], m[1]*m[5]-m[2]*m[4],\n m[5]*m[6]-m[3]*m[8], m[0]*m[8]-m[2]*m[6], m[2]*m[3]-m[0]*m[5],\n m[3]*m[7]-m[4]*m[6], m[1]*m[6]-m[0]*m[7], m[0]*m[4]-m[1]*m[3],\n ];\n },\n\n // multiply two 3*3 matrices\n multmm(a, b) {\n const c = [];\n let i;\n\n for (i = 0; i < 3; i++) {\n for (let j = 0; j < 3; j++) {\n let cij = 0;\n\n for (let k = 0; k < 3; k++) {\n cij += a[3*i + k]*b[3*k + j];\n }\n\n c[3*i + j] = cij;\n }\n }\n\n return c;\n },\n\n // multiply a 3*3 matrix and a 3-vector\n multmv(m, v) {\n return [\n m[0]*v[0] + m[1]*v[1] + m[2]*v[2],\n m[3]*v[0] + m[4]*v[1] + m[5]*v[2],\n m[6]*v[0] + m[7]*v[1] + m[8]*v[2],\n ];\n },\n\n // multiply a scalar and a 3*3 matrix\n multsm(s, m) {\n const matrix = [];\n\n for (let i = 0, l = m.length; i < l; i++) {\n matrix.push(s*m[i]);\n }\n\n return matrix;\n },\n\n basisToPoints(x1, y1, x2, y2, x3, y3, x4, y4) {\n const m = [\n x1, x2, x3,\n y1, y2, y3,\n 1, 1, 1,\n ];\n const v = L.MatrixUtil.multmv(L.MatrixUtil.adj(m), [x4, y4, 1]);\n\n return L.MatrixUtil.multmm(m, [\n v[0], 0, 0,\n 0, v[1], 0,\n 0, 0, v[2],\n ]);\n },\n\n project(m, x, y) {\n const v = L.MatrixUtil.multmv(m, [x, y, 1]);\n\n return [v[0]/v[2], v[1]/v[2]];\n },\n\n general2DProjection(\n x1s, y1s, x1d, y1d,\n x2s, y2s, x2d, y2d,\n x3s, y3s, x3d, y3d,\n x4s, y4s, x4d, y4d\n ) {\n const s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n const d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n const m = L.MatrixUtil.multmm(d, L.MatrixUtil.adj(s));\n\n // Normalize to the unique matrix with m[8] == 1.\n // See: http://franklinta.com/2014/09/08/computing-css-matrix3d-transforms/\n\n return L.MatrixUtil.multsm(1/m[8], m);\n },\n};\n","L.TrigUtil = {\n\n calcAngle(x, y, unit = 'deg') {\n return unit === 'deg' ?\n this.radiansToDegrees(Math.atan2(y, x)) :\n Math.atan2(y, x);\n },\n\n radiansToDegrees(angle) {\n return (angle * 180) / Math.PI;\n },\n\n degreesToRadians(angle) {\n return (angle * Math.PI) / 180;\n },\n};\n","L.Utils = {\n initTranslation() {\n const translation = {\n deleteImage: 'Delete Image',\n deleteImages: 'Delete Images',\n distortImage: 'Distort Image',\n dragImage: 'Drag Image',\n exportImage: 'Export Image',\n exportImages: 'Export Images',\n removeBorder: 'Remove Border',\n addBorder: 'Add Border',\n freeRotateImage: 'Free rotate Image',\n geolocateImage: 'Geolocate Image',\n lockMode: 'Lock Mode',\n lockImages: 'Lock Images',\n makeImageOpaque: 'Make Image Opaque',\n makeImageTransparent: 'Make Image Transparent',\n restoreImage: 'Restore Natural Image',\n rotateImage: 'Rotate Image',\n scaleImage: 'Scale Image',\n stackToFront: 'Stack to Front',\n stackToBack: 'Stack to Back',\n unlockImages: 'Unlock Images',\n confirmImageDelete:\n 'Are you sure? This image will be permanently deleted from the map.',\n confirmImagesDeletes:\n 'Are you sure? These images will be permanently deleted from the map.',\n };\n\n if (!this.options.translation) {\n this.options.translation = translation;\n } else {\n // If the translation for a word is not specified, fallback to English.\n for (const key in translation) {\n if (!this.options.translation.hasOwnProperty(key)) {\n this.options.translation[key] = translation[key];\n }\n }\n }\n\n L.DomUtil.initTranslation(this.options.translation);\n },\n\n getNestedVal(obj, key, nestedKey) {\n const dig = [key, nestedKey];\n return dig.reduce(function(obj, k) {\n return obj && obj[k];\n }, obj);\n },\n};\n","// startup\n// Load entry module and return exports\n__webpack_modules__[999]();\n__webpack_modules__[85]();\n__webpack_modules__[351]();\n__webpack_modules__[360]();\n__webpack_modules__[682]();\n__webpack_modules__[866]();\n__webpack_modules__[477]();\n__webpack_modules__[808]();\n__webpack_modules__[743]();\n__webpack_modules__[988]();\n__webpack_modules__[92]();\n__webpack_modules__[194]();\n__webpack_modules__[206]();\n__webpack_modules__[789]();\n__webpack_modules__[337]();\n__webpack_modules__[350]();\n__webpack_modules__[376]();\n__webpack_modules__[261]();\n__webpack_modules__[929]();\n__webpack_modules__[280]();\n__webpack_modules__[426]();\n__webpack_modules__[114]();\n__webpack_modules__[231]();\n__webpack_modules__[541]();\n__webpack_modules__[149]();\n__webpack_modules__[74]();\n__webpack_modules__[691]();\n__webpack_modules__[105]();\n__webpack_modules__[496]();\n__webpack_modules__[944]();\n__webpack_modules__[954]();\n__webpack_modules__[178]();\n__webpack_modules__[547]();\n__webpack_modules__[886]();\n__webpack_modules__[129]();\n__webpack_modules__[93]();\n__webpack_modules__[719]();\n__webpack_modules__[397]();\n__webpack_modules__[428]();\n// This entry module is referenced by other modules so it can't be inlined\n__webpack_modules__[782]();\n__webpack_modules__[998]();\n__webpack_modules__[291]();\nvar __webpack_exports__ = {};\n__webpack_modules__[131]();\n"],"names":["arr","L","DistortableCollection","FeatureGroup","extend","options","editable","exportOpts","exportStartUrl","statusUrl","exportUrl","initialize","setOptions","this","prototype","call","Utils","initTranslation","onAdd","map","_map","editing","enable","on","_addEvents","_removeEvents","onRemove","disable","off","e","layer","DomEvent","dragstart","_dragStartMultiple","drag","_dragMultiple","getElement","mousedown","_deselectOthers","contextmenu","_longPressMultiSelect","preventDefault","eachLayer","edit","target","enabled","DomUtil","toggleClass","anyCollected","deselect","_addToolbar","_removeToolbar","isCollected","overlay","hasClass","getLayers","some","bind","_toggleCollected","shiftKey","every","each","_leaflet_id","push","splice","indexOf","stopPropagation","i","_dragStartPoints","c","getCorner","latLngToLayerPoint","topLeft","delta","subtract","_updateCollectionFromPoints","_toRemove","filter","mode","_mode","_toMove","layersToMove","p","Transformation","x","y","forEach","movedPoints","transform","setCornersFromPoints","_getAvgCmPerPixel","imgs","reduce","sum","img","cm_per_pixel","length","fetchRemoteJson","url","index","imgCollectionProps","axios","get","response","data","hasOwnProperty","collection","avg_cm_per_pixel","console","log","recreateImagesFromJsonUrl","imageCollectionObj","generateExportJson","allImages","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","id","width","height","tooltipText","getTooltipText","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","interactive","_selected","_url","rotation","_initImage","_reset","_corners","zoomAnimation","Browser","any3d","_animateZoom","getPane","appendChild","_initImageDimensions","units","deg","setAngle","rad","eP","fire","originalImageWidth","getStyle","originalImageHeight","aspectRatio","parseInt","imageHeight","imageWidth","center","project","getCenter","offset","point","divideBy","unproject","add","_initialDimensions","getZoom","setBounds","latLngBounds","_singleClick","type","_singleClickListeners","_resetClickListeners","isSelected","_hideMarkers","select","_programmaticGrouping","_showMarkers","setCorner","corner","latlng","toolbar","DistortableImage","PopupBar","_updateToolbarPos","edited","_cornerExceedsMapLats","zoom","crs","Simple","CRS","exceedsTop","exceedsBottom","Math","pow","activateTooltip","bindTooltip","direction","openTooltip","closeToolTip","closeTooltip","deactivateTooltip","unbindTooltip","setCorners","latlngObj","k","pointsObj","layerPointToLatLng","scaleBy","scale","scaledCorners","multiplyBy","getAngle","unit","matrix","style","TRANSFORM","slice","row0x","row0y","row1x","row1y","determinant","angle","TrigUtil","calcAngle","PI","round","radiansToDegrees","Util","formatNum","currentAngle","angleToRotateBy","rotateBy","q","degreesToRadians","cos","sin","dragBy","formerPoint","newPoint","transCorners","restore","equals","_getTranslateString","is3d","webkit3d","close","image","transformMatrix","_calculateProjectiveTransform","warp","getMatrixString","translation","_leaflet_pos","join","event","latLngToNewLayerPoint","_latLngToNewLayerPoint","agg","latLngToCartesian","j","w","offsetWidth","h","offsetHeight","_subtract","MatrixUtil","general2DProjection","distortableImageOverlay","Map","addInitHook","getContainer","addClass","distortableImage","Keymapper","Handler","position","addHooks","_keymapper","_container","_buildContainer","_scrollWrapper","_wrap","_toggler","_createButton","_setMapper","_toggleKeymapper","disableClickPropagation","disableScrollPropagation","removeHooks","remove","container","create","setAttribute","divider","toggler","innerHTML","IconUtil","wrap","display","button","control","insertAdjacentHTML","addTo","className","toggleTitle","_injectIconSet","document","querySelector","el","_iconset","KeymapperIconSet","render","_n","mobile","keymapper","Edit","keymap","group_action_map","group","_group","_exportOpts","Escape","editActions","actions","runExporter","getNestedVal","startExport","_onKeyDown","doubleClickZoom","doubleClickLabels","_decollectAll","singleclickon","singleclickoff","singleclick","boxcollectend","_addCollections","_enabled","handlerName","key","oe","originalEvent","HTMLImageElement","removeClass","_unlockGroup","hasTool","UnlockAction","_unlock","_lockGroup","LockAction","_lock","box","boxCollectBounds","imgBounds","_latLngBoundsToNewLayerBounds","intersects","_removeGroup","DeleteAction","layersToRemove","n","confirmDeletes","removeLayer","cancelExport","customCollection","undefined","clearInterval","updateInterval","suppressToolbar","controlBar","value","action","addTool","baseClass","removeTool","item","idx","ExportAction","Promise","resolve","opts","frequency","updater","JSON","parse","status_url","match","status","jpg","alert","handleStatusRes","setInterval","req","Request","Date","now","method","fetch","then","res","ok","text","fetchStatusUrl","mergedOpts","form","FormData","append","stringify","reqOpts","body","opacity","outline","action_map","_overlay","_toggledImage","_transparent","_outlined","_opacity","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","Object","keys","_dragHandles","layerGroup","addLayer","dragHandle","_scaleHandles","scaleHandle","_distortHandles","distortHandle","_rotateHandles","rotateHandle","_freeRotateHandles","freeRotateHandle","_lockHandles","lockHandle","draggable","distort","rotate","freeRotate","lock","ov","_updateHandle","currentHandle","setOpacity","dragging","isMode","_enableDragging","replaceTool","old","next","_nextOrNone","getModes","Draggable","_updatePosition","currentPoint","_newPos","_dragMode","setMode","_scaleMode","_distortMode","_rotateMode","_freeRotateMode","_toggleLockMode","_toggleOpacity","OpacityAction","_refresh","_setOpacities","o","OpacitiesAction","_toggleBorder","BorderAction","_toggleOrder","_stackUp","_stackDown","_removeOverlay","confirmDelete","_getExport","downloadable","Image","onload","nw","ne","sw","se","warpWebGl","fullResolutionSrc","StackAction","bringToBack","hasMode","_deselect","getMode","maxLat","raisedPoint","popupBar","setLatLng","newMode","clickTool","modesArray","stop","EditAction","use","tooltip","removeBorder","addBorder","toolbarIcon","svg","html","b","toggleXlink","_link","deleteImage","Backspace","deleteImages","DistortAction","distortImage","d","DragAction","dragImage","D","Toolbar2","Action","_createIcon","args","iconOptions","_icon","constructor","_enableAction","_addSubToolbar","createElement","ToolbarIconSet","parentElement","_disableAction","editAction","isExporting","mouseLeaveSkip","isHooksExecuted","exportImage","exportImages","exportTool","mouseEnterHandler","handleMouseEnter","mouseLeaveHandler","handleMouseLeave","resetState","detachMouseEventListeners","renderExportIcon","setTimeout","attachMouseEventListeners","renderDownloadIcon","element","addEventListener","removeEventListener","renderCancelIcon","firstChild","addClassToSvg","FreeRotateAction","freeRotateImage","f","GeolocateAction","geolocateImage","EXIF","getData","u","l","lockMode","lockImages","opacities","subtoolbarCss","CSSStyleSheet","replaceSync","insertRule","adoptedStyleSheets","isNaN","OpacitiesToolbar2","appendToContainer","m","_calculateDepth","_ul","_disabledEvents","_getActionConstructor","_arguments","subToolbar","link","_hide","makeImageOpaque","makeImageTransparent","RestoreAction","restoreImage","RotateAction","rotateImage","r","ScaleAction","scaleImage","s","stackToFront","stackToBack","a","unlockImages","getAllTags","GPS","GPSLatitude","GPSLongitude","GPSLatitudeRef","GPSLongitudeRef","GPSImgDirectionRef","GPSImgDirection","numerator","denominator","Orientation","GPSAltitude","GPSAltitudeRef","DistortHandle","EditHandle","TYPE","icon","iconUrl","iconSize","iconAnchor","_onHandleDrag","_handled","_corner","getLatLng","updateHandle","DragHandle","formerLatLng","newLatLng","Marker","markerOptions","zIndexOffset","_bindListeners","_unbindListeners","_onHandleDragStart","_onHandleDragEnd","_fireEdit","dragend","_calculateScalingFactor","latlngA","latlngB","centerPoint","formerRadiusSquared","_d2","newRadiusSquared","sqrt","dx","dy","calculateAngleDelta","initialAngle","atan2","FreeRotateHandle","corner1","latLngToContainerPoint","corner2","abs","LockHandle","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","permanent","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","children","name","tool","click","IconSet","Class","_svg","_symbols","addSymbols","symbols","mergeOptions","boxCollector","boxZoom","BoxCollector","BoxZoom","_pane","_panes","overlayPane","_resetStateTimeout","_destroy","_onMouseDown","moved","_moved","_resetState","_clearDeferredResetState","which","disableTextSelection","disableImageDrag","_startPoint","mouseEventToContainerPoint","mousemove","_onMouseMove","_onMouseUp","_box","_point","_bounds","bounds","size","getSize","setPosition","min","_finish","enableTextSelection","enableImageDrag","containerPointToLatLng","getBottomLeft","getTopRight","DoubleClickLabels","include","_clicked","addGoogleMutant","mutantOptions","mutantOpacity","maxZoom","maxNativeZoom","minZoom","labels","labelOpacity","_googleMutant","tileLayer","_addLabels","_labels","attribution","subdomains","ext","obj","gecko3d","ie3d","str","confirm","confirmImageDelete","warningMsg","confirmImagesDeletes","ref","test","replace","loader","ref1","ref2","toggled","getAttribute","title1","title2","hasAttribute","distanceTo","adj","multmm","cij","multmv","v","multsm","basisToPoints","x1","y1","x2","y2","x3","y3","x4","y4","x1s","y1s","x1d","y1d","x2s","y2s","x2d","y2d","x3s","y3s","x3d","y3d","x4s","y4s","x4d","y4d","nestedKey","__webpack_modules__"],"sourceRoot":""} \ No newline at end of file diff --git a/examples/js/index.js b/examples/js/index.js index f2ced470a..8c218d4c2 100644 --- a/examples/js/index.js +++ b/examples/js/index.js @@ -2,11 +2,13 @@ let map; (() => { map = L.map('map').setView([51.505, -0.09], 13); - map.addGoogleMutant(); - + // map.addGoogleMutant(); + L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', { + 'attribution': 'Map data © OpenStreetMap contributors' + }).addTo(map) map.whenReady(() => { img = L.distortableImageOverlay('example.jpg', { - selected: true, + selected: false, fullResolutionSrc: 'large.jpg', }).addTo(map); }); diff --git a/package.json b/package.json index 53403f8b6..bfde5e51c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "leaflet-distortableimage", - "version": "0.21.9-falke3", + "version": "0.21.9-falke4", "description": "Leaflet plugin enabling image overlays to be distorted, stretched, and warped (built for Public Lab's MapKnitter: http://publiclab.org).", "engines": { "node": ">=10.0.0" diff --git a/src/DistortableImageOverlay.js b/src/DistortableImageOverlay.js index a33068ac8..6bddb43cf 100644 --- a/src/DistortableImageOverlay.js +++ b/src/DistortableImageOverlay.js @@ -63,9 +63,6 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ }); this.fire('add'); - - L.DomEvent.on(this.getElement(), 'mousemove', this.activateTooltip, this); - L.DomEvent.on(this.getElement(), 'mouseout', this.closeTooltip, this); }, onRemove(map) { @@ -73,9 +70,6 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ this.fire('remove'); L.ImageOverlay.prototype.onRemove.call(this, map); - - L.DomEvent.on(this.getElement(), 'mouseout', this.closeTooltip, this); - L.DomEvent.off(this.getElement(), 'mousemove', this.deactivateTooltip, this); }, _initImageDimensions() { diff --git a/src/mapmixins/DoubleClickLabels.js b/src/mapmixins/DoubleClickLabels.js index 3b50fdba0..aaeb2b913 100644 --- a/src/mapmixins/DoubleClickLabels.js +++ b/src/mapmixins/DoubleClickLabels.js @@ -2,6 +2,9 @@ L.Map.mergeOptions({ doubleClickLabels: false, }); -L.Map.DoubleClickLabels = L.Handler.extend({}); +L.Map.DoubleClickLabels = L.Handler.extend({ + addHooks(){}, + removeHooks(){} +}); L.Map.addInitHook('addHandler', 'doubleClickLabels', L.Map.DoubleClickLabels);