From 2a986c6eaf2895f4435a5c771e02c0a347e4f76f Mon Sep 17 00:00:00 2001 From: Segun Date: Sat, 11 Feb 2023 02:30:00 +0100 Subject: [PATCH] Drag and Drop JSON File to Tile Layer to Reconstruct Saved Map (#1345) * initial work * reconstruct map dnd * dnd integrated into archive.js * update * updates * update * updates * refactored for new json format * update * adjustments * correct positioning of reconstructed map * hot-fix * removed temporary comments --------- Co-authored-by: jywarren --- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- examples/archive.html | 15 ++- examples/js/archive.js | 179 +++++++++++++++++++++++---- examples/js/local.js | 100 ++++++++++++--- src/DistortableCollection.js | 13 +- src/DistortableImageOverlay.js | 4 + 7 files changed, 262 insertions(+), 53 deletions(-) diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index 6f99fe723..e57bf08fb 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 i};var i={},o=Object.prototype,n=o.hasOwnProperty,a=Object.defineProperty||function(t,e,i){t[e]=i.value},r="function"==typeof Symbol?Symbol:{},s=r.iterator||"@@iterator",l=r.asyncIterator||"@@asyncIterator",c=r.toStringTag||"@@toStringTag";function d(t,e,i){return Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{d({},"")}catch(t){d=function(t,e,i){return t[e]=i}}function h(t,e,i,o){var n=e&&e.prototype instanceof g?e:g,r=Object.create(n.prototype),s=new T(o||[]);return a(r,"_invoke",{value:D(t,i,s)}),r}function u(t,e,i){try{return{type:"normal",arg:t.call(e,i)}}catch(t){return{type:"throw",arg:t}}}i.wrap=h;var m={};function g(){}function p(){}function f(){}var v={};d(v,s,(function(){return this}));var _=Object.getPrototypeOf,L=_&&_(_(E([])));L&&L!==o&&n.call(L,s)&&(v=L);var b=f.prototype=g.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,i){function o(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")?i.resolve(h.__await).then((function(t){o("next",t,s,l)}),(function(t){o("throw",t,s,l)})):i.resolve(h).then((function(t){d.value=t,s(d)}),(function(t){return o("throw",t,s,l)}))}l(c.arg)}var r;a(this,"_invoke",{value:function(t,e){function n(){return new i((function(i,n){o(t,e,i,n)}))}return r=r?r.then(n,n):n()}})}function D(t,e,i){var o="suspendedStart";return function(n,a){if("executing"===o)throw new Error("Generator is already running");if("completed"===o){if("throw"===n)throw a;return{value:void 0,done:!0}}for(i.method=n,i.arg=a;;){var r=i.delegate;if(r){var s=M(r,i);if(s){if(s===m)continue;return s}}if("next"===i.method)i.sent=i._sent=i.arg;else if("throw"===i.method){if("suspendedStart"===o)throw o="completed",i.arg;i.dispatchException(i.arg)}else"return"===i.method&&i.abrupt("return",i.arg);o="executing";var l=u(t,e,i);if("normal"===l.type){if(o=i.done?"completed":"suspendedYield",l.arg===m)continue;return{value:l.arg,done:i.done}}"throw"===l.type&&(o="completed",i.method="throw",i.arg=l.arg)}}}function M(t,e){var i=e.method,o=t.iterator[i];if(void 0===o)return e.delegate=null,"throw"===i&&t.iterator.return&&(e.method="return",e.arg=void 0,M(t,e),"throw"===e.method)||"return"!==i&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+i+"' method")),m;var n=u(o,t.iterator,e.arg);if("throw"===n.type)return e.method="throw",e.arg=n.arg,e.delegate=null,m;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,m):a:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,m)}function I(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 A(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function T(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(I,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 i=-1,o=function e(){for(;++i=0;--o){var a=this.tryEntries[o],r=a.completion;if("root"===a.tryLoc)return i("end");if(a.tryLoc<=this.prev){var s=n.call(a,"catchLoc"),l=n.call(a,"finallyLoc");if(s&&l){if(this.prev=0;--i){var o=this.tryEntries[i];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--e){var i=this.tryEntries[e];if(i.finallyLoc===t)return this.complete(i.completion,i.afterLoc),A(i),m}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var i=this.tryEntries[e];if(i.tryLoc===t){var o=i.completion;if("throw"===o.type){var n=o.arg;A(i)}return n}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,i){return this.delegate={iterator:E(t),resultName:e,nextLoc:i},"next"===this.method&&(this.arg=void 0),m}},i}function i(t,e,i,o,n,a,r){try{var s=t[a](r),l=s.value}catch(t){return void i(t)}s.done?e(l):Promise.resolve(l).then(o,n)}function o(t){return function(){var e=this,o=arguments;return new Promise((function(n,a){var r=t.apply(e,o);function s(t){i(r,n,a,s,l,"next",t)}function l(t){i(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(i){var o=i.editing;i.getElement()===t.target&&o.enabled()&&(L.DomUtil.toggleClass(i.getElement(),"collected"),e.anyCollected()?(i.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(i){i.getElement()!==t.target?i.deselect():e._toggleCollected(t,i)})),t&&L.DomEvent.stopPropagation(t))},_dragStartMultiple:function(t){var e,i=t.target,o=this._map;this.isCollected(i)&&this.eachLayer((function(t){for(t._dragStartPoints={},t.deselect(),e=0;e<4;e++){var i=t.getCorner(e);t._dragStartPoints[e]=o.latLngToLayerPoint(i)}}))},_dragMultiple:function(t){var e=t.target,i=this._map;if(this.isCollected(e)){var o=i.latLngToLayerPoint(e.getCorner(0)),n=e._dragStartPoints[0].subtract(o);this._updateCollectionFromPoints(n,e)}},_toRemove:function(){var t=this;return this.getLayers().filter((function(e){var i=e.editing._mode;return t.isCollected(e)&&"lock"!==i}))},_toMove:function(t){var e=this;return this.getLayers().filter((function(i){var o=i.editing._mode;return i!==t&&e.isCollected(i)&&"lock"!==o}))},_updateCollectionFromPoints:function(t,e){var i,o=this._toMove(e),n=new L.Transformation(1,-t.x,1,-t.y);o.forEach((function(t){var e={};for(i=0;i<4;i++)e[i]=n.transform(t._dragStartPoints[i]);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 o(e().mark((function i(){var o,n,a;return e().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return o=0,n=[],e.prev=2,e.next=5,axios.get(t);case 5:if(!((a=e.sent).data.images.length>1)){e.next=9;break}return a.data.images.forEach((function(t){n[o]=t,o++})),e.abrupt("return",{avg_cm_per_pixel:a.data.avg_cm_per_pixel,imgCollectionProps:n});case 9:return n[o]=a.data.images,e.abrupt("return",{avg_cm_per_pixel:a.data.avg_cm_per_pixel,imgCollectionProps:n});case 13:e.prev=13,e.t0=e.catch(2),console.log("err",e.t0);case 16:case"end":return e.stop()}}),i,null,[[2,13]])})))()},recreateImagesFromJsonUrl:function(t){var i=this;return o(e().mark((function o(){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,i.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()}}),o)})))()},generateExportJson:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e={images:[]};return this.eachLayer((function(i){if(t||this.isCollected(i)){var o=i._image.src.split("/"),n=o[o.length-1],a=i.getCorners(),r=[{lat:a[0].lat,lon:a[0].lng},{lat:a[1].lat,lon:a[1].lng},{lat:a[3].lat,lon:a[3].lng},{lat:a[2].lat,lon:a[2].lng}];e.images.push({id:i._leaflet_id,src:i._image.src,width:i._image.width,height:i._image.height,image_file_name:n,nodes:r,cm_per_pixel:L.ImageUtil.getCmPerPixel(i)})}}),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 i=e.options.rotation.deg>=0?"deg":"rad";e.setAngle(e.options.rotation[i],i)}else e.rotation={deg:0,rad:0},e._reset();e._corners||t.options.zoomAnimation&&L.Browser.any3d&&t.on("zoomanim",e._animateZoom,e);var o=e._eventParents;o?(e.eP=o[Object.keys(o)[0]],e.eP.editable&&e.editing.enable()):(e.editable&&e.editing.enable(),e.eP=null)})),L.DomEvent.on(this.getElement(),"click",this.select,this),L.DomEvent.on(t,{singleclickon:this._singleClickListeners,singleclickoff:this._resetClickListeners,singleclick:this._singleClick},this),t.doubleClickZoom.enabled()||t.doubleClickLabels.enabled()||L.DomEvent.on(t,"click",this.deselect,this),this.fire("add"),L.DomEvent.on(this.getElement(),"mousemove",this.activateTooltip,this),L.DomEvent.on(this.getElement(),"mouseout",this.closeTooltip,this)},onRemove:function(t){L.DomEvent.off(this.getElement(),"click",this.select,this),L.DomEvent.off(t,{singleclickon:this._singleClickListeners,singleclickoff:this._resetClickListeners,singleclick:this._singleClick},this),L.DomEvent.off(t,"click",this.deselect,this),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"),i=L.DomUtil.getStyle(this.getElement(),"height"),o=parseInt(e)/parseInt(i),n=this.options.height,a=parseInt(o*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._removeToolbar(),t._hideMarkers(),this._selected=!1,this.fire("deselect"),this},select:function(t){var e=this.editing,i=this.eP;if(e.enabled()){if(t&&L.DomEvent.stopPropagation(t),this._programmaticGrouping(),this._selected=!0,e._addToolbar(),e._showMarkers(),this.fire("select"),!i||!i.anyCollected())return this;this.deselect()}},_programmaticGrouping:function(){this._map.eachLayer((function(t){t instanceof L.DistortableImageOverlay&&t.deselect()}))},setCorner:function(t,e){var i=this.editing;return this._corners[t]=e,this.setBounds(L.latLngBounds(this.getCorners())),this.fire("update"),i.toolbar&&i.toolbar instanceof L.DistortableImage.PopupBar&&i._updateToolbarPos(),this.edited=!0,this},_cornerExceedsMapLats:function(t,e,i){return i.options.crs.Simple!=L.CRS.Simple&&(0===t?(o=i.project(e).y<2,n=i.project(e).y>=255):(o=i.project(e).y/t<2,n=i.project(e).y/Math.pow(2,t)>=255),o||n);var o,n},activateTooltip:function(){this._selected||this.bindTooltip(this.tooltipText,{direction:"top"}).openTooltip()},closeToolTip:function(){this.closeTooltip()},deactivateTooltip:function(){this.unbindTooltip()},setCorners:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t)if(this._cornerExceedsMapLats(i,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"),o.toolbar&&o.toolbar instanceof L.DistortableImage.PopupBar&&o._updateToolbarPos(),this.edited=!0,this},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var r=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,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"),o.toolbar&&o.toolbar instanceof L.DistortableImage.PopupBar&&o._updateToolbarPos(),this.edited=!0,this},scaleBy:function(t){var e,i,o=this._map,n=o.project(this.getCenter()),a={};if(0!==t){for(e=0;e<4;e++)i=o.project(this.getCorner(e)).subtract(n).multiplyBy(t).add(n),a[e]=o.unproject(i);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(","),i=e[0],o=e[1],n=e[4],a=e[5],r=i*a-o*n,s=L.TrigUtil.calcAngle(i,o,"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",i=this.getAngle(e),o=t-i;return this.rotateBy(o,e),this},rotateBy:function(t){var e,i,o,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++)i=a.project(this.getCorner(e)).subtract(r),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),s[e]=a.unproject(o.add(r));return this.setCorners(s),this},dragBy:function(t,e){var i,o,n=this._map,a={},r=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(r),a[i]=n.unproject(o);this.setCorners(a)},restore:function(){for(var t=this._map,e=this._initialDimensions.center,i=this._initialDimensions.offset,o=this._initialDimensions.zoom,n=[e.subtract(i),e.add(L.point(i.x,-i.y)),e.add(L.point(-i.x,i.y)),e.add(i)],a=0;a<4;a++)t.unproject(n[a],o).equals(this.getCorner(a))||this.setCorner(a,t.unproject(n[a],o));return this.edited=!1,this.fire("restore"),this},_getTranslateString:function(t){var e=L.Browser.webkit3d,i=(e?",0":"")+")";return"translate"+(e?"3d":"")+"("+t.x+"px,"+t.y+"px"+i},_reset:function(){var t=this._map,e=this.getElement(),i=L.bind(t.latLngToLayerPoint,t),o=this._calculateProjectiveTransform(i),n=i(this.getCorner(0)),a=L.DomUtil.getMatrixString(o),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,i=this.getElement(),o=function(i){return e._latLngToNewLayerPoint(i,t.zoom,t.center)},n=this._calculateProjectiveTransform(o),a=o(this.getCorner(0)),r=L.DomUtil.getMatrixString(n),s=this._getTranslateString(a);i._leaflet_pos=a,i.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,i){return e.add(t.project(i))}),L.point(0,0));return t.unproject(e.divideBy(4))},_calculateProjectiveTransform:function(t){var e,i=t(this.getCorner(0)),o=this.getElement().offsetWidth||500,n=this.getElement().offsetHeight||375,a=[];for(e=0;e<4;e++)a.push(t(this.getCorner(e))._subtract(i));return L.MatrixUtil.general2DProjection(0,0,a[0].x,a[0].y,o,0,a[1].x,a[1].y,0,n,a[2].x,a[2].y,o,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,i){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(i),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,i=t.boxCollectBounds,o=this._group._map;this._group.eachLayer((function(t){var n=t.editing;t.isSelected()&&t.deselect();var a=o.getZoom(),r=o.getCenter(),s=L.latLngBounds(t.getCorner(2),t.getCorner(1));s=o._latLngBoundsToNewLayerBounds(s,a,r),i.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 i=this._group._toRemove(),o=i.length;0!==o&&(L.DomUtil.confirmDeletes(o)&&(i.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(i,o){return e.editActions[o]===t&&(e._removeToolbar(),e.editActions.splice(o,1),e._addToolbar(),!0)})),this},startExport:function(){var t=this;if(this.hasTool(L.ExportAction))return new Promise((function(e){var i,o=t._exportOpts;o.resolve=e,t.updateInterval=null,t.customCollection=!!o.collection,t.customCollection||(o.collection=t._group.generateExportJson().images),o.frequency=o.frequency||3e3,o.scale=o.scale||100,o.updater=o.updater||function(n){(n=JSON.parse(n)).status_url&&(i!==n.status_url&&n.status_url.match(".json")&&(i=n.status_url),"complete"===n.status&&(clearInterval(t.updateInterval),t.customCollection||(t._exportOpts.collection=void 0),e(),null!==n.jpg&&alert("Export succeeded. "+o.exportUrl+n.jpg)),console.log(n))},o.handleStatusRes=o.handleStatusRes||function(e){i=o.statusUrl+e,t.updateInterval=setInterval((function(){var t=new Request("".concat(i,"?").concat(Date.now()),{method:"GET"});fetch(t).then((function(t){if(t.ok)return t.text()})).then(o.updater)}),o.frequency)},o.fetchStatusUrl=o.fetchStatusUrl||function(t){var e=new FormData;e.append("collection",JSON.stringify(t.collection)),e.append("scale",t.scale),e.append("upload",!0);var i={method:"POST",body:e},o=new Request(t.exportStartUrl,i);fetch(o).then((function(t){if(t.ok)return t.text()})).then(t.handleStatusRes)},o.fetchStatusUrl(o)}))}}),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 i in this._disableDragging(),this.toolbar&&this._removeToolbar(),this._handles)L.DomUtil.remove(i);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],i=this._overlay,o=this.parentGroup;o&&o.anyCollected()||void 0===this[e]||i.options.suppressToolbar||i.isSelected()&&this.toolbar&&this[e].call(this)},replaceTool:function(t,e){var i=this;return"leaflet-toolbar-icon"!==e.baseClass||this.hasTool(e)||this.editActions.some((function(o,n){if(o===t){for(var a in i._removeToolbar(),i.editActions[n]=e,i._addToolbar(),L.DistortableImage.Edit.MODES)L.DistortableImage.Edit.MODES[a]===t?(delete i._modes[a],i._nextOrNone(a)):L.DistortableImage.Edit.MODES[a]===e&&(i._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(i,o){if(i===t){for(var n in e._removeToolbar(),e.editActions.splice(o,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,i=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,o,n=e.getCorner(0),a=this._newPos.subtract(i.latLngToLayerPoint(n)),r={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),r[o]=i.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,i=t.getElement();if(this.hasTool(L.ExportAction)){var o=new Image;o.id=o.id||"tempId12345",document.body.appendChild(o),o.onload=function(){var i=o.height,n=o.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));o.onload=function(){L.DomUtil.remove(o)},window&&window.hasOwnProperty("warpWebGl")&&warpWebGl(o.id,[0,0,n,0,n,i,0,i],[a.x,a.y,r.x,r.y,l.x,l.y,s.x,s.y],!0)},o.src=t.options.fullResolutionSrc||i.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,i=this.parentGroup;this.isMode("lock")&&((!i||i.isCollected(t))&&i||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,i=this.parentGroup;this.isMode("lock")||((!i||i.isCollected(t))&&i||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,i=t._map,o=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=o[a].lat);var r=t.getCenter();r.lat=n,this.toolbar=L.distortableImage.popupBar(r,{actions:this.editActions}).addTo(i,t),t.fire("toolbar:created")}},_refresh:function(){this.toolbar&&this._removeToolbar(),this._addToolbar()},_updateToolbarPos:function(){var t=this._overlay,e=t.getCorners(),i=this.toolbar,o=-1/0;if(i&&i instanceof L.DistortableImage.PopupBar){for(var n=0;no&&(o=e[n].lat);var a=t.getCenter();a.lat=o,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,i=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(),i&&i.isCollected(e)&&e.deselect(),this},nextMode:function(t){var e=this.getMode(),i=this.parentGroup,o=Object.keys(this.getModes()),n=o.indexOf(e),a=o[(n+1)%o.length];if(t){if(i&&i.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,i){var o,n,a=e.editing,r=a._mode;a._outlined?(o="border_outer",n=e.options.translation.removeBorder):(o="border_clear",n=e.options.translation.addBorder),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===r?"disabled":""},L.DistortableImage.action_map.b="lock"===r?"":"_toggleBorder",L.EditAction.prototype.initialize.call(this,t,e,i)},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,i){var o,n=e.editing;n instanceof L.DistortableImage.Edit?(o=e.options.translation.deleteImage,L.DistortableImage.action_map.Backspace="lock"===n._mode?"":"_removeOverlay"):(o=e.options.translation.deleteImages,L.DistortableImage.group_action_map.Backspace="lock"===n._mode?"":"_removeGroup"),(i=i||{}).toolbarIcon={svg:!0,html:"delete_forever",tooltip:o,className:"lock"===n._mode?"disabled":""},L.EditAction.prototype.initialize.call(this,t,e,i)},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,i){(i=i||{}).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,i)},addHooks:function(){this._overlay.editing._distortMode()}})},541:function(){L.DragAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).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,i)},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,i){this._overlay=e,this._map=t,L.setOptions(this,i),L.Toolbar2.Action.prototype.initialize.call(this,i),this._injectIconSet()},_createIcon:function(t,e,i){var o=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=o._link.innerHTML.match(/xlink:href="#restore"/);t&&1===t.length&&o._enableAction()})),this._addSubToolbar(t,this._icon,i)},_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,i){return new L.EditAction(t,e,i)}},149:function(){L.ExportAction=L.EditAction.extend({initialize:function(t,e,i){var o,n=e.editing;this.isExporting=!1,this.mouseLeaveSkip=!0,this.isHooksExecuted=!1,n instanceof L.DistortableImage.Edit?(L.DistortableImage.action_map.e="_getExport",o=e.options.translation.exportImage):(L.DistortableImage.group_action_map.e="runExporter",o=e.options.translation.exportImages),(i=i||{}).toolbarIcon={svg:!0,html:"get_app",tooltip:o},L.EditAction.prototype.initialize.call(this,t,e,i)},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,i){(i=i||{}).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,i)},addHooks:function(){this._overlay.editing._freeRotateMode()}})},691:function(){L.GeolocateAction=L.EditAction.extend({initialize:function(t,e,i){var o=e.editing;(i=i||{}).toolbarIcon={svg:!0,html:"explore",tooltip:e.options.translation.geolocateImage,className:"lock"===o._mode?"disabled":""},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.getElement();EXIF.getData(t,L.EXIF(t))}})},105:function(){L.LockAction=L.EditAction.extend({initialize:function(t,e,i){var o,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,o=a.isMode("lock")?"lock":"unlock"):(L.DistortableImage.group_action_map.l="_lockGroup",n=e.options.translation.lockImages,o="lock"),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"},L.EditAction.prototype.initialize.call(this,t,e,i)},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,i,o,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"],i=0,n=this._disabledEvents.length;ir||a>1?t.scaleBy(a):t.scaleBy(1)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.freeRotateHandle=function(t,e,i){return new L.FreeRotateHandle(t,e,i)}},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,i=e?e.editing:this._handled.editing;if(!t.shiftKey&&(this._handled.isSelected()||!e||e.isCollected(this._handled))){var o=i._lockHandles;this._timer=setTimeout(L.bind((function(){this._timeout&&clearTimeout(this._timeout),this.getTooltip()?o.eachLayer((function(t){this!==t&&t.closeTooltip()})):this.bindTooltip("Locked!",{permanent:!0}),this.openTooltip()}),this),500)}},_tooltipOff:function(t){var e=this._handled.parentGroup,i=e?e.editing:this._handled.editing;if(!t.shiftKey&&(this._handled.isSelected()||!e||e.isCollected(this._handled))){var o=i._lockHandles;t.currentTarget===document&&o.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,i){return new L.LockHandle(t,e,i)}},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),i=this.getLatLng(),o=this.calculateAngleDelta(e,i);t.rotateBy(o,"rad")},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.rotateHandle=function(t,e,i){return new L.RotateHandle(t,e,i)}},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,i=t.edgeMinWidth,o=t.getCorner(this._corner),n=this.getLatLng(),a=this._calculateScalingFactor(o,n);i||(i=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)>i||a>1?t.scaleBy(a):t.scaleBy(1)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.scaleHandle=function(t,e,i){return new L.ScaleHandle(t,e,i)}},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(),i=0;i',_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())),i=this._map.getZoom(),o=this._map.getCenter();e=this._map._latLngBoundsToNewLayerBounds(e,i,o),this._map.fire("boxcollectend",{boxCollectBounds:e})}}}),L.Map.addInitHook("addHandler","boxCollector",L.Map.BoxCollector)},291:function(){L.Map.mergeOptions({doubleClickLabels:!0}),L.Map.DoubleClickLabels=L.Map.DoubleClickZoom.extend({enable:function(){var t=this._map;return this._enabled||(t.doubleClickZoom.enabled()&&t.doubleClickZoom.disable(),this._map.fire("singleclickon"),this._enabled=!0,this.addHooks()),this},disable:function(){return this._enabled?(this._enabled=!1,this.removeHooks(),this):this},_fireIfSingle:function(t){var e=this._map,i=t.originalEvent;i&&i.shiftKey||(e._clicked+=1,this._map._clickTimeout=setTimeout((function(){1===e._clicked?(e._clicked=0,e.fire("singleclick",{type:"singleclick"})):L.Browser.touch&&i&&i.sourceCapabilities.firesTouchEvents&&e.fire("dblclick")}),250))},_onDoubleClick:function(){var t=this._map,e=t._labels;setTimeout((function(){t._clicked=0,clearTimeout(t._clickTimeout)}),0),e&&(1===e.options.opacity?(e.options.opacity=0,e.setOpacity(0)):(e.options.opacity=1,e.setOpacity(1)))}}),L.Map.addInitHook("addHandler","doubleClickLabels",L.Map.DoubleClickLabels)},752:function(){L.Map.DoubleClickZoom.include({addHooks:function(){this._map.on({click:this._fireIfSingle,dblclick:this._onDoubleClick},this)},removeHooks:function(){this._map.off({click:this._fireIfSingle,dblclick:this._onDoubleClick},this)},enable:function(){return this._enabled||this._map.doubleClickLabels&&this._map.doubleClickLabels.enabled()||(this._map.fire("singleclickon"),this._enabled=!0,this.addHooks()),this},disable:function(){return this._enabled?(this._map.fire("singleclickoff"),this._enabled=!1,this.removeHooks(),this):this},_fireIfSingle:function(t){var e=this._map,i=t.originalEvent;i&&i.shiftKey||(e._clicked+=1,this._map._clickTimeout=setTimeout((function(){1===e._clicked?(e._clicked=0,e.fire("singleclick",{type:"singleclick"})):L.Browser.touch&&i&&i.sourceCapabilities.firesTouchEvents&&e._fireDOMEvent(i,"dblclick",[e])}),250))},_onDoubleClick:function(t){var e=this._map,i=t.originalEvent;if(setTimeout((function(){e._clicked=0,clearTimeout(e._clickTimeout)}),0),!i)return!1;var o=e.getZoom(),n=e.options.zoomDelta,a=i.shiftKey?o-n:o+n;"center"===e.options.doubleClickZoom?e.setZoom(a):e.setZoomAround(t.containerPoint,a)}})},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,i=[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]],o=e?"matrix3d("+i.join(",")+")":"";return e||console.log("Your browser must support 3D CSS transformsin order to use DistortableImageOverlay."),o},toggleClass:function(t,e){var i=e;return this.hasClass(t,i)?this.removeClass(t,i):this.addClass(t,i)},confirmDelete:function(){return window.confirm(this.translation.confirmImageDelete)},confirmDeletes:function(t){if(1===t)return this.confirmDelete();var e,i=this.translation.confirmImagesDeletes;return e="function"==typeof i?i(t):i,window.confirm(e)}})},85:function(){L.IconUtil={create:function(t){return/^#/.test(t)&&(t=t.replace(/^#/,"")),''},addClassToSvg:function(t,e){var i=t.querySelector("svg");i&&L.DomUtil.addClass(i,e)},toggleXlink:function(t,e,i){/^#/.test(e)||(e="#"+e),/^#/.test(i)||(i="#"+i);var o=t.querySelector("use");if(o){var n=o.getAttribute("xlink:href")===e?i:e;return o.setAttribute("xlink:href",n),n}return!1},toggleTitle:function(t,e,i){var o=t.getAttribute("title")===e?i:e;return t.setAttribute("title",o),t.hasAttribute("aria-label")&&t.setAttribute("aria-label",o),o}}},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 i,o=[];for(i=0;i<3;i++)for(var n=0;n<3;n++){for(var a=0,r=0;r<3;r++)a+=t[3*i+r]*e[3*r+n];o[3*i+n]=a}return o},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 i=[],o=0,n=e.length;o2&&void 0!==arguments[2]?arguments[2]:"deg";return"deg"===i?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,i){return[e,i].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[752](),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 i};var i={},o=Object.prototype,n=o.hasOwnProperty,a=Object.defineProperty||function(t,e,i){t[e]=i.value},r="function"==typeof Symbol?Symbol:{},s=r.iterator||"@@iterator",l=r.asyncIterator||"@@asyncIterator",c=r.toStringTag||"@@toStringTag";function d(t,e,i){return Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{d({},"")}catch(t){d=function(t,e,i){return t[e]=i}}function h(t,e,i,o){var n=e&&e.prototype instanceof g?e:g,r=Object.create(n.prototype),s=new T(o||[]);return a(r,"_invoke",{value:D(t,i,s)}),r}function u(t,e,i){try{return{type:"normal",arg:t.call(e,i)}}catch(t){return{type:"throw",arg:t}}}i.wrap=h;var m={};function g(){}function p(){}function f(){}var v={};d(v,s,(function(){return this}));var _=Object.getPrototypeOf,L=_&&_(_(E([])));L&&L!==o&&n.call(L,s)&&(v=L);var b=f.prototype=g.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,i){function o(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")?i.resolve(h.__await).then((function(t){o("next",t,s,l)}),(function(t){o("throw",t,s,l)})):i.resolve(h).then((function(t){d.value=t,s(d)}),(function(t){return o("throw",t,s,l)}))}l(c.arg)}var r;a(this,"_invoke",{value:function(t,e){function n(){return new i((function(i,n){o(t,e,i,n)}))}return r=r?r.then(n,n):n()}})}function D(t,e,i){var o="suspendedStart";return function(n,a){if("executing"===o)throw new Error("Generator is already running");if("completed"===o){if("throw"===n)throw a;return{value:void 0,done:!0}}for(i.method=n,i.arg=a;;){var r=i.delegate;if(r){var s=M(r,i);if(s){if(s===m)continue;return s}}if("next"===i.method)i.sent=i._sent=i.arg;else if("throw"===i.method){if("suspendedStart"===o)throw o="completed",i.arg;i.dispatchException(i.arg)}else"return"===i.method&&i.abrupt("return",i.arg);o="executing";var l=u(t,e,i);if("normal"===l.type){if(o=i.done?"completed":"suspendedYield",l.arg===m)continue;return{value:l.arg,done:i.done}}"throw"===l.type&&(o="completed",i.method="throw",i.arg=l.arg)}}}function M(t,e){var i=e.method,o=t.iterator[i];if(void 0===o)return e.delegate=null,"throw"===i&&t.iterator.return&&(e.method="return",e.arg=void 0,M(t,e),"throw"===e.method)||"return"!==i&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+i+"' method")),m;var n=u(o,t.iterator,e.arg);if("throw"===n.type)return e.method="throw",e.arg=n.arg,e.delegate=null,m;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,m):a:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,m)}function I(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 A(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function T(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(I,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 i=-1,o=function e(){for(;++i=0;--o){var a=this.tryEntries[o],r=a.completion;if("root"===a.tryLoc)return i("end");if(a.tryLoc<=this.prev){var s=n.call(a,"catchLoc"),l=n.call(a,"finallyLoc");if(s&&l){if(this.prev=0;--i){var o=this.tryEntries[i];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--e){var i=this.tryEntries[e];if(i.finallyLoc===t)return this.complete(i.completion,i.afterLoc),A(i),m}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var i=this.tryEntries[e];if(i.tryLoc===t){var o=i.completion;if("throw"===o.type){var n=o.arg;A(i)}return n}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,i){return this.delegate={iterator:E(t),resultName:e,nextLoc:i},"next"===this.method&&(this.arg=void 0),m}},i}function i(t,e,i,o,n,a,r){try{var s=t[a](r),l=s.value}catch(t){return void i(t)}s.done?e(l):Promise.resolve(l).then(o,n)}function o(t){return function(){var e=this,o=arguments;return new Promise((function(n,a){var r=t.apply(e,o);function s(t){i(r,n,a,s,l,"next",t)}function l(t){i(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(i){var o=i.editing;i.getElement()===t.target&&o.enabled()&&(L.DomUtil.toggleClass(i.getElement(),"collected"),e.anyCollected()?(i.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(i){i.getElement()!==t.target?i.deselect():e._toggleCollected(t,i)})),t&&L.DomEvent.stopPropagation(t))},_dragStartMultiple:function(t){var e,i=t.target,o=this._map;this.isCollected(i)&&this.eachLayer((function(t){for(t._dragStartPoints={},t.deselect(),e=0;e<4;e++){var i=t.getCorner(e);t._dragStartPoints[e]=o.latLngToLayerPoint(i)}}))},_dragMultiple:function(t){var e=t.target,i=this._map;if(this.isCollected(e)){var o=i.latLngToLayerPoint(e.getCorner(0)),n=e._dragStartPoints[0].subtract(o);this._updateCollectionFromPoints(n,e)}},_toRemove:function(){var t=this;return this.getLayers().filter((function(e){var i=e.editing._mode;return t.isCollected(e)&&"lock"!==i}))},_toMove:function(t){var e=this;return this.getLayers().filter((function(i){var o=i.editing._mode;return i!==t&&e.isCollected(i)&&"lock"!==o}))},_updateCollectionFromPoints:function(t,e){var i,o=this._toMove(e),n=new L.Transformation(1,-t.x,1,-t.y);o.forEach((function(t){var e={};for(i=0;i<4;i++)e[i]=n.transform(t._dragStartPoints[i]);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 o(e().mark((function i(){var o,n,a;return e().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return o=0,n=[],e.prev=2,e.next=5,axios.get(t);case 5:if(!((a=e.sent).data.collection.length>1)){e.next=9;break}return a.data.collection.forEach((function(t){n[o]=t,o++})),e.abrupt("return",{avg_cm_per_pixel:a.data.avg_cm_per_pixel,imgCollectionProps:n});case 9:return n[o]=a.data.collection,e.abrupt("return",{avg_cm_per_pixel:a.data.avg_cm_per_pixel,imgCollectionProps:n});case 13:e.prev=13,e.t0=e.catch(2),console.log("err",e.t0);case 16:case"end":return e.stop()}}),i,null,[[2,13]])})))()},recreateImagesFromJsonUrl:function(t){var i=this;return o(e().mark((function o(){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,i.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()}}),o)})))()},generateExportJson:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e={images:[]};return this.eachLayer((function(i){if(t||this.isCollected(i)){var o=i._image.src.split("/"),n=o[o.length-1],a=i.getCorners(),r=[{lat:a[0].lat,lon:a[0].lng},{lat:a[1].lat,lon:a[1].lng},{lat:a[2].lat,lon:a[2].lng},{lat:a[3].lat,lon:a[3].lng}];e.images.push({id:i._leaflet_id,src:i._image.src,width:i._image.width,height:i._image.height,tooltipText:i.getTooltipText(),image_file_name:n,nodes:r,cm_per_pixel:L.ImageUtil.getCmPerPixel(i)})}}),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 i=e.options.rotation.deg>=0?"deg":"rad";e.setAngle(e.options.rotation[i],i)}else e.rotation={deg:0,rad:0},e._reset();e._corners||t.options.zoomAnimation&&L.Browser.any3d&&t.on("zoomanim",e._animateZoom,e);var o=e._eventParents;o?(e.eP=o[Object.keys(o)[0]],e.eP.editable&&e.editing.enable()):(e.editable&&e.editing.enable(),e.eP=null)})),L.DomEvent.on(this.getElement(),"click",this.select,this),L.DomEvent.on(t,{singleclickon:this._singleClickListeners,singleclickoff:this._resetClickListeners,singleclick:this._singleClick},this),t.doubleClickZoom.enabled()||t.doubleClickLabels.enabled()||L.DomEvent.on(t,"click",this.deselect,this),this.fire("add"),L.DomEvent.on(this.getElement(),"mousemove",this.activateTooltip,this),L.DomEvent.on(this.getElement(),"mouseout",this.closeTooltip,this)},onRemove:function(t){L.DomEvent.off(this.getElement(),"click",this.select,this),L.DomEvent.off(t,{singleclickon:this._singleClickListeners,singleclickoff:this._resetClickListeners,singleclick:this._singleClick},this),L.DomEvent.off(t,"click",this.deselect,this),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"),i=L.DomUtil.getStyle(this.getElement(),"height"),o=parseInt(e)/parseInt(i),n=this.options.height,a=parseInt(o*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._removeToolbar(),t._hideMarkers(),this._selected=!1,this.fire("deselect"),this},select:function(t){var e=this.editing,i=this.eP;if(e.enabled()){if(t&&L.DomEvent.stopPropagation(t),this._programmaticGrouping(),this._selected=!0,e._addToolbar(),e._showMarkers(),this.fire("select"),!i||!i.anyCollected())return this;this.deselect()}},_programmaticGrouping:function(){this._map.eachLayer((function(t){t instanceof L.DistortableImageOverlay&&t.deselect()}))},setCorner:function(t,e){var i=this.editing;return this._corners[t]=e,this.setBounds(L.latLngBounds(this.getCorners())),this.fire("update"),i.toolbar&&i.toolbar instanceof L.DistortableImage.PopupBar&&i._updateToolbarPos(),this.edited=!0,this},_cornerExceedsMapLats:function(t,e,i){return i.options.crs.Simple!=L.CRS.Simple&&(0===t?(o=i.project(e).y<2,n=i.project(e).y>=255):(o=i.project(e).y/t<2,n=i.project(e).y/Math.pow(2,t)>=255),o||n);var o,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,i=e.getZoom(),o=this.editing,n=0;for(var a in t)if(this._cornerExceedsMapLats(i,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"),o.toolbar&&o.toolbar instanceof L.DistortableImage.PopupBar&&o._updateToolbarPos(),this.edited=!0,this},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var r=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,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"),o.toolbar&&o.toolbar instanceof L.DistortableImage.PopupBar&&o._updateToolbarPos(),this.edited=!0,this},scaleBy:function(t){var e,i,o=this._map,n=o.project(this.getCenter()),a={};if(0!==t){for(e=0;e<4;e++)i=o.project(this.getCorner(e)).subtract(n).multiplyBy(t).add(n),a[e]=o.unproject(i);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(","),i=e[0],o=e[1],n=e[4],a=e[5],r=i*a-o*n,s=L.TrigUtil.calcAngle(i,o,"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",i=this.getAngle(e),o=t-i;return this.rotateBy(o,e),this},rotateBy:function(t){var e,i,o,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++)i=a.project(this.getCorner(e)).subtract(r),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),s[e]=a.unproject(o.add(r));return this.setCorners(s),this},dragBy:function(t,e){var i,o,n=this._map,a={},r=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(r),a[i]=n.unproject(o);this.setCorners(a)},restore:function(){for(var t=this._map,e=this._initialDimensions.center,i=this._initialDimensions.offset,o=this._initialDimensions.zoom,n=[e.subtract(i),e.add(L.point(i.x,-i.y)),e.add(L.point(-i.x,i.y)),e.add(i)],a=0;a<4;a++)t.unproject(n[a],o).equals(this.getCorner(a))||this.setCorner(a,t.unproject(n[a],o));return this.edited=!1,this.fire("restore"),this},_getTranslateString:function(t){var e=L.Browser.webkit3d,i=(e?",0":"")+")";return"translate"+(e?"3d":"")+"("+t.x+"px,"+t.y+"px"+i},_reset:function(){var t=this._map,e=this.getElement(),i=L.bind(t.latLngToLayerPoint,t),o=this._calculateProjectiveTransform(i),n=i(this.getCorner(0)),a=L.DomUtil.getMatrixString(o),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,i=this.getElement(),o=function(i){return e._latLngToNewLayerPoint(i,t.zoom,t.center)},n=this._calculateProjectiveTransform(o),a=o(this.getCorner(0)),r=L.DomUtil.getMatrixString(n),s=this._getTranslateString(a);i._leaflet_pos=a,i.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,i){return e.add(t.project(i))}),L.point(0,0));return t.unproject(e.divideBy(4))},_calculateProjectiveTransform:function(t){var e,i=t(this.getCorner(0)),o=this.getElement().offsetWidth||500,n=this.getElement().offsetHeight||375,a=[];for(e=0;e<4;e++)a.push(t(this.getCorner(e))._subtract(i));return L.MatrixUtil.general2DProjection(0,0,a[0].x,a[0].y,o,0,a[1].x,a[1].y,0,n,a[2].x,a[2].y,o,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,i){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(i),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,i=t.boxCollectBounds,o=this._group._map;this._group.eachLayer((function(t){var n=t.editing;t.isSelected()&&t.deselect();var a=o.getZoom(),r=o.getCenter(),s=L.latLngBounds(t.getCorner(2),t.getCorner(1));s=o._latLngBoundsToNewLayerBounds(s,a,r),i.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 i=this._group._toRemove(),o=i.length;0!==o&&(L.DomUtil.confirmDeletes(o)&&(i.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(i,o){return e.editActions[o]===t&&(e._removeToolbar(),e.editActions.splice(o,1),e._addToolbar(),!0)})),this},startExport:function(){var t=this;if(this.hasTool(L.ExportAction))return new Promise((function(e){var i,o=t._exportOpts;o.resolve=e,t.updateInterval=null,t.customCollection=!!o.collection,t.customCollection||(o.collection=t._group.generateExportJson().images),o.frequency=o.frequency||3e3,o.scale=o.scale||100,o.updater=o.updater||function(n){(n=JSON.parse(n)).status_url&&(i!==n.status_url&&n.status_url.match(".json")&&(i=n.status_url),"complete"===n.status&&(clearInterval(t.updateInterval),t.customCollection||(t._exportOpts.collection=void 0),e(),null!==n.jpg&&alert("Export succeeded. "+o.exportUrl+n.jpg)),console.log(n))},o.handleStatusRes=o.handleStatusRes||function(e){i=o.statusUrl+e,t.updateInterval=setInterval((function(){var t=new Request("".concat(i,"?").concat(Date.now()),{method:"GET"});fetch(t).then((function(t){if(t.ok)return t.text()})).then(o.updater)}),o.frequency)},o.fetchStatusUrl=o.fetchStatusUrl||function(t){var e=new FormData;e.append("collection",JSON.stringify(t.collection)),e.append("scale",t.scale),e.append("upload",!0);var i={method:"POST",body:e},o=new Request(t.exportStartUrl,i);fetch(o).then((function(t){if(t.ok)return t.text()})).then(t.handleStatusRes)},o.fetchStatusUrl(o)}))}}),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 i in this._disableDragging(),this.toolbar&&this._removeToolbar(),this._handles)L.DomUtil.remove(i);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],i=this._overlay,o=this.parentGroup;o&&o.anyCollected()||void 0===this[e]||i.options.suppressToolbar||i.isSelected()&&this.toolbar&&this[e].call(this)},replaceTool:function(t,e){var i=this;return"leaflet-toolbar-icon"!==e.baseClass||this.hasTool(e)||this.editActions.some((function(o,n){if(o===t){for(var a in i._removeToolbar(),i.editActions[n]=e,i._addToolbar(),L.DistortableImage.Edit.MODES)L.DistortableImage.Edit.MODES[a]===t?(delete i._modes[a],i._nextOrNone(a)):L.DistortableImage.Edit.MODES[a]===e&&(i._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(i,o){if(i===t){for(var n in e._removeToolbar(),e.editActions.splice(o,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,i=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,o,n=e.getCorner(0),a=this._newPos.subtract(i.latLngToLayerPoint(n)),r={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),r[o]=i.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,i=t.getElement();if(this.hasTool(L.ExportAction)){var o=new Image;o.id=o.id||"tempId12345",document.body.appendChild(o),o.onload=function(){var i=o.height,n=o.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));o.onload=function(){L.DomUtil.remove(o)},window&&window.hasOwnProperty("warpWebGl")&&warpWebGl(o.id,[0,0,n,0,n,i,0,i],[a.x,a.y,r.x,r.y,l.x,l.y,s.x,s.y],!0)},o.src=t.options.fullResolutionSrc||i.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,i=this.parentGroup;this.isMode("lock")&&((!i||i.isCollected(t))&&i||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,i=this.parentGroup;this.isMode("lock")||((!i||i.isCollected(t))&&i||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,i=t._map,o=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=o[a].lat);var r=t.getCenter();r.lat=n,this.toolbar=L.distortableImage.popupBar(r,{actions:this.editActions}).addTo(i,t),t.fire("toolbar:created")}},_refresh:function(){this.toolbar&&this._removeToolbar(),this._addToolbar()},_updateToolbarPos:function(){var t=this._overlay,e=t.getCorners(),i=this.toolbar,o=-1/0;if(i&&i instanceof L.DistortableImage.PopupBar){for(var n=0;no&&(o=e[n].lat);var a=t.getCenter();a.lat=o,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,i=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(),i&&i.isCollected(e)&&e.deselect(),this},nextMode:function(t){var e=this.getMode(),i=this.parentGroup,o=Object.keys(this.getModes()),n=o.indexOf(e),a=o[(n+1)%o.length];if(t){if(i&&i.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,i){var o,n,a=e.editing,r=a._mode;a._outlined?(o="border_outer",n=e.options.translation.removeBorder):(o="border_clear",n=e.options.translation.addBorder),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===r?"disabled":""},L.DistortableImage.action_map.b="lock"===r?"":"_toggleBorder",L.EditAction.prototype.initialize.call(this,t,e,i)},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,i){var o,n=e.editing;n instanceof L.DistortableImage.Edit?(o=e.options.translation.deleteImage,L.DistortableImage.action_map.Backspace="lock"===n._mode?"":"_removeOverlay"):(o=e.options.translation.deleteImages,L.DistortableImage.group_action_map.Backspace="lock"===n._mode?"":"_removeGroup"),(i=i||{}).toolbarIcon={svg:!0,html:"delete_forever",tooltip:o,className:"lock"===n._mode?"disabled":""},L.EditAction.prototype.initialize.call(this,t,e,i)},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,i){(i=i||{}).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,i)},addHooks:function(){this._overlay.editing._distortMode()}})},541:function(){L.DragAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).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,i)},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,i){this._overlay=e,this._map=t,L.setOptions(this,i),L.Toolbar2.Action.prototype.initialize.call(this,i),this._injectIconSet()},_createIcon:function(t,e,i){var o=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=o._link.innerHTML.match(/xlink:href="#restore"/);t&&1===t.length&&o._enableAction()})),this._addSubToolbar(t,this._icon,i)},_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,i){return new L.EditAction(t,e,i)}},149:function(){L.ExportAction=L.EditAction.extend({initialize:function(t,e,i){var o,n=e.editing;this.isExporting=!1,this.mouseLeaveSkip=!0,this.isHooksExecuted=!1,n instanceof L.DistortableImage.Edit?(L.DistortableImage.action_map.e="_getExport",o=e.options.translation.exportImage):(L.DistortableImage.group_action_map.e="runExporter",o=e.options.translation.exportImages),(i=i||{}).toolbarIcon={svg:!0,html:"get_app",tooltip:o},L.EditAction.prototype.initialize.call(this,t,e,i)},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,i){(i=i||{}).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,i)},addHooks:function(){this._overlay.editing._freeRotateMode()}})},691:function(){L.GeolocateAction=L.EditAction.extend({initialize:function(t,e,i){var o=e.editing;(i=i||{}).toolbarIcon={svg:!0,html:"explore",tooltip:e.options.translation.geolocateImage,className:"lock"===o._mode?"disabled":""},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.getElement();EXIF.getData(t,L.EXIF(t))}})},105:function(){L.LockAction=L.EditAction.extend({initialize:function(t,e,i){var o,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,o=a.isMode("lock")?"lock":"unlock"):(L.DistortableImage.group_action_map.l="_lockGroup",n=e.options.translation.lockImages,o="lock"),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"},L.EditAction.prototype.initialize.call(this,t,e,i)},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,i,o,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"],i=0,n=this._disabledEvents.length;ir||a>1?t.scaleBy(a):t.scaleBy(1)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.freeRotateHandle=function(t,e,i){return new L.FreeRotateHandle(t,e,i)}},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,i=e?e.editing:this._handled.editing;if(!t.shiftKey&&(this._handled.isSelected()||!e||e.isCollected(this._handled))){var o=i._lockHandles;this._timer=setTimeout(L.bind((function(){this._timeout&&clearTimeout(this._timeout),this.getTooltip()?o.eachLayer((function(t){this!==t&&t.closeTooltip()})):this.bindTooltip("Locked!",{permanent:!0}),this.openTooltip()}),this),500)}},_tooltipOff:function(t){var e=this._handled.parentGroup,i=e?e.editing:this._handled.editing;if(!t.shiftKey&&(this._handled.isSelected()||!e||e.isCollected(this._handled))){var o=i._lockHandles;t.currentTarget===document&&o.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,i){return new L.LockHandle(t,e,i)}},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),i=this.getLatLng(),o=this.calculateAngleDelta(e,i);t.rotateBy(o,"rad")},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.rotateHandle=function(t,e,i){return new L.RotateHandle(t,e,i)}},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,i=t.edgeMinWidth,o=t.getCorner(this._corner),n=this.getLatLng(),a=this._calculateScalingFactor(o,n);i||(i=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)>i||a>1?t.scaleBy(a):t.scaleBy(1)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.scaleHandle=function(t,e,i){return new L.ScaleHandle(t,e,i)}},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(),i=0;i',_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())),i=this._map.getZoom(),o=this._map.getCenter();e=this._map._latLngBoundsToNewLayerBounds(e,i,o),this._map.fire("boxcollectend",{boxCollectBounds:e})}}}),L.Map.addInitHook("addHandler","boxCollector",L.Map.BoxCollector)},291:function(){L.Map.mergeOptions({doubleClickLabels:!0}),L.Map.DoubleClickLabels=L.Map.DoubleClickZoom.extend({enable:function(){var t=this._map;return this._enabled||(t.doubleClickZoom.enabled()&&t.doubleClickZoom.disable(),this._map.fire("singleclickon"),this._enabled=!0,this.addHooks()),this},disable:function(){return this._enabled?(this._enabled=!1,this.removeHooks(),this):this},_fireIfSingle:function(t){var e=this._map,i=t.originalEvent;i&&i.shiftKey||(e._clicked+=1,this._map._clickTimeout=setTimeout((function(){1===e._clicked?(e._clicked=0,e.fire("singleclick",{type:"singleclick"})):L.Browser.touch&&i&&i.sourceCapabilities.firesTouchEvents&&e.fire("dblclick")}),250))},_onDoubleClick:function(){var t=this._map,e=t._labels;setTimeout((function(){t._clicked=0,clearTimeout(t._clickTimeout)}),0),e&&(1===e.options.opacity?(e.options.opacity=0,e.setOpacity(0)):(e.options.opacity=1,e.setOpacity(1)))}}),L.Map.addInitHook("addHandler","doubleClickLabels",L.Map.DoubleClickLabels)},752:function(){L.Map.DoubleClickZoom.include({addHooks:function(){this._map.on({click:this._fireIfSingle,dblclick:this._onDoubleClick},this)},removeHooks:function(){this._map.off({click:this._fireIfSingle,dblclick:this._onDoubleClick},this)},enable:function(){return this._enabled||this._map.doubleClickLabels&&this._map.doubleClickLabels.enabled()||(this._map.fire("singleclickon"),this._enabled=!0,this.addHooks()),this},disable:function(){return this._enabled?(this._map.fire("singleclickoff"),this._enabled=!1,this.removeHooks(),this):this},_fireIfSingle:function(t){var e=this._map,i=t.originalEvent;i&&i.shiftKey||(e._clicked+=1,this._map._clickTimeout=setTimeout((function(){1===e._clicked?(e._clicked=0,e.fire("singleclick",{type:"singleclick"})):L.Browser.touch&&i&&i.sourceCapabilities.firesTouchEvents&&e._fireDOMEvent(i,"dblclick",[e])}),250))},_onDoubleClick:function(t){var e=this._map,i=t.originalEvent;if(setTimeout((function(){e._clicked=0,clearTimeout(e._clickTimeout)}),0),!i)return!1;var o=e.getZoom(),n=e.options.zoomDelta,a=i.shiftKey?o-n:o+n;"center"===e.options.doubleClickZoom?e.setZoom(a):e.setZoomAround(t.containerPoint,a)}})},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,i=[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]],o=e?"matrix3d("+i.join(",")+")":"";return e||console.log("Your browser must support 3D CSS transformsin order to use DistortableImageOverlay."),o},toggleClass:function(t,e){var i=e;return this.hasClass(t,i)?this.removeClass(t,i):this.addClass(t,i)},confirmDelete:function(){return window.confirm(this.translation.confirmImageDelete)},confirmDeletes:function(t){if(1===t)return this.confirmDelete();var e,i=this.translation.confirmImagesDeletes;return e="function"==typeof i?i(t):i,window.confirm(e)}})},85:function(){L.IconUtil={create:function(t){return/^#/.test(t)&&(t=t.replace(/^#/,"")),''},addClassToSvg:function(t,e){var i=t.querySelector("svg");i&&L.DomUtil.addClass(i,e)},toggleXlink:function(t,e,i){/^#/.test(e)||(e="#"+e),/^#/.test(i)||(i="#"+i);var o=t.querySelector("use");if(o){var n=o.getAttribute("xlink:href")===e?i:e;return o.setAttribute("xlink:href",n),n}return!1},toggleTitle:function(t,e,i){var o=t.getAttribute("title")===e?i:e;return t.setAttribute("title",o),t.hasAttribute("aria-label")&&t.setAttribute("aria-label",o),o}}},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 i,o=[];for(i=0;i<3;i++)for(var n=0;n<3;n++){for(var a=0,r=0;r<3;r++)a+=t[3*i+r]*e[3*r+n];o[3*i+n]=a}return o},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 i=[],o=0,n=e.length;o2&&void 0!==arguments[2]?arguments[2]:"deg";return"deg"===i?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,i){return[e,i].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[752](),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 3437be7d4..fbf0385d9 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/DoubleClickZoom.js","webpack://leaflet-distortableimage/./src/mapmixins/MapMixins.js","webpack://leaflet-distortableimage/./src/util/DomUtil.js","webpack://leaflet-distortableimage/./src/util/IconUtil.js","webpack://leaflet-distortableimage/./src/util/ImageUtil.js","webpack://leaflet-distortableimage/./src/util/MatrixUtil.js","webpack://leaflet-distortableimage/./src/util/TrigUtil.js","webpack://leaflet-distortableimage/./src/util/Utils.js","webpack://leaflet-distortableimage/webpack/startup"],"sourcesContent":["const arr = [];\nL.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n 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.images.length > 1) {\n response.data.images.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.images;\n\n return {\n avg_cm_per_pixel: response.data.avg_cm_per_pixel,\n imgCollectionProps,\n };\n } catch (err) {\n console.log('err', err);\n }\n },\n\n // expects url in this format: https://archive.org/download/segeotest/segeotest.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 const corners = [\n {lat: zc[0].lat, lon: zc[0].lng},\n {lat: zc[1].lat, lon: zc[1].lng},\n {lat: zc[3].lat, lon: zc[3].lng},\n {lat: zc[2].lat, lon: zc[2].lng},\n ];\n json.images.push({\n id: layer._leaflet_id,\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n 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 there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n\n 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 L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n\n 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\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n 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 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: true,\n});\n\n/**\n * The `doubleClickLabels` handler replaces `doubleClickZoom` by default if `#addGoogleMutant`\n * is used unless the options 'labels: false' or 'doubleClickZoom: false` were passed to it.\n */\nL.Map.DoubleClickLabels = L.Map.DoubleClickZoom.extend({\n enable() {\n const map = this._map;\n\n if (this._enabled) { return this; }\n\n // disable 'doubleClickZoom' if 'doubleClickLabels' is enabled.\n if (map.doubleClickZoom.enabled()) {\n map.doubleClickZoom.disable();\n }\n\n this._map.fire('singleclickon');\n\n this._enabled = true;\n this.addHooks();\n return this;\n },\n\n disable() {\n if (!this._enabled) { return this; }\n\n this._enabled = false;\n this.removeHooks();\n\n return this;\n },\n\n _fireIfSingle(e) {\n const map = this._map;\n const oe = e.originalEvent;\n\n // prevents deselection in case of box selector\n if (oe && oe.shiftKey) { return; }\n\n map._clicked += 1;\n this._map._clickTimeout = setTimeout(function() {\n if (map._clicked === 1) {\n map._clicked = 0;\n map.fire('singleclick', {type: 'singleclick'});\n } else {\n // manually fire doubleclick event only for touch screens that don't natively fire it\n if (L.Browser.touch && (oe && oe.sourceCapabilities.firesTouchEvents)) {\n map.fire('dblclick');\n }\n }\n }, 250);\n },\n\n _onDoubleClick() {\n const map = this._map;\n const labels = map._labels;\n\n setTimeout(function() {\n map._clicked = 0;\n clearTimeout(map._clickTimeout);\n }, 0);\n\n if (!labels) { return; }\n\n if (labels.options.opacity === 1) {\n labels.options.opacity = 0;\n labels.setOpacity(0);\n } else {\n labels.options.opacity = 1;\n labels.setOpacity(1);\n }\n },\n});\n\nL.Map.addInitHook('addHandler', 'doubleClickLabels', L.Map.DoubleClickLabels);\n","/**\n * `L.Map.DoubleClickZoom` from leaflet 1.5.1, overrwritten so that it\n * 1) Fires a `singleclick` event to avoid deselecting images on `dblclick`.\n * 2) Maintains a mutually exclusive relationship with the map's `DoubleClickLabels` handler\n */\nL.Map.DoubleClickZoom.include({\n addHooks() {\n this._map.on({\n click: this._fireIfSingle,\n dblclick: this._onDoubleClick,\n }, this);\n },\n\n removeHooks() {\n this._map.off({\n click: this._fireIfSingle,\n dblclick: this._onDoubleClick,\n }, this);\n },\n\n enable() {\n if (this._enabled) { return this; }\n\n // don't enable 'doubleClickZoom' unless 'doubleClickLabels' is disabled first\n if (this._map.doubleClickLabels) {\n if (this._map.doubleClickLabels.enabled()) {\n return this;\n }\n }\n\n // signify to collection/instance classes to turn on 'singleclick' listeners\n this._map.fire('singleclickon');\n\n this._enabled = true;\n this.addHooks();\n return this;\n },\n\n disable() {\n if (!this._enabled) { return this; }\n\n // signify to collection/instance safe to swap 'singleclick' listeners with 'click' listeners.\n this._map.fire('singleclickoff');\n\n this._enabled = false;\n this.removeHooks();\n return this;\n },\n\n _fireIfSingle(e) {\n const map = this._map;\n const oe = e.originalEvent;\n\n // prevents deselection in case of box selector\n if (oe && oe.shiftKey) { return; }\n\n map._clicked += 1;\n this._map._clickTimeout = setTimeout(function() {\n if (map._clicked === 1) {\n map._clicked = 0;\n map.fire('singleclick', {type: 'singleclick'});\n } else {\n // manually fire doubleclick event only for touch screens that don't natively fire it\n if (L.Browser.touch && (oe && oe.sourceCapabilities.firesTouchEvents)) {\n /* in `DoubleClickLabels.js`, we just do map.fire('dblclick') bc `_onDoublClick` doesn't use the\n passed \"e\" (for now). To generate a 'real' DOM event that will have all of its corresponding core\n properties (originalEvent, latlng, etc.), use Leaflet's `#map._fireDOMEvent` (Leaflet 1.5.1 source) */\n map._fireDOMEvent(oe, 'dblclick', [map]);\n }\n }\n }, 250);\n },\n\n _onDoubleClick(e) {\n const map = this._map;\n const oe = e.originalEvent;\n\n setTimeout(function() {\n map._clicked = 0;\n clearTimeout(map._clickTimeout);\n }, 0);\n\n if (!oe) { return false; }\n\n const oldZoom = map.getZoom();\n const delta = map.options.zoomDelta;\n const zoom = oe.shiftKey ? oldZoom - delta : oldZoom + delta;\n\n if (map.options.doubleClickZoom === 'center') {\n map.setZoom(zoom);\n } else {\n map.setZoomAround(e.containerPoint, zoom);\n }\n },\n});\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__[752]();\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","images","avg_cm_per_pixel","console","log","recreateImagesFromJsonUrl","imageCollectionObj","generateExportJson","allImages","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","id","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","interactive","tooltipText","_selected","_url","rotation","_initImage","_reset","_corners","zoomAnimation","Browser","any3d","_animateZoom","getPane","appendChild","_initImageDimensions","units","deg","setAngle","rad","eventParents","_eventParents","eP","Object","keys","select","singleclickon","_singleClickListeners","singleclickoff","_resetClickListeners","singleclick","_singleClick","doubleClickZoom","doubleClickLabels","fire","activateTooltip","closeTooltip","deactivateTooltip","originalImageWidth","getStyle","originalImageHeight","aspectRatio","parseInt","imageHeight","imageWidth","center","project","getCenter","offset","point","divideBy","unproject","add","_initialDimensions","getZoom","setBounds","latLngBounds","type","isSelected","_hideMarkers","_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","_decollectAll","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","collection","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","_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","hasOwnProperty","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","DoubleClickZoom","_fireIfSingle","_clicked","_clickTimeout","touch","sourceCapabilities","firesTouchEvents","_onDoubleClick","labels","_labels","include","_fireDOMEvent","oldZoom","zoomDelta","setZoom","setZoomAround","containerPoint","addGoogleMutant","mutantOptions","mutantOpacity","maxZoom","maxNativeZoom","minZoom","labelOpacity","_googleMutant","tileLayer","_addLabels","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/DoubleClickZoom.js","webpack://leaflet-distortableimage/./src/mapmixins/MapMixins.js","webpack://leaflet-distortableimage/./src/util/DomUtil.js","webpack://leaflet-distortableimage/./src/util/IconUtil.js","webpack://leaflet-distortableimage/./src/util/ImageUtil.js","webpack://leaflet-distortableimage/./src/util/MatrixUtil.js","webpack://leaflet-distortableimage/./src/util/TrigUtil.js","webpack://leaflet-distortableimage/./src/util/Utils.js","webpack://leaflet-distortableimage/webpack/startup"],"sourcesContent":["const arr = [];\nL.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n 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.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 } 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 const corners = [\n {lat: zc[0].lat, lon: zc[0].lng},\n {lat: zc[1].lat, lon: zc[1].lng},\n {lat: zc[2].lat, lon: zc[2].lng},\n {lat: zc[3].lat, lon: zc[3].lng},\n ];\n json.images.push({\n id: layer._leaflet_id,\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n 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 there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n\n 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 L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n\n 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\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n 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: true,\n});\n\n/**\n * The `doubleClickLabels` handler replaces `doubleClickZoom` by default if `#addGoogleMutant`\n * is used unless the options 'labels: false' or 'doubleClickZoom: false` were passed to it.\n */\nL.Map.DoubleClickLabels = L.Map.DoubleClickZoom.extend({\n enable() {\n const map = this._map;\n\n if (this._enabled) { return this; }\n\n // disable 'doubleClickZoom' if 'doubleClickLabels' is enabled.\n if (map.doubleClickZoom.enabled()) {\n map.doubleClickZoom.disable();\n }\n\n this._map.fire('singleclickon');\n\n this._enabled = true;\n this.addHooks();\n return this;\n },\n\n disable() {\n if (!this._enabled) { return this; }\n\n this._enabled = false;\n this.removeHooks();\n\n return this;\n },\n\n _fireIfSingle(e) {\n const map = this._map;\n const oe = e.originalEvent;\n\n // prevents deselection in case of box selector\n if (oe && oe.shiftKey) { return; }\n\n map._clicked += 1;\n this._map._clickTimeout = setTimeout(function() {\n if (map._clicked === 1) {\n map._clicked = 0;\n map.fire('singleclick', {type: 'singleclick'});\n } else {\n // manually fire doubleclick event only for touch screens that don't natively fire it\n if (L.Browser.touch && (oe && oe.sourceCapabilities.firesTouchEvents)) {\n map.fire('dblclick');\n }\n }\n }, 250);\n },\n\n _onDoubleClick() {\n const map = this._map;\n const labels = map._labels;\n\n setTimeout(function() {\n map._clicked = 0;\n clearTimeout(map._clickTimeout);\n }, 0);\n\n if (!labels) { return; }\n\n if (labels.options.opacity === 1) {\n labels.options.opacity = 0;\n labels.setOpacity(0);\n } else {\n labels.options.opacity = 1;\n labels.setOpacity(1);\n }\n },\n});\n\nL.Map.addInitHook('addHandler', 'doubleClickLabels', L.Map.DoubleClickLabels);\n","/**\n * `L.Map.DoubleClickZoom` from leaflet 1.5.1, overrwritten so that it\n * 1) Fires a `singleclick` event to avoid deselecting images on `dblclick`.\n * 2) Maintains a mutually exclusive relationship with the map's `DoubleClickLabels` handler\n */\nL.Map.DoubleClickZoom.include({\n addHooks() {\n this._map.on({\n click: this._fireIfSingle,\n dblclick: this._onDoubleClick,\n }, this);\n },\n\n removeHooks() {\n this._map.off({\n click: this._fireIfSingle,\n dblclick: this._onDoubleClick,\n }, this);\n },\n\n enable() {\n if (this._enabled) { return this; }\n\n // don't enable 'doubleClickZoom' unless 'doubleClickLabels' is disabled first\n if (this._map.doubleClickLabels) {\n if (this._map.doubleClickLabels.enabled()) {\n return this;\n }\n }\n\n // signify to collection/instance classes to turn on 'singleclick' listeners\n this._map.fire('singleclickon');\n\n this._enabled = true;\n this.addHooks();\n return this;\n },\n\n disable() {\n if (!this._enabled) { return this; }\n\n // signify to collection/instance safe to swap 'singleclick' listeners with 'click' listeners.\n this._map.fire('singleclickoff');\n\n this._enabled = false;\n this.removeHooks();\n return this;\n },\n\n _fireIfSingle(e) {\n const map = this._map;\n const oe = e.originalEvent;\n\n // prevents deselection in case of box selector\n if (oe && oe.shiftKey) { return; }\n\n map._clicked += 1;\n this._map._clickTimeout = setTimeout(function() {\n if (map._clicked === 1) {\n map._clicked = 0;\n map.fire('singleclick', {type: 'singleclick'});\n } else {\n // manually fire doubleclick event only for touch screens that don't natively fire it\n if (L.Browser.touch && (oe && oe.sourceCapabilities.firesTouchEvents)) {\n /* in `DoubleClickLabels.js`, we just do map.fire('dblclick') bc `_onDoublClick` doesn't use the\n passed \"e\" (for now). To generate a 'real' DOM event that will have all of its corresponding core\n properties (originalEvent, latlng, etc.), use Leaflet's `#map._fireDOMEvent` (Leaflet 1.5.1 source) */\n map._fireDOMEvent(oe, 'dblclick', [map]);\n }\n }\n }, 250);\n },\n\n _onDoubleClick(e) {\n const map = this._map;\n const oe = e.originalEvent;\n\n setTimeout(function() {\n map._clicked = 0;\n clearTimeout(map._clickTimeout);\n }, 0);\n\n if (!oe) { return false; }\n\n const oldZoom = map.getZoom();\n const delta = map.options.zoomDelta;\n const zoom = oe.shiftKey ? oldZoom - delta : oldZoom + delta;\n\n if (map.options.doubleClickZoom === 'center') {\n map.setZoom(zoom);\n } else {\n map.setZoomAround(e.containerPoint, zoom);\n }\n },\n});\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__[752]();\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","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","eventParents","_eventParents","eP","Object","keys","select","singleclickon","_singleClickListeners","singleclickoff","_resetClickListeners","singleclick","_singleClick","doubleClickZoom","doubleClickLabels","fire","activateTooltip","closeTooltip","deactivateTooltip","originalImageWidth","getStyle","originalImageHeight","aspectRatio","parseInt","imageHeight","imageWidth","center","project","getCenter","offset","point","divideBy","unproject","add","_initialDimensions","getZoom","setBounds","latLngBounds","type","isSelected","_hideMarkers","_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","_decollectAll","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","_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","hasOwnProperty","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","DoubleClickZoom","_fireIfSingle","_clicked","_clickTimeout","touch","sourceCapabilities","firesTouchEvents","_onDoubleClick","labels","_labels","include","_fireDOMEvent","oldZoom","zoomDelta","setZoom","setZoomAround","containerPoint","addGoogleMutant","mutantOptions","mutantOpacity","maxZoom","maxNativeZoom","minZoom","labelOpacity","_googleMutant","tileLayer","_addLabels","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/archive.html b/examples/archive.html index 8e02f3914..45a5bd1a3 100644 --- a/examples/archive.html +++ b/examples/archive.html @@ -26,7 +26,7 @@ -